start tracking inference job product category for easier analytics

This commit is contained in:
Brandon Thomas committed 2024-08-30 01:09:41 -04:00
1 parent 4cb8226117
commit 52c348be83
21 files changed
+77 -13

No files matched your search

@@ -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_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"
}
@@ -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 product_category = ?,\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": 22
},
"nullable": []
},
"hash": "b48e80845d80a6c07099918807d0495b8d70dca339cb1332e05bb3943fbb24c4"
}
@@ -16,6 +16,12 @@ use strum::EnumIter;
#[derive(Clone, Copy, Eq, PartialEq, Hash, Ord, PartialOrd, Deserialize, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum InferenceJobProductCategory {
/// Lipsync: Face Fusion
LipsyncFaceFusion,
/// Lipsync: SadTalker
LipsyncSadTalker,
/// Live Portrait (normal interface)
LivePortrait,
@@ -52,6 +58,8 @@ impl_mysql_enum_coders!(InferenceJobProductCategory);
impl InferenceJobProductCategory {
pub fn to_str(&self) -> &'static str {
match self {
Self::LipsyncFaceFusion => "lipsync_face_fusion",
Self::LipsyncSadTalker => "lipsync_sad_talker",
Self::LivePortrait => "live_portrait",
Self::LivePortraitWebcam => "live_portrait_webcam",
Self::Studio => "studio",
@@ -66,6 +74,8 @@ impl InferenceJobProductCategory {
pub fn from_str(value: &str) -> Result<Self, String> {
match value {
"lipsync_face_fusion" => Ok(Self::LipsyncFaceFusion),
"lipsync_sad_talker" => Ok(Self::LipsyncSadTalker),
"live_portrait" => Ok(Self::LivePortrait),
"live_portrait_webcam" => Ok(Self::LivePortraitWebcam),
"studio" => Ok(Self::Studio),
@@ -83,6 +93,8 @@ impl InferenceJobProductCategory {
// NB: BTreeSet is sorted
// NB: BTreeSet::from() isn't const, but not worth using LazyStatic, etc.
BTreeSet::from([
Self::LipsyncFaceFusion,
Self::LipsyncSadTalker,
Self::LivePortrait,
Self::LivePortraitWebcam,
Self::Studio,
@@ -106,6 +118,8 @@ mod tests {
#[test]
fn test_serialization() {
assert_serialization(InferenceJobProductCategory::LipsyncFaceFusion, "lipsync_face_fusion");
assert_serialization(InferenceJobProductCategory::LipsyncSadTalker, "lipsync_sad_talker");
assert_serialization(InferenceJobProductCategory::LivePortrait, "live_portrait");
assert_serialization(InferenceJobProductCategory::LivePortraitWebcam, "live_portrait_webcam");
assert_serialization(InferenceJobProductCategory::Studio, "studio");
@@ -119,6 +133,8 @@ mod tests {
#[test]
fn to_str() {
assert_eq!(InferenceJobProductCategory::LipsyncFaceFusion.to_str(), "lipsync_face_fusion");
assert_eq!(InferenceJobProductCategory::LipsyncSadTalker.to_str(), "lipsync_sad_talker");
assert_eq!(InferenceJobProductCategory::LivePortrait.to_str(), "live_portrait");
assert_eq!(InferenceJobProductCategory::LivePortraitWebcam.to_str(), "live_portrait_webcam");
assert_eq!(InferenceJobProductCategory::Studio.to_str(), "studio");
@@ -132,6 +148,8 @@ mod tests {
#[test]
fn from_str() {
assert_eq!(InferenceJobProductCategory::from_str("lipsync_face_fusion").unwrap(), InferenceJobProductCategory::LipsyncFaceFusion);
assert_eq!(InferenceJobProductCategory::from_str("lipsync_sad_talker").unwrap(), InferenceJobProductCategory::LipsyncSadTalker);
assert_eq!(InferenceJobProductCategory::from_str("live_portrait").unwrap(), InferenceJobProductCategory::LivePortrait);
assert_eq!(InferenceJobProductCategory::from_str("live_portrait_webcam").unwrap(), InferenceJobProductCategory::LivePortraitWebcam);
assert_eq!(InferenceJobProductCategory::from_str("studio").unwrap(), InferenceJobProductCategory::Studio);
@@ -147,7 +165,9 @@ mod tests {
fn all_variants() {
// Static check
let mut variants = InferenceJobProductCategory::all_variants();
assert_eq!(variants.len(), 9);
assert_eq!(variants.len(), 11);
assert_eq!(variants.pop_first(), Some(InferenceJobProductCategory::LipsyncFaceFusion));
assert_eq!(variants.pop_first(), Some(InferenceJobProductCategory::LipsyncSadTalker));
assert_eq!(variants.pop_first(), Some(InferenceJobProductCategory::LivePortrait));
assert_eq!(variants.pop_first(), Some(InferenceJobProductCategory::LivePortraitWebcam));
assert_eq!(variants.pop_first(), Some(InferenceJobProductCategory::Studio));
@@ -4,6 +4,7 @@ use sqlx::MySqlPool;
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use enums::common::visibility::Visibility;
@@ -23,6 +24,8 @@ pub struct InsertGenericInferenceArgs<'a> {
// a concrete job type.
pub job_type: InferenceJobType,
pub maybe_product_category: Option<InferenceJobProductCategory>,
pub inference_category: InferenceCategory,
pub maybe_model_type: Option<InferenceModelType>,
pub maybe_model_token: Option<&'a str>,
@@ -89,6 +92,8 @@ SET
job_type = ?,
product_category = ?,
inference_category = ?,
maybe_model_type = ?,
maybe_model_token = ?,
@@ -123,6 +128,8 @@ SET
args.job_type.to_str(),
args.maybe_product_category.map(|c| c.to_str()),
args.inference_category.to_str(),
args.maybe_model_type.map(|t| t.to_str()),
@@ -11,6 +11,7 @@ use actix_web::http::StatusCode;
use log::{info, warn};
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use enums::common::visibility::Visibility;
@@ -298,6 +299,7 @@ pub async fn enqueue_face_animation_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::SadTalker,
maybe_product_category: Some(InferenceJobProductCategory::LipsyncSadTalker),
inference_category: InferenceCategory::LipsyncAnimation,
maybe_model_type: Some(InferenceModelType::SadTalker), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -201,6 +201,7 @@ pub async fn enqueue_rerender_animation_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::RerenderAVideo,
maybe_product_category: None, // ReRender was never launched
inference_category: InferenceCategory::VideoFilter,
maybe_model_type: Some(InferenceModelType::RerenderAVideo), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -192,6 +192,7 @@ pub async fn enqueue_fbx_to_gltf_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::ConvertFbxToGltf,
maybe_product_category: None, // This is not a product
inference_category: InferenceCategory::FormatConversion,
maybe_model_type: Some(InferenceModelType::ConvertFbxToGltf),
maybe_model_token: None,
@@ -250,6 +250,7 @@ pub async fn enqueue_render_engine_scene_to_video_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::BevyToWorkflow,
maybe_product_category: None, // This is not a product anymore
inference_category: InferenceCategory::ConvertBvhToWorkflow,
maybe_model_type: Some(InferenceModelType::BvhToWorkflow),
maybe_model_token: None,
@@ -412,6 +412,7 @@ pub async fn enqueue_image_generation_request(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::StableDiffusion,
maybe_product_category: None, // This is not a product anymore
inference_category: InferenceCategory::ImageGeneration,
maybe_model_type: Some(InferenceModelType::StableDiffusion), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -205,6 +205,7 @@ pub async fn enqueue_mocapnet_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::MocapNet,
maybe_product_category: None, // This is not a product anymore
inference_category: InferenceCategory::Mocap,
maybe_model_type: Some(InferenceModelType::MocapNet), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -170,6 +170,7 @@ pub async fn enqueue_gptsovits_model_download_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::GptSovits,
maybe_product_category: None, // Do not count downloads as product usage (or perhaps they should be their own)
inference_category: InferenceCategory::DeprecatedField,
maybe_model_type: None,
maybe_model_token: None,
@@ -17,6 +17,7 @@ use rand::seq::SliceRandom;
use utoipa::ToSchema;
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use enums::common::visibility::Visibility;
@@ -420,9 +421,16 @@ pub async fn enqueue_infer_tts_handler(
_ => None, // NB: Shouldn't occur
};
let maybe_product_category = match tts_model.job_type() {
InferenceJobType::Tacotron2 => Some(InferenceJobProductCategory::TtsTacotron2),
InferenceJobType::GptSovits => Some(InferenceJobProductCategory::TtsGptSoVits),
_ => None,
};
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: tts_model.job_type(),
maybe_product_category,
inference_category: InferenceCategory::TextToSpeech,
maybe_model_type,
maybe_model_token: Some(request.tts_model_token.as_str()),
@@ -18,6 +18,7 @@ use utoipa::ToSchema;
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_input_source_token_type::InferenceInputSourceTokenType;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use enums::common::visibility::Visibility;
@@ -357,9 +358,16 @@ pub async fn enqueue_voice_conversion_inference_handler(
}
};
let maybe_product_category = match model_inference_info.job_model_type {
InferenceModelType::RvcV2 => Some(InferenceJobProductCategory::VcRvc2),
InferenceModelType::SoVitsSvc => Some(InferenceJobProductCategory::VcSvc),
_ => None,
};
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type,
maybe_product_category,
inference_category: InferenceCategory::VoiceConversion,
maybe_model_type: Some(model_inference_info.job_model_type),
maybe_model_token: Some(&model_token),
@@ -14,6 +14,7 @@ use serde::Serialize;
use utoipa::ToSchema;
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use enums::common::visibility::Visibility;
@@ -192,6 +193,7 @@ pub async fn enqueue_tts_request(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::StyleTTS2,
maybe_product_category: Some(InferenceJobProductCategory::TtsStyleTts2),
inference_category: InferenceCategory::TextToSpeech,
maybe_model_type: Some(InferenceModelType::StyleTTS2), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -13,6 +13,7 @@ use serde::Deserialize;
use serde::Serialize;
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use http_server_common::request::get_request_header_optional::get_request_header_optional;
@@ -178,6 +179,7 @@ pub async fn create_voice_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::StyleTTS2,
maybe_product_category: Some(InferenceJobProductCategory::TtsStyleTts2), // Perhaps we should count this another way?
inference_category: InferenceCategory::TextToSpeech,
maybe_model_type: Some(InferenceModelType::StyleTTS2), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -13,6 +13,7 @@ use log::{error, info, warn};
use utoipa::ToSchema;
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use enums::common::visibility::Visibility;
@@ -257,6 +258,7 @@ pub async fn enqueue_live_portrait_workflow_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::LivePortrait,
maybe_product_category: Some(InferenceJobProductCategory::LivePortrait),
inference_category: InferenceCategory::LivePortrait,
maybe_model_type: None,
maybe_model_token: None,
@@ -13,6 +13,7 @@ use log::{error, info, warn};
use utoipa::ToSchema;
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use enums::common::visibility::Visibility;
@@ -320,6 +321,7 @@ pub async fn enqueue_studio_workflow_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::ComfyUi,
maybe_product_category: Some(InferenceJobProductCategory::Studio),
inference_category: InferenceCategory::Workflow,
maybe_model_type: Some(InferenceModelType::ComfyUi), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -13,6 +13,7 @@ use log::{error, info, warn};
use utoipa::ToSchema;
use enums::by_table::generic_inference_jobs::inference_category::InferenceCategory;
use enums::by_table::generic_inference_jobs::inference_job_product_category::InferenceJobProductCategory;
use enums::by_table::generic_inference_jobs::inference_job_type::InferenceJobType;
use enums::by_table::generic_inference_jobs::inference_model_type::InferenceModelType;
use enums::common::visibility::Visibility;
@@ -320,6 +321,7 @@ pub async fn enqueue_video_style_transfer_workflow_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::ComfyUi,
maybe_product_category: Some(InferenceJobProductCategory::Vst),
inference_category: InferenceCategory::Workflow,
maybe_model_type: Some(InferenceModelType::ComfyUi), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -296,6 +296,7 @@ pub async fn enqueue_comfy_ui_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::ComfyUi,
maybe_product_category: None,
inference_category: InferenceCategory::Workflow,
maybe_model_type: Some(InferenceModelType::ComfyUi), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -449,6 +449,7 @@ pub async fn enqueue_video_style_transfer_handler(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::ComfyUi,
maybe_product_category: None, // TODO: This endpoint is deprecated. Is anyone calling it?
inference_category: InferenceCategory::Workflow,
maybe_model_type: Some(InferenceModelType::ComfyUi), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference
@@ -269,6 +269,7 @@ pub async fn enqueue_workflow_upload_request(
let query_result = insert_generic_inference_job(InsertGenericInferenceArgs {
uuid_idempotency_token: &request.uuid_idempotency_token,
job_type: InferenceJobType::ComfyUi,
maybe_product_category: None, // This endpoint is deprecated
inference_category: InferenceCategory::Workflow,
maybe_model_type: Some(InferenceModelType::ComfyUi), // NB: Model is static during inference
maybe_model_token: None, // NB: Model is static during inference