Files
go-sip/internal/ai/schema_params_test.go
T

41 lines
1.7 KiB
Go

package ai
import (
"encoding/json"
"strings"
"testing"
)
func TestNewSchemaBindsCodeReferenceAndOpaqueParams(t *testing.T) {
task, providers := currentFixture(t, "full_ai")
task = changeCurrentAgent(t, task, func(a map[string]any) {
a["asr"].(map[string]any)["params"] = map[string]any{"unknown_flag": false, "nullable": nil, "opaque": "vendor-value"}
a["llm"].(map[string]any)["params"] = map[string]any{"temperature": 0, "unknown_limit": json.Number("9007199254740993")}
a["tts"].(map[string]any)["params"] = map[string]any{"rate": 9.5, "language": "vendor-only"}
a["prompt"].(map[string]any)["text"] = strings.Repeat("长", 40000)
})
b, err := Bind(task, providers)
if err != nil {
t.Fatal(err)
}
if b.ASR.Provider.Code != task.Agent.ASR.ProviderRef || b.TTS.Protocol != TTSProtocolDashScopeTask {
t.Fatal("provider code or fixed WebSocket protocol lost")
}
if string(b.ASR.Params["unknown_flag"]) != "false" || string(b.ASR.Params["nullable"]) != "null" || string(b.LLM.Params["unknown_limit"]) != "9007199254740993" || string(b.TTS.Params["rate"]) != "9.5" {
t.Fatal("opaque parameter value changed")
}
if len(b.Prompt) != 120000 {
t.Fatal("prompt was limited or truncated")
}
}
func TestParamsRejectOnlyMalformedShapeAndReservedProtocolFields(t *testing.T) {
for _, value := range []any{nil, []any{}, map[string]any{"nested": map[string]any{}}, map[string]any{"messages": "override"}} {
task, providers := currentFixture(t, "full_ai")
task = changeCurrentAgent(t, task, func(a map[string]any) { a["llm"].(map[string]any)["params"] = value })
if _, err := Bind(task, providers); err == nil {
t.Fatal("invalid parameter shape or protocol identity override accepted")
}
}
}