gemma1b-tts-integration / scripts /qwen35_answer_cli.py
marcos
Add Qwen speech-to-speech server
fb0987d
Raw
History Blame Contribute Delete
2.48 kB
#!/usr/bin/env python3
from __future__ import annotations
import argparse
import json
import os
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from scripts.qwen35_qwen3tts_voiceclone_smoke import generate_portuguese_answer, load_llm
from speech_bridge_gemma.mimi_overfit import resolve_device, set_seed
def parse_args() -> argparse.Namespace:
root = Path(os.environ.get("S2S_ROOT", "/workspace/gemma1b-tts-integration"))
parser = argparse.ArgumentParser()
parser.add_argument("--root", default=str(root))
parser.add_argument("--device", default="cuda")
parser.add_argument("--llm-model", default="Qwen/Qwen3.5-0.8B")
parser.add_argument("--llm-dtype", choices=["auto", "float32", "float16", "bfloat16"], default="float16")
parser.add_argument("--text-sft-checkpoint", default="job_output/qwen3-text-sft-full-ptbr-20260606T022749Z/qwen_text_sft_layers.pt")
parser.add_argument("--system", default="Voce e uma assistente brasileira. Responda sempre em portugues brasileiro, em uma frase curta, direta e natural.")
parser.add_argument("--max-answer-tokens", type=int, default=48)
parser.add_argument("--temperature", type=float, default=0.0)
parser.add_argument("--top-p", type=float, default=0.9)
parser.add_argument("--seed", type=int, default=1337)
return parser.parse_args()
def main() -> int:
args = parse_args()
os.chdir(Path(args.root).resolve())
payload = json.loads(sys.stdin.read() or "{}")
question = str(payload.get("question") or "").strip()
context = str(payload.get("context") or "").strip()
if not question:
raise ValueError("question is required")
set_seed(args.seed)
device = resolve_device(args.device)
tokenizer, llm, system, sft = load_llm(args, device)
answer = generate_portuguese_answer(
llm=llm,
tokenizer=tokenizer,
question=question,
system=system,
device=device,
max_new_tokens=args.max_answer_tokens,
temperature=args.temperature,
top_p=args.top_p,
context=context,
)
print(
json.dumps(
{
"answer": answer,
"system": system,
"text_sft_loaded_layers": sft.get("text_sft_loaded_layers", 0),
},
ensure_ascii=False,
),
flush=True,
)
return 0
if __name__ == "__main__":
raise SystemExit(main())