Agent

Struct Agent 

Source
pub struct Agent<C: Client> { /* private fields */ }
Expand description

Agent that automatically executes tools in a loop.

Unlike the raw Client, an Agent handles tool execution automatically:

  1. Sends request with tool definitions from the MCP server (if configured)
  2. Receives response with potential function calls
  3. Executes tools automatically
  4. Adds results back to conversation
  5. Loops until no more function calls

§Example

use unia::agent::Agent;
use unia::providers::{Gemini, Provider};
use unia::model::{Message, Part};

let client = Gemini::create("api_key".to_string(), "gemini-3.0-pro".to_string());
let agent = Agent::new(client)
    .with_server(weather_server);

let messages = vec![
    Message::User(vec![
        Part::Text { content: "What's the weather?".into(), finished: true }
    ])
];

let response = agent.chat(messages).await?;

Implementations§

Source§

impl<C: Client> Agent<C>

Source

pub fn new(client: C) -> Self

Create a new agent.

§Arguments
  • client: The initialized client instance

Tools are fetched from the configured MCP server if available.

Source

pub fn with_server<S: MCPServer + 'static>(self, server: S) -> Self

Set the MCP server for the agent.

Source

pub fn with_max_iterations(self, max: usize) -> Self

Set the maximum number of iterations for the agentic loop.

Source

pub async fn chat( &self, messages: Vec<Message>, ) -> Result<Response, ClientError>

Send a chat request with automatic tool execution.

This method automatically handles the tool execution loop:

  • Sends request to LLM with tools from the MCP server (if configured)
  • Executes any tool calls
  • Continues until no more tool calls or max iterations reached
§Arguments
  • messages: Conversation messages
§Returns

The response containing all new messages generated during the execution (including tool calls and results)

Source

pub fn chat_stream<'a>( &'a self, messages: Vec<Message>, ) -> Pin<Box<dyn Stream<Item = Result<Response, ClientError>> + Send + 'a>>
where C: StreamingClient,

Send a streaming chat request with automatic tool execution.

This method automatically handles the tool execution loop with streaming:

  • Sends streaming request to LLM with tools from the MCP server (if configured)
  • Executes any tool calls
  • Continues until no more tool calls or max iterations reached
§Arguments
  • messages: Conversation messages
§Returns

A stream of chunks for the final response after all tool executions complete

Auto Trait Implementations§

§

impl<C> Freeze for Agent<C>
where C: Freeze,

§

impl<C> !RefUnwindSafe for Agent<C>

§

impl<C> Send for Agent<C>

§

impl<C> Sync for Agent<C>

§

impl<C> Unpin for Agent<C>
where C: Unpin,

§

impl<C> !UnwindSafe for Agent<C>

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<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: 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: 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<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