NhanNguyen1309/audio-separation-api
0
1from __future__ import annotations2 3from pathlib import Path4 5from app.config import settings6from app.errors import ApiError7from app.validation import ensure_decodable, probe_duration_seconds8 9 10def validate_separation_outputs(output_files: dict[str, Path], input_duration_sec: float) -> dict[str, Path]:11 for stem_name, output_path in output_files.items():12 if not output_path.is_file():13 raise ApiError(code="separation_output_invalid", message=f"Missing expected output stem: {stem_name}.wav", status_code=500)14 if output_path.stat().st_size < settings.separation_min_output_bytes:15 raise ApiError(code="separation_output_invalid", message=f"Output stem is too small: {stem_name}.wav", status_code=500)16 for stem_name, output_path in output_files.items():17 ensure_decodable(output_path)18 output_duration_sec = probe_duration_seconds(output_path)19 if abs(output_duration_sec - input_duration_sec) > settings.separation_duration_tolerance_seconds:20 raise ApiError(code="separation_output_invalid", message=f"Output stem duration mismatch: {stem_name}.wav", status_code=500)21 return output_files22 