common : determine generation prompt using longest common prefix (#22657)
This commit is contained in:
+17
-8
@@ -2116,6 +2116,21 @@ std::optional<common_chat_params> common_chat_try_specialized_template(
|
|||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::string common_chat_templates_generation_prompt(const common_chat_template & tmpl, const autoparser::generation_params & inputs) {
|
||||||
|
autoparser::generation_params params = inputs;
|
||||||
|
params.add_generation_prompt = false;
|
||||||
|
std::string no_gen_prompt = common_chat_template_direct_apply_impl(tmpl, params);
|
||||||
|
params.add_generation_prompt = true;
|
||||||
|
std::string gen_prompt = common_chat_template_direct_apply_impl(tmpl, params);
|
||||||
|
|
||||||
|
size_t prefix_len = 0;
|
||||||
|
size_t min_size = std::min(no_gen_prompt.size(), gen_prompt.size());
|
||||||
|
while (prefix_len < min_size && no_gen_prompt[prefix_len] == gen_prompt[prefix_len]) {
|
||||||
|
prefix_len++;
|
||||||
|
}
|
||||||
|
return gen_prompt.substr(prefix_len);
|
||||||
|
}
|
||||||
|
|
||||||
static common_chat_params common_chat_templates_apply_jinja(const struct common_chat_templates * tmpls,
|
static common_chat_params common_chat_templates_apply_jinja(const struct common_chat_templates * tmpls,
|
||||||
const struct common_chat_templates_inputs & inputs) {
|
const struct common_chat_templates_inputs & inputs) {
|
||||||
autoparser::generation_params params;
|
autoparser::generation_params params;
|
||||||
@@ -2130,6 +2145,7 @@ static common_chat_params common_chat_templates_apply_jinja(const struct common_
|
|||||||
params.enable_thinking = inputs.enable_thinking;
|
params.enable_thinking = inputs.enable_thinking;
|
||||||
params.grammar = inputs.grammar;
|
params.grammar = inputs.grammar;
|
||||||
params.now = inputs.now;
|
params.now = inputs.now;
|
||||||
|
params.add_generation_prompt = inputs.add_generation_prompt;
|
||||||
params.add_bos = tmpls->add_bos;
|
params.add_bos = tmpls->add_bos;
|
||||||
params.add_eos = tmpls->add_eos;
|
params.add_eos = tmpls->add_eos;
|
||||||
|
|
||||||
@@ -2153,14 +2169,7 @@ static common_chat_params common_chat_templates_apply_jinja(const struct common_
|
|||||||
workaround::func_args_not_string(params.messages);
|
workaround::func_args_not_string(params.messages);
|
||||||
}
|
}
|
||||||
|
|
||||||
params.add_generation_prompt = false;
|
params.generation_prompt = common_chat_templates_generation_prompt(tmpl, params);
|
||||||
std::string no_gen_prompt = common_chat_template_direct_apply_impl(tmpl, params);
|
|
||||||
params.add_generation_prompt = true;
|
|
||||||
std::string gen_prompt = common_chat_template_direct_apply_impl(tmpl, params);
|
|
||||||
auto diff = calculate_diff_split(no_gen_prompt, gen_prompt);
|
|
||||||
params.generation_prompt = diff.right + diff.suffix;
|
|
||||||
|
|
||||||
params.add_generation_prompt = inputs.add_generation_prompt;
|
|
||||||
|
|
||||||
params.extra_context = common_chat_extra_context();
|
params.extra_context = common_chat_extra_context();
|
||||||
for (auto el : inputs.chat_template_kwargs) {
|
for (auto el : inputs.chat_template_kwargs) {
|
||||||
|
|||||||
Reference in New Issue
Block a user