Files
home-voice-assistant/.env.example
Cosmo 05de9c284b feat(llm): direct Claude Haiku 4.5 backend with prompt caching
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>
2026-04-23 13:12:39 +00:00

81 lines
3.5 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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