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}