relay-model.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package controller
  2. import (
  3. "fmt"
  4. "net/http"
  5. "github.com/gin-gonic/gin"
  6. "github.com/labring/aiproxy/core/middleware"
  7. relaymodel "github.com/labring/aiproxy/core/relay/model"
  8. )
  9. // ListModels godoc
  10. //
  11. // @Summary List models
  12. // @Description List all models
  13. // @Tags relay
  14. // @Produce json
  15. // @Security ApiKeyAuth
  16. // @Success 200 {object} object{object=string,data=[]OpenAIModels}
  17. // @Router /v1/models [get]
  18. func ListModels(c *gin.Context) {
  19. enabledModelConfigsMap := middleware.GetModelCaches(c).EnabledModelConfigsMap
  20. token := middleware.GetToken(c)
  21. availableOpenAIModels := make([]*OpenAIModels, 0)
  22. token.Range(func(model string) bool {
  23. if mc, ok := enabledModelConfigsMap[model]; ok {
  24. availableOpenAIModels = append(availableOpenAIModels, &OpenAIModels{
  25. ID: model,
  26. Object: "model",
  27. Created: 1626777600,
  28. OwnedBy: string(mc.Owner),
  29. Root: model,
  30. Permission: permission,
  31. Parent: nil,
  32. })
  33. }
  34. return true
  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 = token.ContainsModel(modelName)
  57. }
  58. if !ok {
  59. c.JSON(http.StatusNotFound, gin.H{
  60. "error": &relaymodel.OpenAIError{
  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(http.StatusOK, &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. }