From a4d976df93bddaf94dc06e9bb04961ebbfffcf74 Mon Sep 17 00:00:00 2001 From: Alde Rojas Date: Wed, 9 Sep 2026 08:58:26 -0500 Subject: [PATCH] cont : remove common_chat_tool_parameters --- common/chat-auto-parser-generator.cpp | 2 +- common/chat-peg-parser.cpp | 17 +++-------------- common/chat-peg-parser.h | 4 ---- common/parsers/functionary-v3-2.cpp | 2 +- common/parsers/gigachat-v3.cpp | 2 +- common/parsers/gpt-oss.cpp | 2 +- common/parsers/kimi-k2.cpp | 2 +- common/parsers/ministral3.cpp | 2 +- 8 files changed, 9 insertions(+), 24 deletions(-) diff --git a/common/chat-auto-parser-generator.cpp b/common/chat-auto-parser-generator.cpp index 04f98071ab..d7e117e4d9 100644 --- a/common/chat-auto-parser-generator.cpp +++ b/common/chat-auto-parser-generator.cpp @@ -312,7 +312,7 @@ common_peg_parser analyze_tools::build_tool_parser_tag_json(parser_build_context foreach_function(inputs.tools, [&](const json & tool) { const auto & func = tool.at("function"); std::string name = func.at("name"); - auto schema = common_chat_tool_parameters(func); + const auto & schema = func.contains("parameters") ? func.at("parameters") : json::object(); // Build call_id parser based on position (if supported) bool have_call_id = false; diff --git a/common/chat-peg-parser.cpp b/common/chat-peg-parser.cpp index b8e5adc3b2..79b97a80f1 100644 --- a/common/chat-peg-parser.cpp +++ b/common/chat-peg-parser.cpp @@ -640,7 +640,7 @@ common_peg_parser common_chat_peg_builder::build_json_tools_function_is_key( } const auto & function = tool_def.at("function"); std::string name = function.at("name"); - ordered_json params = common_chat_tool_parameters(function); + ordered_json params = function.contains("parameters") ? function.at("parameters") : ordered_json::object(); // Build inner object fields std::vector inner_fields; @@ -726,7 +726,7 @@ common_peg_parser common_chat_peg_builder::build_json_tools_nested_keys( } const auto & function = tool_def.at("function"); std::string name = function.at("name"); - ordered_json params = common_chat_tool_parameters(function); + ordered_json params = function.contains("parameters") ? function.at("parameters") : ordered_json::object(); auto nested_name = literal("\"" + nested_name_field + "\"") + space() + literal(":") + space() + atomic(literal("\"") + tool_name(literal(name)) + literal("\"")); @@ -795,7 +795,7 @@ common_peg_parser common_chat_peg_builder::build_json_tools_flat_keys( } const auto & function = tool_def.at("function"); std::string name = function.at("name"); - ordered_json params = common_chat_tool_parameters(function); + ordered_json params = function.contains("parameters") ? function.at("parameters") : ordered_json::object(); auto tool_name_ = name_key_parser + space() + literal(":") + space() + atomic(literal("\"") + tool_name(literal(name)) + literal("\"")); @@ -1230,14 +1230,3 @@ void common_chat_peg_minimax_m3_mapper::visit(const common_peg_ast_arena & arena visit(arena, child_id); } } - -common_json common_chat_tool_parameters(const common_json & function) { - if (function.contains("parameters") && function.at("parameters").is_object() && !function.at("parameters").empty()) { - return function.at("parameters"); - } - auto schema = common_json::object(); - schema["type"] = "object"; - schema["properties"] = common_json::object(); - schema["additionalProperties"] = false; - return schema; -} diff --git a/common/chat-peg-parser.h b/common/chat-peg-parser.h index 06df5a94de..114fa049fa 100644 --- a/common/chat-peg-parser.h +++ b/common/chat-peg-parser.h @@ -218,7 +218,3 @@ struct tagged_peg_parser { tagged_peg_parser build_tagged_peg_parser( const std::function & fn); - -// The parameters schema of a tool for its arguments parser. Like the OpenAI API, a missing or empty -// "parameters" means the tool takes no arguments, not that any value is accepted. -common_json common_chat_tool_parameters(const common_json & function); diff --git a/common/parsers/functionary-v3-2.cpp b/common/parsers/functionary-v3-2.cpp index d2c9aec61d..349b8065ac 100644 --- a/common/parsers/functionary-v3-2.cpp +++ b/common/parsers/functionary-v3-2.cpp @@ -45,7 +45,7 @@ common_chat_params common_chat_params_init_functionary_v3_2(const common_chat_te foreach_function(inputs.tools, [&](const json & tool) { const auto & function = tool.at("function"); std::string name = function.at("name"); - auto schema = common_chat_tool_parameters(function); + const auto & schema = function.at("parameters"); // Tool format: >>>function_name\n{json_args} auto tool_parser = p.tool( diff --git a/common/parsers/gigachat-v3.cpp b/common/parsers/gigachat-v3.cpp index 086bac6366..41da5554ac 100644 --- a/common/parsers/gigachat-v3.cpp +++ b/common/parsers/gigachat-v3.cpp @@ -33,7 +33,7 @@ common_chat_params common_chat_params_init_gigachat_v3( for (const auto & tool : inputs.tools) { const auto & function = tool.at("function"); std::string name = function.at("name"); - auto schema = common_chat_tool_parameters(function); + const auto & schema = function.at("parameters"); auto tool_name = p.json_member("name", "\"" + p.tool_name(p.literal(name)) + "\""); auto tool_args = p.json_member("arguments", p.tool_args(p.schema(p.json(), "tool-" + name + "-schema", schema))); diff --git a/common/parsers/gpt-oss.cpp b/common/parsers/gpt-oss.cpp index c1148344f7..d7dbfbfb57 100644 --- a/common/parsers/gpt-oss.cpp +++ b/common/parsers/gpt-oss.cpp @@ -109,7 +109,7 @@ common_chat_params common_chat_params_init_gpt_oss(const common_chat_template & foreach_function(inputs.tools, [&](const json & tool) { const auto & function = tool.at("function"); std::string name = function.at("name"); - auto params = common_chat_tool_parameters(function); + const auto & params = function.at("parameters"); auto func_name = p.literal(" to=functions.") + p.tool_name(p.literal(name)); auto constraint = p.optional(p.space() + p.optional(p.literal("<|constrain|>")) + constrain_type); diff --git a/common/parsers/kimi-k2.cpp b/common/parsers/kimi-k2.cpp index ebc7e5a4b0..57f6bfdcb6 100644 --- a/common/parsers/kimi-k2.cpp +++ b/common/parsers/kimi-k2.cpp @@ -82,7 +82,7 @@ common_chat_params common_chat_params_init_kimi_k2(const common_chat_template & foreach_function(inputs.tools, [&](const json & tool) { const auto & function = tool.at("function"); std::string name = function.at("name"); - auto schema = common_chat_tool_parameters(function); + const auto & schema = function.at("parameters"); // Match: functions.: // Capture the full call id (functions.:) using tool_id tag diff --git a/common/parsers/ministral3.cpp b/common/parsers/ministral3.cpp index 7b6b50d729..075f14dbc1 100644 --- a/common/parsers/ministral3.cpp +++ b/common/parsers/ministral3.cpp @@ -89,7 +89,7 @@ common_chat_params common_chat_params_init_ministral_3(const common_chat_templat foreach_function(inputs.tools, [&](const json & tool) { const auto & function = tool.at("function"); std::string name = function.at("name"); - auto schema = common_chat_tool_parameters(function); + const auto & schema = function.at("parameters"); tool_choice |= p.rule("tool-" + name, p.tool_open(p.tool_name(p.literal(name)) + "[ARGS]") +