Compare commits

..
Author SHA1 Message Date
Brandon Thomas ad5fdc5c8c Framerate on video files 2024-02-26 16:02:18 -05:00
Brandon Thomas 9476589fc0 reorganize (about to add more handlers) 2024-02-26 01:30:04 -05:00
Brandon Thomas 00102793dc comma-separated query param for media type selector 2024-02-26 01:02:41 -05:00
salt 9a7d369828 remove redundant check 2024-02-25 21:58:08 -08:00
salt c932b26b29 new comfyUI dependency 2024-02-25 16:32:41 -08:00
Brandon Thomas 3b13603f1f scope user media files by *multiple* types 2024-02-25 18:02:36 -05:00
salt 6b054d3b37 download lora to correct folder 2024-02-24 23:20:54 -08:00
Brandon Thomas 55db590e73 rename package 2024-02-24 02:33:10 -05:00
Brandon Thomas 2dd02272f9 tool to soft delete anonymous user images
- We'll need to go back and clean up the buckets for some of these
- Some of these are probably just for face animator and could help with
  training a better face detection model
2024-02-24 02:26:25 -05:00
Brandon Thomas 6c6debe64b additional safety features 2024-02-24 00:35:26 -05:00
Brandon Thomas 814209949e fix storyteller engine cors 2024-02-23 22:21:39 -05:00
Brandon Thomas 4fbb8ef335 fix endpoint 2024-02-23 00:16:25 -05:00
Brandon Thomas 25b512c7d8 codegen db 2024-02-22 23:54:43 -05:00
Brandon Thomas d3ae68dc14 get prompt API 2024-02-22 23:53:02 -05:00
Brandon Thomas 203ae33adb actually, we don't need that table anymore 2024-02-22 23:12:08 -05:00
Brandon Thomas d543ac3a33 forgot to commit the transaction 🤦 2024-02-22 23:10:37 -05:00
Brandon Thomas cd132b694c codegen 2024-02-22 21:37:42 -05:00
Brandon Thomas be7315b28d insert prompt records in SD inference job 2024-02-22 21:36:43 -05:00
Brandon Thomas 14fbb2e29c Queries for insert and get prompt 2024-02-22 19:37:49 -05:00
Brandon Thomas ef2f827fed add extra localhost port to cors (storyteller studio) 2024-02-22 18:29:40 -05:00
Brandon Thomas 172de887b7 squashed migrations for docs 2024-02-22 18:15:22 -05:00
Brandon Thomas 896fae0ef5 Bevy-specific "create scene" upload endpoint 2024-02-22 16:58:30 -05:00
salt 7cad80ad05 dont crash if workflow doesnt exist 2024-02-22 13:31:07 -08:00
Brandon Thomas e1fd39d003 fix lints 2024-02-22 04:57:00 -05:00
Brandon Thomas ea3df73e0f prompt token in media_files, enums, tokens 2024-02-22 04:21:26 -05:00
ArEnSc 8b3c139704 Merge pull request #307 from storytold/feature/properties-prompt
Adding properties to prompts
2024-02-22 02:35:40 -05:00
Brandon Thomas a1c01a2f3c new tables for usages and prompts 2024-02-21 22:54:07 -05:00
arensc 29a137e4fe Adding properties to prompts 2024-02-21 20:40:48 -05:00
Brandon Thomas b8270b0235 fix lints 2024-02-21 17:48:14 -05:00
Brandon Thomas 7dbae4c166 fix build error 2024-02-21 17:30:47 -05:00
Brandon Thomas 170c0afef5 analytics query 2024-02-21 17:24:06 -05:00
saltacc 4af67113b2 Merge pull request #306 from storytold/feature/upload-workflow
Feature/upload workflow
2024-02-21 14:07:22 -08:00
salt 0cb11fbf7e move route 2024-02-21 14:06:53 -08:00
salt 83b21f8965 fix errors 2024-02-21 13:29:09 -08:00
arensc dc139a6199 renamed a function 2024-02-21 14:21:58 -05:00
Brandon Thomas c6555b88d5 one or two more terms 2024-02-21 05:14:32 -05:00
arensc c71a7de5be Ok download code should work 2024-02-21 03:08:42 -05:00
arensc 559a9e1f4d Ok builds now doing the actual download 2024-02-20 23:48:49 -05:00
Brandon Thomas ce4c9a1d42 doc 2024-02-20 23:36:04 -05:00
Brandon Thomas d85fe3fb3d CLI tool to delete users' files 2024-02-20 23:19:08 -05:00
Brandon Thomas d601164b5b rename two cli apps 2024-02-20 22:12:11 -05:00
Brandon Thomas 73b6b6585e refactor CLI tools 2024-02-20 22:10:18 -05:00
Brandon Thomas 368c216c07 rename CLI binary 2024-02-20 21:57:26 -05:00
Brandon Thomas d31eb74344 named number classifier 2024-02-20 21:46:35 -05:00
Brandon Thomas 2dab930226 additional test cases for italian 2024-02-20 21:40:08 -05:00
Brandon Thomas 9fc6e4adf6 split up tests 2024-02-20 21:28:23 -05:00
arensc ea8a911ba3 Need to save prompt now 2024-02-20 21:08:01 -05:00
arensc ce28899e4c Initial commit for storyteller web, going to work on inference job 2024-02-20 20:27:11 -05:00
Brandon Thomas 77c22336e6 codegen db 2024-02-20 20:27:09 -05:00
Brandon Thomas 4ae7e61b7e additional safety 2024-02-20 19:26:21 -05:00
Brandon Thomas 16a3f74105 "1girl" is a false positive and used frequently in safe contexts 2024-02-20 19:09:03 -05:00
Brandon Thomas 4ad90b31df stop racism too 2024-02-20 18:56:24 -05:00
Brandon Thomas 5cc90d1001 better classifier 2024-02-20 18:49:20 -05:00
Brandon Thomas c6a5f0694f spanish + tests 2024-02-20 18:43:12 -05:00
Brandon Thomas 688efffcb8 improve classifier 2024-02-20 18:37:01 -05:00
Brandon Thomas 767191871d improved filter 2024-02-20 18:28:21 -05:00
Brandon Thomas 7d963deb38 move text classification to own crate (about to build out more) 2024-02-20 16:14:47 -05:00
saltacc 501eb24cd8 Merge pull request #303 from storytold/feature/comfy-replication
save job args to file modification info
2024-02-20 08:32:51 -08:00
salt 07d8125de9 remove excess message 2024-02-20 07:42:27 -08:00
salt aa9e1c2fe4 new dependencies + download workflow from weight token 2024-02-20 07:41:05 -08:00
Kasisnu 3d64537e87 Merge pull request #305 from storytold/feb-19-mithoo
more labels on inference job metrics, thumbnails for face animator
2024-02-20 18:41:39 +05:30
Kasisnu 9c674b1579 send thumbnail task requests from face animator 2024-02-20 18:35:43 +05:30
Kasisnu c6c94cfe56 slightly better instrumentation w/labels 2024-02-20 18:35:41 +05:30
Brandon Thomas 835bbe35c6 generate 4 images in a batch minimum 2024-02-20 03:37:51 -05:00
Brandon Thomas 029e29bf9a last test cases for the night 2024-02-20 03:13:54 -05:00
Brandon Thomas 57956c8124 fix failing lints and tests 2024-02-20 02:44:43 -05:00
Brandon Thomas ea269459e6 more prompt tests 2024-02-20 01:49:03 -05:00
Brandon Thomas 716589f62c more safety + tests 2024-02-19 19:55:06 -05:00
Brandon Thomas 2d5188ba91 more dictionary terms and test cases 2024-02-19 19:37:03 -05:00
Brandon Thomas d5205e764e more prompt tests, better regex split 2024-02-19 18:54:13 -05:00
Brandon Thomas 3d8c01f8fe remove sex from non-sex prompts 2024-02-19 17:49:04 -05:00
Brandon Thomas f0a328c059 prompt engineering - replace bad prompts 2024-02-19 17:27:35 -05:00
Brandon Thomas c87b1ba20d filter more bad prompts 2024-02-19 12:55:01 -05:00
Kasisnu d8f8735eca Merge pull request #304 from storytold/feb-19-mithoo
add error handler for OTEL
2024-02-19 21:10:35 +05:30
Kasisnu a2098b52d1 add error handler for OTEL 2024-02-19 21:09:54 +05:30
Kasisnu b8ccb9f6e0 Merge pull request #302 from storytold/feb-16-mithoo
slightly tweakier instrumentation
2024-02-19 18:47:21 +05:30
Brandon Thomas 8dc3d29daf Block basic absuive SD prompts 2024-02-19 02:31:07 -05:00
Brandon Thomas 42dfa3aa51 don't require user account for sd inference 2024-02-18 23:12:00 -05:00
Brandon Thomas 9ca42b370e report sd queue stats 2024-02-18 03:46:48 -05:00
Brandon Thomas ef9cc7de72 codegen db 2024-02-18 03:21:27 -05:00
Brandon Thomas e7367bdfe7 return batch tokens in GET media file endpoint 2024-02-18 03:19:43 -05:00
Brandon Thomas 467d849121 list media files by batch token handler 2024-02-18 03:13:57 -05:00
Brandon Thomas e98091c406 Insert batch token in media_file records 2024-02-18 02:40:15 -05:00
Brandon Thomas c9c4fd59d9 stubs for engine persistence endpoints 2024-02-17 23:22:13 -05:00
salt 48b1f6306b save job args to file modification info 2024-02-17 06:21:51 -08:00
Brandon Thomas 98c087116b default to 3 images 2024-02-16 16:48:57 -05:00
Kasisnu f13458a4e7 slightly tweakier instrumentation 2024-02-16 14:38:35 +05:30
Kasisnu 9903a31530 Merge pull request #299 from storytold/integrate-thumbnails-comfyui
Integrate thumbnails for comfyui outputs
2024-02-16 12:53:02 +05:30
Kasisnu 130326e7de thumbnails builder for reuse 2024-02-16 12:51:54 +05:30
Brandon Thomas d7295d79a1 ES search size: 30 2024-02-15 23:12:26 -05:00
Brandon Thomas c00e0c59f3 fix cover image attachment 2024-02-15 22:45:20 -05:00
Brandon Thomas 3dc271bb84 accept cover image in API 2024-02-15 21:10:50 -05:00
Brandon Thomas 7bac45cad1 add migration for cover images in generic inference jobs (uploads) 2024-02-15 19:30:32 -05:00
Brandon Thomas 3cc0da13de transcripts on list endpoints 2024-02-15 10:39:33 -05:00
Brandon Thomas 1aa7914eee text transcripts on get media file 2024-02-15 10:29:08 -05:00
Brandon Thomas d4bda54911 Merge pull request #301 from storytold/feb-14-mithoo
bvh result type is video; mime type/extension is set correctly
2024-02-14 19:12:18 -05:00
Brandon Thomas 30cef2bc57 validate compositor http request 2024-02-14 18:52:45 -05:00
Brandon Thomas e462f0c08a Store download URL in top-level job info 2024-02-14 18:24:58 -05:00
Brandon Thomas 04c0e09d6f styletts include text transcript 2024-02-14 17:41:06 -05:00
Brandon Thomas 319a8f0ba8 add text transcripts to tts inference jobs 2024-02-14 17:34:04 -05:00
Brandon Thomas 4fa4a0a4e1 post-migration widening of file_size_bytes 2024-02-14 11:06:31 -05:00
Kasisnu 89099a4ef8 bvh result type is video; mime type/extension is set correctly 2024-02-14 15:57:32 +05:30
Brandon Thomas 53b2aedbb0 Five new schema migrations 2024-02-14 05:27:01 -05:00
Madhukar Mishra 5936ef87f4 fix - add gif to mimetype to ext 2024-02-14 12:15:35 +05:30
Brandon Thomas 00abb6230b inference status - get model_weights title 2024-02-13 20:48:15 -05:00
Brandon Thomas fa21d8251e document job status endpoints 2024-02-13 20:31:59 -05:00
Brandon Thomas 17b38a62cf add more staff accounts 2024-02-13 19:36:38 -05:00
Brandon Thomas 132230bbbe enums got mixed up. we should rename these 2024-02-13 15:30:53 -05:00
Madhukar Mishra be49dbd11e fix extension for thumbnail output 2024-02-13 23:21:33 +05:30
Kasisnu 1b97d638a8 Merge pull request #300 from storytold/feb-13-mithoo
return errors from conversion endpoints when media file isnt sent
2024-02-13 21:57:13 +05:30
Kasisnu bd653c70d8 return errors from conversion endpoints when media file isnt sent 2024-02-13 21:56:36 +05:30
Madhukar Mishra dc31723f63 fixup 2024-02-13 18:50:32 +05:30
Madhukar Mishra 6b03981ef9 generate thumbnails in comfyui workflow 2024-02-13 18:50:32 +05:30
Brandon Thomas d4a4ac4077 more users for the rollout 2024-02-12 12:34:51 -05:00
Brandon Thomas 32acf33eeb after sd job, return the first media file token 2024-02-12 05:19:14 -05:00
Brandon Thomas c9060d973f feature flag more endpoints; don't return certain results in user list 2024-02-12 04:38:56 -05:00
Brandon Thomas a64990230e cleanup sd enqueue endpoint, remove flag check 2024-02-12 04:23:49 -05:00
Brandon Thomas a3c6cc5b03 cache SD model weights in a cache directory 2024-02-11 07:19:41 -05:00
Brandon Thomas f16ca22110 log downloads 2024-02-10 17:10:33 -05:00
Brandon Thomas 5fa8bb93ce sensible default development configs (wip) 2024-02-10 16:53:08 -05:00
Brandon Thomas 91e8a51216 setup SD to use a predefined SD weight from our bucket 2024-02-10 16:47:21 -05:00
Brandon Thomas 7bd95d2078 split up sd job into three functions 2024-02-10 16:39:56 -05:00
Brandon Thomas e0f141fa74 enable michael's account 2024-02-10 16:14:45 -05:00
Brandon Thomas 029798e665 codegen db - field widened? 2024-02-09 22:48:36 -05:00
Brandon Thomas 850e1b3c10 add UserDetailsLight + avatar to /v1/session endpoint + schema docs 2024-02-09 22:43:28 -05:00
Brandon Thomas e1ea2cdf67 format api annotations 2024-02-09 22:02:43 -05:00
Brandon Thomas 74ed7f365b UserDetailsLight refactor - consolidate, fix bug, get ready for reuse 2024-02-09 21:44:13 -05:00
Brandon Thomas e327a8648c simplify cli tool args 2024-02-09 01:04:15 -05:00
Kasisnu 88c68ccf9b Merge pull request #293 from storytold/jan-31-mithoo
scaffold for bvh -> workflow job
2024-02-09 00:06:05 +05:30
Kasisnu 2e5fdd91d3 scaffold for bvh -> workflow job 2024-02-08 23:46:22 +05:30
Brandon Thomas 44135d8d10 enroll users in studio 2024-02-07 22:27:03 -05:00
Brandon Thomas 0d7afb10c2 codegen queries 2024-02-07 00:42:48 -05:00
Brandon Thomas dd76a6fea1 flag to session endpoint 2024-02-06 23:41:26 -05:00
Brandon Thomas 1886f40a9b handle flag check for dynamic user session types 2024-02-06 23:30:05 -05:00
Brandon Thomas f54ddb0acb feature flag off certain endpoints 2024-02-06 23:20:14 -05:00
Brandon Thomas a7b5cc9fc3 add is_deleted flag to es 2024-02-06 23:20:14 -05:00
Brandon Thomas 0e24e38576 rollout column for studio access 2024-02-06 23:20:14 -05:00
Kasisnu 6bc6bf0c24 Merge pull request #271 from storytold/otel-instrumentation
Otel instrumentation - first pass
2024-02-06 09:58:59 +05:30
ArEnSc fb2b5c9735 Merge pull request #297 from storytold/feature/downloader_fix
made extension and suffix changes.
2024-02-05 21:13:23 -05:00
ArEnSc 3d04302de1 Ok tested seems like the data is added correctly. 2024-02-05 21:09:05 -05:00
ArEnSc 7e169e3b51 Testing 2024-02-05 20:45:07 -05:00
ArEnSc 5ba8d876f0 made extension and suggix changes. 2024-02-05 18:51:09 -05:00
Kasisnu 44845ad54e otel: some stats we were already logging to stdout 2024-02-05 20:59:40 +05:30
Madhukar Mishra 6ca7cbee31 remove job.inference_job_token as a label for a metric 2024-02-05 18:18:16 +05:30
Madhukar Mishra 2cf821d450 fix - add scheme and port to otel collector endpoint 2024-02-05 18:18:16 +05:30
Madhukar Mishra d5ef9c0b78 use a sync instrument - histogram 2024-02-05 18:18:16 +05:30
Madhukar Mishra 6284b2a32f update Cargo.lock 2024-02-05 18:18:16 +05:30
Madhukar Mishra a104ae37aa init metrics provider 2024-02-05 18:18:16 +05:30
Madhukar Mishra fa3f506f27 fixup 2024-02-05 18:18:16 +05:30
Madhukar Mishra eb4f06179e fixup 2024-02-05 18:18:16 +05:30
Madhukar Mishra 6c86764798 fixup 2024-02-05 18:18:16 +05:30
Madhukar Mishra cfa9558a33 add a metric to try otel 2024-02-05 18:18:14 +05:30
Madhukar Mishra 2cadfb105b update .gitignore 2024-02-05 18:17:31 +05:30
Madhukar Mishra 97560cb1f7 add otel crate 2024-02-05 18:17:28 +05:30
Brandon Thomas 7450dd1525 whoops 2024-02-05 05:00:37 -05:00
Brandon Thomas d8e066dc23 codegen db 2024-02-05 04:50:46 -05:00
Brandon Thomas fdae854e3f build es-update-job in docker 2024-02-05 04:48:51 -05:00
Brandon Thomas 541695f028 Merge pull request #296 from storytold/brandon-es-job
elasticsearch update job
2024-02-05 04:40:36 -05:00
Brandon Thomas 0719a929f8 pause on no updates 2024-02-05 04:37:04 -05:00
Brandon Thomas c0c86c90b8 dev secrets 2024-02-05 04:11:49 -05:00
Brandon Thomas a5c8f5fdc6 cleanup 2024-02-05 04:06:59 -05:00
Brandon Thomas 58210f0c25 job almost done 2024-02-05 04:00:37 -05:00
Brandon Thomas ccf910e456 wip elasticsearch job 2024-02-04 21:57:27 -05:00
Brandon Thomas d9197d2fd9 codegen db 2024-02-04 21:57:10 -05:00
Brandon Thomas 61d32a1790 more idempotency on more endpoints 2024-02-04 21:54:02 -05:00
Brandon Thomas 361b0e0894 generic idempotency token query; add to media file uploads 2024-02-04 21:45:21 -05:00
Brandon Thomas 12070bc399 indices on temporal columns in model_weights 2024-02-04 21:26:15 -05:00
Brandon Thomas a49b8b4b74 logging 2024-02-04 02:58:03 -05:00
Brandon Thomas 2422f6d0aa input.mp4 hardcoded 2024-02-04 02:21:52 -05:00
Brandon Thomas a1fc56ecee prompt argument for comfy 2024-02-04 01:48:05 -05:00
Brandon Thomas 05025d8817 maybe fix pathing 2024-02-04 01:04:43 -05:00
Brandon Thomas bcea80c39b get comfyui media downloads working 2024-02-04 00:43:46 -05:00
Brandon Thomas cf59c8e2fc extra logging 2024-02-03 23:49:51 -05:00
Brandon Thomas 5528993768 config for comfyui workflow 2024-02-03 23:44:21 -05:00
Brandon Thomas da9e03e3ae api for delete 2024-02-03 02:07:44 -05:00
Brandon Thomas 76b8b07d8a 6 sd batch size 2024-02-03 01:25:16 -05:00
Brandon Thomas 14cba8b8ed fix sd inference pathing 2024-02-03 01:15:03 -05:00
Brandon Thomas 55805c2d75 safetensors -> pt x2 2024-02-03 00:42:16 -05:00
ArEnSc ae80de8508 Merge pull request #295 from storytold/feature/comfyui
support docker container & more comfyui dependencies
2024-02-03 00:37:05 -05:00
Brandon Thomas b965bfb602 file_size_bytes needs to be BIGINT 2024-02-03 00:20:08 -05:00
341 changed files with 11579 additions and 1941 deletions
+2 -1
View File
@@ -78,4 +78,5 @@ TTS_HIFIGAN_SUPERRES_VOCODER_MODEL_FILENAME=hifigan_superres_twilight_33000.pt
# Development key. Permissible to check in.
NEWRELIC_API_KEY=c402be1c4c4216ec83d0cfc0851520cfFFFFNRAL
STORYTELLER_ROOT="/home/tensor/code/storyteller/" # Put this in .env-secrets so that not everyone gets this setting.
# DO NOT UNCOMMENT THIS :P :P :P
#STORYTELLER_ROOT="/home/tensor/code/storyteller/" # Put this in .env-secrets so that not everyone gets this setting.
+1
View File
@@ -17,6 +17,7 @@ production_database_voice_clone_report_download.sh
secrets.toml
secrets.yaml
twitch_secrets.toml
.DS_Store
# Old env secrets
.*-secrets
+1
View File
@@ -9,6 +9,7 @@
<w>cheermote</w>
<w>cidrs</w>
<w>crockford</w>
<w>csam</w>
<w>culted</w>
<w>dalle</w>
<w>demuxer</w>
@@ -157,7 +157,7 @@
"ordinal": 15,
"name": "file_size_bytes",
"type_info": {
"type": "Long",
"type": "LongLong",
"flags": "NOT_NULL",
"char_set": 63,
"max_size": 10
@@ -288,7 +288,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -298,7 +298,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -308,7 +308,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\nINSERT INTO prompts\nSET\n token = ?,\n prompt_type = ?,\n\n maybe_creator_user_token = ?,\n\n maybe_positive_prompt = ?,\n maybe_negative_prompt = ?,\n maybe_other_args = ?,\n\n creator_ip_address = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 7
},
"nullable": []
},
"hash": "13ca06bcbb4a576f8a2229a8554b7488d379baa381d8d5cb60972750e81b2173"
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\n INSERT INTO model_weights\n SET\n token = ?,\n weights_type = ?,\n weights_category = ?,\n title = ?,\n maybe_cover_image_media_file_token = ?,\n maybe_description_markdown = ?,\n maybe_description_rendered_html = ?,\n creator_user_token = ?,\n creator_ip_address = ?,\n creator_set_visibility = ?,\n maybe_last_update_user_token = ?,\n original_download_url = ?,\n original_filename = ?,\n file_size_bytes = ?,\n file_checksum_sha2 = ?,\n public_bucket_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n version = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 19
},
"nullable": []
},
"hash": "178b4b8e5c51aedd1cd65581426d868ecd7912c6ee97140d1351115895106164"
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\n INSERT INTO media_files\n SET\n token = ?,\n media_type = ?,\n\n origin_category = ?, \n origin_product_category = ?, \n maybe_origin_model_type = ?, \n maybe_origin_model_token = ?, \n maybe_origin_filename = ?,\n\n is_batch_generated = ?,\n maybe_batch_token = ?,\n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n maybe_duration_millis = ?,\n maybe_audio_encoding = ?, \n maybe_video_encoding = ?, \n maybe_frame_width = ?, \n maybe_frame_height = ?,\n maybe_prompt_token = ?,\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?, \n maybe_public_bucket_prefix = ?, \n maybe_public_bucket_extension = ?, \n extra_file_modification_info = ?, \n\n maybe_creator_user_token = ?, \n maybe_creator_anonymous_visitor_token = ?, \n\n creator_ip_address = ?, \n creator_set_visibility = ?, \n\n maybe_creator_file_synthetic_id = ?, \n maybe_creator_category_synthetic_id = ?,\n\n maybe_mod_user_token = ?, \n is_generated_on_prem = ?, \n generated_by_worker = ?, \n generated_by_cluster = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 32
},
"nullable": []
},
"hash": "23061975280d3357a453705c90824001ff5023031a69425b8ec9b6ccff57aa8c"
}
@@ -1,6 +1,6 @@
{
"db_name": "MySQL",
"query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n entity_stats.ratings_positive_count as maybe_ratings_positive_count,\n entity_stats.ratings_negative_count as maybe_ratings_negative_count,\n entity_stats.bookmark_count as maybe_bookmark_count,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as cover_image\n ON cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nLEFT OUTER JOIN entity_stats\n ON entity_stats.entity_type = \"media_file\"\n AND entity_stats.entity_token = m.token\nWHERE\n m.token = ?\n ",
"query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.maybe_batch_token as `maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken`,\n\n m.maybe_text_transcript,\n\n m.maybe_prompt_token as `maybe_prompt_token: tokens::tokens::prompts::PromptToken`,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n entity_stats.ratings_positive_count as maybe_ratings_positive_count,\n entity_stats.ratings_negative_count as maybe_ratings_negative_count,\n entity_stats.bookmark_count as maybe_bookmark_count,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as cover_image\n ON cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nLEFT OUTER JOIN entity_stats\n ON entity_stats.entity_type = \"media_file\"\n AND entity_stats.entity_token = m.token\nWHERE\n m.token = ?\n AND m.user_deleted_at IS NULL\n AND m.mod_deleted_at IS NULL\n ",
"describe": {
"columns": [
{
@@ -65,6 +65,36 @@
},
{
"ordinal": 6,
"name": "maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken",
"type_info": {
"type": "VarString",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 7,
"name": "maybe_text_transcript",
"type_info": {
"type": "Blob",
"flags": "BLOB | BINARY",
"char_set": 224,
"max_size": 262140
}
},
{
"ordinal": 8,
"name": "maybe_prompt_token: tokens::tokens::prompts::PromptToken",
"type_info": {
"type": "VarString",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 9,
"name": "creator_set_visibility: enums::common::visibility::Visibility",
"type_info": {
"type": "String",
@@ -74,7 +104,7 @@
}
},
{
"ordinal": 7,
"ordinal": 10,
"name": "maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken",
"type_info": {
"type": "VarString",
@@ -84,7 +114,7 @@
}
},
{
"ordinal": 8,
"ordinal": 11,
"name": "maybe_model_weights_title",
"type_info": {
"type": "VarString",
@@ -94,7 +124,7 @@
}
},
{
"ordinal": 9,
"ordinal": 12,
"name": "maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType",
"type_info": {
"type": "VarString",
@@ -104,7 +134,7 @@
}
},
{
"ordinal": 10,
"ordinal": 13,
"name": "maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory",
"type_info": {
"type": "VarString",
@@ -114,7 +144,7 @@
}
},
{
"ordinal": 11,
"ordinal": 14,
"name": "maybe_model_cover_image_public_bucket_hash",
"type_info": {
"type": "VarString",
@@ -124,7 +154,7 @@
}
},
{
"ordinal": 12,
"ordinal": 15,
"name": "maybe_model_cover_image_public_bucket_prefix",
"type_info": {
"type": "VarString",
@@ -134,7 +164,7 @@
}
},
{
"ordinal": 13,
"ordinal": 16,
"name": "maybe_model_cover_image_public_bucket_extension",
"type_info": {
"type": "VarString",
@@ -144,7 +174,7 @@
}
},
{
"ordinal": 14,
"ordinal": 17,
"name": "maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken",
"type_info": {
"type": "VarString",
@@ -154,7 +184,7 @@
}
},
{
"ordinal": 15,
"ordinal": 18,
"name": "maybe_model_weight_creator_username",
"type_info": {
"type": "VarString",
@@ -164,7 +194,7 @@
}
},
{
"ordinal": 16,
"ordinal": 19,
"name": "maybe_model_weight_creator_display_name",
"type_info": {
"type": "VarString",
@@ -174,7 +204,7 @@
}
},
{
"ordinal": 17,
"ordinal": 20,
"name": "maybe_model_weight_creator_gravatar_hash",
"type_info": {
"type": "String",
@@ -184,7 +214,7 @@
}
},
{
"ordinal": 18,
"ordinal": 21,
"name": "public_bucket_directory_hash",
"type_info": {
"type": "VarString",
@@ -194,7 +224,7 @@
}
},
{
"ordinal": 19,
"ordinal": 22,
"name": "maybe_public_bucket_prefix",
"type_info": {
"type": "VarString",
@@ -204,7 +234,7 @@
}
},
{
"ordinal": 20,
"ordinal": 23,
"name": "maybe_public_bucket_extension",
"type_info": {
"type": "VarString",
@@ -214,7 +244,7 @@
}
},
{
"ordinal": 21,
"ordinal": 24,
"name": "maybe_ratings_positive_count",
"type_info": {
"type": "Long",
@@ -224,7 +254,7 @@
}
},
{
"ordinal": 22,
"ordinal": 25,
"name": "maybe_ratings_negative_count",
"type_info": {
"type": "Long",
@@ -234,7 +264,7 @@
}
},
{
"ordinal": 23,
"ordinal": 26,
"name": "maybe_bookmark_count",
"type_info": {
"type": "Long",
@@ -244,7 +274,7 @@
}
},
{
"ordinal": 24,
"ordinal": 27,
"name": "created_at",
"type_info": {
"type": "Timestamp",
@@ -254,7 +284,7 @@
}
},
{
"ordinal": 25,
"ordinal": 28,
"name": "updated_at",
"type_info": {
"type": "Timestamp",
@@ -274,6 +304,9 @@
true,
true,
true,
true,
true,
true,
false,
true,
true,
@@ -296,5 +329,5 @@
false
]
},
"hash": "c2de3b6de37dbbb5b6afd91af08aae2739cda97ef8ebb8f9b4ee967969ce43be"
"hash": "2c5083331bf226ef10c419f6a2b6dee6ee776a3d41eea06de1eafd1d1bd41791"
}
@@ -1,6 +1,6 @@
{
"db_name": "MySQL",
"query": "\nSELECT\n users.token as user_token,\n users.username,\n users.display_name,\n\n users.email_address,\n users.email_confirmed,\n users.email_gravatar_hash,\n\n users.maybe_stripe_customer_id,\n users.maybe_loyalty_program_key,\n\n users.disable_gravatar,\n users.auto_play_audio_preference,\n users.auto_play_video_preference,\n users.preferred_tts_result_visibility as `preferred_tts_result_visibility: enums::common::visibility::Visibility`,\n users.preferred_w2l_result_visibility as `preferred_w2l_result_visibility: enums::common::visibility::Visibility`,\n\n users.user_role_slug,\n users.is_banned,\n\n user_roles.can_use_tts,\n user_roles.can_use_w2l,\n user_roles.can_delete_own_tts_results,\n user_roles.can_delete_own_w2l_results,\n user_roles.can_delete_own_account,\n\n user_roles.can_upload_tts_models,\n user_roles.can_upload_w2l_templates,\n user_roles.can_delete_own_tts_models,\n user_roles.can_delete_own_w2l_templates,\n\n user_roles.can_approve_w2l_templates,\n user_roles.can_edit_other_users_profiles,\n user_roles.can_edit_other_users_tts_models,\n user_roles.can_edit_other_users_w2l_templates,\n user_roles.can_delete_other_users_tts_models,\n user_roles.can_delete_other_users_tts_results,\n user_roles.can_delete_other_users_w2l_templates,\n user_roles.can_delete_other_users_w2l_results,\n user_roles.can_ban_users,\n user_roles.can_delete_users\n\nFROM users\nLEFT OUTER JOIN user_sessions\n ON users.token = user_sessions.user_token\nLEFT OUTER JOIN user_roles\n ON users.user_role_slug = user_roles.slug\nWHERE user_sessions.token = ?\n AND user_sessions.deleted_at IS NULL\n AND users.user_deleted_at IS NULL\n AND users.mod_deleted_at IS NULL\n ",
"query": "\nSELECT\n users.token as user_token,\n users.username,\n users.display_name,\n\n users.email_address,\n users.email_confirmed,\n users.email_gravatar_hash,\n\n users.maybe_stripe_customer_id,\n users.maybe_loyalty_program_key,\n\n users.disable_gravatar,\n users.auto_play_audio_preference,\n users.auto_play_video_preference,\n users.preferred_tts_result_visibility as `preferred_tts_result_visibility: enums::common::visibility::Visibility`,\n users.preferred_w2l_result_visibility as `preferred_w2l_result_visibility: enums::common::visibility::Visibility`,\n\n users.user_role_slug,\n users.is_banned,\n\n users.can_access_studio,\n\n user_roles.can_use_tts,\n user_roles.can_use_w2l,\n user_roles.can_delete_own_tts_results,\n user_roles.can_delete_own_w2l_results,\n user_roles.can_delete_own_account,\n\n user_roles.can_upload_tts_models,\n user_roles.can_upload_w2l_templates,\n user_roles.can_delete_own_tts_models,\n user_roles.can_delete_own_w2l_templates,\n\n user_roles.can_approve_w2l_templates,\n user_roles.can_edit_other_users_profiles,\n user_roles.can_edit_other_users_tts_models,\n user_roles.can_edit_other_users_w2l_templates,\n user_roles.can_delete_other_users_tts_models,\n user_roles.can_delete_other_users_tts_results,\n user_roles.can_delete_other_users_w2l_templates,\n user_roles.can_delete_other_users_w2l_results,\n user_roles.can_ban_users,\n user_roles.can_delete_users\n\nFROM users\nLEFT OUTER JOIN user_sessions\n ON users.token = user_sessions.user_token\nLEFT OUTER JOIN user_roles\n ON users.user_role_slug = user_roles.slug\nWHERE user_sessions.token = ?\n AND user_sessions.deleted_at IS NULL\n AND users.user_deleted_at IS NULL\n AND users.mod_deleted_at IS NULL\n ",
"describe": {
"columns": [
{
@@ -155,6 +155,16 @@
},
{
"ordinal": 15,
"name": "can_access_studio",
"type_info": {
"type": "Tiny",
"flags": "NOT_NULL | MULTIPLE_KEY",
"char_set": 63,
"max_size": 1
}
},
{
"ordinal": 16,
"name": "can_use_tts",
"type_info": {
"type": "Tiny",
@@ -164,7 +174,7 @@
}
},
{
"ordinal": 16,
"ordinal": 17,
"name": "can_use_w2l",
"type_info": {
"type": "Tiny",
@@ -174,7 +184,7 @@
}
},
{
"ordinal": 17,
"ordinal": 18,
"name": "can_delete_own_tts_results",
"type_info": {
"type": "Tiny",
@@ -184,7 +194,7 @@
}
},
{
"ordinal": 18,
"ordinal": 19,
"name": "can_delete_own_w2l_results",
"type_info": {
"type": "Tiny",
@@ -194,7 +204,7 @@
}
},
{
"ordinal": 19,
"ordinal": 20,
"name": "can_delete_own_account",
"type_info": {
"type": "Tiny",
@@ -204,7 +214,7 @@
}
},
{
"ordinal": 20,
"ordinal": 21,
"name": "can_upload_tts_models",
"type_info": {
"type": "Tiny",
@@ -214,7 +224,7 @@
}
},
{
"ordinal": 21,
"ordinal": 22,
"name": "can_upload_w2l_templates",
"type_info": {
"type": "Tiny",
@@ -224,7 +234,7 @@
}
},
{
"ordinal": 22,
"ordinal": 23,
"name": "can_delete_own_tts_models",
"type_info": {
"type": "Tiny",
@@ -234,7 +244,7 @@
}
},
{
"ordinal": 23,
"ordinal": 24,
"name": "can_delete_own_w2l_templates",
"type_info": {
"type": "Tiny",
@@ -244,7 +254,7 @@
}
},
{
"ordinal": 24,
"ordinal": 25,
"name": "can_approve_w2l_templates",
"type_info": {
"type": "Tiny",
@@ -254,7 +264,7 @@
}
},
{
"ordinal": 25,
"ordinal": 26,
"name": "can_edit_other_users_profiles",
"type_info": {
"type": "Tiny",
@@ -264,7 +274,7 @@
}
},
{
"ordinal": 26,
"ordinal": 27,
"name": "can_edit_other_users_tts_models",
"type_info": {
"type": "Tiny",
@@ -274,7 +284,7 @@
}
},
{
"ordinal": 27,
"ordinal": 28,
"name": "can_edit_other_users_w2l_templates",
"type_info": {
"type": "Tiny",
@@ -284,7 +294,7 @@
}
},
{
"ordinal": 28,
"ordinal": 29,
"name": "can_delete_other_users_tts_models",
"type_info": {
"type": "Tiny",
@@ -294,7 +304,7 @@
}
},
{
"ordinal": 29,
"ordinal": 30,
"name": "can_delete_other_users_tts_results",
"type_info": {
"type": "Tiny",
@@ -304,7 +314,7 @@
}
},
{
"ordinal": 30,
"ordinal": 31,
"name": "can_delete_other_users_w2l_templates",
"type_info": {
"type": "Tiny",
@@ -314,7 +324,7 @@
}
},
{
"ordinal": 31,
"ordinal": 32,
"name": "can_delete_other_users_w2l_results",
"type_info": {
"type": "Tiny",
@@ -324,7 +334,7 @@
}
},
{
"ordinal": 32,
"ordinal": 33,
"name": "can_ban_users",
"type_info": {
"type": "Tiny",
@@ -334,7 +344,7 @@
}
},
{
"ordinal": 33,
"ordinal": 34,
"name": "can_delete_users",
"type_info": {
"type": "Tiny",
@@ -363,6 +373,7 @@
false,
false,
false,
false,
true,
true,
true,
@@ -384,5 +395,5 @@
true
]
},
"hash": "07d330b4c2e6b0dc76e2e61a3b44b47b8d287adf5eb0646f6cf2876655581a13"
"hash": "423109f2dcee23a558c43ecaab0eb2836714d5316620daaa1127b447cad59212"
}
@@ -118,7 +118,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -1,12 +0,0 @@
{
"db_name": "MySQL",
"query": "\n INSERT INTO media_files\n SET\n token = ?,\n \n origin_category = ?,\n origin_product_category = ?,\n maybe_origin_model_type = ?,\n \n media_type = ?,\n maybe_mime_type = ?,\n file_size_bytes = ?,\n \n checksum_sha2 = ?,\n \n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n \n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n \n creator_set_visibility = ?,\n \n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n \n is_generated_on_prem = ?,\n generated_by_worker = ?,\n generated_by_cluster = ?\n \n ",
"describe": {
"columns": [],
"parameters": {
"Right": 20
},
"nullable": []
},
"hash": "567937a5918833330b74f94724eb69628aae49705ec4f8028321c38625eaa60c"
}
@@ -118,7 +118,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -0,0 +1,47 @@
{
"db_name": "MySQL",
"query": "\n SELECT\n token as `token: tokens::tokens::model_weights::ModelWeightToken`,\n weights_type as `weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n updated_at\n FROM model_weights\n WHERE\n updated_at > ?\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "token: tokens::tokens::model_weights::ModelWeightToken",
"type_info": {
"type": "VarString",
"flags": "NOT_NULL | UNIQUE_KEY | BINARY | NO_DEFAULT_VALUE",
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 1,
"name": "weights_type: enums::by_table::model_weights::weights_types::WeightsType",
"type_info": {
"type": "VarString",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | NO_DEFAULT_VALUE",
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 2,
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
false
]
},
"hash": "5c67010afd0bb8aa3cd8f6c2407c4c314ace016f816eca51991720a276340d41"
}
@@ -1,6 +1,6 @@
{
"db_name": "MySQL",
"query": "\nSELECT\n jobs.token as `job_token: tokens::tokens::generic_inference_jobs::InferenceJobToken`,\n\n jobs.status as `status: enums::common::job_status_plus::JobStatusPlus`,\n jobs.attempt_count,\n\n jobs.maybe_creator_user_token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n jobs.maybe_creator_anonymous_visitor_token as `maybe_creator_anonymous_visitor_token: tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken`,\n jobs.creator_ip_address,\n\n jobs.inference_category as `inference_category: enums::by_table::generic_inference_jobs::inference_category::InferenceCategory`,\n jobs.maybe_model_type,\n jobs.maybe_model_token,\n jobs.maybe_raw_inference_text,\n\n jobs.frontend_failure_category as `maybe_frontend_failure_category: enums::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory`,\n\n jobs.on_success_result_entity_type as maybe_result_entity_type,\n jobs.on_success_result_entity_token as maybe_result_entity_token,\n\n tts_models.title as maybe_tts_model_title,\n voice_conversion_models.title as maybe_voice_conversion_model_title,\n\n tts_results.public_bucket_wav_audio_path as maybe_tts_public_bucket_path,\n voice_conversion_results.public_bucket_hash as maybe_voice_conversion_public_bucket_hash,\n\n media_files.public_bucket_directory_hash as maybe_media_file_public_bucket_directory_hash,\n media_files.maybe_public_bucket_prefix as maybe_media_file_public_bucket_prefix,\n media_files.maybe_public_bucket_extension as maybe_media_file_public_bucket_extension,\n\n jobs.assigned_worker as maybe_assigned_worker,\n jobs.assigned_cluster as maybe_assigned_cluster,\n\n jobs.is_keepalive_required,\n\n jobs.created_at,\n jobs.updated_at,\n\n jobs.first_started_at as maybe_first_started_at,\n jobs.successfully_completed_at as maybe_successfully_completed_at\n\nFROM generic_inference_jobs as jobs\n\nLEFT OUTER JOIN tts_models ON jobs.maybe_model_token = tts_models.token\nLEFT OUTER JOIN voice_conversion_models ON jobs.maybe_model_token = voice_conversion_models.token\n\nLEFT OUTER JOIN tts_results ON jobs.on_success_result_entity_token = tts_results.token\nLEFT OUTER JOIN voice_conversion_results ON jobs.on_success_result_entity_token = voice_conversion_results.token\nLEFT OUTER JOIN media_files ON jobs.on_success_result_entity_token = media_files.token\n\nWHERE jobs.token = ?\n ",
"query": "\nSELECT\n jobs.token as `job_token: tokens::tokens::generic_inference_jobs::InferenceJobToken`,\n\n jobs.status as `status: enums::common::job_status_plus::JobStatusPlus`,\n jobs.attempt_count,\n\n jobs.maybe_creator_user_token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n jobs.maybe_creator_anonymous_visitor_token as `maybe_creator_anonymous_visitor_token: tokens::tokens::anonymous_visitor_tracking::AnonymousVisitorTrackingToken`,\n jobs.creator_ip_address,\n\n jobs.inference_category as `inference_category: enums::by_table::generic_inference_jobs::inference_category::InferenceCategory`,\n jobs.maybe_model_type,\n jobs.maybe_model_token,\n jobs.maybe_raw_inference_text,\n\n jobs.frontend_failure_category as `maybe_frontend_failure_category: enums::by_table::generic_inference_jobs::frontend_failure_category::FrontendFailureCategory`,\n\n jobs.on_success_result_entity_type as maybe_result_entity_type,\n jobs.on_success_result_entity_token as maybe_result_entity_token,\n\n model_weights.title as maybe_model_weights_title,\n tts_models.title as maybe_tts_model_title,\n voice_conversion_models.title as maybe_voice_conversion_model_title,\n\n tts_results.public_bucket_wav_audio_path as maybe_tts_public_bucket_path,\n voice_conversion_results.public_bucket_hash as maybe_voice_conversion_public_bucket_hash,\n\n media_files.public_bucket_directory_hash as maybe_media_file_public_bucket_directory_hash,\n media_files.maybe_public_bucket_prefix as maybe_media_file_public_bucket_prefix,\n media_files.maybe_public_bucket_extension as maybe_media_file_public_bucket_extension,\n\n jobs.assigned_worker as maybe_assigned_worker,\n jobs.assigned_cluster as maybe_assigned_cluster,\n\n jobs.is_keepalive_required,\n\n jobs.created_at,\n jobs.updated_at,\n\n jobs.first_started_at as maybe_first_started_at,\n jobs.successfully_completed_at as maybe_successfully_completed_at\n\nFROM generic_inference_jobs as jobs\n\nLEFT OUTER JOIN model_weights ON jobs.maybe_model_token = model_weights.token\nLEFT OUTER JOIN tts_models ON jobs.maybe_model_token = tts_models.token\nLEFT OUTER JOIN voice_conversion_models ON jobs.maybe_model_token = voice_conversion_models.token\n\nLEFT OUTER JOIN tts_results ON jobs.on_success_result_entity_token = tts_results.token\nLEFT OUTER JOIN voice_conversion_results ON jobs.on_success_result_entity_token = voice_conversion_results.token\nLEFT OUTER JOIN media_files ON jobs.on_success_result_entity_token = media_files.token\n\nWHERE jobs.token = ?\n ",
"describe": {
"columns": [
{
@@ -135,7 +135,7 @@
},
{
"ordinal": 13,
"name": "maybe_tts_model_title",
"name": "maybe_model_weights_title",
"type_info": {
"type": "VarString",
"flags": "BINARY | NO_DEFAULT_VALUE",
@@ -145,7 +145,7 @@
},
{
"ordinal": 14,
"name": "maybe_voice_conversion_model_title",
"name": "maybe_tts_model_title",
"type_info": {
"type": "VarString",
"flags": "BINARY | NO_DEFAULT_VALUE",
@@ -155,7 +155,7 @@
},
{
"ordinal": 15,
"name": "maybe_tts_public_bucket_path",
"name": "maybe_voice_conversion_model_title",
"type_info": {
"type": "VarString",
"flags": "BINARY | NO_DEFAULT_VALUE",
@@ -165,6 +165,16 @@
},
{
"ordinal": 16,
"name": "maybe_tts_public_bucket_path",
"type_info": {
"type": "VarString",
"flags": "BINARY | NO_DEFAULT_VALUE",
"char_set": 224,
"max_size": 1020
}
},
{
"ordinal": 17,
"name": "maybe_voice_conversion_public_bucket_hash",
"type_info": {
"type": "VarString",
@@ -174,7 +184,7 @@
}
},
{
"ordinal": 17,
"ordinal": 18,
"name": "maybe_media_file_public_bucket_directory_hash",
"type_info": {
"type": "VarString",
@@ -184,7 +194,7 @@
}
},
{
"ordinal": 18,
"ordinal": 19,
"name": "maybe_media_file_public_bucket_prefix",
"type_info": {
"type": "VarString",
@@ -194,7 +204,7 @@
}
},
{
"ordinal": 19,
"ordinal": 20,
"name": "maybe_media_file_public_bucket_extension",
"type_info": {
"type": "VarString",
@@ -204,7 +214,7 @@
}
},
{
"ordinal": 20,
"ordinal": 21,
"name": "maybe_assigned_worker",
"type_info": {
"type": "VarString",
@@ -214,7 +224,7 @@
}
},
{
"ordinal": 21,
"ordinal": 22,
"name": "maybe_assigned_cluster",
"type_info": {
"type": "VarString",
@@ -224,7 +234,7 @@
}
},
{
"ordinal": 22,
"ordinal": 23,
"name": "is_keepalive_required",
"type_info": {
"type": "Tiny",
@@ -234,7 +244,7 @@
}
},
{
"ordinal": 23,
"ordinal": 24,
"name": "created_at",
"type_info": {
"type": "Timestamp",
@@ -244,7 +254,7 @@
}
},
{
"ordinal": 24,
"ordinal": 25,
"name": "updated_at",
"type_info": {
"type": "Timestamp",
@@ -254,7 +264,7 @@
}
},
{
"ordinal": 25,
"ordinal": 26,
"name": "maybe_first_started_at",
"type_info": {
"type": "Timestamp",
@@ -264,7 +274,7 @@
}
},
{
"ordinal": 26,
"ordinal": 27,
"name": "maybe_successfully_completed_at",
"type_info": {
"type": "Timestamp",
@@ -300,6 +310,7 @@
true,
true,
true,
true,
false,
false,
false,
@@ -307,5 +318,5 @@
true
]
},
"hash": "4932e975b3369b06fcc23f7797f3a53a54211236383385b8740959b824bd9744"
"hash": "5fcdce6dd4c2b24d9062fda7b0a080bda3f04da6933b4dba8d335f9b7aecacb3"
}
@@ -228,7 +228,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -238,7 +238,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -248,7 +248,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -0,0 +1,102 @@
{
"db_name": "MySQL",
"query": "\nSELECT\n p.token as `token: tokens::tokens::prompts::PromptToken`,\n\n p.prompt_type as `prompt_type: enums::by_table::prompts::prompt_type::PromptType`,\n\n p.maybe_creator_user_token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n\n p.maybe_positive_prompt,\n p.maybe_negative_prompt,\n p.maybe_other_args,\n\n p.creator_ip_address,\n p.created_at\n\nFROM prompts as p\nWHERE\n p.token = ?\n ",
"describe": {
"columns": [
{
"ordinal": 0,
"name": "token: tokens::tokens::prompts::PromptToken",
"type_info": {
"type": "VarString",
"flags": "NOT_NULL | UNIQUE_KEY | BINARY | NO_DEFAULT_VALUE",
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 1,
"name": "prompt_type: enums::by_table::prompts::prompt_type::PromptType",
"type_info": {
"type": "VarString",
"flags": "NOT_NULL | BINARY | NO_DEFAULT_VALUE",
"char_set": 224,
"max_size": 64
}
},
{
"ordinal": 2,
"name": "maybe_creator_user_token: tokens::tokens::users::UserToken",
"type_info": {
"type": "VarString",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 3,
"name": "maybe_positive_prompt",
"type_info": {
"type": "Blob",
"flags": "BLOB | BINARY",
"char_set": 224,
"max_size": 262140
}
},
{
"ordinal": 4,
"name": "maybe_negative_prompt",
"type_info": {
"type": "Blob",
"flags": "BLOB | BINARY",
"char_set": 224,
"max_size": 262140
}
},
{
"ordinal": 5,
"name": "maybe_other_args",
"type_info": {
"type": "Blob",
"flags": "BLOB | BINARY",
"char_set": 224,
"max_size": 262140
}
},
{
"ordinal": 6,
"name": "creator_ip_address",
"type_info": {
"type": "VarString",
"flags": "NOT_NULL | BINARY | NO_DEFAULT_VALUE",
"char_set": 224,
"max_size": 160
}
},
{
"ordinal": 7,
"name": "created_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP",
"char_set": 63,
"max_size": 19
}
}
],
"parameters": {
"Right": 1
},
"nullable": [
false,
false,
true,
true,
true,
true,
false,
false
]
},
"hash": "61744bbf83f7cf00348bcc21e868d9c506fec46da4a33ac50d63c6d9e00c0cec"
}
@@ -157,7 +157,7 @@
"ordinal": 15,
"name": "file_size_bytes",
"type_info": {
"type": "Long",
"type": "LongLong",
"flags": "NOT_NULL",
"char_set": 63,
"max_size": 10
@@ -388,7 +388,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -398,7 +398,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -408,7 +408,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -1,6 +1,6 @@
{
"db_name": "MySQL",
"query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n entity_stats.ratings_positive_count as maybe_ratings_positive_count,\n entity_stats.ratings_negative_count as maybe_ratings_negative_count,\n entity_stats.bookmark_count as maybe_bookmark_count,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as cover_image\n ON cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nLEFT OUTER JOIN entity_stats\n ON entity_stats.entity_type = \"media_file\"\n AND entity_stats.entity_token = m.token\nWHERE\n m.token = ?\n AND m.user_deleted_at IS NULL\n AND m.mod_deleted_at IS NULL\n ",
"query": "\nSELECT\n m.token as `token: tokens::tokens::media_files::MediaFileToken`,\n\n m.media_type as `media_type: enums::by_table::media_files::media_file_type::MediaFileType`,\n\n users.token as `maybe_creator_user_token: tokens::tokens::users::UserToken`,\n users.username as maybe_creator_username,\n users.display_name as maybe_creator_display_name,\n users.email_gravatar_hash as maybe_creator_gravatar_hash,\n\n m.maybe_batch_token as `maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken`,\n\n m.maybe_text_transcript,\n\n m.maybe_prompt_token as `maybe_prompt_token: tokens::tokens::prompts::PromptToken`,\n\n m.creator_set_visibility as `creator_set_visibility: enums::common::visibility::Visibility`,\n\n model_weights.token as `maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken`,\n model_weights.title as maybe_model_weights_title,\n model_weights.weights_type as `maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType`,\n model_weights.weights_category as `maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory`,\n\n cover_image.public_bucket_directory_hash as maybe_model_cover_image_public_bucket_hash,\n cover_image.maybe_public_bucket_prefix as maybe_model_cover_image_public_bucket_prefix,\n cover_image.maybe_public_bucket_extension as maybe_model_cover_image_public_bucket_extension,\n\n model_weight_creator.token as `maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken`,\n model_weight_creator.username as maybe_model_weight_creator_username,\n model_weight_creator.display_name as maybe_model_weight_creator_display_name,\n model_weight_creator.email_gravatar_hash as maybe_model_weight_creator_gravatar_hash,\n\n m.public_bucket_directory_hash,\n m.maybe_public_bucket_prefix,\n m.maybe_public_bucket_extension,\n\n entity_stats.ratings_positive_count as maybe_ratings_positive_count,\n entity_stats.ratings_negative_count as maybe_ratings_negative_count,\n entity_stats.bookmark_count as maybe_bookmark_count,\n\n m.created_at,\n m.updated_at\n\nFROM media_files AS m\nLEFT OUTER JOIN users\n ON m.maybe_creator_user_token = users.token\nLEFT OUTER JOIN model_weights\n ON m.maybe_origin_model_token = model_weights.token\nLEFT OUTER JOIN media_files as cover_image\n ON cover_image.token = model_weights.maybe_cover_image_media_file_token\nLEFT OUTER JOIN users as model_weight_creator\n ON model_weight_creator.token = model_weights.creator_user_token\nLEFT OUTER JOIN entity_stats\n ON entity_stats.entity_type = \"media_file\"\n AND entity_stats.entity_token = m.token\nWHERE\n m.token = ?\n ",
"describe": {
"columns": [
{
@@ -65,6 +65,36 @@
},
{
"ordinal": 6,
"name": "maybe_batch_token: tokens::tokens::batch_generations::BatchGenerationToken",
"type_info": {
"type": "VarString",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 7,
"name": "maybe_text_transcript",
"type_info": {
"type": "Blob",
"flags": "BLOB | BINARY",
"char_set": 224,
"max_size": 262140
}
},
{
"ordinal": 8,
"name": "maybe_prompt_token: tokens::tokens::prompts::PromptToken",
"type_info": {
"type": "VarString",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 224,
"max_size": 128
}
},
{
"ordinal": 9,
"name": "creator_set_visibility: enums::common::visibility::Visibility",
"type_info": {
"type": "String",
@@ -74,7 +104,7 @@
}
},
{
"ordinal": 7,
"ordinal": 10,
"name": "maybe_model_weights_token: tokens::tokens::model_weights::ModelWeightToken",
"type_info": {
"type": "VarString",
@@ -84,7 +114,7 @@
}
},
{
"ordinal": 8,
"ordinal": 11,
"name": "maybe_model_weights_title",
"type_info": {
"type": "VarString",
@@ -94,7 +124,7 @@
}
},
{
"ordinal": 9,
"ordinal": 12,
"name": "maybe_model_weights_type: enums::by_table::model_weights::weights_types::WeightsType",
"type_info": {
"type": "VarString",
@@ -104,7 +134,7 @@
}
},
{
"ordinal": 10,
"ordinal": 13,
"name": "maybe_model_weights_category: enums::by_table::model_weights::weights_category::WeightsCategory",
"type_info": {
"type": "VarString",
@@ -114,7 +144,7 @@
}
},
{
"ordinal": 11,
"ordinal": 14,
"name": "maybe_model_cover_image_public_bucket_hash",
"type_info": {
"type": "VarString",
@@ -124,7 +154,7 @@
}
},
{
"ordinal": 12,
"ordinal": 15,
"name": "maybe_model_cover_image_public_bucket_prefix",
"type_info": {
"type": "VarString",
@@ -134,7 +164,7 @@
}
},
{
"ordinal": 13,
"ordinal": 16,
"name": "maybe_model_cover_image_public_bucket_extension",
"type_info": {
"type": "VarString",
@@ -144,7 +174,7 @@
}
},
{
"ordinal": 14,
"ordinal": 17,
"name": "maybe_model_weight_creator_user_token: tokens::tokens::users::UserToken",
"type_info": {
"type": "VarString",
@@ -154,7 +184,7 @@
}
},
{
"ordinal": 15,
"ordinal": 18,
"name": "maybe_model_weight_creator_username",
"type_info": {
"type": "VarString",
@@ -164,7 +194,7 @@
}
},
{
"ordinal": 16,
"ordinal": 19,
"name": "maybe_model_weight_creator_display_name",
"type_info": {
"type": "VarString",
@@ -174,7 +204,7 @@
}
},
{
"ordinal": 17,
"ordinal": 20,
"name": "maybe_model_weight_creator_gravatar_hash",
"type_info": {
"type": "String",
@@ -184,7 +214,7 @@
}
},
{
"ordinal": 18,
"ordinal": 21,
"name": "public_bucket_directory_hash",
"type_info": {
"type": "VarString",
@@ -194,7 +224,7 @@
}
},
{
"ordinal": 19,
"ordinal": 22,
"name": "maybe_public_bucket_prefix",
"type_info": {
"type": "VarString",
@@ -204,7 +234,7 @@
}
},
{
"ordinal": 20,
"ordinal": 23,
"name": "maybe_public_bucket_extension",
"type_info": {
"type": "VarString",
@@ -214,7 +244,7 @@
}
},
{
"ordinal": 21,
"ordinal": 24,
"name": "maybe_ratings_positive_count",
"type_info": {
"type": "Long",
@@ -224,7 +254,7 @@
}
},
{
"ordinal": 22,
"ordinal": 25,
"name": "maybe_ratings_negative_count",
"type_info": {
"type": "Long",
@@ -234,7 +264,7 @@
}
},
{
"ordinal": 23,
"ordinal": 26,
"name": "maybe_bookmark_count",
"type_info": {
"type": "Long",
@@ -244,7 +274,7 @@
}
},
{
"ordinal": 24,
"ordinal": 27,
"name": "created_at",
"type_info": {
"type": "Timestamp",
@@ -254,7 +284,7 @@
}
},
{
"ordinal": 25,
"ordinal": 28,
"name": "updated_at",
"type_info": {
"type": "Timestamp",
@@ -274,6 +304,9 @@
true,
true,
true,
true,
true,
true,
false,
true,
true,
@@ -296,5 +329,5 @@
false
]
},
"hash": "06e0c5e80803d072551bc4df40e7d273ba0772608d52b46b840249415c341945"
"hash": "726a6c62dc20e8372e950a10ecd5a438769448c7ce315bc8743b728e80179420"
}
@@ -1,12 +0,0 @@
{
"db_name": "MySQL",
"query": "\n INSERT INTO media_files\n SET\n token = ?,\n media_type = ?,\n\n origin_category = ?, \n origin_product_category = ?, \n maybe_origin_model_type = ?, \n maybe_origin_model_token = ?, \n maybe_origin_filename = ?,\n\n is_batch_generated = ?, \n\n maybe_mime_type = ?,\n file_size_bytes = ?,\n maybe_duration_millis = ?,\n maybe_audio_encoding = ?, \n maybe_video_encoding = ?, \n maybe_frame_width = ?, \n maybe_frame_height = ?, \n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?, \n maybe_public_bucket_prefix = ?, \n maybe_public_bucket_extension = ?, \n extra_file_modification_info = ?, \n\n maybe_creator_user_token = ?, \n maybe_creator_anonymous_visitor_token = ?, \n\n creator_ip_address = ?, \n creator_set_visibility = ?, \n\n maybe_creator_file_synthetic_id = ?, \n maybe_creator_category_synthetic_id = ?,\n\n maybe_mod_user_token = ?, \n is_generated_on_prem = ?, \n generated_by_worker = ?, \n generated_by_cluster = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 30
},
"nullable": []
},
"hash": "80900178668fb38ae51dfe19401c1be37f4ef97fda0198f83239507b8000d1ae"
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\nINSERT INTO media_files\nSET\n token = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n\n maybe_origin_model_type = ?,\n maybe_origin_model_token = ?,\n\n maybe_text_transcript = ?,\n\n media_type = ?,\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_generated_on_prem = ?,\n generated_by_worker = ?,\n generated_by_cluster = ?\n\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 22
},
"nullable": []
},
"hash": "8aad4a39b2e43743a2efc1b37c17860c15a2314145c61ab4a25e449a4cb22128"
}
@@ -157,7 +157,7 @@
"ordinal": 15,
"name": "file_size_bytes",
"type_info": {
"type": "Long",
"type": "LongLong",
"flags": "NOT_NULL",
"char_set": 63,
"max_size": 10
@@ -328,7 +328,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -338,7 +338,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -348,7 +348,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\nINSERT INTO generic_inference_jobs\nSET\n token = ?,\n uuid_idempotency_token = ?,\n\n job_type = ?,\n\n inference_category = ?,\n maybe_model_type = ?,\n maybe_model_token = ?,\n\n maybe_input_source_token = ?,\n maybe_input_source_token_type = ?,\n\n maybe_download_url = ?,\n maybe_cover_image_media_file_token = ?,\n\n maybe_raw_inference_text = ?,\n\n maybe_inference_args = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n priority_level = ?,\n is_keepalive_required = ?,\n max_duration_seconds = ?,\n\n is_debug_request = ?,\n maybe_routing_tag = ?,\n\n status = \"pending\"\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 21
},
"nullable": []
},
"hash": "9b4c6f0d0db1c92e4d3eed8d572fa92c885bad4adcc053ae490b3a76c6c116d4"
}
@@ -157,7 +157,7 @@
"ordinal": 15,
"name": "file_size_bytes",
"type_info": {
"type": "Long",
"type": "LongLong",
"flags": "NOT_NULL",
"char_set": 63,
"max_size": 10
@@ -328,7 +328,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -338,7 +338,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -348,7 +348,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -88,7 +88,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -98,7 +98,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -108,7 +108,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -58,7 +58,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -68,7 +68,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "INSERT INTO idempotency_tokens SET idempotency_value = ?",
"describe": {
"columns": [],
"parameters": {
"Right": 1
},
"nullable": []
},
"hash": "cfeb095db83dfad895835d509818ecccc6cb9da2b32b5155e5ca29d56d3b7fc0"
}
@@ -58,7 +58,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -68,7 +68,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -1,12 +0,0 @@
{
"db_name": "MySQL",
"query": "\n INSERT INTO model_weights\n SET\n token = ?,\n weights_type = ?,\n weights_category = ?,\n title = ?,\n maybe_description_markdown = ?,\n maybe_description_rendered_html = ?,\n creator_user_token = ?,\n creator_ip_address = ?,\n creator_set_visibility = ?,\n maybe_last_update_user_token = ?,\n original_download_url = ?,\n original_filename = ?,\n file_size_bytes = ?,\n file_checksum_sha2 = ?,\n public_bucket_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n version = ?\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 18
},
"nullable": []
},
"hash": "db59a239bac6f5ceaad4396dfe6c2c933a7189dbf8da5f555b94148db1b0667f"
}
@@ -157,7 +157,7 @@
"ordinal": 15,
"name": "file_size_bytes",
"type_info": {
"type": "Long",
"type": "LongLong",
"flags": "NOT_NULL",
"char_set": 63,
"max_size": 10
@@ -288,7 +288,7 @@
"name": "updated_at",
"type_info": {
"type": "Timestamp",
"flags": "NOT_NULL | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"flags": "NOT_NULL | MULTIPLE_KEY | BINARY | TIMESTAMP | ON_UPDATE_NOW",
"char_set": 63,
"max_size": 19
}
@@ -298,7 +298,7 @@
"name": "user_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -308,7 +308,7 @@
"name": "mod_deleted_at",
"type_info": {
"type": "Timestamp",
"flags": "BINARY",
"flags": "MULTIPLE_KEY | BINARY",
"char_set": 63,
"max_size": 19
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\n INSERT INTO media_files\n SET\n token = ?,\n \n origin_category = ?,\n origin_product_category = ?,\n\n maybe_origin_model_type = ?,\n\n maybe_text_transcript = ?,\n\n media_type = ?,\n maybe_mime_type = ?,\n file_size_bytes = ?,\n \n checksum_sha2 = ?,\n \n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n \n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n \n creator_set_visibility = ?,\n \n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n \n is_generated_on_prem = ?,\n generated_by_worker = ?,\n generated_by_cluster = ?\n \n ",
"describe": {
"columns": [],
"parameters": {
"Right": 21
},
"nullable": []
},
"hash": "e7f9bb387905704e9da3fd1657432a3d821d49462fcf82d8cca8dd2dcfb3df17"
}
@@ -1,12 +0,0 @@
{
"db_name": "MySQL",
"query": "\nINSERT INTO generic_inference_jobs\nSET\n token = ?,\n uuid_idempotency_token = ?,\n\n job_type = ?,\n\n inference_category = ?,\n maybe_model_type = ?,\n maybe_model_token = ?,\n\n maybe_input_source_token = ?,\n maybe_input_source_token_type = ?,\n\n maybe_raw_inference_text = ?,\n\n maybe_inference_args = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n\n priority_level = ?,\n is_keepalive_required = ?,\n max_duration_seconds = ?,\n\n is_debug_request = ?,\n maybe_routing_tag = ?,\n\n status = \"pending\"\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 19
},
"nullable": []
},
"hash": "e97a0974ed643b8a20d4d319b4aa93aba979d5f8fc0bdc44b77ef4f945b03b35"
}
@@ -0,0 +1,12 @@
{
"db_name": "MySQL",
"query": "\nINSERT INTO media_files\nSET\n token = ?,\n\n origin_category = ?,\n origin_product_category = ?,\n maybe_origin_model_type = ?,\n\n media_type = ?,\n maybe_mime_type = ?,\n file_size_bytes = ?,\n\n checksum_sha2 = ?,\n\n public_bucket_directory_hash = ?,\n maybe_public_bucket_prefix = ?,\n maybe_public_bucket_extension = ?,\n\n maybe_creator_user_token = ?,\n maybe_creator_anonymous_visitor_token = ?,\n creator_ip_address = ?,\n\n creator_set_visibility = ?,\n extra_file_modification_info = ?,\n\n maybe_creator_file_synthetic_id = ?,\n maybe_creator_category_synthetic_id = ?,\n\n is_generated_on_prem = ?,\n generated_by_worker = ?,\n generated_by_cluster = ?\n\n ",
"describe": {
"columns": [],
"parameters": {
"Right": 21
},
"nullable": []
},
"hash": "f681f25833875063150b6f881ebbfadc292939745e38754991650651edbe7acb"
}
Generated
+493 -90
View File
File diff suppressed because it is too large Load Diff
+13 -9
View File
@@ -11,20 +11,21 @@ members = [
"crates/_types/tokens",
# CLI tools for operations, etc.
"crates/cli/database-backup",
"crates/cli/database-cleanup",
"crates/cli/dev-database-seed",
"crates/cli/dev-upload-media-file",
"crates/cli/elasticsearch-cli",
"crates/cli/kubectl-pod-cleanup",
"crates/cli/lru-delete-models",
"crates/cli/migration-tool",
"crates/cli/scrape_test",
"crates/cli/devenv/dev-database-seed",
"crates/cli/devenv/dev-upload-media-file",
"crates/cli/devenv/scrape-test",
"crates/cli/production/db-backup",
"crates/cli/production/db-cleanup",
"crates/cli/production/elasticsearch-cli",
"crates/cli/production/kubectl-pod-cleanup",
"crates/cli/production/lru-delete-models",
"crates/cli/production/migration-tool",
# Shared libraries
"crates/lib/actix_helpers",
"crates/lib/api_clients/cloud_storage",
"crates/lib/api_clients/google_drive_common",
"crates/lib/api_clients/thumbnail_generator",
"crates/lib/api_clients/twitch_common",
"crates/lib/bootstrap",
"crates/lib/caching/memory_caching",
@@ -47,12 +48,14 @@ members = [
"crates/lib/files/images",
"crates/lib/files/media",
"crates/lib/files/mimetypes",
"crates/lib/files/videos",
"crates/lib/idempotency",
"crates/lib/jobs_common",
"crates/lib/logging",
"crates/lib/migration",
"crates/lib/mysql_queries",
"crates/lib/password",
"crates/lib/prompt_engineering",
"crates/lib/redis_common",
"crates/lib/server_environment",
"crates/lib/sqlx_mysql_helpers",
@@ -73,6 +76,7 @@ members = [
"crates/service/job/analytics_job",
"crates/service/job/download_job",
"crates/service/job/email_sender_job",
"crates/service/job/es-update-job",
"crates/service/job/inference_job",
"crates/service/job/tts_download_job",
"crates/service/job/tts_inference_job",
@@ -34,7 +34,13 @@
"created_at" : { "type" : "date" },
"updated_at" : { "type" : "date" },
"user_deleted_at" : { "type" : "date" },
"mod_deleted_at" : { "type" : "date" }
"mod_deleted_at" : { "type" : "date" },
"is_deleted" : {
"type": "boolean",
"index": true
}
}
}
}
@@ -0,0 +1,28 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Staff
-- teddanson is victor's alt
-- SELECT token, username FROM users WHERE username IN (
UPDATE users SET can_access_studio = true WHERE username IN (
'bflat',
'brandon',
'crossproduct',
'crossproduct1',
'echelon',
'fyscott',
'olivicmic',
'saltacc',
'teddanson',
'vegito1089',
'wilwong',
'yae_ph',
'zzz_last_item'
);
UPDATE users SET can_access_studio = true WHERE username IN (
'endtimes',
'tropicalfun',
'zzz_last_item'
);
@@ -0,0 +1,22 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- This finds the top users of image generation within a given time range.
select
u.username,
u.email_address,
count(*) as use_count
from users as u
join
(
select maybe_creator_user_token as user_token
from generic_inference_jobs
where job_type = 'stable_diffusion'
AND created_at > NOW() - INTERVAL 24 HOUR
) as jobs
ON jobs.user_token = u.token
group by u.username, u.email_address
order by use_count desc
@@ -0,0 +1,7 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
DROP INDEX index_updated_at ON model_weights;
DROP INDEX index_user_deleted_at ON model_weights;
DROP INDEX index_mod_deleted_at ON model_weights;
@@ -0,0 +1,7 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
CREATE INDEX index_updated_at ON model_weights (updated_at);
CREATE INDEX index_user_deleted_at ON model_weights (user_deleted_at);
CREATE INDEX index_mod_deleted_at ON model_weights (mod_deleted_at);
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE users DROP COLUMN can_access_studio;
@@ -0,0 +1,10 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE users
ADD COLUMN can_access_studio BOOLEAN NOT NULL DEFAULT false
AFTER user_role_slug;
ALTER TABLE users
ADD INDEX index_can_access_studio (can_access_studio);
@@ -0,0 +1,6 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE model_weights
MODIFY COLUMN file_size_bytes INT(10) NOT NULL DEFAULT 0;
@@ -0,0 +1,6 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE model_weights
MODIFY COLUMN file_size_bytes BIGINT(10) NOT NULL DEFAULT 0;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE media_files DROP COLUMN maybe_text_transcript;
@@ -0,0 +1,7 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE media_files
ADD COLUMN maybe_text_transcript TEXT DEFAULT NULL
AFTER maybe_frame_height;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE media_files DROP COLUMN maybe_batch_token;
@@ -0,0 +1,10 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE media_files
ADD COLUMN maybe_batch_token VARCHAR(32) DEFAULT NULL
AFTER is_batch_generated;
ALTER TABLE media_files
ADD INDEX index_maybe_batch_token (maybe_batch_token);
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE generic_inference_jobs DROP COLUMN maybe_download_url;
@@ -0,0 +1,7 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE generic_inference_jobs
ADD COLUMN maybe_download_url VARCHAR(1024) DEFAULT NULL
AFTER maybe_raw_inference_text;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE generic_inference_jobs DROP COLUMN on_success_result_batch_token;
@@ -0,0 +1,7 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE generic_inference_jobs
ADD COLUMN on_success_result_batch_token VARCHAR(32) DEFAULT NULL
AFTER on_success_result_entity_token;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE generic_inference_jobs DROP COLUMN maybe_cover_image_media_file_token;
@@ -0,0 +1,7 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE generic_inference_jobs
ADD COLUMN maybe_cover_image_media_file_token VARCHAR(32) DEFAULT NULL
AFTER maybe_download_url;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
DROP TABLE prompts;
@@ -0,0 +1,56 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Table to store prompts as a first class entity.
-- Duplication of the same prompt is totally fine.
CREATE TABLE prompts (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- ========== PRIMARY, FOREIGN KEYS, and POLYMORPHISM ==========
-- Effective "primary key" of the prompt
token VARCHAR(32) NOT NULL,
-- Original product to which the prompt applied.
-- Prompts may or may not be compatible across products.
-- Possible values:
-- * 'stable_diffusion'
-- * 'comfy_ui'
prompt_type VARCHAR(16) NOT NULL,
-- Whomever created the prompt
maybe_creator_user_token VARCHAR(32) DEFAULT NULL,
-- ========== PROMPT DETAILS ==========
-- The positive prompt (optional)
-- TEXT = 65,535 bytes (64 KiB), ~= 4 bytes per UTF-8 character, ~ 16383 characters.
maybe_positive_prompt TEXT DEFAULT NULL,
-- The negative prompt (optional)
-- TEXT = 65,535 bytes (64 KiB), ~= 4 bytes per UTF-8 character, ~ 16383 characters.
maybe_negative_prompt TEXT DEFAULT NULL,
-- Polymorphic arguments payload that depends on the type of inference job.
-- TEXT = 65,535 bytes (64 KiB), ~= 4 bytes per UTF-8 character, ~ 16383 characters.
maybe_other_args TEXT DEFAULT NULL,
-- ========== ABUSE TRACKING ==========
-- For abuse tracking.
-- Wide enough for IPv4/6
creator_ip_address VARCHAR(40) NOT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- INDICES --
PRIMARY KEY (id),
UNIQUE KEY (token),
KEY index_maybe_creator_user_token (maybe_creator_user_token),
KEY index_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
drop table usages;
@@ -0,0 +1,46 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Usages of models and assets to create things
-- This should work for inference as well as 3D object/scene creation,
-- so the inputs can be models OR files.
CREATE TABLE usages (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- ========== PRIMARY AND FOREIGN KEYS ==========
-- Type of the entity created
-- This only denotes which table to join against, not the type of the entity within the join table.
-- Possible values:
-- * 'model_weight'
-- * 'media_file'
-- * (maybe future types)
created_type VARCHAR(16) NOT NULL,
-- Token of the entity created
created_token VARCHAR(32) NOT NULL,
-- Type of the entity used
-- This only denotes which table to join against, not the type of the entity within the join table.
-- Possible values:
-- * 'model_weight'
-- * 'media_file'
-- * (maybe future types)
used_type VARCHAR(16) NOT NULL,
-- Token of the entity used
used_token VARCHAR(32) NOT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- INDICES --
PRIMARY KEY (id),
UNIQUE KEY (created_type, created_token, used_type, used_token),
KEY index_created_type_and_token (created_type, created_token),
KEY index_used_type_and_token (used_type, used_token)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE media_files DROP COLUMN maybe_prompt_token;
@@ -0,0 +1,10 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE media_files
ADD COLUMN maybe_prompt_token VARCHAR(32) DEFAULT NULL
AFTER maybe_text_transcript;
ALTER TABLE media_files
ADD INDEX fk_maybe_prompt_token (maybe_prompt_token);
@@ -0,0 +1,5 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE media_files DROP COLUMN maybe_sample_rate;
@@ -0,0 +1,7 @@
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
ALTER TABLE media_files
ADD COLUMN maybe_sample_rate FLOAT DEFAULT NULL
AFTER maybe_duration_millis;
@@ -72,6 +72,16 @@ CREATE TABLE generic_inference_jobs (
-- TEXT = 65,535 bytes (64 KiB), ~= 4 bytes per UTF-8 character, ~ 16383 characters.
maybe_raw_inference_text TEXT DEFAULT NULL,
-- For download-related jobs, this is the URL
-- This is nullable because not all inference jobs have a download URL.
-- The length of 1024 is arbitrary, but we shouldn't need anything longer.
maybe_download_url VARCHAR(1024) DEFAULT NULL,
-- For download-related jobs, this is the cover image to set.
-- This is nullable because not all inference jobs have a download URL.
-- And furthermore, not all download URLs have a cover image.
maybe_cover_image_media_file_token VARCHAR(32) DEFAULT NULL,
-- ========== SUCCESS CASE ==========
-- The type of the object will vary based on the type of the upload,
@@ -82,6 +92,11 @@ CREATE TABLE generic_inference_jobs (
-- This is only populated on a successful result.
on_success_result_entity_token VARCHAR(32) DEFAULT NULL,
-- If the job completes successfully, this is the batch token (ie. when
-- several results are created).
-- Only populated if there are actual batches generated.
on_success_result_batch_token VARCHAR(32) DEFAULT NULL,
-- ========== CREATOR DETAILS AND PREFERENCES ==========
-- Foreign key to user
+15
View File
@@ -58,11 +58,15 @@ CREATE TABLE media_files (
-- The original filename of the media (if uploaded by a user)
maybe_origin_filename VARCHAR(255) DEFAULT NULL,
-- TODO: Remove after `maybe_batch_token` gains use.
-- Whether this media file was generated as part of a batch
-- If so, we can look up the batch in a separate query/call to the `batch_generations` table.
-- We won't hold the batch token in this table since it'll be very sparsely populated.
is_batch_generated BOOLEAN NOT NULL DEFAULT FALSE,
-- If the media file is generated as part of a batch, this designates the batch.
maybe_batch_token VARCHAR(32) DEFAULT NULL,
-- ========== METADATA ==========
-- We can store text transcripts, etc. in other tables and refer back via foreign key.
@@ -86,6 +90,9 @@ CREATE TABLE media_files (
-- The duration in millis, if audio or video.
maybe_duration_millis INT(10) DEFAULT NULL,
-- Frame rate for video, sampling rate for audio (if present)
maybe_sample_rate FLOAT DEFAULT NULL,
-- Audio encoder details
-- Only present if the file was audio or a video that had audio.
maybe_audio_encoding VARCHAR(32) DEFAULT NULL,
@@ -100,6 +107,12 @@ CREATE TABLE media_files (
-- For videos, the original frame height.
maybe_frame_height INT(5) DEFAULT NULL,
-- Optional text transcript for audio or video (especially TTS)
maybe_text_transcript TEXT DEFAULT NULL,
-- Optional pointer to the prompt that generated this media file, if relevant.
maybe_prompt_token VARCHAR(32) DEFAULT NULL,
-- Checksum of the original media
-- SHA1 hash [SHA2 = CHAR(64), SHA1 = CHAR(40), MD5 = CHAR(32)]
-- checksum_sha1 CHAR(40) NOT NULL,
@@ -212,7 +225,9 @@ CREATE TABLE media_files (
KEY index_maybe_origin_model_type (maybe_origin_model_type),
KEY fk_maybe_origin_model_token (maybe_origin_model_token),
KEY fk_maybe_origin_model_type_and_token (maybe_origin_model_type, maybe_origin_model_token),
KEY index_maybe_batch_token (maybe_batch_token),
KEY index_media_type (media_type),
KEY fk_maybe_prompt_token (maybe_prompt_token),
KEY index_checksum_sha2 (checksum_sha2),
KEY fk_maybe_creator_user_token (maybe_creator_user_token),
KEY fk_maybe_mod_user_token (maybe_mod_user_token),
@@ -95,8 +95,8 @@ CREATE TABLE model_weights (
-- The filename that was used at upload time (if available)
original_filename VARCHAR(255) DEFAULT NULL,
-- File characteristics
file_size_bytes INT(10) NOT NULL DEFAULT 0,
-- File size. BIGINT to store more than 2GB size.
file_size_bytes BIGINT(10) NOT NULL DEFAULT 0,
-- Checksum of the original weights file
-- SHA2 hash [SHA2 = CHAR(64), SHA1 = CHAR(40), MD5 = CHAR(32)]
@@ -171,6 +171,9 @@ CREATE TABLE model_weights (
KEY index_weights_category (weights_category),
KEY fk_creator_user_token (creator_user_token),
KEY index_creator_set_visibility (creator_set_visibility),
KEY fk_maybe_cover_media_file_token (maybe_cover_image_media_file_token)
KEY fk_maybe_cover_media_file_token (maybe_cover_image_media_file_token),
KEY index_updated_at (updated_at),
KEY index_user_deleted_at (user_deleted_at),
KEY index_mod_deleted_at (user_deleted_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+59
View File
@@ -0,0 +1,59 @@
-- NB: This is a manually squashed view of all the CREATE and ALTER statements,
-- with comments attached to the fields for centralized documentation.
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Table to store prompts as a first class entity.
-- Duplication of the same prompt is totally fine.
CREATE TABLE prompts (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- ========== PRIMARY, FOREIGN KEYS, and POLYMORPHISM ==========
-- Effective "primary key" of the prompt
token VARCHAR(32) NOT NULL,
-- Original product to which the prompt applied.
-- Prompts may or may not be compatible across products.
-- Possible values:
-- * 'stable_diffusion'
-- * 'comfy_ui'
prompt_type VARCHAR(16) NOT NULL,
-- Whomever created the prompt
maybe_creator_user_token VARCHAR(32) DEFAULT NULL,
-- ========== PROMPT DETAILS ==========
-- The positive prompt (optional)
-- TEXT = 65,535 bytes (64 KiB), ~= 4 bytes per UTF-8 character, ~ 16383 characters.
maybe_positive_prompt TEXT DEFAULT NULL,
-- The negative prompt (optional)
-- TEXT = 65,535 bytes (64 KiB), ~= 4 bytes per UTF-8 character, ~ 16383 characters.
maybe_negative_prompt TEXT DEFAULT NULL,
-- Polymorphic arguments payload that depends on the type of inference job.
-- TEXT = 65,535 bytes (64 KiB), ~= 4 bytes per UTF-8 character, ~ 16383 characters.
maybe_other_args TEXT DEFAULT NULL,
-- ========== ABUSE TRACKING ==========
-- For abuse tracking.
-- Wide enough for IPv4/6
creator_ip_address VARCHAR(40) NOT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- INDICES --
PRIMARY KEY (id),
UNIQUE KEY (token),
KEY index_maybe_creator_user_token (maybe_creator_user_token),
KEY index_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
+49
View File
@@ -0,0 +1,49 @@
-- NB: This is a manually squashed view of all the CREATE and ALTER statements,
-- with comments attached to the fields for centralized documentation.
-- noinspection SqlDialectInspectionForFile
-- noinspection SqlNoDataSourceInspectionForFile
-- noinspection SqlResolveForFile
-- Usages of models and assets to create things
-- This should work for inference as well as 3D object/scene creation,
-- so the inputs can be models OR files.
CREATE TABLE usages (
-- Not used for anything except replication.
id BIGINT(20) NOT NULL AUTO_INCREMENT,
-- ========== PRIMARY AND FOREIGN KEYS ==========
-- Type of the entity created
-- This only denotes which table to join against, not the type of the entity within the join table.
-- Possible values:
-- * 'model_weight'
-- * 'media_file'
-- * (maybe future types)
created_type VARCHAR(16) NOT NULL,
-- Token of the entity created
created_token VARCHAR(32) NOT NULL,
-- Type of the entity used
-- This only denotes which table to join against, not the type of the entity within the join table.
-- Possible values:
-- * 'model_weight'
-- * 'media_file'
-- * (maybe future types)
used_type VARCHAR(16) NOT NULL,
-- Token of the entity used
used_token VARCHAR(32) NOT NULL,
-- ========== TIMESTAMPS ==========
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
-- INDICES --
PRIMARY KEY (id),
UNIQUE KEY (created_type, created_token, used_type, used_token),
KEY index_created_type_and_token (created_type, created_token),
KEY index_used_type_and_token (used_type, used_token)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
@@ -22,6 +22,10 @@ CREATE TABLE users (
-- The role assigned to the user confers permissions.
user_role_slug VARCHAR(16) NOT NULL,
-- Rollout flag for Storyteller Studio
-- Default to false until rollout is 100%, then remove the column.
can_access_studio BOOLEAN NOT NULL DEFAULT false,
-- ========== PREMIUM FEATURES ==========
-- If the user has a Stripe subscription (or has had one), we link it to the user here.
@@ -171,6 +175,7 @@ CREATE TABLE users (
UNIQUE KEY (username),
UNIQUE KEY (email_address),
KEY fk_user_role_slug (user_role_slug),
KEY index_can_access_studio (can_access_studio),
KEY fk_maybe_avatar_media_file_token (maybe_avatar_media_file_token),
KEY fk_maybe_cover_media_file_token (maybe_cover_media_file_token)
@@ -40,6 +40,9 @@ pub enum InferenceCategory {
#[serde(rename = "format_conversion")]
FormatConversion,
#[serde(rename = "convert_bvh_to_workflow")]
ConvertBvhToWorkflow,
}
// TODO(bt, 2022-12-21): This desperately needs MySQL integration tests!
@@ -58,6 +61,7 @@ impl InferenceCategory {
Self::Mocap => "mocap",
Self::Workflow => "workflow",
Self::FormatConversion => "format_conversion",
Self::ConvertBvhToWorkflow => "convert_bvh_to_workflow",
}
}
@@ -71,6 +75,7 @@ impl InferenceCategory {
"mocap" => Ok(Self::Mocap),
"workflow" => Ok(Self::Workflow),
"format_conversion" => Ok(Self::FormatConversion),
"convert_bvh_to_workflow" => Ok(Self::ConvertBvhToWorkflow),
_ => Err(format!("invalid value: {:?}", value)),
}
}
@@ -87,6 +92,7 @@ impl InferenceCategory {
Self::Mocap,
Self::Workflow,
Self::FormatConversion,
Self::ConvertBvhToWorkflow,
])
}
}
@@ -109,6 +115,7 @@ mod tests {
assert_serialization(InferenceCategory::Mocap, "mocap");
assert_serialization(InferenceCategory::Workflow, "workflow");
assert_serialization(InferenceCategory::FormatConversion, "format_conversion");
assert_serialization(InferenceCategory::ConvertBvhToWorkflow, "convert_bvh_to_workflow");
}
#[test]
@@ -121,6 +128,7 @@ mod tests {
assert_eq!(InferenceCategory::Mocap.to_str(), "mocap");
assert_eq!(InferenceCategory::Workflow.to_str(), "workflow");
assert_eq!(InferenceCategory::FormatConversion.to_str(), "format_conversion");
assert_eq!(InferenceCategory::ConvertBvhToWorkflow.to_str(), "convert_bvh_to_workflow");
}
#[test]
@@ -133,13 +141,14 @@ mod tests {
assert_eq!(InferenceCategory::from_str("mocap").unwrap(), InferenceCategory::Mocap);
assert_eq!(InferenceCategory::from_str("workflow").unwrap(), InferenceCategory::Workflow);
assert_eq!(InferenceCategory::from_str("format_conversion").unwrap(), InferenceCategory::FormatConversion);
assert_eq!(InferenceCategory::from_str("convert_bvh_to_workflow").unwrap(), InferenceCategory::ConvertBvhToWorkflow);
}
#[test]
fn all_variants() {
// Static check
let mut variants = InferenceCategory::all_variants();
assert_eq!(variants.len(), 8);
assert_eq!(variants.len(), 9);
assert_eq!(variants.pop_first(), Some(InferenceCategory::LipsyncAnimation));
assert_eq!(variants.pop_first(), Some(InferenceCategory::TextToSpeech));
assert_eq!(variants.pop_first(), Some(InferenceCategory::VoiceConversion));
@@ -148,6 +157,7 @@ mod tests {
assert_eq!(variants.pop_first(), Some(InferenceCategory::Mocap));
assert_eq!(variants.pop_first(), Some(InferenceCategory::Workflow));
assert_eq!(variants.pop_first(), Some(InferenceCategory::FormatConversion));
assert_eq!(variants.pop_first(), Some(InferenceCategory::ConvertBvhToWorkflow));
assert_eq!(variants.pop_first(), None);
// Generated check
@@ -15,6 +15,10 @@ use strum::EnumIter;
#[derive(Clone, Copy, Eq, PartialEq, Hash, Ord, PartialOrd, Deserialize, Serialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum InferenceJobType {
/// Job that converts bevy to workflow files
#[serde(rename = "bevy_to_workflow")]
BevyToWorkflow,
/// Jobs that run ComfyUI workflows
ComfyUi,
@@ -64,6 +68,7 @@ impl_mysql_enum_coders!(InferenceJobType);
impl InferenceJobType {
pub fn to_str(&self) -> &'static str {
match self {
Self::BevyToWorkflow => "bevy_to_workflow",
Self::ComfyUi => "comfy_ui",
Self::ConvertFbxToGltf => "convert_fbx_gltf",
Self::MocapNet => "mocap_net",
@@ -80,6 +85,7 @@ impl InferenceJobType {
pub fn from_str(value: &str) -> Result<Self, String> {
match value {
"bevy_to_workflow" => Ok(Self::BevyToWorkflow),
"comfy_ui" => Ok(Self::ComfyUi),
"convert_fbx_gltf" => Ok(Self::ConvertFbxToGltf),
"mocap_net" => Ok(Self::MocapNet),
@@ -99,6 +105,7 @@ impl InferenceJobType {
// NB: BTreeSet is sorted
// NB: BTreeSet::from() isn't const, but not worth using LazyStatic, etc.
BTreeSet::from([
Self::BevyToWorkflow,
Self::ComfyUi,
Self::ConvertFbxToGltf,
Self::MocapNet,
@@ -129,6 +136,7 @@ mod tests {
#[test]
fn test_serialization() {
assert_serialization(InferenceJobType::BevyToWorkflow, "bevy_to_workflow");
assert_serialization(InferenceJobType::ComfyUi, "comfy_ui");
assert_serialization(InferenceJobType::ConvertFbxToGltf, "convert_fbx_gltf");
assert_serialization(InferenceJobType::MocapNet, "mocap_net");
@@ -144,6 +152,7 @@ mod tests {
#[test]
fn to_str() {
assert_eq!(InferenceJobType::BevyToWorkflow.to_str(), "bevy_to_workflow");
assert_eq!(InferenceJobType::ComfyUi.to_str(), "comfy_ui");
assert_eq!(InferenceJobType::ConvertFbxToGltf.to_str(), "convert_fbx_gltf");
assert_eq!(InferenceJobType::MocapNet.to_str(), "mocap_net");
@@ -159,6 +168,7 @@ mod tests {
#[test]
fn from_str() {
assert_eq!(InferenceJobType::from_str("bevy_to_workflow").unwrap(), InferenceJobType::BevyToWorkflow);
assert_eq!(InferenceJobType::from_str("comfy_ui").unwrap(), InferenceJobType::ComfyUi);
assert_eq!(InferenceJobType::from_str("convert_fbx_gltf").unwrap(), InferenceJobType::ConvertFbxToGltf);
assert_eq!(InferenceJobType::from_str("mocap_net").unwrap(), InferenceJobType::MocapNet);
@@ -176,7 +186,8 @@ mod tests {
fn all_variants() {
// Static check
let mut variants = InferenceJobType::all_variants();
assert_eq!(variants.len(), 11);
assert_eq!(variants.len(), 12);
assert_eq!(variants.pop_first(), Some(InferenceJobType::BevyToWorkflow));
assert_eq!(variants.pop_first(), Some(InferenceJobType::ComfyUi));
assert_eq!(variants.pop_first(), Some(InferenceJobType::ConvertFbxToGltf));
assert_eq!(variants.pop_first(), Some(InferenceJobType::MocapNet));
@@ -44,6 +44,8 @@ pub enum InferenceModelType {
/// A job that turns "FBX" game engine files into "GLTF" files (Bevy-compatible).
#[serde(rename = "convert_fbx_gltf")]
ConvertFbxToGltf,
#[serde(rename = "bvh_to_workflow")]
BvhToWorkflow
}
// TODO(bt, 2022-12-21): This desperately needs MySQL integration tests!
@@ -66,6 +68,7 @@ impl InferenceModelType {
Self::StyleTTS2 => "styletts2",
Self::ComfyUi => "comfy_ui",
Self::ConvertFbxToGltf => "convert_fbx_gltf",
Self::BvhToWorkflow => "bvh_to_workflow",
}
}
@@ -83,6 +86,7 @@ impl InferenceModelType {
"styletts2" => Ok(Self::StyleTTS2),
"comfy_ui" => Ok(Self::ComfyUi),
"convert_fbx_gltf" => Ok(Self::ConvertFbxToGltf),
"bvh_to_workflow" => Ok(Self::BvhToWorkflow),
_ => Err(format!("invalid value: {:?}", value)),
}
}
@@ -103,6 +107,7 @@ impl InferenceModelType {
Self::StyleTTS2,
Self::ComfyUi,
Self::ConvertFbxToGltf,
Self::BvhToWorkflow,
])
}
}
@@ -129,6 +134,7 @@ mod tests {
assert_serialization(InferenceModelType::ComfyUi, "comfy_ui");
assert_serialization(InferenceModelType::StyleTTS2, "styletts2");
assert_serialization(InferenceModelType::ConvertFbxToGltf, "convert_fbx_gltf");
assert_serialization(InferenceModelType::BvhToWorkflow, "bvh_to_workflow");
}
#[test]
@@ -145,6 +151,7 @@ mod tests {
assert_eq!(InferenceModelType::StyleTTS2.to_str(), "styletts2");
assert_eq!(InferenceModelType::ComfyUi.to_str(), "comfy_ui");
assert_eq!(InferenceModelType::ConvertFbxToGltf.to_str(), "convert_fbx_gltf");
assert_eq!(InferenceModelType::BvhToWorkflow.to_str(), "bvh_to_workflow");
}
#[test]
@@ -161,13 +168,14 @@ mod tests {
assert_eq!(InferenceModelType::from_str("styletts2").unwrap(), InferenceModelType::StyleTTS2);
assert_eq!(InferenceModelType::from_str("comfy_ui").unwrap(), InferenceModelType::ComfyUi);
assert_eq!(InferenceModelType::from_str("convert_fbx_gltf").unwrap(), InferenceModelType::ConvertFbxToGltf);
assert_eq!(InferenceModelType::from_str("bvh_to_workflow").unwrap(), InferenceModelType::BvhToWorkflow);
}
#[test]
fn all_variants() {
// Static check
let mut variants = InferenceModelType::all_variants();
assert_eq!(variants.len(), 12);
assert_eq!(variants.len(), 13);
assert_eq!(variants.pop_first(), Some(InferenceModelType::RvcV2));
assert_eq!(variants.pop_first(), Some(InferenceModelType::SadTalker));
assert_eq!(variants.pop_first(), Some(InferenceModelType::SoVitsSvc));
@@ -180,6 +188,7 @@ mod tests {
assert_eq!(variants.pop_first(), Some(InferenceModelType::ComfyUi));
assert_eq!(variants.pop_first(), Some(InferenceModelType::StyleTTS2));
assert_eq!(variants.pop_first(), Some(InferenceModelType::ConvertFbxToGltf));
assert_eq!(variants.pop_first(), Some(InferenceModelType::BvhToWorkflow));
assert_eq!(variants.pop_first(), None);
// Generated check
@@ -26,6 +26,9 @@ pub enum MediaFileOriginCategory {
/// User uploaded files recorded directly from their device (browser, mobile), typically using device APIs.
DeviceApi,
/// From Storyteller Studio Engine
StoryEngine,
}
// TODO(bt, 2022-12-21): This desperately needs MySQL integration tests!
@@ -41,6 +44,7 @@ impl MediaFileOriginCategory {
Self::Processed => "processed",
Self::Upload => "upload",
Self::DeviceApi => "device_api",
Self::StoryEngine => "story_engine",
}
}
@@ -50,6 +54,7 @@ impl MediaFileOriginCategory {
"processed" => Ok(Self::Processed),
"upload" => Ok(Self::Upload),
"device_api" => Ok(Self::DeviceApi),
"story_engine" => Ok(Self::StoryEngine),
_ => Err(format!("invalid value: {:?}", value)),
}
}
@@ -62,6 +67,7 @@ impl MediaFileOriginCategory {
Self::Processed,
Self::Upload,
Self::DeviceApi,
Self::StoryEngine,
])
}
}
@@ -80,6 +86,7 @@ mod tests {
assert_serialization(MediaFileOriginCategory::Processed, "processed");
assert_serialization(MediaFileOriginCategory::Upload, "upload");
assert_serialization(MediaFileOriginCategory::DeviceApi, "device_api");
assert_serialization(MediaFileOriginCategory::StoryEngine, "story_engine");
}
#[test]
@@ -87,7 +94,7 @@ mod tests {
assert_eq!(MediaFileOriginCategory::Inference.to_str(), "inference");
assert_eq!(MediaFileOriginCategory::Processed.to_str(), "processed");
assert_eq!(MediaFileOriginCategory::Upload.to_str(), "upload");
assert_eq!(MediaFileOriginCategory::DeviceApi.to_str(), "device_api");
assert_eq!(MediaFileOriginCategory::StoryEngine.to_str(), "story_engine");
}
#[test]
@@ -96,17 +103,19 @@ mod tests {
assert_eq!(MediaFileOriginCategory::from_str("processed").unwrap(), MediaFileOriginCategory::Processed);
assert_eq!(MediaFileOriginCategory::from_str("upload").unwrap(), MediaFileOriginCategory::Upload);
assert_eq!(MediaFileOriginCategory::from_str("device_api").unwrap(), MediaFileOriginCategory::DeviceApi);
assert_eq!(MediaFileOriginCategory::from_str("story_engine").unwrap(), MediaFileOriginCategory::StoryEngine);
assert!(MediaFileOriginCategory::from_str("foo").is_err());
}
#[test]
fn all_variants() {
let mut variants = MediaFileOriginCategory::all_variants();
assert_eq!(variants.len(), 4);
assert_eq!(variants.len(), 5);
assert_eq!(variants.pop_first(), Some(MediaFileOriginCategory::Inference));
assert_eq!(variants.pop_first(), Some(MediaFileOriginCategory::Processed));
assert_eq!(variants.pop_first(), Some(MediaFileOriginCategory::Upload));
assert_eq!(variants.pop_first(), Some(MediaFileOriginCategory::DeviceApi));
assert_eq!(variants.pop_first(), Some(MediaFileOriginCategory::StoryEngine));
assert_eq!(variants.pop_first(), None);
}
}
@@ -128,5 +137,15 @@ mod tests {
assert_eq!(variant, MediaFileOriginCategory::from_str(&format!("{:?}", variant)).unwrap());
}
}
#[test]
fn serialized_length_ok_for_database() {
const MAX_LENGTH : usize = 16;
for variant in MediaFileOriginCategory::all_variants() {
let serialized = variant.to_str();
assert!(serialized.len() > 0, "variant {:?} is too short", variant);
assert!(serialized.len() <= MAX_LENGTH, "variant {:?} is too long", variant);
}
}
}
}
@@ -10,8 +10,8 @@ use utoipa::ToSchema;
///
/// DO NOT CHANGE VALUES WITHOUT A MIGRATION STRATEGY.
#[cfg_attr(test, derive(EnumIter, EnumCount))]
#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Deserialize, Serialize, ToSchema)]
#[serde(rename_all = "lowercase")]
#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Hash, Deserialize, Serialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum MediaFileType {
/// Audio files: wav, mp3, etc.
Audio,
@@ -39,6 +39,10 @@ pub enum MediaFileType {
/// glTF files (for Bevy)
Gltf,
/// Bevy's scene files (in RON; Rusty Object Notation)
/// This will be replaced with another format in future versions of Bevy
SceneRon,
}
// TODO(bt, 2022-12-21): This desperately needs MySQL integration tests!
@@ -58,6 +62,7 @@ impl MediaFileType {
Self::Fbx => "fbx",
Self::Glb => "glb",
Self::Gltf => "gltf",
Self::SceneRon => "scene_ron",
}
}
@@ -71,6 +76,7 @@ impl MediaFileType {
"fbx" => Ok(Self::Fbx),
"glb" => Ok(Self::Glb),
"gltf" => Ok(Self::Gltf),
"scene_ron" => Ok(Self::SceneRon),
_ => Err(format!("invalid value: {:?}", value)),
}
}
@@ -87,6 +93,7 @@ impl MediaFileType {
Self::Fbx,
Self::Glb,
Self::Gltf,
Self::SceneRon,
])
}
}
@@ -109,6 +116,7 @@ mod tests {
assert_serialization(MediaFileType::Fbx, "fbx");
assert_serialization(MediaFileType::Glb, "glb");
assert_serialization(MediaFileType::Gltf, "gltf");
assert_serialization(MediaFileType::SceneRon, "scene_ron");
}
}
@@ -120,10 +128,12 @@ mod tests {
assert_eq!(MediaFileType::Audio.to_str(), "audio");
assert_eq!(MediaFileType::Image.to_str(), "image");
assert_eq!(MediaFileType::Video.to_str(), "video");
assert_eq!(MediaFileType::Mocap.to_str(), "mocap");
assert_eq!(MediaFileType::Bvh.to_str(), "bvh");
assert_eq!(MediaFileType::Fbx.to_str(), "fbx");
assert_eq!(MediaFileType::Glb.to_str(), "glb");
assert_eq!(MediaFileType::Gltf.to_str(), "gltf");
assert_eq!(MediaFileType::SceneRon.to_str(), "scene_ron");
}
#[test]
@@ -136,6 +146,7 @@ mod tests {
assert_eq!(MediaFileType::from_str("fbx").unwrap(), MediaFileType::Fbx);
assert_eq!(MediaFileType::from_str("glb").unwrap(), MediaFileType::Glb);
assert_eq!(MediaFileType::from_str("gltf").unwrap(), MediaFileType::Gltf);
assert_eq!(MediaFileType::from_str("scene_ron").unwrap(), MediaFileType::SceneRon);
assert!(MediaFileType::from_str("foo").is_err());
}
}
@@ -146,7 +157,7 @@ mod tests {
#[test]
fn all_variants() {
let mut variants = MediaFileType::all_variants();
assert_eq!(variants.len(), 8);
assert_eq!(variants.len(), 9);
assert_eq!(variants.pop_first(), Some(MediaFileType::Audio));
assert_eq!(variants.pop_first(), Some(MediaFileType::Image));
assert_eq!(variants.pop_first(), Some(MediaFileType::Video));
@@ -155,6 +166,7 @@ mod tests {
assert_eq!(variants.pop_first(), Some(MediaFileType::Fbx));
assert_eq!(variants.pop_first(), Some(MediaFileType::Glb));
assert_eq!(variants.pop_first(), Some(MediaFileType::Gltf));
assert_eq!(variants.pop_first(), Some(MediaFileType::SceneRon));
assert_eq!(variants.pop_first(), None);
}
}
+2
View File
@@ -11,8 +11,10 @@ pub mod media_files;
pub mod media_uploads;
pub mod model_categories;
pub mod model_weights;
pub mod prompts;
pub mod trending_model_analytics;
pub mod tts_models;
pub mod usages;
pub mod user_bookmarks;
pub mod user_ratings;
pub mod voice_conversion_models;
@@ -0,0 +1 @@
pub mod prompt_type;
@@ -0,0 +1,128 @@
use std::collections::BTreeSet;
#[cfg(test)]
use strum::EnumCount;
#[cfg(test)]
use strum::EnumIter;
use utoipa::ToSchema;
/// Used in the `prompts` table in a `VARCHAR(16)` field.
///
/// DO NOT CHANGE VALUES WITHOUT A MIGRATION STRATEGY.
#[cfg_attr(test, derive(EnumIter, EnumCount))]
#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Deserialize, Serialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum PromptType {
/// Stable diffusion
StableDiffusion,
/// Comfy UI
ComfyUi,
}
// TODO(bt, 2022-12-21): This desperately needs MySQL integration tests!
impl_enum_display_and_debug_using_to_str!(PromptType);
impl_mysql_enum_coders!(PromptType);
impl_mysql_from_row!(PromptType);
/// NB: Legacy API for older code.
impl PromptType {
pub fn to_str(&self) -> &'static str {
match self {
Self::StableDiffusion => "stable_diffusion",
Self::ComfyUi => "comfy_ui",
}
}
pub fn from_str(value: &str) -> Result<Self, String> {
match value {
"stable_diffusion" => Ok(Self::StableDiffusion),
"comfy_ui" => Ok(Self::ComfyUi),
_ => Err(format!("invalid value: {:?}", value)),
}
}
pub fn all_variants() -> BTreeSet<Self> {
// NB: BTreeSet is sorted
// NB: BTreeSet::from() isn't const, but not worth using LazyStatic, etc.
BTreeSet::from([
Self::StableDiffusion,
Self::ComfyUi,
])
}
}
#[cfg(test)]
mod tests {
use crate::by_table::prompts::prompt_type::PromptType;
use crate::test_helpers::assert_serialization;
mod serde {
use super::*;
#[test]
fn test_serialization() {
assert_serialization(PromptType::StableDiffusion, "stable_diffusion");
assert_serialization(PromptType::ComfyUi, "comfy_ui");
}
}
mod impl_methods {
use super::*;
#[test]
fn to_str() {
assert_eq!(PromptType::StableDiffusion.to_str(), "stable_diffusion");
assert_eq!(PromptType::ComfyUi.to_str(), "comfy_ui");
}
#[test]
fn from_str() {
assert_eq!(PromptType::from_str("stable_diffusion").unwrap(), PromptType::StableDiffusion);
assert_eq!(PromptType::from_str("comfy_ui").unwrap(), PromptType::ComfyUi);
assert!(PromptType::from_str("foo").is_err());
}
}
mod manual_variant_checks {
use super::*;
#[test]
fn all_variants() {
let mut variants = PromptType::all_variants();
assert_eq!(variants.len(), 2);
assert_eq!(variants.pop_first(), Some(PromptType::StableDiffusion));
assert_eq!(variants.pop_first(), Some(PromptType::ComfyUi));
assert_eq!(variants.pop_first(), None);
}
}
mod mechanical_checks {
use super::*;
#[test]
fn variant_length() {
use strum::IntoEnumIterator;
assert_eq!(PromptType::all_variants().len(), PromptType::iter().len());
}
#[test]
fn round_trip() {
for variant in PromptType::all_variants() {
assert_eq!(variant, PromptType::from_str(variant.to_str()).unwrap());
assert_eq!(variant, PromptType::from_str(&format!("{}", variant)).unwrap());
assert_eq!(variant, PromptType::from_str(&format!("{:?}", variant)).unwrap());
}
}
#[test]
fn serialized_length_ok_for_database() {
const MAX_LENGTH : usize = 16;
for variant in PromptType::all_variants() {
let serialized = variant.to_str();
assert!(serialized.len() > 0, "variant {:?} is too short", variant);
assert!(serialized.len() <= MAX_LENGTH, "variant {:?} is too long", variant);
}
}
}
}
@@ -0,0 +1 @@
pub mod usages_type;
@@ -0,0 +1,128 @@
use std::collections::BTreeSet;
#[cfg(test)]
use strum::EnumCount;
#[cfg(test)]
use strum::EnumIter;
use utoipa::ToSchema;
/// Used in the `usages` table in a `VARCHAR(16)` field. (Two fields!)
///
/// DO NOT CHANGE VALUES WITHOUT A MIGRATION STRATEGY.
#[cfg_attr(test, derive(EnumIter, EnumCount))]
#[derive(Clone, Copy, Eq, PartialEq, Ord, PartialOrd, Deserialize, Serialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum UsagesType {
/// Represents a foreign key link against a model_weights record
ModelWeight,
/// Represents a foreign key link against a media_files record
MediaFile,
}
// TODO(bt, 2022-12-21): This desperately needs MySQL integration tests!
impl_enum_display_and_debug_using_to_str!(UsagesType);
impl_mysql_enum_coders!(UsagesType);
impl_mysql_from_row!(UsagesType);
/// NB: Legacy API for older code.
impl UsagesType {
pub fn to_str(&self) -> &'static str {
match self {
Self::ModelWeight => "model_weight",
Self::MediaFile => "media_file",
}
}
pub fn from_str(value: &str) -> Result<Self, String> {
match value {
"model_weight" => Ok(Self::ModelWeight),
"media_file" => Ok(Self::MediaFile),
_ => Err(format!("invalid value: {:?}", value)),
}
}
pub fn all_variants() -> BTreeSet<Self> {
// NB: BTreeSet is sorted
// NB: BTreeSet::from() isn't const, but not worth using LazyStatic, etc.
BTreeSet::from([
Self::ModelWeight,
Self::MediaFile,
])
}
}
#[cfg(test)]
mod tests {
use crate::by_table::usages::usages_type::UsagesType;
use crate::test_helpers::assert_serialization;
mod serde {
use super::*;
#[test]
fn test_serialization() {
assert_serialization(UsagesType::ModelWeight, "model_weight");
assert_serialization(UsagesType::MediaFile, "media_file");
}
}
mod impl_methods {
use super::*;
#[test]
fn to_str() {
assert_eq!(UsagesType::ModelWeight.to_str(), "model_weight");
assert_eq!(UsagesType::MediaFile.to_str(), "media_file");
}
#[test]
fn from_str() {
assert_eq!(UsagesType::from_str("model_weight").unwrap(), UsagesType::ModelWeight);
assert_eq!(UsagesType::from_str("media_file").unwrap(), UsagesType::MediaFile);
assert!(UsagesType::from_str("foo").is_err());
}
}
mod manual_variant_checks {
use super::*;
#[test]
fn all_variants() {
let mut variants = UsagesType::all_variants();
assert_eq!(variants.len(), 2);
assert_eq!(variants.pop_first(), Some(UsagesType::ModelWeight));
assert_eq!(variants.pop_first(), Some(UsagesType::MediaFile));
assert_eq!(variants.pop_first(), None);
}
}
mod mechanical_checks {
use super::*;
#[test]
fn variant_length() {
use strum::IntoEnumIterator;
assert_eq!(UsagesType::all_variants().len(), UsagesType::iter().len());
}
#[test]
fn round_trip() {
for variant in UsagesType::all_variants() {
assert_eq!(variant, UsagesType::from_str(variant.to_str()).unwrap());
assert_eq!(variant, UsagesType::from_str(&format!("{}", variant)).unwrap());
assert_eq!(variant, UsagesType::from_str(&format!("{:?}", variant)).unwrap());
}
}
#[test]
fn serialized_length_ok_for_database() {
const MAX_LENGTH : usize = 16;
for variant in UsagesType::all_variants() {
let serialized = variant.to_str();
assert!(serialized.len() > 0, "variant {:?} is too short", variant);
assert!(serialized.len() <= MAX_LENGTH, "variant {:?} is too long", variant);
}
}
}
}
+2
View File
@@ -34,6 +34,7 @@ pub(crate) enum TokenPrefix {
ModelWeight,
NewsStory, // NB: aichatbot / sqlite
PasswordReset,
Prompt,
TtsRenderTask, // NB: aichatbot / sqlite
User,
UserBookmark,
@@ -101,6 +102,7 @@ impl PrefixGenerator for TokenPrefix {
Self::ModelWeight => "weight_",
Self::NewsStory => "news_story_",
Self::PasswordReset => "pw_reset_",
Self::Prompt => "prompt_",
Self::TtsRenderTask => "tts_task_",
Self::User => "user_", // NB: Previously "U:"
Self::UserBookmark => "ub_",
@@ -6,7 +6,7 @@ use utoipa::ToSchema;
use crate::prefixes::TokenPrefix;
/// The primary key for Audit Logs.
/// The primary key for Media Files
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, sqlx::Type, Debug, Serialize, Deserialize, ToSchema)]
#[sqlx(transparent)]
pub struct MediaFileToken(pub String);
+1
View File
@@ -13,6 +13,7 @@ pub mod media_uploads;
pub mod model_categories;
pub mod model_weights;
pub mod password_reset;
pub mod prompts;
pub mod sqlite;
pub mod tts_inference_jobs;
pub mod tts_model_upload_jobs;
@@ -0,0 +1,15 @@
use std::fmt::Debug;
use serde::Deserialize;
use serde::Serialize;
use utoipa::ToSchema;
use crate::prefixes::TokenPrefix;
/// The primary key for Prompts
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, sqlx::Type, Debug, Serialize, Deserialize, ToSchema)]
#[sqlx(transparent)]
pub struct PromptToken(pub String);
impl_string_token!(PromptToken);
impl_crockford_generator!(PromptToken, 32usize, TokenPrefix::Prompt, CrockfordLower);
@@ -2,11 +2,12 @@ use std::fmt::Debug;
use serde::Deserialize;
use serde::Serialize;
use utoipa::ToSchema;
use crate::prefixes::TokenPrefix;
/// The primary key for the "zs_voice_datasets" table.
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, sqlx::Type, Debug, Serialize, Deserialize)]
#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, sqlx::Type, Debug, Serialize, Deserialize, ToSchema)]
#[sqlx(transparent)]
pub struct ZsVoiceDatasetToken(pub String);
-33
View File
@@ -1,33 +0,0 @@
[package]
name = "database-cleanup"
publish = false
edition = "2018"
version = "0.0.1"
authors = [
"Brandon Thomas <bt@brand.io>",
"Brandon Thomas <echelon@gmail.com>",
]
[[bin]]
name = "database-cleanup"
path = "src/main.rs"
[dependencies]
# Internal
container_common = { path = "../../lib/deprecated/container_common" }
easyenv = { path = "../../lib/easyenv" }
# Workspace hack (faster compile times)
my-workspace-hack = { version = "0.1", path = "../../my-workspace-hack" }
# External
anyhow = "1.0.75"
# TODO/NB: Commenting out clap4 as it prevents windows builds
# clap4 = { package = "clap", version = "4.0" } # TODO/NB: We're using an older version of clap elsewhere, hence the naming.
dotenv = "0.15.0"
log = "0.4.14"
# Serialization
serde = "1.0.125"
serde_derive = "1.0.125"
-12
View File
@@ -1,12 +0,0 @@
use easyenv::init_all_with_default_logging;
use log::info;
use container_common::anyhow_result::AnyhowResult;
fn main() -> AnyhowResult<()> {
init_all_with_default_logging(None);
info!("TODO...");
Ok(())
}
-47
View File
@@ -1,47 +0,0 @@
[package]
name = "dev-database-seed"
edition = "2018"
version = "0.0.1"
authors = [
"Brandon Thomas <bt@brand.io>",
"Brandon Thomas <echelon@gmail.com>",
]
publish = false
[[bin]]
name = "dev-database-seed"
path = "src/main.rs"
[dependencies]
# Internal
buckets = { path = "../../_types/buckets" }
cloud_storage = { path = "../../lib/api_clients/cloud_storage" }
config = { path = "../../lib/deprecated/config" }
easyenv = { path = "../../lib/easyenv" }
enums = { path = "../../_types/enums" }
errors = { path = "../../lib/errors" }
filesys = { path = "../../lib/files/filesys" }
hashing = { path = "../../lib/files/hashing" }
idempotency = { path = "../../lib/idempotency" }
mimetypes = { path = "../../lib/files/mimetypes" }
mysql_queries = { path = "../../lib/mysql_queries" }
storyteller_root = { path = "../../lib/storyteller_root" }
tokens = { path = "../../_types/tokens" }
# Workspace hack (faster compile times)
my-workspace-hack = { version = "0.1", path = "../../my-workspace-hack" }
# External
log = "0.4.14"
clap = "4.4.8"
rand = "0.8.5"
# Runtime
# NB: We switched to Tokio from `async-std` for broader ecosystem support.
tokio = { version = "1.34.0", features = ["macros"] }
sqlx = { version = "0.7.2", features = [ "mysql", "runtime-tokio", "tls-rustls", "chrono" ] }
elasticsearch = "8.5.0-alpha.1"
[dev-dependencies]
# None yet
@@ -0,0 +1,47 @@
[package]
name = "dev-database-seed"
edition = "2018"
version = "0.0.1"
authors = [
"Brandon Thomas <bt@brand.io>",
"Brandon Thomas <echelon@gmail.com>",
]
publish = false
[[bin]]
name = "dev-database-seed"
path = "src/main.rs"
[dependencies]
# Internal
buckets = { path = "../../../_types/buckets" }
cloud_storage = { path = "../../../lib/api_clients/cloud_storage" }
config = { path = "../../../lib/deprecated/config" }
easyenv = { path = "../../../lib/easyenv" }
enums = { path = "../../../_types/enums" }
errors = { path = "../../../lib/errors" }
filesys = { path = "../../../lib/files/filesys" }
hashing = { path = "../../../lib/files/hashing" }
idempotency = { path = "../../../lib/idempotency" }
mimetypes = { path = "../../../lib/files/mimetypes" }
mysql_queries = { path = "../../../lib/mysql_queries" }
storyteller_root = { path = "../../../lib/storyteller_root" }
tokens = { path = "../../../_types/tokens" }
# Workspace hack (faster compile times)
my-workspace-hack = { version = "0.1", path = "../../../my-workspace-hack" }
# External
log = "0.4.14"
clap = "4.4.8"
rand = "0.8.5"
# Runtime
# NB: We switched to Tokio from `async-std` for broader ecosystem support.
tokio = { version = "1.34.0", features = ["macros"] }
sqlx = { version = "0.7.2", features = [ "mysql", "runtime-tokio", "tls-rustls", "chrono" ] }
elasticsearch = "8.5.0-alpha.1"
[dev-dependencies]
# None yet
@@ -5,9 +5,7 @@ use sqlx::mysql::MySqlPoolOptions;
use config::shared_constants::{DEFAULT_MYSQL_CONNECTION_STRING, DEFAULT_RUST_LOG};
use errors::AnyhowResult;
use crate::bucket_clients::get_bucket_clients;
use crate::cli_args::parse_cli_args;
use crate::seeding::model_weights::seed_weights;
pub mod bucket_clients;
@@ -28,18 +26,18 @@ pub async fn main() -> AnyhowResult<()> {
"MYSQL_URL",
DEFAULT_MYSQL_CONNECTION_STRING);
let pool = MySqlPoolOptions::new()
let _pool = MySqlPoolOptions::new()
.max_connections(easyenv::get_env_num("MYSQL_MAX_CONNECTIONS", 3)?)
.connect(&db_connection_string)
.await?;
let args = parse_cli_args()?;
let _args = parse_cli_args()?;
let mut maybe_bucket_clients = None;
//let mut maybe_bucket_clients = None;
if args.seed_cloud_bucket {
maybe_bucket_clients = Some(get_bucket_clients()?);
}
//if args.seed_cloud_bucket {
// maybe_bucket_clients = Some(get_bucket_clients()?);
//}
// let mut maybe_elasticsearch = None;
//
@@ -47,11 +45,11 @@ pub async fn main() -> AnyhowResult<()> {
// maybe_elasticsearch = Some(get_elasticsearch_client());
// }
// seed_user_accounts(&pool).await?;
//seed_user_accounts(&pool).await?;
// seed_media_files(&pool, maybe_bucket_clients.as_ref()).await?;
//seed_zero_shot_tts(&pool, maybe_bucket_clients.as_ref()).await?;
// seed_voice_conversion(&pool).await?;
seed_weights(&pool).await?;
//seed_weights(&pool).await?;
// seed_media_seedtool(&pool).await?;
// seed_tts_tacotron2(&pool, maybe_bucket_clients.as_ref()).await?;
@@ -6,7 +6,7 @@ use sqlx::{MySql, Pool};
use cloud_storage::remote_file_manager::remote_cloud_bucket_details::RemoteCloudBucketDetails;
use cloud_storage::remote_file_manager::remote_cloud_file_manager::RemoteCloudFileClient;
use cloud_storage::remote_file_manager::weights_descriptor::{WeightsLoRADescriptor, WeightsSD15Descriptor, WeightsSD15CkptDescriptor, WeightsWorkflowDescriptor};
use cloud_storage::remote_file_manager::weights_descriptor::{WeightsLoRADescriptor, WeightsSD15Descriptor, WeightsWorkflowDescriptor};
use enums::by_table::model_weights::{
weights_category::WeightsCategory,
weights_types::WeightsType,
@@ -41,14 +41,14 @@ pub async fn test_seed_weights_files() -> AnyhowResult<()> {
let bucket_details1 = RemoteCloudBucketDetails {
object_hash: String::from("apa0ej6es8d3ss2gwtf1cghge35qn9tn"),
prefix: String::from("sd15"),
suffix: String::from("safetensors"),
prefix: String::from("sd15_"),
suffix: String::from(".safetensors"),
};
let bucket_details2 = RemoteCloudBucketDetails {
object_hash: String::from("27kz11et18fargyyxbj66ntfn621k9d3"),
prefix: String::from("loRA"),
suffix: String::from("safetensors"),
prefix: String::from("loRA_"),
suffix: String::from(".safetensors"),
};
remote_cloud_file_client.download_file(bucket_details1, String::from("./checkpoint")).await?;
@@ -331,10 +331,6 @@ pub async fn seed_weights_for_paging(mysql_pool: &Pool<MySql>, user_token: UserT
// private_bucket_hash = format!("bucket_hash{}", i);
private_bucket_prefix = format!("_fake");
private_bucket_extension = format!("rvcV2");
//cached_user_ratings_total_count = i;
//cached_user_ratings_positive_count = i;
//cached_user_ratings_negative_count = i;
//cached_user_ratings_ratio = i as u32 / 100;
version = i as i32;
println!("Out of range");
@@ -346,6 +342,7 @@ pub async fn seed_weights_for_paging(mysql_pool: &Pool<MySql>, user_token: UserT
weights_type: weights_types, // replace with actual WeightsType
weights_category, // replace with actual WeightsCategory
title,
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some(description),
maybe_description_rendered_html: Some(description_rendered_html.to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -615,6 +612,7 @@ Noosphere by skumerz + dalcefoPainting + 饭特稀V08 by zhazhahui345 + GhostMix
weights_type: WeightsType::StableDiffusion15, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
title: "Dragonfruit".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some(sd1_5_markdown_description.to_string()),
maybe_description_rendered_html: Some("<p>Description</p>".to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -636,6 +634,7 @@ Noosphere by skumerz + dalcefoPainting + 饭特稀V08 by zhazhahui345 + GhostMix
token: &model_weight_token2, // replace with actual ModelWeightToken
weights_type: WeightsType::LoRA, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
maybe_cover_image_media_file_token: None,
title: "MIHOYO Collection 米家全家桶 (Honkai Impact 3rd | Honkai Star Rail | Genshin Impact | Zenless Zone Zero)".to_string(),
maybe_description_markdown: Some(miyhoyo_description.to_string()),
maybe_description_rendered_html: Some(miyhoyo_description.to_string()),
@@ -659,6 +658,7 @@ Noosphere by skumerz + dalcefoPainting + 饭特稀V08 by zhazhahui345 + GhostMix
weights_type: WeightsType::StableDiffusion15, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
title: "z-vae".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some(sd_vae_description.to_string()),
maybe_description_rendered_html: Some("<p>Description</p>".to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -685,9 +685,9 @@ Noosphere by skumerz + dalcefoPainting + 饭特稀V08 by zhazhahui345 + GhostMix
pub async fn seed_workflows_for_testing_inference(mysql_pool: &Pool<MySql>, user_token: UserToken) -> AnyhowResult<()>{
let model_weight_token1 = ModelWeightToken::generate_for_testing_and_dev_seeding_never_use_in_production_seriously();
let model_weight_token2 = ModelWeightToken::generate_for_testing_and_dev_seeding_never_use_in_production_seriously();
let model_weight_token3 = ModelWeightToken::generate_for_testing_and_dev_seeding_never_use_in_production_seriously();
let model_weight_token4 = ModelWeightToken::new_from_str("weight_n8sz47gmfw2zx02snrbz88ns9");
//let model_weight_token2 = ModelWeightToken::generate_for_testing_and_dev_seeding_never_use_in_production_seriously();
//let model_weight_token3 = ModelWeightToken::generate_for_testing_and_dev_seeding_never_use_in_production_seriously();
//let model_weight_token4 = ModelWeightToken::new_from_str("weight_n8sz47gmfw2zx02snrbz88ns9");
let mut path_to_comfy = get_seed_tool_data_root();
path_to_comfy.push("models/workflows/comfyui/yae_video_prod.json");
@@ -715,6 +715,7 @@ pub async fn seed_workflows_for_testing_inference(mysql_pool: &Pool<MySql>, user
weights_type: WeightsType::ComfyUi, // replace with actual WeightsType
weights_category: WeightsCategory::WorkflowConfig, // replace with actual WeightsCategory
title: "yae-video-prod".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("ComfyUI Workflow".to_string()),
maybe_description_rendered_html: Some("<p>Description</p>".to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -825,6 +826,7 @@ pub async fn seed_weights_for_user_token(
weights_type: WeightsType::RvcV2, // replace with actual WeightsType
weights_category: WeightsCategory::VoiceConversion, // replace with actual WeightsCategory
title: "Title 1".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 1".to_string()),
maybe_description_rendered_html: Some("<p>Description 1</p>".to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -836,8 +838,8 @@ pub async fn seed_weights_for_user_token(
file_size_bytes: 1024,
file_checksum_sha2: "checksum1".to_string(),
public_bucket_hash: "bucket_hash1".to_string(),
maybe_public_bucket_prefix: Some("_fake".to_string()),
maybe_public_bucket_extension: Some("rvc".to_string()),
maybe_public_bucket_prefix: Some("rvc_".to_string()),
maybe_public_bucket_extension: Some(".pt".to_string()),
//cached_user_ratings_total_count: 10,
//cached_user_ratings_positive_count: 9,
//cached_user_ratings_negative_count: 1,
@@ -850,6 +852,7 @@ pub async fn seed_weights_for_user_token(
weights_type: WeightsType::HifiganTacotron2, // replace with actual WeightsType
weights_category: WeightsCategory::TextToSpeech, // replace with actual WeightsCategory
title: "Title 2".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 2".to_string()),
maybe_description_rendered_html: Some("<p>Description 2</p>".to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -875,6 +878,7 @@ pub async fn seed_weights_for_user_token(
weights_type: WeightsType::StableDiffusion15, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
title: "Title 3".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 3".to_string()),
maybe_description_rendered_html: Some("<p>Description 3</p>".to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -900,6 +904,7 @@ pub async fn seed_weights_for_user_token(
weights_type: WeightsType::LoRA, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
title: "Title 4".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 4".to_string()),
maybe_description_rendered_html: Some("<p>Description 4</p>".to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -925,6 +930,7 @@ pub async fn seed_weights_for_user_token(
weights_type: WeightsType::LoRA, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
title: "Title 5".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 4".to_string()),
maybe_description_rendered_html: Some("<p>Description 4</p>".to_string()),
creator_user_token: Some(&user_token), // replace with actual UserToken
@@ -976,6 +982,7 @@ pub async fn original_seed_weights(mysql_pool: &Pool<MySql>, _user_token: UserTo
weights_type: WeightsType::RvcV2, // replace with actual WeightsType
weights_category: WeightsCategory::VoiceConversion, // replace with actual WeightsCategory
title: "Title 1".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 1".to_string()),
maybe_description_rendered_html: Some("<p>Description 1</p>".to_string()),
creator_user_token: Some(&creator_token1), // replace with actual UserToken
@@ -1001,6 +1008,7 @@ pub async fn original_seed_weights(mysql_pool: &Pool<MySql>, _user_token: UserTo
weights_type: WeightsType::HifiganTacotron2, // replace with actual WeightsType
weights_category: WeightsCategory::TextToSpeech, // replace with actual WeightsCategory
title: "Title 2".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 2".to_string()),
maybe_description_rendered_html: Some("<p>Description 2</p>".to_string()),
creator_user_token: Some(&creator_token2), // replace with actual UserToken
@@ -1026,6 +1034,7 @@ pub async fn original_seed_weights(mysql_pool: &Pool<MySql>, _user_token: UserTo
weights_type: WeightsType::StableDiffusion15, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
title: "Title 3".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 3".to_string()),
maybe_description_rendered_html: Some("<p>Description 3</p>".to_string()),
creator_user_token: Some(&creator_token3), // replace with actual UserToken
@@ -1051,6 +1060,7 @@ pub async fn original_seed_weights(mysql_pool: &Pool<MySql>, _user_token: UserTo
weights_type: WeightsType::LoRA, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
title: "Title 4".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 4".to_string()),
maybe_description_rendered_html: Some("<p>Description 4</p>".to_string()),
creator_user_token: Some(&creator_token4), // replace with actual UserToken
@@ -1076,6 +1086,7 @@ pub async fn original_seed_weights(mysql_pool: &Pool<MySql>, _user_token: UserTo
weights_type: WeightsType::LoRA, // replace with actual WeightsType
weights_category: WeightsCategory::ImageGeneration, // replace with actual WeightsCategory
title: "Title 5".to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some("Description 5".to_string()),
maybe_description_rendered_html: Some("<p>Description 5</p>".to_string()),
creator_user_token: Some(&creator_token5), // replace with actual UserToken
@@ -1119,9 +1130,9 @@ pub async fn seed_weights(mysql_pool: &Pool<MySql>) -> AnyhowResult<()> {
// original_seed_weights(mysql_pool,user_token).await?;
// seed_weights_for_user_token(mysql_pool, user_token).await?;
// seed_weights_for_paging(mysql_pool,user_token).await?;
// seed_weights_for_testing_inference(mysql_pool,user_token.clone()).await?;
seed_weights_for_testing_inference(mysql_pool,user_token.clone()).await?;
// println!("TESTING DOWLOAD");
// test_seed_weights_files().await?;
seed_workflows_for_testing_inference(mysql_pool,user_token.clone()).await?;
//test_seed_weights_files().await?;
// seed_workflows_for_testing_inference(mysql_pool,user_token.clone()).await?;
Ok(())
}
@@ -1,4 +1,5 @@
use std::path::Path;
use std::result::Result::Ok;
use log::info;
use rand::Rng;
@@ -25,7 +26,7 @@ use tokens::tokens::users::UserToken;
use crate::bucket_clients::BucketClients;
use crate::seeding::users::HANASHI_USER_TOKEN;
use std::result::Result::Ok;
pub async fn seed_weights_files(
mysql_pool: &Pool<MySql>,
maybe_bucket_clients: Option<&BucketClients>
@@ -129,6 +130,7 @@ pub async fn seed_weights_files(
weights_type, // Assuming weights_type is defined elsewhere
weights_category, // Assuming weights_category is defined elsewhere
title: title.to_string(),
maybe_cover_image_media_file_token: None,
maybe_description_markdown: Some(description.to_string()),
maybe_description_rendered_html: Some(description_rendered_html.to_string()),
creator_user_token: Some(&user_token),
@@ -14,19 +14,19 @@ path = "src/main.rs"
[dependencies]
# Internal
buckets = { path = "../../_types/buckets" }
cloud_storage = { path = "../../lib/api_clients/cloud_storage" }
config = { path = "../../lib/deprecated/config" }
easyenv = { path = "../../lib/easyenv" }
enums = { path = "../../_types/enums" }
errors = { path = "../../lib/errors" }
filesys = { path = "../../lib/files/filesys" }
mimetypes = { path = "../../lib/files/mimetypes" }
mysql_queries = { path = "../../lib/mysql_queries" }
tokens = { path = "../../_types/tokens" }
buckets = { path = "../../../_types/buckets" }
cloud_storage = { path = "../../../lib/api_clients/cloud_storage" }
config = { path = "../../../lib/deprecated/config" }
easyenv = { path = "../../../lib/easyenv" }
enums = { path = "../../../_types/enums" }
errors = { path = "../../../lib/errors" }
filesys = { path = "../../../lib/files/filesys" }
mimetypes = { path = "../../../lib/files/mimetypes" }
mysql_queries = { path = "../../../lib/mysql_queries" }
tokens = { path = "../../../_types/tokens" }
# Workspace hack (faster compile times)
my-workspace-hack = { version = "0.1", path = "../../my-workspace-hack" }
my-workspace-hack = { version = "0.1", path = "../../../my-workspace-hack" }
# External
clap = "4.4.8"

Some files were not shown because too many files have changed in this diff Show More