autoagents_core/agent/
executor.rs1use super::runnable::AgentState;
2use crate::session::Task;
3use async_trait::async_trait;
4use autoagents_llm::chat::ChatMessage;
5use autoagents_llm::LLMProvider;
6use serde::de::DeserializeOwned;
7use serde::Serialize;
8use std::error::Error;
9use std::fmt::Debug;
10use std::sync::Arc;
11use tokio::sync::Mutex;
12
13#[derive(Debug)]
15pub enum TurnResult<T> {
16 Continue,
18 Complete(T),
20 Error(String),
22}
23
24#[async_trait]
26pub trait AgentExecutor: Send + Sync + 'static {
27 type Output: Serialize + DeserializeOwned + Send + Sync;
28 type Error: Error + Send + Sync + 'static;
29
30 async fn execute(
32 &self,
33 llm: Arc<dyn LLMProvider>,
34 task: Task,
35 state: Arc<Mutex<AgentState>>,
36 ) -> Result<Self::Output, Self::Error>;
37
38 async fn process_turn(
40 &self,
41 llm: Arc<dyn LLMProvider>,
42 messages: &mut Vec<ChatMessage>,
43 state: Arc<Mutex<AgentState>>,
44 ) -> Result<TurnResult<Self::Output>, Self::Error>;
45
46 fn max_turns(&self) -> usize {
48 10
49 }
50}