open_ai.rs

 1use crate::{LanguageModelCompletionError, LanguageModelProviderId, LanguageModelProviderName};
 2use http_client::http;
 3use std::time::Duration;
 4
 5pub const OPEN_AI_PROVIDER_ID: LanguageModelProviderId = LanguageModelProviderId::new("openai");
 6pub const OPEN_AI_PROVIDER_NAME: LanguageModelProviderName =
 7    LanguageModelProviderName::new("OpenAI");
 8
 9impl From<open_ai::RequestError> for LanguageModelCompletionError {
10    fn from(error: open_ai::RequestError) -> Self {
11        match error {
12            open_ai::RequestError::HttpResponseError {
13                provider,
14                status_code,
15                body,
16                headers,
17            } => {
18                let retry_after = headers
19                    .get(http::header::RETRY_AFTER)
20                    .and_then(|val| val.to_str().ok()?.parse::<u64>().ok())
21                    .map(Duration::from_secs);
22
23                Self::from_http_status(provider.into(), status_code, body, retry_after)
24            }
25            open_ai::RequestError::Other(e) => Self::Other(e),
26        }
27    }
28}