pub mod openai;
pub mod anthropic;
pub mod ollama;
pub mod gemini;
pub mod error;
pub use openai::OpenAiProvider;
pub use anthropic::AnthropicProvider;
pub use ollama::OllamaProvider;
pub use gemini::GeminiProvider;
pub use error::AiError;
pub use aether_core::{
AiProvider, ProviderConfig, InjectionEngine, Template, Slot,
InjectionContext, AetherError, Result,
};
pub fn openai(model: &str) -> Result<OpenAiProvider> {
OpenAiProvider::from_env_with_model(model)
}
pub fn anthropic(model: &str) -> Result<AnthropicProvider> {
AnthropicProvider::from_env_with_model(model)
}
pub fn gemini(model: &str) -> Result<GeminiProvider> {
match GeminiProvider::from_env() {
Ok(_) => {
let api_key = std::env::var("GOOGLE_API_KEY")
.map_err(|_| AetherError::ConfigError("GOOGLE_API_KEY not set".to_string()))?;
let config = ProviderConfig::new(api_key, model);
GeminiProvider::new(config)
},
Err(e) => Err(e)
}
}
pub fn grok(model: &str) -> Result<OpenAiProvider> {
let api_key = std::env::var("XAI_API_KEY")
.map_err(|_| AetherError::ConfigError("XAI_API_KEY not set".to_string()))?;
let config = ProviderConfig::new(api_key, model)
.with_base_url("https://api.x.ai/v1/chat/completions");
let config = config.with_base_url("https://api.x.ai/v1/chat/completions");
OpenAiProvider::new(config)
}
pub fn ollama(model: &str) -> OllamaProvider {
OllamaProvider::new(model)
}