Add OpenRouter provider and remove Perplexity
This commit is contained in:
@@ -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
|
||||
|
||||
12
README.md
12
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 |
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user