Add OpenRouter provider and remove Perplexity

This commit is contained in:
2026-03-07 19:59:01 +03:00
parent bed4ba36d7
commit 167ddc9264
4 changed files with 31 additions and 31 deletions

View File

@@ -2,10 +2,10 @@
# Если одновременно указать несколько AI ключей, колонка выдаст ошибку.
AI_PROVIDER=
# Perplexity
# PERPLEXITY_API_KEY=your_perplexity_api_key_here
PERPLEXITY_MODEL=llama-3.1-sonar-small-128k-chat
PERPLEXITY_API_URL=https://api.perplexity.ai/chat/completions
# OpenRouter
# OPENROUTER_API_KEY=your_openrouter_api_key_here
OPENROUTER_MODEL=openai/gpt-4o-mini
OPENROUTER_API_URL=https://openrouter.ai/api/v1/chat/completions
# OpenAI
# OPENAI_API_KEY=your_openai_api_key_here

View File

@@ -26,7 +26,7 @@
- Follow-up окно 4 секунды после ответа: если пользователь молчит, ассистент возвращается к ожиданию wake word.
- Распознавание речи через Deepgram (WebSocket, VAD, fast stop).
- Озвучка через Silero TTS (RU + EN, с прерыванием по wake word).
- AI-диалог через Perplexity, OpenAI, Gemini, Z.ai и Anthropic Claude API со streaming-ответом и контекстом.
- AI-диалог через OpenRouter, OpenAI, Gemini, Z.ai и Anthropic Claude API со streaming-ответом и контекстом.
- Перевод RU -> EN и EN -> RU.
- Погода: текущий прогноз по городу по умолчанию или по названию города.
- Таймеры, будильники (включая будни/выходные), секундомеры.
@@ -84,7 +84,7 @@ cp .env.example .env
```ini
AI_PROVIDER= # опционально; можно оставить пустым
# Раскомментируйте только один AI API KEY:
# PERPLEXITY_API_KEY=...
# OPENROUTER_API_KEY=...
# OPENAI_API_KEY=...
# GEMINI_API_KEY=...
# ZAI_API_KEY=...
@@ -122,10 +122,10 @@ python run.py
| Переменная | Обязательно | По умолчанию | Назначение |
|---|---|---|---|
| `AI_PROVIDER` | Нет | `perplexity` | Опциональный провайдер AI (`perplexity`, `openai`, `gemini`, `zai`, `anthropic`; также понимает `claude`) |
| `PERPLEXITY_API_KEY` | Да* | - | Ключ Perplexity API (*если выбран Perplexity и только этот AI ключ активен) |
| `PERPLEXITY_MODEL` | Нет | `llama-3.1-sonar-small-128k-chat` | Модель Perplexity |
| `PERPLEXITY_API_URL` | Нет | `https://api.perplexity.ai/chat/completions` | Endpoint Perplexity Chat Completions |
| `AI_PROVIDER` | Нет | `openrouter` | Опциональный провайдер AI (`openrouter`, `openai`, `gemini`, `zai`, `anthropic`; также понимает `claude`) |
| `OPENROUTER_API_KEY` | Да* | - | Ключ OpenRouter API (*если выбран OpenRouter и только этот AI ключ активен) |
| `OPENROUTER_MODEL` | Нет | `openai/gpt-4o-mini` | Модель OpenRouter |
| `OPENROUTER_API_URL` | Нет | `https://openrouter.ai/api/v1/chat/completions` | Endpoint OpenRouter Chat Completions |
| `OPENAI_API_KEY` | Да* | - | Ключ OpenAI API (*если выбран OpenAI и только этот AI ключ активен) |
| `OPENAI_MODEL` | Нет | `gpt-4o-mini` | Модель OpenAI |
| `OPENAI_API_URL` | Нет | `https://api.openai.com/v1/chat/completions` | Endpoint OpenAI Chat Completions |

View File

@@ -18,9 +18,9 @@ from .config import (
OPENAI_API_KEY,
OPENAI_API_URL,
OPENAI_MODEL,
PERPLEXITY_API_KEY,
PERPLEXITY_API_URL,
PERPLEXITY_MODEL,
OPENROUTER_API_KEY,
OPENROUTER_API_URL,
OPENROUTER_MODEL,
ZAI_API_KEY,
ZAI_API_URL,
ZAI_MODEL,
@@ -50,14 +50,14 @@ Separate variants with " / " (space slash space).
Keep the translation максимально кратким и естественным, без лишних слов."""
_PROVIDER_ALIASES = {
"": "perplexity",
"": "openrouter",
"anthropic": "anthropic",
"claude": "anthropic",
"claude_anthropic": "anthropic",
"gemini": "gemini",
"google": "gemini",
"openai": "openai",
"perplexity": "perplexity",
"openrouter": "openrouter",
"z.ai": "zai",
"z-ai": "zai",
"z_ai": "zai",
@@ -66,15 +66,15 @@ _PROVIDER_ALIASES = {
# В .env нужен только один AI-ключ
_PROVIDER_SETTINGS = {
"perplexity": {
"provider": "perplexity",
"openrouter": {
"provider": "openrouter",
"protocol": "openai_compatible",
"api_key": PERPLEXITY_API_KEY,
"model": PERPLEXITY_MODEL,
"api_url": PERPLEXITY_API_URL,
"name": "Perplexity",
"key_var": "PERPLEXITY_API_KEY",
"model_var": "PERPLEXITY_MODEL",
"api_key": OPENROUTER_API_KEY,
"model": OPENROUTER_MODEL,
"api_url": OPENROUTER_API_URL,
"name": "OpenRouter",
"key_var": "OPENROUTER_API_KEY",
"model_var": "OPENROUTER_MODEL",
},
"openai": {
"provider": "openai",
@@ -169,10 +169,10 @@ def _get_provider_settings():
supported = ", ".join(sorted(_PROVIDER_SETTINGS))
print(
f"⚠️ Неизвестный AI_PROVIDER={AI_PROVIDER!r}, используем Perplexity. "
f"⚠️ Неизвестный AI_PROVIDER={AI_PROVIDER!r}, используем OpenRouter. "
f"Поддерживаются: {supported}."
)
return _PROVIDER_SETTINGS["perplexity"], None
return _PROVIDER_SETTINGS["openrouter"], None
def _content_to_text(content) -> str:

View File

@@ -20,13 +20,13 @@ load_dotenv(BASE_DIR / ".env")
# --- Настройки AI ---
# AI_PROVIDER опционален. Приоритет у единственного активного AI API key.
# Если активных ключей несколько, AI-модуль вернет ошибку конфигурации.
AI_PROVIDER = os.getenv("AI_PROVIDER", "perplexity").strip().lower()
AI_PROVIDER = os.getenv("AI_PROVIDER", "openrouter").strip().lower()
# Perplexity
PERPLEXITY_API_KEY = os.getenv("PERPLEXITY_API_KEY")
PERPLEXITY_MODEL = os.getenv("PERPLEXITY_MODEL", "llama-3.1-sonar-small-128k-chat")
PERPLEXITY_API_URL = os.getenv(
"PERPLEXITY_API_URL", "https://api.perplexity.ai/chat/completions"
# OpenRouter
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY")
OPENROUTER_MODEL = os.getenv("OPENROUTER_MODEL", "openai/gpt-4o-mini")
OPENROUTER_API_URL = os.getenv(
"OPENROUTER_API_URL", "https://openrouter.ai/api/v1/chat/completions"
)
# OpenAI