The wave logs each served candidate's feature vector to rec_impression_features. Nightly training joins them with impression outcomes, validates on the last week and activates the model only when it beats the v1 order and the active model. The service loads the active ranker and uses its order in place of the v1 score. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
28 lines
1.2 KiB
Docker
28 lines
1.2 KiB
Docker
# syntax=docker/dockerfile:1
|
|
# Сборка из корня репозитория:
|
|
# docker build -f services/recommender/Dockerfile --build-arg VERSION=1.2.3 .
|
|
# Один образ — две роли: `serve` (recommender) и `analyze --workers N` (analyzer).
|
|
|
|
FROM ghcr.io/astral-sh/uv:0.10.2 AS uv
|
|
|
|
FROM python:3.12-slim AS build
|
|
COPY --from=uv /uv /usr/local/bin/uv
|
|
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy UV_PYTHON_DOWNLOADS=never
|
|
WORKDIR /app
|
|
COPY services/recommender/pyproject.toml services/recommender/uv.lock ./
|
|
RUN --mount=type=cache,target=/root/.cache/uv uv sync --frozen --no-dev --no-install-project
|
|
COPY services/recommender/ ./
|
|
RUN --mount=type=cache,target=/root/.cache/uv uv sync --frozen --no-dev
|
|
|
|
FROM python:3.12-slim
|
|
# ffmpeg декодирует аудио для анализатора; libgomp1 нужен LightGBM (ранжировщик волны).
|
|
RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg libgomp1 && rm -rf /var/lib/apt/lists/* && useradd --system --uid 10001 pipu
|
|
COPY --from=build /app /app
|
|
ARG VERSION=0.0.0-dev
|
|
ENV PATH=/app/.venv/bin:$PATH PIPU_VERSION=${VERSION} PYTHONUNBUFFERED=1
|
|
USER pipu
|
|
WORKDIR /app
|
|
EXPOSE 8000
|
|
ENTRYPOINT ["pipu-rec"]
|
|
CMD ["serve"]
|