diff --git a/crates/_types/enums/src/lib.rs b/crates/_types/enums/src/lib.rs index f9cd1566e8..f59f68c2fe 100644 --- a/crates/_types/enums/src/lib.rs +++ b/crates/_types/enums/src/lib.rs @@ -28,3 +28,5 @@ mod macros; pub mod core; pub mod files; +pub mod ml; +pub mod workers; diff --git a/crates/_types/enums/src/ml/mod.rs b/crates/_types/enums/src/ml/mod.rs new file mode 100644 index 0000000000..19ebf80f4f --- /dev/null +++ b/crates/_types/enums/src/ml/mod.rs @@ -0,0 +1 @@ +pub mod vocoder_type; diff --git a/crates/_types/reusable_types/src/db/enums/vocoder_type.rs b/crates/_types/enums/src/ml/vocoder_type.rs similarity index 96% rename from crates/_types/reusable_types/src/db/enums/vocoder_type.rs rename to crates/_types/enums/src/ml/vocoder_type.rs index f25e432b22..6443244394 100644 --- a/crates/_types/reusable_types/src/db/enums/vocoder_type.rs +++ b/crates/_types/enums/src/ml/vocoder_type.rs @@ -33,7 +33,7 @@ impl VocoderType { #[cfg(test)] mod tests { - use crate::db::enums::vocoder_type::VocoderType; + use crate::ml::vocoder_type::VocoderType; use crate::test_helpers::assert_serialization; #[test] diff --git a/crates/_types/reusable_types/src/db/enums/generic_download_type.rs b/crates/_types/enums/src/workers/generic_download_type.rs similarity index 96% rename from crates/_types/reusable_types/src/db/enums/generic_download_type.rs rename to crates/_types/enums/src/workers/generic_download_type.rs index 2a7971cca7..87810a635a 100644 --- a/crates/_types/reusable_types/src/db/enums/generic_download_type.rs +++ b/crates/_types/enums/src/workers/generic_download_type.rs @@ -1,3 +1,6 @@ + +// TODO: Use macro-derived impls + /// Our "generic downloads" pipeline supports a wide variety of ML models and other media. /// They are serialized in the database table `generic_download_jobs` as a VARCHAR(32). /// @@ -59,7 +62,7 @@ impl GenericDownloadType { #[cfg(test)] mod tests { - use crate::db::enums::generic_download_type::GenericDownloadType; + use crate::workers::generic_download_type::GenericDownloadType; use crate::test_helpers::assert_serialization; #[test] diff --git a/crates/_types/reusable_types/src/db/enums/generic_inference_type.rs b/crates/_types/enums/src/workers/generic_inference_type.rs similarity index 94% rename from crates/_types/reusable_types/src/db/enums/generic_inference_type.rs rename to crates/_types/enums/src/workers/generic_inference_type.rs index 2bb31d1025..e0d650849f 100644 --- a/crates/_types/reusable_types/src/db/enums/generic_inference_type.rs +++ b/crates/_types/enums/src/workers/generic_inference_type.rs @@ -1,3 +1,6 @@ + +// TODO: Use macro-derived impls + /// Our "generic inference" pipeline supports a wide variety of ML models and other media. /// Each type of inference is identified by the following enum variants. /// These types are present in the HTTP API and database columns as serialized here. @@ -34,7 +37,7 @@ impl GenericInferenceType { #[cfg(test)] mod tests { - use crate::db::enums::generic_inference_type::GenericInferenceType; + use crate::workers::generic_inference_type::GenericInferenceType; use crate::test_helpers::assert_serialization; #[test] diff --git a/crates/_types/enums/src/workers/mod.rs b/crates/_types/enums/src/workers/mod.rs new file mode 100644 index 0000000000..f6716b69e8 --- /dev/null +++ b/crates/_types/enums/src/workers/mod.rs @@ -0,0 +1,2 @@ +pub mod generic_inference_type; +pub mod generic_download_type; diff --git a/crates/_types/reusable_types/src/db/enums/mod.rs b/crates/_types/reusable_types/src/db/enums/mod.rs deleted file mode 100644 index 21cc5a7616..0000000000 --- a/crates/_types/reusable_types/src/db/enums/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -//! This is meant to handle `enum` or `enum`-like columns in the database. -//! These are not Rust-like enums (sum types) that can have internal payloads. - -pub mod generic_download_type; -pub mod generic_inference_type; -pub mod vocoder_type; diff --git a/crates/_types/reusable_types/src/db/mod.rs b/crates/_types/reusable_types/src/db/mod.rs index 9a873485f4..7a8b2c585b 100644 --- a/crates/_types/reusable_types/src/db/mod.rs +++ b/crates/_types/reusable_types/src/db/mod.rs @@ -1,2 +1 @@ -pub mod enums; pub mod payloads; \ No newline at end of file diff --git a/crates/lib/database_queries/src/queries/generic_download/job/list_available_generic_download_jobs.rs b/crates/lib/database_queries/src/queries/generic_download/job/list_available_generic_download_jobs.rs index d1cb02cf9d..5419080336 100644 --- a/crates/lib/database_queries/src/queries/generic_download/job/list_available_generic_download_jobs.rs +++ b/crates/lib/database_queries/src/queries/generic_download/job/list_available_generic_download_jobs.rs @@ -5,7 +5,7 @@ use crate::column_types::job_status::JobStatus; use crate::queries::generic_download::job::_keys::GenericDownloadJobId; use crate::tokens::Tokens; use enums::core::visibility::Visibility; -use reusable_types::db::enums::generic_download_type::GenericDownloadType; +use enums::workers::generic_download_type::GenericDownloadType; use sqlx::MySqlPool; use std::path::Path; use tokens::jobs::download::DownloadJobToken; @@ -47,7 +47,7 @@ SELECT creator_ip_address, creator_set_visibility as `creator_set_visibility: enums::core::visibility::Visibility`, - download_type as `download_type: reusable_types::db::enums::generic_download_type::GenericDownloadType`, + download_type as `download_type: enums::workers::generic_download_type::GenericDownloadType`, download_url, title, diff --git a/crates/lib/database_queries/src/queries/generic_download/web/get_generic_download_job_status.rs b/crates/lib/database_queries/src/queries/generic_download/web/get_generic_download_job_status.rs index 2361a2da00..ef1d035dbe 100644 --- a/crates/lib/database_queries/src/queries/generic_download/web/get_generic_download_job_status.rs +++ b/crates/lib/database_queries/src/queries/generic_download/web/get_generic_download_job_status.rs @@ -2,7 +2,6 @@ use anyhow::anyhow; use chrono::{DateTime, Utc}; use container_common::anyhow_result::AnyhowResult; use log::warn; -use reusable_types::db::enums::generic_download_type::GenericDownloadType; use sqlx::MySqlPool; use tokens::jobs::download::DownloadJobToken; diff --git a/crates/lib/database_queries/src/queries/generic_download/web/insert_generic_download_job.rs b/crates/lib/database_queries/src/queries/generic_download/web/insert_generic_download_job.rs index f7d02a15ff..356a5ad5a6 100644 --- a/crates/lib/database_queries/src/queries/generic_download/web/insert_generic_download_job.rs +++ b/crates/lib/database_queries/src/queries/generic_download/web/insert_generic_download_job.rs @@ -1,7 +1,7 @@ use anyhow::anyhow; use container_common::anyhow_result::AnyhowResult; use enums::core::visibility::Visibility; -use reusable_types::db::enums::generic_download_type::GenericDownloadType; +use enums::workers::generic_download_type::GenericDownloadType; use sqlx::MySqlPool; use tokens::jobs::download::DownloadJobToken; diff --git a/crates/lib/database_queries/src/queries/generic_inference/job/list_available_generic_inference_jobs.rs b/crates/lib/database_queries/src/queries/generic_inference/job/list_available_generic_inference_jobs.rs index bc4fb8afe0..ef94050606 100644 --- a/crates/lib/database_queries/src/queries/generic_inference/job/list_available_generic_inference_jobs.rs +++ b/crates/lib/database_queries/src/queries/generic_inference/job/list_available_generic_inference_jobs.rs @@ -5,7 +5,7 @@ use crate::column_types::job_status::JobStatus; use crate::helpers::boolean_converters::i8_to_bool; use crate::queries::generic_inference::job::_keys::GenericInferenceJobId; use enums::core::visibility::Visibility; -use reusable_types::db::enums::generic_inference_type::GenericInferenceType; +use enums::workers::generic_inference_type::GenericInferenceType; use sqlx::MySqlPool; use std::path::Path; use tokens::jobs::inference::InferenceJobToken; @@ -51,7 +51,7 @@ SELECT id as `id: crate::queries::generic_inference::job::_keys::GenericInferenceJobId`, token AS `inference_job_token: tokens::jobs::inference::InferenceJobToken`, - inference_type as `inference_type: reusable_types::db::enums::generic_inference_type::GenericInferenceType`, + inference_type as `inference_type: enums::workers::generic_inference_type::GenericInferenceType`, maybe_inference_args, maybe_raw_inference_text, maybe_model_token, diff --git a/crates/lib/database_queries/src/queries/generic_inference/web/insert_generic_inference_job.rs b/crates/lib/database_queries/src/queries/generic_inference/web/insert_generic_inference_job.rs index 7fab78333b..033f630857 100644 --- a/crates/lib/database_queries/src/queries/generic_inference/web/insert_generic_inference_job.rs +++ b/crates/lib/database_queries/src/queries/generic_inference/web/insert_generic_inference_job.rs @@ -1,7 +1,7 @@ use anyhow::anyhow; use container_common::anyhow_result::AnyhowResult; use enums::core::visibility::Visibility; -use reusable_types::db::enums::generic_inference_type::GenericInferenceType; +use enums::workers::generic_inference_type::GenericInferenceType; use sqlx::MySqlPool; use tokens::jobs::inference::InferenceJobToken; use tokens::users::user::UserToken; diff --git a/crates/lib/database_queries/src/queries/tts/tts_models/get_tts_model_for_inference.rs b/crates/lib/database_queries/src/queries/tts/tts_models/get_tts_model_for_inference.rs index 330b3a4ca2..1d35e98250 100644 --- a/crates/lib/database_queries/src/queries/tts/tts_models/get_tts_model_for_inference.rs +++ b/crates/lib/database_queries/src/queries/tts/tts_models/get_tts_model_for_inference.rs @@ -4,10 +4,10 @@ #![forbid(unused_variables)] use chrono::{Utc, DateTime}; +use enums::ml::vocoder_type::VocoderType; use log::warn; use sqlx::MySqlPool; use sqlx; -use reusable_types::db::enums::vocoder_type::VocoderType; // TODO: Can probably just reuse another query. @@ -91,7 +91,7 @@ SELECT tts.maybe_default_pretrained_vocoder, tts.maybe_custom_vocoder_token, - vocoder.vocoder_type as `maybe_custom_vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`, + vocoder.vocoder_type as `maybe_custom_vocoder_type: enums::ml::vocoder_type::VocoderType`, vocoder.title as maybe_custom_vocoder_title, vocoder.private_bucket_hash as maybe_custom_vocoder_private_bucket_hash, diff --git a/crates/lib/database_queries/src/queries/vocoder/get_vocoder_model.rs b/crates/lib/database_queries/src/queries/vocoder/get_vocoder_model.rs index aa22ace7bc..e2ec1fc6a9 100644 --- a/crates/lib/database_queries/src/queries/vocoder/get_vocoder_model.rs +++ b/crates/lib/database_queries/src/queries/vocoder/get_vocoder_model.rs @@ -8,8 +8,8 @@ use chrono::{DateTime, Utc}; use container_common::anyhow_result::AnyhowResult; use crate::helpers::boolean_converters::i8_to_bool; use enums::core::visibility::Visibility; +use enums::ml::vocoder_type::VocoderType; use log::warn; -use reusable_types::db::enums::vocoder_type::VocoderType; use sqlx::MySqlPool; // FIXME: This is the old style of query scoping and shouldn't be copied. @@ -120,7 +120,7 @@ async fn select_including_deleted( r#" SELECT vocoder.token as vocoder_token, - vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`, + vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`, vocoder.creator_user_token, users.username as creator_username, @@ -168,7 +168,7 @@ async fn select_without_deleted( r#" SELECT vocoder.token as vocoder_token, - vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`, + vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`, vocoder.creator_user_token, users.username as creator_username, diff --git a/crates/lib/database_queries/src/queries/vocoder/insert_vocoder_model.rs b/crates/lib/database_queries/src/queries/vocoder/insert_vocoder_model.rs index bc3cb4f8ba..78f1db58cb 100644 --- a/crates/lib/database_queries/src/queries/vocoder/insert_vocoder_model.rs +++ b/crates/lib/database_queries/src/queries/vocoder/insert_vocoder_model.rs @@ -7,7 +7,7 @@ use anyhow::anyhow; use container_common::anyhow_result::AnyhowResult; use crate::tokens::Tokens; use enums::core::visibility::Visibility; -use reusable_types::db::enums::vocoder_type::VocoderType; +use enums::ml::vocoder_type::VocoderType; use sqlx::MySqlPool; use std::path::Path; diff --git a/crates/lib/database_queries/src/queries/vocoder/list_vocoder_models.rs b/crates/lib/database_queries/src/queries/vocoder/list_vocoder_models.rs index e0d905866b..46e2de7f8f 100644 --- a/crates/lib/database_queries/src/queries/vocoder/list_vocoder_models.rs +++ b/crates/lib/database_queries/src/queries/vocoder/list_vocoder_models.rs @@ -7,8 +7,8 @@ use anyhow::anyhow; use chrono::{DateTime, Utc}; use container_common::anyhow_result::AnyhowResult; use crate::helpers::boolean_converters::i8_to_bool; +use enums::ml::vocoder_type::VocoderType; use log::{warn, info}; -use reusable_types::db::enums::vocoder_type::VocoderType; use sqlx::MySqlPool; // FIXME: This is the old style of query scoping and shouldn't be copied. @@ -115,7 +115,7 @@ async fn list_vocoder_models_for_all_creators( r#" SELECT vocoder.token as vocoder_token, - vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`, + vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`, vocoder.creator_user_token, users.username as creator_username, users.display_name as creator_display_name, @@ -147,7 +147,7 @@ WHERE r#" SELECT vocoder.token as vocoder_token, - vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`, + vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`, vocoder.creator_user_token, users.username as creator_username, users.display_name as creator_display_name, @@ -187,7 +187,7 @@ async fn list_vocoder_models_creator_scoped( r#" SELECT vocoder.token as vocoder_token, - vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`, + vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`, vocoder.creator_user_token, users.username as creator_username, users.display_name as creator_display_name, @@ -221,7 +221,7 @@ WHERE r#" SELECT vocoder.token as vocoder_token, - vocoder.vocoder_type as `vocoder_type: reusable_types::db::enums::vocoder_type::VocoderType`, + vocoder.vocoder_type as `vocoder_type: enums::ml::vocoder_type::VocoderType`, vocoder.creator_user_token, users.username as creator_username, users.display_name as creator_display_name, diff --git a/crates/service/job/download_job/src/job_steps/process_single_job.rs b/crates/service/job/download_job/src/job_steps/process_single_job.rs index 15ed5e3814..6d1c3fe59a 100644 --- a/crates/service/job/download_job/src/job_steps/process_single_job.rs +++ b/crates/service/job/download_job/src/job_steps/process_single_job.rs @@ -10,9 +10,9 @@ use crate::job_types::tacotron::process_tacotron_model::process_tacotron_model; use database_queries::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob; use database_queries::queries::generic_download::job::mark_generic_download_job_done::mark_generic_download_job_done; use database_queries::queries::generic_download::job::mark_generic_download_job_pending_and_grab_lock::mark_generic_download_job_pending_and_grab_lock; +use enums::workers::generic_download_type::GenericDownloadType; use jobs_common::redis_job_status_logger::RedisJobStatusLogger; use log::{info, warn}; -use reusable_types::db::enums::generic_download_type::GenericDownloadType; use tempdir::TempDir; pub async fn process_single_job(job_state: &JobState, job: &AvailableDownloadJob) -> AnyhowResult<()> { diff --git a/crates/service/job/download_job/src/job_types/hifigan/process_hifigan_vocoder.rs b/crates/service/job/download_job/src/job_types/hifigan/process_hifigan_vocoder.rs index 16c3cd11b5..95c4324afe 100644 --- a/crates/service/job/download_job/src/job_types/hifigan/process_hifigan_vocoder.rs +++ b/crates/service/job/download_job/src/job_types/hifigan/process_hifigan_vocoder.rs @@ -8,9 +8,9 @@ use crate::JobState; use crate::job_steps::job_results::JobResults; use database_queries::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob; use database_queries::queries::vocoder::insert_vocoder_model::{Args, insert_vocoder_model}; +use enums::ml::vocoder_type::VocoderType; use jobs_common::redis_job_status_logger::RedisJobStatusLogger; use log::{info, warn}; -use reusable_types::db::enums::vocoder_type::VocoderType; use std::fs::File; use std::io::Read; use std::path::PathBuf; diff --git a/crates/service/job/download_job/src/job_types/hifigan_softvc/process_hifigan_softvc_vocoder.rs b/crates/service/job/download_job/src/job_types/hifigan_softvc/process_hifigan_softvc_vocoder.rs index 029f36b735..a8aa552d41 100644 --- a/crates/service/job/download_job/src/job_types/hifigan_softvc/process_hifigan_softvc_vocoder.rs +++ b/crates/service/job/download_job/src/job_types/hifigan_softvc/process_hifigan_softvc_vocoder.rs @@ -8,9 +8,9 @@ use crate::JobState; use crate::job_steps::job_results::JobResults; use database_queries::queries::generic_download::job::list_available_generic_download_jobs::AvailableDownloadJob; use database_queries::queries::vocoder::insert_vocoder_model::{Args, insert_vocoder_model}; +use enums::ml::vocoder_type::VocoderType; use jobs_common::redis_job_status_logger::RedisJobStatusLogger; use log::{info, warn}; -use reusable_types::db::enums::vocoder_type::VocoderType; use std::fs::File; use std::io::Read; use std::path::PathBuf; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/download_job/enqueue_generic_download.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/download_job/enqueue_generic_download.rs index 0ea1f440f9..c4d2ced1ed 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/download_job/enqueue_generic_download.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/download_job/enqueue_generic_download.rs @@ -13,11 +13,11 @@ use crate::validations::validate_idempotency_token_format::validate_idempotency_ use database_queries::queries::generic_download::web::insert_generic_download_job::{Args, insert_generic_download_job}; use database_queries::tokens::Tokens; use enums::core::visibility::Visibility; +use enums::workers::generic_download_type::GenericDownloadType; use http_server_common::request::get_request_ip::get_request_ip; use http_server_common::response::serialize_as_json_error::serialize_as_json_error; use log::{info, warn, log}; use regex::Regex; -use reusable_types::db::enums::generic_download_type::GenericDownloadType; use sqlx::error::DatabaseError; use sqlx::error::Error::Database; use sqlx::mysql::MySqlDatabaseError; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/media_uploads/upload_media.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/media_uploads/upload_media.rs index 277582f32e..25287fcf56 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/media_uploads/upload_media.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/media_uploads/upload_media.rs @@ -24,7 +24,6 @@ use http_server_common::response::serialize_as_json_error::serialize_as_json_err use log::{info, warn, log}; use media::decode_basic_audio_info::decode_basic_audio_info; use regex::Regex; -use reusable_types::db::enums::generic_download_type::GenericDownloadType; use reusable_types::db::payloads::MediaUploadDetails; use sqlx::error::DatabaseError; use sqlx::error::Error::Database; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/vocoders/get_vocoder.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/vocoders/get_vocoder.rs index 97fd1642b2..1a4de7fd3e 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/vocoders/get_vocoder.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/vocoders/get_vocoder.rs @@ -12,8 +12,8 @@ use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::server_state::ServerState; use database_queries::queries::vocoder::get_vocoder_model::get_vocoder_model_by_token; use enums::core::visibility::Visibility; +use enums::ml::vocoder_type::VocoderType; use log::warn; -use reusable_types::db::enums::vocoder_type::VocoderType; use std::fmt; use std::sync::Arc; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/vocoders/list_vocoders.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/vocoders/list_vocoders.rs index ce6cf287c9..933b0d22f6 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/vocoders/list_vocoders.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/vocoders/list_vocoders.rs @@ -10,8 +10,8 @@ use chrono::{DateTime, Utc}; use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::server_state::ServerState; use database_queries::queries::vocoder::list_vocoder_models::{list_vocoder_models, VocoderModelListItem}; +use enums::ml::vocoder_type::VocoderType; use log::warn; -use reusable_types::db::enums::vocoder_type::VocoderType; use std::fmt; use std::sync::Arc; 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 91d3c74b13..5a30a0ef3c 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 @@ -12,12 +12,12 @@ use crate::http_server::web_utils::response_error_helpers::to_simple_json_error; use crate::server_state::ServerState; use database_queries::queries::generic_inference::web::insert_generic_inference_job::{Args, insert_generic_inference_job}; use enums::core::visibility::Visibility; +use enums::workers::generic_inference_type::GenericInferenceType; 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 r2d2_redis::redis::Commands; use redis_common::redis_keys::RedisKeys; -use reusable_types::db::enums::generic_inference_type::GenericInferenceType; use std::fmt; use std::sync::Arc; use tokens::jobs::inference::InferenceJobToken; @@ -208,10 +208,18 @@ pub async fn enqueue_voice_conversion_inference_handler( info!("Creating voice conversion inference job record..."); + + // TODO TODO TODO TODO --- InferenceArgs. ! This is where the media token will live. + // - Also maybe move reusable_types stuff to `_types` as a manner of cleanup + // - Also figure out which serializable types are giving the DB trouble. Wasn't this solved? + // I don't want to call to_str, as_str, etc. everywhere. + // - INFERENCE JOB(1) -> Voice Conversion (w/ Docker sidecar) + // - INFERENCE JOB(2) -> Get it working with TTS too, and update the frontend + let query_result = insert_generic_inference_job(Args { job_token: &job_token, uuid_idempotency_token: &request.uuid_idempotency_token, - inference_type: GenericInferenceType::VoiceConversion, // TODO: Move from `reusable_types` + inference_type: GenericInferenceType::VoiceConversion, maybe_inference_args: None, // TODO: Include both tokens as well as allowed duration. maybe_raw_inference_text: None, maybe_model_token: Some(model_token),