# 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"]
