model.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. package controller
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "one-api/dto"
  6. "one-api/relay"
  7. "one-api/relay/channel/ai360"
  8. "one-api/relay/channel/moonshot"
  9. "one-api/relay/constant"
  10. )
  11. // https://platform.openai.com/docs/api-reference/models/list
  12. type OpenAIModelPermission struct {
  13. Id string `json:"id"`
  14. Object string `json:"object"`
  15. Created int `json:"created"`
  16. AllowCreateEngine bool `json:"allow_create_engine"`
  17. AllowSampling bool `json:"allow_sampling"`
  18. AllowLogprobs bool `json:"allow_logprobs"`
  19. AllowSearchIndices bool `json:"allow_search_indices"`
  20. AllowView bool `json:"allow_view"`
  21. AllowFineTuning bool `json:"allow_fine_tuning"`
  22. Organization string `json:"organization"`
  23. Group *string `json:"group"`
  24. IsBlocking bool `json:"is_blocking"`
  25. }
  26. type OpenAIModels struct {
  27. Id string `json:"id"`
  28. Object string `json:"object"`
  29. Created int `json:"created"`
  30. OwnedBy string `json:"owned_by"`
  31. Permission []OpenAIModelPermission `json:"permission"`
  32. Root string `json:"root"`
  33. Parent *string `json:"parent"`
  34. }
  35. var openAIModels []OpenAIModels
  36. var openAIModelsMap map[string]OpenAIModels
  37. func init() {
  38. var permission []OpenAIModelPermission
  39. permission = append(permission, OpenAIModelPermission{
  40. Id: "modelperm-LwHkVFn8AcMItP432fKKDIKJ",
  41. Object: "model_permission",
  42. Created: 1626777600,
  43. AllowCreateEngine: true,
  44. AllowSampling: true,
  45. AllowLogprobs: true,
  46. AllowSearchIndices: false,
  47. AllowView: true,
  48. AllowFineTuning: false,
  49. Organization: "*",
  50. Group: nil,
  51. IsBlocking: false,
  52. })
  53. // https://platform.openai.com/docs/models/model-endpoint-compatibility
  54. for i := 0; i < constant.APITypeDummy; i++ {
  55. if i == constant.APITypeAIProxyLibrary {
  56. continue
  57. }
  58. adaptor := relay.GetAdaptor(i)
  59. channelName := adaptor.GetChannelName()
  60. modelNames := adaptor.GetModelList()
  61. for _, modelName := range modelNames {
  62. openAIModels = append(openAIModels, OpenAIModels{
  63. Id: modelName,
  64. Object: "model",
  65. Created: 1626777600,
  66. OwnedBy: channelName,
  67. Permission: permission,
  68. Root: modelName,
  69. Parent: nil,
  70. })
  71. }
  72. }
  73. for _, modelName := range ai360.ModelList {
  74. openAIModels = append(openAIModels, OpenAIModels{
  75. Id: modelName,
  76. Object: "model",
  77. Created: 1626777600,
  78. OwnedBy: "360",
  79. Permission: permission,
  80. Root: modelName,
  81. Parent: nil,
  82. })
  83. }
  84. for _, modelName := range moonshot.ModelList {
  85. openAIModels = append(openAIModels, OpenAIModels{
  86. Id: modelName,
  87. Object: "model",
  88. Created: 1626777600,
  89. OwnedBy: "moonshot",
  90. Permission: permission,
  91. Root: modelName,
  92. Parent: nil,
  93. })
  94. }
  95. openAIModelsMap = make(map[string]OpenAIModels)
  96. for _, model := range openAIModels {
  97. openAIModelsMap[model.Id] = model
  98. }
  99. }
  100. func ListModels(c *gin.Context) {
  101. c.JSON(200, gin.H{
  102. "object": "list",
  103. "data": openAIModels,
  104. })
  105. }
  106. func RetrieveModel(c *gin.Context) {
  107. modelId := c.Param("model")
  108. if model, ok := openAIModelsMap[modelId]; ok {
  109. c.JSON(200, model)
  110. } else {
  111. openAIError := dto.OpenAIError{
  112. Message: fmt.Sprintf("The model '%s' does not exist", modelId),
  113. Type: "invalid_request_error",
  114. Param: "model",
  115. Code: "model_not_found",
  116. }
  117. c.JSON(200, gin.H{
  118. "error": openAIError,
  119. })
  120. }
  121. }