# MiniCPM5-1B-Agent demo Space - llama.cpp server (Q8_0 GGUF) + the agent-loop UI (app.py). # Based on the proven usermma/MiniCPM-5-Q4 pattern (FROM ghcr.io/ggml-org/llama.cpp:full), but instead # of the raw chat UI we run app.py, which starts llama-server itself and drives the write->run->verify loop. FROM ghcr.io/ggml-org/llama.cpp:full WORKDIR /app # Python venv for the app deps (keep separate from the image's own python usage). RUN apt-get update && apt-get install -y --no-install-recommends python3-pip python3-venv \ && rm -rf /var/lib/apt/lists/* RUN python3 -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" COPY requirements.txt /app/requirements.txt RUN pip install --no-cache-dir -U pip && pip install --no-cache-dir -r /app/requirements.txt # The :full image ships the standalone binaries under /app (entrypoint is /app/tools.sh dispatcher). # Make `llama-server` resolvable on PATH for agent.py (CODEAGENT_LLAMA_BIN). Prefer the known # /app/llama-server; fall back to a search. Fail the build loudly if neither resolves. RUN if [ -x /app/llama-server ]; then ln -sf /app/llama-server /usr/local/bin/llama-server; \ else ln -sf "$(find / -name llama-server -type f 2>/dev/null | head -1)" /usr/local/bin/llama-server; fi \ && llama-server --version 2>&1 | head -1 # The GGUF is pulled at RUNTIME by app.py from the (now public) model repo - HF_TOKEN optional # (MODEL_REPO/MODEL_FILE below) - not baked into the image, so the private model never lives in the layers. # App code + bundled backend / schema. The tokenizer is NOT bundled - app.py pulls it at runtime from the # model repo (MODEL_REPO/tokenizer) so the tokenizer lives in exactly one place (the GGUF repo, with the model). COPY app.py /app/app.py COPY backend /app/backend COPY data /app/data ENV CODEAGENT_PROJ=/app \ CODEAGENT_LLAMA_BIN=llama-server \ CODEAGENT_GGUF=/app/model.gguf \ CODEAGENT_CTX=131072 \ CODEAGENT_THREADS=2 \ CODEAGENT_MAX_ITERS=20 \ CODEAGENT_BASH_TIMEOUT=150 \ MODEL_REPO=Luminia/MiniCPM5-1B-Agent-GGUF \ MODEL_FILE=MiniCPM5-1B-Agent-v4-Q8_0.gguf \ HF_HOME=/app/.hf # HF_TOKEN optional now the model repo is public (kept for back-compat; popped after download). # Override the llama.cpp image's entrypoint - we launch the Python app, which spawns llama-server itself. ENTRYPOINT [] CMD ["python3", "/app/app.py"]