diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/prompts/get_prompt.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/prompts/get_prompt.rs new file mode 100644 index 0000000000..8c00181e43 --- /dev/null +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/prompts/get_prompt.rs @@ -0,0 +1,124 @@ +use crate::common::responses::media_links::MediaLinks; +use chrono::{DateTime, Utc}; +use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; +use enums::by_table::prompts::prompt_type::PromptType; +use enums::common::generation::common_model_type::CommonModelType; +use enums::common::generation_provider::GenerationProvider; +use enums::no_table::style_transfer::style_transfer_name::StyleTransferName; +use serde_derive::{Deserialize, Serialize}; +use tokens::tokens::media_files::MediaFileToken; +use tokens::tokens::prompts::PromptToken; +use utoipa::ToSchema; + +pub const GET_PROMPT_PATH: &str = "/v1/prompts/{token}"; + +#[derive(Deserialize, ToSchema)] +pub struct GetPromptPathInfo { + pub token: PromptToken, +} + +#[derive(Serialize, ToSchema)] +pub struct GetPromptSuccessResponse { + pub success: bool, + pub prompt: PromptInfo, +} + +#[derive(Serialize, ToSchema)] +pub struct GetPromptImageContextItem { + pub media_token: MediaFileToken, + pub semantic: PromptContextSemanticType, + pub media_links: MediaLinks, +} + +#[derive(Serialize, ToSchema)] +pub struct PromptInfo { + pub token: PromptToken, + + /// The type of prompt. + /// Note: Prompts may or may not be compatible across systems. + pub prompt_type: PromptType, + + /// The type of model used + pub maybe_model_type: Option, + + /// The service provider used + pub maybe_generation_provider: Option, + + /// Positive prompt (technically optional, but usually present) + pub maybe_positive_prompt: Option, + + /// Negative prompt (optional) + pub maybe_negative_prompt: Option, + + /// Context images (optional) + pub maybe_context_images: Option>, + + /// Scheduled / travel prompt (optional) + pub maybe_travel_prompt: Option, + + /// If a "style" was used, this is the name of it. + /// This might not be present for all types of inference + /// and typically only applies to video style transfer. + pub maybe_style_name: Option, + + /// How many milliseconds it took to run generation. + pub maybe_inference_duration_millis: Option, + + /// If a "strength" was used. + /// Typically only for video style transfer. + pub maybe_strength: Option, + + /// If a frame skip setting was used. + pub maybe_frame_skip: Option, + + /// If a face detailer was used. + /// This might not be present for all types of inference + /// and typically only applies to video style transfer. + pub used_face_detailer: bool, + + /// If an upscaling pass was used. + /// This might not be present for all types of inference + /// and typically only applies to video style transfer. + pub used_upscaler: bool, + + /// If lipsync was enabled. + /// This might not be present for all types of inference + /// and typically only applies to video style transfer. + pub lipsync_enabled: bool, + + /// If LCM was disabled. + /// Only staff can do this for now. + pub lcm_disabled: bool, + + /// If the cinematic workflow was used. + /// Only staff can do this for now. + pub use_cinematic: bool, + + /// If a global IP Adapter Image was used, this is the details. + /// NB: We can't easily query for this without another DB round trip, + /// so the frontend should query for it instead. + pub maybe_global_ipa_image_token: Option, + + /// Fields that only moderators should see. + pub maybe_moderator_fields: Option, + + pub created_at: DateTime, +} + +#[derive(Serialize, ToSchema)] +pub struct PromptInfoModeratorFields { + /// How many milliseconds it took to run generation. + pub maybe_inference_duration_millis: Option, + + /// Version of Yae's workflow + /// Used for logging and debugging by the art team. + pub main_ipa_workflow: Option, + + /// Version of Yae's face detailer workflow + /// Used for logging and debugging by the art team. + pub face_detailer_workflow: Option, + + /// Version of Yae's upscaler workflow + /// Used for logging and debugging by the art team. + pub upscaler_workflow: Option, +} diff --git a/crates/api_clients/artcraft/artcraft_api_defs/src/prompts/mod.rs b/crates/api_clients/artcraft/artcraft_api_defs/src/prompts/mod.rs index 11da7a9fea..4a4e360b56 100644 --- a/crates/api_clients/artcraft/artcraft_api_defs/src/prompts/mod.rs +++ b/crates/api_clients/artcraft/artcraft_api_defs/src/prompts/mod.rs @@ -1 +1,2 @@ -pub mod create_prompt; \ No newline at end of file +pub mod create_prompt; +pub mod get_prompt; \ No newline at end of file diff --git a/crates/service/web/storyteller_web/src/docs/api_doc.rs b/crates/service/web/storyteller_web/src/docs/api_doc.rs index 96a0b45e67..6bba275e87 100644 --- a/crates/service/web/storyteller_web/src/docs/api_doc.rs +++ b/crates/service/web/storyteller_web/src/docs/api_doc.rs @@ -87,46 +87,6 @@ use crate::http_server::endpoints::media_files::upsert_upload::write_scene_file: use crate::http_server::endpoints::model_download::enqueue_gptsovits_model_download_handler::*; use crate::http_server::endpoints::moderation::user_feature_flags::edit_user_feature_flags_handler::*; use crate::http_server::endpoints::prompts::get_prompt_handler::*; -use crate::http_server::endpoints::service::status_alert_handler::*; -use crate::http_server::endpoints::stats::get_unified_queue_stats_handler::*; -use crate::http_server::endpoints::studio_gen2::enqueue_studio_gen2_handler::EnqueueStudioGen2Request; -use crate::http_server::endpoints::studio_gen2::enqueue_studio_gen2_handler::*; -use crate::http_server::endpoints::tags::list_tags_for_entity_handler::*; -use crate::http_server::endpoints::tags::set_tags_for_entity_handler::*; -use crate::http_server::endpoints::tts::enqueue_infer_tts_handler::enqueue_infer_tts_handler::*; -use crate::http_server::endpoints::user_bookmarks::batch_get_user_bookmarks_handler::*; -use crate::http_server::endpoints::user_bookmarks::create_user_bookmark_handler::*; -use crate::http_server::endpoints::user_bookmarks::delete_user_bookmark_handler::*; -use crate::http_server::endpoints::user_bookmarks::list_user_bookmarks_for_entity_handler::*; -use crate::http_server::endpoints::user_bookmarks::list_user_bookmarks_for_user_handler::*; -use crate::http_server::endpoints::user_ratings::batch_get_user_rating_handler::*; -use crate::http_server::endpoints::user_ratings::get_user_rating_handler::*; -use crate::http_server::endpoints::user_ratings::set_user_rating_handler::*; -use crate::http_server::endpoints::users::change_password_handler::*; -use crate::http_server::endpoints::users::create_account_handler::*; -use crate::http_server::endpoints::users::edit_email_handler::*; -use crate::http_server::endpoints::users::edit_username_handler::*; -use crate::http_server::endpoints::users::get_profile_handler::*; -use crate::http_server::endpoints::users::google_sso::google_sso_handler::*; -use crate::http_server::endpoints::users::login_handler::*; -use crate::http_server::endpoints::users::logout_handler::*; -use crate::http_server::endpoints::users::session_info_handler::*; -use crate::http_server::endpoints::users::session_token_info_handler::*; -use crate::http_server::endpoints::voice_conversion::enqueue_voice_conversion_inference_handler::*; -use crate::http_server::endpoints::voice_designer::inference::enqueue_tts_request::*; -use crate::http_server::endpoints::voice_designer::voice_datasets::list_datasets_by_user::*; -use crate::http_server::endpoints::weights::delete::delete_weight_handler::*; -use crate::http_server::endpoints::weights::get::get_weight_handler::*; -use crate::http_server::endpoints::weights::list::list_available_weights_handler::*; -use crate::http_server::endpoints::weights::list::list_featured_weights_handler::*; -use crate::http_server::endpoints::weights::list::list_pinned_weights_handler::*; -use crate::http_server::endpoints::weights::list::list_weights_by_user_handler::*; -use crate::http_server::endpoints::weights::search::search_model_weights_impl::*; -use crate::http_server::endpoints::weights::update::set_model_weight_cover_image_handler::*; -use crate::http_server::endpoints::weights::update::update_weight_handler::*; -use artcraft_api_defs::users::change_password::{ChangePasswordRequest, ChangePasswordResponse}; -use artcraft_api_defs::users::edit_email::{EditEmailRequest, EditEmailResponse}; -use artcraft_api_defs::users::edit_username::{EditUsernameRequest, EditUsernameResponse}; use artcraft_api_defs::common::responses::job_details::JobDetailsLipsyncRequest; use artcraft_api_defs::common::responses::job_details::JobDetailsLivePortraitRequest; use artcraft_api_defs::common::responses::media_links::*; @@ -188,9 +148,50 @@ use artcraft_api_defs::media_file::delete_media_file::DeleteMediaFilePathInfo; use artcraft_api_defs::media_file::delete_media_file::DeleteMediaFileRequest; use artcraft_api_defs::prompts::create_prompt::CreatePromptRequest; use artcraft_api_defs::prompts::create_prompt::CreatePromptResponse; +use artcraft_api_defs::prompts::get_prompt::*; +use artcraft_api_defs::users::change_password::{ChangePasswordRequest, ChangePasswordResponse}; +use artcraft_api_defs::users::edit_email::{EditEmailRequest, EditEmailResponse}; +use artcraft_api_defs::users::edit_username::{EditUsernameRequest, EditUsernameResponse}; use billing_component::stripe::http_endpoints::checkout::create::stripe_create_checkout_session_error::CreateCheckoutSessionError; use billing_component::stripe::http_endpoints::checkout::create::stripe_create_checkout_session_json_handler::*; use billing_component::users::http_endpoints::list_active_user_subscriptions_handler::*; +use crate::http_server::endpoints::service::status_alert_handler::*; +use crate::http_server::endpoints::stats::get_unified_queue_stats_handler::*; +use crate::http_server::endpoints::studio_gen2::enqueue_studio_gen2_handler::*; +use crate::http_server::endpoints::studio_gen2::enqueue_studio_gen2_handler::EnqueueStudioGen2Request; +use crate::http_server::endpoints::tags::list_tags_for_entity_handler::*; +use crate::http_server::endpoints::tags::set_tags_for_entity_handler::*; +use crate::http_server::endpoints::tts::enqueue_infer_tts_handler::enqueue_infer_tts_handler::*; +use crate::http_server::endpoints::user_bookmarks::batch_get_user_bookmarks_handler::*; +use crate::http_server::endpoints::user_bookmarks::create_user_bookmark_handler::*; +use crate::http_server::endpoints::user_bookmarks::delete_user_bookmark_handler::*; +use crate::http_server::endpoints::user_bookmarks::list_user_bookmarks_for_entity_handler::*; +use crate::http_server::endpoints::user_bookmarks::list_user_bookmarks_for_user_handler::*; +use crate::http_server::endpoints::user_ratings::batch_get_user_rating_handler::*; +use crate::http_server::endpoints::user_ratings::get_user_rating_handler::*; +use crate::http_server::endpoints::user_ratings::set_user_rating_handler::*; +use crate::http_server::endpoints::users::change_password_handler::*; +use crate::http_server::endpoints::users::create_account_handler::*; +use crate::http_server::endpoints::users::edit_email_handler::*; +use crate::http_server::endpoints::users::edit_username_handler::*; +use crate::http_server::endpoints::users::get_profile_handler::*; +use crate::http_server::endpoints::users::google_sso::google_sso_handler::*; +use crate::http_server::endpoints::users::login_handler::*; +use crate::http_server::endpoints::users::logout_handler::*; +use crate::http_server::endpoints::users::session_info_handler::*; +use crate::http_server::endpoints::users::session_token_info_handler::*; +use crate::http_server::endpoints::voice_conversion::enqueue_voice_conversion_inference_handler::*; +use crate::http_server::endpoints::voice_designer::inference::enqueue_tts_request::*; +use crate::http_server::endpoints::voice_designer::voice_datasets::list_datasets_by_user::*; +use crate::http_server::endpoints::weights::delete::delete_weight_handler::*; +use crate::http_server::endpoints::weights::get::get_weight_handler::*; +use crate::http_server::endpoints::weights::list::list_available_weights_handler::*; +use crate::http_server::endpoints::weights::list::list_featured_weights_handler::*; +use crate::http_server::endpoints::weights::list::list_pinned_weights_handler::*; +use crate::http_server::endpoints::weights::list::list_weights_by_user_handler::*; +use crate::http_server::endpoints::weights::search::search_model_weights_impl::*; +use crate::http_server::endpoints::weights::update::set_model_weight_cover_image_handler::*; +use crate::http_server::endpoints::weights::update::update_weight_handler::*; use enums::by_table::beta_keys::beta_key_product::BetaKeyProduct; use enums::by_table::comments::comment_entity_type::CommentEntityType; use enums::by_table::featured_items::featured_item_entity_type::FeaturedItemEntityType; @@ -210,9 +211,9 @@ use enums::by_table::user_bookmarks::user_bookmark_entity_type::UserBookmarkEnti use enums::by_table::user_ratings::entity_type::UserRatingEntityType; use enums::by_table::user_ratings::rating_value::UserRatingValue; use enums::by_table::users::user_feature_flag::UserFeatureFlag; +use enums::common::generation::common_model_type::CommonModelType; use enums::common::generation_provider::GenerationProvider; use enums::common::job_status_plus::JobStatusPlus; -use enums::common::generation::common_model_type::CommonModelType; use enums::common::visibility::Visibility; use enums::no_table::style_transfer::style_transfer_name::StyleTransferName; use enums_public::by_table::media_files::public_media_file_model_type::PublicMediaFileModelType; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs index 11f146fc40..38863a8024 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/prompts/get_prompt_handler.rs @@ -9,135 +9,17 @@ use actix_web::error::ResponseError; use actix_web::http::StatusCode; use actix_web::web::Path; use actix_web::{web, HttpMessage, HttpRequest, HttpResponse}; -use artcraft_api_defs::common::responses::media_links::MediaLinks; +use artcraft_api_defs::prompts::get_prompt::{ + GetPromptImageContextItem, GetPromptPathInfo, GetPromptSuccessResponse, + PromptInfo, PromptInfoModeratorFields, +}; use bucket_paths::legacy::typified_paths::public::media_files::bucket_file_path::MediaFileBucketPath; -use chrono::{DateTime, Utc}; use enums::by_table::prompt_context_items::prompt_context_semantic_type::PromptContextSemanticType; -use enums::by_table::prompts::prompt_type::PromptType; -use enums::common::generation_provider::GenerationProvider; -use enums::common::generation::common_model_type::CommonModelType; -use enums::no_table::style_transfer::style_transfer_name::StyleTransferName; use log::{error, warn}; use mysql_queries::queries::prompt_context_items::list_prompt_context_items::list_prompt_context_items; -use mysql_queries::queries::prompts::get_prompt::{get_prompt, get_prompt_from_connection}; -use tokens::tokens::media_files::MediaFileToken; -use tokens::tokens::prompts::PromptToken; +use mysql_queries::queries::prompts::get_prompt::get_prompt_from_connection; use utoipa::ToSchema; -/// For the URL PathInfo -#[derive(Deserialize, ToSchema)] -pub struct GetPromptPathInfo { - token: PromptToken, -} - -#[derive(Serialize, ToSchema)] -pub struct GetPromptSuccessResponse { - pub success: bool, - pub prompt: PromptInfo, -} - -#[derive(Serialize, ToSchema)] -pub struct GetPromptImageContextItem { - pub media_token: MediaFileToken, - pub semantic: PromptContextSemanticType, - pub media_links: MediaLinks, -} - -#[derive(Serialize, ToSchema)] -pub struct PromptInfo { - pub token: PromptToken, - - /// The type of prompt. - /// Note: Prompts may or may not be compatible across systems. - pub prompt_type: PromptType, - - /// The type of model used - pub maybe_model_type: Option, - - /// The service provider used - pub maybe_generation_provider: Option, - - /// Positive prompt (technically optional, but usually present) - pub maybe_positive_prompt: Option, - - /// Negative prompt (optional) - pub maybe_negative_prompt: Option, - - /// Context images (optional) - pub maybe_context_images: Option>, - - /// Scheduled / travel prompt (optional) - pub maybe_travel_prompt: Option, - - /// If a "style" was used, this is the name of it. - /// This might not be present for all types of inference - /// and typically only applies to video style transfer. - pub maybe_style_name: Option, - - /// How many milliseconds it took to run generation. - pub maybe_inference_duration_millis: Option, - - /// If a "strength" was used. - /// Typically only for video style transfer. - pub maybe_strength: Option, - - /// If a frame skip setting was used. - pub maybe_frame_skip: Option, - - /// If a face detailer was used. - /// This might not be present for all types of inference - /// and typically only applies to video style transfer. - pub used_face_detailer: bool, - - /// If an upscaling pass was used. - /// This might not be present for all types of inference - /// and typically only applies to video style transfer. - pub used_upscaler: bool, - - /// If lipsync was enabled. - /// This might not be present for all types of inference - /// and typically only applies to video style transfer. - pub lipsync_enabled: bool, - - /// If LCM was disabled. - /// Only staff can do this for now. - pub lcm_disabled: bool, - - /// If the cinematic workflow was used. - /// Only staff can do this for now. - pub use_cinematic: bool, - - /// If a global IP Adapter Image was used, this is the details. - /// NB: We can't easily query for this without another DB round trip, - /// so the frontend should query for it instead. - pub maybe_global_ipa_image_token: Option, - - // TODO: Author of prompt info - - /// Fields that only moderators should see. - pub maybe_moderator_fields: Option, - - pub created_at: DateTime, -} - -#[derive(Serialize, ToSchema)] -pub struct PromptInfoModeratorFields { - /// How many milliseconds it took to run generation. - pub maybe_inference_duration_millis: Option, - - /// Version of Yae's workflow - /// Used for logging and debugging by the art team. - pub main_ipa_workflow: Option, - - /// Version of Yae's face detailer workflow - /// Used for logging and debugging by the art team. - pub face_detailer_workflow: Option, - - /// Version of Yae's upscaler workflow - /// Used for logging and debugging by the art team. - pub upscaler_workflow: Option, -} - #[derive(Debug, ToSchema)] pub enum GetPromptError { ServerError,