"""CUDA smoke coverage for the real Chatterbox synthesis path.""" from pathlib import Path import pytest import torch import torchaudio import app as chatterbox_app def test_runtime_requirements_pin_chatterbox_cuda_contract(): requirements = { line.strip() for line in (Path(__file__).parents[1] / "requirements.txt").read_text().splitlines() if line.strip() and not line.startswith("#") } assert { "chatterbox-tts==0.1.7", "torch==2.6.0", "torchaudio==2.6.0", "pydantic", "setuptools<81", "pytest", } <= requirements def test_chatterbox_generates_cuda_audio_from_reference_voice(tmp_path: Path): """The app wrapper returns real, decodable CUDA-synthesized WAV audio.""" if not torch.cuda.is_available(): pytest.skip("CUDA is unavailable") reference = chatterbox_app.VOICES_DIR / "reference.wav" assert reference.is_file(), "voices/reference.wav must be available for synthesis" manager = chatterbox_app.model_manager try: wav_bytes = manager.generate("Chatterbox CUDA smoke test.", reference, 1.0) finally: manager.unload() output_path = tmp_path / "chatterbox-cuda-smoke.wav" output_path.write_bytes(wav_bytes) waveform, sample_rate = torchaudio.load(output_path) assert isinstance(waveform, torch.Tensor) assert waveform.ndim == 2 assert waveform.shape[0] == 1 assert waveform.numel() > 0 assert sample_rate > 0 assert output_path.stat().st_size > 44