diff --git a/_sql/migrations/2023-12-15-044416_model_weights_samples/down.sql b/_sql/migrations/2023-12-15-044416_model_weights_preview_samples/down.sql similarity index 75% rename from _sql/migrations/2023-12-15-044416_model_weights_samples/down.sql rename to _sql/migrations/2023-12-15-044416_model_weights_preview_samples/down.sql index 9834047d63..a28ccc7763 100644 --- a/_sql/migrations/2023-12-15-044416_model_weights_samples/down.sql +++ b/_sql/migrations/2023-12-15-044416_model_weights_preview_samples/down.sql @@ -2,4 +2,4 @@ -- noinspection SqlNoDataSourceInspectionForFile -- noinspection SqlResolveForFile -DROP TABLE model_weights_samples; +DROP TABLE model_weights_preview_samples; diff --git a/_sql/migrations/2023-12-15-044416_model_weights_samples/up.sql b/_sql/migrations/2023-12-15-044416_model_weights_preview_samples/up.sql similarity index 96% rename from _sql/migrations/2023-12-15-044416_model_weights_samples/up.sql rename to _sql/migrations/2023-12-15-044416_model_weights_preview_samples/up.sql index f8d6752a85..a4f5276caa 100644 --- a/_sql/migrations/2023-12-15-044416_model_weights_samples/up.sql +++ b/_sql/migrations/2023-12-15-044416_model_weights_preview_samples/up.sql @@ -2,7 +2,7 @@ -- noinspection SqlNoDataSourceInspectionForFile -- noinspection SqlResolveForFile -CREATE TABLE model_weights_samples ( +CREATE TABLE model_weights_preview_samples ( -- Not used for anything except replication. id BIGINT(20) NOT NULL AUTO_INCREMENT, diff --git a/_sql/migrations_squashed/model_weights.sql b/_sql/migrations_squashed/model_weights/model_weights.sql similarity index 95% rename from _sql/migrations_squashed/model_weights.sql rename to _sql/migrations_squashed/model_weights/model_weights.sql index dee5401c72..f9e0bf4836 100644 --- a/_sql/migrations_squashed/model_weights.sql +++ b/_sql/migrations_squashed/model_weights/model_weights.sql @@ -190,13 +190,12 @@ CREATE TABLE model_weights ( PRIMARY KEY (id), UNIQUE KEY (token) - -- TODO: - -- KEY index_model_type (model_type), - -- KEY fk_maybe_vocoder_token (maybe_vocoder_token), + -- TODO (this set should be good to go): + -- KEY index_weights_type (weights_type), + -- KEY index_weights_category (weights_category), -- KEY fk_creator_user_token (creator_user_token), -- KEY index_creator_set_visibility (creator_set_visibility), - -- KEY index_private_bucket_hash (private_bucket_hash), - -- KEY index_is_public_listing_approved (is_public_listing_approved), - -- KEY index_is_locked_from_user_modification (is_locked_from_user_modification) + -- KEY fk_maybe_avatar_media_file_token (maybe_avatar_media_file_token), + -- KEY fk_maybe_cover_media_file_token (maybe_cover_media_file_token) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/_sql/migrations_squashed/model_weights/model_weights_image_generation_details.sql b/_sql/migrations_squashed/model_weights/model_weights_image_generation_details.sql new file mode 100644 index 0000000000..26b3c9b7ba --- /dev/null +++ b/_sql/migrations_squashed/model_weights/model_weights_image_generation_details.sql @@ -0,0 +1,50 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +-- Every type of fine tuned model that users can upload. +CREATE TABLE model_weights_image_generation_details ( + -- Not used for anything except replication. + id BIGINT(20) NOT NULL AUTO_INCREMENT, + + -- Simultaneous primary and foreign key. + -- This should match a single record in the `model_weights` table. + -- This turns this table into a polymorphic extension table. + model_weights_token VARCHAR(32) NOT NULL, + + + -- ========== IMAGE GENERATION MODEL METADATA ========== + + -- RVC (v2) specific - whether the model has an index file associated with it + -- These files improve the quality of the results. + vc_has_index_file BOOLEAN NOT NULL DEFAULT FALSE, + + -- ========== VECTOR CLOCK ========== + + -- Incremented with every update. + version INT NOT NULL DEFAULT 0, + + + -- ========== TIMESTAMPS ========== + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + -- If this is removed by a mod. + -- It completely disappears from the system. + user_deleted_at TIMESTAMP NULL, + mod_deleted_at TIMESTAMP NULL, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY (model_weights_token) + -- TODO: + -- KEY index_model_type (model_type), + -- KEY fk_maybe_vocoder_token (maybe_vocoder_token), + -- KEY fk_creator_user_token (creator_user_token), + -- KEY index_creator_set_visibility (creator_set_visibility), + -- KEY index_private_bucket_hash (private_bucket_hash), + -- KEY index_is_public_listing_approved (is_public_listing_approved), + -- KEY index_is_locked_from_user_modification (is_locked_from_user_modification) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/_sql/migrations_squashed/model_weights/model_weights_preview_samples.sql b/_sql/migrations_squashed/model_weights/model_weights_preview_samples.sql new file mode 100644 index 0000000000..a4f5276caa --- /dev/null +++ b/_sql/migrations_squashed/model_weights/model_weights_preview_samples.sql @@ -0,0 +1,47 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +CREATE TABLE model_weights_preview_samples ( + -- Not used for anything except replication. + id BIGINT(20) NOT NULL AUTO_INCREMENT, + + -- ========== WEIGHTS CLASSIFICATION ========== + + -- Foreign key to model weights. + -- This is in a composite index with media_file_token to make sure a media file only applies + -- to a given model once. + model_weight_token VARCHAR(32) NOT NULL, + + -- Foreign key to media files + -- This is in a composite index with model_weight_token to make sure a media file only applies + -- to a given model once. + media_file_token VARCHAR(32) NOT NULL, + + -- Information about who set the sample + -- * automation + -- * author + -- * community + set_by VARCHAR(16) NOT NULL, + + -- Incremented with every update. + version INT NOT NULL DEFAULT 0, + + -- ========== TIMESTAMPS ========== + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + -- If this is removed by a mod. + -- It completely disappears from the system. + user_deleted_at TIMESTAMP NULL, + mod_deleted_at TIMESTAMP NULL, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY (model_weight_token, media_file_token), + + KEY index_model_weight_token (model_weight_token), + KEY index_media_file_token (media_file_token) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/_sql/migrations_squashed/model_weights/model_weights_tts_details.sql b/_sql/migrations_squashed/model_weights/model_weights_tts_details.sql new file mode 100644 index 0000000000..540e534532 --- /dev/null +++ b/_sql/migrations_squashed/model_weights/model_weights_tts_details.sql @@ -0,0 +1,73 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +-- Extra metadata on tts models +CREATE TABLE model_weights_tts_details ( + -- Not used for anything except replication. + id BIGINT(20) NOT NULL AUTO_INCREMENT, + + -- Simultaneous primary and foreign key. + -- This should match a single record in the `model_weights` table. + -- This turns this table into a polymorphic extension table. + model_weights_token VARCHAR(32) NOT NULL, + + -- ========== TTS MODEL METADATA ========== + + -- The full IETF BCP47 language tag (eg. en, en-US, es-419, ja-JP, pt, etc.) + -- (Not that it matters apart from categorization, since voice conversion is universal.) + ietf_language_tag VARCHAR(64) NOT NULL DEFAULT 'en', + + -- The IETF BCP47 language tag's primary language subtag (eg. "es-419" becomes "es") + -- (Not that it matters apart from categorization, since voice conversion is universal.) + ietf_primary_language_subtag VARCHAR(12) NOT NULL DEFAULT 'en', + + -- This is for Tacotron2, specifically. + -- The name of the type of pipeline to use, eg "legacy_fakeyou", "legacy_vocodes", "english_v1", etc. + -- New pipelines may be added at any point in the future and the source of truth for them will mostly + -- live in the `storyteller-ml` repository. + -- Older models and brand new models will have this field set to null, and we'll infer which value to + -- lazily backfill based on the creation date and language setting. + -- tts_text_pipeline_type VARCHAR(64) DEFAULT NULL, + + -- If true, multiply the mel outputs before being vocoded by a globally default constant. + use_default_mel_multiply_factor BOOLEAN NOT NULL DEFAULT FALSE, + + -- If not null, multiply the mel outputs before being vocoded by this value. + -- This is used instead of the default if `tts_use_default_mel_multiply_factor` is + -- set (ie. `tts_use_default_mel_multiply_factor` is ignored and this custom value is used instead) + maybe_custom_mel_multiply_factor DOUBLE DEFAULT NULL, + + -- If set, use a different pretrained vocoder. + -- If not set, use the website default. (Currently HifiGan-SS) + maybe_default_pretrained_vocoder VARCHAR(64) DEFAULT NULL, + + -- If set, we'll use a custom vocoder (from table vocoder_models) instead of a default vocoder. + -- If not set, we'll use `maybe_default_pretrained_vocoder` (or the website default). + maybe_custom_vocoder_token VARCHAR(32) DEFAULT NULL, + + + -- ========== VECTOR CLOCK ========== + + -- Incremented with every update. + version INT NOT NULL DEFAULT 0, + + + -- ========== TIMESTAMPS ========== + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY (model_weights_token) + -- TODO: + -- KEY index_model_type (model_type), + -- KEY fk_maybe_vocoder_token (maybe_vocoder_token), + -- KEY fk_creator_user_token (creator_user_token), + -- KEY index_creator_set_visibility (creator_set_visibility), + -- KEY index_private_bucket_hash (private_bucket_hash), + -- KEY index_is_public_listing_approved (is_public_listing_approved), + -- KEY index_is_locked_from_user_modification (is_locked_from_user_modification) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/_sql/migrations_squashed/model_weights/model_weights_vocoder_details.sql b/_sql/migrations_squashed/model_weights/model_weights_vocoder_details.sql new file mode 100644 index 0000000000..f04ac7f346 --- /dev/null +++ b/_sql/migrations_squashed/model_weights/model_weights_vocoder_details.sql @@ -0,0 +1,50 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +-- Every type of fine tuned model that users can upload. +CREATE TABLE model_weights_vocoder_details ( + -- Not used for anything except replication. + id BIGINT(20) NOT NULL AUTO_INCREMENT, + + -- Simultaneous primary and foreign key. + -- This should match a single record in the `model_weights` table. + -- This turns this table into a polymorphic extension table. + model_weights_token VARCHAR(32) NOT NULL, + + + -- ========== VOCODER MODEL METADATA ========== + + -- Whether the vocoder is recommended for use + -- vocoder_is_staff_recommended BOOLEAN NOT NULL DEFAULT FALSE, + + + -- ========== VECTOR CLOCK ========== + + -- Incremented with every update. + version INT NOT NULL DEFAULT 0, + + + -- ========== TIMESTAMPS ========== + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + -- If this is removed by a mod. + -- It completely disappears from the system. + user_deleted_at TIMESTAMP NULL, + mod_deleted_at TIMESTAMP NULL, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY (model_weights_token) + -- TODO: + -- KEY index_model_type (model_type), + -- KEY fk_maybe_vocoder_token (maybe_vocoder_token), + -- KEY fk_creator_user_token (creator_user_token), + -- KEY index_creator_set_visibility (creator_set_visibility), + -- KEY index_private_bucket_hash (private_bucket_hash), + -- KEY index_is_public_listing_approved (is_public_listing_approved), + -- KEY index_is_locked_from_user_modification (is_locked_from_user_modification) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/_sql/migrations_squashed/model_weights/model_weights_voice_conversion_details.sql b/_sql/migrations_squashed/model_weights/model_weights_voice_conversion_details.sql new file mode 100644 index 0000000000..8dd5e0c9a1 --- /dev/null +++ b/_sql/migrations_squashed/model_weights/model_weights_voice_conversion_details.sql @@ -0,0 +1,62 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +-- Every type of fine tuned model that users can upload. +CREATE TABLE model_weights_voice_conversion_details ( + -- Not used for anything except replication. + id BIGINT(20) NOT NULL AUTO_INCREMENT, + + -- Simultaneous primary and foreign key. + -- This should match a single record in the `model_weights` table. + -- This turns this table into a polymorphic extension table. + model_weights_token VARCHAR(32) NOT NULL, + + + -- ========== VOICE CONVERSION MODEL METADATA ========== + + -- The full IETF BCP47 language tag (eg. en, en-US, es-419, ja-JP, pt, etc.) + -- (Not that it matters apart from categorization, since voice conversion is universal.) + ietf_language_tag VARCHAR(64) NOT NULL DEFAULT 'en', + + -- The IETF BCP47 language tag's primary language subtag (eg. "es-419" becomes "es") + -- (Not that it matters apart from categorization, since voice conversion is universal.) + ietf_primary_language_subtag VARCHAR(12) NOT NULL DEFAULT 'en', + + -- RVC (v2) specific - whether the model has an index file associated with it + -- These files improve the quality of the results. + has_index_file BOOLEAN NOT NULL DEFAULT FALSE, + + -- Pitch algorithm to use by default + default_pitch_algorithm VARCHAR(64) DEFAULT NULL, + + + -- ========== VECTOR CLOCK ========== + + -- Incremented with every update. + version INT NOT NULL DEFAULT 0, + + + -- ========== TIMESTAMPS ========== + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + -- If this is removed by a mod. + -- It completely disappears from the system. + user_deleted_at TIMESTAMP NULL, + mod_deleted_at TIMESTAMP NULL, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY (model_weights_token) + -- TODO: + -- KEY index_model_type (model_type), + -- KEY fk_maybe_vocoder_token (maybe_vocoder_token), + -- KEY fk_creator_user_token (creator_user_token), + -- KEY index_creator_set_visibility (creator_set_visibility), + -- KEY index_private_bucket_hash (private_bucket_hash), + -- KEY index_is_public_listing_approved (is_public_listing_approved), + -- KEY index_is_locked_from_user_modification (is_locked_from_user_modification) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;