1use crate::Error;
10
11mod provider;
12mod service;
13
14pub use provider::{AiProvider, ProviderConfig};
15pub use service::AiService;
16
17#[must_use]
19pub fn is_available() -> bool {
20 true
21}
22
23pub fn default_provider() -> Result<AiProvider, Error> {
29 if std::env::var("ANTHROPIC_API_KEY").is_ok() {
31 return Ok(AiProvider::Anthropic);
32 }
33 if std::env::var("OPENAI_API_KEY").is_ok() {
34 return Ok(AiProvider::OpenAi);
35 }
36 if std::env::var("GOOGLE_API_KEY").is_ok() {
37 return Ok(AiProvider::Google);
38 }
39 if std::env::var("OLLAMA_HOST").is_ok() {
40 return Ok(AiProvider::Ollama);
41 }
42
43 Err(Error::AiNotConfigured {
44 message: "No AI provider configured. Set ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY, or OLLAMA_HOST.".to_string(),
45 })
46}