mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2025-10-28 08:31:25 +00:00
common : fix reasoning before forced tool call via tool_choice = required (#16264)
* common : fix reasoning before forced tool call via tool_choice = required * common : improve reasoning and commentary handling when tool_choice is required (cherry picked from commit c746984956d6882c2de73d53ae2bb3bdf889e475) --------- Co-authored-by: Alde Rojas <hello@alde.dev>
This commit is contained in:
@@ -1616,17 +1616,36 @@ static common_chat_params common_chat_params_init_gpt_oss(const common_chat_temp
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
auto recipient_in_role = builder.add_rule("recipient_in_role",
|
|
||||||
"\"<|start|>assistant\"? \" to=functions.\" ( " +
|
|
||||||
string_join(tool_rules_recipient_in_role, " | ") + " )"
|
|
||||||
);
|
|
||||||
|
|
||||||
auto recipient_in_channel = builder.add_rule("recipient_in_channel",
|
auto recipient_in_channel = builder.add_rule("recipient_in_channel",
|
||||||
channel + " \" to=functions.\" ( " +
|
channel + " \" to=functions.\" ( " +
|
||||||
string_join(tool_rules_recipient_in_channel, " | ") + " )"
|
string_join(tool_rules_recipient_in_channel, " | ") + " )"
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (data.grammar_lazy) {
|
||||||
|
auto recipient_in_role = builder.add_rule("recipient_in_role",
|
||||||
|
"\"<|start|>assistant\"? \" to=functions.\" ( " +
|
||||||
|
string_join(tool_rules_recipient_in_role, " | ") + " )"
|
||||||
|
);
|
||||||
|
|
||||||
builder.add_rule("root", recipient_in_role + " | " + recipient_in_channel);
|
builder.add_rule("root", recipient_in_role + " | " + recipient_in_channel);
|
||||||
|
} else {
|
||||||
|
auto not_end = builder.add_rule("not-end",
|
||||||
|
"[^<] | \"<\" [^|] | \"<|\" [^e] | \"<|e\" [^n] | \"<|en\" [^d] | \"<|end\" [^|] | \"<|end|\" [^>]");
|
||||||
|
auto analysis = builder.add_rule("analysis",
|
||||||
|
"\"<|channel|>analysis<|message|>\" ( " + not_end + " )* \"<|end|>\"");
|
||||||
|
auto commentary = builder.add_rule("commentary",
|
||||||
|
"\"<|channel|>commentary<|message|>\" ( " + not_end + " )* \"<|end|>\"");
|
||||||
|
|
||||||
|
auto recipient_in_role = builder.add_rule("recipient_in_role",
|
||||||
|
"\" to=functions.\" ( " + string_join(tool_rules_recipient_in_role, " | ") + " )"
|
||||||
|
);
|
||||||
|
|
||||||
|
builder.add_rule("root",
|
||||||
|
"( " + analysis + " \"<|start|>assistant\" )? " +
|
||||||
|
"( " + commentary + " \"<|start|>assistant\" )? " +
|
||||||
|
"( " + recipient_in_role + " | " + recipient_in_channel + " )"
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Trigger on tool calls that appear in the commentary channel
|
// Trigger on tool calls that appear in the commentary channel
|
||||||
data.grammar_triggers.push_back({
|
data.grammar_triggers.push_back({
|
||||||
|
|||||||
Reference in New Issue
Block a user