diff --git a/crates/lib/mysql_queries/src/queries/generic_inference/web/batch_get_inference_job_status.rs b/crates/lib/mysql_queries/src/queries/generic_inference/web/batch_get_inference_job_status.rs index 36ba291553..621f42e8a7 100644 --- a/crates/lib/mysql_queries/src/queries/generic_inference/web/batch_get_inference_job_status.rs +++ b/crates/lib/mysql_queries/src/queries/generic_inference/web/batch_get_inference_job_status.rs @@ -7,6 +7,7 @@ use sqlx::pool::PoolConnection; use enums::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory; use enums::common::job_status_plus::JobStatusPlus; +use enums::no_table::style_transfer::style_transfer_name::StyleTransferName; use enums::traits::mysql_from_row::MySqlFromRow; use errors::AnyhowResult; use tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken; @@ -15,6 +16,7 @@ use tokens::tokens::users::UserToken; use tokens::traits::mysql_token_from_row::MySqlTokenFromRow; use crate::helpers::boolean_converters::i8_to_bool; +use crate::payloads::generic_inference_args::generic_inference_args::{GenericInferenceArgs, PolymorphicInferenceArgs}; // NB: Serialization is for internal endpoints, not for returning to end-users. #[derive(Debug, Default, Serialize)] @@ -53,6 +55,10 @@ pub struct RequestDetails { /// TTS input. In the future, perhaps voice conversion SST pub maybe_raw_inference_text: Option, + + /// For Comfy / Video Style Transfer jobs, this might include + /// the name of the selected style. + pub maybe_style_name: Option, } /// NB: Serialize is for internal moderator-only endpoints @@ -154,6 +160,7 @@ SELECT jobs.maybe_model_type, jobs.maybe_model_token, jobs.maybe_raw_inference_text, + jobs.maybe_inference_args, jobs.frontend_failure_category as maybe_frontend_failure_category, @@ -198,6 +205,24 @@ LEFT OUTER JOIN media_files ON jobs.on_success_result_entity_token = media_files fn raw_records_to_public_result(records: Vec) -> Vec { records.into_iter() .map(|record| { + let maybe_args = record.maybe_inference_args + .as_deref() + .map(|args| GenericInferenceArgs::from_json(args)) + .transpose() + .ok() // NB: Fail open in this case. + .flatten() + .map(|generic_args| generic_args.args) + .flatten(); + + let mut maybe_style_name = None; + + match maybe_args { + Some(PolymorphicInferenceArgs::Cu(workflow_args)) => { + maybe_style_name = workflow_args.style_name; + } + _ => {} + } + let mut maybe_model_title = None; if let Some(title) = record.maybe_model_weights_title.as_deref() { @@ -277,6 +302,7 @@ fn raw_records_to_public_result(records: Vec) -> V maybe_model_token: record.maybe_model_token, maybe_model_title: maybe_model_title.map(|title| title.to_string()), maybe_raw_inference_text: record.maybe_raw_inference_text, + maybe_style_name, }, maybe_result_details, user_details: UserDetails { @@ -307,6 +333,7 @@ struct RawGenericInferenceJobStatus { pub maybe_model_type: Option, pub maybe_model_token: Option, pub maybe_raw_inference_text: Option, + pub maybe_inference_args: Option, pub maybe_result_entity_type: Option, pub maybe_result_entity_token: Option, @@ -360,6 +387,7 @@ impl FromRow<'_, MySqlRow> for RawGenericInferenceJobStatus { maybe_model_type: row.try_get("maybe_model_type")?, maybe_model_token: row.try_get("maybe_model_token")?, maybe_raw_inference_text: row.try_get("maybe_raw_inference_text")?, + maybe_inference_args: row.try_get("maybe_inference_args")?, maybe_result_entity_type: row.try_get("maybe_result_entity_type")?, maybe_result_entity_token: row.try_get("maybe_result_entity_token")?, maybe_model_weights_title: row.try_get("maybe_model_weights_title")?, diff --git a/crates/lib/mysql_queries/src/queries/generic_inference/web/get_inference_job_status.rs b/crates/lib/mysql_queries/src/queries/generic_inference/web/get_inference_job_status.rs index af3767d3ee..d18b411fa6 100644 --- a/crates/lib/mysql_queries/src/queries/generic_inference/web/get_inference_job_status.rs +++ b/crates/lib/mysql_queries/src/queries/generic_inference/web/get_inference_job_status.rs @@ -8,12 +8,14 @@ use sqlx::pool::PoolConnection; use enums::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory; use enums::common::job_status_plus::JobStatusPlus; +use enums::no_table::style_transfer::style_transfer_name::StyleTransferName; use errors::AnyhowResult; use tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken; use tokens::tokens::generic_inference_jobs::InferenceJobToken; use tokens::tokens::users::UserToken; use crate::helpers::boolean_converters::i8_to_bool; +use crate::payloads::generic_inference_args::generic_inference_args::{GenericInferenceArgs, PolymorphicInferenceArgs}; // NB: Serialization is for internal endpoints, not for returning to end-users. #[derive(Debug, Default, Serialize)] @@ -52,6 +54,10 @@ pub struct RequestDetails { /// TTS input. In the future, perhaps voice conversion SST pub maybe_raw_inference_text: Option, + + /// For Comfy / Video Style Transfer jobs, this might include + /// the name of the selected style. + pub maybe_style_name: Option, } /// NB: Serialize is for internal moderator-only endpoints @@ -119,6 +125,7 @@ SELECT jobs.maybe_model_type, jobs.maybe_model_token, jobs.maybe_raw_inference_text, + jobs.maybe_inference_args, jobs.frontend_failure_category as `maybe_frontend_failure_category: enums::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory`, @@ -180,6 +187,24 @@ WHERE jobs.token = ? /// Map the internal record type (since we query over several result tables) fn raw_record_to_public_result(record: RawGenericInferenceJobStatus) -> GenericInferenceJobStatus { + let maybe_args = record.maybe_inference_args + .as_deref() + .map(|args| GenericInferenceArgs::from_json(args)) + .transpose() + .ok() // NB: Fail open in this case. + .flatten() + .map(|generic_args| generic_args.args) + .flatten(); + + let mut maybe_style_name = None; + + match maybe_args { + Some(PolymorphicInferenceArgs::Cu(workflow_args)) => { + maybe_style_name = workflow_args.style_name; + } + _ => {} + } + let mut maybe_model_title = None; if let Some(title) = record.maybe_model_weights_title.as_deref() { @@ -259,6 +284,7 @@ fn raw_record_to_public_result(record: RawGenericInferenceJobStatus) -> GenericI maybe_model_token: record.maybe_model_token, maybe_model_title: maybe_model_title.map(|title| title.to_string()), maybe_raw_inference_text: record.maybe_raw_inference_text, + maybe_style_name, }, maybe_result_details, user_details: UserDetails { @@ -287,6 +313,7 @@ struct RawGenericInferenceJobStatus { pub maybe_model_type: Option, pub maybe_model_token: Option, pub maybe_raw_inference_text: Option, + pub maybe_inference_args: Option, pub maybe_result_entity_type: Option, pub maybe_result_entity_token: Option, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/batch_get_inference_job_status_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/batch_get_inference_job_status_handler.rs index fd28a20778..e343e58534 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/batch_get_inference_job_status_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/batch_get_inference_job_status_handler.rs @@ -17,6 +17,7 @@ use buckets::public::voice_conversion_results::bucket_file_path::VoiceConversion use enums::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory; use enums::common::job_status_plus::JobStatusPlus; +use enums::no_table::style_transfer::style_transfer_name::StyleTransferName; use mysql_queries::queries::generic_inference::web::batch_get_inference_job_status::{batch_get_inference_job_status, GenericInferenceJobStatus}; use redis_common::redis_keys::RedisKeys; use tokens::tokens::generic_inference_jobs::InferenceJobToken; @@ -76,6 +77,10 @@ pub struct BatchRequestDetailsResponse { /// If the result was TTS, this is the raw inference text. pub maybe_raw_inference_text: Option, + + /// For Comfy / Video Style Transfer jobs, this might include + /// the name of the selected style. + pub maybe_style_name: Option, } /// Details about the ongoing job status @@ -259,6 +264,7 @@ fn db_record_to_response_payload( maybe_model_token: record.request_details.maybe_model_token, maybe_model_title: record.request_details.maybe_model_title, maybe_raw_inference_text: record.request_details.maybe_raw_inference_text, + maybe_style_name: record.request_details.maybe_style_name, }, status: BatchStatusDetailsResponse { status: record.status, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get_inference_job_status_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get_inference_job_status_handler.rs index 718cf7ca8c..9b1e7b9ec1 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get_inference_job_status_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/inference_job/get_inference_job_status_handler.rs @@ -15,6 +15,7 @@ use buckets::public::voice_conversion_results::bucket_file_path::VoiceConversion use enums::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory; use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory; use enums::common::job_status_plus::JobStatusPlus; +use enums::no_table::style_transfer::style_transfer_name::StyleTransferName; use mysql_queries::queries::generic_inference::web::get_inference_job_status::{GenericInferenceJobStatus, get_inference_job_status}; use redis_common::redis_keys::RedisKeys; use tokens::tokens::generic_inference_jobs::InferenceJobToken; @@ -64,6 +65,10 @@ pub struct RequestDetailsResponse { /// If the result was TTS, this is the raw inference text. pub maybe_raw_inference_text: Option, + + /// For Comfy / Video Style Transfer jobs, this might include + /// the name of the selected style. + pub maybe_style_name: Option, } /// Details about the ongoing job status @@ -250,6 +255,7 @@ fn record_to_payload( maybe_model_token: record.request_details.maybe_model_token, maybe_model_title: record.request_details.maybe_model_title, maybe_raw_inference_text: record.request_details.maybe_raw_inference_text, + maybe_style_name: record.request_details.maybe_style_name, }, status: StatusDetailsResponse { status: record.status,