package models import ( "testing" ) func TestModelRegistry_FindModel_Exact(t *testing.T) { r := &ModelRegistry{ Providers: map[string]ProviderInfo{ "openai": { Models: map[string]ModelMetadata{ "gpt-4o": {ID: "gpt-4o", Name: "GPT-4o"}, }, }, }, } m := r.FindModel("gpt-4o") if m == nil { t.Fatal("expected to find gpt-4o") } if m.Name != "GPT-4o" { t.Fatalf("expected GPT-4o, got %s", m.Name) } } func TestModelRegistry_FindModel_Fuzzy(t *testing.T) { r := &ModelRegistry{ Providers: map[string]ProviderInfo{ "openai": { Models: map[string]ModelMetadata{ "gpt-4o": {ID: "gpt-4o", Name: "GPT-4o"}, }, }, }, } // Fuzzy: "gpt-4o-2024-05-13" should match "gpt-4o" m := r.FindModel("gpt-4o-2024-05-13") if m == nil { t.Fatal("expected fuzzy match") } if m.Name != "GPT-4o" { t.Fatalf("expected GPT-4o, got %s", m.Name) } } func TestModelRegistry_FindModel_NotFound(t *testing.T) { r := &ModelRegistry{ Providers: map[string]ProviderInfo{ "openai": { Models: map[string]ModelMetadata{ "gpt-4o": {ID: "gpt-4o", Name: "GPT-4o"}, }, }, }, } m := r.FindModel("nonexistent-model") if m != nil { t.Fatal("expected nil for nonexistent model") } } func TestModelRegistry_FindModel_CanonicalPriority(t *testing.T) { // Same model name in canonical (deepseek) and reseller (ollama-cloud). // Canonical must win so the proxy uses authoritative limits. r := &ModelRegistry{ Providers: map[string]ProviderInfo{ "ollama-cloud": { Models: map[string]ModelMetadata{ "deepseek-v4-pro": {ID: "deepseek-v4-pro", Name: "DSv4 Pro (Ollama Cloud)", Limit: &ModelLimit{Context: 1048576, Output: 1048576}}, }, }, "deepseek": { Models: map[string]ModelMetadata{ "deepseek-v4-pro": {ID: "deepseek-v4-pro", Name: "DeepSeek v4 Pro", Limit: &ModelLimit{Context: 1000000, Output: 384000}}, }, }, }, } m := r.FindModel("deepseek-v4-pro") if m == nil { t.Fatal("expected to find deepseek-v4-pro") } if m.Name != "DeepSeek v4 Pro" { t.Fatalf("expected DeepSeek v4 Pro (canonical), got %s", m.Name) } if m.Limit.Output != 384000 { t.Fatalf("expected output limit 384000 (canonical), got %d", m.Limit.Output) } } func TestModelRegistry_FindModel_ReverseFuzzy(t *testing.T) { r := &ModelRegistry{ Providers: map[string]ProviderInfo{ "openai": { Models: map[string]ModelMetadata{ "gpt-5.4-mini-2026-04-01": {ID: "gpt-5.4-mini-2026-04-01", Name: "GPT-5.4 Mini"}, }, }, }, } // Reverse fuzzy: "gpt-5.4-mini" should match "gpt-5.4-mini-2026-04-01" m := r.FindModel("gpt-5.4-mini") if m == nil { t.Fatal("expected reverse fuzzy match") } if m.Name != "GPT-5.4 Mini" { t.Fatalf("expected GPT-5.4 Mini, got %s", m.Name) } }