Skip to main content

FnTool

Struct FnTool 

Source
pub struct FnTool { /* private fields */ }
Expand description

A Tool built from a plain async function.

Use this to adapt an Autumn handler’s core logic:

async fn get_weather(input: Value) -> Result<Value, AgentError> {
    let city = input["city"].as_str().unwrap_or("unknown");
    Ok(json!({"city": city, "temp_f": 72}))
}

let tool = FnTool::new(
    "get_weather",
    "Current weather for a city.",
    serde_json::json!({
        "type": "object",
        "properties": {"city": {"type": "string"}},
        "required": ["city"],
    }),
    get_weather,
);

Implementations§

Source§

impl FnTool

Source

pub fn new<F, Fut>( name: impl Into<String>, description: impl Into<String>, schema: Value, run: F, ) -> Self
where F: Fn(Value) -> Fut + Send + Sync + 'static, Fut: Future<Output = Result<Value, AgentError>> + Send + 'static,

Wrap an async function as a tool.

The function receives the decoded JSON arguments and returns JSON. Return ErrorKind::Tool errors for domain failures so the agent loop reports them back to the model instead of aborting the run.

Source

pub fn with_context<F, Fut>( name: impl Into<String>, description: impl Into<String>, schema: Value, run: F, ) -> Self
where F: Fn(Value, ToolContext) -> Fut + Send + Sync + 'static, Fut: Future<Output = Result<Value, AgentError>> + Send + 'static,

Wrap an async function that also wants the ToolContext.

Use it when the tool needs the run id or call id, for example as an idempotency key.

Source

pub const fn effect(self, effect: ToolEffect) -> Self

Declare what the tool can change. The default is ToolEffect::Write.

Source

pub fn shared(self) -> Arc<dyn Tool> ⓘ

Share the tool between the plugin registry and direct use.

Trait Implementations§

Source§

impl Debug for FnTool

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Tool for FnTool

Source§

fn name(&self) -> &str

Tool name as the model calls it. Keep it snake_case.
Source§

fn description(&self) -> &str

What the tool does, shown to the model.
Source§

fn input_schema(&self) -> Value

JSON Schema for the tool’s input object.
Source§

fn execute<'a>( &'a self, input: Value, ctx: &'a ToolContext, ) -> Pin<Box<dyn Future<Output = Result<Value, AgentError>> + Send + 'a>>

Run the tool against decoded JSON arguments.
Source§

fn effect(&self) -> ToolEffect

What the tool can change. Defaults to ToolEffect::Write: a tool is trusted with less only when it says so.
Source§

fn definition(&self) -> ToolDefinition

Bundle the metadata the model sees into a ToolDefinition.

Auto Trait Implementations§

§

impl !RefUnwindSafe for FnTool

§

impl !UnwindSafe for FnTool

§

impl Forget for FnTool

§

impl Freeze for FnTool

§

impl Send for FnTool

§

impl Sync for FnTool

§

impl Unpin for FnTool

§

impl UnsafeUnpin for FnTool

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> Scoped for T
where T: Send + Sync + 'static,

Source§

fn scope(ctx: &PolicyContext) -> ScopeQuery<'_, Self>

Open a deferred ScopeQuery for this type. Resolves the registered scope at .load() time, not here.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more