]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
Optimization: eliminate addition of redundant stacks when advancing grammar. (#6616)
authorClint Herron <redacted>
Fri, 12 Apr 2024 01:44:50 +0000 (21:44 -0400)
committerGitHub <redacted>
Fri, 12 Apr 2024 01:44:50 +0000 (21:44 -0400)
llama.cpp

index ad07059c4533a287b3172e47cbecb022efc4c3a4..73ff60706288429d1e510321bc101c13e8bb6f16 100644 (file)
--- a/llama.cpp
+++ b/llama.cpp
@@ -11861,7 +11861,9 @@ static void llama_grammar_advance_stack(
         std::vector<std::vector<const llama_grammar_element *>> & new_stacks) {
 
     if (stack.empty()) {
-        new_stacks.emplace_back(stack);
+        if (std::find(new_stacks.begin(), new_stacks.end(), stack) == new_stacks.end()) {
+            new_stacks.emplace_back(stack);
+        }
         return;
     }
 
@@ -11898,7 +11900,10 @@ static void llama_grammar_advance_stack(
         }
         case LLAMA_GRETYPE_CHAR:
         case LLAMA_GRETYPE_CHAR_NOT:
-            new_stacks.emplace_back(stack);
+            if (std::find(new_stacks.begin(), new_stacks.end(), stack) == new_stacks.end()) {
+                // only add the stack if it's not a duplicate of one we already have
+                new_stacks.emplace_back(stack);
+            }
             break;
         default:
             // end of alternate (LLAMA_GRETYPE_END, LLAMA_GRETYPE_ALT) or middle of char range