Module tools

Source
Expand description

This module provides essential tools for integrating Unifai into your agent.

§Example

See examples/openai_agent.rs

use std::env;
use unifai_sdk::{
    rig::{
        completion::{Completion, Message},
        message::{AssistantContent, Text, ToolResult, ToolResultContent, UserContent},
        providers::openai,
        OneOrMany,
    },
    tokio,
    tools::get_tools,
};

#[tokio::main]
async fn main() {
    let unifai_agent_api_key =
        env::var("UNIFAI_AGENT_API_KEY").expect("UNIFAI_AGENT_API_KEY not set");
    let (search_tools, call_tool) = get_tools(&unifai_agent_api_key);

    let openai_api_key = env::var("OPENAI_API_KEY").expect("OPENAI_API_KEY not set");
    let openai_client = openai::Client::new(&openai_api_key);
    let agent = openai_client
        .agent(openai::GPT_4O)
        .preamble(concat!(
            "You are a personal assistant capable of doing many things with your tools. ",
            "When you are given a task you cannot do (like something you don't know, ",
            "or requires you to take some action), try find appropriate tools to do it."
        ))
        .tool(search_tools)
        .tool(call_tool)
        .build();

    let prompt = "Get the balance of Solana account 11111111111111111111111111111111.";
    let mut chat_history = vec![Message::user(prompt)];

    let result = loop {
        let response = agent
            .completion("", chat_history.clone())
            .await
            .unwrap()
            .send()
            .await
            .unwrap();

        let content = response.choice.first();

        chat_history.push(Message::Assistant {
            content: OneOrMany::one(content.clone()),
        });

        match content {
            AssistantContent::Text(text) => {
                break text;
            }
            AssistantContent::ToolCall(tool_call) => {
                let tool_result = agent
                    .tools
                    .call(
                        &tool_call.function.name,
                        tool_call.function.arguments.to_string(),
                    )
                    .await
                    .unwrap();

                chat_history.push(Message::User {
                    content: OneOrMany::one(UserContent::ToolResult(ToolResult {
                        id: tool_call.id,
                        content: OneOrMany::one(ToolResultContent::Text(Text {
                            text: tool_result,
                        })),
                    })),
                })
            }
        }
    };

    println!("Assistant: {}", result.text);
}

Structs§

CallTool
A tool used to call specific tool on Unifai server.
CallToolArgs
SearchTools
A tool used to search tools on Unifai server.
SearchToolsArgs

Functions§

get_tools
Returns two essential tools to integrate Unifai with your agent.