@@ -822,15 +822,11 @@ llama_grammar_stacks & llama_grammar_get_stacks(struct llama_grammar * grammar)
822822 return grammar->stacks ;
823823}
824824
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 ());
832828
833- for (const auto & stack : stacks) {
829+ for (const auto & stack : grammar-> stacks ) {
834830 if (stack.empty ()) {
835831 continue ;
836832 }
@@ -844,9 +840,11 @@ void llama_grammar_accept(
844840 if (!llama_grammar_is_end_of_sequence (pos)) {
845841 new_stack.push_back (pos);
846842 }
847- llama_grammar_advance_stack (rules, new_stack, stacks_new);
843+ llama_grammar_advance_stack (grammar-> rules , new_stack, stacks_new);
848844 }
849845 }
846+
847+ grammar->stacks = std::move (stacks_new);
850848}
851849
852850llama_grammar_candidates llama_grammar_reject_candidates_for_stack (
@@ -1051,15 +1049,20 @@ void llama_grammar_free_impl(struct llama_grammar * grammar) {
10511049}
10521050
10531051struct 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+ };
10551058
10561059 // redirect elements in stacks to point to new rules
10571060 for (size_t is = 0 ; is < result->stacks .size (); is++) {
10581061 for (size_t ie = 0 ; ie < result->stacks [is].size (); ie++) {
10591062 for (size_t ir0 = 0 ; ir0 < grammar.rules .size (); ir0++) {
10601063 for (size_t ir1 = 0 ; ir1 < grammar.rules [ir0].size (); ir1++) {
10611064 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];
10631066 }
10641067 }
10651068 }
@@ -1126,11 +1129,8 @@ void llama_grammar_accept_impl(struct llama_grammar & grammar, llama_token token
11261129 const auto decoded = decode_utf8 (piece, grammar.partial_utf8 );
11271130 const auto & code_points = decoded.first ;
11281131
1129- llama_grammar_stacks stacks_new;
1130-
11311132 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);
11341134 }
11351135
11361136 grammar.partial_utf8 = decoded.second ;
0 commit comments