fix: respect session model override in agent runtime (#14783) (#14983)

Merged via /review-pr -> /prepare-pr -> /merge-pr.

Prepared head SHA: ec47d1a7bf
Co-authored-by: shtse8 <8020099+shtse8@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
This commit is contained in:
Kyle Tse
2026-02-12 22:12:15 +00:00
committed by GitHub
parent c0c34c72bb
commit abdceedaf6
6 changed files with 380 additions and 1 deletions

View File

@@ -173,6 +173,7 @@ export async function runCronIsolatedAgentTurn(params: {
};
// Resolve model - prefer hooks.gmail.model for Gmail hooks.
const isGmailHook = baseSessionKey.startsWith("hook:gmail:");
let hooksGmailModelApplied = false;
const hooksGmailModelRef = isGmailHook
? resolveHooksGmailModel({
cfg: params.cfg,
@@ -190,6 +191,7 @@ export async function runCronIsolatedAgentTurn(params: {
if (status.allowed) {
provider = hooksGmailModelRef.provider;
model = hooksGmailModelRef.model;
hooksGmailModelApplied = true;
}
}
const modelOverrideRaw =
@@ -247,6 +249,28 @@ export async function runCronIsolatedAgentTurn(params: {
cronSession.sessionEntry.label = `Cron: ${labelSuffix}`;
}
// Respect session model override — check session.modelOverride before falling
// back to the default config model. This ensures /model changes are honoured
// by cron and isolated agent runs.
if (!modelOverride && !hooksGmailModelApplied) {
const sessionModelOverride = cronSession.sessionEntry.modelOverride?.trim();
if (sessionModelOverride) {
const sessionProviderOverride =
cronSession.sessionEntry.providerOverride?.trim() || resolvedDefault.provider;
const resolvedSessionOverride = resolveAllowedModelRef({
cfg: cfgWithAgentDefaults,
catalog: await loadCatalog(),
raw: `${sessionProviderOverride}/${sessionModelOverride}`,
defaultProvider: resolvedDefault.provider,
defaultModel: resolvedDefault.model,
});
if (!("error" in resolvedSessionOverride)) {
provider = resolvedSessionOverride.ref.provider;
model = resolvedSessionOverride.ref.model;
}
}
}
// Resolve thinking level - job thinking > hooks.gmail.thinking > agent default
const hooksGmailThinking = isGmailHook
? normalizeThinkLevel(params.cfg.hooks?.gmail?.thinking)