diff --git a/README.md b/README.md index 5cb2a072..ed75e2b3 100644 --- a/README.md +++ b/README.md @@ -81,16 +81,17 @@ _✨ All in one 的 OpenAI 接口,整合各种 API 访问方式,开箱即用 12. 支持以美元为单位显示额度。 13. 支持发布公告,设置充值链接,设置新用户初始额度。 14. 支持模型映射,重定向用户的请求模型。 -15. 支持丰富的**自定义**设置, +15. 支持绘图接口。 +16. 支持丰富的**自定义**设置, 1. 支持自定义系统名称,logo 以及页脚。 2. 支持自定义首页和关于页面,可以选择使用 HTML & Markdown 代码进行自定义,或者使用一个单独的网页通过 iframe 嵌入。 -16. 支持通过系统访问令牌访问管理 API。 -17. 支持 Cloudflare Turnstile 用户校验。 -18. 支持用户管理,支持**多种用户登录注册方式**: +17. 支持通过系统访问令牌访问管理 API。 +18. 支持 Cloudflare Turnstile 用户校验。 +19. 支持用户管理,支持**多种用户登录注册方式**: + 邮箱登录注册以及通过邮箱进行密码重置。 + [GitHub 开放授权](https://github.com/settings/applications/new)。 + 微信公众号授权(需要额外部署 [WeChat Server](https://github.com/songquanpeng/wechat-server))。 -19. 未来其他大模型开放 API 后,将第一时间支持,并将其封装成同样的 API 访问方式。 +20. 未来其他大模型开放 API 后,将第一时间支持,并将其封装成同样的 API 访问方式。 ## 部署 ### 基于 Docker 进行部署 diff --git a/controller/relay-image.go b/controller/relay-image.go index e0483d56..7a37be80 100644 --- a/controller/relay-image.go +++ b/controller/relay-image.go @@ -22,26 +22,26 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode consumeQuota := c.GetBool("consume_quota") group := c.GetString("group") - var textRequest GeneralOpenAIRequest + var imageRequest ImageRequest if consumeQuota { - err := common.UnmarshalBodyReusable(c, &textRequest) + err := common.UnmarshalBodyReusable(c, &imageRequest) if err != nil { return errorWrapper(err, "bind_request_body_failed", http.StatusBadRequest) } } // Prompt validation - if textRequest.Prompt == "" { + if imageRequest.Prompt == "" { return errorWrapper(errors.New("prompt is required"), "required_field_missing", http.StatusBadRequest) } // Not "256x256", "512x512", or "1024x1024" - if textRequest.Size != "" && textRequest.Size != "256x256" && textRequest.Size != "512x512" && textRequest.Size != "1024x1024" { + if imageRequest.Size != "" && imageRequest.Size != "256x256" && imageRequest.Size != "512x512" && imageRequest.Size != "1024x1024" { return errorWrapper(errors.New("size must be one of 256x256, 512x512, or 1024x1024"), "invalid_field_value", http.StatusBadRequest) } - // N should between 1 to 10 - if textRequest.N != 0 && (textRequest.N < 1 || textRequest.N > 10) { + // N should between 1 and 10 + if imageRequest.N != 0 && (imageRequest.N < 1 || imageRequest.N > 10) { return errorWrapper(errors.New("n must be between 1 and 10"), "invalid_field_value", http.StatusBadRequest) } @@ -71,7 +71,7 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode var requestBody io.Reader if isModelMapped { - jsonStr, err := json.Marshal(textRequest) + jsonStr, err := json.Marshal(imageRequest) if err != nil { return errorWrapper(err, "marshal_text_request_failed", http.StatusInternalServerError) } @@ -87,14 +87,14 @@ func relayImageHelper(c *gin.Context, relayMode int) *OpenAIErrorWithStatusCode sizeRatio := 1.0 // Size - if textRequest.Size == "256x256" { + if imageRequest.Size == "256x256" { sizeRatio = 1 - } else if textRequest.Size == "512x512" { + } else if imageRequest.Size == "512x512" { sizeRatio = 1.125 - } else if textRequest.Size == "1024x1024" { + } else if imageRequest.Size == "1024x1024" { sizeRatio = 1.25 } - quota := int(ratio * sizeRatio * 1000) + quota := int(ratio*sizeRatio*1000) * imageRequest.N if consumeQuota && userQuota-quota < 0 { return errorWrapper(err, "insufficient_user_quota", http.StatusForbidden) diff --git a/controller/relay.go b/controller/relay.go index 81850925..dd7d424d 100644 --- a/controller/relay.go +++ b/controller/relay.go @@ -55,6 +55,12 @@ type TextRequest struct { //Stream bool `json:"stream"` } +type ImageRequest struct { + Prompt string `json:"prompt"` + N int `json:"n"` + Size string `json:"size"` +} + type Usage struct { PromptTokens int `json:"prompt_tokens"` CompletionTokens int `json:"completion_tokens"`