relay-model.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package controller
  2. import (
  3. "fmt"
  4. "net/http"
  5. "slices"
  6. "github.com/gin-gonic/gin"
  7. "github.com/labring/aiproxy/middleware"
  8. model "github.com/labring/aiproxy/relay/model"
  9. )
  10. // ListModels godoc
  11. //
  12. // @Summary List models
  13. // @Description List all models
  14. // @Tags relay
  15. // @Produce json
  16. // @Security ApiKeyAuth
  17. // @Success 200 {object} object{object=string,data=[]OpenAIModels}
  18. // @Router /v1/models [get]
  19. func ListModels(c *gin.Context) {
  20. enabledModelConfigsMap := middleware.GetModelCaches(c).EnabledModelConfigsMap
  21. token := middleware.GetToken(c)
  22. availableOpenAIModels := make([]*OpenAIModels, 0, len(token.Models))
  23. for _, model := range token.Models {
  24. if mc, ok := enabledModelConfigsMap[model]; ok {
  25. availableOpenAIModels = append(availableOpenAIModels, &OpenAIModels{
  26. ID: model,
  27. Object: "model",
  28. Created: 1626777600,
  29. OwnedBy: string(mc.Owner),
  30. Root: model,
  31. Permission: permission,
  32. Parent: nil,
  33. })
  34. }
  35. }
  36. c.JSON(http.StatusOK, gin.H{
  37. "object": "list",
  38. "data": availableOpenAIModels,
  39. })
  40. }
  41. // RetrieveModel godoc
  42. //
  43. // @Summary Retrieve model
  44. // @Description Retrieve a model
  45. // @Tags relay
  46. // @Produce json
  47. // @Security ApiKeyAuth
  48. // @Success 200 {object} OpenAIModels
  49. // @Router /v1/models/{model} [get]
  50. func RetrieveModel(c *gin.Context) {
  51. modelName := c.Param("model")
  52. enabledModelConfigsMap := middleware.GetModelCaches(c).EnabledModelConfigsMap
  53. mc, ok := enabledModelConfigsMap[modelName]
  54. if ok {
  55. token := middleware.GetToken(c)
  56. ok = slices.Contains(token.Models, modelName)
  57. }
  58. if !ok {
  59. c.JSON(200, gin.H{
  60. "error": &model.Error{
  61. Message: fmt.Sprintf("the model '%s' does not exist", modelName),
  62. Type: "invalid_request_error",
  63. Param: "model",
  64. Code: "model_not_found",
  65. },
  66. })
  67. return
  68. }
  69. c.JSON(200, &OpenAIModels{
  70. ID: modelName,
  71. Object: "model",
  72. Created: 1626777600,
  73. OwnedBy: string(mc.Owner),
  74. Root: modelName,
  75. Permission: permission,
  76. Parent: nil,
  77. })
  78. }