From d2221d9ddcd35ba589e227d4234d3ea42e1df6f7 Mon Sep 17 00:00:00 2001 From: Quinn Klassen Date: Thu, 9 Jul 2026 09:46:23 -0700 Subject: [PATCH 1/3] Update SANO dev server --- README.md | 1 + nexus_standalone_operations/README.md | 4 ++-- tests/conftest.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2111fa005..d39428dc7 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,7 @@ Some examples require extra dependencies. See each sample's directory for specif * [gevent_async](gevent_async) - Combine gevent and Temporal. * [google_adk_agents](google_adk_agents) - Run Google ADK agents as durable Temporal workflows (model calls, tools, multi-agent, MCP, streaming). * [hello_nexus](hello_nexus) - Define a Nexus service, implement operation handlers, and call them from a workflow. +* [hello_standalone_nexus](hello_standalone_nexus) - Use Nexus Operations without using a workflow. * [hello_standalone_activity](hello_standalone_activity) - Use activities without using a workflow. * [lambda_worker](lambda_worker) - Run a Temporal Worker inside an AWS Lambda function. * [langgraph_plugin](langgraph_plugin) - Run LangGraph workflows as durable Temporal workflows (Graph API and Functional API). diff --git a/nexus_standalone_operations/README.md b/nexus_standalone_operations/README.md index 60ca7a935..ddddadf45 100644 --- a/nexus_standalone_operations/README.md +++ b/nexus_standalone_operations/README.md @@ -7,7 +7,7 @@ without wrapping them in a workflow. It shows both synchronous and asynchronous All APIs are experimental and may be subject to backwards-incompatible changes. -Standalone Nexus operations require a server version that supports this feature. Use the dev server build at https://github.com/temporalio/cli/releases/tag/v1.7.2-standalone-nexus-operations. +Standalone Nexus operations require a server version that supports this feature. Use the dev server build at https://github.com/temporalio/cli/releases/tag/v1.7.3-standalone-nexus-operations. ### Sample directory structure @@ -19,7 +19,7 @@ Standalone Nexus operations require a server version that supports this feature. ### Instructions -Run the [Temporal dev server build that supports standalone Nexus operations](https://github.com/temporalio/cli/releases/tag/v1.7.2-standalone-nexus-operations). +Run the [Temporal dev server build that supports standalone Nexus operations](https://github.com/temporalio/cli/releases/tag/v1.7.3-standalone-nexus-operations). (If you are going to run locally, you will want to start it in another terminal; this command is blocking and runs until it receives a SIGINT (Ctrl + C) command.) Start a Temporal dev server with the dynamic config flags required for standalone Nexus operations: diff --git a/tests/conftest.py b/tests/conftest.py index 3d054e71a..8009ac6b9 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -42,7 +42,7 @@ async def env(request) -> AsyncGenerator[WorkflowEnvironment, None]: env_type = request.config.getoption("--workflow-environment") if env_type == "local": env = await WorkflowEnvironment.start_local( - dev_server_download_version="v1.7.2-standalone-nexus-operations", + dev_server_download_version="v1.7.3-standalone-nexus-operations", dev_server_extra_args=[ "--dynamic-config-value", "frontend.enableExecuteMultiOperation=true", From 8fdd35bbab18ea63c38bd26c95f402aaeb430e8c Mon Sep 17 00:00:00 2001 From: Quinn Klassen Date: Thu, 9 Jul 2026 09:57:55 -0700 Subject: [PATCH 2/3] Update python SDK version --- pyproject.toml | 12 ++++++------ uv.lock | 45 ++++++++++++++++----------------------------- 2 files changed, 22 insertions(+), 35 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 3ccff7c62..e8f3ebd87 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = [{ name = "Temporal Technologies Inc", email = "sdk@temporal.io" }] requires-python = ">=3.10" readme = "README.md" license = "MIT" -dependencies = ["temporalio>=1.28.0,<2", "protobuf>=5.29.6,<6"] +dependencies = ["temporalio>=1.30.0,<2", "protobuf>=5.29.6,<6"] [project.urls] Homepage = "https://github.com/temporalio/samples-python" @@ -38,17 +38,17 @@ external-storage = [ ] external-storage-redis = ["redis>=5.0.0,<8"] gevent = ["gevent>=25.4.2 ; python_version >= '3.8'"] -google-adk = ["temporalio[google-adk] >= 1.28.0", "google-adk>=1.27.0,<2"] +google-adk = ["temporalio[google-adk] >= 1.30.0", "google-adk>=1.27.0,<2"] langsmith-tracing = [ "openai>=1.4.0", "langsmith>=0.7.0", - "temporalio[pydantic,langsmith]>=1.28.0", + "temporalio[pydantic,langsmith]>=1.30.0", ] langgraph = [ "langgraph>=1.1.3", "langchain>=0.3.0", "langchain-anthropic>=0.3.0", - "temporalio[langgraph,langsmith]>=1.28.0", + "temporalio[langgraph,langsmith]>=1.30.0", ] nexus = ["nexus-rpc>=1.1.0,<2"] open-telemetry = [ @@ -57,7 +57,7 @@ open-telemetry = [ ] openai-agents = [ "openai-agents[litellm] >= 0.14.1", - "temporalio[openai-agents,opentelemetry] >= 1.28.0", + "temporalio[openai-agents,opentelemetry] >= 1.30.0", "requests>=2.32.0,<3", ] pydantic-converter = ["pydantic>=2.10.6,<3"] @@ -67,7 +67,7 @@ strands-agents = [ "strands-agents-tools>=0.5.2", "mcp>=1.0.0", "boto3>=1.34.92,<2", - "temporalio[strands-agents,pydantic]>=1.28.0", + "temporalio[strands-agents,pydantic]>=1.30.0", ] trio-async = ["trio>=0.28.0,<0.29", "trio-asyncio>=0.15.0,<0.16"] cloud-export-to-parquet = [ diff --git a/uv.lock b/uv.lock index 8d95e3372..6063f75a3 100644 --- a/uv.lock +++ b/uv.lock @@ -3077,7 +3077,7 @@ wheels = [ [[package]] name = "openai-agents" -version = "0.17.3" +version = "0.18.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "griffelib" }, @@ -3085,13 +3085,12 @@ dependencies = [ { name = "openai" }, { name = "pydantic" }, { name = "requests" }, - { name = "types-requests" }, { name = "typing-extensions" }, { name = "websockets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fd/16/b79c1849125eb6d19cae98c21ff35caa2e55b5ec8d7a02b354b711917ef7/openai_agents-0.17.3.tar.gz", hash = "sha256:63b6dda6bd4fb51169e2a2cbd5d187a4e5ce823bbd15f965c8ed1d3b89072eec", size = 5406135, upload-time = "2026-05-19T01:28:15.971Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e2/53/80500b9001a9cd06bd1f648b0e8ad074abc41899dce35810dce33dccd519/openai_agents-0.18.0.tar.gz", hash = "sha256:7971c7d2c3f4a1e14f552b288d83c24cca33f45cafa5821b2aaa12b77dbe24d9", size = 5509908, upload-time = "2026-07-07T06:02:35.583Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/80/ec/775a14cfd5f12f4ffe458c7ac9527831093c72e8c1aef682898fc6394106/openai_agents-0.17.3-py3-none-any.whl", hash = "sha256:a048bb0752d40913d18bccf6562f56260b603bb57c972597b6da58f60123f4bd", size = 841541, upload-time = "2026-05-19T01:28:13.334Z" }, + { url = "https://files.pythonhosted.org/packages/04/c4/02a294f7511df2b110368ce36cb1c9132c542e446f04e8d0fde5db35fe53/openai_agents-0.18.0-py3-none-any.whl", hash = "sha256:4126b982b23598073e6e15305c4e515a80c0073e7beeb0895cd43611ea86f1b2", size = 859699, upload-time = "2026-07-07T06:02:33.706Z" }, ] [package.optional-dependencies] @@ -4953,7 +4952,7 @@ wheels = [ [[package]] name = "temporalio" -version = "1.28.0" +version = "1.30.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "nexus-rpc" }, @@ -4962,13 +4961,13 @@ dependencies = [ { name = "types-protobuf" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d3/04/8e7cd6a203ee40700a8d3d34bca6f1da3a6083888fa5654bc05514b633fa/temporalio-1.28.0.tar.gz", hash = "sha256:eb390ee968204a9f8fda91544d6f03497a7614acbfcc9862b5bd08a2d26edb04", size = 2619977, upload-time = "2026-06-04T17:22:07.52Z" } +sdist = { url = "https://files.pythonhosted.org/packages/00/b0/ad8fc3cd7425c6551a637bf23c798e8fdd8eb7a3ec4fee4f46f7678ba8d2/temporalio-1.30.0.tar.gz", hash = "sha256:7c025919511bb465392d547e48ccb85fd560a995db4ebcc82fdb43cddf088e6f", size = 2686876, upload-time = "2026-07-02T21:04:46.713Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/9b/9b260f50a369ed21daad04bc58d31ce47fd7ee640d40ce9eb94115ffc6d5/temporalio-1.28.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:544e48028d83ffda51d6e0cdb1bf27babc868b3f63adb0e1613efcbbaab197a3", size = 14767177, upload-time = "2026-06-04T17:21:55.761Z" }, - { url = "https://files.pythonhosted.org/packages/e7/1f/80d7bde35f723a5871fa0f2aa01d0715a8c0dc610e15943ae0e8b0f50bc6/temporalio-1.28.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:737f3d9c470514ed0e4922ebe00ef4a186c82343e195d26b9c485e0bfcc4f14d", size = 14223876, upload-time = "2026-06-04T17:21:58.344Z" }, - { url = "https://files.pythonhosted.org/packages/34/7e/517cdff2710935105a38b58539c7d4f8959ec6241953d51bf482fedbc721/temporalio-1.28.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8ecc38c2cdae5efe8b127b1cbe726e9c92b10bc506753f1074957984fc6d7d", size = 14473526, upload-time = "2026-06-04T17:22:00.663Z" }, - { url = "https://files.pythonhosted.org/packages/5b/8c/518ec97457e50d67caabc40b44946b7feca0cbce20adb0bb651e7f6a7900/temporalio-1.28.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17a9993342d4ba4ae0c4b37a95e8f2aa488379d0917a637d8fdd5f4332aad3e2", size = 14940291, upload-time = "2026-06-04T17:22:02.939Z" }, - { url = "https://files.pythonhosted.org/packages/d8/79/b7fe353287f15d501145aeff266e565e1fae05cce2875d0fde6ca4397aca/temporalio-1.28.0-cp310-abi3-win_amd64.whl", hash = "sha256:41381cbd68d1206c55750147118de3962bcc79229a61035296f3c0af44a3d006", size = 15245109, upload-time = "2026-06-04T17:22:05.365Z" }, + { url = "https://files.pythonhosted.org/packages/02/39/842fdffe93388dd30ac12a53a698f71cbfb68b3bc938f30f3e5d6a36d4ad/temporalio-1.30.0-cp310-abi3-macosx_10_12_x86_64.whl", hash = "sha256:6773a6b708dee7675fcbb681bf28e48337ce43b8467ceba8f903e78ae68909f8", size = 14520026, upload-time = "2026-07-02T21:04:31.384Z" }, + { url = "https://files.pythonhosted.org/packages/40/f3/a2237d5265eb29de591abeac7610a48616b590a1b923b4919f60ee81adfa/temporalio-1.30.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:4038c3ce2d9acc12fef31dd16ef9be8cc7f721672da5662aa05e3942d0b5c9d1", size = 14018523, upload-time = "2026-07-02T21:04:34.405Z" }, + { url = "https://files.pythonhosted.org/packages/e6/57/dc648d812f4c688bd246a616f0d65c5f03b33675df2effb1b480e1df6d21/temporalio-1.30.0-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:108d1a56e174eabc18add58316084cdead230e239d3df22bbe999d6954986591", size = 14330502, upload-time = "2026-07-02T21:04:37.39Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e1/dbd57de0f5090891850c2ee5490319834a12b704076b11f32a4a149998d4/temporalio-1.30.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47b156138de30c2cd6723d5bfc06a30abcf680344c5481abb31f2a98a9b1f809", size = 14833364, upload-time = "2026-07-02T21:04:40.454Z" }, + { url = "https://files.pythonhosted.org/packages/30/2a/6d41289c11465ba276a8b417f31d2e469f0fe4b8afacd61d5244151c5fce/temporalio-1.30.0-cp310-abi3-win_amd64.whl", hash = "sha256:3adee28d5ec47bd6309a5eeef7b00126373f119bc5c1b058a34de098542f4da7", size = 15181893, upload-time = "2026-07-02T21:04:43.609Z" }, ] [package.optional-dependencies] @@ -5096,7 +5095,7 @@ trio-async = [ [package.metadata] requires-dist = [ { name = "protobuf", specifier = ">=5.29.6,<6" }, - { name = "temporalio", specifier = ">=1.28.0,<2" }, + { name = "temporalio", specifier = ">=1.30.0,<2" }, ] [package.metadata.requires-dev] @@ -5138,18 +5137,18 @@ external-storage-redis = [{ name = "redis", specifier = ">=5.0.0,<8" }] gevent = [{ name = "gevent", marker = "python_full_version >= '3.8'", specifier = ">=25.4.2" }] google-adk = [ { name = "google-adk", specifier = ">=1.27.0,<2" }, - { name = "temporalio", extras = ["google-adk"], specifier = ">=1.28.0" }, + { name = "temporalio", extras = ["google-adk"], specifier = ">=1.30.0" }, ] langgraph = [ { name = "langchain", specifier = ">=0.3.0" }, { name = "langchain-anthropic", specifier = ">=0.3.0" }, { name = "langgraph", specifier = ">=1.1.3" }, - { name = "temporalio", extras = ["langgraph", "langsmith"], specifier = ">=1.28.0" }, + { name = "temporalio", extras = ["langgraph", "langsmith"], specifier = ">=1.30.0" }, ] langsmith-tracing = [ { name = "langsmith", specifier = ">=0.7.0" }, { name = "openai", specifier = ">=1.4.0" }, - { name = "temporalio", extras = ["pydantic", "langsmith"], specifier = ">=1.28.0" }, + { name = "temporalio", extras = ["pydantic", "langsmith"], specifier = ">=1.30.0" }, ] nexus = [{ name = "nexus-rpc", specifier = ">=1.1.0,<2" }] open-telemetry = [ @@ -5159,7 +5158,7 @@ open-telemetry = [ openai-agents = [ { name = "openai-agents", extras = ["litellm"], specifier = ">=0.14.1" }, { name = "requests", specifier = ">=2.32.0,<3" }, - { name = "temporalio", extras = ["openai-agents", "opentelemetry"], specifier = ">=1.28.0" }, + { name = "temporalio", extras = ["openai-agents", "opentelemetry"], specifier = ">=1.30.0" }, ] pydantic-converter = [{ name = "pydantic", specifier = ">=2.10.6,<3" }] sentry = [{ name = "sentry-sdk", specifier = ">=2.13.0" }] @@ -5168,7 +5167,7 @@ strands-agents = [ { name = "mcp", specifier = ">=1.0.0" }, { name = "strands-agents", specifier = ">=1.39.0" }, { name = "strands-agents-tools", specifier = ">=0.5.2" }, - { name = "temporalio", extras = ["strands-agents", "pydantic"], specifier = ">=1.28.0" }, + { name = "temporalio", extras = ["strands-agents", "pydantic"], specifier = ">=1.30.0" }, ] trio-async = [ { name = "trio", specifier = ">=0.28.0,<0.29" }, @@ -5417,18 +5416,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/06/a2/c01db32be2ae7d6a1689972f3c492b149ee4e164b12fdfd9f64b50888215/types_pyyaml-6.0.12.20260518-py3-none-any.whl", hash = "sha256:d2150f75a231c9fe9c7463bd29487d93e60bac90400287351384bc2284eba7cd", size = 20312, upload-time = "2026-05-18T06:01:57.368Z" }, ] -[[package]] -name = "types-requests" -version = "2.33.0.20260518" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e0/01/c5a19253fe1ac159159ddf9a3a07cec8bb5e486ec4d9002ad2821da0e5d2/types_requests-2.33.0.20260518.tar.gz", hash = "sha256:df7bd3bfe0ca8402dfb841e7d9be714bb5578203283d66d7dc4ef69343449a5e", size = 24752, upload-time = "2026-05-18T06:07:37.966Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1c/bc/b139710a3b6018f7fb2b9508b35c8af564e61bf2bf4fa619d088f3e16f85/types_requests-2.33.0.20260518-py3-none-any.whl", hash = "sha256:626d697d1adaaff76e2044dc8c5c051d8f21abc157bdfe204a75558076fe0bf0", size = 21391, upload-time = "2026-05-18T06:07:37.044Z" }, -] - [[package]] name = "typing-extensions" version = "4.15.0" From a68db857d20527c7e9c6a9c5d5d0da1d36000646 Mon Sep 17 00:00:00 2001 From: Quinn Klassen Date: Thu, 9 Jul 2026 10:24:18 -0700 Subject: [PATCH 3/3] Fix agent --- openai_agents/basic/workflows/agent_lifecycle_workflow.py | 2 +- openai_agents/basic/workflows/lifecycle_workflow.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/openai_agents/basic/workflows/agent_lifecycle_workflow.py b/openai_agents/basic/workflows/agent_lifecycle_workflow.py index c016d1500..32bce03b4 100644 --- a/openai_agents/basic/workflows/agent_lifecycle_workflow.py +++ b/openai_agents/basic/workflows/agent_lifecycle_workflow.py @@ -41,7 +41,7 @@ async def on_tool_start( ) async def on_tool_end( - self, context: RunContextWrapper, agent: Agent, tool, result: str + self, context: RunContextWrapper, agent: Agent, tool, result: Any ) -> None: self.event_counter += 1 print( diff --git a/openai_agents/basic/workflows/lifecycle_workflow.py b/openai_agents/basic/workflows/lifecycle_workflow.py index cf72de4a3..ded120a61 100644 --- a/openai_agents/basic/workflows/lifecycle_workflow.py +++ b/openai_agents/basic/workflows/lifecycle_workflow.py @@ -43,7 +43,7 @@ async def on_tool_start( ) async def on_tool_end( - self, context: RunContextWrapper, agent: Agent, tool: Tool, result: str + self, context: RunContextWrapper, agent: Agent, tool: Tool, result: Any ) -> None: self.event_counter += 1 print(