How a model is served
A deployment moves throughqueued → deploying → warming → ready, or ends failed, deleting, deleted. Two shapes:
- A dense or explicitly supported mixture-of-experts model trained on Modal with LoRA is served as an adapter on a shared BF16 base; deployments of the same base share one process and skip the
quantizingstage. - Everything else — full fine-tunes, other mixture-of-experts models, models whose family has no adapter support — is merged and quantised into a private checkpoint (FP8 where the base supports it) and served from its own vLLM process.
Calling your model
Point any OpenAI-compatible client athttps://api.overmindlab.ai/api/v1 with your API key (Authorization: Bearer <key> or X-Api-Key: <key>). The model page’s View API snippet and coding-agent prompt use the current server’s URL, default to the capability alias and offer an explicit version pin. Reuse a project key in OVERMIND_API_KEY, or open the existing key-creation flow from the snippet dialog.
overmind.Client() reads OVERMIND_API_KEY and OVERMIND_API_URL, and exposes chat.completions.create(...) (streaming with stream=True), models.list(status=), models.get(id) and models.delete(id).
Two ids work in model:
- The deployment reference —
ft-<first 8 chars of the job id>-<base model>, the deployment’smodel_idon its page — pins one model. - The capability alias
overmind/<capability-uuid>resolves to the capability’sactive_model. Make live on a deployment retargets it; the next request hits the new model.
anthropic/, deepseek/, google/, meta-llama/, openai/, qwen/ and x-ai/ are frontier models the same endpoint forwards to OpenRouter, so a repository can switch between frontier and fine-tuned models by changing the id alone. They are listed only when the API has an OpenRouter key configured.
Request fields
Serving context includes both the input and generated output. Training sequence length does not determine deployment capacity. Requests reserve an explicit positive output budget (8,192 tokens when omitted); an input that cannot fit alongside that reservation is rejected instead of silently reducing output space. Prompt truncation is not supported.max_completion_tokens is accepted as an alternative to max_tokens and takes precedence when both are supplied.
Inspect each choice’s finish_reason: length indicates an incomplete answer, even when HTTP transport succeeded. Streaming responses retain this finish reason. MCP run_inference returns finish_reason and truncated; content_clipped separately identifies its response-size bound. If capacity is insufficient, reduce the request or deploy with a larger supported serving context.
POST /api/v1/chat/completions accepts model, messages, temperature, max_tokens, top_p, frequency_penalty, presence_penalty, tools, tool_choice, response_format, stream, stream_options.include_usage, reasoning_effort, include_reasoning and chat_template_kwargs. Unknown fields are ignored.
- Reasoning. For families that emit chain-of-thought,
include_reasoningdefaults tofalseandreasoning_effortto the family’s default; pass them explicitly to override.chat_template_kwargsis merged over the family’s defaults and forwarded to the chat template. max_tokens. Some families spend part of the budget on a preamble that cannot be turned off; a value below the family’s floor is raised to it so the answer is not empty.- Streaming.
"stream": truereturns SSEdata:events; the idle ping is an SSE comment line (:). - Non-streaming to a deployed model. A result or failure within 15 seconds returns a normal JSON response with its success or error status. Longer requests send newline keepalives every 15 seconds. If inference fails after keepalives commit the headers, the response terminates without a complete JSON body, producing a transport error in the OpenAI client. SSE failures carry an error frame.
X-Request-IDcorrelates deployed-model requests with recorded failures.
Error codes
Managing deployments
GET /api/v1/models lists ready deployments by default; ?status= accepts any deployment status or all, and anything else is 400. With ready or all the list also carries one overmind/<capability-uuid> row per capability whose active model is ready, and the OpenRouter frontier models when a key is configured. GET .../{model_id} accepts a deployment reference or an alias. DELETE on a deployment marks it deleting, removes it from the serving backend, marks it deleted and returns {"id": ..., "object": "model", "deleted": true}; the row stays, and a failed backend removal leaves it failed with a 502.
The Console uses the project API, /api/deployed-models/, for the rest:
Make live is
PATCH /api/capabilities/{id}/ with active_model set to a ready deployment. This starts a saved activation: Check deployment → Wake & verify → Switch routing. The response keeps the existing active_model until the verification request succeeds. Poll the capability’s activation field for progress, including after navigating away. Failures identify the stage and offer Retry activation.
The Console shows Waiting for first application request after activation, then the timestamp of the first successful application API-key request to the alias. Verification probes, internal evaluations and requests pinned to a version do not confirm alias integration. Making a model live wakes it once; idle scale-down still applies.
Through MCP, call set_active_model and poll its model_activation receipt with get_job. Clearing active_model cancels an in-progress switch and removes alias routing. The CLI’s overmind model download-checkpoint <deployment-id> fetches the weights through checkpoints/.
The Console Inference page

Inference: every deployed model with its lineage, status, and request metrics.
ready; a ready model shows its serving state from live/ — Warm when its worker pool has running containers or it served successful traffic in the last 90 seconds, Warming while a cold boot is in progress, Asleep when its measured pool has no containers, and Unknown only when worker measurements are unavailable and there is no recent serving signal. The list and detail page refresh this state every five seconds; checking status does not wake the model. The separate Live model badge identifies the capability’s selected route, independently of worker warmth.
The model page focuses on Inference performance: request volume, success rate, end-to-end p50 and p95 response time, median warm generation speed, and estimated serving cost. The reporting period applies to both headline metrics and charts: Last hour, Last 24 hours, Last 7 days, Last 30 days or All time. Application traffic includes API-key requests to either the capability alias or a pinned model ID; All traffic also includes internal calls and requests with an unknown source. Metrics refresh every 15 seconds while the page is open.
The charts show request traffic and failures, response-time percentiles, and generation speed. Empty traffic buckets are zero; missing timing measurements remain gaps. Failed calls do not contribute to latency or speed distributions. A single empty state replaces the charts when the selected period has no requests. Refresh errors are visible and do not turn into zero traffic. The latest failure includes its request ID.
The serving row retains the capability alias, Make live, stage-based activation progress and Copy prompt, which copies coding-agent instructions for the capability alias directly to the clipboard. Deployment details contains base model, training job, GPU, context, precision, weights download and the guarded delete action. A failed or deleted deployment retains Retry or Deploy.
Both metrics/ and activity/ accept period=1h|24h|7d|30d|all and source=application|all; both default to all. activity/ also accepts granularity=minute|hour|day. Percentile calculations use the most recent 5,000 measured successful requests in the selected population (per bucket for charts). Estimated cost reports how many requests have a recorded cost when coverage is incomplete.

A model page: identity and metrics on top, request activity underneath.
Good to know
- Every request through the endpoint is recorded as an inference call and traced under the project, so a live fine-tuned model feeds the datasets for its next round of training.
- Merged checkpoints are quantised during weight preparation; adapter deployments use a shared BF16 base.
- A retry after
failedvalidates base weights again and reuses cached checkpoint preparation. It never restarts training.