@@ -162,10 +162,14 @@ class chat_template {
162162 }), false );
163163 caps_.supports_tools = contains (out, " some_tool" );
164164
165+ auto out_empty = try_raw_render (json::array ({dummy_user_msg, {{" role" , " assistant" }, {" content" , " " }}}), {}, false );
166+ auto out_null = try_raw_render (json::array ({dummy_user_msg, {{" role" , " assistant" }, {" content" , nullptr }}}), {}, false );
167+ caps_.requires_non_null_content = contains (out_empty, user_needle) && !contains (out_null, user_needle);
168+
165169 auto make_tool_calls_msg = [&](const json & tool_calls) {
166170 return json {
167171 {" role" , " assistant" },
168- {" content" , nullptr },
172+ {" content" , caps_. requires_non_null_content ? " " : nullptr },
169173 {" tool_calls" , tool_calls},
170174 };
171175 };
@@ -195,9 +199,6 @@ class chat_template {
195199
196200 caps_.supports_tool_calls = tool_call_renders_str_arguments || tool_call_renders_obj_arguments;
197201 caps_.requires_object_arguments = !tool_call_renders_str_arguments && tool_call_renders_obj_arguments;
198- auto out_empty = try_raw_render (json::array ({dummy_user_msg, {{" role" , " assistant" }, {" content" , " " }}}), {}, false );
199- auto out_null = try_raw_render (json::array ({dummy_user_msg, {{" role" , " assistant" }, {" content" , nullptr }}}), {}, false );
200- caps_.requires_non_null_content = contains (out_empty, user_needle) && !contains (out_null, user_needle);
201202
202203 if (caps_.supports_tool_calls ) {
203204 auto dummy_args = caps_.requires_object_arguments ? dummy_args_obj : json (dummy_args_obj.dump ());
@@ -234,7 +235,7 @@ class chat_template {
234235 };
235236 const json tool_call_msg {
236237 {" role" , " assistant" },
237- {" content" , nullptr },
238+ {" content" , caps_. requires_non_null_content ? " " : nullptr },
238239 {" tool_calls" , json::array ({
239240 {
240241 // TODO: detect if requires numerical id or fixed length == 6 like Nemo
0 commit comments