ai_lib/error_handling/
context.rs1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ErrorContext {
9 pub provider: String,
11 pub endpoint: String,
13 pub request_id: Option<String>,
15 pub timestamp: DateTime<Utc>,
17 pub retry_count: u32,
19 pub suggested_action: SuggestedAction,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub enum SuggestedAction {
26 Retry { delay_ms: u64, max_attempts: u32 },
28 SwitchProvider { alternative_providers: Vec<String> },
30 ReduceRequestSize { max_tokens: Option<u32> },
32 CheckCredentials,
34 ContactSupport { reason: String },
36 NoAction,
38}
39
40impl ErrorContext {
41 pub fn new(provider: String, endpoint: String) -> Self {
43 Self {
44 provider,
45 endpoint,
46 request_id: None,
47 timestamp: Utc::now(),
48 retry_count: 0,
49 suggested_action: SuggestedAction::NoAction,
50 }
51 }
52
53 pub fn with_retry(mut self, retry_count: u32) -> Self {
55 self.retry_count = retry_count;
56 self
57 }
58
59 pub fn with_request_id(mut self, request_id: String) -> Self {
61 self.request_id = Some(request_id);
62 self
63 }
64}