File size: 2,998 Bytes
c759578
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/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())