diff --git a/crates/schema/public/enums/src/api_safe/by_table/generic_inference_jobs/frontend_failure_category_for_api_clients.rs b/crates/schema/public/enums/src/api_safe/by_table/generic_inference_jobs/frontend_failure_category_for_api_clients.rs index ba1d883bc3..dca772691a 100644 --- a/crates/schema/public/enums/src/api_safe/by_table/generic_inference_jobs/frontend_failure_category_for_api_clients.rs +++ b/crates/schema/public/enums/src/api_safe/by_table/generic_inference_jobs/frontend_failure_category_for_api_clients.rs @@ -20,6 +20,9 @@ pub enum FrontendFailureCategoryForApiClients { RuleBansGeneratedVideo, RuleBansGeneratedAudio, RuleBansGeneratedContent, + FilesizeTooLarge, + ImageDimensionsTooSmall, + ImageDimensionsTooLarge, GenerationFailed, /// Catch-all for values the client doesn't yet know about. @@ -43,6 +46,9 @@ impl FrontendFailureCategoryForApiClients { FrontendFailureCategory::RuleBansGeneratedVideo => Self::RuleBansGeneratedVideo, FrontendFailureCategory::RuleBansGeneratedAudio => Self::RuleBansGeneratedAudio, FrontendFailureCategory::RuleBansGeneratedContent => Self::RuleBansGeneratedContent, + FrontendFailureCategory::FilesizeTooLarge => Self::FilesizeTooLarge, + FrontendFailureCategory::ImageDimensionsTooSmall => Self::ImageDimensionsTooSmall, + FrontendFailureCategory::ImageDimensionsTooLarge => Self::ImageDimensionsTooLarge, FrontendFailureCategory::GenerationFailed => Self::GenerationFailed, } } @@ -67,6 +73,9 @@ mod tests { ("\"rule_bans_generated_video\"", FrontendFailureCategoryForApiClients::RuleBansGeneratedVideo), ("\"rule_bans_generated_audio\"", FrontendFailureCategoryForApiClients::RuleBansGeneratedAudio), ("\"rule_bans_generated_content\"", FrontendFailureCategoryForApiClients::RuleBansGeneratedContent), + ("\"filesize_too_large\"", FrontendFailureCategoryForApiClients::FilesizeTooLarge), + ("\"image_dimensions_too_small\"", FrontendFailureCategoryForApiClients::ImageDimensionsTooSmall), + ("\"image_dimensions_too_large\"", FrontendFailureCategoryForApiClients::ImageDimensionsTooLarge), ("\"generation_failed\"", FrontendFailureCategoryForApiClients::GenerationFailed), ]; diff --git a/crates/schema/public/enums/src/api_safe/by_table/generic_inference_jobs/frontend_failure_category_for_old_clients.rs b/crates/schema/public/enums/src/api_safe/by_table/generic_inference_jobs/frontend_failure_category_for_old_clients.rs index 3481fe0e27..93fe941979 100644 --- a/crates/schema/public/enums/src/api_safe/by_table/generic_inference_jobs/frontend_failure_category_for_old_clients.rs +++ b/crates/schema/public/enums/src/api_safe/by_table/generic_inference_jobs/frontend_failure_category_for_old_clients.rs @@ -69,6 +69,9 @@ mod tests { assert_eq!(FrontendFailureCategoryForOldClients::try_from_db_enum(FrontendFailureCategory::RuleBansGeneratedAudio), None); assert_eq!(FrontendFailureCategoryForOldClients::try_from_db_enum(FrontendFailureCategory::RuleBansGeneratedContent), None); assert_eq!(FrontendFailureCategoryForOldClients::try_from_db_enum(FrontendFailureCategory::GenerationFailed), None); + assert_eq!(FrontendFailureCategoryForOldClients::try_from_db_enum(FrontendFailureCategory::FilesizeTooLarge), None); + assert_eq!(FrontendFailureCategoryForOldClients::try_from_db_enum(FrontendFailureCategory::ImageDimensionsTooSmall), None); + assert_eq!(FrontendFailureCategoryForOldClients::try_from_db_enum(FrontendFailureCategory::ImageDimensionsTooLarge), None); } #[test] diff --git a/crates/schema/public/enums/src/by_table/generic_inference_jobs/frontend_failure_category.rs b/crates/schema/public/enums/src/by_table/generic_inference_jobs/frontend_failure_category.rs index 350971dc96..d5dadebed0 100644 --- a/crates/schema/public/enums/src/by_table/generic_inference_jobs/frontend_failure_category.rs +++ b/crates/schema/public/enums/src/by_table/generic_inference_jobs/frontend_failure_category.rs @@ -69,6 +69,7 @@ pub enum FrontendFailureCategory { /// Model content violation /// Model content rules prohibit user content. (I think this check happens early.) /// e.g. "Content violates platform rules. Please modify and try again." (seedance2pro) + /// We also map fal WebhookErrorType::ContentPolicyViolation to this. #[serde(rename = "rule_bans_user_content")] RuleBansUserContent, @@ -90,6 +91,18 @@ pub enum FrontendFailureCategory { #[serde(rename = "rule_bans_generated_content")] RuleBansGeneratedContent, + /// The uploaded file exceeds the maximum allowed size for this model. + #[serde(rename = "filesize_too_large")] + FilesizeTooLarge, + + /// The uploaded image dimensions are below the minimum required by the model. + #[serde(rename = "image_dimensions_too_small")] + ImageDimensionsTooSmall, + + /// The uploaded image dimensions exceed the maximum allowed by the model. + #[serde(rename = "image_dimensions_too_large")] + ImageDimensionsTooLarge, + /// Generation failed (no reason) /// Unspecified failure reason /// Various example failures: @@ -119,6 +132,9 @@ impl FrontendFailureCategory { Self::RuleBansGeneratedVideo => "rule_bans_generated_video", Self::RuleBansGeneratedAudio => "rule_bans_generated_audio", Self::RuleBansGeneratedContent => "rule_bans_generated_content", + Self::FilesizeTooLarge => "filesize_too_large", + Self::ImageDimensionsTooSmall => "image_dimensions_too_small", + Self::ImageDimensionsTooLarge => "image_dimensions_too_large", Self::GenerationFailed => "generation_failed", } } @@ -137,6 +153,9 @@ impl FrontendFailureCategory { "rule_bans_generated_video" => Ok(Self::RuleBansGeneratedVideo), "rule_bans_generated_audio" => Ok(Self::RuleBansGeneratedAudio), "rule_bans_generated_content" => Ok(Self::RuleBansGeneratedContent), + "filesize_too_large" => Ok(Self::FilesizeTooLarge), + "image_dimensions_too_small" => Ok(Self::ImageDimensionsTooSmall), + "image_dimensions_too_large" => Ok(Self::ImageDimensionsTooLarge), "generation_failed" => Ok(Self::GenerationFailed), _ => Err(format!("invalid value: {:?}", value)), } @@ -158,6 +177,9 @@ impl FrontendFailureCategory { Self::RuleBansGeneratedVideo, Self::RuleBansGeneratedAudio, Self::RuleBansGeneratedContent, + Self::FilesizeTooLarge, + Self::ImageDimensionsTooSmall, + Self::ImageDimensionsTooLarge, Self::GenerationFailed, ]) } @@ -185,6 +207,9 @@ mod tests { assert_serialization(FrontendFailureCategory::RuleBansGeneratedVideo, "rule_bans_generated_video"); assert_serialization(FrontendFailureCategory::RuleBansGeneratedAudio, "rule_bans_generated_audio"); assert_serialization(FrontendFailureCategory::RuleBansGeneratedContent, "rule_bans_generated_content"); + assert_serialization(FrontendFailureCategory::FilesizeTooLarge, "filesize_too_large"); + assert_serialization(FrontendFailureCategory::ImageDimensionsTooSmall, "image_dimensions_too_small"); + assert_serialization(FrontendFailureCategory::ImageDimensionsTooLarge, "image_dimensions_too_large"); assert_serialization(FrontendFailureCategory::GenerationFailed, "generation_failed"); } @@ -202,6 +227,9 @@ mod tests { assert_eq!(FrontendFailureCategory::RuleBansGeneratedVideo.to_str(), "rule_bans_generated_video"); assert_eq!(FrontendFailureCategory::RuleBansGeneratedAudio.to_str(), "rule_bans_generated_audio"); assert_eq!(FrontendFailureCategory::RuleBansGeneratedContent.to_str(), "rule_bans_generated_content"); + assert_eq!(FrontendFailureCategory::FilesizeTooLarge.to_str(), "filesize_too_large"); + assert_eq!(FrontendFailureCategory::ImageDimensionsTooSmall.to_str(), "image_dimensions_too_small"); + assert_eq!(FrontendFailureCategory::ImageDimensionsTooLarge.to_str(), "image_dimensions_too_large"); assert_eq!(FrontendFailureCategory::GenerationFailed.to_str(), "generation_failed"); } @@ -219,6 +247,9 @@ mod tests { assert_eq!(FrontendFailureCategory::from_str("rule_bans_generated_video").unwrap(), FrontendFailureCategory::RuleBansGeneratedVideo); assert_eq!(FrontendFailureCategory::from_str("rule_bans_generated_audio").unwrap(), FrontendFailureCategory::RuleBansGeneratedAudio); assert_eq!(FrontendFailureCategory::from_str("rule_bans_generated_content").unwrap(), FrontendFailureCategory::RuleBansGeneratedContent); + assert_eq!(FrontendFailureCategory::from_str("filesize_too_large").unwrap(), FrontendFailureCategory::FilesizeTooLarge); + assert_eq!(FrontendFailureCategory::from_str("image_dimensions_too_small").unwrap(), FrontendFailureCategory::ImageDimensionsTooSmall); + assert_eq!(FrontendFailureCategory::from_str("image_dimensions_too_large").unwrap(), FrontendFailureCategory::ImageDimensionsTooLarge); assert_eq!(FrontendFailureCategory::from_str("generation_failed").unwrap(), FrontendFailureCategory::GenerationFailed); assert_eq!(FrontendFailureCategory::from_str("invalid_value").is_err(), true); } @@ -226,7 +257,7 @@ mod tests { #[test] fn all_variants() { let mut variants = FrontendFailureCategory::all_variants(); - assert_eq!(variants.len(), 13); + assert_eq!(variants.len(), 16); assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::FaceNotDetected)); assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::KeepAliveElapsed)); assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::NotYetImplemented)); @@ -239,6 +270,9 @@ mod tests { assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::RuleBansGeneratedVideo)); assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::RuleBansGeneratedAudio)); assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::RuleBansGeneratedContent)); + assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::FilesizeTooLarge)); + assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::ImageDimensionsTooSmall)); + assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::ImageDimensionsTooLarge)); assert_eq!(variants.pop_first(), Some(FrontendFailureCategory::GenerationFailed)); assert_eq!(variants.pop_first(), None); } diff --git a/crates/schema/public/enums/src/tauri/tasks/task_failure_type.rs b/crates/schema/public/enums/src/tauri/tasks/task_failure_type.rs index 4f65e443aa..6b6f73f1f0 100644 --- a/crates/schema/public/enums/src/tauri/tasks/task_failure_type.rs +++ b/crates/schema/public/enums/src/tauri/tasks/task_failure_type.rs @@ -74,6 +74,9 @@ impl TaskFailureType { FrontendFailureCategoryForApiClients::KeepAliveElapsed => Self::Unknown, FrontendFailureCategoryForApiClients::NotYetImplemented => Self::Unknown, FrontendFailureCategoryForApiClients::RetryableWorkerError => Self::Unknown, + FrontendFailureCategoryForApiClients::FilesizeTooLarge => Self::Unknown, + FrontendFailureCategoryForApiClients::ImageDimensionsTooSmall => Self::Unknown, + FrontendFailureCategoryForApiClients::ImageDimensionsTooLarge => Self::Unknown, // Unknown (future-proof) variant FrontendFailureCategoryForApiClients::Unknown(ref value) => {