ModelBump
Dependabot for LLM models. ModelBump finds the AI models your code depends on and warns you before a provider retires them. Later versions will also test the old model against its replacement, repair prompts that regress, and open the upgrade pull request for you.
Status:
v0.1.0ships the first stage, Scan, as a command-line tool and a GitHub Action. The other stages are still being built; see the roadmap.
The problem
Apps built on hosted LLMs (OpenAI, Anthropic, Google, ...) depend on specific model versions, and providers retire those versions on a schedule. When a model is retired, an app either breaks outright or keeps running while quietly producing worse answers, because prompts tuned for the old model don't transfer cleanly to the new one.
A 2026 study of 22,555 migration commits across 17,703 open-source repositories found that:
- 82% of migrations happened after the old model was already shut down (our own re-check on a larger dataset finds a smaller share, but still more than half),
- model identifiers were hard-coded in 94% of migrating apps, and
- only 4% of migrations came with any evaluation suite.
Source: H. L. Kim, "When the Model Retires: An Empirical Study of LLM Migration in Open-Source Applications", arXiv:2609.31288, 2026.
Install and scan
Requires Python 3.12 or newer.
pip install modelbump
modelbump scan .
Or run it once without installing, with uv:
uvx modelbump scan .
Each line of the report gives the file, line and column, the model ID, its status (OK, RETIRING_SOON, DEPRECATED, RETIRED or UNKNOWN), the shutdown date with the suggested replacement, and where the ID sits (a call argument, an assignment, a config value, a comment, ...).
Useful options:
| Option | What it does |
|---|---|
--fail-within 30 |
Exit with code 1 if a model is retired or shuts down within 30 days (for CI) |
--skip-comments |
Leave out IDs that only describe a model: comments, docstrings, sentences, price tables |
--skip-tests |
Leave out test files and test folders |
--exclude PATTERN |
Skip matching paths, e.g. --exclude '*.ipynb' (repeat for more) |
--format json / --format sarif |
Machine-readable reports; SARIF shows up in GitHub code scanning |
Run modelbump scan --help for the rest.
GitHub Action
name: ModelBump
on:
pull_request:
schedule:
- cron: "0 6 * * 1" # every Monday, to catch new retirement notices
permissions:
contents: read
security-events: write # to upload findings to code scanning
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: imhammad/modelbump@v0.1.0
with:
fail-within: "30"
skip-comments: "true"
All inputs are listed in the scanner documentation.
How well the scanner works
We ran the scanner on 100 real projects, each at the commit just before it moved off a retired model, and labelled a sample of 250 findings by hand (evaluation details):
| Setting | Finds the old model's lines (recall) | Findings that are real dependencies (precision) |
|---|---|---|
| Default | 97.7% | 47.9% |
--skip-comments --skip-tests |
82.0% | 75.2% |
Replayed on those 100 projects, the scanner flagged 96 before they migrated. The default is tuned not to miss anything; the two flags trade some misses for a much quieter report.
The plan
| Stage | What it does | Status |
|---|---|---|
| Scan | Static analysis finds every model ID in your code and config, checks it against a registry of provider retirement dates, and fails CI before the shutdown date. | Available (v0.1.0) |
| Test | Builds an app-specific regression suite from your prompts, tests, and (optionally) logs. | Planned |
| Compare | Runs old vs. new model with sequential statistical tests, separating real regressions from normal LLM randomness, within a cost budget. | Planned |
| Repair | Searches for prompt edits that fix regressions without breaking anything that already worked. | Planned |
| Bump | Opens a ready-to-review PR with the new model, repaired prompts, the regression suite, and an evidence report. | Planned |
Development
Requires uv.
git clone https://github.com/imhammad/modelbump.git
cd modelbump
uv sync
uv run modelbump --version
uv run pytest
Roadmap
- Phase 0: Foundations: packaging, CI, pre-commit, branch protection
- Phase 1: Migration dataset + model retirement registry
- Phase 2: Scanner + GitHub Action (
v0.1.0) - Phase 3: Model runner with caching and cost budgets
- Phase 4: Statistical comparison engine
- Phase 5: Regression suite synthesis + LLM-judge calibration
- Phase 6: Prompt repair
- Phase 7: End-to-end
modelbump bump+v1.0.0
Research
ModelBump is also a research project: an empirical study of how open-source LLM apps migrate off retired models (paper in preparation), and later a paper on the tool itself. Research notes, protocols and results are in the research section of the docs.
License
Metadata
Release files for modelbump 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| modelbump-0.2.0.tar.gz | 39.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| modelbump-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.6 kB
Release files / modelbump-0.2.0.tar.gz
| Download URL | modelbump-0.2.0.tar.gz |
|---|---|
| Size | 39.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7bfc36039f43288269fb900892294c7ad2ebd838417e546ab8d29e72fc4044da
|
|
BLAKE2b-256 checksum How to use checksums |
de45bf31aa8aad8d4ea5fea7e11f254b7a6a133b3636f119dc87555e38450d11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.
Transparency logRelease files / modelbump-0.2.0-py3-none-any.whl
| Download URL | modelbump-0.2.0-py3-none-any.whl |
|---|---|
| Size | 47.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f602c46095dcd63e6030242c2dcb3a08d854b7208f98e42eb3326421df88360d
|
|
BLAKE2b-256 checksum How to use checksums |
d5ffd329c8eeadb540360ad6f39d82c3105478c07f6c01cc71e107ab0abf76c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.
Transparency logSecurity for modelbump 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for modelbump-0.2.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.