# Is the V3 for streaming media available for normal use now?

**URL:** <https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992>\
**Category:** LangChain Academy\
**Tags:** python-help\
**Created:** [June 21, 2026, 2:34am UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992 "2026-06-21T02:34:40Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Huimin-station](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/huimin-station/32/2466_2.png) [@Huimin-station](https://forum.langchain.com/u/Huimin-station)\
**Post date:** [June 21, 2026, 2:34am UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992/1 "2026-06-21T02:34:40Z")

</div>

I keep encountering various issues when calling via this method. Is this because the feature hasn’t been fully optimized yet? If the problem stems from my incorrect operations, could you provide a sample code with the correct usage?

---

<div class="post-metadata">

**Author:** ![pawel-twardziak](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/pawel-twardziak/32/960_2.png) [@pawel-twardziak](https://forum.langchain.com/u/pawel-twardziak)\
**Post date:** [June 21, 2026, 9:37am UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992/2 "2026-06-21T09:37:16Z")

</div>

hi @Huimin-station

Yes - `version="v3"` is the recommended, generally-available streaming API, not an experimental one. It’s the typed-projection Event Streaming API, shipped in LangChain v1.3 (LangGraph v1.2, Deep Agents v0.6). The docs recommend it for “most application and frontend use cases.” So your “various issues” are almost certainly a usage detail, not an unfinished feature.

Canonical correct usage:

```python
stream = agent.stream_events(
    {"messages": [{"role": "user", "content": "What is the weather in SF?"}]},
    version="v3",
)
for message in stream.messages: # one item per LLM call
    for delta in message.text: # token deltas
        print(delta, end="", flush=True)
final_state = stream.output

```

The usual culprits behind “it doesn’t work”:

1. Forgetting `version="v3"` → you get old stream-mode tuples and `.messages`/`.text`/`.output` won’t exist
2. Mixing sync/async - `stream_events` → `for`; `await astream_events` → `async for`
3. Consuming a projection twice (each iterator is single-use; use `interleave()` / `asyncio.gather`)
4. Old version - needs LangChain ≥ 1.3 (`pip install -U langchain langgraph`)
5. Multimodal arrives as content blocks, not plain strings - handle block types, don’t assume `str`

Share your exact `*_events(...)` call, `pip show langchain langgraph`, and the actual traceback.

Grounded in the official docs ([event-streaming](https://docs.langchain.com/oss/python/langchain/event-streaming), [streaming](https://docs.langchain.com/oss/python/langchain/streaming), [deepagents event-streaming](https://docs.langchain.com/oss/python/deepagents/event-streaming)) and the [Token Streams to Agent Streams](https://www.langchain.com/blog/token-streams-to-agent-streams) blog.

---

<div class="post-metadata">

**Author:** ![Huimin-station](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/huimin-station/32/2466_2.png) [@Huimin-station](https://forum.langchain.com/u/Huimin-station)\
**Post date:** [June 21, 2026, 1:28pm UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992/3 "2026-06-21T13:28:50Z")

</div>

Could you please help me review the code below? I’ve enabled streaming mode, but the responses during tool calling are behaving strangely. Here’s my sample code:

```auto
import os

import dotenv
from langchain.agents import create_agent
from langchain_openai import ChatOpenAI
dotenv.load_dotenv()

def get_weather(city: str) -> str:
    """Get weather for a city."""
    return f"It's always sunny in {city}!"

model = ChatOpenAI(
    model="deepseek-v4-flash",
    base_url= "https://dashscope.aliyuncs.com/compatible-mode/v1",
    api_key=os.getenv("API_KEY"),
)

agent = create_agent(
    model=model,
    tools=[get_weather],
)

stream = agent.stream_events({
    "messages": [{"role": "user", "content": "What is the weather in SF?"}],
}, version="v3")

for message in stream.messages:
    for delta in message.text:
        print(delta, end="", flush=True)

final_state = stream.output

```

This is the output I’m getting:

> D:\Python\Lib\site-packages\langgraph\pregel\main.py:3723: LangChainBetaWarning: The v3 streaming protocol on Pregel is experimental.  
> return self.\_pregel\_stream\_v3(  
> D:\Python\Lib\site-packages\langgraph\pregel\main.py:3573: LangChainBetaWarning: The v3 streaming protocol on Pregel is experimental.  
> return GraphRunStream(graph\_iter, mux)  
> Let me try that againLet me call the correct functionLet me properly call the weather function:
> 
> Let me use the correct tool name:
> 
> Let me check the weather in San Francisco for you!
> 
> 进程已结束，退出代码为 0

---

<div class="post-metadata">

**Author:** ![Huimin-station](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/huimin-station/32/2466_2.png) [@Huimin-station](https://forum.langchain.com/u/Huimin-station)\
**Post date:** [June 21, 2026, 1:30pm UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992/4 "2026-06-21T13:30:33Z")

</div>

Is this caused by the large language model?

---

<div class="post-metadata">

**Author:** ![pawel-twardziak](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/pawel-twardziak/32/960_2.png) [@pawel-twardziak](https://forum.langchain.com/u/pawel-twardziak)\
**Post date:** [June 21, 2026, 1:34pm UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992/5 "2026-06-21T13:34:51Z")

</div>

hi @Huimin-station

Yes- this is the model, not v3 streaming. Two separate things are happening:

1. The warning is harmless. `"The v3 streaming protocol on Pregel is experimental"` comes from the low-level LangGraph/Pregel runtime, not from the LangChain `stream_events(version="v3")` API you’re calling. That API is the recommended one for normal use ([docs](https://docs.langchain.com/oss/python/langchain/event-streaming)). The warning doesn’t affect tool calling.

2. The real issue: your model isn’t emitting a structured tool call. The monologue (`"Let me call the correct function…"`, `"Let me use the correct tool name…"`) means the model is describing a tool call in plain text instead of returning an OpenAI-format `tool_calls` payload. `create_agent` can only execute `get_weather` when the model returns a proper `tool_calls` field - here it never does, so nothing runs.

Confirm it without streaming:

```python
result = agent.invoke({"messages": [{"role": "user", "content": "What is the weather in SF?"}]})
for m in result["messages"]:
    print(type(m). __name__ , getattr(m, "tool_calls", None))
    print(m.content)

```

If the `AIMessage` has `tool_calls == []` while the content is that monologue, it’s confirmed.

Likely cause: `deepseek-v4-flash` through the DashScope OpenAI-compatible endpoint isn’t returning native function calls. Check that (a) the model id is correct and (b) that model actually supports tool/function calling on that endpoint. Swap in a known tool-capable model (e.g. `gpt-4o-mini` or a Qwen/DeepSeek variant with function-calling) using the exact same code - if the tool fires, the model/endpoint was the variable.

One more note: tool calls don’t appear in `stream.messages → .text` (text deltas only). Stream them via the `.tool_calls` projection instead:

```python
for tc in stream.tool_calls:
    print(tc)

```

---

<div class="post-metadata">

**Author:** ![Huimin-station](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/huimin-station/32/2466_2.png) [@Huimin-station](https://forum.langchain.com/u/Huimin-station)\
**Post date:** [June 21, 2026, 1:45pm UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992/6 "2026-06-21T13:45:33Z")

</div>

Thanks for your help! I switched to qwen3.7-max and it works now. It seems DeepSeek models don’t support tool calling after all, their compatibility really needs some improvement haha.

---

<div class="post-metadata">

**Author:** ![Huimin-station](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/huimin-station/32/2466_2.png) [@Huimin-station](https://forum.langchain.com/u/Huimin-station)\
**Post date:** [June 21, 2026, 1:47pm UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992/7 "2026-06-21T13:47:03Z")

</div>

Theoretically DeepSeek supports tool calling, it might just not be compatible with v3 streaming.

---

<div class="post-metadata">

**Author:** ![pawel-twardziak](https://yyz1.discourse-cdn.com/flex007/user_avatar/forum.langchain.com/pawel-twardziak/32/960_2.png) [@pawel-twardziak](https://forum.langchain.com/u/pawel-twardziak)\
**Post date:** [June 21, 2026, 8:02pm UTC](https://forum.langchain.com/t/is-the-v3-for-streaming-media-available-for-normal-use-now/3992/8 "2026-06-21T20:02:40Z")

</div>

It might be the case. Would be good to observe/debug it more.
