Skip to content

Commit 2950f62

Browse files
committed
initial commit for handling extra template kwargs
1 parent 5787b5d commit 2950f62

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

common/chat.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ struct templates_params {
140140
bool add_generation_prompt = true;
141141
bool enable_thinking = true;
142142
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
143+
json extra_context;
143144
};
144145

145146
common_chat_tool_choice common_chat_tool_choice_parse_oaicompat(const std::string & tool_choice) {
@@ -1691,7 +1692,7 @@ static void common_chat_parse_hermes_2_pro(common_chat_msg_parser & builder) {
16911692

16921693
static common_chat_params common_chat_params_init_without_tools(const common_chat_template & tmpl, const struct templates_params & inputs) {
16931694
common_chat_params data;
1694-
data.prompt = apply(tmpl, inputs.messages, inputs.tools.empty() ? json() : inputs.tools, inputs.add_generation_prompt);
1695+
data.prompt = apply(tmpl, inputs.messages, inputs.tools.empty() ? json() : inputs.tools, inputs.add_generation_prompt,inputs.extra_context);
16951696
data.format = COMMON_CHAT_FORMAT_CONTENT_ONLY;
16961697
data.grammar_lazy = false;
16971698
if (!inputs.json_schema.is_null()) {
@@ -1722,6 +1723,12 @@ static common_chat_params common_chat_templates_apply_jinja(
17221723
params.enable_thinking = inputs.enable_thinking;
17231724
params.grammar = inputs.grammar;
17241725
params.now = inputs.now;
1726+
1727+
for(auto el: inputs.chat_template_kwargs)
1728+
{
1729+
params.extra_context[el.first] = json::parse(el.second);
1730+
}
1731+
17251732
if (!inputs.json_schema.empty()) {
17261733
params.json_schema = json::parse(inputs.json_schema);
17271734
}

common/chat.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <chrono>
88
#include <string>
99
#include <vector>
10+
#include <map>
1011

1112
struct common_chat_templates;
1213

@@ -125,6 +126,7 @@ struct common_chat_templates_inputs {
125126
common_reasoning_format reasoning_format = COMMON_REASONING_FORMAT_NONE;
126127
bool enable_thinking = true;
127128
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
129+
std::map<std::string,std::string> chat_template_kwargs;
128130
};
129131

130132
struct common_chat_params {

tools/server/utils.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,11 @@ static json oaicompat_chat_params_parse(
748748
llama_params["parse_tool_calls"] = true;
749749
}
750750

751+
auto chat_template_kwargs_object = json_value(body, "chat_template_kwargs", json::object());
752+
for (const auto & item : chat_template_kwargs_object.items()) {
753+
inputs.chat_template_kwargs[item.key()] = item.value().dump();
754+
}
755+
751756
// if the assistant message appears at the end of list, we do not add end-of-turn token
752757
// for ex. this can be useful to modify the reasoning process in reasoning models
753758
bool prefill_assistant_message = !inputs.messages.empty() && inputs.messages.back().role == "assistant" && opt.prefill_assistant;

0 commit comments

Comments
 (0)