#!/usr/bin/env python3
"""
概要:
    Qwen3-ASR Transformersの推論を1回実行して終了するスクリプトです。

詳細説明:
    このファイルは呼び出しごとにモデルをロードするように意図的に設計されています。
    リクエスト間でGPUメモリを解放するため、qwen_asr_flask.pyから呼び出されることを想定しています。

関連リンク:
    qwen_asr_once_usage
"""

from __future__ import annotations

import argparse
import json
import sys
from pathlib import Path


def main() -> int:
    """
    概要:
        コマンドライン引数を解析し、音声ファイルを推論して結果を出力します。

    詳細説明:
        音声ファイルパスとモデル名を引数として受け取り、Qwen3ASRModelを初期化します。
        推論結果はJSON形式の文字列として標準出力に表示されます。
        入力ファイルが見つからない場合はエラーメッセージを標準エラーに出力し、2を返します。

    戻り値:
        :returns: 正常終了時は0、入力ファイルが見つからない場合は2。
        :rtype: int
    """
    parser = argparse.ArgumentParser()
    parser.add_argument("--audio", required=True, type=Path)
    parser.add_argument("--model", default="Qwen/Qwen3-ASR-1.7B")
    args = parser.parse_args()
    if not args.audio.is_file():
        print(f"input file not found: {args.audio}", file=sys.stderr)
        return 2

    import torch
    from qwen_asr import Qwen3ASRModel

    model = Qwen3ASRModel.from_pretrained(
        args.model,
        dtype=torch.bfloat16,
        device_map="cuda:0",
        max_inference_batch_size=1,
        max_new_tokens=4096,
    )
    results = model.transcribe(audio=str(args.audio), language=None)
    result = results[0]
    print(json.dumps({"text": result.text, "language": result.language}, ensure_ascii=False))
    return 0


if __name__ == "__main__":
    raise SystemExit(main())