Bumps the major group in /libs/checkpoint with 2 updates: [redis](https://github.com/redis/redis-py) and [mypy](https://github.com/python/mypy). Updates `redis` from 7.4.0 to 8.0.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/redis/redis-py/releases">redis's releases</a>.</em></p> <blockquote> <h2>8.0.0</h2> <h1>Changes</h1> <h2>🚀 Highlights</h2> <h3>Async Cluster PubSub</h3> <p>This release introduces full <strong>asyncio Cluster PubSub support</strong>, bringing shard-channel capabilities (<code>SSUBSCRIBE</code>, <code>SUNSUBSCRIBE</code>, <code>SPUBLISH</code>) to the async <code>RedisCluster</code> client. The new <code>ClusterPubSub</code> class in <code>redis.asyncio.cluster</code> automatically routes shard-channel subscriptions to the correct cluster node based on key-slot hashing, manages per-node PubSub connections, and supports round-robin message retrieval across nodes. Users can create a cluster pubsub instance via <code>RedisCluster.pubsub()</code> and use <code>ssubscribe()</code>, <code>sunsubscribe()</code>, and <code>get_sharded_message()</code> just as they would with the sync cluster client.</p> <h3>Keyspace and subkey notifications</h3> <p>Redis Keyspace Notifications are now supported for standalone and cluster deployments in both sync and async modes. New classes — <code>KeyspaceNotifications</code>, <code>ClusterKeyspaceNotifications</code>, <code>AsyncKeyspaceNotifications</code>, and <code>AsyncClusterKeyspaceNotifications</code> — provide a high-level API for keyspace/keyevent subscriptions and subkey notification families: <code>subkeyspace</code>, <code>subkeyevent</code>, <code>subkeyspaceitem</code>, and <code>subkeyspaceevent</code>. Convenience methods like <code>subscribe_keyspace()</code>, <code>subscribe_keyevent()</code>, <code>subscribe_subkeyspace()</code>, <code>subscribe_subkeyevent()</code>, <code>subscribe_subkeyspaceitem()</code>, and <code>subscribe_subkeyspaceevent()</code> simplify common patterns, with channel classes for both key and subkey channels.</p> <p>In cluster mode, subscriptions are managed across primary nodes because each node emits notifications only for keys it owns, with built-in topology-change handling. Sync <code>run_in_thread()</code> and async <code>listen()</code> workflows are supported.</p> <h3>Redis Array commands(<a href="https://redis.io/docs/latest/develop/data-types/arrays/">https://redis.io/docs/latest/develop/data-types/arrays/</a>)</h3> <p>redis-py now supports <a href="https://redis.io/docs/latest/develop/data-types/arrays/">Redis Arrays</a>, a preview Redis data type for sparse, index-addressable sequences of strings. New <code>AR*</code> command helpers cover indexed reads/writes, range scans, deletion, cursor-based insertion, ring-buffer writes, metadata, text search, and aggregation, including <code>ARGET</code>, <code>ARSET</code>, <code>ARMGET</code>, <code>ARMSET</code>, <code>ARSCAN</code>, <code>ARGREP</code>, <code>ARRING</code>, and <code>AROP</code>.</p> <h3>Type Hints Improvements (breaking changes)</h3> <p>The <code>@overload</code> pattern has been applied systematically across <strong>core commands</strong> (<code>core.py</code>), <strong>VectorSet commands</strong>, and <strong>module commands</strong> (Search, JSON, TimeSeries, Bloom filters) to provide distinct return types for sync and async clients. Previously, methods returned a combined <code>ResponseT</code> (i.e., <code>Union[Awaitable[Any], Any]</code>), which caused static analysis tools like mypy and Pyright to flag false positives. Now, sync clients see concrete return types (e.g., <code>int</code>, <code>bool</code>, <code>list[str]</code>) while async clients see <code>Awaitable[...]</code> wrappers. This is a <strong>breaking change for type-checking only</strong>—runtime behavior is unchanged, but code relying on the old union return types in type annotations may need updates. Two new protocol types, <code>SyncClientProtocol</code> and <code>AsyncClientProtocol</code>, are used in overload signatures to enable this distinction.</p> <h3>RESP3 by default with opt-in unified responses</h3> <p>redis-py 8.0.0 now uses RESP3 on the wire by default while preserving legacy RESP2-compatible Python response shapes for existing applications (<a href="https://redirect.github.com/redis/redis-py/issues/4052">#4052</a>). Protocol-independent unified response shapes are available by setting <code>legacy_responses=False</code>, so affected commands return the same Python structure with RESP2 or RESP3.</p> <p>Use <code>protocol=2</code> to force RESP2 on the wire, <code>protocol=3</code> to opt into native RESP3 response shapes, or <code>legacy_responses=False</code> to migrate to unified responses. See <a href="https://github.com/redis/redis-py/blob/HEAD/docs/unified_responses.rst"><code>https://github.com/redis/redis-py/blob/HEAD/docs/unified_responses.rst</code></a> and <a href="https://github.com/redis/redis-py/blob/HEAD/specs/unified_responses_migration_guide.md"><code>https://github.com/redis/redis-py/blob/HEAD/specs/unified_responses_migration_guide.md</code></a> for the affected commands and migration details.</p> <h3>Connection and retry defaults</h3> <p>Default connection settings were updated: <code>socket_timeout</code> and <code>socket_connect_timeout</code> now default to 5 seconds, TCP keepalive is enabled by default, socket reads use a 32 KB buffer, connection pools default to <code>max_connections=100</code>, and retry defaults now use 10 attempts with exponential jitter backoff.</p> <p>Note: <code>socket_timeout</code> can affect blocking commands such as <code>BLPOP</code>/<code>BRPOP</code>; if a command blocks longer than the client socket timeout, it may raise <code>TimeoutError</code> before the command timeout elapses (<a href="https://redirect.github.com/redis/redis-py/issues/2807">#2807</a>).</p> <h2>🧪 Experimental Features</h2> <ul> <li>Added support for new array commands (<a href="https://redirect.github.com/redis/redis-py/issues/4055">#4055</a>)</li> </ul> <h2>🚀 New Features</h2> <ul> <li>Support Cluster PubSub in asyncio (<a href="https://redirect.github.com/redis/redis-py/issues/3736">#3736</a>)</li> <li>Add Redis Keyspace Notifications Support for Redis Cluster (<a href="https://redirect.github.com/redis/redis-py/issues/3962">#3962</a>)</li> <li>Add random load balancing strategy which allows for use of the primary (<a href="https://redirect.github.com/redis/redis-py/issues/4027">#4027</a>)</li> <li>Add FPHA (floating-point homogeneous array) arg support to JSON.SET (<a href="https://redirect.github.com/redis/redis-py/issues/4011">#4011</a>)</li> <li>Added custom Claude command + XNACK command support (<a href="https://redirect.github.com/redis/redis-py/issues/4030">#4030</a>)</li> <li>Adding Time Series Multiple Aggregators support (<a href="https://redirect.github.com/redis/redis-py/issues/4035">#4035</a>)</li> <li>Adding support for new COUNT aggregator for some sorted set commands - ZINTER, ZINTERSTORE, ZUNION, ZUNIONSTORE (<a href="https://redirect.github.com/redis/redis-py/issues/4034">#4034</a>)</li> <li>Adding support for new INCREX command (<a href="https://redirect.github.com/redis/redis-py/issues/4067">#4067</a> <a href="https://redirect.github.com/redis/redis-py/issues/4077">#4077</a>)</li> <li>Add support for PubSub subscriptions with binary channel names and handlers (<a href="https://redirect.github.com/redis/redis-py/issues/4068">#4068</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/redis/redis-py/commit/733f80ec633d6a772a6e1ccb1c0cca6fc1afb4b6"><code>733f80e</code></a> Updates in default connection and retry settings (<a href="https://redirect.github.com/redis/redis-py/issues/4082">#4082</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/a68a16c296591e902d0c749d31781550048f280f"><code>a68a16c</code></a> Updating Redis supported versions in README.md and lib version to 8.0.0</li> <li><a href="https://github.com/redis/redis-py/commit/43a41d3d2956aa69eb0041655067ffaaaf23c6c3"><code>43a41d3</code></a> Updating INCREX command arg - SATURATE now controls overflow behaviour (<a href="https://redirect.github.com/redis/redis-py/issues/4077">#4077</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/1496deba3801605cb123cb1b67adda50e85cd1e5"><code>1496deb</code></a> Preserve explicit None for client metadata config (<a href="https://redirect.github.com/redis/redis-py/issues/4081">#4081</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/57dc08c550f82086afeaa68a7cd7e5df356f7217"><code>57dc08c</code></a> Avoid zero-timeout async reads in hiredis connections readiness checks and re...</li> <li><a href="https://github.com/redis/redis-py/commit/cd54ddd25aa307dc7f05bc0e4387cfc294c0a4c8"><code>cd54ddd</code></a> fix(typing): correct type annotation for XReadResponse (<a href="https://redirect.github.com/redis/redis-py/issues/4046">#4046</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/ab2d41fcf0f9477ac788822d7c430004076a27f2"><code>ab2d41f</code></a> Add support for PubSub subscriptions with binary channel names and handlers (...</li> <li><a href="https://github.com/redis/redis-py/commit/ef24dc99b6f2aa9507f19aa4ce4be37745ed6c77"><code>ef24dc9</code></a> Randomize cluster startup node order during topology refresh (<a href="https://redirect.github.com/redis/redis-py/issues/4060">#4060</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/b604015aeb5abce4b576f9dc54ffe30a3f1ba8c6"><code>b604015</code></a> Add CLAUDE.md and /sync-claude-md skill for managing (<a href="https://redirect.github.com/redis/redis-py/issues/4066">#4066</a>)</li> <li><a href="https://github.com/redis/redis-py/commit/2b8b4fcc9986fbc1f188cc6a355d12eec814ee90"><code>2b8b4fc</code></a> Fix flaky tests (<a href="https://redirect.github.com/redis/redis-py/issues/4071">#4071</a>)</li> <li>Additional commits viewable in <a href="https://github.com/redis/redis-py/compare/v7.4.0...v8.0.0">compare view</a></li> </ul> </details> <br /> Updates `mypy` from 1.20.2 to 2.1.0 <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/python/mypy/blob/master/CHANGELOG.md">mypy's changelog</a>.</em></p> <blockquote> <h1>Mypy Release Notes</h1> <h2>Next Release</h2> <h2>Mypy 2.1</h2> <p>We’ve just uploaded mypy 2.1.0 to the Python Package Index (<a href="https://pypi.org/project/mypy/">PyPI</a>). Mypy is a static type checker for Python. This release includes new features, performance improvements and bug fixes. You can install it as follows:</p> <pre><code>python3 -m pip install -U mypy </code></pre> <p>You can read the full documentation for this release on <a href="http://mypy.readthedocs.io">Read the Docs</a>.</p> <h3>librt.vecs: Fast Growable Array Type for Mypyc</h3> <p>The new <code>librt.vecs</code> module provides an efficient growable array type <code>vec</code> that is optimized for mypyc use. It provides fast, packed arrays with integer and floating point value types, which can be <strong>several times faster</strong> than <code>list</code>, and tens of times faster than <code>array.array</code> in code compiled using mypyc. It also supports nested <code>vec</code> objects and non-value-type items, such as <code>vec[vec[str]]</code>.</p> <p>Refer to the <a href="https://mypyc.readthedocs.io/en/latest/librt_vecs.html">documentation</a> for the details.</p> <p>Contributed by Jukka Lehtosalo.</p> <h3>librt.random: Fast Pseudo-Random Number Generation</h3> <p>The new <code>librt.random</code> module provides fast pseudo-random number generation that is optimized for code compiled using mypyc. It can be 3x to 10x faster than the stdlib <code>random</code> module in compiled code.</p> <p>Refer to the <a href="https://mypyc.readthedocs.io/en/latest/librt_random.html">documentation</a> for the details.</p> <p>Contributed by Jukka Lehtosalo (PR <a href="https://redirect.github.com/python/mypy/pull/21433">21433</a>).</p> <h3>Mypyc Improvements</h3> <ul> <li>Enable incremental self-compilation (Vaggelis Danias, PR <a href="https://redirect.github.com/python/mypy/pull/21369">21369</a>)</li> <li>Make compilation order with multiple files consistent (Piotr Sawicki, PR <a href="https://redirect.github.com/python/mypy/pull/21419">21419</a>)</li> <li>Fix crash on accessing <code>StopAsyncIteration</code> (Piotr Sawicki, PR <a href="https://redirect.github.com/python/mypy/pull/21406">21406</a>)</li> <li>Fix incremental compilation with <code>separate</code> flag (Vaggelis Danias, PR <a href="https://redirect.github.com/python/mypy/pull/21299">21299</a>)</li> </ul> <h3>Fixes to Crashes</h3> <ul> <li>Fix crash on partial type with <code>--allow-redefinition</code> and <code>global</code> declaration (Jukka Lehtosalo, PR <a href="https://redirect.github.com/python/mypy/pull/21428">21428</a>)</li> <li>Fix broken awaitable generator patching (Ivan Levkivskyi, PR <a href="https://redirect.github.com/python/mypy/pull/21435">21435</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/python/mypy/commit/c1c336d7e34eb313080c79b156518c58d27c7234"><code>c1c336d</code></a> Remove +dev from version</li> <li><a href="https://github.com/python/mypy/commit/74df14b7cbf08140236aa45bbb7f42219b0b1df7"><code>74df14b</code></a> Add changelog for mypy 2.1 (<a href="https://redirect.github.com/python/mypy/issues/21464">#21464</a>)</li> <li><a href="https://github.com/python/mypy/commit/022d9bc96f86c40f338a5cf150f1806cc8f300ff"><code>022d9bc</code></a> Revert "TypeForm: Enable by default (<a href="https://redirect.github.com/python/mypy/issues/21262">#21262</a>)"</li> <li><a href="https://github.com/python/mypy/commit/8826288214f1cb31496e610667481221e025359c"><code>8826288</code></a> [mypyc] Document librt.random (<a href="https://redirect.github.com/python/mypy/issues/21463">#21463</a>)</li> <li><a href="https://github.com/python/mypy/commit/3f4067b699dbe52d08e42ef3b3ebfdebdc06bd96"><code>3f4067b</code></a> Bump librt version to 0.11.0 (<a href="https://redirect.github.com/python/mypy/issues/21458">#21458</a>)</li> <li><a href="https://github.com/python/mypy/commit/2b1eb58a250c5f1eb4ef5fb1f312ff528c5a1d4e"><code>2b1eb58</code></a> [mypyc] Enable incremental self-compilation (<a href="https://redirect.github.com/python/mypy/issues/21369">#21369</a>)</li> <li><a href="https://github.com/python/mypy/commit/8152f4af3f6c03beaf2660026240f0fdce7feecc"><code>8152f4a</code></a> Respect file config comments for stale modules (<a href="https://redirect.github.com/python/mypy/issues/21444">#21444</a>)</li> <li><a href="https://github.com/python/mypy/commit/116d60bdd3fdfe8d97c6afe99370910db56f1b92"><code>116d60b</code></a> Fix nondeterminism from nonassociativity of overload joins (<a href="https://redirect.github.com/python/mypy/issues/21455">#21455</a>)</li> <li><a href="https://github.com/python/mypy/commit/6c4af8e42110cea3f84bc02add2ca7b89c268210"><code>6c4af8e</code></a> Fix function call message change for small number of args (<a href="https://redirect.github.com/python/mypy/issues/21432">#21432</a>)</li> <li><a href="https://github.com/python/mypy/commit/4b8fdcaf24032592510e8f15421fb32d82a71800"><code>4b8fdca</code></a> [mypyc] Add librt.random module (<a href="https://redirect.github.com/python/mypy/issues/21433">#21433</a>)</li> <li>Additional commits viewable in <a href="https://github.com/python/mypy/compare/v1.20.2...v2.1.0">compare view</a></li> </ul> </details> <br /> Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore <dependency name> major version` will close this group update PR and stop Dependabot creating any more for the specific dependency's major version (unless you unignore this specific dependency's major version or upgrade to it yourself) - `@dependabot ignore <dependency name> minor version` will close this group update PR and stop Dependabot creating any more for the specific dependency's minor version (unless you unignore this specific dependency's minor version or upgrade to it yourself) - `@dependabot ignore <dependency name>` will close this group update PR and stop Dependabot creating any more for the specific dependency (unless you unignore this specific dependency or upgrade to it yourself) - `@dependabot unignore <dependency name>` will remove all of the ignore conditions of the specified dependency - `@dependabot unignore <dependency name> <ignore condition>` will remove the ignore condition of the specified dependency and ignore conditions </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Low-level orchestration framework for building stateful agents.
Trusted by companies shaping the future of agents – including Klarna, Replit, Elastic, and more – LangGraph is a low-level orchestration framework for building, managing, and deploying long-running, stateful agents.
pip install -U langgraph
Tip
If you're looking to quickly build agents, check out Deep Agents — a higher-level package built on LangGraph for agents that can plan, use subagents, and leverage file systems for complex tasks.
For an equivalent JS/TS library, check out LangGraph.js and the JS docs.
Why use LangGraph?
LangGraph provides low-level supporting infrastructure for any long-running, stateful workflow or agent:
- Durable execution — Build agents that persist through failures and can run for extended periods, automatically resuming from exactly where they left off.
- Human-in-the-loop — Seamlessly incorporate human oversight by inspecting and modifying agent state at any point during execution.
- Comprehensive memory — Create truly stateful agents with both short-term working memory for ongoing reasoning and long-term persistent memory across sessions.
- Debugging with LangSmith — Gain deep visibility into complex agent behavior with visualization tools that trace execution paths, capture state transitions, and provide detailed runtime metrics.
- Production-ready deployment — Deploy sophisticated agent systems confidently with scalable infrastructure designed to handle the unique challenges of stateful, long-running workflows.
Tip
For developing, debugging, and deploying AI agents and LLM applications, see LangSmith.
LangGraph ecosystem
While LangGraph can be used standalone, it also integrates seamlessly with any LangChain product, giving developers a full suite of tools for building agents.
To improve your LLM application development, pair LangGraph with:
- Deep Agents – Build agents that can plan, use subagents, and leverage file systems for complex tasks.
- LangChain – Provides integrations and composable components to streamline LLM application development.
- LangSmith – Helpful for agent evals and observability. Debug poor-performing LLM app runs, evaluate agent trajectories, gain visibility in production, and improve performance over time.
- LangSmith Deployment – Deploy and scale agents effortlessly with a purpose-built deployment platform for long-running, stateful workflows. Discover, reuse, configure, and share agents across teams – and iterate quickly with visual prototyping in LangSmith Studio.
Documentation
- docs.langchain.com – Comprehensive documentation, including conceptual overviews and guides
- reference.langchain.com/python/langgraph – API reference docs for LangGraph packages
- LangGraph Quickstart – Get started building with LangGraph
- Chat LangChain – Chat with the LangChain documentation and get answers to your questions
Discussions: Visit the LangChain Forum to connect with the community and share all of your technical questions, ideas, and feedback.
Additional resources
- Guides – Quick, actionable code snippets for topics such as streaming, adding memory & persistence, and design patterns (e.g. branching, subgraphs, etc.).
- LangChain Academy – Learn the basics of LangGraph in our free, structured course.
- Case studies – Hear how industry leaders use LangGraph to ship AI applications at scale.
- Contributing Guide – Learn how to contribute to LangChain projects and find good first issues.
- Code of Conduct – Our community guidelines and standards for participation.
Acknowledgements
LangGraph is inspired by Pregel and Apache Beam. The public interface draws inspiration from NetworkX. LangGraph is built by LangChain Inc, the creators of LangChain, but can be used without LangChain.