diff --git a/crates/lib/migration/src/text_to_speech/get_tts_model_info_migration.rs b/crates/lib/migration/src/text_to_speech/get_tts_model_info_migration.rs index 91600e884e..8ccf606782 100644 --- a/crates/lib/migration/src/text_to_speech/get_tts_model_info_migration.rs +++ b/crates/lib/migration/src/text_to_speech/get_tts_model_info_migration.rs @@ -8,8 +8,10 @@ use enums::common::visibility::Visibility; use errors::AnyhowResult; use mysql_queries::column_types::vocoder_type::VocoderType; use mysql_queries::queries::model_weights::get::get_weight_for_legacy_tts_info::{get_weight_for_legacy_tts_info_with_connection, ModelWeightForLegacyTtsInfo}; +use mysql_queries::queries::model_weights::get::get_weight_for_legacy_tts_info_with_legacy_tts_token::get_weight_for_legacy_tts_info_with_legacy_tts_token_with_connection; use mysql_queries::queries::tts::tts_models::get_tts_model::{get_tts_model_by_token_using_connection, TtsModelRecord}; use tokens::tokens::model_weights::ModelWeightToken; +use tokens::tokens::tts_models::TtsModelToken; /// Get TTS model /// This is for the tts model info page @@ -21,13 +23,26 @@ pub async fn get_tts_model_info_migration( ) -> AnyhowResult> { // NB: This is temporary migration code as we switch from the `tts_models` table to the `model_weights` table. if use_weights_table { - let token = ModelWeightToken::new_from_str(token); - let maybe_model = get_weight_for_legacy_tts_info_with_connection( - &token, - can_see_deleted, - mysql_connection - ).await?; + let maybe_model; + + if token.starts_with(TtsModelToken::token_prefix()) { + let token = TtsModelToken::new_from_str(token); + + maybe_model = get_weight_for_legacy_tts_info_with_legacy_tts_token_with_connection( + &token, + can_see_deleted, + mysql_connection + ).await?; + } else { + let token = ModelWeightToken::new_from_str(token); + + maybe_model = get_weight_for_legacy_tts_info_with_connection( + &token, + can_see_deleted, + mysql_connection + ).await?; + } Ok(maybe_model.map(|model| TtsModelInfoMigrationWrapper::ModelWeight(model))) diff --git a/crates/lib/mysql_queries/src/queries/model_weights/get/get_weight_for_legacy_tts_info_with_legacy_tts_token.rs b/crates/lib/mysql_queries/src/queries/model_weights/get/get_weight_for_legacy_tts_info_with_legacy_tts_token.rs new file mode 100644 index 0000000000..ec7b7725e1 --- /dev/null +++ b/crates/lib/mysql_queries/src/queries/model_weights/get/get_weight_for_legacy_tts_info_with_legacy_tts_token.rs @@ -0,0 +1,236 @@ +use anyhow::anyhow; +use chrono::{DateTime, Utc}; +use log::error; +use sqlx::{MySql, MySqlPool}; +use sqlx::pool::PoolConnection; + +use enums::by_table::model_weights::weights_category::WeightsCategory; +use enums::by_table::model_weights::weights_types::WeightsType; +use enums::common::visibility::Visibility; +use errors::AnyhowResult; +use tokens::tokens::{model_weights::ModelWeightToken, users::UserToken}; +use tokens::tokens::tts_models::TtsModelToken; + +use crate::column_types::vocoder_type::VocoderType; +use crate::queries::model_weights::get::get_weight_for_legacy_tts_info::{ModelWeightForLegacyTtsInfo, RawWeight}; + +pub async fn get_weight_for_legacy_tts_info_with_legacy_tts_token( + legacy_tts_model_token: &TtsModelToken, + can_see_deleted: bool, + mysql_pool: &MySqlPool +) -> AnyhowResult> { + let mut connection = mysql_pool.acquire().await?; + get_weight_for_legacy_tts_info_with_legacy_tts_token_with_connection(legacy_tts_model_token, can_see_deleted, &mut connection).await +} + +pub async fn get_weight_for_legacy_tts_info_with_legacy_tts_token_with_connection( + legacy_tts_model_token: &TtsModelToken, + can_see_deleted: bool, + mysql_connection: &mut PoolConnection +) -> AnyhowResult> { + let maybe_result = if can_see_deleted { + select_include_deleted(legacy_tts_model_token, mysql_connection).await + } else { + select_without_deleted(legacy_tts_model_token, mysql_connection).await + }; + + let record: RawWeight = match maybe_result { + Ok(record) => record, + Err(sqlx::Error::RowNotFound) => { + return Ok(None); + } + Err(err) => { + error!("Error fetching weights by token: {:?}", err); + return Err(anyhow!("Error fetching weights by token: {:?}", err)); + } + }; + + // unwrap the result + + Ok( + Some(ModelWeightForLegacyTtsInfo { + token: record.token, + title: record.title, + weights_type: record.weights_type, + weights_category: record.weights_category, + maybe_description_markdown: record.maybe_description_markdown, + maybe_description_rendered_html: record.maybe_description_rendered_html, + creator_user_token: record.creator_user_token, + creator_username: record.creator_username, + creator_display_name: record.creator_display_name, + creator_gravatar_hash: record.creator_gravatar_hash, + creator_ip_address: record.creator_ip_address, + creator_set_visibility: record.creator_set_visibility, + maybe_last_update_user_token: record.maybe_last_update_user_token, + original_download_url: record.original_download_url, + original_filename: record.original_filename, + file_size_bytes: record.file_size_bytes, + file_checksum_sha2: record.file_checksum_sha2, + public_bucket_hash: record.public_bucket_hash, + maybe_public_bucket_prefix: record.maybe_public_bucket_prefix, + maybe_public_bucket_extension: record.maybe_public_bucket_extension, + maybe_cover_image_public_bucket_hash: record.maybe_cover_image_public_bucket_hash, + maybe_cover_image_public_bucket_prefix: record.maybe_cover_image_public_bucket_prefix, + maybe_cover_image_public_bucket_extension: record.maybe_cover_image_public_bucket_extension, + maybe_ratings_positive_count: record.maybe_ratings_positive_count, + maybe_ratings_negative_count: record.maybe_ratings_negative_count, + maybe_bookmark_count: record.maybe_bookmark_count, + maybe_ietf_language_tag: record.maybe_ietf_language_tag, + maybe_ietf_primary_language_subtag: record.maybe_ietf_primary_language_subtag, + maybe_default_pretrained_vocoder: record.maybe_default_pretrained_vocoder, + maybe_text_pipeline_type: record.maybe_text_pipeline_type, + version: record.version, + created_at: record.created_at, + updated_at: record.updated_at, + user_deleted_at: record.user_deleted_at, + mod_deleted_at: record.mod_deleted_at, + }) + ) +} + +async fn select_include_deleted( + legacy_tts_model_token: &TtsModelToken, + mysql_connection: &mut PoolConnection +) -> Result { + sqlx + ::query_as!( + RawWeight, + r#" + SELECT + wt.token as `token: tokens::tokens::model_weights::ModelWeightToken`, + wt.title, + wt.weights_type as `weights_type: enums::by_table::model_weights::weights_types::WeightsType`, + wt.weights_category as `weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`, + wt.maybe_description_markdown, + wt.maybe_description_rendered_html, + + wt.creator_user_token as `creator_user_token: tokens::tokens::users::UserToken`, + users.username as creator_username, + users.display_name as creator_display_name, + users.email_gravatar_hash AS creator_gravatar_hash, + + wt.creator_ip_address, + wt.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`, + wt.maybe_last_update_user_token as `maybe_last_update_user_token: tokens::tokens::users::UserToken`, + wt.original_download_url, + wt.original_filename, + wt.file_size_bytes, + wt.file_checksum_sha2, + + wt.public_bucket_hash, + wt.maybe_public_bucket_prefix, + wt.maybe_public_bucket_extension, + + cover_image.public_bucket_directory_hash as maybe_cover_image_public_bucket_hash, + cover_image.maybe_public_bucket_prefix as maybe_cover_image_public_bucket_prefix, + cover_image.maybe_public_bucket_extension as maybe_cover_image_public_bucket_extension, + + entity_stats.ratings_positive_count as maybe_ratings_positive_count, + entity_stats.ratings_negative_count as maybe_ratings_negative_count, + entity_stats.bookmark_count as maybe_bookmark_count, + + w_extension.ietf_language_tag as maybe_ietf_language_tag, + w_extension.ietf_primary_language_subtag as maybe_ietf_primary_language_subtag, + w_extension.maybe_default_pretrained_vocoder as `maybe_default_pretrained_vocoder: crate::column_types::vocoder_type::VocoderType`, + w_extension.text_pipeline_type as maybe_text_pipeline_type, + + wt.version, + wt.created_at, + wt.updated_at, + wt.user_deleted_at, + wt.mod_deleted_at + + FROM model_weights as wt + JOIN users + ON users.token = wt.creator_user_token + LEFT OUTER JOIN media_files as cover_image + ON cover_image.token = wt.maybe_cover_image_media_file_token + LEFT OUTER JOIN entity_stats + ON entity_stats.entity_type = "model_weight" + AND entity_stats.entity_token = wt.token + + LEFT OUTER JOIN model_weights_extension_tts_details as w_extension + ON w_extension.model_weights_token = wt.token + + WHERE + wt.maybe_migration_old_model_token = ? + "#, + legacy_tts_model_token.as_str() + ) + .fetch_one(&mut **mysql_connection).await +} + +async fn select_without_deleted( + legacy_tts_model_token: &TtsModelToken, + mysql_connection: &mut PoolConnection +) -> Result { + //as `weights_type: enums::by_table::model_weights::weights_types::WeightsType`, + //as `weights_category: enums::by_table::model_weights::weights_category::WeightsCategory` + sqlx + ::query_as!( + RawWeight, + r#" + SELECT + wt.token as `token: tokens::tokens::model_weights::ModelWeightToken`, + wt.title, + wt.weights_type as `weights_type: enums::by_table::model_weights::weights_types::WeightsType`, + wt.weights_category as `weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`, + wt.maybe_description_markdown, + wt.maybe_description_rendered_html, + wt.creator_ip_address, + wt.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`, + + wt.creator_user_token as `creator_user_token: tokens::tokens::users::UserToken`, + users.username as creator_username, + users.display_name as creator_display_name, + users.email_gravatar_hash AS creator_gravatar_hash, + + wt.maybe_last_update_user_token as `maybe_last_update_user_token: tokens::tokens::users::UserToken`, + wt.original_download_url, + wt.original_filename, + wt.file_size_bytes, + wt.file_checksum_sha2, + wt.public_bucket_hash, + wt.maybe_public_bucket_prefix, + wt.maybe_public_bucket_extension, + + cover_image.public_bucket_directory_hash as maybe_cover_image_public_bucket_hash, + cover_image.maybe_public_bucket_prefix as maybe_cover_image_public_bucket_prefix, + cover_image.maybe_public_bucket_extension as maybe_cover_image_public_bucket_extension, + + entity_stats.ratings_positive_count as maybe_ratings_positive_count, + entity_stats.ratings_negative_count as maybe_ratings_negative_count, + entity_stats.bookmark_count as maybe_bookmark_count, + + w_extension.ietf_language_tag as maybe_ietf_language_tag, + w_extension.ietf_primary_language_subtag as maybe_ietf_primary_language_subtag, + w_extension.maybe_default_pretrained_vocoder as `maybe_default_pretrained_vocoder: crate::column_types::vocoder_type::VocoderType`, + w_extension.text_pipeline_type as maybe_text_pipeline_type, + + wt.version, + wt.created_at, + wt.updated_at, + wt.user_deleted_at, + wt.mod_deleted_at + + FROM model_weights as wt + JOIN users + ON users.token = wt.creator_user_token + LEFT OUTER JOIN media_files as cover_image + ON cover_image.token = wt.maybe_cover_image_media_file_token + LEFT OUTER JOIN entity_stats + ON entity_stats.entity_type = "model_weight" + AND entity_stats.entity_token = wt.token + + LEFT OUTER JOIN model_weights_extension_tts_details as w_extension + ON w_extension.model_weights_token = wt.token + + WHERE + wt.maybe_migration_old_model_token = ? + AND wt.user_deleted_at IS NULL + AND wt.mod_deleted_at IS NULL + "#, + legacy_tts_model_token.as_str() + ) + .fetch_one(&mut **mysql_connection).await +} diff --git a/crates/lib/mysql_queries/src/queries/model_weights/get/mod.rs b/crates/lib/mysql_queries/src/queries/model_weights/get/mod.rs index 998f00bea6..cc79249de6 100644 --- a/crates/lib/mysql_queries/src/queries/model_weights/get/mod.rs +++ b/crates/lib/mysql_queries/src/queries/model_weights/get/mod.rs @@ -2,3 +2,4 @@ pub mod get_weight; pub mod get_weight_for_legacy_tts_enqueue; pub mod get_weight_for_legacy_tts_inference; pub mod get_weight_for_legacy_tts_info; +pub mod get_weight_for_legacy_tts_info_with_legacy_tts_token;