voice: локальный агент (fast-path), tool control_light, смелая тема, RUNBOOK
All checks were successful
Deploy / deploy (push) Successful in 3m43s

- lib/agent-local.ts + route.ts: команды-действия исполняет локальная intent-служба
  (под AGENT_URL, с fallback на LLM); инфо-запросы остаются у LLM
- lib/tools/lights.ts: голосовое управление светом через HA (control_light)
- app/globals.css + page.tsx: космическая indigo/aurora тема (токены, kiosk-safe)
- agent/: sidecar-служба (Dockerfile, predict.py), веса монтируются томом
- RUNBOOK.md: вывод в продакшен на мини-ПК
This commit is contained in:
d.klimov
2026-07-22 21:48:24 +03:00
parent d30ed1bac1
commit e6dab09c38
13 changed files with 975 additions and 32 deletions

29
agent/Dockerfile Normal file
View File

@@ -0,0 +1,29 @@
# Sidecar-служба локального агента (intent+slots) для планшета.
# route.ts зовёт её по HTTP (AGENT_URL) и исполняет команды-действия офлайн.
#
# Веса дообученной модели (joint_model/, ~115 МБ) в git НЕ идут и в образ НЕ
# пекутся — они МОНТИРУЮТСЯ томом в /app/joint_model при запуске (см. RUNBOOK).
# Базовая ruBERT-tiny2 запекается в образ при сборке, чтобы на старте не ходить
# в интернет.
FROM python:3.12-slim
WORKDIR /app
ENV HF_HUB_DISABLE_XET=1
# CPU-torch из cpu-индекса (без CUDA — образ легче).
RUN pip install --no-cache-dir --index-url https://download.pytorch.org/whl/cpu torch \
&& pip install --no-cache-dir transformers sentencepiece
# Запекаем базовую модель в кэш образа (runtime без сети).
RUN python -c "from transformers import AutoModel, AutoTokenizer; \
AutoModel.from_pretrained('cointegrated/rubert-tiny2'); \
AutoTokenizer.from_pretrained('cointegrated/rubert-tiny2')"
COPY joint_model_def.py tablet_map.py predict.py ./
ENV THRESHOLD=0.7
EXPOSE 8091
# Модель ждём в /app/joint_model (том). predict.py --serve поднимает HTTP:
# POST /predict {"text": "..."} -> {intent, slots, score, tool}
CMD ["python", "predict.py", "--serve", "--port", "8091"]