diff --git a/libs/langgraph/langgraph/agent/__init__.py b/libs/langgraph/langgraph/agent/__init__.py index 318cce376..cb6f18114 100644 --- a/libs/langgraph/langgraph/agent/__init__.py +++ b/libs/langgraph/langgraph/agent/__init__.py @@ -166,16 +166,24 @@ def _make_model_request_node( messages = [SystemMessage(request.system_prompt)] + request.messages else: messages = request.messages - # prepare model + # call model if request.response_format: - model_ = request.model.with_structured_output(request.response_format) + model_ = request.model.with_structured_output( + request.response_format, include_raw=True + ) + output = model_.invoke( + messages, tools=request.tools, tool_choice=request.tool_choice + ) + return {"messages": output["raw"], "response": output["parsed"]} else: model_ = request.model - # call model - output = model_.invoke( - messages, tools=request.tools, tool_choice=request.tool_choice - ) - return {"messages": output} + output = model_.invoke( + messages, tools=request.tools, tool_choice=request.tool_choice + ) + if state.response is not None: + return {"messages": output, "response": None} + else: + return {"messages": output} return model_request diff --git a/libs/langgraph/langgraph/agent/types.py b/libs/langgraph/langgraph/agent/types.py index c9fd5567d..f7bcd073b 100644 --- a/libs/langgraph/langgraph/agent/types.py +++ b/libs/langgraph/langgraph/agent/types.py @@ -48,6 +48,7 @@ class AgentMiddleware: class AgentUpdate(TypedDict, total=False): messages: Messages + response: dict class AgentGoTo(TypedDict, total=False): @@ -59,3 +60,4 @@ class AgentGoTo(TypedDict, total=False): class AgentState: messages: Annotated[list[AnyMessage], add_messages] goto: Annotated[GoTo | None, EphemeralValue] = None + response: dict | None = None diff --git a/libs/langgraph/tests/test_agent.py b/libs/langgraph/tests/test_agent.py index cc66016b7..9c6ecadcb 100644 --- a/libs/langgraph/tests/test_agent.py +++ b/libs/langgraph/tests/test_agent.py @@ -221,7 +221,7 @@ def test_create_agent_invoke( response_metadata={}, id="ai2", ), - ] + ], } assert calls == [ "NoopSeven.before_model",