This commit is contained in:
Brandon Thomas committed 2026-04-05 23:41:30 -04:00
1 parent d2e545fa46
commit 38499e421e
6 files changed
+42 -40

No files matched your search

@@ -31,7 +31,8 @@ use crate::http_server::endpoints::generate::common::payments_error_test::paymen
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
use super::request_to_costs::estimate_costs;
use super::request_to_costs::request_to_costs;
use super::transform_request::transform_request;
/// Generate an image using the omni-gen unified endpoint.
#[utoipa::path(
@@ -55,6 +56,14 @@ pub async fn omni_gen_image_generate_handler(
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
// ==================== TRANSFORM REQUEST ==================== //
let mut generate_request = transform_request(&request)?;
// ==================== COST ==================== //
let cost_estimate = request_to_costs(&mut generate_request)?;
// ==================== SESSION ==================== //
let mut mysql_connection = server_state.mysql_pool.acquire().await?;
@@ -94,9 +103,7 @@ pub async fn omni_gen_image_generate_handler(
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
// ==================== COST + BILLING ==================== //
let cost_estimate = estimate_costs(&request)?;
// ==================== BILLING ==================== //
let cost = cost_estimate.cost_in_credits.unwrap_or(0);
@@ -1,20 +1,17 @@
use artcraft_router::api::provider::Provider;
use artcraft_router::generate::generate_image::generate_image_request::GenerateImageRequest;
use artcraft_router::generate::generate_image::image_generation_cost_estimate::ImageGenerationCostEstimate;
use log::warn;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::endpoints::omni_gen::generate::image::transform_request::transform_request;
use artcraft_api_defs::omni_gen::cost_and_generate_requests::omni_gen_image_cost_and_generate_request::OmniGenImageCostAndGenerateRequest;
/// Build the Artcraft-provider cost plan for this request.
pub fn estimate_costs(
request: &OmniGenImageCostAndGenerateRequest,
pub fn request_to_costs(
request: &mut GenerateImageRequest<'_>,
) -> Result<ImageGenerationCostEstimate, AdvancedCommonWebError> {
let mut generate_request = transform_request(request)?;
generate_request.provider = Provider::Artcraft;
request.provider = Provider::Artcraft;
let plan = generate_request.build()
let plan = request.build()
.map_err(|e| {
warn!("Failed to build cost plan: {}", e);
AdvancedCommonWebError::from_error(e)
@@ -1,16 +1,13 @@
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::endpoints::omni_gen::generate::image::transform_request::transform_request;
use artcraft_router::generate::generate_image::generate_image_request::GenerateImageRequest;
use artcraft_api_defs::omni_gen::cost_and_generate_requests::omni_gen_image_cost_and_generate_request::OmniGenImageCostAndGenerateRequest;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
/// Validate that an execution plan can be built for this request.
/// Returns an error if the model/provider combination is unsupported.
pub fn validate_execution_plan(
request: &OmniGenImageCostAndGenerateRequest,
pub fn request_to_execution_plan(
request: &GenerateImageRequest<'_>,
) -> Result<(), AdvancedCommonWebError> {
let generate_request = transform_request(request)?;
generate_request.build()
request.build()
.map(|_| ())
.map_err(|e| AdvancedCommonWebError::BadInputWithSimpleMessage(
format!("Failed to build execution plan: {}", e),
@@ -31,7 +31,8 @@ use crate::http_server::endpoints::generate::common::payments_error_test::paymen
use crate::http_server::validations::validate_idempotency_token_format::validate_idempotency_token_format;
use crate::state::server_state::ServerState;
use super::request_to_costs::estimate_costs;
use super::request_to_costs::request_to_costs;
use super::transform_request::transform_request;
/// Generate a video using the omni-gen unified endpoint.
#[utoipa::path(
@@ -55,6 +56,14 @@ pub async fn omni_gen_video_generate_handler(
payments_error_test(&request.prompt.as_deref().unwrap_or(""))?;
// ==================== TRANSFORM REQUEST ==================== //
let mut generate_request = transform_request(&request)?;
// ==================== COST ==================== //
let cost_estimate = request_to_costs(&mut generate_request)?;
// ==================== SESSION ==================== //
let mut mysql_connection = server_state.mysql_pool.acquire().await?;
@@ -94,9 +103,7 @@ pub async fn omni_gen_video_generate_handler(
AdvancedCommonWebError::BadInputWithSimpleMessage("repeated idempotency token".to_string())
})?;
// ==================== COST + BILLING ==================== //
let cost_estimate = estimate_costs(&request)?;
// ==================== BILLING ==================== //
let cost = cost_estimate.cost_in_credits.unwrap_or(0);
@@ -1,20 +1,17 @@
use artcraft_router::api::provider::Provider;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_router::generate::generate_video::video_generation_cost_estimate::VideoGenerationCostEstimate;
use log::warn;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::endpoints::omni_gen::generate::video::transform_request::transform_request;
use artcraft_api_defs::omni_gen::cost_and_generate_requests::omni_gen_video_cost_and_generate_request::OmniGenVideoCostAndGenerateRequest;
/// Build the Artcraft-provider cost plan for this request.
pub fn estimate_costs(
request: &OmniGenVideoCostAndGenerateRequest,
pub fn request_to_costs(
request: &mut GenerateVideoRequest<'_>,
) -> Result<VideoGenerationCostEstimate, AdvancedCommonWebError> {
let mut generate_request = transform_request(request)?;
generate_request.provider = Provider::Artcraft;
request.provider = Provider::Artcraft;
let plan = generate_request.build()
let plan = request.build()
.map_err(|e| {
warn!("Failed to build cost plan: {}", e);
AdvancedCommonWebError::from_error(e)
@@ -1,16 +1,13 @@
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
use crate::http_server::endpoints::omni_gen::generate::video::transform_request::transform_request;
use artcraft_router::generate::generate_video::generate_video_request::GenerateVideoRequest;
use artcraft_api_defs::omni_gen::cost_and_generate_requests::omni_gen_video_cost_and_generate_request::OmniGenVideoCostAndGenerateRequest;
use crate::http_server::common_responses::advanced_common_web_error::AdvancedCommonWebError;
/// Validate that an execution plan can be built for this request.
/// Returns an error if the model/provider combination is unsupported.
pub fn validate_execution_plan(
request: &OmniGenVideoCostAndGenerateRequest,
pub fn request_to_execution_plan(
request: &GenerateVideoRequest<'_>,
) -> Result<(), AdvancedCommonWebError> {
let generate_request = transform_request(request)?;
generate_request.build()
request.build()
.map(|_| ())
.map_err(|e| AdvancedCommonWebError::BadInputWithSimpleMessage(
format!("Failed to build execution plan: {}", e),