From: Aldehir Rojas Date: Tue, 11 Aug 2026 15:58:54 +0000 (-0500) Subject: chat : tighten bare function parsing for Qwen models (#26793) X-Git-Tag: upstream/0.0.10438~63 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=ba360efe1f574ebae727aad64112d18ecedca85a;p=pkg%2Fggml%2Fsources%2Fllama.cpp chat : tighten bare function parsing for Qwen models (#26793) --- diff --git a/common/chat.cpp b/common/chat.cpp index 6cbf23b50..01053ddde 100644 --- a/common/chat.cpp +++ b/common/chat.cpp @@ -1166,6 +1166,16 @@ static common_chat_params common_chat_params_init_qwen3_coder(const common_chat_ data.prompt += data.generation_prompt; } + std::vector tool_call_starts = { "" }; + + // Match complete opener for Qwen3-Coder models that occasionally omit the + // starting . The model may hallucinate a tool name, but it is preferable over + // constraining on + foreach_function(inputs.tools, [&](const json & tool) { + const std::string name = tool.at("function").at("name"); + tool_call_starts.push_back(""); + }); + auto parser = build_chat_peg_parser([&](common_chat_peg_builder & p) { auto generation_prompt = p.literal(GEN_PREFIX); @@ -1238,7 +1248,7 @@ static common_chat_params common_chat_params_init_qwen3_coder(const common_chat_ auto tool_calls = p.trigger_rule("tool-call-root", p.repeat(calls, min_calls, 1)); return generation_prompt + - (reasoning << p.content(p.until_one_of({ "", "" }, - // Trigger on "