From 499f5c915f2883b3a872e87c86f1b40718a032b8 Mon Sep 17 00:00:00 2001 From: RockYang Date: Mon, 27 Oct 2025 16:21:46 +0800 Subject: [PATCH] merge and resolve conflicts --- CHANGELOG.md | 6 + api/core/types/config.go | 5 +- api/handler/chat_handler.go | 4 +- api/handler/chat_openai_handler.go | 12 +- web/.env.development | 2 +- web/.env.production | 2 +- web/src/assets/css/theme-dark.styl | 4 + web/src/assets/css/theme-light.styl | 4 + web/src/components/ChatReply.vue | 203 ++++++++-------------------- web/src/views/admin/SysConfig.vue | 46 +------ 10 files changed, 86 insertions(+), 202 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ad204b86..79fb2d3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # 更新日志 +## v4.1.9 + +- 功能优化:优化系统配置,移除已废弃的配置项 +- 功能优化:GPT-O1 模型支持流式输出 +- 功能优化:优化代码引用快样式,支持主题切换 + ## v4.1.8 - 功能优化:**UI 全新改版,支持主题切换**。 :rocket: :rocket: :rocket: diff --git a/api/core/types/config.go b/api/core/types/config.go index 19c9ba50..c32318d9 100644 --- a/api/core/types/config.go +++ b/api/core/types/config.go @@ -133,7 +133,7 @@ type SystemConfig struct { AdminTitle string `json:"admin_title,omitempty"` // 管理后台标题 Logo string `json:"logo,omitempty"` // 方形 Logo InitPower int `json:"init_power,omitempty"` // 新用户注册赠送算力值 - DailyPower int `json:"daily_power,omitempty"` // 每日签到赠送算力 + DailyPower int `json:"daily_power,omitempty"` // 每日签到赠送算力 InvitePower int `json:"invite_power,omitempty"` // 邀请新用户赠送算力值 VipMonthPower int `json:"vip_month_power,omitempty"` // VIP 会员每月赠送的算力值 @@ -146,7 +146,7 @@ type SystemConfig struct { MjPower int `json:"mj_power,omitempty"` // MJ 绘画消耗算力 MjActionPower int `json:"mj_action_power,omitempty"` // MJ 操作(放大,变换)消耗算力 SdPower int `json:"sd_power,omitempty"` // SD 绘画消耗算力 - DallPower int `json:"dall_power,omitempty"` // DALL-E-3 绘图消耗算力 + DallPower int `json:"dall_power,omitempty"` // DALL-E-3 绘图消耗算力 SunoPower int `json:"suno_power,omitempty"` // Suno 生成歌曲消耗算力 LumaPower int `json:"luma_power,omitempty"` // Luma 生成视频消耗算力 AdvanceVoicePower int `json:"advance_voice_power,omitempty"` // 高级语音对话消耗算力 @@ -160,7 +160,6 @@ type SystemConfig struct { SdNegPrompt string `json:"sd_neg_prompt"` // SD 默认反向提示词 MjMode string `json:"mj_mode"` // midjourney 默认的API模式,relax, fast, turbo - IndexBgURL string `json:"index_bg_url"` // 前端首页背景图片 IndexNavs []int `json:"index_navs"` // 首页显示的导航菜单 Copyright string `json:"copyright"` // 版权信息 MarkMapText string `json:"mark_map_text"` // 思维导入的默认文本 diff --git a/api/handler/chat_handler.go b/api/handler/chat_handler.go index b71e86b9..d5f933ac 100644 --- a/api/handler/chat_handler.go +++ b/api/handler/chat_handler.go @@ -101,8 +101,8 @@ func (h *ChatHandler) sendMessage(ctx context.Context, session *types.ChatSessio } // 兼容 GPT-O1 模型 if strings.HasPrefix(session.Model.Value, "o1-") { - utils.SendChunkMsg(ws, "AI 正在思考...\n") - req.Stream = false + utils.SendChunkMsg(ws, "> AI 正在思考...\n") + req.Stream = session.Stream session.Start = time.Now().Unix() } else { req.MaxTokens = session.Model.MaxTokens diff --git a/api/handler/chat_openai_handler.go b/api/handler/chat_openai_handler.go index 34093e16..14e58194 100644 --- a/api/handler/chat_openai_handler.go +++ b/api/handler/chat_openai_handler.go @@ -63,7 +63,7 @@ func (h *ChatHandler) sendOpenAiMessage( start := time.Now() var apiKey = model.ApiKey{} response, err := h.doRequest(ctx, req, session, &apiKey) - logger.Info("HTTP请求完成,耗时:", time.Now().Sub(start)) + logger.Info("HTTP请求完成,耗时:", time.Since(start)) if err != nil { if strings.Contains(err.Error(), "context canceled") { return fmt.Errorf("用户取消了请求:%s", prompt) @@ -89,6 +89,12 @@ func (h *ChatHandler) sendOpenAiMessage( var function model.Function var toolCall = false var arguments = make([]string, 0) + + if strings.HasPrefix(req.Model, "o1-") { + content := fmt.Sprintf("AI 思考结束,耗时:%d 秒。\n\n", time.Now().Unix()-session.Start) + utils.SendChunkMsg(ws, content) + } + scanner := bufio.NewScanner(response.Body) for scanner.Scan() { line := scanner.Text() @@ -150,10 +156,10 @@ func (h *ChatHandler) sendOpenAiMessage( // output stopped if responseBody.Choices[0].FinishReason != "" { break // 输出完成或者输出中断了 - } else { + } else { // 正常输出结果 content := responseBody.Choices[0].Delta.Content contents = append(contents, utils.InterfaceToString(content)) - utils.SendChunkMsg(ws, responseBody.Choices[0].Delta.Content) + utils.SendChunkMsg(ws, content) } } // end for diff --git a/web/.env.development b/web/.env.development index 452c1ef2..a07651f1 100644 --- a/web/.env.development +++ b/web/.env.development @@ -6,6 +6,6 @@ VUE_APP_ADMIN_USER=admin VUE_APP_ADMIN_PASS=admin123 VUE_APP_KEY_PREFIX=GeekAI_DEV_ VUE_APP_TITLE="Geek-AI 创作系统" -VUE_APP_VERSION=v4.1.8 +VUE_APP_VERSION=v4.1.9 VUE_APP_DOCS_URL=https://docs.geekai.me VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai diff --git a/web/.env.production b/web/.env.production index 8f8cf6fd..fbf30e9a 100644 --- a/web/.env.production +++ b/web/.env.production @@ -2,6 +2,6 @@ VUE_APP_API_HOST= VUE_APP_WS_HOST= VUE_APP_KEY_PREFIX=GeekAI_ VUE_APP_TITLE="Geek-AI 创作系统" -VUE_APP_VERSION=v4.1.8 +VUE_APP_VERSION=v4.1.9 VUE_APP_DOCS_URL=https://docs.geekai.me VUE_APP_GIT_URL=https://github.com/yangjian102621/geekai diff --git a/web/src/assets/css/theme-dark.styl b/web/src/assets/css/theme-dark.styl index 5946a768..5fd767e0 100644 --- a/web/src/assets/css/theme-dark.styl +++ b/web/src/assets/css/theme-dark.styl @@ -85,4 +85,8 @@ --van-tabbar-background: #141a36; --van-nav-bar-background: #1B244A; --van-dropdown-menu-background: #141a36; + + // 引用快样式 + --quote-bg-color: #1F243F; + --quote-text-color: #fff; } diff --git a/web/src/assets/css/theme-light.styl b/web/src/assets/css/theme-light.styl index a246b58c..bab46cf6 100644 --- a/web/src/assets/css/theme-light.styl +++ b/web/src/assets/css/theme-light.styl @@ -48,6 +48,10 @@ // code 标签背景 --code-bg-color: #ececec; --code-text-color: var(--el-color-primary); + + // 引用快样式 + --quote-bg-color: #e0dfff; + --quote-text-color: #333; } diff --git a/web/src/components/ChatReply.vue b/web/src/components/ChatReply.vue index fd41dcea..d1b842d9 100644 --- a/web/src/components/ChatReply.vue +++ b/web/src/components/ChatReply.vue @@ -6,7 +6,7 @@
-
+
{{ dateFormat(data.created_at) }} { --font-family: Menlo,"微软雅黑","Roboto Mono","Courier New",Courier,monospace,"Inter",sans-serif; font-family: var(--font-family); - .chat-line-reply-list { - justify-content: center; - background-color: var(--chat-list-bg); - color:var(--theme-text-color-primary); - width 100% - padding-bottom: 1.5rem; - padding-top: 1.5rem; - border-bottom: 0.5px solid var(--el-border-color); - - .chat-line-inner { - display flex; - width 100%; - max-width 900px; - padding-left 10px; - - .chat-icon { - margin-right 20px; - + .chat-line { + .chat-item { + .content-wrapper { img { - width: 36px; - height: 36px; - border-radius: 50%; - padding: 1px; - } - } - - .chat-item { - width 100% - position: relative; - padding: 0; - overflow: hidden; - - .content { - min-height 20px; - word-break break-word; - padding: 0 - color:var(--theme-text-color-primary); - font-size: var(--content-font-size); - border-radius: 5px; - overflow auto; - - img { max-width: 600px; border-radius: 10px; } @@ -224,11 +186,6 @@ const reGenerate = (prompt) => { code { color:var(--theme-text-color-primary); font-weight 600 - // color:#fff - // background-color var(--el-color-primary-light-3) - // background-color: var(--el-color-primary); - // padding 3px 5px; - // border-radius 5px; } } @@ -305,12 +262,57 @@ const reGenerate = (prompt) => { blockquote { margin 0 - background-color: #ebfffe; + background-color: var(--quote-bg-color); padding: 0.8rem 1.5rem; - border-left: 0.5rem solid; - border-color: #026863; - color: #2c3e50; + color: var(--quote-text-color); + border-left: 0.4rem solid #6b50e1; /* 紫色边框 */ + font-size: 1.1rem; + line-height: 1.6; } + } + } + } + + .chat-line-reply-list { + justify-content: center; + background-color: var(--chat-list-bg); + color:var(--theme-text-color-primary); + width 100% + padding-bottom: 1.5rem; + padding-top: 1.5rem; + border-bottom: 0.5px solid var(--el-border-color); + + .chat-line-inner { + display flex; + width 100%; + max-width 900px; + padding-left 10px; + + .chat-icon { + margin-right 20px; + + img { + width: 36px; + height: 36px; + border-radius: 50%; + padding: 1px; + } + } + + .chat-item { + width 100% + position: relative; + padding: 0; + overflow: hidden; + + .content-wrapper { + min-height 20px; + word-break break-word; + padding: 0 + color:var(--theme-text-color-primary); + font-size: var(--content-font-size); + border-radius: 5px; + overflow auto; } @@ -388,106 +390,7 @@ const reGenerate = (prompt) => { overflow auto; // background-color #F5F5F5 background-color :var(--chat-content-bg); - border-radius: 0 10px 10px 10px; - - img { - max-width: 600px; - border-radius: 10px; - } - - p { - line-height 1.5 - - code { - color:var(--code-text-color); - font-weight bold - font-family: var(--font-family); - background-color: var(--code-bg-color); - border-radius: 4px; - padding: .2rem .4rem; - } - } - - p:last-child { - margin-bottom: 0 - } - - p:first-child { - margin-top 0 - } - - .code-container { - position relative - display flex - - .hljs { - border-radius 10px - width 100% - } - - .copy-code-btn { - position: absolute; - right 10px - top 10px - cursor pointer - font-size 12px - color #c1c1c1 - - &:hover { - color #20a0ff - } - } - - } - - .lang-name { - position absolute; - right 10px - bottom 20px - padding 2px 6px 4px 6px - background-color #444444 - border-radius 10px - color #00e0e0 - } - - - // 设置表格边框 - - table { - width 100% - margin-bottom 1rem - color #212529 - border-collapse collapse; - border 1px solid #dee2e6; - background-color:var(--chat-content-bg); - color:var(--theme-text-color-primary); - - thead { - th { - border 1px solid #dee2e6 - vertical-align: bottom - border-bottom: 2px solid #dee2e6 - padding 10px - } - } - - td { - border 1px solid #dee2e6 - padding 10px - } - } - - // 代码快 - - blockquote { - margin 0 - background-color: #ebfffe; - padding: 0.8rem 1.5rem; - border-left: 0.5rem solid; - border-color: #026863; - color: #2c3e50; - } } } diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue index da461e2c..18ae5201 100644 --- a/web/src/views/admin/SysConfig.vue +++ b/web/src/views/admin/SysConfig.vue @@ -27,32 +27,6 @@ - - -
- - - - 使用动态背景 - 使用纯色背景 -
-
- - - - - + - +