use crate::stream::AssistantMessageEventStream;
use crate::types::{Context, Model, Provider, SimpleStreamOptions, StreamOptions};
use async_trait::async_trait;
use std::sync::Arc;
#[async_trait]
pub trait LLMProtocol: Send + Sync {
fn provider_type(&self) -> Provider;
fn stream(
&self,
model: &Model,
context: &Context,
options: StreamOptions,
) -> AssistantMessageEventStream;
fn stream_simple(
&self,
model: &Model,
context: &Context,
options: SimpleStreamOptions,
) -> AssistantMessageEventStream;
}
pub type BoxedProtocol = Box<dyn LLMProtocol>;
pub type ArcProtocol = Arc<dyn LLMProtocol>;