Make fallback provider selection provider-agnostic
This commit is contained in:
committed by
YeonGyu-Kim
parent
eab5be666d
commit
f2d23a8a36
@@ -88,17 +88,17 @@ describe("model-error-classifier", () => {
|
||||
expect(provider).toBe("anthropic")
|
||||
})
|
||||
|
||||
test("selectFallbackProvider maps opencode fallback to quotio when quotio is connected", () => {
|
||||
test("selectFallbackProvider uses connected preferred provider when fallback providers are unavailable", () => {
|
||||
//#given
|
||||
writeFileSync(
|
||||
join(TEST_CACHE_DIR, "connected-providers.json"),
|
||||
JSON.stringify({ connected: ["quotio"], updatedAt: new Date().toISOString() }, null, 2),
|
||||
JSON.stringify({ connected: ["provider-x"], updatedAt: new Date().toISOString() }, null, 2),
|
||||
)
|
||||
|
||||
//#when
|
||||
const provider = selectFallbackProvider(["opencode"], "quotio")
|
||||
const provider = selectFallbackProvider(["provider-y"], "provider-x")
|
||||
|
||||
//#then
|
||||
expect(provider).toBe("quotio")
|
||||
expect(provider).toBe("provider-x")
|
||||
})
|
||||
})
|
||||
|
||||
@@ -140,7 +140,8 @@ export function hasMoreFallbacks(
|
||||
* Selects the best provider for a fallback entry.
|
||||
* Priority:
|
||||
* 1) First connected provider in the entry's provider preference order
|
||||
* 2) First provider listed in the fallback entry (when cache is missing)
|
||||
* 2) Preferred provider when connected (and entry providers are unavailable)
|
||||
* 3) First provider listed in the fallback entry
|
||||
*/
|
||||
export function selectFallbackProvider(
|
||||
providers: string[],
|
||||
@@ -149,19 +150,19 @@ export function selectFallbackProvider(
|
||||
const connectedProviders = readConnectedProvidersCache()
|
||||
if (connectedProviders) {
|
||||
const connectedSet = new Set(connectedProviders.map(p => p.toLowerCase()))
|
||||
if (connectedSet.has("quotio")) {
|
||||
const hasQuotio = providers.some((p) => p.toLowerCase() === "quotio")
|
||||
const hasOpencode = providers.some((p) => p.toLowerCase() === "opencode")
|
||||
if (hasQuotio || hasOpencode) {
|
||||
return "quotio"
|
||||
}
|
||||
}
|
||||
|
||||
for (const provider of providers) {
|
||||
if (connectedSet.has(provider.toLowerCase())) {
|
||||
return provider
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
preferredProviderID &&
|
||||
connectedSet.has(preferredProviderID.toLowerCase())
|
||||
) {
|
||||
return preferredProviderID
|
||||
}
|
||||
}
|
||||
|
||||
return providers[0] || preferredProviderID || "opencode"
|
||||
|
||||
Reference in New Issue
Block a user