default impl

This commit is contained in:
Brandon Thomas
2026-04-21 16:40:23 -04:00
parent ebbf14cefd
commit 030e84bc02
3 changed files with 38 additions and 8 deletions
@@ -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")
}
}
}
}
@@ -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<String>,
}
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 {
@@ -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<MediaFileToken, String>, 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<CharacterToken, String>, ArtcraftRouterError> {
self.character_token_to_kinovi_id_map
.ok_or_else(|| ArtcraftRouterError::Client(ClientError::CharacterTokenToKinoviCharacterIdNotProvided))
.ok_or_else(|| ArtcraftRouterError::Client(ClientError::CharacterTokenToKinoviCharacterIdNotProvided))
}
}