name: pv-agent services: pv-agent: build: context: . dockerfile: Dockerfile image: pv-agent:local restart: unless-stopped init: true user: "${PUID:-1000}:${PGID:-1000}" ports: - "100.103.83.12:${PV_PORT:-8080}:8080" environment: OLLAMA_URL: "${OLLAMA_URL:-http://ollama:11434}" PV_ANSWER_MODEL: "${PV_ANSWER_MODEL:-qwen3.8:27b}" PV_EMBED_MODEL: "${PV_EMBED_MODEL:-bge-m3}" PV_DB_PATH: /app/data/index.db PV_KB_DIR: /app/wissensbasis PV_PORT: "8080" PV_API_KEY: "${PV_API_KEY:?PV_API_KEY muss gesetzt sein}" PV_ADMIN_API_KEY: "${PV_ADMIN_API_KEY:-}" PV_THINK: "${PV_THINK:-false}" PV_NUM_CTX: "${PV_NUM_CTX:-32768}" PV_MAX_CONTEXT_CHARS: "${PV_MAX_CONTEXT_CHARS:-90000}" PV_NUM_PREDICT: "${PV_NUM_PREDICT:-2048}" PV_CANDIDATE_POOL: "${PV_CANDIDATE_POOL:-150}" PV_RRF_K: "${PV_RRF_K:-20}" PV_DENSE_WEIGHT: "${PV_DENSE_WEIGHT:-2.0}" PV_CONTEXT_BLOCKS: "${PV_CONTEXT_BLOCKS:-8}" PV_PER_QUERY_SLOTS: "${PV_PER_QUERY_SLOTS:-2}" PV_SURVEY_BLOCKS: "${PV_SURVEY_BLOCKS:-16}" PV_AUDIT_ENABLED: "${PV_AUDIT_ENABLED:-true}" PV_AUDIT_DB_PATH: /app/data/audit.db PV_AUDIT_LOG_CONTENT: "${PV_AUDIT_LOG_CONTENT:-true}" PV_AUDIT_STDOUT: "${PV_AUDIT_STDOUT:-true}" PV_AUDIT_RETENTION_DAYS: "${PV_AUDIT_RETENTION_DAYS:-30}" volumes: - ./data:/app/data - ./wissensbasis:/app/wissensbasis:ro networks: - ollama read_only: true tmpfs: - /tmp:size=64m,mode=1777 security_opt: - no-new-privileges:true cap_drop: - ALL logging: driver: json-file options: max-size: "50m" max-file: "5" healthcheck: test: - CMD - python - -c - >- import json, urllib.request; d=json.load(urllib.request.urlopen('http://127.0.0.1:8080/v1/health', timeout=5)); raise SystemExit(0 if d.get('status') == 'ok' else 1) interval: 30s timeout: 10s retries: 5 start_period: 15m networks: ollama: external: true name: ollama_default