Bumps the minor-and-patch group with 17 updates in the / directory: | Package | From | To | | --- | --- | --- | | [uvicorn](https://github.com/Kludex/uvicorn) | `0.40.0` | `0.46.0` | | [pydantic](https://github.com/pydantic/pydantic) | `2.12.5` | `2.13.3` | | [python-dotenv](https://github.com/theskumar/python-dotenv) | `1.2.1` | `1.2.2` | | [python-telegram-bot](https://github.com/python-telegram-bot/python-telegram-bot) | `22.6` | `22.7` | | [discord-py](https://github.com/Rapptz/discord.py) | `2.6.4` | `2.7.1` | | [pydantic-settings](https://github.com/pydantic/pydantic-settings) | `2.12.0` | `2.14.0` | | [openai](https://github.com/openai/openai-python) | `2.21.0` | `2.32.0` | | [grpcio](https://github.com/grpc/grpc) | `1.78.0` | `1.80.0` | | [grpcio-tools](https://github.com/grpc/grpc) | `1.78.0` | `1.80.0` | | [nvidia-riva-client](https://github.com/nvidia-riva/python-clients) | `2.16.0` | `2.25.1` | | [torch](https://github.com/pytorch/pytorch) | `2.10.0+cu130` | `2.11.0` | | [transformers](https://github.com/huggingface/transformers) | `5.2.0` | `5.6.2` | | [accelerate](https://github.com/huggingface/accelerate) | `1.12.0` | `1.13.0` | | [pytest](https://github.com/pytest-dev/pytest) | `9.0.2` | `9.0.3` | | [pytest-cov](https://github.com/pytest-dev/pytest-cov) | `7.0.0` | `7.1.0` | | [ty](https://github.com/astral-sh/ty) | `0.0.17` | `0.0.32` | | [ruff](https://github.com/astral-sh/ruff) | `0.15.1` | `0.15.12` | Updates `uvicorn` from 0.40.0 to 0.46.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/Kludex/uvicorn/releases">uvicorn's releases</a>.</em></p> <blockquote> <h2>Version 0.46.0</h2> <h2>What's Changed</h2> <ul> <li>Support <code>ws_max_size</code> in <code>wsproto</code> implementation by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2915">Kludex/uvicorn#2915</a></li> <li>Support <code>ws_ping_interval</code> and <code>ws_ping_timeout</code> in <code>wsproto</code> implementation by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2916">Kludex/uvicorn#2916</a></li> <li>Use <code>bytearray</code> for incoming WebSocket message buffer in websockets-sansio by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2917">Kludex/uvicorn#2917</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0">https://github.com/Kludex/uvicorn/compare/0.45.0...0.46.0</a></p> <h2>Version 0.45.0</h2> <h2>What's Changed</h2> <ul> <li>Preserve forwarded client ports in proxy headers middleware by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2903">Kludex/uvicorn#2903</a></li> <li>Accept <code>os.PathLike</code> for <code>log_config</code> by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2905">Kludex/uvicorn#2905</a></li> <li>Accept <code>log_level</code> strings case-insensitively by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2907">Kludex/uvicorn#2907</a></li> <li>Raise helpful <code>ImportError</code> when PyYAML is missing for YAML log config by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2906">Kludex/uvicorn#2906</a></li> <li>Revert empty context for ASGI runs by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2911">Kludex/uvicorn#2911</a></li> <li>Add <code>--reset-contextvars</code> flag to isolate ASGI request context by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2912">Kludex/uvicorn#2912</a></li> <li>Revert "Emit <code>http.disconnect</code> on server shutdown for streaming responses" (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2829">#2829</a>) by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2913">Kludex/uvicorn#2913</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/Krishnachaitanyakc"><code>@Krishnachaitanyakc</code></a> made their first contribution in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2870">Kludex/uvicorn#2870</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0">https://github.com/Kludex/uvicorn/compare/0.44.0...0.45.0</a></p> <h2>Version 0.44.0</h2> <h2>What's Changed</h2> <ul> <li>Implement websocket keepalive pings for websockets-sansio by <a href="https://github.com/Kludex"><code>@Kludex</code></a> in <a href="https://redirect.github.com/Kludex/uvicorn/pull/2888">Kludex/uvicorn#2888</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0">https://github.com/Kludex/uvicorn/compare/0.43.0...0.44.0</a></p> <h2>Version 0.43.0</h2> <h2>Changed</h2> <ul> <li>Emit <code>http.disconnect</code> ASGI <code>receive()</code> event on server shutting down for streaming responses (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2829">#2829</a>)</li> <li>Use native <code>context</code> parameter for <code>create_task</code> on Python 3.11+ (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2859">#2859</a>)</li> <li>Drop cast in ASGI types (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2875">#2875</a>)</li> </ul> <hr /> <p><strong>Full Changelog</strong>: <a href="https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0">https://github.com/Kludex/uvicorn/compare/0.42.0...0.43.0</a></p> <h2>Version 0.42.0</h2> <h2>Changed</h2> <ul> <li>Use <code>bytearray</code> for request body accumulation to avoid O(n^2) allocation on fragmented bodies (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2845">#2845</a>)</li> </ul> <h2>Fixed</h2> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/Kludex/uvicorn/blob/main/docs/release-notes.md">uvicorn's changelog</a>.</em></p> <blockquote> <h2>0.46.0 (April 23, 2026)</h2> <h3>Added</h3> <ul> <li>Support <code>ws_max_size</code> in <code>wsproto</code> implementation (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2915">#2915</a>)</li> <li>Support <code>ws_ping_interval</code> and <code>ws_ping_timeout</code> in <code>wsproto</code> implementation (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2916">#2916</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Use <code>bytearray</code> for incoming WebSocket message buffer in <code>websockets-sansio</code> (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2917">#2917</a>)</li> </ul> <h2>0.45.0 (April 21, 2026)</h2> <h3>Added</h3> <ul> <li>Add <code>--reset-contextvars</code> flag to isolate ASGI request context (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2912">#2912</a>)</li> <li>Accept <code>os.PathLike</code> for <code>log_config</code> (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2905">#2905</a>)</li> <li>Accept <code>log_level</code> strings case-insensitively (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2907">#2907</a>)</li> </ul> <h3>Changed</h3> <ul> <li>Revert "Emit <code>http.disconnect</code> on server shutdown for streaming responses" (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2913">#2913</a>)</li> <li>Revert "Explicitly start ASGI run with empty context" (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2911">#2911</a>)</li> </ul> <h3>Fixed</h3> <ul> <li>Preserve forwarded client ports in proxy headers middleware (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2903">#2903</a>)</li> <li>Raise helpful <code>ImportError</code> when PyYAML is missing for YAML log config (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2906">#2906</a>)</li> </ul> <h2>0.44.0 (April 6, 2026)</h2> <h3>Added</h3> <ul> <li>Implement websocket keepalive pings for websockets-sansio (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2888">#2888</a>)</li> </ul> <h2>0.43.0 (April 3, 2026)</h2> <p>You can quit Uvicorn now. We heard you, <a href="https://github.com/pamelafox"><code>@pamelafox</code></a> - all 47 of your Ctrl+C's (thanks for flagging it, and thanks to <a href="https://github.com/tiangolo"><code>@tiangolo</code></a> for the fix 🙏). <a href="https://x.com/pamelafox/status/2039097686155227623">See the tweet</a>.</p> <h3>Changed</h3> <ul> <li>Emit <code>http.disconnect</code> ASGI <code>receive()</code> event on server shutting down for streaming responses (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2829">#2829</a>)</li> <li>Use native <code>context</code> parameter for <code>create_task</code> on Python 3.11+ (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2859">#2859</a>)</li> <li>Drop cast in ASGI types (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2875">#2875</a>)</li> </ul> <h2>0.42.0 (March 16, 2026)</h2> <h3>Changed</h3> <ul> <li>Use <code>bytearray</code> for request body accumulation to avoid O(n^2) allocation on fragmented bodies (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2845">#2845</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/Kludex/uvicorn/commit/b224045f5900b7f766743bcb16ba9fc3adea2606"><code>b224045</code></a> Version 0.46.0 (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2918">#2918</a>)</li> <li><a href="https://github.com/Kludex/uvicorn/commit/7375b5bf66d962186d663e85615d4b4d956bf880"><code>7375b5b</code></a> Use <code>bytearray</code> for incoming WebSocket message buffer in websockets-sansio (#...</li> <li><a href="https://github.com/Kludex/uvicorn/commit/d438fb16fe2d23c7bbc2ca7094645cff1f116458"><code>d438fb1</code></a> Support <code>ws_ping_interval</code> and <code>ws_ping_timeout</code> in <code>wsproto</code> implementation ...</li> <li><a href="https://github.com/Kludex/uvicorn/commit/3e6b96446653d0156434bce529a14c80764c9eda"><code>3e6b964</code></a> Support <code>ws_max_size</code> in <code>wsproto</code> implementation (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2915">#2915</a>)</li> <li><a href="https://github.com/Kludex/uvicorn/commit/2c423bd82be169459ea254a61476de34767e0326"><code>2c423bd</code></a> Version 0.45.0 (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2914">#2914</a>)</li> <li><a href="https://github.com/Kludex/uvicorn/commit/7f027f8e25e47668a9c2ce8b5c21b35054c48d02"><code>7f027f8</code></a> Revert "Emit <code>http.disconnect</code> on server shutdown for streaming responses" (#...</li> <li><a href="https://github.com/Kludex/uvicorn/commit/73a80c3cc87de269ed016e584a25e585ae6f2b44"><code>73a80c3</code></a> Add <code>--reset-contextvars</code> flag to isolate ASGI request context (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2912">#2912</a>)</li> <li><a href="https://github.com/Kludex/uvicorn/commit/45c0b568d38e9bf4f2f036bc2d79eb98b0e72f72"><code>45c0b56</code></a> Revert empty context for ASGI runs (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2911">#2911</a>)</li> <li><a href="https://github.com/Kludex/uvicorn/commit/850d92656de0cb5859ee5f6ba252e19ad3d38989"><code>850d926</code></a> Raise helpful <code>ImportError</code> when PyYAML is missing for YAML log config (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2906">#2906</a>)</li> <li><a href="https://github.com/Kludex/uvicorn/commit/fdcacb4b83bc686ea1ba9e50ffe5b8cfe49b3e00"><code>fdcacb4</code></a> Accept <code>log_level</code> strings case-insensitively (<a href="https://redirect.github.com/Kludex/uvicorn/issues/2907">#2907</a>)</li> <li>Additional commits viewable in <a href="https://github.com/Kludex/uvicorn/compare/0.40.0...0.46.0">compare view</a></li> </ul> </details> <br /> Updates `pydantic` from 2.12.5 to 2.13.3 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/releases">pydantic's releases</a>.</em></p> <blockquote> <h2>v2.13.3 2026-04-20</h2> <h2>v2.13.3 (2026-04-20)</h2> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Handle <code>AttributeError</code> subclasses with <code>from_attributes</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13096">#13096</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3">https://github.com/pydantic/pydantic/compare/v2.13.2...v2.13.3</a></p> <h2>v2.13.2 2026-04-17</h2> <h2>v2.13.2 (2026-04-17)</h2> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Fix <code>ValidationInfo.field_name</code> missing with <code>model_validate_json()</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13084">#13084</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2">https://github.com/pydantic/pydantic/compare/v2.13.1...v2.13.2</a></p> <h2>v2.13.1 2026-04-15</h2> <h2>v2.13.1 (2026-04-15)</h2> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Fix <code>ValidationInfo.data</code> missing with <code>model_validate_json()</code> by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13079">#13079</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1">https://github.com/pydantic/pydantic/compare/v2.13.0...v2.13.1</a></p> <h2>v2.13.0 2026-04-13</h2> <h2>v2.13.0 (2026-04-13)</h2> <p>The highlights of the v2.13 release are available in the <a href="https://pydantic.dev/articles/pydantic-v2-13-release">blog post</a>. Several minor changes (considered non-breaking changes according to our <a href="https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2">versioning policy</a>) are also included in this release. Make sure to look into them before upgrading.</p> <p>This release contains the updated <code>pydantic.v1</code> namespace, matching version 1.10.26 which includes support for Python 3.14.</p> <h3>What's Changed</h3> <p>See the beta releases for all changes sinces 2.12.</p> <h4>Packaging</h4> <ul> <li>Add zizmor for GitHub Actions workflow linting by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13039">#13039</a></li> <li>Update jiter to v0.14.0 to fix a segmentation fault on musl Linux by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13064">#13064</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic/blob/main/HISTORY.md">pydantic's changelog</a>.</em></p> <blockquote> <h2>v2.13.3 (2026-04-20)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.13.3">GitHub release</a></p> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Handle <code>AttributeError</code> subclasses with <code>from_attributes</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13096">#13096</a></li> </ul> <h2>v2.13.2 (2026-04-17)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.13.2">GitHub release</a></p> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Fix <code>ValidationInfo.field_name</code> missing with <code>model_validate_json()</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13084">#13084</a></li> </ul> <h2>v2.13.1 (2026-04-15)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.13.1">GitHub release</a></p> <h3>What's Changed</h3> <h4>Fixes</h4> <ul> <li>Fix <code>ValidationInfo.data</code> missing with <code>model_validate_json()</code> by <a href="https://github.com/davidhewitt"><code>@davidhewitt</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13079">#13079</a></li> </ul> <h2>v2.13.0 (2026-04-13)</h2> <p><a href="https://github.com/pydantic/pydantic/releases/tag/v2.13.0">GitHub release</a></p> <p>The highlights of the v2.13 release are available in the <a href="https://pydantic.dev/articles/pydantic-v2-13-release">blog post</a>. Several minor changes (considered non-breaking changes according to our <a href="https://pydantic.dev/docs/validation/2.13/get-started/version-policy/#pydantic-v2">versioning policy</a>) are also included in this release. Make sure to look into them before upgrading.</p> <p>This release contains the updated <code>pydantic.v1</code> namespace, matching version 1.10.26 which includes support for Python 3.14.</p> <h3>What's Changed</h3> <p>See the beta releases for all changes sinces 2.12.</p> <h4>New Features</h4> <ul> <li>Allow default factories of private attributes to take validated model data by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic/pull/13013">#13013</a></li> </ul> <h4>Changes</h4> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pydantic/pydantic/commit/9e9a11132c980c4ec84ff6d2df06d4c1a55ca8f3"><code>9e9a111</code></a> Fix backported test</li> <li><a href="https://github.com/pydantic/pydantic/commit/1ec8c6aa0cae1c78409c6f31af738a24e16c7124"><code>1ec8c6a</code></a> Prepare release v2.13.3</li> <li><a href="https://github.com/pydantic/pydantic/commit/fb4f2044436e9fa4ff9745479ce263016a99c4d6"><code>fb4f204</code></a> Handle <code>AttributeError</code> subclasses with <code>from_attributes</code></li> <li><a href="https://github.com/pydantic/pydantic/commit/ca3ddd1149bd3b14273922a29da174804496a055"><code>ca3ddd1</code></a> Prepare release v2.13.2</li> <li><a href="https://github.com/pydantic/pydantic/commit/000e823a3ab7545b0c6064fde34effdcd02044ab"><code>000e823</code></a> Fix <code>ValidationInfo.field_name</code> missing with <code>model_validate_json()</code></li> <li><a href="https://github.com/pydantic/pydantic/commit/d45d8be3ffb6dfc6d0c64da6980140c91ff841fb"><code>d45d8be</code></a> Prepare release 2.13.1</li> <li><a href="https://github.com/pydantic/pydantic/commit/54aca609ce58e73dfe1c681d93432fbe3a4621da"><code>54aca60</code></a> Fix <code>ValidationInfo.data</code> missing with <code>model_validate_json()</code></li> <li><a href="https://github.com/pydantic/pydantic/commit/46bf4fa648af3a1fbf4603a37f210e9d9c618357"><code>46bf4fa</code></a> Fix Pydantic release workflow (<a href="https://redirect.github.com/pydantic/pydantic/issues/13067">#13067</a>)</li> <li><a href="https://github.com/pydantic/pydantic/commit/1b359edab09c623464d23c6fd2503ae5ff276d43"><code>1b359ed</code></a> Prepare release v2.13.0 (<a href="https://redirect.github.com/pydantic/pydantic/issues/13065">#13065</a>)</li> <li><a href="https://github.com/pydantic/pydantic/commit/b1bf19445d8ac144a7a0e82674d2d87eebab6c18"><code>b1bf194</code></a> Fix model equality when using runtime <code>extra</code> configuration (<a href="https://redirect.github.com/pydantic/pydantic/issues/13062">#13062</a>)</li> <li>Additional commits viewable in <a href="https://github.com/pydantic/pydantic/compare/v2.12.5...v2.13.3">compare view</a></li> </ul> </details> <br /> Updates `python-dotenv` from 1.2.1 to 1.2.2 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/theskumar/python-dotenv/releases">python-dotenv's releases</a>.</em></p> <blockquote> <h2>v1.2.2</h2> <h3>Added</h3> <ul> <li>Support for Python 3.14, including the free-threaded (3.14t) build. (#)</li> </ul> <h3>Changed</h3> <ul> <li>The <code>dotenv run</code> command now forwards flags directly to the specified command by <a href="https://github.com/bbc2"><code>@bbc2</code></a> in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/607">theskumar/python-dotenv#607</a></li> <li>Improved documentation clarity regarding override behavior and the reference page.</li> <li>Updated PyPy support to version 3.11.</li> <li>Documentation for FIFO file support.</li> <li>Support for Python 3.9.</li> </ul> <h3>Fixed</h3> <ul> <li>Improved <code>set_key</code> and <code>unset_key</code> behavior when interacting with symlinks by <a href="https://github.com/bbc2"><code>@bbc2</code></a> in <a href="https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311">#790c5</a></li> <li>Corrected the license specifier and added missing Python 3.14 classifiers in package metadata by <a href="https://github.com/JYOuyang"><code>@JYOuyang</code></a> in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/590">theskumar/python-dotenv#590</a></li> </ul> <h3>Breaking Changes</h3> <ul> <li> <p><code>dotenv.set_key</code> and <code>dotenv.unset_key</code> used to follow symlinks in some situations. This is no longer the case. For that behavior to be restored in all cases, <code>follow_symlinks=True</code> should be used.</p> </li> <li> <p>In the CLI, <code>set</code> and <code>unset</code> used to follow symlinks in some situations. This is no longer the case.</p> </li> <li> <p><code>dotenv.set_key</code>, <code>dotenv.unset_key</code> and the CLI commands <code>set</code> and <code>unset</code> used to reset the file mode of the modified .env file to <code>0o600</code> in some situations. This is no longer the case: The original mode of the file is now preserved. Is the file needed to be created or wasn't a regular file, mode <code>0o600</code> is used.</p> </li> </ul> <h3>Misc</h3> <ul> <li>skip 000 permission tests for root user by <a href="https://github.com/burnout-projects"><code>@burnout-projects</code></a> in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/561">theskumar/python-dotenv#561</a></li> <li>Bump actions/checkout from 5 to 6 in the github-actions group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/593">theskumar/python-dotenv#593</a></li> <li>Add Windows testing to CI by <a href="https://github.com/bbc2"><code>@bbc2</code></a> in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/604">theskumar/python-dotenv#604</a></li> <li>Improve workflow efficiency with best practices by <a href="https://github.com/theskumar"><code>@theskumar</code></a> in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/609">theskumar/python-dotenv#609</a></li> <li>Remove the use of <code>sh</code> in tests by <a href="https://github.com/bbc2"><code>@bbc2</code></a> in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/612">theskumar/python-dotenv#612</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/JYOuyang"><code>@JYOuyang</code></a> made their first contribution in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/590">theskumar/python-dotenv#590</a></li> <li><a href="https://github.com/burnout-projects"><code>@burnout-projects</code></a> made their first contribution in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/561">theskumar/python-dotenv#561</a></li> <li><a href="https://github.com/cpackham-atlnz"><code>@cpackham-atlnz</code></a> made their first contribution in <a href="https://redirect.github.com/theskumar/python-dotenv/pull/597">theskumar/python-dotenv#597</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2">https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2</a></p> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/theskumar/python-dotenv/blob/main/CHANGELOG.md">python-dotenv's changelog</a>.</em></p> <blockquote> <h2>[1.2.2] - 2026-03-01</h2> <h3>Added</h3> <ul> <li>Support for Python 3.14, including the free-threaded (3.14t) build. (<a href="https://redirect.github.com/theskumar/python-dotenv/issues/588">#588</a>)</li> </ul> <h3>Changed</h3> <ul> <li>The <code>dotenv run</code> command now forwards flags directly to the specified command by [<a href="https://github.com/bbc2"><code>@bbc2</code></a>] in <a href="https://redirect.github.com/theskumar/python-dotenv/issues/607">#607</a></li> <li>Improved documentation clarity regarding override behavior and the reference page.</li> <li>Updated PyPy support to version 3.11.</li> <li>Documentation for FIFO file support.</li> <li>Dropped Support for Python 3.9.</li> </ul> <h3>Fixed</h3> <ul> <li>Improved <code>set_key</code> and <code>unset_key</code> behavior when interacting with symlinks by [<a href="https://github.com/bbc2"><code>@bbc2</code></a>] in [790c5c0]</li> <li>Corrected the license specifier and added missing Python 3.14 classifiers in package metadata by [<a href="https://github.com/JYOuyang"><code>@JYOuyang</code></a>] in <a href="https://redirect.github.com/theskumar/python-dotenv/issues/590">#590</a></li> </ul> <h3>Breaking Changes</h3> <ul> <li> <p><code>dotenv.set_key</code> and <code>dotenv.unset_key</code> used to follow symlinks in some situations. This is no longer the case. For that behavior to be restored in all cases, <code>follow_symlinks=True</code> should be used.</p> </li> <li> <p>In the CLI, <code>set</code> and <code>unset</code> used to follow symlinks in some situations. This is no longer the case.</p> </li> <li> <p><code>dotenv.set_key</code>, <code>dotenv.unset_key</code> and the CLI commands <code>set</code> and <code>unset</code> used to reset the file mode of the modified .env file to <code>0o600</code> in some situations. This is no longer the case: The original mode of the file is now preserved. Is the file needed to be created or wasn't a regular file, mode <code>0o600</code> is used.</p> </li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/theskumar/python-dotenv/commit/36004e0e34be7665ff2b11a8a4005144f76f176d"><code>36004e0</code></a> Bump version: 1.2.1 → 1.2.2</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/eb202520e5933c9daf42501e1e42fdb0144002c8"><code>eb20252</code></a> docs: update changelog for v1.2.2</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/790c5c02991100aa1bf41ee5330aca75edc51311"><code>790c5c0</code></a> Merge commit from fork</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/43340da220fb4ca4f95357bbe21a3c7f8f1278b1"><code>43340da</code></a> Remove the use of <code>sh</code> in tests (<a href="https://redirect.github.com/theskumar/python-dotenv/issues/612">#612</a>)</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/09d7cee32459e7abdcb5c9d8122a552589c06a9c"><code>09d7cee</code></a> docs: clarify override behavior and document FIFO support (<a href="https://redirect.github.com/theskumar/python-dotenv/issues/610">#610</a>)</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/c8de2887c00198c22842c5ae5e92d1747467363c"><code>c8de288</code></a> ci: improve workflow efficiency with best practices (<a href="https://redirect.github.com/theskumar/python-dotenv/issues/609">#609</a>)</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/7bd9e3dbfedc0983ad7d56d5570013035242bdf4"><code>7bd9e3d</code></a> Add Windows testing to CI (<a href="https://redirect.github.com/theskumar/python-dotenv/issues/604">#604</a>)</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/1baaf04f336072e0ee324d5df9563ec767f14f81"><code>1baaf04</code></a> Drop Python 3.9 support and update to PyPy 3.11 (<a href="https://redirect.github.com/theskumar/python-dotenv/issues/608">#608</a>)</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/4a22cf8993804aeede0c20b75bb1a29d3a99e9dc"><code>4a22cf8</code></a> ci: enable testing on Python 3.14t (free-threaded) (<a href="https://redirect.github.com/theskumar/python-dotenv/issues/588">#588</a>)</li> <li><a href="https://github.com/theskumar/python-dotenv/commit/e2e8e776b42e382ae38b44d3982dd649e7507dd4"><code>e2e8e77</code></a> Fix license specifier (<a href="https://redirect.github.com/theskumar/python-dotenv/issues/597">#597</a>)</li> <li>Additional commits viewable in <a href="https://github.com/theskumar/python-dotenv/compare/v1.2.1...v1.2.2">compare view</a></li> </ul> </details> <br /> Updates `python-telegram-bot` from 22.6 to 22.7 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/python-telegram-bot/python-telegram-bot/releases">python-telegram-bot's releases</a>.</em></p> <blockquote> <h2>v22.7</h2> <p><!-- raw HTML omitted -->We've just released v22.7<!-- raw HTML omitted -->. Thank you to everyone who contributed to this release. As usual, upgrade using <!-- raw HTML omitted -->pip install -U python-telegram-bot<!-- raw HTML omitted -->.</p> <p>The release notes can be found <!-- raw HTML omitted -->here<!-- raw HTML omitted -->.</p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/5a41d2ba85bd10bdb2b2c1047758a317eb091e5e"><code>5a41d2b</code></a> Bump Version to v22.7 (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5176">#5176</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/108bfaf888f76920857f93db090a4222ea5304bc"><code>108bfaf</code></a> Documentation Improvements (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5119">#5119</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/3fd6932c2db1007181cd844f0a633ac68e0e9d21"><code>3fd6932</code></a> Lock file maintenance (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5175">#5175</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/22c31b187a9e44272c705b1b9b05cb4789b28693"><code>22c31b1</code></a> Update sigstore/gh-action-sigstore-python action to v3.2.0 (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5172">#5172</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/dd8c60fa76802f958797f3d3d8ec0734221e7bf4"><code>dd8c60f</code></a> Update stefanzweifel/git-auto-commit-action action to v7.1.0 (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5173">#5173</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/5bc0f4f5b4ee08e5dcbdf7550a7e1e3be2d05c46"><code>5bc0f4f</code></a> Update actions/checkout action to v6 (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5174">#5174</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/80f3ccdcfaad38a1ac192fce98395481ca56be4d"><code>80f3ccd</code></a> Update GitHub Artifact Actions (major) (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5171">#5171</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/537693f0824077d57deb25e333eb182188df266a"><code>537693f</code></a> Update dependency astral-sh/uv to v0.10.10 (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5169">#5169</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/72e8ded8cfb6e79801f82182b375ba00ca6d5a12"><code>72e8ded</code></a> Update astral-sh/setup-uv action to v7.5.0 (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5170">#5170</a>)</li> <li><a href="https://github.com/python-telegram-bot/python-telegram-bot/commit/a48b08fb204bae3da972ecd1092d3c63fc92f11a"><code>a48b08f</code></a> Bump Sphinx Related Dependencies, Fix <code>uv</code> and Docs Build (<a href="https://redirect.github.com/python-telegram-bot/python-telegram-bot/issues/5168">#5168</a>)</li> <li>Additional commits viewable in <a href="https://github.com/python-telegram-bot/python-telegram-bot/compare/v22.6...v22.7">compare view</a></li> </ul> </details> <br /> Updates `discord-py` from 2.6.4 to 2.7.1 <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/Rapptz/discord.py/commit/dfd1144b2246a7adafe3f1c64a4dd9bc2187fcee"><code>dfd1144</code></a> Version bump to v2.7.1</li> <li><a href="https://github.com/Rapptz/discord.py/commit/64fcfe93333acecedf4eba82457fda6ec21c11f1"><code>64fcfe9</code></a> Add changelog for v2.7.1</li> <li><a href="https://github.com/Rapptz/discord.py/commit/9cf04aec3c9bd621367e5f653f6b1f9dd19e6eeb"><code>9cf04ae</code></a> Add warning and raise if davey is not installed</li> <li><a href="https://github.com/Rapptz/discord.py/commit/92c715e388900b9a3ce0f2cc52d30fe4f45aee65"><code>92c715e</code></a> Unpin strict davey dependency</li> <li><a href="https://github.com/Rapptz/discord.py/commit/2383467ccda0323ec7935517e6c870d6bd63bcbd"><code>2383467</code></a> Show davey version in --version output</li> <li><a href="https://github.com/Rapptz/discord.py/commit/699a97f3eb3fbb90b9b019ef15f5d770838d24af"><code>699a97f</code></a> Fix aiohttp websocket timeout deprecation warning</li> <li><a href="https://github.com/Rapptz/discord.py/commit/b01de35fa284d7206987bc31e7faeeebe9251498"><code>b01de35</code></a> Remove old workaround to /callback not having a return type</li> <li><a href="https://github.com/Rapptz/discord.py/commit/616137875b2c4ab442f5cdb75874d5ee77d6d7ef"><code>6161378</code></a> Fix memory leak with the view store when removing items</li> <li><a href="https://github.com/Rapptz/discord.py/commit/9798e5921abb818c0f020b2e7773fcede26b82b4"><code>9798e59</code></a> Version bump for development</li> <li><a href="https://github.com/Rapptz/discord.py/commit/5df6e2230a8ffa5211eb49b8d690d86126c1121e"><code>5df6e22</code></a> Version bump to v2.7.0</li> <li>Additional commits viewable in <a href="https://github.com/Rapptz/discord.py/compare/v2.6.4...v2.7.1">compare view</a></li> </ul> </details> <br /> Updates `pydantic-settings` from 2.12.0 to 2.14.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/pydantic/pydantic-settings/releases">pydantic-settings's releases</a>.</em></p> <blockquote> <h2>v2.14.0</h2> <h2>What's Changed</h2> <ul> <li>Fix parsing env vars into Optional Strict types by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/792">pydantic/pydantic-settings#792</a></li> <li>Fix RecursionError with mutually recursive models in CLI by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/794">pydantic/pydantic-settings#794</a></li> <li>Fix env_file from model_config ignored in CliApp.run() (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/795">#795</a>) by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/796">pydantic/pydantic-settings#796</a></li> <li>Update dependencies by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/798">pydantic/pydantic-settings#798</a></li> <li>Add Dependabot configuration by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/801">pydantic/pydantic-settings#801</a></li> <li>Bump samuelcolvin/check-python-version from 4.1 to 5 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/802">pydantic/pydantic-settings#802</a></li> <li>Bump actions/upload-artifact from 4 to 7 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/803">pydantic/pydantic-settings#803</a></li> <li>Bump actions/checkout from 4 to 6 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/804">pydantic/pydantic-settings#804</a></li> <li>Bump astral-sh/setup-uv from 5 to 7 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/805">pydantic/pydantic-settings#805</a></li> <li>Bump actions/setup-python from 5 to 6 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/806">pydantic/pydantic-settings#806</a></li> <li>Ignore chardet and group GitHub Actions in Dependabot by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/808">pydantic/pydantic-settings#808</a></li> <li>Bump actions/download-artifact from 4 to 8 in the github-actions group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/809">pydantic/pydantic-settings#809</a></li> <li>Bump the python-packages group with 2 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/810">pydantic/pydantic-settings#810</a></li> <li>Support reading .env files from FIFOs (e.g. 1Password Environments) by <a href="https://github.com/JacobHayes"><code>@JacobHayes</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/776">pydantic/pydantic-settings#776</a></li> <li>Fix AliasChoices ignored when changing provider priority by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/813">pydantic/pydantic-settings#813</a></li> <li>fix: resolve KeyError in run_subcommand for underscore field names by <a href="https://github.com/bradykieffer"><code>@bradykieffer</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/799">pydantic/pydantic-settings#799</a></li> <li>Bump the python-packages group with 3 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/814">pydantic/pydantic-settings#814</a></li> <li>Fix <code>Literal[numeric Enum]</code> coercion for CLI and env vars by <a href="https://github.com/m9810223"><code>@m9810223</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/811">pydantic/pydantic-settings#811</a></li> <li>Fix nested discriminated unions not discovered by env/CLI providers by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/816">pydantic/pydantic-settings#816</a></li> <li>Bump the python-packages group with 3 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/820">pydantic/pydantic-settings#820</a></li> <li>CLI ensure env nested max split internally. by <a href="https://github.com/kschwab"><code>@kschwab</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/821">pydantic/pydantic-settings#821</a></li> <li>Bump the python-packages group with 4 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/824">pydantic/pydantic-settings#824</a></li> <li>Migrate <code>boto3-stubs</code> to <code>types-boto3</code> by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/831">pydantic/pydantic-settings#831</a></li> <li>Fix CLI not recognizing field name with validate_by_name and AliasChoices by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/826">pydantic/pydantic-settings#826</a></li> <li>Allow customisation of the dotevn setting source to filter variables by <a href="https://github.com/CaselIT"><code>@CaselIT</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/832">pydantic/pydantic-settings#832</a></li> <li>Bump the python-packages group with 3 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/833">pydantic/pydantic-settings#833</a></li> <li>Introduce yamlfmt by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/836">pydantic/pydantic-settings#836</a></li> <li>Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/837">pydantic/pydantic-settings#837</a></li> <li>Introduce zizmor by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/838">pydantic/pydantic-settings#838</a></li> <li>Fix CliPositionalArg[list[CustomType]] crash for custom types by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/839">pydantic/pydantic-settings#839</a></li> <li>Add note about Mypy plugin for <code>BaseSettings.__init__()</code> by <a href="https://github.com/Viicos"><code>@Viicos</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/842">pydantic/pydantic-settings#842</a></li> <li>Fix <code>cli_ignore_unknown_args=True</code> not working on subcommands by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/844">pydantic/pydantic-settings#844</a></li> <li>Bump the python-packages group with 4 updates by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/847">pydantic/pydantic-settings#847</a></li> <li>Fix CLI descriptions lost under <code>python -OO</code> by falling back to <code>json_schema_extra</code> by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/843">pydantic/pydantic-settings#843</a></li> <li>Prepare release 2.14.0 by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/848">pydantic/pydantic-settings#848</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] made their first contribution in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/802">pydantic/pydantic-settings#802</a></li> <li><a href="https://github.com/JacobHayes"><code>@JacobHayes</code></a> made their first contribution in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/776">pydantic/pydantic-settings#776</a></li> <li><a href="https://github.com/bradykieffer"><code>@bradykieffer</code></a> made their first contribution in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/799">pydantic/pydantic-settings#799</a></li> <li><a href="https://github.com/CaselIT"><code>@CaselIT</code></a> made their first contribution in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/832">pydantic/pydantic-settings#832</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0">https://github.com/pydantic/pydantic-settings/compare/v2.13.1...v2.14.0</a></p> <h2>v2.13.1</h2> <h2>What's Changed</h2> <ul> <li>Fix regression for bool fields since 2.13.0 by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/784">pydantic/pydantic-settings#784</a></li> <li>Fix RecursionError with self-referential models in CliApp by <a href="https://github.com/hramezani"><code>@hramezani</code></a> in <a href="https://redirect.github.com/pydantic/pydantic-settings/pull/783">pydantic/pydantic-settings#783</a></li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/pydantic/pydantic-settings/commit/8916beeecc6d0510e3d0532a0ed839937400ddc3"><code>8916bee</code></a> Prepare release 2.14.0 (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/848">#848</a>)</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/39e551c0910c85505b608ff85a103b2c9f7396c5"><code>39e551c</code></a> Fix CLI descriptions lost under <code>python -OO</code> by falling back to `json_schema_...</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/9ed7f48ea2c90f436a03b01f721fe6656c869b14"><code>9ed7f48</code></a> Bump the python-packages group with 4 updates (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/847">#847</a>)</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/617c690fb16c95eb0fb98fc88c0d6d82b9af4fa9"><code>617c690</code></a> Fix <code>cli_ignore_unknown_args=True</code> not working on subcommands (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/844">#844</a>)</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/577c05f7e8ac25904da2381db51ed4ddd4b3e4fe"><code>577c05f</code></a> Add note about Mypy plugin for <code>BaseSettings.__init__()</code> (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/842">#842</a>)</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/2355bc54e9d442ca7916f02de28d0c936e75441c"><code>2355bc5</code></a> Fix CliPositionalArg[list[CustomType]] crash for custom types (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/839">#839</a>)</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/16bd6fd230d6280d52db6ce2a0ffef8f908cc89d"><code>16bd6fd</code></a> Introduce zizmor (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/838">#838</a>)</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/df8b239fe09ba712767bdf378bc90627df375f04"><code>df8b239</code></a> Bump boto3 from 1.42.82 to 1.42.83 in the python-packages group (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/837">#837</a>)</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/c5401a27999cd6c0e93925deb0660cd51013c8b1"><code>c5401a2</code></a> Introduce yamlfmt (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/836">#836</a>)</li> <li><a href="https://github.com/pydantic/pydantic-settings/commit/953e28e6cfe9a9e536375d771a4ffd48535a4ab2"><code>953e28e</code></a> Bump the python-packages group with 3 updates (<a href="https://redirect.github.com/pydantic/pydantic-settings/issues/833">#833</a>)</li> <li>Additional commits viewable in <a href="https://github.com/pydantic/pydantic-settings/compare/v2.12.0...v2.14.0">compare view</a></li> </ul> </details> <br /> Updates `openai` from 2.21.0 to 2.32.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.32.0</h2> <h2>2.32.0 (2026-04-15)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-python/compare/v2.31.0...v2.32.0">v2.31.0...v2.32.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> Add detail to InputFileContent (<a href="https://github.com/openai/openai-python/commit/60de21d1fcfbcadea0d9b8d884c73c9dc49d14ff">60de21d</a>)</li> <li><strong>api:</strong> add OAuthErrorCode type (<a href="https://github.com/openai/openai-python/commit/0c8d2c3b44242c9139dc554896ea489b56e236b8">0c8d2c3</a>)</li> <li><strong>client:</strong> add event handler implementation for websockets (<a href="https://github.com/openai/openai-python/commit/0280d0568f706684ecbf0aabf3575cdcb7fd22d5">0280d05</a>)</li> <li><strong>client:</strong> allow enqueuing to websockets even when not connected (<a href="https://github.com/openai/openai-python/commit/67aa20e69bc0e4a3b7694327c808606bfa24a966">67aa20e</a>)</li> <li><strong>client:</strong> support reconnection in websockets (<a href="https://github.com/openai/openai-python/commit/eb72a953ea9dc5beec3eef537be6eb32292c3f65">eb72a95</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li>ensure file data are only sent as 1 parameter (<a href="https://github.com/openai/openai-python/commit/c0c2ecd0f6b64fa5fafda6134bb06995b143a2cf">c0c2ecd</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>improve examples (<a href="https://github.com/openai/openai-python/commit/84712fa0f094b53151a0fe6ac85aa98018b2a7e2">84712fa</a>)</li> </ul> <h2>v2.31.0</h2> <h2>2.31.0 (2026-04-08)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-python/compare/v2.30.0...v2.31.0">v2.30.0...v2.31.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> add phase field to conversations message (<a href="https://github.com/openai/openai-python/commit/3e5834efb39b24e019a29dc54d890c67d18cbb54">3e5834e</a>)</li> <li><strong>api:</strong> add web_search_call.results to ResponseIncludable type (<a href="https://github.com/openai/openai-python/commit/ffd8741dd38609a5af0159ceb800d8ddba7925f8">ffd8741</a>)</li> <li><strong>client:</strong> add support for short-lived tokens (<a href="https://redirect.github.com/openai/openai-python/issues/1608">#1608</a>) (<a href="https://github.com/openai/openai-python/commit/22fe7228d4990c197cd721b3ad7931ad05cca5dd">22fe722</a>)</li> <li><strong>client:</strong> support sending raw data over websockets (<a href="https://github.com/openai/openai-python/commit/f1bc52ef641dfca6fdf2a5b00ce3b09bff2552f5">f1bc52e</a>)</li> <li><strong>internal:</strong> implement indices array format for query and form serialization (<a href="https://github.com/openai/openai-python/commit/49194cfa711328216ff131d6f65c9298822a7c51">49194cf</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>client:</strong> preserve hardcoded query params when merging with user params (<a href="https://github.com/openai/openai-python/commit/92e109c3d9569a942e1919e75977dc13fa015f9a">92e109c</a>)</li> <li><strong>types:</strong> remove web_search_call.results from ResponseIncludable (<a href="https://github.com/openai/openai-python/commit/d3cc40165cd86015833d15167cc7712b4102f932">d3cc401</a>)</li> </ul> <h3>Chores</h3> <ul> <li><strong>tests:</strong> bump steady to v0.20.1 (<a href="https://github.com/openai/openai-python/commit/d60e2eea7f6916540cd4ba901dceb07051119da4">d60e2ee</a>)</li> <li><strong>tests:</strong> bump steady to v0.20.2 (<a href="https://github.com/openai/openai-python/commit/6508d474332d4e82d9615c0a9a77379f9b5e4412">6508d47</a>)</li> </ul> <h3>Documentation</h3> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </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.32.0 (2026-04-15)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-python/compare/v2.31.0...v2.32.0">v2.31.0...v2.32.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> Add detail to InputFileContent (<a href="https://github.com/openai/openai-python/commit/60de21d1fcfbcadea0d9b8d884c73c9dc49d14ff">60de21d</a>)</li> <li><strong>api:</strong> add OAuthErrorCode type (<a href="https://github.com/openai/openai-python/commit/0c8d2c3b44242c9139dc554896ea489b56e236b8">0c8d2c3</a>)</li> <li><strong>client:</strong> add event handler implementation for websockets (<a href="https://github.com/openai/openai-python/commit/0280d0568f706684ecbf0aabf3575cdcb7fd22d5">0280d05</a>)</li> <li><strong>client:</strong> allow enqueuing to websockets even when not connected (<a href="https://github.com/openai/openai-python/commit/67aa20e69bc0e4a3b7694327c808606bfa24a966">67aa20e</a>)</li> <li><strong>client:</strong> support reconnection in websockets (<a href="https://github.com/openai/openai-python/commit/eb72a953ea9dc5beec3eef537be6eb32292c3f65">eb72a95</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li>ensure file data are only sent as 1 parameter (<a href="https://github.com/openai/openai-python/commit/c0c2ecd0f6b64fa5fafda6134bb06995b143a2cf">c0c2ecd</a>)</li> </ul> <h3>Documentation</h3> <ul> <li>improve examples (<a href="https://github.com/openai/openai-python/commit/84712fa0f094b53151a0fe6ac85aa98018b2a7e2">84712fa</a>)</li> </ul> <h2>2.31.0 (2026-04-08)</h2> <p>Full Changelog: <a href="https://github.com/openai/openai-python/compare/v2.30.0...v2.31.0">v2.30.0...v2.31.0</a></p> <h3>Features</h3> <ul> <li><strong>api:</strong> add phase field to conversations message (<a href="https://github.com/openai/openai-python/commit/3e5834efb39b24e019a29dc54d890c67d18cbb54">3e5834e</a>)</li> <li><strong>api:</strong> add web_search_call.results to ResponseIncludable type (<a href="https://github.com/openai/openai-python/commit/ffd8741dd38609a5af0159ceb800d8ddba7925f8">ffd8741</a>)</li> <li><strong>client:</strong> add support for short-lived tokens (<a href="https://redirect.github.com/openai/openai-python/issues/1608">#1608</a>) (<a href="https://github.com/openai/openai-python/commit/22fe7228d4990c197cd721b3ad7931ad05cca5dd">22fe722</a>)</li> <li><strong>client:</strong> support sending raw data over websockets (<a href="https://github.com/openai/openai-python/commit/f1bc52ef641dfca6fdf2a5b00ce3b09bff2552f5">f1bc52e</a>)</li> <li><strong>internal:</strong> implement indices array format for query and form serialization (<a href="https://github.com/openai/openai-python/commit/49194cfa711328216ff131d6f65c9298822a7c51">49194cf</a>)</li> </ul> <h3>Bug Fixes</h3> <ul> <li><strong>client:</strong> preserve hardcoded query params when merging with user params (<a href="https://github.com/openai/openai-python/commit/92e109c3d9569a942e1919e75977dc13fa015f9a">92e109c</a>)</li> <li><strong>types:</strong> remove web_search_call.results from ResponseIncludable (<a href="https://github.com/openai/openai-python/commit/d3cc40165cd86015833d15167cc7712b4102f932">d3cc401</a>)</li> </ul> <h3>Chores</h3> <ul> <li><strong>tests:</strong> bump steady to v0.20.1 (<a href="https://github.com/openai/openai-python/commit/d60e2eea7f6916540cd4ba901dceb07051119da4">d60e2ee</a>)</li> <li><strong>tests:</strong> bump steady to v0.20.2 (<a href="https://github.com/openai/openai-python/commit/6508d474332d4e82d9615c0a9a77379f9b5e4412">6508d47</a>)</li> </ul> <h3>Documentation</h3> <ul> <li><strong>api:</strong> update file parameter descriptions in vector_stores files and file_batches (<a href="https://github.com/openai/openai-python/commit/a9e7ebd505b9ae90514339aa63c6f1984a08cf6b">a9e7ebd</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/openai/openai-python/commit/e507a4ebeea4c3f93cd48986014a3e2ca79230c2"><code>e507a4e</code></a> release: 2.32.0 (<a href="https://redirect.github.com/openai/openai-python/issues/3074">#3074</a>)</li> <li><a href="https://github.com/openai/openai-python/commit/750354ed65565b31d0547bf00f4f3180ac1bfeef"><code>750354e</code></a> release: 2.31.0</li> <li><a href="https://github.com/openai/openai-python/commit/5be95364a5a82746cb7b1c77df10dfaf138496bb"><code>5be9536</code></a> feat(client): add support for short-lived tokens (<a href="https://redirect.github.com/openai/openai-python/issues/1608">#1608</a>)</li> <li><a href="https://github.com/openai/openai-python/commit/f1fd4fae0329ee3df2f1bb25d93f51311782ad1a"><code>f1fd4fa</code></a> feat(client): support sending raw data over websockets</li> <li><a href="https://github.com/openai/openai-python/commit/73ea2f75ba57a1db964518b33b790b1e1251b8d5"><code>73ea2f7</code></a> fix(client): preserve hardcoded query params when merging with user params</li> <li><a href="https://github.com/openai/openai-python/commit/454b2575d59a086f279d99dc791058acee2f14c0"><code>454b257</code></a> feat(api): add web_search_call.results to ResponseIncludable type</li> <li><a href="https://github.com/openai/openai-python/commit/de2c7b1d087f41f33ada85a7460f32e55331778a"><code>de2c7b1</code></a> chore(tests): bump steady to v0.20.2</li> <li><a href="https://github.com/openai/openai-python/commit/6efca95a76f6ca9cb91fdf536c6c9ebcef075541"><code>6efca95</code></a> chore(tests): bump steady to v0.20.1</li> <li><a href="https://github.com/openai/openai-python/commit/2076d85f9226113e4ba360a7f456091988092dbf"><code>2076d85</code></a> feat(api): add phase field to conversations message</li> <li><a href="https://github.com/openai/openai-python/commit/c0c59afa39a82f73063a52f624a9a4a2a6bf3313"><code>c0c59af</code></a> fix(types): remove web_search_call.results from ResponseIncludable</li> <li>Additional commits viewable in <a href="https://github.com/openai/openai-python/compare/v2.21.0...v2.32.0">compare view</a></li> </ul> </details> <br /> Updates `grpcio` from 1.78.0 to 1.80.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/grpc/grpc/releases">grpcio's releases</a>.</em></p> <blockquote> <h2>Release v1.80.0</h2> <p>This is release 1.80.0 (<a href="https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md">glimmering</a>) of gRPC Core.</p> <p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>. For previous releases, see <a href="https://github.com/grpc/grpc/releases">Releases</a>.</p> <p>This release contains refinements, improvements, and bug fixes, with highlights listed below.</p> <h2>Core</h2> <ul> <li>[ssl] Implement TLS private key signer in Python. (<a href="https://redirect.github.com/grpc/grpc/pull/41701">#41701</a>)</li> <li>[TLS Credentials]: Private Key Offload Implementation. (<a href="https://redirect.github.com/grpc/grpc/pull/41606">#41606</a>)</li> <li>Fix max sockaddr struct size on OpenBSD. (<a href="https://redirect.github.com/grpc/grpc/pull/40454">#40454</a>)</li> <li>[core] Enable EventEngine for Python by default, and EventEngine fork support in Python and Ruby. (<a href="https://redirect.github.com/grpc/grpc/pull/41432">#41432</a>)</li> <li>[TLS Credentials]: Create InMemoryCertificateProvider to update certificates independently. (<a href="https://redirect.github.com/grpc/grpc/pull/41484">#41484</a>)</li> <li>[Ruby] Build/test ruby 4.0 and build native gems with Ruby 4.0 support. (<a href="https://redirect.github.com/grpc/grpc/pull/41324">#41324</a>)</li> <li>[EventEngine] Remove an incorrect std::move in DNSServiceResolver constructor. (<a href="https://redirect.github.com/grpc/grpc/pull/41502">#41502</a>)</li> <li>[RR and WRR] enable change to connect from a random index. (<a href="https://redirect.github.com/grpc/grpc/pull/41472">#41472</a>)</li> <li>[xds] Implement gRFC A101. (<a href="https://redirect.github.com/grpc/grpc/pull/41051">#41051</a>)</li> </ul> <h2>C++</h2> <ul> <li>[C++] Add SNI override option to C++ channel credentials options API. (<a href="https://redirect.github.com/grpc/grpc/pull/41460">#41460</a>)</li> </ul> <h2>C#</h2> <ul> <li>[C# tools] Option to append Async to server side method names <a href="https://redirect.github.com/grpc/grpc/issues/39010">#39010</a>. (<a href="https://redirect.github.com/grpc/grpc/pull/39797">#39797</a>)</li> </ul> <h2>Objective-C</h2> <ul> <li>[Fix][Compiler] Plugins fall back to the edition 2023 for older protobuf. (<a href="https://redirect.github.com/grpc/grpc/pull/41357">#41357</a>)</li> </ul> <h2>PHP</h2> <ul> <li>[PHP] Disable php infinite recursion check for callback from Core to PHP. (<a href="https://redirect.github.com/grpc/grpc/pull/41835">#41835</a>)</li> <li>[PHP] Fix runtime error with PHp8.5 alpha because zend_exception_get_defaul…. (<a href="https://redirect.github.com/grpc/grpc/pull/40337">#40337</a>)</li> </ul> <h2>Python</h2> <ul> <li>[Python] Fix <code>GRPC_TRACE</code> not working when absl log initialized in cython. (<a href="https://redirect.github.com/grpc/grpc/pull/41814">#41814</a>)</li> <li>Revert "[Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in core and python (<a href="https://redirect.github.com/grpc/grpc/issues/41455">#41455</a>)". (<a href="https://redirect.github.com/grpc/grpc/pull/41769">#41769</a>)</li> <li>[Python] Fix AsyncIO Server maximum_concurrent_rpcs enforcement preventing negative active_rpcs count. (<a href="https://redirect.github.com/grpc/grpc/pull/41532">#41532</a>)</li> <li>[Python] Docs: correct <code>grpc.Compression</code> references. (<a href="https://redirect.github.com/grpc/grpc/pull/41705">#41705</a>)</li> <li>[Python] [Typeguard] Part 4 - Add Typeguard to AIO stack in tests . (<a href="https://redirect.github.com/grpc/grpc/pull/40226">#40226</a>)</li> </ul> <!-- raw HTML omitted --> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/grpc/grpc/commit/f5e2d6e856176c2f6b7691032adfefe21e5f64c1"><code>f5e2d6e</code></a> [Release] Bump version to 1.80.0 (on v1.80.x branch) (<a href="https://redirect.github.com/grpc/grpc/issues/41857">#41857</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/938cfecaebfc28b5e6bcdb95d55aba3962d9b55b"><code>938cfec</code></a> [subchannel connection scaling] fix when we reset backoff (<a href="https://redirect.github.com/grpc/grpc/issues/41935">#41935</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/91778bec667d7310864420f2b32aeb2e41e1b51c"><code>91778be</code></a> [Backport][v1.80.x][Python] New <code>_create</code> method for aio.Metadata (<a href="https://redirect.github.com/grpc/grpc/issues/41888">#41888</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/f10b9f26933703c5fe3e080f50ef19c858d773e0"><code>f10b9f2</code></a> [bzlmod] upgrade rules_swift to avoid BCR CI breakage on Windows with bazel 7...</li> <li><a href="https://github.com/grpc/grpc/commit/be4c1c55b69493868241bfffd4bc318d3d592656"><code>be4c1c5</code></a> [subchannel] fix crash in connection scaling code (<a href="https://redirect.github.com/grpc/grpc/issues/41853">#41853</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/a71df73eafb18fa0210a13dd6a2ce2cb6594d427"><code>a71df73</code></a> [Release] Bump version to 1.80.0-pre1 (on v1.80.x branch) (<a href="https://redirect.github.com/grpc/grpc/issues/41844">#41844</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/3ca09e4818f4362e75c9c224f1d4c2065db75a0a"><code>3ca09e4</code></a> [Python] Fix GRPC_TRACE and add test to check the GRPC_TRACE logs print (<a href="https://redirect.github.com/grpc/grpc/issues/41814">#41814</a>)</li> <li><a href="https://github.com/grpc/grpc/commit/260c6fd37c502e984836a446c5d90e4a1298036d"><code>260c6fd</code></a> [PHP] Disable php infinite recursion check for callback from Core to PHP (<a href="https://redirect.github.com/grpc/grpc/issues/41">#41</a>...</li> <li><a href="https://github.com/grpc/grpc/commit/50957c5c47de1c85637fc9dafe6d4eb4c1224f6b"><code>50957c5</code></a> [Flakiness] Delete flaky iomgr fd_conservation_posix_test and create an Event...</li> <li><a href="https://github.com/grpc/grpc/commit/e1e1d0a8150b5178d4b75e15f4856a4d825a8999"><code>e1e1d0a</code></a> [Bzlmod] Turn off bzlmod for PSM python tests. (<a href="https://redirect.github.com/grpc/grpc/issues/41810">#41810</a>)</li> <li>Additional commits viewable in <a href="https://github.com/grpc/grpc/compare/v1.78.0...v1.80.0">compare view</a></li> </ul> </details> <br /> Updates `grpcio-tools` from 1.78.0 to 1.80.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/grpc/grpc/releases">grpcio-tools's releases</a>.</em></p> <blockquote> <h2>Release v1.80.0</h2> <p>This is release 1.80.0 (<a href="https://github.com/grpc/grpc/blob/master/doc/g_stands_for.md">glimmering</a>) of gRPC Core.</p> <p>For gRPC documentation, see <a href="https://grpc.io/">grpc.io</a>. For previous ... _Description has been truncated_ Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
🤖 Free Claude Code
Use Claude Code CLI & VSCode for free. No Anthropic API key required.
A lightweight proxy that routes Claude Code's Anthropic API calls to NVIDIA NIM (40 req/min free), OpenRouter (hundreds of models), DeepSeek (direct API), LM Studio (fully local), or llama.cpp (local with Anthropic endpoints).
Quick Start · Providers · Discord Bot · Configuration · Development · Contributing
Features
| Feature | Description |
|---|---|
| Zero Cost | 40 req/min free on NVIDIA NIM. Free models on OpenRouter. Fully local with LM Studio |
| Drop-in Replacement | Set 2 env vars. No modifications to Claude Code CLI or VSCode extension needed |
| 5 Providers | NVIDIA NIM, OpenRouter, DeepSeek, LM Studio (local), llama.cpp (llama-server) |
| Per-Model Mapping | Route Opus / Sonnet / Haiku to different models and providers. Mix providers freely |
| Thinking Token Support | Parses <think> tags and reasoning_content into native Claude thinking blocks |
| Heuristic Tool Parser | Models outputting tool calls as text are auto-parsed into structured tool use |
| Request Optimization | 5 categories of trivial API calls intercepted locally, saving quota and latency |
| Smart Rate Limiting | Proactive rolling-window throttle + reactive 429 exponential backoff + optional concurrency cap |
| Discord / Telegram Bot | Remote autonomous coding with tree-based threading, session persistence, and live progress |
| Subagent Control | Task tool interception forces run_in_background=False. No runaway subagents |
| Extensible | Clean BaseProvider and MessagingPlatform ABCs. Add new providers or platforms easily |
Quick Start
Prerequisites
- Get an API key (or use LM Studio / llama.cpp locally):
- NVIDIA NIM: build.nvidia.com/settings/api-keys
- OpenRouter: openrouter.ai/keys
- DeepSeek: platform.deepseek.com/api_keys
- LM Studio: No API key needed. Run locally with LM Studio
- llama.cpp: No API key needed. Run
llama-serverlocally.
- Install Claude Code
Install uv
# Install uv (required to run the project)
pip install uv
If uv is already installed, run uv self update to get the latest version.
Clone & Configure
git clone https://github.com/Alishahryar1/free-claude-code.git
cd free-claude-code
cp .env.example .env
Choose your provider and edit .env:
NVIDIA NIM (40 req/min free, recommended)
NVIDIA_NIM_API_KEY="nvapi-your-key-here"
MODEL_OPUS=
MODEL_SONNET=
MODEL_HAIKU=
MODEL="nvidia_nim/z-ai/glm4.7" # fallback
# Global switch for provider reasoning requests and Claude thinking blocks.
ENABLE_THINKING=true
OpenRouter (hundreds of models)
OPENROUTER_API_KEY="sk-or-your-key-here"
MODEL_OPUS="open_router/deepseek/deepseek-r1-0528:free"
MODEL_SONNET="open_router/openai/gpt-oss-120b:free"
MODEL_HAIKU="open_router/stepfun/step-3.5-flash:free"
MODEL="open_router/stepfun/step-3.5-flash:free" # fallback
DeepSeek (direct API)
DEEPSEEK_API_KEY="your-deepseek-key-here"
MODEL_OPUS="deepseek/deepseek-reasoner"
MODEL_SONNET="deepseek/deepseek-chat"
MODEL_HAIKU="deepseek/deepseek-chat"
MODEL="deepseek/deepseek-chat" # fallback
LM Studio (fully local, no API key)
MODEL_OPUS="lmstudio/unsloth/MiniMax-M2.5-GGUF"
MODEL_SONNET="lmstudio/unsloth/Qwen3.5-35B-A3B-GGUF"
MODEL_HAIKU="lmstudio/unsloth/GLM-4.7-Flash-GGUF"
MODEL="lmstudio/unsloth/GLM-4.7-Flash-GGUF" # fallback
llama.cpp (fully local, no API key)
LLAMACPP_BASE_URL="http://localhost:8080/v1"
MODEL_OPUS="llamacpp/local-model"
MODEL_SONNET="llamacpp/local-model"
MODEL_HAIKU="llamacpp/local-model"
MODEL="llamacpp/local-model"
Mix providers
Each MODEL_* variable can use a different provider. MODEL is the fallback for unrecognized Claude models.
NVIDIA_NIM_API_KEY="nvapi-your-key-here"
OPENROUTER_API_KEY="sk-or-your-key-here"
MODEL_OPUS="nvidia_nim/moonshotai/kimi-k2.5"
MODEL_SONNET="open_router/deepseek/deepseek-r1-0528:free"
MODEL_HAIKU="lmstudio/unsloth/GLM-4.7-Flash-GGUF"
MODEL="nvidia_nim/z-ai/glm4.7" # fallback
Migration:
NIM_ENABLE_THINKINGwas removed in this release. Rename it toENABLE_THINKING.
Optional Authentication (restrict access to your proxy)
Set ANTHROPIC_AUTH_TOKEN in .env to require clients to authenticate:
ANTHROPIC_AUTH_TOKEN="your-secret-token-here"
How it works:
- If
ANTHROPIC_AUTH_TOKENis empty (default), no authentication is required (backward compatible) - If set, clients must provide the same token via the
ANTHROPIC_AUTH_TOKENheader - The
claude-pickscript automatically reads the token from.envif configured
Example usage:
# With authentication
ANTHROPIC_AUTH_TOKEN="your-secret-token-here" \
ANTHROPIC_BASE_URL="http://localhost:8082" claude
# claude-pick automatically uses the configured token
claude-pick
Use this feature if:
- Running the proxy on a public network
- Sharing the server with others but restricting access
- Wanting an additional layer of security
Run It
Terminal 1: Start the proxy server:
uv run uvicorn server:app --host 0.0.0.0 --port 8082
Terminal 2: Run Claude Code:
Point ANTHROPIC_BASE_URL at the proxy root URL, not http://localhost:8082/v1.
Powershell
$env:ANTHROPIC_AUTH_TOKEN="freecc"; $env:ANTHROPIC_BASE_URL="http://localhost:8082"; claude
Bash
ANTHROPIC_AUTH_TOKEN="freecc" ANTHROPIC_BASE_URL="http://localhost:8082" claude
That's it! Claude Code now uses your configured provider for free.
VSCode Extension Setup
- Start the proxy server (same as above).
- Open Settings (
Ctrl + ,) and search forclaude-code.environmentVariables. - Click Edit in settings.json and add:
"claudeCode.environmentVariables": [
{ "name": "ANTHROPIC_BASE_URL", "value": "http://localhost:8082" },
{ "name": "ANTHROPIC_AUTH_TOKEN", "value": "freecc" }
]
- Reload extensions.
- If you see the login screen: Click Anthropic Console, then authorize. The extension will start working. You may be redirected to buy credits in the browser; ignore it — the extension already works.
To switch back to Anthropic models, comment out the added block and reload extensions.
IntelliJ Extension Setup
-
Open the configuration file:
- Windows:
C:\Users\%USERNAME%\AppData\Roaming\JetBrains\acp-agents\installed.json - Linux/macOS:
~/.jetbrains/acp.json
- Windows:
-
Inside acp.registry.claude-acp, change:
"env": {}to
"env": { "ANTHROPIC_AUTH_TOKEN": "freecc", "ANTHROPIC_BASE_URL": "http://localhost:8082" } -
Start the proxy server
-
Restart IDE
Multi-Model Support (Model Picker)
claude-pick is an interactive model selector that lets you choose any model from your active provider each time you launch Claude, without editing MODEL in .env.
https://github.com/user-attachments/assets/9a33c316-90f8-4418-9650-97e7d33ad645
1. Install fzf:
brew install fzf # macOS/Linux
2. Add the alias to ~/.zshrc or ~/.bashrc:
alias claude-pick="/absolute/path/to/free-claude-code/claude-pick"
Then reload your shell (source ~/.zshrc or source ~/.bashrc) and run claude-pick.
Or use a fixed model alias (no picker needed):
alias claude-kimi='ANTHROPIC_BASE_URL="http://localhost:8082" ANTHROPIC_AUTH_TOKEN="freecc:moonshotai/kimi-k2.5" claude'
Install as a Package (no clone needed)
uv tool install git+https://github.com/Alishahryar1/free-claude-code.git
fcc-init # creates ~/.config/free-claude-code/.env from the built-in template
Edit ~/.config/free-claude-code/.env with your API keys and model names, then:
free-claude-code # starts the server
To update:
uv tool upgrade free-claude-code
How It Works
┌─────────────────┐ ┌──────────────────────┐ ┌──────────────────┐
│ Claude Code │───────>│ Free Claude Code │───────>│ LLM Provider │
│ CLI / VSCode │<───────│ Proxy (:8082) │<───────│ NIM / OR / LMS │
└─────────────────┘ └──────────────────────┘ └──────────────────┘
Anthropic API OpenAI-compatible
format (SSE) format (SSE)
- Transparent proxy: Claude Code sends standard Anthropic API requests; the proxy forwards them to your configured provider
- Per-model routing: Opus / Sonnet / Haiku requests resolve to their model-specific backend, with
MODELas fallback - Request optimization: 5 categories of trivial requests (quota probes, title generation, prefix detection, suggestions, filepath extraction) are intercepted and responded to locally without using API quota
- Format translation: Requests are translated from Anthropic format to the provider's OpenAI-compatible format and streamed back
- Thinking tokens:
<think>tags andreasoning_contentfields are converted into native Claude thinking blocks whenENABLE_THINKING=true
The proxy also exposes Claude-compatible probe routes: GET /v1/models, POST /v1/messages, POST /v1/messages/count_tokens, plus HEAD/OPTIONS support for the common probe endpoints.
Providers
| Provider | Cost | Rate Limit | Best For |
|---|---|---|---|
| NVIDIA NIM | Free | 40 req/min | Daily driver, generous free tier |
| OpenRouter | Free / Paid | Varies | Model variety, fallback options |
| DeepSeek | Usage-based | Varies | Direct access to DeepSeek chat/reasoner |
| LM Studio | Free (local) | Unlimited | Privacy, offline use, no rate limits |
| llama.cpp | Free (local) | Unlimited | Lightweight local inference engine |
Models use a prefix format: provider_prefix/model/name. An invalid prefix causes an error.
| Provider | MODEL prefix |
API Key Variable | Default Base URL |
|---|---|---|---|
| NVIDIA NIM | nvidia_nim/... |
NVIDIA_NIM_API_KEY |
integrate.api.nvidia.com/v1 |
| OpenRouter | open_router/... |
OPENROUTER_API_KEY |
openrouter.ai/api/v1 |
| DeepSeek | deepseek/... |
DEEPSEEK_API_KEY |
api.deepseek.com |
| LM Studio | lmstudio/... |
(none) | localhost:1234/v1 |
| llama.cpp | llamacpp/... |
(none) | localhost:8080/v1 |
NVIDIA NIM models
Popular models (full list in nvidia_nim_models.json):
nvidia_nim/minimaxai/minimax-m2.5nvidia_nim/qwen/qwen3.5-397b-a17bnvidia_nim/z-ai/glm5nvidia_nim/moonshotai/kimi-k2.5nvidia_nim/stepfun-ai/step-3.5-flash
Browse: build.nvidia.com · Update list: curl "https://integrate.api.nvidia.com/v1/models" > nvidia_nim_models.json
OpenRouter models
Popular free models:
open_router/arcee-ai/trinity-large-preview:freeopen_router/stepfun/step-3.5-flash:freeopen_router/deepseek/deepseek-r1-0528:freeopen_router/openai/gpt-oss-120b:free
Browse: openrouter.ai/models · Free models
DeepSeek models
DeepSeek currently exposes the direct API models:
deepseek/deepseek-chatdeepseek/deepseek-reasoner
Browse: api-docs.deepseek.com
LM Studio models
Run models locally with LM Studio. Load a model in the Chat or Developer tab, then set MODEL to its identifier.
Examples with native tool-use support:
LiquidAI/LFM2-24B-A2B-GGUFunsloth/MiniMax-M2.5-GGUFunsloth/GLM-4.7-Flash-GGUFunsloth/Qwen3.5-35B-A3B-GGUF
Browse: model.lmstudio.ai
llama.cpp models
Run models locally using llama-server. Ensure you have a tool-capable GGUF. Set MODEL to whatever arbitrary name you'd like (e.g. llamacpp/my-model), as llama-server ignores the model name when run via /v1/messages.
See the Unsloth docs for detailed instructions and capable models: https://unsloth.ai/docs/models/qwen3.5#qwen3.5-small-0.8b-2b-4b-9b
Discord Bot
Control Claude Code remotely from Discord (or Telegram). Send tasks, watch live progress, and manage multiple concurrent sessions.
Capabilities:
- Tree-based message threading: reply to a message to fork the conversation
- Session persistence across server restarts
- Live streaming of thinking tokens, tool calls, and results
- Unlimited concurrent Claude CLI sessions (concurrency controlled by
PROVIDER_MAX_CONCURRENCY) - Voice notes: send voice messages; they are transcribed and processed as regular prompts
- Commands:
/stop(cancel a task; reply to a message to stop only that task),/clear(reset all sessions, or reply to clear a branch),/stats
Setup
-
Create a Discord Bot: Go to Discord Developer Portal, create an application, add a bot, and copy the token. Enable Message Content Intent under Bot settings.
-
Edit
.env:
MESSAGING_PLATFORM="discord"
DISCORD_BOT_TOKEN="your_discord_bot_token"
ALLOWED_DISCORD_CHANNELS="123456789,987654321"
Enable Developer Mode in Discord (Settings → Advanced), then right-click a channel and "Copy ID". Comma-separate multiple channels. If empty, no channels are allowed.
- Configure the workspace (where Claude will operate):
CLAUDE_WORKSPACE="./agent_workspace"
ALLOWED_DIR="C:/Users/yourname/projects"
- Start the server:
uv run uvicorn server:app --host 0.0.0.0 --port 8082
- Invite the bot via OAuth2 URL Generator (scopes:
bot, permissions: Read Messages, Send Messages, Manage Messages, Read Message History).
Telegram
Set MESSAGING_PLATFORM=telegram and configure:
TELEGRAM_BOT_TOKEN="123456789:ABCdefGHIjklMNOpqrSTUvwxYZ"
ALLOWED_TELEGRAM_USER_ID="your_telegram_user_id"
Get a token from @BotFather; find your user ID via @userinfobot.
Voice Notes
Send voice messages on Discord or Telegram; they are transcribed and processed as regular prompts.
| Backend | Description | API Key |
|---|---|---|
| Local Whisper (default) | Hugging Face Whisper — free, offline, CUDA compatible | not required |
| NVIDIA NIM | Whisper/Parakeet models via gRPC | NVIDIA_NIM_API_KEY |
Install the voice extras:
# If you cloned the repo:
uv sync --extra voice_local # Local Whisper
uv sync --extra voice # NVIDIA NIM
uv sync --extra voice --extra voice_local # Both
# If you installed as a package (no clone):
uv tool install "free-claude-code[voice_local] @ git+https://github.com/Alishahryar1/free-claude-code.git"
uv tool install "free-claude-code[voice] @ git+https://github.com/Alishahryar1/free-claude-code.git"
uv tool install "free-claude-code[voice,voice_local] @ git+https://github.com/Alishahryar1/free-claude-code.git"
Configure via WHISPER_DEVICE (cpu | cuda | nvidia_nim) and WHISPER_MODEL. See the Configuration table for all voice variables and supported model values.
Configuration
Core
| Variable | Description | Default |
|---|---|---|
MODEL |
Fallback model (provider/model/name format; invalid prefix → error) |
nvidia_nim/z-ai/glm4.7 |
MODEL_OPUS |
Model for Claude Opus requests; empty falls back to MODEL |
empty |
MODEL_SONNET |
Model for Claude Sonnet requests; empty falls back to MODEL |
empty |
MODEL_HAIKU |
Model for Claude Haiku requests; empty falls back to MODEL |
empty |
NVIDIA_NIM_API_KEY |
NVIDIA API key | required for NIM |
ENABLE_THINKING |
Global switch for provider reasoning requests and Claude thinking blocks. Set false to hide thinking across all providers. |
true |
OPENROUTER_API_KEY |
OpenRouter API key | required for OpenRouter |
DEEPSEEK_API_KEY |
DeepSeek API key | required for DeepSeek |
LM_STUDIO_BASE_URL |
LM Studio server URL | http://localhost:1234/v1 |
LLAMACPP_BASE_URL |
llama.cpp server URL | http://localhost:8080/v1 |
NVIDIA_NIM_PROXY |
Optional proxy URL for NVIDIA NIM requests (http://... or socks5://...) |
"" |
OPENROUTER_PROXY |
Optional proxy URL for OpenRouter requests (http://... or socks5://...) |
"" |
LMSTUDIO_PROXY |
Optional proxy URL for LM Studio requests (http://... or socks5://...) |
"" |
LLAMACPP_PROXY |
Optional proxy URL for llama.cpp requests (http://... or socks5://...) |
"" |
Rate Limiting & Timeouts
| Variable | Description | Default |
|---|---|---|
PROVIDER_RATE_LIMIT |
LLM API requests per window | 40 |
PROVIDER_RATE_WINDOW |
Rate limit window (seconds) | 60 |
PROVIDER_MAX_CONCURRENCY |
Max simultaneous open provider streams | 5 |
HTTP_READ_TIMEOUT |
Read timeout for provider requests (s) | 120 |
HTTP_WRITE_TIMEOUT |
Write timeout for provider requests (s) | 10 |
HTTP_CONNECT_TIMEOUT |
Connect timeout for provider requests (s) | 2 |
Messaging & Voice
| Variable | Description | Default |
|---|---|---|
MESSAGING_PLATFORM |
discord or telegram |
discord |
DISCORD_BOT_TOKEN |
Discord bot token | "" |
ALLOWED_DISCORD_CHANNELS |
Comma-separated channel IDs (empty = none allowed) | "" |
TELEGRAM_BOT_TOKEN |
Telegram bot token | "" |
ALLOWED_TELEGRAM_USER_ID |
Allowed Telegram user ID | "" |
CLAUDE_WORKSPACE |
Directory where the agent operates | ./agent_workspace |
ALLOWED_DIR |
Allowed directories for the agent | "" |
MESSAGING_RATE_LIMIT |
Messaging messages per window | 1 |
MESSAGING_RATE_WINDOW |
Messaging window (seconds) | 1 |
VOICE_NOTE_ENABLED |
Enable voice note handling | true |
WHISPER_DEVICE |
cpu | cuda | nvidia_nim |
cpu |
WHISPER_MODEL |
Whisper model (local: tiny/base/small/medium/large-v2/large-v3/large-v3-turbo; NIM: openai/whisper-large-v3, nvidia/parakeet-ctc-1.1b-asr, etc.) |
base |
HF_TOKEN |
Hugging Face token for faster downloads (local Whisper, optional) | — |
Advanced: Request optimization flags
These are enabled by default and intercept trivial Claude Code requests locally to save API quota.
| Variable | Description | Default |
|---|---|---|
FAST_PREFIX_DETECTION |
Enable fast prefix detection | true |
ENABLE_NETWORK_PROBE_MOCK |
Mock network probe requests | true |
ENABLE_TITLE_GENERATION_SKIP |
Skip title generation requests | true |
ENABLE_SUGGESTION_MODE_SKIP |
Skip suggestion mode requests | true |
ENABLE_FILEPATH_EXTRACTION_MOCK |
Mock filepath extraction | true |
See .env.example for all supported parameters.
Development
Project Structure
free-claude-code/
├── server.py # Entry point
├── api/ # FastAPI routes, request detection, optimization handlers
├── providers/ # BaseProvider, OpenAICompatibleProvider, NIM, OpenRouter, DeepSeek, LM Studio, llamacpp
│ └── common/ # Shared utils (SSE builder, message converter, parsers, error mapping)
├── messaging/ # MessagingPlatform ABC + Discord/Telegram bots, session management
├── config/ # Settings, NIM config, logging
├── cli/ # CLI session and process management
└── tests/ # Pytest test suite
Commands
uv run ruff format # Format code
uv run ruff check # Lint
uv run ty check # Type checking
uv run pytest # Run tests
Extending
Adding an OpenAI-compatible provider (Groq, Together AI, etc.) — extend OpenAICompatibleProvider:
from providers.openai_compat import OpenAICompatibleProvider
from providers.base import ProviderConfig
class MyProvider(OpenAICompatibleProvider):
def __init__(self, config: ProviderConfig):
super().__init__(config, provider_name="MYPROVIDER",
base_url="https://api.example.com/v1", api_key=config.api_key)
Adding a fully custom provider — extend BaseProvider directly and implement stream_response().
Adding a messaging platform — extend MessagingPlatform in messaging/ and implement start(), stop(), send_message(), edit_message(), and on_message().
Contributing
- Report bugs or suggest features via Issues
- Add new LLM providers (Groq, Together AI, etc.)
- Add new messaging platforms (Slack, etc.)
- Improve test coverage
- Not accepting Docker integration PRs for now
git checkout -b my-feature
uv run ruff format && uv run ruff check && uv run ty check && uv run pytest
# Open a pull request
License
MIT License. See LICENSE for details.
Built with FastAPI, OpenAI Python SDK, discord.py, and python-telegram-bot.
