diff --git a/apps/desktop/src-tauri/src/app_state.rs b/apps/desktop/src-tauri/src/app_state.rs index 2ed8467..7d36e69 100644 --- a/apps/desktop/src-tauri/src/app_state.rs +++ b/apps/desktop/src-tauri/src/app_state.rs @@ -331,7 +331,7 @@ impl AppState { } /// 初始化 ComfyUI Infrastructure 服务 - pub fn initialize_comfyui_service(&self, config: crate::data::models::comfyui::ComfyuiConfig) -> anyhow::Result<()> { + pub fn initialize_comfyui_service(&self, config: crate::data::models::comfyui::ComfyUIConfig) -> anyhow::Result<()> { let service = ComfyuiInfrastructureService::new(config)?; let mut comfyui_service = self.comfyui_infrastructure_service.lock() @@ -355,7 +355,7 @@ impl AppState { } /// 更新 ComfyUI Infrastructure 服务配置 - pub async fn update_comfyui_config(&self, config: crate::data::models::comfyui::ComfyuiConfig) -> anyhow::Result<()> { + pub async fn update_comfyui_config(&self, config: crate::data::models::comfyui::ComfyUIConfig) -> anyhow::Result<()> { // 创建新的服务实例 let new_service = ComfyuiInfrastructureService::new(config)?; diff --git a/apps/desktop/src-tauri/src/business/services/config_manager.rs b/apps/desktop/src-tauri/src/business/services/config_manager.rs index c4b9b0c..ad7a6e9 100644 --- a/apps/desktop/src-tauri/src/business/services/config_manager.rs +++ b/apps/desktop/src-tauri/src/business/services/config_manager.rs @@ -10,7 +10,7 @@ use crate::config::{AppConfig, ComfyUISettings}; use crate::data::models::comfyui::{ComfyUIConfig, ValidationResult}; /// 环境类型 -#[derive(Debug, Clone, PartialEq)] +#[derive(Debug, Clone, PartialEq, serde::Serialize, serde::Deserialize)] pub enum Environment { /// 开发环境 Development, @@ -158,7 +158,7 @@ impl ConfigManager { /// 验证应用配置 async fn validate_app_config(&self, config: &AppConfig) -> Result { - use crate::data::models::comfyui::{ValidationResult, ValidationError}; + use crate::data::models::comfyui::{ValidationResult, SDKValidationError as ValidationError}; let mut result = ValidationResult::success(); @@ -285,7 +285,7 @@ impl ConfigManager { } /// 配置统计信息 -#[derive(Debug, Clone)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ConfigStats { pub environment: Environment, pub config_path: Option, diff --git a/apps/desktop/src-tauri/src/business/services/execution_engine.rs b/apps/desktop/src-tauri/src/business/services/execution_engine.rs index 2a58a7e..fa4f4a4 100644 --- a/apps/desktop/src-tauri/src/business/services/execution_engine.rs +++ b/apps/desktop/src-tauri/src/business/services/execution_engine.rs @@ -368,7 +368,7 @@ impl ExecutionEngine { } /// 执行统计信息 -#[derive(Debug, Clone)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ExecutionStats { pub running_count: usize, pub running_executions: Vec, diff --git a/apps/desktop/src-tauri/src/business/services/realtime_monitor.rs b/apps/desktop/src-tauri/src/business/services/realtime_monitor.rs index 7c76696..1ce0a72 100644 --- a/apps/desktop/src-tauri/src/business/services/realtime_monitor.rs +++ b/apps/desktop/src-tauri/src/business/services/realtime_monitor.rs @@ -445,7 +445,7 @@ impl RealtimeMonitor { } /// 监控统计信息 -#[derive(Debug, Clone)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct MonitorStats { pub is_running: bool, pub websocket_connected: bool, diff --git a/apps/desktop/src-tauri/src/business/services/template_engine.rs b/apps/desktop/src-tauri/src/business/services/template_engine.rs index e6c060e..4687e7c 100644 --- a/apps/desktop/src-tauri/src/business/services/template_engine.rs +++ b/apps/desktop/src-tauri/src/business/services/template_engine.rs @@ -294,7 +294,7 @@ impl TemplateEngine { } /// 缓存统计信息 -#[derive(Debug, Clone)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct CacheStats { pub cached_templates: usize, pub cache_keys: Vec, diff --git a/apps/desktop/src-tauri/src/config.rs b/apps/desktop/src-tauri/src/config.rs index 815dd79..0392348 100644 --- a/apps/desktop/src-tauri/src/config.rs +++ b/apps/desktop/src-tauri/src/config.rs @@ -170,7 +170,7 @@ impl ComfyUISettings { /// 验证配置 pub fn validate(&self) -> crate::data::models::comfyui::ValidationResult { - use crate::data::models::comfyui::{ValidationResult, ValidationError}; + use crate::data::models::comfyui::{ValidationResult, SDKValidationError as ValidationError}; let mut result = ValidationResult::success(); diff --git a/apps/desktop/src-tauri/src/data/models/comfyui.rs b/apps/desktop/src-tauri/src/data/models/comfyui.rs index e9c2c04..f37a660 100644 --- a/apps/desktop/src-tauri/src/data/models/comfyui.rs +++ b/apps/desktop/src-tauri/src/data/models/comfyui.rs @@ -9,7 +9,7 @@ use uuid::Uuid; // 重新导出 SDK 类型 pub use comfyui_sdk::types::{ ComfyUIWorkflow, ParameterSchema, ParameterType, ParameterValues, - ValidationResult, ValidationError, TemplateMetadata, WorkflowTemplateData, + ValidationResult, ValidationError as SDKValidationError, TemplateMetadata, WorkflowTemplateData, QueueStatus, SystemStats, ObjectInfo }; @@ -435,6 +435,33 @@ pub struct QueueStatistics { pub average_wait_time: Option, } +/// 旧版 ComfyUI 配置(用于 Infrastructure 服务) +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct ComfyuiConfig { + /// 服务基础 URL + pub base_url: String, + /// 连接超时时间(秒) + pub timeout: Option, + /// 重试次数 + pub retry_attempts: Option, + /// 是否启用缓存 + pub enable_cache: Option, + /// 最大并发数 + pub max_concurrency: Option, +} + +impl Default for ComfyuiConfig { + fn default() -> Self { + Self { + base_url: "http://localhost:8188".to_string(), + timeout: Some(300), + retry_attempts: Some(3), + enable_cache: Some(true), + max_concurrency: Some(4), + } + } +} + /// ComfyUI 服务配置 /// 基于 SDK 的统一配置结构 #[derive(Debug, Clone, Serialize, Deserialize)] @@ -490,26 +517,26 @@ impl ComfyUIConfig { // 验证 URL if self.base_url.is_empty() { - result.add_error(ValidationError::new("base_url", "Base URL cannot be empty")); + result.add_error(SDKValidationError::new("base_url".to_string(), "Base URL cannot be empty".to_string(), None)); } else if url::Url::parse(&self.base_url).is_err() { - result.add_error(ValidationError::new("base_url", "Invalid URL format")); + result.add_error(SDKValidationError::new("base_url".to_string(), "Invalid URL format".to_string(), None)); } // 验证超时时间 if self.timeout_seconds == 0 { - result.add_error(ValidationError::new("timeout_seconds", "Timeout must be greater than 0")); + result.add_error(SDKValidationError::new("timeout_seconds".to_string(), "Timeout must be greater than 0".to_string(), None)); } // 验证重试次数 if self.retry_attempts > 10 { - result.add_error(ValidationError::new("retry_attempts", "Retry attempts should not exceed 10")); + result.add_error(SDKValidationError::new("retry_attempts".to_string(), "Retry attempts should not exceed 10".to_string(), None)); } // 验证并发数 if self.max_concurrency == 0 { - result.add_error(ValidationError::new("max_concurrency", "Max concurrency must be greater than 0")); + result.add_error(SDKValidationError::new("max_concurrency".to_string(), "Max concurrency must be greater than 0".to_string(), None)); } else if self.max_concurrency > 100 { - result.add_error(ValidationError::new("max_concurrency", "Max concurrency should not exceed 100")); + result.add_error(SDKValidationError::new("max_concurrency".to_string(), "Max concurrency should not exceed 100".to_string(), None)); } result @@ -686,7 +713,7 @@ pub struct ApiRootResponse { /// HTTP 验证错误详情 #[derive(Debug, Clone, Serialize, Deserialize)] -pub struct ValidationError { +pub struct HttpValidationError { /// 错误位置 pub loc: Vec, /// 错误消息 @@ -700,7 +727,7 @@ pub struct ValidationError { #[derive(Debug, Clone, Serialize, Deserialize)] pub struct HTTPValidationError { /// 错误详情列表 - pub detail: Vec, + pub detail: Vec, } /// ComfyUI API 错误类型 diff --git a/apps/desktop/src-tauri/src/infrastructure/comfyui_service.rs b/apps/desktop/src-tauri/src/infrastructure/comfyui_service.rs index b54924f..81f5269 100644 --- a/apps/desktop/src-tauri/src/infrastructure/comfyui_service.rs +++ b/apps/desktop/src-tauri/src/infrastructure/comfyui_service.rs @@ -34,7 +34,7 @@ impl ComfyuiInfrastructureService { } /// 获取配置信息 - pub fn get_config(&self) -> &ComfyuiConfig { + pub fn get_config(&self) -> &ComfyUIConfig { &self.config } @@ -346,7 +346,7 @@ impl ComfyuiInfrastructureService { } /// 更新服务配置 - pub fn update_config(&mut self, config: ComfyuiConfig) -> Result<()> { + pub fn update_config(&mut self, config: ComfyUIConfig) -> Result<()> { // 验证新配置 let temp_service = Self::new(config.clone())?; temp_service.validate_config()?; diff --git a/apps/desktop/src-tauri/src/lib.rs b/apps/desktop/src-tauri/src/lib.rs index 1f4dc01..c83db64 100644 --- a/apps/desktop/src-tauri/src/lib.rs +++ b/apps/desktop/src-tauri/src/lib.rs @@ -765,12 +765,15 @@ pub fn run() { } // 初始化 ComfyUI 服务 - 使用本地 ComfyUI 服务器 - let comfyui_config = data::models::comfyui::ComfyuiConfig { + let comfyui_config = data::models::comfyui::ComfyUIConfig { base_url: "https://bowongai-dev--waas-demo-fastapi-webapp.modal.run".to_string(), - timeout: Some(600), // 10分钟超时,适应 ComfyUI 工作流的长时间处理 - retry_attempts: Some(3), - enable_cache: Some(true), - max_concurrency: Some(8), + timeout_seconds: 600, // 10分钟超时,适应 ComfyUI 工作流的长时间处理 + retry_attempts: 3, + retry_delay_ms: 1000, + enable_websocket: true, + enable_cache: true, + max_concurrency: 8, + custom_headers: None, }; if let Err(e) = state.initialize_comfyui_service(comfyui_config) { diff --git a/apps/desktop/src-tauri/src/presentation/commands/comfyui_commands.rs b/apps/desktop/src-tauri/src/presentation/commands/comfyui_commands.rs index 1368e8e..fb555c2 100644 --- a/apps/desktop/src-tauri/src/presentation/commands/comfyui_commands.rs +++ b/apps/desktop/src-tauri/src/presentation/commands/comfyui_commands.rs @@ -397,7 +397,7 @@ pub async fn comfyui_node_get_data( #[tauri::command] pub async fn comfyui_get_config( state: State<'_, AppState>, -) -> Result { +) -> Result { info!("Command: comfyui_get_config"); let app_state = state.inner(); @@ -424,7 +424,7 @@ pub async fn comfyui_get_config( /// ``` #[tauri::command] pub async fn comfyui_update_config( - config: ComfyuiConfig, + config: ComfyUIConfig, state: State<'_, AppState>, ) -> Result { info!("Command: comfyui_update_config"); diff --git a/cargos/comfyui-sdk/types/mod.rs b/cargos/comfyui-sdk/types/mod.rs index e3b9cd0..33b1445 100644 --- a/cargos/comfyui-sdk/types/mod.rs +++ b/cargos/comfyui-sdk/types/mod.rs @@ -129,14 +129,14 @@ pub enum VariableSyntax { } /// Template validation result -#[derive(Debug, Clone)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ValidationResult { pub valid: bool, pub errors: Vec, } /// Validation error -#[derive(Debug, Clone)] +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] pub struct ValidationError { pub path: String, pub message: String,