Automated upgrade of `onyx-devtools` to `0.13.14`, published by [this
release
run](https://github.com/onyx-dot-app/onyx/actions/runs/39525145296).
Updates the `ods` dependency group in `pyproject.toml`, then regenerates
`uv.lock` and `backend/requirements/dev.txt` to match.
Generated by the Release Devtools workflow.
<!-- This is an auto-generated description by cubic. -->
---
## Summary by cubic
Upgrades `onyx-devtools` from 0.13.11 to 0.13.14 in the `ods` dependency
group.
Pins the new version in `pyproject.toml` and regenerates `uv.lock` and
`backend/requirements/dev.txt` to match.
<sup>Written for commit b2d6c4fcb4.
Summary will update on new commits.</sup>
<a
href="https://cubic.dev/pr/onyx-dot-app/onyx/pull/16360?utm_source=github"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img
alt="View guided diff"
src="https://www.cubic.dev/buttons/review-in-cubic-light.svg"></picture></a>
<a
href="https://www.cubic.dev/action/auto-fix/pr/onyx-dot-app/onyx/16360?returnTo=https%3A%2F%2Fgithub.com%2Fonyx-dot-app%2Fonyx%2Fpull%2F16360&source=description"
target="_blank" rel="noopener noreferrer"
data-no-image-dialog="true"><picture><source
media="(prefers-color-scheme: dark)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-dark.svg"><source
media="(prefers-color-scheme: light)"
srcset="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"><img
alt="Turn on auto-fix"
src="https://www.cubic.dev/buttons/turn-on-auto-fix-light.svg"></picture></a>
<!-- End of auto-generated description by cubic. -->
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
<!-- coderabbit-ai-generated:v1 -->
## Summary by CodeRabbit
* **Chores**
* Updated development tooling packages to version 0.13.14.
* Refreshed the associated package integrity hashes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Co-authored-by: onyx-cherry-pick[bot] <285052878+onyx-cherry-pick[bot]@users.noreply.github.com>
Requirements Management with uv
This directory is kept for backwards compatibility with existing Docker builds.
Overview
We use pyproject.toml as the single source of truth for all dependencies, with a unified uv.lock file for resolved versions.
Why this approach?
- ✅ Single source of truth: All dependencies defined in
pyproject.toml - ✅ No duplication: Dependencies shared across environments are only listed once
- ✅ Unified lock file: All versions resolved together - guaranteed compatible
- ✅ Fast:
uvis 10-100x faster than pip-tools - ✅ Reproducible builds: Lock file pins all transitive dependencies
- ✅ Easy updates: Change
pyproject.toml, commit, done!
File Structure
pyproject.toml # SOURCE OF TRUTH - edit this!
uv.lock # Unified lock file (all versions)
backend/
└── requirements/ # Legacy .txt files (for Docker compat)
├── default.txt
├── dev.txt
├── ee.txt
├── model_server.txt
└── combined.txt
Workflow
1. Installing uv
If you don't have uv installed, follow the uv installation guide. On macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
2. Adding/Updating Dependencies
DO NOT edit the .txt files directly! Instead:
- Edit
pyproject.toml - Add/update/remove dependencies in the appropriate section:
[project.dependencies]for shared dependencies (used by both backend and model_server)[dependency-groups.backend]for backend-only dependencies[dependency-groups.dev]for dev tools[dependency-groups.ee]for EE features[dependency-groups.model_server]for model_server-only dependencies (ML packages)
- Commit your changes - pre-commit hooks will automatically regenerate the lock file and requirements
3. Generating Lock File and Requirements
The lock file (uv.lock) and requirements files are automatically generated by pre-commit hooks when you commit changes to pyproject.toml:
uv-lock: Runsuv lockto resolve dependencies intouv.lockuv-export: Exports requirements to the.txtfiles in this directory
To manually regenerate:
uv lock
uv export --no-emit-project --no-default-groups --group backend -o backend/requirements/default.txt
uv export --no-emit-project --no-default-groups --group dev -o backend/requirements/dev.txt
uv export --no-emit-project --no-default-groups --group ee -o backend/requirements/ee.txt
uv export --no-emit-project --no-default-groups --group model_server -o backend/requirements/model_server.txt
The exported files include --hash=sha256:... entries for every pinned
artifact. Docker builds and CI install with uv pip install --require-hashes,
which refuses to install any package whose version or artifact hash is not
listed — so installs can only land on versions resolved into uv.lock.
4. Installing Dependencies
If enabled, all packages are installed automatically by the uv-sync pre-commit hook when changing
branches or pulling new changes.
# For development (most common) — installs shared + backend + dev + ee
uv sync
# For backend production only (shared + backend dependencies)
uv sync --no-default-groups --group backend
# For model server (shared + model_server, NO backend deps!)
uv sync --no-default-groups --group model_server
5. Upgrading Dependencies
Upgrade specific packages:
- Edit version in pyproject.toml, then commit
- Pre-commit hooks will automatically regenerate lock and requirements files
Review changes carefully before committing!