Conversation
…s from a single forward
This branch has not been deployed
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.
One
Qwen3TTSModelclass now serves every 12 Hz Qwen3-TTS checkpoint. The variant is read fromconfig.json. Registry keys:qwen3_tts(0.6B CustomVoice, as before),qwen3_tts_1p7b,qwen3_tts_voicedesign,qwen3_tts_base.Depends on #298, #299, #300 and #301 (their commits are cherry-picked here and will drop out on rebase once they merge).
Graph
What changed vs the 0.6B port
small_to_mtp_projection(Talker 2048 -> predictor 1024) and the reference's prompt layouts (instruct turn, speaker slot, whole-text vs streamed text, in-context clone)./v1/audio/speechadapter (voice, instructions, language, ref_audio / ref_text / x_vector_only_mode), sentence chunking for inputs of 600+ characters, error status instead of an empty WAV on rejected requests. SDKclient.tts(..., reference_audio=...).model_kwargs: {codec_dtype: bfloat16}(fp32 default keeps the codec bit-exact) andconfigs/qwen3tts_1p7b_split.yaml(codec on a second worker on the same GPU).Parity vs qwen-tts 0.1.1 (teacher-forced logits, 63 frames, bf16 Talker, fp32 codec)
Talker and CodePredictor logits are within 0.5-0.8% of the logit scale and agree on 100% of confident positions (reference top-2 margin > 1) for all six modes. The codec is bit-exact against the fp32 reference. Raw argmax agreement and identical greedy frames are reported but not gated, bf16 near-ties flip them.
Base clone codes match the fp32 reference encoder bit for bit (the qwen-tts package runs its encoder in bf16 and agrees with its own fp32 run on 51% of codes).
Benchmarks (one H100, same node, back to back, 200 sentences x 3 repeats, 3 warmup requests)
sglang_omni_1p7bat c=32 with its default recipe rejected 160 of 600 requests with 503 (16 running + 16 queued), so the c=32 row uses--tts_engine.engine.max_running_requests 32 --tts_engine.engine.max_queued_requests 64.All 27 rows (fp32 / bf16 codec, single worker / split / split + MPS, 0.6B, SGLang-Omni default recipe)
Reproduce:
Known gaps
max_new_tokens(8192, the checkpoint default) bounds a runaway request.References read, not copied: qwen_tts 0.1.1 modeling/inference files, vllm_omni
qwen3_ttsprompt builder +deploy/qwen3_tts.yaml, sglang_omniqwen3_ttsrequest builders, streaming vocoder and cookbook.