when use OpenAIChatCompletionClient.create_stream(), there is many <think> and </think> tags in content

### What happened?

**Describe the bug**
I am using OpenAIChatCompletionClient.create_stream() to get stream result , then found sometimes there is many <think> and </think> tags in result

**To Reproduce**
here is my code

```model_client =  get_vllm_qwen3_30b_a3b_client()
messages = [UserMessage(content="有条理的列出北京的旅游景点，先拟草稿再回复", source="user")]

# Create a stream.
stream = model_client.create_stream(messages=messages,tools=[])

# Iterate over the stream and print the responses.
print("Streamed responses:")
thinking_flag = False
thinking_message = ""
async for chunk in stream:  # type: ignore
    if isinstance(chunk, str):
        thinking_message += chunk
print(thinking_message)
```
and the result is
```
Streamed responses:
<think>首先，用户要求“有条理的列出北京的旅游景点，先拟草稿再回复”。意思是让我先拟草稿，然后再正式回复。所以，我需要先创建一个草稿，然后基于草稿提供最终回复。

关键点：
- **有条理**：景点应该按逻辑分类，比如按区域、类型（历史、文化、自然等）或主题（如皇家、胡同、现代）。
- **北京的旅游景点**：北京有很多著名景点，我需要列出主要的、受欢迎的景点。
- **先拟草稿**：在回复中，我应该先展示草稿，然后再给出正式列表。但用户说“先拟草稿再回复”，所以我应该在回复中先写草稿，然后写正式列表。

结构我的回复：
1. **草稿部分**：简要列出我计划如何组织景点。例如，按区域或主题分类。
2. **正式回复**：基于草稿，提供一个有条理的列表。

草稿想法：
-</think><think> 北京景点可以分为几大类：
  - **皇家历史景点**：如故宫、天坛、颐和园、圆明园。
  - **胡同与老北京文化**：如南锣鼓巷、什刹海、胡同游。
  - **现代与城市景观**：如鸟巢、水立方、国贸大厦。
  - **自然与公园**：如北海公园、景山公园、奥林匹克公园。
  - **其他著名景点**：如八达岭长城、雍和宫、恭王府。

按区域分类：
- **市中心**：故宫、天安门广场、王府井。
- **西北部**：颐和园、圆明园、香山。
- **北部**：八达岭长城。
- **东部**：奥林匹克公园（鸟巢、水立方）。
- **西部**：什刹海、南锣鼓巷。

确保覆盖主要景点：
-</think><think> 必须包括：故宫、天安门广场、八达岭长城、颐和园、天坛、景山公园、南锣鼓巷、什刹海、雍和宫、圆明园、鸟巢、水立方。

草稿草拟：
-</think><think> 草稿：我将景点分为三类：历史遗迹、文化体验、现代地标。每个类别下列出具体景点。

正式列表草稿：
1. **历史遗迹**
   -</think><think> 故宫（紫禁城）
   -</think><think> 天坛
   -</think><think> 颐和园
   -</think><think> 圆明园
   -</think><think> 八达岭长城
   -</think><think> 雍和宫
   -</think><think> 恭王府

2. **文化体验**
   -</think><think> 南锣鼓巷
   - 什刹海
   -</think><think> 胡同游（如烟袋斜街）
   - 798艺术区

3. **现代地标**
   -</think><think> 鸟巢（国家体育场）
   -</think><think> 水立方（国家游泳中心）
   -</think><think> 国贸大厦（观景台）
   - 三里屯

在草稿中，我需要先写这个草稿。

最终回复结构：
-</think><think> 先说：草稿：我计划将北京景点分为三类：历史遗迹、文化体验、现代地标。
-</think><think> 然后列出草稿中的分类。
- 最后，提供正式列表。

用户说“先拟草稿再回复”，所以回复中应该有草稿部分。

确保有条理：避免杂乱，用标题和列表。

草稿内容：
-</think><think> 草稿：基于常见旅游指南，北京景点可按主题分类。我将使用以下分类：
  - 皇家与历史：包括故宫、天坛等。
  -</think><think> 老北京风情：胡同、四合院。
  -</think><think> 现代北京：奥运场馆、商业区。

正式列表：
- 用清晰的格式，如标题、子标题、项目符号。

列出具体景点：
-</think><think> 故宫：世界最大、保存最完整的木质结构古建筑群。
-</think><think> 天安门广场：中国象征，附近有人民英雄纪念碑。
-</think><think> 八达岭长城：最著名的长城段。
-</think><think> 颐和园：皇家园林，有昆明湖。
-</think><think> 天坛：古代祭天场所。
- 什刹海：历史街区，有胡同和酒吧。
-</think><think> 南锣鼓巷：北京最古老的胡同之一。
-</think><think> 鸟巢和水立方：2008年奥运会场馆。
-</think><think> 圆明园：被毁的皇家园林。
-</think><think> 雍和宫：藏传佛教寺庙。
-</think><think> 恭王府：清代王府。

避免重复：例如，颐和园和圆明园都是皇家园林，但分开列。

草稿回复：
-</think><think> 我会写：草稿：我将北京旅游景点分为以下三类：
  1. 皇家历史景点
  2.</think><think> 老北京文化体验
  3.</think><think> 现代城市景观

然后，在正式回复中，详细列出。

最终回复：
-</think><think> 先写草稿部分。
-</think><think> 然后写正式列表。

确保语言：用户是中文，所以用中文回复。

草稿草拟：
草稿：北京旅游景点可按主题分为三类：皇家历史遗迹、老北京文化风情、现代城市地标。具体如下：
- 皇家历史遗迹：故宫、天坛、颐和园、圆明园、八达岭长城、雍和宫。
-</think><think> 老北京文化风情：南锣鼓巷、什刹海、胡同游、恭王府。
-</think><think> 现代城市地标：鸟巢、水立方、国贸大厦、798艺术区。

正式列表：
- 有条理地列出，用编号或项目符号。

在正式回复中，直接给出列表，但先展示草稿。

完整回复草稿：
"草稿：我计划将北京的旅游景点分为三大类：1. 皇家历史遗迹 2.</think><think> 老北京文化体验 3.</think><think> 现代城市景观。每类下列出主要景点。"

然后，正式回复：
"以下是北京有条理的旅游景点列表："

"### 1. 皇家历史遗迹
-</think><think> 故宫（紫禁城）：明清皇家宫殿，世界文化遗产。
-</think><think> 天坛：古代皇帝祭天场所，世界文化遗产。
-</think><think> 颐和园：中国现存最大皇家园林，世界文化遗产。
-</think><think> 八达岭长城：明长城最著名段落，世界文化遗产。
-</think><think> 圆明园：清代皇家园林，现为遗址公园。
-</think><think> 雍和宫：藏传佛教寺庙，北京最大喇嘛庙。

### 2.</think><think> 老北京文化体验
-</think><think> 南锣鼓巷：北京最古老的胡同，充满文艺小店。
- 什刹海：历史街区，包括前海、后海，有胡同和酒吧。
-</think><think> 胡同游：推荐体验胡同文化，如烟袋斜街。
-</think><think> 恭王府：清代和珅府邸，现为博物馆。

### 3.</think><think> 现代城市景观
-</think><think> 鸟巢（国家体育场）：2008年奥运会主体育场。
-</think><think> 水立方（国家游泳中心）：2008年奥运会游泳馆。
- 798艺术区：当代艺术聚集地，工业风建筑。
-</think><think> 国贸大厦：北京地标，可登顶观景。
- 三里屯：时尚购物和夜生活区。"

在草稿中，我提到了798艺术区，它属于现代，但有时也归为文化。

确保景点是主要的：避免列出太多，保持精选。

常见景点：故宫、长城、颐和园、天坛、胡同、鸟巢是必去的。

草稿中，我用了三类，但可能需要调整。

另一个方式：按地理位置。
- 东城区：故宫、天安门、王府井。
-</think><think> 西城区：颐和园、圆明园、什刹海。
-</think><think> 海淀区：颐和园、圆明园、香山。
-</think><think> 昌平区：八达岭长城。
- 朝阳区：鸟巢、水立方、798。

但按主题可能更友好。

我决定用主题分类。

在草稿中，我应该简要说明。

最终回复：
-</think><think> 先写草稿。
-</think><think> 然后写正式列表。
</think>
```

