Overview
Slowdown makes a model respond more slowly than its provider does. GoModel measures how long the upstream call took and waits an extra fraction of that time before returning the response. The setting is a factor of extra time:
Use it to test client timeouts, loading states, and retry logic, or to see
how an app feels on a slower model without switching providers. Leave it unset
in production, where it has no purpose.
Slowdown is off by default.
Configure a slowdown
Set Slowdown on a concrete model or a redirect (alias). Active factors range from0.1 to 10. 0 explicitly disables slowdown, including one
inherited from the target model. An empty value leaves the setting unspecified.
Dashboard
OpenModels, edit a model or virtual model, and fill Slowdown (extra
inference time). Models with an active slowdown show it in their row.
config.yaml
Environment variable
Admin API
400. Slowdown needs a model:
a provider-wide selector such as openai/* is rejected.
Precedence
- An alias’s own slowdown wins over its target model’s slowdown.
- An alias without a value inherits the slowdown of the target model it
resolves to. Set the alias to
0to opt out. - For a load-balanced virtual model, inheritance uses the target chosen for that request.
- A model’s own slowdown can be set exactly (
openai/gpt-4o) or model-wide (gpt-4o, on every provider); the exact value wins. A more specific entry that leaves slowdown empty, or whoseuser_pathsexclude the caller, does not hide a broader one, so a provider-wide access rule never turns a model’s slowdown off. - In a chain, only the outer virtual model’s slowdown applies.
- A slowdown set on a model with
user_pathsapplies only to requests from those user paths.
What is slowed
Failed upstream calls return without a delay. Delays honor request
cancellation: a client that disconnects stops waiting immediately.
Passthrough requests, batches, and Realtime WebSocket sessions are not slowed.
Streaming and memory
For a streamed response, GoModel reads the upstream in the background and releases each chunk at its scaled arrival time. A chunk that arrived 2 seconds into the stream with factor0.5 reaches the client at 3 seconds, so the
provider’s relative chunk timing is preserved.
Chunks waiting for release are held in memory. A large factor on a long or
high-volume stream, or on a large audio response, can use substantial memory.