# Base image for building ARG LITELLM_BUILD_IMAGE=python:3.11-alpine@sha256:f07e2ace46f560f09a6eeec7b4913b80ee99546e749ef82342a419a326620856 # Runtime image ARG LITELLM_RUNTIME_IMAGE=python:3.11-alpine@sha256:f07e2ace46f560f09a6eeec7b4913b80ee99546e749ef82342a419a326620856 ARG UV_IMAGE=ghcr.io/astral-sh/uv:0.10.9@sha256:10902f58a1606787602f303954cea099626a4adb02acbac4c69920fe9d278f82 FROM $UV_IMAGE AS uvbin FROM $LITELLM_BUILD_IMAGE AS builder WORKDIR /app COPY --from=uvbin /uv /usr/local/bin/uv COPY --from=uvbin /uvx /usr/local/bin/uvx RUN apk add --no-cache gcc python3-dev musl-dev nodejs npm libsndfile ENV PRISMA_BINARY_CACHE_DIR=/app/.cache/prisma-python/binaries \ UV_PROJECT_ENVIRONMENT=/app/.venv \ UV_LINK_MODE=copy \ XDG_CACHE_HOME=/app/.cache \ PATH="/app/.venv/bin:${PATH}" # Copy dependency metadata first for layer caching COPY pyproject.toml uv.lock ./ COPY enterprise/pyproject.toml enterprise/ COPY litellm-proxy-extras/pyproject.toml litellm-proxy-extras/ # Install third-party dependencies (cached unless pyproject.toml/uv.lock change) RUN uv sync --frozen --no-install-project --no-install-workspace --no-default-groups --no-editable \ --extra proxy \ --extra proxy-runtime \ --extra extra_proxy \ --extra semantic-router \ --python python3 # Copy full source tree COPY . . # Install project and workspace packages (fast - deps already cached) RUN uv sync --frozen --no-default-groups --no-editable \ --extra proxy \ --extra proxy-runtime \ --extra extra_proxy \ --extra semantic-router \ --python python3 RUN prisma generate --schema=./schema.prisma RUN sed -i 's/\r$//' docker/entrypoint.sh && chmod +x docker/entrypoint.sh && \ sed -i 's/\r$//' docker/prod_entrypoint.sh && chmod +x docker/prod_entrypoint.sh FROM $LITELLM_RUNTIME_IMAGE AS runtime RUN apk upgrade --no-cache && apk add --no-cache libsndfile nodejs npm WORKDIR /app ENV PRISMA_BINARY_CACHE_DIR=/app/.cache/prisma-python/binaries \ XDG_CACHE_HOME=/app/.cache \ PATH="/app/.venv/bin:${PATH}" COPY --from=builder /app /app EXPOSE 4000/tcp ENTRYPOINT ["docker/prod_entrypoint.sh"] CMD ["--port", "4000"]