there is too many <think> and </think> tags !

i think it is a bug when reasoning_content has "", in autogen_ext  _openai_client.py  line 928  there is

``` 
reasoning_content: str | None = None
if choice.delta.model_extra is not None and "reasoning_content" in choice.delta.model_extra:
	# If there is a reasoning_content field, then we populate the thought field. This is for models such as R1.
	reasoning_content = choice.delta.model_extra.get("reasoning_content")

if isinstance(reasoning_content, str) and len(reasoning_content) > 0:
	if not is_reasoning:
		# Enter reasoning mode.
		reasoning_content = "<think>" + reasoning_content
		is_reasoning = True
	thought_deltas.append(reasoning_content)
	yield reasoning_content
elif is_reasoning:
	# Exit reasoning mode.
	reasoning_content = "</think>"
	thought_deltas.append(reasoning_content)
	is_reasoning = False
	yield reasoning_content
```
i found that `len(reasoning_content) > 0` is a Key Conditions 
bug the LLM stream data includes 

<img width="1547" height="241" alt="Image" src="https://github.com/user-attachments/assets/9919871f-f69f-4e91-8a9d-df5c31a69df8" />

is it a bug ? maybe `len(reasoning_content) > 0` is Excess ?

### Which packages was the bug in?

Python Core (autogen-core), Python Extensions (autogen-ext)

### AutoGen library version.

Python 0.6.4

### Other library version.

_No response_

### Model used

Qwen3-30B-A3B-Thinking-2507

### Model provider

None

### Other model provider

_No response_

### Python version

3.12

### .NET version

None

### Operating system

Windows

Labels: needs-triage
State: closed