sunbird-pipeline / ui_components.py
Ssemulif's picture
Restore original local project and remove template src artifacts
2e30c76
Raw
History Blame Contribute Delete
2.11 kB
"""Shared UI helper utilities used by both Streamlit frontends.
This module intentionally contains pure helpers so unit tests can run
without a live Streamlit server or network dependencies.
"""
from typing import Dict, Any
def detect_audio_media_type(data: bytes) -> str:
"""Lightweight magic-byte detection for common audio formats."""
if not data:
return "application/octet-stream"
# WAV: RIFF....WAVE
if data[:4] == b"RIFF" and b"WAVE" in data[:12]:
return "audio/wav"
# OGG: OggS
if data[:4] == b"OggS":
return "audio/ogg"
# MP3: ID3 tag or 0xFF 0xFB frame header
if data[:3] == b"ID3" or data[:2] == bytes([0xFF, 0xFB]):
return "audio/mpeg"
return "application/octet-stream"
def ext_for_media_type(media_type: str) -> str:
mapping = {
"audio/wav": ".wav",
"audio/ogg": ".ogg",
"audio/mpeg": ".mp3",
"audio/mp4": ".m4a",
}
return mapping.get(media_type, "")
def infer_download_filename(request_id: str, media_type: str) -> str:
"""Return a sensible download filename for an audio artifact."""
ext = ext_for_media_type(media_type) or ""
return f"{request_id}{ext}"
def format_result_for_display(result: Dict[str, Any]) -> Dict[str, Any]:
"""Normalize a pipeline result dict for the UI renderer.
This function is purposely conservative: it doesn't change content,
only ensures expected keys exist so the UI can render reliably.
"""
out = {}
out["summary"] = result.get("summary") or ""
out["translated_summary"] = result.get("translated_summary") or ""
out["transcript"] = result.get("transcript") or ""
out["word_count"] = result.get("word_count") or 0
out["reading_time_seconds"] = result.get("reading_time_seconds") or 0
out["target_language"] = result.get("target_language") or ""
out["request_id"] = result.get("request_id")
out["audio_b64"] = result.get("audio_b64")
return out
__all__ = [
"detect_audio_media_type",
"ext_for_media_type",
"infer_download_filename",
"format_result_for_display",
]