@@ -192,18 +192,25 @@ class chat_template {
192192 };
193193 };
194194 const json dummy_args_obj {{" argument_needle" , " print('Hello, World!')" }};
195+ const auto contains_arg_needle = [&](const std::string & out_str) {
196+ return contains (out_str, " <parameter=argument_needle>" )
197+ || contains (out_str, " \" argument_needle\" :" )
198+ || contains (out_str, " 'argument_needle':" )
199+ || contains (out_str, " >argument_needle<" )
200+ || contains (out_str, " <parameter name=\" argument_needle\" >" );
201+ };
195202
196203 // Note: the arguments are rendered in both cases, but may be double-escaped, which we don't want.
197204 out = try_raw_render (json::array ({
198205 dummy_user_msg,
199206 make_tool_calls_msg (json::array ({make_tool_call (" ipython" , dummy_args_obj.dump ())})),
200207 }), {}, false );
201- auto tool_call_renders_str_arguments = contains (out, " <parameter=argument_needle> " ) || contains (out, " \" argument_needle \" : " ) || contains (out, " 'argument_needle': " );
208+ auto tool_call_renders_str_arguments = contains_arg_needle (out);
202209 out = try_raw_render (json::array ({
203210 dummy_user_msg,
204211 make_tool_calls_msg (json::array ({make_tool_call (" ipython" , dummy_args_obj)})),
205212 }), {}, false );
206- auto tool_call_renders_obj_arguments = contains (out, " <parameter=argument_needle> " ) || contains (out, " \" argument_needle \" : " ) || contains (out, " 'argument_needle': " );
213+ auto tool_call_renders_obj_arguments = contains_arg_needle (out);
207214
208215 caps_.supports_tool_calls = tool_call_renders_str_arguments || tool_call_renders_obj_arguments;
209216 caps_.requires_object_arguments = !tool_call_renders_str_arguments && tool_call_renders_obj_arguments;
0 commit comments