Skip to content

Commit 7cf64f6

Browse files
authored
sync: minja - support QwQ-32B (ggml-org#12235)
google/minja@8a76f78
1 parent 5e2d57b commit 7cf64f6

File tree

1 file changed

+37
-5
lines changed

1 file changed

+37
-5
lines changed

common/minja/minja.hpp

+37-5
Original file line numberDiff line numberDiff line change
@@ -1378,13 +1378,27 @@ struct ArgumentsExpression {
13781378
}
13791379
};
13801380

1381-
static std::string strip(const std::string & s) {
1382-
auto start = s.find_first_not_of(" \t\n\r");
1381+
static std::string strip(const std::string & s, const std::string & chars = "", bool left = true, bool right = true) {
1382+
auto charset = chars.empty() ? " \t\n\r" : chars;
1383+
auto start = left ? s.find_first_not_of(charset) : 0;
13831384
if (start == std::string::npos) return "";
1384-
auto end = s.find_last_not_of(" \t\n\r");
1385+
auto end = right ? s.find_last_not_of(charset) : s.size() - 1;
13851386
return s.substr(start, end - start + 1);
13861387
}
13871388

1389+
static std::vector<std::string> split(const std::string & s, const std::string & sep) {
1390+
std::vector<std::string> result;
1391+
size_t start = 0;
1392+
size_t end = s.find(sep);
1393+
while (end != std::string::npos) {
1394+
result.push_back(s.substr(start, end - start));
1395+
start = end + sep.length();
1396+
end = s.find(sep, start);
1397+
}
1398+
result.push_back(s.substr(start));
1399+
return result;
1400+
}
1401+
13881402
static std::string capitalize(const std::string & s) {
13891403
if (s.empty()) return s;
13901404
auto result = s;
@@ -1467,8 +1481,26 @@ class MethodCallExpr : public Expression {
14671481
} else if (obj.is_string()) {
14681482
auto str = obj.get<std::string>();
14691483
if (method->get_name() == "strip") {
1470-
vargs.expectArgs("strip method", {0, 0}, {0, 0});
1471-
return Value(strip(str));
1484+
vargs.expectArgs("strip method", {0, 1}, {0, 0});
1485+
auto chars = vargs.args.empty() ? "" : vargs.args[0].get<std::string>();
1486+
return Value(strip(str, chars));
1487+
} else if (method->get_name() == "lstrip") {
1488+
vargs.expectArgs("lstrip method", {0, 1}, {0, 0});
1489+
auto chars = vargs.args.empty() ? "" : vargs.args[0].get<std::string>();
1490+
return Value(strip(str, chars, /* left= */ true, /* right= */ false));
1491+
} else if (method->get_name() == "rstrip") {
1492+
vargs.expectArgs("rstrip method", {0, 1}, {0, 0});
1493+
auto chars = vargs.args.empty() ? "" : vargs.args[0].get<std::string>();
1494+
return Value(strip(str, chars, /* left= */ false, /* right= */ true));
1495+
} else if (method->get_name() == "split") {
1496+
vargs.expectArgs("split method", {1, 1}, {0, 0});
1497+
auto sep = vargs.args[0].get<std::string>();
1498+
auto parts = split(str, sep);
1499+
Value result = Value::array();
1500+
for (const auto& part : parts) {
1501+
result.push_back(Value(part));
1502+
}
1503+
return result;
14721504
} else if (method->get_name() == "capitalize") {
14731505
vargs.expectArgs("capitalize method", {0, 0}, {0, 0});
14741506
return Value(capitalize(str));

0 commit comments

Comments
 (0)