@@ -564,7 +564,7 @@ static common_chat_msg common_chat_parse_llama_3_1(const std::string & input, bo
564564
565565static common_chat_params common_chat_params_init_deepseek_r1 (const common_chat_template & tmpl, const struct common_chat_inputs & inputs) {
566566 common_chat_params data;
567- if (! inputs.tools .is_null () && !inputs.tools .empty ()) {
567+ if (inputs.tools .is_array () && !inputs.tools .empty ()) {
568568 data.grammar_lazy = inputs.tool_choice != " required" ;
569569 data.grammar = build_grammar ([&](const common_grammar_builder & builder) {
570570 std::vector<std::string> tool_rules;
@@ -580,21 +580,19 @@ static common_chat_params common_chat_params_init_deepseek_r1(const common_chat_
580580 // Distill Qwen 7B & 32B models seem confused re/ syntax of their tool call opening tag,
581581 // so we accept common variants (then it's all constrained)
582582 builder.add_rule (" root" ,
583- " ( \" <|tool▁calls▁begin|>\" | \" <|tool_calls_begin|>\" | \" <|tool calls begin|>\" | \" <|tool\\\\ _calls\\\\ _begin|>\" )? "
584- " (" +string_join (tool_rules, " | " ) + " )" + (inputs.parallel_tool_calls ? " *" : " " ) + " "
583+ " ( \" <|tool▁calls▁begin|>\" | \" <|tool_calls_begin|>\" | \" <|tool calls begin|>\" | \" <|tool\\\\ _calls\\\\ _begin|>\" ) "
584+ " (" + string_join (tool_rules, " | " ) + " )" + (inputs.parallel_tool_calls ? " *" : " " ) + " "
585585 " \" <|tool▁calls▁end|>\" "
586586 " space" );
587587 data.grammar_triggers .push_back ({" <|tool▁calls▁begin|>" , /* .at_start = */ false });
588588 data.grammar_triggers .push_back ({" <|tool_calls_begin|>" , /* .at_start = */ false });
589589 data.grammar_triggers .push_back ({" <|tool calls begin|>" , /* .at_start = */ false });
590590 data.grammar_triggers .push_back ({" <|tool\\ _calls\\ _begin|>" , /* .at_start = */ false });
591- data.grammar_triggers .push_back ({" <|tool▁call▁begin|>" , /* .at_start = */ false });
592591 data.preserved_tokens = {
593592 " <think>" ,
594593 " </think>" ,
595594 " <|tool▁sep|>" ,
596595 " <|tool▁calls▁end|" ,
597- " <|tool▁call▁begin|>" ,
598596 " <|tool▁call▁end|>" ,
599597 };
600598 }, grammar_options);
@@ -654,7 +652,7 @@ static common_chat_params common_chat_params_init_firefunction_v2(const common_c
654652 {" datetime" , " Jan 29 2025 13:00:00 GMT" },
655653 {" functions" , json (inputs.tools .empty () ? " " : inputs.tools .dump (2 ))},
656654 });
657- if (! inputs.tools .is_null () && !inputs.tools .empty ()) {
655+ if (inputs.tools .is_array () && !inputs.tools .empty ()) {
658656 data.grammar_lazy = inputs.tool_choice != " required" ;
659657 data.grammar = build_grammar ([&](const common_grammar_builder & builder) {
660658 auto schemas = json::array ();
@@ -699,7 +697,7 @@ static common_chat_params common_chat_params_init_functionary_v3_2(const common_
699697 common_chat_params data;
700698 data.prompt = apply (tmpl, inputs.messages , inputs.tools .empty () ? json () : inputs.tools , inputs.add_generation_prompt );
701699 data.format = COMMON_CHAT_FORMAT_FUNCTIONARY_V3_2;
702- if (! inputs.tools .is_null () && !inputs.tools .empty ()) {
700+ if (inputs.tools .is_array () && !inputs.tools .empty ()) {
703701 data.grammar_lazy = inputs.tool_choice != " required" ;
704702 data.grammar = build_grammar ([&](const common_grammar_builder & builder) {
705703 std::vector<std::string> first_tool_rules;
0 commit comments