@@ -162,10 +162,14 @@ class chat_template {
162
162
}), false );
163
163
caps_.supports_tools = contains (out, " some_tool" );
164
164
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
+
165
169
auto make_tool_calls_msg = [&](const json & tool_calls) {
166
170
return json {
167
171
{" role" , " assistant" },
168
- {" content" , nullptr },
172
+ {" content" , caps_. requires_non_null_content ? " " : nullptr },
169
173
{" tool_calls" , tool_calls},
170
174
};
171
175
};
@@ -195,9 +199,6 @@ class chat_template {
195
199
196
200
caps_.supports_tool_calls = tool_call_renders_str_arguments || tool_call_renders_obj_arguments;
197
201
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);
201
202
202
203
if (caps_.supports_tool_calls ) {
203
204
auto dummy_args = caps_.requires_object_arguments ? dummy_args_obj : json (dummy_args_obj.dump ());
@@ -234,7 +235,7 @@ class chat_template {
234
235
};
235
236
const json tool_call_msg {
236
237
{" role" , " assistant" },
237
- {" content" , nullptr },
238
+ {" content" , caps_. requires_non_null_content ? " " : nullptr },
238
239
{" tool_calls" , json::array ({
239
240
{
240
241
// TODO: detect if requires numerical id or fixed length == 6 like Nemo
0 commit comments