runpod: shared capability pools + trimmed per-capability images
Two things that both come down to not renting more GPU than the work
needs.
Shared pools: a pod is a whole GPU, and one coderai can serve images,
video and TTS from it. Capabilities naming the same `pool` now share one
set of pods and one budget; without it, three capabilities rented three
cards to do what one can. The pool is configured once on whichever
capability carries the settings — a bare `{"pool": "media"}` reference
will not reset it to defaults.
Trimmed images: packaging/runpod/ builds a coderai carrying ONE
capability's dependencies, since the flattened base is ~26.6 GB and every
cold pod pays that pull. Profiles under packaging/runpod/profiles/ —
core plus images/video/tts/stt/voice/audio/embeddings/ocr/faceswap — work
because the routers import lazily, so a pod only needs what its own
endpoints touch.
The Dockerfile fails the BUILD if a profile is missing something the app
imports, and build_capability_image.sh then boots the container and waits
for /healthz. Both checks exist because the alternative is finding out as
a boot timeout on a rented GPU, with nothing in the logs saying why.
Co-Authored-By:
Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0182DhR1eFNPQyGmDrpHbedY
Showing
Please
register
or
sign in
to comment