Skip to content

Commit 7a78844

Browse files
committed
feat: add previous_response_id parameter to OpenAI module
Add support for previous_response_id parameter to all OpenAI module run methods, following the same implementation pattern as the existing max_turns parameter. Changes: - Add previous_response_id parameter to all 4 OpenAI module run methods - Update parameter classes in openai_activities.py to inherit the parameter - Implement conditional logic in service layer to handle parameter combinations - Add comprehensive unit test to verify parameter passing behavior The parameter flows through the following layers: Module → Activity → Service → Runner.run This enables conversation continuity by allowing users to specify a previous response ID when running OpenAI agents.
1 parent 9d22445 commit 7a78844

File tree

4 files changed

+229
-225
lines changed

4 files changed

+229
-225
lines changed

src/agentex/lib/adk/providers/_modules/openai.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,13 @@ async def run_agent(
8181
tools: list[Tool] | None = None,
8282
output_type: type[Any] | AgentOutputSchemaBase | None = None,
8383
tool_use_behavior: (
84-
Literal["run_llm_again", "stop_on_first_tool"]
85-
| StopAtTools
86-
| ToolsToFinalOutputFunction
84+
Literal["run_llm_again", "stop_on_first_tool"] | StopAtTools | ToolsToFinalOutputFunction
8785
) = "run_llm_again",
8886
mcp_timeout_seconds: int | None = None,
8987
input_guardrails: list[InputGuardrail] | None = None,
9088
output_guardrails: list[OutputGuardrail] | None = None,
9189
max_turns: int | None = None,
90+
previous_response_id: str | None = None,
9291
) -> SerializableRunResult | RunResult:
9392
"""
9493
Run an agent without streaming or TaskMessage creation.
@@ -116,6 +115,7 @@ async def run_agent(
116115
input_guardrails: Optional list of input guardrails to run on initial user input.
117116
output_guardrails: Optional list of output guardrails to run on final agent output.
118117
max_turns: Maximum number of turns the agent can take. Uses Runner's default if None.
118+
previous_response_id: Optional previous response ID for conversation continuity.
119119
120120
Returns:
121121
Union[SerializableRunResult, RunResult]: SerializableRunResult when in Temporal, RunResult otherwise.
@@ -139,6 +139,7 @@ async def run_agent(
139139
input_guardrails=input_guardrails,
140140
output_guardrails=output_guardrails,
141141
max_turns=max_turns,
142+
previous_response_id=previous_response_id,
142143
)
143144
return await ActivityHelpers.execute_activity(
144145
activity_name=OpenAIActivityName.RUN_AGENT,
@@ -167,6 +168,7 @@ async def run_agent(
167168
input_guardrails=input_guardrails,
168169
output_guardrails=output_guardrails,
169170
max_turns=max_turns,
171+
previous_response_id=previous_response_id,
170172
)
171173

172174
async def run_agent_auto_send(
@@ -188,14 +190,13 @@ async def run_agent_auto_send(
188190
tools: list[Tool] | None = None,
189191
output_type: type[Any] | AgentOutputSchemaBase | None = None,
190192
tool_use_behavior: (
191-
Literal["run_llm_again", "stop_on_first_tool"]
192-
| StopAtTools
193-
| ToolsToFinalOutputFunction
193+
Literal["run_llm_again", "stop_on_first_tool"] | StopAtTools | ToolsToFinalOutputFunction
194194
) = "run_llm_again",
195195
mcp_timeout_seconds: int | None = None,
196196
input_guardrails: list[InputGuardrail] | None = None,
197197
output_guardrails: list[OutputGuardrail] | None = None,
198198
max_turns: int | None = None,
199+
previous_response_id: str | None = None,
199200
) -> SerializableRunResult | RunResult:
200201
"""
201202
Run an agent with automatic TaskMessage creation.
@@ -222,6 +223,7 @@ async def run_agent_auto_send(
222223
input_guardrails: Optional list of input guardrails to run on initial user input.
223224
output_guardrails: Optional list of output guardrails to run on final agent output.
224225
max_turns: Maximum number of turns the agent can take. Uses Runner's default if None.
226+
previous_response_id: Optional previous response ID for conversation continuity.
225227
226228
Returns:
227229
Union[SerializableRunResult, RunResult]: SerializableRunResult when in Temporal, RunResult otherwise.
@@ -246,6 +248,7 @@ async def run_agent_auto_send(
246248
input_guardrails=input_guardrails,
247249
output_guardrails=output_guardrails,
248250
max_turns=max_turns,
251+
previous_response_id=previous_response_id,
249252
)
250253
return await ActivityHelpers.execute_activity(
251254
activity_name=OpenAIActivityName.RUN_AGENT_AUTO_SEND,
@@ -275,6 +278,7 @@ async def run_agent_auto_send(
275278
input_guardrails=input_guardrails,
276279
output_guardrails=output_guardrails,
277280
max_turns=max_turns,
281+
previous_response_id=previous_response_id,
278282
)
279283

280284
async def run_agent_streamed(
@@ -292,14 +296,13 @@ async def run_agent_streamed(
292296
tools: list[Tool] | None = None,
293297
output_type: type[Any] | AgentOutputSchemaBase | None = None,
294298
tool_use_behavior: (
295-
Literal["run_llm_again", "stop_on_first_tool"]
296-
| StopAtTools
297-
| ToolsToFinalOutputFunction
299+
Literal["run_llm_again", "stop_on_first_tool"] | StopAtTools | ToolsToFinalOutputFunction
298300
) = "run_llm_again",
299301
mcp_timeout_seconds: int | None = None,
300302
input_guardrails: list[InputGuardrail] | None = None,
301303
output_guardrails: list[OutputGuardrail] | None = None,
302304
max_turns: int | None = None,
305+
previous_response_id: str | None = None,
303306
) -> RunResultStreaming:
304307
"""
305308
Run an agent with streaming enabled but no TaskMessage creation.
@@ -330,6 +333,7 @@ async def run_agent_streamed(
330333
input_guardrails: Optional list of input guardrails to run on initial user input.
331334
output_guardrails: Optional list of output guardrails to run on final agent output.
332335
max_turns: Maximum number of turns the agent can take. Uses Runner's default if None.
336+
previous_response_id: Optional previous response ID for conversation continuity.
333337
334338
Returns:
335339
RunResultStreaming: The result of the agent run with streaming.
@@ -363,6 +367,7 @@ async def run_agent_streamed(
363367
input_guardrails=input_guardrails,
364368
output_guardrails=output_guardrails,
365369
max_turns=max_turns,
370+
previous_response_id=previous_response_id,
366371
)
367372

368373
async def run_agent_streamed_auto_send(
@@ -384,14 +389,13 @@ async def run_agent_streamed_auto_send(
384389
tools: list[Tool] | None = None,
385390
output_type: type[Any] | AgentOutputSchemaBase | None = None,
386391
tool_use_behavior: (
387-
Literal["run_llm_again", "stop_on_first_tool"]
388-
| StopAtTools
389-
| ToolsToFinalOutputFunction
392+
Literal["run_llm_again", "stop_on_first_tool"] | StopAtTools | ToolsToFinalOutputFunction
390393
) = "run_llm_again",
391394
mcp_timeout_seconds: int | None = None,
392395
input_guardrails: list[InputGuardrail] | None = None,
393396
output_guardrails: list[OutputGuardrail] | None = None,
394397
max_turns: int | None = None,
398+
previous_response_id: str | None = None,
395399
) -> SerializableRunResultStreaming | RunResultStreaming:
396400
"""
397401
Run an agent with streaming enabled and automatic TaskMessage creation.
@@ -418,6 +422,7 @@ async def run_agent_streamed_auto_send(
418422
tool_use_behavior: Optional tool use behavior.
419423
mcp_timeout_seconds: Optional param to set the timeout threshold for the MCP servers. Defaults to 5 seconds.
420424
max_turns: Maximum number of turns the agent can take. Uses Runner's default if None.
425+
previous_response_id: Optional previous response ID for conversation continuity.
421426
422427
Returns:
423428
Union[SerializableRunResultStreaming, RunResultStreaming]: SerializableRunResultStreaming when in Temporal, RunResultStreaming otherwise.
@@ -441,7 +446,7 @@ async def run_agent_streamed_auto_send(
441446
mcp_timeout_seconds=mcp_timeout_seconds,
442447
input_guardrails=input_guardrails,
443448
output_guardrails=output_guardrails,
444-
max_turns=max_turns
449+
max_turns=max_turns,
445450
)
446451
return await ActivityHelpers.execute_activity(
447452
activity_name=OpenAIActivityName.RUN_AGENT_STREAMED_AUTO_SEND,
@@ -471,4 +476,5 @@ async def run_agent_streamed_auto_send(
471476
input_guardrails=input_guardrails,
472477
output_guardrails=output_guardrails,
473478
max_turns=max_turns,
479+
previous_response_id=previous_response_id,
474480
)

0 commit comments

Comments
 (0)