Skip to main content

open_agent/tools/
factory.rs

1/// Starts a [`ToolBuilder`].
2///
3/// ```rust
4/// use open_agent::{tool, Error};
5/// use serde_json::json;
6///
7/// let add = tool("add", "Add two numbers")
8///     .param("a", "number")
9///     .param("b", "number")
10///     .build(|args| async move {
11///         let a = args["a"].as_f64()
12///             .ok_or_else(|| Error::invalid_input("a must be a number"))?;
13///         let b = args["b"].as_f64()
14///             .ok_or_else(|| Error::invalid_input("b must be a number"))?;
15///         Ok(json!({"result": a + b}))
16///     });
17/// ```
18///
19/// Use [`ToolBuilder::schema`] for optional parameters or a complete JSON Schema,
20/// and [`ToolBuilder::build`] for an example with shared state.
21pub fn tool(name: impl Into<String>, description: impl Into<String>) -> ToolBuilder {
22    ToolBuilder::new(name, description)
23}