relay-model.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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. token := middleware.GetToken(c)
  52. modelName := c.Param("model")
  53. findModelName := token.FindModel(modelName)
  54. enabledModelConfigsMap := middleware.GetModelCaches(c).EnabledModelConfigsMap
  55. mc, ok := enabledModelConfigsMap[findModelName]
  56. if !ok {
  57. c.JSON(http.StatusNotFound, gin.H{
  58. "error": &relaymodel.OpenAIError{
  59. Message: fmt.Sprintf("the model '%s' does not exist", modelName),
  60. Type: "invalid_request_error",
  61. Param: "model",
  62. Code: "model_not_found",
  63. },
  64. })
  65. return
  66. }
  67. c.JSON(http.StatusOK, &OpenAIModels{
  68. ID: modelName,
  69. Object: "model",
  70. Created: 1626777600,
  71. OwnedBy: string(mc.Owner),
  72. Root: modelName,
  73. Permission: permission,
  74. Parent: nil,
  75. })
  76. }