@@ -162,10 +162,15 @@ 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+
169+ json j_null;
165170 auto make_tool_calls_msg = [&](const json & tool_calls) {
166171 return json {
167172 {" role" , " assistant" },
168- {" content" , nullptr },
173+ {" content" , caps_. requires_non_null_content ? " " : j_null },
169174 {" tool_calls" , tool_calls},
170175 };
171176 };
@@ -195,9 +200,6 @@ class chat_template {
195200
196201 caps_.supports_tool_calls = tool_call_renders_str_arguments || tool_call_renders_obj_arguments;
197202 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);
201203
202204 if (caps_.supports_tool_calls ) {
203205 auto dummy_args = caps_.requires_object_arguments ? dummy_args_obj : json (dummy_args_obj.dump ());
@@ -234,7 +236,7 @@ class chat_template {
234236 };
235237 const json tool_call_msg {
236238 {" role" , " assistant" },
237- {" content" , nullptr },
239+ {" content" , caps_. requires_non_null_content ? " " : j_null },
238240 {" tool_calls" , json::array ({
239241 {
240242 // TODO: detect if requires numerical id or fixed length == 6 like Nemo
0 commit comments