fix:模型标签显示异常

This commit is contained in:
chengqian committed 2026-06-10 15:11:54 +08:00
1 parent 9fff10bf51
commit a389ff5fe5
3 files changed
+16 -29

No files matched your search

+2 -6
View File
@@ -90,7 +90,7 @@ func (s *sAdmin) ListModels(ctx context.Context, req *v1.ModelListReq) (*v1.Mode
MaxOutputTokens int `json:"max_output_tokens"`
Capabilities string `json:"capabilities"`
Description string `json:"description"`
Tags string `json:"tags"`
Tags []string `json:"tags"`
CreatedAt *gtime.Time `json:"created_at"`
UpdatedAt *gtime.Time `json:"updated_at"`
DeprecatedAt *gtime.Time `json:"deprecated_at"`
@@ -145,7 +145,7 @@ func (s *sAdmin) ListModels(ctx context.Context, req *v1.ModelListReq) (*v1.Mode
MaxOutput: m.MaxOutputTokens,
Capabilities: parseCapabilities(m.Capabilities),
Description: m.Description,
Tags: parseTagsArray(m.Tags),
Tags: m.Tags,
CreatedAt: m.CreatedAt.String(),
UpdatedAt: m.UpdatedAt.String(),
}
@@ -362,10 +362,6 @@ func (s *sAdmin) DeleteModel(ctx context.Context, req *v1.ModelDeleteReq) (*v1.M
return nil, nil
}
func parseTagsArray(tags string) []string {
return parsePgArray(tags)
}
func parseCapabilities(raw string) map[string]bool {
if raw == "" || raw == "{}" {
return nil
+2 -17
View File
@@ -6,7 +6,6 @@ import (
"encoding/json"
"io"
"net/url"
"strings"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/errors/gcode"
@@ -32,7 +31,7 @@ func (s *sAdmin) ExportModelsJson(ctx context.Context, req *v1.ModelExportJsonRe
MaxContextTokens int `orm:"max_context_tokens" json:"max_context_tokens"`
MaxOutputTokens int `orm:"max_output_tokens" json:"max_output_tokens"`
Description string `orm:"description" json:"description"`
Tags string `orm:"tags" json:"tags"`
Tags []string `orm:"tags" json:"tags"`
Capabilities string `orm:"capabilities" json:"capabilities"`
SunsetDate *gtime.Time `orm:"sunset_date" json:"sunset_date"`
ReplacementModel string `orm:"replacement_model" json:"replacement_model"`
@@ -120,9 +119,7 @@ func (s *sAdmin) ExportModelsJson(ctx context.Context, req *v1.ModelExportJsonRe
if m.SunsetDate != nil {
em.SunsetDate = m.SunsetDate.Format("Y-m-d")
}
if m.Tags != "" {
em.Tags = parsePgArray(m.Tags)
}
em.Tags = m.Tags
result = append(result, em)
}
@@ -334,15 +331,3 @@ func (s *sAdmin) ImportModels(ctx context.Context, req *v1.ModelImportReq) (*v1.
return res, err
}
// parsePgArray 解析 PostgreSQL 数组格式的字符串,如 {tag1,tag2}
func parsePgArray(raw string) []string {
if raw == "" || raw == "{}" || raw == "NULL" {
return nil
}
s := strings.Trim(raw, "{}")
if s == "" {
return nil
}
return strings.Split(s, ",")
}
+12 -6
View File
@@ -108,9 +108,13 @@ func injectStreamOptions(rawMap map[string]json.RawMessage, info *common.RelayIn
// injectThinkingParams 根据 RelayInfo 中的思考后缀注入 DeepSeek 思考模式参数。
//
// DeepSeek 思考模式参数说明:
// - thinking.type: "enabled"(默认) / "disabled"
// - reasoning_effort: "high"(默认) / "max",兼容映射:low/medium→high, xhigh→max
// DeepSeek 两类模型的参数差异:
// - V3 思考版(deepseek-chat):通过 thinking.type: "enabled"/"disabled" 控制;启用时需要 budget_tokens
// - R1 系列(deepseek-reasoner):不识别 thinking 参数,通过 reasoning_effort: "none"/"low"/"high"/"max" 控制
//
// 关闭思考时同时注入两个参数,兼容两类模型:
// - thinking.type: "disabled"(V3 识别)
// - reasoning_effort: "none"(R1 识别)
//
// 注入优先级:客户端已显式设置 > 后缀路由注入 > 不干预(保留 DeepSeek 默认行为)
func injectThinkingParams(rawMap map[string]json.RawMessage, info *common.RelayInfo) map[string]json.RawMessage {
@@ -120,16 +124,18 @@ func injectThinkingParams(rawMap map[string]json.RawMessage, info *common.RelayI
}
// -nothinking 后缀:显式关闭思考
// V3 模型:thinking.type: "disabled" 生效
// R1 模型:thinking 参数被忽略,需 reasoning_effort: "none" 才能关闭思考
if info.ThinkingDisabled {
rawMap["thinking"] = json.RawMessage(`{"type":"disabled"}`)
// 关闭思考时清理 reasoning_effort
delete(rawMap, "reasoning_effort")
rawMap["reasoning_effort"] = json.RawMessage(`"none"`)
return rawMap
}
// -thinking 后缀:显式开启思考 + 可选 effort
// budget_tokens 为 V3 思考版必需字段,R1 模型忽略此参数
if info.ThinkingEnabled {
rawMap["thinking"] = json.RawMessage(`{"type":"enabled"}`)
rawMap["thinking"] = json.RawMessage(`{"type":"enabled","budget_tokens":16000}`)
rawMap = injectReasoningEffort(rawMap, info)
return rawMap
}