use async_trait::async_trait;
use tokio::sync::mpsc;
use super::types::{
ModelChatRequest, ModelChatResponse, ModelEmbeddingRequest, ModelEmbeddingResponse, ModelError,
ModelInfo, ModelSimilarityRequest, ModelSimilarityResponse, ModelStreamChunk,
};
#[async_trait]
pub trait ModelService: Send + Sync {
fn list_models(&self) -> Vec<ModelInfo>;
fn model_info(&self, model_id: &str) -> Option<ModelInfo>;
async fn chat(&self, req: ModelChatRequest) -> Result<ModelChatResponse, ModelError>;
async fn stream_chat(
&self,
req: ModelChatRequest,
tx: mpsc::Sender<ModelStreamChunk>,
) -> Result<(), ModelError>;
async fn embedding(
&self,
req: ModelEmbeddingRequest,
) -> Result<ModelEmbeddingResponse, ModelError>;
async fn similarity(
&self,
req: ModelSimilarityRequest,
) -> Result<ModelSimilarityResponse, ModelError>;
}