const auto & function = tool.at("function");
result.push_back({
/* .name = */ function.at("name"),
- /* .description = */ function.at("description"),
- /* .parameters = */ function.at("parameters").dump(),
+ /* .description = */ function.value("description", ""),
+ /* .parameters = */ function.value("parameters", json::object()).dump(),
});
}
}
"]"
),
common_chat_tools_to_json_oaicompat<json>({special_function_tool}).dump(2));
+
+ {
+ auto tools_no_params = common_chat_tools_parse_oaicompat(json::parse(
+ R"([{"type": "function", "function": {"name": "test_func", "description": "A test"}}])"));
+ assert_equals((size_t) 1, tools_no_params.size());
+ assert_equals(std::string("test_func"), tools_no_params[0].name);
+ assert_equals(std::string("A test"), tools_no_params[0].description);
+ assert_equals(std::string("{}"), tools_no_params[0].parameters);
+ }
+ {
+ auto tools_no_desc = common_chat_tools_parse_oaicompat(json::parse(
+ R"([{"type": "function", "function": {"name": "test_func", "parameters": {"type": "object"}}}])"));
+ assert_equals((size_t) 1, tools_no_desc.size());
+ assert_equals(std::string("test_func"), tools_no_desc[0].name);
+ assert_equals(std::string(""), tools_no_desc[0].description);
+ }
+ {
+ auto tools_minimal = common_chat_tools_parse_oaicompat(json::parse(
+ R"([{"type": "function", "function": {"name": "test_func"}}])"));
+ assert_equals((size_t) 1, tools_minimal.size());
+ assert_equals(std::string("test_func"), tools_minimal[0].name);
+ assert_equals(std::string(""), tools_minimal[0].description);
+ assert_equals(std::string("{}"), tools_minimal[0].parameters);
+ }
}
static void test_template_output_parsers() {