zerolaunch_plugin_api/services/model/
provider.rs1use async_trait::async_trait;
4use tokio::sync::mpsc;
5
6use super::types::{
7 ModelChatRequest, ModelChatResponse, ModelEmbeddingRequest, ModelEmbeddingResponse, ModelError,
8 ModelInfo, ModelStreamChunk,
9};
10
11#[async_trait]
18pub trait ModelProvider: Send + Sync {
19 fn provider_id(&self) -> String;
22 fn cache_namespace(&self) -> String {
25 self.provider_id()
26 }
27
28 async fn list_models(&self) -> Result<Vec<ModelInfo>, ModelError>;
30
31 async fn chat(&self, req: ModelChatRequest) -> Result<ModelChatResponse, ModelError>;
33
34 async fn stream_chat(
36 &self,
37 req: ModelChatRequest,
38 tx: mpsc::Sender<ModelStreamChunk>,
39 ) -> Result<(), ModelError>;
40
41 async fn embedding(
43 &self,
44 req: ModelEmbeddingRequest,
45 ) -> Result<ModelEmbeddingResponse, ModelError>;
46
47 async fn is_available(&self) -> bool {
49 true
50 }
51}