@@ -133,6 +133,7 @@ struct templates_params {
133
133
bool stream;
134
134
std::string grammar;
135
135
bool add_generation_prompt = true ;
136
+ bool enable_thinking = true ;
136
137
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
137
138
};
138
139
@@ -591,6 +592,16 @@ std::string common_chat_format_name(common_chat_format format) {
591
592
}
592
593
}
593
594
595
+ std::string common_reasoning_format_name (common_reasoning_format format) {
596
+ switch (format) {
597
+ case COMMON_REASONING_FORMAT_NONE: return " none" ;
598
+ case COMMON_REASONING_FORMAT_DEEPSEEK: return " deepseek" ;
599
+ case COMMON_REASONING_FORMAT_DISABLED: return " disabled" ;
600
+ default :
601
+ throw std::runtime_error (" Unknown reasoning format" );
602
+ }
603
+ }
604
+
594
605
static std::string wrap_code_as_arguments (common_chat_msg_parser & builder, const std::string & code) {
595
606
std::string arguments;
596
607
if (builder.is_partial ()) {
@@ -918,7 +929,11 @@ static common_chat_params common_chat_params_init_command_r7b(const common_chat_
918
929
data.prompt = apply (tmpl, adjusted_messages, inputs.tools .empty () ? json () : inputs.tools , inputs.add_generation_prompt , {});
919
930
data.format = COMMON_CHAT_FORMAT_COMMAND_R7B;
920
931
if (string_ends_with (data.prompt , " <|START_THINKING|>" )) {
921
- data.thinking_forced_open = true ;
932
+ if (!inputs.enable_thinking ) {
933
+ data.prompt += " <|END_THINKING|>" ;
934
+ } else {
935
+ data.thinking_forced_open = true ;
936
+ }
922
937
}
923
938
924
939
data.grammar_lazy = inputs.tool_choice != COMMON_CHAT_TOOL_CHOICE_REQUIRED;
@@ -1186,7 +1201,11 @@ static common_chat_params common_chat_params_init_deepseek_r1(const common_chat_
1186
1201
data.prompt = prompt;
1187
1202
data.format = COMMON_CHAT_FORMAT_DEEPSEEK_R1;
1188
1203
if (string_ends_with (data.prompt , " <think>\n " )) {
1189
- data.thinking_forced_open = true ;
1204
+ if (!inputs.enable_thinking ) {
1205
+ data.prompt += " </think>" ;
1206
+ } else {
1207
+ data.thinking_forced_open = true ;
1208
+ }
1190
1209
}
1191
1210
1192
1211
if (inputs.tools .is_array () && !inputs.tools .empty ()) {
@@ -1460,10 +1479,18 @@ static void common_chat_parse_functionary_v3_1_llama_3_1(common_chat_msg_parser
1460
1479
static common_chat_params common_chat_params_init_hermes_2_pro (const common_chat_template & tmpl, const struct templates_params & inputs) {
1461
1480
common_chat_params data;
1462
1481
1463
- data.prompt = apply (tmpl, inputs.messages , inputs.tools .empty () ? json () : inputs.tools , inputs.add_generation_prompt );
1482
+ json additional_context = {
1483
+ {" enable_thinking" , inputs.enable_thinking },
1484
+ };
1485
+
1486
+ data.prompt = apply (tmpl, inputs.messages , inputs.tools .empty () ? json () : inputs.tools , inputs.add_generation_prompt , additional_context);
1464
1487
data.format = COMMON_CHAT_FORMAT_HERMES_2_PRO;
1465
1488
if (string_ends_with (data.prompt , " <think>\n " )) {
1466
- data.thinking_forced_open = true ;
1489
+ if (!inputs.enable_thinking ) {
1490
+ data.prompt += " </think>" ;
1491
+ } else {
1492
+ data.thinking_forced_open = true ;
1493
+ }
1467
1494
}
1468
1495
1469
1496
if (!inputs.tools .is_null ()) {
@@ -1671,6 +1698,7 @@ static common_chat_params common_chat_templates_apply_jinja(
1671
1698
params.messages = common_chat_msgs_to_json_oaicompat<json>(inputs.messages , /* concat_text= */ !tmpl.original_caps ().requires_typed_content );
1672
1699
params.add_generation_prompt = inputs.add_generation_prompt ;
1673
1700
params.tool_choice = inputs.tool_choice ;
1701
+ params.enable_thinking = inputs.reasoning_format != COMMON_REASONING_FORMAT_DISABLED;
1674
1702
params.grammar = inputs.grammar ;
1675
1703
params.now = inputs.now ;
1676
1704
if (!inputs.json_schema .empty ()) {
0 commit comments