修正 executor 日志与重试错误的 provider 归属
生成 / 编辑路径的 tracing 字段与参考图数量校验错误改用 settings.provider nanobanana 路径改用 VectorEngine provider 重试辅助函数 retry_image_send_after_delay / retry_image_upstream_status_after_delay 增加 provider 参数
This commit is contained in:
@@ -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<Instant>,
|
||||
) -> 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<Instant>,
|
||||
) -> 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",
|
||||
|
||||
Reference in New Issue
Block a user