From 167ddc9264588bbccd337134ac6b797dc690f9c2 Mon Sep 17 00:00:00 2001 From: future Date: Sat, 7 Mar 2026 19:59:01 +0300 Subject: [PATCH] Add OpenRouter provider and remove Perplexity --- .env.example | 8 ++++---- README.md | 12 ++++++------ app/core/ai.py | 30 +++++++++++++++--------------- app/core/config.py | 12 ++++++------ 4 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.env.example b/.env.example index 7228a0f..95251de 100644 --- a/.env.example +++ b/.env.example @@ -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 diff --git a/README.md b/README.md index c33aefe..61d574d 100644 --- a/README.md +++ b/README.md @@ -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 | diff --git a/app/core/ai.py b/app/core/ai.py index 9751515..cfeaf88 100644 --- a/app/core/ai.py +++ b/app/core/ai.py @@ -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: diff --git a/app/core/config.py b/app/core/config.py index b3c8261..56d4f54 100644 --- a/app/core/config.py +++ b/app/core/config.py @@ -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