1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use std::{error::Error, sync::Arc};

use async_trait::async_trait;

use crate::{
    prompt::PromptArgs,
    schemas::agent::{AgentAction, AgentEvent},
    tools::Tool,
};

#[async_trait]
pub trait Agent: Send + Sync {
    async fn plan(
        &self,
        intermediate_steps: &[(AgentAction, String)],
        inputs: PromptArgs,
    ) -> Result<AgentEvent, Box<dyn Error>>;

    fn get_tools(&self) -> Vec<Arc<dyn Tool>>;
}

pub trait AgentOutputParser: Send + Sync {
    fn parse(&self, text: &str) -> Result<AgentEvent, Box<dyn Error>>;
    fn get_format_instructions(&self) -> &str;
}