use async_trait::async_trait;
use crate::capabilities::{Capabilities, ModelInfo};
use crate::error::Result;
use crate::request::CompletionRequest;
use crate::response::CompletionResponse;
use crate::stream::MessageStream;
#[async_trait]
pub trait Provider: Send + Sync {
async fn complete(&self, req: CompletionRequest) -> Result<CompletionResponse>;
async fn stream(&self, req: CompletionRequest) -> Result<MessageStream>;
fn capabilities(&self, model: &str) -> Capabilities;
fn list_models(&self) -> Vec<ModelInfo>;
fn name(&self) -> &'static str;
}