<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-spk-agentproto-llm-stream-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="LLM-Stream">A Standard Wire Format for Large Language Model Inference Streaming</title>
    <seriesInfo name="Internet-Draft" value="draft-spk-agentproto-llm-stream-00"/>
    <author fullname="Yaroslav Rosomakho">
      <organization>Zscaler</organization>
      <address>
        <email>yrosomakho@zscaler.com</email>
      </address>
    </author>
    <author fullname="Santosh Pallagatti">
      <organization>Zscaler</organization>
      <address>
        <email>santosh.pallagatti@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="19"/>
    <area>Applications and Real-Time</area>
    <workgroup>Agent Communication Protocols</workgroup>
    <keyword>LLM</keyword>
    <keyword>inference</keyword>
    <keyword>streaming</keyword>
    <keyword>SSE</keyword>
    <keyword>AI</keyword>
    <abstract>
      <?line 77?>

<t>Large Language Model (LLM) inference endpoints stream response tokens to clients using a fragmented set of vendor-specific application-layer protocols layered on top of standardized transports (HTTP/2, HTTP/1.1, WebSocket, Server-Sent Events). While these transports carry IETF or W3C standardization, the JSON payload schemas, event taxonomies, and framing conventions used within them are entirely vendor-defined, with no RFCs or common specifications governing them.</t>
      <t>This fragmentation imposes costs across the AI ecosystem. Middleware frameworks and orchestration platforms (LangChain, LiteLLM, Vercel AI SDK, Portkey, Cloudflare AI Gateway) must maintain vendor-specific streaming parsers for every supported provider. Cloud hosting platforms (AWS Bedrock, Azure AI Studio, Google Vertex AI) have each introduced additional proprietary streaming formats. Compliance and observability tooling must be rebuilt per provider. And new inference providers cannot reach framework-dependent developers without custom integration work.</t>
      <t>This document defines a standard wire format for LLM inference streaming over Server-Sent Events (SSE) on HTTP. It specifies a request envelope media type (application/llm-request+json), a response event taxonomy, and a JSON event envelope schema that enable middleware, orchestration platforms, compliance tooling, and HTTP intermediaries to handle AI inference traffic from any conforming provider using a single protocol contract. SSE transport remains unchanged; only the JSON payload inside it is standardized.</t>
      <t>The scope of this document is strictly Client/Application to LLM inference endpoint streaming. Agent-to-tool interaction (e.g., MCP) and agent-to-agent communication are out of scope.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://santoshpallagatti.github.io/draft-spk-agentproto-llm-stream/draft-spk-agentproto-llm-stream.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-spk-agentproto-llm-stream/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/santoshpallagatti/draft-spk-agentproto-llm-stream"/>.</t>
    </note>
  </front>
  <middle>
    <?line 87?>

