fix: Update LangGraph event handling to process events as dictionaries instead of tuples
This commit is contained in:
parent
6d375fd76d
commit
a762d09b3b
@ -552,69 +552,36 @@ class ReviewerAgent:
|
||||
try:
|
||||
async for event in self.graph.astream(
|
||||
initial_state,
|
||||
stream_mode=["updates", "messages"]
|
||||
stream_mode=["updates"]
|
||||
):
|
||||
event_count += 1
|
||||
print(f"📨 Event #{event_count} received from graph")
|
||||
print(f" Type: {type(event)}")
|
||||
print(f" Event content: {event}")
|
||||
|
||||
# LangGraph returns events as tuples: (event_type, data)
|
||||
if isinstance(event, tuple) and len(event) >= 2:
|
||||
event_type, event_data = event[0], event[1]
|
||||
print(f" Event type: {event_type}")
|
||||
print(f" Event data type: {type(event_data)}")
|
||||
|
||||
# Handle 'updates' events (node updates)
|
||||
if event_type == 'updates' and isinstance(event_data, dict):
|
||||
for node_name, node_data in event_data.items():
|
||||
print(f" 🔔 Node update: {node_name}")
|
||||
|
||||
if on_event:
|
||||
print(f" 📤 Sending event to callback for node: {node_name}")
|
||||
await on_event({
|
||||
"type": "agent_step",
|
||||
"step": node_name,
|
||||
"message": f"Шаг: {node_name}"
|
||||
})
|
||||
|
||||
# Store final state
|
||||
if isinstance(node_data, dict):
|
||||
final_state = node_data
|
||||
|
||||
# Handle 'messages' events (LLM streaming)
|
||||
elif event_type == 'messages':
|
||||
print(f" 💬 LLM messages received")
|
||||
# event_data is a list of messages
|
||||
if isinstance(event_data, (list, tuple)):
|
||||
for msg in event_data:
|
||||
# Check if it's an AIMessage or similar
|
||||
msg_content = None
|
||||
if hasattr(msg, 'content'):
|
||||
msg_content = msg.content
|
||||
elif isinstance(msg, dict) and 'content' in msg:
|
||||
msg_content = msg['content']
|
||||
else:
|
||||
msg_content = str(msg)
|
||||
|
||||
if msg_content and on_event:
|
||||
print(f" 💬 Sending LLM message: {msg_content[:100]}...")
|
||||
await on_event({
|
||||
"type": "llm_message",
|
||||
"message": msg_content
|
||||
})
|
||||
|
||||
# Handle 'values' events (state snapshots)
|
||||
elif event_type == 'values':
|
||||
print(f" 📊 State snapshot received")
|
||||
if isinstance(event_data, dict):
|
||||
final_state = event_data
|
||||
|
||||
# Handle 'debug' events
|
||||
elif event_type == 'debug':
|
||||
print(f" 🐛 Debug event: {event_data.get('type') if isinstance(event_data, dict) else 'unknown'}")
|
||||
# LangGraph returns events as dict: {node_name: node_output}
|
||||
if isinstance(event, dict):
|
||||
for node_name, node_data in event.items():
|
||||
print(f" 🔔 Node update: {node_name}")
|
||||
print(f" 🔔 Node data type: {type(node_data)}")
|
||||
|
||||
if on_event:
|
||||
print(f" 📤 Sending event to callback for node: {node_name}")
|
||||
await on_event({
|
||||
"type": "agent_step",
|
||||
"step": node_name,
|
||||
"message": f"Шаг: {node_name}",
|
||||
"data": {
|
||||
"status": node_data.get("status") if isinstance(node_data, dict) else None
|
||||
}
|
||||
})
|
||||
|
||||
# Store final state
|
||||
if isinstance(node_data, dict):
|
||||
final_state = node_data
|
||||
|
||||
else:
|
||||
print(f" ⚠️ Unexpected event format: {event}")
|
||||
print(f" ⚠️ Unexpected event format (not dict): {type(event)}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"❌ Error in graph streaming: {e}")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user