Skip to content

Commit c76b420

Browse files
authored
vendor : update vendored copy of google/minja (#15011)
* vendor : update vendored copy of google/minja Signed-off-by: Lennart Austenfeld <[email protected]> * Re-remove trailing whitespace Signed-off-by: Lennart Austenfeld <[email protected]> * Remove another trailing whitespace Signed-off-by: Lennart Austenfeld <[email protected]> --------- Signed-off-by: Lennart Austenfeld <[email protected]>
1 parent 0f5ccd6 commit c76b420

File tree

2 files changed

+28
-8
lines changed

2 files changed

+28
-8
lines changed

vendor/minja/chat-template.hpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,15 @@ class chat_template {
162162
}), false);
163163
caps_.supports_tools = contains(out, "some_tool");
164164

165+
auto out_empty = try_raw_render(json::array({dummy_user_msg, {{"role", "assistant"}, {"content", ""}}}), {}, false);
166+
auto out_null = try_raw_render(json::array({dummy_user_msg, {{"role", "assistant"}, {"content", nullptr}}}), {}, false);
167+
caps_.requires_non_null_content = contains(out_empty, user_needle) && !contains(out_null, user_needle);
168+
169+
json j_null;
165170
auto make_tool_calls_msg = [&](const json & tool_calls) {
166171
return json {
167172
{"role", "assistant"},
168-
{"content", nullptr},
173+
{"content", caps_.requires_non_null_content? "" : j_null},
169174
{"tool_calls", tool_calls},
170175
};
171176
};
@@ -195,9 +200,6 @@ class chat_template {
195200

196201
caps_.supports_tool_calls = tool_call_renders_str_arguments || tool_call_renders_obj_arguments;
197202
caps_.requires_object_arguments = !tool_call_renders_str_arguments && tool_call_renders_obj_arguments;
198-
auto out_empty = try_raw_render(json::array({dummy_user_msg, {{"role", "assistant"}, {"content", ""}}}), {}, false);
199-
auto out_null = try_raw_render(json::array({dummy_user_msg, {{"role", "assistant"}, {"content", nullptr}}}), {}, false);
200-
caps_.requires_non_null_content = contains(out_empty, user_needle) && !contains(out_null, user_needle);
201203

202204
if (caps_.supports_tool_calls) {
203205
auto dummy_args = caps_.requires_object_arguments ? dummy_args_obj : json(dummy_args_obj.dump());
@@ -234,7 +236,7 @@ class chat_template {
234236
};
235237
const json tool_call_msg {
236238
{"role", "assistant"},
237-
{"content", nullptr},
239+
{"content", caps_.requires_non_null_content ? "" : j_null},
238240
{"tool_calls", json::array({
239241
{
240242
// TODO: detect if requires numerical id or fixed length == 6 like Nemo

vendor/minja/minja.hpp

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1355,8 +1355,13 @@ class BinaryOpExpr : public Expression {
13551355
case Op::Gt: return l > r;
13561356
case Op::Le: return l <= r;
13571357
case Op::Ge: return l >= r;
1358-
case Op::In: return (r.is_array() || r.is_object()) && r.contains(l);
1359-
case Op::NotIn: return !(r.is_array() && r.contains(l));
1358+
case Op::In: return (((r.is_array() || r.is_object()) && r.contains(l)) ||
1359+
(l.is_string() && r.is_string() &&
1360+
r.to_str().find(l.to_str()) != std::string::npos));
1361+
case Op::NotIn:
1362+
return !(((r.is_array() || r.is_object()) && r.contains(l)) ||
1363+
(l.is_string() && r.is_string() &&
1364+
r.to_str().find(l.to_str()) != std::string::npos));
13601365
default: break;
13611366
}
13621367
throw std::runtime_error("Unknown binary operator");
@@ -1552,6 +1557,19 @@ class MethodCallExpr : public Expression {
15521557
else res[i] = std::tolower(res[i]);
15531558
}
15541559
return res;
1560+
} else if (method->get_name() == "replace") {
1561+
vargs.expectArgs("replace method", {2, 3}, {0, 0});
1562+
auto before = vargs.args[0].get<std::string>();
1563+
auto after = vargs.args[1].get<std::string>();
1564+
auto count = vargs.args.size() == 3 ? vargs.args[2].get<int64_t>()
1565+
: str.length();
1566+
size_t start_pos = 0;
1567+
while ((start_pos = str.find(before, start_pos)) != std::string::npos &&
1568+
count-- > 0) {
1569+
str.replace(start_pos, before.length(), after);
1570+
start_pos += after.length();
1571+
}
1572+
return str;
15551573
}
15561574
}
15571575
throw std::runtime_error("Unknown method: " + method->get_name());
@@ -2128,7 +2146,7 @@ class Parser {
21282146
}
21292147
}
21302148

2131-
if ((has_first_colon || has_second_colon) && (start || end || step)) {
2149+
if ((has_first_colon || has_second_colon)) {
21322150
index = std::make_shared<SliceExpr>(slice_loc, std::move(start), std::move(end), std::move(step));
21332151
} else {
21342152
index = std::move(start);

0 commit comments

Comments
 (0)