data_agent = create_react_agent(
model=llm,
tools=[get_cards_by_panel_id],
prompt=template,
name="data manager"
)
supervisor_agent = create_react_agent(
model=supervisor_llm,
tools=[],
prompt=supervisor_template,
name="business manager"
)
def call_data_agent(
state: MessagesState,
) -> Command[Literal["supervisor_agent"]]:
response = data_agent.invoke(state)
update = {**response}
return Command(update=update, goto="supervisor_agent")
def manager_node(
state: MessagesState, config
) -> Command[Literal["data_agent", END]]:
response = supervisor_agent.invoke(state)
if response["messages"][-1].content.find("next_agent:data_agent") >= 0 or response["messages"][-1].content.find("next_agent: data_agent") >= 0:
next = "data_agent"
else:
next = END
update = {**response}
return Command(
update=update,
goto=next,
)
builder = StateGraph(MessagesState)
builder.add_node("supervisor_agent", manager_node)
builder.add_node("data_agent", call_data_agent)
builder.add_edge(START, "supervisor_agent")
builder.add_edge("supervisor_agent", END)
graph = builder.compile()
and the tool `get_cards_by_panel_id` is like below:
@tool
def get_cards_by_panel_id(id: int) -> str:
...
my question is like “give me the information of panel which id is 35563“, if I call graph.stream() like this:
for event in graph.stream({"messages": [{"role": "user", "content": user_input}]}, config, context=ctx):
for value in event.values():
print("Assistant:", value["messages"][-1].content)
the tool call is OK( I print the messages of data_agent and the argument in method `get_cards_by_panel_id` the argument is 35563). But if I call graph.stream() like this:
for namespace, data in graph.stream({"messages": [{"role": "user", "content": user_input}]}, config, context=ctx, subgraphs=True, stream_mode="messages"):
if data[0].content:
print(data[0].content, end="", flush=True)
the argument become 3563 (while the tokens produced by llm is 35563, but arguments become 3563).
I want to know how to resolve this problem?
python version: 3.9.22
langgraph version: 0.6.7