diff --git a/.pi-lens/turn-state.json b/.pi-lens/turn-state.json index 8c0820bb..d8caa8f0 100644 --- a/.pi-lens/turn-state.json +++ b/.pi-lens/turn-state.json @@ -2,5 +2,5 @@ "files": {}, "turnCycles": 0, "maxCycles": 3, - "lastUpdated": "2026-04-26T18:55:13.038Z" + "lastUpdated": "2026-04-27T01:09:48.183Z" } \ No newline at end of file diff --git a/internal/models/registry.go b/internal/models/registry.go index fea0d02f..4f64d739 100644 --- a/internal/models/registry.go +++ b/internal/models/registry.go @@ -56,7 +56,16 @@ func (r *ModelRegistry) FindModel(modelID string) *ModelMetadata { } } - // Try fuzzy matching (e.g. gpt-4o-2024-05-13 matching gpt-4o) + // Try reverse fuzzy matching (e.g. 'gpt-5.4-mini' matching 'gpt-5.4-mini-2026-04-01') + for _, provider := range r.Providers { + for id, model := range provider.Models { + if strings.HasPrefix(id, modelID) { + return &model + } + } + } + + // Try fuzzy matching (e.g. 'gpt-4o-2024-05-13' matching 'gpt-4o') for _, provider := range r.Providers { for id, model := range provider.Models { if strings.HasPrefix(modelID, id) { diff --git a/internal/models/registry_test.go b/internal/models/registry_test.go index c0e47565..6d0434e6 100644 --- a/internal/models/registry_test.go +++ b/internal/models/registry_test.go @@ -58,3 +58,23 @@ func TestModelRegistry_FindModel_NotFound(t *testing.T) { t.Fatal("expected nil for nonexistent model") } } + +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) + } +}