Adds a parallel LLM backend that bypasses OpenClaw and talks to Anthropic Messages API directly. Selected via LLM_BACKEND=claude in .env; default remains openclaw so nothing breaks for existing setup. Why: OpenClaw gateway adds 500-1000ms overhead on every turn (auth, memory fetch, routing). Direct Haiku 4.5 + prompt caching = faster first token and -90% cost on cached chunks. - satellite/llm_claude.py — Anthropic SDK streaming client, prompt caching on system prompt and all-but-last-2 history messages, per agent+date JSON history in HISTORY_DIR, reset_history() for the 'сбрось' command, per-agent system prompts (Cosmo / Люся), fallback to error event if SDK/key missing. - satellite/llm.py — dispatches to ask_claude_stream when backend=claude, exports LLM_BACKEND so modes.py can route reset too. - satellite/modes.py — _handle_reset calls reset_history when backend is claude, keeps /new POST for openclaw. - requirements.txt — anthropic >= 0.50.0 - .env.example — LLM_BACKEND, ANTHROPIC_API_KEY, ANTHROPIC_MODEL, HISTORY_DIR, MAX_HISTORY, HTTPS_PROXY block for non-RU egress. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
81 lines
3.5 KiB
Plaintext
81 lines
3.5 KiB
Plaintext
# OpenClaw Gateway — Cosmo
|
||
# Роутинг к агенту идёт через COSMO_SESSION_KEY, отдельный AGENT не нужен.
|
||
GATEWAY_URL=http://192.168.31.103:18789
|
||
GATEWAY_TOKEN=your_openclaw_token_here
|
||
VOICE_MODEL=openai/gpt-5.4-mini
|
||
|
||
# OpenClaw Gateway — Люся
|
||
LUSYA_GATEWAY_URL=http://192.168.31.103:18790
|
||
LUSYA_GATEWAY_TOKEN=your_openclaw_token_here
|
||
LUSYA_VOICE_MODEL=openai/gpt-5.4-mini
|
||
|
||
# STT (Groq)
|
||
GROQ_API_KEY=your_groq_api_key_here
|
||
|
||
# Wake word (openwakeword .onnx модели, обучаются через training/step_4.py)
|
||
WAKE_WORD_COSMO=data/models/cosmo.onnx
|
||
WAKE_WORD_LUSYA=data/models/lusya.onnx
|
||
|
||
# Audio (на Pi: bluez_sink.XX_XX_XX_XX_XX_XX.a2dp_sink)
|
||
AUDIO_SINK=
|
||
|
||
# TTS (ElevenLabs)
|
||
ELEVENLABS_API_KEY=your_elevenlabs_api_key_here
|
||
ELEVENLABS_MODEL=eleven_turbo_v2_5
|
||
COSMO_TTS_VOICE=your_cosmo_voice_id
|
||
LUSYA_TTS_VOICE=your_lusya_voice_id
|
||
|
||
# VAD
|
||
SILENCE_THRESHOLD=500
|
||
SILENCE_DURATION=1.5
|
||
MAX_DURATION=15
|
||
FOLLOWUP_TIMEOUT=8
|
||
VAD_AGGRESSIVENESS=2 # webrtcvad 0..3, больше = строже
|
||
|
||
# LLM
|
||
VOICE_MAX_TOKENS=300
|
||
LLM_RETRIES=3
|
||
|
||
# Barge-in (прерывание TTS голосом). Работает только при разнесённых мике/колонке
|
||
# или в наушниках — иначе собственный TTS будет триггерить прерывание.
|
||
BARGE_IN_ENABLED=false
|
||
BARGE_IN_THRESHOLD=1500 # RMS выше SILENCE_THRESHOLD
|
||
BARGE_IN_WARMUP=0.8 # сек пропуска в начале TTS
|
||
|
||
# Логирование
|
||
LOG_FILE=errors.log
|
||
|
||
COSMO_SESSION_KEY=agent:voice:voice:home
|
||
LUSYA_SESSION_KEY=agent:wife:voice:home
|
||
|
||
# Smart Home Tablet integration (опционально)
|
||
# Если настроено — скрипт шлёт события состояния (wake/command/response/idle/error)
|
||
# на планшет, который показывает оверлей с Siri-blob + распознанным текстом.
|
||
# Если не настроено, просто пропускается, ассистент работает как раньше.
|
||
TABLET_URL=https://tablet.digital-home.site
|
||
VOICE_API_KEY=your_voice_api_key_here
|
||
|
||
# TABLET_TTS_ENABLED=true (по умолчанию true когда TABLET_URL/KEY заданы) —
|
||
# голос ассистента проигрывается на планшете через ElevenLabs proxy,
|
||
# локальный mpv/speak пропускается. false = говорим локально как раньше.
|
||
TABLET_TTS_ENABLED=true
|
||
|
||
# ——————————————————————————————————————————————
|
||
# LLM backend
|
||
# openclaw (дефолт) — существующий путь через gateway с памятью на сервере
|
||
# claude — прямой вызов Anthropic Haiku 4.5 с локальной историей
|
||
# и prompt caching (быстрее + дешевле, но без tools)
|
||
LLM_BACKEND=openclaw
|
||
|
||
# Для LLM_BACKEND=claude:
|
||
ANTHROPIC_API_KEY=your_anthropic_key_here
|
||
ANTHROPIC_MODEL=claude-haiku-4-5
|
||
HISTORY_DIR=data/history # куда сохранять JSON истории per-agent per-date
|
||
MAX_HISTORY=40 # лимит сообщений в истории
|
||
|
||
# Egress proxy для non-RU сервисов (Anthropic, Groq, OpenAI).
|
||
# httpx и requests подхватывают автоматически. Пусто = прямой выход.
|
||
HTTPS_PROXY=http://192.168.31.103:8888
|
||
HTTP_PROXY=http://192.168.31.103:8888
|
||
NO_PROXY=localhost,127.0.0.1,192.168.31.0/24
|