Respect per-agent fallback chains in runtime fallback
This commit is contained in:
committed by
YeonGyu-Kim
parent
b12aeaa512
commit
d0cc76c7e0
@@ -0,0 +1,66 @@
|
|||||||
|
import { afterEach, describe, expect, test } from "bun:test"
|
||||||
|
|
||||||
|
import { getFallbackModelsForSession } from "./fallback-models"
|
||||||
|
import { SessionCategoryRegistry } from "../../shared/session-category-registry"
|
||||||
|
|
||||||
|
describe("runtime-fallback fallback-models", () => {
|
||||||
|
afterEach(() => {
|
||||||
|
SessionCategoryRegistry.clear()
|
||||||
|
})
|
||||||
|
|
||||||
|
test("uses category fallback_models when session category is registered", () => {
|
||||||
|
//#given
|
||||||
|
const sessionID = "ses_runtime_fallback_category"
|
||||||
|
SessionCategoryRegistry.register(sessionID, "quick")
|
||||||
|
const pluginConfig = {
|
||||||
|
categories: {
|
||||||
|
quick: {
|
||||||
|
fallback_models: ["openai/gpt-5.2", "anthropic/claude-opus-4-6"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as any
|
||||||
|
|
||||||
|
//#when
|
||||||
|
const result = getFallbackModelsForSession(sessionID, undefined, pluginConfig)
|
||||||
|
|
||||||
|
//#then
|
||||||
|
expect(result).toEqual(["openai/gpt-5.2", "anthropic/claude-opus-4-6"])
|
||||||
|
})
|
||||||
|
|
||||||
|
test("uses agent-specific fallback_models when agent is resolved", () => {
|
||||||
|
//#given
|
||||||
|
const pluginConfig = {
|
||||||
|
agents: {
|
||||||
|
oracle: {
|
||||||
|
fallback_models: ["openai/gpt-5.2", "anthropic/claude-opus-4-6"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as any
|
||||||
|
|
||||||
|
//#when
|
||||||
|
const result = getFallbackModelsForSession("ses_runtime_fallback_agent", "oracle", pluginConfig)
|
||||||
|
|
||||||
|
//#then
|
||||||
|
expect(result).toEqual(["openai/gpt-5.2", "anthropic/claude-opus-4-6"])
|
||||||
|
})
|
||||||
|
|
||||||
|
test("does not fall back to another agent chain when agent cannot be resolved", () => {
|
||||||
|
//#given
|
||||||
|
const pluginConfig = {
|
||||||
|
agents: {
|
||||||
|
sisyphus: {
|
||||||
|
fallback_models: ["quotio/gpt-5.2", "quotio/glm-5", "quotio/kimi-k2.5"],
|
||||||
|
},
|
||||||
|
oracle: {
|
||||||
|
fallback_models: ["openai/gpt-5.2", "anthropic/claude-opus-4-6"],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as any
|
||||||
|
|
||||||
|
//#when
|
||||||
|
const result = getFallbackModelsForSession("ses_runtime_fallback_unknown", undefined, pluginConfig)
|
||||||
|
|
||||||
|
//#then
|
||||||
|
expect(result).toEqual([])
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
import type { OhMyOpenCodeConfig } from "../../config"
|
import type { OhMyOpenCodeConfig } from "../../config"
|
||||||
import { AGENT_NAMES, agentPattern } from "./agent-resolver"
|
import { agentPattern } from "./agent-resolver"
|
||||||
import { HOOK_NAME } from "./constants"
|
import { HOOK_NAME } from "./constants"
|
||||||
import { log } from "../../shared/logger"
|
import { log } from "../../shared/logger"
|
||||||
import { SessionCategoryRegistry } from "../../shared/session-category-registry"
|
import { SessionCategoryRegistry } from "../../shared/session-category-registry"
|
||||||
@@ -51,19 +51,7 @@ export function getFallbackModelsForSession(
|
|||||||
if (result) return result
|
if (result) return result
|
||||||
}
|
}
|
||||||
|
|
||||||
const sisyphusFallback = tryGetFallbackFromAgent("sisyphus")
|
log(`[${HOOK_NAME}] No category/agent fallback models resolved for session`, { sessionID, agent })
|
||||||
if (sisyphusFallback) {
|
|
||||||
log(`[${HOOK_NAME}] Using sisyphus fallback models (no agent detected)`, { sessionID })
|
|
||||||
return sisyphusFallback
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const agentName of AGENT_NAMES) {
|
|
||||||
const result = tryGetFallbackFromAgent(agentName)
|
|
||||||
if (result) {
|
|
||||||
log(`[${HOOK_NAME}] Using ${agentName} fallback models (no agent detected)`, { sessionID })
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user