playground.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package controller
  2. import (
  3. "errors"
  4. "fmt"
  5. "one-api/common"
  6. "one-api/constant"
  7. "one-api/dto"
  8. "one-api/middleware"
  9. "one-api/model"
  10. "one-api/setting"
  11. "one-api/types"
  12. "time"
  13. "github.com/gin-gonic/gin"
  14. )
  15. func Playground(c *gin.Context) {
  16. var newAPIError *types.NewAPIError
  17. defer func() {
  18. if newAPIError != nil {
  19. c.JSON(newAPIError.StatusCode, gin.H{
  20. "error": newAPIError.ToOpenAIError(),
  21. })
  22. }
  23. }()
  24. useAccessToken := c.GetBool("use_access_token")
  25. if useAccessToken {
  26. newAPIError = types.NewError(errors.New("暂不支持使用 access token"), types.ErrorCodeAccessDenied)
  27. return
  28. }
  29. playgroundRequest := &dto.PlayGroundRequest{}
  30. err := common.UnmarshalBodyReusable(c, playgroundRequest)
  31. if err != nil {
  32. newAPIError = types.NewError(err, types.ErrorCodeInvalidRequest)
  33. return
  34. }
  35. if playgroundRequest.Model == "" {
  36. newAPIError = types.NewError(errors.New("请选择模型"), types.ErrorCodeInvalidRequest)
  37. return
  38. }
  39. c.Set("original_model", playgroundRequest.Model)
  40. group := playgroundRequest.Group
  41. userGroup := c.GetString("group")
  42. if group == "" {
  43. group = userGroup
  44. } else {
  45. if !setting.GroupInUserUsableGroups(group) && group != userGroup {
  46. newAPIError = types.NewError(errors.New("无权访问该分组"), types.ErrorCodeAccessDenied)
  47. return
  48. }
  49. c.Set("group", group)
  50. }
  51. userId := c.GetInt("id")
  52. //c.Set("token_name", "playground-"+group)
  53. tempToken := &model.Token{
  54. UserId: userId,
  55. Name: fmt.Sprintf("playground-%s", group),
  56. Group: group,
  57. }
  58. _ = middleware.SetupContextForToken(c, tempToken)
  59. _, newAPIError = getChannel(c, group, playgroundRequest.Model, 1)
  60. if newAPIError != nil {
  61. return
  62. }
  63. //middleware.SetupContextForSelectedChannel(c, channel, playgroundRequest.Model)
  64. common.SetContextKey(c, constant.ContextKeyRequestStartTime, time.Now())
  65. // Write user context to ensure acceptUnsetRatio is available
  66. userCache, err := model.GetUserCache(userId)
  67. if err != nil {
  68. newAPIError = types.NewError(err, types.ErrorCodeQueryDataError)
  69. return
  70. }
  71. userCache.WriteContext(c)
  72. Relay(c)
  73. }