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