| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- package controller
- import (
- "fmt"
- "github.com/gin-gonic/gin"
- "net/http"
- "one-api/dto"
- "one-api/model"
- "one-api/relay"
- "one-api/relay/channel/ai360"
- "one-api/relay/channel/moonshot"
- "one-api/relay/constant"
- )
- // https://platform.openai.com/docs/api-reference/models/list
- type OpenAIModelPermission struct {
- Id string `json:"id"`
- Object string `json:"object"`
- Created int `json:"created"`
- AllowCreateEngine bool `json:"allow_create_engine"`
- AllowSampling bool `json:"allow_sampling"`
- AllowLogprobs bool `json:"allow_logprobs"`
- AllowSearchIndices bool `json:"allow_search_indices"`
- AllowView bool `json:"allow_view"`
- AllowFineTuning bool `json:"allow_fine_tuning"`
- Organization string `json:"organization"`
- Group *string `json:"group"`
- IsBlocking bool `json:"is_blocking"`
- }
- type OpenAIModels struct {
- Id string `json:"id"`
- Object string `json:"object"`
- Created int `json:"created"`
- OwnedBy string `json:"owned_by"`
- Permission []OpenAIModelPermission `json:"permission"`
- Root string `json:"root"`
- Parent *string `json:"parent"`
- }
- var openAIModels []OpenAIModels
- var openAIModelsMap map[string]OpenAIModels
- func init() {
- var permission []OpenAIModelPermission
- permission = append(permission, OpenAIModelPermission{
- Id: "modelperm-LwHkVFn8AcMItP432fKKDIKJ",
- Object: "model_permission",
- Created: 1626777600,
- AllowCreateEngine: true,
- AllowSampling: true,
- AllowLogprobs: true,
- AllowSearchIndices: false,
- AllowView: true,
- AllowFineTuning: false,
- Organization: "*",
- Group: nil,
- IsBlocking: false,
- })
- // https://platform.openai.com/docs/models/model-endpoint-compatibility
- for i := 0; i < constant.APITypeDummy; i++ {
- if i == constant.APITypeAIProxyLibrary {
- continue
- }
- adaptor := relay.GetAdaptor(i)
- channelName := adaptor.GetChannelName()
- modelNames := adaptor.GetModelList()
- for _, modelName := range modelNames {
- openAIModels = append(openAIModels, OpenAIModels{
- Id: modelName,
- Object: "model",
- Created: 1626777600,
- OwnedBy: channelName,
- Permission: permission,
- Root: modelName,
- Parent: nil,
- })
- }
- }
- for _, modelName := range ai360.ModelList {
- openAIModels = append(openAIModels, OpenAIModels{
- Id: modelName,
- Object: "model",
- Created: 1626777600,
- OwnedBy: "360",
- Permission: permission,
- Root: modelName,
- Parent: nil,
- })
- }
- for _, modelName := range moonshot.ModelList {
- openAIModels = append(openAIModels, OpenAIModels{
- Id: modelName,
- Object: "model",
- Created: 1626777600,
- OwnedBy: "moonshot",
- Permission: permission,
- Root: modelName,
- Parent: nil,
- })
- }
- openAIModelsMap = make(map[string]OpenAIModels)
- for _, model := range openAIModels {
- openAIModelsMap[model.Id] = model
- }
- }
- func ListModels(c *gin.Context) {
- userId := c.GetInt("id")
- user, err := model.GetUserById(userId, true)
- if err != nil {
- c.JSON(http.StatusOK, gin.H{
- "success": false,
- "message": err.Error(),
- })
- return
- }
- models := model.GetGroupModels(user.Group)
- userOpenAiModels := make([]OpenAIModels, 0)
- for _, s := range models {
- if _, ok := openAIModelsMap[s]; ok {
- userOpenAiModels = append(userOpenAiModels, openAIModelsMap[s])
- }
- }
- c.JSON(200, gin.H{
- "object": "list",
- "data": userOpenAiModels,
- })
- }
- func RetrieveModel(c *gin.Context) {
- modelId := c.Param("model")
- if model, ok := openAIModelsMap[modelId]; ok {
- c.JSON(200, model)
- } else {
- openAIError := dto.OpenAIError{
- Message: fmt.Sprintf("The model '%s' does not exist", modelId),
- Type: "invalid_request_error",
- Param: "model",
- Code: "model_not_found",
- }
- c.JSON(200, gin.H{
- "error": openAIError,
- })
- }
- }
|