package ai import "testing" func TestBindUsesWSEndpointForSpeechAndAPIEndpointForLLM(t *testing.T) { for _, asrProvider := range []string{"volcengine", "ali_bailian"} { t.Run(asrProvider, func(t *testing.T) { task, providers := currentFixture(t, "full_ai") if asrProvider == "ali_bailian" { task = changeCurrentAgent(t, task, func(agent map[string]any) { agent["asr"].(map[string]any)["provider_ref"] = "ali_bailian" }) } for code, provider := range providers { provider.Endpoint = "https://http-" + code + ".example.invalid/v1" provider.WSEndpoint = "wss://stream-" + code + ".example.invalid/v1" providers[code] = provider } binding, err := Bind(task, providers) if err != nil { t.Fatal(err) } if binding.ASR.Provider.Endpoint != providers[asrProvider].WSEndpoint || binding.TTS.Provider.Endpoint != providers["ali_bailian"].WSEndpoint || binding.LLM.Provider.Endpoint != providers["openai_compatible"].Endpoint { t.Fatal("AI role selected the wrong connection endpoint") } if providers["ali_bailian"].Endpoint != "https://http-ali_bailian.example.invalid/v1" { t.Fatal("binding mutated the reusable provider catalog") } }) } } func TestBindNeverFallsBackBetweenAPIAndWSEndpoints(t *testing.T) { for _, role := range []string{"asr", "tts", "llm"} { t.Run(role, func(t *testing.T) { task, providers := currentFixture(t, "full_ai") code := "volcengine" if role == "tts" { code = "ali_bailian" } else if role == "llm" { code = "openai_compatible" } provider := providers[code] if role == "llm" { provider.Endpoint = "" } else { provider.WSEndpoint = "" } providers[code] = provider if _, err := Bind(task, providers); err == nil { t.Fatal("missing endpoint was hidden by a fallback") } }) } }