fix(model-fallback): clone session fallback chains
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -39,7 +39,7 @@ export function createModelFallbackStateController(input: {
|
||||
|
||||
function setSessionFallbackChain(sessionID: string, fallbackChain: FallbackEntry[] | undefined): void {
|
||||
if (!sessionID) return
|
||||
sessionFallbackChains.set(sessionID, fallbackChain?.length ? fallbackChain : [])
|
||||
sessionFallbackChains.set(sessionID, fallbackChain?.length ? [...fallbackChain] : [])
|
||||
}
|
||||
|
||||
function clearSessionFallbackChain(sessionID: string): void {
|
||||
@@ -47,7 +47,8 @@ export function createModelFallbackStateController(input: {
|
||||
}
|
||||
|
||||
function getSessionFallbackChain(sessionID: string): FallbackEntry[] | undefined {
|
||||
return sessionFallbackChains.get(sessionID)
|
||||
const fallbackChain = sessionFallbackChains.get(sessionID)
|
||||
return fallbackChain ? [...fallbackChain] : undefined
|
||||
}
|
||||
|
||||
function setPendingModelFallback(
|
||||
@@ -61,7 +62,7 @@ export function createModelFallbackStateController(input: {
|
||||
const fallbackChain = sessionFallbackChains.get(sessionID) ?? requirements?.fallbackChain
|
||||
|
||||
if (!fallbackChain?.length) {
|
||||
log("[model-fallback] No fallback chain for agent: " + agentName + " (key: " + agentKey + ")")
|
||||
log(`[model-fallback] No fallback chain for agent: ${agentName} (key: ${agentKey})`)
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -74,12 +75,12 @@ export function createModelFallbackStateController(input: {
|
||||
attemptCount: 0,
|
||||
pending: true,
|
||||
})
|
||||
log("[model-fallback] Set pending fallback for session: " + sessionID + ", agent: " + agentName)
|
||||
log(`[model-fallback] Set pending fallback for session: ${sessionID}, agent: ${agentName}`)
|
||||
return true
|
||||
}
|
||||
|
||||
if (existing.pending) {
|
||||
log("[model-fallback] Pending fallback already armed for session: " + sessionID)
|
||||
log(`[model-fallback] Pending fallback already armed for session: ${sessionID}`)
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -87,10 +88,10 @@ export function createModelFallbackStateController(input: {
|
||||
existing.modelID = currentModelID
|
||||
existing.pending = true
|
||||
if (existing.attemptCount >= existing.fallbackChain.length) {
|
||||
log("[model-fallback] Fallback chain exhausted for session: " + sessionID)
|
||||
log(`[model-fallback] Fallback chain exhausted for session: ${sessionID}`)
|
||||
return false
|
||||
}
|
||||
log("[model-fallback] Re-armed pending fallback for session: " + sessionID)
|
||||
log(`[model-fallback] Re-armed pending fallback for session: ${sessionID}`)
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -101,7 +102,7 @@ export function createModelFallbackStateController(input: {
|
||||
const fallback = getNextReachableFallback(sessionID, state)
|
||||
if (fallback) return fallback
|
||||
|
||||
log("[model-fallback] No more fallbacks for session: " + sessionID)
|
||||
log(`[model-fallback] No more fallbacks for session: ${sessionID}`)
|
||||
pendingModelFallbacks.delete(sessionID)
|
||||
return null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user