diff --git a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/providers/kinovi/seedance_2p0/draft.rs b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/providers/kinovi/seedance_2p0/draft.rs index b8ee888724..ba80d7705c 100644 --- a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/providers/kinovi/seedance_2p0/draft.rs +++ b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/providers/kinovi/seedance_2p0/draft.rs @@ -1,5 +1,8 @@ +use crate::client::router_seedance2pro_client::RouterSeedance2ProClient; +use crate::errors::artcraft_router_error::ArtcraftRouterError; use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder; -use seedance2pro_client::requests::generate_video::generate_video::{KinoviAspectRatio, KinoviBatchCount, KinoviOutputResolution}; +use crate::generate::generate_video_v2::providers::kinovi::seedance_2p0::request::KinoviSeedance2p0RequestState; +use seedance2pro_client::requests::generate_video::generate_video::{KinoviAspectRatio, KinoviBatchCount, KinoviGenerateVideoRequest, KinoviModelType, KinoviOutputResolution}; #[derive(Debug, Clone)] pub struct KinoviSeedance2p0DraftState { @@ -30,3 +33,46 @@ pub struct KinoviSeedance2p0DraftState { // pub reference_audio: Option, // pub reference_character_tokens: Option, } + +impl KinoviSeedance2p0DraftState { + pub async fn to_request( + &mut self, + client: &RouterSeedance2ProClient, + ) -> Result { + let _session = &client.session; + + // Upload media files to seedance2pro CDN + let mut start_frame_url = None; + let mut end_frame_url = None; + let mut reference_image_urls = None; + let mut reference_video_urls = None; + let mut reference_audio_urls = None; + + if let Some(ref _remaining_request) = self.remaining_request.as_mut() { + // TODO: Upload these references if they are present. + //start_frame_url = upload_optional_url(session, remaining_request.start_frame_url.as_deref()).await?; + //end_frame_url = upload_optional_url(session, remaining_request.end_frame_url.as_deref()).await?; + //reference_image_urls = upload_optional_url_list(session, remaining_request.reference_image_urls.as_deref()).await?; + //reference_video_urls = upload_optional_url_list(session, remaining_request.reference_video_urls.as_deref()).await?; + //reference_audio_urls = upload_optional_url_list(session, remaining_request.reference_audio_urls.as_deref()).await?; + } + + let request = KinoviGenerateVideoRequest { + model_type: KinoviModelType::Seedance2Pro, + prompt: self.prompt.clone(), + aspect_ratio: self.aspect_ratio, + output_resolution: self.resolution, + duration_seconds: self.duration_seconds, + batch_count: self.batch_count, + start_frame_url, // TODO + end_frame_url, // TODO + reference_image_urls, // TODO + reference_video_urls, // TODO + reference_audio_urls, // TODO + character_ids: None, // TODO + use_face_blur_hack: None, + }; + + Ok(KinoviSeedance2p0RequestState { request }) + } +} diff --git a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/providers/kinovi/seedance_2p0/request.rs b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/providers/kinovi/seedance_2p0/request.rs index dcde671656..bc21761f7d 100644 --- a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/providers/kinovi/seedance_2p0/request.rs +++ b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/providers/kinovi/seedance_2p0/request.rs @@ -2,8 +2,7 @@ use crate::client::router_seedance2pro_client::RouterSeedance2ProClient; use crate::errors::artcraft_router_error::ArtcraftRouterError; use crate::errors::provider_error::ProviderError; use crate::generate::generate_video::generate_video_response::{GenerateVideoResponse, Seedance2proVideoResponsePayload}; -use crate::generate::generate_video_v2::providers::kinovi::seedance_2p0::draft::KinoviSeedance2p0DraftState; -use seedance2pro_client::requests::generate_video::generate_video::{generate_video, GenerateVideoArgs, KinoviGenerateVideoRequest, KinoviModelType}; +use seedance2pro_client::requests::generate_video::generate_video::{generate_video, GenerateVideoArgs, KinoviGenerateVideoRequest}; #[derive(Debug, Clone)] pub struct KinoviSeedance2p0RequestState { @@ -12,50 +11,6 @@ pub struct KinoviSeedance2p0RequestState { } impl KinoviSeedance2p0RequestState { - - pub async fn from_draft( - mut request: KinoviSeedance2p0DraftState, - client: &RouterSeedance2ProClient, - ) -> Result { - let session = &client.session; - - // Upload media files to seedance2pro CDN - let mut start_frame_url = None; - let mut end_frame_url = None; - let mut reference_image_urls = None; - let mut reference_video_urls = None; - let mut reference_audio_urls = None; - - if let Some(ref remaining_request) = request.remaining_request.as_mut() { - // TODO: Upload these references if they are present. - //start_frame_url = upload_optional_url(session, remaining_request.start_frame_url.as_deref()).await?; - //end_frame_url = upload_optional_url(session, remaining_request.end_frame_url.as_deref()).await?; - //reference_image_urls = upload_optional_url_list(session, remaining_request.reference_image_urls.as_deref()).await?; - //reference_video_urls = upload_optional_url_list(session, remaining_request.reference_video_urls.as_deref()).await?; - //reference_audio_urls = upload_optional_url_list(session, remaining_request.reference_audio_urls.as_deref()).await?; - } - - let request = KinoviGenerateVideoRequest { - model_type: KinoviModelType::Seedance2Pro, - prompt: request.prompt.clone(), - aspect_ratio: request.aspect_ratio, - output_resolution: request.resolution, - duration_seconds: request.duration_seconds, - batch_count: request.batch_count, - start_frame_url, // TODO - end_frame_url, // TODO - reference_image_urls, // TODO - reference_video_urls, // TODO - reference_audio_urls, // TODO - character_ids: None, // TODO - use_face_blur_hack: None, - }; - - Ok(Self { - request, - }) - } - pub async fn send(&self, client: &RouterSeedance2ProClient) -> Result { let session = &client.session; diff --git a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/video_generation_draft.rs b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/video_generation_draft.rs index 951e6d6992..44c8c212b9 100644 --- a/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/video_generation_draft.rs +++ b/crates/api_clients/artcraft/artcraft_router/src/generate/generate_video_v2/video_generation_draft.rs @@ -24,9 +24,9 @@ impl VideoGenerationDraftRequest { /// This may involve uploading media to the provider. pub async fn finalize(self, client: &RouterClient) -> Result { match self { - VideoGenerationDraftRequest::KinoviSeedance2p0(draft) => { + VideoGenerationDraftRequest::KinoviSeedance2p0(mut draft) => { let client_ref = client.get_seedance2pro_client_ref()?; - let result = KinoviSeedance2p0RequestState::from_draft(draft, client_ref).await?; + let result = draft.to_request(client_ref).await?; Ok(VideoGenerationRequest::KinoviSeedance2p0(result)) }, }