import json import unittest from pathlib import Path from tempfile import TemporaryDirectory import torch from speech_bridge_gemma.slice_longcat_codes import slice_codes class SliceLongCatCodesTest(unittest.TestCase): def test_slice_uses_manifest_subset_index(self) -> None: with TemporaryDirectory() as tmp: root = Path(tmp) source = root / "source.pt" manifest = root / "manifest.jsonl" out = root / "out.pt" torch.save( { "meta": {"codec": "longcat", "n_acoustic_codebooks": 1, "input_sample_rate": 16000}, "semantic_codes": [ torch.tensor([0, 0]), torch.tensor([1, 1, 1]), torch.tensor([2]), ], "acoustic_codes": [ torch.tensor([[10, 10]]), torch.tensor([[11, 11, 11]]), torch.tensor([[12]]), ], }, source, ) rows = [ {"id": "row_b", "text": "texto b", "prompt": "pergunta b", "answer": "resposta b", "subset_index": 2, "duration": 1.0}, {"id": "row_a", "text": "texto a", "question": "pergunta a", "subset_index": 0, "duration_sec": 2.0}, ] manifest.write_text("\n".join(json.dumps(row) for row in rows) + "\n", encoding="utf-8") summary = slice_codes(source, manifest, out, "subset_index") payload = torch.load(out, map_location="cpu", weights_only=False) self.assertEqual(summary["rows"], 2) self.assertEqual(payload["semantic_codes"][0].tolist(), [2]) self.assertEqual(payload["semantic_codes"][1].tolist(), [0, 0]) self.assertEqual(payload["acoustic_codes"][0].tolist(), [[12]]) self.assertEqual(payload["meta"]["samples"][0]["id"], "row_b") self.assertEqual(payload["meta"]["samples"][0]["frames"], 1) self.assertEqual(payload["meta"]["samples"][1]["answer_text"], "texto a") if __name__ == "__main__": unittest.main()