services:
  ollama:
    image: ollama/ollama
    container_name: ollama
    ports:
      - "11436:11434"
    volumes:
      - /mnt/ssd/ai/ollama:/root/.ollama
    restart: always
    environment:
      # Allow qwen3:8b + qwen2.5:1.5b to coexist in VRAM (~6.7-7.7 GB on 8 GB GPU)
      - OLLAMA_MAX_LOADED_MODELS=2
      # One GPU inference at a time — prevents compute contention between models
      - OLLAMA_NUM_PARALLEL=1
      # Force all layers to GPU — fail instead of falling back to CPU
      - OLLAMA_NUM_GPU=999
    runtime: nvidia
    mem_limit: 4g
    # kb#190: `ollama list` just queries the local server's model registry --
    # no model load/inference, cheap. This is a SEPARATE compose project from
    # openai/docker-compose.yml (reached from there via
    # host.docker.internal:11436), so it cannot be wired into that file's
    # depends_on/condition chain -- this only gives it its own status.
    healthcheck:
      test: ["CMD-SHELL", "ollama list || exit 1"]
      interval: 15s
      timeout: 10s
      retries: 5
      start_period: 20s
