Models
Pass a model's short id, such as llama-8b, as model. A Hugging Face repository name returns 400 model_not_found with a suggestion of the short id. GET /v1/models lists the models we serve on this deployment, which can differ from the table below.
Available models
model |
Checkpoint | Precision | API requests | Workbench, Compare, and Loom |
|---|---|---|---|---|
llama-8b |
meta-llama/Llama-3.1-8B |
bf16 | Kept warm | Kept warm |
llama-405b |
meta-llama/Llama-3.1-405B |
bf16 | Scales to zero after at most 10 idle minutes | Scales to zero after at most 5 idle minutes |
trinity-truebase |
arcee-ai/Trinity-Large-TrueBase |
bf16 | Scales to zero after at most 10 idle minutes | Kept warm |
An API request can wait for a startup even when the Workbench shows the model as warm.
Each deployment sets the context length of each model, so read it from capabilities.max_model_len in GET /v1/models.
This service is "Built with Llama." llama-8b and llama-405b are Meta Llama 3.1 models, available under the Llama 3.1 Community License. Your use of them through this service is subject to that license.
GET /v1/models
The response has one entry per live model, in this format:
{
"object": "list",
"data": [
{
"id": "...",
"object": "model",
"owned_by": "acs",
"served_model_name": "...",
"gpu_shape": "...",
"status": "live",
"default": ...,
"capabilities": {"max_model_len": ..., "max_logprobs": ..., ...}
}
]
}
| Field | Type | Meaning |
|---|---|---|
id |
string | The short id you pass as model. |
object |
string | The value is always "model". |
owned_by |
string | The value is always "acs". |
served_model_name |
string | The checkpoint the engine serves. |
gpu_shape |
string | GPU count and type, such as 1xL40S or 8xH200. |
status |
string | The value is always "live". It does not mean that the model is warm or healthy. |
default |
boolean | The value is true on the model that a request without model goes to. At most one entry has the value true. Set model on every request, because we can change the default. |
capabilities |
object | The fields in the next table. |
capabilities field |
Type | Meaning |
|---|---|---|
max_model_len |
integer or null | The context length in prompt plus completion tokens. When the value is null, the API skips its pre-flight length checks. |
max_logprobs |
integer | The largest positive logprobs or prompt_logprobs count. |
max_output_work_tokens |
integer | The cap on prompts × n × max_tokens per request. |
max_inflight_per_key |
integer | Active requests allowed per key. |
max_queued_per_key |
integer | Requests per key allowed to wait for a free slot. |
rate_limit_per_minute |
integer | Requests per key per minute. |
logprobs, prompt_logprobs |
boolean | These fields are feature flags. Both are true today. |
prompt_logprobs_full_vocab |
boolean | Whether the model accepts prompt_logprobs: -1, the whole next-token distribution at each prompt position. Completion logprobs stays top-k. |
full_vocab_max_prompt_tokens |
integer | The cap on prompt tokens × n for a prompt_logprobs: -1 request, with the prompt tokens summed over every prompt. A capture lowers the cap to 16 prompt tokens, which this field does not show. The cap exists because each position returns about 128k logprobs on Llama. For a longer prompt, use a positive top-k count. |
activations |
boolean | The value is true when the model accepts capture and steering requests. The next three fields appear only when the value is true. When the value is false, every API request for the model returns 503 activation_engine_unconfigured. |
max_steering_vectors |
integer | The most steering vectors in one request. |
max_activation_prompt_tokens |
integer | The cap on captured positions for a capture of every layer. Fewer layers get a larger cap. See Activation harvesting. |
n_layers |
integer | The decoder layer count. Layer indices run from 0 to n_layers - 1. When the layer count is unknown, the response leaves out the key instead of setting it to null. |
chat_template |
null | The value is always null, because these are base models and the API does not apply a template. |
When a model's entry includes n_layers, the API rejects an out-of-range index in layer_indices or output_residual_stream with 400 invalid_request. When the entry has no n_layers, the engine rejects an out-of-range steering index with 400 vllm_invalid_request. In that case, read the layer count from shape[0] of a capture.
Availability and cold starts
We keep a container running for each kept-warm engine, but a restart or a deployment can still make a request wait. A scale-to-zero engine stops after its idle time, and the next request waits while Modal allocates GPUs and then loads the model. Neither step has a fixed length, so a startup can take many minutes, and longer when GPUs are scarce.
Set a client timeout of at least 15 minutes and keep that first request open, as Cold-boot waiting shows. The startup counts toward the API's 14-minute limit on a request, and the API sends keepalive bytes so that the connection does not look idle. To watch a startup from a script, poll GET /v1/models/{id}/status.
We recommend one short request to start the model before a work session. To keep a model warm for a work session or a deadline, choose Feedback or email infra@acsresearch.org to ask for a scheduled warm window.
GET /v1/models/{id}/status
The status endpoint reports whether one model is warm and its most recent startup stage, in this format:
{
"id": "...",
"object": "model.status",
"warm": ...,
"boot": {"stage": "...", "stage_label": "...", "stage_age_s": ...},
"activation_boot": ...
}
warm and boot are estimates, so only a real request shows whether the model answers.
| Field | Type | Meaning |
|---|---|---|
id |
string | The model id. |
object |
string | The value is always "model.status". |
warm |
boolean | The value is true when Modal reports at least one container that serves API requests for the model, or when Modal does not answer and an API request finished in the last 10 minutes. |
boot |
object or null | The most recent startup stage of a container that serves API requests for the model, with stage, stage_label, and stage_age_s in seconds. The value is null when there is no recent stage. On a cold model, a null value means that Modal has not started the container yet. |
activation_boot |
object or null | The value is a copy of boot, which we keep for older clients. |