<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Max Bob</title>
    <description>The latest articles on DEV Community by Max Bob (@max_bob).</description>
    <link>https://dev.to/max_bob</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3572611%2Fbe0999e7-c7cf-48e9-8abd-28d9e85bbb23.png</url>
      <title>DEV Community: Max Bob</title>
      <link>https://dev.to/max_bob</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/max_bob"/>
    <language>en</language>
    <item>
      <title>TTFT is not TTFB: what 45 AI APIs measured from 4 regions actually show</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Sun, 16 Aug 2026 22:04:40 +0000</pubDate>
      <link>https://dev.to/max_bob/ttft-is-not-ttfb-what-45-ai-apis-measured-from-4-regions-actually-show-3k61</link>
      <guid>https://dev.to/max_bob/ttft-is-not-ttfb-what-45-ai-apis-measured-from-4-regions-actually-show-3k61</guid>
      <description>&lt;p&gt;If you have ever compared "fastest AI API" benchmarks and found they disagree with each other, there is a good chance they were not measuring the same thing. Two numbers get used interchangeably, and they answer different questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TTFB — time to first byte.&lt;/strong&gt; DNS resolution, TCP connect, TLS handshake, first response byte. The network path and the provider's front door. No model is involved at all.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TTFT — time to first token.&lt;/strong&gt; A real streamed completion, timed until the first token appears. That is the same network time, &lt;em&gt;plus&lt;/em&gt; queueing at the provider, &lt;em&gt;plus&lt;/em&gt; the model's prefill over your prompt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;TTFB is the floor you pay on every single request no matter what you call. TTFT is what a human actually stares at before words show up on screen.&lt;/p&gt;

&lt;p&gt;I run &lt;a href="https://llmlatency.dev" rel="noopener noreferrer"&gt;llmlatency.dev&lt;/a&gt;, which measures both continuously for ~45 inference providers from four regions (Germany, US Central, Tokyo, São Paulo). Here is what the data says about why these two numbers should never be merged into one leaderboard.&lt;/p&gt;

&lt;h2&gt;
  
  
  The same region, the same probes, two different winners
&lt;/h2&gt;

&lt;p&gt;Measured from São Paulo over the last 24 hours:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Winner&lt;/th&gt;
&lt;th&gt;Number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Lowest TTFB (edge latency)&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;58 ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lowest TTFT (first token)&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;757 ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;openrouter's front door answers &lt;strong&gt;3.2× faster&lt;/strong&gt; than cerebras's (58 ms vs 184 ms). And cerebras still streams its first token &lt;strong&gt;264 ms sooner&lt;/strong&gt; (757 ms vs 1021 ms).&lt;/p&gt;

&lt;p&gt;Same probes, same schedule, same region, opposite conclusions. "Which API is fastest?" is not a question with one answer until you say &lt;em&gt;which of the two&lt;/em&gt; you are paying for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Most of TTFT is not the API you are benchmarking
&lt;/h2&gt;

&lt;p&gt;Here is the split for every provider where I have both numbers side by side:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Requested from&lt;/th&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;TTFT p50&lt;/th&gt;
&lt;th&gt;TTFB p50&lt;/th&gt;
&lt;th&gt;Network share of TTFT&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;764 ms&lt;/td&gt;
&lt;td&gt;233 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;31%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;900 ms&lt;/td&gt;
&lt;td&gt;296 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;33%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;757 ms&lt;/td&gt;
&lt;td&gt;184 ms&lt;/td&gt;
&lt;td&gt;24%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;803 ms&lt;/td&gt;
&lt;td&gt;201 ms&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;1312 ms&lt;/td&gt;
&lt;td&gt;196 ms&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;1143 ms&lt;/td&gt;
&lt;td&gt;159 ms&lt;/td&gt;
&lt;td&gt;14%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;1256 ms&lt;/td&gt;
&lt;td&gt;147 ms&lt;/td&gt;
&lt;td&gt;12%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;1355 ms&lt;/td&gt;
&lt;td&gt;108 ms&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;1300 ms&lt;/td&gt;
&lt;td&gt;100 ms&lt;/td&gt;
&lt;td&gt;8%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Germany&lt;/td&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;1361 ms&lt;/td&gt;
&lt;td&gt;101 ms&lt;/td&gt;
&lt;td&gt;7%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;São Paulo&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;1021 ms&lt;/td&gt;
&lt;td&gt;58 ms&lt;/td&gt;
&lt;td&gt;6%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;1485 ms&lt;/td&gt;
&lt;td&gt;68 ms&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;1483 ms&lt;/td&gt;
&lt;td&gt;57 ms&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;1292 ms&lt;/td&gt;
&lt;td&gt;55 ms&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;1567 ms&lt;/td&gt;
&lt;td&gt;59 ms&lt;/td&gt;
&lt;td&gt;4%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;US Central&lt;/td&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;1524 ms&lt;/td&gt;
&lt;td&gt;42 ms&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;3%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Between &lt;strong&gt;3% and 33%&lt;/strong&gt; of time to first token is network time. The other 67–97% is the provider queueing your request and the model doing prefill.&lt;/p&gt;

