Find a file
dependabot[bot] 15415d5db3
Bump the minor-and-patch group across 1 directory with 17 updates (#173)
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 &quot;Emit <code>http.disconnect</code> on server shutdown
for streaming responses&quot; (<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 &quot;Emit <code>http.disconnect</code> on server shutdown
for streaming responses&quot; (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2913">#2913</a>)</li>
<li>Revert &quot;Explicitly start ASGI run with empty context&quot; (<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="b224045f59"><code>b224045</code></a>
Version 0.46.0 (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2918">#2918</a>)</li>
<li><a
href="7375b5bf66"><code>7375b5b</code></a>
Use <code>bytearray</code> for incoming WebSocket message buffer in
websockets-sansio (#...</li>
<li><a
href="d438fb16fe"><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="3e6b964466"><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="2c423bd82b"><code>2c423bd</code></a>
Version 0.45.0 (<a
href="https://redirect.github.com/Kludex/uvicorn/issues/2914">#2914</a>)</li>
<li><a
href="7f027f8e25"><code>7f027f8</code></a>
Revert &quot;Emit <code>http.disconnect</code> on server shutdown for
streaming responses&quot; (#...</li>
<li><a
href="73a80c3cc8"><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="45c0b568d3"><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="850d92656d"><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="fdcacb4b83"><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="9e9a11132c"><code>9e9a111</code></a>
Fix backported test</li>
<li><a
href="1ec8c6aa0c"><code>1ec8c6a</code></a>
Prepare release v2.13.3</li>
<li><a
href="fb4f204443"><code>fb4f204</code></a>
Handle <code>AttributeError</code> subclasses with
<code>from_attributes</code></li>
<li><a
href="ca3ddd1149"><code>ca3ddd1</code></a>
Prepare release v2.13.2</li>
<li><a
href="000e823a3a"><code>000e823</code></a>
Fix <code>ValidationInfo.field_name</code> missing with
<code>model_validate_json()</code></li>
<li><a
href="d45d8be3ff"><code>d45d8be</code></a>
Prepare release 2.13.1</li>
<li><a
href="54aca609ce"><code>54aca60</code></a>
Fix <code>ValidationInfo.data</code> missing with
<code>model_validate_json()</code></li>
<li><a
href="46bf4fa648"><code>46bf4fa</code></a>
Fix Pydantic release workflow (<a
href="https://redirect.github.com/pydantic/pydantic/issues/13067">#13067</a>)</li>
<li><a
href="1b359edab0"><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="b1bf19445d"><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="790c5c0299">#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="36004e0e34"><code>36004e0</code></a>
Bump version: 1.2.1 → 1.2.2</li>
<li><a
href="eb202520e5"><code>eb20252</code></a>
docs: update changelog for v1.2.2</li>
<li><a
href="790c5c0299"><code>790c5c0</code></a>
Merge commit from fork</li>
<li><a
href="43340da220"><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="09d7cee324"><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="c8de2887c0"><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="7bd9e3dbfe"><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="1baaf04f33"><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="4a22cf8993"><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="e2e8e776b4"><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="5a41d2ba85"><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="108bfaf888"><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="3fd6932c2d"><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="22c31b187a"><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="dd8c60fa76"><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="5bc0f4f5b4"><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="80f3ccdcfa"><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="537693f082"><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="72e8ded8cf"><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="a48b08fb20"><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="dfd1144b22"><code>dfd1144</code></a>
Version bump to v2.7.1</li>
<li><a
href="64fcfe9333"><code>64fcfe9</code></a>
Add changelog for v2.7.1</li>
<li><a
href="9cf04aec3c"><code>9cf04ae</code></a>
Add warning and raise if davey is not installed</li>
<li><a
href="92c715e388"><code>92c715e</code></a>
Unpin strict davey dependency</li>
<li><a
href="2383467ccd"><code>2383467</code></a>
Show davey version in --version output</li>
<li><a
href="699a97f3eb"><code>699a97f</code></a>
Fix aiohttp websocket timeout deprecation warning</li>
<li><a
href="b01de35fa2"><code>b01de35</code></a>
Remove old workaround to /callback not having a return type</li>
<li><a
href="616137875b"><code>6161378</code></a>
Fix memory leak with the view store when removing items</li>
<li><a
href="9798e5921a"><code>9798e59</code></a>
Version bump for development</li>
<li><a
href="5df6e2230a"><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="8916beeecc"><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="39e551c091"><code>39e551c</code></a>
Fix CLI descriptions lost under <code>python -OO</code> by falling back
to `json_schema_...</li>
<li><a
href="9ed7f48ea2"><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="617c690fb1"><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="577c05f7e8"><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="2355bc54e9"><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="16bd6fd230"><code>16bd6fd</code></a>
Introduce zizmor (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/838">#838</a>)</li>
<li><a
href="df8b239fe0"><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="c5401a2799"><code>c5401a2</code></a>
Introduce yamlfmt (<a
href="https://redirect.github.com/pydantic/pydantic-settings/issues/836">#836</a>)</li>
<li><a
href="953e28e6cf"><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="60de21d1fc">60de21d</a>)</li>
<li><strong>api:</strong> add OAuthErrorCode type (<a
href="0c8d2c3b44">0c8d2c3</a>)</li>
<li><strong>client:</strong> add event handler implementation for
websockets (<a
href="0280d0568f">0280d05</a>)</li>
<li><strong>client:</strong> allow enqueuing to websockets even when not
connected (<a
href="67aa20e69b">67aa20e</a>)</li>
<li><strong>client:</strong> support reconnection in websockets (<a
href="eb72a953ea">eb72a95</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>ensure file data are only sent as 1 parameter (<a
href="c0c2ecd0f6">c0c2ecd</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>improve examples (<a
href="84712fa0f0">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="3e5834efb3">3e5834e</a>)</li>
<li><strong>api:</strong> add web_search_call.results to
ResponseIncludable type (<a
href="ffd8741dd3">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="22fe7228d4">22fe722</a>)</li>
<li><strong>client:</strong> support sending raw data over websockets
(<a
href="f1bc52ef64">f1bc52e</a>)</li>
<li><strong>internal:</strong> implement indices array format for query
and form serialization (<a
href="49194cfa71">49194cf</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> preserve hardcoded query params when
merging with user params (<a
href="92e109c3d9">92e109c</a>)</li>
<li><strong>types:</strong> remove web_search_call.results from
ResponseIncludable (<a
href="d3cc40165c">d3cc401</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>tests:</strong> bump steady to v0.20.1 (<a
href="d60e2eea7f">d60e2ee</a>)</li>
<li><strong>tests:</strong> bump steady to v0.20.2 (<a
href="6508d47433">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="60de21d1fc">60de21d</a>)</li>
<li><strong>api:</strong> add OAuthErrorCode type (<a
href="0c8d2c3b44">0c8d2c3</a>)</li>
<li><strong>client:</strong> add event handler implementation for
websockets (<a
href="0280d0568f">0280d05</a>)</li>
<li><strong>client:</strong> allow enqueuing to websockets even when not
connected (<a
href="67aa20e69b">67aa20e</a>)</li>
<li><strong>client:</strong> support reconnection in websockets (<a
href="eb72a953ea">eb72a95</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li>ensure file data are only sent as 1 parameter (<a
href="c0c2ecd0f6">c0c2ecd</a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li>improve examples (<a
href="84712fa0f0">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="3e5834efb3">3e5834e</a>)</li>
<li><strong>api:</strong> add web_search_call.results to
ResponseIncludable type (<a
href="ffd8741dd3">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="22fe7228d4">22fe722</a>)</li>
<li><strong>client:</strong> support sending raw data over websockets
(<a
href="f1bc52ef64">f1bc52e</a>)</li>
<li><strong>internal:</strong> implement indices array format for query
and form serialization (<a
href="49194cfa71">49194cf</a>)</li>
</ul>
<h3>Bug Fixes</h3>
<ul>
<li><strong>client:</strong> preserve hardcoded query params when
merging with user params (<a
href="92e109c3d9">92e109c</a>)</li>
<li><strong>types:</strong> remove web_search_call.results from
ResponseIncludable (<a
href="d3cc40165c">d3cc401</a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><strong>tests:</strong> bump steady to v0.20.1 (<a
href="d60e2eea7f">d60e2ee</a>)</li>
<li><strong>tests:</strong> bump steady to v0.20.2 (<a
href="6508d47433">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="a9e7ebd505">a9e7ebd</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e507a4ebee"><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="750354ed65"><code>750354e</code></a>
release: 2.31.0</li>
<li><a
href="5be95364a5"><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="f1fd4fae03"><code>f1fd4fa</code></a>
feat(client): support sending raw data over websockets</li>
<li><a
href="73ea2f75ba"><code>73ea2f7</code></a>
fix(client): preserve hardcoded query params when merging with user
params</li>
<li><a
href="454b2575d5"><code>454b257</code></a>
feat(api): add web_search_call.results to ResponseIncludable type</li>
<li><a
href="de2c7b1d08"><code>de2c7b1</code></a>
chore(tests): bump steady to v0.20.2</li>
<li><a
href="6efca95a76"><code>6efca95</code></a>
chore(tests): bump steady to v0.20.1</li>
<li><a
href="2076d85f92"><code>2076d85</code></a>
feat(api): add phase field to conversations message</li>
<li><a
href="c0c59afa39"><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 &quot;[Python] Align GRPC_ENABLE_FORK_SUPPORT env defaults in
core and python (<a
href="https://redirect.github.com/grpc/grpc/issues/41455">#41455</a>)&quot;.
(<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="f5e2d6e856"><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="938cfecaeb"><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="91778bec66"><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="f10b9f2693"><code>f10b9f2</code></a>
[bzlmod] upgrade rules_swift to avoid BCR CI breakage on Windows with
bazel 7...</li>
<li><a
href="be4c1c55b6"><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="a71df73eaf"><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="3ca09e4818"><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="260c6fd37c"><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="50957c5c47"><code>50957c5</code></a>
[Flakiness] Delete flaky iomgr fd_conservation_posix_test and create an
Event...</li>
<li><a
href="e1e1d0a815"><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>
2026-04-24 16:35:13 -07:00
.github Bump astral-sh/setup-uv from 7.3.0 to 8.1.0 (#172) 2026-04-24 16:23:59 -07:00
api Warn on inherited auth token 2026-04-24 00:42:33 -07:00
cli perf: use O(1) reverse mapping in CLISessionManager.remove_session 2026-03-08 07:17:51 -07:00
config Treat empty model overrides as fallback 2026-04-24 13:58:25 -07:00
messaging Remove over-engineering: drop tree_queue setter, _set_connected(), fi… (#63) 2026-03-01 12:34:00 -08:00
providers Revert "Add per-model thinking toggles" 2026-04-24 00:26:15 -07:00
smoke Add local live smoke test suite (#148) 2026-04-23 19:06:09 -07:00
tests Treat empty model overrides as fallback 2026-04-24 13:58:25 -07:00
.env.example Treat empty model overrides as fallback 2026-04-24 13:58:25 -07:00
.gitignore Add local live smoke test suite (#148) 2026-04-23 19:06:09 -07:00
.python-version Set python version to 3.14.0 2026-03-02 05:13:04 -08:00
AGENTS.md Update AGENTS.md 2026-03-01 23:45:32 -08:00
claude-pick Implement optional authentication (Anthropic style) (#80) 2026-03-27 11:11:47 -07:00
CLAUDE.md Updated Claude.md to point to AGENTS.md 2026-03-08 12:19:18 -07:00
LICENSE added license 2026-01-28 13:36:34 -08:00
nvidia_nim_models.json updated nvidia nim models list 2026-04-18 16:43:51 -07:00
pic.png Updated pic 2026-02-13 18:18:25 -08:00
pyproject.toml Bump the minor-and-patch group across 1 directory with 17 updates (#173) 2026-04-24 16:35:13 -07:00
README.md Treat empty model overrides as fallback 2026-04-24 13:58:25 -07:00
server.py new linter rules and fixes 2026-02-18 04:13:41 -08:00
uv.lock Bump the minor-and-patch group across 1 directory with 17 updates (#173) 2026-04-24 16:35:13 -07:00

🤖 Free Claude Code

Use Claude Code CLI & VSCode for free. No Anthropic API key required.

License: MIT Python 3.14 uv Tested with Pytest Type checking: Ty Code style: Ruff Logging: Loguru

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


Free Claude Code in action

Claude Code running via NVIDIA NIM, completely free

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

  1. Get an API key (or use LM Studio / llama.cpp locally):
  2. 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_THINKING was removed in this release. Rename it to ENABLE_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_TOKEN is empty (default), no authentication is required (backward compatible)
  • If set, clients must provide the same token via the ANTHROPIC_AUTH_TOKEN header
  • The claude-pick script automatically reads the token from .env if 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
  1. Start the proxy server (same as above).
  2. Open Settings (Ctrl + ,) and search for claude-code.environmentVariables.
  3. Click Edit in settings.json and add:
"claudeCode.environmentVariables": [
  { "name": "ANTHROPIC_BASE_URL", "value": "http://localhost:8082" },
  { "name": "ANTHROPIC_AUTH_TOKEN", "value": "freecc" }
]
  1. Reload extensions.
  2. 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
  1. Open the configuration file:

    • Windows: C:\Users\%USERNAME%\AppData\Roaming\JetBrains\acp-agents\installed.json
    • Linux/macOS: ~/.jetbrains/acp.json
  2. Inside acp.registry.claude-acp, change:

    "env": {}
    

    to

    "env": {
    "ANTHROPIC_AUTH_TOKEN": "freecc",
    "ANTHROPIC_BASE_URL": "http://localhost:8082"
    }
    
  3. Start the proxy server

  4. 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 MODEL as 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 and reasoning_content fields are converted into native Claude thinking blocks when ENABLE_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.5
  • nvidia_nim/qwen/qwen3.5-397b-a17b
  • nvidia_nim/z-ai/glm5
  • nvidia_nim/moonshotai/kimi-k2.5
  • nvidia_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:free
  • open_router/stepfun/step-3.5-flash:free
  • open_router/deepseek/deepseek-r1-0528:free
  • open_router/openai/gpt-oss-120b:free

Browse: openrouter.ai/models · Free models

DeepSeek models

DeepSeek currently exposes the direct API models:

  • deepseek/deepseek-chat
  • deepseek/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-GGUF
  • unsloth/MiniMax-M2.5-GGUF
  • unsloth/GLM-4.7-Flash-GGUF
  • unsloth/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

  1. 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.

  2. 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.

  1. Configure the workspace (where Claude will operate):
CLAUDE_WORKSPACE="./agent_workspace"
ALLOWED_DIR="C:/Users/yourname/projects"
  1. Start the server:
uv run uvicorn server:app --host 0.0.0.0 --port 8082
  1. 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.