rmcp_agent/agent/
extension.rs1use std::pin::Pin;
2
3use async_trait::async_trait;
4use futures_util::Stream;
5use langchain_rust::agent::{Agent, AgentError};
6use langchain_rust::chain::ChainError;
7use langchain_rust::prompt::PromptArgs;
8use langchain_rust::schemas::{AgentAction, AgentEvent};
9
10use crate::agent::intermediate::IntermediateStep;
11
12#[async_trait]
13pub trait AgentExt: Agent {
14 async fn plan_with_steps(
15 &self,
16 intermediate_steps: &[impl IntermediateStep],
17 inputs: PromptArgs,
18 ) -> Result<AgentEvent, AgentError>;
19
20 async fn plan_stream(
21 &self,
22 steps: &[impl IntermediateStep],
23 inputs: PromptArgs,
24 ) -> Result<AgentStream, AgentError>;
25}
26
27pub type AgentStream = Pin<Box<dyn Stream<Item = Result<AgentEventChunk, ChainError>> + Send>>;
28
29pub enum AgentEventChunk {
30 Delta(DeltaEvent),
31 Final(AgentEvent),
32}
33
34pub enum DeltaEvent {
35 Action(AgentAction),
36 Content(String),
37}