&lt;p&gt;That has an uncomfortable consequence for benchmark tables: &lt;strong&gt;if a TTFT comparison does not name the model behind every number, most of what it measured was the model, not the API.&lt;/strong&gt; A 30B model will beat a 120B model on first-token time regardless of whose GPUs it runs on. Here are the models behind the numbers above, which is exactly why I do not publish them as a provider ranking:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Model answering&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;cerebras&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-oss-120b&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;groq&lt;/td&gt;
&lt;td&gt;&lt;code&gt;llama-3.3-70b-versatile&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;openrouter&lt;/td&gt;
&lt;td&gt;&lt;code&gt;nvidia/nemotron-3-nano-30b-a3b:free&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;google&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gemini-flash-lite-latest&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Four different models. Ranking them against each other and calling it a provider ranking would be a category error wearing a table.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Fast" is meaningless without "from where"
&lt;/h2&gt;

&lt;p&gt;The regional spread is larger than the gap between most providers:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Fastest region&lt;/th&gt;
&lt;th&gt;Slowest region&lt;/th&gt;
&lt;th&gt;Spread&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sambanova&lt;/td&gt;
&lt;td&gt;21 ms (Tokyo)&lt;/td&gt;
&lt;td&gt;398 ms (Germany)&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;18.9×&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;fireworks&lt;/td&gt;
&lt;td&gt;16 ms (Tokyo)&lt;/td&gt;
&lt;td&gt;251 ms (São Paulo)&lt;/td&gt;
&lt;td&gt;15.3×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;upstage&lt;/td&gt;
&lt;td&gt;58 ms (Tokyo)&lt;/td&gt;
&lt;td&gt;596 ms (São Paulo)&lt;/td&gt;
&lt;td&gt;10.4×&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;aleph-alpha&lt;/td&gt;
&lt;td&gt;99 ms (Germany)&lt;/td&gt;
&lt;td&gt;568 ms (Tokyo)&lt;/td&gt;
&lt;td&gt;5.7×&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Identical API, identical request, an 18.9× difference depending on which continent you dialled from. A single-machine benchmark run from one US datacenter is not wrong so much as it is answering a question about that datacenter.&lt;/p&gt;

&lt;h2&gt;
  
  
  A checklist for reading anyone's latency benchmark
&lt;/h2&gt;

&lt;p&gt;Including mine. If a benchmark cannot answer these, treat the number as a vibe:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;TTFB or TTFT?&lt;/strong&gt; If it does not say, it is usually TTFB dressed up in TTFT language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Which model?&lt;/strong&gt; No model name next to a TTFT figure means the figure is about the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;From where?&lt;/strong&gt; One region is one data point, not a ranking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;p50 or p95?&lt;/strong&gt; Tail latency is where user-visible pain lives, and p95 orderings often differ from p50.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When, and how often?&lt;/strong&gt; A benchmark run once in March describes March.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;How many samples?&lt;/strong&gt; My tables above sit on 57–58 samples per provider per region per day.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest limits of my own data
&lt;/h2&gt;

&lt;p&gt;TTFT is measured for &lt;strong&gt;4 of the 45 providers&lt;/strong&gt; I track. Not because the other 41 are uninteresting, but because a streamed completion requires a paid API key for each provider and every probe spends tokens. Edge latency needs no key, so TTFB is published for all 45.&lt;/p&gt;

&lt;p&gt;I would rather publish 4 measured TTFT figures than 45 estimated ones. An estimate presented as a measurement is the one thing a latency tracker must never do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Everything is free, and machine-readable
&lt;/h2&gt;

&lt;p&gt;The data is CC-BY-4.0. No key, no signup, CORS open:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Rankings for every region, updated continuously&lt;/span&gt;
curl https://llmlatency.dev/api/rankings.json

