Skip to content

perf(mlx-lm): Gemma 4 v0.8.2 — shared tower, layer-18 submission, coupled weighted-unsort+R1, packed multimodal - #102

Merged
Gajesh2007 merged 12 commits into
mainfrom
codex/gemma4-autoresearch-v0.8.2
Aug 11, 2026
Merged

perf(mlx-lm): Gemma 4 v0.8.2 — shared tower, layer-18 submission, coupled weighted-unsort+R1, packed multimodal#102
Gajesh2007 merged 12 commits into
mainfrom
codex/gemma4-autoresearch-v0.8.2

Conversation

@Gajesh2007

@Gajesh2007 Gajesh2007 commented Aug 10, 2026

Copy link
Copy Markdown
Member

Status

Ready for review at c5c5338. The lower mlx #4 and mlx-swift #11 dependencies are merged. Current main (802398d) is integrated, GitHub reports this PR clean and mergeable, every review thread is resolved, and final Codex review found no major issues.

Stack order: merged mlx #4 -> merged mlx-swift #11 -> this PR -> d-inference ml-explore#607.

What ships

  1. One Gemma 4 text tower: VLM, CBv2, MTP, LoRA, sizing, and direct forwarding share one owned Gemma4TextModel.
  2. Scheduled layer-18 submission: scheduled CBv2 prefill may submit at the configured layer interval; direct forward, decode, and MTP stay outside that path.
  3. Coupled weighted-unsort + safe R1: one exact topology and quantization predicate drives both halves, and weighted reduction is limited to scheduled CBv2 prefill.
  4. Shared-tower safety: fp16 attention is promoted on direct and contiguous-CBv2 paths, root and nested mixed-precision maps survive both wrappers and round trips, and all-mode bidirectional attention is refused before CBv2 cache construction.
  5. Public MoE compatibility: both SwitchGLU initializers retain fuseGateUp, fused checkpoints register gate_up_proj, and the Gemma-specific optimized reduction stays on its supported separate-projection topology.
  6. Legacy API and prefill compatibility: the public attentionKeqV: layer-kind overload remains source-compatible, and fully bidirectional legacy prompts run as one whole-prompt forward instead of invalid chunked prefill.
  7. Packed multimodal prefill: rectangular CBv2 groups retain row-local span contexts and bounded query-mask expansion.

Before / After: behavior

flowchart LR
  subgraph Before
    A1[Gemma VLM load] --> B1[second reconstructed text tower]
    A2[CBv2 prefill] --> B2[one terminal submission]
    A3[fused MoE checkpoint] --> B3[public fused initializer unavailable]
  end
  subgraph After
    C1[Gemma VLM load] --> D1[one owned shared text tower]
    C2[scheduled contiguous CBv2 prefill] --> D2[layer-interval submission plus safe expert path]
    C3[fused MoE checkpoint] --> D3[gate_up_proj topology loads and forwards]
  end
Loading

Before / After: code

flowchart TD
  subgraph Before
    V1[MLXVLM.Gemma4] --> X1[extraction and re-key]
    S1[SwitchGLU] --> U1[separate gate_proj and up_proj only]
    P1[EngineV2 prefix cache] --> L1[lookup and donation]
  end
  subgraph After
    V2[MLXVLM.Gemma4.textModel] --> C2[CBv2 / MTP / LoRA / sizing]
    S2[SwitchGLU.callAndWeightedReduce] --> G2[shared eligibility gate]
    S2 --> F2[optional fused gate_up_proj]
    P2[cbv2LayerKindsAllowPrefixReuse] --> L2[lookup and donation gates]
  end
Loading

