Spaces:
Running on Zero
Running on Zero
| #!/usr/bin/env python3 | |
| """Serve the Urdu S2S API.""" | |
| from __future__ import annotations | |
| import argparse | |
| import os | |
| from pathlib import Path | |
| import sys | |
| ROOT = Path(__file__).resolve().parents[1] | |
| SRC = ROOT / "src" | |
| if str(SRC) not in sys.path: | |
| sys.path.insert(0, str(SRC)) | |
| from urdu_s2s.api import DEFAULT_BASELINE_CSV, create_app # noqa: E402 | |
| def env(name: str, default: str) -> str: | |
| return os.environ.get(name, default) | |
| def parse_args() -> argparse.Namespace: | |
| parser = argparse.ArgumentParser() | |
| parser.add_argument( | |
| "--candidate-csv", | |
| type=Path, | |
| default=Path(env("S2S_CANDIDATE_CSV", str(DEFAULT_BASELINE_CSV))), | |
| ) | |
| parser.add_argument("--host", default=env("S2S_HOST", "127.0.0.1")) | |
| parser.add_argument("--port", type=int, default=int(env("S2S_PORT", "8000"))) | |
| parser.add_argument("--default-mode", default=env("S2S_DEFAULT_MODE", "text_only")) | |
| parser.add_argument("--whisper-model", default=env("S2S_WHISPER_MODEL", "large-v3")) | |
| parser.add_argument("--whisper-language", default=env("S2S_WHISPER_LANGUAGE", "ur")) | |
| parser.add_argument("--whisper-device", default=env("S2S_WHISPER_DEVICE", "cpu")) | |
| parser.add_argument("--whisper-compute-type", default=env("S2S_WHISPER_COMPUTE_TYPE", "int8")) | |
| parser.add_argument( | |
| "--voice-prompt-audio-path", | |
| type=Path, | |
| default=Path( | |
| env( | |
| "S2S_VOICE_PROMPT_AUDIO_PATH", | |
| "data/processed/voice_anchors/chatterbox_praxy_v1/bench_025.wav", | |
| ) | |
| ), | |
| ) | |
| parser.add_argument("--chatterbox-device", default=env("S2S_CHATTERBOX_DEVICE", "cuda")) | |
| parser.add_argument("--chatterbox-t3-model", default=env("S2S_CHATTERBOX_T3_MODEL", "v3")) | |
| return parser.parse_args() | |
| def main() -> int: | |
| args = parse_args() | |
| try: | |
| import uvicorn | |
| except ModuleNotFoundError as exc: | |
| raise SystemExit( | |
| "Missing API dependencies. Install them with: " | |
| "python3 -m pip install -r requirements-api.txt" | |
| ) from exc | |
| candidate_csv = args.candidate_csv if args.candidate_csv.is_absolute() else ROOT / args.candidate_csv | |
| voice_prompt_audio_path = ( | |
| args.voice_prompt_audio_path | |
| if args.voice_prompt_audio_path.is_absolute() | |
| else ROOT / args.voice_prompt_audio_path | |
| ) | |
| app = create_app( | |
| candidate_csv=candidate_csv, | |
| repo_root=ROOT, | |
| default_mode=args.default_mode, | |
| default_whisper_model=args.whisper_model, | |
| default_whisper_language=args.whisper_language, | |
| default_whisper_device=args.whisper_device, | |
| default_whisper_compute_type=args.whisper_compute_type, | |
| default_voice_prompt_audio_path=voice_prompt_audio_path, | |
| default_chatterbox_device=args.chatterbox_device, | |
| default_chatterbox_t3_model=args.chatterbox_t3_model, | |
| ) | |
| uvicorn.run(app, host=args.host, port=args.port) | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |