Bumps the production-dependencies group with 5 updates:
| Package | From | To |
| --- | --- | --- |
| [openai](https://github.com/openai/openai-python) | `2.16.0` |
`2.17.0` |
| [sentry-sdk](https://github.com/getsentry/sentry-python) | `2.51.0` |
`2.52.0` |
| [fastapi](https://github.com/fastapi/fastapi) | `0.128.1` | `0.128.4`
|
| [starlette](https://github.com/Kludex/starlette) | `0.50.0` | `0.52.1`
|
| [gunicorn](https://github.com/benoitc/gunicorn) | `24.1.1` | `25.0.0`
|
Updates `openai` from 2.16.0 to 2.17.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/openai/openai-python/releases">openai's
releases</a>.</em></p>
<blockquote>
<h2>v2.17.0</h2>
<h2>2.17.0 (2026-02-05)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-python/compare/v2.16.0...v2.17.0">v2.16.0...v2.17.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> add shell_call_output status field (<a
href="https://github.com/openai/openai-python/commit/1bbaf8865000b338c24c9fdd5e985183feaca10f">1bbaf88</a>)</li>
<li><strong>api:</strong> image generation actions for responses;
ResponseFunctionCallArgumentsDoneEvent.name (<a
href="https://github.com/openai/openai-python/commit/7d965135f93f41b0c3dbf3dc9f01796bd9645b6c">7d96513</a>)</li>
<li><strong>client:</strong> add custom JSON encoder for extended type
support (<a
href="https://github.com/openai/openai-python/commit/9f43c8b1a1641db2336cc6d0ec0c6dc470a89103">9f43c8b</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> undo change to web search Find action (<a
href="https://github.com/openai/openai-python/commit/8f14eb0a74363fdfc648c5cd5c6d34a85b938d3c">8f14eb0</a>)</li>
<li><strong>client:</strong> update type for <code>find_in_page</code>
action (<a
href="https://github.com/openai/openai-python/commit/ec54ddeb357e49edd81cc3fe53d549c297e59a07">ec54dde</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/openai/openai-python/blob/main/CHANGELOG.md">openai's
changelog</a>.</em></p>
<blockquote>
<h2>2.17.0 (2026-02-05)</h2>
<p>Full Changelog: <a
href="https://github.com/openai/openai-python/compare/v2.16.0...v2.17.0">v2.16.0...v2.17.0</a></p>
<h3>Features</h3>
<ul>
<li><strong>api:</strong> add shell_call_output status field (<a
href="https://github.com/openai/openai-python/commit/1bbaf8865000b338c24c9fdd5e985183feaca10f">1bbaf88</a>)</li>
<li><strong>api:</strong> image generation actions for responses;
ResponseFunctionCallArgumentsDoneEvent.name (<a
href="https://github.com/openai/openai-python/commit/7d965135f93f41b0c3dbf3dc9f01796bd9645b6c">7d96513</a>)</li>
<li><strong>client:</strong> add custom JSON encoder for extended type
support (<a
href="https://github.com/openai/openai-python/commit/9f43c8b1a1641db2336cc6d0ec0c6dc470a89103">9f43c8b</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> undo change to web search Find action (<a
href="https://github.com/openai/openai-python/commit/8f14eb0a74363fdfc648c5cd5c6d34a85b938d3c">8f14eb0</a>)</li>
<li><strong>client:</strong> update type for <code>find_in_page</code>
action (<a
href="https://github.com/openai/openai-python/commit/ec54ddeb357e49edd81cc3fe53d549c297e59a07">ec54dde</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/openai/openai-python/commit/e8888736c86bb1d5a27100867da22b11ab5bb1b7"><code>e888873</code></a>
release: 2.17.0</li>
<li><a
href="https://github.com/openai/openai-python/commit/b982088450a89409ae0eedc1f27f84f383b447af"><code>b982088</code></a>
fix(client): undo change to web search Find action</li>
<li><a
href="https://github.com/openai/openai-python/commit/b95c09d3f1b760378ee4137b83a8e9b87156bedd"><code>b95c09d</code></a>
codegen metadata</li>
<li><a
href="https://github.com/openai/openai-python/commit/31b4218b71025c9183eb8320629af5de74682adc"><code>31b4218</code></a>
codegen metadata</li>
<li><a
href="https://github.com/openai/openai-python/commit/a1fb97bb3580d58a4534a3b4278b5cd4a43ddbc6"><code>a1fb97b</code></a>
fix(client): update type for <code>find_in_page</code> action</li>
<li><a
href="https://github.com/openai/openai-python/commit/42cb178759bd2bac2274f4c7afd3c550e6cf9aa2"><code>42cb178</code></a>
feat(api): image generation actions for responses;
ResponseFunctionCallArgume...</li>
<li><a
href="https://github.com/openai/openai-python/commit/db4d87193089f60d8a2c2841ded3c7fdcd54a5bb"><code>db4d871</code></a>
feat(client): add custom JSON encoder for extended type support</li>
<li><a
href="https://github.com/openai/openai-python/commit/2360dfa7fd26a8f92211702c04752a10fe5fff27"><code>2360dfa</code></a>
codegen metadata</li>
<li><a
href="https://github.com/openai/openai-python/commit/7da396e2601ea1587c8798a9c60d9d3497146380"><code>7da396e</code></a>
codegen metadata</li>
<li><a
href="https://github.com/openai/openai-python/commit/27feb0a1b4fc821a47dd6898c5ab8cd2ac3238f4"><code>27feb0a</code></a>
feat(api): add shell_call_output status field</li>
<li>See full diff in <a
href="https://github.com/openai/openai-python/compare/v2.16.0...v2.17.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `sentry-sdk` from 2.51.0 to 2.52.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-python/releases">sentry-sdk's
releases</a>.</em></p>
<blockquote>
<h2>2.52.0</h2>
<h3>New Features ✨</h3>
<h4>Other</h4>
<ul>
<li>feat(integration): add <code>gen_ai.conversation.id</code> if
available by <a
href="https://github.com/constantinius"><code>@constantinius</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5307">#5307</a></li>
</ul>
<h3>Bug Fixes 🐛</h3>
<h4>Google Genai</h4>
<ul>
<li>fix(google-genai): Token reporting by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5404">#5404</a></li>
<li>fix(google-genai): deactivate google genai when langchain is used by
<a href="https://github.com/shellmayr"><code>@shellmayr</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/5389">#5389</a></li>
</ul>
<h4>Mcp</h4>
<ul>
<li>fix(mcp): Nest MCP spans under HTTP transactions by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5292">#5292</a></li>
<li>fix(mcp): Handle all awaitable return types by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5415">#5415</a></li>
</ul>
<h4>Other</h4>
<ul>
<li>fix(anthropic): Token reporting by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5403">#5403</a></li>
<li>fix(arq): handle settings_cls passed as keyword argument by <a
href="https://github.com/nc9"><code>@nc9</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5393">#5393</a></li>
<li>fix(dramatiq): cleanup isolated scope and transaction when message
is skipped by <a
href="https://github.com/frankie567"><code>@frankie567</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5346">#5346</a></li>
<li>fix(openai): Token reporting by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5406">#5406</a></li>
<li>fix(openai-agents): Inject propagation headers for
<code>HostedMCPTool</code> when streaming by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5405">#5405</a></li>
<li>fix: Fix list attribute type by <a
href="https://github.com/sentrivana"><code>@sentrivana</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5417">#5417</a></li>
<li>fix: Adapt to new packaging in toxgen by <a
href="https://github.com/sentrivana"><code>@sentrivana</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5382">#5382</a></li>
</ul>
<h3>Internal Changes 🔧</h3>
<h4>Fastmcp</h4>
<ul>
<li>test(fastmcp): Wrap prompt in <code>Message</code> by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5411">#5411</a></li>
<li>test(fastmcp): Remove
<code>test_fastmcp_without_request_context()</code> by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5412">#5412</a></li>
<li>test(fastmcp): Use <code>AsyncClient</code> for SSE by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5400">#5400</a></li>
<li>test(fastmcp): Use <code>TestClient</code> for Streamable HTTP by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5384">#5384</a></li>
<li>test(fastmcp): Simulate stdio transport with memory streams by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5333">#5333</a></li>
</ul>
<h4>Mcp</h4>
<ul>
<li>test(mcp): Use <code>AsyncClient</code> for SSE by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5396">#5396</a></li>
<li>test(mcp): Use <code>TestClient</code> for Streamable HTTP by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5383">#5383</a></li>
<li>test(mcp): Remove unused stdio helpers by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5409">#5409</a></li>
<li>test(mcp): Simulate stdio transport with memory streams by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5329">#5329</a></li>
</ul>
<h4>Other</h4>
<ul>
<li>ci: Fix lint step by <a
href="https://github.com/sentrivana"><code>@sentrivana</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5418">#5418</a></li>
<li>ci: 🤖 Update test matrix with new releases (02/02) by <a
href="https://github.com/github-actions"><code>@github-actions</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5413">#5413</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md">sentry-sdk's
changelog</a>.</em></p>
<blockquote>
<h2>2.52.0</h2>
<h3>New Features ✨</h3>
<h4>Other</h4>
<ul>
<li>feat(integration): add <code>gen_ai.conversation.id</code> if
available by <a
href="https://github.com/constantinius"><code>@constantinius</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5307">#5307</a></li>
</ul>
<h3>Bug Fixes 🐛</h3>
<h4>Google Genai</h4>
<ul>
<li>fix(google-genai): Token reporting by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5404">#5404</a></li>
<li>fix(google-genai): deactivate google genai when langchain is used by
<a href="https://github.com/shellmayr"><code>@shellmayr</code></a> in
<a
href="https://redirect.github.com/getsentry/sentry-python/pull/5389">#5389</a></li>
</ul>
<h4>Mcp</h4>
<ul>
<li>fix(mcp): Nest MCP spans under HTTP transactions by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5292">#5292</a></li>
<li>fix(mcp): Handle all awaitable return types by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5415">#5415</a></li>
</ul>
<h4>Other</h4>
<ul>
<li>fix(anthropic): Token reporting by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5403">#5403</a></li>
<li>fix(arq): handle settings_cls passed as keyword argument by <a
href="https://github.com/nc9"><code>@nc9</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5393">#5393</a></li>
<li>fix(dramatiq): cleanup isolated scope and transaction when message
is skipped by <a
href="https://github.com/frankie567"><code>@frankie567</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5346">#5346</a></li>
<li>fix(openai): Token reporting by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5406">#5406</a></li>
<li>fix(openai-agents): Inject propagation headers for
<code>HostedMCPTool</code> when streaming by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5405">#5405</a></li>
<li>fix: Fix list attribute type by <a
href="https://github.com/sentrivana"><code>@sentrivana</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5417">#5417</a></li>
<li>fix: Adapt to new packaging in toxgen by <a
href="https://github.com/sentrivana"><code>@sentrivana</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5382">#5382</a></li>
</ul>
<h3>Internal Changes 🔧</h3>
<h4>Fastmcp</h4>
<ul>
<li>test(fastmcp): Wrap prompt in <code>Message</code> by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5411">#5411</a></li>
<li>test(fastmcp): Remove
<code>test_fastmcp_without_request_context()</code> by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5412">#5412</a></li>
<li>test(fastmcp): Use <code>AsyncClient</code> for SSE by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5400">#5400</a></li>
<li>test(fastmcp): Use <code>TestClient</code> for Streamable HTTP by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5384">#5384</a></li>
<li>test(fastmcp): Simulate stdio transport with memory streams by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5333">#5333</a></li>
</ul>
<h4>Mcp</h4>
<ul>
<li>test(mcp): Use <code>AsyncClient</code> for SSE by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5396">#5396</a></li>
<li>test(mcp): Use <code>TestClient</code> for Streamable HTTP by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5383">#5383</a></li>
<li>test(mcp): Remove unused stdio helpers by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5409">#5409</a></li>
<li>test(mcp): Simulate stdio transport with memory streams by <a
href="https://github.com/alexander-alderman-webb"><code>@alexander-alderman-webb</code></a>
in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5329">#5329</a></li>
</ul>
<h4>Other</h4>
<ul>
<li>ci: Fix lint step by <a
href="https://github.com/sentrivana"><code>@sentrivana</code></a> in <a
href="https://redirect.github.com/getsentry/sentry-python/pull/5418">#5418</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/getsentry/sentry-python/commit/bcec57806fcb8ef0aa228052aeddf10272df43ba"><code>bcec578</code></a>
Update CHANGELOG.md</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/3d2154ce57447e6717f7e38b2ea0d1d27b4ff940"><code>3d2154c</code></a>
release: 2.52.0</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/3bb163a77ab3edfa4babca54af9acd8e9a1b960e"><code>3bb163a</code></a>
fix(mcp): Nest MCP spans under HTTP transactions (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5292">#5292</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/bf0a683137015c9e866782fd87a785addf1f1da8"><code>bf0a683</code></a>
fix(mcp): Handle all awaitable return types (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5415">#5415</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/656a5c26b83083df833528a56aa591d8480bc096"><code>656a5c2</code></a>
Revert "feat(ai): Add original input length meta attribute (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5375">#5375</a>)"
(<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5419">#5419</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/78eca96e1d3c2b5fb4b89261048ca52f1d680e57"><code>78eca96</code></a>
fix: Fix list attribute type (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5417">#5417</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/2ffa86567284edb98dc1f2fa2cf71bd1c9966589"><code>2ffa865</code></a>
ci: Fix lint step (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5418">#5418</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/d2b7d5eadfd9265d746b77d5bf082440c53782a5"><code>d2b7d5e</code></a>
feat(integration): add <code>gen_ai.conversation.id</code> if available
(<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5307">#5307</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/11d68ee48cb1f3b13cfba5f87a8e7f41c3064885"><code>11d68ee</code></a>
fix(google-genai): Token reporting (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5404">#5404</a>)</li>
<li><a
href="https://github.com/getsentry/sentry-python/commit/78c6011c7637e511f03ebfe4f7fd79755c4910f0"><code>78c6011</code></a>
fix(anthropic): Token reporting (<a
href="https://redirect.github.com/getsentry/sentry-python/issues/5403">#5403</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/getsentry/sentry-python/compare/2.51.0...2.52.0">compare
view</a></li>
</ul>
</details>
<br />
Updates `fastapi` from 0.128.1 to 0.128.4
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/fastapi/fastapi/releases">fastapi's
releases</a>.</em></p>
<blockquote>
<h2>0.128.4</h2>
<h3>Refactors</h3>
<ul>
<li>♻️ Refactor internals, simplify Pydantic v2/v1 utils,
<code>create_model_field</code>, better types for
<code>lenient_issubclass</code>. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14860">#14860</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
<li>♻️ Simplify internals, remove Pydantic v1 only logic, no longer
needed. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14857">#14857</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
<li>♻️ Refactor internals, cleanup unneeded Pydantic v1 specific logic.
PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14856">#14856</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
</ul>
<h3>Translations</h3>
<ul>
<li>🌐 Update translations for fr (outdated pages). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14839">#14839</a>
by <a
href="https://github.com/YuriiMotov"><code>@YuriiMotov</code></a>.</li>
<li>🌐 Update translations for tr (outdated and missing). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14838">#14838</a>
by <a
href="https://github.com/YuriiMotov"><code>@YuriiMotov</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>⬆️ Upgrade development dependencies. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14854">#14854</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
</ul>
<h2>0.128.3</h2>
<h3>Refactors</h3>
<ul>
<li>♻️ Re-implement <code>on_event</code> in FastAPI for compatibility
with the next Starlette, while keeping backwards compatibility. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14851">#14851</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
</ul>
<h3>Upgrades</h3>
<ul>
<li>⬆️ Upgrade Starlette supported version range to
<code>starlette>=0.40.0,<1.0.0</code>. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14853">#14853</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
</ul>
<h3>Translations</h3>
<ul>
<li>🌐 Update translations for ru (update-outdated). PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14834">#14834</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
</ul>
<h3>Internal</h3>
<ul>
<li>👷 Run tests with Starlette from git. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14849">#14849</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
<li>👷 Run tests with lower bound uv sync, upgrade
<code>fastapi[all]</code> minimum dependencies: <code>ujson
>=5.8.0</code>, <code>orjson >=3.9.3</code>. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14846">#14846</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
</ul>
<h2>0.128.2</h2>
<h3>Features</h3>
<ul>
<li>✨ Add support for PEP695 <code>TypeAliasType</code>. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/13920">#13920</a>
by <a href="https://github.com/cstruct"><code>@cstruct</code></a>.</li>
<li>✨ Allow <code>Response</code> type hint as dependency annotation. PR
<a
href="https://redirect.github.com/fastapi/fastapi/pull/14794">#14794</a>
by <a
href="https://github.com/jonathan-fulton"><code>@jonathan-fulton</code></a>.</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>🐛 Fix using <code>Json[list[str]]</code> type (issue <a
href="https://redirect.github.com/fastapi/fastapi/issues/10997">#10997</a>).
PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14616">#14616</a>
by <a
href="https://github.com/mkanetsuna"><code>@mkanetsuna</code></a>.</li>
</ul>
<h3>Docs</h3>
<ul>
<li>📝 Update docs for translations. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14830">#14830</a>
by <a
href="https://github.com/tiangolo"><code>@tiangolo</code></a>.</li>
<li>📝 Fix duplicate word in <code>advanced-dependencies.md</code>. PR <a
href="https://redirect.github.com/fastapi/fastapi/pull/14815">#14815</a>
by <a
href="https://github.com/Rayyan-Oumlil"><code>@Rayyan-Oumlil</code></a>.</li>
</ul>
<h3>Translations</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/fastapi/fastapi/commit/8eac94bd91c212a2aab676acd7f8e94cd3097dd0"><code>8eac94b</code></a>
🔖 Release version 0.128.4</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/58cdfc7f4b1ad22a4e6450319affb42d185775d9"><code>58cdfc7</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/d59fbc3494940c9afe675cc89271bd0fa744574f"><code>d59fbc3</code></a>
♻️ Refactor internals, simplify Pydantic v2/v1 utils,
<code>create_model_field</code>, b...</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/cc6ced6345f6be18038437b73866294697294f3e"><code>cc6ced6</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/cf55bade7ea6e4bf85a167e8aed1c6167e7a4196"><code>cf55bad</code></a>
♻️ Simplify internals, remove Pydantic v1 only logic, no longer needed
(<a
href="https://redirect.github.com/fastapi/fastapi/issues/14857">#14857</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/ac8362c447b94247e9f7268c3d1e2807818647ae"><code>ac8362c</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/3c49346238643287780d9f0d673f88b0d02df109"><code>3c49346</code></a>
♻️ Refactor internals, cleanup unneeded Pydantic v1 specific logic (<a
href="https://redirect.github.com/fastapi/fastapi/issues/14856">#14856</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/512c3ad88c8f03a03154df317c65aa0ca4f1f78d"><code>512c3ad</code></a>
📝 Update release notes</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/cba537ab717ff205857a0eb877c69e79cfd06a51"><code>cba537a</code></a>
🌐 Update translations for fr (outdated pages) (<a
href="https://redirect.github.com/fastapi/fastapi/issues/14839">#14839</a>)</li>
<li><a
href="https://github.com/fastapi/fastapi/commit/2eb454ab04e81325ed430a036103e4aede299d61"><code>2eb454a</code></a>
📝 Update release notes</li>
<li>Additional commits viewable in <a
href="https://github.com/fastapi/fastapi/compare/0.128.1...0.128.4">compare
view</a></li>
</ul>
</details>
<br />
Updates `starlette` from 0.50.0 to 0.52.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/starlette/releases">starlette's
releases</a>.</em></p>
<blockquote>
<h2>Version 0.52.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Only use <code>typing_extensions</code> in older Python versions by
<a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a
href="https://redirect.github.com/Kludex/starlette/pull/3109">Kludex/starlette#3109</a></li>
</ul>
<hr />
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/starlette/compare/0.52.0...0.52.1">https://github.com/Kludex/starlette/compare/0.52.0...0.52.1</a></p>
<h2>Version 0.52.0</h2>
<p>In this release, <code>State</code> can be accessed using
dictionary-style syntax for improved type safety (<a
href="https://redirect.github.com/Kludex/starlette/pull/3036">#3036</a>).</p>
<pre lang="python"><code>from collections.abc import AsyncIterator
from contextlib import asynccontextmanager
from typing import TypedDict
<p>import httpx</p>
<p>from starlette.applications import Starlette
from starlette.requests import Request</p>
<p>class State(TypedDict):
http_client: httpx.AsyncClient</p>
<p><a
href="https://github.com/asynccontextmanager"><code>@asynccontextmanager</code></a>
async def lifespan(app: Starlette) -> AsyncIterator[State]:
async with httpx.AsyncClient() as client:
yield {"http_client": client}</p>
<p>async def homepage(request: Request[State]):
client = request.state["http_client"]
# If you run the below line with mypy or pyright, it will reveal the
correct type.
reveal_type(client) # Revealed type is 'httpx.AsyncClient'
</code></pre></p>
<p>See <a
href="https://github.com/Kludex/starlette/blob/HEAD/lifespan.md#accessing-state">Accessing
State</a> for more details.</p>
<hr />
<p><strong>Full Changelog</strong>: <a
href="https://github.com/Kludex/starlette/compare/0.51.0...0.52.0">https://github.com/Kludex/starlette/compare/0.51.0...0.52.0</a></p>
<h2>Version 0.51.0</h2>
<h2>Added</h2>
<ul>
<li>Add <code>allow_private_network</code> in
<code>CORSMiddleware</code> <a
href="https://redirect.github.com/Kludex/starlette/pull/3065">#3065</a>.</li>
</ul>
<h2>Changed</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/Kludex/starlette/blob/main/docs/release-notes.md">starlette's
changelog</a>.</em></p>
<blockquote>
<h2>0.52.1 (January 18, 2026)</h2>
<h4>Fixed</h4>
<ul>
<li>Only use <code>typing_extensions</code> in older Python versions <a
href="https://redirect.github.com/Kludex/starlette/pull/3109">#3109</a>.</li>
</ul>
<h2>0.52.0 (January 18, 2026)</h2>
<p>In this release, <code>State</code> can be accessed using
dictionary-style syntax for improved type
safety (<a
href="https://redirect.github.com/Kludex/starlette/pull/3036">#3036</a>).</p>
<pre lang="python"><code>from collections.abc import AsyncIterator
from contextlib import asynccontextmanager
from typing import TypedDict
<p>import httpx</p>
<p>from starlette.applications import Starlette
from starlette.requests import Request</p>
<p>class State(TypedDict):
http_client: httpx.AsyncClient</p>
<p><a
href="https://github.com/asynccontextmanager"><code>@asynccontextmanager</code></a>
async def lifespan(app: Starlette) -> AsyncIterator[State]:
async with httpx.AsyncClient() as client:
yield {"http_client": client}</p>
<p>async def homepage(request: Request[State]):
client = request.state["http_client"]
# If you run the below line with mypy or pyright, it will reveal the
correct type.
reveal_type(client) # Revealed type is 'httpx.AsyncClient'
</code></pre></p>
<p>See <a
href="https://github.com/Kludex/starlette/blob/main/docs/lifespan.md#accessing-state">Accessing
State</a> for more details.</p>
<h2>0.51.0 (January 10, 2026)</h2>
<h4>Added</h4>
<ul>
<li>Add <code>allow_private_network</code> in
<code>CORSMiddleware</code> <a
href="https://redirect.github.com/Kludex/starlette/pull/3065">#3065</a>.</li>
</ul>
<h4>Changed</h4>
<ul>
<li>Increase warning stacklevel on <code>DeprecationWarning</code> for
wsgi module <a
href="https://redirect.github.com/Kludex/starlette/pull/3082">#3082</a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/Kludex/starlette/commit/e5b8a5d200504a2608bed11fe6f66b1d20b9ae2c"><code>e5b8a5d</code></a>
Version 0.52.1 (<a
href="https://redirect.github.com/Kludex/starlette/issues/3110">#3110</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/d02eadecb5409e9553922081ac123757849335e7"><code>d02eade</code></a>
Only use <code>typing_extensions</code> in older Python versions (<a
href="https://redirect.github.com/Kludex/starlette/issues/3109">#3109</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/f490b42f5fa0808ead53115a45d907c6d8e16a47"><code>f490b42</code></a>
Version 0.52.0 (<a
href="https://redirect.github.com/Kludex/starlette/issues/3107">#3107</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/d8c7cf9aca95b31c7a70473d03c26bc8ce33cd74"><code>d8c7cf9</code></a>
Turn <code>State</code> into a <code>Mapping</code> (<a
href="https://redirect.github.com/Kludex/starlette/issues/3036">#3036</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/cfce146611f7cc2b14c524b26d7e1d6cf0ddcd9f"><code>cfce146</code></a>
chore: bump coverage (<a
href="https://redirect.github.com/Kludex/starlette/issues/3103">#3103</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/9138e5597285c6120821a6ad862880d479f329f3"><code>9138e55</code></a>
fix: setup github pages for deployment (<a
href="https://redirect.github.com/Kludex/starlette/issues/3102">#3102</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/aff6df756b231c42ca088788db4bf4b193f7cc5b"><code>aff6df7</code></a>
docs: add environment for github docs (<a
href="https://redirect.github.com/Kludex/starlette/issues/3101">#3101</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/434bab94749b8522b08bbef3eff5fb742629d4fd"><code>434bab9</code></a>
docS: fix gh pages deploy (<a
href="https://redirect.github.com/Kludex/starlette/issues/3100">#3100</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/03426be1d41fc3963cd2dab5f10992e137eaf5f4"><code>03426be</code></a>
docs: replace mkdocs by zensical (<a
href="https://redirect.github.com/Kludex/starlette/issues/3098">#3098</a>)</li>
<li><a
href="https://github.com/Kludex/starlette/commit/df2ee22bc072dc19962120a7559f8fc0de7a094e"><code>df2ee22</code></a>
Version 0.51.0 (<a
href="https://redirect.github.com/Kludex/starlette/issues/3097">#3097</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/Kludex/starlette/compare/0.50.0...0.52.1">compare
view</a></li>
</ul>
</details>
<br />
Updates `gunicorn` from 24.1.1 to 25.0.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/benoitc/gunicorn/releases">gunicorn's
releases</a>.</em></p>
<blockquote>
<h2>Gunicorn 25.0.0</h2>
<h2>New Features</h2>
<ul>
<li>
<p><strong>Dirty Arbiters</strong>: Separate process pool for executing
long-running, blocking
operations (AI model loading, heavy computation) without blocking HTTP
workers
([PR <a
href="https://redirect.github.com/benoitc/gunicorn/issues/3460">#3460</a>](<a
href="https://redirect.github.com/benoitc/gunicorn/pull/3460">benoitc/gunicorn#3460</a>))</p>
<ul>
<li>Inspired by Erlang's dirty schedulers</li>
<li>Asyncio-based with Unix socket IPC</li>
<li>Stateful workers that persist loaded resources</li>
<li>New settings: <code>--dirty-app</code>,
<code>--dirty-workers</code>, <code>--dirty-timeout</code>,
<code>--dirty-threads</code>, <code>--dirty-graceful-timeout</code></li>
<li>Lifecycle hooks: <code>on_dirty_starting</code>,
<code>dirty_post_fork</code>,
<code>dirty_worker_init</code>, <code>dirty_worker_exit</code></li>
</ul>
</li>
<li>
<p><strong>Per-App Worker Allocation for Dirty Arbiters</strong>:
Control how many dirty workers
load each app for memory optimization with heavy models
([PR <a
href="https://redirect.github.com/benoitc/gunicorn/issues/3473">#3473</a>](<a
href="https://redirect.github.com/benoitc/gunicorn/pull/3473">benoitc/gunicorn#3473</a>))</p>
<ul>
<li>Set <code>workers</code> class attribute on DirtyApp (e.g.,
<code>workers = 2</code>)</li>
<li>Or use config format <code>module:class:N</code> (e.g.,
<code>myapp:HeavyModel:2</code>)</li>
<li>Requests automatically routed to workers with the target app</li>
<li>New exception <code>DirtyNoWorkersAvailableError</code> for graceful
error handling</li>
<li>Example: 8 workers × 10GB model = 80GB → with
<code>workers=2</code>: 20GB (75% savings)</li>
</ul>
</li>
<li>
<p><strong>HTTP/2 Support (Beta)</strong>: Native HTTP/2 (RFC 7540)
support for improved performance
with modern clients ([PR <a
href="https://redirect.github.com/benoitc/gunicorn/issues/3468">#3468</a>](<a
href="https://redirect.github.com/benoitc/gunicorn/pull/3468">benoitc/gunicorn#3468</a>))</p>
<ul>
<li>Multiplexed streams over a single connection</li>
<li>Header compression (HPACK)</li>
<li>Flow control and stream prioritization</li>
<li>Works with gthread, gevent, and ASGI workers</li>
<li>New settings: <code>--http-protocols</code>,
<code>--http2-max-concurrent-streams</code>,
<code>--http2-initial-window-size</code>,
<code>--http2-max-frame-size</code>,
<code>--http2-max-header-list-size</code></li>
<li>Requires SSL/TLS and h2 library: <code>pip install
gunicorn[http2]</code></li>
<li>New example: <code>examples/http2_gevent/</code> with Docker and
tests</li>
</ul>
</li>
<li>
<p><strong>HTTP 103 Early Hints</strong>: Support for RFC 8297 Early
Hints to enable browsers to
preload resources before the final response
([PR <a
href="https://redirect.github.com/benoitc/gunicorn/issues/3468">#3468</a>](<a
href="https://redirect.github.com/benoitc/gunicorn/pull/3468">benoitc/gunicorn#3468</a>))</p>
<ul>
<li>WSGI:
<code>environ['wsgi.early_hints'](https://github.com/benoitc/gunicorn/blob/HEAD/headers)</code>
callback</li>
<li>ASGI: <code>http.response.informational</code> message type</li>
<li>Works with both HTTP/1.1 and HTTP/2</li>
</ul>
</li>
<li>
<p><strong>uWSGI Protocol for ASGI Worker</strong>: The ASGI worker now
supports receiving requests
via the uWSGI binary protocol from nginx
([PR <a
href="https://redirect.github.com/benoitc/gunicorn/issues/3467">#3467</a>](<a
href="https://redirect.github.com/benoitc/gunicorn/pull/3467">benoitc/gunicorn#3467</a>))</p>
</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Fix HTTP/2 ALPN negotiation for gevent and eventlet workers when
<code>do_handshake_on_connect</code> is False (the default). The TLS
handshake is now
explicitly performed before checking
<code>selected_alpn_protocol()</code>.</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/benoitc/gunicorn/commit/617a85ea91a439735b47d991dfbbe706dc2beb0b"><code>617a85e</code></a>
docs: update 25.0.0 release date to 2026-02-01</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/ee933f2e3092557dfe36074aa98f84bd6081622e"><code>ee933f2</code></a>
fix(asgi): quick shutdown on SIGINT/SIGQUIT, graceful on SIGTERM</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/98ef198baa98a359131aa301a44519754c161575"><code>98ef198</code></a>
docs: update security policy for maintained versions 24.1.1 and
25.0.0</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/911e333b4e18ce0cf4c9a4739f96f056153202c6"><code>911e333</code></a>
chore: replace RST with markdown, remove docs-lint and readthedocs
config</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/7ff671bca3b1995b00e0f9703444abf57fb45842"><code>7ff671b</code></a>
chore: replace README.rst with README.md, remove
modernization-plan.md</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/d5ab5dc6c1c117b71a21c354f18e760c320157c1"><code>d5ab5dc</code></a>
Merge pull request <a
href="https://redirect.github.com/benoitc/gunicorn/issues/3473">#3473</a>
from benoitc/feature/per-app-worker-allocation</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/d563a7e436267396b063a04ad76f4a326e6bba4e"><code>d563a7e</code></a>
chore: bump version to 25.0.0</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/86264ef90001f7d92a4dae1b19c832ab87156230"><code>86264ef</code></a>
docs: add per-app worker allocation to 25.0.0 changelog</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/c4fe116d71f55b35bf0865fd9cd806e2f235c746"><code>c4fe116</code></a>
docs: add per-app worker allocation documentation</li>
<li><a
href="https://github.com/benoitc/gunicorn/commit/1af599769f398dbeadbd5f83dabeab79a5d2a37d"><code>1af5997</code></a>
docs: regenerate settings.md</li>
<li>Additional commits viewable in <a
href="https://github.com/benoitc/gunicorn/compare/24.1.1...25.0.0">compare
view</a></li>
</ul>
</details>
<br />
Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
<details>
<summary>Dependabot commands and options</summary>
<br />
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
</details>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>