From dbe5b5af223b17c41fbb5f2899b136070d8a310b Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Wed, 3 Apr 2024 13:20:45 -0400 Subject: [PATCH] document tts endpoint, add /v1/ mounted version --- .../web/storyteller_web/src/api_doc.rs | 6 +++++ .../enqueue_infer_tts_handler.rs | 25 ++++++++++++++++--- .../storyteller_web/src/routes/add_routes.rs | 11 ++++++-- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/crates/service/web/storyteller_web/src/api_doc.rs b/crates/service/web/storyteller_web/src/api_doc.rs index d252f24a6d..b2cb45185e 100644 --- a/crates/service/web/storyteller_web/src/api_doc.rs +++ b/crates/service/web/storyteller_web/src/api_doc.rs @@ -39,6 +39,7 @@ use crate::http_server::endpoints::inference_job::get_inference_job_status::*; use crate::http_server::endpoints::inference_job::terminate_inference_job_handler::*; use crate::http_server::endpoints::media_files::batch_get_media_files_handler::*; use crate::http_server::endpoints::media_files::change_media_file_visibility_handler::*; +use crate::http_server::endpoints::tts::enqueue_infer_tts_handler::enqueue_infer_tts_handler::*; use crate::http_server::endpoints::media_files::delete_media_file::*; use crate::http_server::endpoints::media_files::get_media_file::*; use crate::http_server::endpoints::media_files::list::list_featured_media_files::*; @@ -93,6 +94,7 @@ use crate::http_server::web_utils::response_success_helpers::*; crate::http_server::endpoints::media_files::rename_media_file_handler::rename_media_file_handler, crate::http_server::endpoints::media_files::upload::upload_engine_asset::upload_engine_asset_media_file_handler::upload_engine_asset_media_file_handler, crate::http_server::endpoints::media_files::upload::upload_generic::upload_media_file_handler::upload_media_file_handler, + crate::http_server::endpoints::tts::enqueue_infer_tts_handler::enqueue_infer_tts_handler::enqueue_infer_tts_handler, crate::http_server::endpoints::media_files::upload::upload_video::upload_video_media_file_handler::upload_video_media_file_handler, crate::http_server::endpoints::media_files::upsert_write::write_engine_asset::write_engine_asset_media_file_handler::write_engine_asset_media_file_handler, crate::http_server::endpoints::media_files::upsert_write::write_scene_file::write_scene_file_media_file_handler::write_scene_file_media_file_handler, @@ -168,6 +170,10 @@ use crate::http_server::web_utils::response_success_helpers::*; BatchGetUserBookmarksError, BatchGetUserBookmarksQueryParams, BatchGetUserBookmarksResponse, + InferTtsSuccessResponse, + InferTtsRequest, + InferenceJobTokenType, + InferTtsError, BatchGetUserRatingError, BatchGetUserRatingQueryParams, BatchGetUserRatingResponse, diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs index 3f7a00cfac..d1c7540dc4 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/tts/enqueue_infer_tts_handler/enqueue_infer_tts_handler.rs @@ -13,6 +13,7 @@ use log::{info, warn}; use r2d2_redis::redis::Commands; use rand::Rng; 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_type::InferenceJobType; @@ -64,7 +65,7 @@ const USER_NEWS_STORY_USER_TOKEN : &str = "U:XAWRARC1N89X6"; /// Safety guard against plans supporting too lengthy TTS inference text. const MAX_TTS_LENGTH : usize = 10_000; -#[derive(Deserialize)] +#[derive(Deserialize, ToSchema)] pub struct InferTtsRequest { uuid_idempotency_token: String, tts_model_token: String, @@ -73,7 +74,7 @@ pub struct InferTtsRequest { is_storyteller_demo: Option, } -#[derive(Serialize)] +#[derive(Serialize, ToSchema)] pub struct InferTtsSuccessResponse { pub success: bool, pub inference_job_token: String, @@ -82,7 +83,7 @@ pub struct InferTtsSuccessResponse { } /// Tell the frontend how to deal with the tts queue. -#[derive(Serialize)] +#[derive(Serialize, ToSchema)] pub enum InferenceJobTokenType { /// Legacy TTS inference job #[serde(rename = "legacy_tts")] @@ -94,7 +95,7 @@ pub enum InferenceJobTokenType { Generic, } -#[derive(Debug)] +#[derive(Debug, ToSchema)] pub enum InferTtsError { BadInput(String), NotAuthorized, @@ -134,6 +135,22 @@ impl fmt::Display for InferTtsError { } } +#[utoipa::path( + post, + path = "/v1/tts/inference", + responses( + ( + status = 200, + description = "Success response", + body = InferTtsSuccessResponse, + ), + (status = 400, description = "Bad input", body = InferTtsError), + (status = 401, description = "Not authorized", body = InferTtsError), + (status = 429, description = "Rate limited", body = InferTtsError), + (status = 500, description = "Server error", body = InferTtsError) + ), + params(("request" = InferTtsRequest, description = "Payload for Request")) +)] pub async fn enqueue_infer_tts_handler( http_request: HttpRequest, request: web::Json, diff --git a/crates/service/web/storyteller_web/src/routes/add_routes.rs b/crates/service/web/storyteller_web/src/routes/add_routes.rs index e4c715f2c7..472abc7f87 100644 --- a/crates/service/web/storyteller_web/src/routes/add_routes.rs +++ b/crates/service/web/storyteller_web/src/routes/add_routes.rs @@ -8,6 +8,7 @@ use actix_helpers::route_builder::RouteBuilder; use billing_component::default_routes::add_suggested_stripe_billing_routes; use reusable_types::server_environment::ServerEnvironment; use users_component::default_routes::add_suggested_api_v1_account_creation_and_session_routes; +use users_component::endpoints::create_account_handler::create_account_handler; use users_component::endpoints::edit_profile_handler::edit_profile_handler; use users_component::endpoints::get_profile_handler::get_profile_handler; @@ -312,8 +313,14 @@ fn add_tts_routes (app: App) -> App InitError = (), >, { - app.service( - web::scope("/tts") + // NB(bt,2024-04-03): Newer /v1/tts/* routes don't have public use, but we'll start using it + app.service(web::resource("/v1/tts/inference") + .route(web::post().to(enqueue_infer_tts_handler)) + .route(web::head().to(|| HttpResponse::Ok())) + ) + // NB(bt,2024-04-03): Older root /tts/* routes should be drained of traffic. They are used in the Twitch Streamer API though. + .service( + web::scope("/tts") .service( web::resource("/upload") .route(web::post().to(upload_tts_model_handler))