summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClint Herron <hanclinto@gmail.com>2024-04-11 21:44:50 -0400
committerGitHub <noreply@github.com>2024-04-11 21:44:50 -0400
commit04a5ac211ef40936295980b7cdf0ba6e97093146 (patch)
tree75d9d953c3292f55dfc1b50c447fa42a74129972
parentf7001ccc5aa359fcf41bba19d1c99c3d25c9bcc7 (diff)
Optimization: eliminate addition of redundant stacks when advancing grammar. (#6616)
-rw-r--r--llama.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/llama.cpp b/llama.cpp
index ad07059c..73ff6070 100644
--- 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