Queues
Named lanes with priorities, aging so nothing starves, a per-caller cap, and a preference for whatever model is already loaded.
One GPU holds one model at a time. hearth stops your callers from thrashing it, and speaks the OpenAI API so nothing you use has to change.
The moment two things want different models from one card they thrash, each evicting the other's weights and paying the load tax over again. hearth is the admission point that stops that.
Named lanes with priorities, aging so nothing starves, a per-caller cap, and a preference for whatever model is already loaded.
/v1/chat/completions and /v1/models, streaming included. Bodies pass through byte for byte, so tool calls, vision parts and whatever gets invented next month keep working.
Point a model at a peer and those requests run on their machine. They never take a local slot, because they never touch the local GPU.
# install
npm i -g @vcvzgbzz/hearth
# probes for llama-swap / llama.cpp / ollama, writes hearth.yaml
hearth init
# then point any client at this instead of your backend
hearth serve # http://127.0.0.1:4141/v1
No GPU to hand? Run the demo node in your browser, or clone the repo and run npm install && npm run demo for a node with one of everything and stand-ins behind it. The pictures on this page are of it.
Each of these is off until you ask for it in hearth.yaml.