diff --git a/bantam.hpp b/bantam.hpp index b73e87e..269e6f9 100644 --- a/bantam.hpp +++ b/bantam.hpp @@ -225,7 +225,7 @@ bool parse_nonstream_response(std::string_view body, Message &out, Usage &usage) /* ------------------------------------------------------------------ */ /* llm.cpp — HTTP client (libcurl), headers, backoff, dispatch. */ -/* -------------------------------------------------------------- */ +/* ------------------------------------------------------------------ */ int http_get(Cfg &cfg, std::string_view url, std::string &body, long &code, std::string &errmsg); int llm(Cfg &cfg, Messages &msgs, bool use_tools, Message &out, Usage &usage, @@ -239,8 +239,8 @@ std::string shell_with_workdir(std::string_view cmd, std::string_view workdir, std::string read_file_or_dir(std::string_view path, int offset, int limit, int *style); std::string write_file(std::string_view path, long line_offset, long byte_offset, - long del_lines, long del_bytes, - std::string_view content, int *err); + long del_lines, long del_bytes, + std::string_view content, int *err); std::string offload_tool_result(std::string_view res, int max_res, std::vector &tmps); void cleanup_temps(std::vector &tmps); diff --git a/json.cpp b/json.cpp index 1940810..33ba0f3 100644 --- a/json.cpp +++ b/json.cpp @@ -401,6 +401,30 @@ struct JParser { return true; } if (c == '[') { + pos++; + skip_ws(); + out = Json::array(); + if (pos < src.size() && src[pos] == ']') { + pos++; + return true; + } + while (true) { + Json elem; + if (!parse_value(elem, depth + 1)) return false; + out.aval.push_back(std::move(elem)); + skip_ws(); + if (pos < src.size() && src[pos] == ',') { + pos++; + continue; + } + if (pos < src.size() && src[pos] == ']') { + pos++; + return true; + } + return false; + } + } + if (c == '{') { pos++; skip_ws(); out = Json::object();