mirror of
https://github.com/ggml-org/llama.cpp.git
synced 2025-08-13 20:07:41 -04:00
vendor : update vendored copy of google/minja (#15011)
* vendor : update vendored copy of google/minja Signed-off-by: Lennart Austenfeld <l.austenfeld@googlemail.com> * Re-remove trailing whitespace Signed-off-by: Lennart Austenfeld <l.austenfeld@googlemail.com> * Remove another trailing whitespace Signed-off-by: Lennart Austenfeld <l.austenfeld@googlemail.com> --------- Signed-off-by: Lennart Austenfeld <l.austenfeld@googlemail.com>
This commit is contained in:
12
vendor/minja/chat-template.hpp
vendored
12
vendor/minja/chat-template.hpp
vendored
@@ -162,10 +162,15 @@ class chat_template {
|
|||||||
}), false);
|
}), false);
|
||||||
caps_.supports_tools = contains(out, "some_tool");
|
caps_.supports_tools = contains(out, "some_tool");
|
||||||
|
|
||||||
|
auto out_empty = try_raw_render(json::array({dummy_user_msg, {{"role", "assistant"}, {"content", ""}}}), {}, false);
|
||||||
|
auto out_null = try_raw_render(json::array({dummy_user_msg, {{"role", "assistant"}, {"content", nullptr}}}), {}, false);
|
||||||
|
caps_.requires_non_null_content = contains(out_empty, user_needle) && !contains(out_null, user_needle);
|
||||||
|
|
||||||
|
json j_null;
|
||||||
auto make_tool_calls_msg = [&](const json & tool_calls) {
|
auto make_tool_calls_msg = [&](const json & tool_calls) {
|
||||||
return json {
|
return json {
|
||||||
{"role", "assistant"},
|
{"role", "assistant"},
|
||||||
{"content", nullptr},
|
{"content", caps_.requires_non_null_content? "" : j_null},
|
||||||
{"tool_calls", tool_calls},
|
{"tool_calls", tool_calls},
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -195,9 +200,6 @@ class chat_template {
|
|||||||
|
|
||||||
caps_.supports_tool_calls = tool_call_renders_str_arguments || tool_call_renders_obj_arguments;
|
caps_.supports_tool_calls = tool_call_renders_str_arguments || tool_call_renders_obj_arguments;
|
||||||
caps_.requires_object_arguments = !tool_call_renders_str_arguments && tool_call_renders_obj_arguments;
|
caps_.requires_object_arguments = !tool_call_renders_str_arguments && tool_call_renders_obj_arguments;
|
||||||
auto out_empty = try_raw_render(json::array({dummy_user_msg, {{"role", "assistant"}, {"content", ""}}}), {}, false);
|
|
||||||
auto out_null = try_raw_render(json::array({dummy_user_msg, {{"role", "assistant"}, {"content", nullptr}}}), {}, false);
|
|
||||||
caps_.requires_non_null_content = contains(out_empty, user_needle) && !contains(out_null, user_needle);
|
|
||||||
|
|
||||||
if (caps_.supports_tool_calls) {
|
if (caps_.supports_tool_calls) {
|
||||||
auto dummy_args = caps_.requires_object_arguments ? dummy_args_obj : json(dummy_args_obj.dump());
|
auto dummy_args = caps_.requires_object_arguments ? dummy_args_obj : json(dummy_args_obj.dump());
|
||||||
@@ -234,7 +236,7 @@ class chat_template {
|
|||||||
};
|
};
|
||||||
const json tool_call_msg {
|
const json tool_call_msg {
|
||||||
{"role", "assistant"},
|
{"role", "assistant"},
|
||||||
{"content", nullptr},
|
{"content", caps_.requires_non_null_content ? "" : j_null},
|
||||||
{"tool_calls", json::array({
|
{"tool_calls", json::array({
|
||||||
{
|
{
|
||||||
// TODO: detect if requires numerical id or fixed length == 6 like Nemo
|
// TODO: detect if requires numerical id or fixed length == 6 like Nemo
|
||||||
|
24
vendor/minja/minja.hpp
vendored
24
vendor/minja/minja.hpp
vendored
@@ -1355,8 +1355,13 @@ public:
|
|||||||
case Op::Gt: return l > r;
|
case Op::Gt: return l > r;
|
||||||
case Op::Le: return l <= r;
|
case Op::Le: return l <= r;
|
||||||
case Op::Ge: return l >= r;
|
case Op::Ge: return l >= r;
|
||||||
case Op::In: return (r.is_array() || r.is_object()) && r.contains(l);
|
case Op::In: return (((r.is_array() || r.is_object()) && r.contains(l)) ||
|
||||||
case Op::NotIn: return !(r.is_array() && r.contains(l));
|
(l.is_string() && r.is_string() &&
|
||||||
|
r.to_str().find(l.to_str()) != std::string::npos));
|
||||||
|
case Op::NotIn:
|
||||||
|
return !(((r.is_array() || r.is_object()) && r.contains(l)) ||
|
||||||
|
(l.is_string() && r.is_string() &&
|
||||||
|
r.to_str().find(l.to_str()) != std::string::npos));
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
throw std::runtime_error("Unknown binary operator");
|
throw std::runtime_error("Unknown binary operator");
|
||||||
@@ -1552,6 +1557,19 @@ public:
|
|||||||
else res[i] = std::tolower(res[i]);
|
else res[i] = std::tolower(res[i]);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
} else if (method->get_name() == "replace") {
|
||||||
|
vargs.expectArgs("replace method", {2, 3}, {0, 0});
|
||||||
|
auto before = vargs.args[0].get<std::string>();
|
||||||
|
auto after = vargs.args[1].get<std::string>();
|
||||||
|
auto count = vargs.args.size() == 3 ? vargs.args[2].get<int64_t>()
|
||||||
|
: str.length();
|
||||||
|
size_t start_pos = 0;
|
||||||
|
while ((start_pos = str.find(before, start_pos)) != std::string::npos &&
|
||||||
|
count-- > 0) {
|
||||||
|
str.replace(start_pos, before.length(), after);
|
||||||
|
start_pos += after.length();
|
||||||
|
}
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
throw std::runtime_error("Unknown method: " + method->get_name());
|
throw std::runtime_error("Unknown method: " + method->get_name());
|
||||||
@@ -2128,7 +2146,7 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((has_first_colon || has_second_colon) && (start || end || step)) {
|
if ((has_first_colon || has_second_colon)) {
|
||||||
index = std::make_shared<SliceExpr>(slice_loc, std::move(start), std::move(end), std::move(step));
|
index = std::make_shared<SliceExpr>(slice_loc, std::move(start), std::move(end), std::move(step));
|
||||||
} else {
|
} else {
|
||||||
index = std::move(start);
|
index = std::move(start);
|
||||||
|
Reference in New Issue
Block a user