diff --git a/crates/api_clients/artcraft/artcraft_router/src/errors/client_error.rs b/crates/api_clients/artcraft/artcraft_router/src/errors/client_error.rs index 52a3592036..d61872c840 100644 --- a/crates/api_clients/artcraft/artcraft_router/src/errors/client_error.rs +++ b/crates/api_clients/artcraft/artcraft_router/src/errors/client_error.rs @@ -57,6 +57,9 @@ pub enum ClientError { /// A character token was not found in the provided character-token-to-id map CharacterTokenNotFoundInMap { token: CharacterToken }, + + /// A RouterClient was required but not provided on the draft context. + RouterClientNotProvided, } impl Error for ClientError {} @@ -97,6 +100,9 @@ impl Display for ClientError { Self::CharacterTokenNotFoundInMap { token } => { write!(f, "Character token '{}' was not found in the provided character-token-to-id map", token.as_str()) } + Self::RouterClientNotProvided => { + write!(f, "A RouterClient is required but was not provided on the draft context") + } } } } diff --git a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video/generate_video_request_builder.rs b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video/generate_video_request_builder.rs index 307a20f8ad..caf645d9aa 100644 --- a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video/generate_video_request_builder.rs +++ b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video/generate_video_request_builder.rs @@ -48,8 +48,6 @@ use crate::generate::generate_video::plan::seedance2pro::plan_generate_video_see use crate::generate::generate_video::plan::seedance2pro::plan_generate_video_seedance2pro_seedance2p0_fast::plan_generate_video_seedance2pro_seedance2p0_fast; use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan; use crate::generate::generate_video_v2::providers::kinovi::seedance_2p0::build::build_kinovi_seedance_2p0; -use crate::generate::generate_video_v2::providers::kinovi::seedance_2p0::draft::KinoviSeedance2p0DraftState; -use crate::generate::generate_video_v2::video_generation_draft::VideoGenerationDraftRequest; use crate::generate::generate_video_v2::video_generation_draft_or_request::VideoGenerationDraftOrRequest; /// Plan to either (1) generate a video or (2) determine how much it costs to generate that video. @@ -113,6 +111,30 @@ pub struct GenerateVideoRequestBuilder { pub idempotency_token: Option, } +impl Default for GenerateVideoRequestBuilder { + fn default() -> Self { + Self { + model: CommonVideoModel::Seedance2p0, + provider: Provider::Artcraft, + request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::PayMoreUpgrade, + prompt: None, + negative_prompt: None, + start_frame: None, + end_frame: None, + reference_images: None, + reference_videos: None, + reference_audio: None, + reference_character_tokens: None, + resolution: None, + aspect_ratio: None, + duration_seconds: None, + video_batch_count: None, + generate_audio: None, + idempotency_token: None, + } + } +} + impl GenerateVideoRequestBuilder { pub fn use_new_builder(&self) -> bool { diff --git a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/video_generation_draft_context.rs b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/video_generation_draft_context.rs index 282704ffc6..efb3409037 100644 --- a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/video_generation_draft_context.rs +++ b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/video_generation_draft_context.rs @@ -6,9 +6,10 @@ use std::collections::HashMap; use tokens::tokens::characters::CharacterToken; use tokens::tokens::media_files::MediaFileToken; -#[derive(Clone)] +#[derive(Clone, Default)] pub struct VideoGenerationDraftContext<'a> { - pub client: &'a RouterClient, + /// Optional: the router client, needed for providers that require authentication. + pub client: Option<&'a RouterClient>, /// Optional context: a map of Media File Tokens to their ArtCraft URLs /// Only needed if we have to fetch these assets and upload them to another provider. @@ -21,17 +22,18 @@ pub struct VideoGenerationDraftContext<'a> { impl <'a> VideoGenerationDraftContext<'a> { pub fn get_seedance2pro_client_ref(&self) -> Result<&RouterSeedance2ProClient, ArtcraftRouterError> { - self.client.get_seedance2pro_client_ref() - .map_err(|err| ArtcraftRouterError::Client(err)) + let client = self.client.ok_or(ArtcraftRouterError::Client(ClientError::RouterClientNotProvided))?; + client.get_seedance2pro_client_ref() + .map_err(|err| ArtcraftRouterError::Client(err)) } pub fn get_media_file_to_artcraft_url_map(&self) -> Result<&HashMap, ArtcraftRouterError> { self.media_file_to_artcraft_url_map - .ok_or_else(|| ArtcraftRouterError::Client(ClientError::MediaFileToUrlMapNotProvided)) + .ok_or_else(|| ArtcraftRouterError::Client(ClientError::MediaFileToUrlMapNotProvided)) } pub fn get_character_token_to_kinovi_map(&self) -> Result<&HashMap, ArtcraftRouterError> { self.character_token_to_kinovi_id_map - .ok_or_else(|| ArtcraftRouterError::Client(ClientError::CharacterTokenToKinoviCharacterIdNotProvided)) + .ok_or_else(|| ArtcraftRouterError::Client(ClientError::CharacterTokenToKinoviCharacterIdNotProvided)) } }