fix: retain agent streaming flush owners

This commit is contained in:
jxxghp
2026-08-24 10:39:11 +08:00
parent 259ca16838
commit 473c0588cc
3 changed files with 145 additions and 1 deletions
+32
View File
@@ -58,6 +58,7 @@ class StreamingHandler:
# 流式输出相关状态
self._streaming_enabled = False
self._flush_task: Optional[asyncio.Task] = None
self._streaming_lifecycle_lock = asyncio.Lock()
# 当前消息的发送信息(用于编辑消息)
self._message_response: Optional[MessageResponse] = None
# 已发送给用户的文本(用于追踪增量)
@@ -162,6 +163,28 @@ class StreamingHandler:
original_message_id: Optional[str] = None,
original_chat_id: Optional[str] = None,
title: str = "",
):
"""串行启动流式输出,禁止新一轮覆盖尚未结束的刷新 owner。"""
async with self._streaming_lifecycle_lock:
await self._start_streaming(
channel=channel,
source=source,
user_id=user_id,
username=username,
original_message_id=original_message_id,
original_chat_id=original_chat_id,
title=title,
)
async def _start_streaming(
self,
channel: Optional[str] = None,
source: Optional[str] = None,
user_id: Optional[str] = None,
username: Optional[str] = None,
original_message_id: Optional[str] = None,
original_chat_id: Optional[str] = None,
title: str = "",
):
"""
启动流式输出。
@@ -175,6 +198,10 @@ class StreamingHandler:
:param original_message_id: 原始消息ID(如果是回复消息)
:param original_chat_id: 原始聊天ID(如果是回复消息)
"""
if self._flush_task is not None:
self._streaming_enabled = False
await self._cancel_flush_task()
self._channel = channel
self._source = source
self._user_id = user_id
@@ -208,6 +235,11 @@ class StreamingHandler:
logger.debug("流式输出已启动")
async def stop_streaming(self) -> Tuple[bool, str]:
"""串行停止流式输出,并等待本轮刷新与最终消息收口。"""
async with self._streaming_lifecycle_lock:
return await self._stop_streaming()
async def _stop_streaming(self) -> Tuple[bool, str]:
"""
停止流式输出。执行最后一次刷新确保所有内容都已发送。
:return: (all_sent, final_text)