diff --git a/crates/desktop/artcraft/src/core/commands/enqueue/task_enqueue_success.rs b/crates/desktop/artcraft/src/core/commands/enqueue/task_enqueue_success.rs index 7fd8d54686..6408eac758 100644 --- a/crates/desktop/artcraft/src/core/commands/enqueue/task_enqueue_success.rs +++ b/crates/desktop/artcraft/src/core/commands/enqueue/task_enqueue_success.rs @@ -35,6 +35,7 @@ impl TaskEnqueueSuccess{ } pub async fn insert_into_task_database(&self, task_database: &TaskDatabase) -> Result { + // TODO: Move this mapping elsewhere, or remove the other models. let model_type = match self.model { None => None, Some(GenerationModel::Flux1Dev) => Some(TaskModelType::Flux1Dev), @@ -48,10 +49,10 @@ impl TaskEnqueueSuccess{ Some(GenerationModel::Seedance10Lite) => Some(TaskModelType::Seedance10Lite), Some(GenerationModel::Veo2) => Some(TaskModelType::Veo2), - Some(GenerationModel::Kling1_6) => Some(TaskModelType::Kling16Pro), // TODO: not accurate! + Some(GenerationModel::Kling1_6) => Some(TaskModelType::Kling16Pro), // NB: `VideoModel::Kling16Pro`. Some(GenerationModel::Hunyuan3d2_0) => None, // TODO Some(GenerationModel::Hunyuan3d2_1) => None, // TODO - Some(GenerationModel::Kling2_0) => None, // TODO + Some(GenerationModel::Kling2_0) => None, // TODO: unused elsewhere? Some(GenerationModel::Sora) => None, // TODO }; diff --git a/crates/desktop/artcraft/src/core/events/generation_events/common.rs b/crates/desktop/artcraft/src/core/events/generation_events/common.rs index c3ef9de654..6895e00a1b 100644 --- a/crates/desktop/artcraft/src/core/events/generation_events/common.rs +++ b/crates/desktop/artcraft/src/core/events/generation_events/common.rs @@ -25,8 +25,11 @@ pub enum GenerationModel { Hunyuan3d2_0, #[serde(rename = "hunyuan_3d_2_1")] Hunyuan3d2_1, + + // TODO: Should be Kling16Pro #[serde(rename = "kling_1.6")] Kling1_6, + #[serde(rename = "kling_2.0")] Kling2_0, #[serde(rename = "kling_2.1_master")] diff --git a/crates/schema/public/enums/src/tauri/tasks/task_model_type.rs b/crates/schema/public/enums/src/tauri/tasks/task_model_type.rs index dae0be269e..9486cce737 100644 --- a/crates/schema/public/enums/src/tauri/tasks/task_model_type.rs +++ b/crates/schema/public/enums/src/tauri/tasks/task_model_type.rs @@ -35,6 +35,12 @@ pub enum TaskModelType { Seedance10Lite, #[serde(rename = "veo_2")] Veo2, + + // 3D Object generation models + #[serde(rename = "hunyuan_3d_2.0")] + Hunyuan3d2_0, + #[serde(rename = "hunyuan_3d_2.1")] + Hunyuan3d2_1, } impl_enum_display_and_debug_using_to_str!(TaskModelType); @@ -59,6 +65,9 @@ impl TaskModelType { Self::Kling21Master => "kling_2.1_master", Self::Seedance10Lite => "seedance_1.0_lite", Self::Veo2 => "veo_2", + // 3D Object generation models + Self::Hunyuan3d2_0 => "hunyuan_3d_2.0", + Self::Hunyuan3d2_1 => "hunyuan_3d_2.1", } } @@ -77,6 +86,9 @@ impl TaskModelType { "kling_2.1_master" => Ok(Self::Kling21Master), "seedance_1.0_lite" => Ok(Self::Seedance10Lite), "veo_2" => Ok(Self::Veo2), + // 3D Object generation models + "hunyuan_3d_2.0" => Ok(Self::Hunyuan3d2_0), + "hunyuan_3d_2.1" => Ok(Self::Hunyuan3d2_1), _ => Err(format!("invalid task_state: {:?}", job_status)), } } @@ -98,6 +110,9 @@ impl TaskModelType { Self::Kling21Master, Self::Seedance10Lite, Self::Veo2, + // 3D Object generation models + Self::Hunyuan3d2_0, + Self::Hunyuan3d2_1, ]) } } @@ -125,6 +140,9 @@ mod tests { assert_serialization(TaskModelType::Kling21Master, "kling_2.1_master"); assert_serialization(TaskModelType::Seedance10Lite, "seedance_1.0_lite"); assert_serialization(TaskModelType::Veo2, "veo_2"); + // 3D Object generation models + assert_serialization(TaskModelType::Hunyuan3d2_0, "hunyuan_3d_2.0"); + assert_serialization(TaskModelType::Hunyuan3d2_1, "hunyuan_3d_2.1"); } #[test] @@ -142,6 +160,9 @@ mod tests { assert_eq!(TaskModelType::Kling21Master.to_str(), "kling_2.1_master"); assert_eq!(TaskModelType::Seedance10Lite.to_str(), "seedance_1.0_lite"); assert_eq!(TaskModelType::Veo2.to_str(), "veo_2"); + // 3D Object generation models + assert_eq!(TaskModelType::Hunyuan3d2_0.to_str(), "hunyuan_3d_2.0"); + assert_eq!(TaskModelType::Hunyuan3d2_1.to_str(), "hunyuan_3d_2.1"); } #[test] @@ -159,12 +180,15 @@ mod tests { assert_eq!(TaskModelType::from_str("kling_2.1_master").unwrap(), TaskModelType::Kling21Master); assert_eq!(TaskModelType::from_str("seedance_1.0_lite").unwrap(), TaskModelType::Seedance10Lite); assert_eq!(TaskModelType::from_str("veo_2").unwrap(), TaskModelType::Veo2); + // 3D Object generation models + assert_eq!(TaskModelType::from_str("hunyuan_3d_2.0").unwrap(), TaskModelType::Hunyuan3d2_0); + assert_eq!(TaskModelType::from_str("hunyuan_3d_2.1").unwrap(), TaskModelType::Hunyuan3d2_1); } #[test] fn all_variants() { let mut variants = TaskModelType::all_variants(); - assert_eq!(variants.len(), 11); + assert_eq!(variants.len(), 13); // Image models assert_eq!(variants.pop_first(), Some(TaskModelType::Flux1Dev)); assert_eq!(variants.pop_first(), Some(TaskModelType::Flux1Schnell)); @@ -178,6 +202,9 @@ mod tests { assert_eq!(variants.pop_first(), Some(TaskModelType::Kling21Master)); assert_eq!(variants.pop_first(), Some(TaskModelType::Seedance10Lite)); assert_eq!(variants.pop_first(), Some(TaskModelType::Veo2)); + // 3D Object generation models + assert_eq!(variants.pop_first(), Some(TaskModelType::Hunyuan3d2_0)); + assert_eq!(variants.pop_first(), Some(TaskModelType::Hunyuan3d2_1)); assert_eq!(variants.pop_first(), None); } } @@ -200,5 +227,15 @@ mod tests { assert_eq!(variant, TaskModelType::from_str(&format!("{:?}", variant)).unwrap()); } } + + #[test] + fn serialized_length_ok_for_database() { + const MAX_LENGTH : usize = 24; + for variant in TaskModelType::all_variants() { + let serialized = variant.to_str(); + assert!(serialized.len() > 0, "variant {:?} is too short", variant); + assert!(serialized.len() <= MAX_LENGTH, "variant {:?} is too long", variant); + } + } } }