orchestrator: recover from context overflow on fallback

This commit is contained in:
William Valentin
2026-02-13 21:19:02 -08:00
parent 944b2c916a
commit 151b48310e
4 changed files with 236 additions and 18 deletions
+22 -16
View File
@@ -79,25 +79,31 @@ export function createMessageRouter(deps: {
const baseSid = agentConfigName
? `${channel}:${senderId}:${agentConfigName}`
: `${channel}:${senderId}`;
const sessionId = tierFromMetadata ? `${baseSid}:${tierFromMetadata}` : baseSid;
const session = deps.sessionManager.getSession(channel, senderId);
// Read per-session model tier override (persisted in SQLite)
const sessionTierOverride = session.getConfig('modelTier') as ModelTier | undefined;
// Resolution chain: metadata (cron) → session override → agent config → global default
const effectiveTier = tierFromMetadata
?? sessionTierOverride
?? agentConfig?.modelTier
?? deps.config.agents.primary_tier
?? 'default';
// Cache agents by tier too so switching tiers updates context-window heuristics.
const sessionId = `${baseSid}:${effectiveTier}`;
let entry = agents.get(sessionId);
if (!entry) {
const session = deps.sessionManager.getSession(channel, senderId);
// Read per-session model tier override (persisted in SQLite)
const sessionTierOverride = session.getConfig('modelTier') as ModelTier | undefined;
// Resolution chain: metadata (cron) → session override → agent config → global default
const effectiveTier = tierFromMetadata
?? sessionTierOverride
?? agentConfig?.modelTier
?? deps.config.agents.primary_tier
?? 'default';
// Use agent config overrides where available, falling back to global config
const effectiveSystemPrompt = agentConfig?.systemPrompt ?? deps.systemPrompt;
const effectiveProvider = deps.config.models.default.provider;
const modelsConfig = deps.config.models as Record<string, { provider?: string; model?: string; context_window?: number } | undefined>;
const tierConfig = modelsConfig[effectiveTier] ?? deps.config.models.default;
const effectiveProvider = tierConfig?.provider ?? deps.config.models.default.provider;
const effectiveModelName = tierConfig?.model ?? deps.config.models.default.model;
const effectiveContextWindow = tierConfig?.context_window ?? deps.config.models.default.context_window;
const delegationConfig: DelegationConfig = {
compaction: deps.config.agents.delegation.compaction ?? 'fast',
@@ -181,8 +187,8 @@ export function createMessageRouter(deps: {
summaryMaxTokens: deps.config.compaction.summary_max_tokens,
importanceThreshold: deps.config.compaction.importance_threshold,
} : undefined,
modelName: deps.config.models.default.model,
contextWindow: deps.config.models.default.context_window,
modelName: effectiveModelName,
contextWindow: effectiveContextWindow,
memoryStore: deps.memoryStore,
memoryInjectionStrategy: deps.config.memory?.injection_strategy,
memoryMaxInjectionTokens: deps.config.memory?.max_injection_tokens,