5#ifndef FORESTHUB_CORE_TOOLS_HPP
6#define FORESTHUB_CORE_TOOLS_HPP
24using json = nlohmann::json;
38 virtual ~Tool() =
default;
48 virtual void ToJson(json& j)
const = 0;
77 std::string
ToString()
const override {
return "Function tool call: " +
name +
" with arguments " +
arguments; }
80 void ToJson(json& j)
const override {
82 json args_json = json::parse(
arguments,
nullptr,
false);
83 if (!args_json.is_discarded()) {
84 j[
"arguments"] = args_json;
104 return "Function " +
name +
" returned: " +
output.get<std::string>();
106 return "Function " +
name +
" returned: " +
output.dump();
154 std::function<json(
const std::string&)>
172template <
typename T,
typename R>
173std::shared_ptr<FunctionTool>
NewFunctionTool(std::string name, std::string description,
const json& schema,
174 const std::function<R(T)>& handler) {
175 auto tool = std::make_shared<FunctionTool>();
177 tool->name = std::move(name);
178 tool->description = std::move(description);
181 tool->tool_call = [handler, tool_name = tool->name](
const std::string& raw_args) -> json {
182 json j_args = json::parse(raw_args,
nullptr,
false);
183 if (j_args.is_discarded()) {
184 return json(std::string(
"Error: Tool arguments for " + tool_name +
" were not valid JSON."));
187 T args = j_args.get<T>();
189 R result = handler(args);
202 std::string
ToolName()
const override {
return "web_search"; }
207 void ToJson(json& j)
const override { j = json{{
"type",
"web_search"}}; }
215 std::string
ToolName()
const override {
return "web_search"; }
Built-in web search tool.
Definition tools.hpp:199
ToolType GetToolType() const override
Identifies this as a web search tool.
Definition tools.hpp:204
std::string ToolName() const override
Always returns "web_search".
Definition tools.hpp:202
void ToJson(json &j) const override
Serialize web search tool to JSON.
Definition tools.hpp:207
Wrapper for nlohmann/json that works around abs macro conflicts.
Core abstractions: requests, responses, tools, input types, and provider interface.
ToolType
Type discriminator for Tool subclasses.
Definition tools.hpp:29
@ kHandoff
Agent handoff tool.
Definition tools.hpp:32
@ kWebSearch
Built-in web search tool.
Definition tools.hpp:31
@ kFunction
User-defined function tool with C++ callback.
Definition tools.hpp:30
std::shared_ptr< FunctionTool > NewFunctionTool(std::string name, std::string description, const json &schema, const std::function< R(T)> &handler)
Create a FunctionTool with type-safe argument parsing.
Definition tools.hpp:173
InputItemType
Type discriminator for InputItem subclasses.
Definition input.hpp:44
@ kToolResult
Tool execution result (ToolResult).
Definition input.hpp:47
@ kToolCall
Tool call request from the model (ToolCallRequest).
Definition input.hpp:46
json NormalizeSchema(json schema)
Wraps a minimal properties-only JSON object into a full JSON Schema.
Top-level namespace for the ForestHub SDK.
JSON Schema normalization utilities.