From cbabbfcfa81edeadf3507420ae68befaa7c5ab41 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Fri, 5 Dec 2025 19:23:13 -0500 Subject: [PATCH] route + client --- .../src/endpoints/generate/image/edit/mod.rs | 3 +-- .../image/edit/nano_banana_pro_edit_image.rs | 18 ------------------ .../src/endpoints/generate/image/mod.rs | 1 + .../generate/image/multi_function/mod.rs | 1 + ...anana_pro_multi_function_image_gen_image.rs | 18 ++++++++++++++++++ .../generate/image/multi_function/mod.rs | 2 +- ...na_pro_multi_function_image_gen_handler.rs} | 6 +++--- .../application_routes/generate_routes.rs | 7 +++++++ 8 files changed, 32 insertions(+), 24 deletions(-) delete mode 100644 crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/edit/nano_banana_pro_edit_image.rs create mode 100644 crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/multi_function/mod.rs create mode 100644 crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_image.rs rename crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/{nano_banana_pro_edit_image_handler.rs => nano_banana_pro_multi_function_image_gen_handler.rs} (99%) diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/edit/mod.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/edit/mod.rs index 613bf832ba..3b52212122 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/edit/mod.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/edit/mod.rs @@ -1,4 +1,3 @@ pub mod flux_pro_kontext_max_edit_image; pub mod gemini_25_flash_edit_image; -pub mod gpt_image_1_edit_image; -pub mod nano_banana_pro_edit_image; \ No newline at end of file +pub mod gpt_image_1_edit_image; \ No newline at end of file diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/edit/nano_banana_pro_edit_image.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/edit/nano_banana_pro_edit_image.rs deleted file mode 100644 index 37e6c3d292..0000000000 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/edit/nano_banana_pro_edit_image.rs +++ /dev/null @@ -1,18 +0,0 @@ -use crate::credentials::storyteller_credential_set::StorytellerCredentialSet; -use crate::error::storyteller_error::StorytellerError; -use crate::utils::api_host::ApiHost; -use crate::utils::basic_json_post_request::basic_json_post_request; -use artcraft_api_defs::generate::image::edit::gemini_25_flash_edit_image::{Gemini25FlashEditImageRequest, Gemini25FlashEditImageResponse, GEMINI_25_FLASH_EDIT_IMAGE_PATH}; - -pub async fn gemini_25_flash_edit_image( - api_host: &ApiHost, - maybe_creds: Option<&StorytellerCredentialSet>, - request: Gemini25FlashEditImageRequest, -) -> Result { - Ok(basic_json_post_request( - api_host, - GEMINI_25_FLASH_EDIT_IMAGE_PATH, - maybe_creds, - request, - ).await?) -} diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/mod.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/mod.rs index 7ca4412b6e..c236019482 100644 --- a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/mod.rs +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/mod.rs @@ -5,4 +5,5 @@ pub mod generate_flux_pro_11_text_to_image; pub mod generate_flux_pro_11_ultra_text_to_image; pub mod generate_gpt_image_1_text_to_image; pub mod inpaint; +pub mod multi_function; pub mod remove_image_background; \ No newline at end of file diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/multi_function/mod.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/multi_function/mod.rs new file mode 100644 index 0000000000..b86e0486ea --- /dev/null +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/multi_function/mod.rs @@ -0,0 +1 @@ +pub mod nano_banana_pro_multi_function_image_gen_image; diff --git a/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_image.rs b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_image.rs new file mode 100644 index 0000000000..701143804d --- /dev/null +++ b/crates/api_clients/artcraft/storyteller_client/src/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_image.rs @@ -0,0 +1,18 @@ +use crate::credentials::storyteller_credential_set::StorytellerCredentialSet; +use crate::error::storyteller_error::StorytellerError; +use crate::utils::api_host::ApiHost; +use crate::utils::basic_json_post_request::basic_json_post_request; +use artcraft_api_defs::generate::image::multi_function::nano_banana_pro_multi_function_image_gen::{NanoBananaProMultiFunctionImageGenRequest, NanoBananaProMultiFunctionImageGenResponse, NANO_BANANA_PRO_MULTI_FUNCTION_IMAGE_GEN_PATH}; + +pub async fn nano_banana_pro_multi_function_image_gen( + api_host: &ApiHost, + maybe_creds: Option<&StorytellerCredentialSet>, + request: NanoBananaProMultiFunctionImageGenRequest, +) -> Result { + Ok(basic_json_post_request( + api_host, + NANO_BANANA_PRO_MULTI_FUNCTION_IMAGE_GEN_PATH, + maybe_creds, + request, + ).await?) +} diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/mod.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/mod.rs index 1319718491..cebfe76101 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/mod.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/mod.rs @@ -1 +1 @@ -pub mod nano_banana_pro_edit_image_handler; +pub mod nano_banana_pro_multi_function_image_gen_handler; diff --git a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_edit_image_handler.rs b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_handler.rs similarity index 99% rename from crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_edit_image_handler.rs rename to crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_handler.rs index 9a1e6ff704..81d171df11 100644 --- a/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_edit_image_handler.rs +++ b/crates/service/web/storyteller_web/src/http_server/endpoints/generate/image/multi_function/nano_banana_pro_multi_function_image_gen_handler.rs @@ -16,6 +16,8 @@ use enums::common::generation_provider::GenerationProvider; use enums::common::model_type::ModelType; use enums::common::visibility::Visibility; use fal_client::creds::open_ai_api_key::OpenAiApiKey; +use fal_client::requests::webhook::image::edit::enqueue_nano_banana_pro_edit_image_webhook::{enqueue_nano_banana_pro_image_edit_webhook, EnqueueNanoBananaProEditImageArgs, EnqueueNanoBananaProEditImageAspectRatio, EnqueueNanoBananaProEditImageNumImages, EnqueueNanoBananaProEditImageResolution}; +use fal_client::requests::webhook::image::text::enqueue_nano_banana_pro_text_to_image_webhook::{enqueue_nano_banana_pro_text_to_image_webhook, EnqueueNanoBananaProTextToImageArgs, EnqueueNanoBananaProTextToImageAspectRatio, EnqueueNanoBananaProTextToImageNumImages, EnqueueNanoBananaProTextToImageResolution}; use http_server_common::request::get_request_ip::get_request_ip; use log::{error, info, warn}; use mysql_queries::queries::generic_inference::fal::insert_generic_inference_job_for_fal_queue::insert_generic_inference_job_for_fal_queue; @@ -30,8 +32,6 @@ use sqlx::pool::PoolConnection; use sqlx::{Acquire, MySql}; use tokens::tokens::media_files::MediaFileToken; use utoipa::ToSchema; -use fal_client::requests::webhook::image::edit::enqueue_nano_banana_pro_edit_image_webhook::{enqueue_nano_banana_pro_image_edit_webhook, EnqueueNanoBananaProEditImageArgs, EnqueueNanoBananaProEditImageAspectRatio, EnqueueNanoBananaProEditImageNumImages, EnqueueNanoBananaProEditImageResolution}; -use fal_client::requests::webhook::image::text::enqueue_nano_banana_pro_text_to_image_webhook::{enqueue_nano_banana_pro_text_to_image_webhook, EnqueueNanoBananaProTextToImageArgs, EnqueueNanoBananaProTextToImageAspectRatio, EnqueueNanoBananaProTextToImageNumImages, EnqueueNanoBananaProTextToImageResolution}; /// Nano Banana Pro Multi-Function (generate + edit) #[utoipa::path( @@ -45,7 +45,7 @@ use fal_client::requests::webhook::image::text::enqueue_nano_banana_pro_text_to_ ("request" = NanoBananaProMultiFunctionImageGenRequest, description = "Payload for Request"), ) )] -pub async fn nano_banana_pro_edit_image_handler( +pub async fn nano_banana_pro_multi_function_image_gen_handler( http_request: HttpRequest, request: Json, server_state: web::Data> diff --git a/crates/service/web/storyteller_web/src/http_server/routes/application_routes/generate_routes.rs b/crates/service/web/storyteller_web/src/http_server/routes/application_routes/generate_routes.rs index 5357bb98a9..1b3d36b536 100644 --- a/crates/service/web/storyteller_web/src/http_server/routes/application_routes/generate_routes.rs +++ b/crates/service/web/storyteller_web/src/http_server/routes/application_routes/generate_routes.rs @@ -10,6 +10,7 @@ use crate::http_server::endpoints::generate::image::generate_flux_pro_11_ultra_t use crate::http_server::endpoints::generate::image::generate_gpt_image_1_text_to_image_handler::generate_gpt_image_1_text_to_image_handler; use crate::http_server::endpoints::generate::image::inpaint::flux_dev_juggernaut_inpaint_handler::flux_dev_juggernaut_inpaint_image_handler; use crate::http_server::endpoints::generate::image::inpaint::flux_pro_1_inpaint_handler::flux_pro_1_inpaint_image_handler; +use crate::http_server::endpoints::generate::image::multi_function::nano_banana_pro_multi_function_image_gen_handler::nano_banana_pro_multi_function_image_gen_handler; use crate::http_server::endpoints::generate::image::remove_image_background_handler::remove_image_background_handler; use crate::http_server::endpoints::generate::object::generate_hunyuan_2_0_image_to_3d_handler::generate_hunyuan_2_0_image_to_3d_handler; use crate::http_server::endpoints::generate::object::generate_hunyuan_2_1_image_to_3d_handler::generate_hunyuan_2_1_image_to_3d_handler; @@ -39,6 +40,12 @@ where { app.service(web::scope("/v1/generate") .service(web::scope("/image") + .service(web::scope("/multi_function") + .service(web::resource("/nano_banana_pro") + .route(web::post().to(nano_banana_pro_multi_function_image_gen_handler)) + .route(web::head().to(|| HttpResponse::Ok())) + ) + ) .service(web::scope("/edit") .service(web::resource("/flux_pro_kontext_max") .route(web::post().to(flux_pro_kontext_max_edit_image_handler))