fix(model-fallback): expose session fallback chains to background tasks
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -58,6 +58,7 @@ export function createManagers(args: {
|
|||||||
deps.markServerRunningInProcessFn()
|
deps.markServerRunningInProcessFn()
|
||||||
}
|
}
|
||||||
const tmuxSessionManager = new deps.TmuxSessionManagerClass(ctx, tmuxConfig)
|
const tmuxSessionManager = new deps.TmuxSessionManagerClass(ctx, tmuxConfig)
|
||||||
|
const modelFallbackControllerAccessor = createModelFallbackControllerAccessor()
|
||||||
|
|
||||||
deps.registerManagerForCleanupFn({
|
deps.registerManagerForCleanupFn({
|
||||||
shutdown: async () => {
|
shutdown: async () => {
|
||||||
@@ -110,6 +111,7 @@ export function createManagers(args: {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
enableParentSessionNotifications: backgroundNotificationHookEnabled,
|
enableParentSessionNotifications: backgroundNotificationHookEnabled,
|
||||||
|
modelFallbackControllerAccessor,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -122,8 +124,6 @@ export function createManagers(args: {
|
|||||||
pluginConfig,
|
pluginConfig,
|
||||||
modelCacheState,
|
modelCacheState,
|
||||||
})
|
})
|
||||||
const modelFallbackControllerAccessor = createModelFallbackControllerAccessor()
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
tmuxSessionManager,
|
tmuxSessionManager,
|
||||||
backgroundManager,
|
backgroundManager,
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import type { ModelFallbackStateController } from "./fallback-state-controller"
|
|||||||
export type ModelFallbackControllerAccessor = {
|
export type ModelFallbackControllerAccessor = {
|
||||||
register: (controller: ModelFallbackStateController) => void
|
register: (controller: ModelFallbackStateController) => void
|
||||||
setSessionFallbackChain: (sessionID: string, fallbackChain: FallbackEntry[] | undefined) => void
|
setSessionFallbackChain: (sessionID: string, fallbackChain: FallbackEntry[] | undefined) => void
|
||||||
|
getSessionFallbackChain: (sessionID: string) => FallbackEntry[] | undefined
|
||||||
clearSessionFallbackChain: (sessionID: string) => void
|
clearSessionFallbackChain: (sessionID: string) => void
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -18,6 +19,10 @@ export function createModelFallbackControllerAccessor(): ModelFallbackController
|
|||||||
controller?.setSessionFallbackChain(sessionID, fallbackChain)
|
controller?.setSessionFallbackChain(sessionID, fallbackChain)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getSessionFallbackChain(sessionID: string): FallbackEntry[] | undefined {
|
||||||
|
return controller?.getSessionFallbackChain(sessionID)
|
||||||
|
}
|
||||||
|
|
||||||
function clearSessionFallbackChain(sessionID: string): void {
|
function clearSessionFallbackChain(sessionID: string): void {
|
||||||
controller?.clearSessionFallbackChain(sessionID)
|
controller?.clearSessionFallbackChain(sessionID)
|
||||||
}
|
}
|
||||||
@@ -25,6 +30,7 @@ export function createModelFallbackControllerAccessor(): ModelFallbackController
|
|||||||
return {
|
return {
|
||||||
register,
|
register,
|
||||||
setSessionFallbackChain,
|
setSessionFallbackChain,
|
||||||
|
getSessionFallbackChain,
|
||||||
clearSessionFallbackChain,
|
clearSessionFallbackChain,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ type ModelFallbackStateLike = {
|
|||||||
export type ModelFallbackStateController = {
|
export type ModelFallbackStateController = {
|
||||||
lastToastKey: Map<string, string>
|
lastToastKey: Map<string, string>
|
||||||
setSessionFallbackChain: (sessionID: string, fallbackChain: FallbackEntry[] | undefined) => void
|
setSessionFallbackChain: (sessionID: string, fallbackChain: FallbackEntry[] | undefined) => void
|
||||||
|
getSessionFallbackChain: (sessionID: string) => FallbackEntry[] | undefined
|
||||||
clearSessionFallbackChain: (sessionID: string) => void
|
clearSessionFallbackChain: (sessionID: string) => void
|
||||||
setPendingModelFallback: (
|
setPendingModelFallback: (
|
||||||
sessionID: string,
|
sessionID: string,
|
||||||
@@ -45,6 +46,10 @@ export function createModelFallbackStateController(input: {
|
|||||||
sessionFallbackChains.delete(sessionID)
|
sessionFallbackChains.delete(sessionID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getSessionFallbackChain(sessionID: string): FallbackEntry[] | undefined {
|
||||||
|
return sessionFallbackChains.get(sessionID)
|
||||||
|
}
|
||||||
|
|
||||||
function setPendingModelFallback(
|
function setPendingModelFallback(
|
||||||
sessionID: string,
|
sessionID: string,
|
||||||
agentName: string,
|
agentName: string,
|
||||||
@@ -123,6 +128,7 @@ export function createModelFallbackStateController(input: {
|
|||||||
return {
|
return {
|
||||||
lastToastKey,
|
lastToastKey,
|
||||||
setSessionFallbackChain,
|
setSessionFallbackChain,
|
||||||
|
getSessionFallbackChain,
|
||||||
clearSessionFallbackChain,
|
clearSessionFallbackChain,
|
||||||
setPendingModelFallback,
|
setPendingModelFallback,
|
||||||
getNextFallback,
|
getNextFallback,
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ type ModelFallbackControllerWithState = Pick<
|
|||||||
ModelFallbackStateController,
|
ModelFallbackStateController,
|
||||||
| "lastToastKey"
|
| "lastToastKey"
|
||||||
| "setSessionFallbackChain"
|
| "setSessionFallbackChain"
|
||||||
|
| "getSessionFallbackChain"
|
||||||
| "clearSessionFallbackChain"
|
| "clearSessionFallbackChain"
|
||||||
| "setPendingModelFallback"
|
| "setPendingModelFallback"
|
||||||
| "getNextFallback"
|
| "getNextFallback"
|
||||||
@@ -70,6 +71,13 @@ export function clearSessionFallbackChain(
|
|||||||
controller.clearSessionFallbackChain(sessionID)
|
controller.clearSessionFallbackChain(sessionID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getSessionFallbackChain(
|
||||||
|
controller: Pick<ModelFallbackStateController, "getSessionFallbackChain">,
|
||||||
|
sessionID: string,
|
||||||
|
): FallbackEntry[] | undefined {
|
||||||
|
return controller.getSessionFallbackChain(sessionID)
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets a pending model fallback for a session.
|
* Sets a pending model fallback for a session.
|
||||||
* Called when a model error is detected in session.error handler.
|
* Called when a model error is detected in session.error handler.
|
||||||
@@ -152,6 +160,7 @@ export function createModelFallbackHook(args?: ModelFallbackHookArgs): ModelFall
|
|||||||
return {
|
return {
|
||||||
lastToastKey: controller.lastToastKey,
|
lastToastKey: controller.lastToastKey,
|
||||||
setSessionFallbackChain: controller.setSessionFallbackChain,
|
setSessionFallbackChain: controller.setSessionFallbackChain,
|
||||||
|
getSessionFallbackChain: controller.getSessionFallbackChain,
|
||||||
clearSessionFallbackChain: controller.clearSessionFallbackChain,
|
clearSessionFallbackChain: controller.clearSessionFallbackChain,
|
||||||
setPendingModelFallback: controller.setPendingModelFallback,
|
setPendingModelFallback: controller.setPendingModelFallback,
|
||||||
getNextFallback: controller.getNextFallback,
|
getNextFallback: controller.getNextFallback,
|
||||||
|
|||||||
Reference in New Issue
Block a user