Skip to content

Commit e15efe0

Browse files
authored
Relax prefill parser to allow space. (ggml-org#21240)
* Relax prefill parser to allow space. * Move changes from prefix() to parser generation * Only allow spaces if we're not having a pure content parser next
1 parent 6137c32 commit e15efe0

2 files changed

Lines changed: 5 additions & 2 deletions

File tree

common/chat-auto-parser-generator.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,22 @@ common_peg_arena autoparser::build_parser(const generation_params & inputs) cons
100100

101101
bool has_tools = inputs.tools.is_array() && !inputs.tools.empty();
102102
bool has_response_format = inputs.json_schema.is_object() && !inputs.json_schema.empty();
103+
bool pure_content = reasoning.mode == reasoning_mode::NONE;
103104

104105
if (has_response_format) {
105106
auto response_format = p.rule("response-format", p.content(p.schema(p.json(), "response-format-schema", inputs.json_schema)));
106107
parser = ctx.reasoning_parser + p.space() + p.choice({
107108
p.literal("```json") + p.space() + response_format + p.space() + p.literal("```"),
108109
response_format
109110
}) + p.end();
111+
pure_content = false;
110112
} else if (has_tools && inputs.tool_choice != COMMON_CHAT_TOOL_CHOICE_NONE && jinja_caps.supports_tool_calls) {
111113
parser = tools.build_parser(ctx);
114+
pure_content = false;
112115
} else {
113116
parser = content.build_parser(ctx);
114117
}
115-
return p.prefix(inputs.generation_prompt, reasoning.start) + parser;
118+
return pure_content ? p.prefix(inputs.generation_prompt, reasoning.start) + parser : p.prefix(inputs.generation_prompt, reasoning.start) << parser;
116119
});
117120
}
118121

common/chat.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1709,7 +1709,7 @@ static common_chat_params common_chat_templates_apply_jinja(const struct common_
17091709
data.format = COMMON_CHAT_FORMAT_PEG_NATIVE;
17101710
data.generation_prompt = params.generation_prompt;
17111711
auto parser = build_chat_peg_parser([&params](common_chat_peg_builder &p) {
1712-
return p.prefix(params.generation_prompt) + p.content(p.rest());
1712+
return p.prefix(params.generation_prompt) << p.content(p.rest());
17131713
});
17141714
data.parser = parser.save();
17151715
return data;

0 commit comments

Comments
 (0)