Skip to content

Commit 9d474f2

Browse files
committed
use 'llg:' grammar prefix as marker
1 parent 1f65f7a commit 9d474f2

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,3 +133,4 @@ poetry.toml
133133

134134
# Test models for lora adapters
135135
/lora-tests
136+
include/llguidance.h

common/sampling.cpp

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,26 @@ struct common_sampler * common_sampler_init(const struct llama_model * model, co
146146

147147
lparams.no_perf = params.no_perf;
148148

149+
struct llama_sampler * grmr;
150+
if (params.grammar.compare(0, 4, "llg:") == 0) {
151+
#ifdef GGML_LLGUIDANCE
152+
auto gp = params.grammar.find(':', 4);
153+
if (gp == std::string::npos) {
154+
GGML_ABORT("invalid serialized grammar");
155+
}
156+
auto grm_type = params.grammar.substr(4, gp - 4);
157+
auto grm_data = params.grammar.c_str() + gp + 1;
158+
grmr = llama_sampler_init_llg(model, grm_type.c_str(), grm_data);
159+
#else
160+
GGML_ABORT("llguidance (GGML_LLGUIDANCE) is not enabled");
161+
#endif
162+
} else {
163+
grmr = llama_sampler_init_grammar(model, params.grammar.c_str(), "root");
164+
}
165+
149166
auto * result = new common_sampler {
150167
/* .params = */ params,
151-
/* .grmr = */ llama_sampler_init_grammar(model, params.grammar.c_str(), "root"),
168+
/* .grmr = */ grmr,
152169
/* .chain = */ llama_sampler_chain_init(lparams),
153170
/* .prev = */ ring_buffer<llama_token>(std::max(32, params.n_prev)),
154171
/* .cur = */ {},

src/llama-sampling.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2358,7 +2358,12 @@ struct llama_sampler_llg {
23582358
static LlgConstraint *llama_sampler_llg_new(const char * grammar_kind, const char * grammar_data) {
23592359
LlgConstraintInit cinit;
23602360
llg_constraint_init_set_defaults(&cinit, nullptr);
2361-
return llg_new_constraint_any(&cinit, grammar_kind, grammar_data);
2361+
auto c = llg_new_constraint_any(&cinit, grammar_kind, grammar_data);
2362+
if (llg_get_error(c)) {
2363+
LLAMA_LOG_ERROR("llg error: %s\n", llg_get_error(c));
2364+
llg_free_constraint(c);
2365+
return nullptr;
2366+
}
23622367
}
23632368

23642369
static const char * llama_sampler_llg_name(const struct llama_sampler * /*smpl*/) {
@@ -2382,6 +2387,8 @@ static void llama_sampler_llg_apply(struct llama_sampler * smpl, llama_token_dat
23822387
ctx->has_llg_res = true;
23832388
} else {
23842389
LLAMA_LOG_ERROR("llg error: %s\n", llg_get_error(ctx->grammar));
2390+
llg_free_constraint(ctx->grammar);
2391+
ctx->grammar = nullptr;
23852392
}
23862393
}
23872394
if (ctx->has_llg_res) {
@@ -2458,6 +2465,9 @@ struct llama_sampler * llama_sampler_init_llg_impl(const struct llama_vocab & vo
24582465
auto * ctx = new llama_sampler_llg;
24592466

24602467
if (grammar_kind != nullptr && grammar_kind[0] != '\0') {
2468+
auto d = vocab.id_to_token[94776].text;
2469+
LLAMA_LOG_INFO("llg: %s %d\n", d.c_str(), d.size());
2470+
24612471
*ctx = {
24622472
/* .vocab = */ &vocab,
24632473
/* .grammar_kind = */ grammar_kind,

0 commit comments

Comments
 (0)