@@ -1050,14 +1050,16 @@ struct llama_grammar * llama_grammar_init_impl(
10501050 } while (true );
10511051
10521052 std::vector<llama_token> vec_trigger_tokens;
1053- std::vector<std::pair<std::string, std::regex>> vec_trigger_patterns;
1053+ std::vector<llama_grammar_trigger_pattern> vec_trigger_patterns;
10541054 for (size_t i = 0 ; i < num_trigger_tokens; i++) {
10551055 GGML_ASSERT (trigger_tokens != nullptr );
10561056 vec_trigger_tokens.push_back (trigger_tokens[i]);
10571057 }
10581058 for (size_t i = 0 ; i < num_trigger_patterns; i++) {
10591059 GGML_ASSERT (trigger_patterns != nullptr );
1060- vec_trigger_patterns.emplace_back (trigger_patterns[i], trigger_patterns[i]);
1060+ auto & trigger = vec_trigger_patterns.back ();
1061+ trigger.pattern = trigger_patterns[i];
1062+ trigger.regex = std::regex (trigger.pattern );
10611063 }
10621064
10631065 // Important: vec_rules has to be moved here, not copied, because stacks contains
@@ -1085,7 +1087,7 @@ void llama_grammar_free_impl(struct llama_grammar * grammar) {
10851087}
10861088
10871089struct llama_grammar * llama_grammar_clone_impl (const struct llama_grammar & grammar) {
1088- llama_grammar * result = new llama_grammar {
1090+ auto * result = new llama_grammar {
10891091 grammar.vocab ,
10901092 grammar.rules ,
10911093 grammar.stacks ,
@@ -1172,8 +1174,8 @@ void llama_grammar_accept_impl(struct llama_grammar & grammar, llama_token token
11721174 grammar.trigger_buffer += piece;
11731175
11741176 std::smatch match;
1175- for (const auto & [_, regex] : grammar.trigger_patterns ) {
1176- if (std::regex_match (grammar.trigger_buffer , match, regex)) {
1177+ for (const auto & trigger_pattern : grammar.trigger_patterns ) {
1178+ if (std::regex_match (grammar.trigger_buffer , match, trigger_pattern. regex )) {
11771179 grammar.awaiting_trigger = false ;
11781180 // get from the first match to the end of the string
11791181 auto constrained_str = grammar.trigger_buffer .substr (match.position (1 ));
0 commit comments