Commit Graph

700 Commits

Author SHA1 Message Date
langchain-oss-model-profiles[bot]
2f527debdd chore(model-profiles): refresh model profile data (#38774)
Automated refresh of model profile data for all in-monorepo partner
integrations via `langchain-profiles refresh`.

🤖 Generated by the [`refresh_model_profiles`
workflow](https://github.com/langchain-ai/langchain/blob/master/.github/workflows/refresh_model_profiles.yml).


## Summary of changes

**11 added · 4 removed · 44 changed** across 2 provider(s).

<details>
<summary>openai</summary>

** 4 added**
- `gpt-5.6` — 1,050,000 ctx, 128,000 out, text+image+pdf in, reasoning,
tools
- `gpt-5.6-luna` — 1,050,000 ctx, 128,000 out, text+image+pdf in,
reasoning, tools
- `gpt-5.6-sol` — 1,050,000 ctx, 128,000 out, text+image+pdf in,
reasoning, tools
- `gpt-5.6-terra` — 1,050,000 ctx, 128,000 out, text+image+pdf in,
reasoning, tools

</details>

<details>
<summary>openrouter</summary>

** 7 added**
- `cognitivecomputations/dolphin-mistral-24b-venice-edition` — 128,000
ctx, 8,192 out
- `openai/gpt-5.6-luna` — 1,050,000 ctx, 128,000 out, text+image+pdf in,
reasoning, tools
- `openai/gpt-5.6-luna-pro` — 1,050,000 ctx, 128,000 out, text+image+pdf
in, reasoning, tools
- `openai/gpt-5.6-sol` — 1,050,000 ctx, 128,000 out, text+image+pdf in,
reasoning, tools
- `openai/gpt-5.6-sol-pro` — 1,050,000 ctx, 128,000 out, text+image+pdf
in, reasoning, tools
- `openai/gpt-5.6-terra` — 1,050,000 ctx, 128,000 out, text+image+pdf
in, reasoning, tools
- `openai/gpt-5.6-terra-pro` — 1,050,000 ctx, 128,000 out,
text+image+pdf in, reasoning, tools

** 4 removed**
- `google/gemini-2.5-flash-lite-preview-09-2025`
- `liquid/lfm-2-24b-a2b`
- `poolside/laguna-xs.2`
- `poolside/laguna-xs.2:free`

**✏️ 44 changed**
- `anthracite-org/magnum-v4-72b`: max input tokens 16,384 → 32,768
- `baidu/ernie-4.5-vl-424b-a47b`: max input tokens 123,000 → 131,072
- `deepseek/deepseek-chat`: max input tokens 128,000 → 131,072
- `deepseek/deepseek-r1`: max input tokens 64,000 → 163,840
- `deepseek/deepseek-r1-distill-llama-70b`: max input tokens 8,192 →
128,000
- `deepseek/deepseek-v3.2`: max input tokens 128,000 → 131,072
- `google/gemini-3.1-pro-preview-customtools`: max input tokens
1,048,576 → 1,048,756
- `google/gemma-4-26b-a4b-it:free`: max input tokens 131,072 → 262,144
- `meta-llama/llama-3.2-1b-instruct`: max input tokens 60,000 → 131,072
- `meta-llama/llama-3.3-70b-instruct:free`: max input tokens 65,536 →
131,072
- `meta-llama/llama-4-scout`: max input tokens 327,680 → 10,000,000
- `microsoft/wizardlm-2-8x22b`: max input tokens 65,535 → 65,536
- `minimax/minimax-m2.5`: max input tokens 196,608 → 204,800
- `minimax/minimax-m2.7`: max input tokens 196,608 → 204,800
- `minimax/minimax-m3`: max input tokens 524,288 → 1,048,576; max output
tokens 512,000 → 131,072
- `moonshotai/kimi-k2.5`: max input tokens 256,000 → 262,144
- `moonshotai/kimi-k2.7-code`: max output tokens 16,384 → 262,144
- `nvidia/nemotron-3-super-120b-a12b`: max input tokens 262,144 →
1,000,000
- `nvidia/nemotron-3-super-120b-a12b:free`: max input tokens 262,144 →
1,000,000
- `nvidia/nemotron-3-ultra-550b-a55b`: max input tokens 262,144 →
1,000,000
- `poolside/laguna-m.1`: last updated `2026-04-28` → `2026-06-13`
- `poolside/laguna-m.1:free`: last updated `2026-04-28` → `2026-06-13`
- `qwen/qwen-2.5-72b-instruct`: max input tokens 32,768 → 131,072
- `qwen/qwen-2.5-7b-instruct`: max input tokens 32,768 → 131,072
- `qwen/qwen-2.5-coder-32b-instruct`: max input tokens 32,768 → 128,000
- …and 19 more

</details>

Co-authored-by: mdrxy <61371264+mdrxy@users.noreply.github.com>
2026-07-10 10:24:05 -04:00
ccurme
bc1540084b release(openai): 1.3.4 (#38731) 2026-07-08 18:51:10 -04:00
Naomi
fa0114511b fix(openai): suppress Pydantic serializer warning on structured output parsed field (#37727) 2026-07-08 18:28:39 -04:00
Mason Daugherty
b08c3913fb test(openai): skip Codex VCR tests before cassette setup (#38690)
Codex integration tests need to be skipped in CI whenever VCR is not in
playback mode, but the setup-time skip ran too late: `pytest-recording`
could already try to open a cassette and hit the missing on-disk OAuth
token first. Moving the skip to collection time marks the matching Codex
tests before cassette setup while keeping the existing VCR-token fake
for playback runs.

## Changes
- Add a `pytest_collection_modifyitems` hook that marks Codex chat-model
integration tests as skipped in CI unless VCR is replaying existing
cassettes.
- Scope collection-time matching to the local chat-model
integration-test directory so same-named modules collected elsewhere are
not skipped accidentally.
- Keep the OAuth-token fake path active for VCR playback by preserving
`_fake_codex_oauth_token` behavior when `record_mode` is `none`.
2026-07-06 11:29:03 -04:00
dependabot[bot]
4e208f1e40 chore: bump the minor-and-patch group across 3 directories with 11 updates (#38587)
Bumps the minor-and-patch group with 7 updates in the
/libs/model-profiles directory:

| Package | From | To |
| --- | --- | --- |
| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) |
`1.3.0` | `1.4.0` |
| [pytest-socket](https://github.com/miketheman/pytest-socket) | `0.7.0`
| `0.8.0` |
| [syrupy](https://github.com/syrupy-project/syrupy) | `5.2.0` | `5.3.4`
|
| [ruff](https://github.com/astral-sh/ruff) | `0.15.13` | `0.15.20` |
| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.8.18`
| `0.9.4` |
| [uuid-utils](https://github.com/aminalaee/uuid-utils) | `0.15.0` |
`0.16.2` |
| [langgraph](https://github.com/langchain-ai/langgraph) | `1.2.5` |
`1.2.7` |

Bumps the minor-and-patch group with 7 updates in the
/libs/standard-tests directory:

| Package | From | To |
| --- | --- | --- |
| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) |
`1.3.0` | `1.4.0` |
| [pytest-socket](https://github.com/miketheman/pytest-socket) | `0.7.0`
| `0.8.0` |
| [syrupy](https://github.com/syrupy-project/syrupy) | `5.2.0` | `5.3.4`
|
| [ruff](https://github.com/astral-sh/ruff) | `0.15.13` | `0.15.20` |
| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.8.18`
| `0.9.4` |
| [uuid-utils](https://github.com/aminalaee/uuid-utils) | `0.15.0` |
`0.16.2` |
| [langchain-protocol](https://github.com/langchain-ai/agent-protocol) |
`0.0.17` | `0.0.18` |

Bumps the minor-and-patch group with 9 updates in the
/libs/text-splitters directory:

| Package | From | To |
| --- | --- | --- |
| [pytest-asyncio](https://github.com/pytest-dev/pytest-asyncio) |
`1.3.0` | `1.4.0` |
| [pytest-socket](https://github.com/miketheman/pytest-socket) | `0.7.0`
| `0.8.0` |
| [ruff](https://github.com/astral-sh/ruff) | `0.15.13` | `0.15.20` |
| [langsmith](https://github.com/langchain-ai/langsmith-sdk) | `0.8.18`
| `0.9.4` |
| [uuid-utils](https://github.com/aminalaee/uuid-utils) | `0.15.0` |
`0.16.2` |
| [langchain-protocol](https://github.com/langchain-ai/agent-protocol) |
`0.0.17` | `0.0.18` |
| [beautifulsoup4](https://www.crummy.com/software/BeautifulSoup/bs4/) |
`4.14.3` | `4.15.0` |
| [transformers](https://github.com/huggingface/transformers) | `5.8.1`
| `5.12.1` |
|
[sentence-transformers](https://github.com/huggingface/sentence-transformers)
| `5.5.0` | `5.6.0` |


Updates `pytest-asyncio` from 1.3.0 to 1.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-asyncio/releases">pytest-asyncio's
releases</a>.</em></p>
<blockquote>
<h2>pytest-asyncio v1.4.0</h2>
<h1><a
href="https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0">1.4.0</a>
- 2026-05-26</h1>
<h2>Deprecated</h2>
<ul>
<li>Overriding the <em>event_loop_policy</em> fixture is deprecated. Use
the <code>pytest_asyncio_loop_factories</code> hook instead. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419">#1419</a>)</li>
</ul>
<h2>Added</h2>
<ul>
<li>
<p>Added the <code>pytest_asyncio_loop_factories</code> hook to
parametrize asyncio tests with custom event loop factories.</p>
<p>The hook returns a mapping of factory names to loop factories, and
<code>pytest.mark.asyncio(loop_factories=[...])</code> selects a subset
of configured factories per test. When a single factory is configured,
test names are unchanged.</p>
<p>Synchronous <code>@pytest_asyncio.fixture</code> functions now see
the correct event loop when custom loop factories are configured, even
when test code disrupts the current event loop (e.g., via
<code>asyncio.run()</code> or
<code>asyncio.set_event_loop(None)</code>). (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164">#1164</a>)</p>
</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Improved the readability of the warning message that is displayed
when <code>asyncio_default_fixture_loop_scope</code> is unset (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298">#1298</a>)</li>
<li>Only import <code>asyncio.AbstractEventLoopPolicy</code> for type
checking to avoid raising
a DeprecationWarning. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394">#1394</a>)</li>
<li>Updated minimum supported pytest version to v8.4.0. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1397">#1397</a>)</li>
</ul>
<h2>Fixed</h2>
<ul>
<li>Fixed a <code>ResourceWarning: unclosed event loop</code> warning
that could occur when a synchronous test called
<code>asyncio.run()</code> or otherwise unset the current event loop
after pytest-asyncio had run an async test or fixture. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/724">#724</a>)</li>
</ul>
<h2>Notes for Downstream Packagers</h2>
<ul>
<li>Added dependency on <code>sphinx-tabs &gt;= 3.5</code> to organize
documentation examples into tabs. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1395">#1395</a>)</li>
</ul>
<h2>pytest-asyncio v1.4.0a2</h2>
<h1><a
href="https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0a2">1.4.0a2</a>
- 2026-05-02</h1>
<h2>Deprecated</h2>
<ul>
<li>Overriding the <em>event_loop_policy</em> fixture is deprecated. Use
the <code>pytest_asyncio_loop_factories</code> hook instead. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419">#1419</a>)</li>
</ul>
<h2>Added</h2>
<ul>
<li>
<p>Added the <code>pytest_asyncio_loop_factories</code> hook to
parametrize asyncio tests with custom event loop factories.</p>
<p>The hook returns a mapping of factory names to loop factories, and
<code>pytest.mark.asyncio(loop_factories=[...])</code> selects a subset
of configured factories per test. When a single factory is configured,
test names are unchanged on pytest 8.4+.</p>
<p>Synchronous <code>@pytest_asyncio.fixture</code> functions now see
the correct event loop when custom loop factories are configured, even
when test code disrupts the current event loop (e.g., via
<code>asyncio.run()</code> or
<code>asyncio.set_event_loop(None)</code>). (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164">#1164</a>)</p>
</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Improved the readability of the warning message that is displayed
when <code>asyncio_default_fixture_loop_scope</code> is unset (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298">#1298</a>)</li>
<li>Only import <code>asyncio.AbstractEventLoopPolicy</code> for type
checking to avoid raising
a DeprecationWarning. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394">#1394</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="6e14cd2af9"><code>6e14cd2</code></a>
chore: Prepare release of v1.4.0.</li>
<li><a
href="4b900fb5d0"><code>4b900fb</code></a>
Build(deps): Bump codecov/codecov-action from 6.0.0 to 6.0.1</li>
<li><a
href="ab9f632450"><code>ab9f632</code></a>
Build(deps): Bump zipp from 3.23.1 to 4.1.0</li>
<li><a
href="a56fc77ecd"><code>a56fc77</code></a>
Build(deps): Bump hypothesis from 6.152.6 to 6.152.8</li>
<li><a
href="e8bae9bc1f"><code>e8bae9b</code></a>
Build(deps): Bump requests from 2.34.0 to 2.34.2</li>
<li><a
href="fc433402c5"><code>fc43340</code></a>
Build(deps): Bump idna from 3.14 to 3.15</li>
<li><a
href="762eaf5033"><code>762eaf5</code></a>
Build(deps): Bump jaraco-functools from 4.4.0 to 4.5.0</li>
<li><a
href="b62e2228c8"><code>b62e222</code></a>
Build(deps): Bump click from 8.3.3 to 8.4.0</li>
<li><a
href="9190447006"><code>9190447</code></a>
Build(deps): Bump pydantic from 2.13.3 to 2.13.4</li>
<li><a
href="82a393c5e3"><code>82a393c</code></a>
ci: Remove unnecessary debug output.</li>
<li>Additional commits viewable in <a
href="https://github.com/pytest-dev/pytest-asyncio/compare/v1.3.0...v1.4.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest-socket` from 0.7.0 to 0.8.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/miketheman/pytest-socket/releases">pytest-socket's
releases</a>.</em></p>
<blockquote>
<h2>0.8.0</h2>
<h2>What's Changed</h2>
<h3>Enhancements</h3>
<ul>
<li>Block DNS resolution (<code>getaddrinfo</code>,
<code>gethostbyname</code>) when sockets are disabled <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/482">#482</a></li>
<li>Support CIDR network ranges in <code>allow_hosts</code> <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/479">#479</a></li>
<li>Warn before raising on a blocked socket call <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/468">#468</a></li>
<li>Cache hostname resolutions during a test run <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/369">#369</a></li>
</ul>
<h3>Changes</h3>
<ul>
<li><strong>Removed support for Python 3.8 and 3.9.</strong> Python 3.10
is now the minimum.</li>
<li>Test against Python 3.13, 3.14, and free-threaded 3.13t/3.14t</li>
<li>Replaced Poetry with uv <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/429">#429</a></li>
<li>Added type hints <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/465">#465</a></li>
<li>Swapped <code>pytest-httpbin</code> for a local test fixture <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/467">#467</a></li>
<li>Dependency, CI, and development updates</li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/twm"><code>@​twm</code></a> made their
first contribution in <a
href="https://redirect.github.com/miketheman/pytest-socket/pull/369">miketheman/pytest-socket#369</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/miketheman/pytest-socket/compare/0.7.0...0.8.0">https://github.com/miketheman/pytest-socket/compare/0.7.0...0.8.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/miketheman/pytest-socket/blob/main/CHANGELOG.md">pytest-socket's
changelog</a>.</em></p>
<blockquote>
<h2>[0.8.0][] (2026-05-21)</h2>
<p>Enhancements:</p>
<ul>
<li>Block DNS resolution (<code>getaddrinfo</code>,
<code>gethostbyname</code>) when sockets are disabled <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/482">#482</a></li>
<li>Support CIDR network ranges in <code>allow_hosts</code> <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/479">#479</a></li>
<li>Warn before raising on a blocked socket call <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/468">#468</a></li>
<li>Cache hostname resolutions during a test run <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/369">#369</a></li>
</ul>
<p>Changes:</p>
<ul>
<li><strong>Removed support for Python 3.8 and 3.9.</strong> Python 3.10
is now the minimum.</li>
<li>Test against Python 3.13, 3.14, and free-threaded 3.13t/3.14t</li>
<li>Replaced Poetry with uv <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/429">#429</a></li>
<li>Added type hints <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/465">#465</a></li>
<li>Swapped <code>pytest-httpbin</code> for a local test fixture <a
href="https://redirect.github.com/miketheman/pytest-socket/issues/467">#467</a></li>
<li>Dependency, CI, and development updates</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f9ec1395f4"><code>f9ec139</code></a>
pytest-socket, v0.8.0 (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/484">#484</a>)</li>
<li><a
href="3930df85c1"><code>3930df8</code></a>
chore(ci): add publish workflow, update others (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/483">#483</a>)</li>
<li><a
href="aae7f44b24"><code>aae7f44</code></a>
feat: also block DNS resolution (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/482">#482</a>)</li>
<li><a
href="f0700d2379"><code>f0700d2</code></a>
[pre-commit.ci] pre-commit autoupdate (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/481">#481</a>)</li>
<li><a
href="09ba021cd3"><code>09ba021</code></a>
chore(deps): full sweep of all dependency upgrades (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/480">#480</a>)</li>
<li><a
href="8dc62860f3"><code>8dc6286</code></a>
feat(allow_hosts): support CIDR network entries (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/479">#479</a>)</li>
<li><a
href="06ed8a1562"><code>06ed8a1</code></a>
chore(deps-dev): bump starlette from 0.49.1 to 1.0.0 (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/478">#478</a>)</li>
<li><a
href="b3132108f9"><code>b313210</code></a>
chore(deps-dev): bump mypy from 1.20.0 to 1.20.2 (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/477">#477</a>)</li>
<li><a
href="f7e85f788b"><code>f7e85f7</code></a>
chore(deps-dev): bump pytest-randomly from 3.16.0 to 4.0.1 (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/476">#476</a>)</li>
<li><a
href="89690a6c31"><code>89690a6</code></a>
chore: dependabot config (<a
href="https://redirect.github.com/miketheman/pytest-socket/issues/475">#475</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/miketheman/pytest-socket/compare/0.7.0...0.8.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `syrupy` from 5.2.0 to 5.3.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/syrupy-project/syrupy/releases">syrupy's
releases</a>.</em></p>
<blockquote>
<h2>v5.3.4</h2>
<h2>What's Changed</h2>
<ul>
<li>perf: drop per-node kwargs dict from the amber serializer by <a
href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1122">syrupy-project/syrupy#1122</a></li>
<li>perf: give the internal matcher wrapper an explicit signature by <a
href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1121">syrupy-project/syrupy#1121</a></li>
<li>fix: avoid os.environ mutation for color control by <a
href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1125">syrupy-project/syrupy#1125</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/syrupy-project/syrupy/compare/v5.3.3...v5.3.4">https://github.com/syrupy-project/syrupy/compare/v5.3.3...v5.3.4</a></p>
<h2>v5.3.3</h2>
<h2>What's Changed</h2>
<ul>
<li>perf: speed up string serialization in amber serializer by <a
href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1118">syrupy-project/syrupy#1118</a></li>
<li>perf: avoid copying the cycle-detection set on every serialized node
by <a href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1119">syrupy-project/syrupy#1119</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/TejasAmle"><code>@​TejasAmle</code></a>
made their first contribution in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1113">syrupy-project/syrupy#1113</a></li>
<li><a href="https://github.com/frenck"><code>@​frenck</code></a> made
their first contribution in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1118">syrupy-project/syrupy#1118</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/syrupy-project/syrupy/compare/v5.3.2...v5.3.3">https://github.com/syrupy-project/syrupy/compare/v5.3.2...v5.3.3</a></p>
<h2>v5.3.2</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: overlapping test filenames across directories by <a
href="https://github.com/noahnu"><code>@​noahnu</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1104">syrupy-project/syrupy#1104</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/syrupy-project/syrupy/compare/v5.3.1...v5.3.2">https://github.com/syrupy-project/syrupy/compare/v5.3.1...v5.3.2</a></p>
<h2>v5.3.1</h2>
<h2>What's Changed</h2>
<h3>Fixes</h3>
<ul>
<li>fix(test): mark pydantic and attrs as dependencies for running
internal tests by <a
href="https://github.com/noahnu"><code>@​noahnu</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1108">syrupy-project/syrupy#1108</a>
-- <strong>This only affects users trying to run the syrupy tests
themselves, not consumers of syrupy.</strong></li>
</ul>
<h3>Misc</h3>
<ul>
<li>chore(deps): update astral-sh/setup-uv action to v8.1.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1103">syrupy-project/syrupy#1103</a></li>
<li>chore(deps): update python docker tag to v3.14.4 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1102">syrupy-project/syrupy#1102</a></li>
<li>chore(deps): update benchmark-action/github-action-benchmark action
to v1.22.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1105">syrupy-project/syrupy#1105</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/syrupy-project/syrupy/compare/v5.3.0...v5.3.1">https://github.com/syrupy-project/syrupy/compare/v5.3.0...v5.3.1</a></p>
<h2>v5.3.0</h2>
<h2>What's Changed</h2>
<h3>Features</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/syrupy-project/syrupy/blob/main/CHANGELOG.md">syrupy's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/syrupy-project/syrupy/releases/tag/v5.3.4">v5.3.4</a>
(2026-06-26)</h2>
<h2>What's Changed</h2>
<ul>
<li>perf: drop per-node kwargs dict from the amber serializer by <a
href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1122">syrupy-project/syrupy#1122</a></li>
<li>perf: give the internal matcher wrapper an explicit signature by <a
href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1121">syrupy-project/syrupy#1121</a></li>
<li>fix: avoid os.environ mutation for color control by <a
href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1125">syrupy-project/syrupy#1125</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/syrupy-project/syrupy/compare/v5.3.3...v5.3.4">https://github.com/syrupy-project/syrupy/compare/v5.3.3...v5.3.4</a></p>
<h2><a
href="https://github.com/syrupy-project/syrupy/releases/tag/v5.3.3">v5.3.3</a>
(2026-06-25)</h2>
<h2>What's Changed</h2>
<ul>
<li>perf: speed up string serialization in amber serializer by <a
href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1118">syrupy-project/syrupy#1118</a></li>
<li>perf: avoid copying the cycle-detection set on every serialized node
by <a href="https://github.com/frenck"><code>@​frenck</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1119">syrupy-project/syrupy#1119</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/TejasAmle"><code>@​TejasAmle</code></a>
made their first contribution in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1113">syrupy-project/syrupy#1113</a></li>
<li><a href="https://github.com/frenck"><code>@​frenck</code></a> made
their first contribution in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1118">syrupy-project/syrupy#1118</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/syrupy-project/syrupy/compare/v5.3.2...v5.3.3">https://github.com/syrupy-project/syrupy/compare/v5.3.2...v5.3.3</a></p>
<h2><a
href="https://github.com/syrupy-project/syrupy/releases/tag/v5.3.2">v5.3.2</a>
(2026-06-09)</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: overlapping test filenames across directories by <a
href="https://github.com/noahnu"><code>@​noahnu</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1104">syrupy-project/syrupy#1104</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/syrupy-project/syrupy/compare/v5.3.1...v5.3.2">https://github.com/syrupy-project/syrupy/compare/v5.3.1...v5.3.2</a></p>
<h2><a
href="https://github.com/syrupy-project/syrupy/releases/tag/v5.3.1">v5.3.1</a>
(2026-05-31)</h2>
<h2>What's Changed</h2>
<h3>Fixes</h3>
<ul>
<li>fix(test): mark pydantic and attrs as dependencies for running
internal tests by <a
href="https://github.com/noahnu"><code>@​noahnu</code></a> in <a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1108">syrupy-project/syrupy#1108</a>
-- <strong>This only affects users trying to run the syrupy tests
themselves, not consumers of syrupy.</strong></li>
</ul>
<h3>Misc</h3>
<ul>
<li>chore(deps): update astral-sh/setup-uv action to v8.1.0 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1103">syrupy-project/syrupy#1103</a></li>
<li>chore(deps): update python docker tag to v3.14.4 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1102">syrupy-project/syrupy#1102</a></li>
<li>chore(deps): update benchmark-action/github-action-benchmark action
to v1.22.1 by <a
href="https://github.com/renovate"><code>@​renovate</code></a>[bot] in
<a
href="https://redirect.github.com/syrupy-project/syrupy/pull/1105">syrupy-project/syrupy#1105</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/syrupy-project/syrupy/compare/v5.3.0...v5.3.1">https://github.com/syrupy-project/syrupy/compare/v5.3.0...v5.3.1</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7db49e98f7"><code>7db49e9</code></a>
fix: avoid os.environ mutation for color control (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1125">#1125</a>)</li>
<li><a
href="52da1c4ba9"><code>52da1c4</code></a>
chore: add benchmarks to README (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1124">#1124</a>)</li>
<li><a
href="a0d46f36fc"><code>a0d46f3</code></a>
perf: give the internal matcher wrapper an explicit signature (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1121">#1121</a>)</li>
<li><a
href="54771a4849"><code>54771a4</code></a>
perf: drop per-node kwargs dict from the amber serializer (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1122">#1122</a>)</li>
<li><a
href="8a10e700ad"><code>8a10e70</code></a>
docs: add frenck as a contributor for bug (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1120">#1120</a>)</li>
<li><a
href="5760c88d37"><code>5760c88</code></a>
chore(release): 5.3.3 [skip ci]</li>
<li><a
href="0840c9dcd1"><code>0840c9d</code></a>
perf: avoid copying the cycle-detection set on every serialized node (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1119">#1119</a>)</li>
<li><a
href="1940faa06c"><code>1940faa</code></a>
perf: speed up string serialization in amber serializer (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1118">#1118</a>)</li>
<li><a
href="46d661cdbd"><code>46d661c</code></a>
chore(deps): update dependency debugpy to v1.8.21 (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1117">#1117</a>)</li>
<li><a
href="8c23052690"><code>8c23052</code></a>
chore(deps): update astral-sh/setup-uv action to v8.2.0 (<a
href="https://redirect.github.com/syrupy-project/syrupy/issues/1114">#1114</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/syrupy-project/syrupy/compare/v5.2.0...v5.3.4">compare
view</a></li>
</ul>
</details>
<br />

Updates `ruff` from 0.15.13 to 0.15.20
<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.15.20</h2>
<h2>Release Notes</h2>
<p>Released on 2026-06-25.</p>
<h3>Preview features</h3>
<ul>
<li>Allow human-readable names in rule selectors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25887">#25887</a>)</li>
<li>Emit a warning instead of an error for unknown rule selectors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26113">#26113</a>)</li>
<li>Match <code>noqa</code> shebang handling in <code>ruff:ignore</code>
comments (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26286">#26286</a>)</li>
<li>[<code>ruff</code>] Remove <code>pytest-fixture-autouse</code>
(<code>RUF076</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26240">#26240</a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/26371">#26371</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Add versioning sections to custom crate READMEs (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26317">#26317</a>)</li>
<li>Update <code>ruff_python_parser</code> README for crates.io (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26315">#26315</a>)</li>
<li>[<code>perflint</code>] Clarify that <code>PERF402</code> applies to
any iterable (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26242">#26242</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/dhruvmanila"><code>@​dhruvmanila</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@​MichaReiser</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
<li><a
href="https://github.com/trilamsr"><code>@​trilamsr</code></a></li>
</ul>
<h2>Install ruff 0.15.20</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.15.20/ruff-installer.sh
| sh
</code></pre>
<h3>Install prebuilt binaries via powershell script</h3>
<pre lang="sh"><code>powershell -ExecutionPolicy Bypass -c &quot;irm
https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-installer.ps1
| iex&quot;
</code></pre>
<h2>Download ruff 0.15.20</h2>
<table>
<thead>
<tr>
<th>File</th>
<th>Platform</th>
<th>Checksum</th>
</tr>
</thead>
<tbody>
<tr>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz">ruff-aarch64-apple-darwin.tar.gz</a></td>
<td>Apple Silicon macOS</td>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-apple-darwin.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz">ruff-x86_64-apple-darwin.tar.gz</a></td>
<td>Intel macOS</td>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-apple-darwin.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip">ruff-aarch64-pc-windows-msvc.zip</a></td>
<td>ARM64 Windows</td>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip">ruff-i686-pc-windows-msvc.zip</a></td>
<td>x86 Windows</td>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip">ruff-x86_64-pc-windows-msvc.zip</a></td>
<td>x64 Windows</td>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-x86_64-pc-windows-msvc.zip.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz">ruff-aarch64-unknown-linux-gnu.tar.gz</a></td>
<td>ARM64 Linux</td>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-aarch64-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
<tr>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz">ruff-i686-unknown-linux-gnu.tar.gz</a></td>
<td>x86 Linux</td>
<td><a
href="https://releases.astral.sh/github/ruff/releases/download/0.15.20/ruff-i686-unknown-linux-gnu.tar.gz.sha256">checksum</a></td>
</tr>
</tbody>
</table>
<!-- 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.15.20</h2>
<p>Released on 2026-06-25.</p>
<h3>Preview features</h3>
<ul>
<li>Allow human-readable names in rule selectors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/25887">#25887</a>)</li>
<li>Emit a warning instead of an error for unknown rule selectors (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26113">#26113</a>)</li>
<li>Match <code>noqa</code> shebang handling in <code>ruff:ignore</code>
comments (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26286">#26286</a>)</li>
<li>[<code>ruff</code>] Remove <code>pytest-fixture-autouse</code>
(<code>RUF076</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26240">#26240</a>,
<a
href="https://redirect.github.com/astral-sh/ruff/pull/26371">#26371</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>Add versioning sections to custom crate READMEs (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26317">#26317</a>)</li>
<li>Update <code>ruff_python_parser</code> README for crates.io (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26315">#26315</a>)</li>
<li>[<code>perflint</code>] Clarify that <code>PERF402</code> applies to
any iterable (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26242">#26242</a>)</li>
</ul>
<h3>Contributors</h3>
<ul>
<li><a
href="https://github.com/dhruvmanila"><code>@​dhruvmanila</code></a></li>
<li><a
href="https://github.com/MichaReiser"><code>@​MichaReiser</code></a></li>
<li><a href="https://github.com/ntBre"><code>@​ntBre</code></a></li>
<li><a
href="https://github.com/trilamsr"><code>@​trilamsr</code></a></li>
</ul>
<h2>0.15.19</h2>
<p>Released on 2026-06-23.</p>
<h3>Preview features</h3>
<ul>
<li>Support human-readable names when hovering suppression comments and
in code actions (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26114">#26114</a>)</li>
</ul>
<h3>Bug fixes</h3>
<ul>
<li>Fall back to default settings when editor-only settings are invalid
(<a
href="https://redirect.github.com/astral-sh/ruff/pull/26244">#26244</a>)</li>
<li>Fix panic when inserting text at a notebook cell boundary (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26111">#26111</a>)</li>
</ul>
<h3>Rule changes</h3>
<ul>
<li>[<code>pylint</code>] Update fix suggestions for
<code>__floor__</code>, <code>__trunc__</code>,
<code>__length_hint__</code>, and <code>__matmul__</code> variants
(<code>PLC2801</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26239">#26239</a>)</li>
</ul>
<h3>Performance</h3>
<ul>
<li>Avoid allocating when parsing single string literals (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26200">#26200</a>)</li>
<li>Avoid reallocating singleton call arguments (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26223">#26223</a>)</li>
<li>Lazily create source files for lint diagnostics (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26226">#26226</a>)</li>
<li>Optimize formatter text width and indentation (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26236">#26236</a>)</li>
<li>Reserve capacity for builtin bindings (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26229">#26229</a>)</li>
<li>Skip repeated-key checks for singleton dictionaries (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26228">#26228</a>)</li>
<li>Use ArrayVec for qualified name segments (<a
href="https://redirect.github.com/astral-sh/ruff/pull/26224">#26224</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f82a36b6ba"><code>f82a36b</code></a>
Bump 0.15.20 (<a
href="https://redirect.github.com/astral-sh/ruff/issues/26376">#26376</a>)</li>
<li><a
href="af329438b5"><code>af32943</code></a>
Improve the summarise-ecosystem-results skill (<a
href="https://redirect.github.com/astral-sh/ruff/issues/26378">#26378</a>)</li>
<li><a
href="485ebab5de"><code>485ebab</code></a>
Remove <code>RUF076</code> name from schema (<a
href="https://redirect.github.com/astral-sh/ruff/issues/26371">#26371</a>)</li>
<li><a
href="ef81835ce3"><code>ef81835</code></a>
[ty] Implement rust-analyzer's &quot;Click for full compiler
diagnostic&quot; feature (...</li>
<li><a
href="572b31e237"><code>572b31e</code></a>
[<code>ruff</code>] Remove <code>pytest-fixture-autouse</code>
(<code>RUF076</code>) (<a
href="https://redirect.github.com/astral-sh/ruff/issues/26240">#26240</a>)</li>
<li><a
href="f703f219d7"><code>f703f21</code></a>
Allow human-readable names in rule selectors (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25887">#25887</a>)</li>
<li><a
href="0d726b28ee"><code>0d726b2</code></a>
[ty] Reuse equality semantics for membership compatibility (<a
href="https://redirect.github.com/astral-sh/ruff/issues/25955">#25955</a>)</li>
<li><a
href="dbe6e9848c"><code>dbe6e98</code></a>
[ty] Infer definite equality comparison results (<a
href="https://redirect.github.com/astral-sh/ruff/issues/26337">#26337</a>)</li>
<li><a
href="e700ea357a"><code>e700ea3</code></a>
[ty] Prove TypedDict structural patterns exhaustive (<a
href="https://redirect.github.com/astral-sh/ruff/issues/26285">#26285</a>)</li>
<li><a
href="6a0d2ec939"><code>6a0d2ec</code></a>
[ty] Widen inferred class-valued instance attributes (<a
href="https://redirect.github.com/astral-sh/ruff/issues/26338">#26338</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/astral-sh/ruff/compare/0.15.13...0.15.20">compare
view</a></li>
</ul>
</details>
<br />

Updates `langsmith` from 0.8.18 to 0.9.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/langchain-ai/langsmith-sdk/releases">langsmith's
releases</a>.</em></p>
<blockquote>
<h2>v0.9.4</h2>
<h2>What's Changed</h2>
<ul>
<li>fix(google_adk): capture LLM inputs after before_model_callback runs
[LSDK-279] by <a
href="https://github.com/harisaiharish"><code>@​harisaiharish</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3094">langchain-ai/langsmith-sdk#3094</a></li>
<li>release(js): bump js sdk version to 0.7.13 by <a
href="https://github.com/langchain-infra"><code>@​langchain-infra</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3104">langchain-ai/langsmith-sdk#3104</a></li>
<li>chore: sync langsmith_api by <a
href="https://github.com/langtions-bot"><code>@​langtions-bot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3105">langchain-ai/langsmith-sdk#3105</a></li>
<li>doc: improve resource comments by <a
href="https://github.com/QuentinBrosse"><code>@​QuentinBrosse</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3108">langchain-ai/langsmith-sdk#3108</a></li>
<li>fix(client): apply anonymizer to run error field by <a
href="https://github.com/paarth-a"><code>@​paarth-a</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3100">langchain-ai/langsmith-sdk#3100</a></li>
<li>feat(client): expose datasets v2 resource + experiment-runs
integration tests [langchainplus#28358] by <a
href="https://github.com/GowriH-1"><code>@​GowriH-1</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3106">langchain-ai/langsmith-sdk#3106</a></li>
<li>fix(google-adk): set tool span as active tracing context in
wrap_tool_run_async by <a
href="https://github.com/navarra-lisandro"><code>@​navarra-lisandro</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3111">langchain-ai/langsmith-sdk#3111</a></li>
<li>fix(client): apply anonymizer to run error field (JS) by <a
href="https://github.com/paarth-a"><code>@​paarth-a</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3110">langchain-ai/langsmith-sdk#3110</a></li>
<li>fix(python): use current project issues endpoint by <a
href="https://github.com/khankaholic"><code>@​khankaholic</code></a> in
<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3064">langchain-ai/langsmith-sdk#3064</a></li>
<li>chore: sync langsmith_api by <a
href="https://github.com/langtions-bot"><code>@​langtions-bot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3120">langchain-ai/langsmith-sdk#3120</a></li>
<li>fix(js): Avoid setting usage_metadata on parent chain runs for
Claude Agent SDK runs by <a
href="https://github.com/jacoblee93"><code>@​jacoblee93</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3119">langchain-ai/langsmith-sdk#3119</a></li>
<li>feat(client): expose projects resource accessor on Python and JS
clients by <a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3109">langchain-ai/langsmith-sdk#3109</a></li>
<li>release(js): bump to 0.7.14 by <a
href="https://github.com/dqbd"><code>@​dqbd</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3121">langchain-ai/langsmith-sdk#3121</a></li>
<li>release(python): bump py version to 0.9.4 by <a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3124">langchain-ai/langsmith-sdk#3124</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/navarra-lisandro"><code>@​navarra-lisandro</code></a>
made their first contribution in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3111">langchain-ai/langsmith-sdk#3111</a></li>
<li><a
href="https://github.com/khankaholic"><code>@​khankaholic</code></a>
made their first contribution in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3064">langchain-ai/langsmith-sdk#3064</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.3...v0.9.4">https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.3...v0.9.4</a></p>
<h2>v0.9.3</h2>
<h2>What's Changed</h2>
<ul>
<li>release(js): bump js sdk version to 0.7.12 by <a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3089">langchain-ai/langsmith-sdk#3089</a></li>
<li>feat(sandbox): do not gate dataplane ops on sandbox status by <a
href="https://github.com/ramon-langchain"><code>@​ramon-langchain</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3090">langchain-ai/langsmith-sdk#3090</a></li>
<li>chore: sync langsmith_api by <a
href="https://github.com/langtions-bot"><code>@​langtions-bot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3095">langchain-ai/langsmith-sdk#3095</a></li>
<li>ci: pin all GitHub Actions to immutable SHA pins by <a
href="https://github.com/jkennedyvz"><code>@​jkennedyvz</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3093">langchain-ai/langsmith-sdk#3093</a></li>
<li>chore(deps-dev): bump vcrpy from 8.1.1 to 8.2.1 in /python by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3074">langchain-ai/langsmith-sdk#3074</a></li>
<li>chore(deps): bump pydantic-settings from 2.13.1 to 2.14.2 in /python
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3075">langchain-ai/langsmith-sdk#3075</a></li>
<li>feat(sandbox): expose registries via generated v2 client by <a
href="https://github.com/langchain-infra"><code>@​langchain-infra</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3087">langchain-ai/langsmith-sdk#3087</a></li>
<li>fix(client): lazily initialize sync OpenAPI client by <a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3099">langchain-ai/langsmith-sdk#3099</a></li>
<li>release(python): bump py version to 0.9.3 by <a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3101">langchain-ai/langsmith-sdk#3101</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.2...v0.9.3">https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.2...v0.9.3</a></p>
<h2>v0.9.2</h2>
<h2>What's Changed</h2>
<ul>
<li>release(js): bump js sdk version to 0.7.11 by <a
href="https://github.com/sineha-mani"><code>@​sineha-mani</code></a> in
<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3079">langchain-ai/langsmith-sdk#3079</a></li>
<li>chore: bump _MIN_BACKEND_VERSION to 0.16.6rc1 by <a
href="https://github.com/langtions-bot"><code>@​langtions-bot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3076">langchain-ai/langsmith-sdk#3076</a></li>
<li>chore: sync langsmith_api by <a
href="https://github.com/langtions-bot"><code>@​langtions-bot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3082">langchain-ai/langsmith-sdk#3082</a></li>
<li>chore: sync langsmith_api by <a
href="https://github.com/langtions-bot"><code>@​langtions-bot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3083">langchain-ai/langsmith-sdk#3083</a></li>
<li>chore(js): bump AI SDK 7 to beta by <a
href="https://github.com/dqbd"><code>@​dqbd</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3085">langchain-ai/langsmith-sdk#3085</a></li>
<li>feat(client): expose v2 OpenAPI runs resource on Python and JS
clients by <a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3084">langchain-ai/langsmith-sdk#3084</a></li>
<li>release(python): bump py version to 0.9.2 by <a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3088">langchain-ai/langsmith-sdk#3088</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.1...v0.9.2">https://github.com/langchain-ai/langsmith-sdk/compare/v0.9.1...v0.9.2</a></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="80d93c48c4"><code>80d93c4</code></a>
release(python): bump py version to 0.9.4 (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3124">#3124</a>)</li>
<li><a
href="b453dd58d6"><code>b453dd5</code></a>
release(js): bump to 0.7.14 (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3121">#3121</a>)</li>
<li><a
href="76f5c7136c"><code>76f5c71</code></a>
feat(client): expose projects resource accessor on Python and JS clients
(<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3109">#3109</a>)</li>
<li><a
href="5f32426109"><code>5f32426</code></a>
fix(js): Avoid setting usage_metadata on parent chain runs for Claude
Agent S...</li>
<li><a
href="03b53410f1"><code>03b5341</code></a>
chore: sync langsmith_api (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3120">#3120</a>)</li>
<li><a
href="7595f5c187"><code>7595f5c</code></a>
fix(python): use current project issues endpoint (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3064">#3064</a>)</li>
<li><a
href="b5291fac06"><code>b5291fa</code></a>
fix(client): apply anonymizer to run error field (JS) (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3110">#3110</a>)</li>
<li><a
href="be3eaa47e9"><code>be3eaa4</code></a>
fix(google-adk): set tool span as active tracing context in
wrap_tool_run_asy...</li>
<li><a
href="3dc88b3675"><code>3dc88b3</code></a>
feat(client): expose datasets v2 resource + experiment-runs integration
tests...</li>
<li><a
href="14741e0488"><code>14741e0</code></a>
fix(client): apply anonymizer to run error field (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3100">#3100</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.18...v0.9.4">compare
view</a></li>
</ul>
</details>
<br />

Updates `uuid-utils` from 0.15.0 to 0.16.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/aminalaee/uuid-utils/releases">uuid-utils's
releases</a>.</em></p>
<blockquote>
<h2>0.16.2</h2>
<h2>What's Changed</h2>
<ul>
<li>fix: align <code>__hash__</code> with stdlib hash by <a
href="https://github.com/aminalaee"><code>@​aminalaee</code></a> in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/178">aminalaee/uuid-utils#178</a></li>
<li>fix: <code>time</code> property for v6 and v7 by <a
href="https://github.com/aminalaee"><code>@​aminalaee</code></a> in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/179">aminalaee/uuid-utils#179</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aminalaee/uuid-utils/compare/0.16.1...0.16.2">https://github.com/aminalaee/uuid-utils/compare/0.16.1...0.16.2</a></p>
<h2>0.16.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Add PyPI publish attestations by <a
href="https://github.com/shaanmajid"><code>@​shaanmajid</code></a> in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/173">aminalaee/uuid-utils#173</a></li>
<li>chore: Add <code>__version__</code> to compat module by <a
href="https://github.com/aminalaee"><code>@​aminalaee</code></a> in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/174">aminalaee/uuid-utils#174</a></li>
<li>chore: relax <code>getnode</code> test by <a
href="https://github.com/aminalaee"><code>@​aminalaee</code></a> in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/176">aminalaee/uuid-utils#176</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/shaanmajid"><code>@​shaanmajid</code></a> made
their first contribution in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/173">aminalaee/uuid-utils#173</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aminalaee/uuid-utils/compare/0.16.0...0.16.1">https://github.com/aminalaee/uuid-utils/compare/0.16.0...0.16.1</a></p>
<h2>0.16.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Optimize uuid_utils.compat with <code>from_int</code> by <a
href="https://github.com/aminalaee"><code>@​aminalaee</code></a> in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/166">aminalaee/uuid-utils#166</a></li>
<li>fix: return version None for non-RFC UUIDs by <a
href="https://github.com/aminalaee"><code>@​aminalaee</code></a> in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/163">aminalaee/uuid-utils#163</a></li>
<li>Validate <code>node</code> argument out of range in constructor by
<a href="https://github.com/aminalaee"><code>@​aminalaee</code></a> in
<a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/164">aminalaee/uuid-utils#164</a></li>
<li>Drop Python3.9 by <a
href="https://github.com/aminalaee"><code>@​aminalaee</code></a> in <a
href="https://redirect.github.com/aminalaee/uuid-utils/pull/168">aminalaee/uuid-utils#168</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/aminalaee/uuid-utils/compare/0.15.0...0.16.0">https://github.com/aminalaee/uuid-utils/compare/0.15.0...0.16.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="97c20484ab"><code>97c2048</code></a>
Version 0.16.2 (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/180">#180</a>)</li>
<li><a
href="75e935b43d"><code>75e935b</code></a>
fix: time property for v6 and v7 (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/179">#179</a>)</li>
<li><a
href="6222e73aaf"><code>6222e73</code></a>
fix: align hash with stdlib hash (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/178">#178</a>)</li>
<li><a
href="de57fb647c"><code>de57fb6</code></a>
Version 0.16.1 (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/177">#177</a>)</li>
<li><a
href="7d65c41ed4"><code>7d65c41</code></a>
chore: relax <code>getnode</code> test (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/176">#176</a>)</li>
<li><a
href="ef4b519d5f"><code>ef4b519</code></a>
Upgrade <code>pyo3</code> and <code>uuid</code> (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/175">#175</a>)</li>
<li><a
href="afbe6bf820"><code>afbe6bf</code></a>
chore: Add <code>__version__</code> to compat module (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/174">#174</a>)</li>
<li><a
href="76d0a73c24"><code>76d0a73</code></a>
Add PyPI publish attestations (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/173">#173</a>)</li>
<li><a
href="29bc188196"><code>29bc188</code></a>
Bump uuid from 1.23.1 to 1.23.2 (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/170">#170</a>)</li>
<li><a
href="c6df9b87ea"><code>c6df9b8</code></a>
Bump the python-packages group with 4 updates (<a
href="https://redirect.github.com/aminalaee/uuid-utils/issues/172">#172</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/aminalaee/uuid-utils/compare/0.15.0...0.16.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `langgraph` from 1.2.5 to 1.2.7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/langchain-ai/langgraph/releases">langgraph's
releases</a>.</em></p>
<blockquote>
<h2>langgraph==1.2.7</h2>
<p>Changes since 1.2.6</p>
<ul>
<li>release(langgraph): 1.2.7 (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8223">#8223</a>)</li>
<li>fix(langgraph): snapshot <code>DeltaChannel</code> overwrite
supersteps (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8125">#8125</a>)</li>
<li>fix(langgraph): Make <code>Overwrite</code> survive JSON roundtrips
(<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8127">#8127</a>)</li>
<li>chore(deps): bump redis in /libs/langgraph (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7976">#7976</a>)</li>
<li>chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/langgraph
(<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8176">#8176</a>)</li>
<li>chore(deps): bump jupyterlab from 4.5.7 to 4.5.9 in /libs/langgraph
(<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8164">#8164</a>)</li>
<li>fix(langgraph): emit valid UUIDs for exit-mode delta task_ids for
langgraph-api (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8165">#8165</a>)</li>
<li>chore(deps): bump bleach from 6.3.0 to 6.4.0 in /libs/langgraph (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8107">#8107</a>)</li>
<li>chore(deps): bump cryptography from 46.0.7 to 48.0.1 in
/libs/langgraph (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8106">#8106</a>)</li>
<li>chore(deps): bump jupyter-server from 2.18.0 to 2.20.0 in
/libs/langgraph (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8134">#8134</a>)</li>
<li>chore(deps): bump tornado from 6.5.6 to 6.5.7 in /libs/langgraph (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8108">#8108</a>)</li>
<li>chore(deps): bump pyjwt from 2.12.0 to 2.13.0 in /libs/langgraph (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8092">#8092</a>)</li>
</ul>
<h2>langgraph==1.2.6</h2>
<p>Changes since 1.2.5</p>
<ul>
<li>release(langgraph): 1.2.6 (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8139">#8139</a>)</li>
<li>fix: nested subgraph inherits parent checkpoint_ns (regression in
1.2.3) (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8053">#8053</a>)</li>
<li>fix: cancel running subgraphs on v3 stream abort [closes <a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8029">#8029</a>]
(<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8057">#8057</a>)</li>
<li>release(cli): 0.4.30 (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8101">#8101</a>)</li>
<li>docs: standardize package <code>README.md</code> structure (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8064">#8064</a>)</li>
<li>chore(deps): bump tornado from 6.5.5 to 6.5.6 in /libs/langgraph (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8063">#8063</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5931a5f0b3"><code>5931a5f</code></a>
release(langgraph): 1.2.7 (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8223">#8223</a>)</li>
<li><a
href="9a27693c64"><code>9a27693</code></a>
fix(langgraph): snapshot <code>DeltaChannel</code> overwrite supersteps
(<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8125">#8125</a>)</li>
<li><a
href="1b5ca0a1b1"><code>1b5ca0a</code></a>
fix(langgraph): Make <code>Overwrite</code> survive JSON roundtrips (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8127">#8127</a>)</li>
<li><a
href="d2f97191ab"><code>d2f9719</code></a>
chore(deps): bump redis in /libs/langgraph (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7976">#7976</a>)</li>
<li><a
href="c1aad8b460"><code>c1aad8b</code></a>
chore(deps-dev): bump starlette from 1.0.1 to 1.3.1 in /libs/sdk-py (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8104">#8104</a>)</li>
<li><a
href="d5dfeaf033"><code>d5dfeaf</code></a>
chore(deps): bump starlette from 1.0.1 to 1.3.1 in /libs/cli (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8105">#8105</a>)</li>
<li><a
href="bdb323efbb"><code>bdb323e</code></a>
chore(deps): bump langsmith from 0.8.0 to 0.8.18 in
/libs/checkpoint-sqlite (...</li>
<li><a
href="31f69551b7"><code>31f6955</code></a>
chore(deps): bump langsmith from 0.8.0 to 0.8.18 in
/libs/checkpoint-postgres...</li>
<li><a
href="6b767dea5f"><code>6b767de</code></a>
chore(deps): bump langsmith from 0.8.2 to 0.8.18 in
/libs/checkpoint-conforma...</li>
<li><a
href="e6574a854f"><code>e6574a8</code></a>
chore(deps): bump langsmith from 0.8.0 to 0.8.18 in /libs/cli (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/8172">#8172</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/langchain-ai/langgraph/compare/1.2.5...1.2.7">compare
view</a></li>
</ul>
</details>
<br />

Updates `pytest-asyncio` from 1.3.0 to 1.4.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pytest-dev/pytest-asyncio/releases">pytest-asyncio's
releases</a>.</em></p>
<blockquote>
<h2>pytest-asyncio v1.4.0</h2>
<h1><a
href="https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0">1.4.0</a>
- 2026-05-26</h1>
<h2>Deprecated</h2>
<ul>
<li>Overriding the <em>event_loop_policy</em> fixture is deprecated. Use
the <code>pytest_asyncio_loop_factories</code> hook instead. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419">#1419</a>)</li>
</ul>
<h2>Added</h2>
<ul>
<li>
<p>Added the <code>pytest_asyncio_loop_factories</code> hook to
parametrize asyncio tests with custom event loop factories.</p>
<p>The hook returns a mapping of factory names to loop factories, and
<code>pytest.mark.asyncio(loop_factories=[...])</code> selects a subset
of configured factories per test. When a single factory is configured,
test names are unchanged.</p>
<p>Synchronous <code>@pytest_asyncio.fixture</code> functions now see
the correct event loop when custom loop factories are configured, even
when test code disrupts the current event loop (e.g., via
<code>asyncio.run()</code> or
<code>asyncio.set_event_loop(None)</code>). (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164">#1164</a>)</p>
</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Improved the readability of the warning message that is displayed
when <code>asyncio_default_fixture_loop_scope</code> is unset (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1298">#1298</a>)</li>
<li>Only import <code>asyncio.AbstractEventLoopPolicy</code> for type
checking to avoid raising
a DeprecationWarning. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1394">#1394</a>)</li>
<li>Updated minimum supported pytest version to v8.4.0. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1397">#1397</a>)</li>
</ul>
<h2>Fixed</h2>
<ul>
<li>Fixed a <code>ResourceWarning: unclosed event loop</code> warning
that could occur when a synchronous test called
<code>asyncio.run()</code> or otherwise unset the current event loop
after pytest-asyncio had run an async test or fixture. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/724">#724</a>)</li>
</ul>
<h2>Notes for Downstream Packagers</h2>
<ul>
<li>Added dependency on <code>sphinx-tabs &gt;= 3.5</code> to organize
documentation examples into tabs. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1395">#1395</a>)</li>
</ul>
<h2>pytest-asyncio v1.4.0a2</h2>
<h1><a
href="https://github.com/pytest-dev/pytest-asyncio/tree/1.4.0a2">1.4.0a2</a>
- 2026-05-02</h1>
<h2>Deprecated</h2>
<ul>
<li>Overriding the <em>event_loop_policy</em> fixture is deprecated. Use
the <code>pytest_asyncio_loop_factories</code> hook instead. (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1419">#1419</a>)</li>
</ul>
<h2>Added</h2>
<ul>
<li>
<p>Added the <code>pytest_asyncio_loop_factories</code> hook to
parametrize asyncio tests with custom event loop factories.</p>
<p>The hook returns a mapping of factory names to loop factories, and
<code>pytest.mark.asyncio(loop_factories=[...])</code> selects a subset
of configured factories per test. When a single factory is configured,
test names are unchanged on pytest 8.4+.</p>
<p>Synchronous <code>@pytest_asyncio.fixture</code> functions now see
the correct event loop when custom loop factories are configured, even
when test code disrupts the current event loop (e.g., via
<code>asyncio.run()</code> or
<code>asyncio.set_event_loop(None)</code>). (<a
href="https://redirect.github.com/pytest-dev/pytest-asyncio/issues/1164">#1164</a>)</p>
</li>
</ul>
<h2>Changed</h2>
<ul>
<li>Improved the readability of the warning message that is displayed
when <code>asyncio_default_fixture_loop_scope</code> is unset (<a
href="https://redir...

_Description has been truncated_

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-01 11:27:23 -04:00
dependabot[bot]
9b245de32e chore: bump langgraph-checkpoint from 4.1.0 to 4.1.1 in /libs/partners/openai (#38476)
Bumps [langgraph-checkpoint](https://github.com/langchain-ai/langgraph)
from 4.1.0 to 4.1.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/langchain-ai/langgraph/releases">langgraph-checkpoint's
releases</a>.</em></p>
<blockquote>
<h2>langgraph-checkpoint==4.1.1</h2>
<p>Changes since checkpoint==4.1.0</p>
<ul>
<li>release(checkpoint): 4.1.1 (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7890">#7890</a>)</li>
<li>fix(checkpoint): restrict lc:2 envelope revival to default
constructor (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7892">#7892</a>)</li>
<li>chore(deps): bump idna from 3.11 to 3.15 in /libs/checkpoint (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7860">#7860</a>)</li>
<li>chore(deps): bump langsmith from 0.7.31 to 0.8.0 in /libs/checkpoint
(<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7784">#7784</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d1e2ff0561"><code>d1e2ff0</code></a>
release(checkpoint): 4.1.1 (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7890">#7890</a>)</li>
<li><a
href="e787af200e"><code>e787af2</code></a>
release(sdk-py): 0.3.15 (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7891">#7891</a>)</li>
<li><a
href="604534e1b7"><code>604534e</code></a>
fix(sdk-py): percent-encode caller-supplied identifiers in URL paths (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7893">#7893</a>)</li>
<li><a
href="346aa97425"><code>346aa97</code></a>
fix(checkpoint): restrict lc:2 envelope revival to default constructor
(<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7892">#7892</a>)</li>
<li><a
href="82b3872820"><code>82b3872</code></a>
chore(deps): bump the uv group across 2 directories with 1 update (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7853">#7853</a>)</li>
<li><a
href="fcc4ab8dd8"><code>fcc4ab8</code></a>
chore(deps): bump idna from 3.11 to 3.15 in /libs/checkpoint (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7860">#7860</a>)</li>
<li><a
href="701d34494c"><code>701d344</code></a>
chore(deps): bump idna from 3.11 to 3.15 in /libs/checkpoint-postgres
(<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7861">#7861</a>)</li>
<li><a
href="2c7967ca96"><code>2c7967c</code></a>
chore(deps): bump idna from 3.11 to 3.15 in /libs/cli (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7865">#7865</a>)</li>
<li><a
href="bf7fec0bd1"><code>bf7fec0</code></a>
release(langgraph): 1.2.1 (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7883">#7883</a>)</li>
<li><a
href="8215a9d024"><code>8215a9d</code></a>
feat(langgraph): add <code>before_builtins</code> opt-in for stream
transformers (<a
href="https://redirect.github.com/langchain-ai/langgraph/issues/7882">#7882</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/langchain-ai/langgraph/compare/checkpoint==4.1.0...checkpoint==4.1.1">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>
2026-06-26 01:17:03 -07:00
Mason Daugherty
3b48f48458 fix(core): use asyncio.get_running_loop() in async contexts (#38157)
Closes #35726

---

Several async functions called `asyncio.get_event_loop()`, which has
been deprecated since Python 3.10. Inside `async def` bodies the loop is
always running, so `asyncio.get_running_loop()` is the correct,
warning-free replacement with no behavior change.

This updates the call in `_ahandle_event_for_handler` (core callbacks),
`_render_mermaid_using_pyppeteer` (core runnables graph), and
`async_api_key_wrapper` (`langchain-openai` client utils). Users running
on modern Python no longer see `DeprecationWarning`s from these paths.

Made by [Open SWE](https://openswe.vercel.app)

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
2026-06-22 22:26:16 -04:00
Mason Daugherty
844cef444b test(openai): clarify async API key sync failure trace (#38379)
Clarifies why the async callable API-key integration test intentionally
creates a failed `ChatOpenAI` run in scheduled LangSmith traces. The
sync invocation is expected to fail because async API-key callables are
only valid for async model methods.
2026-06-22 20:16:56 -04:00
Mason Daugherty
4a837567c8 release(openai): 1.3.3 (#38375) 2026-06-22 18:42:29 -04:00
Mason Daugherty
792c1a743e fix(openai): drop response item ids when store is false (#38372)
Some Responses API conversations can safely replay prior response item
IDs because the server stored those items. That assumption breaks when
`store=False`: prior `rs_*` reasoning items and `msg_*` assistant
message IDs are not available on the server for the next turn, so
replaying them can crash with `Item with id 'rs_...' not found` or
similar item lookup errors.

This updates the Responses API payload builder to treat `store=False` as
a stateless replay mode. The visible assistant text is still preserved
in history, but server-side response item IDs are not sent back unless
they are usable without server persistence.

In practical terms:

- Bare `rs_*` reasoning items are dropped for `store=False` because they
only reference server-side state that was not stored.
- Reasoning items with `encrypted_content` are preserved because OpenAI
uses them as the stateless/ZDR way to carry reasoning context forward.
- Prior assistant `msg_*` IDs are omitted for `store=False`; the
assistant message is replayed as ordinary assistant text instead of as a
reference to a stored server item.

Dropping `msg_*` IDs in this case should not remove useful user-visible
context: the text content remains in the request. It only removes an
item identity that the server cannot reliably resolve when
`store=False`. Persisted `store=True` Responses flows continue to replay
item IDs as before.

The regression test mirrors the minimal user story: make one
Responses/Codex call, reuse the returned `AIMessage` in a follow-up
request, and verify the next payload keeps the visible assistant message
and encrypted reasoning context while omitting unresolvable bare item
references.
2026-06-22 18:27:26 -04:00
ccurme
9ef324c9ab fix(langchain,openai): only set strict=True on tools for OpenAI-compatible models in ProviderStrategy (#38370)
When using `ProviderStrategy`, `create_agent` unnecessarily sets
`strict=True` on tools for all providers. This is only needed for OpenAI
/ chat completions. Here we unset `strict`. For OpenAI:
1. We set it in `BaseChatOpenAI.bind_tools` (as a convenience to users
calling `model.bind_tools` directly)
2. We (redundantly) special-case OpenAI in the `create_agent` factory
logic so that things will not break for users who upgrade `langchain`
but not `langchain-openai`.

Note: payloads for OpenAI are tested here and appear unchanged:
https://github.com/langchain-ai/langchain/blob/master/libs/langchain_v1/tests/unit_tests/agents/test_response_format_integration.py

Quick test:
```python
from langchain.agents import create_agent
from langchain.agents.structured_output import ProviderStrategy
from pydantic import BaseModel

class Weather(BaseModel):
    temperature: float
    condition: str

def weather_tool(location: str) -> str:
    """Get the weather at a location."""
    return "Sunny and 75 degrees F."

for model in [
    "anthropic:claude-sonnet-4-6",
    "openai:gpt-5.4",
    "google_genai:gemini-3.5-flash",
]:

    agent = create_agent(
        model=model,
        tools=[weather_tool],
        response_format=ProviderStrategy(Weather),
    )
    
    result = agent.invoke({
        "messages": [{"role": "user", "content": "What's the weather in SF?"}]
    })
    
    print(result["structured_response"])
```
2026-06-22 18:11:55 -04:00
Mason Daugherty
cc6b125f02 test(openai): clarify expected strict schema error (#38338)
This clarifies that the strict Responses API schema in
`test_parsed_strict` is intentionally made invalid before asserting
OpenAI raises `BadRequestError`.

The scheduled integration traces for this test can otherwise look like
real product regressions because OpenAI reports that `punchline` is
missing from `required`. The comment now makes the test intent explicit
for future readers and issue triage tooling.
2026-06-20 19:57:11 -04:00
Mason Daugherty
7d1a38379d fix(openai): drop stop from Responses API payload (#38336)
Responses API requests now strip the Chat Completions-only `stop`
parameter before sending the payload. This avoids request rejection
while preserving `stop` for the Chat Completions API path.
2026-06-20 19:37:55 -04:00
dependabot[bot]
1424c20cd5 chore: bump langsmith from 0.8.5 to 0.8.18 in /libs/partners/openai (#38293)
[//]: # (dependabot-start)
⚠️  **Dependabot is rebasing this PR** ⚠️ 

Rebasing might not happen immediately, so don't worry if this takes some
time.

Note: if you make any changes to this PR yourself, they will take
precedence over the rebase.

---

[//]: # (dependabot-end)

Bumps [langsmith](https://github.com/langchain-ai/langsmith-sdk) from
0.8.5 to 0.8.18.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/langchain-ai/langsmith-sdk/releases">langsmith's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.18</h2>
<h2>What's Changed</h2>
<ul>
<li>chore(deps-dev): bump vitest from 3.2.4 to 3.2.6 in /js by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3002">langchain-ai/langsmith-sdk#3002</a></li>
<li>chore(deps): bump pyjwt from 2.12.1 to 2.13.0 in /python by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3030">langchain-ai/langsmith-sdk#3030</a></li>
<li>chore(deps): bump python-multipart from 0.0.27 to 0.0.31 in /python
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3036">langchain-ai/langsmith-sdk#3036</a></li>
<li>chore(deps): bump aiohttp from 3.14.0 to 3.14.1 in /python by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3037">langchain-ai/langsmith-sdk#3037</a></li>
<li>chore(deps): bump cryptography from 46.0.7 to 48.0.1 in /python by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3038">langchain-ai/langsmith-sdk#3038</a></li>
<li>chore(deps): bump starlette from 1.0.1 to 1.3.1 in /python by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3039">langchain-ai/langsmith-sdk#3039</a></li>
<li>chore(deps-dev): bump langchain-anthropic from 1.4.4 to 1.4.6 in
/python by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3044">langchain-ai/langsmith-sdk#3044</a></li>
<li>chore(deps): bump the npm_and_yarn group across 4 directories with 4
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3046">langchain-ai/langsmith-sdk#3046</a></li>
<li>chore(deps): bump the npm_and_yarn group across 2 directories with 2
updates by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3060">langchain-ai/langsmith-sdk#3060</a></li>
<li>test(python): fix integration assertions for updated attachment
error message by <a
href="https://github.com/QuentinBrosse"><code>@​QuentinBrosse</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3061">langchain-ai/langsmith-sdk#3061</a></li>
<li>chore: reconcile bumpversion config and mandate release process for
agents by <a
href="https://github.com/QuentinBrosse"><code>@​QuentinBrosse</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3062">langchain-ai/langsmith-sdk#3062</a></li>
<li>release(py): 0.8.18 by <a
href="https://github.com/QuentinBrosse"><code>@​QuentinBrosse</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3063">langchain-ai/langsmith-sdk#3063</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.17...v0.8.18">https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.17...v0.8.18</a></p>
<h2>v0.8.17</h2>
<h2>What's Changed</h2>
<ul>
<li>feat: expose the resources from the generated openapi client in the
langsmith client by <a
href="https://github.com/sineha-mani"><code>@​sineha-mani</code></a> in
<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3018">langchain-ai/langsmith-sdk#3018</a></li>
<li>feat(js): port <code>isTracingEnabled</code> utility from Python by
<a href="https://github.com/dqbd"><code>@​dqbd</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3032">langchain-ai/langsmith-sdk#3032</a></li>
<li>Add sandbox mount support to JS SDK by <a
href="https://github.com/DanielKneipp"><code>@​DanielKneipp</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3010">langchain-ai/langsmith-sdk#3010</a></li>
<li>release(js): bump to 0.7.9 by <a
href="https://github.com/dqbd"><code>@​dqbd</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3035">langchain-ai/langsmith-sdk#3035</a></li>
<li>Add sandbox mount support to Python SDK by <a
href="https://github.com/DanielKneipp"><code>@​DanielKneipp</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3009">langchain-ai/langsmith-sdk#3009</a></li>
<li>docs: note that _openapi_client directories are auto-generated by <a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3034">langchain-ai/langsmith-sdk#3034</a></li>
<li>fix: update JS SDK type declarations with skipLibCheck disabled by
<a href="https://github.com/sineha-mani"><code>@​sineha-mani</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3043">langchain-ai/langsmith-sdk#3043</a></li>
<li>release(js): 0.7.10 by <a
href="https://github.com/dqbd"><code>@​dqbd</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3045">langchain-ai/langsmith-sdk#3045</a></li>
<li>feat: adding python async for online evals by <a
href="https://github.com/sineha-mani"><code>@​sineha-mani</code></a> in
<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3048">langchain-ai/langsmith-sdk#3048</a></li>
<li>Add sandbox Git mount SDK helpers by <a
href="https://github.com/DanielKneipp"><code>@​DanielKneipp</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3040">langchain-ai/langsmith-sdk#3040</a></li>
<li>fix: use insights tab in sdk report links [closes LSO-2936] by <a
href="https://github.com/eric-langchain"><code>@​eric-langchain</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3050">langchain-ai/langsmith-sdk#3050</a></li>
<li>feat(client): warn when backend version is below minimum required by
<a
href="https://github.com/KiewanVillatel"><code>@​KiewanVillatel</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3041">langchain-ai/langsmith-sdk#3041</a></li>
<li>chore: bump _MIN_BACKEND_VERSION to 0.16.5rc1 by <a
href="https://github.com/langtions-bot"><code>@​langtions-bot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3053">langchain-ai/langsmith-sdk#3053</a></li>
<li>fix(sandbox): use built-in gcp auth host matching by <a
href="https://github.com/DanielKneipp"><code>@​DanielKneipp</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3055">langchain-ai/langsmith-sdk#3055</a></li>
<li>chore(python): py to 0.8.17 by <a
href="https://github.com/sineha-mani"><code>@​sineha-mani</code></a> in
<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3056">langchain-ai/langsmith-sdk#3056</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/sineha-mani"><code>@​sineha-mani</code></a>
made their first contribution in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3018">langchain-ai/langsmith-sdk#3018</a></li>
<li><a
href="https://github.com/eric-langchain"><code>@​eric-langchain</code></a>
made their first contribution in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3050">langchain-ai/langsmith-sdk#3050</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.16...v0.8.17">https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.16...v0.8.17</a></p>
<h2>v0.8.16</h2>
<h2>What's Changed</h2>
<ul>
<li>feat(py): add sync/async conversion for Sandbox and SandboxClient
[INF-0000] by <a
href="https://github.com/ramon-langchain"><code>@​ramon-langchain</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3019">langchain-ai/langsmith-sdk#3019</a></li>
<li>fix(experiments): extract keys from wrapped evaluator function by <a
href="https://github.com/shamikkarkhanis"><code>@​shamikkarkhanis</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3014">langchain-ai/langsmith-sdk#3014</a></li>
<li>chore: repoint <a
href="mailto:support@langchain.dev">support@langchain.dev</a> mentions
to the Support Portal by <a
href="https://github.com/lutan-langchain"><code>@​lutan-langchain</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3024">langchain-ai/langsmith-sdk#3024</a></li>
<li>fix(python): derive create_child run id from start_time [LSDK-220]
by <a
href="https://github.com/harisaiharish"><code>@​harisaiharish</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3027">langchain-ai/langsmith-sdk#3027</a></li>
<li>chore: sync langsmith_api by <a
href="https://github.com/langtions-bot"><code>@​langtions-bot</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3020">langchain-ai/langsmith-sdk#3020</a></li>
<li>chore: js to 0.7.8 and py to 0.8.16 by <a
href="https://github.com/shamikkarkhanis"><code>@​shamikkarkhanis</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/3029">langchain-ai/langsmith-sdk#3029</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="31c2bf650b"><code>31c2bf6</code></a>
release(py): 0.8.18 (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3063">#3063</a>)</li>
<li><a
href="8955b68868"><code>8955b68</code></a>
chore: reconcile bumpversion config and mandate release process for
agents (#...</li>
<li><a
href="411401f6ca"><code>411401f</code></a>
test(python): fix integration assertions for updated attachment error
message...</li>
<li><a
href="9c5515620f"><code>9c55156</code></a>
Merge commit from fork</li>
<li><a
href="5b2bd8db3c"><code>5b2bd8d</code></a>
chore(deps): bump the npm_and_yarn group across 2 directories with 2
updates ...</li>
<li><a
href="d8642f9099"><code>d8642f9</code></a>
chore(deps): bump the npm_and_yarn group across 4 directories with 4
updates ...</li>
<li><a
href="953c2e5e25"><code>953c2e5</code></a>
chore(deps-dev): bump langchain-anthropic from 1.4.4 to 1.4.6 in /python
(<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3044">#3044</a>)</li>
<li><a
href="5513699e2d"><code>5513699</code></a>
chore(deps): bump starlette from 1.0.1 to 1.3.1 in /python (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3039">#3039</a>)</li>
<li><a
href="8becdefdf4"><code>8becdef</code></a>
chore(deps): bump cryptography from 46.0.7 to 48.0.1 in /python (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3038">#3038</a>)</li>
<li><a
href="1a9c522feb"><code>1a9c522</code></a>
chore(deps): bump aiohttp from 3.14.0 to 3.14.1 in /python (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/3037">#3037</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.5...v0.8.18">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=langsmith&package-manager=uv&previous-version=0.8.5&new-version=0.8.18)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/langchain-ai/langchain/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-20 02:10:37 +00:00
dependabot[bot]
0f1893147a chore: bump vcrpy from 8.1.1 to 8.2.1 in /libs/partners/openai (#38294)
Bumps [vcrpy](https://github.com/kevin1024/vcrpy) from 8.1.1 to 8.2.1.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/kevin1024/vcrpy/releases">vcrpy's
releases</a>.</em></p>
<blockquote>
<h2>v8.2.1</h2>
<h2>What's Changed</h2>
<ul>
<li><strong>SECURITY:</strong> Cassettes are now loaded with a safe YAML
loader, preventing arbitrary code execution when a cassette from an
untrusted source is loaded. Previously a crafted cassette containing a
Python object tag (e.g. <code>!!python/object/apply:os.system</code>)
would execute code on load, including via the normal
<code>vcr.use_cassette()</code> path. Existing cassettes (including
file-upload/streaming bodies) continue to load. Advisory:
GHSA-rpj2-4hq8-938g — thanks <a
href="https://github.com/RamiAltai"><code>@​RamiAltai</code></a> and <a
href="https://github.com/EQSTLab"><code>@​EQSTLab</code></a> for the
reports.</li>
<li>Validate <code>record_mode</code> and raise a clear error on an
invalid value (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/208">#208</a>)</li>
<li>Recommend pytest-recording over the unmaintained pytest-vcr in the
docs (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/986">#986</a>)</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/kevin1024/vcrpy/compare/v8.2.0...v8.2.1">https://github.com/kevin1024/vcrpy/compare/v8.2.0...v8.2.1</a></p>
<h2>v8.2.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Add support for httpx 2.x (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/993">#993</a>)
- thanks <a
href="https://github.com/dsfaccini"><code>@​dsfaccini</code></a></li>
<li>Patch httpx transports instead of httpcore (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/972">#972</a>)
- thanks <a
href="https://github.com/seowalex"><code>@​seowalex</code></a></li>
<li>Fix aiohttp 3.14 compatibility: <code>AsyncStreamReaderMixin</code>
removed and <code>ClientResponse</code> now requires
<code>stream_writer</code> (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/995">#995</a>)
- thanks <a
href="https://github.com/dsfaccini"><code>@​dsfaccini</code></a></li>
<li>Account for modified requests when storing played cassettes, so
<code>drop_unused_requests</code> honours
<code>before_record_request</code> filtering (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/962">#962</a>)
- thanks <a
href="https://github.com/jamesbraza"><code>@​jamesbraza</code></a></li>
<li>Make the request URL available on <code>VCRHTTPResponse</code> (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/976">#976</a>)
- thanks <a
href="https://github.com/dAnjou"><code>@​dAnjou</code></a></li>
<li>Improve error message when a matching request has already been
consumed (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/985">#985</a>)
- thanks <a
href="https://github.com/Polandia94"><code>@​Polandia94</code></a></li>
<li>Fix body check in <code>convert_body_to_unicode</code> to use an
explicit type check (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/982">#982</a>)
- thanks <a
href="https://github.com/Polandia94"><code>@​Polandia94</code></a></li>
<li>Add env proxy cassette regression test (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/994">#994</a>)
- thanks <a
href="https://github.com/tine1117"><code>@​tine1117</code></a></li>
<li>Remove milestone references from docs (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/984">#984</a>)
- thanks <a
href="https://github.com/Polandia94"><code>@​Polandia94</code></a></li>
<li>CI: bump sphinx-rtd-theme from 3.0.2 to 3.1.0 (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/973">#973</a>)</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/kevin1024/vcrpy/compare/v8.1.1...v8.2.0">https://github.com/kevin1024/vcrpy/compare/v8.1.1...v8.2.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/kevin1024/vcrpy/blob/master/docs/changelog.rst">vcrpy's
changelog</a>.</em></p>
<blockquote>
<h2>Changelog</h2>
<p>All help in providing PRs to close out bug issues is appreciated.
Even if that is providing a repo that fully replicates issues. We have
very generous contributors that have added these to bug issues which
meant another contributor picked up the bug and closed it out.</p>
<ul>
<li>
<p>8.2.1</p>
<ul>
<li>SECURITY: Load cassettes with a safe YAML loader, preventing
arbitrary code execution when a cassette from an untrusted source is
loaded (GHSA-rpj2-4hq8-938g) - thanks <a
href="https://github.com/RamiAltai"><code>@​RamiAltai</code></a> and <a
href="https://github.com/EQSTLab"><code>@​EQSTLab</code></a></li>
<li>Validate <code>record_mode</code> and raise a clear error on an
invalid value (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/208">#208</a>)</li>
<li>Recommend pytest-recording over the unmaintained pytest-vcr in the
docs (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/986">#986</a>)</li>
</ul>
</li>
<li>
<p>8.2.0</p>
<ul>
<li>Add support for httpx 2.x (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/993">#993</a>)
- thanks <a
href="https://github.com/dsfaccini"><code>@​dsfaccini</code></a></li>
<li>Patch httpx transports instead of httpcore (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/972">#972</a>)
- thanks <a
href="https://github.com/seowalex"><code>@​seowalex</code></a></li>
<li>Fix aiohttp 3.14 compatibility: <code>AsyncStreamReaderMixin</code>
removed and <code>ClientResponse</code> now requires
<code>stream_writer</code> (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/995">#995</a>)
- thanks <a
href="https://github.com/dsfaccini"><code>@​dsfaccini</code></a></li>
<li>Account for modified requests when storing played cassettes, so
<code>drop_unused_requests</code> honours
<code>before_record_request</code> filtering (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/962">#962</a>)
- thanks <a
href="https://github.com/jamesbraza"><code>@​jamesbraza</code></a></li>
<li>Make the request URL available on <code>VCRHTTPResponse</code> (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/976">#976</a>)
- thanks <a
href="https://github.com/dAnjou"><code>@​dAnjou</code></a></li>
<li>Improve error message when a matching request has already been
consumed (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/985">#985</a>)
- thanks <a
href="https://github.com/Polandia94"><code>@​Polandia94</code></a></li>
<li>Fix body check in <code>convert_body_to_unicode</code> to use an
explicit type check (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/982">#982</a>)
- thanks <a
href="https://github.com/Polandia94"><code>@​Polandia94</code></a></li>
<li>Add env proxy cassette regression test (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/994">#994</a>)
- thanks <a
href="https://github.com/tine1117"><code>@​tine1117</code></a></li>
<li>Remove milestone references from docs (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/984">#984</a>)
- thanks <a
href="https://github.com/Polandia94"><code>@​Polandia94</code></a></li>
<li>CI: bump sphinx-rtd-theme from 3.0.2 to 3.1.0 (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/973">#973</a>)</li>
</ul>
</li>
<li>
<p>8.1.1</p>
<ul>
<li>Fix sync requests in async contexts for HTTPX (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/965">#965</a>)
- thanks <a
href="https://github.com/seowalex"><code>@​seowalex</code></a></li>
<li>CI: bump peter-evans/create-pull-request from 7 to 8 (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/969">#969</a>)</li>
</ul>
</li>
<li>
<p>8.1.0</p>
<ul>
<li>Enable brotli decompression if available (via <code>brotli</code>,
<code>brotlipy</code> or <code>brotlicffi</code>) (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/620">#620</a>)
- thanks <a
href="https://github.com/immerrr"><code>@​immerrr</code></a></li>
<li>Fix aiohttp allowing both <code>data</code> and <code>json</code>
arguments when one is None (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/624">#624</a>)
- thanks <a
href="https://github.com/leorochael"><code>@​leorochael</code></a></li>
<li>Fix usage of io-like interface with VCR.py (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/906">#906</a>)
- thanks <a href="https://github.com/tito"><code>@​tito</code></a> and
<a href="https://github.com/kevdevg"><code>@​kevdevg</code></a></li>
<li>Migrate to declarative Python package config (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/767">#767</a>)
- thanks <a
href="https://github.com/deronnax"><code>@​deronnax</code></a></li>
<li>Various linting fixes - thanks <a
href="https://github.com/jairhenrique"><code>@​jairhenrique</code></a></li>
<li>CI: bump actions/checkout from 5 to 6 (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/955">#955</a>)</li>
</ul>
</li>
<li>
<p>8.0.0</p>
<ul>
<li>BREAKING: Drop support for Python 3.9 (major version bump) - thanks
<a
href="https://github.com/jairhenrique"><code>@​jairhenrique</code></a></li>
<li>BREAKING: Drop support for urllib3 &lt; 2 - fixes CVE warnings from
urllib3 1.x (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/926">#926</a>,
<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/880">#880</a>)
- thanks <a
href="https://github.com/jairhenrique"><code>@​jairhenrique</code></a></li>
<li>New feature: <code>drop_unused_requests</code> option to remove
unused interactions from cassettes (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/763">#763</a>)
- thanks <a
href="https://github.com/danielnsilva"><code>@​danielnsilva</code></a></li>
<li>Rewrite httpx support to patch httpcore instead of httpx (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/943">#943</a>)
- thanks <a
href="https://github.com/seowalex"><code>@​seowalex</code></a>
<ul>
<li>Fixes <code>httpx.ResponseNotRead</code> exceptions (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/832">#832</a>,
<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/834">#834</a>)</li>
<li>Fixes <code>KeyError: 'follow_redirects'</code> (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/945">#945</a>)</li>
<li>Adds support for custom httpx transports</li>
</ul>
</li>
<li>Fix HTTPS proxy handling - proxy address no longer ends up in
cassette URIs (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/809">#809</a>,
<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/914">#914</a>)
- thanks <a href="https://github.com/alga"><code>@​alga</code></a></li>
<li>Fix <code>iscoroutinefunction</code> deprecation warning on Python
3.14 - thanks <a
href="https://github.com/kloczek"><code>@​kloczek</code></a></li>
<li>Only log message if response is appended - thanks <a
href="https://github.com/talfus-laddus"><code>@​talfus-laddus</code></a></li>
<li>Optimize urllib.parse calls - thanks <a
href="https://github.com/Martin-Brunthaler"><code>@​Martin-Brunthaler</code></a></li>
<li>Fix CI for Ubuntu 24.04 - thanks <a
href="https://github.com/hartwork"><code>@​hartwork</code></a></li>
<li>Various CI improvements: migrate to uv, update GitHub Actions -
thanks <a
href="https://github.com/jairhenrique"><code>@​jairhenrique</code></a></li>
<li>Various linting and test improvements - thanks <a
href="https://github.com/jairhenrique"><code>@​jairhenrique</code></a>
and <a
href="https://github.com/hartwork"><code>@​hartwork</code></a></li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="85312039e9"><code>8531203</code></a>
Release v8.2.1</li>
<li><a
href="045acb1b5f"><code>045acb1</code></a>
Use a safe YAML loader for cassettes to prevent code execution</li>
<li><a
href="de43f46247"><code>de43f46</code></a>
Fix lint failures from merged PRs (codespell + ruff UP032)</li>
<li><a
href="514c374796"><code>514c374</code></a>
Validate record_mode and raise a clear error on invalid values</li>
<li><a
href="b736cadd58"><code>b736cad</code></a>
docs: recommend pytest-recording over unmaintained pytest-vcr</li>
<li><a
href="06758c9879"><code>06758c9</code></a>
Release v8.2.0</li>
<li><a
href="6554837e02"><code>6554837</code></a>
Add env proxy cassette regression test (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/994">#994</a>)</li>
<li><a
href="62cf5e1272"><code>62cf5e1</code></a>
Accounting for modified requests when storing played cassettes, with a
test (...</li>
<li><a
href="13f201a820"><code>13f201a</code></a>
make url available in VCRHTTPResponse (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/976">#976</a>)</li>
<li><a
href="d57b55339e"><code>d57b553</code></a>
improve error message on repeated requestt (<a
href="https://redirect.github.com/kevin1024/vcrpy/issues/985">#985</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/kevin1024/vcrpy/compare/v8.1.1...v8.2.1">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=vcrpy&package-manager=uv&previous-version=8.1.1&new-version=8.2.1)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/langchain-ai/langchain/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-06-19 22:09:41 -04:00
langchain-model-profile-bot[bot]
87b4babba5 chore(model-profiles): refresh model profile data (#38274)
Automated refresh of model profile data for all in-monorepo partner
integrations via `langchain-profiles refresh`.

🤖 Generated by the `refresh_model_profiles` workflow.

Co-authored-by: mdrxy <61371264+mdrxy@users.noreply.github.com>
2026-06-19 18:14:07 -04:00
Mason Daugherty
847312e0aa test(openai): vcr embedding raw equivalence tests (#38199)
The raw OpenAI embeddings equivalence checks were comparing live
responses from two requests, which made them vulnerable to upstream
numerical drift even when LangChain behavior had not changed. Recording
those interactions keeps the regression coverage while preventing
scheduled integration runs from failing due to backend variance.
2026-06-16 13:01:26 -04:00
Mason Daugherty
879cad0676 release(openai): 1.3.2 (#38130) 2026-06-13 01:34:56 -04:00
Mason Daugherty
37b339f8c4 fix(openai): build Codex async headers off the event loop in _agenerate (#38129)
The Codex `_astream` path was reworked to build its auth headers from an
async-fetched token, but `_agenerate` was left on the old "prime the
cache, then read it back synchronously" approach. That sync read still
went through `_FileChatGPTOAuthTokenProvider.get_token`, which acquires
a thread lock and a cross-process file lock on every call — blocking the
event loop even when the token is already warm. Both async paths now
build headers the same way, so neither touches sync `get_token` on the
loop.

## Changes
- `_ChatOpenAICodex._agenerate` now fetches the token via `aget_token`,
builds the Codex headers off-loop, and hands them to
`_get_request_payload` through the private `_codex_headers` kwarg —
eliminating the synchronous token read (and its lock acquisition) that
previously ran on the event loop inside `super()._agenerate`.
- Replaced the duplicated `"_codex_headers"` string literal across
`_agenerate`, `_astream`, and `_get_request_payload` with a
`_CODEX_HEADERS_KWARG` module constant, documenting that the kwarg is
popped before the payload reaches the SDK.
- Documented the deliberate `is not None` check in
`_get_request_payload`: an explicitly-built empty header dict
(accountless token with `originator=None`) is honored as-is rather than
falling back to the blocking sync read.
2026-06-13 01:33:37 -04:00
Mason Daugherty
11429a9e1c fix(openai): avoid sync token reads in Codex streaming (#38128)
Codex streaming now builds request headers from the async token path
instead of refreshing asynchronously and later reading the token
synchronously during payload construction. That keeps
`_ChatOpenAICodex._astream` off the sync token path while preserving the
`ChatGPT-Account-Id` and `originator` headers needed by Codex requests.
2026-06-13 01:26:48 -04:00
Mason Daugherty
454e19588c hotfix(openai): skip Codex live integration tests in CI (#38124) 2026-06-12 22:34:40 -04:00
Mason Daugherty
9e6f58ba46 hotfix(openai): switch version (#38123) 2026-06-12 22:21:34 -04:00
Mason Daugherty
bf7b0180f2 refactor(openai): mark Codex OAuth classes private (#38122)
- Mark the Codex OAuth model/token helper classes private with leading
underscores
- Remove `_ChatOpenAICodex` from package-level public exports
- Keep a once-per-process runtime warning that use is
experimental/unofficial and must comply with applicable OpenAI account,
workspace, plan, terms, policies, rate limits, and safeguards
2026-06-12 22:19:40 -04:00
Mason Daugherty
8180a09dd7 release(openai): 1.4.0 (#38120) 2026-06-12 21:52:20 -04:00
open-swe[bot]
6c2b70e60e feat(openai): add ChatGPT OAuth-backed ChatOpenAICodex chat model (#37569)
[Docs](https://github.com/langchain-ai/docs/pull/4115)

Adds a new `ChatOpenAICodex` chat model and a small `chatgpt_oauth`
module so users can authenticate with their ChatGPT subscription (OAuth
2.0 Authorization Code Flow with PKCE) and route Responses-API requests
to the ChatGPT Codex backend at `https://chatgpt.com/backend-api/codex`.
Login and token persistence live behind a refresh-aware
`ChatGPTOAuthTokenProvider` protocol so they stay decoupled from model
invocation. The existing API-key `ChatOpenAI` behavior is untouched. By
default the file-backed provider writes to
`~/.langchain/chatgpt-auth.json` to avoid stomping on Codex CLI / VS
Code sessions at `~/.codex/auth.json`. No new required dependencies are
introduced (uses stdlib + `httpx`).

```python
from langchain_openai import ChatOpenAICodex
from langchain_openai.chatgpt_oauth import login_chatgpt

login_chatgpt()
model = ChatOpenAICodex(model="gpt-5.5")
response = model.invoke("hello")
```

_Opened collaboratively by Mason Daugherty and open-swe._

---------

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Co-authored-by: Mason Daugherty <61371264+mdrxy@users.noreply.github.com>
Co-authored-by: Mason Daugherty <github@mdrxy.com>
Co-authored-by: Mason Daugherty <mason@langchain.dev>
2026-06-12 21:49:03 -04:00
Mason Daugherty
63cc1f4e7d docs: refresh README installation and resources (#38119)
README installation examples now use `uv add` consistently, matching the
repo's `uv`-based Python workflow. The top-level README also gets a
cleaner quickstart and resource section with current links for docs,
community, learning, and contribution guidance.

## Changes
- Replaced `pip install` snippets with `uv add` across package quick
install docs, including the Hugging Face extras and
`sentence-transformers` upgrade examples.
- Updated the top-level quickstart to show only `uv add langchain` and
refreshed the example model to `openai:gpt-5.5`.
- Pointed the LangGraph orchestration link at the LangGraph GitHub
repository.
- Consolidated top-level documentation and additional-resource links
under a single `Resources` section covering docs, ecosystem overview,
API reference, discussions, Academy, contributing, and the Code of
Conduct.
- Added LangChain Academy and Code of Conduct links to package README
resource sections.
2026-06-12 17:38:22 -04:00
Mason Daugherty
86ce95afc2 test(core,langchain): update tests for explicit deserialization allowlists (#38118)
Core serialization tests now opt into the object allowlists they rely on
instead of assuming default deserialization permits core objects.
Compatibility tests that intentionally exercise deprecated runnable
streaming and history APIs also suppress the expected deprecation
warnings so they can keep covering those legacy paths cleanly.

## Changes
- Updated serialization and prompt round-trip tests to pass
`allowed_objects="core"` or targeted allowlists when loading
`AIMessage`, prompt templates, structured prompts, runnable maps, and
related core objects.
- Adjusted secret-injection regression coverage to keep testing
`secrets_from_env=True` behavior while explicitly allowing core
deserialization paths.
- Tightened prompt deserialization rejection tests so attribute-access
payloads are loaded only through the specific prompt-template allowlist
needed to reach validation.
- Added module-level warning filters around legacy runnable
compatibility coverage for `astream_log`,
`astream_events(version="v1")`, and `RunnableWithMessageHistory`.
- Bumped the `langchain` package's minimum `langgraph` dependency from
`1.2.4` to `1.2.5`.

## Testing
- Updated unit tests across core serialization, prompt, fake chat model,
runnable history, and runnable event coverage.
2026-06-12 16:49:14 -04:00
Mason Daugherty
4108c0738c release(core): 1.4.7 (#38111)
Bumps `langchain-core` to `1.4.7` for the next patch release and updates
downstream minimum `langchain-core` requirements so package locks
resolve against the new core version.

This also refreshes the runnable snapshots that embed `lc_versions`
metadata so the version consistency check continues to validate
checked-in artifacts.

Validated with `python libs/core/scripts/check_version.py`, `uv lock
--check` across package lockfiles, and the core runnable tests that own
the updated snapshots with local LangSmith tracing env disabled.
2026-06-12 14:54:25 -04:00
Mason Daugherty
8837163917 fix(core,partners): rename package version trace metadata (#38110)
Package-version trace metadata now uses the LangChain-owned
`metadata["lc_versions"]` convention instead of the user-owned
`metadata["versions"]` key. Metadata merging is narrowed so only
`lc_versions` accumulates nested package-version entries, while generic
nested metadata keeps normal last-writer-wins behavior.

## Changes
- Renamed `BaseLanguageModel._add_version()` trace metadata from
`versions` to `lc_versions`, including docstrings and the non-dict
replacement warning.
- Scoped `_merge_metadata_dicts()` nested-map accumulation to only
`lc_versions`; duplicate package entries remain last-writer-wins and
`lc_versions` mappings are copied defensively.
- Preserved user-owned `metadata["versions"]` semantics by keeping it
out of package-version tracking and generic nested metadata merging.
- Updated runnable snapshots and partner package metadata assertions
across Anthropic, DeepSeek, Fireworks, Groq, Hugging Face, MistralAI,
Ollama, OpenAI, OpenRouter, Perplexity, and xAI to expect `lc_versions`.

## Testing
- Added/adjusted core tests for `lc_versions` accumulation, duplicate
package overwrite behavior, non-dict `lc_versions` replacement,
defensive copying, and `metadata["versions"]` last-writer-wins behavior.
- Ran focused core and partner metadata tests plus Ruff checks for
changed areas.
2026-06-12 14:26:32 -04:00
Mason Daugherty
5d20596d73 style(core,langchain,langchain-classic,partners): replace double backticks in docstrings (#38095)
Standardizes inline code markup in Python docstrings and comments by
replacing Sphinx-style double backticks with single-backtick Markdown.
The cleanup keeps existing code fences intact while aligning inline
references with the repo's docstring convention.

## Changes
- Converted inline code references in core prompt-loading docs and
LangSmith tracer comments, including `..`, `allow_dangerous_paths`, and
inheritable metadata keys.
- Normalized agent-related docstrings and comments around
`wrap_model_call`, `ExtendedModelResponse`, `Command`,
`create_structured_chat_agent`, and `DockerExecutionPolicy`.
- Updated partner package docstrings for inline references such as
`json_schema`, `ToolCall`, `apply_patch_call_output`, OpenRouter content
block keys, and Perplexity tool-call serialization.
- Cleaned test and helper docstrings that referenced command separators,
fake `resource` modules, stream event names, and xdist rate-limit
environment variables.
2026-06-12 00:17:26 -04:00
Mason Daugherty
95d1633341 test(openai): use gpt-4o for image token counting (#38089)
Image token counting integration coverage is pinned back to `gpt-4o`,
whose usage metadata matches the local vision token estimator. A recent
model refresh moved these checks to `gpt-4.1-mini`, which reports
different live image token usage and broke the exact equality
assertions.
2026-06-11 20:27:18 -04:00
Mason Daugherty
05cc55f1bc release(core): 1.4.6 (#38061) 2026-06-11 02:58:40 -04:00
Mason Daugherty
948f6cc58c feat(core,partners): add package version tracking to tracing metadata (#35295)
Following on the heels of #35293

TODO:
- Packages outside of this repo (e.g. LiteLLM, Nvidia, Google, AWS)

---

## Summary

Surface partner package versions in `metadata.versions` on LangSmith
traces. Mirrors the JS SDK's `_addVersion()` pattern
([langchainjs#10106](https://github.com/langchain-ai/langchainjs/pull/10106)).

Each model constructor records its package version via `_add_version()`
on `BaseLanguageModel`. The version dict accumulates through the class
hierarchy — `langchain-core` is added in
`BaseLanguageModel.model_post_init`, `langchain-openai` in
`BaseChatOpenAI._set_openai_chat_version`, and each leaf partner in its
uniquely-named `model_validator`. Traces end up with:

```json
{
  "metadata": {
    "versions": {
      "langchain-core": "1.4.5",
      "langchain-openai": "1.3.0",
      "langchain-xai": "1.2.2"
    }
  }
}
```

### Changes

- `BaseLanguageModel._add_version(pkg, version)` — appends to
`self.metadata["versions"]`; accepts any `Mapping` type; emits a warning
if a non-mapping value is found and replaced
- `BaseLanguageModel.model_post_init` — adds `langchain-core` version;
calls `super()` for MRO safety
- `_merge_metadata_dicts` — one-level-deep (non-recursive) merge for
nested dict metadata keys
- `CallbackManager.add_metadata` — uses `_merge_metadata_dicts` instead
of flat `dict.update()` so nested metadata dicts (like `versions`)
coexist rather than clobber
- `merge_configs` — uses `_merge_metadata_dicts` for config merging

**Partners:**
- Each now calls `self._add_version("langchain-<pkg>", __version__)`

### Design decisions

- **Constructor-based, not `_get_ls_params`-based** — versions flow
through `self.metadata` (local metadata on traces), not through
`LangSmithParams`. This matches JS and makes child-class version
inheritance automatic (no merge/clobber issues).
- **`versions` is local (non-inheritable) metadata** — `self.metadata`
is passed to `CallbackManager.configure` as `local_metadata`
(`add_metadata(..., inherit=False)`), so `versions` is attached **once
per chat-model run** and is **not** propagated to child runs or
duplicated onto every streaming chunk. This is intentionally the
opposite of the inheritable-per-chunk metadata that #36588 was reducing
for performance — `versions` does not regress that path.
- **`add_metadata` deep-merge is a correctness fix, not just for
versions** — previously `add_metadata`/`merge_configs` did a flat
top-level `dict.update`/spread, so any nested metadata dict baked into a
config (e.g. via `.with_config({"metadata": {...}})`) would be wholly
replaced when a caller also passed `metadata`. `_merge_metadata_dicts`
merges one level deep so user-provided `config.metadata.versions` and
model-set `versions` coexist instead of clobbering. The merge runs once
per `configure` (not per chunk), so it is off the streaming hot path.
- **One level deep only** — `_merge_metadata_dicts` is deliberately
*not* a recursive deep merge; values nested more than one level are
last-writer-wins. This covers the `versions` case without the
ambiguity/cost of arbitrary-depth merging.
- **Warn on non-dict `metadata["versions"]`** — if a user sets
`metadata={"versions": "some-string"}`, `_add_version` emits a warning
and replaces the value with the version dict rather than silently
discarding user data or crashing. This is a soft breaking change for
anyone who previously stored non-dict values at this key.

### Follow-ups (tracked separately, out of scope here)

- JS `mergeConfigs` still flat-spreads nested metadata, so
`metadata.versions` can still clobber on the JS side until an equivalent
deep-merge lands.

---

Made by [Open SWE](https://openswe.vercel.app)

---------

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
2026-06-11 02:23:19 -04:00
Mason Daugherty
86428c63ac fix(core,openai): normalize v1 streamed tool calls (#35983)
OpenAI Chat Completions streaming has a v1 normalization gap when tool
calls are streamed.

When users opt into `output_version="v1"`, `.content_blocks` is expected
to be the normalized cross-provider view of the message. For OpenAI Chat
Completions streams, though, chunks still carry raw string `content`
plus side-channel `tool_call_chunks` / `tool_calls`.

Practically, an OpenAI stream chunk can look like this internally:

```python
AIMessageChunk(
    content="",
    tool_call_chunks=[
        {
            "name": "get_weather",
            "args": '{"location": "SF"}',
            "id": "call_123",
            "index": 0,
            "type": "tool_call_chunk",
        }
    ],
    response_metadata={"model_provider": "openai", "output_version": "v1"},
)
```

That is not already-normalized v1 content like this:

```python
AIMessageChunk(
    content=[
        {
            "type": "tool_call_chunk",
            "name": "get_weather",
            "args": '{"location": "SF"}',
            "id": "call_123",
            "index": 0,
        }
    ],
)
```

Because `.content_blocks` currently short-circuits solely on
`output_version="v1"`, it can return the raw string/empty list directly
instead of running the OpenAI translator that incorporates
`tool_call_chunks` / `tool_calls` into normalized v1 blocks.

In practice, a streamed OpenAI tool call can be parsed successfully into
`tool_calls`, but still be missing from the final aggregated
`.content_blocks`. Downstream code that consumes the v1 block interface
then sees no `tool_call` block and must know to inspect OpenAI-specific
chunk fields instead.

User story:

> As a LangChain user streaming OpenAI Chat Completions with bound tools
and `output_version="v1"`, I need the final aggregated message's
`.content_blocks` to include normalized `tool_call` blocks, so that code
written against the v1 content-block interface handles streamed tool
calls consistently across providers.

Expected final aggregated view:

```python
message.content_blocks == [
    {
        "type": "tool_call",
        "name": "get_weather",
        "args": {"location": "SF"},
        "id": "call_123",
    }
]
```

Root causes:

1. The usage-only Chat Completions chunk uses `content=[]` in v1 mode
while normal streaming chunks use `content=""`, creating inconsistent
content types during chunk aggregation.
2. `AIMessage.content_blocks` and `AIMessageChunk.content_blocks` treat
any `output_version="v1"` message as already-normalized, even when
`content` is still raw string content from Chat Completions.
3. Content-bearing OpenAI stream chunks do not carry
`output_version="v1"`, so the final merged chunk may not reliably take
the v1 normalization path.

Changes:

- Keep usage-only Chat Completions chunks as `content=""` instead of
overriding to `[]`, so streaming chunks merge consistently.
- Propagate `output_version="v1"` to content-bearing chunks.
- Only short-circuit v1 `.content_blocks` when `content` is already a
list of blocks; otherwise fall through to the provider translator.
- Add regression tests covering string-content v1 fallback, usage-only
chunk content consistency, and streamed tool calls appearing as
normalized final v1 blocks.
2026-06-11 00:51:50 -04:00
Christophe Bornet
1de100f278 chore(infra): bump mypy to 2.1 and unify type-check config across the monorepo (#36470)
Originally a narrow bump of mypy to `1.20` in four packages. Expanded to
get the whole monorepo onto a single, current mypy and a consistent
type-check configuration, so contributors no longer hit different mypy
versions and divergent behavior depending on which package they touch.

### What changed

- **Unified the mypy pin to `>=2.1.0,<2.2.0`** in every mypy-using
package (6 libs + 14 partners), replacing the previously scattered pins
(`1.10`/`1.17`/`1.18`/`1.19`/`1.20`, with assorted upper bounds).
- **Unified the `[tool.mypy]` base per tier:**
- libs: `plugins = ["pydantic.mypy"]`, `strict = true`,
`enable_error_code = "deprecated"`, `warn_unreachable = true`
  - partners: `disallow_untyped_defs = true`
- Normalized style (`disallow_untyped_defs = "True"` string → bool,
quote/key consistency).
- **Fixed the 20 real errors** mypy 2.1 surfaces: `redundant-cast` from
improved narrowing (`core`, `langchain-classic`), a `var-annotated` for
`_LOGGED`, a return-type widening in `langchain-groq`'s
`_convert_from_v1_to_groq` (it can legitimately return a bare `str`),
and stale `type-arg`/`unused-ignore` in `langchain-model-profiles`
tests.

### Deliberate non-uniformity (documented inline in the relevant
`pyproject.toml`s)

Going fully byte-identical would surface ~196 additional errors that are
*not* real bugs, so two settings are kept package-appropriate:

- **`warn_unreachable`** is enabled on every strict lib **except
`core`**, where it false-flags intentional defensive code — including
the SSRF / IP-policy guards in `_security/` — as unreachable.
- **`pydantic.mypy` plugin** is used only on `anthropic` and
`perplexity` (their code is authored against it and reports ~99/~132
errors without it). It is *not* added to the other partners, where it
only flags the public alias constructor API (e.g. `ChatGroq(model=...)`)
in tests rather than finding bugs.
- **`ollama`** is left on its `ty` type checker; it does not use mypy.

---------

Co-authored-by: Mason Daugherty <github@mdrxy.com>
2026-06-11 00:24:59 -04:00
Mason Daugherty
43880362d8 feat(standard-tests): validate tool call chunks during streaming (#34707)
As a LangChain user streaming a tool-calling model, I expect each
streamed chunk to expose structured `tool_call_chunk` content blocks so
I can render or process tool calls live, instead of waiting for the
final aggregated message.

This adds `tool_call_streaming` to `ModelProfile` and uses it in the
standard chat-model tool-calling tests. When a model profile opts in,
`test_tool_calling` and `test_tool_calling_async` now validate that at
least one streamed chunk includes a `tool_call_chunk` block via
`content_blocks`, while preserving the existing final-message
validation.

This keeps the contract profile-gated so providers can opt in once their
streaming chunk shape is verified. This PR opts in the providers
verified by smoke testing with straightforward profile coverage: OpenAI,
Anthropic, Fireworks, HuggingFace, OpenRouter, DeepSeek, and xAI. The
generated profile artifacts are refreshed so runtime profiles expose the
new capability flag.

Perplexity Responses also passed the smoke test, but its current profile
data is for the `sonar` family while the Responses smoke path used a
routed model string. That profile strategy is left as follow-up.
MistralAI currently streams `.tool_call_chunks`, but its content-block
translator exposes a complete `tool_call` block instead of
`tool_call_chunk`, so it also stays out of this flag until that
integration is fixed.
2026-06-10 22:29:02 -04:00
Mason Daugherty
6b9e22dbbc fix(langchain): tighten structured output model fallbacks (#38042)
Provider-native structured output fallback detection now uses bounded
model-name patterns instead of broad substring checks, reducing false
positives for unrelated model IDs. The model examples and test fixtures
across OpenAI/OpenRouter-facing code were refreshed around current
OpenAI model families while preserving shipped defaults.

## Changes
- Tightened `FALLBACK_MODELS_WITH_STRUCTURED_OUTPUT` from loose string
fragments to regex patterns, with `_supports_provider_strategy` matching
full model-name segments instead of arbitrary substrings.
- Expanded structured-output fallback coverage for newer OpenAI,
Anthropic, and xAI/Grok model families, including `gpt-5.x`, newer
Claude 4/5-style names, and `grok-build`.
- Reused `_attempt_infer_model_provider` in provider tool search routing
so `_provider_from_model_name` follows the same provider inference
behavior as `init_chat_model`.
- Suppressed irrelevant provider-inference deprecation warnings during
provider tool search registry lookup.
- Refreshed OpenAI, Azure OpenAI, OpenRouter, core metadata, and example
model references from older fixtures like `gpt-4`, `gpt-4o`, `o1`, and
`o4-mini` to current test/profile models such as `gpt-5.5`,
`gpt-5-nano`, and `gpt-4.1-mini`.
- Removed outdated OpenAI test assumptions around legacy `o1` behavior
and narrowed legacy structured-output checks to explicitly legacy model
names.
2026-06-10 21:18:14 -04:00
Mason Daugherty
c0103c3d2c hotfix(openai): min core dep (#37990) 2026-06-09 16:32:08 -04:00
Mason Daugherty
c7d01d5270 release(openai): 1.3.0 (#37989) 2026-06-09 16:15:29 -04:00
Nidhi Rajani
0f45b2c285 feat(openai): support apply_patch built-in tool (#37157)
[Docs](https://github.com/langchain-ai/docs/pull/4370)

Fixes #37031

Adds support for OpenAI Responses API `apply_patch` built-in tool.

This PR:
- Adds `apply_patch` to the OpenAI well-known tools list so
`bind_tools([{"type": "apply_patch"}])` works.
- Preserves `apply_patch_call` and `apply_patch_call_output` items when
converting OpenAI Responses API outputs into LangChain
`AIMessage.content`.
- Preserves the same item types in streaming `AIMessageChunk`
conversion.
- Supports round-trip input conversion for `apply_patch_call` and
`apply_patch_call_output`.
- Adds unit tests for core tool passthrough, non-streaming conversion,
streaming conversion, and round-trip input conversion.

## Testing

- `cd libs/core && uv run --group test pytest
tests/unit_tests/utils/test_function_calling.py -k "apply_patch" -vv`
- `cd libs/partners/openai && uv run --group test pytest
tests/unit_tests/chat_models/test_base.py -k "apply_patch" -vv`
- `cd libs/core && uv run --all-groups ruff check
langchain_core/utils/function_calling.py
tests/unit_tests/utils/test_function_calling.py`
- `cd libs/partners/openai && uv run --all-groups ruff check
langchain_openai/chat_models/base.py
tests/unit_tests/chat_models/test_base.py`

---------

Co-authored-by: Mason Daugherty <github@mdrxy.com>
Co-authored-by: Mason Daugherty <mason@langchain.dev>
2026-06-09 16:13:37 -04:00
langchain-model-profile-bot[bot]
7e9c916c7e chore(model-profiles): refresh model profile data (#37973)
Automated refresh of model profile data for all in-monorepo partner
integrations via `langchain-profiles refresh`.

🤖 Generated by the `refresh_model_profiles` workflow.

Co-authored-by: mdrxy <61371264+mdrxy@users.noreply.github.com>
2026-06-09 09:59:24 -04:00
Mason Daugherty
3b999176c8 test(langchain,partners): disable pytest-benchmark under xdist to silence PytestBenchmarkWarning (#37901)
Test targets run with `-n auto`, which makes `pytest-benchmark` (present
via `langchain-tests`) auto-disable itself and emit a
`PytestBenchmarkWarning` once per xdist worker. Passing
`--benchmark-disable` turns the plugin off explicitly so the warning
never fires, matching what `core` and `langchain_v1` already do.

## Changes
- Add `--benchmark-disable` to the `-n auto` test targets across
`langchain` (unit) and 14 partner packages' integration targets:
`anthropic`, `chroma`, `deepseek`, `exa`, `fireworks`, `groq`,
`huggingface`, `mistralai`, `nomic`, `ollama`, `openai`, `openrouter`,
`qdrant`, `xai`.
- Deliberately excluded `text-splitters` and `model-profiles`: their
`test` group doesn't install `pytest-benchmark`, so the flag would fail
with `unrecognized arguments`. Verified by importing the plugin under
each package's actual dependency group before editing.
2026-06-04 13:25:26 -04:00
langchain-model-profile-bot[bot]
414d7b8e94 chore(model-profiles): refresh model profile data (#37895)
Automated refresh of model profile data for all in-monorepo partner
integrations via `langchain-profiles refresh`.

🤖 Generated by the `refresh_model_profiles` workflow.

Co-authored-by: mdrxy <61371264+mdrxy@users.noreply.github.com>
2026-06-04 10:31:52 -04:00
ccurme
a1e2daf098 release(openai): 1.2.2 (#37617) 2026-05-21 17:55:36 -04:00
Mason Daugherty
aef86c476d chore(infra): bump langchain-tests floor to 1.1.9 (#37610)
Bumps the `langchain-tests` minimum across the monorepo from `1.0.0` to
`1.1.9` and adds a partner-level `Makefile` so partner lockfiles can be
regenerated in one command, matching the existing convention under
`libs/`.
2026-05-21 13:36:22 -05:00
Mason Daugherty
515f1f4536 test(openai): unbreak audio chat and Azure embedding integration tests (#37589)
Two unrelated nightly-CI failures rooted in upstream API drift. OpenAI
retired `gpt-4o-audio-preview` (now 404) and Azure embedding deployments
running `text-embedding-3-*` with truncated `dimensions` no longer
return unit-norm vectors.
2026-05-20 20:00:52 -05:00
Andy Young
625ed0ee8c fix(openai): guard httpx finalizers (#37570)
Same shape as the merged anthropic patch in #37064, ported to
`libs/partners/openai`.

`_SyncHttpxClientWrapper.__del__` / `_AsyncHttpxClientWrapper.__del__`
check `self.is_closed`, which reads `self._state`. When a wrapper is
created without `__init__` running to completion — `copy.deepcopy` via
`__new__` + `__setstate__`, or a constructor that raised partway through
— `_state` is missing and the finalizer prints

```
Exception ignored in: <function _SyncHttpxClientWrapper.__del__ at 0x...>
Traceback (most recent call last):
  File ".../langchain_openai/chat_models/_client_utils.py", line 366, in __del__
    if self.is_closed:
  File ".../httpx/_client.py", line 228, in is_closed
    return self._state == ClientState.CLOSED
AttributeError: '_SyncHttpxClientWrapper' object has no attribute '_state'
```

at GC time. Same noise pattern that #37064 fixed for the anthropic
partner.

Hoist the `is_closed` access inside the existing `try/except` so the
`AttributeError` is swallowed alongside the `close()` / `aclose()`
exceptions that block already handles.

Tests: two new unit tests build the wrappers via `__new__` (no
`__init__` → no `_state`) and call `__del__` directly, mirroring the
tests added in #37064.

Verified:
- `cd libs/partners/openai && make format` -> all checks passed
- `cd libs/partners/openai && make test
TEST_FILE=tests/unit_tests/chat_models/test_client_utils.py` -> 37
passed, 1 skipped (linux-only)
- `cd libs/partners/openai && make lint` -> all checks passed, mypy
clean
2026-05-19 17:04:11 -07:00
dependabot[bot]
8955e5ad1e chore: bump langsmith from 0.8.4 to 0.8.5 in /libs/partners/openai (#37549)
Bumps [langsmith](https://github.com/langchain-ai/langsmith-sdk) from
0.8.4 to 0.8.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/langchain-ai/langsmith-sdk/releases">langsmith's
releases</a>.</em></p>
<blockquote>
<h2>v0.8.5</h2>
<h2>What's Changed</h2>
<ul>
<li>release(js): 0.7.0 by <a
href="https://github.com/ramon-langchain"><code>@​ramon-langchain</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/2890">langchain-ai/langsmith-sdk#2890</a></li>
<li>fix(js): add alias for <code>experimental/sandbox</code> to appease
broad peer dep range within <code>deepagents</code> by <a
href="https://github.com/dqbd"><code>@​dqbd</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/2893">langchain-ai/langsmith-sdk#2893</a></li>
<li>feat(js): allow disabling multipart streaming via env variable by <a
href="https://github.com/dqbd"><code>@​dqbd</code></a> in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/2900">langchain-ai/langsmith-sdk#2900</a></li>
<li>feat(python): add Client.close() to release session [closes
LSDK-183] by <a
href="https://github.com/open-swe"><code>@​open-swe</code></a>[bot] in
<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/2866">langchain-ai/langsmith-sdk#2866</a></li>
<li>feat(sandbox): forward client default headers on exec WebSocket by
<a href="https://github.com/open-swe"><code>@​open-swe</code></a>[bot]
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/2899">langchain-ai/langsmith-sdk#2899</a></li>
<li>release(js): 0.7.1 by <a
href="https://github.com/langchain-infra"><code>@​langchain-infra</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/2902">langchain-ai/langsmith-sdk#2902</a></li>
<li>release(py): 0.8.5 by <a
href="https://github.com/langchain-infra"><code>@​langchain-infra</code></a>
in <a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/pull/2903">langchain-ai/langsmith-sdk#2903</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.4...v0.8.5">https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.4...v0.8.5</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ef9fcd5b47"><code>ef9fcd5</code></a>
release(py): 0.8.5 (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/2903">#2903</a>)</li>
<li><a
href="63b402eb3e"><code>63b402e</code></a>
release(js): 0.7.1 (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/2902">#2902</a>)</li>
<li><a
href="602a27ab11"><code>602a27a</code></a>
feat(sandbox): forward client default headers on exec WebSocket (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/2899">#2899</a>)</li>
<li><a
href="126ef522f5"><code>126ef52</code></a>
feat(python): add Client.close() to release session [closes LSDK-183]
(<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/2866">#2866</a>)</li>
<li><a
href="fddf88dd25"><code>fddf88d</code></a>
feat(js): allow disabling multipart streaming via env variable (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/2900">#2900</a>)</li>
<li><a
href="19bfc57231"><code>19bfc57</code></a>
fix(js): add alias for <code>experimental/sandbox</code> to appease
broad peer dep range...</li>
<li><a
href="6717def07f"><code>6717def</code></a>
release(js): 0.7.0 (<a
href="https://redirect.github.com/langchain-ai/langsmith-sdk/issues/2890">#2890</a>)</li>
<li>See full diff in <a
href="https://github.com/langchain-ai/langsmith-sdk/compare/v0.8.4...v0.8.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=langsmith&package-manager=uv&previous-version=0.8.4&new-version=0.8.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/langchain-ai/langchain/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-19 12:47:54 -05:00
dependabot[bot]
229e4fc400 chore: bump idna from 3.11 to 3.15 in /libs/partners/openai (#37548)
Bumps [idna](https://github.com/kjd/idna) from 3.11 to 3.15.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/kjd/idna/blob/master/HISTORY.md">idna's
changelog</a>.</em></p>
<blockquote>
<h2>3.15 (2026-05-12)</h2>
<ul>
<li>Enforce DNS-length cap on individual labels early in
<code>check_label</code>,
short-circuiting contextual-rule processing for oversized input
while staying compatible with UTS 46 usage.</li>
<li>Tidy core helpers: hoist bidi category sets to module-level
frozensets (avoiding per-codepoint list construction), simplify
length checks, and reuse the shared <code>_unicode_dots_re</code> from
<code>idna.core</code> in the codec module.</li>
<li>Use <code>raise ... from err</code> for proper exception chaining
and
switch internal string formatting to f-strings.</li>
<li>Allow <code>flit_core</code> 4.x in the build backend.</li>
<li>Expand the ruff lint set (flake8-bugbear, flake8-simplify,
pyupgrade, perflint) and apply the surfaced fixes; pin lint CI
to Python 3.14.</li>
<li>Add Dependabot configuration for GitHub Actions.</li>
<li>Convert README and HISTORY from reStructuredText to Markdown.</li>
<li>Reference CVE-2026-45409 for the 3.14 advisory in place of the
initial GHSA identifier.</li>
</ul>
<p>Thanks to Felix Yan, Stan Ulbrych, and metsw24-max for
contributions to this release.</p>
<h2>3.14 (2026-05-10)</h2>
<ul>
<li>Removed opportunity to process long inputs into quadratic
time by rejecting oversize inputs up-front. Closes a bypass
of the CVE-2024-3651 mitigation. [CVE-2026-45409]</li>
</ul>
<p>Thanks to Stan Ulbrych for reporting the issue.</p>
<h2>3.13 (2026-04-22)</h2>
<ul>
<li>Correct classification error for codepoint U+A7F1</li>
</ul>
<h2>3.12 (2026-04-21)</h2>
<ul>
<li>Update to Unicode 17.0.0.</li>
<li>Issue a deprecation warning for the transitional argument.</li>
<li>Added lazy-loading to provide some performance improvements.</li>
<li>Removed vestiges of code related to Python 2 support, including
segmentation of data structures specific to Jython.</li>
</ul>
<p>Thanks to Rodrigo Nogueira for contributions to this release.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="af30a092e1"><code>af30a09</code></a>
Release 3.15</li>
<li><a
href="30314d4628"><code>30314d4</code></a>
Pre-release 3.15rc0</li>
<li><a
href="05d4b219aa"><code>05d4b21</code></a>
Merge pull request <a
href="https://redirect.github.com/kjd/idna/issues/237">#237</a> from
kjd/convert-docs-to-markdown</li>
<li><a
href="2987fdba19"><code>2987fdb</code></a>
Convert README and HISTORY from reStructuredText to Markdown</li>
<li><a
href="59fa8002d5"><code>59fa800</code></a>
Merge pull request <a
href="https://redirect.github.com/kjd/idna/issues/236">#236</a> from
kjd/dependabot/github_actions/actions-f3e34333ea</li>
<li><a
href="def69834ce"><code>def6983</code></a>
Merge branch 'master' into
dependabot/github_actions/actions-f3e34333ea</li>
<li><a
href="bbd8004a79"><code>bbd8004</code></a>
Merge pull request <a
href="https://redirect.github.com/kjd/idna/issues/234">#234</a> from
StanFromIreland/patch-1</li>
<li><a
href="edd07c0502"><code>edd07c0</code></a>
Bump github/codeql-action from 3.35.2 to 4.35.2 in the actions
group</li>
<li><a
href="5557db030c"><code>5557db0</code></a>
Merge branch 'master' into patch-1</li>
<li><a
href="f11746cf49"><code>f11746c</code></a>
Merge pull request <a
href="https://redirect.github.com/kjd/idna/issues/235">#235</a> from
StanFromIreland/patch-2</li>
<li>Additional commits viewable in <a
href="https://github.com/kjd/idna/compare/v3.11...v3.15">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=idna&package-manager=uv&previous-version=3.11&new-version=3.15)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

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 this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/langchain-ai/langchain/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-19 12:47:44 -05:00
Mason Daugherty
abd9d4ce31 ci(infra): harden Dependabot version-bound preservation (#37510)
Dependabot has been stripping upper/lower bounds from internal
`langchain-*` deps in partner `pyproject.toml` files (e.g. #37288
reduced `langchain-core>=1.3.2,<2.0.0` to bare `langchain-core`). Locks
down the config so bumps preserve existing specifiers, and restores the
bounds it already mangled across the monorepo.

## Changes
- Add `versioning-strategy: increase` to every `uv` ecosystem block in
`.github/dependabot.yml` so future bumps move the lower bound in place
instead of rewriting the constraint.
- Ignore workspace-internal packages (`langchain-core`, `langchain`,
`langchain-classic`, `langchain-text-splitters`, `langchain-tests`,
`langchain-model-profiles`) on every `uv` block — these are editable
installs from local paths and their published constraints are
hand-curated for release, not Dependabot's to bump.
- Restore stripped bounds across all `libs/` packages — runtime
`dependencies` and every dep group (`test`, `dev`, `test_integration`,
`typing`, `lint`) — to `>=1.4.0,<2.0.0` for `langchain-core` and
`>=1.0.0,<2.0.0` for the other internal packages.
2026-05-18 17:24:19 -05:00