1use std::collections::HashMap;
2use thiserror;
3
4pub type Result<T> = std::result::Result<T, GenAiError>;
5
6#[derive(thiserror::Error, Debug)]
8pub enum GenAiError {
9 #[error("Remote error {status}: {message}")]
12 Remote {
13 status: u16,
14 message: String,
15 headers: HashMap<String, String>,
16 },
17
18 #[error("Internal error: {0}")]
20 Internal(String),
21}
22
23impl GenAiError {
24 pub async fn from_response(response: reqwest::Response) -> Self {
25 let status = response.status().as_u16();
26 let headers = response
27 .headers()
28 .iter()
29 .map(|(k, v)| {
30 (
31 k.as_str().to_lowercase(),
32 v.to_str().unwrap_or_default().to_string(),
33 )
34 })
35 .collect();
36 let message = response.text().await.unwrap_or_default();
37 GenAiError::Remote {
38 status,
39 message,
40 headers,
41 }
42 }
43}