""" Model family ids and lazy mapping to backend builders (heavy imports on first eval only). """ from __future__ import annotations from collections.abc import Callable from family_registry import ( DROPDOWN_CHOICES, FAMILY_IDS, FAMILY_META, default_family_id, normalize_family_id, resolve_label, ) __all__ = [ "DROPDOWN_CHOICES", "FAMILY_IDS", "FAMILY_META", "build_transcriber", "default_family_id", "normalize_family_id", "resolve_label", ] def build_transcriber( family_id: str, model_id: str, device_str: str, device_int: int, ) -> tuple[Callable[..., str], Callable[[], None]]: from family_registry import _FAMILY_ALIASES from . import ( auto, granite_speech, speechbrain_asr, transformers_ctc, transformers_pipeline, universal, ) from .family_resolve import resolve_auto_family fid = resolve_auto_family(model_id, _FAMILY_ALIASES.get(family_id, family_id)) if fid == "auto": return auto.build_transcriber(model_id, device_str, device_int) if fid == "transformers_pipeline": return transformers_pipeline.build_transcriber(model_id, device_int) if fid == "universal": return universal.build_transcriber(model_id, device_str) if fid == "granite_speech": return granite_speech.build_transcriber(model_id, device_str) if fid == "transformers_ctc": return transformers_ctc.build_transcriber(model_id, device_str) if fid == "speechbrain": return speechbrain_asr.build_transcriber(model_id, device_str) raise ValueError(f"Unknown model family: {family_id!r}. Choose one of {FAMILY_IDS}.")