model.go 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. package controller
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "one-api/dto"
  6. )
  7. // https://platform.openai.com/docs/api-reference/models/list
  8. type OpenAIModelPermission struct {
  9. Id string `json:"id"`
  10. Object string `json:"object"`
  11. Created int `json:"created"`
  12. AllowCreateEngine bool `json:"allow_create_engine"`
  13. AllowSampling bool `json:"allow_sampling"`
  14. AllowLogprobs bool `json:"allow_logprobs"`
  15. AllowSearchIndices bool `json:"allow_search_indices"`
  16. AllowView bool `json:"allow_view"`
  17. AllowFineTuning bool `json:"allow_fine_tuning"`
  18. Organization string `json:"organization"`
  19. Group *string `json:"group"`
  20. IsBlocking bool `json:"is_blocking"`
  21. }
  22. type OpenAIModels struct {
  23. Id string `json:"id"`
  24. Object string `json:"object"`
  25. Created int `json:"created"`
  26. OwnedBy string `json:"owned_by"`
  27. Permission []OpenAIModelPermission `json:"permission"`
  28. Root string `json:"root"`
  29. Parent *string `json:"parent"`
  30. }
  31. var openAIModels []OpenAIModels
  32. var openAIModelsMap map[string]OpenAIModels
  33. func init() {
  34. var permission []OpenAIModelPermission
  35. permission = append(permission, OpenAIModelPermission{
  36. Id: "modelperm-LwHkVFn8AcMItP432fKKDIKJ",
  37. Object: "model_permission",
  38. Created: 1626777600,
  39. AllowCreateEngine: true,
  40. AllowSampling: true,
  41. AllowLogprobs: true,
  42. AllowSearchIndices: false,
  43. AllowView: true,
  44. AllowFineTuning: false,
  45. Organization: "*",
  46. Group: nil,
  47. IsBlocking: false,
  48. })
  49. // https://platform.openai.com/docs/models/model-endpoint-compatibility
  50. openAIModels = []OpenAIModels{
  51. {
  52. Id: "midjourney",
  53. Object: "model",
  54. Created: 1677649963,
  55. OwnedBy: "Midjourney",
  56. Permission: permission,
  57. Root: "midjourney",
  58. Parent: nil,
  59. },
  60. {
  61. Id: "dall-e-2",
  62. Object: "model",
  63. Created: 1677649963,
  64. OwnedBy: "openai",
  65. Permission: permission,
  66. Root: "dall-e-2",
  67. Parent: nil,
  68. },
  69. {
  70. Id: "dall-e-3",
  71. Object: "model",
  72. Created: 1677649963,
  73. OwnedBy: "openai",
  74. Permission: permission,
  75. Root: "dall-e-3",
  76. Parent: nil,
  77. },
  78. {
  79. Id: "whisper-1",
  80. Object: "model",
  81. Created: 1677649963,
  82. OwnedBy: "openai",
  83. Permission: permission,
  84. Root: "whisper-1",
  85. Parent: nil,
  86. },
  87. {
  88. Id: "tts-1",
  89. Object: "model",
  90. Created: 1677649963,
  91. OwnedBy: "openai",
  92. Permission: permission,
  93. Root: "tts-1",
  94. Parent: nil,
  95. },
  96. {
  97. Id: "tts-1-1106",
  98. Object: "model",
  99. Created: 1677649963,
  100. OwnedBy: "openai",
  101. Permission: permission,
  102. Root: "tts-1-1106",
  103. Parent: nil,
  104. },
  105. {
  106. Id: "tts-1-hd",
  107. Object: "model",
  108. Created: 1677649963,
  109. OwnedBy: "openai",
  110. Permission: permission,
  111. Root: "tts-1-hd",
  112. Parent: nil,
  113. },
  114. {
  115. Id: "tts-1-hd-1106",
  116. Object: "model",
  117. Created: 1677649963,
  118. OwnedBy: "openai",
  119. Permission: permission,
  120. Root: "tts-1-hd-1106",
  121. Parent: nil,
  122. },
  123. {
  124. Id: "gpt-3.5-turbo",
  125. Object: "model",
  126. Created: 1677649963,
  127. OwnedBy: "openai",
  128. Permission: permission,
  129. Root: "gpt-3.5-turbo",
  130. Parent: nil,
  131. },
  132. {
  133. Id: "gpt-3.5-turbo-0301",
  134. Object: "model",
  135. Created: 1677649963,
  136. OwnedBy: "openai",
  137. Permission: permission,
  138. Root: "gpt-3.5-turbo-0301",
  139. Parent: nil,
  140. },
  141. {
  142. Id: "gpt-3.5-turbo-0613",
  143. Object: "model",
  144. Created: 1677649963,
  145. OwnedBy: "openai",
  146. Permission: permission,
  147. Root: "gpt-3.5-turbo-0613",
  148. Parent: nil,
  149. },
  150. {
  151. Id: "gpt-3.5-turbo-16k",
  152. Object: "model",
  153. Created: 1677649963,
  154. OwnedBy: "openai",
  155. Permission: permission,
  156. Root: "gpt-3.5-turbo-16k",
  157. Parent: nil,
  158. },
  159. {
  160. Id: "gpt-3.5-turbo-16k-0613",
  161. Object: "model",
  162. Created: 1677649963,
  163. OwnedBy: "openai",
  164. Permission: permission,
  165. Root: "gpt-3.5-turbo-16k-0613",
  166. Parent: nil,
  167. },
  168. {
  169. Id: "gpt-3.5-turbo-1106",
  170. Object: "model",
  171. Created: 1699593571,
  172. OwnedBy: "openai",
  173. Permission: permission,
  174. Root: "gpt-3.5-turbo-1106",
  175. Parent: nil,
  176. },
  177. {
  178. Id: "gpt-3.5-turbo-0125",
  179. Object: "model",
  180. Created: 1706232090,
  181. OwnedBy: "openai",
  182. Permission: permission,
  183. Root: "gpt-3.5-turbo-0125",
  184. Parent: nil,
  185. },
  186. {
  187. Id: "gpt-3.5-turbo-instruct",
  188. Object: "model",
  189. Created: 1677649963,
  190. OwnedBy: "openai",
  191. Permission: permission,
  192. Root: "gpt-3.5-turbo-instruct",
  193. Parent: nil,
  194. },
  195. {
  196. Id: "gpt-4",
  197. Object: "model",
  198. Created: 1677649963,
  199. OwnedBy: "openai",
  200. Permission: permission,
  201. Root: "gpt-4",
  202. Parent: nil,
  203. },
  204. {
  205. Id: "gpt-4-0314",
  206. Object: "model",
  207. Created: 1677649963,
  208. OwnedBy: "openai",
  209. Permission: permission,
  210. Root: "gpt-4-0314",
  211. Parent: nil,
  212. },
  213. {
  214. Id: "gpt-4-0613",
  215. Object: "model",
  216. Created: 1677649963,
  217. OwnedBy: "openai",
  218. Permission: permission,
  219. Root: "gpt-4-0613",
  220. Parent: nil,
  221. },
  222. {
  223. Id: "gpt-4-32k",
  224. Object: "model",
  225. Created: 1677649963,
  226. OwnedBy: "openai",
  227. Permission: permission,
  228. Root: "gpt-4-32k",
  229. Parent: nil,
  230. },
  231. {
  232. Id: "gpt-4-32k-0314",
  233. Object: "model",
  234. Created: 1677649963,
  235. OwnedBy: "openai",
  236. Permission: permission,
  237. Root: "gpt-4-32k-0314",
  238. Parent: nil,
  239. },
  240. {
  241. Id: "gpt-4-32k-0613",
  242. Object: "model",
  243. Created: 1677649963,
  244. OwnedBy: "openai",
  245. Permission: permission,
  246. Root: "gpt-4-32k-0613",
  247. Parent: nil,
  248. },
  249. {
  250. Id: "gpt-4-1106-preview",
  251. Object: "model",
  252. Created: 1699593571,
  253. OwnedBy: "openai",
  254. Permission: permission,
  255. Root: "gpt-4-1106-preview",
  256. Parent: nil,
  257. },
  258. {
  259. Id: "gpt-4-0125-preview",
  260. Object: "model",
  261. Created: 1699593571,
  262. OwnedBy: "openai",
  263. Permission: permission,
  264. Root: "gpt-4-0125-preview",
  265. Parent: nil,
  266. },
  267. {
  268. Id: "gpt-4-turbo-preview",
  269. Object: "model",
  270. Created: 1699593571,
  271. OwnedBy: "openai",
  272. Permission: permission,
  273. Root: "gpt-4-turbo-preview",
  274. Parent: nil,
  275. },
  276. {
  277. Id: "gpt-4-vision-preview",
  278. Object: "model",
  279. Created: 1699593571,
  280. OwnedBy: "openai",
  281. Permission: permission,
  282. Root: "gpt-4-vision-preview",
  283. Parent: nil,
  284. },
  285. {
  286. Id: "gpt-4-1106-vision-preview",
  287. Object: "model",
  288. Created: 1699593571,
  289. OwnedBy: "openai",
  290. Permission: permission,
  291. Root: "gpt-4-1106-vision-preview",
  292. Parent: nil,
  293. },
  294. {
  295. Id: "text-embedding-3-small",
  296. Object: "model",
  297. Created: 1677649963,
  298. OwnedBy: "openai",
  299. Permission: permission,
  300. Root: "text-embedding-ada-002",
  301. Parent: nil,
  302. },
  303. {
  304. Id: "text-embedding-3-large",
  305. Object: "model",
  306. Created: 1677649963,
  307. OwnedBy: "openai",
  308. Permission: permission,
  309. Root: "text-embedding-ada-002",
  310. Parent: nil,
  311. },
  312. {
  313. Id: "text-embedding-ada-002",
  314. Object: "model",
  315. Created: 1677649963,
  316. OwnedBy: "openai",
  317. Permission: permission,
  318. Root: "text-embedding-ada-002",
  319. Parent: nil,
  320. },
  321. {
  322. Id: "text-davinci-003",
  323. Object: "model",
  324. Created: 1677649963,
  325. OwnedBy: "openai",
  326. Permission: permission,
  327. Root: "text-davinci-003",
  328. Parent: nil,
  329. },
  330. {
  331. Id: "text-davinci-002",
  332. Object: "model",
  333. Created: 1677649963,
  334. OwnedBy: "openai",
  335. Permission: permission,
  336. Root: "text-davinci-002",
  337. Parent: nil,
  338. },
  339. {
  340. Id: "text-curie-001",
  341. Object: "model",
  342. Created: 1677649963,
  343. OwnedBy: "openai",
  344. Permission: permission,
  345. Root: "text-curie-001",
  346. Parent: nil,
  347. },
  348. {
  349. Id: "text-babbage-001",
  350. Object: "model",
  351. Created: 1677649963,
  352. OwnedBy: "openai",
  353. Permission: permission,
  354. Root: "text-babbage-001",
  355. Parent: nil,
  356. },
  357. {
  358. Id: "text-ada-001",
  359. Object: "model",
  360. Created: 1677649963,
  361. OwnedBy: "openai",
  362. Permission: permission,
  363. Root: "text-ada-001",
  364. Parent: nil,
  365. },
  366. {
  367. Id: "text-moderation-latest",
  368. Object: "model",
  369. Created: 1677649963,
  370. OwnedBy: "openai",
  371. Permission: permission,
  372. Root: "text-moderation-latest",
  373. Parent: nil,
  374. },
  375. {
  376. Id: "text-moderation-stable",
  377. Object: "model",
  378. Created: 1677649963,
  379. OwnedBy: "openai",
  380. Permission: permission,
  381. Root: "text-moderation-stable",
  382. Parent: nil,
  383. },
  384. {
  385. Id: "text-davinci-edit-001",
  386. Object: "model",
  387. Created: 1677649963,
  388. OwnedBy: "openai",
  389. Permission: permission,
  390. Root: "text-davinci-edit-001",
  391. Parent: nil,
  392. },
  393. {
  394. Id: "code-davinci-edit-001",
  395. Object: "model",
  396. Created: 1677649963,
  397. OwnedBy: "openai",
  398. Permission: permission,
  399. Root: "code-davinci-edit-001",
  400. Parent: nil,
  401. },
  402. {
  403. Id: "babbage-002",
  404. Object: "model",
  405. Created: 1677649963,
  406. OwnedBy: "openai",
  407. Permission: permission,
  408. Root: "babbage-002",
  409. Parent: nil,
  410. },
  411. {
  412. Id: "davinci-002",
  413. Object: "model",
  414. Created: 1677649963,
  415. OwnedBy: "openai",
  416. Permission: permission,
  417. Root: "davinci-002",
  418. Parent: nil,
  419. },
  420. {
  421. Id: "claude-instant-1",
  422. Object: "model",
  423. Created: 1677649963,
  424. OwnedBy: "anthropic",
  425. Permission: permission,
  426. Root: "claude-instant-1",
  427. Parent: nil,
  428. },
  429. {
  430. Id: "claude-2",
  431. Object: "model",
  432. Created: 1677649963,
  433. OwnedBy: "anthropic",
  434. Permission: permission,
  435. Root: "claude-2",
  436. Parent: nil,
  437. },
  438. {
  439. Id: "ERNIE-Bot",
  440. Object: "model",
  441. Created: 1677649963,
  442. OwnedBy: "baidu",
  443. Permission: permission,
  444. Root: "ERNIE-Bot",
  445. Parent: nil,
  446. },
  447. {
  448. Id: "ERNIE-Bot-turbo",
  449. Object: "model",
  450. Created: 1677649963,
  451. OwnedBy: "baidu",
  452. Permission: permission,
  453. Root: "ERNIE-Bot-turbo",
  454. Parent: nil,
  455. },
  456. {
  457. Id: "ERNIE-Bot-4",
  458. Object: "model",
  459. Created: 1677649963,
  460. OwnedBy: "baidu",
  461. Permission: permission,
  462. Root: "ERNIE-Bot-4",
  463. Parent: nil,
  464. },
  465. {
  466. Id: "Embedding-V1",
  467. Object: "model",
  468. Created: 1677649963,
  469. OwnedBy: "baidu",
  470. Permission: permission,
  471. Root: "Embedding-V1",
  472. Parent: nil,
  473. },
  474. {
  475. Id: "PaLM-2",
  476. Object: "model",
  477. Created: 1677649963,
  478. OwnedBy: "google",
  479. Permission: permission,
  480. Root: "PaLM-2",
  481. Parent: nil,
  482. },
  483. {
  484. Id: "gemini-pro",
  485. Object: "model",
  486. Created: 1677649963,
  487. OwnedBy: "google",
  488. Permission: permission,
  489. Root: "gemini-pro",
  490. Parent: nil,
  491. },
  492. {
  493. Id: "gemini-pro-vision",
  494. Object: "model",
  495. Created: 1677649963,
  496. OwnedBy: "google",
  497. Permission: permission,
  498. Root: "gemini-pro-vision",
  499. Parent: nil,
  500. },
  501. {
  502. Id: "chatglm_turbo",
  503. Object: "model",
  504. Created: 1677649963,
  505. OwnedBy: "zhipu",
  506. Permission: permission,
  507. Root: "chatglm_turbo",
  508. Parent: nil,
  509. },
  510. {
  511. Id: "chatglm_pro",
  512. Object: "model",
  513. Created: 1677649963,
  514. OwnedBy: "zhipu",
  515. Permission: permission,
  516. Root: "chatglm_pro",
  517. Parent: nil,
  518. },
  519. {
  520. Id: "chatglm_std",
  521. Object: "model",
  522. Created: 1677649963,
  523. OwnedBy: "zhipu",
  524. Permission: permission,
  525. Root: "chatglm_std",
  526. Parent: nil,
  527. },
  528. {
  529. Id: "chatglm_lite",
  530. Object: "model",
  531. Created: 1677649963,
  532. OwnedBy: "zhipu",
  533. Permission: permission,
  534. Root: "chatglm_lite",
  535. Parent: nil,
  536. },
  537. {
  538. Id: "qwen-turbo",
  539. Object: "model",
  540. Created: 1677649963,
  541. OwnedBy: "ali",
  542. Permission: permission,
  543. Root: "qwen-turbo",
  544. Parent: nil,
  545. },
  546. {
  547. Id: "qwen-plus",
  548. Object: "model",
  549. Created: 1677649963,
  550. OwnedBy: "ali",
  551. Permission: permission,
  552. Root: "qwen-plus",
  553. Parent: nil,
  554. },
  555. {
  556. Id: "text-embedding-v1",
  557. Object: "model",
  558. Created: 1677649963,
  559. OwnedBy: "ali",
  560. Permission: permission,
  561. Root: "text-embedding-v1",
  562. Parent: nil,
  563. },
  564. {
  565. Id: "SparkDesk",
  566. Object: "model",
  567. Created: 1677649963,
  568. OwnedBy: "xunfei",
  569. Permission: permission,
  570. Root: "SparkDesk",
  571. Parent: nil,
  572. },
  573. {
  574. Id: "360GPT_S2_V9",
  575. Object: "model",
  576. Created: 1677649963,
  577. OwnedBy: "360",
  578. Permission: permission,
  579. Root: "360GPT_S2_V9",
  580. Parent: nil,
  581. },
  582. {
  583. Id: "embedding-bert-512-v1",
  584. Object: "model",
  585. Created: 1677649963,
  586. OwnedBy: "360",
  587. Permission: permission,
  588. Root: "embedding-bert-512-v1",
  589. Parent: nil,
  590. },
  591. {
  592. Id: "embedding_s1_v1",
  593. Object: "model",
  594. Created: 1677649963,
  595. OwnedBy: "360",
  596. Permission: permission,
  597. Root: "embedding_s1_v1",
  598. Parent: nil,
  599. },
  600. {
  601. Id: "semantic_similarity_s1_v1",
  602. Object: "model",
  603. Created: 1677649963,
  604. OwnedBy: "360",
  605. Permission: permission,
  606. Root: "semantic_similarity_s1_v1",
  607. Parent: nil,
  608. },
  609. {
  610. Id: "hunyuan",
  611. Object: "model",
  612. Created: 1677649963,
  613. OwnedBy: "tencent",
  614. Permission: permission,
  615. Root: "hunyuan",
  616. Parent: nil,
  617. },
  618. }
  619. openAIModelsMap = make(map[string]OpenAIModels)
  620. for _, model := range openAIModels {
  621. openAIModelsMap[model.Id] = model
  622. }
  623. }
  624. func ListModels(c *gin.Context) {
  625. c.JSON(200, gin.H{
  626. "object": "list",
  627. "data": openAIModels,
  628. })
  629. }
  630. func RetrieveModel(c *gin.Context) {
  631. modelId := c.Param("model")
  632. if model, ok := openAIModelsMap[modelId]; ok {
  633. c.JSON(200, model)
  634. } else {
  635. openAIError := dto.OpenAIError{
  636. Message: fmt.Sprintf("The model '%s' does not exist", modelId),
  637. Type: "invalid_request_error",
  638. Param: "model",
  639. Code: "model_not_found",
  640. }
  641. c.JSON(200, gin.H{
  642. "error": openAIError,
  643. })
  644. }
  645. }