@@ -2116,22 +2116,38 @@ std::optional<common_chat_params> common_chat_try_specialized_template(
21162116 return std::nullopt ;
21172117}
21182118
2119+ static std::string common_chat_templates_generation_prompt (const common_chat_template & tmpl, const autoparser::generation_params & inputs) {
2120+ autoparser::generation_params params = inputs;
2121+ params.add_generation_prompt = false ;
2122+ std::string no_gen_prompt = common_chat_template_direct_apply_impl (tmpl, params);
2123+ params.add_generation_prompt = true ;
2124+ std::string gen_prompt = common_chat_template_direct_apply_impl (tmpl, params);
2125+
2126+ size_t prefix_len = 0 ;
2127+ size_t min_size = std::min (no_gen_prompt.size (), gen_prompt.size ());
2128+ while (prefix_len < min_size && no_gen_prompt[prefix_len] == gen_prompt[prefix_len]) {
2129+ prefix_len++;
2130+ }
2131+ return gen_prompt.substr (prefix_len);
2132+ }
2133+
21192134static common_chat_params common_chat_templates_apply_jinja (const struct common_chat_templates * tmpls,
21202135 const struct common_chat_templates_inputs & inputs) {
21212136 autoparser::generation_params params;
21222137 params.tools = common_chat_tools_to_json_oaicompat (inputs.tools );
21232138 const auto & tmpl =
21242139 params.tools .is_array () && tmpls->template_tool_use ? *tmpls->template_tool_use : *tmpls->template_default ;
2125- const auto & src = tmpl.source ();
2126- const auto & caps = tmpl.original_caps ();
2127- params.messages = render_message_to_json (inputs.messages , tmpl.original_caps ());
2128- params.tool_choice = inputs.tool_choice ;
2129- params.reasoning_format = inputs.reasoning_format ;
2130- params.enable_thinking = inputs.enable_thinking ;
2131- params.grammar = inputs.grammar ;
2132- params.now = inputs.now ;
2133- params.add_bos = tmpls->add_bos ;
2134- params.add_eos = tmpls->add_eos ;
2140+ const auto & src = tmpl.source ();
2141+ const auto & caps = tmpl.original_caps ();
2142+ params.messages = render_message_to_json (inputs.messages , tmpl.original_caps ());
2143+ params.tool_choice = inputs.tool_choice ;
2144+ params.reasoning_format = inputs.reasoning_format ;
2145+ params.enable_thinking = inputs.enable_thinking ;
2146+ params.grammar = inputs.grammar ;
2147+ params.now = inputs.now ;
2148+ params.add_generation_prompt = inputs.add_generation_prompt ;
2149+ params.add_bos = tmpls->add_bos ;
2150+ params.add_eos = tmpls->add_eos ;
21352151
21362152 if (src.find (" <|channel|>" ) == std::string::npos) {
21372153 // map developer to system for all models except for GPT-OSS
@@ -2153,14 +2169,7 @@ static common_chat_params common_chat_templates_apply_jinja(const struct common_
21532169 workaround::func_args_not_string (params.messages );
21542170 }
21552171
2156- params.add_generation_prompt = false ;
2157- std::string no_gen_prompt = common_chat_template_direct_apply_impl (tmpl, params);
2158- params.add_generation_prompt = true ;
2159- std::string gen_prompt = common_chat_template_direct_apply_impl (tmpl, params);
2160- auto diff = calculate_diff_split (no_gen_prompt, gen_prompt);
2161- params.generation_prompt = diff.right + diff.suffix ;
2162-
2163- params.add_generation_prompt = inputs.add_generation_prompt ;
2172+ params.generation_prompt = common_chat_templates_generation_prompt (tmpl, params);
21642173
21652174 params.extra_context = common_chat_extra_context ();
21662175 for (auto el : inputs.chat_template_kwargs ) {
@@ -2212,8 +2221,8 @@ static common_chat_params common_chat_templates_apply_jinja(const struct common_
22122221 auto auto_params = autoparser::peg_generator::generate_parser (tmpl, params, autoparser);
22132222 auto_params.supports_thinking = autoparser.reasoning .mode != autoparser::reasoning_mode::NONE;
22142223 if (auto_params.supports_thinking ) {
2215- auto_params.thinking_start_tag = autoparser.reasoning .start ;
2216- auto_params.thinking_end_tag = autoparser.reasoning .end ;
2224+ auto_params.thinking_start_tag = trim_whitespace ( autoparser.reasoning .start ) ;
2225+ auto_params.thinking_end_tag = trim_whitespace ( autoparser.reasoning .end ) ;
22172226 }
22182227 auto_params.generation_prompt = params.generation_prompt ;
22192228 common_peg_arena arena;
0 commit comments