Verification

  • Full package at c5c5338: 460 XCTest passed, 1 skipped; 781 Swift Testing tests in 110 suites passed.
  • Downstream final tree: 2,018 tests in 207 suites plus 82 XCTest, zero failures.
  • Focused regressions cover real contiguous-CBv2 fp16 overflow, VLM root per-layer round trips, text-wrapper root modes and overrides, fully bidirectional prefix exclusion and whole-prompt legacy prefill, the old layer-kind API, and both fused SwitchGLU initializer overloads.
  • Exact-output invariance and delivered-arrival topology pass under explicit contiguous KV.
  • CodeQL and final Codex review are green on the current head.

Performance evidence

The clean attribution epoch measured the production CBv2 path at 2K TTFT 1715 -> 1390 ms, arrival TTFT 1.41-1.76x, arrival E2E +18-25%, and decode +1.3-2.3% on an M4 Max. A final same-binary contiguous bracket passed correctness and provenance, but host throughput drifted materially, so its late timing is retained only as diagnostic evidence.

The final scope change removes the direct-prefill regression by allowing weighted reduction only through Gemma4TextModel.cbv2Prefill; it preserves the serving path that produced the TTFT signal.

Release posture

The stock provider release remains contiguous KV. Paged support and explicit paged gates remain available, but paged is not the default release posture.

No release or production deployment is part of this PR.

…n, coupled weighted-unsort+R1, packed multimodal

Retained slices (each source-reviewed; retention per 2026-08-09
production matrix against A/B default brackets):

- Phase 1 shared VLM text tower: MLXVLM.Gemma4 owns exactly one
  Gemma4TextModel exposed as textModel; sanitizer normalizes only
  language keys, quantization/quantization_config alias overlays enter
  before strict load; nested VLM decode defaults and unsupported-flag
  rejections preserved; LoRA decoder roots; 'all' bidirectional
  attention; maxKVSize-bounded direct caches.
- Phase 2 layer-interval lazy prefill submission: post-layer asyncEval at
  the configured interval (default 18, DARKBLOOM_GEMMA4_PREFILL_CHUNK_EVAL),
  CBv2 scheduled L>1 only, ordinary/decode/MTP untouched; effective
  interval provenance + counted StepProfiler engagement, fail-closed
  benchmark check.
- Phase 4+7 coupled expert optimizations: one contract
  (gemma4SupportsCoupledExpertOptimizations = exact production topology
  AND safe-R1 quantization) drives the fused weighted-unsort direct
  reduction in SwitchGLU and the safe expert-QMM request together;
  lock-free-armed WeightedExpertUnsortProbe provenance, decode/MTP/small
  shapes always on the legacy scatter+weighted-sum route.
- Phase 5 packed multimodal prefill: explicit model+cache capability
  claims, row-local image splice with row-aligned span contexts threaded
  through rectangular CBv2 groups; vision rows keep per-block span
  intersection inside the existing q=128 query blocks; text rows
  unchanged; paged/custom providers fail closed; MTP preconditioned nil.

Dropped per matrix and removed: expert gate/up packing (own decode
regression), dense gate/up packing (never engaged), and standalone
weighted/R1 profiles (prefill/decode regressions); GateUp/Dense focused
suites are superseded by Gemma4ExpertOptimizationEligibilityTests and
BenchCBv2ProvenanceTests.
@Gajesh2007

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 53e8ccd4e1

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Libraries/MLXVLM/Models/Gemma4.swift
Comment thread Libraries/MLXVLM/Models/Gemma4.swift
Comment thread Libraries/MLXVLM/Models/Gemma4.swift
Comment thread Libraries/MLXVLM/Models/Gemma4.swift
…ower

Four cutover regressions found in review of #102:

