use anyhow::Result;
use async_trait::async_trait;
use tokio::sync::mpsc;
use super::stream::ApiEvent;
use super::types::{Message, ToolDefinition};
#[async_trait]
pub trait Provider: Send + Sync {
fn name(&self) -> &str;
fn model(&self) -> &str;
fn set_model(&mut self, model: &str);
async fn stream(
&self,
messages: &[Message],
system: &str,
tools: &[ToolDefinition],
max_tokens: u32,
) -> Result<mpsc::Receiver<ApiEvent>>;
}