In my newest posts, talked quite a bit about immediate caching in addition to caching typically, and the way it can enhance your AI app when it comes to value and latency. Nonetheless, even for a totally optimized AI app, generally the responses are simply going to take a while to be generated, and there’s merely nothing we are able to do about it. After we request giant outputs from the mannequin or require reasoning or deep pondering, the mannequin goes to naturally take longer to reply. As affordable as that is, ready longer to obtain a solution might be irritating for the person and decrease their general person expertise utilizing an AI app. Fortunately, a easy and easy approach to enhance this difficulty is response streaming.
Streaming means getting the mannequin’s response incrementally, little by little, as generated, moderately than ready for the complete response to be generated after which displaying it to the person. Usually (with out streaming), we ship a request to the mannequin’s API, we anticipate the mannequin to generate the response, and as soon as the response is accomplished, we get it again from the API in a single step. With streaming, nonetheless, the API sends again partial outputs whereas the response is generated. It is a moderately acquainted idea as a result of most user-facing AI apps like ChatGPT, from the second they first appeared, used streaming to point out their responses to their customers. However past ChatGPT and LLMs, streaming is basically used in all places on the net and in trendy purposes, reminiscent of as an example in dwell notifications, multiplayer video games, or dwell information feeds. On this submit, we’re going to additional discover how we are able to combine streaming in our personal requests to mannequin APIs and obtain the same impact on customized AI apps.
There are a number of completely different mechanisms to implement the idea of streaming in an utility. Nonetheless, for AI purposes, there are two broadly used forms of streaming. Extra particularly, these are:
- HTTP Streaming Over Server-Despatched Occasions (SSE): That could be a comparatively easy, one-way sort of streaming, permitting solely dwell communication from server to consumer.
- Streaming with WebSockets: That could be a extra superior and sophisticated sort of streaming, permitting two-way dwell communication between server and consumer.
Within the context of AI purposes, HTTP streaming over SSE can assist easy AI purposes the place we simply have to stream the mannequin’s response for latency and UX causes. Nonetheless, as we transfer past easy request–response patterns into extra superior setups, WebSockets turn out to be notably helpful as they permit dwell, bidirectional communication between our utility and the mannequin’s API. For instance, in code assistants, multi-agent techniques, or tool-calling workflows, the consumer might have to ship intermediate updates, person interactions, or suggestions again to the server whereas the mannequin remains to be producing a response. Nonetheless, for simplest AI apps the place we simply want the mannequin to offer a response, WebSockets are often overkill, and SSE is enough.
In the remainder of this submit, we’ll be taking a greater take a look at streaming for easy AI apps utilizing HTTP streaming over SSE.
. . .
What about HTTP Streaming Over SSE?
HTTP Streaming Over Server-Despatched Occasions (SSE) relies on HTTP streaming.
. . .
HTTP streaming signifies that the server can ship no matter it’s that it has to ship in components, moderately than suddenly. That is achieved by the server not terminating the connection to the consumer after sending a response, however moderately leaving it open and sending the consumer no matter further occasion happens instantly.
For instance, as an alternative of getting the response in a single chunk:
Hiya world!
we may get it in components utilizing uncooked HTTP streaming:
Hiya
World
!
If we had been to implement HTTP streaming from scratch, we would want to deal with every thing ourselves, together with parsing the streamed textual content, managing any errors, and reconnections to the server. In our instance, utilizing uncooked HTTP streaming, we must someway clarify to the consumer that ‘Hiya world!’ is one occasion conceptually, and every thing after it might be a separate occasion. Thankfully, there are a number of frameworks and wrappers that simplify HTTP streaming, one among which is HTTP Streaming Over Server-Despatched Occasions (SSE).
. . .
So, Server-Despatched Occasions (SSE) present a standardized method to implement HTTP streaming by structuring server outputs into clearly outlined occasions. This construction makes it a lot simpler to parse and course of streamed responses on the consumer facet.
Every occasion usually consists of:
- an
id - an
occasionsort - a
knowledgepayload
or extra correctly..
id:
occasion:
knowledge:
Our instance utilizing SSE may look one thing like this:
id: 1
occasion: message
knowledge: Hiya world!
However what’s an occasion? Something can qualify as an occasion – a single phrase, a sentence, or hundreds of phrases. What really qualifies as an occasion in our specific implementation is outlined by the setup of the API or the server we’re linked to.
On prime of this, SSE comes with varied different conveniences, like mechanically reconnecting to the server if the connection is terminated. One other factor is that incoming stream messages are clearly tagged as textual content/event-stream, permitting the consumer to appropriately deal with them and keep away from errors.
. . .
Roll up your sleeves
Frontier LLM APIs like OpenAI’s API or Claude API natively assist HTTP streaming over SSE. On this approach, integrating streaming in your requests turns into comparatively easy, as it may be achieved by altering a parameter within the request (e.g., enabling a stream=true parameter).
As soon as streaming is enabled, the API not waits for the total response earlier than replying. As a substitute, it sends again small components of the mannequin’s output as they’re generated. On the consumer facet, we are able to iterate over these chunks and show them progressively to the person, creating the acquainted ChatGPT typing impact.
However, let’s do a minimal instance of this utilizing, as regular the OpenAI’s API:
import time
from openai import OpenAI
consumer = OpenAI(api_key="your_api_key")
stream = consumer.responses.create(
mannequin="gpt-4.1-mini",
enter="Clarify response streaming in 3 brief paragraphs.",
stream=True,
)
full_text = ""
for occasion in stream:
# solely print textual content delta as textual content components arrive
if occasion.sort == "response.output_text.delta":
print(occasion.delta, finish="", flush=True)
full_text += occasion.delta
print("nnFinal collected response:")
print(full_text)

