Skip to main content

zerolaunch_plugin_api/services/model/
service.rs

1use async_trait::async_trait;
2use tokio::sync::mpsc;
3
4use super::types::{
5    ModelChatRequest, ModelChatResponse, ModelEmbeddingRequest, ModelEmbeddingResponse, ModelError,
6    ModelInfo, ModelSimilarityRequest, ModelSimilarityResponse, ModelStreamChunk,
7};
8
9/// 宿主统一模型服务:消费者(内置组件经 PluginHandle、第三方插件经 host/model.*)
10/// 通过本接口获取模型清单、按 model_id 调用模型。
11///
12/// 实现(宿主 ModelManager)负责聚合各提供方清单并按 model_id 前缀路由。
13#[async_trait]
14pub trait ModelService: Send + Sync {
15    /// 全网模型清单(聚合缓存)。
16    fn list_models(&self) -> Vec<ModelInfo>;
17
18    /// 按 model_id 查询模型信息。
19    fn model_info(&self, model_id: &str) -> Option<ModelInfo>;
20
21    /// 文本生成。
22    async fn chat(&self, req: ModelChatRequest) -> Result<ModelChatResponse, ModelError>;
23
24    /// 流式文本生成:增量经 tx 推送,完成后关闭通道。
25    async fn stream_chat(
26        &self,
27        req: ModelChatRequest,
28        tx: mpsc::Sender<ModelStreamChunk>,
29    ) -> Result<(), ModelError>;
30
31    /// 文本向量化(task_type 必填,宿主对缺失/未知值返回 InvalidRequest)。
32    async fn embedding(
33        &self,
34        req: ModelEmbeddingRequest,
35    ) -> Result<ModelEmbeddingResponse, ModelError>;
36
37    /// 查询向量与多个目标向量的相似度(按模型元数据公式计算,并行加速)。
38    async fn similarity(
39        &self,
40        req: ModelSimilarityRequest,
41    ) -> Result<ModelSimilarityResponse, ModelError>;
42}