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, pub status_class: Option<&'static str>, pub timeout: bool, pub retryable: bool, pub error_message: String, pub error_source: Option, pub raw_excerpt: Option, pub latency_ms: Option, pub prompt_chars: Option, pub reference_image_count: Option, pub image_model: Option<&'static str>, } pub(crate) fn build_failure_audit( request_url: &str, operation: &str, failure_stage: &'static str, status_code: Option, status_class: Option<&'static str>, timeout: bool, connect: bool, error_message: &str, error_source: Option, raw_excerpt: Option, latency_ms: Option, prompt_chars: Option, reference_image_count: Option, ) -> 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, timeout: bool, connect: bool, ) -> bool { timeout || connect || status_code.is_some_and(|status| status == 429 || status == 408 || status >= 500) }