diff --git a/taicpp/libp11-kit-dev_0.26.2-2_amd64.deb b/taicpp/libp11-kit-dev_0.26.2-2_amd64.deb new file mode 100644 index 0000000..0058038 Binary files /dev/null and b/taicpp/libp11-kit-dev_0.26.2-2_amd64.deb differ diff --git a/taicpp/librtmp-dev_2.4+20151223.gitfa8646d.1-3_amd64.deb b/taicpp/librtmp-dev_2.4+20151223.gitfa8646d.1-3_amd64.deb new file mode 100644 index 0000000..253c550 Binary files /dev/null and b/taicpp/librtmp-dev_2.4+20151223.gitfa8646d.1-3_amd64.deb differ diff --git a/taicpp/libunistring-dev_1.3-2build1_amd64.deb b/taicpp/libunistring-dev_1.3-2build1_amd64.deb new file mode 100644 index 0000000..b098bfd Binary files /dev/null and b/taicpp/libunistring-dev_1.3-2build1_amd64.deb differ diff --git a/taicpp/musl-dev_1.2.5-3build1_amd64.deb b/taicpp/musl-dev_1.2.5-3build1_amd64.deb new file mode 100644 index 0000000..e7f2cf0 Binary files /dev/null and b/taicpp/musl-dev_1.2.5-3build1_amd64.deb differ diff --git a/taicpp/musl-tools_1.2.5-3build1_amd64.deb b/taicpp/musl-tools_1.2.5-3build1_amd64.deb new file mode 100644 index 0000000..810f98b Binary files /dev/null and b/taicpp/musl-tools_1.2.5-3build1_amd64.deb differ diff --git a/taicpp/src/cli/cli.cpp b/taicpp/src/cli/cli.cpp index 7a58930..df7915a 100644 --- a/taicpp/src/cli/cli.cpp +++ b/taicpp/src/cli/cli.cpp @@ -12,6 +12,8 @@ std::string Parser::helpText() { " --serve-mcp KEY --mcp-port PORT --mcp-bind HOST\n" " --telegram --scheduler --install --install-telegram --uninstall-telegram\n" " --plexer-wrap --mplex COMMAND... --demo --demo-shot --tui --tui-local --theme NAME\n" + " --model MODEL --task TASK --cwd DIR --driver D --binary B --argv A\n" + " --allow-tool T --deny-tool T --max-risk R --auto-answer A\n" " --help (-h)\n version ") + std::string(kVersion) + "\n"; } Options Parser::parseOpts(int argc, char** argv) { diff --git a/taicpp/src/llm/llm.cpp b/taicpp/src/llm/llm.cpp index b479c1b..8a18e83 100644 --- a/taicpp/src/llm/llm.cpp +++ b/taicpp/src/llm/llm.cpp @@ -1,4 +1,6 @@ #include "llm.h" +#include "util/http.h" +#include #include namespace detz::llm { static std::string esc(const std::string& s) { @@ -45,13 +47,20 @@ ProviderInfo provider_info(const std::string& p) { return {p == "openai" ? "openai" : "openai", "https://api.openai.com", "/v1/chat/completions"}; } std::string provider_names() { return "openai,anthropic,google,deepseek,xai,openrouter"; } +static std::string curl_post(const std::string& url, const std::string& body, const std::map& h) { + auto r = detz::HttpPost(url, body, h, 60); + return r.body; +} ChatClient::ChatClient(std::string provider, std::string model, HttpPost post) - : provider_(std::move(provider)), model_(std::move(model)), post_(std::move(post)) {} + : provider_(std::move(provider)), model_(std::move(model)), post_(post ? std::move(post) : HttpPost(curl_post)) { + const char* k = std::getenv("OPENAI_API_KEY"); + if (k && *k) default_headers_["Authorization"] = std::string("Bearer ")+k; +} ChatResponse ChatClient::chat(const ChatRequest& req) { if (!post_) throw BackendError("no transport (mock required)", -1); auto info = provider_info(provider_); ChatRequest r = req; if (r.model.empty()) r.model = model_; - std::string body = post_(info.base_url + info.chat_path, req_json(r), {}); + std::string body = post_(info.base_url + info.chat_path, req_json(r), default_headers_); if (body.empty()) throw BackendError("empty backend response", 502); ChatResponse out; out.model = r.model; std::string t = grab(body, "content"); if (t.empty()) t = grab(body, "text"); diff --git a/taicpp/src/llm/llm.h b/taicpp/src/llm/llm.h index 438c066..7f031c2 100644 --- a/taicpp/src/llm/llm.h +++ b/taicpp/src/llm/llm.h @@ -33,6 +33,7 @@ class ChatClient { const std::string& provider() const { return provider_; } private: std::string provider_, model_; HttpPost post_; + std::map default_headers_; }; struct ModelSample { std::string model; bool ok; int latency_ms; }; class ModelHealth { @@ -50,5 +51,6 @@ class Opencode { ChatResponse complete(const std::string& model, const std::vector& msgs); private: std::string base_; HttpPost post_; + std::map default_headers_; }; } // namespace detz::llm