From ef6b6420111fc6e20e4a15ef6ae429e1ebb1e5a0 Mon Sep 17 00:00:00 2001 From: RockYang Date: Mon, 8 Sep 2025 10:57:11 +0800 Subject: [PATCH] Dalle supported image to image --- api/core/types/task.go | 23 ++++++++++++----------- api/handler/dalle_handler.go | 1 + api/service/dalle/service.go | 20 ++++++++++++++------ web/src/components/ChatPrompt.vue | 2 ++ web/src/components/ImageUpload.vue | 2 +- web/src/views/Dalle.vue | 8 ++++++++ 6 files changed, 38 insertions(+), 18 deletions(-) diff --git a/api/core/types/task.go b/api/core/types/task.go index 599482af..afdcf504 100644 --- a/api/core/types/task.go +++ b/api/core/types/task.go @@ -70,17 +70,18 @@ type SdTaskParams struct { // DallTask DALL-E task type DallTask struct { - ModelId uint `json:"model_id"` - ModelName string `json:"model_name"` - Id uint `json:"id"` - UserId uint `json:"user_id"` - Prompt string `json:"prompt"` - N int `json:"n"` - Quality string `json:"quality"` - Size string `json:"size"` - Style string `json:"style"` - Power int `json:"power"` - TranslateModelId int `json:"translate_model_id"` // 提示词翻译模型ID + ModelId uint `json:"model_id"` + ModelName string `json:"model_name"` + Image []string `json:"image,omitempty"` + Id uint `json:"id"` + UserId uint `json:"user_id"` + Prompt string `json:"prompt"` + N int `json:"n"` + Quality string `json:"quality"` + Size string `json:"size"` + Style string `json:"style"` + Power int `json:"power"` + TranslateModelId int `json:"translate_model_id"` // 提示词翻译模型ID } type SunoTask struct { diff --git a/api/handler/dalle_handler.go b/api/handler/dalle_handler.go index 959b3298..5c34d613 100644 --- a/api/handler/dalle_handler.go +++ b/api/handler/dalle_handler.go @@ -118,6 +118,7 @@ func (h *DallJobHandler) Image(c *gin.Context) { UserId: uint(userId), ModelId: chatModel.Id, ModelName: chatModel.Value, + Image: data.Image, Prompt: data.Prompt, Quality: data.Quality, Size: data.Size, diff --git a/api/service/dalle/service.go b/api/service/dalle/service.go index 065e27e5..8dabfa70 100644 --- a/api/service/dalle/service.go +++ b/api/service/dalle/service.go @@ -16,6 +16,7 @@ import ( "geekai/store" "geekai/store/model" "geekai/utils" + "strings" "time" "github.com/go-redis/redis/v8" @@ -94,12 +95,14 @@ func (s *Service) Run() { } type imgReq struct { - Model string `json:"model"` - Prompt string `json:"prompt"` - N int `json:"n,omitempty"` - Size string `json:"size,omitempty"` - Quality string `json:"quality,omitempty"` - Style string `json:"style,omitempty"` + Model string `json:"model"` + Image []string `json:"image,omitempty"` + Prompt string `json:"prompt"` + N int `json:"n,omitempty"` + Size string `json:"size,omitempty"` + Quality string `json:"quality,omitempty"` + Style string `json:"style,omitempty"` + ResponseFormat string `json:"response_format,omitempty"` } type imgRes struct { @@ -157,6 +160,11 @@ func (s *Service) Image(task types.DallTask, sync bool) (string, error) { Style: task.Style, Quality: task.Quality, } + // 图片编辑 + if len(task.Image) > 0 { + reqBody.Prompt = fmt.Sprintf("%s, %s", strings.Join(task.Image, " "), task.Prompt) + } + logger.Infof("Channel:%s, API KEY:%s, BODY: %+v", apiURL, apiKey.Value, reqBody) r, err := s.httpClient.R().SetHeader("Body-Type", "application/json"). SetHeader("Authorization", "Bearer "+apiKey.Value). diff --git a/web/src/components/ChatPrompt.vue b/web/src/components/ChatPrompt.vue index 6fe20889..4b403646 100644 --- a/web/src/components/ChatPrompt.vue +++ b/web/src/components/ChatPrompt.vue @@ -232,6 +232,7 @@ const copyContent = (text) => { flex-flow: row; margin-right: 10px; position: relative; + justify-content: start; .el-image { border: 1px solid #e3e3e3; @@ -365,6 +366,7 @@ const copyContent = (text) => { flex-flow: row; margin-right: 10px; position: relative; + justify-content: end; .el-image { border: 1px solid #e3e3e3; diff --git a/web/src/components/ImageUpload.vue b/web/src/components/ImageUpload.vue index e1a3845c..26163cd8 100644 --- a/web/src/components/ImageUpload.vue +++ b/web/src/components/ImageUpload.vue @@ -85,7 +85,7 @@
拖拽图片到此处,或 点击上传
diff --git a/web/src/views/Dalle.vue b/web/src/views/Dalle.vue index 458a723c..50a16f58 100644 --- a/web/src/views/Dalle.vue +++ b/web/src/views/Dalle.vue @@ -101,6 +101,13 @@ 生成中... + +
+ +
+ +
+
@@ -295,6 +302,7 @@ import { ElMessage, ElMessageBox } from 'element-plus' import { onMounted, onUnmounted, ref } from 'vue' import { LazyImg, Waterfall } from 'vue-waterfall-plugin-next' import 'vue-waterfall-plugin-next/dist/style.css' +import ImageUpload from '@/components/ImageUpload.vue' const listBoxHeight = ref(0) // const paramBoxHeight = ref(0)