1use std::env;
2
3use gpui::AppContext;
4use util::ResultExt;
5
6use crate::auth::{CredentialProvider, ProviderCredential};
7use crate::providers::open_ai::OPENAI_API_URL;
8
9#[derive(Clone)]
10pub struct OpenAICredentialProvider {}
11
12impl CredentialProvider for OpenAICredentialProvider {
13 fn retrieve_credentials(&self, cx: &AppContext) -> ProviderCredential {
14 let api_key = if let Ok(api_key) = env::var("OPENAI_API_KEY") {
15 Some(api_key)
16 } else if let Some((_, api_key)) = cx
17 .platform()
18 .read_credentials(OPENAI_API_URL)
19 .log_err()
20 .flatten()
21 {
22 String::from_utf8(api_key).log_err()
23 } else {
24 None
25 };
26
27 if let Some(api_key) = api_key {
28 ProviderCredential::Credentials { api_key }
29 } else {
30 ProviderCredential::NoCredentials
31 }
32 }
33}