&lt;span class="c"&gt;# Any page as markdown, for agents and scripts&lt;/span&gt;
curl https://llmlatency.dev/time-to-first-token.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is also a remote MCP server if you want your assistant to look this up mid-conversation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://llmlatency.dev/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s1"&gt;'Accept: application/json, text/event-stream'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Full method, including what the probes do and do not prove: &lt;a href="https://llmlatency.dev/methodology" rel="noopener noreferrer"&gt;llmlatency.dev/methodology&lt;/a&gt;. The TTFT breakdown lives at &lt;a href="https://llmlatency.dev/time-to-first-token" rel="noopener noreferrer"&gt;llmlatency.dev/time-to-first-token&lt;/a&gt;, and the prober itself is open source at &lt;a href="https://github.com/mazamaka/llm-latency-tracker" rel="noopener noreferrer"&gt;github.com/mazamaka/llm-latency-tracker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you have a provider you want added, or you think one of these numbers is wrong, tell me — measurements that survive being checked are the only kind worth publishing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>performance</category>
      <category>api</category>
    </item>
    <item>
      <title>There was no independent, measured view of AI-API latency by region — so I built one</title>
      <dc:creator>Max Bob</dc:creator>
      <pubDate>Thu, 23 Jul 2026 18:19:48 +0000</pubDate>
      <link>https://dev.to/max_bob/there-was-no-independent-measured-view-of-ai-api-latency-by-region-so-i-built-one-14ce</link>
      <guid>https://dev.to/max_bob/there-was-no-independent-measured-view-of-ai-api-latency-by-region-so-i-built-one-14ce</guid>
      <description>&lt;p&gt;If you build anything on top of hosted AI APIs, latency isn't a detail you get to ignore — it's a feature. A sluggish time-to-first-token is the difference between an assistant that feels alive and one that feels broken.&lt;/p&gt;

&lt;p&gt;Yet when I went looking for an honest answer to a simple question — &lt;em&gt;how fast is provider X from where my users actually are?&lt;/em&gt; — I couldn't find one. The numbers people quote tend to come from a single machine in a single region (usually somewhere in the US), from vendor-reported status pages, or from a benchmark that got run once and never refreshed. There was no independent, &lt;strong&gt;measured&lt;/strong&gt;, &lt;strong&gt;regional&lt;/strong&gt; view.&lt;/p&gt;

&lt;p&gt;So I built one: &lt;strong&gt;LLM Latency Tracker&lt;/strong&gt;, a provider-neutral tracker of latency and uptime for AI inference APIs.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;The core idea is boring on purpose: &lt;strong&gt;actually measure, don't scrape.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A small Python prober — standard library only, no API key needed for the edge probes — opens real connections to each provider's endpoint and times every phase of the handshake: &lt;strong&gt;DNS resolution → TCP connect → TLS negotiation → time-to-first-byte (TTFB)&lt;/strong&gt;. That's the &lt;em&gt;edge&lt;/em&gt; view: how long the network path itself takes before a single byte comes back.&lt;/p&gt;

&lt;p&gt;Separately, where possible, it measures inference &lt;strong&gt;time-to-first-token (TTFT)&lt;/strong&gt; — the thing your users actually feel, i.e. how long after you hit "send" the model starts streaming.&lt;/p&gt;

&lt;p&gt;Those two numbers answer different questions, and keeping them apart matters. Edge latency is about the network and the front door; TTFT is about the model and the queue behind it.&lt;/p&gt;

&lt;p&gt;The probes run from four regions — &lt;strong&gt;Europe (Germany), US Central, Asia (Tokyo), and South America (São Paulo)&lt;/strong&gt; — because "fast" is meaningless without "from where." Results land in a SQLite time-series; a static-site generator turns that into the pages you see, hosted on Cloudflare Pages, and the whole thing is &lt;strong&gt;self-updating&lt;/strong&gt; on a schedule. There's no always-on backend to rot or page me at 3am.&lt;/p&gt;

&lt;p&gt;It currently covers ~45 providers — the usual Western labs (OpenAI, Anthropic, Google, Mistral, Groq, Together, Fireworks, Cerebras, OpenRouter, Perplexity, xAI, DeepSeek…) plus Chinese ones (GLM/Zhipu, Kimi/Moonshot, Qwen, MiniMax) that rarely show up in Western benchmarks. All of it is free and open under &lt;strong&gt;CC-BY-4.0&lt;/strong&gt;, with a JSON API and an OpenAPI spec.&lt;/p&gt;

&lt;h3&gt;
  
  
  The interesting part: building it agent-native
&lt;/h3&gt;

&lt;p&gt;Here's what makes this more than another dashboard. I built it to be read by &lt;strong&gt;machines&lt;/strong&gt;, not just humans.&lt;/p&gt;

