alith_interface/llms/api/
error.rs1use serde::Deserialize;
2
3#[derive(Debug, thiserror::Error)]
4pub enum ClientError {
5 #[error("http error: {0}")]
7 Reqwest(#[from] reqwest::Error),
8 #[error("{:?}: {}", .0.r#type, .0.message)]
10 ApiError(ApiError),
11 #[error("Service unavailable: {message}")]
13 ServiceUnavailable { message: String },
14 #[error("Generic error: {message}")]
16 GenericError { message: String },
17 #[error("failed to serialize api request: {0}")]
19 JSONSerialize(serde_json::Error),
20 #[error("failed to deserialize api response: {0}")]
22 JSONDeserialize(serde_json::Error),
23 #[error("invalid args: {0}")]
26 InvalidArgument(String),
27}
28
29#[derive(Debug, Deserialize)]
31pub(crate) struct WrappedError {
32 pub(crate) error: ApiError,
33}
34
35pub(crate) fn map_deserialization_error(e: serde_json::Error, bytes: &[u8]) -> ClientError {
36 tracing::error!(
37 "failed deserialization of: {}",
38 String::from_utf8_lossy(bytes)
39 );
40 ClientError::JSONDeserialize(e)
41}
42
43pub(crate) fn map_serialization_error(e: serde_json::Error) -> ClientError {
44 tracing::error!("failed serialization: {}", e);
45 ClientError::JSONSerialize(e)
46}
47
48#[derive(Debug, Deserialize, Clone)]
49pub struct ApiError {
50 pub message: String,
51 pub r#type: Option<String>,
52 pub param: Option<String>,
53 pub code: Option<String>,
54}