File tree Expand file tree Collapse file tree 2 files changed +74
-0
lines changed
pydantic_ai_slim/pydantic_ai Expand file tree Collapse file tree 2 files changed +74
-0
lines changed Original file line number Diff line number Diff line change @@ -135,6 +135,36 @@ def result(self) -> AgentRunResult[OutputDataT] | None:
135135 self ._traceparent (required = False ),
136136 )
137137
138+ def all_messages (self ) -> list [_messages .ModelMessage ]:
139+ """Return all messages for the run so far.
140+
141+ Messages from older runs are included.
142+ """
143+ return self .ctx .state .message_history
144+
145+ def all_messages_json (self , * , output_tool_return_content : str | None = None ) -> bytes :
146+ """Return all messages from [`all_messages`][pydantic_ai.agent.AgentRun.all_messages] as JSON bytes.
147+
148+ Returns:
149+ JSON bytes representing the messages.
150+ """
151+ return _messages .ModelMessagesTypeAdapter .dump_json (self .all_messages ())
152+
153+ def new_messages (self ) -> list [_messages .ModelMessage ]:
154+ """Return new messages for the run so far.
155+
156+ Messages from older runs are excluded.
157+ """
158+ return self .all_messages ()[self .ctx .deps .new_message_index :]
159+
160+ def new_messages_json (self ) -> bytes :
161+ """Return new messages from [`new_messages`][pydantic_ai.agent.AgentRun.new_messages] as JSON bytes.
162+
163+ Returns:
164+ JSON bytes representing the new messages.
165+ """
166+ return _messages .ModelMessagesTypeAdapter .dump_json (self .new_messages ())
167+
138168 def __aiter__ (
139169 self ,
140170 ) -> AsyncIterator [_agent_graph .AgentNode [AgentDepsT , OutputDataT ] | End [FinalResult [OutputDataT ]]]:
Original file line number Diff line number Diff line change @@ -5807,3 +5807,47 @@ def test_agent_builtin_tools_runtime_vs_agent_level():
58075807 MCPServerTool (id = 'example' , url = 'https://mcp.example.com/mcp' ),
58085808 ]
58095809 )
5810+
5811+
5812+ async def test_message_history ():
5813+ def llm (messages : list [ModelMessage ], _info : AgentInfo ) -> ModelResponse :
5814+ return ModelResponse (parts = [TextPart ('ok here is text' )])
5815+
5816+ agent = Agent (FunctionModel (llm ))
5817+
5818+ async with agent .iter (
5819+ 'Hello' ,
5820+ message_history = [
5821+ ModelRequest (parts = [UserPromptPart (content = 'Hello' )]),
5822+ ],
5823+ ) as run :
5824+ async for _ in run :
5825+ pass
5826+ assert run .new_messages () == snapshot (
5827+ [
5828+ ModelResponse (
5829+ parts = [TextPart (content = 'ok here is text' )],
5830+ usage = RequestUsage (input_tokens = 52 , output_tokens = 4 ),
5831+ model_name = 'function:llm:' ,
5832+ timestamp = IsDatetime (),
5833+ ),
5834+ ]
5835+ )
5836+ assert run .all_messages () == snapshot (
5837+ [
5838+ ModelRequest (
5839+ parts = [
5840+ UserPromptPart (
5841+ content = 'Hello' ,
5842+ timestamp = IsDatetime (),
5843+ )
5844+ ]
5845+ ),
5846+ ModelResponse (
5847+ parts = [TextPart (content = 'ok here is text' )],
5848+ usage = RequestUsage (input_tokens = 52 , output_tokens = 4 ),
5849+ model_name = 'function:llm:' ,
5850+ timestamp = IsDatetime (),
5851+ ),
5852+ ]
5853+ )
You can’t perform that action at this time.
0 commit comments