@@ -172,33 +172,63 @@ function resolveSelectedModelFallbacksOverride(
172172 return Array . isArray ( raw . fallbacks ) ? raw . fallbacks : undefined ;
173173}
174174
175- export function resolveSubagentModelConfigSelection ( params : {
175+ export type SubagentModelConfigSelectionSource = "subagent" | "agent" | "default-subagent" ;
176+
177+ export type SubagentModelConfigSelectionResult = {
178+ raw : AgentModelConfig ;
179+ source : SubagentModelConfigSelectionSource ;
180+ } ;
181+
182+ export function resolveSubagentModelConfigSelectionResult ( params : {
176183 cfg : OpenClawConfig ;
177184 agentId ?: string ;
178185 agentConfigOverride ?: Pick < AgentConfig , "model" | "subagents" > ;
179- } ) : AgentModelConfig | undefined {
186+ } ) : SubagentModelConfigSelectionResult | undefined {
180187 const agentConfig =
181188 params . agentConfigOverride ??
182189 ( params . agentId ? resolveAgentConfig ( params . cfg , params . agentId ) : undefined ) ;
183- for ( const raw of [
184- agentConfig ?. subagents ?. model ,
185- agentConfig ?. model ,
186- params . cfg . agents ?. defaults ?. subagents ?. model ,
187- ] ) {
188- if ( resolvePrimaryStringValue ( raw ) ) {
189- return raw ;
190- }
191- }
192- return undefined ;
190+ const candidates : SubagentModelConfigSelectionResult [ ] = [
191+ ...( agentConfig ?. subagents ?. model
192+ ? [ { raw : agentConfig . subagents . model , source : "subagent" as const } ]
193+ : [ ] ) ,
194+ ...( agentConfig ?. model ? [ { raw : agentConfig . model , source : "agent" as const } ] : [ ] ) ,
195+ ...( params . cfg . agents ?. defaults ?. subagents ?. model
196+ ? [
197+ {
198+ raw : params . cfg . agents . defaults . subagents . model ,
199+ source : "default-subagent" as const ,
200+ } ,
201+ ]
202+ : [ ] ) ,
203+ ] ;
204+ return candidates . find ( ( candidate ) => resolvePrimaryStringValue ( candidate . raw ) ) ;
205+ }
206+
207+ export function resolveSubagentModelConfigSelection ( params : {
208+ cfg : OpenClawConfig ;
209+ agentId ?: string ;
210+ agentConfigOverride ?: Pick < AgentConfig , "model" | "subagents" > ;
211+ } ) : AgentModelConfig | undefined {
212+ return resolveSubagentModelConfigSelectionResult ( params ) ?. raw ;
193213}
194214
195215export function resolveSubagentModelFallbacksOverride (
196216 cfg : OpenClawConfig ,
197217 agentId : string ,
198218) : string [ ] | undefined {
199- return resolveSelectedModelFallbacksOverride (
200- resolveSubagentModelConfigSelection ( { cfg, agentId } ) ,
201- ) ;
219+ const agentConfig = resolveAgentConfig ( cfg , agentId ) ;
220+ const subagentFallbacks = resolveSelectedModelFallbacksOverride ( agentConfig ?. subagents ?. model ) ;
221+ if ( subagentFallbacks !== undefined ) {
222+ return subagentFallbacks ;
223+ }
224+ const selection = resolveSubagentModelConfigSelectionResult ( { cfg, agentId } ) ;
225+ if ( selection ?. source === "agent" ) {
226+ return resolveSelectedModelFallbacksOverride ( agentConfig ?. model ) ;
227+ }
228+ if ( selection ?. source === "default-subagent" ) {
229+ return resolveSelectedModelFallbacksOverride ( cfg . agents ?. defaults ?. subagents ?. model ) ;
230+ }
231+ return undefined ;
202232}
203233
204234export function resolveFallbackAgentId ( params : {
0 commit comments