| 1 | package config |
| 2 | |
| 3 | import "testing" |
| 4 | |
| 5 | func TestUnknownDeepSeekVisionOverride(t *testing.T) { |
| 6 | model := "deepseek-v5-flash" |
| 7 | enabled := true |
| 8 | e := ProviderEntry{Kind: "openai", BaseURL: "https://api.deepseek.com", Model: model} |
| 9 | r := NewModelCapabilityResolver() |
| 10 | if got := r.Resolve(&e); !got.ImageInputEnableAllowed || got.State != CapabilityUnknown { |
| 11 | t.Fatalf("unknown model should permit manual declaration: %+v", got) |
| 12 | } |
| 13 | e.ModelOverrides = map[string]ProviderModelOverride{model: {Vision: &enabled}} |
| 14 | if got := r.Resolve(&e); !got.ImageInputEnableAllowed || got.State != CapabilitySupported { |
| 15 | t.Fatalf("override rejected: %+v", got) |
| 16 | } |
| 17 | e.Name = "deepseek-test" |
| 18 | e.Model = "" |
| 19 | e.Models = []string{"DeepSeek-V5-Flash", model} |
| 20 | cfg := Config{Providers: []ProviderEntry{e}} |
| 21 | resolved, ok := cfg.ResolveModel(e.Name + "/" + model) |
| 22 | if !ok || resolved.Model != model || !EffectiveVision(resolved) { |
| 23 | t.Fatalf("lowercase model and its vision override did not resolve: %+v", resolved) |
| 24 | } |
| 25 | upper, ok := cfg.ResolveModel(e.Name + "/" + e.Models[0]) |
| 26 | if !ok || EffectiveVision(upper) { |
| 27 | t.Fatal("uppercase model inherited lowercase vision override") |
| 28 | } |
| 29 | } |
| 30 | |
| 31 | func TestCaseDistinctModelOverridesAreIsolated(t *testing.T) { |
| 32 | on := true |
| 33 | for _, configured := range []string{"model-a", "Model-A"} { |
| 34 | e := ProviderEntry{Models: []string{"model-a", "Model-A"}, VisionModels: []string{configured}, ModelOverrides: map[string]ProviderModelOverride{configured: {Vision: &on, ContextWindow: 1234, MaxOutputTokens: 123, ReasoningProtocol: "deepseek"}}} |
| 35 | for _, model := range e.Models { |
| 36 | _, matched := e.modelOverrideForModel(model) |
| 37 | if matched != (model == configured) || e.HasVisionModel(model) != (model == configured) { |
| 38 | t.Fatalf("%s inherited settings from %s", model, configured) |
| 39 | } |
| 40 | } |
| 41 | } |
| 42 | } |
| 43 |