diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e85fbe40d..6d7cec2ed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -47,6 +47,10 @@ jobs: - run: mkdir junit-xml - run: poe test -s --junit-xml=junit-xml/${{ matrix.python }}--${{ matrix.os }}.xml - run: poe test -s --workflow-environment time-skipping --junit-xml=junit-xml/${{ matrix.python }}--${{ matrix.os }}--time-skipping.xml + - run: | + uv sync --group gevent + uv run gevent_async/test/run_combined.py + # This must remain the last step since it downgrades pydantic - name: Uninstall pydantic shell: bash @@ -56,13 +60,6 @@ jobs: uv run pip install pydantic==1.10 poe test -s --junit-xml=junit-xml/${{ matrix.python }}--${{ matrix.os }}--pydantic-v1.xml tests/pydantic_converter_v1/workflow_test.py - # On latest, run gevent test - - name: Gevent test - if: ${{ matrix.python == '3.12' }} - run: | - uv sync --group gevent - uv run gevent_async/test/run_combined.py - - name: Upload junit-xml artifacts uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7 if: always() diff --git a/pyproject.toml b/pyproject.toml index 4d8422610..01908c19c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,9 +45,13 @@ 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.31.0", "google-adk>=2.2.0,<3"] +google-adk = [ + "temporalio[google-adk] >= 1.31.0", + "google-adk>=2.2.0,<3", + "mcp>=1.27.1,<2", +] google-genai = [ - "mcp>=1.0.0", + "mcp>=1.27.1,<2", "temporalio[google-genai,pydantic]>=1.31.0", ] langfuse-tracing = [ @@ -70,6 +74,7 @@ langgraph = [ "temporalio[langgraph,langsmith]>=1.31.0", ] litellm = ["litellm>=1.85.0,<2"] +llm-stream = ["openai>=1.4.0"] nexus = ["nexus-rpc>=1.1.0,<2"] open-telemetry = [ "temporalio[opentelemetry]", diff --git a/tests/google_genai/mcp_test.py b/tests/google_genai/mcp_test.py index e5913ad1c..6b9e00c0f 100644 --- a/tests/google_genai/mcp_test.py +++ b/tests/google_genai/mcp_test.py @@ -17,11 +17,10 @@ ) from temporalio.worker import Worker +import google_genai.mcp as google_genai_mcp from google_genai.mcp.workflow import McpWorkflow -ECHO_SERVER = str( - Path(__file__).parents[2] / "google_genai" / "mcp" / "echo_mcp_server.py" -) +ECHO_SERVER = str(Path(google_genai_mcp.__file__).parent / "echo_mcp_server.py") @asynccontextmanager diff --git a/tests/activity_sticky_queues/__init__.py b/tests/hello_nexus/__init__.py similarity index 100% rename from tests/activity_sticky_queues/__init__.py rename to tests/hello_nexus/__init__.py diff --git a/tests/message_passing/__init__.py b/tests/message_passing/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/message_passing/introduction/__init__.py b/tests/message_passing/introduction/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/message_passing/lazy_initialization/__init__.py b/tests/message_passing/lazy_initialization/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/message_passing/safe_message_handlers/__init__.py b/tests/message_passing/safe_message_handlers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/message_passing/waiting_for_handlers/__init__.py b/tests/message_passing/waiting_for_handlers/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/message_passing/waiting_for_handlers_and_compensation/__init__.py b/tests/message_passing/waiting_for_handlers_and_compensation/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/nexus_messaging/__init__.py b/tests/nexus_messaging/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/polling/__init__.py b/tests/polling/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/sentry/__init__.py b/tests/sentry/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/worker_specific_task_queues/__init__.py b/tests/worker_specific_task_queues/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/activity_sticky_queues/activity_sticky_queues_activity_test.py b/tests/worker_specific_task_queues/activity_test.py similarity index 100% rename from tests/activity_sticky_queues/activity_sticky_queues_activity_test.py rename to tests/worker_specific_task_queues/activity_test.py diff --git a/tests/activity_sticky_queues/activity_sticky_worker_workflow_test.py b/tests/worker_specific_task_queues/workflow_test.py similarity index 100% rename from tests/activity_sticky_queues/activity_sticky_worker_workflow_test.py rename to tests/worker_specific_task_queues/workflow_test.py diff --git a/uv.lock b/uv.lock index 202bb9448..197cfb64b 100644 --- a/uv.lock +++ b/uv.lock @@ -1095,7 +1095,7 @@ wheels = [ [[package]] name = "google-adk" -version = "2.6.2" +version = "2.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiohttp" }, @@ -1124,9 +1124,9 @@ dependencies = [ { name = "watchdog" }, { name = "websockets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f9/39/d9512c13102d20dd32e4c36b8af3918583a2a1ae4e1f062dec01f648bb59/google_adk-2.6.2.tar.gz", hash = "sha256:e95eee1e18811078a3478e8b4a57922dd8eff0fa4c465b864f0f6174c04bfad8", size = 3721236, upload-time = "2026-08-04T01:20:22.206Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/5a/a8a1fd24f8bfdbd64e54e1ae954ddb272d1debc61a7a69ce4a8277c70e32/google_adk-2.6.3.tar.gz", hash = "sha256:a5f290ead5f8893ad3aaf3c7a0053893624c82ff5c447c90800904f633a8c72d", size = 3721520, upload-time = "2026-08-07T21:18:44.149Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/6f/8bde13dff964e96f2351c5aab0fc8a2ce69a16e1adeaed0c5558331b1f27/google_adk-2.6.2-py3-none-any.whl", hash = "sha256:59908032fa10ba0249aad12fb571d5f5cacb24f1c85e63a6eaec45c7c3ed01f1", size = 4305118, upload-time = "2026-08-04T01:20:20.307Z" }, + { url = "https://files.pythonhosted.org/packages/e4/37/bab5ae6d5ac57a04bfae128f755c56e2d878a7d9dcdbd461282baf19344a/google_adk-2.6.3-py3-none-any.whl", hash = "sha256:3c53fc7885bbc00f98fe90e30474ad7ef7d1ccdc4dd7aa0be154721e61295f04", size = 4305269, upload-time = "2026-08-07T21:18:41.71Z" }, ] [[package]] @@ -2284,7 +2284,7 @@ wheels = [ [[package]] name = "mcp" -version = "1.27.1" +version = "1.29.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio" }, @@ -2302,9 +2302,9 @@ dependencies = [ { name = "typing-inspection" }, { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/38/83/d1efe7c2980d8a3afa476f4e3d42d53dd54c0ab94c27bee5d755b45c8b73/mcp-1.27.1.tar.gz", hash = "sha256:0f47e1820f8f8f941466b39749eb1d1839a04caddca2bc60e9d46e8a99914924", size = 608458, upload-time = "2026-05-08T16:50:12.601Z" } +sdist = { url = "https://files.pythonhosted.org/packages/30/d3/f9acc21dfc886e4f78e2add1a47db46ce16884346afde53f8a064c02c891/mcp-1.29.0.tar.gz", hash = "sha256:52d01f334de1868cc3bb2d6604931126a67631f99a6c5d3b82ba47290315ec36", size = 643148, upload-time = "2026-07-28T13:41:41.939Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/73/42d9596facebdb533b7f0b86c1b0364ef350d1f8ba78b1052e8a58b48b65/mcp-1.27.1-py3-none-any.whl", hash = "sha256:1af3c4203b329430fde7a87b4fcb6392a041f5cb851fd68fc674016ab4e7c06f", size = 216260, upload-time = "2026-05-08T16:50:10.547Z" }, + { url = "https://files.pythonhosted.org/packages/01/c8/248b201f6d753d69fd5d6506011abbb35a946d9142b2ae311a948fd0be3d/mcp-1.29.0-py3-none-any.whl", hash = "sha256:f5a075bb611f23d6f4d080c6a1699fa62772eebc562ba9e66b306ddde1c755f7", size = 223436, upload-time = "2026-07-28T13:41:40.337Z" }, ] [[package]] @@ -4575,6 +4575,7 @@ gevent = [ ] google-adk = [ { name = "google-adk" }, + { name = "mcp" }, { name = "temporalio", extra = ["google-adk"] }, ] google-genai = [ @@ -4606,6 +4607,9 @@ langsmith-tracing = [ litellm = [ { name = "litellm" }, ] +llm-stream = [ + { name = "openai" }, +] nexus = [ { name = "nexus-rpc" }, ] @@ -4655,7 +4659,7 @@ deepagents = [ { name = "langchain", marker = "python_full_version >= '3.11'", specifier = ">=1.3.11,<2" }, { name = "langchain-anthropic", marker = "python_full_version >= '3.11'", specifier = ">=1.4.7,<2" }, { name = "langchain-core", marker = "python_full_version >= '3.11'", specifier = ">=1.4.8,<2" }, - { name = "temporalio", extras = ["langsmith"], marker = "python_full_version >= '3.11'", specifier = ">=1.30.0" }, + { name = "temporalio", extras = ["langsmith"], marker = "python_full_version >= '3.11'", specifier = ">=1.31.0" }, ] dev = [ { name = "fakeredis", specifier = ">=2,<3" }, @@ -4688,10 +4692,11 @@ 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 = ">=2.2.0,<3" }, + { name = "mcp", specifier = ">=1.27.1,<2" }, { name = "temporalio", extras = ["google-adk"], specifier = ">=1.31.0" }, ] google-genai = [ - { name = "mcp", specifier = ">=1.0.0" }, + { name = "mcp", specifier = ">=1.27.1,<2" }, { name = "temporalio", extras = ["google-genai", "pydantic"], specifier = ">=1.31.0" }, ] langfuse-tracing = [ @@ -4713,6 +4718,7 @@ langsmith-tracing = [ { name = "temporalio", extras = ["pydantic", "langsmith"], specifier = ">=1.31.0" }, ] litellm = [{ name = "litellm", specifier = ">=1.85.0,<2" }] +llm-stream = [{ name = "openai", specifier = ">=1.4.0" }] nexus = [{ name = "nexus-rpc", specifier = ">=1.1.0,<2" }] open-telemetry = [ { name = "opentelemetry-exporter-otlp-proto-grpc" },