mod claude; pub use claude::ClaudeProvider; use futures::Stream; use crate::core::types::{ConversationMessage, StreamEvent, ToolDefinition}; /// Trait for model providers that can stream conversation responses. /// /// Implementors take a conversation history and return a stream of [`StreamEvent`]s. /// The trait is provider-agnostic -- no Claude-specific types appear here. pub trait ModelProvider: Send + Sync { /// Stream a response from the model given the conversation history and /// available tool definitions. Pass an empty slice if no tools are available. fn stream<'a>( &'a self, messages: &'a [ConversationMessage], tools: &'a [ToolDefinition], ) -> impl Stream + Send + 'a; }