修复Supervisor无法触发的情况
This commit is contained in:
@@ -30,7 +30,7 @@ async def chat_stream(request: ChatRequest):
|
||||
* `thread_id`: (可选) 现有项目的唯一标识。若不传,系统将自动分配并返回。
|
||||
* `checkpoint_id`: (可选) 历史快照 ID。
|
||||
* `config_params`: (可选) 对话配置参数
|
||||
* `require_suggestion`: (可选) 是否需要建议按钮
|
||||
* `require_suggestion`: (可选) 是否需要建议按钮,需要建议的频率,0-1的浮点数
|
||||
* `use_report`: (可选) 是否需要使用report功能 true/false
|
||||
|
||||
|
||||
@@ -199,25 +199,30 @@ async def chat_stream(request: ChatRequest):
|
||||
namespace, channel, payload = event
|
||||
# 路由更新
|
||||
if event[1] == "updates":
|
||||
if isinstance(payload, dict):
|
||||
for node_name, update_content in payload.items():
|
||||
namespace, _, payload = event
|
||||
|
||||
if isinstance(payload, dict):
|
||||
for update_node, update_content in payload.items():
|
||||
|
||||
# 处理 reducer(Overwrite / Append)
|
||||
if isinstance(update_content, dict):
|
||||
for k, v in update_content.items():
|
||||
if hasattr(v, "value"): # Overwrite(...)
|
||||
update_content[k] = v.value
|
||||
|
||||
# 将 LangChain Message 转为可 JSON 序列化
|
||||
if isinstance(update_content, dict) and "messages" in update_content:
|
||||
msgs = []
|
||||
for m in update_content["messages"]:
|
||||
msgs.append({
|
||||
"type": m.__class__.__name__,
|
||||
"content": getattr(m, "content", ""),
|
||||
"tool_calls": getattr(m, "tool_calls", []),
|
||||
"name": getattr(m, "name", None),
|
||||
"tool_calls": getattr(m, "tool_calls", None),
|
||||
})
|
||||
update_content = {
|
||||
**update_content,
|
||||
"messages": msgs
|
||||
}
|
||||
update_content["messages"] = msgs
|
||||
|
||||
yield f"data: {json.dumps({
|
||||
"node": node_name,
|
||||
"node": "Supervisor",
|
||||
"type": "updates",
|
||||
"content": update_content,
|
||||
"is_delta": False,
|
||||
@@ -245,6 +250,7 @@ async def chat_stream(request: ChatRequest):
|
||||
else:
|
||||
node_name = "Main"
|
||||
message, metadata = payload
|
||||
is_not_research = node_name != 'Researcher'
|
||||
node_name = metadata.get("langgraph_node", node_name)
|
||||
# 3. 处理不同类型的 message
|
||||
payload_out = {
|
||||
@@ -257,7 +263,8 @@ async def chat_stream(request: ChatRequest):
|
||||
}
|
||||
|
||||
if isinstance(message, AIMessageChunk):
|
||||
if node_name != 'Researcher' and not message.tool_call_chunks:
|
||||
# 节点不是research 并且 tool_call_chunks不为空的情况下,避免research的report工具使用custom发出的消息和message的消息重复了
|
||||
if is_not_research and node_name != 'Researcher' and message.tool_call_chunks:
|
||||
payload_out.update({
|
||||
"type": "delta",
|
||||
"is_delta": True,
|
||||
|
||||
Reference in New Issue
Block a user