From 3bdcc4f77317fc26abc3e71b537ee122bf7afb69 Mon Sep 17 00:00:00 2001 From: Alde Rojas Date: Wed, 24 Dec 2025 02:19:09 -0600 Subject: [PATCH] grammar : check pattern directly instead of adding a type --- src/llama-grammar.cpp | 24 ++++++++---------------- src/llama-grammar.h | 6 ------ 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/src/llama-grammar.cpp b/src/llama-grammar.cpp index d62733b5d6..64ea2fd00a 100644 --- a/src/llama-grammar.cpp +++ b/src/llama-grammar.cpp @@ -372,14 +372,6 @@ static void print_rule( // // Regex utilities // -static llama_grammar_trigger_pattern llama_grammar_trigger_pattern_compile(const std::string & pattern) { - llama_grammar_trigger_pattern_type type = LLAMA_GRAMMAR_TRIGGER_PATTERN_TYPE_SEARCH; - if (!pattern.empty() && pattern.front() == '^' && pattern.back() == '$') { - // If anchored on both ends, consider it a match - type = LLAMA_GRAMMAR_TRIGGER_PATTERN_TYPE_MATCH; - } - return {type, pattern, std::regex(pattern)}; -} size_t llama_grammar_trigger_pattern::find(const std::string & input) const { auto find_start_pos = [](const std::smatch & match) { @@ -397,7 +389,7 @@ size_t llama_grammar_trigger_pattern::find(const std::string & input) const { return start; }; - if (type == LLAMA_GRAMMAR_TRIGGER_PATTERN_TYPE_MATCH) { + if (!pattern.empty() && pattern.front() == '^' && pattern.back() == '$') { // match against the entire input std::smatch match; if (std::regex_match(input, match, regex)) { @@ -405,12 +397,10 @@ size_t llama_grammar_trigger_pattern::find(const std::string & input) const { } } - if (type == LLAMA_GRAMMAR_TRIGGER_PATTERN_TYPE_SEARCH) { - // search anywhere - std::smatch match; - if (std::regex_search(input, match, regex)) { - return find_start_pos(match); - } + // search anywhere + std::smatch match; + if (std::regex_search(input, match, regex)) { + return find_start_pos(match); } return std::string::npos; @@ -1240,7 +1230,9 @@ struct llama_grammar * llama_grammar_init_impl( } for (size_t i = 0; i < num_trigger_patterns; i++) { GGML_ASSERT(trigger_patterns != nullptr); - vec_trigger_patterns.emplace_back(llama_grammar_trigger_pattern_compile(trigger_patterns[i])); + auto & trigger = vec_trigger_patterns.emplace_back(); + trigger.pattern = trigger_patterns[i]; + trigger.regex = std::regex(trigger.pattern); } // Important: vec_rules has to be moved here, not copied, because stacks contains diff --git a/src/llama-grammar.h b/src/llama-grammar.h index 2cd03bff1f..b5a0e588e9 100644 --- a/src/llama-grammar.h +++ b/src/llama-grammar.h @@ -116,13 +116,7 @@ struct llama_grammar_parser { void print(FILE * file); }; -enum llama_grammar_trigger_pattern_type { - LLAMA_GRAMMAR_TRIGGER_PATTERN_TYPE_MATCH = 0, - LLAMA_GRAMMAR_TRIGGER_PATTERN_TYPE_SEARCH = 1, -}; - struct llama_grammar_trigger_pattern { - llama_grammar_trigger_pattern_type type; std::string pattern; std::regex regex;