use async_trait::async_trait;
use futures::Stream;
use std::pin::Pin;
use crate::error::ProviderError;
use crate::{Model, Context, StreamOptions, ProviderEvent};
#[async_trait]
pub trait Provider: Send + Sync + 'static {
async fn stream(
&self,
model: &Model,
context: &Context,
options: Option<StreamOptions>,
) -> Result<Pin<Box<dyn Stream<Item = ProviderEvent> + Send>>, ProviderError>;
fn name(&self) -> &str;
}