import json import unittest from pathlib import Path class ColabNotebookTests(unittest.TestCase): @classmethod def setUpClass(cls): cls.path = Path("AI_RVC_Colab.ipynb") cls.notebook = json.loads(cls.path.read_text(encoding="utf-8")) cls.source = "\n".join( "".join(cell.get("source", [])) for cell in cls.notebook.get("cells", []) ) def test_notebook_json_is_valid_and_has_gpu_metadata(self): self.assertEqual(self.notebook["nbformat"], 4) self.assertEqual(self.notebook["metadata"].get("accelerator"), "GPU") self.assertEqual(self.notebook["metadata"].get("colab", {}).get("gpuType"), "T4") def test_colab_uses_python_310_environment_for_fairseq(self): self.assertIn("uv python install 3.10", self.source) self.assertIn("uv venv --seed --python 3.10 venv310", self.source) self.assertIn("$PY -m pip --version", self.source) self.assertIn("uv run --python 3.10 python install.py --no-run", self.source) self.assertIn("assert sys.version_info[:2] == (3, 10)", self.source) def test_colab_preinstalls_gpu_torch_before_project_dependencies(self): self.assertIn("--index-url https://download.pytorch.org/whl/cu126", self.source) self.assertIn("pip install torch torchaudio", self.source) self.assertIn("raise RuntimeError('GPU PyTorch install completed but CUDA is not available.')", self.source) self.assertNotIn("https://download.pytorch.org/whl/cpu", self.source) def test_colab_checks_current_processing_model_defaults(self): self.assertIn("ROFORMER_DEFAULT_MODEL == 'ensemble:vocal_rvc'", self.source) self.assertIn("KARAOKE_DEFAULT_MODEL == 'ensemble:karaoke'", self.source) self.assertIn( "ROFORMER_DEREVERB_DEFAULT_MODEL == 'dereverb_mel_band_roformer_anvuew_sdr_19.1729.ckpt'", self.source, ) def test_colab_no_longer_documents_legacy_single_roformer_as_default(self): self.assertNotIn("MVSEP Vocals SDR 11.01", self.source) self.assertNotIn("vocals_mel_band_roformer", self.source) def test_colab_launch_does_not_skip_checks(self): self.assertIn("$PY run.py --host 0.0.0.0 --port 7860 --share", self.source) self.assertNotIn("--skip-check", self.source) def test_colab_includes_full_processing_mode_matrix(self): self.assertIn("$PY tools/run_mode_matrix.py", self.source) self.assertIn("--output-dir /content/AI-RVC/outputs/mode_matrix_colab", self.source) self.assertIn("--require-cuda", self.source) self.assertIn("download_character_model('rin')", self.source) self.assertIn("Missing test audio", self.source) if __name__ == "__main__": unittest.main()