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")
|
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
|
//#given
|
||||||
writeFileSync(
|
writeFileSync(
|
||||||
join(TEST_CACHE_DIR, "connected-providers.json"),
|
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
|
//#when
|
||||||
const provider = selectFallbackProvider(["opencode"], "quotio")
|
const provider = selectFallbackProvider(["provider-y"], "provider-x")
|
||||||
|
|
||||||
//#then
|
//#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.
|
* Selects the best provider for a fallback entry.
|
||||||
* Priority:
|
* Priority:
|
||||||
* 1) First connected provider in the entry's provider preference order
|
* 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(
|
export function selectFallbackProvider(
|
||||||
providers: string[],
|
providers: string[],
|
||||||
@@ -149,19 +150,19 @@ export function selectFallbackProvider(
|
|||||||
const connectedProviders = readConnectedProvidersCache()
|
const connectedProviders = readConnectedProvidersCache()
|
||||||
if (connectedProviders) {
|
if (connectedProviders) {
|
||||||
const connectedSet = new Set(connectedProviders.map(p => p.toLowerCase()))
|
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) {
|
for (const provider of providers) {
|
||||||
if (connectedSet.has(provider.toLowerCase())) {
|
if (connectedSet.has(provider.toLowerCase())) {
|
||||||
return provider
|
return provider
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
preferredProviderID &&
|
||||||
|
connectedSet.has(preferredProviderID.toLowerCase())
|
||||||
|
) {
|
||||||
|
return preferredProviderID
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return providers[0] || preferredProviderID || "opencode"
|
return providers[0] || preferredProviderID || "opencode"
|
||||||
|
|||||||
Reference in New Issue
Block a user