chat : Fix Muse Glimmer tool-call first parser error (#29242)

* Fix Muse Glimmer tool-call first parser error

* Add test to verify

* Condense patterns

* remove test for trigger patterns
This commit is contained in:
Nicolas Mowen 2026-09-22 01:38:52 -06:00 • committed by GitHub
parent 0ee9435b8f
commit 7ab4ee7baa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 9 additions and 1 deletions

View file

@ -130,7 +130,7 @@ common_chat_params common_chat_params_init_muse_glimmer(const common_chat_templa
});
data.grammar_triggers = {
{ COMMON_GRAMMAR_TRIGGER_TYPE_PATTERN,
"<\\|start\\|>assistant( to=(?!self<\\|message\\|>)(?!user<\\|message\\|>)[^<]*?<\\|message\\|>)" },
"(?:^|<\\|start\\|>assistant)( to=(?!self<\\|message\\|>)(?!user<\\|message\\|>)[^<]*?<\\|message\\|>)" },
};
}

View file

@ -6357,6 +6357,14 @@ static void test_template_output_peg_parsers(bool detailed_debug) {
.expect(message_assist)
.run();
// A tool call as the first message of the turn: "<|start|>assistant" is the
// generation prompt, so the output starts at " to=".
tst.test(" to=special_function<|message|>" + call_markup)
.tools({ special_function_tool })
.reasoning_format(COMMON_REASONING_FORMAT_AUTO)
.expect(message_assist_call)
.run();
// "Inform then act": the model answers the user and calls a tool in ONE generation,
// closing the answer with <|eom|>. The answer must stop there rather than swallow it.
tst.test(" to=user<|message|>Hello, world!\nWhat's up?<|eom|>"