diff --git a/server-rs/crates/platform-image/src/image_provider/runtime/executor.rs b/server-rs/crates/platform-image/src/image_provider/runtime/executor.rs index c6508dd7b..22e35dc90 100644 --- a/server-rs/crates/platform-image/src/image_provider/runtime/executor.rs +++ b/server-rs/crates/platform-image/src/image_provider/runtime/executor.rs @@ -12,7 +12,7 @@ use crate::image_provider::{ constants::{ GPT_IMAGE_2_5_EDIT_MODEL, GPT_IMAGE_2_5_GENERATION_MODEL, GPT_IMAGE_2_C_MODEL, GPT_IMAGE_2_MODEL, VECTOR_ENGINE_IMAGE_EDIT_MAX_REFERENCE_IMAGES, - VECTOR_ENGINE_NANOBANANA_MAX_REFERENCE_IMAGES, VECTOR_ENGINE_PROVIDER, + VECTOR_ENGINE_NANOBANANA_MAX_REFERENCE_IMAGES, }, curl_transport::{ map_curl_error, send_image_json_request_with_curl, @@ -143,6 +143,7 @@ pub async fn create_image_generation_with_model( attempt, ) { if retry_image_upstream_status_after_delay( + settings.provider, "generation", request_url.as_str(), attempt, @@ -165,6 +166,7 @@ pub async fn create_image_generation_with_model( Err(error) => { if should_retry_image_curl_send_error(&error, attempt) { if retry_image_send_after_delay( + settings.provider, "generation", request_url.as_str(), "request_send", @@ -205,7 +207,7 @@ pub async fn create_image_generation_with_model( }; let response_status = response.status; tracing::info!( - provider = VECTOR_ENGINE_PROVIDER, + provider = settings.provider.as_str(), endpoint = %request_url, status = response_status, image_model = upstream_model, @@ -271,7 +273,7 @@ pub async fn create_nanobanana_generate_content( })?; if reference_images.len() > VECTOR_ENGINE_NANOBANANA_MAX_REFERENCE_IMAGES { return Err(PlatformImageError::InvalidRequest { - provider: VECTOR_ENGINE_PROVIDER, + provider: settings.provider.as_str(), message: format!( "{failure_context}:参考图最多允许 {VECTOR_ENGINE_NANOBANANA_MAX_REFERENCE_IMAGES} 张,当前提交 {} 张。", reference_images.len() @@ -334,6 +336,7 @@ pub async fn create_nanobanana_generate_content( attempt, ) { if retry_image_upstream_status_after_delay( + ImageProvider::VectorEngine, "nanobanana_generate_content", request_url.as_str(), attempt, @@ -356,6 +359,7 @@ pub async fn create_nanobanana_generate_content( Err(error) => { if should_retry_image_curl_send_error(&error, attempt) { if retry_image_send_after_delay( + ImageProvider::VectorEngine, "nanobanana_generate_content", request_url.as_str(), "request_send", @@ -394,7 +398,7 @@ pub async fn create_nanobanana_generate_content( }; let response_status = response.status; tracing::info!( - provider = VECTOR_ENGINE_PROVIDER, + provider = settings.provider.as_str(), endpoint = %request_url, status = response_status, image_model = model, @@ -495,13 +499,13 @@ pub async fn create_image_edit_with_references_and_model( })?; if reference_images.is_empty() { return Err(PlatformImageError::InvalidRequest { - provider: VECTOR_ENGINE_PROVIDER, + provider: settings.provider.as_str(), message: format!("{failure_context}:缺少参考图,图片编辑需要至少一张参考图。"), }); } if reference_images.len() > VECTOR_ENGINE_IMAGE_EDIT_MAX_REFERENCE_IMAGES { return Err(PlatformImageError::InvalidRequest { - provider: VECTOR_ENGINE_PROVIDER, + provider: settings.provider.as_str(), message: format!( "{failure_context}:参考图最多允许 {VECTOR_ENGINE_IMAGE_EDIT_MAX_REFERENCE_IMAGES} 张,当前提交 {} 张。", reference_images.len() @@ -529,7 +533,7 @@ pub async fn create_image_edit_with_references_and_model( reference_images, ); tracing::info!( - provider = VECTOR_ENGINE_PROVIDER, + provider = settings.provider.as_str(), endpoint = %request_url, image_model = upstream_model, requested_image_model = requested_model, @@ -586,6 +590,7 @@ pub async fn create_image_edit_with_references_and_model( attempt, ) { if retry_image_upstream_status_after_delay( + settings.provider, "edit", request_url.as_str(), attempt, @@ -608,6 +613,7 @@ pub async fn create_image_edit_with_references_and_model( Err(error) => { if should_retry_image_curl_send_error(&error, attempt) { if retry_image_send_after_delay( + settings.provider, "edit", request_url.as_str(), "request_send", @@ -648,7 +654,7 @@ pub async fn create_image_edit_with_references_and_model( }; let response_status = response.status; tracing::info!( - provider = VECTOR_ENGINE_PROVIDER, + provider = settings.provider.as_str(), endpoint = %request_url, status = response_status, image_model = upstream_model, @@ -760,6 +766,7 @@ fn should_retry_image_upstream_response(status: u16, raw_body: &str, attempt: u3 } async fn retry_image_send_after_delay( + provider: ImageProvider, request_kind: &'static str, request_url: &str, failure_stage: &'static str, @@ -775,11 +782,12 @@ async fn retry_image_send_after_delay( request_params: Option<&serde_json::Value>, request_deadline: Option, ) -> bool { + let provider_label = provider.as_str(); let delay_ms = image_provider_send_retry_delay_ms(attempt, image_provider_send_retry_jitter_ms()); if !retry_delay_fits_request_deadline(request_deadline, delay_ms) { tracing::warn!( - provider = VECTOR_ENGINE_PROVIDER, + provider = provider_label, endpoint = %request_url, request_kind, failure_stage = "request_budget", @@ -800,7 +808,7 @@ async fn retry_image_send_after_delay( return false; } tracing::warn!( - provider = VECTOR_ENGINE_PROVIDER, + provider = provider_label, endpoint = %request_url, request_kind, failure_stage, @@ -826,6 +834,7 @@ async fn retry_image_send_after_delay( } async fn retry_image_upstream_status_after_delay( + provider: ImageProvider, request_kind: &'static str, request_url: &str, attempt: u32, @@ -837,11 +846,12 @@ async fn retry_image_upstream_status_after_delay( request_params: Option<&serde_json::Value>, request_deadline: Option, ) -> bool { + let provider_label = provider.as_str(); let delay_ms = image_provider_send_retry_delay_ms(attempt, image_provider_send_retry_jitter_ms()); if !retry_delay_fits_request_deadline(request_deadline, delay_ms) { tracing::warn!( - provider = VECTOR_ENGINE_PROVIDER, + provider = provider_label, endpoint = %request_url, request_kind, failure_stage = "request_budget", @@ -858,7 +868,7 @@ async fn retry_image_upstream_status_after_delay( return false; } tracing::warn!( - provider = VECTOR_ENGINE_PROVIDER, + provider = provider_label, endpoint = %request_url, request_kind, failure_stage = "upstream_status",