41 lines
1.7 KiB
Go
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")
|
|
}
|
|
}
|
|
}
|