fix: Correct LangGraph event handling - events are tuples not dicts + add test scripts

This commit is contained in:
Primakov Alexandr Alexandrovich
2025-10-13 13:46:35 +03:00
parent c9dc486011
commit cfba28f913
4 changed files with 674 additions and 20 deletions

View File

@@ -555,28 +555,44 @@ class ReviewerAgent:
stream_mode=["updates"]
):
event_count += 1
print(f"📨 Event #{event_count} received from graph: {type(event)}")
print(f" Event content: {event if not isinstance(event, dict) or len(str(event)) < 200 else 'dict with keys: ' + str(list(event.keys()))}")
print(f"📨 Event #{event_count} received from graph")
print(f" Type: {type(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 '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'}")
# Handle different event types
if isinstance(event, dict):
# Node updates
for node_name, node_data in event.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,
"data": node_data if not isinstance(node_data, dict) else {"status": "processing"}
})
# Store final state
if isinstance(node_data, dict):
final_state = node_data
else:
print(f" ⚠️ Unexpected event type: {type(event)}")
print(f" ⚠️ Unexpected event format: {event}")
except Exception as e:
print(f"❌ Error in graph streaming: {e}")