expires_at is when the model will be unloaded if idle (driven by keep_alive).
Judge GPU placement by comparing size_vram to size: size_vram == size means fully on GPU; size_vram == 0 means fully in CPU RAM; in between means a partial (split) load.
An empty models array means nothing is currently loaded — the next generate/chat pays the model load cost (visible as load_duration in that response).
Known gotchas
A partially-offloaded model (0 < size_vram < size) runs much slower than a full GPU load — treat it as a capacity warning, not success.
expires_at moves forward on every request that touches the model; polling /api/ps does not reset it.
Give your agent this knowledge — and 18,200+ more routes
One MCP install gives any agent live access to the full route map across 6,000+ domains, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp
Need this verified for your stack — or a route we don't have yet?