diff --git a/crates/lib/mysql_queries/src/payloads/generic_inference_args.rs b/crates/lib/mysql_queries/src/payloads/generic_inference_args.rs index c266f37be2..1d00857e99 100644 --- a/crates/lib/mysql_queries/src/payloads/generic_inference_args.rs +++ b/crates/lib/mysql_queries/src/payloads/generic_inference_args.rs @@ -8,35 +8,61 @@ use tokens::voice_conversion::model::VoiceConversionModelToken; #[derive(Clone, Serialize, Deserialize)] pub struct GenericInferenceArgs { /// The category of inference (probably also present in a top-level field) - pub inference_category: Option, + #[serde(rename = "cat")] // NB: DO NOT CHANGE. It could break live jobs. Renamed to consume fewer bytes + #[serde(alias = "inference_category")] + pub inference_category: Option, /// REQUIRED. /// Actual type-specific arguments. pub args: Option, } +/// Same as `InferenceCategory`, but serialized in fewer characters +/// Do not change the values. +#[derive(Clone, Copy, Eq, PartialEq, Hash, Ord, PartialOrd, Deserialize, Serialize)] +pub enum InferenceCategoryAbbreviated { + #[serde(rename = "tts")] // NB: DO NOT CHANGE. It could break live jobs. Renamed to be fewer bytes. + #[serde(alias = "text_to_speech")] + TextToSpeech, + + #[serde(rename = "vc")] // NB: DO NOT CHANGE. It could break live jobs. Renamed to be fewer bytes. + #[serde(alias = "voice_conversion")] + VoiceConversion, +} + #[derive(Clone, Serialize, Deserialize)] pub enum PolymorphicInferenceArgs { TextToSpeechInferenceArgs { - /// REQUIRED. - /// The text to speech model to use. - model_token: Option, + // No arguments yet. + // It might be best to just not include this when not used. }, VoiceConversionInferenceArgs { - /// REQUIRED. - /// The voice conversion model to use. - model_token: Option, - - /// OPTIONAL. + /// OPTIONAL. (*Technically required until we add other inference inputs - eg TTS audio out, stems, etc.) /// If set, the media file to use as the source in the conversion. /// It's "optional" in case we use other types of records in the future. maybe_media_token: Option, }, } +impl InferenceCategoryAbbreviated { + pub fn from_inference_category(category: InferenceCategory) -> Self { + match category { + InferenceCategory::TextToSpeech => Self::TextToSpeech, + InferenceCategory::VoiceConversion => Self::VoiceConversion, + } + } + + pub fn to_inference_category(self) -> InferenceCategory { + match self { + Self::TextToSpeech => InferenceCategory::TextToSpeech, + Self::VoiceConversion => InferenceCategory::VoiceConversion, + } + } +} + #[cfg(test)] mod tests { - use crate::payloads::generic_inference_args::{GenericInferenceArgs, PolymorphicInferenceArgs}; + use crate::payloads::generic_inference_args::{GenericInferenceArgs, InferenceCategoryAbbreviated, PolymorphicInferenceArgs}; use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory; use tokens::files::media_upload::MediaUploadToken; use tokens::tokens::tts_models::TtsModelToken; @@ -45,17 +71,15 @@ mod tests { #[test] fn typical_tts_args_serialize() { let args = GenericInferenceArgs { - inference_category: Some(InferenceCategory::VoiceConversion), + inference_category: Some(InferenceCategoryAbbreviated::VoiceConversion), args: Some(PolymorphicInferenceArgs::TextToSpeechInferenceArgs { - model_token: Some(TtsModelToken::new_from_str("tts_model_token")), }), }; let json = serde_json::ser::to_string(&args).unwrap(); // NB: Assert the serialized form. If this changes and the test breaks, be careful about migrating. - assert_eq!(json, - r#"{"inference_category":"voice_conversion","args":{"TextToSpeechInferenceArgs":{"model_token":"tts_model_token"}}}"#.to_string()); + assert_eq!(json, r#"{"cat":"vc","args":{"TextToSpeechInferenceArgs":{}}}"#.to_string()); // NB: Make sure we don't overflow the DB field capacity (TEXT column). assert!(json.len() < 1000); @@ -64,9 +88,8 @@ mod tests { #[test] fn typical_voice_conversion_args_serialize() { let args = GenericInferenceArgs { - inference_category: Some(InferenceCategory::VoiceConversion), + inference_category: Some(InferenceCategoryAbbreviated::VoiceConversion), args: Some(PolymorphicInferenceArgs::VoiceConversionInferenceArgs { - model_token: Some(VoiceConversionModelToken::new_from_str("vc_model_token")), maybe_media_token: Some(MediaUploadToken::new_from_str("media_token")), }), }; @@ -75,7 +98,7 @@ mod tests { // NB: Assert the serialized form. If this changes and the test breaks, be careful about migrating. assert_eq!(json, - r#"{"inference_category":"voice_conversion","args":{"VoiceConversionInferenceArgs":{"model_token":"vc_model_token","maybe_media_token":"media_token"}}}"#.to_string()); + r#"{"cat":"vc","args":{"VoiceConversionInferenceArgs":{"maybe_media_token":"media_token"}}}"#.to_string()); // NB: Make sure we don't overflow the DB field capacity (TEXT column). assert!(json.len() < 1000); @@ -90,9 +113,8 @@ mod tests { assert_eq!(json, "null"); args = Some(GenericInferenceArgs { - inference_category: Some(InferenceCategory::VoiceConversion), + inference_category: Some(InferenceCategoryAbbreviated::VoiceConversion), args: Some(PolymorphicInferenceArgs::VoiceConversionInferenceArgs { - model_token: Some(VoiceConversionModelToken::new_from_str("vc_model_token")), maybe_media_token: Some(MediaUploadToken::new_from_str("media_token")), }), }); @@ -101,7 +123,7 @@ mod tests { // NB: Assert the serialized form. If this changes and the test breaks, be careful about migrating. assert_eq!(json, - r#"{"inference_category":"voice_conversion","args":{"VoiceConversionInferenceArgs":{"model_token":"vc_model_token","maybe_media_token":"media_token"}}}"#.to_string()); + r#"{"cat":"vc","args":{"VoiceConversionInferenceArgs":{"maybe_media_token":"media_token"}}}"#.to_string()); // NB: Make sure we don't overflow the DB field capacity (TEXT column). assert!(json.len() < 1000); diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs index 8d0bb17e47..76eabc1983 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs @@ -18,7 +18,7 @@ use http_server_common::request::get_request_api_token::get_request_api_token; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; use log::{info, warn}; -use mysql_queries::payloads::generic_inference_args::{GenericInferenceArgs, PolymorphicInferenceArgs}; +use mysql_queries::payloads::generic_inference_args::{GenericInferenceArgs, InferenceCategoryAbbreviated}; use mysql_queries::queries::generic_inference::web::insert_generic_inference_job::{insert_generic_inference_job, InsertGenericInferenceArgs}; use mysql_queries::queries::tts::tts_inference_jobs::insert_tts_inference_job::TtsInferenceJobInsertBuilder; use mysql_queries::queries::tts::tts_models::get_tts_model::TtsModelRecord; @@ -29,7 +29,6 @@ use rand::seq::SliceRandom; use redis_common::redis_keys::RedisKeys; use std::fmt; use std::sync::Arc; -use tokens::tokens::tts_models::TtsModelToken; use tokens::users::user::UserToken; use tts_common::priority::{FAKEYOU_INVESTOR_PRIORITY_LEVEL, FAKEYOU_DEFAULT_VALID_API_TOKEN_PRIORITY_LEVEL}; use user_input_common::check_for_slurs::contains_slurs; @@ -368,10 +367,8 @@ pub async fn enqueue_infer_tts_handler( maybe_model_type: None, // TODO(bt, 2023-04-08): Add this maybe_model_token: Some(request.tts_model_token.as_str()), maybe_inference_args: Some(GenericInferenceArgs { - inference_category: Some(InferenceCategory::TextToSpeech), - args: Some(PolymorphicInferenceArgs::TextToSpeechInferenceArgs { - model_token: Some(TtsModelToken::new_from_str(&request.tts_model_token)), - }), + inference_category: Some(InferenceCategoryAbbreviated::TextToSpeech), + args: None, // NB: We don't need to encode any args yet. }), maybe_raw_inference_text: Some(inference_text.as_str()), maybe_creator_user_token: maybe_creator_user_token_typed.as_ref(), diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/inference/enqueue_voice_conversion_inference.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/inference/enqueue_voice_conversion_inference.rs index b5e38a9c0a..8fa968e702 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/inference/enqueue_voice_conversion_inference.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/voice_conversion/inference/enqueue_voice_conversion_inference.rs @@ -15,7 +15,7 @@ use enums::common::visibility::Visibility; use http_server_common::request::get_request_header_optional::get_request_header_optional; use http_server_common::request::get_request_ip::get_request_ip; use log::{info, warn}; -use mysql_queries::payloads::generic_inference_args::{GenericInferenceArgs, PolymorphicInferenceArgs}; +use mysql_queries::payloads::generic_inference_args::{GenericInferenceArgs, InferenceCategoryAbbreviated, PolymorphicInferenceArgs}; use mysql_queries::queries::generic_inference::web::insert_generic_inference_job::{InsertGenericInferenceArgs, insert_generic_inference_job}; use r2d2_redis::redis::Commands; use redis_common::redis_keys::RedisKeys; @@ -227,9 +227,8 @@ pub async fn enqueue_voice_conversion_inference_handler( maybe_model_type: None, // TODO(bt, 2023-04-08): Add this. maybe_model_token: Some(model_token.as_str()), maybe_inference_args: Some(GenericInferenceArgs { - inference_category: Some(InferenceCategory::VoiceConversion), + inference_category: Some(InferenceCategoryAbbreviated::VoiceConversion), args: Some(PolymorphicInferenceArgs::VoiceConversionInferenceArgs { - model_token: Some(model_token.clone()), // FIXME: Because of previous borrow maybe_media_token: Some(media_token), }), }),