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:
|
try:
|
||||||
async for event in self.graph.astream(
|
async for event in self.graph.astream(
|
||||||
initial_state,
|
initial_state,
|
||||||
stream_mode=["updates", "messages"]
|
stream_mode=["updates"]
|
||||||
):
|
):
|
||||||
event_count += 1
|
event_count += 1
|
||||||
print(f"📨 Event #{event_count} received from graph")
|
print(f"📨 Event #{event_count} received from graph")
|
||||||
print(f" Type: {type(event)}")
|
print(f" Type: {type(event)}")
|
||||||
|
print(f" Event content: {event}")
|
||||||
|
|
||||||
# LangGraph returns events as tuples: (event_type, data)
|
# LangGraph returns events as dict: {node_name: node_output}
|
||||||
if isinstance(event, tuple) and len(event) >= 2:
|
if isinstance(event, dict):
|
||||||
event_type, event_data = event[0], event[1]
|
for node_name, node_data in event.items():
|
||||||
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}")
|
print(f" 🔔 Node update: {node_name}")
|
||||||
|
print(f" 🔔 Node data type: {type(node_data)}")
|
||||||
|
|
||||||
if on_event:
|
if on_event:
|
||||||
print(f" 📤 Sending event to callback for node: {node_name}")
|
print(f" 📤 Sending event to callback for node: {node_name}")
|
||||||
await on_event({
|
await on_event({
|
||||||
"type": "agent_step",
|
"type": "agent_step",
|
||||||
"step": node_name,
|
"step": node_name,
|
||||||
"message": f"Шаг: {node_name}"
|
"message": f"Шаг: {node_name}",
|
||||||
|
"data": {
|
||||||
|
"status": node_data.get("status") if isinstance(node_data, dict) else None
|
||||||
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
# Store final state
|
# Store final state
|
||||||
if isinstance(node_data, dict):
|
if isinstance(node_data, dict):
|
||||||
final_state = node_data
|
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:
|
else:
|
||||||
msg_content = str(msg)
|
print(f" ⚠️ Unexpected event format (not dict): {type(event)}")
|
||||||
|
|
||||||
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'}")
|
|
||||||
|
|
||||||
else:
|
|
||||||
print(f" ⚠️ Unexpected event format: {event}")
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"❌ Error in graph streaming: {e}")
|
print(f"❌ Error in graph streaming: {e}")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user