This commit is contained in:
Brandon Thomas committed 2026-04-23 14:20:24 -04:00
1 parent 35a7bf5687
commit 6a4b172bc0
2 files changed
+33 -18

No files matched your search

@@ -146,13 +146,13 @@ pub async fn omni_gen_video_generate_handler(
}
};
// ==================== RESOLVE MEDIA, CHARACTERS ==================== //
let media_file_to_url_map: Option<HashMap<MediaFileToken, String>> =
media_file_hydration_map.as_ref().map(|map| {
map.iter().map(|(k, v)| (k.clone(), v.to_string())).collect()
});
// ==================== RESOLVE CHARACTERS ==================== //
let kinovi_character_id_map: Option<HashMap<CharacterToken, String>> =
resolve_kinovi_character_ids(
request.reference_character_tokens.as_deref(),
@@ -176,14 +176,12 @@ pub async fn omni_gen_video_generate_handler(
kinovi_character_id_map: &kinovi_character_id_map,
}).await?
} else {
let empty_map = HashMap::new();
let media_url_map = media_file_hydration_map.as_ref().unwrap_or(&empty_map);
run_pipeline_v1(RunPipelineV1Args {
request: &request,
server_state: &server_state,
mysql_connection: &mut mysql_connection,
user_token,
media_url_map,
media_url_map: &media_file_hydration_map,
kinovi_character_id_map: &kinovi_character_id_map,
}).await?
};
@@ -32,7 +32,7 @@ pub struct RunPipelineV1Args<'a> {
pub server_state: &'a ServerState,
pub mysql_connection: &'a mut sqlx::pool::PoolConnection<sqlx::MySql>,
pub user_token: &'a UserToken,
pub media_url_map: &'a HashMap<MediaFileToken, Url>,
pub media_url_map: &'a Option<HashMap<MediaFileToken, Url>>,
pub kinovi_character_id_map: &'a Option<HashMap<CharacterToken, String>>,
}
@@ -95,18 +95,29 @@ pub async fn run_pipeline_v1(args: RunPipelineV1Args<'_>) -> Result<PipelineResu
cost_plan.estimate_costs()
};
// ── Build the execution request (resolve media tokens → URLs from handler map) ──
// ── Resolve media tokens → URLs from handler map ──
let empty_map = HashMap::new();
let url_map = media_url_map.as_ref().unwrap_or(&empty_map);
let start_frame = lookup_url(url_map, request.start_frame_image_media_token.as_ref()).map(ImageRef::Url);
let end_frame = lookup_url(url_map, request.end_frame_image_media_token.as_ref()).map(ImageRef::Url);
let reference_images = lookup_urls(url_map, request.reference_image_media_tokens.as_ref()).map(ImageListRef::Urls);
let reference_videos = lookup_urls(url_map, request.reference_video_media_tokens.as_ref()).map(VideoListRef::Urls);
let reference_audio = lookup_urls(url_map, request.reference_audio_media_tokens.as_ref()).map(AudioListRef::Urls);
// ── Build the execution request ──
let exec_request = GenerateVideoRequestBuilder {
model: initial.model,
provider: execution_provider,
prompt: initial.prompt,
negative_prompt: initial.negative_prompt,
start_frame: lookup_url(media_url_map, request.start_frame_image_media_token.as_ref()).map(ImageRef::Url),
end_frame: lookup_url(media_url_map, request.end_frame_image_media_token.as_ref()).map(ImageRef::Url),
reference_images: lookup_urls(media_url_map, request.reference_image_media_tokens.as_ref()).map(ImageListRef::Urls),
reference_videos: lookup_urls(media_url_map, request.reference_video_media_tokens.as_ref()).map(VideoListRef::Urls),
reference_audio: lookup_urls(media_url_map, request.reference_audio_media_tokens.as_ref()).map(AudioListRef::Urls),
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,
@@ -135,7 +146,7 @@ pub async fn run_pipeline_v1(args: RunPipelineV1Args<'_>) -> Result<PipelineResu
Provider::Seedance2Pro => {
execute_generation_kinovi(
request, server_state,
Some(media_url_map), kinovi_character_ids,
media_url_map.as_ref(), kinovi_character_ids,
billing.maybe_wallet_ledger_entry_token.as_ref(), mysql_connection,
).await?
}
@@ -180,16 +191,22 @@ pub fn distill_video_request(
cost_plan.estimate_costs()
};
let start_frame = lookup_url(media_url_map, request.start_frame_image_media_token.as_ref()).map(ImageRef::Url);
let end_frame = lookup_url(media_url_map, request.end_frame_image_media_token.as_ref()).map(ImageRef::Url);
let reference_images = lookup_urls(media_url_map, request.reference_image_media_tokens.as_ref()).map(ImageListRef::Urls);
let reference_videos = lookup_urls(media_url_map, request.reference_video_media_tokens.as_ref()).map(VideoListRef::Urls);
let reference_audio = lookup_urls(media_url_map, request.reference_audio_media_tokens.as_ref()).map(AudioListRef::Urls);
let exec_request = GenerateVideoRequestBuilder {
model: initial.model,
provider: execution_provider,
prompt: initial.prompt,
negative_prompt: initial.negative_prompt,
start_frame: lookup_url(media_url_map, request.start_frame_image_media_token.as_ref()).map(ImageRef::Url),
end_frame: lookup_url(media_url_map, request.end_frame_image_media_token.as_ref()).map(ImageRef::Url),
reference_images: lookup_urls(media_url_map, request.reference_image_media_tokens.as_ref()).map(ImageListRef::Urls),
reference_videos: lookup_urls(media_url_map, request.reference_video_media_tokens.as_ref()).map(VideoListRef::Urls),
reference_audio: lookup_urls(media_url_map, request.reference_audio_media_tokens.as_ref()).map(AudioListRef::Urls),
start_frame,
end_frame,
reference_images,
reference_videos,
reference_audio,
reference_character_tokens: None,
resolution: initial.resolution,
aspect_ratio: initial.aspect_ratio,