- 合并 base model 默认能力与平台覆盖项 - 在模型响应中补齐 text_generate 的上下文与推理能力字段 - 为相关逻辑补充测试和迁移脚本
80 lines
2.7 KiB
Go
80 lines
2.7 KiB
Go
package store
|
|
|
|
import (
|
|
"slices"
|
|
"testing"
|
|
)
|
|
|
|
func TestEffectivePlatformModelCapabilitiesDeepMergesNestedObjects(t *testing.T) {
|
|
baseLevels := []any{"none", "minimal", "low"}
|
|
baseTextGenerate := map[string]any{
|
|
"max_context_tokens": 204800,
|
|
"supportThinking": true,
|
|
"thinkingEffortLevels": baseLevels,
|
|
}
|
|
overrideTextGenerate := map[string]any{
|
|
"max_thinking_tokens": 131072,
|
|
"supportThinking": false,
|
|
"supportThinkingModeSwitch": true,
|
|
}
|
|
|
|
capabilities := EffectivePlatformModelCapabilities(
|
|
map[string]any{
|
|
"originalTypes": []any{"text_generate"},
|
|
"text_generate": baseTextGenerate,
|
|
},
|
|
map[string]any{
|
|
"text_generate": overrideTextGenerate,
|
|
},
|
|
)
|
|
|
|
textGenerate, ok := capabilities["text_generate"].(map[string]any)
|
|
if !ok {
|
|
t.Fatalf("expected text_generate capabilities object, got %#v", capabilities["text_generate"])
|
|
}
|
|
if textGenerate["max_context_tokens"] != 204800 {
|
|
t.Fatalf("expected base max_context_tokens to be preserved, got %#v", textGenerate["max_context_tokens"])
|
|
}
|
|
if textGenerate["max_thinking_tokens"] != 131072 {
|
|
t.Fatalf("expected override max_thinking_tokens to be applied, got %#v", textGenerate["max_thinking_tokens"])
|
|
}
|
|
if textGenerate["supportThinking"] != false {
|
|
t.Fatalf("expected override supportThinking false to win, got %#v", textGenerate["supportThinking"])
|
|
}
|
|
if textGenerate["supportThinkingModeSwitch"] != true {
|
|
t.Fatalf("expected override supportThinkingModeSwitch true, got %#v", textGenerate["supportThinkingModeSwitch"])
|
|
}
|
|
assertAnyStringList(t, textGenerate["thinkingEffortLevels"], []string{"none", "minimal", "low"})
|
|
|
|
baseTextGenerate["max_context_tokens"] = 1
|
|
overrideTextGenerate["max_thinking_tokens"] = 2
|
|
baseLevels[0] = "changed"
|
|
|
|
if textGenerate["max_context_tokens"] != 204800 {
|
|
t.Fatalf("expected merged capabilities to be detached from base mutations, got %#v", textGenerate["max_context_tokens"])
|
|
}
|
|
if textGenerate["max_thinking_tokens"] != 131072 {
|
|
t.Fatalf("expected merged capabilities to be detached from override mutations, got %#v", textGenerate["max_thinking_tokens"])
|
|
}
|
|
assertAnyStringList(t, textGenerate["thinkingEffortLevels"], []string{"none", "minimal", "low"})
|
|
}
|
|
|
|
func assertAnyStringList(t *testing.T, got any, want []string) {
|
|
t.Helper()
|
|
items, ok := got.([]any)
|
|
if !ok {
|
|
t.Fatalf("expected string list %v, got %#v", want, got)
|
|
}
|
|
normalized := make([]string, 0, len(items))
|
|
for _, item := range items {
|
|
text, ok := item.(string)
|
|
if !ok {
|
|
t.Fatalf("expected string list %v, got non-string item %#v in %#v", want, item, got)
|
|
}
|
|
normalized = append(normalized, text)
|
|
}
|
|
if !slices.Equal(normalized, want) {
|
|
t.Fatalf("expected string list %v, got %v", want, normalized)
|
|
}
|
|
}
|