mirror of
https://github.com/langchain-ai/langgraph.git
synced 2026-09-17 15:17:57 +02:00
ab478cb40f186fe133bb280f951fa64a41fa263a
52
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
c0a13bb22d |
chore(deps): bump the minor-and-patch group across 1 directory with 7 updates (#8779)
Bumps the minor-and-patch group with 7 updates in the /libs/sdk-py directory: | Package | From | To | | --- | --- | --- | | [orjson](https://github.com/ijl/orjson) | `3.11.9` | `3.12.0` | | [langchain-protocol](https://github.com/langchain-ai/agent-protocol) | `0.0.18` | `0.0.19` | | [langchain-core](https://github.com/langchain-ai/langchain) | `1.5.3` | `1.6.1` | | [ruff](https://github.com/astral-sh/ruff) | `0.16.1` | `0.16.5` | | [ty](https://github.com/astral-sh/ty) | `0.0.66` | `0.0.75` | | [starlette](https://github.com/Kludex/starlette) | `1.3.1` | `1.6.0` | | [pydantic](https://github.com/pydantic/pydantic) | `2.13.4` | `2.13.5` | Updates `orjson` from 3.11.9 to 3.12.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/ijl/orjson/releases">orjson's releases</a>.</em></p> <blockquote> <h2>3.12.0</h2> <h3>Changed</h3> <ul> <li>Serialization implementation substantially rewritten.</li> <li>Publish PyPI wheels for Python 3.15. For Python 3.15 and later, <code>manylinux_2_39</code> (2024) is targeted instead of <code>manylinux_2_17</code> (2012).</li> <li>No longer publish PyPI wheels for ppc64le and s390x.</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/ijl/orjson/blob/master/CHANGELOG.md">orjson's changelog</a>.</em></p> <blockquote> <h2>3.12.0 - 2026-08-14</h2> <h3>Changed</h3> <ul> <li>Serialization implementation substantially rewritten.</li> <li>Publish PyPI wheels for Python 3.15. For Python 3.15 and later, <code>manylinux_2_39</code> (2024) is targeted instead of <code>manylinux_2_17</code> (2012).</li> <li>No longer publish PyPI wheels for ppc64le and s390x.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/ijl/orjson/commit/6737895a1a4e3e26df0569a40147893a786f9a58"><code>6737895</code></a> 3.12.0</li> <li><a href="https://github.com/ijl/orjson/commit/c2a6e8ff7b898635fb68a85bd5a62df1edf61cfc"><code>c2a6e8f</code></a> JsonWriter, iterators</li> <li><a href="https://github.com/ijl/orjson/commit/6a2d7a7d66dc3c5698625a7b334c40db459e46ae"><code>6a2d7a7</code></a> yyjson 1ea2fb0</li> <li><a href="https://github.com/ijl/orjson/commit/97bf170d9726e91c891f35eae4892801520b9dce"><code>97bf170</code></a> build update</li> <li>See full diff in <a href="https://github.com/ijl/orjson/compare/3.11.9...3.12.0">compare view</a></li> </ul> </details> <br /> Updates `langchain-protocol` from 0.0.18 to 0.0.19 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/langchain-ai/agent-protocol/releases">langchain-protocol's releases</a>.</em></p> <blockquote> <h2>langchain-protocol==0.0.19</h2> <h2>What's Changed</h2> <ul> <li>fix(tooling): resolve datamodel-code-generator alerts by <a href="https://github.com/jkennedyvz"><code>@jkennedyvz</code></a> in <a href="https://redirect.github.com/langchain-ai/agent-protocol/pull/93">langchain-ai/agent-protocol#93</a></li> <li>feat: add LangSmith routing to run start by <a href="https://github.com/mdrxy"><code>@mdrxy</code></a> in <a href="https://redirect.github.com/langchain-ai/agent-protocol/pull/95">langchain-ai/agent-protocol#95</a></li> <li>release: v0.19.0 by <a href="https://github.com/christian-bromann"><code>@christian-bromann</code></a> in <a href="https://redirect.github.com/langchain-ai/agent-protocol/pull/96">langchain-ai/agent-protocol#96</a></li> <li>fix(py): pin hatchling to avoid metadata 2.5 publish failure by <a href="https://github.com/christian-bromann"><code>@christian-bromann</code></a> in <a href="https://redirect.github.com/langchain-ai/agent-protocol/pull/97">langchain-ai/agent-protocol#97</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/langchain-ai/agent-protocol/compare/langchain-protocol==0.0.18...langchain-protocol==0.0.19">https://github.com/langchain-ai/agent-protocol/compare/langchain-protocol==0.0.18...langchain-protocol==0.0.19</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/langchain-ai/agent-protocol/commit/59c02be488eb7adb98ae3450983fff293294e67a"><code>59c02be</code></a> fix(py): pin hatchling to avoid metadata 2.5 publish failure (<a href="https://redirect.github.com/langchain-ai/agent-protocol/issues/97">#97</a>)</li> <li><a href="https://github.com/langchain-ai/agent-protocol/commit/c59077b743fd3dd0b86f048a2b59128de413663d"><code>c59077b</code></a> release: v0.19.0 (<a href="https://redirect.github.com/langchain-ai/agent-protocol/issues/96">#96</a>)</li> <li><a href="https://github.com/langchain-ai/agent-protocol/commit/870ef9560fab320236d6e24770e8950c5a9be63d"><code>870ef95</code></a> Merge pull request <a href="https://redirect.github.com/langchain-ai/agent-protocol/issues/95">#95</a> from langchain-ai/open-swe/v3-replica-routing</li> <li><a href="https://github.com/langchain-ai/agent-protocol/commit/175a1b8f2ac974e9b5097de90a51f1bc7ade73e0"><code>175a1b8</code></a> feat(protocol): add LangSmith routing to run start</li> <li><a href="https://github.com/langchain-ai/agent-protocol/commit/d9fd23d762bf4cffe876890a854fb79bcdd14f1a"><code>d9fd23d</code></a> Merge pull request <a href="https://redirect.github.com/langchain-ai/agent-protocol/issues/93">#93</a> from langchain-ai/langster/fix-datamodel-code-generato...</li> <li><a href="https://github.com/langchain-ai/agent-protocol/commit/9476948ab0ce1027131b58b9813f6bd3ba238ef8"><code>9476948</code></a> fix(tooling): update code generator dependencies</li> <li>See full diff in <a href="https://github.com/langchain-ai/agent-protocol/compare/langchain-protocol==0.0.18...langchain-protocol==0.0.19">compare view</a></li> </ul> </details> <br /> Updates `langchain-core` from 1.5.3 to 1.6.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/langchain-ai/langchain/releases">langchain-core's releases</a>.</em></p> <blockquote> <h2>langchain-core==1.6.1</h2> <p>Changes since langchain-core==1.6.0</p> <p>revert: release(core): 1.6.2 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39971">#39971</a>) release(core): 1.6.2 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39967">#39967</a>) fix(core): shore up indexing in genai v1 streaming content (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39964">#39964</a>) fix(core): make <code>StructuredTool</code> JSON-serializable (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39631">#39631</a>) chore(deps): bump minor and patch dependencies (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39869">#39869</a>) release(core): 1.6.1 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39832">#39832</a>) feat(core): propagate gateway information on error path (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39829">#39829</a>)</p> <h2>langchain-core==1.6.0</h2> <p>Changes since langchain-core==1.5.6</p> <p>release(core): 1.6.0 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39760">#39760</a>) fix(core): resolve postponed annotations in <code>StructuredTool._injected_args_keys</code> (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39602">#39602</a>) feat(core): add standard model exception types (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39538">#39538</a>) fix(core): allow deserializing <code>RunnablePick</code> (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39753">#39753</a>) fix(core): make <code>convert_to_openai_function</code> handle callables and non-dict mappings (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39750">#39750</a>) fix(core): make subprocess and temporary file tests portable on Windows (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39664">#39664</a>) fix(core): fail fast when tool schemas can't resolve forward refs during serialization (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39570">#39570</a>) test(core): avoid version-dependent runnable snapshots (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39705">#39705</a>) fix(core): require all nested properties for strict tool schemas (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39306">#39306</a>) fix(core): remove stale sync-stream <code>xfail</code> [closes <a href="https://redirect.github.com/langchain-ai/langchain/issues/39720">#39720</a>] (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39723">#39723</a>) perf(core): Lazily import transformers (<a href="https://redirect.github.com/langchain-ai/langchain/issues/38037">#38037</a>) fix(core): accept non-dict Mapping values in mustache templates (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39680">#39680</a>) docs(core): clarify <code>Runnable</code> pipe coercion [closes <a href="https://redirect.github.com/langchain-ai/langchain/issues/39075">#39075</a>] (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39707">#39707</a>) fix(core): finalize chain-group runs on <code>BaseException</code> (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39699">#39699</a>)</p> <h2>langchain-core==1.5.6</h2> <p>Changes since langchain-core==1.5.5</p> <p>chore(core): release 1.5.6 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39704">#39704</a>) feat(core): incorporate gateway metadata to traces (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39703">#39703</a>)</p> <h2>langchain-core==1.5.5</h2> <p>Changes since langchain-core==1.5.4</p> <p>release(core): 1.5.5 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39655">#39655</a>) fix(core): make abatch_iterate consistent with batch_iterate for None and zero size (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39367">#39367</a>) fix(core): respect pydantic aliases when validating tool inputs (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39572">#39572</a>) fix(core): issues in merging chunks (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39535">#39535</a>) fix(core): handle v1 base model validation in async path (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39576">#39576</a>) fix(core): handle tool descriptions for infer_schema=False (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39573">#39573</a>) fix(core): clear usage metadata callback on exceptions in context manager (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39616">#39616</a>) fix(core): handle falsy LLM and chat model caches (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39283">#39283</a>) chore(core): add httpx as an explicit dep (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39612">#39612</a>) fix(core): preserve non-str/non-dict items in <code>DictPromptTemplate</code> list values (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39588">#39588</a>) fix(core): raise ValueError when explicit tool_outputs length mismatches tool_calls in tool_example_to_messages (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39142">#39142</a>) fix(core): guard malformed Anthropic content blocks (<a href="https://redirect.github.com/langchain-ai/langchain/issues/38670">#38670</a>)</p> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/langchain-ai/langchain/commit/4fe9d3062f4b68e2e472eb92decf369c93aebb46"><code>4fe9d30</code></a> chore(openai): fix tests (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39972">#39972</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/8fa38dc143faecec0287395bce4484af4b82254c"><code>8fa38dc</code></a> revert: release(core): 1.6.2 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39971">#39971</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/122030d79e944a5b55c33847d29bcfbe64488372"><code>122030d</code></a> release(core): 1.6.2 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39967">#39967</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/7d4b42b57235020e6f496fdfebab44c3ca1b1f5b"><code>7d4b42b</code></a> release(langchain): 1.3.18 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39966">#39966</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/4a66e355da07b8fad7d6cb8db99287fb4d7e6d83"><code>4a66e35</code></a> fix(langchain): preserve content-block shape in PIIMiddleware redaction (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39894">#39894</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/38e211359f0b65b480d9ee4c53f2385f8c249bb3"><code>38e2113</code></a> fix(core): shore up indexing in genai v1 streaming content (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39964">#39964</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/13b1b2feae476fdcebc0a285a723d5cbfed9df2e"><code>13b1b2f</code></a> fix(core): make <code>StructuredTool</code> JSON-serializable (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39631">#39631</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/3b3b308e6d956c9a670e41e66a468466fe6f8c26"><code>3b3b308</code></a> release(anthropic): 1.7.0 (<a href="https://redirect.github.com/langchain-ai/langchain/issues/39963">#39963</a>)</li> <li><a href="https://github.com/langchain-ai/langchain/commit/e3f6adfe1976a773704a20fef7bb03ac0309e0e4"><code>e3f6adf</code></a> feat(anthropic): support top-level param for skills via <code>container</code>; `updates...</li> <li><a href="https://github.com/langchain-ai/langchain/commit/c253f54b905f9648c50b723f01945f39a256d8aa"><code>c253f54</code></a> fix(openai): correct <code>reasoning_effort_levels</code> for gpt-5 and gpt-5.1 profiles...</li> <li>Additional commits viewable in <a href="https://github.com/langchain-ai/langchain/compare/langchain-core==1.5.3...langchain-core==1.6.1">compare view</a></li> </ul> </details> <br /> Updates `ruff` from 0.16.1 to 0.16.5 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/releases">ruff's releases</a>.</em></p> <blockquote> <h2>0.16.5</h2> <h2>Release Notes</h2> <p>Released on 2026-08-27.</p> <h3>Preview features</h3> <ul> <li>Allow rules without codes (<a href="https://redirect.github.com/astral-sh/ruff/pull/28049">#28049</a>)</li> <li>Introduce category selectors (<a href="https://redirect.github.com/astral-sh/ruff/pull/27666">#27666</a>)</li> <li>Update preview default rules and categories (<a href="https://redirect.github.com/astral-sh/ruff/pull/27877">#27877</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-async</code>] Detect blocking generic HTTP requests (<code>ASYNC210</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/28024">#28024</a>)</li> <li>[<code>flake8-datetimez</code>] Allow timezone-safe <code>strptime</code> chains (<code>DTZ007</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/28023">#28023</a>)</li> <li>[<code>flake8-simplify</code>] Respect side effects in <code>lambda</code> defaults (<code>SIM401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/28000">#28000</a>)</li> </ul> <h3>Server</h3> <ul> <li>Fix duplicated "of" in <code>ClientOptions</code> doc comment (<a href="https://redirect.github.com/astral-sh/ruff/pull/27978">#27978</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Document rule acceptance guidelines (<a href="https://redirect.github.com/astral-sh/ruff/pull/27910">#27910</a>)</li> <li>Document the new category selectors (<a href="https://redirect.github.com/astral-sh/ruff/pull/27906">#27906</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/AlexWaygood"><code>@AlexWaygood</code></a></li> <li><a href="https://github.com/sharkdp"><code>@sharkdp</code></a></li> <li><a href="https://github.com/jelle-openai"><code>@jelle-openai</code></a></li> <li><a href="https://github.com/charliermarsh"><code>@charliermarsh</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> <li><a href="https://github.com/aarushkandukoori"><code>@aarushkandukoori</code></a></li> </ul> <h2>Install ruff 0.16.5</h2> <h3>Install prebuilt binaries via shell script</h3> <pre lang="sh"><code>curl --proto '=https' --tlsv1.2 -LsSf https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.sh | sh </code></pre> <h3>Install prebuilt binaries via powershell script</h3> <pre lang="sh"><code>powershell -ExecutionPolicy Bypass -c "irm https://releases.astral.sh/github/ruff/releases/download/0.16.5/ruff-installer.ps1 | iex" </code></pre> <h2>Download ruff 0.16.5</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md">ruff's changelog</a>.</em></p> <blockquote> <h2>0.16.5</h2> <p>Released on 2026-08-27.</p> <h3>Preview features</h3> <ul> <li>Allow rules without codes (<a href="https://redirect.github.com/astral-sh/ruff/pull/28049">#28049</a>)</li> <li>Introduce category selectors (<a href="https://redirect.github.com/astral-sh/ruff/pull/27666">#27666</a>)</li> <li>Update preview default rules and categories (<a href="https://redirect.github.com/astral-sh/ruff/pull/27877">#27877</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>[<code>flake8-async</code>] Detect blocking generic HTTP requests (<code>ASYNC210</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/28024">#28024</a>)</li> <li>[<code>flake8-datetimez</code>] Allow timezone-safe <code>strptime</code> chains (<code>DTZ007</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/28023">#28023</a>)</li> <li>[<code>flake8-simplify</code>] Respect side effects in <code>lambda</code> defaults (<code>SIM401</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/28000">#28000</a>)</li> </ul> <h3>Server</h3> <ul> <li>Fix duplicated "of" in <code>ClientOptions</code> doc comment (<a href="https://redirect.github.com/astral-sh/ruff/pull/27978">#27978</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Document rule acceptance guidelines (<a href="https://redirect.github.com/astral-sh/ruff/pull/27910">#27910</a>)</li> <li>Document the new category selectors (<a href="https://redirect.github.com/astral-sh/ruff/pull/27906">#27906</a>)</li> </ul> <h3>Contributors</h3> <ul> <li><a href="https://github.com/AlexWaygood"><code>@AlexWaygood</code></a></li> <li><a href="https://github.com/sharkdp"><code>@sharkdp</code></a></li> <li><a href="https://github.com/jelle-openai"><code>@jelle-openai</code></a></li> <li><a href="https://github.com/charliermarsh"><code>@charliermarsh</code></a></li> <li><a href="https://github.com/ntBre"><code>@ntBre</code></a></li> <li><a href="https://github.com/aarushkandukoori"><code>@aarushkandukoori</code></a></li> </ul> <h2>0.16.4</h2> <p>Released on 2026-08-20.</p> <h3>Preview features</h3> <ul> <li>[<code>flake8-use-pathlib</code>] Add autofix for <code>PTH116</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/26460">#26460</a>)</li> <li>[<code>refurb</code>] Restrict <code>delete-full-slice</code> to lists (<code>FURB131</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/27711">#27711</a>)</li> <li>[<code>refurb</code>] Skip <code>FURB101</code> and <code>FURB103</code> when the <code>open</code> argument is a file descriptor (<a href="https://redirect.github.com/astral-sh/ruff/pull/27643">#27643</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Fix <code>InvalidInstruction</code> on Windows CPUs that do not support <code>POPCNT</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/27803">#27803</a>)</li> <li>[<code>pyflakes</code>] Emit semantic syntax errors in string type definitions as <code>F722</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/27835">#27835</a>)</li> <li>[<code>pylint</code>] Allow <code>os._exit</code> imports in <code>import-private-name</code> (<code>PLC2701</code>) (<a href="https://redirect.github.com/astral-sh/ruff/pull/27738">#27738</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/astral-sh/ruff/commit/9e4938c4a60bed3e87a11ee1e1db1bd23f4d964a"><code>9e4938c</code></a> Bump 0.16.5 (<a href="https://redirect.github.com/astral-sh/ruff/issues/28110">#28110</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/aad0e909ef1390f4b2a3ba8aa0a67fb8ea5cbacd"><code>aad0e90</code></a> Allow rules without codes (<a href="https://redirect.github.com/astral-sh/ruff/issues/28049">#28049</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/5fdab73c5052350400c36b08c5d7710210343bc4"><code>5fdab73</code></a> Update preview default rules and categories (<a href="https://redirect.github.com/astral-sh/ruff/issues/27877">#27877</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/29c8e5b2d0a46eb7dc4ff11c1b0a0dc5ccea52e4"><code>29c8e5b</code></a> Document rule acceptance guidelines (<a href="https://redirect.github.com/astral-sh/ruff/issues/27910">#27910</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/50a4d7fd106603a5616b01ac3bef3306252b248f"><code>50a4d7f</code></a> Document the new category selectors (<a href="https://redirect.github.com/astral-sh/ruff/issues/27906">#27906</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/ada87950ea188f882f69b7bd6e2213a9696e3ee2"><code>ada8795</code></a> Introduce category selectors (<a href="https://redirect.github.com/astral-sh/ruff/issues/27666">#27666</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/d8947238863b61922bfc83f07edcc697c1cc07c0"><code>d894723</code></a> [ty] Infer lambda parameters through callable type aliases (<a href="https://redirect.github.com/astral-sh/ruff/issues/28109">#28109</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/2685fdebbcf9938736fed8c45886a629f9c99a06"><code>2685fde</code></a> [ty] Narrow functional enum members in <code>==</code> and <code>match</code> (<a href="https://redirect.github.com/astral-sh/ruff/issues/28103">#28103</a>)</li> <li><a href="https://github.com/astral-sh/ruff/commit/efcffd2178ce62e9951a53d4c50cadc225a0cfec"><code>efcffd2</code></a> [ty] Intersection simplifications with subtype-related generic specialization...</li> <li><a href="https://github.com/astral-sh/ruff/commit/eb780488037504e11f145ed778654fd8a825028b"><code>eb78048</code></a> [ty] Bump ecosystem-analyzer for HTML escaping (<a href="https://redirect.github.com/astral-sh/ruff/issues/28104">#28104</a>)</li> <li>Additional commits viewable in <a href="https://github.com/astral-sh/ruff/compare/0.16.1...0.16.5">compare view</a></li> </ul> </details> <br /> Updates `ty` from 0.0.66 to 0.0.75 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ty/releases">ty's releases</a>.</em></p> <blockquote> <h2>0.0.75</h2> <h2>Release Notes</h2> <p>Released on 2026-08-26.</p> <h3>Preview features</h3> <ul> <li>Initialize PEP 723 script environments in the CLI (<a href="https://redirect.github.com/astral-sh/ruff/pull/27544">#27544</a>)</li> <li>Refresh PEP 723 script environments in watch mode (<a href="https://redirect.github.com/astral-sh/ruff/pull/27617">#27617</a>)</li> <li>Run PEP 723 script synchronization on bounded workers (<a href="https://redirect.github.com/astral-sh/ruff/pull/27615">#27615</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Specialize <code>Self</code> bounds of inherited methods (<a href="https://redirect.github.com/astral-sh/ruff/pull/27990">#27990</a>)</li> </ul> <h3>LSP server</h3> <ul> <li>Add "Go to Definition" support for pytest fixtures (<a href="https://redirect.github.com/astral-sh/ruff/pull/27444">#27444</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Fix documented Python package build command (<a href="https://redirect.github.com/astral-sh/ty/pull/4384">#4384</a>)</li> <li>Link untyped-call tracking issue in migration guide (<a href="https://redirect.github.com/astral-sh/ty/pull/4382">#4382</a>)</li> </ul> <h3>Library support</h3> <ul> <li>Resolve imported pytest fixture exposures (<a href="https://redirect.github.com/astral-sh/ruff/pull/27539">#27539</a>)</li> <li>Resolve installed core pytest fixture providers (<a href="https://redirect.github.com/astral-sh/ruff/pull/27770">#27770</a>)</li> <li>Resolve pytest fixtures through conftest (<a href="https://redirect.github.com/astral-sh/ruff/pull/27540">#27540</a>)</li> </ul> <h3>Diagnostics</h3> <ul> <li>Add more autofixes (<a href="https://redirect.github.com/astral-sh/ruff/pull/28029">#28029</a>)</li> <li>Add a dedicated missing-slot diagnostic (<a href="https://redirect.github.com/astral-sh/ruff/pull/28039">#28039</a>)</li> <li>Explain missing storage for declared slotted attributes (<a href="https://redirect.github.com/astral-sh/ruff/pull/27969">#27969</a>)</li> <li>Improve diagnostic spans for unpacked variable assignments (<a href="https://redirect.github.com/astral-sh/ruff/pull/28041">#28041</a>)</li> </ul> <h3>Core type checking</h3> <ul> <li>Account for known subclasses in equality inference (<a href="https://redirect.github.com/astral-sh/ruff/pull/28005">#28005</a>)</li> <li>Expand <code>ParamSpec</code> signatures inferred from bound receivers (<a href="https://redirect.github.com/astral-sh/ruff/pull/28020">#28020</a>)</li> <li>Fix <code>Self</code> binding in <code>ParamSpec</code> protocols (<a href="https://redirect.github.com/astral-sh/ruff/pull/28016">#28016</a>)</li> <li>Fix <code>TypedDict</code> variance inference (<a href="https://redirect.github.com/astral-sh/ruff/pull/28052">#28052</a>)</li> <li>Fix unsound narrowing through branch-assigned conditions (<a href="https://redirect.github.com/astral-sh/ruff/pull/28006">#28006</a>)</li> <li>Ignore inconsistent binding decorators on overloads (<a href="https://redirect.github.com/astral-sh/ruff/pull/28036">#28036</a>)</li> <li>Infer <code>yield from</code> send/return types from the iterator returned by <code>__iter__</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/27987">#27987</a>)</li> <li>Infer tuple type parameters from union arguments (<a href="https://redirect.github.com/astral-sh/ruff/pull/28062">#28062</a>)</li> <li>Infer variance through nonrecursive protocol references (<a href="https://redirect.github.com/astral-sh/ruff/pull/28065">#28065</a>)</li> <li>Preserve bounds of non-literal metaclasses (<a href="https://redirect.github.com/astral-sh/ruff/pull/28046">#28046</a>)</li> <li>Preserve correlated generic-call inference (<a href="https://redirect.github.com/astral-sh/ruff/pull/28043">#28043</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ty/blob/main/CHANGELOG.md">ty's changelog</a>.</em></p> <blockquote> <h2>0.0.75</h2> <p>Released on 2026-08-26.</p> <h3>Preview features</h3> <ul> <li>Initialize PEP 723 script environments in the CLI (<a href="https://redirect.github.com/astral-sh/ruff/pull/27544">#27544</a>)</li> <li>Refresh PEP 723 script environments in watch mode (<a href="https://redirect.github.com/astral-sh/ruff/pull/27617">#27617</a>)</li> <li>Run PEP 723 script synchronization on bounded workers (<a href="https://redirect.github.com/astral-sh/ruff/pull/27615">#27615</a>)</li> </ul> <h3>Bug fixes</h3> <ul> <li>Specialize <code>Self</code> bounds of inherited methods (<a href="https://redirect.github.com/astral-sh/ruff/pull/27990">#27990</a>)</li> </ul> <h3>LSP server</h3> <ul> <li>Add "Go to Definition" support for pytest fixtures (<a href="https://redirect.github.com/astral-sh/ruff/pull/27444">#27444</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>Fix documented Python package build command (<a href="https://redirect.github.com/astral-sh/ty/pull/4384">#4384</a>)</li> <li>Link untyped-call tracking issue in migration guide (<a href="https://redirect.github.com/astral-sh/ty/pull/4382">#4382</a>)</li> </ul> <h3>Library support</h3> <ul> <li>Resolve imported pytest fixture exposures (<a href="https://redirect.github.com/astral-sh/ruff/pull/27539">#27539</a>)</li> <li>Resolve installed core pytest fixture providers (<a href="https://redirect.github.com/astral-sh/ruff/pull/27770">#27770</a>)</li> <li>Resolve pytest fixtures through conftest (<a href="https://redirect.github.com/astral-sh/ruff/pull/27540">#27540</a>)</li> </ul> <h3>Diagnostics</h3> <ul> <li>Add more autofixes (<a href="https://redirect.github.com/astral-sh/ruff/pull/28029">#28029</a>)</li> <li>Add a dedicated missing-slot diagnostic (<a href="https://redirect.github.com/astral-sh/ruff/pull/28039">#28039</a>)</li> <li>Explain missing storage for declared slotted attributes (<a href="https://redirect.github.com/astral-sh/ruff/pull/27969">#27969</a>)</li> <li>Improve diagnostic spans for unpacked variable assignments (<a href="https://redirect.github.com/astral-sh/ruff/pull/28041">#28041</a>)</li> </ul> <h3>Core type checking</h3> <ul> <li>Account for known subclasses in equality inference (<a href="https://redirect.github.com/astral-sh/ruff/pull/28005">#28005</a>)</li> <li>Expand <code>ParamSpec</code> signatures inferred from bound receivers (<a href="https://redirect.github.com/astral-sh/ruff/pull/28020">#28020</a>)</li> <li>Fix <code>Self</code> binding in <code>ParamSpec</code> protocols (<a href="https://redirect.github.com/astral-sh/ruff/pull/28016">#28016</a>)</li> <li>Fix <code>TypedDict</code> variance inference (<a href="https://redirect.github.com/astral-sh/ruff/pull/28052">#28052</a>)</li> <li>Fix unsound narrowing through branch-assigned conditions (<a href="https://redirect.github.com/astral-sh/ruff/pull/28006">#28006</a>)</li> <li>Ignore inconsistent binding decorators on overloads (<a href="https://redirect.github.com/astral-sh/ruff/pull/28036">#28036</a>)</li> <li>Infer <code>yield from</code> send/return types from the iterator returned by <code>__iter__</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/27987">#27987</a>)</li> <li>Infer tuple type parameters from union arguments (<a href="https://redirect.github.com/astral-sh/ruff/pull/28062">#28062</a>)</li> <li>Infer variance through nonrecursive protocol references (<a href="https://redirect.github.com/astral-sh/ruff/pull/28065">#28065</a>)</li> <li>Preserve bounds of non-literal metaclasses (<a href="https://redirect.github.com/astral-sh/ruff/pull/28046">#28046</a>)</li> <li>Preserve correlated generic-call inference (<a href="https://redirect.github.com/astral-sh/ruff/pull/28043">#28043</a>)</li> <li>Preserve invariant materialization constraints (<a href="https://redirect.github.com/astral-sh/ruff/pull/28047">#28047</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/astral-sh/ty/commit/a553dcc1a4c464b22d6fff8c46d444e326e0ae2d"><code>a553dcc</code></a> Bump version to 0.0.75 (<a href="https://redirect.github.com/astral-sh/ty/issues/4396">#4396</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/26b1b50998e92a5f50c342dc4a1fed84db2f8ee4"><code>26b1b50</code></a> Update prek dependencies (<a href="https://redirect.github.com/astral-sh/ty/issues/4392">#4392</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/73d226ee4d5a9274bc559c50a244159b61dfa315"><code>73d226e</code></a> Fix documented Python package build command (<a href="https://redirect.github.com/astral-sh/ty/issues/4384">#4384</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/5e264dac66970648d461a3fc8f2ebebd30a44dc9"><code>5e264da</code></a> Link untyped-call tracking issue in migration guide (<a href="https://redirect.github.com/astral-sh/ty/issues/4382">#4382</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/00199f0aaa6a8cd264fea08eae4f3c3fe4451c17"><code>00199f0</code></a> Bump version to 0.0.74 (<a href="https://redirect.github.com/astral-sh/ty/issues/4351">#4351</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/5769062fa10db84f6c03145bdf42d0b8da9aeb63"><code>5769062</code></a> Update mypy/pyright comparison table (<a href="https://redirect.github.com/astral-sh/ty/issues/4165">#4165</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/4fcb06010f2219b80adf3e688964abd9b0d72866"><code>4fcb060</code></a> Remove Zulip from the PGO training (<a href="https://redirect.github.com/astral-sh/ty/issues/4336">#4336</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/a7a706442a710db4a93c1a79779dff5ec5824cf6"><code>a7a7064</code></a> Use the versions bot's ruleset bypass when merging (<a href="https://redirect.github.com/astral-sh/ty/issues/4333">#4333</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/01b0fab0093c64535a401bc2731f80d7f5b6a7a8"><code>01b0fab</code></a> Update prek dependencies (<a href="https://redirect.github.com/astral-sh/ty/issues/4325">#4325</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/deef42f517bfbacb2ffe673046bef1e206c6b8ab"><code>deef42f</code></a> Update dependency python to 3.14 (<a href="https://redirect.github.com/astral-sh/ty/issues/4326">#4326</a>)</li> <li>Additional commits viewable in <a href="https://github.com/astral-sh/ty/compare/0.0.66...0.0.75">compare view</a></li> </ul> </details> <br /> Updates `starlette` from 1.3.1 to 1.6.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/Kludex/starlette/releases">starlette's releases</a>.</em></p> <blockquote> <h2>Version 1.6.0</h2> <h2>What's Changed</h2> <ul> <li>Add <code>max_body_size</code> to <code>Starlette</code> and route classes by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/starlette/pull/3431">Kludex/starlette#3431</a></li> <li>Expose <code>http.response.debug</code> info via response extensions by <a href="https://github.com/y2kbugger"><code>@y2kbugger</code></a> in <a href="https://redirect.github.com/Kludex/starlette/pull/3130">Kludex/starlette#3130</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/y2kbugger"><code>@y2kbugger</code></a> made their first contribution in <a href="https://redirect.github.com/Kludex/starlette/pull/3130">Kludex/starlette#3130</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/starlette/compare/1.5.1...1.6.0">https://github.com/Kludex/starlette/compare/1.5.1...1.6.0</a></p> <h2>Version 1.5.1</h2> <h2>What's Changed</h2> <ul> <li>Reject inverted single-byte Range like <code>bytes=5-4</code> by <a href="https://github.com/nikolauspschuetz"><code>@nikolauspschuetz</code></a> in <a href="https://redirect.github.com/encode/starlette/pull/3389">encode/starlette#3389</a></li> <li>Limit <code>FileResponse</code> to 100 ranges by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/encode/starlette/pull/3430">encode/starlette#3430</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/encode/starlette/compare/1.5.0...1.5.1">https://github.com/encode/starlette/compare/1.5.0...1.5.1</a></p> <h2>Version 1.5.0</h2> <p>This release is all about giving <code>GZipMiddleware</code> some love. 🗜️</p> <h2>What's Changed</h2> <ul> <li>Add <code>exclude_content_types</code> parameter to <code>GZipMiddleware</code> by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/encode/starlette/pull/3418">encode/starlette#3418</a></li> <li>Flush GZip output for each streamed chunk by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/encode/starlette/pull/3419">encode/starlette#3419</a></li> <li>Skip compression of partial responses in <code>GZipMiddleware</code> by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/encode/starlette/pull/3420">encode/starlette#3420</a></li> <li>Expand default excluded content types in <code>GZipMiddleware</code> by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/encode/starlette/pull/3421">encode/starlette#3421</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/encode/starlette/compare/1.4.1...1.5.0">https://github.com/encode/starlette/compare/1.4.1...1.5.0</a></p> <h2>Version 1.4.1</h2> <h2>What's Changed</h2> <ul> <li>Default <code>thread_minimum_size</code> in <code>GZipResponder</code> by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/starlette/pull/3415">Kludex/starlette#3415</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/starlette/compare/1.4.0...1.4.1">https://github.com/Kludex/starlette/compare/1.4.0...1.4.1</a></p> <h2>Version 1.4.0</h2> <h2>What's Changed</h2> <ul> <li>Lazily allocate GZipMiddleware compression resources by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/starlette/pull/3407">Kludex/starlette#3407</a></li> <li>Use <code>zlib.compressobj</code> instead of <code>GzipFile</code> in <code>GZipMiddleware</code> by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/starlette/pull/3411">Kludex/starlette#3411</a></li> <li>Offload large GZip compression by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/starlette/pull/3410">Kludex/starlette#3410</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/benberryallwood"><code>@benberryallwood</code></a> made their first contribution in <a href="https://redirect.github.com/Kludex/starlette/pull/3334">Kludex/starlette#3334</a></li> <li><a href="https://github.com/lkk7"><code>@lkk7</code></a> made their first contribution in <a href="https://redirect.github.com/Kludex/starlette/pull/3359">Kludex/starlette#3359</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/starlette/compare/1.3.1...1.4.0">https://github.com/Kludex/starlette/compare/1.3.1...1.4.0</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/Kludex/starlette/blob/main/docs/release-notes.md">starlette's changelog</a>.</em></p> <blockquote> <h2>1.6.0 (August 8, 2026)</h2> <h4>Added</h4> <ul> <li>Add <code>max_body_size</code> to <code>Starlette</code> and route classes <a href="https://redirect.github.com/encode/starlette/pull/3431">#3431</a>.</li> <li>Expose <code>http.response.debug</code> information via response extensions <a href="https://redirect.github.com/encode/starlette/pull/3130">#3130</a>.</li> </ul> <h2>1.5.1 (August 8, 2026)</h2> <h4>Fixed</h4> <ul> <li>Reject inverted single-byte ranges in <code>FileResponse</code> <a href="https://redirect.github.com/encode/starlette/pull/3389">#3389</a>.</li> <li>Limit <code>FileResponse</code> to 100 ranges <a href="https://redirect.github.com/encode/starlette/pull/3430">#3430</a>.</li> </ul> <h2>1.5.0 (August 8, 2026)</h2> <h4>Added</h4> <ul> <li>Add <code>exclude_content_types</code> parameter to <code>GZipMiddleware</code> <a href="https://redirect.github.com/encode/starlette/pull/3418">#3418</a>.</li> </ul> <h4>Changed</h4> <ul> <li>Expand default excluded content types in <code>GZipMiddleware</code> <a href="https://redirect.github.com/encode/starlette/pull/3421">#3421</a>.</li> </ul> <h4>Fixed</h4> <ul> <li>Flush GZip output for each streamed chunk <a href="https://redirect.github.com/encode/starlette/pull/3419">#3419</a>.</li> <li>Skip compression of partial responses in <code>GZipMiddleware</code> <a href="https://redirect.github.com/encode/starlette/pull/3420">#3420</a>.</li> </ul> <h2>1.4.1 (August 5, 2026)</h2> <h4>Fixed</h4> <ul> <li>Default <code>thread_minimum_size</code> to 128 KiB in <code>GZipResponder</code>, keeping it usable without the new keyword argument <a href="https://redirect.github.com/encode/starlette/pull/3415">#3415</a>.</li> </ul> <h2>1.4.0 (August 5, 2026)</h2> <h4>Added</h4> <ul> <li>Offload large GZip compression to a worker thread, keeping the event loop responsive. <code>GZipMiddleware</code> accepts a new <code>thread_minimum_size</code> parameter (default 128 KiB) controlling the minimum body chunk size compressed in a thread <a href="https://redirect.github.com/encode/starlette/pull/3410">#3410</a>.</li> </ul> <h4>Changed</h4> <ul> <li>Use <code>zlib.compressobj</code> instead of <code>GzipFile</code> in <code>GZipMiddleware</code>, reducing memory usage during compression <a href="https://redirect.github.com/encode/starlette/pull/3411">#3411</a>.</li> <li>Lazily allocate <code>GZipMiddleware</code> compression resources, avoiding compressor allocation for responses that are never compressed <a href="https://redirect.github.com/encode/starlette/pull/3407">#3407</a>.</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/Kludex/starlette/commit/4f250d6b814587e20c5365f0a5f0c4d42bcb929f"><code>4f250d6</code></a> Version 1.6.0 (<a href="https://redirect.github.com/Kludex/starlette/issues/3434">#3434</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/9eea41ad3c26ad21b9bdfe4578c1cdad6c9b9ac2"><code>9eea41a</code></a> Expose <code>http.response.debug</code> info via response extensions (<a href="https://redirect.github.com/Kludex/starlette/issues/3130">#3130</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/38f8999a229610b36f39d11f67d80515a15c6330"><code>38f8999</code></a> Add <code>max_body_size</code> to <code>Starlette</code> and route classes (<a href="https://redirect.github.com/Kludex/starlette/issues/3431">#3431</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/c41236c03868fb3779a64101f4ea88cd47877e23"><code>c41236c</code></a> Version 1.5.1 (<a href="https://redirect.github.com/Kludex/starlette/issues/3432">#3432</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/9c500db197859dba4a8db13fa8e7d2c55de8152c"><code>9c500db</code></a> Limit <code>FileResponse</code> to 100 ranges (<a href="https://redirect.github.com/Kludex/starlette/issues/3430">#3430</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/78ae82cad482fe66a73fb1217f0a6609b3f998f6"><code>78ae82c</code></a> Reject inverted single-byte Range like bytes=5-4 (<a href="https://redirect.github.com/Kludex/starlette/issues/3389">#3389</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/c1d6edaf43920104d4389e983c3e0314f6af14cf"><code>c1d6eda</code></a> chore(deps): bump pymdown-extensions from 11.0 to 11.0.1 (<a href="https://redirect.github.com/Kludex/starlette/issues/3429">#3429</a>)</li> <li><a href="https://github.com/Kludex/starlette/commit/ee66ca48418780d6415d231851b31464febc32de"><code>ee66ca4</code></a> chore(deps): bump the python-packages group across 1 directory with 8 updates...</li> <li><a href="https://github.com/Kludex/starlette/commit/00d10167523f819d39d5ca36732348d58645a447"><code>00d1016</code></a> fix(tests): skip test_staticfiles_filename_too_long on Windows where os.pathc...</li> <li><a href="https://github.com/Kludex/starlette/commit/d96887ea7b49db3d1d15994be6438c7fe99936f4"><code>d96887e</code></a> Add Pydantic Logfire banner to the docs (<a href="https://redirect.github.com/Kludex/starlette/issues/3428">#3428</a>)</li> <li>Additional commits viewable in <a href="https://github.com/Kludex/starlette/compare/1.3.1...1.6.0">compare view</a></li> </ul> </details> <br /> Updates `pydantic` from 2.13.4 to 2.13.5 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/releases">pydantic's releases</a>.</em></p> <blockquote> <h2>v2.13.5 (2026-08-28)</h2> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Allow reuse of validators when plugins are set by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13535">#13535</a></li> <li>Fix missing GC traversal on some <code>pydantic-core</code> struct fields by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13624">#13624</a></li> <li>Fix missing GC traversal in <code>pydantic-core</code> for <code>GeneralFieldsSerializer</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13629">#13629</a></li> <li>Count validated model fields once in smart unions by <a href="https://github.com/tamird"><code>@tamird</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13731">#13731</a></li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/blob/v2.13.5/HISTORY.md">pydantic's changelog</a>.</em></p> <blockquote> <h2>v2.13.5 (2026-08-28)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.13.5">GitHub release</a></p> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Allow reuse of validators when plugins are set by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13535">#13535</a></li> <li>Fix missing GC traversal on some <code>pydantic-core</code> struct fields by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13624">#13624</a></li> <li>Fix missing GC traversal in <code>pydantic-core</code> for <code>GeneralFieldsSerializer</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13629">#13629</a></li> <li>Count validated model fields once in smart unions by <a href="https://github.com/tamird"><code>@tamird</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13731">#13731</a></li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pydantic/pydantic/commit/001dea020e0809844e5b17666432c9135a976f46"><code>001dea0</code></a> Bump <code>pypa/gh-action-pypi-publish</code> action to v1.14.2</li> <li><a href="https://github.com/pydantic/pydantic/commit/558379fee957fad25858e33596146c72d5674843"><code>558379f</code></a> Bump twine to v7.0.0</li> <li><a href="https://github.com/pydantic/pydantic/commit/2cfd5d3d2ae721ea882c045f83b7f7a4003aab01"><code>2cfd5d3</code></a> Do not check for docs build</li> <li><a href="https://github.com/pydantic/pydantic/commit/a735bee5c64e1fe50785c376adaf1275e752b8ac"><code>a735bee</code></a> Fix more Clippy lints</li> <li><a href="https://github.com/pydantic/pydantic/commit/7eed4a16b87afaced4d0eafae230453de3410d64"><code>7eed4a1</code></a> Fix Clippy 0.1.95 warnings</li> <li><a href="https://github.com/pydantic/pydantic/commit/b353bbb20a4989b4c033e2be2b4a40d36178b16a"><code>b353bbb</code></a> Prepare release v2.13.5</li> <li><a href="https://github.com/pydantic/pydantic/commit/63d2cccd6e760da6bbc7fe81a53cb2bde3768f5e"><code>63d2ccc</code></a> Count validated model fields once in smart unions</li> <li><a href="https://github.com/pydantic/pydantic/commit/a53ec2ed342fda4e6aa3684399d04ea57be9a6e4"><code>a53ec2e</code></a> Speed up PyPy CI tests</li> <li><a href="https://github.com/pydantic/pydantic/commit/d65e0f96e890ca82f4b66a15d5b3bd65af2c661c"><code>d65e0f9</code></a> Workaround circular import error in Mypy</li> <li><a href="https://github.com/pydantic/pydantic/commit/47a6dbf8ad6216211bd0df6ec5c2c6c6ed905b72"><code>47a6dbf</code></a> Fix missing GC traversal in <code>pydantic-core</code> for <code>GeneralFieldsSerializer</code></li> <li>Additional commits viewable in <a href="https://github.com/pydantic/pydantic/compare/v2.13.4...v2.13.5">compare view</a></li> </ul> </details> <br /> Made by [Open SWE](https://openswe.vercel.app/agents/0758e158-6746-5095-b8a0-7f69acf36b73) --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: John Kennedy <65985482+jkennedyvz@users.noreply.github.com> Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com> |
||
|
|
5a77be5e8b |
Merge commit from fork
* authz fix for custom auth * add back resource param * auth on multiple resources |
||
|
|
bdb8a9c7a4 |
feat: route LangSmith traces from thread streams (#8723)
## Description Expose the existing `langsmith_tracing` option on Python sync and async thread-stream run starts and forward it through the protocol. ## Release Note Python thread streams can route traces to an additional LangSmith project per run. ## Test Plan - [x] Verify sync and async run-start payloads include tracing settings ## Related PRs - langchain-ai/agent-protocol#95 - langchain-ai/langgraphjs#2745 - langchain-ai/langgraph-api#4033 Made by [Open SWE](https://openswe.vercel.app/agents/f9e34294-b9c3-52f0-815a-0102188e1181) Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com> |
||
|
|
70918557ca |
feat(sdk-py): add decrypt replacement result (#8598)
## Summary - add `DecryptResult` with plaintext and optional replacement ciphertext - keep raw decrypt return values backward compatible - export the result from `langgraph_sdk` ## Merge order Independent of langgraph-api#3884. Merge and release this SDK change before LSD-1489 consumes the result in langgraph-api. ## Test plan - `make format` - `make lint` - `make test` |
||
|
|
ea5f9cc9fb |
chore: enforce PLC0415 in tests for the remaining packages (#8547)
Follow-up to #8540, which turned on `PLC0415` (import-outside-top-level) for checkpoint-postgres and checkpoint-sqlite. This does the remaining six packages: checkpoint, checkpoint-conformance, langgraph, prebuilt, cli, sdk-py. Scoped to tests, per @sydney-runkle's call on #8540: library code is exempted with `per-file-ignores`, since it still has deferred imports nobody has reviewed and mixing that in would make this hard to read. ## What changed Function-level imports across 56 test files moved to module level. Nine could not move and carry an explicit `# noqa: PLC0415` with a reason: | File | Why it stays local | |---|---| | `libs/langgraph/tests/test_deprecation.py` (4) | the import has to run inside `pytest.warns` for the warning to be observed | | `libs/langgraph/tests/test_serde_allowlist.py` | try/except guard, skips when langchain_core is absent | | `libs/langgraph/tests/test_delta_channel_benchmark.py` | optional psycopg probe | | `libs/checkpoint/tests/test_conformance_delta.py` (3) | protected by a module-level `pytest.importorskip`; hoisting past the guard turns a skip into a collection error | That last one is the trap: an import moved above `pytest.importorskip` silently defeats the guard. I hit it locally and it turned the skip into a `ModuleNotFoundError` at collection. Every file with an `importorskip` or `except ImportError` was checked by hand for this. ## Verification `make lint` and `make test` in each of the six: | Package | Tests | |---|---| | checkpoint | 156 passed, 17 skipped | | checkpoint-conformance | 1 passed | | langgraph | 1968 passed, 4 skipped | | prebuilt | 284 passed | | cli | 336 passed | | sdk-py | 493 passed | Also confirmed the rule actually fires: a throwaway test file with a function-level import is flagged in all six packages, and the source exemption holds. |
||
|
|
b96f6170e7 |
fix(sdk-py): support clearing cron end_time via update(end_time=None) (#8334)
`CronClient.update` / `SyncCronClient.update` stripped all `None`-valued fields from the PATCH body, so `update(end_time=None)` could never clear a previously set cron end time. This routes an explicit `None` through as `end_time: null` (via the existing `NOT_PROVIDED` sentinel), while an omitted argument still leaves the value unchanged. Verified with `make format`, `make lint`, and `make test` in `libs/sdk-py` (493 passed), including two new tests asserting the PATCH body carries an explicit null `end_time`. |
||
|
|
2b1abc807b |
chore: migrate Python type checking to ty (#8002)
## Summary - replace Python lint type-checking from mypy to ty across LangGraph packages - remove mypy config/cache wiring and mypy-only references - regenerate uv locks with ty 0.0.43 ## Verification - git diff --check - make lint_package && make lint_tests in libs/langgraph - make lint_package && make lint_tests in libs/checkpoint - make lint_package && make lint_tests in libs/checkpoint-sqlite - make lint_package && make lint_tests in libs/checkpoint-postgres - make lint_package && make lint_tests in libs/prebuilt - make lint_package && make lint_tests in libs/cli - make lint in libs/sdk-py - make lint in libs/checkpoint-conformance --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: open-swe[bot] <215916821+open-swe[bot]@users.noreply.github.com> |
||
|
|
03b2a9fe5f | test(sdk-py): add factory-graph integration test exercising the server factory path (#7978) | ||
|
|
af5dab5b77 |
fix(sdk-py): percent-encode thread_id in v3 stream transport default paths (#7954)
## Problem Fixes #7953. The v3 SSE and WebSocket stream transports build their default paths by interpolating `thread_id` directly into the URL: ```python self._commands_url = commands_path or f"/threads/{thread_id}/commands" self._stream_url = stream_path or f"/threads/{thread_id}/stream/events" ``` This skips the `_quote_path_param` escaping that the rest of the SDK adopted in #7893. A `thread_id` containing reserved characters or dot-segments is then normalized by the HTTP/WebSocket stack before transmission. For example, `thread_id = "../assistants/abc"`: | | before | |---|---| | constructed | `/threads/../assistants/abc/commands` | | wire path | `/assistants/abc/commands` | So the value stops being one opaque identifier under `/threads/{thread_id}/...` and silently hits a different resource. ## Fix Reuse the existing `_quote_path_param` helper for the **default** paths in all four transports (`http`, `sync_http`, `ws`, `sync_ws`). Explicit `commands_path` / `stream_path` overrides are left untouched, so callers that pass their own paths opt out of encoding as before. `_quote_path_param("../assistants/abc")` → `..%2Fassistants%2Fabc`, which the HTTP/WS stack no longer collapses. ## Tests Adds `tests/streaming/test_transport_path_encoding.py` covering all four transports: - default `_commands_url` / `_stream_url` / `_stream_path` are percent-encoded, - the actual SSE wire path (async + sync) stays under `/threads/`, - the built WebSocket URL (async + sync) stays under `/threads/`, - explicit path overrides are left untouched. `make format`, `make lint`, and `make test` all pass in `libs/sdk-py` (491 passed). |
||
|
|
1fcb768182 |
feat(sdk-py): extract stream decoders and add interleave_projections (#7935)
## Summary Refactors the four (now five) sdk-py streaming projections into reusable, transport-agnostic `Decoder` classes and adds a new `interleave_projections(channels)` method to `AsyncThreadStream` and `SyncThreadStream` that drives multiple decoders from one shared subscription, yielding `(channel_name, item)` tuples in arrival order (the SDK analog of local `GraphRunStream.interleave`). - **New `langgraph_sdk/stream/decoders.py`**: pure `feed(event) -> Iterable[item]` state machines — `ValuesDecoder`, `MessagesDecoder`, `ToolCallsDecoder`, `SubgraphsDecoder`, `ExtensionsDecoder` — behind a `Decoder` Protocol. No subscription/queue/thread access. - **Projection migration (async + sync)**: the five existing projections now delegate their per-event logic to the decoders. Behavior-preserving — the existing test suite is the regression net. Thread-coupled side effects (active-stream registration, terminal-error-on-close, root-inbox forwarding) stay in the projection wrappers; sync messages/tool_calls keep their pre-dispatch contract (handle/stream resolved on yield) via a FIFO-head buffer. - **`interleave_projections`**: flat-namespace channel list (built-ins + extension names), `tool_calls`↔`tools` wire mapping, subgraphs fed every event, extensions keyed by bare name. ### Notable - Fixes a latent sync bug surfaced by the refactor: two tool calls / messages whose events interleave previously dropped the second; both now surface. Locked in with a regression test. - `Decoder.feed` takes `Mapping[str, Any]` (read-only), so the Protocol is load-bearing in both stream files. ### Deferred (not in this PR) - Wiring `RemoteGraph._RemoteGraphRunStream.interleave` to `interleave_projections` (gated on #7927). - Migrating the handle-scoped projections (`_Handle*Projection`) to the decoders — hence the small, verified-identical helper duplication between `decoders.py` and `_async/stream.py`. - `interleave_projections` handles aren't registered for thread-close cleanup (additive follow-up). ## Test Plan - [x] `make test` in `libs/sdk-py` — 464 passed, 0 failures - [x] `make format` / `make lint` (ruff + ty) clean - [x] Per-decoder unit tests in `tests/streaming/test_decoders.py` - [x] `interleave_projections` tests (single-channel, multi-channel arrival order, builtin+extension mix, tool_calls public-name, subgraphs discovery) async + sync - [x] Existing projection suites pass unchanged (regression net for the migration) |
||
|
|
68fa011fc9 |
feat(langgraph): add v3 streaming support to RemoteGraph (#7927)
## Summary
- Adds `stream_events(version="v3")` and `astream_events(version="v3")`
to `RemoteGraph`, matching the local `CompiledStateGraph` surface and
unblocking polymorphic v3 streaming over `Graph | RemoteGraph`.
- Implementation is a thin adapter
(`libs/langgraph/langgraph/pregel/_remote_run_stream.py`) that wraps the
v3 SDK's `AsyncThreadStream` / `SyncThreadStream` and duck-types
`GraphRunStream` / `AsyncGraphRunStream`. No coupling to local v3 mux
internals.
- `v1` / `v2` paths unchanged. `astream_events(version='v1'|'v2')` still
raises `NotImplementedError` (separate gap).
### Scope decisions baked into this PR
- Unsupported v3 kwargs hard-reject at dispatch with
`NotImplementedError`: `control`, `transformers`, `interrupt_before`,
`interrupt_after`, and any unknown `**kwargs`. Server / SDK don't plumb
these through v3 yet; easy to lift later.
- Sync `interleave()` raises `NotImplementedError` pointing callers at
`astream_events`. Real sync interleave would need drainer threads;
deferred since most sync RemoteGraph callers just iterate raw events.
- Async `interleave()` is best-effort ordering (client receive order),
documented as a divergence from local v3's monotonic stamp ordering.
- Adapter `interrupted` / `interrupts` properties are **non-blocking**
snapshots of the SDK's current state. This differs from local
`(Async)GraphRunStream.interrupted`, which pump-drives the run to
terminal before returning. Callers needing a wait-for-interrupt pattern
should drain a projection (e.g., `interleave('values')`) until the SDK's
paused sentinel fires. Documented in the adapter docstrings.
### Audit of impact
Existing RemoteGraph callers in this org all use the v2 `.stream()` /
`.astream()` path (deepagents production wrapper, langgraph-api test
graphs, langgraph-supervisor TS type guard). **Zero callers** use
`stream_events` / `astream_events` on RemoteGraph today, so the new v3
methods are net-new surface — no risk of breaking existing consumers.
### Out of scope (follow-ups)
- Bumping `libs/langgraph/pyproject.toml`'s `langgraph-sdk` constraint
from `<0.4.0` to `<0.5.0`. Deferred until 0.4.0 publishes to PyPI; dev
resolution unaffected via the editable workspace dep.
- Real `astream_events(version='v1'|'v2')` implementation.
- Server-side plumbing for `control` / `interrupt_before` /
`interrupt_after` on v3 runs.
- Sync `interleave()` via drainer threads.
## Test plan
- [x] \`make test\` in \`libs/langgraph/\`: 1874 passed, 4 skipped (43
new in \`test_remote_graph_v3.py\`)
- [x] \`make lint\` in \`libs/langgraph/\`: ruff + mypy clean
- [x] \`pytest -m integration
tests/integration/test_remote_graph_v3.py\` in \`libs/sdk-py/\` against
the docker stack: 4/4 passed in 1.35s
- [x] Manual smoke: \`RemoteGraph('tools_agent',
url='http://localhost:2024').astream_events(..., version='v3')\`
end-to-end against the v3 integration api
- [x] Existing RemoteGraph v2 tests untouched (31 passed, 3 skipped with
docker up)
- [x] Will need rebase after \`langgraph-sdk 0.4.0\` lands on PyPI and
the version constraint is bumped in a separate PR
|
||
|
|
8cb0f3a96d | feat(sdk-py): add thread stream helpers (#7833) | ||
|
|
fd4257300e | feat(sdk-py): wire websocket stream selection (#7832) | ||
|
|
d482fca105 | feat(sdk-py): add websocket stream transports (#7830) | ||
|
|
4f3ab2f969 | feat(sdk-py): harden streaming reconnects (#7829) | ||
|
|
3282ac10e3 | feat(sdk-py): add sync scoped subgraphs (#7828) | ||
|
|
3d61d1b32f | feat(sdk-py): add sync messages and tool calls (#7827) | ||
|
|
fe1c683fe1 | feat(sdk-py): add sync thread stream core (#7826) | ||
|
|
10b701cf41 | feat(sdk-py): add async stream reconnect support (#7825) | ||
|
|
bb9cfe7a22 | feat(sdk-py): add scoped subgraph handles (#7824) | ||
|
|
30fea64687 | feat(sdk-py): add messages and tool call projections (#7823) | ||
|
|
66ec594540 | feat(sdk-py): add output, values, and controller extraction (#7822) | ||
|
|
221deee774 | feat(sdk-py): wire lifecycle state and output prerequisites (#7821) | ||
|
|
d03310abbb | feat(sdk-py): add shared stream subscriptions (#7820) | ||
|
|
22259558cc | feat(sdk-py): add async thread stream skeleton (#7819) | ||
|
|
3268a54791 | feat(sdk-py): add v3 streaming primitives and SSE transport (#7818) | ||
|
|
604534e1b7 |
fix(sdk-py): percent-encode caller-supplied identifiers in URL paths (#7893)
## Summary Wraps every caller-supplied identifier (thread_id, assistant_id, run_id, cron_id, checkpoint_id, namespace) interpolated into request URL paths with `urllib.parse.quote(safe="")` via a new `_quote_path_param` helper. All-dot strings are encoded as `%2E` triplets so they aren't collapsed by httpx's client-side path normalization. Helper raises `TypeError` for None/bytes inputs. ## Test plan - [x] `make format` / `make lint` / `make test` from `libs/sdk-py` |
||
|
|
ed168deb97 |
feat(sdk-py): support metadata filter for crons search/count (#7737)
## Description Mirrors a server-side change by accepting an optional \`metadata\` filter on \`crons.search\` and \`crons.count\` in both the async and sync Python SDK clients. Matches the existing pattern used for assistants/threads search. ## Release Note Python SDK: \`crons.search\` and \`crons.count\` now accept an optional \`metadata\` filter that is forwarded to the server. ## Test Plan - [ ] New unit tests in \`tests/test_crons_client.py\` verify metadata is forwarded for both async and sync clients and omitted when not provided. --------- Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com> Co-authored-by: Parker J. Rule <pjrule@users.noreply.github.com> |
||
|
|
e49c093f48 |
chore(deps): bump ty from 0.0.23 to 0.0.33 in /libs/sdk-py (#7666)
Bumps the minor-and-patch group with 1 update in the /libs/sdk-py directory: [ty](https://github.com/astral-sh/ty). Updates `ty` from 0.0.23 to 0.0.33 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ty/releases">ty's releases</a>.</em></p> <blockquote> <h2>0.0.33</h2> <h2>Release Notes</h2> <p>Released on 2026-04-28.</p> <h3>Notable changes</h3> <ul> <li> <p>ty now prefers the declared type of an annotated assignment in more situations (<a href="https://redirect.github.com/astral-sh/ruff/pull/24802">#24802</a>). Consider this example:</p> <pre lang="py"><code>from some_library import untyped_function <p>threshold: int | None = 0 result: str = untyped_function() </code></pre></p> <p>ty previously favored the <em>inferred</em> type of the right hand side expression when <code>threshold</code> and <code>result</code> were used. This is useful for <code>threshold</code>, as it allows something like <code>threshold += 1</code> to work without an error: we know that <code>threshold</code> could later become <code>None</code>, but <em>right now</em>, we see that it is an <code>int</code>. However, for <code>result</code>, the inferred type is <code>Unknown</code>. This is <em>not</em> a useful type and it can lead to false negatives. Starting with this release, ty will therefore prefer the declared type <em>if the inferred and declared types are mutually assignable</em>. In the above example, <code>threshold</code> will still be inferred as <code>int</code> (or rather <code>Literal[1]</code>), but <code>result</code> will now be inferred as <code>str</code>. If you previously added <code>cast</code>s to work around this behavior, you should be able to remove them after upgrading.</p> </li> </ul> <h3>Bug fixes</h3> <ul> <li>Fix reporting of annotation-only locals as unused (<a href="https://redirect.github.com/astral-sh/ruff/pull/24811">#24811</a>)</li> <li>Fix project and workspace selection (<a href="https://redirect.github.com/astral-sh/ruff/pull/24824">#24824</a>)</li> <li>Fix go-to definition for generic classes (<a href="https://redirect.github.com/astral-sh/ruff/pull/24714">#24714</a>)</li> <li>Fix receiver coloring for aliased decorators (<a href="https://redirect.github.com/astral-sh/ruff/pull/24884">#24884</a>)</li> </ul> <h3>LSP server</h3> <ul> <li>Add support for go-to definition in literal enum member inlay hints (<a href="https://redirect.github.com/astral-sh/ruff/pull/24792">#24792</a>)</li> <li>Add support for "baking" keyword argument inlay hints into the source code (<a href="https://redirect.github.com/astral-sh/ruff/pull/24667">#24667</a>)</li> <li>Don't allow inlay hint edits when introducing a non global scope symbol (<a href="https://redirect.github.com/astral-sh/ruff/pull/24797">#24797</a>)</li> <li>Omit semantic highlighting for unresolved symbols (<a href="https://redirect.github.com/astral-sh/ruff/pull/24718">#24718</a>)</li> </ul> <h3>Core type checking</h3> <ul> <li>Support narrowing with aliased conditional expressions (<a href="https://redirect.github.com/astral-sh/ruff/pull/24302">#24302</a>)</li> <li>Model short-circuiting control flow in Boolean expressions (<a href="https://redirect.github.com/astral-sh/ruff/pull/24458">#24458</a>)</li> <li>Handle <code>finally</code> blocks where all <code>try</code>/<code>except</code> blocks are terminal (<a href="https://redirect.github.com/astral-sh/ruff/pull/24882">#24882</a>)</li> <li>Detect invalid <code>ClassVar</code> vs instance-attribute overrides (<a href="https://redirect.github.com/astral-sh/ruff/pull/24767">#24767</a>)</li> <li>Emit diagnostic for invalid uses of <code>Unpack[...]</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/24868">#24868</a>)</li> <li>Infer lambda parameter types with <code>Callable</code> type context (<a href="https://redirect.github.com/astral-sh/ruff/pull/24317">#24317</a>)</li> <li>Support <code>**</code> unpacking of <code>TypedDict</code> in dict-literal assignments (<a href="https://redirect.github.com/astral-sh/ruff/pull/24703">#24703</a>)</li> <li>Support <code>Unpack[TypedDict]</code> in <code>**kwargs</code> signatures (<a href="https://redirect.github.com/astral-sh/ruff/pull/24653">#24653</a>)</li> <li>Treat <code>[*xs]</code> as an irrefutable pattern when matching on <code>Sequence</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/24787">#24787</a>)</li> <li>Improve generics solving for unions in invariant positions (<a href="https://redirect.github.com/astral-sh/ruff/pull/24698">#24698</a>)</li> <li>Improve generics solving for unions when matching against protocols (<a href="https://redirect.github.com/astral-sh/ruff/pull/24837">#24837</a>)</li> </ul> <h3>Diagnostics</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/astral-sh/ty/blob/main/CHANGELOG.md">ty's changelog</a>.</em></p> <blockquote> <h2>0.0.33</h2> <p>Released on 2026-04-28.</p> <h3>Notable changes</h3> <ul> <li> <p>ty now prefers the declared type of an annotated assignment in more situations (<a href="https://redirect.github.com/astral-sh/ruff/pull/24802">#24802</a>). Consider this example:</p> <pre lang="py"><code>from some_library import untyped_function <p>threshold: int | None = 0 result: str = untyped_function() </code></pre></p> <p>ty previously favored the <em>inferred</em> type of the right hand side expression when <code>threshold</code> and <code>result</code> were used. This is useful for <code>threshold</code>, as it allows something like <code>threshold += 1</code> to work without an error: we know that <code>threshold</code> could later become <code>None</code>, but <em>right now</em>, we see that it is an <code>int</code>. However, for <code>result</code>, the inferred type is <code>Unknown</code>. This is <em>not</em> a useful type and it can lead to false negatives. Starting with this release, ty will therefore prefer the declared type <em>if the inferred and declared types are mutually assignable</em>. In the above example, <code>threshold</code> will still be inferred as <code>int</code> (or rather <code>Literal[1]</code>), but <code>result</code> will now be inferred as <code>str</code>. If you previously added <code>cast</code>s to work around this behavior, you should be able to remove them after upgrading.</p> </li> </ul> <h3>Bug fixes</h3> <ul> <li>Fix reporting of annotation-only locals as unused (<a href="https://redirect.github.com/astral-sh/ruff/pull/24811">#24811</a>)</li> <li>Fix project and workspace selection (<a href="https://redirect.github.com/astral-sh/ruff/pull/24824">#24824</a>)</li> <li>Fix go-to definition for generic classes (<a href="https://redirect.github.com/astral-sh/ruff/pull/24714">#24714</a>)</li> <li>Fix receiver coloring for aliased decorators (<a href="https://redirect.github.com/astral-sh/ruff/pull/24884">#24884</a>)</li> </ul> <h3>LSP server</h3> <ul> <li>Add support for go-to definition in literal enum member inlay hints (<a href="https://redirect.github.com/astral-sh/ruff/pull/24792">#24792</a>)</li> <li>Add support for "baking" keyword argument inlay hints into the source code (<a href="https://redirect.github.com/astral-sh/ruff/pull/24667">#24667</a>)</li> <li>Don't allow inlay hint edits when introducing a non global scope symbol (<a href="https://redirect.github.com/astral-sh/ruff/pull/24797">#24797</a>)</li> <li>Omit semantic highlighting for unresolved symbols (<a href="https://redirect.github.com/astral-sh/ruff/pull/24718">#24718</a>)</li> </ul> <h3>Core type checking</h3> <ul> <li>Support narrowing with aliased conditional expressions (<a href="https://redirect.github.com/astral-sh/ruff/pull/24302">#24302</a>)</li> <li>Model short-circuiting control flow in Boolean expressions (<a href="https://redirect.github.com/astral-sh/ruff/pull/24458">#24458</a>)</li> <li>Handle <code>finally</code> blocks where all <code>try</code>/<code>except</code> blocks are terminal (<a href="https://redirect.github.com/astral-sh/ruff/pull/24882">#24882</a>)</li> <li>Detect invalid <code>ClassVar</code> vs instance-attribute overrides (<a href="https://redirect.github.com/astral-sh/ruff/pull/24767">#24767</a>)</li> <li>Emit diagnostic for invalid uses of <code>Unpack[...]</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/24868">#24868</a>)</li> <li>Infer lambda parameter types with <code>Callable</code> type context (<a href="https://redirect.github.com/astral-sh/ruff/pull/24317">#24317</a>)</li> <li>Support <code>**</code> unpacking of <code>TypedDict</code> in dict-literal assignments (<a href="https://redirect.github.com/astral-sh/ruff/pull/24703">#24703</a>)</li> <li>Support <code>Unpack[TypedDict]</code> in <code>**kwargs</code> signatures (<a href="https://redirect.github.com/astral-sh/ruff/pull/24653">#24653</a>)</li> <li>Treat <code>[*xs]</code> as an irrefutable pattern when matching on <code>Sequence</code> (<a href="https://redirect.github.com/astral-sh/ruff/pull/24787">#24787</a>)</li> <li>Improve generics solving for unions in invariant positions (<a href="https://redirect.github.com/astral-sh/ruff/pull/24698">#24698</a>)</li> <li>Improve generics solving for unions when matching against protocols (<a href="https://redirect.github.com/astral-sh/ruff/pull/24837">#24837</a>)</li> </ul> <h3>Diagnostics</h3> <ul> <li>Add error context to <code>invalid-return-type</code> diagnostics, <code>invalid-yield</code> diagnostics, attribute assignment diagnostics (<a href="https://redirect.github.com/astral-sh/ruff/pull/24770">#24770</a>, <a href="https://redirect.github.com/astral-sh/ruff/pull/24771">#24771</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/astral-sh/ty/commit/c512d8425418a2170e92aa7fbbd70952d4e04118"><code>c512d84</code></a> Bump version to 0.0.33 (<a href="https://redirect.github.com/astral-sh/ty/issues/3368">#3368</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/4cd7b334b90eba09042700e7b654044c2d6bcd15"><code>4cd7b33</code></a> Upgrade Depot runners from macOS 14 to 15 (<a href="https://redirect.github.com/astral-sh/ty/issues/3363">#3363</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/c78b8324515bf15a662f61e1d74fd85484d67e8c"><code>c78b832</code></a> Update rui314/setup-mold digest to 9c9c13b (<a href="https://redirect.github.com/astral-sh/ty/issues/3342">#3342</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/dea338134aef96d741a48886e414f622dbf10426"><code>dea3381</code></a> Update actions/cache action to v5.0.5 (<a href="https://redirect.github.com/astral-sh/ty/issues/3343">#3343</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/d451af477bd5517e132609c3b016799d697f4182"><code>d451af4</code></a> update typing-features and faqs (<a href="https://redirect.github.com/astral-sh/ty/issues/3335">#3335</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/052d70bc1a7457f50c5acbafe8de7a846f7d5e77"><code>052d70b</code></a> Update prek dependencies (<a href="https://redirect.github.com/astral-sh/ty/issues/3344">#3344</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/66b5e878163ce4ab4810a45a2679a98011932b8b"><code>66b5e87</code></a> Update astral-sh/setup-uv action to v8.1.0 (<a href="https://redirect.github.com/astral-sh/ty/issues/3345">#3345</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/7ec6712a6f02d0255de4c7f0066d5bb23987a9bb"><code>7ec6712</code></a> Add a 'Diagnostics improvements' section to the changelogs (<a href="https://redirect.github.com/astral-sh/ty/issues/3309">#3309</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/978dfdb38dfb568943f73779d769a965c1d5a397"><code>978dfdb</code></a> Add version metadata publishing to the release process (<a href="https://redirect.github.com/astral-sh/ty/issues/3292">#3292</a>)</li> <li><a href="https://github.com/astral-sh/ty/commit/4d1e1fc57ca8bfdcbcee513ba92135d2932eb279"><code>4d1e1fc</code></a> Bump version to 0.0.32 (<a href="https://redirect.github.com/astral-sh/ty/issues/3302">#3302</a>)</li> <li>Additional commits viewable in <a href="https://github.com/astral-sh/ty/compare/0.0.23...0.0.33">compare view</a></li> </ul> </details> <br /> --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: John Kennedy <65985482+jkennedyvz@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|
|
60e305596d |
feat(sdk-py): add return_minimal to threads update (#7704)
Adds a first-class `return_minimal` option to the Python `threads.update` clients. When enabled, the SDK sends `Prefer: return=minimal` and returns `None` for the 204 response. Covers both async and sync clients with focused tests. |
||
|
|
b8540449b4 |
feat(sdk-py): add langsmith_tracing param to runs.create/stream/wait (#7431)
## Summary - Adds a `langsmith_tracing` parameter to `runs.create()`, `runs.stream()`, and `runs.wait()` on both async and sync SDK clients - Accepts a `LangSmithTracing` TypedDict with optional `project_name` and `example_id` fields - Maps to the server's existing `langsmith_tracer` payload key, enabling users to route traces to specific LangSmith projects or associate with dataset examples from the SDK ## Test plan - [x] Unit tests verify payload serialization (langsmith_tracing → langsmith_tracer mapping) - [x] Unit tests verify key is excluded when param not provided - [x] Unit tests verify partial configs (project_name only) work - [x] API parity tests pass (async/sync client signatures match) - [x] Full test suite passes (86 tests) - [x] Lint + type check pass Release Notes: Added `langsmith_tracing` parameter to `runs.create()`, `runs.stream()`, and `runs.wait()` in the Python SDK, allowing users to route traces to a specific LangSmith project or associate with a dataset example. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Will Fu-Hinthorn <will@langchain.dev> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> |
||
|
|
54c92757f2 |
release(sdk-py): 0.3.12 (#7224)
Release Note: Impllemnets alpha support for server-side SWR w/ the cache |
||
|
|
46fed9d161 |
feat: type safe stream/invoke w/ proper output type coercion (#6961)
Adding type safe streaming + more robust pydantic + dataclass support on graph outputs * type safe streaming via #6931 * type safe invoke via https://github.com/langchain-ai/langgraph/pull/6963 * actually thread through types via parametrization in https://github.com/langchain-ai/langgraph/pull/7009 * deprecation of backwards compatible accessor via https://github.com/langchain-ai/langgraph/pull/7011 full spec of changes: https://github.com/langchain-ai/langgraph/issues/7008 proving out that required changes are minimal even when we update the default to v2: https://github.com/langchain-ai/langchain/pull/35541 |
||
|
|
095da17833 | chore: state_updated_at sort by (#6857) | ||
|
|
9f0ae94f27 |
chore: Re-organize client files. (#6787)
Additional guidelines: - Make sure optional dependencies are imported within a function. - Please do not add dependencies to `pyproject.toml` files (even optional ones) unless they are **required** for unit tests. - Most PRs should not touch more than one package. - Changes should be backwards compatible. --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> |
||
|
|
1fb405bd55 |
feat(sdk-py): add update method for crons client (#6742)
# Description - Update Python SDK to add patch method to cron client - This method lets users modify cron attributes (except assistant ID and thread ID) --------- Co-authored-by: William Fu-Hinthorn <13333726+hinthornw@users.noreply.github.com> |
||
|
|
63bd852da9 |
feat(sdk-py): add support for enabling/disabling crons (#6740)
# Description - Update Python SDK to support enabling/disabling crons - Pass `enabled` to cron `create`, `create_for_thread`, and `search` methods |
||
|
|
e820097701 | chore: Better error messages (#6681) | ||
|
|
5212369bd0 |
feat(sdk-py): add end-time to crons client (#6674)
**Description:** The crons create endpoint supports an end-time field that is not currently supported in the client. Adding that parameter here. **Issue:** N/A **Dependencies:** N/A **Twitter handle:** N/A |
||
|
|
b4630d8452 | chore: delete docs (#6488) | ||
|
|
9eac53db4b |
fix(sdk-py): remove model-type specific custom json encryption annotations & document key preservation limitations (#6595)
In langgraph-api, custom-encrypted JSONs need to continue to be SQL-json-mergable after encryption. Previous WIP docs advocated for custom encryption impls where all encrypted kv pairs were shoved into a `__encrypted__: $encrypted_kvs` meta-key. Turns out that pattern causes data loss when running PATCH-style partial updates or in the many places langgraph-api json-SQL-merges across model types. This PR contains 2 SDK fixes: 1. remove model-type specific custom json encryption annotations - these cause surprising behavior as config and context data propagates across model types, specifically because today we can't guarantee that data encrypted as one model-type will be decrypted as the same model-type because kv pairs move across model-types in pure SQL 2. document limitations and validation around "key preservation" in custom json encryption functions. langgraph-api now validates that custom JSON encryption fns don't change keys. That validation prevents customizers from writing custom encryption functions that cause data loss through patch endpoints and x-model merge propagation. --------- Signed-off-by: Connor Braa <cwlbraa@langchain.dev> |
||
|
|
efe78447b3 |
feat(sdk-py): emit id as part of stream events (#6581)
- **Description:** Provide the id of the event for routes that use SSE streams. This will allow for more custom retry logic when streams disconnect if needed. - **Issue:** N/A - **Dependencies:** N/A - **Twitter handle:** N/A --------- Co-authored-by: William FH <13333726+hinthornw@users.noreply.github.com> |
||
|
|
94698c8a34 |
feat: custom encryption at rest (#6482)
**Description:** This PR adds the Python SDK types necessary for langgraph platform users to inject their own custom encryption-at-rest functions. See [docs PR](https://github.com/langchain-ai/docs/pull/1715) for more details. note: this PR adds a starlette dev dependency so that custom encryption can access BaseUser information. **Issue:** required for LSD-172 **Dependencies:** - [depended upon by associated langgraph-api changes](https://github.com/langchain-ai/langgraph-api/pull/1773)(this PR must merge before that one) - [docs PR](https://github.com/langchain-ai/docs/pull/1715) **TODO:** - [x] move docs to docs repo - [x] bump package versions before merge --------- Signed-off-by: Connor Braa <cwlbraa@langchain.dev> Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
55ed7d4b49 | feat: Include pagination in assistants search response (#6526) | ||
|
|
23d78c2817 |
feat(sdk-py): add sentinel to skip auto loading api key on sdk client create (#6500)
**Description:** There are times a user might want to create the client, but conditionally set the API key. For example, consider a complex auth situation where the system has user callers using jwts and system callers using API keys. This allows explicitly disabling the auto-loading behavior of API keys in the client today, so no key is set. **Issue:** N/A **Dependencies:** None **Twitter handle:** N/A |
||
|
|
f8c1a323cc | chore(sdk-py): Improve type-hinting of inputs (#6480) | ||
|
|
ed07d4a5d4 | chore(sdk-py): Add more type checking. (#6479) | ||
|
|
32d66d48eb |
chore(sdk-py): type errors nicely (#6173)
This PR types errors in a nicer way |
||
|
|
6f45f13952 |
fix: Handle SSE stream reconnection in Python SDK (#6159)
## Summary - add a public accessor for the last received SSE event id - retry async and sync SSE streams using the Location reconnect path and Last-Event-ID while skipping empty events - add regression tests that simulate interrupted SSE streams for both async and sync clients ## Testing - make format - make lint - make test ------ https://chatgpt.com/codex/tasks/task_e_68ca8bfa26cc832d98bcb359884962ec |
||
|
|
eeadeb282e |
fix: Ensure SSE streams flush trailing events (#6155)
## Summary - ensure both async and sync HTTP clients flush the SSE decoder after streaming - add regression tests covering trailing SSE events without a terminating blank line ## Testing - make format - make lint - make test ------ https://chatgpt.com/codex/tasks/task_e_68c9727ca9f8832d9f207323c5e02a72 |