Skip to content

Commit b2d57ce

Browse files
committed
Add multi tool call test for deepseek v3.1 non-reasoning
1 parent 4a2d17d commit b2d57ce

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

tests/test-chat-parser.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,27 @@ static void test_deepseek_v3_1_tool_calls() {
262262
assert_equals(variant, std::string(""), m.content);
263263
assert_equals(variant, std::string("REASONING"), m.reasoning_content);
264264
}
265+
// variant: simple + multiple tool calls
266+
{
267+
common_chat_syntax syntax = {
268+
/* .format = */ COMMON_CHAT_FORMAT_DEEPSEEK_V3_1,
269+
/* .reasoning_format = */ COMMON_REASONING_FORMAT_DEEPSEEK,
270+
/* .reasoning_in_content = */ false,
271+
/* .thinking_forced_open = */ false,
272+
/* .parse_tool_calls = */ true,
273+
};
274+
const char* variant = "simple_multiple_tool_calls";
275+
const std::string in = "CONTENT<|tool▁calls▁begin|><|tool▁call▁begin|>get_time<|tool▁sep|>{\"city\": \"Paris\"}<|tool▁call▁end|><|tool▁call▁begin|>get_weather<|tool▁sep|>{\"city\": \"Paris\"}<|tool▁call▁end|><|tool▁calls▁end|>";
276+
auto m = common_chat_parse(in, false, syntax);
277+
assert_equals<std::size_t>(variant, 2, m.tool_calls.size());
278+
assert_equals(variant, std::string("get_time"), m.tool_calls[0].name);
279+
assert_equals(variant, std::string("{\"city\":\"Paris\"}"), m.tool_calls[0].arguments);
280+
assert_equals(variant, std::string("get_weather"), m.tool_calls[1].name);
281+
assert_equals(variant, std::string("{\"city\":\"Paris\"}"), m.tool_calls[1].arguments);
282+
assert_equals(variant, std::string("CONTENT"), m.content);
283+
assert_equals(variant, std::string(""), m.reasoning_content);
284+
}
285+
265286

266287
// variant: thinking forced open + tool call in reasoning content + function + fenced JSON
267288
{

0 commit comments

Comments
 (0)