From 944cf429a7d6cc7a26bb15a4d436430559d8274f Mon Sep 17 00:00:00 2001 From: MoerAI Date: Fri, 27 Mar 2026 10:01:23 +0900 Subject: [PATCH 1/2] fix(delegate-task): apply category config temperature/maxTokens/top_p to categoryModel (fixes #2831) --- src/tools/delegate-task/category-resolver.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/tools/delegate-task/category-resolver.ts b/src/tools/delegate-task/category-resolver.ts index 8406652f1..3c81341d5 100644 --- a/src/tools/delegate-task/category-resolver.ts +++ b/src/tools/delegate-task/category-resolver.ts @@ -12,8 +12,19 @@ import { buildFallbackChainFromModels, findMostSpecificFallbackEntry } from "../ import { getAvailableModelsForDelegateTask } from "./available-models" import { resolveModelForDelegateTask } from "./model-selection" +import type { CategoryConfig } from "../../config/schema" import type { DelegatedModelConfig } from "./types" +function applyCategoryParams(base: DelegatedModelConfig, config: CategoryConfig): DelegatedModelConfig { + const result = { ...base } + if (config.temperature !== undefined) result.temperature = config.temperature + if (config.top_p !== undefined) result.top_p = config.top_p + if (config.maxTokens !== undefined) result.maxTokens = config.maxTokens + if (config.reasoningEffort !== undefined) result.reasoningEffort = config.reasoningEffort + if (config.thinking !== undefined) result.thinking = config.thinking + return result +} + export interface CategoryResolutionResult { agentToUse: string categoryModel: DelegatedModelConfig | undefined @@ -106,7 +117,7 @@ Available categories: ${allCategoryNames}`, const parsedModel = parseModelString(actualModel) const variantToUse = userCategories?.[args.category!]?.variant ?? resolved.config.variant categoryModel = parsedModel - ? (variantToUse ? { ...parsedModel, variant: variantToUse } : parsedModel) + ? applyCategoryParams({ ...parsedModel, variant: variantToUse }, resolved.config) : undefined } } else { @@ -165,7 +176,7 @@ Available categories: ${allCategoryNames}`, const parsedModel = parseModelString(actualModel) const variantToUse = userCategories?.[args.category!]?.variant ?? resolvedVariant ?? resolved.config.variant categoryModel = parsedModel - ? (variantToUse ? { ...parsedModel, variant: variantToUse } : parsedModel) + ? applyCategoryParams({ ...parsedModel, variant: variantToUse }, resolved.config) : undefined } } From 98572c8dac3f9a6965ef19fafa98e9de5ad2c2d2 Mon Sep 17 00:00:00 2001 From: MoerAI Date: Fri, 27 Mar 2026 12:20:19 +0900 Subject: [PATCH 2/2] fix: guard fallback override to preserve category config params when fallback fields are undefined --- src/tools/delegate-task/category-resolver.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/tools/delegate-task/category-resolver.ts b/src/tools/delegate-task/category-resolver.ts index 3c81341d5..1c6b2280d 100644 --- a/src/tools/delegate-task/category-resolver.ts +++ b/src/tools/delegate-task/category-resolver.ts @@ -234,11 +234,11 @@ Available categories: ${categoryNames.join(", ")}`, categoryModel = { ...categoryModel, variant: userCategories?.[args.category!]?.variant ?? effectiveEntry.variant ?? categoryModel.variant, - reasoningEffort: effectiveEntry.reasoningEffort, - temperature: effectiveEntry.temperature, - top_p: effectiveEntry.top_p, - maxTokens: effectiveEntry.maxTokens, - thinking: effectiveEntry.thinking, + reasoningEffort: effectiveEntry.reasoningEffort ?? categoryModel.reasoningEffort, + temperature: effectiveEntry.temperature ?? categoryModel.temperature, + top_p: effectiveEntry.top_p ?? categoryModel.top_p, + maxTokens: effectiveEntry.maxTokens ?? categoryModel.maxTokens, + thinking: effectiveEntry.thinking ?? categoryModel.thinking, } }