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 {
28 delay_ms: u64,
29 max_attempts: u32
30 },
31 SwitchProvider {
33 alternative_providers: Vec<String>
34 },
35 ReduceRequestSize {
37 max_tokens: Option<u32>
38 },
39 CheckCredentials,
41 ContactSupport {
43 reason: String
44 },
45 NoAction,
47}
48
49impl ErrorContext {
50 pub fn new(provider: String, endpoint: String) -> Self {
52 Self {
53 provider,
54 endpoint,
55 request_id: None,
56 timestamp: Utc::now(),
57 retry_count: 0,
58 suggested_action: SuggestedAction::NoAction,
59 }
60 }
61
62 pub fn with_retry(mut self, retry_count: u32) -> Self {
64 self.retry_count = retry_count;
65 self
66 }
67
68 pub fn with_request_id(mut self, request_id: String) -> Self {
70 self.request_id = Some(request_id);
71 self
72 }
73}