diff --git a/src/core/config.rs b/src/core/config.rs index 7fb2a77..c691a7f 100644 --- a/src/core/config.rs +++ b/src/core/config.rs @@ -314,6 +314,21 @@ pub enum CharacterType { Pet, Human, Singer, + /// Live2D 数字人 (渲染策略不同于视频) + Live2d, +} + +/// 渲染类型 (决定显示策略) +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, Default)] +#[serde(rename_all = "lowercase")] +pub enum RenderType { + /// 视频播放 (OpenCV 播放预渲染 mp4) + #[default] + Video, + /// Live2D 渲染 (Web 前端渲染 Live2D 模型) + Live2d, + /// 纯文字 (无画面) + Text, } /// 角色元信息配置块(内容包的一部分,切角色即切人设) @@ -326,6 +341,9 @@ pub struct CharacterConfig { /// 角色类型 #[serde(default)] pub character_type: CharacterType, + /// 渲染类型 (决定显示策略) + #[serde(default)] + pub render_type: RenderType, /// 封面图相对路径 (内容包内) #[serde(default)] pub cover_image: Option, @@ -341,6 +359,12 @@ pub struct CharacterConfig { /// talk 状态名 (语音回合期间切换到,留空用 "talk") #[serde(default = "default_talk_state")] pub talk_state: String, + /// Live2D 模型路径 (render_type=live2d 时使用) + #[serde(default)] + pub live2d_model: Option, + /// Live2D 模型配置 JSON 路径 + #[serde(default)] + pub live2d_config: Option, } fn default_character_max_tokens() -> u16 { diff --git a/src/plugins/ai/model_manager.rs b/src/plugins/ai/model_manager.rs index bc881f5..869db24 100644 --- a/src/plugins/ai/model_manager.rs +++ b/src/plugins/ai/model_manager.rs @@ -165,18 +165,30 @@ impl ModelManager { sha256: String::new(), filename: "qwen2.5-0.5b-q4_k_m.gguf".to_string(), }, - ModelInfo { - id: "gemma3-1b-q4_k_m".to_string(), - kind: ModelKind::Llm, - name: "Gemma3 1B Q4 (可选档)".to_string(), - version: "1b".to_string(), - size: 800 * 1024 * 1024, - memory_required: 2 * 1024 * 1024 * 1024, - recommended_tier: "建议 8G 以上".to_string(), - url: "https://hf-mirror.com/google/gemma-3-1b-it-GGUF/resolve/main/gemma-3-1b-it-q4_k_m.gguf".to_string(), - sha256: String::new(), - filename: "gemma3-1b-q4_k_m.gguf".to_string(), - }, + ModelInfo { + id: "gemma3-1b-q4_k_m".to_string(), + kind: ModelKind::Llm, + name: "Gemma3 1B Q4 (可选档)".to_string(), + version: "1b".to_string(), + size: 800 * 1024 * 1024, + memory_required: 2 * 1024 * 1024 * 1024, + recommended_tier: "建议 8G 以上".to_string(), + url: "https://hf-mirror.com/google/gemma-3-1b-it-GGUF/resolve/main/gemma-3-1b-it-q4_k_m.gguf".to_string(), + sha256: String::new(), + filename: "gemma3-1b-q4_k_m.gguf".to_string(), + }, + ModelInfo { + id: "gemma-4-e2b-q4_k_m".to_string(), + kind: ModelKind::Llm, + name: "Gemma 4 E2B Q4 (最新代,多模态)".to_string(), + version: "e2b".to_string(), + size: 3269 * 1024 * 1024, + memory_required: 3 * 1024 * 1024 * 1024, + recommended_tier: "需 4G+ 内存,可能触发 swap".to_string(), + url: "https://huggingface.co/dahus/gemma-4-e2b-it-Q4_K_M-GGUF/resolve/main/gemma-4-e2b-Q4_K_M.gguf".to_string(), + sha256: "2de6e5baaea40a8d54fb37ff418730ba4e5c002b".to_string(), + filename: "gemma-4-e2b-Q4_K_M.gguf".to_string(), + }, ModelInfo { id: "whisper-tiny".to_string(), kind: ModelKind::Asr, diff --git a/src/plugins/http/chat.html b/src/plugins/http/chat.html index 917cd4e..658cdf7 100644 --- a/src/plugins/http/chat.html +++ b/src/plugins/http/chat.html @@ -3,23 +3,32 @@ -Showen AI 对话 +Showen 数字生命控制台