&lt;p&gt;The way people ask questions is shifting from search boxes to answer engines and agents. If your data only exists as HTML wrapped in JavaScript, an agent can't reliably consume or cite it — which means your measurements never reach the place where someone actually asks &lt;em&gt;"which provider has the lowest TTFT in Europe right now?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So the site speaks several agent dialects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;real MCP server&lt;/strong&gt; (Streamable HTTP) at &lt;code&gt;/mcp&lt;/code&gt;, exposing a &lt;code&gt;get_ai_api_latency&lt;/code&gt; tool. An agent can call it directly and get structured latency data back — no scraping, no guessing.&lt;/li&gt;
&lt;li&gt;An &lt;strong&gt;MCP Server Card&lt;/strong&gt; at &lt;code&gt;/.well-known/mcp/server-card.json&lt;/code&gt;, plus &lt;strong&gt;WebMCP&lt;/strong&gt;, so agents can discover the tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;llms.txt&lt;/code&gt; and &lt;code&gt;llms-full.txt&lt;/code&gt;&lt;/strong&gt;, giving models a clean map of the site.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown content negotiation:&lt;/strong&gt; ask a page for &lt;code&gt;text/markdown&lt;/code&gt; and you get tidy Markdown instead of a DOM you have to reverse-engineer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The nice side effect is that building for agents forces you to build clean for everyone. The same discipline that makes a page legible to an LLM — structured, fast, no junk — is what earned a &lt;strong&gt;Lighthouse 100&lt;/strong&gt; and Cloudflare's &lt;strong&gt;"Agent-Native" (Level 5)&lt;/strong&gt; rating on their "Is Your Site Agent-Ready?" check. I won't pretend that means much on its own; it's a checklist, not a trophy. But it's a decent proxy for "this data is actually reachable."&lt;/p&gt;

&lt;p&gt;There's also a small companion: a &lt;strong&gt;model deprecation &amp;amp; migration calendar&lt;/strong&gt; at &lt;code&gt;/deprecations&lt;/code&gt;, hand-verified from official provider docs, so you can spot which models are being sunset before they break your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Honest limitations
&lt;/h3&gt;

&lt;p&gt;A tracker that oversells itself is worse than none, so — plainly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The dataset is young.&lt;/strong&gt; It's only days old as I write this. Treat trends as provisional; don't over-read a single snapshot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge latency is not a full round-trip.&lt;/strong&gt; TTFB to an endpoint measures the network path, not the time to a finished generation. TTFT is closer to lived experience, but still isn't total completion time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyless network probes and keyed inference probes see different things.&lt;/strong&gt; Inference coverage is narrower than edge coverage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Four regions is a sample, not the planet.&lt;/strong&gt; If your users sit somewhere I don't probe, your mileage will differ.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a baseline and a starting point, not gospel.&lt;/p&gt;

&lt;h3&gt;
  
  
  Try it / break it
&lt;/h3&gt;

&lt;p&gt;It's free, open-source, and the data is CC-BY-4.0 — use it, chart it, cite it, build on it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Site: &lt;strong&gt;&lt;a href="https://llmlatency.dev" rel="noopener noreferrer"&gt;https://llmlatency.dev&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;JSON API: &lt;strong&gt;&lt;a href="https://llmlatency.dev/api/rankings.json" rel="noopener noreferrer"&gt;https://llmlatency.dev/api/rankings.json&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;MCP endpoint: &lt;strong&gt;&lt;a href="https://llmlatency.dev/mcp" rel="noopener noreferrer"&gt;https://llmlatency.dev/mcp&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Code: &lt;strong&gt;&lt;a href="https://github.com/mazamaka/llm-latency-tracker" rel="noopener noreferrer"&gt;https://github.com/mazamaka/llm-latency-tracker&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a provider or region you care about is missing, open an issue or a PR — that's exactly the kind of contribution that makes this more useful for everyone. And if you're building agents, point one at the MCP endpoint and tell me what breaks.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Update, August 2026.&lt;/strong&gt; The single most common confusion in the replies to this post was TTFB vs TTFT, so I wrote up the measured difference — including a region where the TTFB winner and the TTFT winner are different providers: &lt;a href="https://dev.to/max_bob/ttft-is-not-ttfb-what-45-ai-apis-measured-from-4-regions-actually-show-3k61"&gt;TTFT is not TTFB: what 45 AI APIs measured from 4 regions actually show&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>opensource</category>
      <category>webperf</category>
    </item>
  </channel>
</rss>
