v1.98.1 - Claude Code on Bedrock GPT and Grok, End-User Budget Resets
Deploy this version​
- Docker
- Pip
docker run \
-e LITELLM_MASTER_KEY=sk-<paste-a-long-random-key> \
-e DATABASE_URL=postgresql://<user>:<password>@<host>:5432/<dbname> \
-e STORE_MODEL_IN_DB=True \
-p 4000:4000 \
docker.litellm.ai/berriai/litellm:1.98.1
pip install litellm==1.98.1
This release is published as ghcr.io/berriai/litellm:v1.98.1. See the GitHub release and the full releases page
v1.98.1 is a patch release on top of v1.98.0. It lets Claude Code switch to Bedrock OpenAI GPT and xAI Grok models, fixes end-user budget resets, and maps GPT-6 model names to the GPT-5 request family. There are no new database migrations or breaking changes. The v1.98.1 tag points at b521c4c
Claude Code works with Bedrock OpenAI GPT and xAI Grok models​
Claude Code sends a max_tokens=1 probe when you switch models with /model, and Bedrock OpenAI GPT and xAI Grok models reject anything under 16, so the switch failed with a 400. The Bedrock Converse route now raises maxTokens to 16 for openai.gpt-* and xai.grok-* models, and other Bedrock models keep the value they were sent
Once the switch worked, the first message on a GPT-6 model such as us.openai.gpt-6-astra still failed with Unknown parameter: 'thinking'. The Converse reasoning gate now recognizes any openai.gpt-<digit> model, so reasoning_effort maps to reasoning.effort and Claude Code's thinking block is dropped for these models instead of being forwarded
End-user budget resets​
A shared budget with more than about 32,700 end users never reset, because the reset job listed every end user by id in one statement and Postgres rejected it, so those end users stayed blocked. The job now resets end users by their budget link. A reset also zeroes the cached end-user spend counter in memory and Redis, so requests on every replica stop getting a 429 once the window rolls over instead of after the cache expires
GPT-6 model names use the GPT-5 request family​
OpenAI and Azure configs now treat gpt-6 model names like gpt-5, so they get the same request parameter handling
Docker images pin Python 3.13​
The images installed an unpinned python3, which now resolves to Python 3.14, where the pinned uvloop no longer builds. Every image on this line, the migrations image included, now installs Python 3.13. The base image also moves to a wolfi-base with glibc 2.44, and the lockfile refreshes anyio, gitpython, pypdf, restrictedpython, soupsieve, sqlparse and tornado
What's Changed​
- fix(bedrock): clamp maxTokens to the 16-token minimum for OpenAI GPT and xAI Grok models on Converse - PR #41870
- fix(bedrock): match any
openai.gpt-<digit>model in the Converse reasoning gate -9f48cca - fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 -
1af2cad - fix(docker): bump wolfi-base for glibc 2.44 and pin apk python to 3.13 in migrations image -
0c0dda9 - fix: treat gpt-6 names as the gpt-5 request family in OpenAI and Azure configs - PR #39631
- fix(proxy): invalidate end-user spend counter and cache on budget reset - PR #39729
- fix(reset_budget_job): reset end users by budget link, not by user id - PR #40639
Full Changelog​
https://github.com/BerriAI/litellm/compare/v1.98.0...v1.98.1