1pub mod executor;
7pub mod fallback;
8pub mod loop_detector;
9pub mod registry;
10pub mod retry;
11pub mod runtime;
12pub mod signal_voter;
13
14pub use executor::{ParallelSafety, ToolCategory, ToolExecutor, ToolRegistration};
15pub use fallback::{
16 DefaultFallback, FallbackAction, FallbackContext, FallbackReason, FallbackStrategy,
17};
18pub use lellm_provider::ResolvedModel;
19pub use loop_detector::{LoopDetector, LoopIntervention};
20pub use registry::{ToolRegistry, ToolSearchResult, ToolSource};
21pub use retry::{BackoffStrategy, RetryPolicy, ToolErrorKind};
22pub use runtime::{ToolCallResult, ToolUseLoop, ToolUseResult};
23pub use signal_voter::{NegativeSignal, SignalVoter};
24
25#[derive(Debug)]
32pub enum AgentEvent {
33 Provider(lellm_provider::ProviderEvent),
35 ToolStart { tool_call_id: String, name: String },
37 ToolEnd {
39 tool_call_id: String,
40 result: ToolCallResult,
41 },
42 Retry {
44 tool_call_id: String,
45 attempt: usize,
46 max_attempts: usize,
47 reason: String,
48 },
49 LoopEnd { result: ToolUseResult },
51 LoopError {
53 error: lellm_core::LlmError,
54 iterations: usize,
55 messages: Vec<lellm_core::Message>,
56 },
57}
58
59#[derive(Debug, Clone, PartialEq, Eq)]
61pub enum StopReason {
62 Complete,
64 MaxIterationsReached,
66 LoopDetected,
68 FallbackComplete,
70}
71
72pub type AgentStream = tokio::sync::mpsc::Receiver<AgentEvent>;