fix: Update LangGraph event handling to process events as dictionaries instead of tuples

This commit is contained in:
Primakov Alexandr Alexandrovich 2025-10-13 16:14:07 +03:00
parent 6d375fd76d
commit a762d09b3b

View File

@ -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}")