<section anchor="introduction">
      <name>Introduction</name>
      <section anchor="problem-statement">
        <name>Problem Statement</name>
        <t>The AI inference ecosystem is experiencing protocol fragmentation reminiscent of the early web. Every major vendor has independently defined its own wire format for the same fundamental operation: streaming generated tokens from a model to a client. Each vendor uses a different combination of application-layer framing and JSON payload schema:</t>
        <ul spacing="normal">
          <li>
            <t>OpenAI streams SSE with JSON payloads using the path <tt>choices[0].delta.content</tt> for generated text.</t>
          </li>
          <li>
            <t>Anthropic streams SSE with typed event blocks, placing generated text at delta.text inside content_block_delta events.</t>
          </li>
          <li>
            <t>Google Gemini streams SSE with JSON payloads using <tt>candidates[0].content.parts[0].text</tt>.</t>
          </li>
          <li>
            <t>Microsoft Azure / Copilot uses WebSocket with the SignalR Hub Protocol's <xref target="SignalR"/> proprietary 0x1E record-separator framing.</t>
          </li>
          <li>
            <t>Cursor and Windsurf (AI coding assistants) use the Connect protocol <xref target="Connect"/> (application/connect+proto) with a 5-byte binary envelope and Protobuf-encoded payloads over HTTP/2.</t>
          </li>
        </ul>
        <t>The underlying transports, specifically HTTP/2 <xref target="RFC9113"/>, HTTP/1.1 <xref target="RFC9110"/>, WebSocket <xref target="RFC6455"/>, and SSE <xref target="WHATWG-HTML"/>, are all properly standardized. The problem exists entirely at the application layer: the JSON schemas, event types, stream lifecycle conventions, and payload structures that ride on top of these transports.</t>
        <t>Additionally, even where vendors use the same sub-protocol, behavior diverges in practice. For example, Cursor keeps HTTP/2 streams open indefinitely without sending END_STREAM, while Windsurf sends END_STREAM on the same Connect+proto protocol: same framing, different stream lifecycle.</t>
        <t>SSE is used correctly per the W3C specification by most vendors, but nothing in the SSE specification constrains what goes inside the event: and data: fields. Event type names, JSON field names, nesting structures, and payload schemas are entirely up to each provider.</t>
      </section>
      <section anchor="use-cases">
        <name>Use Cases</name>
        <t>The absence of a standard wire format for AI inference streaming creates unnecessary cost and complexity across the AI ecosystem. The following use cases illustrate the breadth of the problem.</t>
        <section anchor="middleware-and-framework-integration">
          <name>Middleware and Framework Integration</name>
          <t>A significant middleware ecosystem exists between LLM inference providers and application developers, including orchestration frameworks (LangChain, LlamaIndex, Spring AI, Semantic Kernel), SDK abstraction layers (Vercel AI SDK, LiteLLM), and AI gateways (Portkey, Cloudflare AI Gateway). Each of these components maintains provider-specific streaming response parsers for every supported LLM vendor.</t>
          <t>This parsing logic is stateful and non-trivial: it includes byte-level SSE reassembly, vendor-specific JSON path extraction, event type classification, stream lifecycle management, and reconnection handling. A standard payload format would allow these components to implement streaming response parsing once, independent of the upstream provider. Provider-specific configuration (authentication, endpoint URLs, model identifiers) would remain, but the streaming transport layer would be shared.</t>
        </section>
        <section anchor="new-provider-integration">
          <name>New Provider Integration</name>
          <t>When a new inference provider enters the market, middleware frameworks must implement a provider-specific streaming integration before that provider's models are accessible to framework-dependent developers. Providers with large user bases are typically integrated quickly. Providers with smaller user bases may experience delays of weeks or months.</t>
          <t>A standard payload format would allow any conforming provider to be consumed by existing middleware frameworks without additional integration effort on either side for the streaming layer.</t>
        </section>
        <section anchor="format-proliferation-through-cloud-hosting">
          <name>Format Proliferation Through Cloud Hosting</name>
          <t>AWS Bedrock, Azure AI Studio, and Google Vertex AI each host third-party models and expose them through proprietary streaming formats distinct from the original provider's public API.</t>
          <t>A standard payload specification would provide a common format for both direct vendor APIs and cloud hosting platforms to converge on, reducing rather than multiplying the number of streaming formats in the ecosystem.</t>
        </section>
        <section anchor="content-auditing-and-compliance">
          <name>Content Auditing and Compliance</name>
          <t>The EU AI Act distinguishes between providers (who develop AI systems) and deployers (who use AI systems in their business). Deployers of high-risk AI systems are required to keep automatically generated logs for at least six months, monitor the system's operation, ensure human oversight, and report serious incidents. Deployers using multiple AI providers must meet these obligations across all of them.</t>
          <t>The data required for deployer compliance, specifically what was generated, which model produced it, and how many tokens were consumed, is carried entirely within the streaming payload: generated text in content.delta events, model identification in stream.start events, and token counts in usage events. A standard payload format enables deployers to build a single logging and audit pipeline that extracts this information from any conforming provider, rather than maintaining provider-specific extraction logic for each LLM vendor in use.</t>
        </section>
        <section anchor="observability-in-regulated-environments">
          <name>Observability in Regulated Environments</name>
          <t>Unified observability across LLM providers is available today through third-party gateways that route inference traffic through their infrastructure. For organizations in regulated sectors (healthcare, finance, government), routing prompts and completions through a third-party service may conflict with data sovereignty and compliance requirements.</t>
          <t>Standard event types and sequence numbers would enable observability directly within the organization's own infrastructure: existing application performance monitoring tools could natively parse LLM streaming events based on a documented specification, without requiring vendor-specific plugins or third-party services in the data path.</t>
        </section>
        <section anchor="browser-based-consumption">
          <name>Browser-Based Consumption</name>
          <t>The browser EventSource API provides native support for SSE transport but has no awareness of the JSON payload structure. Each browser-based AI application currently implements its own response parsing logic per provider. A standard payload schema would enable a single client-side library to parse streaming responses from any conforming provider. Authentication is handled in HTTP headers prior to stream establishment and is independent of payload parsing.</t>
        </section>
        <section anchor="protocol-stack-completeness">
          <name>Protocol Stack Completeness</name>
          <t>The Model Context Protocol (MCP) standardizes agent-to-tool interaction under the AI Alliance and Linux Foundation. Agent-to-agent communication protocols are emerging as separate standardization efforts. The inference streaming layer, which carries generated content from model endpoints to client applications, sits between the application and these agent interaction protocols. Without a standard for inference streaming payloads, the protocol architecture contains standardized layers above and below connected by a proprietary, vendor-specific layer in the middle. This specification addresses that gap.</t>
        </section>
        <section anchor="http-intermediaries">
          <name>HTTP Intermediaries</name>
          <t>Forward proxies, reverse proxies, and security appliances that inspect AI inference traffic for content policy enforcement or audit logging must currently extract generated text from vendor-specific JSON structures at different paths per provider. A standard payload format with a canonical field for generated text (delta.text) enables these intermediaries to implement a single parser for content extraction across all conforming providers.</t>
        </section>
      </section>
      <section anchor="scope">
        <name>Scope</name>
        <t>This document addresses Client/Application to LLM inference endpoint streaming, specifically the path from an end-user application (web browser, IDE, mobile app, API client) to an LLM inference endpoint and back.</t>
        <t>The following are explicitly out of scope:</t>
        <ul spacing="normal">
          <li>
            <t>Agent-to-tool interaction (e.g., Model Context Protocol <xref target="MCP"/>)</t>
          </li>
          <li>
            <t>Agent-to-agent communication</t>
          </li>
          <li>
            <t>Model training traffic</t>
          </li>
          <li>
            <t>Embedding and batch inference APIs (non-streaming)</t>
          </li>
        </ul>
      </section>
      <section anchor="design-rationale">
        <name>Design Rationale</name>
        <t>The standard is designed around three principles:</t>
        <ol spacing="normal" type="1"><li>
            <t>Keep SSE as the transport. SSE over HTTP is already the dominant transport for AI inference streaming, used by OpenAI, Anthropic, Google, Cohere, and Mistral. It works on both HTTP/2 and HTTP/1.1, has broad ecosystem support, and requires no new transport protocol. A WebTransport <xref target="W3C-WEBTRANSPORT"/> binding <bcp14>MAY</bcp14> be defined in a future document as adoption matures.</t>
          </li>
          <li>
            <t>Standardize only the payload. The transport layer is already standardized. This document defines only what goes inside the SSE event: and data: fields, specifically the event type taxonomy and JSON envelope schema.</t>
          </li>
          <li>
            <t>Preserve vendor extensibility. Vendors retain full freedom to include proprietary metadata via namespaced extension fields. Conforming parsers <bcp14>MUST</bcp14> ignore unknown fields.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<dl>
        <dt>Inference endpoint:</dt>
        <dd>
          <t>An HTTP endpoint that accepts a prompt and returns a generated completion, typically streamed token-by-token.</t>
        </dd>
        <dt>Implementation:</dt>
        <dd>
          <t>Any software component that produces or consumes LLM inference streams conforming to this specification, including client libraries, server endpoints, API gateways, and orchestration platforms.</t>
        </dd>
        <dt>Stream:</dt>
        <dd>
          <t>A single request-response exchange in which the response is delivered incrementally via SSE events.</t>
        </dd>
        <dt>Event envelope:</dt>
        <dd>
          <t>The JSON object carried in each SSE data: field, conforming to the schema defined in <xref target="event-envelope"/>.</t>
        </dd>
        <dt>Content delta:</dt>
        <dd>
          <t>An incremental fragment of generated text delivered in a single event.</t>
        </dd>
      </dl>
    </section>
    <section anchor="transport-binding">
      <name>Transport Binding</name>
      <t>A conforming inference endpoint:</t>
      <ul spacing="normal">
        <li>
          <t><bcp14>MUST</bcp14> accept requests via HTTP POST.</t>
        </li>
        <li>
          <t><bcp14>MUST</bcp14> deliver streaming responses using Server-Sent Events (SSE) as defined in the WHATWG HTML Living Standard <xref target="WHATWG-HTML"/>, Section "Server-sent events."</t>
        </li>
        <li>
          <t><bcp14>MUST</bcp14> use HTTP/2 <xref target="RFC9113"/> or HTTP/1.1 <xref target="RFC9110"/> as the underlying HTTP version.</t>
        </li>
        <li>
          <t><bcp14>SHOULD</bcp14> prefer HTTP/2 for its multiplexing and flow-control benefits.</t>
        </li>
        <li>
          <t><bcp14>MUST</bcp14> use TLS 1.3 <xref target="RFC8446"/> or later for production deployments.</t>
        </li>
      </ul>
      <t>SSE over HTTP was chosen because it is already the dominant transport for AI inference streaming. It works on both HTTP/2 (multiplexed) and HTTP/1.1 (one stream per connection), providing graceful degradation in environments that support only HTTP/1.1. In contrast, gRPC <xref target="gRPC"/> and Connect+proto mandate HTTP/2 and break in HTTP/1-only environments.</t>
      <t>AI inference streams are characteristically long-lived and open-ended; the server does not set Content-Length and typically does not send HTTP/2 END_STREAM until generation is complete. This behavior differs from traditional HTTP request-response patterns and may affect timeout and buffering configurations in both clients and infrastructure. The same pattern is expected on HTTP/3 (QUIC).</t>
    </section>
    <section anchor="media-types-and-request-format">
      <name>Media Types and Request Format</name>
      <section anchor="request-media-type">
        <name>Request Media Type</name>
        <t>This document registers the media type application/llm-request+json.</t>
        <t>Sent by the client in the HTTP POST body, this Content-Type indicates that the request payload conforms to the request envelope defined in <xref target="request-envelope"/>. Any component that observes this Content-Type can immediately identify the traffic as LLM inference, enabling automated routing, logging, and processing without hostname-based heuristics.</t>
      </section>
      <section anchor="request-envelope">
        <name>Request Envelope</name>
        <t>The request body is a JSON object. Its top-level fields are organized into five logical groups: protocol control, conversation history, tool declarations, generation parameters, and extensibility.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Required</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">version</td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">Protocol version. <bcp14>MUST</bcp14> be "1.0".</td>
            </tr>
            <tr>
              <td align="left">stream</td>
              <td align="left">boolean</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">
                <bcp14>MUST</bcp14> be true for streaming.</td>
            </tr>
            <tr>
              <td align="left">model</td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">Model identifier. Opaque string.</td>
            </tr>
            <tr>
              <td align="left">messages</td>
              <td align="left">array</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">Conversation history. See <xref target="messages"/>.</td>
            </tr>
            <tr>
              <td align="left">tools</td>
              <td align="left">array</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">Tool/function definitions. See <xref target="tools"/>.</td>
            </tr>
            <tr>
              <td align="left">parameters</td>
              <td align="left">object</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">Generation parameters. See <xref target="gen-parameters"/>.</td>
            </tr>
            <tr>
              <td align="left">metadata</td>
              <td align="left">object</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">Request metadata. See <xref target="metadata-field"/>.</td>
            </tr>
            <tr>
              <td align="left">extensions</td>
              <td align="left">object</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">Vendor extensions. See <xref target="extensions-field"/>.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="messages">
        <name>Messages (Conversation History)</name>
        <t>The messages field is an ordered array of message objects representing the conversation history. The model reads this full history to understand context before generating a response.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Required</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">role</td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">One of: "system", "user", "assistant", "tool".</td>
            </tr>
            <tr>
              <td align="left">content</td>
              <td align="left">string or array</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">The message content.</td>
            </tr>
            <tr>
              <td align="left">name</td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>OPTIONAL</bcp14></td>
              <td align="left">Display name for the participant.</td>
            </tr>
            <tr>
              <td align="left">tool_call_id</td>
              <td align="left">string</td>
              <td align="left">CONDITIONAL</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14> when role is "tool".</td>
            </tr>
          </tbody>
        </table>
        <t>The role field identifies who produced the message:</t>
        <dl>
          <dt>"system":</dt>
          <dd>
            <t>Instructions that configure the model's behavior for the conversation. Typically the first message. Not visible to end users.</t>
          </dd>
          <dt>"user":</dt>
          <dd>
            <t>Input from the end user: the prompt, question, or instruction the model should respond to.</t>
          </dd>
          <dt>"assistant":</dt>
          <dd>
            <t>The model's own prior responses. Included in multi-turn conversations so the model has context of what it previously generated.</t>
          </dd>
          <dt>"tool":</dt>
          <dd>
            <t>A result returned from a tool invocation. When the model requests a tool call (via a tool.call event in the response), the client executes the tool locally and sends the result back as a "tool" message in the next request. The tool_call_id field <bcp14>MUST</bcp14> reference the id from the corresponding tool.call event.</t>
          </dd>
        </dl>
        <t>A typical multi-turn conversation:</t>
        <sourcecode type="json"><![CDATA[
"messages": [
  {"role": "system",
   "content": "You are a coding assistant."},
  {"role": "user",
   "content": "Write a Python function to sort a list."},
  {"role": "assistant",
   "content": "def sort_list(items):\n    return sorted(items)"},
  {"role": "user",
   "content": "Now make it sort in reverse order."}
]
]]></sourcecode>
        <section anchor="the-content-field">
          <name>The Content Field</name>
          <t>The content field takes one of two forms depending on whether the message contains only text or includes non-text attachments.</t>
          <t>Text-only messages use a simple string:</t>
          <sourcecode type="json"><![CDATA[
{"role": "user", "content": "What is the capital of France?"}
]]></sourcecode>
          <t>Multimodal messages use an array of typed content parts:</t>
          <sourcecode type="json"><![CDATA[
{"role": "user", "content": [
  {"type": "text", "text": "What is shown in this image?"},
  {"type": "image", "media_type": "image/png",
   "data": "<base64-encoded image>"}
]}
]]></sourcecode>
          <table>
            <thead>
              <tr>
                <th align="left">Type</th>
                <th align="left">Required Fields</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">"text"</td>
                <td align="left">text</td>
                <td align="left">Plain text content.</td>
              </tr>
              <tr>
                <td align="left">"image"</td>
                <td align="left">media_type, data</td>
                <td align="left">Base64-encoded image.</td>
              </tr>
              <tr>
                <td align="left">"document"</td>
                <td align="left">media_type, data</td>
                <td align="left">Base64-encoded document.</td>
              </tr>
              <tr>
                <td align="left">"audio"</td>
                <td align="left">media_type, data</td>
                <td align="left">Base64-encoded audio.</td>
              </tr>
            </tbody>
          </table>
          <t>When content is a string, it is semantically equivalent to an array containing a single text part. Implementations <bcp14>MUST</bcp14> support both forms.</t>
        </section>
      </section>
      <section anchor="tools">
        <name>Tools (Function Declarations)</name>
        <t>The tools field is an optional array of tool definitions. These are NOT part of the conversation; they are declarations of capabilities that the client can execute locally if the model decides to invoke them.</t>
        <t>The model reads these definitions and, when it determines that a tool would help answer the user's request, emits a tool.call event in the response stream instead of generating text. The model itself does not execute anything; it outputs a structured request asking the client to run the specified function with the given arguments.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Required</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">name</td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">Function name.</td>
            </tr>
            <tr>
              <td align="left">description</td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">Human-readable description.</td>
            </tr>
            <tr>
              <td align="left">parameters</td>
              <td align="left">object</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">JSON Schema for input parameters.</td>
            </tr>
          </tbody>
        </table>
        <sourcecode type="json"><![CDATA[
"tools": [
  {"name": "get_weather",
   "description": "Get current weather for a city.",
   "parameters": {
     "type": "object",
     "properties": {
       "city": {"type": "string",
                "description": "City name, e.g. Vienna"},
       "units": {"type": "string",
                 "enum": ["celsius", "fahrenheit"]}
     },
     "required": ["city"]
   }}
]
]]></sourcecode>
        <t>The complete tool interaction flow is described in <xref target="tool-flow"/>.</t>
      </section>
      <section anchor="gen-parameters">
        <name>Generation Parameters</name>
        <t>The parameters field contains knobs that control how the model generates its response.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">max_tokens</td>
              <td align="left">integer</td>
              <td align="left">Maximum number of tokens to generate.</td>
            </tr>
            <tr>
              <td align="left">temperature</td>
              <td align="left">number</td>
              <td align="left">Randomness. 0.0 = deterministic, 1.0 = creative.</td>
            </tr>
            <tr>
              <td align="left">top_p</td>
              <td align="left">number</td>
              <td align="left">Nucleus sampling threshold.</td>
            </tr>
            <tr>
              <td align="left">stop_sequences</td>
              <td align="left">array</td>
              <td align="left">Strings that immediately end generation.</td>
            </tr>
          </tbody>
        </table>
        <t>All fields within parameters are <bcp14>OPTIONAL</bcp14>. Vendors <bcp14>MAY</bcp14> define additional parameters. Unknown parameters <bcp14>MUST</bcp14> be ignored.</t>
      </section>
      <section anchor="metadata-field">
        <name>Request Metadata</name>
        <t>The metadata field carries request-level information for tracing, billing, and audit. This data is NOT sent to the model and does NOT influence generation.</t>
        <sourcecode type="json"><![CDATA[
"metadata": {
  "request_id": "550e8400-e29b-41d4-a716-446655440000",
  "user_id": "user-12345",
  "session_id": "sess-67890"
}
]]></sourcecode>
        <t>The request_id field, if present, <bcp14>SHOULD</bcp14> be echoed in the stream.start and stream.end response events.</t>
      </section>
      <section anchor="extensions-field">
        <name>Vendor Extensions</name>
        <t>The extensions field is an escape hatch for vendor-specific features. Keys <bcp14>MUST</bcp14> be namespaced using the format "vendor:name" to prevent collisions.</t>
        <sourcecode type="json"><![CDATA[
"extensions": {
  "vendor:openai": {"logprobs": true},
  "vendor:anthropic": {
    "thinking": {"type": "enabled",
                 "budget_tokens": 10000}}
}
]]></sourcecode>
        <t>Conforming implementations <bcp14>MUST</bcp14> ignore extension namespaces they do not recognize.</t>
      </section>
      <section anchor="tool-flow">
        <name>Tool Interaction Model</name>
        <t>The model is stateless and cannot execute tools itself; it can only emit a structured request for the client to execute a tool on its behalf.</t>
        <ol spacing="normal" type="1"><li>
            <t>The client sends a request with messages and tools.</t>
          </li>
          <li>
            <t>The model emits a tool.call event with the tool name and arguments, followed by content.stop with stop_reason "tool_use".</t>
          </li>
          <li>
            <t>The client executes the named function locally.</t>
          </li>
          <li>
            <t>The client sends a new request with the original history, the assistant's tool call, and a "tool" role message with the result.</t>
          </li>
          <li>
            <t>The model reads the tool result and generates its final text response.</t>
          </li>
        </ol>
        <artwork><![CDATA[
Request 1:
{"messages": [{"role": "user",
  "content": "What is the weather in Vienna?"}],
 "tools": [{"name": "get_weather", ...}]}

Response 1:
event: tool.call
data: {"type":"tool.call","id":"call_1",
  "name":"get_weather",
  "arguments":"{\"city\":\"Vienna\"}"}
event: content.stop
data: {"type":"content.stop",
  "stop_reason":"tool_use"}

Client executes get_weather("Vienna"), gets result.

Request 2:
{"messages": [
  {"role": "user",
   "content": "What is the weather in Vienna?"},
  {"role": "assistant", "content": null,
   "tool_calls": [{"id": "call_1",
     "name": "get_weather",
     "arguments": "{\"city\":\"Vienna\"}"}]},
  {"role": "tool", "tool_call_id": "call_1",
   "content": "Vienna: 24C, sunny"}],
 "tools": [{"name": "get_weather", ...}]}

Response 2:
event: content.delta
data: {"type":"content.delta",
  "delta":{"text":"The weather in Vienna is 24C."}}
]]></artwork>
        <t>The tool definitions travel with every request because the model is stateless.</t>
      </section>
      <section anchor="response-media-type">
        <name>Response Media Type</name>
        <t>The SSE response uses the standard text/event-stream media type. Conformance is signaled by the combination of application/llm-request+json on the request and a stream.start event as the first event in the response.</t>
      </section>
    </section>
    <section anchor="response-streaming-format">
      <name>Response Streaming Format</name>
      <t>The response is delivered as a Server-Sent Events (SSE) stream over HTTP.</t>
      <section anchor="sse-event-framing">
        <name>SSE Event Framing</name>
        <t>Each event on the wire consists of field lines followed by a blank line:</t>
        <artwork><![CDATA[
event: <event-type>\n
data: <JSON event envelope>\n
\n
]]></artwork>
        <t>The blank line (\n\n) is the event boundary. The HTTP transport may split bytes arbitrarily across frames or chunks; the SSE layer reassembles them.</t>
        <artwork><![CDATA[
HTTP layer:  Delivers raw bytes (DATA frames / chunks)
                  |
SSE layer:   Reassembles lines, uses \n\n as boundary
                  |
This spec:   Parses JSON envelope from data: field
]]></artwork>
        <t>The following constraints <bcp14>MUST</bcp14> be observed:</t>
        <ul spacing="normal">
          <li>
            <t>Each SSE event <bcp14>MUST</bcp14> contain exactly one complete, valid JSON object in its data: field.</t>
          </li>
          <li>
            <t>A JSON event envelope <bcp14>MUST NOT</bcp14> span multiple SSE events.</t>
          </li>
          <li>
            <t>An endpoint <bcp14>MUST NOT</bcp14> emit partial JSON that requires a subsequent SSE event to complete.</t>
          </li>
        </ul>
      </section>
      <section anchor="event-envelope">
        <name>Event Envelope</name>
        <t>Every event carries a JSON object with three common fields:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Field</th>
              <th align="left">Type</th>
              <th align="left">Required</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">v</td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">Protocol version. <bcp14>MUST</bcp14> be "1.0".</td>
            </tr>
            <tr>
              <td align="left">seq</td>
              <td align="left">integer</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">Zero-based, monotonically increasing.</td>
            </tr>
            <tr>
              <td align="left">type</td>
              <td align="left">string</td>
              <td align="left">
                <bcp14>REQUIRED</bcp14></td>
              <td align="left">Event type. <bcp14>MUST</bcp14> match SSE event: field.</td>
            </tr>
          </tbody>
        </table>
        <t>The envelope follows a TLV-style structure:</t>
        <dl>
          <dt>T (Type):</dt>
          <dd>
            <t>The SSE event: field. Identifies the event type without parsing JSON.</t>
          </dd>
          <dt>L (Length):</dt>
          <dd>
            <t>Implicit. The SSE \n\n boundary defines the extent of the JSON body. See <xref target="framing-tradeoff"/>.</t>
          </dd>
          <dt>V (Value):</dt>
          <dd>
            <t>The JSON event envelope in the data: field.</t>
          </dd>
        </dl>
        <t>Conforming parsers <bcp14>MUST</bcp14> ignore unknown fields (forward compatibility).</t>
        <section anchor="sequence-numbers">
          <name>Sequence Numbers</name>
          <t>The seq field is zero-based, incrementing by one per event. stream.start <bcp14>MUST</bcp14> have seq 0.</t>
          <ol spacing="normal" type="1"><li>
              <t>Gap detection: seq values 0, 1, 2, 5 indicates events 3 and 4 were lost.</t>
            </li>
            <li>
              <t>Ordering: provides canonical ordering when events are buffered.</t>
            </li>
          </ol>
        </section>
      </section>
      <section anchor="event-types">
        <name>Event Types</name>
        <table>
          <thead>
            <tr>
              <th align="left">Event Type</th>
              <th align="left">Direction</th>
              <th align="left">Purpose</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">stream.start</td>
              <td align="left">First</td>
              <td align="left">Stream initiation, request metadata</td>
            </tr>
            <tr>
              <td align="left">content.delta</td>
              <td align="left">Repeated</td>
              <td align="left">Incremental text fragment</td>
            </tr>
            <tr>
              <td align="left">content.stop</td>
              <td align="left">Once/block</td>
              <td align="left">End of content block with stop reason</td>
            </tr>
            <tr>
              <td align="left">tool.call</td>
              <td align="left">Zero or more</td>
              <td align="left">Model requests tool invocation</td>
            </tr>
            <tr>
              <td align="left">usage</td>
              <td align="left">One or more</td>
              <td align="left">Token consumption</td>
            </tr>
            <tr>
              <td align="left">error</td>
              <td align="left">Zero or one</td>
              <td align="left">Generation error</td>
            </tr>
            <tr>
              <td align="left">stream.end</td>
              <td align="left">Last</td>
              <td align="left">Clean stream termination</td>
            </tr>
          </tbody>
        </table>
        <section anchor="stream-start">
          <name>stream.start</name>
          <t><bcp14>MUST</bcp14> be the first event. Signals the endpoint has accepted the request.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Type</th>
                <th align="left">Required</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">v</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"1.0"</td>
              </tr>
              <tr>
                <td align="left">seq</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">
                  <bcp14>MUST</bcp14> be 0.</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"stream.start"</td>
              </tr>
              <tr>
                <td align="left">request_id</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>OPTIONAL</bcp14></td>
                <td align="left">Echoed from request metadata.</td>
              </tr>
              <tr>
                <td align="left">model</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Model generating the response.</td>
              </tr>
              <tr>
                <td align="left">created</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Unix timestamp (seconds).</td>
              </tr>
            </tbody>
          </table>
          <artwork><![CDATA[
event: stream.start
data: {"v":"1.0","seq":0,"type":"stream.start",
  "request_id":"550e8400-...",
  "model":"example-model","created":1749292800}
]]></artwork>
        </section>
        <section anchor="content-delta">
          <name>content.delta</name>
          <t>Carries an incremental text fragment. Most frequent event in a stream.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Type</th>
                <th align="left">Required</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">v</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"1.0"</td>
              </tr>
              <tr>
                <td align="left">seq</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Sequence number.</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"content.delta"</td>
              </tr>
              <tr>
                <td align="left">index</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Content block index. 0 for primary.</td>
              </tr>
              <tr>
                <td align="left">role</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"assistant".</td>
              </tr>
              <tr>
                <td align="left">delta</td>
                <td align="left">object</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Contains incremental content.</td>
              </tr>
            </tbody>
          </table>
          <dl>
            <dt>delta.text (string, <bcp14>REQUIRED</bcp14>):</dt>
            <dd>
              <t>The generated text fragment. This is the canonical field for generated text: the single location where generated content always appears, regardless of vendor. Standardizing this path is the primary goal of this specification.</t>
            </dd>
          </dl>
          <artwork><![CDATA[
event: content.delta
data: {"v":"1.0","seq":1,"type":"content.delta",
  "index":0,"role":"assistant",
  "delta":{"text":"The weather in Vienna"}}

event: content.delta
data: {"v":"1.0","seq":2,"type":"content.delta",
  "index":0,"role":"assistant",
  "delta":{"text":" is currently 24C"}}

event: content.delta
data: {"v":"1.0","seq":3,"type":"content.delta",
  "index":0,"role":"assistant",
  "delta":{"text":" and sunny."}}
]]></artwork>
          <t>Concatenating delta.text from seq 1 through 3 produces: "The weather in Vienna is currently 24C and sunny."</t>
        </section>
        <section anchor="content-stop">
          <name>content.stop</name>
          <t>Signals the end of a content block.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Type</th>
                <th align="left">Required</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">v</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"1.0"</td>
              </tr>
              <tr>
                <td align="left">seq</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Sequence number.</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"content.stop"</td>
              </tr>
              <tr>
                <td align="left">index</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Block index being terminated.</td>
              </tr>
              <tr>
                <td align="left">stop_reason</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Why generation stopped.</td>
              </tr>
            </tbody>
          </table>
          <t>stop_reason values:</t>
          <dl>
            <dt>"end_turn":</dt>
            <dd>
              <t>The model finished its response naturally.</t>
            </dd>
            <dt>"max_tokens":</dt>
            <dd>
              <t>Generation reached the max_tokens limit.</t>
            </dd>
            <dt>"tool_use":</dt>
            <dd>
              <t>The model is requesting a tool invocation.</t>
            </dd>
            <dt>"content_filter":</dt>
            <dd>
              <t>The endpoint's safety system terminated generation.</t>
            </dd>
          </dl>
        </section>
        <section anchor="tool-call">
          <name>tool.call</name>
          <t>Emitted when the model determines a tool invocation would help. The model does not execute the tool; it outputs a structured request for the client. See <xref target="tool-flow"/>.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Type</th>
                <th align="left">Required</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">v</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"1.0"</td>
              </tr>
              <tr>
                <td align="left">seq</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Sequence number.</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"tool.call"</td>
              </tr>
              <tr>
                <td align="left">index</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Content block index.</td>
              </tr>
              <tr>
                <td align="left">id</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Unique invocation identifier.</td>
              </tr>
              <tr>
                <td align="left">name</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Function name from request tools.</td>
              </tr>
              <tr>
                <td align="left">arguments</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">JSON-encoded function arguments.</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="usage">
          <name>usage</name>
          <t>Reports token consumption for billing, cost tracking, and quota management.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Type</th>
                <th align="left">Required</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">v</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"1.0"</td>
              </tr>
              <tr>
                <td align="left">seq</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Sequence number.</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"usage"</td>
              </tr>
              <tr>
                <td align="left">input_tokens</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Tokens in the request.</td>
              </tr>
              <tr>
                <td align="left">output_tokens</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Tokens generated.</td>
              </tr>
            </tbody>
          </table>
          <t><bcp14>MAY</bcp14> appear mid-stream or near stream end. At least one <bcp14>SHOULD</bcp14> be emitted per stream.</t>
        </section>
        <section anchor="error">
          <name>error</name>
          <t>Signals a generation error. After an error, the endpoint <bcp14>SHOULD</bcp14> send stream.end.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Type</th>
                <th align="left">Required</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">v</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"1.0"</td>
              </tr>
              <tr>
                <td align="left">seq</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Sequence number.</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"error"</td>
              </tr>
              <tr>
                <td align="left">code</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Machine-readable error code.</td>
              </tr>
              <tr>
                <td align="left">message</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Human-readable description.</td>
              </tr>
            </tbody>
          </table>
          <t>Error codes: "rate_limited", "context_length_exceeded", "content_filtered", "internal_error", "overloaded".</t>
        </section>
        <section anchor="stream-end">
          <name>stream.end</name>
          <t><bcp14>MUST</bcp14> be the last event. After stream.end, no further events on this stream.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Field</th>
                <th align="left">Type</th>
                <th align="left">Required</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">v</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"1.0"</td>
              </tr>
              <tr>
                <td align="left">seq</td>
                <td align="left">integer</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">Final sequence number.</td>
              </tr>
              <tr>
                <td align="left">type</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>REQUIRED</bcp14></td>
                <td align="left">"stream.end"</td>
              </tr>
              <tr>
                <td align="left">request_id</td>
                <td align="left">string</td>
                <td align="left">
                  <bcp14>OPTIONAL</bcp14></td>
                <td align="left">Echoed for correlation.</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="stream-lifecycle">
        <name>Stream Lifecycle</name>
        <ol spacing="normal" type="1"><li>
            <t>The stream begins with exactly one stream.start (seq 0).</t>
          </li>
          <li>
            <t>Zero or more content.delta events deliver text incrementally.</t>
          </li>
          <li>
            <t>Zero or more tool.call events request tool invocations.</t>
          </li>
          <li>
            <t>Zero or more usage events report token consumption.</t>
          </li>
          <li>
            <t>Each content block is terminated by content.stop.</t>
          </li>
          <li>
            <t>If an error occurs, an error event is emitted.</t>
          </li>
          <li>
            <t>The stream ends with exactly one stream.end.</t>
          </li>
        </ol>
        <artwork><![CDATA[
       POST request
            |
      stream.start (seq=0)
            |
       STREAMING
      /    |    \
content.delta tool.call usage
      \    |    /
    content.stop | error
            |
       stream.end
            |
         CLOSED
]]></artwork>
      </section>
      <section anchor="complete-example">
        <name>Complete Example</name>
        <artwork><![CDATA[
HTTP/2 200 OK
Content-Type: text/event-stream
Cache-Control: no-cache

event: stream.start
data: {"v":"1.0","seq":0,
  "type":"stream.start",
  "request_id":"550e8400-...",
  "model":"example-model",
  "created":1749292800}

event: content.delta
data: {"v":"1.0","seq":1,
  "type":"content.delta",
  "index":0,"role":"assistant",
  "delta":{"text":"The"}}

event: content.delta
data: {"v":"1.0","seq":2,
  "type":"content.delta",
  "index":0,"role":"assistant",
  "delta":{"text":" weather"}}

event: content.delta
data: {"v":"1.0","seq":3,
  "type":"content.delta",
  "index":0,"role":"assistant",
  "delta":{"text":" in Vienna"}}

event: content.delta
data: {"v":"1.0","seq":4,
  "type":"content.delta",
  "index":0,"role":"assistant",
  "delta":{"text":" is 24C and sunny."}}

event: content.stop
data: {"v":"1.0","seq":5,
  "type":"content.stop",
  "index":0,"stop_reason":"end_turn"}

event: usage
data: {"v":"1.0","seq":6,
  "type":"usage",
  "input_tokens":42,"output_tokens":8}

event: stream.end
data: {"v":"1.0","seq":7,
  "type":"stream.end",
  "request_id":"550e8400-..."}
]]></artwork>
      </section>
    </section>
    <section anchor="framing-tradeoff">
      <name>Framing Design Trade-off</name>
      <section anchor="sse-text-based-framing-this-specification">
        <name>SSE Text-Based Framing (This Specification)</name>
        <t>SSE delimits events with \n\n. The parser must scan the byte stream to locate each boundary. This is O(n) per event.</t>
      </section>
      <section anchor="length-prefixed-binary-framing-alternative">
        <name>Length-Prefixed Binary Framing (Alternative)</name>
        <t>A binary approach (e.g., gRPC's <xref target="gRPC"/> 5-byte envelope) prefixes each message with a type byte and 4-byte length. The parser reads the header and jumps directly to the next message. This is O(1) per boundary.</t>
      </section>
      <section anchor="rationale-for-sse">
        <name>Rationale for SSE</name>
        <ol spacing="normal" type="1"><li>
            <t>Compatibility: SSE is supported natively by browser EventSource and every major HTTP library. Binary framing would require custom parsers.</t>
          </li>
          <li>
            <t>Existing deployment: The five major SSE-based LLM providers would need minimal changes to adopt a standard JSON schema. Binary framing would require re-engineering their streaming pipeline.</t>
          </li>
          <li>
            <t>Debuggability: SSE events are human-readable in browser developer tools, curl, and log files.</t>
          </li>
          <li>
            <t>Incremental adoption: The payload schema is transport-independent. The same event types and JSON envelope can be carried over SSE or a future binary binding without changes.</t>
          </li>
        </ol>
        <t>A future companion document <bcp14>MAY</bcp14> define a binary transport binding, for example over WebTransport <xref target="W3C-WEBTRANSPORT"/>, that provides length-prefixed framing while reusing the same event types and JSON envelope.</t>
      </section>
    </section>
    <section anchor="backward-compatibility">
      <name>Backward Compatibility</name>
      <section anchor="api-gateway-translation">
        <name>API Gateway Translation</name>
        <t>An API gateway can accept vendor-specific requests, forward them to the upstream provider in their native format, and translate the response stream into the standard format before delivering it to the client.</t>
      </section>
      <section anchor="content-type-negotiation">
        <name>Content-Type Negotiation</name>
        <t>If a client sends Content-Type: application/llm-request+json and the endpoint does not support the standard, it <bcp14>SHOULD</bcp14> return 415 Unsupported Media Type, allowing the client to fall back.</t>
      </section>
      <section anchor="dual-format-endpoints">
        <name>Dual-Format Endpoints</name>
        <t>A vendor <bcp14>MAY</bcp14> support both formats, selected by the request Content-Type or an Accept header:</t>
        <artwork><![CDATA[
Accept: text/event-stream; profile="llm-stream-1.0"
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="prompt-confidentiality">
        <name>Prompt Confidentiality</name>
        <t>Prompts in application/llm-request+json requests may contain highly sensitive data. Any system that logs or processes these requests <bcp14>MUST</bcp14> apply appropriate confidentiality protections.</t>
      </section>
      <section anchor="tool-call-abuse">
        <name>Tool-Call Abuse</name>
        <t>A compromised or adversarial endpoint could emit tool.call events invoking sensitive tools. Client implementations <bcp14>SHOULD</bcp14> validate tool.call events against the set of tools declared in the original request and <bcp14>SHOULD</bcp14> require user confirmation before executing tool invocations with side effects.</t>
      </section>
      <section anchor="extension-field-safety">
        <name>Extension Field Safety</name>
        <t>The extensions field allows vendor-specific data. Implementations <bcp14>SHOULD NOT</bcp14> interpret or execute extension values from untrusted sources.</t>
      </section>
      <section anchor="sequence-exhaustion">
        <name>Sequence Exhaustion</name>
        <t>The seq field is an integer. Implementations <bcp14>SHOULD</bcp14> use 64-bit integers. A stream exceeding 2^53 events (the safe integer limit in JSON/JavaScript) is pathological and <bcp14>SHOULD</bcp14> be terminated.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="media-type-registration-applicationllm-requestjson">
        <name>Media Type Registration: application/llm-request+json</name>
        <dl>
          <dt>Type name:</dt>
          <dd>
            <t>application</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>llm-request+json</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>None</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>version (default: "1.0")</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>8bit (UTF-8 JSON)</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
        </dl>
      </section>
      <section anchor="sse-event-type-registry">
        <name>SSE Event Type Registry</name>
        <t>This document requests creation of an IANA registry for LLM-Stream SSE event types:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Event Type</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">stream.start</td>
              <td align="left">
                <xref target="stream-start"/></td>
            </tr>
            <tr>
              <td align="left">content.delta</td>
              <td align="left">
                <xref target="content-delta"/></td>
            </tr>
            <tr>
              <td align="left">content.stop</td>
              <td align="left">
                <xref target="content-stop"/></td>
            </tr>
            <tr>
              <td align="left">tool.call</td>
              <td align="left">
                <xref target="tool-call"/></td>
            </tr>
            <tr>
              <td align="left">usage</td>
              <td align="left">
                <xref target="usage"/></td>
            </tr>
            <tr>
              <td align="left">error</td>
              <td align="left">
                <xref target="error"/></td>
            </tr>
            <tr>
              <td align="left">stream.end</td>
              <td align="left">
                <xref target="stream-end"/></td>
            </tr>
          </tbody>
        </table>
        <t>New event types are registered via Specification Required <xref target="RFC8126"/>.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="RFC9113">
          <front>
            <title>HTTP/2</title>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <author fullname="C. Benfield" initials="C." role="editor" surname="Benfield"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>This specification describes an optimized expression of the semantics of the Hypertext Transfer Protocol (HTTP), referred to as HTTP version 2 (HTTP/2). HTTP/2 enables a more efficient use of network resources and a reduced latency by introducing field compression and allowing multiple concurrent exchanges on the same connection.</t>
              <t>This document obsoletes RFCs 7540 and 8740.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9113"/>
          <seriesInfo name="DOI" value="10.17487/RFC9113"/>
        </reference>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC6455">
          <front>
            <title>The WebSocket Protocol</title>
            <author fullname="I. Fette" initials="I." surname="Fette"/>
            <author fullname="A. Melnikov" initials="A." surname="Melnikov"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>The WebSocket Protocol enables two-way communication between a client running untrusted code in a controlled environment to a remote host that has opted-in to communications from that code. The security model used for this is the origin-based security model commonly used by web browsers. The protocol consists of an opening handshake followed by basic message framing, layered over TCP. The goal of this technology is to provide a mechanism for browser-based applications that need two-way communication with servers that does not rely on opening multiple HTTP connections (e.g., using XMLHttpRequest or s and long polling). [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6455"/>
          <seriesInfo name="DOI" value="10.17487/RFC6455"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="WHATWG-HTML" target="https://html.spec.whatwg.org/multipage/server-sent-events.html">
          <front>
            <title>HTML Living Standard - Server-sent events</title>
            <author>
              <organization>WHATWG</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="gRPC" target="https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md">
          <front>
            <title>gRPC over HTTP/2</title>
            <author>
              <organization>Google</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="Connect" target="https://connectrpc.com/docs/protocol">
          <front>
            <title>Connect Protocol Specification</title>
            <author>
              <organization>Buf Technologies</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MCP" target="https://spec.modelcontextprotocol.io">
          <front>
            <title>Model Context Protocol Specification</title>
            <author>
              <organization>Anthropic / AAIF</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="SignalR" target="https://github.com/dotnet/aspnetcore/blob/main/src/SignalR/docs/specs/HubProtocol.md">
          <front>
            <title>SignalR Hub Protocol</title>
            <author>
              <organization>Microsoft</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="W3C-WEBTRANSPORT" target="https://www.w3.org/TR/webtransport/">
          <front>
            <title>WebTransport</title>
            <author>
              <organization>W3C</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
      </references>
    </references>
    <?line 820?>

<section anchor="json-schema-for-event-envelope">
      <name>JSON Schema for Event Envelope</name>
      <sourcecode type="json"><![CDATA[
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:ietf:params:llm-stream:event-envelope:1.0",
  "type": "object",
  "required": ["v", "seq", "type"],
  "properties": {
    "v": {"type": "string", "const": "1.0"},
    "seq": {"type": "integer", "minimum": 0},
    "type": {
      "type": "string",
      "enum": ["stream.start", "content.delta",
               "content.stop", "tool.call", "usage",
               "error", "stream.end"]
    }
  },
  "additionalProperties": true
}
]]></sourcecode>
    </section>
    <section anchor="observed-protocol-landscape-june-2026">
      <name>Observed Protocol Landscape (June 2026)</name>
      <table>
        <thead>
          <tr>
            <th align="left">Provider</th>
            <th align="left">Transport</th>
            <th align="left">Framing</th>
            <th align="left">API Type</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">OpenAI</td>
            <td align="left">HTTP/2 + SSE</td>
            <td align="left">SSE data: lines</td>
            <td align="left">Public</td>
          </tr>
          <tr>
            <td align="left">Anthropic</td>
            <td align="left">HTTP/2 + SSE</td>
            <td align="left">SSE event: + data:</td>
            <td align="left">Public</td>
          </tr>
          <tr>
            <td align="left">Google Gemini</td>
            <td align="left">HTTP/2 + SSE</td>
            <td align="left">SSE data: lines</td>
            <td align="left">Public</td>
          </tr>
          <tr>
            <td align="left">Microsoft/Azure</td>
            <td align="left">WebSocket</td>
            <td align="left">SignalR 0x1E</td>
            <td align="left">Proprietary</td>
          </tr>
          <tr>
            <td align="left">Cursor/Windsurf</td>
            <td align="left">HTTP/2</td>
            <td align="left">Connect binary</td>
            <td align="left">Proprietary</td>
          </tr>
        </tbody>
      </table>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledge.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA9V9+3Ybx9Hn/3iKXug7x+QGAC+iZBvO5aMoymZMiVqRsk6+
2KsMgAYw4WAGmQspmmSeZZ9ln2zrV1V9GQCUZMd7dpMTi+RMX6vrXtU1/X6/
U6d1Zoeme2jO6ySfJOXEvEtLa14U5SKpzbQozWlSziz9m8+ahH55WUxsZk7y
qS1tPrbUr7TJIs1n3U4yGpX2ikY7PX3Zl+fdzjip7awob4amqiedSTHOkwXN
OCmTad2vlpd9GjSvl2VRF/0sW/Qr7tff3e1UzWiRVlVa5PXNkrqcHF+86OTN
YmTLYWdCww474yKvbF411dDUZWM7NPnjTkIDYEvLZZbS7NS/MrQ388YmWf8i
Xdhu57ooL2dl0SzRDvObo2KxaHJtb15jOeMiq7qdS3tDrSfDjukb2hd+pG7z
+KNy+8cf5+fH+HF40rmyeUMLNOYzpzFGNtl9R0uj0cy36Ifns7SeNyN6UyV5
XVTzZZJlySyp63TnE0BE74zgVNXUe17Xy2q4s7M2ykAmGKTFp8b71PvBvF5k
hAZNPS9KAIzmN2baZJmc+V+Ssqiy5Mq8KapikVzOC25QlLMkT39mkNBC/6sa
J5ktu/zOLpI0o4c3pevynz/L+8G4wAZX5ziX7ZnXfn+fPYdCZhBA858zvJKZ
OjmTRHrFp/rmxdH+3t7X+utXe18e6K9f7+3thl8fuwYHB0/116cHT574bvv8
9N13hxfvvu1/d/HydMgrclSJJ+Y0vQI+ePokLLPllS37FRDKEqLVlWykBqXS
WbujxnEMqqUdD67nSX09GxAUdhZNVqdLOr+dKgzTl2H4AHkof4ZGoTfUVXY6
hP0xJGZvXh+1V40npqChzXcXF6939jcvTrGOYLszK5dj+WeUFaOdRVLVttwh
VrHz+s3ZxdnR2WkfI+0PFpOHFvdtUcwyokcisDy347q9In3o6c2cE1DSqZLh
5vWNpQ+titdIq6l2ltr/oVU8a6bmwo7neZEVs9RW9O7l0ev2WoR/0opq++GX
rYhPcoHuY+ntlkOk+9CKDvN6XhbLdGx2zOHhyQt6d57O8iR7016VPjTfNSO/
pk+e26Soc1vvJNWSfoyL0rrzS/Odqhzv6KACO6y+2qHx3fAfOc2X6Rj0Pq1B
HI+P+u+On128OXx1/vrszUV73e/s6KJM8mpZlPXm9V5fXw+uHzPqX7zZubaj
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

-->

</rfc>
