DEV Community

Daniel Dong
Daniel Dong

Posted on

Your users don't wait. Here's why streaming matters more than model size.

You can have the smartest model in the world, and if the first word takes eight seconds, your users will call it "broken." The difference between AI magic and AI feels slow is one flag.

from openai import OpenAI

client = OpenAI(
    api_key="mb-xxxxxxxx",
    base_url="https://aibridge-api.com/v1",
)

stream = client.chat.completions.create(
    model="deepseek-v4-pro",
    messages=[{"role": "user", "content": "Write a short story about a robot."}],
    stream=True,
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
Enter fullscreen mode Exit fullscreen mode

That stream=True is the entire feature. Tokens start arriving almost immediately, instead of the whole answer landing at once after a blank screen.


The dead-air problem

Non-streaming LLM calls have a brutal UX curve: the user hits enter, and then… nothing. For a long generation, that silence can stretch 5–15 seconds while the model drafts the entire response in memory before returning anything.

What users do during that silence:

  • Think it's frozen and click again (double-spend, double-billing)
  • Think it's broken and abandon
  • Feel the weight of every second — perceived latency is always worse than measured latency

Streaming collapses that wait to time-to-first-token — usually well under a second. After that, words flow as they're generated, and the user watches progress instead of staring at a spinner. The total time is the same. The perceived time is night-and-day.

The UX numbers that actually matter

Metric Non-streaming Streaming
Time to first visible output 5–15s < 1s
User perception "It's thinking…" "It's answering"
Double-submit risk High (feels stuck) Low (feels alive)
Perceived latency Full generation time Time to first token

None of this requires a faster model. It requires stream: true — and an endpoint that implements it correctly.

Streaming works on every model

Because AIBridge speaks the OpenAI wire format, streaming is first-class across all 15 models. Want it snappier? Pair streaming with a fast tier:

# Autocomplete / suggestions — sub-second feels instant
stream = client.chat.completions.create(
    model="glm-4-flash",          # fast tier
    messages=[{"role": "user", "content": "Continue: 'The quick brown fox'"}],
    stream=True,
)
Enter fullscreen mode Exit fullscreen mode
  • Fast tierglm-4-flash, deepseek-v4-flash, moonshot-v1-8k for keystroke-speed interactions
  • Balanced tierglm-4-air, deepseek-chat, qwen-plus for everyday generation
  • Flagship tierdeepseek-v4-pro, qwen3-235b-a22b, glm-4-plus for quality that earns the wait
  • Deep reasoningdeepseek-reasoner, kimi-k3 for genuinely hard problems

Stream the fast models for real-time surfaces; stream the flagships so even long answers feel immediate.

The full stack, one endpoint

15 models · 4 vendors · one OpenAI-compatible key:

  • DeepSeekdeepseek-v4-pro, deepseek-v4-flash, deepseek-reasoner, deepseek-coder, deepseek-chat
  • Qwenqwen3-235b-a22b, qwen-plus (131K), qwen-max
  • GLMglm-4-plus, glm-4-air, glm-4-flash
  • Moonshotkimi-k3 (1M context), moonshot-v1-128k / -32k / -8k

Pricing that doesn't punish snappiness

  • Free tier: 500K tokens/month (weighted)
  • Pro: $9.90/month for 5M tokens
  • Top-ups: 1M / $2.99 · 5M / $9.90 · 20M / $29.90 (never expire)

The takeaway

Before you reach for a bigger model, reach for stream: true. Your users will feel the difference long before they notice the intelligence.

Stream all 15 models free.

aibridge-api.com · support@aibridge-api.com

1

2

3

4

5

Top comments (0)