fix(model-availability): prefer exact model ID match in fuzzyMatchModel (#1460)

* fix(model-availability): prefer exact model ID match in fuzzyMatchModel

* fix(model-availability): use filter+shortest for multi-provider tie-break

- Change Priority 2 from find() to filter()+reduce()
- Preserves shortest-match tie-break when multiple providers share model ID
- Add test for multi-provider same model ID case
- Addresses Oracle review feedback
This commit is contained in:
YeonGyu-Kim
2026-02-04 11:25:59 +09:00
committed by GitHub
parent c57c0a6bcb
commit faae3d0f32
2 changed files with 53 additions and 2 deletions
+36
View File
@@ -277,6 +277,42 @@ describe("fuzzyMatchModel", () => {
expect(result).toBe("anthropic/claude-opus-4-5")
})
// given available models with similar model IDs (e.g., glm-4.7 and glm-4.7-free)
// when searching for the longer variant (glm-4.7-free)
// then return exact model ID match, not the shorter one
it("should prefer exact model ID match over shorter substring match", () => {
const available = new Set([
"zai-coding-plan/glm-4.7",
"zai-coding-plan/glm-4.7-free",
])
const result = fuzzyMatchModel("glm-4.7-free", available)
expect(result).toBe("zai-coding-plan/glm-4.7-free")
})
// given available models with similar model IDs
// when searching for the shorter variant
// then return the shorter match (existing behavior preserved)
it("should still prefer shorter match when searching for shorter variant", () => {
const available = new Set([
"zai-coding-plan/glm-4.7",
"zai-coding-plan/glm-4.7-free",
])
const result = fuzzyMatchModel("glm-4.7", available)
expect(result).toBe("zai-coding-plan/glm-4.7")
})
// given same model ID from multiple providers
// when searching for exact model ID
// then return shortest full string (preserves tie-break behavior)
it("should use shortest tie-break when multiple providers have same model ID", () => {
const available = new Set([
"opencode/gpt-5.2",
"openai/gpt-5.2",
])
const result = fuzzyMatchModel("gpt-5.2", available)
expect(result).toBe("openai/gpt-5.2")
})
// given available models with multiple providers
// when multiple providers are specified
// then search all specified providers