Repository navigation
Make Paradee model conversion reproducible across CPUs - #91
Merged
Merged
Conversation
Assisted-by: Codex
Assisted-by: Codex
lalalune
marked this pull request as ready for review
October 30, 2026 05:33
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.
Problem
The pinned mobile voice cannot be rebuilt on Linux. The Paradee converter folds weight normalization with
torch._weight_norm. Its F32 reduction changes with CPU dispatch: scalar and AVX2 produce different GGUF bytes from the same verified inputs. Neither matches the model pin produced on macOS arm64.A later type-check fix also changed the converter Git blob without refreshing the GGUF pins. This alone breaks Delibes: replacing only the recorded converter blob in a diagnostic reproduces its old checksum exactly.
Change
Fold each output channel with binary64 products and
math.fsum, then round once to F32. Refresh all affected GGUF pins. The Paradee tensors change slightly; all Delibes tensor bytes remain identical, and only its recorded converter identity changes.Add a conversion job for Linux x86_64 and macOS arm64. It checks the runner architecture, verifies every downloaded source file, converts all four models in native and scalar CPU modes, and checks complete file sizes and hashes against the pins. It uploads the result manifest even when a pin check fails.
Validation at a651529
rtol=5e-7, atol=1e-8of the original PyTorch fold. The 38 normalized tensors are the only changed tensors. Maximum absolute difference is5.96e-8.test-paradee-apipasses with Paradee 1.0, 1.1, 1.2 and Delibes.test-paradee-phase-lockpasses.af_heartandam_puck: five sentences per voice, identical integer durations, all stage gates passing, and waveform SNR above 65 dB. The reference wrapper only accepts the public torch version with its+cpusuffix; model arithmetic is unchanged. Exact dependency versions and the original strict-check failure are retained.Download before/after logs, input provenance, tensor comparisons, waveform parity reports and the exact patch. SHA-256:
efa663b054b1eefd3b8734e3ac59d47f1efc4b2b5c69540d7a66f7d52a4b9730.To reproduce, run the converters with the pinned source files and
--check-output. The new workflow records the complete commands and two CPU modes. SetPARADEE_GGUFfortest-paradee-api; setPARADEE_REF_DIRto an original-model dump fortest-paradee-parity.AI assistance: Codex implemented and checked the converter repair and evidence workflow under the repository owner's requested upstream unification work.