add "frontend_subscriber_id" to image-to-object

This commit is contained in:
Brandon Thomas committed 2025-11-24 23:32:20 -05:00
1 parent 73a6d0494b
commit 3632fb833e
5 files changed
+65 -11

No files matched your search

@@ -17,6 +17,7 @@ use crate::services::storyteller::state::storyteller_credential_manager::Storyte
use log::{error, info, warn};
use serde_derive::{Deserialize, Serialize};
use tauri::{AppHandle, State};
use enums::tauri::ux::tauri_command_caller::TauriCommandCaller;
use tokens::tokens::media_files::MediaFileToken;
#[derive(Deserialize)]
@@ -27,6 +28,21 @@ pub struct EnqueueImageTo3dObjectRequest {
/// The model to use.
pub model: Option<EnqueueImageTo3dObjectModel>,
/// OPTIONAL.
/// Name of the frontend caller.
/// We'll use this to selectively trigger events.
pub frontend_caller: Option<TauriCommandCaller>,
/// OPTIONAL.
/// A frontend-defined identifier that we'll send back to the frontend
/// as a Tauri event on task completion.
pub frontend_subscriber_id: Option<String>,
/// OPTIONAL.
/// A frontend-defined payload that we'll send back to the frontend
/// as a Tauri event on task completion.
pub frontend_subscriber_payload: Option<String>,
}
#[derive(Deserialize, Debug, Copy, Clone)]
@@ -159,7 +175,7 @@ pub async fn handle_request(
) -> Result<TaskEnqueueSuccess, GenerateError> {
let result = handle_object(
request,
&request,
&app,
&app_env_configs,
&app_data_root,
@@ -173,7 +189,12 @@ pub async fn handle_request(
};
let result = success_event
.insert_into_task_database(task_database)
.insert_into_task_database_with_frontend_payload(
task_database,
request.frontend_caller.clone(),
request.frontend_subscriber_id.as_deref(),
request.frontend_subscriber_payload.as_deref(),
)
.await;
if let Err(err) = result {
@@ -10,7 +10,7 @@ use crate::services::storyteller::state::storyteller_credential_manager::Storyte
use tauri::AppHandle;
pub async fn handle_object(
request: EnqueueImageTo3dObjectRequest,
request: &EnqueueImageTo3dObjectRequest,
app: &AppHandle,
app_env_configs: &AppEnvConfigs,
app_data_root: &AppDataRoot,
@@ -19,7 +19,7 @@ use storyteller_client::endpoints::generate::object::generate_hunyuan_3d_2_1_ima
use tauri::AppHandle;
pub async fn handle_object_artcraft(
request: EnqueueImageTo3dObjectRequest,
request: &EnqueueImageTo3dObjectRequest,
app: &AppHandle,
app_env_configs: &AppEnvConfigs,
app_data_root: &AppDataRoot,
@@ -59,7 +59,7 @@ pub async fn handle_object_artcraft(
used_model = Some(GenerationModel::Hunyuan3d2_0);
let request = GenerateHunyuan20ImageTo3dRequest {
uuid_idempotency_token,
media_file_token: request.image_media_token,
media_file_token: request.image_media_token.clone(),
};
let result = generate_hunyuan3d_2_0_image_to_3d(
&app_env_configs.storyteller_host,
@@ -82,7 +82,7 @@ pub async fn handle_object_artcraft(
used_model = Some(GenerationModel::Hunyuan3d2_1);
let request = GenerateHunyuan21ImageTo3dRequest {
uuid_idempotency_token,
media_file_token: request.image_media_token,
media_file_token: request.image_media_token.clone(),
};
let result = generate_hunyuan3d_2_1_image_to_3d(
&app_env_configs.storyteller_host,
@@ -21,6 +21,8 @@ pub enum TauriCommandCaller {
TextToImage,
/// The image-to-video page
ImageToVideo,
/// A mini-app (doesn't specify which one)
MiniApp,
}
impl_enum_display_and_debug_using_to_str!(TauriCommandCaller);
@@ -36,6 +38,7 @@ impl TauriCommandCaller {
Self::ImageEditor => "image_editor",
Self::TextToImage => "text_to_image",
Self::ImageToVideo => "image_to_video",
Self::MiniApp => "mini_app",
}
}
@@ -45,6 +48,7 @@ impl TauriCommandCaller {
"image_editor" => Ok(Self::ImageEditor),
"text_to_image" => Ok(Self::TextToImage),
"image_to_video" => Ok(Self::ImageToVideo),
"mini_app" => Ok(Self::MiniApp),
_ => Err(EnumError::CouldNotConvertFromString(value.to_string())),
}
}
@@ -57,6 +61,7 @@ impl TauriCommandCaller {
Self::ImageEditor,
Self::TextToImage,
Self::ImageToVideo,
Self::MiniApp,
])
}
}
@@ -76,6 +81,7 @@ mod tests {
assert_serialization(TauriCommandCaller::ImageEditor, "image_editor");
assert_serialization(TauriCommandCaller::TextToImage, "text_to_image");
assert_serialization(TauriCommandCaller::ImageToVideo, "image_to_video");
assert_serialization(TauriCommandCaller::MiniApp, "mini_app");
}
#[test]
@@ -84,6 +90,7 @@ mod tests {
assert_eq!(TauriCommandCaller::ImageEditor.to_str(), "image_editor");
assert_eq!(TauriCommandCaller::TextToImage.to_str(), "text_to_image");
assert_eq!(TauriCommandCaller::ImageToVideo.to_str(), "image_to_video");
assert_eq!(TauriCommandCaller::MiniApp.to_str(), "mini_app");
}
#[test]
@@ -92,6 +99,7 @@ mod tests {
assert_eq!(TauriCommandCaller::from_str("image_editor").unwrap(), TauriCommandCaller::ImageEditor);
assert_eq!(TauriCommandCaller::from_str("text_to_image").unwrap(), TauriCommandCaller::TextToImage);
assert_eq!(TauriCommandCaller::from_str("image_to_video").unwrap(), TauriCommandCaller::ImageToVideo);
assert_eq!(TauriCommandCaller::from_str("mini_app").unwrap(), TauriCommandCaller::MiniApp);
}
#[test]
@@ -108,11 +116,12 @@ mod tests {
#[test]
fn all_variants() {
let mut variants = TauriCommandCaller::all_variants();
assert_eq!(variants.len(), 4);
assert_eq!(variants.len(), 5);
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::Canvas));
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::ImageEditor));
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::TextToImage));
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::ImageToVideo));
assert_eq!(variants.pop_first(), Some(TauriCommandCaller::MiniApp));
assert_eq!(variants.pop_first(), None);
}
}
@@ -17,6 +17,19 @@ export enum EnqueueImageTo3dObjectErrorType {
export interface EnqueueImageTo3dObjectRequest {
image_media_token?: string;
model?: EnqueueImageTo3dObjectModel;
// TODO: Actual enum.
frontend_caller?: string;
// Optional frontend state to return later.
frontend_subscriber_id?: string;
}
interface EnqueueImageTo3dObjectRequestRaw {
image_media_token?: string;
model?: EnqueueImageTo3dObjectModel;
frontend_caller?: string;
frontend_subscriber_id?: string;
}
export enum EnqueueImageTo3dObjectModel {
@@ -40,11 +53,22 @@ export interface EnqueueImageTo3dObjectSuccess extends CommandResult {
export type EnqueueImageTo3dObjectResult = EnqueueImageTo3dObjectSuccess | EnqueueImageTo3dObjectError;
export const EnqueueImageTo3dObject = async (request: EnqueueImageTo3dObjectRequest) : Promise<EnqueueImageTo3dObjectResult> => {
let mutableRequest : EnqueueImageTo3dObjectRequestRaw = {
image_media_token: request.image_media_token,
model: request.model,
};
if (!!request.frontend_caller) {
mutableRequest.frontend_caller = request.frontend_caller;
}
if (!!request.frontend_subscriber_id) {
mutableRequest.frontend_subscriber_id = request.frontend_subscriber_id;
}
let result = await invoke("enqueue_image_to_3d_object_command", {
request: {
image_media_token: request.image_media_token,
model: request.model,
}
request: mutableRequest,
});
return (result as EnqueueImageTo3dObjectResult);
}