This commit is contained in:
Brandon Thomas committed 2026-04-23 14:49:27 -04:00
1 parent 8ee73fda19
commit 31385ea2c7
3 files changed
+32 -30

No files matched your search

@@ -26,6 +26,7 @@ use tokens::tokens::media_files::MediaFileToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::endpoints::generate::common::payments_error_test::payments_error_test;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::hydrate_router_request::hydrate_to_router_request;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::insert_fal_job::insert_fal_job;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::insert_seedance2pro_jobs::insert_seedance2pro_jobs;
use crate::http_server::endpoints::omni_gen::generate::video::pipeline_v1::run_pipeline_v1::{run_pipeline_v1, RunPipelineV1Args};
@@ -159,6 +160,10 @@ pub async fn omni_gen_video_generate_handler(
&mut mysql_connection,
).await?;
// ==================== HYDRATE ROUTER REQUEST ==================== //
let router_builder = hydrate_to_router_request(&request)?;
// ==================== PIPELINE DISPATCH ==================== //
let use_v2 = match request.model {
@@ -169,7 +174,7 @@ pub async fn omni_gen_video_generate_handler(
let pipeline_result = if use_v2 {
run_pipeline_v2(RunPipelineV2Args {
request: &request,
router_builder: &router_builder,
server_state: &server_state,
mysql_connection: &mut mysql_connection,
user_token,
@@ -179,6 +184,7 @@ pub async fn omni_gen_video_generate_handler(
} else {
run_pipeline_v1(RunPipelineV1Args {
request: &request,
router_builder: &router_builder,
server_state: &server_state,
mysql_connection: &mut mysql_connection,
user_token,
@@ -208,8 +214,8 @@ pub async fn omni_gen_video_generate_handler(
maybe_negative_prompt: request.negative_prompt.as_deref(),
maybe_other_args: None,
maybe_generation_mode: None,
maybe_aspect_ratio: None,
maybe_resolution: None,
maybe_aspect_ratio: request.aspect_ratio,
maybe_resolution: request.resolution,
maybe_batch_count: request.video_batch_count.map(|c| c as u8),
maybe_generate_audio: request.generate_audio,
maybe_duration_seconds: request.duration_seconds.map(|d| d as u32),
@@ -17,7 +17,6 @@ use tokens::tokens::users::UserToken;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::bill_wallet::bill_wallet;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::hydrate_router_request::hydrate_to_router_request;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::pipeline_result::PipelineResult;
use crate::http_server::endpoints::omni_gen::generate::video::pipeline_v1::execute::execute_fal::execute_generation_fal;
use crate::http_server::endpoints::omni_gen::generate::video::pipeline_v1::execute::execute_kinovi::execute_generation_kinovi;
@@ -27,6 +26,7 @@ use crate::state::server_state::ServerState;
pub struct RunPipelineV1Args<'a> {
pub request: &'a OmniGenVideoCostAndGenerateRequest,
pub router_builder: &'a GenerateVideoRequestBuilder,
pub server_state: &'a ServerState,
pub mysql_connection: &'a mut sqlx::pool::PoolConnection<sqlx::MySql>,
pub user_token: &'a UserToken,
@@ -39,6 +39,7 @@ pub struct RunPipelineV1Args<'a> {
pub async fn run_pipeline_v1(args: RunPipelineV1Args<'_>) -> Result<PipelineResult, AdvancedCommonWebError> {
let RunPipelineV1Args {
request,
router_builder,
server_state,
mysql_connection,
user_token,
@@ -59,12 +60,10 @@ pub async fn run_pipeline_v1(args: RunPipelineV1Args<'_>) -> Result<PipelineResu
// ── Cost estimate (Artcraft provider — what we bill on) ──
let initial = hydrate_to_router_request(request)?;
let cost = {
let cost_request = GenerateVideoRequestBuilder {
provider: Provider::Artcraft,
..initial.clone()
..router_builder.clone()
};
let cost_plan = cost_request.build().map_err(|e| {
warn!("Failed to build cost plan during video distillation: {}", e);
@@ -87,23 +86,23 @@ pub async fn run_pipeline_v1(args: RunPipelineV1Args<'_>) -> Result<PipelineResu
// ── Build the execution request ──
let exec_request = GenerateVideoRequestBuilder {
model: initial.model,
model: router_builder.model,
provider: execution_provider,
prompt: initial.prompt,
negative_prompt: initial.negative_prompt,
prompt: router_builder.prompt.clone(),
negative_prompt: router_builder.negative_prompt.clone(),
start_frame,
end_frame,
reference_images,
reference_videos,
reference_audio,
reference_character_tokens: initial.reference_character_tokens.clone(),
resolution: initial.resolution,
aspect_ratio: initial.aspect_ratio,
duration_seconds: initial.duration_seconds,
video_batch_count: initial.video_batch_count,
generate_audio: initial.generate_audio,
request_mismatch_mitigation_strategy: initial.request_mismatch_mitigation_strategy,
idempotency_token: initial.idempotency_token,
reference_character_tokens: router_builder.reference_character_tokens.clone(),
resolution: router_builder.resolution,
aspect_ratio: router_builder.aspect_ratio,
duration_seconds: router_builder.duration_seconds,
video_batch_count: router_builder.video_batch_count,
generate_audio: router_builder.generate_audio,
request_mismatch_mitigation_strategy: router_builder.request_mismatch_mitigation_strategy,
idempotency_token: router_builder.idempotency_token.clone(),
};
let plan = exec_request.build().map_err(|e| {
@@ -2,14 +2,12 @@ use std::collections::HashMap;
use log::{error, info, warn};
use sqlx::pool::PoolConnection;
use url::Url;
use artcraft_api_defs::omni_gen::cost_and_generate_requests::omni_gen_video_cost_and_generate_request::OmniGenVideoCostAndGenerateRequest;
use artcraft_router::api::common_video_model::CommonVideoModel;
use artcraft_router::api::provider::Provider;
use artcraft_router::generate::generate_video::generate_video_request_builder::GenerateVideoRequestBuilder;
use artcraft_router::generate::generate_video::generate_video_response::GenerateVideoResponse;
use artcraft_router::generate::generate_video_v2::video_generation_draft_context::VideoGenerationDraftContext;
use artcraft_router::generate::generate_video_v2::video_generation_draft_or_request::VideoGenerationDraftOrRequest;
use enums::common::generation::common_video_model::CommonVideoModel;
use tokens::tokens::characters::CharacterToken;
use tokens::tokens::media_files::MediaFileToken;
use tokens::tokens::users::UserToken;
@@ -18,12 +16,11 @@ use crate::http_server::common_responses::advanced_common_web_error::AdvancedCom
use crate::http_server::endpoint_helpers::refund_wallet_after_api_failure::refund_wallet_after_api_failure;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::bill_wallet::bill_wallet;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::build_router_client::build_router_client;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::hydrate_router_request::hydrate_to_router_request;
use crate::http_server::endpoints::omni_gen::generate::video::helpers::pipeline_result::PipelineResult;
use crate::state::server_state::ServerState;
pub struct RunPipelineV2Args<'a> {
pub request: &'a OmniGenVideoCostAndGenerateRequest,
pub router_builder: &'a GenerateVideoRequestBuilder,
pub server_state: &'a ServerState,
pub mysql_connection: &'a mut PoolConnection<sqlx::MySql>,
pub user_token: &'a UserToken,
@@ -33,7 +30,7 @@ pub struct RunPipelineV2Args<'a> {
pub async fn run_pipeline_v2(args: RunPipelineV2Args<'_>) -> Result<PipelineResult, AdvancedCommonWebError> {
let RunPipelineV2Args {
request,
router_builder,
server_state,
mysql_connection,
user_token,
@@ -41,14 +38,14 @@ pub async fn run_pipeline_v2(args: RunPipelineV2Args<'_>) -> Result<PipelineResu
kinovi_character_id_map,
} = args;
let provider = match request.model {
Some(CommonVideoModel::Seedance2p0) => Provider::Seedance2Pro,
Some(CommonVideoModel::Seedance2p0Fast) => Provider::Seedance2Pro,
let provider = match router_builder.model {
CommonVideoModel::Seedance2p0 => Provider::Seedance2Pro,
CommonVideoModel::Seedance2p0Fast => Provider::Seedance2Pro,
_ => Provider::Fal,
};
// 1. Build execution request
let mut exec_builder = hydrate_to_router_request(request)?;
let mut exec_builder = router_builder.clone();
exec_builder.provider = provider;
let draft_or_request = exec_builder.build2()
@@ -58,7 +55,7 @@ pub async fn run_pipeline_v2(args: RunPipelineV2Args<'_>) -> Result<PipelineResu
})?;
// 2. Calculate cost (swap provider to Artcraft for billing)
let mut cost_builder = hydrate_to_router_request(request)?;
let mut cost_builder = router_builder.clone();
cost_builder.provider = Provider::Artcraft;
let cost = cost_builder.build2()