omni_llm_kit/model/
errors.rs

1use std::time::Duration;
2use http::StatusCode;
3use thiserror::Error;
4use crate::model::LanguageModelProviderName;
5
6
7#[derive(Error, Debug)]
8pub enum LanguageModelCompletionError {
9    #[error("prompt too large for context window")]
10    PromptTooLarge { tokens: Option<u64> },
11    #[error("missing {provider} API key")]
12    NoApiKey { provider: LanguageModelProviderName },
13    #[error("{provider}'s API rate limit exceeded")]
14    RateLimitExceeded {
15        provider: LanguageModelProviderName,
16        retry_after: Option<Duration>,
17    },
18    #[error("{provider}'s API servers are overloaded right now")]
19    ServerOverloaded {
20        provider: LanguageModelProviderName,
21        retry_after: Option<Duration>,
22    },
23    #[error("{provider}'s API server reported an internal server error: {message}")]
24    ApiInternalServerError {
25        provider: LanguageModelProviderName,
26        message: String,
27    },
28    #[error("{message}")]
29    UpstreamProviderError {
30        message: String,
31        status: StatusCode,
32        retry_after: Option<Duration>,
33    },
34    #[error("HTTP response error from {provider}'s API: status {status_code} - {message:?}")]
35    HttpResponseError {
36        provider: LanguageModelProviderName,
37        status_code: StatusCode,
38        message: String,
39    },
40
41    // Client errors
42    #[error("invalid request format to {provider}'s API: {message}")]
43    BadRequestFormat {
44        provider: LanguageModelProviderName,
45        message: String,
46    },
47    #[error("authentication error with {provider}'s API: {message}")]
48    AuthenticationError {
49        provider: LanguageModelProviderName,
50        message: String,
51    },
52    #[error("permission error with {provider}'s API: {message}")]
53    PermissionError {
54        provider: LanguageModelProviderName,
55        message: String,
56    },
57    #[error("language model provider API endpoint not found")]
58    ApiEndpointNotFound { provider: LanguageModelProviderName },
59    #[error("I/O error reading response from {provider}'s API")]
60    ApiReadResponseError {
61        provider: LanguageModelProviderName,
62        #[source]
63        error: std::io::Error,
64    },
65    #[error("error serializing request to {provider} API")]
66    SerializeRequest {
67        provider: LanguageModelProviderName,
68        #[source]
69        error: serde_json::Error,
70    },
71    #[error("error building request body to {provider} API")]
72    BuildRequestBody {
73        provider: LanguageModelProviderName,
74        #[source]
75        error: http::Error,
76    },
77    #[error("error sending HTTP request to {provider} API")]
78    HttpSend {
79        provider: LanguageModelProviderName,
80        #[source]
81        error: anyhow::Error,
82    },
83    #[error("error deserializing {provider} API response")]
84    DeserializeResponse {
85        provider: LanguageModelProviderName,
86        #[source]
87        error: serde_json::Error,
88    },
89
90    // TODO: Ideally this would be removed in favor of having a comprehensive list of errors.
91    #[error(transparent)]
92    Other(#[from] anyhow::Error),
93}
94