diff --git a/deepagents_plugin/README.md b/deepagents_plugin/README.md index 885384a2..96dfcbf0 100644 --- a/deepagents_plugin/README.md +++ b/deepagents_plugin/README.md @@ -40,20 +40,10 @@ one side. uv sync --group deepagents ``` - > The Deep Agents plugin ships as the `temporalio[deepagents]` extra. It - > is merged to `sdk-python` `main` but the current PyPI release (1.31.0) - > predates the merge and does not carry the extra, so the `deepagents` - > group above does not include it yet. Until a release ships the extra - > (> 1.31.0), install it from main: - > - > ```bash - > uv pip install "temporalio[deepagents] @ git+https://github.com/temporalio/sdk-python.git" - > ``` - > - > This builds the SDK from source (including its Rust core), so expect a - > few minutes on first install. Once a release with the extra is on PyPI - > this step goes away: `temporalio[deepagents]` joins the `deepagents` - > group and a plain `uv sync --group deepagents` is all you need. + > The group installs the `temporalio[deepagents]` extra (released in + > `temporalio` 1.32.0) plus the Anthropic provider package. Requires + > Python >= 3.11 — on older interpreters the group resolves to nothing + > and the samples are skipped. 2. Configure a model provider. The samples use `anthropic:claude-sonnet-4-5`, which needs an Anthropic API key: @@ -74,39 +64,32 @@ one side. ## Running a Sample -> **Use `uv run --no-sync`.** Because the plugin is installed out-of-band -> from sdk-python main (see Prerequisites) and is not yet in any dependency -> group, a bare `uv run` or `uv sync` re-syncs the environment to the lockfile -> first and uninstalls it. `--no-sync` runs against the environment as-is. -> (Once a released `temporalio[deepagents]` joins the `deepagents` group, the -> flag becomes unnecessary.) - Most samples have two scripts. Start the Worker first, then the Workflow starter in a separate terminal: ```bash # Terminal 1: start the Worker -uv run --no-sync deepagents_plugin//run_worker.py +uv run deepagents_plugin//run_worker.py # Terminal 2: start the Workflow -uv run --no-sync deepagents_plugin//run_workflow.py +uv run deepagents_plugin//run_workflow.py ``` For example, to run the hello world sample: ```bash # Terminal 1 -uv run --no-sync deepagents_plugin/hello_world/run_worker.py +uv run deepagents_plugin/hello_world/run_worker.py # Terminal 2 -uv run --no-sync deepagents_plugin/hello_world/run_workflow.py +uv run deepagents_plugin/hello_world/run_workflow.py ``` The `langsmith_tracing` sample instead bundles the worker and starter into a single driver: ```bash -uv run --no-sync deepagents_plugin/langsmith_tracing/main.py +uv run deepagents_plugin/langsmith_tracing/main.py ``` ## Key Features Demonstrated diff --git a/deepagents_plugin/continue_as_new/README.md b/deepagents_plugin/continue_as_new/README.md index 7fb5eb38..cbbf1188 100644 --- a/deepagents_plugin/continue_as_new/README.md +++ b/deepagents_plugin/continue_as_new/README.md @@ -29,19 +29,17 @@ checkpointer would do I/O from workflow code and is not replay-safe. ## Running the Sample Prerequisites: Python >= 3.11 with the [suite setup](../README.md#prerequisites) -applied (interim plugin install), an `ANTHROPIC_API_KEY` in your +applied, an `ANTHROPIC_API_KEY` in your environment, and a running Temporal dev server (`temporal server start-dev`). > The experimental plugin is not in the `deepagents` group — install it as shown -> in the [suite README](../README.md#prerequisites) and run with `--no-sync`, or -> a bare `uv run`/`uv sync` re-syncs the environment and uninstalls it. ```bash # Terminal 1 -uv run --no-sync deepagents_plugin/continue_as_new/run_worker.py +uv run deepagents_plugin/continue_as_new/run_worker.py # Terminal 2 -uv run --no-sync deepagents_plugin/continue_as_new/run_workflow.py +uv run deepagents_plugin/continue_as_new/run_workflow.py ``` ## Files diff --git a/deepagents_plugin/filesystem_backend/README.md b/deepagents_plugin/filesystem_backend/README.md index a8e3198f..df2949dc 100644 --- a/deepagents_plugin/filesystem_backend/README.md +++ b/deepagents_plugin/filesystem_backend/README.md @@ -23,19 +23,17 @@ directly. ## Running the Sample Prerequisites: Python >= 3.11 with the [suite setup](../README.md#prerequisites) -applied (interim plugin install), an `ANTHROPIC_API_KEY` in your +applied, an `ANTHROPIC_API_KEY` in your environment, and a running Temporal dev server (`temporal server start-dev`). > The experimental plugin is not in the `deepagents` group — install it as shown -> in the [suite README](../README.md#prerequisites) and run with `--no-sync`, or -> a bare `uv run`/`uv sync` re-syncs the environment and uninstalls it. ```bash # Terminal 1 -uv run --no-sync deepagents_plugin/filesystem_backend/run_worker.py +uv run deepagents_plugin/filesystem_backend/run_worker.py # Terminal 2 -uv run --no-sync deepagents_plugin/filesystem_backend/run_workflow.py +uv run deepagents_plugin/filesystem_backend/run_workflow.py ``` By default the starter creates a temporary scratch directory; set diff --git a/deepagents_plugin/hello_world/README.md b/deepagents_plugin/hello_world/README.md index 16ea9ed2..6e9e4397 100644 --- a/deepagents_plugin/hello_world/README.md +++ b/deepagents_plugin/hello_world/README.md @@ -16,19 +16,17 @@ Temporal-managed retries and timeouts. ## Running the Sample Prerequisites: Python >= 3.11 with the [suite setup](../README.md#prerequisites) -applied (interim plugin install), an `ANTHROPIC_API_KEY` in your +applied, an `ANTHROPIC_API_KEY` in your environment, and a running Temporal dev server (`temporal server start-dev`). > The experimental plugin is not in the `deepagents` group — install it as shown -> in the [suite README](../README.md#prerequisites) and run with `--no-sync`, or -> a bare `uv run`/`uv sync` re-syncs the environment and uninstalls it. ```bash # Terminal 1 -uv run --no-sync deepagents_plugin/hello_world/run_worker.py +uv run deepagents_plugin/hello_world/run_worker.py # Terminal 2 -uv run --no-sync deepagents_plugin/hello_world/run_workflow.py +uv run deepagents_plugin/hello_world/run_workflow.py ``` ## Files diff --git a/deepagents_plugin/human_in_the_loop/README.md b/deepagents_plugin/human_in_the_loop/README.md index c688f7a6..6d7a20d4 100644 --- a/deepagents_plugin/human_in_the_loop/README.md +++ b/deepagents_plugin/human_in_the_loop/README.md @@ -31,19 +31,17 @@ request another guarded tool call. ## Running the Sample Prerequisites: Python >= 3.11 with the [suite setup](../README.md#prerequisites) -applied (interim plugin install), an `ANTHROPIC_API_KEY` in your +applied, an `ANTHROPIC_API_KEY` in your environment, and a running Temporal dev server (`temporal server start-dev`). > The experimental plugin is not in the `deepagents` group — install it as shown -> in the [suite README](../README.md#prerequisites) and run with `--no-sync`, or -> a bare `uv run`/`uv sync` re-syncs the environment and uninstalls it. ```bash # Terminal 1 -uv run --no-sync deepagents_plugin/human_in_the_loop/run_worker.py +uv run deepagents_plugin/human_in_the_loop/run_worker.py # Terminal 2 -uv run --no-sync deepagents_plugin/human_in_the_loop/run_workflow.py +uv run deepagents_plugin/human_in_the_loop/run_workflow.py ``` The starter polls the query until the agent pauses, prints the approval prompt, diff --git a/deepagents_plugin/langsmith_tracing/README.md b/deepagents_plugin/langsmith_tracing/README.md index f9828b62..fe82bdf9 100644 --- a/deepagents_plugin/langsmith_tracing/README.md +++ b/deepagents_plugin/langsmith_tracing/README.md @@ -18,7 +18,7 @@ API keys). ## Running the Sample Prerequisites: Python >= 3.11 with the [suite setup](../README.md#prerequisites) -applied (interim plugin install), a running Temporal dev server +applied, a running Temporal dev server (`temporal server start-dev`), and these environment variables: ```bash @@ -27,13 +27,10 @@ export LANGSMITH_API_KEY=... # or LANGCHAIN_API_KEY export LANGSMITH_TRACING=true ``` -The experimental plugin is not in the `deepagents` group — install it as shown -in the [suite README](../README.md#prerequisites) and run with `--no-sync`, or a -bare `uv run`/`uv sync` re-syncs the environment and uninstalls it. Then run the -single-process driver: +Then run the single-process driver: ```bash -uv run --no-sync deepagents_plugin/langsmith_tracing/main.py +uv run deepagents_plugin/langsmith_tracing/main.py ``` Traces appear in your LangSmith project. diff --git a/deepagents_plugin/react_agent/README.md b/deepagents_plugin/react_agent/README.md index 97edbb80..91fdfca2 100644 --- a/deepagents_plugin/react_agent/README.md +++ b/deepagents_plugin/react_agent/README.md @@ -26,19 +26,17 @@ turn and every tool call is a durable activity. ## Running the Sample Prerequisites: Python >= 3.11 with the [suite setup](../README.md#prerequisites) -applied (interim plugin install), an `ANTHROPIC_API_KEY` in your +applied, an `ANTHROPIC_API_KEY` in your environment, and a running Temporal dev server (`temporal server start-dev`). > The experimental plugin is not in the `deepagents` group — install it as shown -> in the [suite README](../README.md#prerequisites) and run with `--no-sync`, or -> a bare `uv run`/`uv sync` re-syncs the environment and uninstalls it. ```bash # Terminal 1 -uv run --no-sync deepagents_plugin/react_agent/run_worker.py +uv run deepagents_plugin/react_agent/run_worker.py # Terminal 2 -uv run --no-sync deepagents_plugin/react_agent/run_workflow.py +uv run deepagents_plugin/react_agent/run_workflow.py ``` ## Files diff --git a/deepagents_plugin/streaming/README.md b/deepagents_plugin/streaming/README.md index 6697df96..14bf8b32 100644 --- a/deepagents_plugin/streaming/README.md +++ b/deepagents_plugin/streaming/README.md @@ -27,19 +27,17 @@ they arrive. ## Running the Sample Prerequisites: Python >= 3.11 with the [suite setup](../README.md#prerequisites) -applied (interim plugin install), an `ANTHROPIC_API_KEY` in your +applied, an `ANTHROPIC_API_KEY` in your environment, and a running Temporal dev server (`temporal server start-dev`). > The experimental plugin is not in the `deepagents` group — install it as shown -> in the [suite README](../README.md#prerequisites) and run with `--no-sync`, or -> a bare `uv run`/`uv sync` re-syncs the environment and uninstalls it. ```bash # Terminal 1 -uv run --no-sync deepagents_plugin/streaming/run_worker.py +uv run deepagents_plugin/streaming/run_worker.py # Terminal 2 -uv run --no-sync deepagents_plugin/streaming/run_workflow.py +uv run deepagents_plugin/streaming/run_workflow.py ``` ## Files diff --git a/deepagents_plugin/subagents/README.md b/deepagents_plugin/subagents/README.md index c3f8f8a2..0e2be452 100644 --- a/deepagents_plugin/subagents/README.md +++ b/deepagents_plugin/subagents/README.md @@ -21,19 +21,17 @@ researcher's LLM calls run as durable activities. ## Running the Sample Prerequisites: Python >= 3.11 with the [suite setup](../README.md#prerequisites) -applied (interim plugin install), an `ANTHROPIC_API_KEY` in your +applied, an `ANTHROPIC_API_KEY` in your environment, and a running Temporal dev server (`temporal server start-dev`). > The experimental plugin is not in the `deepagents` group — install it as shown -> in the [suite README](../README.md#prerequisites) and run with `--no-sync`, or -> a bare `uv run`/`uv sync` re-syncs the environment and uninstalls it. ```bash # Terminal 1 -uv run --no-sync deepagents_plugin/subagents/run_worker.py +uv run deepagents_plugin/subagents/run_worker.py # Terminal 2 -uv run --no-sync deepagents_plugin/subagents/run_workflow.py +uv run deepagents_plugin/subagents/run_workflow.py ``` ## Files diff --git a/pyproject.toml b/pyproject.toml index 63bbed3d..1f00fdab 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,11 +29,8 @@ dev = [ ] bedrock = ["boto3>=1.34.92,<2"] deepagents = [ - "deepagents>=0.6.12,<0.7 ; python_version >= '3.11'", - "langchain>=1.3.11,<2 ; python_version >= '3.11'", - "langchain-core>=1.4.8,<2 ; python_version >= '3.11'", + "temporalio[deepagents,langsmith]>=1.32.0 ; python_version >= '3.11'", "langchain-anthropic>=1.4.7,<2 ; python_version >= '3.11'", - "temporalio[langsmith]>=1.32.0 ; python_version >= '3.11'", ] dsl = ["pyyaml>=6.0.1,<7", "types-pyyaml>=6.0.12,<7", "dacite>=1.8.1,<2"] encryption = ["cryptography>=38.0.1,<39", "aiohttp>=3.13.3,<4"] diff --git a/tests/deepagents_plugin/conftest.py b/tests/deepagents_plugin/conftest.py index a40e6d16..5392477a 100644 --- a/tests/deepagents_plugin/conftest.py +++ b/tests/deepagents_plugin/conftest.py @@ -1,21 +1,18 @@ """Collection guard for the Deep Agents plugin tests. -The plugin ships as the `temporalio[deepagents]` extra and requires -Python >= 3.11. It is merged to sdk-python main but the current PyPI -release (1.31.0) predates the merge, so the `deepagents` dependency group -cannot install it yet and the canonical `poe test` run -(`uv run --all-groups pytest`) does not have it. These test modules import -`temporalio.contrib.deepagents` at module load, which would raise -`ImportError` during collection whenever the plugin is absent (any -interpreter) or the interpreter is < 3.11 — failing the whole session. +The plugin ships as the `temporalio[deepagents]` extra (temporalio >= +1.32.0), which the `deepagents` dependency group installs on Python >= 3.11. +These test modules import `temporalio.contrib.deepagents` at module load, +which would raise `ImportError` during collection whenever the plugin's +runtime deps are absent — an interpreter below 3.11 (where the group +resolves to nothing) or an environment synced without the group — failing +the whole session. A module-level `pytest.mark.skipif` cannot help here: the mark is only read *after* the module is imported, so the import error fires first. `collect_ignore` is evaluated before any test module is imported, so it skips these files -cleanly when the plugin is unavailable while still running them once it is -installed on 3.11+ (interim: from sdk-python main per the suite README; -after the release that ships the extra: via the `deepagents` group, at which -point this guard becomes a no-op and the suite runs in CI). +cleanly when the plugin is unavailable while still running them on any +3.11+ environment synced with the group — the canonical CI run included. The guard performs a real (guarded) import rather than `find_spec`: the subpackage can exist on disk while its runtime deps do not — e.g. a diff --git a/uv.lock b/uv.lock index 537beabd..d7771773 100644 --- a/uv.lock +++ b/uv.lock @@ -244,14 +244,14 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "anyio", marker = "python_full_version < '3.11'" }, - { name = "distro", marker = "python_full_version < '3.11'" }, - { name = "docstring-parser", marker = "python_full_version < '3.11'" }, - { name = "httpx", marker = "python_full_version < '3.11'" }, - { name = "jiter", marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, - { name = "sniffio", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "anyio" }, + { name = "distro" }, + { name = "docstring-parser" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fb/57/0b758b08cf4606c94d63a997d67a0063f7438efbaf81cfedd0d7c0c69d67/anthropic-0.103.1.tar.gz", hash = "sha256:21c12f4fc0fdd87a2e80d58479cd0af640062b3cfb82bbfa01c7977acd4defeb", size = 848877, upload-time = "2026-05-19T15:43:27.698Z" } wheels = [ @@ -270,14 +270,14 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "anyio", marker = "python_full_version >= '3.11'" }, - { name = "distro", marker = "python_full_version >= '3.11'" }, - { name = "docstring-parser", marker = "python_full_version >= '3.11'" }, - { name = "httpx", marker = "python_full_version >= '3.11'" }, - { name = "jiter", marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, - { name = "sniffio", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, + { name = "anyio" }, + { name = "distro" }, + { name = "docstring-parser" }, + { name = "httpx" }, + { name = "jiter" }, + { name = "pydantic" }, + { name = "sniffio" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0f/ca/3cb2c20ee729736fbd4546d5d8b67e818288529fe70cb7a80dbf80aef70b/anthropic-0.121.0.tar.gz", hash = "sha256:e79d6e08ab3376602fc9a70d4d5ea3540817c76cf7e16658bed790834e1833d6", size = 1013292, upload-time = "2026-08-07T17:11:07.241Z" } wheels = [ @@ -709,12 +709,12 @@ name = "deepagents" version = "0.6.12" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "langchain", version = "1.3.15", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langchain-anthropic", version = "1.5.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langchain-google-genai", marker = "python_full_version >= '3.11'" }, - { name = "langsmith", version = "0.8.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "wcmatch", marker = "python_full_version >= '3.11'" }, + { name = "langchain", version = "1.3.15", source = { registry = "https://pypi.org/simple" } }, + { name = "langchain-anthropic", version = "1.5.5", source = { registry = "https://pypi.org/simple" } }, + { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" } }, + { name = "langchain-google-genai" }, + { name = "langsmith", version = "0.8.18", source = { registry = "https://pypi.org/simple" } }, + { name = "wcmatch" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e0/db/a6acdc72a9e90c3f07ed10de35c951734a02d4facb693bb59684ad368801/deepagents-0.6.12.tar.gz", hash = "sha256:1f281c0bc5a63132f62e2ee345c1dc593b23188da6e23016401f6879fbe54b5f", size = 211364, upload-time = "2026-06-25T17:26:52.775Z" } wheels = [ @@ -767,7 +767,7 @@ name = "exceptiongroup" version = "1.3.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } wheels = [ @@ -1689,9 +1689,9 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "langchain-core", version = "1.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "langgraph", version = "1.2.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, + { name = "langchain-core", version = "1.4.0", source = { registry = "https://pypi.org/simple" } }, + { name = "langgraph", version = "1.2.0", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic" }, ] sdist = { url = "https://files.pythonhosted.org/packages/11/e5/6350e77a9e2764eaafcb2d581cbf0b800f53c6bc98fdf5ebc85f3a931ded/langchain-1.3.1.tar.gz", hash = "sha256:bc283c220233230f48b8e50ab1fbf1b688bcb206d933fa448d40a9b143177f62", size = 581329, upload-time = "2026-05-15T18:14:55.368Z" } wheels = [ @@ -1710,9 +1710,9 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langgraph", version = "1.2.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, + { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" } }, + { name = "langgraph", version = "1.2.11", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6a/1c/b84579174a8e82ed79f4c3e0cd5a7f2323facc5ccd4d1b8390e7d175b663/langchain-1.3.15.tar.gz", hash = "sha256:ab4b775b9703f7e37babe0b325dbbaef25573bda60ecf79f7850bc875f252795", size = 665047, upload-time = "2026-08-11T19:10:52.455Z" } wheels = [ @@ -1727,9 +1727,9 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "anthropic", version = "0.103.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "langchain-core", version = "1.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, + { name = "anthropic", version = "0.103.1", source = { registry = "https://pypi.org/simple" } }, + { name = "langchain-core", version = "1.4.0", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fa/e3/d2f9dec95602524b1cfb4be2747ba5bc38d32501b2a56cb4bcb76e80bb45/langchain_anthropic-1.4.3.tar.gz", hash = "sha256:f8a2442463c0629b1b3110eaeaa56fdbdc87df2a802f8c7f5ecf611eb4874ec8", size = 685219, upload-time = "2026-05-03T17:33:27.118Z" } wheels = [ @@ -1748,9 +1748,9 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "anthropic", version = "0.121.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, + { name = "anthropic", version = "0.121.0", source = { registry = "https://pypi.org/simple" } }, + { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic" }, ] sdist = { url = "https://files.pythonhosted.org/packages/38/ce/5fdff0c55c4711da9d87a4a0a066d0b14b633402dc9d441214cc64889be9/langchain_anthropic-1.5.5.tar.gz", hash = "sha256:e8697f13b93fe95b7c7c17679f5d0143c239a8fcf45c0f498349c54482322dc9", size = 720572, upload-time = "2026-08-11T19:16:38.842Z" } wheels = [ @@ -1765,15 +1765,15 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "jsonpatch", marker = "python_full_version < '3.11'" }, - { name = "langchain-protocol", version = "0.0.15", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "langsmith", version = "0.8.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, - { name = "pyyaml", marker = "python_full_version < '3.11'" }, - { name = "tenacity", marker = "python_full_version < '3.11'" }, - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, - { name = "uuid-utils", marker = "python_full_version < '3.11'" }, + { name = "jsonpatch" }, + { name = "langchain-protocol", version = "0.0.15", source = { registry = "https://pypi.org/simple" } }, + { name = "langsmith", version = "0.8.9", source = { registry = "https://pypi.org/simple" } }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "tenacity" }, + { name = "typing-extensions" }, + { name = "uuid-utils" }, ] sdist = { url = "https://files.pythonhosted.org/packages/59/de/679a53472c25860837e32c0442c962fa86e95317a36460e2c9d5c91b17c2/langchain_core-1.4.0.tar.gz", hash = "sha256:1dc341eed802ed9c117c0df3923c991e5e9e226571e5725c194eeb5bd93d1a7f", size = 920260, upload-time = "2026-05-11T18:42:35.919Z" } wheels = [ @@ -1792,15 +1792,15 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "jsonpatch", marker = "python_full_version >= '3.11'" }, - { name = "langchain-protocol", version = "0.0.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langsmith", version = "0.8.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, - { name = "pyyaml", marker = "python_full_version >= '3.11'" }, - { name = "tenacity", marker = "python_full_version >= '3.11'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, - { name = "uuid-utils", marker = "python_full_version >= '3.11'" }, + { name = "jsonpatch" }, + { name = "langchain-protocol", version = "0.0.18", source = { registry = "https://pypi.org/simple" } }, + { name = "langsmith", version = "0.8.18", source = { registry = "https://pypi.org/simple" } }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "tenacity" }, + { name = "typing-extensions" }, + { name = "uuid-utils" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9e/18/20c3eec05ccf2fff8e553866bec3bb2f92880aea3cb878603e5a854bd5c0/langchain_core-1.5.4.tar.gz", hash = "sha256:aa76104f30b6c7305f292cb2c364e67cb52c321940ae812d7969471dce32a89a", size = 980540, upload-time = "2026-08-11T18:02:52.239Z" } wheels = [ @@ -1812,10 +1812,10 @@ name = "langchain-google-genai" version = "4.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "filetype", marker = "python_full_version >= '3.11'" }, - { name = "google-genai", marker = "python_full_version >= '3.11'" }, - { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, + { name = "filetype" }, + { name = "google-genai" }, + { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic" }, ] sdist = { url = "https://files.pythonhosted.org/packages/11/98/39b62fb50236fc582449beb96e0392d108bd7baac7ac6158d656bfac1561/langchain_google_genai-4.3.3.tar.gz", hash = "sha256:f051b98aaf223cf9092fc27c280dfec63070fc0022dc513640b2da138c9fa2f0", size = 286010, upload-time = "2026-08-10T18:34:26.499Z" } wheels = [ @@ -1830,7 +1830,7 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/4f/24/9777489d6fbbee64af0c8f96d4f840239c408cf694f3394672807dafc490/langchain_protocol-0.0.15.tar.gz", hash = "sha256:9ab2d11ee73944754f10e037e717098d3a6796f0e58afa9cadda6154e7655ade", size = 5862, upload-time = "2026-05-01T22:30:04.748Z" } wheels = [ @@ -1849,7 +1849,7 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "typing-extensions", marker = "python_full_version >= '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d2/59/b5959aea96faa9146e2e49a7a22882b3528c62efafe9a6a95beab30c2305/langchain_protocol-0.0.18.tar.gz", hash = "sha256:ec3e11782f1ed0c9db38e5a9ed01b0e7a0d3fba406faa8aef6594b73c56a63e6", size = 6150, upload-time = "2026-06-18T17:08:26.959Z" } wheels = [ @@ -1864,12 +1864,12 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "langchain-core", version = "1.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "langgraph-checkpoint", marker = "python_full_version < '3.11'" }, - { name = "langgraph-prebuilt", marker = "python_full_version < '3.11'" }, - { name = "langgraph-sdk", version = "0.3.14", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, - { name = "xxhash", marker = "python_full_version < '3.11'" }, + { name = "langchain-core", version = "1.4.0", source = { registry = "https://pypi.org/simple" } }, + { name = "langgraph-checkpoint" }, + { name = "langgraph-prebuilt" }, + { name = "langgraph-sdk", version = "0.3.14", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic" }, + { name = "xxhash" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/61/d5d25e783035aa307d289b37e082258a6061c0fb4caa4a284f3bf1e87169/langgraph-1.2.0.tar.gz", hash = "sha256:4a9baaf62afc5d5f63144a50095140a34b9aa9b7cea695d25326d564775348e7", size = 690248, upload-time = "2026-05-12T03:46:39.164Z" } wheels = [ @@ -1888,12 +1888,12 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langgraph-checkpoint", marker = "python_full_version >= '3.11'" }, - { name = "langgraph-prebuilt", marker = "python_full_version >= '3.11'" }, - { name = "langgraph-sdk", version = "0.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, - { name = "xxhash", marker = "python_full_version >= '3.11'" }, + { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" } }, + { name = "langgraph-checkpoint" }, + { name = "langgraph-prebuilt" }, + { name = "langgraph-sdk", version = "0.4.2", source = { registry = "https://pypi.org/simple" } }, + { name = "pydantic" }, + { name = "xxhash" }, ] sdist = { url = "https://files.pythonhosted.org/packages/56/0d/c8e7ee98896659e1b6555db0ab115a9ca899844744645d5d894032bab1d7/langgraph-1.2.11.tar.gz", hash = "sha256:9ecfe11e50d338b34b15cf4d8a442642de103e8ae6971320efba84e4542eb363", size = 725753, upload-time = "2026-08-11T14:00:36.945Z" } wheels = [ @@ -1936,8 +1936,8 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "httpx", marker = "python_full_version < '3.11'" }, - { name = "orjson", marker = "python_full_version < '3.11'" }, + { name = "httpx" }, + { name = "orjson" }, ] sdist = { url = "https://files.pythonhosted.org/packages/02/f1/134046c20bc4a4a15d410d1d21c9e298a3e9923777b4cc867b8669bc636b/langgraph_sdk-0.3.14.tar.gz", hash = "sha256:acd1674c538e97f3cdaa610f6dd7e34bc9bad30167f0ccc482dcd563325e81f5", size = 198162, upload-time = "2026-05-05T18:40:03.524Z" } wheels = [ @@ -1956,11 +1956,11 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "httpx", marker = "python_full_version >= '3.11'" }, - { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langchain-protocol", version = "0.0.18", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "orjson", marker = "python_full_version >= '3.11'" }, - { name = "websockets", marker = "python_full_version >= '3.11'" }, + { name = "httpx" }, + { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" } }, + { name = "langchain-protocol", version = "0.0.18", source = { registry = "https://pypi.org/simple" } }, + { name = "orjson" }, + { name = "websockets" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b4/2b/bd8ac26d4e97f6df88ef05ce5b6a38945a3903e1025d926f4752aa88aa97/langgraph_sdk-0.4.2.tar.gz", hash = "sha256:b88f0f5f6328ac0680d6790614a905b2bcfa257f2276dba4e38f0e86db0aa738", size = 348327, upload-time = "2026-06-01T17:51:19.856Z" } wheels = [ @@ -1975,16 +1975,16 @@ resolution-markers = [ "python_full_version < '3.11'", ] dependencies = [ - { name = "httpx", marker = "python_full_version < '3.11'" }, - { name = "orjson", marker = "python_full_version < '3.11' and platform_python_implementation != 'PyPy'" }, - { name = "packaging", marker = "python_full_version < '3.11'" }, - { name = "pydantic", marker = "python_full_version < '3.11'" }, - { name = "requests", marker = "python_full_version < '3.11'" }, - { name = "requests-toolbelt", marker = "python_full_version < '3.11'" }, - { name = "uuid-utils", marker = "python_full_version < '3.11'" }, - { name = "websockets", marker = "python_full_version < '3.11'" }, - { name = "xxhash", marker = "python_full_version < '3.11'" }, - { name = "zstandard", marker = "python_full_version < '3.11'" }, + { name = "httpx" }, + { name = "orjson", marker = "platform_python_implementation != 'PyPy'" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "uuid-utils" }, + { name = "websockets" }, + { name = "xxhash" }, + { name = "zstandard" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e4/dd/f4c8a12987318e505b10760d30c3c2d45e8dc87ba8f47a004c753a9e7b35/langsmith-0.8.9.tar.gz", hash = "sha256:f16e37fcd5a8a2d4db30eae0e399a866a65ce5cc86218825c59409ed57a3bf53", size = 4428684, upload-time = "2026-06-03T17:56:09.448Z" } wheels = [ @@ -2003,16 +2003,16 @@ resolution-markers = [ "python_full_version == '3.11.*'", ] dependencies = [ - { name = "httpx", marker = "python_full_version >= '3.11'" }, - { name = "orjson", marker = "python_full_version >= '3.11' and platform_python_implementation != 'PyPy'" }, - { name = "packaging", marker = "python_full_version >= '3.11'" }, - { name = "pydantic", marker = "python_full_version >= '3.11'" }, - { name = "requests", marker = "python_full_version >= '3.11'" }, - { name = "requests-toolbelt", marker = "python_full_version >= '3.11'" }, - { name = "uuid-utils", marker = "python_full_version >= '3.11'" }, - { name = "websockets", marker = "python_full_version >= '3.11'" }, - { name = "xxhash", marker = "python_full_version >= '3.11'" }, - { name = "zstandard", marker = "python_full_version >= '3.11'" }, + { name = "httpx" }, + { name = "orjson", marker = "platform_python_implementation != 'PyPy'" }, + { name = "packaging" }, + { name = "pydantic" }, + { name = "requests" }, + { name = "requests-toolbelt" }, + { name = "uuid-utils" }, + { name = "websockets" }, + { name = "xxhash" }, + { name = "zstandard" }, ] sdist = { url = "https://files.pythonhosted.org/packages/9a/d9/a6681aa9847bbbc5ec21abe20a5e233b94e5edcfe39624db607ac7e8ccb4/langsmith-0.8.18.tar.gz", hash = "sha256:32dde9c0e67e053e0fb738921fc8ced768af7b8fa83d7a0e3fd63597cf8776dd", size = 4526988, upload-time = "2026-06-19T13:12:17.123Z" } wheels = [ @@ -4485,6 +4485,11 @@ wheels = [ ] [package.optional-dependencies] +deepagents = [ + { name = "deepagents" }, + { name = "langchain", version = "1.3.15", source = { registry = "https://pypi.org/simple" } }, + { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" } }, +] google-adk = [ { name = "google-adk" }, { name = "mcp" }, @@ -4535,11 +4540,8 @@ cloud-export-to-parquet = [ { name = "pyarrow" }, ] deepagents = [ - { name = "deepagents", marker = "python_full_version >= '3.11'" }, - { name = "langchain", version = "1.3.15", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "langchain-anthropic", version = "1.5.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "langchain-core", version = "1.5.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "temporalio", extra = ["langsmith"], marker = "python_full_version >= '3.11'" }, + { name = "temporalio", extra = ["deepagents", "langsmith"], marker = "python_full_version >= '3.11'" }, ] dev = [ { name = "fakeredis" }, @@ -4652,11 +4654,8 @@ cloud-export-to-parquet = [ { name = "pyarrow", specifier = ">=19.0.1" }, ] deepagents = [ - { name = "deepagents", marker = "python_full_version >= '3.11'", specifier = ">=0.6.12,<0.7" }, - { 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.32.0" }, + { name = "temporalio", extras = ["deepagents", "langsmith"], marker = "python_full_version >= '3.11'", specifier = ">=1.32.0" }, ] dev = [ { name = "fakeredis", specifier = ">=2,<3" }, @@ -5195,7 +5194,7 @@ name = "wcmatch" version = "11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "bracex", marker = "python_full_version >= '3.11'" }, + { name = "bracex" }, ] sdist = { url = "https://files.pythonhosted.org/packages/16/25/1da725838132221e33568973da484ff43813662ccc06ebf7f6e3abddfcd5/wcmatch-11.0.tar.gz", hash = "sha256:55d95c2447789712774b198ceec72939e88b5618f1f8f0a9b605bf7740b63b96", size = 141360, upload-time = "2026-07-10T05:50:24.183Z" } wheels = [