diff --git a/apps/desktop/src-tauri/src/business/services/video_classification_service.rs b/apps/desktop/src-tauri/src/business/services/video_classification_service.rs index c049fbc..1d2eb74 100644 --- a/apps/desktop/src-tauri/src/business/services/video_classification_service.rs +++ b/apps/desktop/src-tauri/src/business/services/video_classification_service.rs @@ -8,7 +8,6 @@ use crate::infrastructure::file_system::FileSystemService; use anyhow::{Result, anyhow}; use std::sync::Arc; use std::path::Path; -use tokio::sync::Mutex; use serde_json; /// AI视频分类业务服务 @@ -17,7 +16,7 @@ pub struct VideoClassificationService { video_repo: Arc, ai_classification_repo: Arc, material_repo: Arc, - gemini_service: Arc>, + gemini_config: Option, } impl VideoClassificationService { @@ -28,13 +27,11 @@ impl VideoClassificationService { material_repo: Arc, gemini_config: Option, ) -> Self { - let gemini_service = Arc::new(Mutex::new(GeminiService::new(gemini_config))); - Self { video_repo, ai_classification_repo, material_repo, - gemini_service, + gemini_config, } } @@ -239,7 +236,8 @@ impl VideoClassificationService { /// 使用Gemini进行视频分类 async fn classify_video_with_gemini(&self, task: &mut VideoClassificationTask, prompt: &str) -> Result { - let mut gemini_service = self.gemini_service.lock().await; + // 为每个任务创建独立的GeminiService实例,避免并发瓶颈 + let mut gemini_service = GeminiService::new(self.gemini_config.clone()); // 调用Gemini API进行分类 let (file_uri, raw_response) = gemini_service.classify_video(&task.video_file_path, prompt).await?;