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;