feat(workers): Implement input/output mapping for Data Analyst subgraph

This commit is contained in:
Yunxiao Xu
2026-02-23 05:02:13 -08:00
parent cb045504d1
commit 013208b929
2 changed files with 92 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
from langchain_core.messages import HumanMessage, AIMessage
from ea_chatbot.graph.state import AgentState
from ea_chatbot.graph.workers.data_analyst.mapping import (
prepare_worker_input,
merge_worker_output
)
from ea_chatbot.graph.workers.data_analyst.state import WorkerState
def test_prepare_worker_input():
"""Verify that we correctly map global state to worker input."""
global_state = AgentState(
messages=[HumanMessage(content="global message")],
question="original question",
checklist=[{"task": "Worker Task", "status": "pending"}],
current_step=0,
vfs={"old.txt": "old data"},
plots=[],
dfs={},
next_action="test",
iterations=0
)
worker_input = prepare_worker_input(global_state)
assert worker_input["task"] == "Worker Task"
assert "old.txt" in worker_input["vfs_state"]
# Internal worker messages should start fresh or with the task
assert len(worker_input["messages"]) == 1
assert worker_input["messages"][0].content == "Worker Task"
def test_merge_worker_output():
"""Verify that we correctly merge worker results back to global state."""
worker_state = WorkerState(
messages=[HumanMessage(content="internal"), AIMessage(content="summary")],
task="Worker Task",
result="Finished analysis",
plots=["plot1"],
vfs_state={"new.txt": "new data"},
iterations=2
)
updates = merge_worker_output(worker_state)
# We expect the 'result' to be added as an AI message to global history
assert len(updates["messages"]) == 1
assert updates["messages"][0].content == "Finished analysis"
# VFS should be updated
assert "new.txt" in updates["vfs"]
# Plots should be bubbled up
assert len(updates["plots"]) == 1
assert updates["plots"][0] == "plot1"