- Menor tamanho final (não reinstala litellm) - Atualizações de segurança seguem a imagem oficial - Só instala numpy + scikit-learn como deps extras
63 lines
2.5 KiB
Docker
63 lines
2.5 KiB
Docker
# ---------------------------------------------------------------
|
||
# Docker image for the Tool Router (based on the official LiteLLM image)
|
||
# ---------------------------------------------------------------
|
||
# Why use the official base?
|
||
# • It already contains the core LiteLLM binaries and entrypoint
|
||
# • Smaller image size (no extra OS packages we don’t need)
|
||
# • Keeps the same security update cadence as the official image
|
||
#
|
||
# What we add:
|
||
# • Our Tool Router source code (tool_router_logger.py, config.yaml, etc.)
|
||
# • Extra Python dependencies required for the Jaccard/Embedding logic
|
||
# – numpy
|
||
# – scikit‑learn
|
||
# • A tiny wrapper entrypoint that runs `litellm --config /app/config.yaml`
|
||
# ---------------------------------------------------------------
|
||
|
||
# 1️⃣ Use the official LiteLLM image (based on python:3.12‑slim)
|
||
FROM litellm/litellm:latest AS base
|
||
|
||
# 2️⃣ Set environment variables that control the router
|
||
ENV \
|
||
# Port the proxy will expose (match docker‑compose)
|
||
PORT=4000 \
|
||
# Router defaults – can be overridden at runtime with env vars
|
||
TOOL_ROUTER_SIMILARITY_MODE=jaccard \
|
||
TOOL_ROUTER_TOP_K=3 \
|
||
TOOL_ROUTER_MIN_SIMILARITY=0.15 \
|
||
TOOL_ROUTER_ALWAYS_INCLUDE=get_time,help,list_tools \
|
||
TOOL_ROUTER_EMBEDDING_MODEL=text-embedding-3-small
|
||
|
||
# 3️⃣ Create a non‑root user (optional but recommended)
|
||
RUN useradd -m litellm && \
|
||
mkdir -p /app && \
|
||
chown litellm:litellm /app
|
||
|
||
# 4️⃣ Switch to that user for the rest of the steps
|
||
USER litellm
|
||
WORKDIR /app
|
||
|
||
# 5️⃣ Copy only the files that belong to the Tool Router
|
||
# (keeps the image lean – we don’t copy .git, docs, etc.)
|
||
COPY --chown=litellm:litellm \
|
||
tool_router_logger.py \
|
||
config.yaml \
|
||
test_tool_router.py \
|
||
requirements.txt \
|
||
./
|
||
|
||
# 6️⃣ Install the extra Python deps that the router needs:
|
||
# – numpy (for cosine similarity)
|
||
# – scikit‑learn (for the Jaccard fallback)
|
||
RUN pip install --no-cache-dir -r requirements.txt
|
||
|
||
# 7️⃣ Expose the port used by LiteLLM
|
||
EXPOSE 4000
|
||
|
||
# 8️⃣ Healthcheck – LiteLLM returns a JSON “health” endpoint
|
||
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
||
CMD curl -fsS "http://127.0.0.1:${PORT}/health" || exit 1
|
||
|
||
# 9️⃣ Default command – run the proxy with our config file
|
||
# The official image’s entrypoint is preserved, we just pass the config.
|
||
CMD ["sh", "-c", "litellm --config /app/config.yaml --port ${PORT} --host 0.0.0.0"] |