pub struct ToolBox { /* private fields */ }Expand description
A name-keyed registry of tools available to an agent.
ToolBox owns its tools behind Arc<Box<dyn ToolDyn>>, so cloning the
box is cheap and the same set of tools can be shared across concurrent
invocations. Tools are stored in a BTreeMap, so iteration order is
stable and sorted by name.
Implementations§
Source§impl ToolBox
impl ToolBox
Sourcepub fn render_tools(&self, details: bool) -> Vec<String>
pub fn render_tools(&self, details: bool) -> Vec<String>
Renders the registered tool names, optionally with their descriptions.
When details is true each entry is formatted as
`name`: "description"; otherwise only the bare name is returned.
Useful when surfacing the tool list inside a system prompt.
Sourcepub fn extend(&mut self, rhs: Self)
pub fn extend(&mut self, rhs: Self)
Merges another ToolBox into self. Tools in rhs overwrite any
existing entries that share a name.
Sourcepub fn has_tool(&self, tool: &String) -> bool
pub fn has_tool(&self, tool: &String) -> bool
Returns whether a tool with the given name is registered.
Sourcepub fn mcp_tools(&self) -> Vec<Tool>
pub fn mcp_tools(&self) -> Vec<Tool>
Renders every registered tool as an MCP rmcp::model::Tool
descriptor.
Sourcepub fn openai_objects(&self) -> Vec<ChatCompletionTools> ⓘ
pub fn openai_objects(&self) -> Vec<ChatCompletionTools> ⓘ
Renders every registered tool as an OpenAI ChatCompletionTools
entry, ready to be attached to a chat completion request.
Sourcepub fn add_tool<T: Tool + 'static>(&mut self, tool: T)
pub fn add_tool<T: Tool + 'static>(&mut self, tool: T)
Registers a typed Tool. Equivalent to boxing it and calling
Self::add_dyn_tool.
Sourcepub fn add_dyn_tool(&mut self, tool: Box<dyn ToolDyn>)
pub fn add_dyn_tool(&mut self, tool: Box<dyn ToolDyn>)
Registers an already-erased ToolDyn. The tool’s
ToolDyn::name is used as the registry key, so adding a tool whose
name collides with an existing one will replace the previous entry.
Sourcepub async fn invoke(
&self,
tool_name: String,
arguments: String,
) -> Option<Result<String, LLMYError>>
pub async fn invoke( &self, tool_name: String, arguments: String, ) -> Option<Result<String, LLMYError>>
Invokes a single tool by name with the given JSON-encoded arguments.
Returns None if no tool with that name is registered. Otherwise
returns Some with the tool’s result (or an LLMYError from
argument parsing or the tool itself).
pub async fn invoke_value( &self, tool_name: String, arguments: Value, ) -> Option<Result<String, LLMYError>>
Sourcepub async fn invoke_many(
&self,
calls: Vec<GeneralToolCall>,
) -> Vec<(GeneralToolCall, Option<Result<String, LLMYError>>)>
pub async fn invoke_many( &self, calls: Vec<GeneralToolCall>, ) -> Vec<(GeneralToolCall, Option<Result<String, LLMYError>>)>
Concurrently invokes every call in calls, spawning each one onto a
tokio::task::JoinSet.
Each result is paired with the original GeneralToolCall so the
caller can correlate it back to a specific invocation. Use
Self::invoke_many_sequential when ordering matters or when tools
must not run in parallel.
Sourcepub async fn invoke_many_sequential(
&self,
calls: Vec<GeneralToolCall>,
) -> Vec<(GeneralToolCall, Option<Result<String, LLMYError>>)>
pub async fn invoke_many_sequential( &self, calls: Vec<GeneralToolCall>, ) -> Vec<(GeneralToolCall, Option<Result<String, LLMYError>>)>
Sequentially invokes every call in calls, awaiting each one before
starting the next. Preserves input order and avoids any concurrency
between tools — pick this over Self::invoke_many when tools share
non-Sync state or must observe one another’s side effects.
Sourcepub async fn agent_invoke_many(
&self,
calls: Vec<GeneralToolCall>,
) -> Vec<(GeneralToolCall, Option<Result<ChatCompletionRequestMessageRaw, LLMYError>>)>
pub async fn agent_invoke_many( &self, calls: Vec<GeneralToolCall>, ) -> Vec<(GeneralToolCall, Option<Result<ChatCompletionRequestMessageRaw, LLMYError>>)>
Concurrent variant of Self::invoke_many that wraps each successful
result in a [ChatCompletionRequestMessage] (a tool message tagged
with the originating tool_id), ready to be appended to a
conversation history.
Sourcepub async fn agent_invoke_many_sequential(
&self,
calls: Vec<GeneralToolCall>,
) -> Vec<(GeneralToolCall, Option<Result<ChatCompletionRequestMessageRaw, LLMYError>>)>
pub async fn agent_invoke_many_sequential( &self, calls: Vec<GeneralToolCall>, ) -> Vec<(GeneralToolCall, Option<Result<ChatCompletionRequestMessageRaw, LLMYError>>)>
Sequential variant of Self::agent_invoke_many.
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for ToolBox
impl !UnwindSafe for ToolBox
impl Freeze for ToolBox
impl Send for ToolBox
impl Sync for ToolBox
impl Unpin for ToolBox
impl UnsafeUnpin for ToolBox
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more