Model latency
ai-latency modality. Each current row is tied to a real Azure region where the
selected model is available as a single-region Standard deployment. Retained
GitHub Models latency, when present below, is historical only because that service retired.
Azure Per-Region Latency
Why only these regions? A region appears here only when Azure offers the model as a single-region
Standard SKU. Many large regions (for example
westeurope, northeurope, southeastasia,
koreacentral, centralindia) currently offer these models only as
GlobalStandard/DataZoneStandard, which can run in any datacenter in
their geography and so are not region-attributable. See
Status meanings for details; new regions surface automatically
once a Standard SKU appears.
gpt-4.1 · 8 regions
| Rank | Region | Status | p50 (ms) | p95 (ms) | TTFT p50 (ms) | Tokens/sec | Samples |
|---|---|---|---|---|---|---|---|
| #1 ▲ 3 | eastus |
available | 803 | 1,009 | 750 | 123.3 | 5/5 |
| #2 ▲ 4 | eastus2 |
available | 825 | 1,032 | 793 | 120.1 | 5/5 |
| #3 ▼ 2 | westus3 |
available | 907 | 1,009 | 863 | 109.1 | 5/5 |
| #4 ▼ 2 | westus |
available | 931 | 1,329 | 893 | 106.4 | 5/5 |
| #5 — | southcentralus |
available | 1,069 | 1,276 | 997 | 92.6 | 5/5 |
| #6 ▲ 1 | switzerlandnorth |
available | 1,127 | 1,450 | 1,007 | 87.9 | 5/5 |
| #7 ▲ 1 | swedencentral |
available | 1,226 | 17,165 | 1,100 | 80.8 | 5/5 |
| #8 ▼ 5 | northcentralus |
available | 1,692 | 5,095 | 1,587 | 58.5 | 5/5 |
gpt-4.1-mini · 14 regions
| Rank | Region | Status | p50 (ms) | p95 (ms) | TTFT p50 (ms) | Tokens/sec | Samples |
|---|---|---|---|---|---|---|---|
| #1 ▲ 4 | canadaeast |
available | 1,148 | 1,461 | 1,105 | 86.3 | 4/5 |
| #2 ▼ 1 | westus3 |
available | 1,179 | 1,211 | 1,115 | 84.0 | 5/5 |
| #3 ▲ 3 | eastus |
available | 1,191 | 1,214 | 1,113 | 83.1 | 5/5 |
| #4 ▲ 3 | uksouth |
available | 1,217 | 2,733 | 1,110 | 81.3 | 5/5 |
| #5 ▲ 6 | eastus2 |
available | 1,260 | 1,898 | 1,189 | 78.6 | 5/5 |
| #6 ▼ 3 | northcentralus |
available | 1,370 | 3,337 | 1,277 | 72.3 | 5/5 |
| #7 ▼ 3 | southcentralus |
available | 1,390 | 1,635 | 1,358 | 71.2 | 5/5 |
| #8 ▼ 6 | westus |
available | 1,413 | 1,906 | 1,376 | 70.0 | 5/5 |
| #9 ▲ 3 | swedencentral |
available | 1,415 | 1,641 | 1,281 | 70.0 | 5/5 |
| #10 — | switzerlandnorth |
available | 1,570 | 1,781 | 1,447 | 63.0 | 5/5 |
| #11 ▲ 2 | francecentral |
available | 1,620 | 1,923 | 1,510 | 61.1 | 5/5 |
| #12 ▼ 3 | japaneast |
available | 1,787 | 1,906 | 1,653 | 55.4 | 5/5 |
| #13 ▼ 5 | australiaeast |
available | 1,807 | 21,574 | 1,634 | 54.8 | 5/5 |
| #14 — | southindia |
available | 2,531 | 7,941 | 2,304 | 39.1 | 5/5 |
gpt-4o · 16 regions
| Rank | Region | Status | p50 (ms) | p95 (ms) | TTFT p50 (ms) | Tokens/sec | Samples |
|---|---|---|---|---|---|---|---|
| #1 — | centralus |
available | 726 | 858 | 646 | 136.4 | 5/5 |
| #2 ▲ 1 | canadaeast |
available | 860 | 1,077 | 809 | 115.2 | 5/5 |
| #3 ▲ 6 | eastus |
available | 864 | 1,204 | 787 | 114.6 | 5/5 |
| #4 ▲ 1 | northcentralus |
available | 919 | 1,019 | 827 | 107.8 | 5/5 |
| #5 ▼ 3 | westus |
available | 924 | 1,559 | 880 | 107.1 | 5/5 |
| #6 ▲ 1 | southcentralus |
available | 996 | 1,368 | 959 | 99.4 | 5/5 |
| #7 ▲ 4 | francecentral |
available | 1,051 | 1,141 | 945 | 94.2 | 5/5 |
| #8 ▼ 4 | westus3 |
available | 1,078 | 1,142 | 1,037 | 91.8 | 5/5 |
| #9 ▲ 1 | uksouth |
available | 1,145 | 1,368 | 1,038 | 86.4 | 5/5 |
| #10 ▲ 3 | norwayeast |
available | 1,159 | 1,674 | 1,033 | 85.4 | 5/5 |
| #11 ▲ 1 | switzerlandnorth |
available | 1,164 | 1,274 | 1,049 | 85.1 | 5/5 |
| #12 ▼ 6 | japaneast |
available | 1,284 | 1,365 | 1,150 | 77.1 | 5/5 |
| #13 ▼ 5 | eastus2 |
available | 1,371 | 1,524 | 1,308 | 72.2 | 5/5 |
| #14 — | australiaeast |
available | 1,435 | 2,115 | 1,261 | 69.0 | 5/5 |
| #15 — | swedencentral |
available | 1,534 | 18,168 | 1,410 | 64.5 | 5/5 |
| #16 — | southindia |
available | 1,824 | 4,178 | 1,596 | 54.3 | 5/5 |
gpt-5.1 · 9 regions
| Rank | Region | Status | p50 (ms) | p95 (ms) | TTFT p50 (ms) | Tokens/sec | Samples |
|---|---|---|---|---|---|---|---|
| #1 — | westus |
available | 856 | 4,180 | 799 | 126.2 | 5/5 |
| #2 ▲ 1 | eastus |
available | 897 | 979 | 849 | 120.4 | 5/5 |
| #3 ▲ 1 | eastus2 |
available | 939 | 1,112 | 903 | 115.0 | 5/5 |
| #4 ▲ 1 | swedencentral |
available | 1,354 | 16,924 | 1,229 | 79.8 | 5/5 |
| #5 ▲ 1 | switzerlandnorth |
available | 1,482 | 1,672 | 1,367 | 72.9 | 5/5 |
| #6 ▼ 4 | centralus |
available | 1,556 | 1,740 | 1,467 | 69.4 | 5/5 |
| #7 — | westus3 |
available | 1,862 | 2,020 | 1,801 | 58.0 | 5/5 |
| #8 ▲ 1 | southcentralus |
available | 1,915 | 2,165 | 1,828 | 56.4 | 5/5 |
| #9 ▼ 1 | northcentralus |
available | 2,075 | 2,315 | 1,979 | 52.1 | 5/5 |
Retired: GitHub Models global endpoint (last measured 2026-10-06)
github-global · not current monitoring| Rank | Model | Status | p50 (ms) | p95 (ms) | TTFT p50 (ms) | Tokens/sec | Samples | Trend (p50) |
|---|---|---|---|---|---|---|---|---|
| — | deepseek/deepseek-v3-0324 | unknown | — | — | — | — | — | collecting… |
| — | meta/llama-3.3-70b-instruct | unknown | — | — | — | — | — | collecting… |
| — | microsoft/phi-4 | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-4.1 | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-4.1-mini | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-4.1-nano | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-4o | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-4o-mini | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-5 | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-5-chat | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-5-mini | unknown | — | — | — | — | — | collecting… |
| — | openai/gpt-5-nano | unknown | — | — | — | — | — | collecting… |
| — | openai/o3 | unknown | — | — | — | — | — | collecting… |
How to read this
Each model is sent a small deterministic prompt several times. We record
p50 and p95 round-trip time, TTFT
(time to first token), and output tokens per second, then publish the
medians. p50 is the headline number used for ranking.
The current Azure rows are region-attributable measurements from the probe runner to a single-region Azure OpenAI deployment. They still mix service timing with network distance, so treat them as relative evidence, not an SLA or a throughput guarantee. Reasoning models spend hidden tokens before their first visible token, so their TTFT is expected to be higher.
available means at least one timed call returned a trustworthy response. unknown means every sample failed, timed out, or returned no tokens.
The Trend column sparkline shows each model’s daily p50 over recent days. A ▼ means the model got faster, a ▲ means it got slower; new models show “collecting” until a few days of history accumulate.
The Rank column shows each row’s speed position (fastest = #1) and how it moved versus the previous snapshot: ▲ 2 means it climbed two places (relatively faster), ▼ 1 means it slipped one, — means unchanged, and new marks a row with no previous ranking.