pub struct ToolAdapter<T> { /* private fields */ }Expand description
A Tool as a handler, keyed by its name.
Implementations§
Source§impl<T: Tool> ToolAdapter<T>
impl<T: Tool> ToolAdapter<T>
Sourcepub fn retrievable(tool: T) -> Result<Self, Error>where
T: ToolEmbedding,
pub fn retrievable(tool: T) -> Result<Self, Error>where
T: ToolEmbedding,
Wraps a tool with embedding descriptions and serialized reconstruction context. Returns an error if context serialization fails.
Sourcepub fn embedding(&self) -> Option<&ToolEmbeddingDescriptor>
pub fn embedding(&self) -> Option<&ToolEmbeddingDescriptor>
The retrieval descriptor of a Self::retrievable adapter.
Sourcepub async fn run(&self, args: Value) -> Result<ToolOutput, ToolExecutionError>
pub async fn run(&self, args: Value) -> Result<ToolOutput, ToolExecutionError>
Runs the tool on JSON args with an empty ToolContext, as
Self::run_with does.
Sourcepub async fn run_with(
&self,
context: &mut ToolContext,
args: Value,
) -> Result<ToolOutput, ToolExecutionError>
pub async fn run_with( &self, context: &mut ToolContext, args: Value, ) -> Result<ToolOutput, ToolExecutionError>
Runs the tool on JSON args as a dispatch of its call runs it:
arguments parsed, errors normalized by Tool::map_error, output
converted. The tool sees context’s inbound values, and what it
publishes with insert_result lands in context. No registry or
agent is involved.
use rig_core::{serve::adapters::ToolAdapter, tool::{ContextValue, Tool, ToolContext}};
use serde_json::json;
#[derive(serde::Serialize, serde::Deserialize)]
struct Calls(u32);
impl ContextValue for Calls { const KEY: &'static str = "calls"; }
struct Double;
impl Tool for Double {
const NAME: &'static str = "double";
type Args = i64;
type Output = i64;
type Error = rig_core::tool::ToolContextError;
fn description(&self) -> String {
"Doubles a number.".to_string()
}
fn parameters(&self) -> serde_json::Value {
json!({ "type": "integer" })
}
async fn call(&self, context: &mut ToolContext, n: i64) -> Result<i64, Self::Error> {
context.insert_result(Calls(1))?;
Ok(n * 2)
}
}
let double = ToolAdapter::new(Double);
let mut context = ToolContext::new();
let output = futures::executor::block_on(double.run_with(&mut context, json!(21)))?;
assert_eq!(output.as_json(), Some(&json!(42)));
assert_eq!(context.result::<Calls>()?.map(|calls| calls.0), Some(1));
assert!(futures::executor::block_on(double.run(json!("21"))).is_err());Trait Implementations§
Source§impl<T> Serve for ToolAdapter<T>where
T: Tool + 'static,
impl<T> Serve for ToolAdapter<T>where
T: Tool + 'static,
Source§fn descriptor(&self) -> HandlerDescriptor
fn descriptor(&self) -> HandlerDescriptor
What this handler is: the family-keyed description a typed view
checks at bind time and a scene serializes.
Source§fn key(&self) -> HandlerKey
fn key(&self) -> HandlerKey
The descriptor’s key. A handler whose
descriptor is costly to build, such as a tool’s argument schema,
says it without building one.
Source§fn footprint(&self, kind: &EffectKind) -> Option<Touches>
fn footprint(&self, kind: &EffectKind) -> Option<Touches>
What dispatching
kind may read and change, for a tool’s handler
(Tool::footprint); None when it
cannot say, such as for arguments that do not parse.Source§async fn serve(&self, kind: EffectKind, dispatch: Dispatch) -> Reply
async fn serve(&self, kind: EffectKind, dispatch: Dispatch) -> Reply
Prepare an outcome or an owned stream for the driver to consume.
Source§fn check(&self, kind: &EffectKind) -> Vec<UnsupportedOption>
fn check(&self, kind: &EffectKind) -> Vec<UnsupportedOption>
The options of
kind this handler would leave out when it serves
it, with nothing sent: for a model’s handler, what its wire or model
cannot honour (DynModel::check).
Empty when it leaves nothing out or cannot say, as by default.Auto Trait Implementations§
impl<T> Freeze for ToolAdapter<T>where
T: Freeze,
impl<T> RefUnwindSafe for ToolAdapter<T>where
T: RefUnwindSafe,
impl<T> Send for ToolAdapter<T>where
T: Send,
impl<T> Sync for ToolAdapter<T>where
T: Sync,
impl<T> Unpin for ToolAdapter<T>where
T: Unpin,
impl<T> UnsafeUnpin for ToolAdapter<T>where
T: UnsafeUnpin,
impl<T> UnwindSafe for ToolAdapter<T>where
T: UnwindSafe,
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
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> ⓘ
Converts
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> ⓘ
Converts
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 more