diff --git a/README.md b/README.md index cf64dca0..0010fd7e 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ A command-line tool that uses AI to streamline your git workflow - generate comm - **Git History Insights**: Understand what changed in any commit, branch, or your current work - **Interactive Search**: Find and explore commits using fuzzy search - **Change Analysis**: Ask questions about specific changes and their impact -- **Multiple AI Providers**: Supports OpenAI, Claude, Groq, Ollama, and more +- **Multiple AI Providers**: Supports OpenAI, Claude, Groq, Poe, Ollama, and more - **Flexible**: Works with any git workflow and supports multiple AI providers - **Rich Output**: Markdown support for readable explanations and diffs (requires: mdcat) @@ -288,6 +288,7 @@ export LUMEN_AI_MODEL="gpt-5-mini" | [OpenCode Zen](https://opencode.ai/docs/zen) `opencode-zen` | Yes | [see list](https://opencode.ai/docs/zen#models) (default: `claude-sonnet-4-5`) | | [Ollama](https://github.com/ollama/ollama) `ollama` | No (local) | [see list](https://ollama.com/library) (default: `llama3.2`) | | [OpenRouter](https://openrouter.ai/) `openrouter` | Yes | [see list](https://openrouter.ai/models) (default: `anthropic/claude-sonnet-4.5`) | +| [Poe](https://creator.poe.com/docs/external-applications/openai-compatible-api) `poe` | Yes | [see list](https://poe.com/api/models) (default: `claude-sonnet-4.5`) | | [Vercel AI Gateway](https://vercel.com/docs/ai-gateway) `vercel` | Yes | [see list](https://vercel.com/docs/ai-gateway/supported-models) (default: `anthropic/claude-sonnet-4.5`) | ## Advanced Configuration 🔅 diff --git a/src/config/cli.rs b/src/config/cli.rs index f1d028ad..5248c2e9 100644 --- a/src/config/cli.rs +++ b/src/config/cli.rs @@ -46,6 +46,7 @@ pub enum ProviderType { Ollama, OpencodeZen, Openrouter, + Poe, Deepseek, Gemini, Xai, @@ -63,6 +64,7 @@ impl FromStr for ProviderType { "ollama" => Ok(ProviderType::Ollama), "opencode-zen" => Ok(ProviderType::OpencodeZen), "openrouter" => Ok(ProviderType::Openrouter), + "poe" => Ok(ProviderType::Poe), "deepseek" => Ok(ProviderType::Deepseek), "gemini" => Ok(ProviderType::Gemini), "xai" => Ok(ProviderType::Xai), diff --git a/src/config/providers.rs b/src/config/providers.rs index bbef14eb..ff1a14aa 100644 --- a/src/config/providers.rs +++ b/src/config/providers.rs @@ -59,6 +59,13 @@ pub const ALL_PROVIDERS: &[ProviderInfo] = &[ default_model: "anthropic/claude-sonnet-4.5", env_key: "OPENROUTER_API_KEY", }, + ProviderInfo { + id: "poe", + provider_type: ProviderType::Poe, + display_name: "Poe", + default_model: "claude-sonnet-4.5", + env_key: "POE_API_KEY", + }, ProviderInfo { id: "deepseek", provider_type: ProviderType::Deepseek, diff --git a/src/provider/mod.rs b/src/provider/mod.rs index 5057a0e9..9d0eb049 100644 --- a/src/provider/mod.rs +++ b/src/provider/mod.rs @@ -34,7 +34,7 @@ pub struct LumenProvider { provider_name: String, } -/// Provider configuration for custom endpoint providers (OpenCode Zen, OpenRouter, Vercel) +/// Provider configuration for custom endpoint providers (OpenCode Zen, OpenRouter, Poe, Vercel) struct CustomProviderConfig { endpoint: &'static str, env_key: &'static str, @@ -48,8 +48,11 @@ impl LumenProvider { model: Option, ) -> Result { let (backend, provider_name) = match provider_type { - // Custom endpoint providers (OpenCode Zen, OpenRouter, Vercel) - use ServiceTargetResolver - ProviderType::OpencodeZen | ProviderType::Openrouter | ProviderType::Vercel => { + // Custom endpoint providers (OpenCode Zen, OpenRouter, Poe, Vercel) - use ServiceTargetResolver + ProviderType::OpencodeZen + | ProviderType::Openrouter + | ProviderType::Poe + | ProviderType::Vercel => { let defaults = ProviderInfo::for_provider(provider_type); let config = match provider_type { ProviderType::OpencodeZen => CustomProviderConfig { @@ -62,6 +65,11 @@ impl LumenProvider { env_key: defaults.env_key, adapter_kind: AdapterKind::OpenAI, }, + ProviderType::Poe => CustomProviderConfig { + endpoint: "https://api.poe.com/v1/", + env_key: defaults.env_key, + adapter_kind: AdapterKind::OpenAI, + }, ProviderType::Vercel => CustomProviderConfig { // Trailing slash is required for URL joining to work correctly endpoint: "https://ai-gateway.vercel.sh/v1/",