rename struct to better enable a state machine flow

This commit is contained in:
Brandon Thomas committed 2026-04-20 18:08:42 -04:00
1 parent 0d235bfe27
commit b296924550
56 files changed
+185 -185

No files matched your search

@@ -58,10 +58,10 @@ mod tests {
use crate::api::common_video_model::CommonVideoModel;
use crate::api::provider::Provider;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
fn estimate_usd_cents(duration_seconds: u16) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Kling3p0Pro,
provider: Provider::Artcraft,
prompt: None,
@@ -58,10 +58,10 @@ mod tests {
use crate::api::common_video_model::CommonVideoModel;
use crate::api::provider::Provider;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
fn estimate_usd_cents(duration_seconds: u16) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Kling3p0Standard,
provider: Provider::Artcraft,
prompt: None,
@@ -61,10 +61,10 @@ mod tests {
use crate::api::common_video_model::CommonVideoModel;
use crate::api::provider::Provider;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
fn estimate_usd_cents(duration_seconds: u16) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance1p5Pro,
provider: Provider::Artcraft,
prompt: None,
@@ -66,14 +66,14 @@ mod tests {
use crate::api::common_video_model::CommonVideoModel;
use crate::api::provider::Provider;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
fn estimate_usd_cents(
duration_seconds: u16,
video_batch_count: u16,
resolution: Option<CommonResolution>,
) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0,
provider: Provider::Artcraft,
prompt: None,
@@ -66,14 +66,14 @@ mod tests {
use crate::api::common_video_model::CommonVideoModel;
use crate::api::provider::Provider;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
fn estimate_usd_cents(
duration_seconds: u16,
video_batch_count: u16,
resolution: Option<CommonResolution>,
) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0Fast,
provider: Provider::Artcraft,
prompt: None,
@@ -104,7 +104,7 @@ mod tests {
video_batch_count: u16,
resolution: Option<CommonResolution>,
) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0Fast,
provider: Provider::Artcraft,
prompt: None,
@@ -135,7 +135,7 @@ mod tests {
video_batch_count: u16,
resolution: Option<CommonResolution>,
) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0,
provider: Provider::Artcraft,
prompt: None,
@@ -213,7 +213,7 @@ mod tests {
#[test]
fn fast_1080p_error_out_rejects() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0Fast,
provider: Provider::Artcraft,
prompt: None,
@@ -23,14 +23,14 @@ mod tests {
use crate::api::common_video_model::CommonVideoModel;
use crate::api::provider::Provider;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
fn estimate_usd_cents(
duration_seconds: u16,
video_batch_count: u16,
resolution: Option<CommonResolution>,
) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0,
provider: Provider::Seedance2Pro,
prompt: None,
@@ -23,14 +23,14 @@ mod tests {
use crate::api::common_video_model::CommonVideoModel;
use crate::api::provider::Provider;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
fn estimate_usd_cents(
duration_seconds: u16,
video_batch_count: u16,
resolution: Option<CommonResolution>,
) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0Fast,
provider: Provider::Seedance2Pro,
prompt: None,
@@ -61,7 +61,7 @@ mod tests {
video_batch_count: u16,
resolution: Option<CommonResolution>,
) -> u64 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0,
provider: Provider::Seedance2Pro,
prompt: None,
@@ -61,7 +61,7 @@ mod tests {
#[ignore] // manually run — fires a real API request and incurs cost
async fn test_text_to_video_seedance_2p0() {
let client = get_artcraft_client();
let request = crate::generate::generate_video::generate_video_request::GenerateVideoRequest {
let request = crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideSixteenByNine),
video_batch_count: Some(1),
prompt: Some("a cat walking through a cyberpunk city at night".to_string()),
@@ -84,7 +84,7 @@ mod tests {
#[ignore] // manually run — fires a real API request and incurs cost
async fn test_text_to_video_seedance_2p0_batch_two() {
let client = get_artcraft_client();
let request = crate::generate::generate_video::generate_video_request::GenerateVideoRequest {
let request = crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::Square),
video_batch_count: Some(2),
prompt: Some("a dog surfing a wave, cinematic".to_string()),
@@ -84,13 +84,13 @@ mod tests {
use crate::api::common_resolution::CommonResolution;
use crate::api::common_video_model::CommonVideoModel;
use crate::api::image_ref::ImageRef;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use crate::test_helpers::{base_video_request, get_artcraft_client};
use tokens::tokens::media_files::MediaFileToken;
fn fast_request() -> GenerateVideoRequest {
GenerateVideoRequest {
fn fast_request() -> GenerateVideoRequestBuilder {
GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0Fast,
prompt: Some("a corgi walking through a cyberpunk city at night".to_string()),
..base_video_request()
@@ -101,7 +101,7 @@ mod tests {
#[ignore] // manually run — fires a real API request and incurs cost
async fn test_text_to_video_fast_720p_wide() {
let client = get_artcraft_client();
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideSixteenByNine),
resolution: Some(CommonResolution::SevenTwentyP),
video_batch_count: Some(1),
@@ -121,7 +121,7 @@ mod tests {
#[ignore] // manually run — fires a real API request and incurs cost
async fn test_text_to_video_fast_480p_square() {
let client = get_artcraft_client();
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::Square),
resolution: Some(CommonResolution::FourEightyP),
video_batch_count: Some(1),
@@ -141,7 +141,7 @@ mod tests {
#[ignore] // manually run — fires a real API request and incurs cost
async fn test_image_to_video_fast_with_start_keyframe() {
let client = get_artcraft_client();
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
start_frame: Some(ImageRef::MediaFileToken(
MediaFileToken::new("mf_test_keyframe_placeholder".to_string()),
)),
@@ -164,7 +164,7 @@ mod tests {
#[ignore] // manually run — fires a real API request and incurs cost
async fn test_text_to_video_fast_batch_2() {
let client = get_artcraft_client();
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::TallNineBySixteen),
resolution: Some(CommonResolution::SevenTwentyP),
video_batch_count: Some(2),
@@ -187,7 +187,7 @@ mod tests {
#[ignore] // manually run — fires a real API request and incurs cost
async fn test_text_to_video_fast_with_reference_images() {
let client = get_artcraft_client();
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
reference_images: Some(crate::api::image_list_ref::ImageListRef::MediaFileTokens(vec![
MediaFileToken::new("mf_test_ref_image_placeholder".to_string()),
])),
@@ -208,7 +208,7 @@ mod tests {
#[test]
fn plan_includes_resolution() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
resolution: Some(CommonResolution::FourEightyP),
..fast_request()
};
@@ -222,7 +222,7 @@ mod tests {
use crate::api::character_list_ref::CharacterListRef;
use tokens::tokens::characters::CharacterToken;
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
reference_character_tokens: Some(CharacterListRef::CharacterTokens(vec![
CharacterToken::new("char_test123".to_string()),
])),
@@ -52,7 +52,7 @@ use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
/// This works across multiple providers by shaping a generic "GenerateVideoRequest" into a provider-specific plan.
/// That plan can then be used to return a cost estimate for that given provider or return a struct that can be used to send a real generation request.
#[derive(Clone, Debug)]
pub struct GenerateVideoRequest {
pub struct GenerateVideoRequestBuilder {
/// Which model to use.
pub model: CommonVideoModel,
@@ -109,7 +109,7 @@ pub struct GenerateVideoRequest {
pub idempotency_token: Option<String>,
}
impl GenerateVideoRequest {
impl GenerateVideoRequestBuilder {
/// Read the video generation request, construct a plan, then yield a means to execute it.
pub fn build(&self) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
match self.provider {
@@ -1,6 +1,6 @@
pub mod cost;
pub mod execute;
pub mod generate_video_request;
pub mod generate_video_request_builder;
pub mod generate_video_response;
pub mod plan;
pub mod video_generation_cost_estimate;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::kling_3p0_pro_multi_function_video_gen::{
Kling3p0ProMultiFunctionVideoGenAspectRatio,
@@ -24,7 +24,7 @@ pub struct PlanArtcraftKling3p0Pro {
}
pub fn plan_generate_video_artcraft_kling3p0_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -166,11 +166,11 @@ mod tests {
use crate::api::provider::Provider;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
fn base_request() -> GenerateVideoRequest {
GenerateVideoRequest {
fn base_request() -> GenerateVideoRequestBuilder {
GenerateVideoRequestBuilder {
model: CommonVideoModel::Kling3p0Pro,
provider: Provider::Artcraft,
prompt: Some("a cat in space".to_string()),
@@ -193,7 +193,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_16x9() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideSixteenByNine),
..base_request()
};
@@ -203,7 +203,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_9x16() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::TallNineBySixteen),
..base_request()
};
@@ -213,7 +213,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_square() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::Square),
..base_request()
};
@@ -223,7 +223,7 @@ mod tests {
#[test]
fn aspect_ratio_error_out_on_unsupported() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideThreeByTwo),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::ErrorOut,
..base_request()
@@ -238,7 +238,7 @@ mod tests {
#[test]
fn duration_valid_range() {
for d in 3..=15 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
duration_seconds: Some(d),
..base_request()
};
@@ -249,7 +249,7 @@ mod tests {
#[test]
fn duration_out_of_range_error_out() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
duration_seconds: Some(16),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::ErrorOut,
..base_request()
@@ -263,7 +263,7 @@ mod tests {
#[test]
fn url_image_ref_returns_error() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
start_frame: Some(ImageRef::Url("https://example.com/image.jpg".to_string())),
..base_request()
};
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::kling_3p0_standard_multi_function_video_gen::{
Kling3p0StandardMultiFunctionVideoGenAspectRatio,
@@ -24,7 +24,7 @@ pub struct PlanArtcraftKling3p0Standard {
}
pub fn plan_generate_video_artcraft_kling3p0_standard(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -166,11 +166,11 @@ mod tests {
use crate::api::provider::Provider;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
fn base_request() -> GenerateVideoRequest {
GenerateVideoRequest {
fn base_request() -> GenerateVideoRequestBuilder {
GenerateVideoRequestBuilder {
model: CommonVideoModel::Kling3p0Standard,
provider: Provider::Artcraft,
prompt: Some("a cat in space".to_string()),
@@ -193,7 +193,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_16x9() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideSixteenByNine),
..base_request()
};
@@ -203,7 +203,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_9x16() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::TallNineBySixteen),
..base_request()
};
@@ -213,7 +213,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_square() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::Square),
..base_request()
};
@@ -223,7 +223,7 @@ mod tests {
#[test]
fn aspect_ratio_error_out_on_unsupported() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideThreeByTwo),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::ErrorOut,
..base_request()
@@ -238,7 +238,7 @@ mod tests {
#[test]
fn duration_valid_range() {
for d in 3..=15 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
duration_seconds: Some(d),
..base_request()
};
@@ -249,7 +249,7 @@ mod tests {
#[test]
fn duration_out_of_range_error_out() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
duration_seconds: Some(16),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::ErrorOut,
..base_request()
@@ -263,7 +263,7 @@ mod tests {
#[test]
fn url_image_ref_returns_error() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
start_frame: Some(ImageRef::Url("https://example.com/image.jpg".to_string())),
..base_request()
};
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::generate_kling_1_6_pro_image_to_video::{
GenerateKling16ProAspectRatio, GenerateKling16ProDuration,
@@ -21,7 +21,7 @@ pub struct PlanArtcraftKling16Pro {
}
pub fn plan_generate_video_artcraft_kling_1_6_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::generate_kling_2_1_master_image_to_video::{
GenerateKling21MasterAspectRatio, GenerateKling21MasterDuration,
@@ -20,7 +20,7 @@ pub struct PlanArtcraftKling21Master {
}
pub fn plan_generate_video_artcraft_kling_2_1_master(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::generate_kling_2_1_pro_image_to_video::{
GenerateKling21ProAspectRatio, GenerateKling21ProDuration,
@@ -21,7 +21,7 @@ pub struct PlanArtcraftKling21Pro {
}
pub fn plan_generate_video_artcraft_kling_2_1_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::kling_2_5_turbo_multi_function_video_gen::{
Kling2p5TurboProMultiFunctionVideoGenAspectRatio, Kling2p5TurboProMultiFunctionVideoGenDuration,
@@ -22,7 +22,7 @@ pub struct PlanArtcraftKling2p5TurboPro {
}
pub fn plan_generate_video_artcraft_kling_2_5_turbo_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::kling_2_6_multi_function_video_gen::{
Kling2p6ProMultiFunctionVideoGenAspectRatio, Kling2p6ProMultiFunctionVideoGenDuration,
@@ -22,7 +22,7 @@ pub struct PlanArtcraftKling2p6Pro {
}
pub fn plan_generate_video_artcraft_kling_2_6_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::seedance_1p5_pro_multi_function_video_gen::{
Seedance1p5ProMultiFunctionVideoGenAspectRatio,
@@ -25,7 +25,7 @@ pub struct PlanArtcraftSeedance1p5Pro {
}
pub fn plan_generate_video_artcraft_seedance1p5_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -184,11 +184,11 @@ mod tests {
use crate::api::provider::Provider;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
fn base_seedance_1p5_pro_request() -> GenerateVideoRequest {
GenerateVideoRequest {
fn base_seedance_1p5_pro_request() -> GenerateVideoRequestBuilder {
GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance1p5Pro,
provider: Provider::Artcraft,
prompt: Some("a cat in space".to_string()),
@@ -211,7 +211,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_16x9() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideSixteenByNine),
..base_seedance_1p5_pro_request()
};
@@ -221,7 +221,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_9x16() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::TallNineBySixteen),
..base_seedance_1p5_pro_request()
};
@@ -231,7 +231,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_21x9() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideTwentyOneByNine),
..base_seedance_1p5_pro_request()
};
@@ -241,7 +241,7 @@ mod tests {
#[test]
fn aspect_ratio_error_out_on_unsupported() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideThreeByTwo),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::ErrorOut,
..base_seedance_1p5_pro_request()
@@ -256,7 +256,7 @@ mod tests {
#[test]
fn duration_valid_range() {
for d in 4..=12 {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
duration_seconds: Some(d),
..base_seedance_1p5_pro_request()
};
@@ -267,7 +267,7 @@ mod tests {
#[test]
fn duration_out_of_range_error_out() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
duration_seconds: Some(13),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::ErrorOut,
..base_seedance_1p5_pro_request()
@@ -281,7 +281,7 @@ mod tests {
#[test]
fn url_image_ref_accepted_for_cost_path() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
start_frame: Some(ImageRef::Url("https://example.com/image.jpg".to_string())),
..base_seedance_1p5_pro_request()
};
@@ -7,7 +7,7 @@ use crate::api::video_list_ref::VideoListRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::seedance_2p0_multi_function_video_gen::{
Seedance2p0AspectRatio, Seedance2p0BatchCount,
@@ -32,7 +32,7 @@ pub struct PlanArtcraftSeedance2p0 {
}
pub fn plan_generate_video_artcraft_seedance2p0(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -286,7 +286,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_16x9() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideSixteenByNine),
..base_video_request()
};
@@ -296,7 +296,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_9x16() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::TallNineBySixteen),
..base_video_request()
};
@@ -306,7 +306,7 @@ mod tests {
#[test]
fn aspect_ratio_direct_square() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::Square),
..base_video_request()
};
@@ -321,7 +321,7 @@ mod tests {
RequestMismatchMitigationStrategy::PayMoreUpgrade,
RequestMismatchMitigationStrategy::PayLessDowngrade,
] {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideThreeByTwo),
request_mismatch_mitigation_strategy: strategy,
..base_video_request()
@@ -336,7 +336,7 @@ mod tests {
#[test]
fn aspect_ratio_error_out_on_unsupported() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideThreeByTwo),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::ErrorOut,
..base_video_request()
@@ -355,7 +355,7 @@ mod tests {
RequestMismatchMitigationStrategy::PayMoreUpgrade,
RequestMismatchMitigationStrategy::PayLessDowngrade,
] {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
video_batch_count: Some(0),
request_mismatch_mitigation_strategy: strategy,
..base_video_request()
@@ -370,22 +370,22 @@ mod tests {
#[test]
fn batch_count_direct_mapping() {
let req = GenerateVideoRequest { video_batch_count: Some(1), ..base_video_request() };
let req = GenerateVideoRequestBuilder { video_batch_count: Some(1), ..base_video_request() };
let VideoGenerationPlan::ArtcraftSeedance2p0(plan) = req.build().unwrap() else { panic!("wrong variant") };
assert!(matches!(plan.batch_count, Seedance2p0BatchCount::One));
let req = GenerateVideoRequest { video_batch_count: Some(2), ..base_video_request() };
let req = GenerateVideoRequestBuilder { video_batch_count: Some(2), ..base_video_request() };
let VideoGenerationPlan::ArtcraftSeedance2p0(plan) = req.build().unwrap() else { panic!("wrong variant") };
assert!(matches!(plan.batch_count, Seedance2p0BatchCount::Two));
let req = GenerateVideoRequest { video_batch_count: Some(4), ..base_video_request() };
let req = GenerateVideoRequestBuilder { video_batch_count: Some(4), ..base_video_request() };
let VideoGenerationPlan::ArtcraftSeedance2p0(plan) = req.build().unwrap() else { panic!("wrong variant") };
assert!(matches!(plan.batch_count, Seedance2p0BatchCount::Four));
}
#[test]
fn batch_count_three_upgrade_rounds_to_four() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
video_batch_count: Some(3),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::PayMoreUpgrade,
..base_video_request()
@@ -396,7 +396,7 @@ mod tests {
#[test]
fn batch_count_three_downgrade_rounds_to_two() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
video_batch_count: Some(3),
request_mismatch_mitigation_strategy: RequestMismatchMitigationStrategy::PayLessDowngrade,
..base_video_request()
@@ -407,7 +407,7 @@ mod tests {
#[test]
fn url_image_ref_returns_error() {
let request = GenerateVideoRequest {
let request = GenerateVideoRequestBuilder {
start_frame: Some(ImageRef::Url("https://example.com/image.jpg".to_string())),
..base_video_request()
};
@@ -7,7 +7,7 @@ use crate::api::video_list_ref::VideoListRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::artcraft::plan_generate_video_artcraft_seedance2p0::PlanArtcraftSeedance2p0;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::seedance_2p0_multi_function_video_gen::{
@@ -17,7 +17,7 @@ use tokens::tokens::characters::CharacterToken;
use tokens::tokens::media_files::MediaFileToken;
pub fn plan_generate_video_artcraft_seedance2p0_fast(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -249,14 +249,14 @@ mod tests {
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::seedance_2p0_multi_function_video_gen::{
Seedance2p0AspectRatio, Seedance2p0BatchCount,
};
fn base_request() -> GenerateVideoRequest {
GenerateVideoRequest {
fn base_request() -> GenerateVideoRequestBuilder {
GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0Fast,
provider: Provider::Artcraft,
prompt: Some("a cat in space".to_string()),
@@ -295,7 +295,7 @@ mod tests {
#[test]
fn aspect_ratio_16x9() {
let req = GenerateVideoRequest {
let req = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::WideSixteenByNine),
..base_request()
};
@@ -306,7 +306,7 @@ mod tests {
#[test]
fn aspect_ratio_9x16() {
let req = GenerateVideoRequest {
let req = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::TallNineBySixteen),
..base_request()
};
@@ -317,7 +317,7 @@ mod tests {
#[test]
fn aspect_ratio_square() {
let req = GenerateVideoRequest {
let req = GenerateVideoRequestBuilder {
aspect_ratio: Some(CommonAspectRatio::Square),
..base_request()
};
@@ -336,7 +336,7 @@ mod tests {
#[test]
fn batch_count_2() {
let req = GenerateVideoRequest { video_batch_count: Some(2), ..base_request() };
let req = GenerateVideoRequestBuilder { video_batch_count: Some(2), ..base_request() };
let plan = req.build().unwrap();
let VideoGenerationPlan::ArtcraftSeedance2p0Fast(p) = plan else { panic!("wrong variant") };
assert!(matches!(p.batch_count, Seedance2p0BatchCount::Two));
@@ -344,7 +344,7 @@ mod tests {
#[test]
fn batch_count_4() {
let req = GenerateVideoRequest { video_batch_count: Some(4), ..base_request() };
let req = GenerateVideoRequestBuilder { video_batch_count: Some(4), ..base_request() };
let plan = req.build().unwrap();
let VideoGenerationPlan::ArtcraftSeedance2p0Fast(p) = plan else { panic!("wrong variant") };
assert!(matches!(p.batch_count, Seedance2p0BatchCount::Four));
@@ -352,7 +352,7 @@ mod tests {
#[test]
fn duration_in_range() {
let req = GenerateVideoRequest { duration_seconds: Some(10), ..base_request() };
let req = GenerateVideoRequestBuilder { duration_seconds: Some(10), ..base_request() };
let plan = req.build().unwrap();
let VideoGenerationPlan::ArtcraftSeedance2p0Fast(p) = plan else { panic!("wrong variant") };
assert_eq!(p.duration_seconds, Some(10));
@@ -360,7 +360,7 @@ mod tests {
#[test]
fn duration_clamped_to_max() {
let req = GenerateVideoRequest { duration_seconds: Some(99), ..base_request() };
let req = GenerateVideoRequestBuilder { duration_seconds: Some(99), ..base_request() };
let plan = req.build().unwrap();
let VideoGenerationPlan::ArtcraftSeedance2p0Fast(p) = plan else { panic!("wrong variant") };
assert_eq!(p.duration_seconds, Some(15));
@@ -368,7 +368,7 @@ mod tests {
#[test]
fn url_image_ref_returns_error() {
let req = GenerateVideoRequest {
let req = GenerateVideoRequestBuilder {
start_frame: Some(ImageRef::Url("https://example.com/image.jpg".to_string())),
..base_request()
};
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::generate_seedance_1_0_lite_image_to_video::{
GenerateSeedance10LiteAspectRatio, GenerateSeedance10LiteDuration,
@@ -24,7 +24,7 @@ pub struct PlanArtcraftSeedance10Lite {
}
pub fn plan_generate_video_artcraft_seedance_1_0_lite(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::sora_2_multi_function_video_gen::{
Sora2MultiFunctionVideoGenAspectRatio, Sora2MultiFunctionVideoGenDuration,
@@ -23,7 +23,7 @@ pub struct PlanArtcraftSora2 {
}
pub fn plan_generate_video_artcraft_sora_2(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::sora_2_pro_multi_function_video_gen::{
Sora2ProMultiFunctionVideoGenAspectRatio, Sora2ProMultiFunctionVideoGenDuration,
@@ -23,7 +23,7 @@ pub struct PlanArtcraftSora2Pro {
}
pub fn plan_generate_video_artcraft_sora_2_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::generate_veo_2_image_to_video::{
GenerateVeo2AspectRatio, GenerateVeo2Duration,
@@ -23,7 +23,7 @@ pub struct PlanArtcraftVeo2 {
}
pub fn plan_generate_video_artcraft_veo_2(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::generate_veo_3_image_to_video::{
GenerateVeo3AspectRatio, GenerateVeo3Duration, GenerateVeo3Resolution,
@@ -29,7 +29,7 @@ pub struct PlanArtcraftVeo3 {
}
pub fn plan_generate_video_artcraft_veo_3(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::generate_veo_3_fast_image_to_video::{
GenerateVeo3FastAspectRatio, GenerateVeo3FastDuration, GenerateVeo3FastResolution,
@@ -23,7 +23,7 @@ pub struct PlanArtcraftVeo3Fast {
}
pub fn plan_generate_video_artcraft_veo_3_fast(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::veo_3p1_multi_function_video_gen::{
Veo3p1MultiFunctionVideoGenAspectRatio, Veo3p1MultiFunctionVideoGenDuration,
@@ -26,14 +26,14 @@ pub struct PlanArtcraftVeo3p1 {
}
pub fn plan_generate_video_artcraft_veo_3p1(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let plan = build_plan_artcraft_veo_3p1(request)?;
Ok(VideoGenerationPlan::ArtcraftVeo3p1(plan))
}
pub(crate) fn build_plan_artcraft_veo_3p1(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<PlanArtcraftVeo3p1, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use artcraft_api_defs::generate::video::multi_function::veo_3p1_fast_multi_function_video_gen::{
Veo3p1FastMultiFunctionVideoGenAspectRatio, Veo3p1FastMultiFunctionVideoGenDuration,
@@ -26,7 +26,7 @@ pub struct PlanArtcraftVeo3p1Fast {
}
pub fn plan_generate_video_artcraft_veo_3p1_fast(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use fal_client::requests::webhook::video::image::enqueue_kling_v1p6_pro_image_to_video_webhook::{
Kling1p6ProAspectRatio, Kling1p6ProDuration,
@@ -19,7 +19,7 @@ pub struct PlanFalKling16Pro {
}
pub fn plan_generate_video_fal_kling_1_6_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -2,7 +2,7 @@ use crate::api::common_aspect_ratio::CommonAspectRatio;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::require_url;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use fal_client::requests::webhook::video::image::enqueue_kling_v2p1_master_image_to_video_webhook::{
@@ -18,7 +18,7 @@ pub struct PlanFalKling21Master {
}
pub fn plan_generate_video_fal_kling_2_1_master(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -2,7 +2,7 @@ use crate::api::common_aspect_ratio::CommonAspectRatio;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::{optional_url, require_url};
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use fal_client::requests::webhook::video::image::enqueue_kling_v2p1_pro_image_to_video_webhook::{
@@ -19,7 +19,7 @@ pub struct PlanFalKling21Pro {
}
pub fn plan_generate_video_fal_kling_2_1_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -2,7 +2,7 @@ use crate::api::common_aspect_ratio::CommonAspectRatio;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::optional_url;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
@@ -38,7 +38,7 @@ pub struct PlanFalKling2p5TurboPro {
}
pub fn plan_generate_video_fal_kling_2_5_turbo_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -2,7 +2,7 @@ use crate::api::common_aspect_ratio::CommonAspectRatio;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::optional_url;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
@@ -36,7 +36,7 @@ pub struct PlanFalKling2p6Pro {
}
pub fn plan_generate_video_fal_kling_2_6_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -2,7 +2,7 @@ use crate::api::common_aspect_ratio::CommonAspectRatio;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::optional_url;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
@@ -37,7 +37,7 @@ pub struct PlanFalKling3p0Pro {
}
pub fn plan_generate_video_fal_kling_3p0_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let inner = build_kling_3p0_plan(request, "Kling 3.0 Pro")?;
Ok(VideoGenerationPlan::FalKling3p0Pro(PlanFalKling3p0Pro {
@@ -60,7 +60,7 @@ pub(crate) struct Kling3p0Common {
}
pub(crate) fn build_kling_3p0_plan(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
_model_label: &'static str,
) -> Result<Kling3p0Common, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -1,5 +1,5 @@
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_3p0_pro::{
build_kling_3p0_plan, FalKling3p0AspectRatio, FalKling3p0Duration, FalKling3p0Mode,
};
@@ -16,7 +16,7 @@ pub struct PlanFalKling3p0Standard {
}
pub fn plan_generate_video_fal_kling_3p0_standard(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let inner = build_kling_3p0_plan(request, "Kling 3.0 Standard")?;
Ok(VideoGenerationPlan::FalKling3p0Standard(PlanFalKling3p0Standard {
@@ -3,7 +3,7 @@ use crate::api::common_resolution::CommonResolution;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::{optional_url, require_url};
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use fal_client::requests::webhook::video::image::enqueue_seedance_1_lite_image_to_video_webhook::{
@@ -21,7 +21,7 @@ pub struct PlanFalSeedance10Lite {
}
pub fn plan_generate_video_fal_seedance_1_0_lite(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::common_resolution::CommonResolution;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::optional_url;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
@@ -58,7 +58,7 @@ pub struct PlanFalSeedance1p5Pro {
}
pub fn plan_generate_video_fal_seedance_1p5_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::common_resolution::CommonResolution;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::optional_url;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
@@ -44,7 +44,7 @@ pub struct PlanFalSora2 {
}
pub fn plan_generate_video_fal_sora_2(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::common_resolution::CommonResolution;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_kling_1_6_pro::optional_url;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
@@ -44,7 +44,7 @@ pub struct PlanFalSora2Pro {
}
pub fn plan_generate_video_fal_sora_2_pro(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use fal_client::requests::webhook::video::image::enqueue_veo_2_image_to_video_webhook::{
Veo2AspectRatio, Veo2Duration,
@@ -29,7 +29,7 @@ pub struct PlanFalVeo2 {
}
pub fn plan_generate_video_fal_veo_2(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use fal_client::requests::webhook::video::image::enqueue_veo_3_image_to_video_webhook::{
Veo3I2vAspectRatio, Veo3I2vDuration, Veo3I2vResolution,
@@ -70,7 +70,7 @@ pub struct PlanFalVeo3 {
}
pub fn plan_generate_video_fal_veo_3(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -3,7 +3,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use crate::api::common_aspect_ratio::CommonAspectRatio;
use fal_client::requests::webhook::video::image::enqueue_veo_3_fast_image_to_video_webhook::{
@@ -21,7 +21,7 @@ pub struct PlanFalVeo3Fast {
}
pub fn plan_generate_video_fal_veo_3_fast(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -4,7 +4,7 @@ use crate::api::image_ref::ImageRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
/// Three-way internal selection of which Fal Veo 3.1 endpoint to call.
@@ -49,14 +49,14 @@ pub struct PlanFalVeo3p1 {
}
pub fn plan_generate_video_fal_veo_3p1(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let plan = build_plan_fal_veo_3p1(request, "Veo 3.1")?;
Ok(VideoGenerationPlan::FalVeo3p1(plan))
}
pub(crate) fn build_plan_fal_veo_3p1(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
model_label: &'static str,
) -> Result<PlanFalVeo3p1, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -1,5 +1,5 @@
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::plan::fal::plan_generate_video_fal_veo_3p1::{
build_plan_fal_veo_3p1, PlanFalVeo3p1,
};
@@ -14,7 +14,7 @@ pub struct PlanFalVeo3p1Fast {
}
pub fn plan_generate_video_fal_veo_3p1_fast(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let inner = build_plan_fal_veo_3p1(request, "Veo 3.1 Fast")?;
Ok(VideoGenerationPlan::FalVeo3p1Fast(PlanFalVeo3p1Fast { inner }))
@@ -3,7 +3,7 @@ use crate::api::image_list_ref::ImageListRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use muapi_client::requests::seedance_2p0_image_to_video::seedance_2p0_image_to_video::{
AspectRatio as I2vAspectRatio,
@@ -41,7 +41,7 @@ pub struct PlanMuapiSeedance2p0 {
}
pub fn plan_generate_video_muapi_seedance2p0(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -6,7 +6,7 @@ use crate::api::video_list_ref::VideoListRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use seedance2pro_client::requests::generate_video::generate_video::{
KinoviGenerateVideoRequest as SeedanceGenerateVideoRequest,
@@ -21,7 +21,7 @@ pub struct PlanSeedance2proSeedance2p0 {
}
pub fn plan_generate_video_seedance2pro_seedance2p0(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -6,7 +6,7 @@ use crate::api::video_list_ref::VideoListRef;
use crate::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use crate::errors::artcraft_router_error::ArtcraftRouterError;
use crate::errors::client_error::ClientError;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use crate::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use seedance2pro_client::requests::generate_video::generate_video::{
KinoviGenerateVideoRequest as SeedanceGenerateVideoRequest,
@@ -21,7 +21,7 @@ pub struct PlanSeedance2proSeedance2p0Fast {
}
pub fn plan_generate_video_seedance2pro_seedance2p0_fast(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, ArtcraftRouterError> {
let strategy = request.request_mismatch_mitigation_strategy;
@@ -6,7 +6,7 @@ use crate::client::router_artcraft_client::RouterArtcraftClient;
use crate::client::router_client::RouterClient;
use crate::client::router_fal_client::RouterFalClient;
use crate::generate::generate_image::generate_image_request::GenerateImageRequest;
use crate::generate::generate_video::generate_video_request::GenerateVideoRequest;
use crate::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use artcraft_client::credentials::storyteller_credential_set::StorytellerCredentialSet;
use artcraft_client::utils::api_host::ApiHost;
use fal_client::creds::fal_api_key::FalApiKey;
@@ -314,8 +314,8 @@ pub fn base_flux_pro_1p1_ultra_image_request() -> GenerateImageRequest {
}
}
pub fn base_video_request() -> GenerateVideoRequest {
GenerateVideoRequest {
pub fn base_video_request() -> GenerateVideoRequestBuilder {
GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0,
provider: Provider::Artcraft,
prompt: Some("a cat in space".to_string()),
@@ -14,7 +14,7 @@ use artcraft_router::api::video_list_ref::VideoListRef;
use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use artcraft_router::client::router_artcraft_client::RouterArtcraftClient;
use artcraft_router::client::router_client::RouterClient;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use enums::common::generation_provider::GenerationProvider;
use enums::tauri::tasks::task_type::TaskType;
use log::{error, info};
@@ -33,7 +33,7 @@ pub(super) async fn handle_artcraft_seedance_2p0(
let end_frame = request.end_frame_image_media_token.clone().map(ImageRef::MediaFileToken);
let reference_images = request.reference_image_media_tokens.clone().map(ImageListRef::MediaFileTokens);
let router_request = GenerateVideoRequest {
let router_request = GenerateVideoRequestBuilder {
model: CommonVideoModel::Seedance2p0,
provider: Provider::Artcraft,
prompt: request.prompt.clone(),
@@ -10,7 +10,7 @@ use artcraft_router::api::provider::Provider;
use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use artcraft_router::client::router_artcraft_client::RouterArtcraftClient;
use artcraft_router::client::router_client::RouterClient;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use enums::common::generation_provider::GenerationProvider;
use enums::tauri::tasks::task_type::TaskType;
use log::{error, info};
@@ -31,7 +31,7 @@ pub(super) async fn handle_artcraft_video_via_router(
let start_frame = request.image_media_token.clone().map(ImageRef::MediaFileToken);
let end_frame = request.end_frame_image_media_token.clone().map(ImageRef::MediaFileToken);
let router_request = GenerateVideoRequest {
let router_request = GenerateVideoRequestBuilder {
model,
provider: Provider::Artcraft,
prompt: request.prompt.clone(),
@@ -12,7 +12,7 @@ use artcraft_router::api::common_resolution::CommonResolution as RouterResolutio
use artcraft_router::api::common_video_model::CommonVideoModel as RouterVideoModel;
use artcraft_router::api::provider::Provider as RouterProvider;
use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use enums::common::generation::common_aspect_ratio::CommonAspectRatio;
use enums::common::generation::common_video_model::CommonVideoModel;
use enums::common::generation::common_resolution::CommonResolution;
@@ -38,7 +38,7 @@ pub async fn estimate_video_cost_handler(
let router_aspect_ratio = request.aspect_ratio.map(map_aspect_ratio);
let router_resolution = request.resolution.map(map_resolution);
let router_request = GenerateVideoRequest {
let router_request = GenerateVideoRequestBuilder {
model: router_model,
provider: router_provider,
prompt: None,
@@ -9,7 +9,7 @@ use artcraft_router::api::image_ref::ImageRef;
use artcraft_router::api::provider::Provider;
use artcraft_router::api::video_list_ref::VideoListRef;
use artcraft_router::client::request_mismatch_mitigation_strategy::RequestMismatchMitigationStrategy;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use enums::common::generation::common_aspect_ratio::CommonAspectRatio as CommonAspectRatioEnum;
use enums::common::generation::common_resolution::CommonResolution as CommonResolutionEnum;
use enums::common::generation::common_video_model::CommonVideoModel as CommonVideoModelEnum;
@@ -49,7 +49,7 @@ fn convert_resolution(
pub fn hydrate_to_router_request(
request: &OmniGenVideoCostAndGenerateRequest,
) -> Result<GenerateVideoRequest, AdvancedCommonWebError> {
) -> Result<GenerateVideoRequestBuilder, AdvancedCommonWebError> {
let api_model = request.model.as_ref()
.ok_or_else(|| AdvancedCommonWebError::BadInputWithSimpleMessage(
"model is required".to_string(),
@@ -65,7 +65,7 @@ pub fn hydrate_to_router_request(
.map(convert_resolution)
.transpose()?;
Ok(GenerateVideoRequest {
Ok(GenerateVideoRequestBuilder {
model,
provider: Provider::Artcraft,
prompt: request.prompt.clone(),
@@ -1,5 +1,5 @@
use artcraft_router::api::provider::Provider;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use artcraft_router::generate::generate_video::video_generation_cost_estimate::VideoGenerationCostEstimate;
use log::warn;
@@ -9,9 +9,9 @@ use crate::http_server::common_responses::advanced_common_web_error::AdvancedCom
/// Always uses the Artcraft provider for costing regardless of the execution provider.
/// (Because we're the ones doing the billing.)
pub fn request_to_costs(
request: &GenerateVideoRequest,
request: &GenerateVideoRequestBuilder,
) -> Result<VideoGenerationCostEstimate, AdvancedCommonWebError> {
let cost_request = GenerateVideoRequest {
let cost_request = GenerateVideoRequestBuilder {
provider: Provider::Artcraft,
..(*request).clone()
};
@@ -1,5 +1,5 @@
use artcraft_router::api::provider::Provider;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use artcraft_router::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use log::warn;
@@ -8,7 +8,7 @@ use crate::http_server::common_responses::advanced_common_web_error::AdvancedCom
/// Build a video generation plan from a transformed request.
/// Overrides the provider to Fal for execution (costing uses Artcraft separately).
pub fn request_to_plan(
request: &mut GenerateVideoRequest,
request: &mut GenerateVideoRequestBuilder,
) -> Result<VideoGenerationPlan, AdvancedCommonWebError> {
request.provider = Provider::Fal;
@@ -18,7 +18,7 @@ use artcraft_router::api::image_list_ref::ImageListRef;
use artcraft_router::api::image_ref::ImageRef;
use artcraft_router::api::provider::Provider;
use artcraft_router::api::video_list_ref::VideoListRef;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use artcraft_router::generate::generate_video::video_generation_cost_estimate::VideoGenerationCostEstimate;
use artcraft_router::generate::generate_video::video_generation_plan::VideoGenerationPlan;
use tokens::tokens::media_files::MediaFileToken;
@@ -31,7 +31,7 @@ use super::distill_helper::hydrate_to_router_request::hydrate_to_router_request;
/// request: the router request, the bill-on cost estimate, and the executable
/// plan, all in one place.
pub struct DistilledVideoRequest {
request: GenerateVideoRequest,
request: GenerateVideoRequestBuilder,
/// Cost estimate as computed by the Artcraft provider — this is what we bill on.
pub cost: VideoGenerationCostEstimate,
@@ -51,7 +51,7 @@ impl DistilledVideoRequest {
/// Borrow the underlying router request. Useful for tests / debugging.
#[allow(dead_code)]
pub(crate) fn request(&self) -> &GenerateVideoRequest {
pub(crate) fn request(&self) -> &GenerateVideoRequestBuilder {
&self.request
}
}
@@ -70,7 +70,7 @@ pub fn distill_video_request(
// `initial` already has media fields in token form (from hydrate_to_router_request),
// which is exactly what the Artcraft cost builder needs. Just swap the provider.
let cost: VideoGenerationCostEstimate = {
let cost_request = GenerateVideoRequest {
let cost_request = GenerateVideoRequestBuilder {
provider: Provider::Artcraft,
..initial.clone()
};
@@ -104,7 +104,7 @@ pub fn distill_video_request(
)?;
// 4. Build the execution request with resolved URLs.
let exec_request = GenerateVideoRequest {
let exec_request = GenerateVideoRequestBuilder {
model: initial.model,
provider: execution_provider,
prompt: initial.prompt,