From 34ac3141ceb9689c7ba7245746a888658b973820 Mon Sep 17 00:00:00 2001 From: Will Cubitt-Smith Date: Thu, 11 Sep 2025 13:05:26 +0100 Subject: [PATCH 1/2] allow passing response format into deep agent --- src/deepagents/graph.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/deepagents/graph.py b/src/deepagents/graph.py index 636d4f7b..ea5c815a 100644 --- a/src/deepagents/graph.py +++ b/src/deepagents/graph.py @@ -13,7 +13,9 @@ from deepagents.interrupt import create_interrupt_hook, ToolInterruptConfig from langgraph.types import Checkpointer from langgraph.prebuilt import create_react_agent +from pydantic import BaseModel +StructuredResponseSchema = Union[dict, type[BaseModel]] StateSchema = TypeVar("StateSchema", bound=DeepAgentState) StateSchemaType = Type[StateSchema] @@ -41,6 +43,9 @@ def _agent_builder( config_schema: Optional[Type[Any]] = None, checkpointer: Optional[Checkpointer] = None, post_model_hook: Optional[Callable] = None, + response_format: Optional[ + Union[StructuredResponseSchema, tuple[str, StructuredResponseSchema]] + ] = None, is_async: bool = False, ): prompt = instructions + base_prompt @@ -103,6 +108,7 @@ def _agent_builder( post_model_hook=selected_post_model_hook, config_schema=config_schema, checkpointer=checkpointer, + response_format=response_format, ) @@ -117,6 +123,9 @@ def create_deep_agent( config_schema: Optional[Type[Any]] = None, checkpointer: Optional[Checkpointer] = None, post_model_hook: Optional[Callable] = None, + response_format: Optional[ + Union[StructuredResponseSchema, tuple[str, StructuredResponseSchema]] + ] = None, ): """Create a deep agent. @@ -155,6 +164,7 @@ def create_deep_agent( checkpointer=checkpointer, post_model_hook=post_model_hook, is_async=False, + response_format=response_format, ) @@ -169,6 +179,9 @@ def async_create_deep_agent( config_schema: Optional[Type[Any]] = None, checkpointer: Optional[Checkpointer] = None, post_model_hook: Optional[Callable] = None, + response_format: Optional[ + Union[StructuredResponseSchema, tuple[str, StructuredResponseSchema]] + ] = None, ): """Create a deep agent. @@ -206,5 +219,6 @@ def async_create_deep_agent( config_schema=config_schema, checkpointer=checkpointer, post_model_hook=post_model_hook, + response_format=response_format, is_async=True, ) From 7cda2cd0a6e22b926500e4d5ae94ab31cee2d55b Mon Sep 17 00:00:00 2001 From: Will Cubitt-Smith Date: Thu, 11 Sep 2025 13:11:58 +0100 Subject: [PATCH 2/2] add state for the repsonse --- src/deepagents/state.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/deepagents/state.py b/src/deepagents/state.py index 844c899c..8067454f 100644 --- a/src/deepagents/state.py +++ b/src/deepagents/state.py @@ -1,6 +1,5 @@ from langgraph.prebuilt.chat_agent_executor import AgentState -from typing import NotRequired, Annotated -from typing import Literal +from typing import Any, NotRequired, Annotated, Literal from typing_extensions import TypedDict @@ -23,3 +22,4 @@ def file_reducer(l, r): class DeepAgentState(AgentState): todos: NotRequired[list[Todo]] files: Annotated[NotRequired[dict[str, str]], file_reducer] + structured_response: NotRequired[Any]