# Quick start: local model (llama.cpp) and the Constructor gateway. # cp docker/env.example docker/.env (set both keys) # docker compose -f docker/compose.yml up -d # The first start downloads the model (about 2.7 GB). CPU only, 8 GB RAM are enough. services: llama: # llama.cpp build 11783 (the project was measured with 11724), pinned by digest image: ghcr.io/ggml-org/llama.cpp:server@sha256:c7b03e45cff9c4e984acd39032a6f3a82c811075b72bf176e329f84b8598c135 command: - -hf - unsloth/Qwen3.5-4B-GGUF:Q4_K_M - --host - 0.0.0.0 - --port - "8080" - --ctx-size - "8192" - --parallel - "1" - --jinja # Text only: do not load the image projector that -hf would fetch along - --no-mmproj # Thinking off: otherwise the model thinks freely first and the JSON schema only applies afterwards - --reasoning - "off" environment: LLAMA_API_KEY: ${LLAMA_API_KEY:?set LLAMA_API_KEY in docker/.env} LLAMA_CACHE: /models volumes: - models:/models restart: unless-stopped gateway: build: context: .. dockerfile: docker/gateway.Dockerfile environment: GATEWAY_API_KEY: ${GATEWAY_API_KEY:?set GATEWAY_API_KEY in docker/.env} LLAMA_API_KEY: ${LLAMA_API_KEY} LLAMA_URL: http://llama:8080 # Seconds per model call. The first call processes the long system prompt; on a slow CPU that takes minutes LLAMA_TIMEOUT: "900" ports: # Reachable from your Luanti server. Every request needs the API key. - "8000:8000" volumes: - data:/data depends_on: - llama restart: unless-stopped volumes: models: data: