From f19c15491e46aac823f7459e2c8ec736ecd86694 Mon Sep 17 00:00:00 2001 From: RockYang Date: Sun, 10 Dec 2023 17:13:25 +0800 Subject: [PATCH] feat: add system config item for dall e3 generate image num --- api/core/types/config.go | 1 + api/service/fun/func_img.go | 15 ++++++++++++--- web/src/views/admin/SysConfig.vue | 26 +++++--------------------- 3 files changed, 18 insertions(+), 24 deletions(-) diff --git a/api/core/types/config.go b/api/core/types/config.go index 59c89589..25451355 100644 --- a/api/core/types/config.go +++ b/api/core/types/config.go @@ -116,6 +116,7 @@ type ChatConfig struct { EnableHistory bool `json:"enable_history"` // 是否允许保存聊天记录 ContextDeep int `json:"context_deep"` // 上下文深度 DallApiURL string `json:"dall_api_url"` // dall-e3 绘图 API 地址 + DallImgNum int `json:"dall_img_num"` // dall-e3 出图数量 } type Platform string diff --git a/api/service/fun/func_img.go b/api/service/fun/func_img.go index 88e0e15e..d7476aec 100644 --- a/api/service/fun/func_img.go +++ b/api/service/fun/func_img.go @@ -6,6 +6,7 @@ import ( "chatplus/store/model" "chatplus/utils" "fmt" + "github.com/imroc/req/v3" "gorm.io/gorm" ) @@ -69,12 +70,20 @@ func (f FuncImage) Invoke(params map[string]interface{}) (string, error) { if tx.Error != nil { return "", fmt.Errorf("error with get chat configs: %v", tx.Error) } - + err := utils.JsonDecode(conf.Config, &chatConfig) if err != nil { return "", fmt.Errorf("error with decode chat config: %v", err) } + apiURL := chatConfig.DallApiURL + if utils.IsEmptyValue(apiURL) { + apiURL = "https://api.openai.com/v1/images/generations" + } + imgNum := chatConfig.DallImgNum + if imgNum <= 0 { + imgNum = 1 + } var res imgRes var errRes ErrRes r, err := req.C().SetProxyURL(f.proxyURL).R().SetHeader("Content-Type", "application/json"). @@ -82,11 +91,11 @@ func (f FuncImage) Invoke(params map[string]interface{}) (string, error) { SetBody(imgReq{ Model: "dall-e-3", Prompt: prompt, - N: 1, + N: imgNum, Size: "1024x1024", }). SetErrorResult(&errRes). - SetSuccessResult(&res).Post(chatConfig.DallApiURL) + SetSuccessResult(&res).Post(apiURL) if err != nil || r.IsErrorState() { return "", fmt.Errorf("error with http request: %v%v%s", err, r.Err, errRes.Error.Message) } diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue index a9108710..2eddff5a 100644 --- a/web/src/views/admin/SysConfig.vue +++ b/web/src/views/admin/SysConfig.vue @@ -249,10 +249,13 @@ - 绘图绘图 + AI绘图 + + + 保存 @@ -295,26 +298,7 @@ onMounted(() => { // 加载聊天配置 httpGet('/api/admin/config/get?key=chat').then(res => { - // chat.value = res.data - if (res.data.open_ai) { - chat.value.open_ai = res.data.open_ai - } - if (res.data.azure) { - chat.value.azure = res.data.azure - } - if (res.data.chat_gml) { - chat.value.chat_gml = res.data.chat_gml - } - if (res.data.baidu) { - chat.value.baidu = res.data.baidu - } - if (res.data.xun_fei) { - chat.value.xun_fei = res.data.xun_fei - } - chat.value.context_deep = res.data.context_deep - chat.value.enable_context = res.data.enable_context - chat.value.enable_history = res.data.enable_history - chat.value.dall_api_url = res.data.dall_api_url + chat.value = res.data loading.value = false }).catch(e => { ElMessage.error("加载聊天配置失败: " + e.message)