Ctrl K
ComunidadGuías…

Dockerfile

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# syntax=docker/dockerfile:1.7

ARG TORCHBASE_IMAGE=psyb0t/torchbase:py3.12-torch2.14-latest-cpu

FROM ghcr.io/astral-sh/uv:0.11.15@sha256:e590846f4776907b254ac0f44b5b380347af5d90d668138ca7938d1b0c2f98d3 AS uv

FROM python:3.12-slim-bookworm@sha256:d193c6f51a7dbd10395d6328de3a7edb0516fb0608ca138036576f574c3e07d2 AS application-builder

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    UV_LINK_MODE=copy \
    UV_PROJECT_ENVIRONMENT=/opt/app-venv

COPY --from=ghcr.io/astral-sh/uv:0.11.15@sha256:e590846f4776907b254ac0f44b5b380347af5d90d668138ca7938d1b0c2f98d3 /uv /usr/local/bin/uv

WORKDIR /app

COPY pyproject.toml uv.lock README.md ./
COPY src ./src
RUN --mount=type=cache,target=/root/.cache/uv \
    uv sync --frozen --no-dev --no-editable \
    && /opt/app-venv/bin/python -c "import decidealot"

FROM ${TORCHBASE_IMAGE} AS provider-runtime

ENV UV_LINK_MODE=copy

USER root
WORKDIR /build

COPY requirements-providers-cpu.txt ./
RUN --mount=from=uv,source=/uv,target=/usr/local/bin/uv,readonly \
    --mount=type=cache,target=/root/.cache/uv \
    uv pip install --python /opt/torch-venv/bin/python --require-hashes -r requirements-providers-cpu.txt \
    && /opt/torch-venv/bin/python -c "import laya, torch, von; assert torch.__version__ == '2.14.0+cpu'"

FROM provider-runtime AS runtime

ENV PYTHONDONTWRITEBYTECODE=1 \
    PYTHONUNBUFFERED=1 \
    HOME=/tmp \
    PATH=/opt/app-venv/bin:$PATH \
    DECIDEALOT_DEVICE=cpu \
    DECIDEALOT_IMAGE_VARIANT=cpu \
    DECIDEALOT_LOG_FILE=/tmp/decidealot.log \
    TZ=UTC

LABEL io.modelcontextprotocol.server.name="io.github.psyb0t/decidealot"

RUN mkdir --parents /etc/decidealot /models \
    && printf 'cpu\n' > /etc/decidealot/image-variant \
    && chown 1000:1000 /models

COPY --from=application-builder /opt/app-venv /opt/app-venv
COPY src/decidealot/clm_runtime.py /opt/decidealot/clm_runtime.py
COPY src/decidealot/provider_entrypoint.py /opt/decidealot/provider_entrypoint.py

USER 1000:1000
WORKDIR /app

EXPOSE 8080

HEALTHCHECK --interval=10s --timeout=3s --start-period=900s --retries=5 \
    CMD python -c "import sys, urllib.request; sys.exit(0 if urllib.request.urlopen('http://127.0.0.1:8080/health', timeout=2).status == 200 else 1)"

ENTRYPOINT ["decidealot"]