@@ -552,6 +552,17 @@ common_chat_templates_ptr common_chat_templates_init(
552552 default_template_src = CHATML_TEMPLATE_SRC;
553553 }
554554 }
555+
556+ // TODO @ngxson : this is a temporary hack to prevent chat template from throwing an error
557+ // Ref: https://github.com/ggml-org/llama.cpp/pull/15230#issuecomment-3173959633
558+ if (default_template_src.find (" <|channel|>" ) != std::string::npos
559+ // search for the error message and patch it
560+ && default_template_src.find (" in message.content or" ) != std::string::npos) {
561+ string_replace_all (default_template_src,
562+ " {%- if \" <|channel|>analysis<|message|>\" in message.content or \" <|channel|>final<|message|>\" in message.content %}" ,
563+ " {%- if false %}" );
564+ }
565+
555566 std::string token_bos = bos_token_override;
556567 std::string token_eos = eos_token_override;
557568 bool add_bos = false ;
@@ -625,6 +636,19 @@ const char * common_reasoning_format_name(common_reasoning_format format) {
625636 }
626637}
627638
639+ common_reasoning_format common_reasoning_format_from_name (const std::string & format) {
640+ if (format == " none" ) {
641+ return COMMON_REASONING_FORMAT_NONE;
642+ } else if (format == " auto" ) {
643+ return COMMON_REASONING_FORMAT_AUTO;
644+ } else if (format == " deepseek" ) {
645+ return COMMON_REASONING_FORMAT_DEEPSEEK;
646+ } else if (format == " deepseek-legacy" ) {
647+ return COMMON_REASONING_FORMAT_DEEPSEEK_LEGACY;
648+ }
649+ throw std::runtime_error (" Unknown reasoning format: " + format);
650+ }
651+
628652static std::string wrap_code_as_arguments (common_chat_msg_parser & builder, const std::string & code) {
629653 std::string arguments;
630654 if (builder.is_partial ()) {
0 commit comments