open-navigator / tests /test_pipeline_media_scope.py
jcbowyer's picture
Clean HuggingFace deployment without binary files
e59d91d
Raw
History Blame Contribute Delete
4.58 kB
"""Tests for PDF / audio / video pipeline modality scopes."""
from __future__ import annotations
import os
from pathlib import Path
from llm.governance.governance_meeting_llm import JurisdictionDir, MeetingInventory
from llm.governance.pipeline_media_scope import (
apply_media_scope_to_environ,
apply_media_scope_to_inventory,
demo4_step_label,
describe_demo4_file,
filter_paths_for_media_scope,
get_active_media_scope,
normalize_media_scope_key,
path_matches_media_scope,
split_inventory_media,
)
def _jur() -> JurisdictionDir:
root = Path("/tmp/raw/AL/county/county_01125")
return JurisdictionDir(
root=root,
state_code="AL",
scope="county",
slug="county_01125",
fips="01125",
)
def _paths() -> tuple[list[Path], list[Path]]:
pdfs = [Path("a.pdf"), Path("b.PDF")]
audio = [
Path("meet.mp3"),
Path("meet.opus"),
Path("meet.mp4"),
Path("meet.webm"),
]
return pdfs, audio
def test_normalize_media_scope_key() -> None:
cases = [
("video", "video"),
("video_only", "video"),
("pdf_only", "pdf"),
("audio_only", "audio"),
("all", "all"),
("", "all"),
("bogus", "all"),
]
for raw, expected in cases:
assert normalize_media_scope_key(raw) == expected, raw
def test_split_inventory_all() -> None:
pdfs, audio = _paths()
scope = get_active_media_scope()
os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] = "all"
out_pdfs, out_audio = split_inventory_media(pdfs, audio)
assert len(out_pdfs) == 2
assert len(out_audio) == 4
def test_split_inventory_pdf_only() -> None:
pdfs, audio = _paths()
os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] = "pdf"
out_pdfs, out_audio = split_inventory_media(pdfs, audio)
assert len(out_pdfs) == 2
assert out_audio == []
def test_split_inventory_audio_only() -> None:
pdfs, audio = _paths()
os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] = "audio"
out_pdfs, out_audio = split_inventory_media(pdfs, audio)
assert out_pdfs == []
assert {p.suffix for p in out_audio} == {".mp3", ".opus"}
def test_split_inventory_video_only() -> None:
pdfs, audio = _paths()
os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] = "video"
out_pdfs, out_audio = split_inventory_media(pdfs, audio)
assert out_pdfs == []
assert {p.suffix for p in out_audio} == {".mp4", ".webm"}
def test_apply_media_scope_to_inventory_mutates_lists() -> None:
os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] = "video"
inv = MeetingInventory(jurisdiction=_jur(), pdfs=list(_paths()[0]), audio=list(_paths()[1]))
apply_media_scope_to_inventory(inv)
assert inv.pdfs == []
assert all(p.suffix.lower() in {".mp4", ".webm"} for p in inv.audio)
def test_filter_paths_for_media_scope() -> None:
paths = [
Path("x.pdf"),
Path("a.mp3"),
Path("v.mp4"),
]
os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] = "video"
scope = get_active_media_scope()
assert filter_paths_for_media_scope(paths, scope) == [Path("v.mp4")]
def test_path_matches_media_scope() -> None:
os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] = "pdf"
scope = get_active_media_scope()
assert path_matches_media_scope(Path("doc.pdf"), scope)
assert not path_matches_media_scope(Path("doc.mp4"), scope)
def test_apply_media_scope_to_environ_video() -> None:
scope = apply_media_scope_to_environ("video_only")
assert scope.key == "video"
assert os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] == "video"
assert os.environ["GOVERNANCE_GATEKEEPER_KINDS"] == "audio"
assert os.environ["GOVERNANCE_DEMO4_VIDEO_CHUNKS"] == "1"
def test_apply_media_scope_to_environ_pdf() -> None:
scope = apply_media_scope_to_environ("pdf")
assert scope.run_demo4 is False
assert os.environ["GOVERNANCE_GATEKEEPER_KINDS"] == "pdf"
def test_apply_media_scope_to_environ_audio() -> None:
scope = apply_media_scope_to_environ("audio")
assert scope.run_demo4 is True
assert os.environ["GOVERNANCE_DEMO4_VIDEO_CHUNKS"] == "0"
def test_demo4_labels() -> None:
os.environ["GOVERNANCE_PIPELINE_MEDIA_SCOPE"] = "video"
assert "video" in demo4_step_label().lower()
mp4 = describe_demo4_file(Path("2026_02_18.mp4"), demo4_model="gemma-4-31b-it")
assert "MP4" in mp4 and "opus" in mp4.lower()
gemini = describe_demo4_file(
Path("2026_02_18.mp4"),
demo4_model="gemini-2.0-flash",
)
assert "video/mp4" in gemini