diff --git a/temporalio/contrib/openai_agents/_openai_runner.py b/temporalio/contrib/openai_agents/_openai_runner.py index fb07b6062..c05026983 100644 --- a/temporalio/contrib/openai_agents/_openai_runner.py +++ b/temporalio/contrib/openai_agents/_openai_runner.py @@ -7,6 +7,7 @@ RunConfig, RunResult, RunResultStreaming, + SQLiteSession, TContext, Tool, TResponseInputItem, @@ -61,6 +62,10 @@ async def run( hooks = kwargs.get("hooks") run_config = kwargs.get("run_config") previous_response_id = kwargs.get("previous_response_id") + session = kwargs.get("session") + + if isinstance(session, SQLiteSession): + raise ValueError("Temporal workflows don't support SQLite sessions.") if run_config is None: run_config = RunConfig() @@ -85,6 +90,7 @@ async def run( hooks=hooks, run_config=updated_run_config, previous_response_id=previous_response_id, + session=session, ) def run_sync( diff --git a/tests/contrib/openai_agents/test_openai.py b/tests/contrib/openai_agents/test_openai.py index 7147d3ca6..6937130b2 100644 --- a/tests/contrib/openai_agents/test_openai.py +++ b/tests/contrib/openai_agents/test_openai.py @@ -26,6 +26,7 @@ OutputGuardrailTripwireTriggered, RunContextWrapper, Runner, + SQLiteSession, Tool, TResponseInputItem, Usage, @@ -74,7 +75,7 @@ from tests.contrib.openai_agents.research_agents.research_manager import ( ResearchManager, ) -from tests.helpers import new_worker +from tests.helpers import assert_task_fail_eventually, new_worker from tests.helpers.nexus import create_nexus_endpoint, make_nexus_endpoint_name @@ -1978,3 +1979,44 @@ def test_summary_extraction(): ) ) assert _extract_summary(input) == "Second message" + + +@workflow.defn +class SessionWorkflow: + @workflow.run + async def run(self) -> None: + agent: Agent = Agent( + name="Assistant", + instructions="You are a helpful assistant.", + ) + await Runner.run( + agent, + "My phone number is 650-123-4567. Where do you think I live?", + session=SQLiteSession(session_id="id"), + ) + + +async def test_session(client: Client): + new_config = client.config() + new_config["plugins"] = [ + openai_agents.OpenAIAgentsPlugin( + model_provider=TestModelProvider(TestHelloModel()), + ) + ] + client = Client(**new_config) + + async with new_worker( + client, + SessionWorkflow, + ) as worker: + workflow_handle = await client.start_workflow( + SessionWorkflow.run, + id=f"session-{uuid.uuid4()}", + task_queue=worker.task_queue, + execution_timeout=timedelta(seconds=1.0), + retry_policy=RetryPolicy(maximum_attempts=1), + ) + await assert_task_fail_eventually( + workflow_handle, + message_contains="Temporal workflows don't support SQLite sessions", + )