Skip to content

chore: Update Python dependencies#1929

Merged
Aureliolo merged 1 commit into
mainfrom
renovate/python
May 16, 2026
Merged

chore: Update Python dependencies#1929
Aureliolo merged 1 commit into
mainfrom
renovate/python

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate Bot commented May 16, 2026

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Type Update Change Age Confidence
astral-sh/ruff-pre-commit repository patch v0.15.12v0.15.13 age confidence
cedarpy project.dependencies patch ==4.8.1==4.8.3 age confidence
commitizen (changelog) dependency-groups minor ==4.15.1==4.16.2 age confidence
commitizen-tools/commitizen repository minor v4.15.1v4.16.2 age confidence
faker (changelog) project.dependencies minor ==40.15.0==40.18.0 age confidence
hypothesis (changelog) dependency-groups patch ==6.152.4==6.152.7 age confidence
litellm project.dependencies minor ==1.83.14==1.84.0 age confidence
logfire (changelog) project.optional-dependencies minor ==4.32.1==4.33.0 age confidence
mkdocs-redirects (changelog) dependency-groups patch ==1.2.2==1.2.3 age confidence
mypy (changelog) dependency-groups major ==1.20.2==2.1.0 age confidence
pytest-codspeed dependency-groups major ==4.5.0==5.0.2 age confidence
ruff (source, changelog) dependency-groups patch ==0.15.12==0.15.13 age confidence
sentence-transformers project.optional-dependencies minor ==5.4.1==5.5.0 age confidence
sentence-transformers dependency-groups minor ==5.4.1==5.5.0 age confidence
sqlglot dependency-groups minor ==30.7.0==30.8.0 age confidence
torch project.optional-dependencies minor ==2.11.0==2.12.0 age confidence
torch dependency-groups minor ==2.11.0==2.12.0 age confidence
types-pyyaml (changelog) dependency-groups patch ==6.0.12.20260508==6.0.12.20260510 age confidence
zensical (changelog) dependency-groups patch ==0.0.40==0.0.42 age confidence
zizmorcore/zizmor-pre-commit repository minor v1.24.1v1.25.2 age confidence

Note: The pre-commit manager in Renovate is not supported by the pre-commit maintainers 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.13

Compare Source

commitizen-tools/commitizen (commitizen)

v4.16.2

Compare Source

v4.16.2 (2026-05-15)

