Bump ruff from 0.15.4 to 0.15.6 in /requirements/lintrunner - #6
Closed
dependabot[bot] wants to merge 1 commit into
Closed
Bump ruff from 0.15.4 to 0.15.6 in /requirements/lintrunner#6dependabot[bot] wants to merge 1 commit into
dependabot[bot] wants to merge 1 commit into
Conversation
Bumps [ruff](https://github.com/astral-sh/ruff) from 0.15.4 to 0.15.6. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](astral-sh/ruff@0.15.4...0.15.6) --- updated-dependencies: - dependency-name: ruff dependency-version: 0.15.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
Performance Comparison
|
Contributor
Author
|
Superseded by #15. |
dependabot
Bot
deleted the
dependabot/pip/requirements/lintrunner/ruff-0.15.6
branch
March 20, 2026 07:45
This was referenced Apr 2, 2026
Closed
justinchuby
added a commit
that referenced
this pull request
Apr 2, 2026
Replace scattered _GQA_SUPPORT/_PACKED_ATTN_SUPPORT frozensets and string-branching logic with a single EpCapabilities dataclass and _EP_REGISTRY dict. Adding EP #6 now requires a single EpCapabilities entry in _EP_REGISTRY. No other code changes needed. Changes: - _builder.py: Add EpCapabilities dataclass + _EP_REGISTRY, remove _GQA_SUPPORT/_PACKED_ATTN_SUPPORT, update _get_optimization_passes to query caps.gqa_dtypes/caps.supports_* instead of ep string branches, update _optimize to look up caps from registry, update use_concrete_dims derivation to use caps.supports_shape - _ep_validation.py: Derive KNOWN_EPS from _EP_REGISTRY (single source) - _genai_config.py: Rename _EP_NAME_MAP to _ORT_PROVIDER_NAMES for clarity Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Justin Chu <justinchuby@users.noreply.github.com>
justinchuby
added a commit
that referenced
this pull request
Apr 3, 2026
- _execution_providers.py: replace 'Adding EP #6'/'#7' with 'Adding a new EP = adding one entry here' (numbers go stale) - _optimizations.py: add __all__ listing public symbols - _builder.py: consolidate two __all__ blocks into one annotated list separating public API from backward-compat re-exports Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Justin Chu <justinchuby@users.noreply.github.com>
justinchuby
added a commit
that referenced
this pull request
Apr 13, 2026
…tion, embed_scale Issue #4: Remove extra post_layernorm from _Gemma4VisionEncoderCore. HF Gemma4VisionEncoder has no post-encoder norm. The scale-free RMSNorm (embedding_pre_projection_norm) lives only in _Gemma4VisionEncoderModel as projector_norm, applied once before the projector. Issue #5: Zero padding patches and pass attention mask to vision encoder. Detect pixel_position_ids == -1 in _Gemma4VisionPatchEmbedder; zero position embeddings for those patches (matching HF _position_embeddings). Build additive attention bias [B,1,1,N] with -1e9 for padding columns and thread it through Gemma4VisionEncoderLayer -> Gemma4VisionSelfAttention -> op.Attention. After all encoder layers, zero padding patch hidden states before scaling/norm/projection (matching HF VisionPooler masked_fill). Issue #6: Replace Softmax with arithmetic normalization for MoE top-k weights. HF: top_k_weights /= top_k_weights.sum(-1, keepdim=True). We were using op.Softmax which applies exponential re-weighting. Fix: op.ReduceSum + op.Div. Issue #7: Remove np.float16 cast on embed_scale. HF uses hidden_size**0.5 as exact float32. np.float16 introduces ~0.01% rounding error on every embedding lookup. Use math.sqrt() instead. Both occurrences fixed (_Gemma4TextModel and Gemma4EmbeddingModel). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Justin Chu <justinchuby@users.noreply.github.com>
justinchuby
added a commit
that referenced
this pull request
Apr 22, 2026
Remove the deprecated expand_kv_heads_for_attention flag entirely. The model emits the ideal ONNX graph with native GQA head counts. Document that nonpad_kv_seqlen (Attention input #6) is only valid in static cache mode — ORT asserts it cannot be combined with past_key/past_value inputs. This means it cannot replace attn_mask in the dynamic cache path to enable Flash dispatch. CUDA EP limitations tracked upstream: - microsoft/onnxruntime#28195 (unfused runner NaN for head_dim>256) - microsoft/onnxruntime#28196 (GQA kernel head_dim>256 support) CPU EP tested: correct output on google/gemma-4-E2B-it. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: Justin Chu <justinchu@microsoft.com>
titaiwangms
added a commit
that referenced
this pull request
Jun 6, 2026
The static-cache causal attention mask depends only on S_q, max_seq and write_indices — all identical across decoder layers — so rebuilding it per layer duplicated ~16 nodes per layer. Build the mask once and share the same ir.Value across all layers. - Add `causal_mask: ir.Value | None` field to StaticCacheState; thread the shared value from _make_static_cache_inputs into every layer's state. - _apply_attention consumes static_cache.causal_mask when present and keeps a fallback that builds the mask on demand for direct callers. - Build the mask once in _make_static_cache_inputs using input_ids (S_q) and cache_pairs[0][0] (max_seq); the shared Value guarantees bit-identical logits vs the per-layer build (parity by construction). Also reframe the mask docstring + CHANGELOG honestly: the nonpad_kv_seqlen key-bound is enforced by the ORT Attention kernel itself (external-cache input #6, verified bit-identical on CUDA and CPU when poisoning padding slots), so the causal-only mask must not re-encode it — a `j < nonpad` term would merely duplicate input #6 and add dead nodes. Non-compact / interior padding holes are out of contract (a scalar nonpad cannot express them). Tests: add test_static_cache_mask_built_once (exactly one GreaterOrEqual mask root; all Attention nodes share one mask Value) and assert shared-Value identity in test_static_cache_attention_has_causal_mask_input. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: titaiwang <titaiwang@microsoft.com>
titaiwangms
added a commit
that referenced
this pull request
Jun 6, 2026
Batched Minor-cleanup follow-up to 36617c9 (no behavior change to shipped Major-2 hoist). Addresses code/critical/readability review nits: - Test the previously-uncovered _apply_attention fallback: add TestApplyAttentionStaticCacheFallback exercising static-cache mode with causal_mask=None. Asserts the fallback builds the mask via the 4-arg create_static_cache_causal_mask path (GreaterOrEqual root), that a hoisted mask Value is consumed by-identity (not rebuilt), and that the fallback graph is op-multiset-equivalent to the hoisted graph. (code-reviewer + critical-reviewer) - Guard zero-layer models in _make_static_cache_inputs: early-return [] when cache_pairs is empty, before indexing cache_pairs[0][0], so a 0-layer config yields [] instead of an opaque IndexError. (critical-reviewer M2) - Fix stale inline comment on the mask root op: "(causal + padding)" -> positional causal bound only; nonpad/padding is kernel-enforced (input #6), matching the reframed causal-only docstring. (readability M-1) - Correct create_static_cache_causal_mask `query` param doc: it accepts a 2D [batch, S_q] Value (e.g. input_ids) since only dim 1 is read; drop the stale "dims 0/1" wording. (readability M-2) Tests: +3 new passing (fallback path); full fast suite 21 failed / 2673 passed / 46 errors — zero new failures vs 36617c9 (the 21 fail + 46 err are pre-existing missing-optional-dep collection issues). lintrunner f clean. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: titaiwang <titaiwang@microsoft.com>
This was referenced Jun 6, 2026
titaiwangms
added a commit
that referenced
this pull request
Jun 19, 2026
Three grounded review fixes on the static-cache probe + opset lowering:
(2) ort_capabilities.py: the inner reject handler matched (NotImplemented,
Fail) by type alone, so a genuine ORT Fail (CUDA OOM, kernel bug, install
drift) was silently misclassified as 'needs onnxruntime#28958' -> whole
suite skips, masking a regression. Add _is_expected_pre28958_reject():
NotImplemented is always the confirmed pre-#28958 path; a Fail (or the
defensive RuntimeError fallback) is accepted only when its message carries
the reject signature (nonpad_kv_seqlen / tensorscatter), else it returns
PROBE_ERROR and logs at WARNING so real failures stay loud. Value-based
known-answer check preserved. Adds CPU-only unit tests for the classifier
and the output check.
(1) _builder.py _apply_opset_lowering: the gate guarded only EP != 'default',
so it also fired for EP == 'cpu', diverging from ort_inference. Also skip
'cpu' (CPU EP already has opset-24 kernels). Adds a cpu-skip unit test.
(M2) ort_inference.py _should_lower_opset: only scanned top-level nodes and
lacked the Attention input-#6 (nonpad_kv_seqlen) check. Delegate to
_builder._graph_requires_opset24 (recursive + input-#6) so both
opset-24-detection paths agree.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Signed-off-by: titaiwang <titaiwang@microsoft.com>
titaiwangms
added a commit
that referenced
this pull request
Jun 19, 2026
…ew fixes Extend coverage for each behavior added in d0e96f5, per review: (2) ort_capabilities.py: extract _classify_run_error(exc) -> _ProbeOutcome (the caught session.run error -> NEEDS_FIX vs PROBE_ERROR mapping, with the debug/warning logging colocated) so the outcome is unit-testable without CUDA. New tests assert NotImplemented -> NEEDS_FIX, a signature-matching Fail -> NEEDS_FIX, a genuine Fail (CUDA OOM, no signature) -> PROBE_ERROR (not a silent 'needs #28958' skip), and the RuntimeError fallback -> PROBE_ERROR. (M2) add ort_inference_test.py: _should_lower_opset with a nested If-subgraph Attention(nonpad_kv_seqlen input #6) -> False, proving the recursion + input-#6 alignment now fires where the old top-level-only scan missed it; plus top-level TensorScatter, standard-graph-lowers, cpu-skip, flag-disabled, and opset<=max guards. (1) cpu-skip already covered by _builder_test.test_apply_opset_lowering_skipped_for_cpu_ep. Behavior unchanged; 28 unit tests pass, static-cache GPU tests remain fail-closed-skip on pre-#28958 ORT. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: titaiwang <titaiwang@microsoft.com>
titaiwangms
added a commit
that referenced
this pull request
Jun 19, 2026
codecov/patch flagged the new ort_capabilities.py probe-execution lines as uncovered: on CPU CI the probe short-circuits at the no-CUDA guard, so the graph builder, feeds, session run/classify, and skip-reason mapping never ran end-to-end (only the pure classifier was unit-tested). Add CPU-only coverage that mocks ort.InferenceSession to drive _probe_static_cache_flash through every outcome - SUPPORTED, NEEDS_FIX (NotImplemented reject + silently-wrong value), PROBE_ERROR (genuine Fail, CUDA EP absent, unexpected build failure), and NO_CUDA - asserting the WARNING is logged on each unexpected failure. Also cover the probe-graph structure (TensorScatter x2 + maskless is_causal Attention with nonpad_kv_seqlen input #6), the known-answer feeds, and the skip-reason / supports_static_cache_flash mapping for all four outcomes. ort_capabilities.py now 100% covered. Add a _builder_test case for the per-model continue guard in _apply_opset_lowering (a sub-model with no default opset import is skipped). Behavior-preserving: production code untouched; 46 unit tests pass, the static-cache GPU trio still fail-closed-skips on pre-#28958 ORT. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Signed-off-by: titaiwang <titaiwang@microsoft.com>
titaiwangms
added a commit
that referenced
this pull request
Jun 23, 2026
…ion for float-bias decoders (#367) ## What Adds a flag-gated, bias-aware variant of the shared static-cache `Attention` path: it can now carry an optional float additive bias (causal + sliding-window + Gemma-4 block-overlay + padding) over the opset-24 external KV cache (`TensorScatter` + `nonpad_kv_seqlen`), with `is_causal=0` strictly paired to bias-present. The maskless `is_causal=1` path (#345) stays the default and is byte-identical when the flag is off. This is the contract-independent, ORT-testable CORE of #349 (float-bias decoders → near-GQA decode). It does NOT re-emit Gemma-4 itself or wire genai — those are deliberately out of scope (see below). ## Changes - `components/_common.py`: NEW `create_static_cache_attention_bias` — emits a `(B,1,S_q,max_seq)` additive bias keyed on absolute query positions (`write_indices + arange(S_q)`) over dense cache slots with validity `slot < nonpad_kv_seqlen`, reusing the proven `create_attention_bias` causal/sliding/block-overlay/padding rules (re-keyed to static-cache geometry). Exported from `components/__init__.py`. - `components/_attention.py`: static branch now derives `(mask_arg, is_causal)` from `attn_mask` presence — bias-present ⇒ `is_causal=0` (strictly paired; incoming `is_causal` ignored so the two can never disagree), maskless ⇒ `is_causal=1`. `nonpad_kv_seqlen` kept as Attention input #6 in both modes. - `models/base.py`: `TextModel` threads the bias when `flags.static_cache_bias` is on AND the model has a `sliding_window` AND static cache is active; otherwise exact prior maskless behavior. - `_flags.py`: NEW `MOBIUS_STATIC_CACHE_BIAS` env flag (default OFF) → `flags.static_cache_bias`. - `tests/static_cache_bias_parity_test.py`: NEW — ORT CPU (MEA) manual-feed parity vs an independent numpy dense-attention reference for a prefill chunk, a decode step, a per-batch B=2 decode (write/nonpad broadcasting), a sliding-window sweep, and a nonpad padding-clamp; plus graph-wiring tests asserting flag-off=maskless, flag-on+sliding=bias-threaded (is_causal=0, bias input#3, nonpad input#6), and flag-on+non-sliding (llama) stays maskless. 10/10 on CPU; no genai, no Flash, no onnxruntime#28958 required. ## Why flag-gated / what's deferred (Phase 2, under #349) The bias geometry is a pure function of model semantics + cache layout, independent of how the runtime drives the graph — so it is safe to land before the genai consumer exists. Explicitly OUT OF SCOPE here: re-emitting Gemma-4's own task/model on the static path, `genai_config.json` wiring, single-graph vs prefill/decode-split packaging, e2e generation/decode profiling, the 4D KV layout migration, and block-overlay at non-zero write offsets (decode-time block overlay is a no-op under the current scatter-current-chunk geometry; TODO noted in the test file). ## Verified - 10/10 new parity tests on CPU (ORT MEA) vs an independent numpy dense reference; broad non-integration sanity 2927 passed / 43 skipped; lintrunner clean (real pyproject config). - Triple-reviewed (code + critical + readability) on the impl + a code/critical delta pass on the review polish. Critical empirically verified on CPU that the bias-MEA contract keeps every query row's diagonal slot valid (no fully-masked row → no NaN edge). ## Relationships - Closes #366 - Part of #349 (Gemma-4 end-to-end near-GQA decode consumer) - Sibling to #345 (maskless `is_causal=1` static-cache graph) — shares the `TensorScatter` + `nonpad_kv_seqlen` primitive; this PR adds the bias variant. - genai-side driving tracked separately at microsoft/onnxruntime-genai#2204. --------- Signed-off-by: titaiwang <titaiwang@microsoft.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps ruff from 0.15.4 to 0.15.6.
Release notes
Sourced from ruff's releases.
... (truncated)
Changelog
Sourced from ruff's changelog.
... (truncated)
Commits
e4c7f35Bump 0.15.6 (#23919)edfe6c1[ty] Narrow type context during collection literal inference (#23844)dd16d68Exclude broken symlink in ecosystem check (#23921)3f94c6aFix stack overflow in ANN401 on quoted annotations with escape sequences (#23...91fc7bd[ty] Fix false-positive diagnostics for PEP-604 union annotations on attribut...04229cf[ty] Initial test suite for PEP-728TypedDictfeatures (#23832)728b9d6[pep8-naming] Check naming conventions inmatchpattern bindings (N806,...88d1eec[ty] Ensure atype[]typeTis always considered assignable to a union th...37cdd61Fix lambda body formatting for multiline calls and subscripts (#23866)a25a4df[ty] Disambiguate duplicate-looking overloaded callables in union display (#2...Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
@dependabot rebasewill rebase this PR@dependabot recreatewill recreate this PR, overwriting any edits that have been made to it@dependabot show <dependency name> ignore conditionswill show all of the ignore conditions of the specified dependency@dependabot ignore this major versionwill close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this minor versionwill close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)@dependabot ignore this dependencywill close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)