Skip to content

fix(omnivoice): reject explicit diarizer gate-order skew#40

Merged
lalalune merged 1 commit into
perf/kokoro-accelerate-blasfrom
fix/11377-omnivoice-diarizer-epoch
Jul 3, 2026
Merged

fix(omnivoice): reject explicit diarizer gate-order skew#40
lalalune merged 1 commit into
perf/kokoro-accelerate-blasfrom
fix/11377-omnivoice-diarizer-epoch

Conversation

@lalalune

@lalalune lalalune commented Jul 2, 2026

Copy link
Copy Markdown
Member

Summary

  • teaches the vendored Omnivoice GGUF loader to parse diarizer epoch, shape, and lstm_gate_order metadata
  • validates explicit diarizer metadata against the currently pinned fused reader contract (IOFC) before tensor load
  • keeps legacy/published epoch-less IOFC artifacts loadable on this branch, while future explicit IFGO artifacts fail loudly instead of silently scrambling gates
  • adds a metadata-only C test that writes tiny GGUF files, so no pyannote artifact is required

Validation

  • cmake -B build-11377 -S . -DLLAMA_BUILD_OMNIVOICE=ON -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_TOOLS=ON -DBUILD_TESTING=ON
  • cmake --build build-11377 --target omnivoice-test-diarizer-metadata -j
  • ./build-11377/bin/omnivoice-test-diarizer-metadata (omnivoice diarizer metadata failures=0)
  • git diff --check

Note: the focused build still emits pre-existing -Wdouble-promotion warnings in vendored voice classifier math, but the target builds successfully. CTest did not discover tests with LLAMA_BUILD_TESTS=OFF, so the new test binary was run directly.

Issue

Progress toward elizaOS/eliza#11377. This is the pinned-fork safety guard for the current IOFC reader. It does not perform the later coordinated IFGO reader sync + epoch-2 artifact republish step.

@coderabbitai

coderabbitai Bot commented Jul 2, 2026

Copy link
Copy Markdown

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: 3caa25a6-a746-48b5-8d9d-7405e915f379

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-omnivoice-diarizer-epoch

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.

@lalalune lalalune merged commit f0b0e0d into perf/kokoro-accelerate-blas Jul 3, 2026
8 of 38 checks passed
lalalune added a commit that referenced this pull request Jul 3, 2026
…fail-closed epoch guard

The vendored voice_diarizer.c still read pyannote LSTM gates in raw ONNX
IOFC order (the original C-side #9460 fix) while the package-side
converter moved the reorder converter-side and now bakes IFGO. Any
artifact x reader packing skew silently scrambles the gates into the
DER 1.000 over-segmentation signature (elizaOS/eliza#11377).

- flip the LSTM gate unpack to I,F,G,O — matches
  packages/native/plugins/voice-classifier-cpp voice_diarizer.c on
  elizaOS/eliza develop (post-#11569)
- port the #11569 fail-closed guard: require
  voice_diarizer.converter_epoch >= 2 and lstm_gate_order == "IFGO";
  epoch-less legacy artifacts (the previously published IOFC bake) and
  explicit non-IFGO artifacts are rejected loudly before tensor load
- extend the #40 metadata contract test to the fail-closed contract:
  epoch-2 IFGO clears the guard (reaches missing-tensor), explicit IOFC,
  epoch-less, and epoch-1 artifacts are all rejected with the exact
  guard message (stderr captured); metadata-only GGUFs padded to the
  32-byte data alignment so the zero-tensor mapper accepts them

Requires the coordinated epoch-2 IFGO artifact republish on HF
(elizaos/eliza-1 voice/diarizer/) before this ships in a fused lib pin.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
lalalune pushed a commit to elizaOS/eliza that referenced this pull request Jul 3, 2026
…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 added a commit to elizaOS/eliza that referenced this pull request Jul 3, 2026
…tifact republish (#11377) (#11796)

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: Shaw <shawgotbags@gmail.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
lalalune added a commit that referenced this pull request Jul 3, 2026
 IFGO reader sync) into the main reconciliation

develop's submodule gitlink advanced to dda200a while this reconciliation
was in flight; fold the two diarizer commits in so main contains the full
shipped lineage (elizaOS/eliza#11386).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant