@@ -865,9 +865,10 @@ static common_chat_params common_chat_params_init_ministral_3(const common_chat_
865865 adjusted_messages.push_back (adjusted);
866866 }
867867
868- auto has_tools = inputs.tools .is_array () && !inputs.tools .empty ();
869- auto extract_reasoning = inputs.reasoning_format != COMMON_REASONING_FORMAT_NONE;
870- auto include_grammar = true ;
868+ auto has_tools = inputs.tools .is_array () && !inputs.tools .empty ();
869+ auto has_response_format = inputs.json_schema .is_object () && !inputs.json_schema .empty ();
870+ auto extract_reasoning = inputs.reasoning_format != COMMON_REASONING_FORMAT_NONE;
871+ auto include_grammar = true ;
871872
872873 data.supports_thinking = true ;
873874 data.thinking_start_tag = " [THINK]" ;
@@ -887,7 +888,7 @@ static common_chat_params common_chat_params_init_ministral_3(const common_chat_
887888 extract_reasoning ? p.optional (" [THINK]" + p.reasoning (p.until (" [/THINK]" )) + " [/THINK]" ) : p.eps ();
888889
889890 // Response format parser
890- if (inputs. json_schema . is_object () && !inputs. json_schema . empty () ) {
891+ if (has_response_format ) {
891892 // Ministral wants to emit json surrounded by code fences
892893 return generation_prompt + (reasoning << " ```json" << p.content (p.schema (p.json (), " response-format" , inputs.json_schema )) << " ```" );
893894 }
@@ -928,6 +929,10 @@ static common_chat_params common_chat_params_init_ministral_3(const common_chat_
928929 auto schema = function.at (" parameters" );
929930 builder.resolve_refs (schema);
930931 });
932+ if (has_response_format) {
933+ auto schema = inputs.json_schema ;
934+ builder.resolve_refs (schema);
935+ }
931936 parser.build_grammar (builder, data.grammar_lazy );
932937 });
933938
@@ -1063,6 +1068,10 @@ static common_chat_params common_chat_params_init_gpt_oss(const common_chat_temp
10631068 auto schema = function.at (" parameters" );
10641069 builder.resolve_refs (schema);
10651070 });
1071+ if (has_response_format) {
1072+ auto schema = inputs.json_schema ;
1073+ builder.resolve_refs (schema);
1074+ }
10661075 parser.build_grammar (builder, data.grammar_lazy );
10671076 });
10681077
@@ -1193,6 +1202,10 @@ static common_chat_params common_chat_params_init_gemma4(const common_chat_templ
11931202 auto schema = function.at (" parameters" );
11941203 builder.resolve_refs (schema);
11951204 });
1205+ if (has_response_format) {
1206+ auto schema = inputs.json_schema ;
1207+ builder.resolve_refs (schema);
1208+ }
11961209 parser.build_grammar (builder, data.grammar_lazy );
11971210 });
11981211
0 commit comments