add placeholder for tojson

This commit is contained in:
Xuan Son Nguyen 2025-12-30 21:52:47 +01:00
parent 4479c382ce
commit 1b213ae5e7
4 changed files with 39 additions and 4 deletions

View File

@ -165,6 +165,11 @@ const func_builtins & global_builtins() {
}
return out;
}},
{"tojson", [](const func_args & args) -> value {
args.ensure_count(1);
// placeholder implementation
return mk_val<value_string>("TODO: to_json output");
}},
// tests
{"test_is_boolean", test_type_fn<value_bool>},
@ -646,7 +651,12 @@ const func_builtins & value_object_t::get_builtins() const {
}
return result;
}},
{{"dictsort"}, [](const func_args & args) -> value {
{"tojson", [](const func_args & args) -> value {
args.ensure_vals<value_object>();
// use global to_json
return global_builtins().at("tojson")(args);
}},
{"dictsort", [](const func_args & args) -> value {
// no-op
args.ensure_vals<value_object>();
return args.args[0];

View File

@ -312,10 +312,19 @@ value test_expression::execute_impl(context & ctx) {
throw std::runtime_error("Unknown test '" + test_id + "'");
}
value input = operand->execute(ctx);
func_args args(ctx);
args.args.push_back(operand->execute(ctx));
args.args.push_back(input);
auto res = it->second(args);
// hack: allow type inference
if (test_id == "defined" || test_id == "undefined" || test_id == "none") {
ctx.mark_known_type(input, inferred_type::optional);
} else if (test_id == "string") {
ctx.mark_known_type(input, inferred_type::string);
}
if (negate) {
return mk_val<value_bool>(!res->as_bool());
} else {

View File

@ -105,8 +105,9 @@ public:
if (is_val<value_object>(val)) {
auto & obj = val->as_object();
for (const auto & pair : obj) {
flatten_globals[pair.first] = pair.second;
set_flattened_global_recursively(pair.first, pair.second);
std::string child_path = path + "." + pair.first;
flatten_globals[child_path] = pair.second;
set_flattened_global_recursively(child_path, pair.second);
}
} else if (is_val<value_array>(val)) {
auto & arr = val->as_array();

View File

@ -123,6 +123,21 @@ void run_single(std::string contents) {
{
"role": "assistant",
"content": {"__input__": "I am fine, thank you!"}
},
{
"role": "assistant",
"content": "Calling weather tool.",
"tool_calls": [
{
"function": {
"name": "get_weather",
"arguments": {
"location": "New York",
"unit": "celsius"
}
}
}
]
}
],
"bos_token": "<s>",