Compare commits

...

2 Commits

Author SHA1 Message Date
朱潮
786e7c2a07 Merge branch 'master' into bot_manager 2026-03-15 16:53:36 +08:00
朱潮
b8368068ae 心跳发送增加 15 秒间隔判断,发送后也更新 last_yield_time 2026-03-15 16:53:18 +08:00

View File

@ -155,6 +155,7 @@ async def enhanced_generate_stream_response(
# 输出控制器:确保 preamble 先输出,然后是 agent stream # 输出控制器:确保 preamble 先输出,然后是 agent stream
preamble_output_done = False preamble_output_done = False
last_yield_time = time.time()
while True: while True:
try: try:
@ -165,6 +166,7 @@ async def enhanced_generate_stream_response(
# 立即输出 preamble 内容 # 立即输出 preamble 内容
if item_data: if item_data:
yield item_data yield item_data
last_yield_time = time.time()
preamble_output_done = True preamble_output_done = True
elif item_type == "preamble_done": elif item_type == "preamble_done":
@ -175,6 +177,7 @@ async def enhanced_generate_stream_response(
# Agent stream 内容,需要等待 preamble 输出完成 # Agent stream 内容,需要等待 preamble 输出完成
if preamble_output_done: if preamble_output_done:
yield item_data yield item_data
last_yield_time = time.time()
else: else:
# preamble 还没输出,先放回队列 # preamble 还没输出,先放回队列
await output_queue.put((item_type, item_data)) await output_queue.put((item_type, item_data))
@ -191,9 +194,11 @@ async def enhanced_generate_stream_response(
if all(task.done() for task in [preamble_task_handle, agent_task_handle]): if all(task.done() for task in [preamble_task_handle, agent_task_handle]):
# 所有任务都完成了,退出循环 # 所有任务都完成了,退出循环
break break
# 发送空内容心跳包保持连接活跃,防止 nginx/客户端超时断开 # 15秒无消息输出时才发送心跳包保持连接活跃
heartbeat_chunk = create_stream_chunk(f"chatcmpl-heartbeat", config.model_name, "") if time.time() - last_yield_time >= 15:
yield f"data: {json.dumps(heartbeat_chunk, ensure_ascii=False)}\n\n" heartbeat_chunk = create_stream_chunk(f"chatcmpl-heartbeat", config.model_name, "")
yield f"data: {json.dumps(heartbeat_chunk, ensure_ascii=False)}\n\n"
last_yield_time = time.time()
continue continue
# 发送结束标记 # 发送结束标记