Anthropic's streaming API emits a message_start SSE event before any content tokens arrive. A teammate is benchmarking TTFT against your existing OpenAI latency dashboard and proposes using the message_start timestamp as the first token marker. Explain whether that aligns with how TTFT is conventionally defined, what message_start actually represents on the wire, and how the choice would distort a side by side comparison.
No. message_start is a metadata preamble emitted before prefill output, so timing TTFT against it understates the user-perceived wait and flatters Anthropic versus OpenAI by tens to hundreds of milliseconds.
Imagine timing how long it takes to get food at a restaurant. You could start counting from when the waiter brings the menu, or from when the first bite of food arrives. Anthropic's message_start is the menu: it shows up almost instantly because it just announces the order, but no food has been cooked yet. OpenAI's protocol does not have a separate menu-delivery step; the waiter just walks over with the food. If you use menu-arrival as your timing marker for Anthropic but food-arrival for OpenAI, you make Anthropic look much faster than it is. The fair comparison times when food actually appears on both sides.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
Concept explanation~2 min read
Everything you need to truly understand this topic: intuition, mechanics, step by step explanation, code, formulas, and worked example. Click to expand.
This question hides behind a small detail (which SSE event to mark) but cuts to a foundational benchmarking principle: a metric is only meaningful if its definition is consistent across the things being compared. TTFT, Time To First Token, has a clear convention in the LLM serving community, and the teammate's proposal violates it.
The convention exists because TTFT is a user-experience metric, not a wire-protocol metric. Users do not read SSE events; they read text. The point of TTFT is to capture how long the user waits before something appears in the rendered response. Anything else (connection latency, protocol handshake, metadata preamble) belongs to a different metric, even if it shows up in the same stream.
This deep dive walks through the TTFT definition, the structure of Anthropic's SSE event stream, the corresponding structure on OpenAI's side, the specific distortion that picking message_start would introduce, the magnitude of that distortion across realistic prompt lengths, and how to instrument a benchmark that genuinely compares apples to apples.
The user-facing definition of TTFT
TTFT is canonically the wall-clock interval between request submission (the moment the client kicks off the HTTP request) and the arrival of the first content token in the response stream. The key qualifier is 'content': the first event whose payload contributes characters to the visible response.
This definition appears across vendor documentation, third-party benchmark suites like Artificial Analysis and llmperf, and academic LLM-serving papers. It is the operationalization of a user-experience question: how long does the user stare at a blank chat bubble before text starts to appear?
The definition matters because LLM streaming protocols often emit non-content events before the first content event. Metadata preambles, role announcements, tool-call placeholders, and connection acknowledgments are all valid wire-protocol events, but none of them produce characters the user reads. Using any of them as the TTFT marker captures a different metric and labels it incorrectly.
The acid test is: if the user closed their eyes and only heard text appearing, when would they first hear something? That moment is TTFT.
Situations where this technique stops working.
2–4 min · Everything important, quickly.
Real products, models, and research that use this idea.
- Anthropic Claude Opus 4.7 and Sonnet 4.6 emit message_start within milliseconds of connection accept, well before prefill output.
- OpenAI GPT-5.5 streaming chunks start with a role-only delta, then text deltas appear after prefill.
What an interviewer would ask next. Try answering before peeking at the approach.
QHow would you instrument both clients to make the comparison truly fair?
Start a high-resolution timer at the HTTP request submission. Parse the SSE stream and stop the timer at the first event whose payload contains user-visible characters. For Anthropic that is content_block_delta with text_delta and non-empty text; for OpenAI it is the first chunk where delta.content is a non-empty string. Log the marker event explicitly so reviewers can verify which event was used.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Red flags & common mistakes
The phrases that signal junior thinking. Click to expand.
Treating any SSE event as the first-token marker. Only the first event that carries visible characters counts. Metadata preambles do not.
60 second bullets to scan on the way to the call.
Primary sources. Browse if you want the original framing.
Same topic, related formats. Practice these next.