6e6b899071
CI / docker (push) Successful in 7m37s
引入用户端对话/生图与管理端 Provider 配置,统一 invoke 编排、Gateway、请求日志与模型管理;前端按设计规范拆分布局,Go module 更名为 github.com/rose_cat707/Atlas;生图长任务 SSE 推送;管理端登录防爆破;协议与服务类型联动;Replicate 模型同步修复;用户端创作台 UI 重构;管理端创作历史替代请求日志。 Co-authored-by: Cursor <cursoragent@cursor.com>
69 lines
1.4 KiB
Go
69 lines
1.4 KiB
Go
package chat
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strings"
|
|
"unicode/utf8"
|
|
)
|
|
|
|
const (
|
|
titleSummaryRoundThreshold = 3
|
|
titleSummarySystemPrompt = "你是会话标题生成器。根据对话内容输出一条简洁的中文标题,不超过20字,不要引号、书名号或句号,只输出标题本身。"
|
|
)
|
|
|
|
func conversationParams(raw string) map[string]any {
|
|
out := map[string]any{}
|
|
if raw == "" {
|
|
return out
|
|
}
|
|
_ = json.Unmarshal([]byte(raw), &out)
|
|
return out
|
|
}
|
|
|
|
func conversationParamsJSON(params map[string]any) string {
|
|
if len(params) == 0 {
|
|
return "{}"
|
|
}
|
|
data, err := json.Marshal(params)
|
|
if err != nil {
|
|
return "{}"
|
|
}
|
|
return string(data)
|
|
}
|
|
|
|
func titleAlreadySummarized(params map[string]any) bool {
|
|
v, ok := params["title_summarized"].(bool)
|
|
return ok && v
|
|
}
|
|
|
|
func sanitizeTitle(title string) string {
|
|
title = strings.TrimSpace(title)
|
|
title = strings.Trim(title, `"'""''《》`)
|
|
title = strings.ReplaceAll(title, "\n", " ")
|
|
if title == "" {
|
|
return ""
|
|
}
|
|
if utf8.RuneCountInString(title) > 30 {
|
|
runes := []rune(title)
|
|
title = string(runes[:30])
|
|
}
|
|
return title
|
|
}
|
|
|
|
func parseChatCompletionContent(body []byte) string {
|
|
var resp struct {
|
|
Choices []struct {
|
|
Message struct {
|
|
Content string `json:"content"`
|
|
} `json:"message"`
|
|
} `json:"choices"`
|
|
}
|
|
if err := json.Unmarshal(body, &resp); err != nil {
|
|
return ""
|
|
}
|
|
if len(resp.Choices) == 0 {
|
|
return ""
|
|
}
|
|
return strings.TrimSpace(resp.Choices[0].Message.Content)
|
|
}
|