#pragma once #include "server-common.h" #include "server-http.h" #include "server-queue.h" #include #include struct server_tool { std::string name; std::string display_name; bool permission_write = false; bool support_stream = false; // if true, output can be streamed virtual ~server_tool() = default; virtual json get_definition() const = 0; struct stream { server_response & qr; int id; std::function alive; void push(const std::string & chunk); }; virtual json invoke(json params, stream * st = nullptr) const = 0; json to_json() const; }; struct server_tools { std::vector> tools; // for streaming server_response queue_res; std::atomic res_id{0}; void setup(const std::vector & enabled_tools); server_http_context::handler_t handle_get; server_http_context::handler_t handle_post; };