add llama_sampler_init_grammar_lazy instead of renaming the non-lazy
This commit is contained in:
parent
7d59bf44ed
commit
5a64af6c70
3 changed files with 42 additions and 19 deletions
|
@ -158,10 +158,11 @@ struct common_sampler * common_sampler_init(const struct llama_model * model, co
|
||||||
}
|
}
|
||||||
auto * result = new common_sampler {
|
auto * result = new common_sampler {
|
||||||
/* .params = */ params,
|
/* .params = */ params,
|
||||||
/* .grmr = */ llama_sampler_grammar_init(vocab, params.grammar.c_str(), "root",
|
/* .grmr = */ params.grammar_lazy
|
||||||
params.grammar_lazy,
|
? llama_sampler_init_grammar_lazy(vocab, params.grammar.c_str(), "root",
|
||||||
trigger_words.data(), trigger_words.size(),
|
trigger_words.data(), trigger_words.size(),
|
||||||
params.grammar_trigger_tokens.data(), params.grammar_trigger_tokens.size()),
|
params.grammar_trigger_tokens.data(), params.grammar_trigger_tokens.size())
|
||||||
|
: llama_sampler_init_grammar(vocab, params.grammar.c_str(), "root"),
|
||||||
/* .chain = */ llama_sampler_chain_init(lparams),
|
/* .chain = */ llama_sampler_chain_init(lparams),
|
||||||
/* .prev = */ ring_buffer<llama_token>(std::max(32, params.n_prev)),
|
/* .prev = */ ring_buffer<llama_token>(std::max(32, params.n_prev)),
|
||||||
/* .cur = */ {},
|
/* .cur = */ {},
|
||||||
|
|
|
@ -1194,17 +1194,18 @@ extern "C" {
|
||||||
float tau,
|
float tau,
|
||||||
float eta);
|
float eta);
|
||||||
|
|
||||||
DEPRECATED(LLAMA_API struct llama_sampler * llama_sampler_init_grammar(
|
LLAMA_API struct llama_sampler * llama_sampler_init_grammar(
|
||||||
const struct llama_vocab * vocab,
|
const struct llama_vocab * vocab,
|
||||||
const char * grammar_str,
|
const char * grammar_str,
|
||||||
const char * grammar_root),
|
const char * grammar_root);
|
||||||
"use llama_sampler_grammar_init instead");
|
|
||||||
|
|
||||||
LLAMA_API struct llama_sampler * llama_sampler_grammar_init(
|
/// @details Lazy grammar sampler, introduced in https://github.com/ggerganov/llama.cpp/pull/9639
|
||||||
|
/// @param trigger_words A list of words that will trigger the grammar sampler. This may be updated to a loose regex syntax (w/ ^) in a near future.
|
||||||
|
/// @param trigger_tokens A list of tokens that will trigger the grammar sampler.
|
||||||
|
LLAMA_API struct llama_sampler * llama_sampler_init_grammar_lazy(
|
||||||
const struct llama_vocab * vocab,
|
const struct llama_vocab * vocab,
|
||||||
const char * grammar_str,
|
const char * grammar_str,
|
||||||
const char * grammar_root,
|
const char * grammar_root,
|
||||||
bool lazy,
|
|
||||||
const char ** trigger_words,
|
const char ** trigger_words,
|
||||||
size_t num_trigger_words,
|
size_t num_trigger_words,
|
||||||
const llama_token * trigger_tokens,
|
const llama_token * trigger_tokens,
|
||||||
|
|
|
@ -1433,6 +1433,17 @@ static void llama_sampler_grammar_apply(struct llama_sampler * smpl, llama_token
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fwd declare to break reset --> init_impl --> llama_sampler_grammar_i --> reset cycle.
|
||||||
|
static struct llama_sampler * llama_sampler_init_grammar_impl(
|
||||||
|
const struct llama_vocab * vocab,
|
||||||
|
const char * grammar_str,
|
||||||
|
const char * grammar_root,
|
||||||
|
bool lazy,
|
||||||
|
const char ** trigger_words,
|
||||||
|
size_t num_trigger_words,
|
||||||
|
const llama_token * trigger_tokens,
|
||||||
|
size_t num_trigger_tokens);
|
||||||
|
|
||||||
static void llama_sampler_grammar_reset(struct llama_sampler * smpl) {
|
static void llama_sampler_grammar_reset(struct llama_sampler * smpl) {
|
||||||
auto * ctx = (llama_sampler_grammar *) smpl->ctx;
|
auto * ctx = (llama_sampler_grammar *) smpl->ctx;
|
||||||
if (!ctx->grammar) {
|
if (!ctx->grammar) {
|
||||||
|
@ -1454,7 +1465,7 @@ static void llama_sampler_grammar_reset(struct llama_sampler * smpl) {
|
||||||
static struct llama_sampler * llama_sampler_grammar_clone(const struct llama_sampler * smpl) {
|
static struct llama_sampler * llama_sampler_grammar_clone(const struct llama_sampler * smpl) {
|
||||||
const auto * ctx = (const llama_sampler_grammar *) smpl->ctx;
|
const auto * ctx = (const llama_sampler_grammar *) smpl->ctx;
|
||||||
|
|
||||||
auto * result = llama_sampler_grammar_init(ctx->vocab, nullptr, nullptr, false, nullptr, 0, nullptr, 0);
|
auto * result = llama_sampler_init_grammar_impl(ctx->vocab, nullptr, nullptr, false, nullptr, 0, nullptr, 0);
|
||||||
|
|
||||||
// copy the state
|
// copy the state
|
||||||
{
|
{
|
||||||
|
@ -1490,15 +1501,7 @@ static struct llama_sampler_i llama_sampler_grammar_i = {
|
||||||
/* .free = */ llama_sampler_grammar_free,
|
/* .free = */ llama_sampler_grammar_free,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct llama_sampler * llama_sampler_init_grammar_impl(
|
||||||
struct llama_sampler * llama_sampler_init_grammar(
|
|
||||||
const struct llama_vocab * vocab,
|
|
||||||
const char * grammar_str,
|
|
||||||
const char * grammar_root) {
|
|
||||||
return llama_sampler_grammar_init(vocab, grammar_str, grammar_root, false, nullptr, 0, nullptr, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct llama_sampler * llama_sampler_grammar_init(
|
|
||||||
const struct llama_vocab * vocab,
|
const struct llama_vocab * vocab,
|
||||||
const char * grammar_str,
|
const char * grammar_str,
|
||||||
const char * grammar_root,
|
const char * grammar_root,
|
||||||
|
@ -1531,6 +1534,24 @@ struct llama_sampler * llama_sampler_grammar_init(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct llama_sampler * llama_sampler_init_grammar(
|
||||||
|
const struct llama_vocab * vocab,
|
||||||
|
const char * grammar_str,
|
||||||
|
const char * grammar_root) {
|
||||||
|
return llama_sampler_init_grammar_impl(vocab, grammar_str, grammar_root, /* lazy= */ false, nullptr, 0, nullptr, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct llama_sampler * llama_sampler_init_grammar_lazy(
|
||||||
|
const struct llama_vocab * vocab,
|
||||||
|
const char * grammar_str,
|
||||||
|
const char * grammar_root,
|
||||||
|
const char ** trigger_words,
|
||||||
|
size_t num_trigger_words,
|
||||||
|
const llama_token * trigger_tokens,
|
||||||
|
size_t num_trigger_tokens) {
|
||||||
|
return llama_sampler_init_grammar_impl(vocab, grammar_str, grammar_root, /* lazy= */ true, trigger_words, num_trigger_words, trigger_tokens, num_trigger_tokens);
|
||||||
|
}
|
||||||
|
|
||||||
// penalties
|
// penalties
|
||||||
|
|
||||||
struct llama_sampler_penalties {
|
struct llama_sampler_penalties {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue