Skip to content

fix(voice): diarizer IFGO cutover — fork reader sync pin + epoch-2 artifact republish (#11377)#11796

Merged
lalalune merged 1 commit into
developfrom
fix/11377-diarizer-ifgo-cutover
Jul 3, 2026
Merged

fix(voice): diarizer IFGO cutover — fork reader sync pin + epoch-2 artifact republish (#11377)#11796
lalalune merged 1 commit into
developfrom
fix/11377-diarizer-ifgo-cutover

Conversation

@lalalune

@lalalune lalalune commented Jul 3, 2026

Copy link
Copy Markdown
Member

Summary

Closes #11377 (diarizer DER 1.000 on the speakeriso:real bench).

The rebake-confirm evidence on the issue proved the DER-1.000 over-segmentation signature is pure LSTM gate-order skew between diarizer GGUF artifact and reader — the fork's vendored fused reader was still IOFC while the packages-side converter/reader moved to IFGO (+ the #11569 fail-closed epoch guard). This PR executes the corrected operator plan in the safe order:

  1. Fork reader sync (already merged fork-side): fix(omnivoice): reject explicit diarizer gate-order skew llama.cpp#40 (diarizer epoch/gate-order metadata parsing + contract test) then fix(omnivoice): sync vendored diarizer reader to IFGO + fail-closed epoch guard llama.cpp#41 (IFGO gate-unpack flip + the fix(voice): reject stale diarizer GGUF gate order #11569 fail-closed guard ported into the vendored voice_diarizer.c: converter_epoch >= 2 and lstm_gate_order == "IFGO" required, epoch-less/IOFC artifacts rejected loudly before tensor load).
  2. Epoch-2 IFGO artifact republished to HF elizaos/eliza-1 as a NEW file voice/diarizer/pyannote-segmentation-3.0-ifgo-epoch2.gguf (sha 100a5dbf…, bit-identical to the rebake-confirm session's deterministic bake; HF commit a89e5615). The old pyannote-segmentation-3.0.gguf (30983eba…) stays published so older fused libs keep working. voice/diarizer/SHA256SUMS added additively.
  3. This PR: submodule gitlink bump 58c0391ebdda200ab0 (a direct descendant — the On-device local LLM crash-loops on iPhone 16 Pro Max (A18 Pro): NULL Metal pipeline in ggml mul_mat during llama_decode #11612 Metal nil-pipeline/has_bfloat fixes are retained), diarizer 0.3.0 entry in VOICE_MODEL_VERSIONS, epoch-2 filename preferred in the workbench/attribution-smoke probe lists, evidence bundle.

Evidence (all real runs on M4 Max — .github/issue-evidence/11377-diarizer-ifgo-cutover/)

lane result
IFGO lib × epoch-2 bake DER 0.211, attribution 6/6 (margin 0.818), overlap probe localSpeakerCount=2 — PASS (was 1.000 in the skewed pairing)
IFGO lib × published IOFC 30983eba rejected loudly: stale GGUF converter epoch 0; need >= 2 with LSTM gates packed as IFGO → typed VoiceLifecycleError, bench exit 1 — no silent scramble
kokoro smoke audio identical to baseline-pin lib (envelope-cv 1.229, 91800 samples); TTFA >700 ms budget fails on the baseline pin lib too (4876 ms) — pre-existing cold-load issue, not a regression; the fork diff touches zero Kokoro code
asr smoke PASS — real transcript in 861 ms over Metal
fork contract test omnivoice-test-diarizer-metadatafailures=0 (epoch-2 IFGO clears guard to tensor stage; explicit IOFC / epoch-less / epoch-1 rejected with exact messages, stderr-captured)

Verification

  • bun run verify → exit 0 (full repo, local)
  • packages/shared voice-models tests 15/15; plugin-local-inference voice-models-routes + voice-model-updater 43/43
  • Rebased onto origin/develop (13f8727) pre-open

Test evidence rows

  • Real-LLM trajectories: N/A — no agent/action/prompt/model-routing behavior change; the change is a native voice-classifier reader + artifact pin.
  • Video/screenshots: N/A — no UI surface; bench logs + JSON reports attached in the evidence bundle.
  • Backend logs: attached (bench + guard rejection logs in the evidence bundle).
  • Domain artifacts: HF commit a89e5615 (new GGUF + SHA256SUMS), round-trip sha verified.

🤖 Generated with Claude Code

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Your trial has ended. Reactivate Greptile to resume code reviews.

@coderabbitai

coderabbitai Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ab9f89da-a587-4bf5-a82e-dcb666a71d24

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/11377-diarizer-ifgo-cutover

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

…tifact republish (#11377)

The DER-1.000 over-segmentation signature was pure LSTM gate-order skew
between diarizer GGUF artifact and reader (proven bit-for-bit in both
directions in the rebake-confirm evidence). Cutover, in the safe order:

- bump plugins/plugin-local-inference/native/llama.cpp to fork commit
  dda200ab0 (elizaOS/llama.cpp#40 + #41, both merged): vendored
  voice_diarizer.c now unpacks gates as IFGO (matching the packages-side
  converter/reader) and carries the #11569 fail-closed guard — artifacts
  without converter_epoch>=2 + lstm_gate_order=IFGO are rejected loudly
  before tensor load instead of silently scrambling. Descendant of the
  prior pin 58c0391eb, so the #11612 Metal fixes are retained.
- add diarizer 0.3.0 to VOICE_MODEL_VERSIONS: new HF file
  voice/diarizer/pyannote-segmentation-3.0-ifgo-epoch2.gguf
  (sha 100a5dbf…, HF commit a89e5615, elizaos/eliza-1). The 0.2.0 IOFC
  artifact stays published for older fused libs.
- prefer the epoch-2 filename in the workbench / attribution-smoke
  probe candidate lists.
- evidence: .github/issue-evidence/11377-diarizer-ifgo-cutover/
  (DER 1.000 -> 0.211 fixed pairing, loud guard rejection of the
  published IOFC artifact, kokoro/asr no-regression lanes) + preserve
  the rebake-confirm bundle referenced from the issue thread.

Closes #11377

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@lalalune lalalune force-pushed the fix/11377-diarizer-ifgo-cutover branch from 7b63180 to f53c990 Compare July 3, 2026 03:37

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Your trial has ended. Reactivate Greptile to resume code reviews.

@claude

claude Bot commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Claude encountered an error —— View job


I'll analyze this and get back to you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Diarizer DER 1.000 on a clean 2-speaker dialogue: pyannote segmentation over-detects (drops all segments as too-short)

1 participant