Files
Genarrative/server-rs/crates/platform-image/src/vector_engine/audit.rs
2026-05-26 13:18:13 +08:00

65 lines
1.9 KiB
Rust

use super::constants::{VECTOR_ENGINE_GPT_IMAGE_2_MODEL, VECTOR_ENGINE_PROVIDER};
#[derive(Clone, Debug)]
pub struct PlatformImageFailureAudit {
pub provider: &'static str,
pub endpoint: String,
pub operation: String,
pub failure_stage: &'static str,
pub status_code: Option<u16>,
pub status_class: Option<&'static str>,
pub timeout: bool,
pub retryable: bool,
pub error_message: String,
pub error_source: Option<String>,
pub raw_excerpt: Option<String>,
pub latency_ms: Option<u64>,
pub prompt_chars: Option<usize>,
pub reference_image_count: Option<usize>,
pub image_model: Option<&'static str>,
}
pub(crate) fn build_failure_audit(
request_url: &str,
operation: &str,
failure_stage: &'static str,
status_code: Option<u16>,
status_class: Option<&'static str>,
timeout: bool,
connect: bool,
error_message: &str,
error_source: Option<String>,
raw_excerpt: Option<String>,
latency_ms: Option<u64>,
prompt_chars: Option<usize>,
reference_image_count: Option<usize>,
) -> PlatformImageFailureAudit {
PlatformImageFailureAudit {
provider: VECTOR_ENGINE_PROVIDER,
endpoint: request_url.to_string(),
operation: operation.to_string(),
failure_stage,
status_code,
status_class,
timeout,
retryable: is_retryable_external_api_failure(status_code, timeout, connect),
error_message: error_message.to_string(),
error_source,
raw_excerpt,
latency_ms,
prompt_chars,
reference_image_count,
image_model: Some(VECTOR_ENGINE_GPT_IMAGE_2_MODEL),
}
}
pub(crate) fn is_retryable_external_api_failure(
status_code: Option<u16>,
timeout: bool,
connect: bool,
) -> bool {
timeout
|| connect
|| status_code.is_some_and(|status| status == 429 || status == 408 || status >= 500)
}