Skip to content

server: accept dialogue speaker tags (depends on #1277) - #1278

Closed
krunkosaurus wants to merge 4 commits into
ashhart:mainfrom
krunkosaurus:drama-http/dialogue-speakers
Closed

krunkosaurus wants to merge 4 commits into
ashhart:mainfrom
krunkosaurus:drama-http/dialogue-speakers

Conversation

@krunkosaurus

@krunkosaurus krunkosaurus commented Oct 25, 2026 •

Copy link
Copy Markdown
Contributor

What this changes

Depends on #1277; merge sampling first. Incremental source review: 56648b94...60eb5d21. The final merge commit resolves the two feature documentation entries and test-module imports, retaining both native implementations unchanged.

Native Drama HTTP requests and reference transcripts accept canonical <|speaker:0|> through <|speaker:15|> tags. Existing prompt construction already represents these roles; this removes the server's speaker-zero-only refusal while preserving malformed-tag/structural-token validation. Fixes #1274.

Untagged input still starts as speaker 0, and modern catalogs still allow at most four reference passages. Sixteen role tokens do not promise sixteen cloned voices. Reference speaker changes invalidate the existing exact-prefix cache; request-only speaker changes can reuse an identical reference prefix.

The Sogni-AI/drama3-mlx prompt tests are a behavioral reference. This independently extends TensorFold's native validation and existing builder; no Fish-derived Python implementation is copied.

Receipt

Base 2ff01910; Zig 0.17.0, macOS arm64. Tests use synthetic integer codes and scripted PCM.

  • Before removing the guard: 739/746 passed, 3 skipped, four intended failures for HTTP dialogue/catalog/writer acceptance.
  • zig build test-server-cpu test-drama-host -j4: 777/780 passed, 3 skipped, 9/9 build steps. Standalone Drama host confirmation: 39/39 passed.
  • Tests inspect exact submitted rows for default/catalog voices × whole/streamed replies, all sixteen IDs, Unicode whitespace, malformed markers, structural injection, writer serialization and equal-length reference-tag cache invalidation.
  • Final composed source 60eb5d21: zig build test-server-cpu test-drama-host -j2 --summary all passes 784/787 tests, three skipped, 9/9 steps. Independent agent review confirms every nonconflicting source file matches its reviewed parent and both test imports are retained.
  • Formatting/diff checks pass; lean 435 inherited, zero new findings.
  • Independent adversarial agent review found no blocking modern implementation issue. Recipe documentation now scopes its four-reference limit correctly; the older CUDA format uses its existing body/file/prompt bounds.
  • Full-model and Metal NVFP4 backports compile and pass focused suites. The full-model pin lacks the native writer, so its backport does not introduce that absent tool; the recipe Python writer is tested separately.

Repository-wide checks on speaker commit 945c797b reached 499/502 build steps and 5,862/5,897 passed tests, 34 skipped and one crash: unchanged test-pull-host aborts with macOS ISCONN. The untouched base reproduces 20/21 passed and one crash. Plain zig build reached 223/226 steps with one compilation failure: unchanged tf-flashnext-run assigns SharedEvent to Event; the untouched base reproduces it (50/53 steps). These are recorded failures, not passing whole-upstream receipts.

Draft qualification limit: no device/model inference, voice-similarity listening, audio identity or performance qualification. Available memory is below the recipe launcher's admission floor; that guard was not overridden. Tags preserve model roles, not a guaranteed acoustic identity.

During final CPU replays, two unchanged recall tests failed while the volume had about 3.3 GiB free, below their existing 4 GiB admission floor. Removing only task-created compiler caches restored 5.043 GiB; the identical commands passed with no source, environment or admission-guard change. Original failure receipts were retained.

Integration

ATC issue/session coordination and independent review completed. #1268 merges cleanly in production code, with README/CHANGELOG conflicts. Complete inspection of oversized #728 adds no conflict paths beyond its 163 baseline conflicts. The separate legacy source/recipe companion is explicitly stacked after protected chunking, because arbitrary hard cuts otherwise fragment speaker markers.

  • Existing native prompt builder and exact-prefix cache retained.
  • Deterministic HTTP/parser/cache/writer regressions and independent review.
  • No native arithmetic, weights, codebook mapping or private-voice changes.
  • Device/model and listening qualification.

Pinned-engine packaging and user documentation: drama-tensorfold companion PR.

@krunkosaurus krunkosaurus changed the title server: accept Drama dialogue speaker tags 0 through 15 server: accept dialogue speaker tags (depends on #1277) Oct 25, 2026
@ashhart

ashhart commented Oct 26, 2026

Copy link
Copy Markdown
Owner

Landed on main in 715a074 on top of #1277, thanks @krunkosaurus. Untagged and <|speaker:0|> requests are unchanged (same byte-equality check as #1277 on an M3 Ultra), and malformed tags are still refused.

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.

Drama speech: accept canonical multi-speaker dialogue and references

2 participants