mirror of
https://github.com/storytold/artcraft.git
synced 2026-10-27 20:20:07 -04:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
459ad1d777 | ||
|
|
bbb24592b9 |
@@ -26,6 +26,9 @@ pub enum PlatformType {
|
||||
/// Desktop app users
|
||||
DesktopApp,
|
||||
|
||||
/// Requests authenticated via an `Authorization` header API key (the Omni API surface).
|
||||
ApiKey,
|
||||
|
||||
// ========== Other clients ==========
|
||||
|
||||
Curl,
|
||||
@@ -42,6 +45,7 @@ impl PlatformType {
|
||||
match self {
|
||||
Self::Web => "web",
|
||||
Self::DesktopApp => "desktop_app",
|
||||
Self::ApiKey => "api_key",
|
||||
Self::Curl => "curl",
|
||||
Self::PythonRequests => "python_requests",
|
||||
Self::Postman => "postman",
|
||||
@@ -52,6 +56,7 @@ impl PlatformType {
|
||||
match value {
|
||||
"web" => Ok(Self::Web),
|
||||
"desktop_app" => Ok(Self::DesktopApp),
|
||||
"api_key" => Ok(Self::ApiKey),
|
||||
"curl" => Ok(Self::Curl),
|
||||
"python_requests" => Ok(Self::PythonRequests),
|
||||
"postman" => Ok(Self::Postman),
|
||||
@@ -64,6 +69,7 @@ impl PlatformType {
|
||||
BTreeSet::from([
|
||||
Self::Web,
|
||||
Self::DesktopApp,
|
||||
Self::ApiKey,
|
||||
Self::Curl,
|
||||
Self::PythonRequests,
|
||||
Self::Postman,
|
||||
@@ -84,6 +90,7 @@ mod tests {
|
||||
fn test_serialization() {
|
||||
assert_serialization(PlatformType::Web, "web");
|
||||
assert_serialization(PlatformType::DesktopApp, "desktop_app");
|
||||
assert_serialization(PlatformType::ApiKey, "api_key");
|
||||
assert_serialization(PlatformType::Curl, "curl");
|
||||
assert_serialization(PlatformType::PythonRequests, "python_requests");
|
||||
assert_serialization(PlatformType::Postman, "postman");
|
||||
@@ -93,6 +100,7 @@ mod tests {
|
||||
fn to_str() {
|
||||
assert_eq!(PlatformType::Web.to_str(), "web");
|
||||
assert_eq!(PlatformType::DesktopApp.to_str(), "desktop_app");
|
||||
assert_eq!(PlatformType::ApiKey.to_str(), "api_key");
|
||||
assert_eq!(PlatformType::Curl.to_str(), "curl");
|
||||
assert_eq!(PlatformType::PythonRequests.to_str(), "python_requests");
|
||||
assert_eq!(PlatformType::Postman.to_str(), "postman");
|
||||
@@ -102,6 +110,7 @@ mod tests {
|
||||
fn from_str() {
|
||||
assert_eq!(PlatformType::from_str("web").unwrap(), PlatformType::Web);
|
||||
assert_eq!(PlatformType::from_str("desktop_app").unwrap(), PlatformType::DesktopApp);
|
||||
assert_eq!(PlatformType::from_str("api_key").unwrap(), PlatformType::ApiKey);
|
||||
assert_eq!(PlatformType::from_str("curl").unwrap(), PlatformType::Curl);
|
||||
assert_eq!(PlatformType::from_str("python_requests").unwrap(), PlatformType::PythonRequests);
|
||||
assert_eq!(PlatformType::from_str("postman").unwrap(), PlatformType::Postman);
|
||||
@@ -121,9 +130,10 @@ mod tests {
|
||||
#[test]
|
||||
fn all_variants() {
|
||||
let mut variants = PlatformType::all_variants();
|
||||
assert_eq!(variants.len(), 5);
|
||||
assert_eq!(variants.len(), 6);
|
||||
assert_eq!(variants.pop_first(), Some(PlatformType::Web));
|
||||
assert_eq!(variants.pop_first(), Some(PlatformType::DesktopApp));
|
||||
assert_eq!(variants.pop_first(), Some(PlatformType::ApiKey));
|
||||
assert_eq!(variants.pop_first(), Some(PlatformType::Curl));
|
||||
assert_eq!(variants.pop_first(), Some(PlatformType::PythonRequests));
|
||||
assert_eq!(variants.pop_first(), Some(PlatformType::Postman));
|
||||
|
||||
+5
-8
@@ -14,6 +14,7 @@ use enums::by_table::prompts::prompt_type::PromptType;
|
||||
use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::platform_type::PlatformType;
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
use mysql_queries::queries::debug_logs::insert_debug_log::{insert_debug_log, InsertDebugLogArgs};
|
||||
use mysql_queries::queries::generic_inference::api_providers::seedance2pro::insert_generic_inference_job_for_seedance2pro_queue_with_apriori_job_token::KinoviVersion;
|
||||
@@ -35,7 +36,6 @@ use crate::http_server::endpoints::omni_api::generate::image::pipeline_v2::run_p
|
||||
use crate::http_server::session::lookup::user_session_feature_flags::UserSessionFeatureFlags;
|
||||
use crate::http_server::user_lookup::api_keys::require_api_key_user::require_api_key_user;
|
||||
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
|
||||
use crate::http_server::web_utils::get_request_platform_type::get_request_platform_type;
|
||||
use crate::state::server_state::ServerState;
|
||||
use crate::util::lookup::lookup_media_files_as_cdn_url_list_and_map::lookup_media_files_as_cdn_url_list_and_map;
|
||||
|
||||
@@ -78,10 +78,6 @@ pub async fn omni_api_image_generate_handler(
|
||||
|
||||
let user_token = &api_session.user_token;
|
||||
|
||||
let maybe_avt_token = server_state
|
||||
.avt_cookie_manager
|
||||
.get_avt_token_from_request(&http_request);
|
||||
|
||||
// ==================== MODEL ACCESS CHECK ==================== //
|
||||
|
||||
// API-key users have no per-user feature flags today.
|
||||
@@ -167,7 +163,8 @@ pub async fn omni_api_image_generate_handler(
|
||||
// ==================== WRITE RESULT ==================== //
|
||||
|
||||
let ip_address = get_request_ip(&http_request);
|
||||
let maybe_platform_type = get_request_platform_type(&http_request);
|
||||
// Omni API requests are always API-key authenticated; hardcode the platform type.
|
||||
let maybe_platform_type = Some(PlatformType::ApiKey);
|
||||
|
||||
let mut transaction = mysql_connection
|
||||
.begin()
|
||||
@@ -262,7 +259,7 @@ pub async fn omni_api_image_generate_handler(
|
||||
apriori_job_token: &pipeline_result.apriori_job_token,
|
||||
idempotency_token: &idempotency_token,
|
||||
user_token,
|
||||
maybe_avt_token: maybe_avt_token.as_ref(),
|
||||
maybe_avt_token: None, // AVT tokens are web-session only; API-key callers have none.
|
||||
maybe_model_type: request.model.map(|v| v.to_common_model_type()),
|
||||
maybe_prompt_token: prompt_token.as_ref(),
|
||||
maybe_debug_log_event_token: Some(&debug_log_event_token),
|
||||
@@ -282,7 +279,7 @@ pub async fn omni_api_image_generate_handler(
|
||||
apriori_job_token: &pipeline_result.apriori_job_token,
|
||||
idempotency_token: &idempotency_token,
|
||||
user_token,
|
||||
maybe_avt_token: maybe_avt_token.as_ref(),
|
||||
maybe_avt_token: None, // AVT tokens are web-session only; API-key callers have none.
|
||||
maybe_model_type: request.model.map(|v| v.to_common_model_type()),
|
||||
maybe_prompt_token: prompt_token.as_ref(),
|
||||
maybe_debug_log_event_token: Some(&debug_log_event_token),
|
||||
|
||||
+7
-10
@@ -16,6 +16,7 @@ use enums::common::generation::common_generation_mode::CommonGenerationMode;
|
||||
use enums::common::generation::common_model_type::CommonModelType;
|
||||
use enums::common::generation::common_video_model::CommonVideoModel;
|
||||
use enums::common::generation_provider::GenerationProvider;
|
||||
use enums::common::platform_type::PlatformType;
|
||||
use http_server_common::request::get_request_ip::get_request_ip;
|
||||
use mysql_queries::queries::debug_logs::insert_debug_log::{insert_debug_log, InsertDebugLogArgs};
|
||||
use mysql_queries::queries::generic_inference::api_providers::seedance2pro::insert_generic_inference_job_for_seedance2pro_queue_with_apriori_job_token::KinoviVersion;
|
||||
@@ -44,7 +45,6 @@ use crate::http_server::endpoints::omni_api::shared_utils::video::validate_video
|
||||
use crate::http_server::session::lookup::user_session_feature_flags::UserSessionFeatureFlags;
|
||||
use crate::http_server::user_lookup::api_keys::require_api_key_user::require_api_key_user;
|
||||
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
|
||||
use crate::http_server::web_utils::get_request_platform_type::get_request_platform_type;
|
||||
use crate::state::server_state::ServerState;
|
||||
use crate::util::lookup::lookup_media_files_as_cdn_url_list_and_map::lookup_media_files_as_cdn_url_list_and_map;
|
||||
|
||||
@@ -91,10 +91,6 @@ pub async fn omni_api_video_generate_handler(
|
||||
|
||||
let user_token = &api_session.user_token;
|
||||
|
||||
let maybe_avt_token = server_state
|
||||
.avt_cookie_manager
|
||||
.get_avt_token_from_request(&http_request);
|
||||
|
||||
// ==================== MODEL ACCESS CHECK ==================== //
|
||||
|
||||
// API-key users have no per-user feature flags today.
|
||||
@@ -243,7 +239,8 @@ pub async fn omni_api_video_generate_handler(
|
||||
// ==================== WRITE RESULT ==================== //
|
||||
|
||||
let ip_address = get_request_ip(&http_request);
|
||||
let maybe_platform_type = get_request_platform_type(&http_request);
|
||||
// Omni API requests are always API-key authenticated; hardcode the platform type.
|
||||
let maybe_platform_type = Some(PlatformType::ApiKey);
|
||||
|
||||
let mut transaction = mysql_connection.begin().await.map_err(|err| {
|
||||
error!("Error starting MySQL transaction: {:?}", err);
|
||||
@@ -344,7 +341,7 @@ pub async fn omni_api_video_generate_handler(
|
||||
apriori_job_token: &pipeline_result.billing.apriori_job_token,
|
||||
idempotency_token: &idempotency_token,
|
||||
user_token,
|
||||
maybe_avt_token: maybe_avt_token.as_ref(),
|
||||
maybe_avt_token: None, // AVT tokens are web-session only; API-key callers have none.
|
||||
maybe_model_type: request.model.map(|v| v.to_common_model_type()),
|
||||
maybe_prompt_token: prompt_token.as_ref(),
|
||||
maybe_debug_log_event_token: Some(&debug_log_event_token),
|
||||
@@ -368,7 +365,7 @@ pub async fn omni_api_video_generate_handler(
|
||||
apriori_job_token: &pipeline_result.billing.apriori_job_token,
|
||||
idempotency_token: &idempotency_token,
|
||||
user_token,
|
||||
maybe_avt_token: maybe_avt_token.as_ref(),
|
||||
maybe_avt_token: None, // AVT tokens are web-session only; API-key callers have none.
|
||||
maybe_model_type: request.model.map(|v| v.to_common_model_type()),
|
||||
maybe_prompt_token: prompt_token.as_ref(),
|
||||
maybe_debug_log_event_token: Some(&debug_log_event_token),
|
||||
@@ -398,7 +395,7 @@ pub async fn omni_api_video_generate_handler(
|
||||
apriori_job_token: &pipeline_result.billing.apriori_job_token,
|
||||
idempotency_token: &idempotency_token,
|
||||
user_token,
|
||||
maybe_avt_token: maybe_avt_token.as_ref(),
|
||||
maybe_avt_token: None, // AVT tokens are web-session only; API-key callers have none.
|
||||
maybe_model_type: request.model.map(|v| v.to_common_model_type()),
|
||||
maybe_prompt_token: prompt_token.as_ref(),
|
||||
maybe_debug_log_event_token: Some(&debug_log_event_token),
|
||||
@@ -422,7 +419,7 @@ pub async fn omni_api_video_generate_handler(
|
||||
apriori_job_token: &pipeline_result.billing.apriori_job_token,
|
||||
idempotency_token: &idempotency_token,
|
||||
user_token,
|
||||
maybe_avt_token: maybe_avt_token.as_ref(),
|
||||
maybe_avt_token: None, // AVT tokens are web-session only; API-key callers have none.
|
||||
maybe_model_type: request.model.map(|v| v.to_common_model_type()),
|
||||
maybe_prompt_token: prompt_token.as_ref(),
|
||||
maybe_debug_log_event_token: Some(&debug_log_event_token),
|
||||
|
||||
+2
-5
@@ -127,10 +127,6 @@ pub async fn omni_upload_audio_media_file_handler(
|
||||
|
||||
let maybe_user_token = Some(&api_session.user_token);
|
||||
|
||||
let maybe_avt_token = server_state
|
||||
.avt_cookie_manager
|
||||
.get_avt_token_from_request(&http_request);
|
||||
|
||||
// ==================== RATE LIMIT ==================== //
|
||||
|
||||
let rate_limiter = &server_state.redis_rate_limiters.file_upload_logged_in;
|
||||
@@ -283,7 +279,8 @@ pub async fn omni_upload_audio_media_file_handler(
|
||||
maybe_media_class: Some(MediaFileClass::Audio),
|
||||
media_file_type: MediaFileType::Audio,
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
// NB: AVT (anonymous visitor) tokens are a web-session concept; API-key callers have none.
|
||||
maybe_creator_anonymous_visitor_token: None,
|
||||
creator_ip_address: &ip_address,
|
||||
creator_set_visibility,
|
||||
upload_type,
|
||||
|
||||
+2
-5
@@ -138,10 +138,6 @@ pub async fn omni_upload_image_media_file_handler(
|
||||
|
||||
let maybe_user_token = Some(&api_session.user_token);
|
||||
|
||||
let maybe_avt_token = server_state
|
||||
.avt_cookie_manager
|
||||
.get_avt_token_from_request(&http_request);
|
||||
|
||||
// ==================== HANDLE IDEMPOTENCY ==================== //
|
||||
|
||||
let uuid_idempotency_token = form.uuid_idempotency_token.as_ref();
|
||||
@@ -275,7 +271,8 @@ pub async fn omni_upload_image_media_file_handler(
|
||||
maybe_media_class: Some(MediaFileClass::Image),
|
||||
media_file_type,
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
// NB: AVT (anonymous visitor) tokens are a web-session concept; API-key callers have none.
|
||||
maybe_creator_anonymous_visitor_token: None,
|
||||
creator_ip_address: &ip_address,
|
||||
creator_set_visibility,
|
||||
upload_type,
|
||||
|
||||
+2
-5
@@ -165,10 +165,6 @@ pub async fn omni_upload_video_media_file_handler(
|
||||
|
||||
let maybe_user_token = Some(&api_session.user_token);
|
||||
|
||||
let maybe_avt_token = server_state
|
||||
.avt_cookie_manager
|
||||
.get_avt_token_from_request(&http_request);
|
||||
|
||||
// ==================== RATE LIMIT ==================== //
|
||||
|
||||
let rate_limiter = &server_state.redis_rate_limiters.file_upload_logged_in;
|
||||
@@ -464,7 +460,8 @@ pub async fn omni_upload_video_media_file_handler(
|
||||
maybe_media_class: Some(MediaFileClass::Video),
|
||||
media_file_type: MediaFileType::Video,
|
||||
maybe_creator_user_token: maybe_user_token,
|
||||
maybe_creator_anonymous_visitor_token: maybe_avt_token.as_ref(),
|
||||
// NB: AVT (anonymous visitor) tokens are a web-session concept; API-key callers have none.
|
||||
maybe_creator_anonymous_visitor_token: None,
|
||||
creator_ip_address: &ip_address,
|
||||
creator_set_visibility,
|
||||
upload_type,
|
||||
|
||||
Reference in New Issue
Block a user