fix(#2852): forward model overrides from categories/agent config to subagents
- fix(switcher): use lastIndexOf for multi-slash model IDs (e.g. aws/anthropic/claude-sonnet-4) - fix(model-resolution): same lastIndexOf fix in doctor parseProviderModel - fix(call-omo-agent): resolve model from agent config and forward to both background and sync executors via DelegatedModelConfig - fix(subagent-resolver): inherit category model/variant when agent uses category reference without explicit model override - test: add model override forwarding tests for call-omo-agent - test: add multi-slash model ID test for switcher
This commit is contained in:
@@ -101,12 +101,15 @@ Create the work plan directly - that's your job as the planning agent.`,
|
||||
const agentOverride = agentOverrides?.[agentConfigKey as keyof typeof agentOverrides]
|
||||
?? (agentOverrides ? Object.entries(agentOverrides).find(([key]) => key.toLowerCase() === agentConfigKey)?.[1] : undefined)
|
||||
const agentRequirement = AGENT_MODEL_REQUIREMENTS[agentConfigKey]
|
||||
const agentCategoryModel = agentOverride?.category
|
||||
? userCategories?.[agentOverride.category]?.model
|
||||
: undefined
|
||||
const normalizedAgentFallbackModels = normalizeFallbackModels(
|
||||
agentOverride?.fallback_models
|
||||
?? (agentOverride?.category ? userCategories?.[agentOverride.category]?.fallback_models : undefined)
|
||||
)
|
||||
|
||||
if (agentOverride?.model || agentRequirement || matchedAgent.model) {
|
||||
if (agentOverride?.model || agentCategoryModel || agentRequirement || matchedAgent.model) {
|
||||
const availableModels = await getAvailableModelsForDelegateTask(client)
|
||||
|
||||
const normalizedMatchedModel = matchedAgent.model
|
||||
@@ -117,7 +120,7 @@ Create the work plan directly - that's your job as the planning agent.`,
|
||||
: undefined
|
||||
|
||||
const resolution = resolveModelForDelegateTask({
|
||||
userModel: agentOverride?.model,
|
||||
userModel: agentOverride?.model ?? agentCategoryModel,
|
||||
userFallbackModels: flattenToFallbackModelStrings(normalizedAgentFallbackModels),
|
||||
categoryDefaultModel: matchedAgentModelStr,
|
||||
fallbackChain: agentRequirement?.fallbackChain,
|
||||
@@ -133,16 +136,19 @@ Create the work plan directly - that's your job as the planning agent.`,
|
||||
const variantToUse = agentOverride?.variant ?? resolution.variant
|
||||
categoryModel = variantToUse ? { ...normalized, variant: variantToUse } : normalized
|
||||
}
|
||||
} else if (resolutionSkipped && agentOverride?.model) {
|
||||
} else if (resolutionSkipped && (agentOverride?.model ?? agentCategoryModel)) {
|
||||
// Cold cache: resolution was skipped but user explicitly configured a model.
|
||||
// Honor the user override directly — don't fall through to hardcoded fallback chain.
|
||||
const normalized = normalizeModelFormat(agentOverride.model)
|
||||
const normalized = normalizeModelFormat((agentOverride?.model ?? agentCategoryModel)!)
|
||||
if (normalized) {
|
||||
const variantToUse = agentOverride?.variant
|
||||
const agentCategoryVariant = agentOverride?.category
|
||||
? userCategories?.[agentOverride.category]?.variant
|
||||
: undefined
|
||||
const variantToUse = agentOverride?.variant ?? agentCategoryVariant
|
||||
categoryModel = variantToUse ? { ...normalized, variant: variantToUse } : normalized
|
||||
log("[delegate-task] Cold cache: using explicit user override for subagent", {
|
||||
agent: agentToUse,
|
||||
model: agentOverride.model,
|
||||
model: agentOverride?.model ?? agentCategoryModel,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user