Skip to content

Pin the full model to TensorFold v1.1.9 with no patches - #31

Closed
plotarmordev wants to merge 1 commit into
mainfrom
feat/tensorfold-1.1.9
Closed

plotarmordev wants to merge 1 commit into
mainfrom
feat/tensorfold-1.1.9

Conversation

@plotarmordev

Copy link
Copy Markdown
Owner

Description and motivation

I move the full-model engine pin from TensorFold d1018b31 to v1.1.9 (465e48b6). The full-model patch series is now empty. v1.1.9 already includes every patch I carried:

Old patches In TensorFold since Upstream
0001–0011 (prefill rows, replay fix, frame budget, controls allowlist, voice catalogs, silence guard and redraws) v1.1.4 #1119, #1120, #1134, #1135, #1152, #1157–#1162
0012 reference-prefill reuse v1.1.5 a06a4dff, #1237
0013/0014 request sampling controls and JSON boundaries v1.1.6 #1277 (e19b8073, 90082556)

v1.1.9 also includes the slot-release fix (7e43ebeab, #1438), which shipped in v1.1.8. So this bump needs no local patch for it.

Patch check against v1.1.9: 0013 and 0014 no longer apply with git am, because the files they add (docs/speech-sampling.md, zig/src/server/speech_sampling*.zig) already exist there. I applied 0001–0014 to d1018b31 and compared the result with v1.1.9:

  • docs/speech-sampling.md is identical.
  • speech_sampling.zig and its test differ only by upstream's later fix 4a556244, which sends a temperature of -0/-1e-400 to the sampler as +0.
  • v1.1.9's zig/src/server/root.zig registers both test files.

The same is true for the dialogue-speaker patch proposed as full-model 0015 in #28: v1.1.9 already ships it (#1278), so it would not apply on this pin either.

What changes:

  • engine/UPSTREAM now pins v1.1.9. The 14 full-model patches are removed. engine/patches/SHA256SUMS stays as an empty file, which declares the empty series.
  • scripts/build-engine.sh accepts an empty series, but only when the manifest is present and empty. A missing manifest still fails before checkout, and so does a manifest that lists a patch that is not there. A new model-free build test covers both cases.
  • recipe/pilot.py passes TF_DRAMA_PREFILL_ROWS=128 for full and custom checkpoints on the Linux native backend. Upstream defaults to single-row prefill, and old patch 0001 turned batched prefill on. NVFP4 and the sglang backend are unchanged.
  • README, engine/patches/README.md, CONTRIBUTING, NOTICE, the macOS and sampling docs and CHANGELOG now describe the new pin. They also name its two behaviour differences:
    • With the mid-silence rule on, X-Silence-Mid-Trips now counts only the returned take. This has been true since v1.1.4 and is unchanged through v1.1.9.
    • The -0 temperature sign fix above.

The NVFP4 pins (CUDA and Metal) and their patch series are untouched.

This replaces the earlier 1.1.4 bump branch, which I will not merge.


Testing

CPU only. I built and tested on a GB10 host, without using its GPU.

  • Engine builds, ZIG=zig-0.17.0 NVCC=/usr/local/cuda/bin/nvcc JOBS=4 scripts/build-engine.sh --weights full <dir>:
    • A, on main db6ba7da: d1018b31 + 14 patches = e0f55c97. Exit 0 in 3:46. tensorfold-native sha256 93fc4ca1…d249, reports version 1.1.1.
    • B, on this branch cb958306: 465e48b6 + 0 patches = 465e48b6. Exit 0 in 4:32. tensorfold-native sha256 ca64be09…9c89b, drama3-generate sha256 32bbb744…6027, reports version 1.1.9.
    • The B binary's serve --help lists the guard flags the recipe uses. --voices, --allowed-controls and --max-frames don't appear in the help text on A or B; I found them in v1.1.9's zig/src/server/cli.zig.
  • python3 -m unittest discover -s recipe -p 'test_*.py': 48 tests OK. The 15 skips are the explicit macOS subprocess smoke tests.
  • The new build test fails against main's scripts/build-engine.sh (1 failure) and passes with this change.
  • python3 bench/stream_check.py --self-test: passed.
  • bash -n scripts/build-engine.sh: OK.
  • zig build test -Dnvcc=/usr/local/cuda/bin/nvcc in the v1.1.9 engine tree: exit 0 in 9:23. The test output includes expected-failure lines from negative cases. The build host exposed no CUDA device, so this covers host-side tests only.

Not run yet: GPU A/B. I will compare main (A) with this branch (B) using the guard pilot: builtin and catalog probes, 24 + 24 items, checked item by item against A, plus sequential drives at 0 and 200 ms gaps on B. It runs only when the GPU is free. I will add its result here. Until then this pull request has no audio-identity or qualification evidence. Byte identity with A is not guaranteed: upstream changed the engine between d1018b31 and v1.1.9, and the A/B will show how much.


Performance or quality claim

None.


Checklist

  • One change per patch, new patches at the end of the series, SHA256SUMS and engine/patches/README.md updated (series emptied; manifest kept empty)
  • scripts/build-engine.sh applies the whole series and builds from a clean checkout
  • Every behaviour change has a deterministic test that fails without it
  • No dead code, debug output or leftovers
  • No personal voices, recordings, private names, host names or private paths in code, fixtures, docs, evidence or commit messages
  • Where audio should not change, compare_gate.py reports "identical": true and stream_check.py passes; where it changes on purpose, the qualification gates are reported before and after (pending the GPU A/B)

TensorFold v1.1.9 (465e48b6) carries every full-model patch I shipped:
0001-0011 since v1.1.4, the reference-prefill reuse (0012, a06a4dff)
since v1.1.5 and the request sampling controls (0013/0014, #1277) since
v1.1.6. It also has the slot-release fix (7e43ebeab, #1438) since v1.1.8.
0013 and 0014 no longer apply to v1.1.9 because their files are already
there; the patched speech_sampling sources differ from v1.1.9 only by
upstream's +0 temperature fix (4a556244).

- engine/UPSTREAM moves to v1.1.9; engine/patches keeps an empty
  SHA256SUMS that declares the empty series.
- scripts/build-engine.sh accepts an empty series only through an
  empty manifest; a missing manifest or a listed-but-absent patch still
  fails before checkout. A new build test covers both.
- The Linux pilot sets TF_DRAMA_PREFILL_ROWS=128 for full and custom
  checkpoints, because upstream defaults to single-row prefill and the
  old patch 0001 turned batched prefill on.
- README, patch README, CONTRIBUTING, NOTICE, macOS and sampling docs
  and CHANGELOG describe the new pin and its two behaviour differences.
@plotarmordev

Copy link
Copy Markdown
Owner Author

Replaced by #33, the same change rebased onto main after #28.

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