On this instance, as an alternative of receiving a single accomplished response, we iterate over a stream of occasions and print every textual content fragment because it arrives. On the similar time, we additionally retailer the chunks right into a full response full_text to make use of later if we wish to.
. . .
So, ought to I simply slap streaming = True on each request?
The brief reply isn’t any. As helpful as it’s, with nice potential for considerably enhancing person expertise, streaming is just not a one-size-fits-all resolution for AI apps, and we must always use our discretion for evaluating the place it must be carried out and the place not.
Extra particularly, including streaming in an AI app could be very efficient in setups once we anticipate lengthy responses, and we worth above all of the person expertise and responsiveness of the app. Such a case could be consumer-facing chatbots.
On the flip facet, for easy apps the place we anticipate the offered responses to be brief, including streaming isn’t possible to offer vital positive factors to the person expertise and doesn’t make a lot sense. On prime of this, streaming solely is smart in instances the place the mannequin’s output is free-text and never structured output (e.g. json recordsdata).
Most significantly, the key downside of streaming is that we aren’t in a position to evaluate the total response earlier than displaying it to the person. Bear in mind, LLMs generate the tokens one-by-one, and the that means of the response is fashioned because the response is generated, not upfront. If we make 100 requests to an LLM with the very same enter, we’re going to get 100 completely different responses. That’s to say, nobody is aware of earlier than the responses are accomplished what it’ll say. Because of this, with streaming activated is rather more tough to evaluate the mannequin’s output earlier than displaying it to the person, and apply any ensures on the produced content material. We will all the time attempt to consider partial completions, however once more, partial completions are tougher to guage, as we’ve to guess the place the mannequin goes with this. Including that this analysis needs to be carried out in actual time and never simply as soon as, however recursively on completely different partial responses of the mannequin, renders this course of much more difficult. In observe, in such instances, validation is run on the complete output after the response is full. Nonetheless, the difficulty with that is that at this level, it could already be too late, as we might have already proven the person inappropriate content material that doesn’t go our validations.
. . .
On my thoughts
Streaming is a characteristic that doesn’t have an precise affect on the AI app’s capabilities, or its related value and latency. Nonetheless, it might have an important affect on the best way the person’s understand and expertise an AI app. Streaming makes AI techniques really feel quicker, extra responsive, and extra interactive, even when the time for producing the whole response stays precisely the identical. That stated, streaming is just not a silver bullet. Completely different purposes and contexts might profit roughly from introducing streaming. Like many choices in AI engineering, it’s much less about what’s potential and extra about what is smart on your particular use case.
. . .
In case you made it this far, you would possibly discover pialgorithms helpful — a platform we’ve been constructing that helps groups securely handle organizational information in a single place.
. . .
Cherished this submit? Be part of me on 💌Substack and 💼LinkedIn
. . .
All photographs by the writer, besides talked about in any other case.

