use async_trait::async_trait;
use super::capabilities::ModelCapabilities;
use super::config::ModelConfig;
use super::error::{ModelError, Result};
use super::stream::StreamCallback;
use super::types::{ChatMessage, ModelResponse};
#[async_trait]
pub trait Model: Send + Sync {
async fn chat(
&self,
messages: &[ChatMessage],
config: &ModelConfig,
callback: Option<StreamCallback>,
) -> Result<ModelResponse>;
fn capabilities(&self) -> &ModelCapabilities;
fn name(&self) -> &str;
async fn list_models(&self) -> Result<Vec<String>> {
Err(ModelError::Unsupported {
feature: "list_models".to_string(),
})
}
}