[CI/Test] Add Fish Speech TTS e2e test (no e2e coverage in any pipeline tier)
#4,226 opened on Jun 7, 2026
Repository metrics
- Stars
- (4,990 stars)
- PR merge metrics
- (PR metrics pending)
Description
Summary
Fish Speech has no end-to-end test in tests/e2e/. Every other TTS model has at least a core_model online smoke test that runs in CI, but Fish Speech only has CPU unit/regression tests, so no GPU serving path is exercised in any pipeline tier.
Why this matters
The CI tiers gate TTS e2e coverage by pytest marker:
- The
readytier (.buildkite/test-ready.yml) runscore_model and ttsonline smokes, e.g. VoxCPM2: https://github.com/vllm-project/vllm-omni/blob/main/.buildkite/test-ready.yml#L335-L342 - The
tts-test/nightly-testgroup runsfull_model and L4 and ttsovertests/e2e/: https://github.com/vllm-project/vllm-omni/blob/main/.buildkite/test-nightly.yml#L392-L399
Because no Fish Speech test lives under tests/e2e/ and none carries the tts marker, both tts-test and nightly-test are no-ops for Fish Speech. Recent Fish Speech bug fixes (prefix-cache collision #4008, Gradio default-voice 400 #3941) had no e2e path to catch them.
What to do
Add an online serving e2e smoke that mirrors the VoxCPM2 pattern:
- Create
tests/e2e/online_serving/test_fish_speech_tts.py - Mark it
@pytest.mark.core_model+@pytest.mark.tts(addL4+full_modelvariants if feasible) - Cover a basic
/v1/audio/speechtext-to-speech request and a voice-clone request (ref_audio+ref_text), asserting non-empty, non-silent audio - Reference implementations:
- VoxCPM2 e2e:
tests/e2e/online_serving/test_voxcpm2_tts.py - Fish Speech serving path:
vllm_omni/entrypoints/openai/serving_speech.py - Example client:
examples/online_serving/text_to_speech/fish_speech/
- VoxCPM2 e2e:
Acceptance criteria
- Test collected by
pytest -m "core_model and tts"and by the nightlytts-testselector - Passes on an L4 GPU with the published Fish Speech checkpoint
Good first issue for someone wanting to learn the vLLM-Omni TTS serving + CI test layout.