/* .params = */ params,
/* .grmr = */ llama_sampler_init_grammar(model, params.grammar.c_str(), "root"),
/* .chain = */ llama_sampler_chain_init(lparams),
- /* .prev = */ ring_buffer<llama_token>(params.n_prev),
+ /* .prev = */ ring_buffer<llama_token>(std::max(32, params.n_prev)),
/* .cur = */ {},
/* .cur_p = */ {},
};
/* .name = */ [](const struct llama_sampler * /*smpl*/) { return "penalties"; },
/* .accept = */ [](struct llama_sampler * smpl, llama_token token) {
auto * ctx = (llama_sampler_penalties *) smpl->ctx;
- ctx->prev.push_back(token);
+ if (ctx->prev.size()) {
+ ctx->prev.push_back(token);
+ }
},
/* .apply = */ [](struct llama_sampler * smpl, llama_token_data_array * cur_p) {
auto * ctx = (llama_sampler_penalties *) smpl->ctx;