Skip to content

kokoro_82m_q8_0: regenerate the published package so it declares the 'phonemes' request option #594

Closed

Description

@christopherthompson81

#577 added Kokoro's phonemes request option, and made the engine serve it against packages whose embedded contract predates it by dropping the key from the validation copy. So nothing is broken — but the published kokoro-82m-q8_0.gguf still cannot declare the option, and only a re-upload can fix that.

What the current package cannot do

package declares a 'phonemes' request option: no

A caller who read the docs can pass phonemes and it works. A caller who asks the package what it supports is told it does not support it. That covers the web UI's option list, the /v1/ui endpoints, and any third-party binding enumerating request options — none of which can surface the option to a user, because discovery goes through the declared contract rather than through the docs.

It also means the exception in validate_request_options has to stay indefinitely, next to irodori_tts.codec_backend and the Parakeet TDT VAD controls already in that position. Each one is individually reasonable and collectively they are a list of options the engine serves but no package admits to.

The regeneration, verified

Since #579 this is a single in-place re-encode, because the tool now carries an input's embedded sidecars across rather than dropping them to the filter meant for source trees:

audiocpp_gguf --input kokoro-82m-q8_0.gguf --output kokoro-82m-q8_0.gguf \
              --type orig --family kokoro_tts \
              --model-spec model_specs/kokoro_tts.json --overwrite

note: reusing the 59 sidecars embedded in kokoro-82m-q8_0.gguf
embedded_sidecars=true
embedded_sidecar_count=59

Run here against the published package, CUDA build, 7.6 s:

  • 189,611,360 → 189,548,384 bytes, the delta being the replaced spec
  • all 59 voices carried; the result loads and synthesizes
  • driven through the C ABI with no --model-spec-override: phonemes is declared, and supplied phonemes, the empty-list and empty-entry refusals, and the out-of-vocabulary rejection all behave exactly as they do against the current package through the relaxation path

⚠ Worth noting for anyone who regenerates this on an older build: before #579 that same command silently produced a package with 5 of 59 sidecars and no voices, exiting 0 and reporting that it had reused them. The round trip is only safe as of that fix.

Existing installs

model_manager_v2.py records a per-file etag in the install manifest and compares it against the remote one, so a replacement upload at the floating main revision reports update_available rather than diverging silently or failing a pinned hash. Nothing needs re-pinning, and an existing install keeps working on the old file until the user updates.

The ask

Re-upload Kokoro-82M-GGUF/kokoro-82m-q8_0.gguf regenerated against the current model_specs/kokoro_tts.json. Happy to attach the re-emitted file or a diff of the embedded spec if that is useful — the upload itself is the part I cannot do.

(Found while binding the list-valued option ABI from #566 for a .NET consumer, where the declaration probe is what a caller uses to decide whether to offer the feature at all.)

🤖 Generated with Claude Code

https://claude.ai/code/session_01QCCx4pMMex72qrNomPh5yL

Activity

  1. 0xShug0 commented on Sep 17, 2026

    @0xShug0
    Owner

    Done!

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions