Skip to content

Commit 80fe92c

Browse files
Harden audio file validation
1 parent 2b83ab6 commit 80fe92c

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

examples/audio/speaker_aware_meeting_intelligence/meeting_intelligence.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,8 +281,10 @@ def parse_known_speakers(entries: list[str]) -> list[tuple[str, Path]]:
281281
if not raw_path:
282282
raise ValueError(f"Known speaker reference path cannot be empty: {entry}")
283283
path = Path(raw_path).expanduser()
284-
if not path.exists():
285-
raise FileNotFoundError(f"Known speaker reference does not exist: {path}")
284+
if not path.is_file():
285+
raise FileNotFoundError(
286+
f"Known speaker reference does not exist or is not a regular file: {path}"
287+
)
286288
speakers.append((name, path))
287289
return speakers
288290

@@ -301,8 +303,8 @@ def transcribe_with_diarization(
301303
known_speakers: list[tuple[str, Path]],
302304
model: str = DEFAULT_TRANSCRIPTION_MODEL,
303305
) -> Any:
304-
if not audio_file.exists():
305-
raise FileNotFoundError(f"Audio file does not exist: {audio_file}")
306+
if not audio_file.is_file():
307+
raise FileNotFoundError(f"Audio file does not exist or is not a regular file: {audio_file}")
306308

307309
from openai import OpenAI
308310

examples/audio/speaker_aware_meeting_intelligence/test_meeting_intelligence.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,20 @@ def test_parse_known_speakers_trims_path_whitespace(self) -> None:
108108

109109
self.assertEqual(speakers, [("Agent", reference)])
110110

111+
def test_parse_known_speakers_rejects_directory_reference(self) -> None:
112+
with tempfile.TemporaryDirectory() as tmpdir:
113+
with self.assertRaises(FileNotFoundError) as error:
114+
meeting_intelligence.parse_known_speakers([f"Agent={tmpdir}"])
115+
116+
self.assertIn("regular file", str(error.exception))
117+
118+
def test_transcribe_with_diarization_rejects_directory_audio(self) -> None:
119+
with tempfile.TemporaryDirectory() as tmpdir:
120+
with self.assertRaises(FileNotFoundError) as error:
121+
meeting_intelligence.transcribe_with_diarization(Path(tmpdir), [])
122+
123+
self.assertIn("regular file", str(error.exception))
124+
111125
def test_to_data_url_accepts_path_or_string(self) -> None:
112126
with tempfile.TemporaryDirectory() as tmpdir:
113127
reference = Path(tmpdir) / "speaker.wav"

0 commit comments

Comments
 (0)