Fix
  • tags: widen prerelease and devrelease tag regexes for SemVer2 (#​1972)

v4.16.1

Compare Source

v4.16.1 (2026-05-15)

Fix
  • cz_customize: derive bump_map_major_version_zero from bump_map (#​1977)

v4.16.0

Compare Source

v4.16.0 (2026-05-12)

Feat
  • hooks: support interactive hooks scripts
joke2k/faker (faker)

v40.18.0

Compare Source

See CHANGELOG.md.

v40.17.0

Compare Source

  • Add am_ET phone_number provider for Ethiopia. Thanks @​jasur-py.

v40.16.0

Compare Source

  • Fix duplicate phone number prefix 145 in zh_CN locale. Thanks @​r266-tec.
BerriAI/litellm (litellm)

v1.84.0

⚠️ Heads up — this release contains breaking changes.
Read the full release notes here: v1.84.0 release notes


Verify 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:

cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/0112e53046018d726492c814b3644b7d376029d0/cosign.pub \
  ghcr.io/berriai/litellm:v1.84.0

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:

cosign verify \
  --key https://raw.githubusercontent.com/BerriAI/litellm/v1.84.0/cosign.pub \
  ghcr.io/berriai/litellm:v1.84.0

Expected output:

The following checks were performed on each of these signatures:
  - The cosign claims were validated
  - The signatures were verified against the specified public key

What's Changed

New Contributors

Full Changelog: BerriAI/litellm@v1.83.14-stable.patch.3...v1.84.0

pydantic/logfire (logfire)

v4.33.0

Compare Source

CLI:

Integrations:

Other:

ProperDocs/properdocs-redirects (mkdocs-redirects)

v1.2.3

Compare Source

Full Changelog: ProperDocs/mkdocs-redirects@v1.2.2...v1.2.3

python/mypy (mypy)

v2.1.0

Compare Source

v2.0.0

Compare Source

CodSpeedHQ/pytest-codspeed (pytest-codspeed)

v5.0.2

Compare Source

🚀 Features

v5.0.1

Compare Source

💼 Other

v5.0.0

Compare Source

🚀 Features
⚡ Performance
  • Bind callgrind start/stop directly to avoid extra frame by @​art049 in #​96
⚙️ Internals
astral-sh/ruff (ruff)

v0.15.13

Compare Source

Released on 2026-05-14.

Preview features
  • Add a rule to flag lazy imports that are eagerly evaluated (#​25016)
  • [pylint] Standardize diagnostic message (PLR0914, PLR0917) (#​24996)
Bug fixes
  • Fix F811 false positive for class methods (#​24933)
  • Fix setting selection for multi-folder workspace (#​24819)
  • [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
  • Always include panic payload in panic diagnostic message (#​24873)
  • Restrict PYI034 for in-place operations to enclosing class (#​24511)
  • Improve error message for parameters that are declared global (#​24902)
  • Update known stdlib (#​25103)
Performance
  • [isort] Avoid constructing glob::Patterns for literal known modules (#​25123)
CLI
  • Add TOML examples to --config help text (#​25013)
  • Colorize ruff check 'All checks passed' (#​25085)
Configuration
  • Increase max allowed value of line-length setting (#​24962)
Documentation
  • Add D203 to rules that conflict with the formatter (#​25044)
  • Clarify COM819 and formatter interaction (#​25045)
  • Clarify that NotImplemented is a value, not an exception (F901) (#​25054)
  • Update number of lint rules supported (#​24942)
Other changes
  • Simplify the playground's markdown template (#​24924)
Contributors
huggingface/sentence-transformers (sentence-transformers)

v5.5.0: - Training Agent Skill, EmbedDistillLoss, and ADRMSELoss

Compare Source

This release ships the train-sentence-transformers Agent Skill, adds two new training losses, and brings a long list of robustness and correctness fixes.

The new train-sentence-transformers Agent Skill lets AI coding agents (Claude Code, Codex, Cursor, Gemini CLI, ...) drive end-to-end training and fine-tuning across all three model types. EmbedDistillLoss is a new embedding-level knowledge distillation loss for SentenceTransformer: it aligns a student model's embeddings with pre-computed teacher embeddings, an alternative to the score-based distillation provided by MarginMSELoss and DistillKLDivLoss. ADRMSELoss is a new listwise learning-to-rank loss for CrossEncoder from the Rank-DistiLLM paper. encode() and predict() also gain a per-call processing_kwargs override, and more.

Install this version with

# Training + Inference
pip install sentence-transformers[train]==5.5.0

# Inference only, use one of:
pip install sentence-transformers==5.5.0
pip install sentence-transformers[onnx-gpu]==5.5.0
pip install sentence-transformers[onnx]==5.5.0
pip install sentence-transformers[openvino]==5.5.0

# Multimodal dependencies (optional):
pip install sentence-transformers[image]==5.5.0
pip install sentence-transformers[audio]==5.5.0
pip install sentence-transformers[video]==5.5.0

# Or combine as needed:
pip install sentence-transformers[train,onnx,image]==5.5.0
The train-sentence-transformers Agent Skill (#​3752)

If you use an AI coding agent (Claude Code, Codex, Cursor, Gemini CLI, OpenCode, ...), you can now install the train-sentence-transformers Agent Skill and ask your agent to fine-tune a model on your data:

hf skills add train-sentence-transformers              # installs under ./.agents/skills/
hf skills add train-sentence-transformers --global     # installs under ~/.agents/skills/
hf skills add train-sentence-transformers --claude     # also symlinks into .claude/skills/

The skill gives the agent curated, version-aware guidance for training SentenceTransformer (bi-encoder), CrossEncoder (reranker), and SparseEncoder/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:

"Train a multilingual sentence-transformer on Dutch legal pairs."

"Fine-tune a cross-encoder reranker on (question, answer) pairs from my dataset, mine hard negatives, and push to my Hub repo."

"Train a German sparse embedding model with high sparsity."

"Can you train a static embedding model on 100k code triplets?"

The skill lives in the repository under skills/train-sentence-transformers/ and is mirrored to the huggingface/skills marketplace on each release.

New loss: EmbedDistillLoss (#​3665)

Introduces EmbedDistillLoss (Kim et al., 2023), an embedding-level knowledge distillation loss for SentenceTransformer. Rather than distilling teacher scores (MarginMSELoss, DistillKLDivLoss), it directly aligns the student's sentence_embedding with a pre-computed teacher embedding passed via the dataset's label column. The comparison uses a configurable distance_metric, one of "cosine" (the default), "l2", or "mse". When the student and teacher dimensions differ, pass projection_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 use loss.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, MSELoss is now a thin subclass of EmbedDistillLoss with distance_metric="mse", and also gains the optional projection_dim argument.

from datasets import Dataset
from sentence_transformers import SentenceTransformer, SentenceTransformerTrainer
from sentence_transformers.sentence_transformer.losses import EmbedDistillLoss

student_model = SentenceTransformer("microsoft/mpnet-base")
teacher_model = SentenceTransformer("all-mpnet-base-v2")

train_dataset = Dataset.from_dict({
    "sentence": ["It's nice weather outside today.", "He drove to work."],
})

# Pre-compute teacher embeddings once and store them as the `label` column
def add_teacher_embeddings(batch):
    return {"label": teacher_model.encode(batch["sentence"]).tolist()}

train_dataset = train_dataset.map(add_teacher_embeddings, batched=True)

loss = EmbedDistillLoss(student_model, distance_metric="cosine")

# If the student and teacher dimensions differ, add a learnable projection:
# loss = EmbedDistillLoss(student_model, distance_metric="cosine", projection_dim=768)

trainer = SentenceTransformerTrainer(
    model=student_model,
    train_dataset=train_dataset,
    loss=loss,
)
trainer.train()

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 for CrossEncoder from 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.

from datasets import Dataset
from sentence_transformers import CrossEncoder, CrossEncoderTrainer
from sentence_transformers.cross_encoder.losses import ADRMSELoss

model = CrossEncoder("microsoft/mpnet-base")
train_dataset = Dataset.from_dict({
    "query": ["What are pandas?", "What is the capital of France?"],
    "docs": [
        ["Pandas are a kind of bear.", "Pandas are kind of like fish."],
        ["The capital of France is Paris.", "Paris is the capital of France.", "Paris is quite large."],
    ],
    "scores": [[0.95, 0.1], [0.98, 0.92, 0.2]],
})
loss = ADRMSELoss(model)

trainer = CrossEncoderTrainer(
    model=model,
    train_dataset=train_dataset,
    loss=loss,
)
trainer.train()

There's a full MS MARCO example at training_ms_marco_adrmse.py. Note that LambdaLoss generally remains the strongest loss in the listwise family. See the Cross Encoder loss overview for guidance on picking a loss.

Per-call processing_kwargs override (#​3753)

SentenceTransformer.encode() / encode_query() / encode_document(), SparseEncoder.encode(), CrossEncoder.predict(), and model.preprocess() now accept a processing_kwargs argument that overrides the processor/tokenizer kwargs configured at construction time, for a single call. It has the same nested structure as the processing_kwargs constructor argument (top-level keys text, 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.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("all-MiniLM-L6-v2")

# Override processor kwargs (e.g. max_length, truncation) for this call only:
embeddings = model.encode(
    ["a short text", "a much longer text that you want truncated more aggressively ..."],
    processing_kwargs={"text": {"max_length": 256, "truncation": True}},
)

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
  • Allow CrossEncoder module stacks that don't start with a Transformer, and recognize a trailing Dense(module_output_name="scores") as the scoring head, by @​tomaarsen in #​3742: num_labels now reads that head's out_features, and model.config / model.model return None when there's no underlying transformers model.
  • Infer that a model is an IR model on its generated model card when an InformationRetrievalEvaluator / NanoBEIREvaluator (or their sparse variants) was used during training, by @​tomaarsen in #​3741: the usage snippet then shows encode_query / encode_document, even without IR prompt names or a Router architecture.
  • Warn at model-load time when the installed transformers version is too old to honor use_bidirectional_attention / is_causal flags in a model's config (e.g. for google/embeddinggemma-300m), rather than silently ignoring them, by @​tomaarsen in #​3726.
Bug Fixes
  • Use the f

Note

PR body was truncated to here.


Configuration

📅 Schedule: (in timezone Etc/UTC)

  • Branch creation
    • Between 12:00 AM and 06:59 AM, only on Saturday (* 0-6 * * 6)
  • Automerge
    • At any time (no schedule defined)

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


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot requested a review from Aureliolo as a code owner May 16, 2026 00:42
@renovate renovate Bot added dependencies Pull requests that update a dependency file type:chore Maintenance, cleanup, dependency updates labels May 16, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 16, 2026

Dependency Review

The following issues were found:
  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 11 package(s) with unknown licenses.
See the Details below.

License Issues

uv.lock

PackageVersionLicenseIssue Type
ast-serialize0.4.0NullUnknown License
cedarpy4.8.3NullUnknown License
commitizen4.16.2NullUnknown License
logfire4.33.0NullUnknown License
mkdocs-redirects1.2.3NullUnknown License
mypy2.1.0NullUnknown License
properdocs1.6.7NullUnknown License
ruff0.15.13NullUnknown License
sentence-transformers5.5.0NullUnknown License
sqlglot30.8.0NullUnknown License
types-pyyaml6.0.12.20260510NullUnknown License
Allowed Licenses: MIT, MIT-0, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, MPL-2.0, PSF-2.0, Unlicense, 0BSD, CC0-1.0, CC-BY-3.0, CC-BY-4.0, Python-2.0, Python-2.0.1, LicenseRef-scancode-free-unknown, LicenseRef-scancode-protobuf, LicenseRef-scancode-google-patent-license-golang, ZPL-2.1, LGPL-2.0-only, LGPL-2.0-or-later, LGPL-2.1-only, LGPL-2.1-or-later, LGPL-3.0-only, LGPL-3.0-or-later, BlueOak-1.0.0, OFL-1.1
Excluded from license check: pkg:pypi/mem0ai@2.0.1, pkg:pypi/numpy@2.4.4, pkg:pypi/qdrant-client@1.17.1, pkg:pypi/posthog@7.9.12, pkg:pypi/aiohttp@3.13.5, pkg:pypi/cyclonedx-python-lib@11.7.0, pkg:pypi/fsspec@2026.3.0, pkg:pypi/griffelib@2.0.2, pkg:pypi/grpcio@1.80.0, pkg:pypi/charset-normalizer@3.4.6, pkg:pypi/wrapt@2.1.2, pkg:pypi/pytest-codspeed@4.5.0, pkg:pypi/hypothesis@6.152.4, pkg:pypi/litellm@1.83.14, pkg:pypi/openai@2.33.0, pkg:pypi/pyngrok@8.1.2, pkg:pypi/tokenizers@0.23.1, pkg:pypi/typer@0.25.0, pkg:npm/@img/sharp-wasm32@0.33.5, pkg:npm/@img/sharp-win32-ia32@0.33.5, pkg:npm/@img/sharp-win32-x64@0.33.5, pkg:npm/json-schema-typed@8.0.2, pkg:npm/victory-vendor@37.3.6, pkg:pypi/scikit-learn@1.8.0, pkg:pypi/torch@2.11.0, pkg:pypi/cuda-bindings@13.2.0, pkg:pypi/cuda-pathfinder@1.5.0, pkg:pypi/cuda-toolkit@13.0.2, pkg:pypi/nvidia-cublas@13.1.0.3, pkg:pypi/nvidia-cuda-cupti@13.0.85, pkg:pypi/nvidia-cuda-nvrtc@13.0.88, pkg:pypi/nvidia-cuda-runtime@13.0.96, pkg:pypi/nvidia-cudnn-cu13@9.19.0.56, pkg:pypi/nvidia-cufft@12.0.0.61, pkg:pypi/nvidia-cufile@1.15.1.6, pkg:pypi/nvidia-curand@10.4.0.35, pkg:pypi/nvidia-cusolver@12.0.4.66, pkg:pypi/nvidia-cusparse@12.6.3.3, pkg:pypi/nvidia-cusparselt-cu13@0.8.0, pkg:pypi/nvidia-nccl-cu13@2.28.9, pkg:pypi/nvidia-nvjitlink@13.0.88, pkg:pypi/nvidia-nvshmem-cu13@3.4.5, pkg:pypi/nvidia-nvtx@13.0.85

OpenSSF Scorecard

Scorecard details
PackageVersionScoreDetails
pip/ast-serialize 0.4.0 UnknownUnknown
pip/cedarpy 4.8.3 UnknownUnknown
pip/commitizen 4.16.2 UnknownUnknown
pip/faker 40.18.0 🟢 5.1
Details
CheckScoreReason
Packaging⚠️ -1packaging workflow not detected
Maintained🟢 1030 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Code-Review🟢 4Found 12/30 approved changesets -- score normalized to 4
Dangerous-Workflow🟢 10no dangerous workflow patterns detected
Token-Permissions🟢 9detected GitHub workflow tokens with excessive permissions
CII-Best-Practices⚠️ 0no effort to earn an OpenSSF best practices badge detected
Binary-Artifacts🟢 10no binaries found in the repo
Pinned-Dependencies⚠️ 0dependency not pinned by hash detected -- score normalized to 0
Security-Policy⚠️ 0security policy file not detected
License🟢 10license file detected
Fuzzing⚠️ 0project is not fuzzed
Signed-Releases⚠️ -1no releases found
Branch-Protection⚠️ 0branch protection not enabled on development/release branches
SAST⚠️ 0SAST tool is not run on all commits -- score normalized to 0
pip/hypothesis 6.152.7 UnknownUnknown
pip/litellm 1.84.0 UnknownUnknown
pip/logfire 4.33.0 UnknownUnknown
pip/mkdocs-redirects 1.2.3 UnknownUnknown
pip/mypy 2.1.0 UnknownUnknown
pip/nvidia-cudnn-cu13 9.20.0.48 UnknownUnknown
pip/nvidia-cusparselt-cu13 0.8.1 UnknownUnknown
pip/nvidia-nccl-cu13 2.29.7 UnknownUnknown
pip/properdocs 1.6.7 UnknownUnknown
pip/pytest-codspeed 5.0.2 UnknownUnknown
pip/ruff 0.15.13 UnknownUnknown
pip/sentence-transformers 5.5.0 UnknownUnknown
pip/sqlglot 30.8.0 UnknownUnknown
pip/torch 2.12.0 UnknownUnknown
pip/torch 2.12.0+cpu UnknownUnknown
pip/triton 3.7.0 UnknownUnknown
pip/types-pyyaml 6.0.12.20260510 UnknownUnknown
pip/zensical 0.0.42 UnknownUnknown

Scanned Files

  • uv.lock

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq Bot commented May 16, 2026

Merging this PR will improve performance by 18.48%

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

#### 🎉 Hooray! `pytest-codspeed` just leveled up to 5.0.2!

A heads-up, this is a breaking change and it might affect your current performance baseline a bit. But here's the exciting part - it's packed with new, cool features and promises improved result stability 🥳!
Curious about what's new? Visit our releases page to delve into all the awesome details about this new version.

⚡ 8 improved benchmarks
✅ 25 untouched benchmarks
⏩ 21 skipped benchmarks1

Performance Changes

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)

Open in CodSpeed

Footnotes

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

@renovate renovate Bot temporarily deployed to cloudflare-preview May 16, 2026 00:46 Inactive
@codecov
Copy link
Copy Markdown

codecov Bot commented May 16, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 85.15%. Comparing base (c29eb32) to head (0222233).
✅ All tests successful. No failed tests found.

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@renovate renovate Bot force-pushed the renovate/python branch from 8454ab0 to 0222233 Compare May 16, 2026 12:29
@renovate renovate Bot temporarily deployed to cloudflare-preview May 16, 2026 12:31 Inactive
Copy link
Copy Markdown
Owner

@Aureliolo Aureliolo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-types defaults 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.

@Aureliolo Aureliolo merged commit 75cc2c8 into main May 16, 2026
78 checks passed
@Aureliolo Aureliolo deleted the renovate/python branch May 16, 2026 13:24
@Aureliolo Aureliolo temporarily deployed to cloudflare-preview May 16, 2026 13:24 — with GitHub Actions Inactive
Aureliolo added a commit that referenced this pull request May 16, 2026
#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.
Aureliolo pushed a commit that referenced this pull request May 17, 2026
<!-- 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file type:chore Maintenance, cleanup, dependency updates

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant