@@ -822,15 +822,11 @@ llama_grammar_stacks & llama_grammar_get_stacks(struct llama_grammar * grammar)
822
822
return grammar->stacks ;
823
823
}
824
824
825
- void llama_grammar_accept (
826
- const llama_grammar_rules & rules,
827
- const llama_grammar_stacks & stacks,
828
- const uint32_t chr,
829
- llama_grammar_stacks & stacks_new) {
830
- stacks_new.clear ();
831
- stacks_new.reserve (stacks.size ());
825
+ void llama_grammar_accept (struct llama_grammar * grammar, uint32_t chr) {
826
+ llama_grammar_stacks stacks_new;
827
+ stacks_new.reserve (grammar->stacks .size ());
832
828
833
- for (const auto & stack : stacks) {
829
+ for (const auto & stack : grammar-> stacks ) {
834
830
if (stack.empty ()) {
835
831
continue ;
836
832
}
@@ -844,9 +840,11 @@ void llama_grammar_accept(
844
840
if (!llama_grammar_is_end_of_sequence (pos)) {
845
841
new_stack.push_back (pos);
846
842
}
847
- llama_grammar_advance_stack (rules, new_stack, stacks_new);
843
+ llama_grammar_advance_stack (grammar-> rules , new_stack, stacks_new);
848
844
}
849
845
}
846
+
847
+ grammar->stacks = std::move (stacks_new);
850
848
}
851
849
852
850
llama_grammar_candidates llama_grammar_reject_candidates_for_stack (
@@ -1051,15 +1049,20 @@ void llama_grammar_free_impl(struct llama_grammar * grammar) {
1051
1049
}
1052
1050
1053
1051
struct llama_grammar * llama_grammar_clone_impl (const struct llama_grammar & grammar) {
1054
- llama_grammar * result = new llama_grammar { grammar.vocab , grammar.rules , grammar.stacks , grammar.partial_utf8 , };
1052
+ llama_grammar * result = new llama_grammar {
1053
+ grammar.vocab ,
1054
+ grammar.rules ,
1055
+ grammar.stacks ,
1056
+ grammar.partial_utf8 ,
1057
+ };
1055
1058
1056
1059
// redirect elements in stacks to point to new rules
1057
1060
for (size_t is = 0 ; is < result->stacks .size (); is++) {
1058
1061
for (size_t ie = 0 ; ie < result->stacks [is].size (); ie++) {
1059
1062
for (size_t ir0 = 0 ; ir0 < grammar.rules .size (); ir0++) {
1060
1063
for (size_t ir1 = 0 ; ir1 < grammar.rules [ir0].size (); ir1++) {
1061
1064
if (grammar.stacks [is][ie] == &grammar.rules [ir0][ir1]) {
1062
- result->stacks [is][ie] = &result->rules [ir0][ir1];
1065
+ result->stacks [is][ie] = &result->rules [ir0][ir1];
1063
1066
}
1064
1067
}
1065
1068
}
@@ -1126,11 +1129,8 @@ void llama_grammar_accept_impl(struct llama_grammar & grammar, llama_token token
1126
1129
const auto decoded = decode_utf8 (piece, grammar.partial_utf8 );
1127
1130
const auto & code_points = decoded.first ;
1128
1131
1129
- llama_grammar_stacks stacks_new;
1130
-
1131
1132
for (auto it = code_points.begin (), end = code_points.end () - 1 ; it != end; ++it) {
1132
- llama_grammar_accept (grammar.rules , grammar.stacks , *it, stacks_new);
1133
- grammar.stacks = std::move (stacks_new);
1133
+ llama_grammar_accept (&grammar, *it);
1134
1134
}
1135
1135
1136
1136
grammar.partial_utf8 = decoded.second ;
0 commit comments