@@ -145,6 +145,43 @@ describe("createModelSelectionState catalog loading", () => {
145145 expect ( loadModelCatalog ) . not . toHaveBeenCalled ( ) ;
146146 } ) ;
147147
148+ it ( "keeps per-model disabled params.thinking ahead of global thinkingDefault" , async ( ) => {
149+ vi . mocked ( loadModelCatalog ) . mockClear ( ) ;
150+ const cfg = {
151+ agents : {
152+ defaults : {
153+ thinkingDefault : "low" ,
154+ models : {
155+ "deepseek/deepseek-v4-pro" : {
156+ params : { thinking : false } ,
157+ } ,
158+ } ,
159+ } ,
160+ } ,
161+ models : {
162+ providers : {
163+ deepseek : {
164+ baseUrl : "https://api.deepseek.com/v1" ,
165+ models : [ makeConfiguredModel ( { id : "deepseek-v4-pro" , name : "DeepSeek V4 Pro" } ) ] ,
166+ } ,
167+ } ,
168+ } ,
169+ } as OpenClawConfig ;
170+
171+ const state = await createModelSelectionState ( {
172+ cfg,
173+ agentCfg : cfg . agents ?. defaults ,
174+ defaultProvider : "deepseek" ,
175+ defaultModel : "deepseek-v4-pro" ,
176+ provider : "deepseek" ,
177+ model : "deepseek-v4-pro" ,
178+ hasModelDirective : false ,
179+ } ) ;
180+
181+ await expect ( state . resolveDefaultThinkingLevel ( ) ) . resolves . toBe ( "off" ) ;
182+ expect ( loadModelCatalog ) . not . toHaveBeenCalled ( ) ;
183+ } ) ;
184+
148185 it ( "uses the implicit model default when no global thinking default is configured" , async ( ) => {
149186 vi . mocked ( loadModelCatalog ) . mockClear ( ) ;
150187 const cfg = {
0 commit comments