55fa4656ff
For redeploying curator while away with nobody to restart the agent: - _process now distinguishes a TRANSPORT error (curator down/redeploying, 5xx, 401/403/408/409/429, or our lease reclaimed mid-flight) from a genuine job fault. On a transport error it hands the job back (best effort) and signals the loop to back off — instead of calling fail(), which would burn the job's server-side attempt budget (MAX_ATTEMPTS=3) and permanently error good jobs across a redeploy. Job-specific 4xx (404 image gone) still fail so they don't re-lease forever. - lease loop retries with capped exponential backoff (poll_idle → 60s) and resets on the first successful lease, so a long outage is gentle and recovery is automatic within ≤60s of curator returning. Sleeps are interruptible so Stop / pool-shrink stays responsive. - AUTO_START env (default on in compose) resumes the worker on container start, so a host reboot / crash-restart (restart: unless-stopped) self-heals with nobody at the desktop. - control UI shows a "waited out" counter + an "curator unreachable, holding work" banner so the recovering state reads as recovery, not failure. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Ttrj5P7upUTueSfoJcxEqa
54 lines
2.2 KiB
YAML
54 lines
2.2 KiB
YAML
# FabledCurator GPU agent — desktop run via docker compose.
|
|
#
|
|
# Usage:
|
|
# 1. Generate a token: FC → Settings → Tagging → GPU agent → Generate token.
|
|
# 2. Create a .env next to this file:
|
|
# FC_URL=http://curator.traefik.internal
|
|
# FC_TOKEN=<paste-the-token>
|
|
# # optional: CCIP_MODEL=ccip-caformer_b36-24 (the F1-0.94 variant)
|
|
# 3. docker compose up -d (pulls the published image)
|
|
# 4. Open http://localhost:8770 → Start. Pause/Stop hands the GPU back.
|
|
# docker compose down to stop the container entirely.
|
|
#
|
|
# Surviving a curator redeploy (you're away, can't touch the agent):
|
|
# - A running agent rides out curator being unreachable on its own — it retries
|
|
# leasing with capped backoff and resumes when the server is back. In-flight
|
|
# work is handed back (not failed), so a redeploy never poisons good jobs.
|
|
# - AUTO_START=1 (below) also resumes the worker if the AGENT container itself
|
|
# restarts (host reboot / crash via `restart: unless-stopped`) — no click.
|
|
#
|
|
# Needs the NVIDIA Container Toolkit installed on the host for --gpus.
|
|
|
|
services:
|
|
fc-gpu-agent:
|
|
image: git.fabledsword.com/bvandeusen/fabledcurator-agent:latest
|
|
pull_policy: always
|
|
ports:
|
|
- "8770:8770"
|
|
environment:
|
|
FC_URL: ${FC_URL:-http://curator.traefik.internal}
|
|
FC_TOKEN: ${FC_TOKEN:?set FC_TOKEN in .env (FC → GPU agent → Generate token)}
|
|
CCIP_MODEL: ${CCIP_MODEL:-}
|
|
DETECTOR_LEVEL: ${DETECTOR_LEVEL:-m}
|
|
BATCH_SIZE: ${BATCH_SIZE:-4}
|
|
# Resume the worker automatically on container start (survive a reboot /
|
|
# crash-restart while you're away). Set to 0 to require a manual Start.
|
|
AUTO_START: ${AUTO_START:-1}
|
|
# Crop embedder (SigLIP concept bag): float16 keeps VRAM low on a shared
|
|
# desktop GPU; the model itself is announced by the server.
|
|
SIGLIP_DTYPE: ${SIGLIP_DTYPE:-float16}
|
|
volumes:
|
|
# Persist the downloaded ONNX models so restarts are fast.
|
|
- fc-agent-models:/models
|
|
restart: unless-stopped
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: all
|
|
capabilities: [gpu]
|
|
|
|
volumes:
|
|
fc-agent-models:
|