chore: Update Python dependencies#1929
Conversation
Dependency ReviewThe following issues were found:
License Issuesuv.lock
OpenSSF ScorecardScorecard details
Scanned Files
|
Merging this PR will improve performance by 18.48%
|
| Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|
| ⚡ | test_rate_efficiency |
19.7 µs | 16.5 µs | +19.74% |
| ⚡ | test_coerce_row_timestamp_datetime |
27.6 µs | 24.1 µs | +14.44% |
| ⚡ | test_coerce_row_timestamp_string |
24.2 µs | 20.9 µs | +15.77% |
| ⚡ | test_format_iso_utc_single |
34.3 µs | 30.8 µs | +11.2% |
| ⚡ | test_normalize_utc |
15.8 µs | 12.4 µs | +28.01% |
| ⚡ | test_parse_iso_utc_single |
20.2 µs | 16.9 µs | +19.82% |
| ⚡ | test_compute_cost_per_1k |
22.5 µs | 19.2 µs | +17.1% |
| ⚡ | test_classify_severity |
18.2 µs | 14.9 µs | +22.52% |
Tip
Curious why this is faster? Comment @codspeedbot explain why this is faster on this PR, or directly use the CodSpeed MCP with your agent.
Comparing renovate/python (0222233) with main (c29eb32)
Footnotes
-
21 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1929 +/- ##
=======================================
Coverage 85.14% 85.15%
=======================================
Files 1846 1846
Lines 107752 107752
Branches 9287 9287
=======================================
+ Hits 91749 91757 +8
+ Misses 13756 13751 -5
+ Partials 2247 2244 -3 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
8454ab0 to
0222233
Compare
Aureliolo
left a comment
There was a problem hiding this comment.
Decision: 19 Python dependency bumps (2 major: mypy 1.20.2 -> 2.1.0, pytest-codspeed 4.5 -> 5.0.2; 1 transitively-breaking minor: litellm 1.83.14 -> 1.84.0); CI green and local uv run mypy src/ tests/ on the PR branch passes with strict mode (3816 source files, no issues).
Changelog digest:
- Covered mypy 2.0 + 2.1 (full CHANGELOG read), pytest-codspeed 4.5 -> 5.0.2 (cffi removed in favour of native extension), litellm 1.83.14 -> 1.84.0 (full release notes), logfire 4.32.1 -> 4.33.0, sentence-transformers 5.4.1 -> 5.5.0, torch 2.11 -> 2.12, plus ruff/hypothesis/faker/commitizen/sqlglot/zensical/zizmor-pre-commit/cedarpy/mkdocs-redirects/types-pyyaml/ast-pre-commit patches.
- Relevant: mypy 2.0
--strict-bytes+--local-partial-typesdefaults validated by local strict run + CI Type Check; pytest-codspeed 5.0 native-extension switch validated by CodSpeed benchmark job SUCCESS; litellm 1.84 transitive pin constraints (openai>=2.33, jinja2>=3.1.6, jsonschema>=4.26, aiohttp>=3.13.5, click>=8.3, pydantic>=2.13) all satisfied by existing [tool.uv].constraint-dependencies overrides in pyproject.toml; zizmor-pre-commit 1.24 -> 1.25.2 aligns local hook with CI action being bumped in #1928. - Reviewed but not relevant: mypy 2.0 drop of
--python-version 3.9(we're on 3.14); mkdocs-redirects deprecation warning for bare mkdocs executable (we use zensical); pytest-codspeed free-threaded wheels (not yet enabled in our test matrix).
Follow-ups: separate issues for mypy --num-workers N parallel adoption (CHANGELOG claims up to 5x speedup) and sentence-transformers per-call processing_kwargs override.
#1942) ## Summary While verifying LiteLLM 1.84.0 compatibility (follow-up to PR #1929), discovered that `LiteLLMDriver._build_capabilities` was reading the phantom key `supports_streaming` from `litellm.get_model_info()` results. LiteLLM exposes that capability under `supports_native_streaming` instead, and has done so for at least 1.83.14 as well, so this is a pre-existing latent bug surfaced (not caused) by the version bump. The fallback `True` masked the issue: every model silently reported `supports_streaming=True` regardless of what LiteLLM actually said. After this fix, the driver honors LiteLLM's real answer; for models where LiteLLM reports `None` (the unknown case, common for flagship models like `gpt-4o-mini`), we still default to `True` to match LiteLLM's own `litellm.supports_native_streaming()` helper convention. ## Changes - `src/synthorg/providers/drivers/litellm_driver.py`: read `supports_native_streaming`; treat `None` as unknown (defaults to `True`). - `tests/unit/providers/drivers/test_litellm_driver.py`: rename two existing mock-dict keys to the real LiteLLM key; collapse three near-identical streaming-capability tests into one `@pytest.mark.parametrize`-d test with three cases (`streaming_false`, `tools_false`, `streaming_none_defaults_true`). ## Test plan - `uv run python -m pytest tests/unit/providers/drivers/test_litellm_driver.py -n0` (49 passed in 0.5s). - `uv run python -m pytest tests/ -m unit -k "litellm or provider or cost or capability or rate_limit"` (2266 passed in 47s). - `uv run python -m pytest tests/ -m integration -k "litellm or provider or cost"` (113 passed, 1 SQLite-only skip in 88s). - `uv run ruff check src/ tests/` and `uv run ruff format --check src/ tests/` clean. - `uv run mypy src/ tests/` clean (3816 source files, strict). - `scripts/check_currency_aggregation_invariant.py` and `scripts/check_provider_complete_chokepoint.py` both exit 0. The full `pytest -n 8` run reported 3 worker-crash failures + 8 errors caused by the known Windows + Python 3.14 + testcontainers ProactorEventLoop teardown race documented in `CLAUDE.md`. These are pre-existing on `origin/main` and unrelated to this change; all crashed tests pass when run serially (`-n0`). ## Review coverage Pre-reviewed by 7 agents (`code-reviewer`, `python-reviewer`, `docs-consistency`, `comment-quality-rot`, `conventions-enforcer`, `test-quality-reviewer`, plus `logging-audit` + `resilience-audit` + 4 mini-pass agents bundled). One Medium-severity SUGGESTION addressed (parametrize refactor of streaming tests). No Critical or Major findings. ## Context No linked issue. This branch is a follow-up verification to PR #1929 (LiteLLM 1.83.14 -> 1.84.0 bump, merged green). Every v1.84.0 breaking change in the upstream release notes is either scoped to the LiteLLM proxy server (which we do not run) or affects an SDK surface we do not consume; the only real issue surfaced by the verification sweep is the phantom-key bug fixed here.
<!-- HIGHLIGHTS_START --> ## Highlights > _AI-generated summary (model: `openai/gpt-4.1-mini` via GitHub Models). Commit-based changelog below._ ### What you'll notice - Frontend WP-6 update with UX polish improves user interface and workflow. - Dashboard and training endpoint improvements enhance observability and dispatch behavior. - Web storybook now supports change detection for more responsive UI interactions. - Git hooks now isolated per worktree for cleaner repository management. - Providers automatically detect native streaming support in Litellm models. ### What's new - Added a new pipeline to convert Pydantic DTOs to TypeScript for better front-end compatibility. ### Under the hood - Refactored settings to three precedence categories, removing YAML tier for simpler configuration. - Completed RootConfig mirror coverage for enhanced configuration consistency. - Adopted API conventions with better query performance and forbidden extra fields for stricter validation. - Improved persistence, layer discipline, and restart safety in core work packages. - CI updated with split test jobs and tightened coverage gates for better test quality. - Switched to direct Trivy binary for security scans, removing previous Trivy action dependency. - Enhanced memory management with per-call processing options and better observability during speech-to-text encoding. - Various dependency updates for Python, infrastructure, and lock files maintain security and stability. - Removed TypeScript DTO type-tightening overlays to simplify type management. - Codebase audit tightened skill sets to prevent false positivity in class detection by 2026. <!-- HIGHLIGHTS_END --> :robot: I have created a release *beep* *boop* --- ## [0.8.5](v0.8.4...v0.8.5) (2026-05-17) ### Features * **codegen:** pydantic-to-typescript DTO pipeline + parity gate (closes [#1889](#1889)) ([#1909](#1909)) ([0265ef5](0265ef5)) * **storybook:** enable changeDetection + trim web/CLAUDE.md ([#1939](#1939)) ([3b1f4c0](3b1f4c0)) * **web,setup:** WP-6 frontend + UX polish ([#1941](#1941)) ([d9ca76d](d9ca76d)) ### Bug Fixes * correct invalid git for-each-ref syntax in post-merge-cleanup skill ([#1946](#1946)) ([69a1649](69a1649)) * dashboard polish, training endpoint dispatch, and observability cleanup ([#1911](#1911)) ([b61e9e8](b61e9e8)) * per-worktree git-hook isolation + hookify gate migration + MSW drift fix ([#1949](#1949)) ([e3f8495](e3f8495)) * **providers:** read supports_native_streaming from litellm model info ([#1942](#1942)) ([60364ca](60364ca)) * security and audit coverage (closes [#1883](#1883)) ([#1904](#1904)) ([d8ebf55](d8ebf55)) ### Performance * **ci:** mypy --num-workers=4 + enable ruff TID255 ([#1944](#1944)) ([484c1d3](484c1d3)) ### Refactoring * **ci:** drop aquasecurity/trivy-action, use direct trivy binary ([#1940](#1940)) ([df1f946](df1f946)) * **memory:** per-call processing_kwargs + observability for ST encode ([#1943](#1943)) ([3aa9d20](3aa9d20)) * Phase 7 follow-up — complete RootConfig mirror coverage (closes [#1907](#1907)) ([#1914](#1914)) ([605500b](605500b)) * **settings:** collapse precedence to three categories; drop YAML tier (closes [#1890](#1890)) ([#1910](#1910)) ([efd54c9](efd54c9)) * WP-3 API conventions + query performance + project-wide extra=forbid ([#1953](#1953)) ([504d579](504d579)), closes [#1918](#1918) * WP-4 settings + cross-cutting (clock seam, contextvars, dispatch, plugin surfaces) ([#1954](#1954)) ([7207d92](7207d92)) * **wp1:** persistence + layer discipline + restart safety ([#1945](#1945)) ([57586fb](57586fb)) ### Documentation * **wp5:** public-facing truth refresh ([#1924](#1924)) ([afb5cc5](afb5cc5)) ### CI/CD * split test job by marker with airtight aggregate coverage gate ([#1948](#1948)) ([0b818d5](0b818d5)), closes [#1938](#1938) [#1937](#1937) ### Maintenance * **codebase-audit:** tighten skill to prevent 2026-05-15 FP classes ([#1923](#1923)) ([9317ed1](9317ed1)) * Lock file maintenance ([#1913](#1913)) ([c08a355](c08a355)) * Lock file maintenance ([#1950](#1950)) ([8940ab1](8940ab1)) * remove TS DTO type-tightening overlays ([#1915](#1915)) ([d296214](d296214)), closes [#1906](#1906) * Update Infrastructure dependencies ([#1928](#1928)) ([d19fae5](d19fae5)) * Update Python dependencies ([#1929](#1929)) ([75cc2c8](75cc2c8)) * **wp7:** hygiene, stubs, test/CI/tooling, doc gaps, boundary patterns doc ([#1926](#1926)) ([c29eb32](c29eb32)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --------- Co-authored-by: synthorg-repo-bot[bot] <279117679+synthorg-repo-bot[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
This PR contains the following updates:
v0.15.12→v0.15.13==4.8.1→==4.8.3==4.15.1→==4.16.2v4.15.1→v4.16.2==40.15.0→==40.18.0==6.152.4→==6.152.7==1.83.14→==1.84.0==4.32.1→==4.33.0==1.2.2→==1.2.3==1.20.2→==2.1.0==4.5.0→==5.0.2==0.15.12→==0.15.13==5.4.1→==5.5.0==5.4.1→==5.5.0==30.7.0→==30.8.0==2.11.0→==2.12.0==2.11.0→==2.12.0==6.0.12.20260508→==6.0.12.20260510==0.0.40→==0.0.42v1.24.1→v1.25.2Note: The
pre-commitmanager in Renovate is not supported by thepre-commitmaintainers or community. Please do not report any problems there, instead create a Discussion in the Renovate repository if you have any questions.Release Notes
astral-sh/ruff-pre-commit (astral-sh/ruff-pre-commit)
v0.15.13Compare Source
commitizen-tools/commitizen (commitizen)
v4.16.2Compare Source
v4.16.2 (2026-05-15)
Fix
v4.16.1Compare Source
v4.16.1 (2026-05-15)
Fix
v4.16.0Compare Source
v4.16.0 (2026-05-12)
Feat
joke2k/faker (faker)
v40.18.0Compare Source
See CHANGELOG.md.
v40.17.0Compare Source
am_ETphone_numberprovider for Ethiopia. Thanks @jasur-py.v40.16.0Compare Source
145inzh_CNlocale. Thanks @r266-tec.BerriAI/litellm (litellm)
v1.84.0Verify Docker Image Signature
All LiteLLM Docker images are signed with cosign. Every release is signed with the same key introduced in commit
0112e53.Verify using the pinned commit hash (recommended):
A commit hash is cryptographically immutable, so this is the strongest way to ensure you are using the original signing key:
Verify using the release tag (convenience):
Tags are protected in this repository and resolve to the same key. This option is easier to read but relies on tag protection rules:
Expected output:
What's Changed
New Contributors
Full Changelog: BerriAI/litellm@v1.83.14-stable.patch.3...v1.84.0
pydantic/logfire (logfire)
v4.33.0Compare Source
CLI:
promptcommand without--projectby @Kludex in #1912Integrations:
model_dumpin usage cost path by @imp-joshi in #1886Other:
logfire.versionto resource attributes by @alexmojaki in #1911logfire.configure()by @Kludex in #1904levelparam to@logfire.instrument()by @imp-joshi in #1871ProperDocs/properdocs-redirects (mkdocs-redirects)
v1.2.3Compare Source
Warn when this plugin is being used from the mkdocs executable (ProperDocs/mkdocs-redirects#2)
Apologies for the inconvenience. We are starting a community continuation of MkDocs under a new name ProperDocs, and plugins are our main hope regarding how we can spread the word.
See https://github.com/ProperDocs/properdocs/discussions/33
Drop support for Python 3.9, officially support Python 3.14
Full Changelog: ProperDocs/mkdocs-redirects@v1.2.2...v1.2.3
python/mypy (mypy)
v2.1.0Compare Source
v2.0.0Compare Source
CodSpeedHQ/pytest-codspeed (pytest-codspeed)
v5.0.2Compare Source
🚀 Features
v5.0.1Compare Source
💼 Other
v5.0.0Compare Source
🚀 Features
⚡ Performance
⚙️ Internals
astral-sh/ruff (ruff)
v0.15.13Compare Source
Released on 2026-05-14.
Preview features
pylint] Standardize diagnostic message (PLR0914,PLR0917) (#24996)Bug fixes
F811false positive for class methods (#24933)eradicate] Fix false positive for lines with leading whitespace (ERA001) (#25122)flake8-pyi] Fix false positive for f-string debug specifier (PYI016) (#24098)Rule changes
PYI034for in-place operations to enclosing class (#24511)global(#24902)Performance
isort] Avoid constructingglob::Patterns for literal known modules (#25123)CLI
--confighelp text (#25013)Configuration
line-lengthsetting (#24962)Documentation
D203to rules that conflict with the formatter (#25044)COM819and formatter interaction (#25045)NotImplementedis a value, not an exception (F901) (#25054)Other changes
Contributors
huggingface/sentence-transformers (sentence-transformers)
v5.5.0: - Training Agent Skill, EmbedDistillLoss, and ADRMSELossCompare Source
This release ships the
train-sentence-transformersAgent Skill, adds two new training losses, and brings a long list of robustness and correctness fixes.The new
train-sentence-transformersAgent Skill lets AI coding agents (Claude Code, Codex, Cursor, Gemini CLI, ...) drive end-to-end training and fine-tuning across all three model types.EmbedDistillLossis a new embedding-level knowledge distillation loss forSentenceTransformer: it aligns a student model's embeddings with pre-computed teacher embeddings, an alternative to the score-based distillation provided byMarginMSELossandDistillKLDivLoss.ADRMSELossis a new listwise learning-to-rank loss forCrossEncoderfrom the Rank-DistiLLM paper.encode()andpredict()also gain a per-callprocessing_kwargsoverride, and more.Install this version with
The
train-sentence-transformersAgent Skill (#3752)If you use an AI coding agent (Claude Code, Codex, Cursor, Gemini CLI, OpenCode, ...), you can now install the
train-sentence-transformersAgent Skill and ask your agent to fine-tune a model on your data:The skill gives the agent curated, version-aware guidance for training
SentenceTransformer(bi-encoder),CrossEncoder(reranker), andSparseEncoder/SPLADE models, covering base model selection, loss and evaluator choice, hard-negative mining, distillation, LoRA, Matryoshka, multilingual training, static embeddings, plus a set of production-ready training template scripts. Then you can prompt your agent with things like:The skill lives in the repository under
skills/train-sentence-transformers/and is mirrored to thehuggingface/skillsmarketplace on each release.New loss: EmbedDistillLoss (#3665)
Introduces
EmbedDistillLoss(Kim et al., 2023), an embedding-level knowledge distillation loss forSentenceTransformer. Rather than distilling teacher scores (MarginMSELoss,DistillKLDivLoss), it directly aligns the student'ssentence_embeddingwith a pre-computed teacher embedding passed via the dataset'slabelcolumn. The comparison uses a configurabledistance_metric, one of"cosine"(the default),"l2", or"mse". When the student and teacher dimensions differ, passprojection_dim=<teacher_dim>to add a learnable projection from the student's embedding space into the teacher's. That projection lives on the loss rather than on the saved model, so useloss.save_projection(...)/loss.load_projection(...)to reuse it across stages (e.g. like done in Arkam et al. for Jina v5). As part of this change,MSELossis now a thin subclass ofEmbedDistillLosswithdistance_metric="mse", and also gains the optionalprojection_dimargument.See the updated model distillation examples and the loss overview for more.
New loss: ADRMSELoss for Cross Encoders (#3690)
Introduces
ADRMSELoss(Approx Discounted Rank Mean Squared Error), a listwise learning-to-rank loss forCrossEncoderfrom the Rank-DistiLLM paper (Schlatt et al., ECIR 2025). It computes a differentiable approximation of each document's rank via pairwise sigmoids and minimizes the nDCG-discounted squared error against the true ranks derived from the labels. It expects listwise inputs: a(query, [doc1, ..., docN])pair plus a[score1, ..., scoreN]label list per sample (binary or continuous labels, variable document counts allowed). It's designed for LLM-distillation reranking, where the per-document scores come from a strong LLM's ordering.There's a full MS MARCO example at
training_ms_marco_adrmse.py. Note thatLambdaLossgenerally remains the strongest loss in the listwise family. See the Cross Encoder loss overview for guidance on picking a loss.Per-call
processing_kwargsoverride (#3753)SentenceTransformer.encode()/encode_query()/encode_document(),SparseEncoder.encode(),CrossEncoder.predict(), andmodel.preprocess()now accept aprocessing_kwargsargument that overrides the processor/tokenizer kwargs configured at construction time, for a single call. It has the same nested structure as theprocessing_kwargsconstructor argument (top-level keystext,audio,image,video,common,chat_template) and is shallow-merged on top of the instance-level settings, so you can override just one setting (e.g.max_length) and leave the rest intact.This is especially handy for vision-language models, where you can change the image resolution per call, e.g.
model.encode(images, processing_kwargs={"image": {"max_pixels": 256 * 256}}).Smaller Features
CrossEncodermodule stacks that don't start with aTransformer, and recognize a trailingDense(module_output_name="scores")as the scoring head, by @tomaarsen in #3742:num_labelsnow reads that head'sout_features, andmodel.config/model.modelreturnNonewhen there's no underlying transformers model.InformationRetrievalEvaluator/NanoBEIREvaluator(or their sparse variants) was used during training, by @tomaarsen in #3741: the usage snippet then showsencode_query/encode_document, even without IR prompt names or aRouterarchitecture.transformersversion is too old to honoruse_bidirectional_attention/is_causalflags in a model's config (e.g. forgoogle/embeddinggemma-300m), rather than silently ignoring them, by @tomaarsen in #3726.Bug Fixes
Configuration
📅 Schedule: (in timezone Etc/UTC)
* 0-6 * * 6)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.