1. fp16 SDPA promotion (vmlx #52): the deleted inline text tower promoted
   Q/K/V to float32 around attention when activations are fp16 and cast
   back before o_proj; the canonical tower passed fp16 straight into the
   fused/composed SDPA shapes, allowing non-finite scores. Restored in
   Gemma4Attention's direct forward (fused and fallback paths);
   bf16 (production) is unchanged.
2. Rank-1 token acceptance: both public Gemma4TextModel entry points
   (callAsFunction, callCapturingPreNorm) now expand [N] to [1, N]
   before any dim(1) read, matching the deleted twin's cache-reuse
   contract (e.g. deprecated TokenIterator callers).
3. Full-layer global KV heads: Gemma4Attention now honors
   num_global_key_value_heads on full layers independent of
   attention_k_eq_v (k_eq_v only elides v_proj), and the model-level
   kvHeads map uses the same per-layer rule.
4. Quantization round-trip: explicit Gemma4TextConfiguration.encode(to:)
   re-emits every keyed property plus the nested quantization block, so
   decode-encode-decode no longer drops text_config-local quantization
   (previously skipped module quantization at strict load).

New suite Tests/MLXLMTests/Gemma4SharedTowerContractTests.swift pins all
four (bit-exact rank-1 parity, projection-shape head rule, forged
fp16-overflow stability, idempotent round trips incl. root precedence).
Full package suites: 594 swift-testing tests + 471 XCTest pass
(CBv2CompiledDecodeTests.testSinksParity flaked once compiled-vs-eager
at token 2 on a path this change cannot reach; passed on rerun and is
unrelated).
@Gajesh2007

Copy link
Copy Markdown
Member Author

Codex review addressed in 1d46abc (pushed). All four findings verified real against the deleted tower at abd1985:Libraries/MLXVLM/Models/Gemma4.swift and fixed:

Finding Fix Regression pin
P1 fp16 attention lost fp32 promotion Gemma4Attention direct forward promotes Q/K/V → fp32 for .float16 (fused + fallback paths), casts back before o_proj; bf16 production unchanged fp16-overflow forge test (Q/K weights ×600 ⇒
P2 rank-1 [N] tokens trap on dim(1) callAsFunction + callCapturingPreNorm normalize to [1, N] before any dimension read bit-exact rank-1 vs batched parity test
P2 global KV heads gated by k_eq_v full layers honor num_global_key_value_heads independent of k_eq_v (k_eq_v only elides v_proj); kvHeads map now per-layer projection-shape tests both k_eq_v values
P2 nested quantization lost on round trip explicit Gemma4TextConfiguration.encode(to:) re-emits all 29 keyed fields + nested quantization block idempotent decode→encode→decode tests incl. root-precedence

New suite Gemma4SharedTowerContractTests (6 tests) pins all four contracts. Full package suites: 594 swift-testing + 471 XCTest pass (one unrelated flake in CBv2CompiledDecodeTests.testSinksParity — compiled-vs-eager at token 2 on a path these changes cannot reach; passed on rerun; being root-caused separately).

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1d46abc2df

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift Outdated
Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift Outdated
Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift
Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift
… normalize layer_types

Deep-review follow-ups on the shared-tower fixes:

- CBv2 layer-kind derivation and the three MTP validation sites carried
  the old k_eq_v-gated global-KV-head rule while the model constructor
  moved past it — KV storage would mis-size for k_eq_v=false + global-
  heads configs (prefill trap on shape precondition). gemma4LayerKinds
  now derives kvHeads = sliding ? numKeyValueHeads : (global ?? numKV)
  and loses the dead attentionKeqV parameter (wrapper + both test call
  sites updated); MTP effectiveFullKVHeads/bind checks use the same rule
  and the stale numGlobal-equality site is removed.
- The fp16 overflow test was vacuous: RMSNorm divides projection scale
  out before attention, so forging q/k_proj reached nothing. Scores are
  now forged via q_norm/k_norm gains (|q·k| ≈ 600²×16 ≫ 65504); a
  non-promoting build fails it.
- layer_types decode: short explicit lists pad with sliding_attention
  and empty lists fall back to all-sliding instead of trapping at model
  construction — restoring the deleted towers' out-of-range tolerance.
- Rank-1 acceptance now also pinned through callCapturingPreNorm
  (MTP verify surface); fp16 promotion comment records the CBv2 scope
  boundary (CBv2 serves the bf16 contract; fp16 CBv2 is not admitted).
- New pins: kinds↔model kvHeads agreement across k_eq_v, and the
  canonical full-layer ProportionalRoPE construction (over full head
  dim, /dims frequencies, +inf pass-through) — disclosing that the
  deleted tower's truncated-rope pattern was the anomaly corrected by
  the cutover, not a semantic we restore.
- Old-rule expectations in Gemma4AssistantDraftModelTests replaced with
  matched/mismatched effective-KV-head coverage.

Suites: contract 10/10; CBv2Model/MTP/Assistant/BaseConfiguration 72/72.
@Gajesh2007

Copy link
Copy Markdown
Member Author

Deep-review round complete — fixes landed as f00c9bd (pushed). The four codex findings were all real and are now completely closed, plus three new findings from the agent review were fixed in the same wave:

Prior finding Completion
fp16 promotion restored on the direct/legacy surface (the deleted tower's only reachable path); CBv2 scope explicitly documented (bf16 contract). The first promotion test was vacuousRMSNorm divides projection scale out; re-forged via q_norm/k_norm gains so forged scores genuinely exceed fp16 max (a non-promoting build fails it).
rank-1 tokens both public entries normalized + pinned (callAsFunction AND callCapturingPreNorm, the MTP surface).
global KV heads gated by k_eq_v now complete: also fixed in CBv2LayerKindDerivation.gemma4LayerKinds (the k_eq_v-gated rule mirrored there — dead parameter removed, wrapper + test call sites updated) and all three Gemma4MTPConfigurationValidation sites; kinds↔model agreement test added.
quantization round-trip complete + idempotence-pinned.

New findings fixed this wave: short/empty layer_types lists normalize at decode (deleted-tower tolerance restored; previously a construction trap); MTP bind tests that pinned the old buggy rule rewritten to matched/mismatched effective-count coverage; canonical full-layer ProportionalRoPE construction pinned with a disclosure note (the deleted tower's truncated-rope pattern was the anomaly the cutover silently corrected).

Suites: contract 10/10; full package 599 swift-testing + 471 XCTest, 0 failures, twice (CBv2CompiledDecodeTests.testSinksParity's one flake root-caused as pre-existing on main since #62 — timing-dependent batch composition + exact-token assertion over ~1e-5 numerics; this branch can't reach it, verified by reachability + 0/31 reproduction rate at HEAD).

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f00c9bdcfa

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift Outdated
Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift Outdated
…TP attention-products check

validateAttentionProducts still derived fullKVHeads via the gated rule —
provably unfailable as a rejection check (per-field caps bound the
product far below the tensor limit), but the old rule alive in code and
inconsistent with the neighboring divides check. Full layers now honor
num_global_key_value_heads whenever present there too. Final LM-verifier
sign-off item; the k_eq_v rule is now gone from every KV-head
derivation in the tree.
@Gajesh2007

Copy link
Copy Markdown
Member Author

Final review wave (#2) complete. Every prior finding is closed; the final verifier pass signed off each repo:

  • mlx 9b0d1b4c: the sortedness fail-safe is now a sound oracle (strided adjacent-pair scan ⟺ globally non-decreasing — intra-segment inversions can't escape); retracts get a dedicated fallback_sortedness_retracted counter (diagnostics ABI 80→88 appended-only, facades byte-synced, pins updated); new doctests pin the arm/disarm cycle. 262/262 cases, 3550 assertions.
  • mlx-swift 38eaa93: mirrors byte-identical to canonical; generator post-condition guarantees one MLX_API guard or fails; facade pivoted to the 88-byte ABI; OFF (6 tests, 2 conditional skips) and ON (6/6, real R1 hits on this machine) both green.
  • mlx-swift-lm 06046c3: the LAST textual survivor of the k_eq_v-gated head rule is gone (validateAttentionProducts) — rule eradication is now complete across model, CBv2 layer kinds, MTP validation, and sizing. 599+471 green twice.
  • d-inference b0fa08af6: UpdateCommand now falls back ONLY for missing/unreadable config (malformed files fail loudly — final swallow hole); preload-gate margin widened for loaded machines (make provider-test: 1692/181, 0 failures on this box).

Perf-gate status unchanged: attribution rerun deferred to a cooled machine (see the prior comment — the box measured ~1.7× slow during the late-night window). The remaining open perf item is the nested PR's per-hit synchronize() cost on engaged R1 shapes (production-inert today); it gets a dedicated measurement in that gate.

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. You're on a roll.

Reviewed commit: 06046c3f5d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

…arch-v0.8.2

# Conflicts:
#	Libraries/MLXLMCommon/ContinuousBatchingV2/AttentionV1.swift
#	Libraries/MLXLMCommon/ContinuousBatchingV2/EngineLoopV2.swift
#	Package.swift
#	Sources/BenchCBv2Core/BenchCBv2RealModel.swift
@Gajesh2007

Copy link
Copy Markdown
Member Author

Final merge-readiness pass complete:

  • Upstream conflicts resolved by merging current base branches; no history rewrite.
  • Heads: mlx 9b0d1b4c, mlx-swift 38eaa93a, mlx-swift-lm 29ff95bc, d-inference 6aa321a71.
  • Every prior review finding is fixed and every stale thread is resolved.
  • LM preserves upstream paged/CBv2 work and adds focused regressions for all shared-tower compatibility edges. Weighted expert reduction is now limited to scheduled CBv2 prefill, eliminating the direct-prefill regression found by the final ablation.
  • Root benchmark artifacts now record typed effective Gemma settings across all phases, reject malformed baselines/sample-count drift, load explicit configs read-only, pin KV backend posture, and force fixed decode token budgets.
  • Verification: final downstream make provider-test = 2,017 tests / 207 suites plus 82 XCTest; benchmark contracts 59/59; coordinator tests/build green; UI 499 tests + lint (0 errors) + production build green; pre-push hook green.
  • Final same-binary A/B correctness gates: exact output invariance PASS, explicit contiguous backend PASS in every phase, delivered arrival topology PASS. Late timing attribution is explicitly caveated because the host drifted during the bracket; the earlier clean attribution epoch remains the performance record.

@codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 29ff95bc84

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift Outdated
Comment thread Libraries/MLXVLM/Models/Gemma4.swift Outdated
Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift
Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 072da0662a

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift
@Gajesh2007

Copy link
Copy Markdown
Member Author

Review follow-up complete at 1ddb070: all four new findings are fixed, replied to, and resolved. Full package: 460 XCTest passed (1 skipped) plus 778 Swift Testing; downstream provider: 2,017 tests / 207 suites plus 82 XCTest. The stock release posture is contiguous; paged remains explicit opt-in coverage. @codex review

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 1ddb070f74

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Libraries/MLXLMCommon/SwitchLayers.swift
@Gajesh2007

Copy link
Copy Markdown
Member Author

Final follow-up at 3c3ce9f: Gemma now rejects use_bidirectional_attention=all before CBv2 cache construction, closing split-prompt semantic drift. Production vision mode is unaffected. Full LM: 460 XCTest passed (1 skipped) plus 778 Swift Testing; downstream provider remains 2,017 / 207 plus 82 XCTest. All review threads are resolved. @codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Swish!

Reviewed commit: 3c3ce9ffe4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b677d81f43

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Libraries/MLXLLM/Models/Gemma4Text.swift
@Gajesh2007

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Nice work!

Reviewed commit: b677d81f43

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@Gajesh2007

Copy link
Copy Markdown
Member Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Can't wait for the next one!

Reviewed commit: c5c5338461

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@Gajesh2007
Gajesh2007 merged commit ed55bee into main Aug 11, 2026
3 checks passed
@Gajesh2007
Gajesh2007 deleted the codex/gemma4-autoresearch-v0.8.2 branch August 11, 2026 01:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant