From e20f46b719c0066314f8b8b7413c3314dde27c6c Mon Sep 17 00:00:00 2001 From: daewook Date: Thu, 29 Jan 2026 11:30:00 +0900 Subject: [PATCH 1/2] Add streaming model switch + safe mode --- examples/run_voice_clone_service.sh | 84 +++ examples/run_voice_clone_stream_service.sh | 84 +++ examples/voice_clone_service.py | 564 ++++++++++++++++ examples/voice_clone_stream_service.md | 52 ++ examples/voice_clone_stream_service.py | 440 +++++++++++++ examples/voice_clone_stream_test.html | 613 ++++++++++++++++++ qwen_tts/inference/qwen3_tts_model.py | 386 ++++++++++- .../03f79f10717a47e39e186e7ee4e53027.pt | Bin 0 -> 199725 bytes .../3665c5834221470591e3c8fcb0de6e50.pt | Bin 0 -> 134893 bytes .../3a886347faee4fa6a4a5ad432a3dcab7.pt | Bin 0 -> 197741 bytes .../415c673dbc4647e788b92f3ab7318877.pt | Bin 0 -> 135405 bytes .../4c5eb5a3c84c4f4183b831ac5a7fe41a.pt | Bin 0 -> 148781 bytes .../4f47f8af90404b9e93649ce83b18af78.pt | Bin 0 -> 383661 bytes .../9a0aff0c1abe4f5e8d69b89f0b2271ce.pt | Bin 0 -> 199725 bytes .../e5641b080c9a40d7b434cd62bf9f61d3.pt | Bin 0 -> 77997 bytes voice_store/voices.json | 52 ++ 16 files changed, 2274 insertions(+), 1 deletion(-) create mode 100644 examples/run_voice_clone_service.sh create mode 100644 examples/run_voice_clone_stream_service.sh create mode 100644 examples/voice_clone_service.py create mode 100644 examples/voice_clone_stream_service.md create mode 100644 examples/voice_clone_stream_service.py create mode 100644 examples/voice_clone_stream_test.html create mode 100644 voice_store/prompts/03f79f10717a47e39e186e7ee4e53027.pt create mode 100644 voice_store/prompts/3665c5834221470591e3c8fcb0de6e50.pt create mode 100644 voice_store/prompts/3a886347faee4fa6a4a5ad432a3dcab7.pt create mode 100644 voice_store/prompts/415c673dbc4647e788b92f3ab7318877.pt create mode 100644 voice_store/prompts/4c5eb5a3c84c4f4183b831ac5a7fe41a.pt create mode 100644 voice_store/prompts/4f47f8af90404b9e93649ce83b18af78.pt create mode 100644 voice_store/prompts/9a0aff0c1abe4f5e8d69b89f0b2271ce.pt create mode 100644 voice_store/prompts/e5641b080c9a40d7b434cd62bf9f61d3.pt create mode 100644 voice_store/voices.json diff --git a/examples/run_voice_clone_service.sh b/examples/run_voice_clone_service.sh new file mode 100644 index 00000000..5f248eb8 --- /dev/null +++ b/examples/run_voice_clone_service.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: run_voice_clone_service.sh [options] [-- extra-args] + +Options: + -g, --gpu ID GPU id to use (default: 4) + -p, --port PORT Port to bind (default: 8001) + -m, --model MODEL Model id or path (default: Qwen/Qwen3-TTS-12Hz-1.7B-Base) + -s, --voice-store DIR Voice store directory (default: /voice_store) + -d, --device DEVICE Device for device_map (default: cuda:0) + --ip IP Bind IP (default: 0.0.0.0) + -h, --help Show this help + +Env overrides: GPU_ID, PORT, MODEL, VOICE_STORE, DEVICE, IP, PYTHON_BIN +EOF +} + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" + +GPU_ID="${GPU_ID:-4}" +PORT="${PORT:-8001}" +MODEL="${MODEL:-Qwen/Qwen3-TTS-12Hz-1.7B-Base}" +VOICE_STORE="${VOICE_STORE:-${PROJECT_ROOT}/voice_store}" +DEVICE="${DEVICE:-cuda:0}" +IP="${IP:-0.0.0.0}" +PYTHON_BIN="${PYTHON_BIN:-python3}" + +EXTRA_ARGS=() +while [[ $# -gt 0 ]]; do + case "$1" in + -g|--gpu) + GPU_ID="$2" + shift 2 + ;; + -p|--port) + PORT="$2" + shift 2 + ;; + -m|--model) + MODEL="$2" + shift 2 + ;; + -s|--voice-store) + VOICE_STORE="$2" + shift 2 + ;; + -d|--device) + DEVICE="$2" + shift 2 + ;; + --ip) + IP="$2" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + --) + shift + EXTRA_ARGS+=("$@") + break + ;; + *) + EXTRA_ARGS+=("$1") + shift + ;; + esac +done + +mkdir -p "$VOICE_STORE" + +CUDA_VISIBLE_DEVICES="$GPU_ID" "$PYTHON_BIN" \ + "$SCRIPT_DIR/voice_clone_service.py" \ + --device "$DEVICE" \ + --ip "$IP" \ + --port "$PORT" \ + --model "$MODEL" \ + --voice-store "$VOICE_STORE" \ + "${EXTRA_ARGS[@]}" diff --git a/examples/run_voice_clone_stream_service.sh b/examples/run_voice_clone_stream_service.sh new file mode 100644 index 00000000..bb0336b9 --- /dev/null +++ b/examples/run_voice_clone_stream_service.sh @@ -0,0 +1,84 @@ +#!/usr/bin/env bash +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: run_voice_clone_stream_service.sh [options] [-- extra-args] + +Options: + -g, --gpu ID GPU id to use (default: 4) + -p, --port PORT Port to bind (default: 8002) + -m, --model MODEL Model id or path (default: Qwen/Qwen3-TTS-12Hz-1.7B-Base) + -s, --voice-store DIR Voice store directory (default: /voice_store) + -d, --device DEVICE Device for device_map (default: cuda:0) + --ip IP Bind IP (default: 0.0.0.0) + -h, --help Show this help + +Env overrides: GPU_ID, PORT, MODEL, VOICE_STORE, DEVICE, IP, PYTHON_BIN +EOF +} + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" + +GPU_ID="${GPU_ID:-5}" +PORT="${PORT:-8002}" +MODEL="${MODEL:-Qwen/Qwen3-TTS-12Hz-1.7B-Base}" +VOICE_STORE="${VOICE_STORE:-${PROJECT_ROOT}/voice_store}" +DEVICE="${DEVICE:-cuda:0}" +IP="${IP:-0.0.0.0}" +PYTHON_BIN="${PYTHON_BIN:-python3}" + +EXTRA_ARGS=() +while [[ $# -gt 0 ]]; do + case "$1" in + -g|--gpu) + GPU_ID="$2" + shift 2 + ;; + -p|--port) + PORT="$2" + shift 2 + ;; + -m|--model) + MODEL="$2" + shift 2 + ;; + -s|--voice-store) + VOICE_STORE="$2" + shift 2 + ;; + -d|--device) + DEVICE="$2" + shift 2 + ;; + --ip) + IP="$2" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + --) + shift + EXTRA_ARGS+=("$@") + break + ;; + *) + EXTRA_ARGS+=("$1") + shift + ;; + esac +done + +mkdir -p "$VOICE_STORE" + +CUDA_VISIBLE_DEVICES="$GPU_ID" "$PYTHON_BIN" \ + "$SCRIPT_DIR/voice_clone_stream_service.py" \ + --device "$DEVICE" \ + --ip "$IP" \ + --port "$PORT" \ + --model "$MODEL" \ + --voice-store "$VOICE_STORE" \ + "${EXTRA_ARGS[@]}" diff --git a/examples/voice_clone_service.py b/examples/voice_clone_service.py new file mode 100644 index 00000000..5a9e57f0 --- /dev/null +++ b/examples/voice_clone_service.py @@ -0,0 +1,564 @@ +# coding=utf-8 +# Copyright 2026 The Alibaba Qwen team. +# SPDX-License-Identifier: Apache-2.0 +""" +Gradio service for reusable voice-clone prompts. +""" + +import argparse +import json +import threading +import time +import uuid +from dataclasses import asdict +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple + +import gradio as gr +import numpy as np +import torch + +from qwen_tts import Qwen3TTSModel, VoiceClonePromptItem + + +DEFAULT_MODELS = [ + ("Base 1.7B", "Qwen/Qwen3-TTS-12Hz-1.7B-Base"), + ("Base 0.6B", "Qwen/Qwen3-TTS-12Hz-0.6B-Base"), +] + +MODEL_LOCK = threading.Lock() +MODEL_CACHE: Dict[Tuple[str, str, str, bool], Qwen3TTSModel] = {} +CURRENT_TTS: Optional[Qwen3TTSModel] = None +CURRENT_MODEL_ID: Optional[str] = None + +VOICE_INDEX_LOCK = threading.Lock() +VOICE_INDEX: Dict[str, Dict[str, Any]] = {} + +PROMPT_CACHE_LOCK = threading.Lock() +PROMPT_CACHE: Dict[str, Tuple[List[VoiceClonePromptItem], Dict[str, Any]]] = {} + +VOICE_STORE: Optional[Path] = None +PROMPT_DIR: Optional[Path] = None +INDEX_PATH: Optional[Path] = None + + +def _dtype_from_str(s: str) -> torch.dtype: + s = (s or "").strip().lower() + if s in ("bf16", "bfloat16"): + return torch.bfloat16 + if s in ("fp16", "float16", "half"): + return torch.float16 + if s in ("fp32", "float32"): + return torch.float32 + raise ValueError(f"Unsupported torch dtype: {s}. Use bfloat16/float16/float32.") + + +def _title_case_display(s: str) -> str: + s = (s or "").strip() + s = s.replace("_", " ") + return " ".join([w[:1].upper() + w[1:] if w else "" for w in s.split()]) + + +def _build_choices_and_map(items: Optional[List[str]]) -> Tuple[List[str], Dict[str, str]]: + if not items: + return [], {} + display = [_title_case_display(x) for x in items] + mapping = {d: r for d, r in zip(display, items)} + return display, mapping + + +def _collect_gen_kwargs(args: argparse.Namespace) -> Dict[str, Any]: + mapping = { + "max_new_tokens": args.max_new_tokens, + "temperature": args.temperature, + "top_k": args.top_k, + "top_p": args.top_p, + "repetition_penalty": args.repetition_penalty, + "subtalker_top_k": args.subtalker_top_k, + "subtalker_top_p": args.subtalker_top_p, + "subtalker_temperature": args.subtalker_temperature, + } + return {k: v for k, v in mapping.items() if v is not None} + + +def _normalize_audio(wav, eps=1e-12, clip=True): + x = np.asarray(wav) + + if np.issubdtype(x.dtype, np.integer): + info = np.iinfo(x.dtype) + if info.min < 0: + y = x.astype(np.float32) / max(abs(info.min), info.max) + else: + mid = (info.max + 1) / 2.0 + y = (x.astype(np.float32) - mid) / mid + elif np.issubdtype(x.dtype, np.floating): + y = x.astype(np.float32) + m = np.max(np.abs(y)) if y.size else 0.0 + if m <= 1.0 + 1e-6: + pass + else: + y = y / (m + eps) + else: + raise TypeError(f"Unsupported dtype: {x.dtype}") + + if clip: + y = np.clip(y, -1.0, 1.0) + if y.ndim > 1: + y = np.mean(y, axis=-1).astype(np.float32) + return y + + +def _audio_to_tuple(audio: Any) -> Optional[Tuple[np.ndarray, int]]: + if audio is None: + return None + + if isinstance(audio, tuple) and len(audio) == 2 and isinstance(audio[0], int): + sr, wav = audio + wav = _normalize_audio(wav) + return wav, int(sr) + + if isinstance(audio, dict) and "sampling_rate" in audio and "data" in audio: + sr = int(audio["sampling_rate"]) + wav = _normalize_audio(audio["data"]) + return wav, sr + + return None + + +def _wav_to_gradio_audio(wav: np.ndarray, sr: int) -> Tuple[int, np.ndarray]: + wav = np.asarray(wav, dtype=np.float32) + return sr, wav + + +def _build_model_choices(initial_model: str) -> Tuple[List[str], Dict[str, str], str]: + label_map = {label: model_id for label, model_id in DEFAULT_MODELS} + choices = list(label_map.keys()) + initial_label = None + for label, model_id in label_map.items(): + if model_id == initial_model: + initial_label = label + break + if initial_label is None: + custom_label = f"Custom ({initial_model})" + choices.insert(0, custom_label) + label_map[custom_label] = initial_model + initial_label = custom_label + return choices, label_map, initial_label + + +def _get_lang_choices(tts: Qwen3TTSModel) -> Tuple[List[str], Dict[str, str]]: + supported = [] + if callable(getattr(tts.model, "get_supported_languages", None)): + supported = tts.model.get_supported_languages() + supported = [x for x in (supported or []) if x] + if "Auto" not in supported: + supported = ["Auto"] + supported + choices, mapping = _build_choices_and_map(supported) + if "Auto" not in mapping: + mapping["Auto"] = "Auto" + if "Auto" not in choices: + choices.insert(0, "Auto") + return choices, mapping + + +def _init_voice_store(path: Path) -> None: + global VOICE_STORE, PROMPT_DIR, INDEX_PATH, VOICE_INDEX + VOICE_STORE = path + PROMPT_DIR = VOICE_STORE / "prompts" + PROMPT_DIR.mkdir(parents=True, exist_ok=True) + INDEX_PATH = VOICE_STORE / "voices.json" + VOICE_INDEX = _load_voice_index(INDEX_PATH) + + +def _load_voice_index(index_path: Path) -> Dict[str, Dict[str, Any]]: + if not index_path.exists(): + return {} + try: + payload = json.loads(index_path.read_text()) + except Exception: + return {} + voices = payload.get("voices", {}) + return voices if isinstance(voices, dict) else {} + + +def _save_voice_index(index_path: Path, voices: Dict[str, Dict[str, Any]]) -> None: + payload = {"voices": voices} + tmp_path = index_path.with_suffix(".tmp") + tmp_path.write_text(json.dumps(payload, ensure_ascii=True, indent=2)) + tmp_path.replace(index_path) + + +def _add_voice_meta(voice_id: str, meta: Dict[str, Any]) -> None: + with VOICE_INDEX_LOCK: + VOICE_INDEX[voice_id] = meta + _save_voice_index(INDEX_PATH, VOICE_INDEX) + + +def _build_voice_choices() -> Tuple[List[str], Dict[str, str]]: + with VOICE_INDEX_LOCK: + voices = dict(VOICE_INDEX) + items = list(voices.items()) + items.sort(key=lambda kv: kv[1].get("created_at", ""), reverse=True) + choices: List[str] = [] + mapping: Dict[str, str] = {} + for voice_id, meta in items: + name = meta.get("name") or voice_id[:8] + disp = f"{name} ({voice_id[:8]})" + choices.append(disp) + mapping[disp] = voice_id + return choices, mapping + + +def _torch_load_safe(path: Path) -> Any: + try: + return torch.load(path, map_location="cpu", weights_only=True) + except TypeError: + return torch.load(path, map_location="cpu") + + +def _deserialize_prompt_items(payload: Dict[str, Any]) -> Tuple[List[VoiceClonePromptItem], Dict[str, Any]]: + items_raw = payload.get("items", None) + if not isinstance(items_raw, list) or len(items_raw) == 0: + raise ValueError("Empty or invalid prompt items.") + items: List[VoiceClonePromptItem] = [] + for d in items_raw: + if not isinstance(d, dict): + raise ValueError("Invalid prompt item format.") + ref_code = d.get("ref_code", None) + if ref_code is not None and not torch.is_tensor(ref_code): + ref_code = torch.tensor(ref_code) + ref_spk = d.get("ref_spk_embedding", None) + if ref_spk is None: + raise ValueError("Missing ref_spk_embedding in prompt item.") + if not torch.is_tensor(ref_spk): + ref_spk = torch.tensor(ref_spk) + items.append( + VoiceClonePromptItem( + ref_code=ref_code, + ref_spk_embedding=ref_spk, + x_vector_only_mode=bool(d.get("x_vector_only_mode", False)), + icl_mode=bool(d.get("icl_mode", not bool(d.get("x_vector_only_mode", False)))), + ref_text=d.get("ref_text", None), + ) + ) + meta = payload.get("meta", {}) + return items, meta if isinstance(meta, dict) else {} + + +def _load_prompt_items(voice_id: str) -> Tuple[List[VoiceClonePromptItem], Dict[str, Any]]: + with PROMPT_CACHE_LOCK: + cached = PROMPT_CACHE.get(voice_id) + if cached is not None: + return cached + + with VOICE_INDEX_LOCK: + meta = VOICE_INDEX.get(voice_id) + if not meta: + raise ValueError("Voice ID not found.") + rel_path = meta.get("path") + if not rel_path: + raise ValueError("Voice path missing.") + + payload = _torch_load_safe(VOICE_STORE / rel_path) + items, prompt_meta = _deserialize_prompt_items(payload) + + with PROMPT_CACHE_LOCK: + PROMPT_CACHE[voice_id] = (items, prompt_meta) + return items, prompt_meta + + +def _load_tts( + model_id: str, + device: str, + dtype: torch.dtype, + flash_attn: bool, + cache_models: bool, +) -> Qwen3TTSModel: + global CURRENT_TTS, CURRENT_MODEL_ID + key = (model_id, device, str(dtype), bool(flash_attn)) + if key in MODEL_CACHE: + CURRENT_TTS = MODEL_CACHE[key] + CURRENT_MODEL_ID = model_id + return CURRENT_TTS + + if not cache_models: + MODEL_CACHE.clear() + if torch.cuda.is_available(): + torch.cuda.empty_cache() + + attn_impl = "flash_attention_2" if flash_attn else None + tts = Qwen3TTSModel.from_pretrained( + model_id, + device_map=device, + dtype=dtype, + attn_implementation=attn_impl, + ) + if getattr(tts.model, "tts_model_type", None) != "base": + raise ValueError("Only Base models support voice cloning.") + + MODEL_CACHE[key] = tts + CURRENT_TTS = tts + CURRENT_MODEL_ID = model_id + return tts + + +def _get_current_tts() -> Qwen3TTSModel: + if CURRENT_TTS is None: + raise RuntimeError("Model not loaded.") + return CURRENT_TTS + + +def build_app(args: argparse.Namespace) -> gr.Blocks: + model_choices, model_label_map, initial_label = _build_model_choices(args.model) + + with MODEL_LOCK: + tts = _load_tts(args.model, args.device, _dtype_from_str(args.dtype), args.flash_attn, args.cache_models) + + lang_choices, lang_map = _get_lang_choices(tts) + voice_choices, voice_map = _build_voice_choices() + + gen_kwargs_default = _collect_gen_kwargs(args) + + def switch_model(model_label: str, cur_model: str, cur_lang_map: Dict[str, str]): + model_id = model_label_map.get(model_label, model_label) + try: + with MODEL_LOCK: + tts_local = _load_tts(model_id, args.device, _dtype_from_str(args.dtype), args.flash_attn, args.cache_models) + choices, mapping = _get_lang_choices(tts_local) + value = "Auto" if "Auto" in choices else (choices[0] if choices else None) + status = f"Loaded {model_id}" + return status, gr.update(choices=choices, value=value), model_id, mapping + except Exception as e: + return f"Failed to load model: {type(e).__name__}: {e}", gr.update(), cur_model, cur_lang_map + + def refresh_voices(): + choices, mapping = _build_voice_choices() + value = choices[0] if choices else None + return gr.update(choices=choices, value=value), mapping + + def save_voice(ref_audio, ref_text: str, use_xvec: bool, voice_name: str, cur_model: str): + try: + audio_tuple = _audio_to_tuple(ref_audio) + if audio_tuple is None: + return "Reference audio is required.", gr.update(), {} + if (not use_xvec) and (not ref_text or not ref_text.strip()): + return "Reference text is required when x-vector only is disabled.", gr.update(), {} + + tts_local = _get_current_tts() + with MODEL_LOCK: + items = tts_local.create_voice_clone_prompt( + ref_audio=audio_tuple, + ref_text=(ref_text.strip() if ref_text else None), + x_vector_only_mode=bool(use_xvec), + ) + + voice_id = uuid.uuid4().hex + name = (voice_name or "").strip() or voice_id[:8] + created_at = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) + rel_path = str(Path("prompts") / f"{voice_id}.pt") + payload = { + "items": [asdict(it) for it in items], + "meta": { + "voice_id": voice_id, + "name": name, + "created_at": created_at, + "model_id": cur_model, + }, + } + torch.save(payload, VOICE_STORE / rel_path) + + meta = { + "name": name, + "path": rel_path, + "created_at": created_at, + "model_id": cur_model, + } + _add_voice_meta(voice_id, meta) + + with PROMPT_CACHE_LOCK: + PROMPT_CACHE[voice_id] = (items, payload["meta"]) + + choices, mapping = _build_voice_choices() + value = choices[0] if choices else None + status = f"Saved voice '{name}' ({voice_id})." + return status, gr.update(choices=choices, value=value), mapping + except Exception as e: + return f"{type(e).__name__}: {e}", gr.update(), {} + + def run_tts( + voice_choice: str, + text: str, + lang_disp: str, + voice_map_local: Dict[str, str], + lang_map_local: Dict[str, str], + cur_model: str, + ): + try: + if not text or not text.strip(): + return None, "Target text is required." + if not voice_choice: + return None, "Please select a voice." + voice_id = voice_map_local.get(voice_choice) + if not voice_id: + return None, "Unknown voice selection." + + items, prompt_meta = _load_prompt_items(voice_id) + prompt_model = prompt_meta.get("model_id") + if prompt_model and prompt_model != cur_model: + return None, f"Voice created with {prompt_model}. Switch model to match." + + language = lang_map_local.get(lang_disp, "Auto") + tts_local = _get_current_tts() + with MODEL_LOCK: + wavs, sr = tts_local.generate_voice_clone( + text=text.strip(), + language=language, + voice_clone_prompt=items, + **gen_kwargs_default, + ) + return _wav_to_gradio_audio(wavs[0], sr), "Finished." + except Exception as e: + return None, f"{type(e).__name__}: {e}" + + theme = gr.themes.Soft(font=[gr.themes.GoogleFont("Source Sans Pro"), "Arial", "sans-serif"]) + css = ".gradio-container {max-width: none !important;}" + + with gr.Blocks(theme=theme, css=css) as demo: + model_state = gr.State(args.model) + lang_state = gr.State(lang_map) + voice_map_state = gr.State(voice_map) + gr.Markdown( + """ +# Qwen3-TTS Voice Clone Service +- Create reusable voice prompts from reference audio +- Generate speech from stored voices +""" + ) + + with gr.Row(): + model_dd = gr.Dropdown( + label="Model", + choices=model_choices, + value=initial_label, + interactive=True, + ) + load_btn = gr.Button("Load Model", variant="primary") + model_status = gr.Textbox(label="Model Status", value=f"Loaded {args.model}", interactive=False) + + with gr.Tabs(): + with gr.Tab("Voice Provider"): + with gr.Row(): + with gr.Column(scale=2): + ref_audio = gr.Audio(label="Reference Audio", type="numpy") + ref_text = gr.Textbox(label="Reference Text", lines=2) + xvec_only = gr.Checkbox(label="Use x-vector only", value=False) + voice_name = gr.Textbox(label="Voice Name (optional)", lines=1) + save_btn = gr.Button("Create Voice", variant="primary") + with gr.Column(scale=3): + save_status = gr.Textbox(label="Status", lines=2) + + with gr.Tab("TTS"): + with gr.Row(): + with gr.Column(scale=2): + voice_dd = gr.Dropdown( + label="Voice", + choices=voice_choices, + value=(voice_choices[0] if voice_choices else None), + interactive=True, + ) + refresh_btn = gr.Button("Refresh Voice List") + text_in = gr.Textbox(label="Target Text", lines=4) + lang_in = gr.Dropdown( + label="Language", + choices=lang_choices, + value=("Auto" if "Auto" in lang_choices else (lang_choices[0] if lang_choices else None)), + interactive=True, + ) + gen_btn = gr.Button("Generate", variant="primary") + with gr.Column(scale=3): + audio_out = gr.Audio(label="Output Audio", type="numpy") + gen_status = gr.Textbox(label="Status", lines=2) + + load_btn.click( + switch_model, + inputs=[model_dd, model_state, lang_state], + outputs=[model_status, lang_in, model_state, lang_state], + ) + refresh_btn.click( + refresh_voices, + outputs=[voice_dd, voice_map_state], + ) + save_btn.click( + save_voice, + inputs=[ref_audio, ref_text, xvec_only, voice_name, model_state], + outputs=[save_status, voice_dd, voice_map_state], + ) + gen_btn.click( + run_tts, + inputs=[voice_dd, text_in, lang_in, voice_map_state, lang_state, model_state], + outputs=[audio_out, gen_status], + ) + + return demo + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + prog="voice-clone-service", + description="Launch a reusable voice-clone Gradio service.", + formatter_class=argparse.RawTextHelpFormatter, + add_help=True, + ) + parser.add_argument( + "--model", + default="Qwen/Qwen3-TTS-12Hz-1.7B-Base", + help="Base model checkpoint path or HuggingFace repo id.", + ) + parser.add_argument("--device", default="cuda:0", help="Device for device_map, e.g. cpu, cuda:0.") + parser.add_argument( + "--dtype", + default="bfloat16", + choices=["bfloat16", "bf16", "float16", "fp16", "float32", "fp32"], + help="Torch dtype for loading the model (default: bfloat16).", + ) + parser.add_argument( + "--flash-attn/--no-flash-attn", + dest="flash_attn", + default=True, + action=argparse.BooleanOptionalAction, + help="Enable FlashAttention-2 (default: enabled).", + ) + parser.add_argument("--cache-models", action="store_true", help="Keep multiple models in memory.") + parser.add_argument("--voice-store", default="voice_store", help="Directory to store voice prompts.") + parser.add_argument("--ip", default="0.0.0.0", help="Server bind IP (default: 0.0.0.0).") + parser.add_argument("--port", type=int, default=8000, help="Server port (default: 8000).") + parser.add_argument("--concurrency", type=int, default=4, help="Gradio queue concurrency (default: 4).") + + parser.add_argument("--max-new-tokens", type=int, default=None, help="Max new tokens for generation (optional).") + parser.add_argument("--temperature", type=float, default=None, help="Sampling temperature (optional).") + parser.add_argument("--top-k", type=int, default=None, help="Top-k sampling (optional).") + parser.add_argument("--top-p", type=float, default=None, help="Top-p sampling (optional).") + parser.add_argument("--repetition-penalty", type=float, default=None, help="Repetition penalty (optional).") + parser.add_argument("--subtalker-top-k", type=int, default=None, help="Subtalker top-k (optional).") + parser.add_argument("--subtalker-top-p", type=float, default=None, help="Subtalker top-p (optional).") + parser.add_argument("--subtalker-temperature", type=float, default=None, help="Subtalker temperature (optional).") + + return parser + + +def main(argv=None) -> int: + parser = build_parser() + args = parser.parse_args(argv) + + _init_voice_store(Path(args.voice_store)) + + demo = build_app(args) + demo.queue(default_concurrency_limit=int(args.concurrency)).launch( + server_name=args.ip, + server_port=args.port, + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/examples/voice_clone_stream_service.md b/examples/voice_clone_stream_service.md new file mode 100644 index 00000000..3b253931 --- /dev/null +++ b/examples/voice_clone_stream_service.md @@ -0,0 +1,52 @@ +# Voice Clone Streaming Service (SSE) + +This service streams voice-clone audio chunks as Server-Sent Events (SSE). + +Constraints +- Single-sample only (one `text`, one `voice_id` per request). +- Base 12Hz models only (e.g. `Qwen/Qwen3-TTS-12Hz-1.7B-Base`). +- SSE payload is base64-encoded `int16` PCM audio. + +Start +```bash +./Qwen3-TTS/examples/run_voice_clone_stream_service.sh +``` + +Test page +```text +http://localhost:8002/ +``` + +Request example +```bash +curl -N -X POST \ + -H "Content-Type: application/json" \ + -d '{ + "voice_id": "YOUR_VOICE_ID", + "text": "Hello, this is streaming TTS.", + "chunk_size": 8, + "left_context_size": 25 + }' \ + http://localhost:8002/voice/stream +``` + +Model switching +```bash +curl -X POST \ + -H "Content-Type: application/json" \ + -d '{"model_id":"Qwen/Qwen3-TTS-12Hz-0.6B-Base","safe_mode":true}' \ + http://localhost:8002/model/load +``` + +Available models from the voice store +```bash +curl http://localhost:8002/models +``` + +Notes +- Lower `chunk_size` yields faster first audio but more overhead. +- `left_context_size` improves continuity at chunk boundaries. +- FlashAttention is enabled by default; use `--no-flash-attn` to disable. +- TF32 matmul/cudnn is enabled by default on CUDA; use `--no-tf32` to disable. +- Model switching returns HTTP 409 if a stream is active. +- Safe mode disables sub-talker sampling for stability. diff --git a/examples/voice_clone_stream_service.py b/examples/voice_clone_stream_service.py new file mode 100644 index 00000000..251dacf3 --- /dev/null +++ b/examples/voice_clone_stream_service.py @@ -0,0 +1,440 @@ +# coding=utf-8 +# Copyright 2026 The Alibaba Qwen team. +# SPDX-License-Identifier: Apache-2.0 +""" +FastAPI service for streaming voice-clone audio chunks from stored prompts. +""" + +import argparse +import base64 +import gc +import json +import threading +from pathlib import Path +from typing import Any, Dict, List, Optional, Tuple + +import numpy as np +import torch +from fastapi import FastAPI, HTTPException +from fastapi.responses import FileResponse, StreamingResponse +from pydantic import BaseModel + +from qwen_tts import Qwen3TTSModel, VoiceClonePromptItem + + +MODEL_LOCK = threading.Lock() +CURRENT_TTS: Optional[Qwen3TTSModel] = None +CURRENT_MODEL_ID: Optional[str] = None +CURRENT_CONFIG: Dict[str, Any] = { + "model": None, + "device": None, + "dtype": None, + "flash_attn": None, + "tf32": None, + "safe_mode": False, +} + +VOICE_INDEX_LOCK = threading.Lock() +VOICE_INDEX: Dict[str, Dict[str, Any]] = {} + +PROMPT_CACHE_LOCK = threading.Lock() +PROMPT_CACHE: Dict[str, Tuple[List[VoiceClonePromptItem], Dict[str, Any]]] = {} + +VOICE_STORE: Optional[Path] = None +PROMPT_DIR: Optional[Path] = None +INDEX_PATH: Optional[Path] = None +BASE_DIR = Path(__file__).resolve().parent +TEST_PAGE_PATH = BASE_DIR / "voice_clone_stream_test.html" + + +def _dtype_from_str(s: str) -> torch.dtype: + s = (s or "").strip().lower() + if s in ("bf16", "bfloat16"): + return torch.bfloat16 + if s in ("fp16", "float16", "half"): + return torch.float16 + if s in ("fp32", "float32"): + return torch.float32 + raise ValueError(f"Unsupported torch dtype: {s}. Use bfloat16/float16/float32.") + + +def _apply_tf32(enabled: bool) -> None: + if not torch.cuda.is_available(): + return + torch.backends.cuda.matmul.allow_tf32 = bool(enabled) + torch.backends.cudnn.allow_tf32 = bool(enabled) + if hasattr(torch, "set_float32_matmul_precision"): + torch.set_float32_matmul_precision("high") + + +def _set_current_config( + model_id: str, + device: str, + dtype: str, + flash_attn: bool, + tf32: bool, + safe_mode: bool, +) -> None: + global CURRENT_CONFIG + CURRENT_CONFIG = { + "model": model_id, + "device": device, + "dtype": dtype, + "flash_attn": bool(flash_attn), + "tf32": bool(tf32), + "safe_mode": bool(safe_mode), + } + + +def _clear_model() -> None: + global CURRENT_TTS, CURRENT_MODEL_ID + if CURRENT_TTS is None: + return + old = CURRENT_TTS + CURRENT_TTS = None + CURRENT_MODEL_ID = None + del old + if torch.cuda.is_available(): + torch.cuda.empty_cache() + torch.cuda.ipc_collect() + gc.collect() + + +def _init_voice_store(path: Path) -> None: + global VOICE_STORE, PROMPT_DIR, INDEX_PATH, VOICE_INDEX + VOICE_STORE = path + PROMPT_DIR = VOICE_STORE / "prompts" + PROMPT_DIR.mkdir(parents=True, exist_ok=True) + INDEX_PATH = VOICE_STORE / "voices.json" + VOICE_INDEX = _load_voice_index(INDEX_PATH) + + +def _load_voice_index(index_path: Path) -> Dict[str, Dict[str, Any]]: + if not index_path.exists(): + return {} + try: + payload = json.loads(index_path.read_text()) + except Exception: + return {} + voices = payload.get("voices", {}) + return voices if isinstance(voices, dict) else {} + + +def _torch_load_safe(path: Path) -> Any: + try: + return torch.load(path, map_location="cpu", weights_only=True) + except TypeError: + return torch.load(path, map_location="cpu") + + +def _deserialize_prompt_items(payload: Dict[str, Any]) -> Tuple[List[VoiceClonePromptItem], Dict[str, Any]]: + items_raw = payload.get("items", None) + if not isinstance(items_raw, list) or len(items_raw) == 0: + raise ValueError("Empty or invalid prompt items.") + items: List[VoiceClonePromptItem] = [] + for d in items_raw: + if not isinstance(d, dict): + raise ValueError("Invalid prompt item format.") + ref_code = d.get("ref_code", None) + if ref_code is not None and not torch.is_tensor(ref_code): + ref_code = torch.tensor(ref_code) + ref_spk = d.get("ref_spk_embedding", None) + if ref_spk is None: + raise ValueError("Missing ref_spk_embedding in prompt item.") + if not torch.is_tensor(ref_spk): + ref_spk = torch.tensor(ref_spk) + items.append( + VoiceClonePromptItem( + ref_code=ref_code, + ref_spk_embedding=ref_spk, + x_vector_only_mode=bool(d.get("x_vector_only_mode", False)), + icl_mode=bool(d.get("icl_mode", not bool(d.get("x_vector_only_mode", False)))), + ref_text=d.get("ref_text", None), + ) + ) + meta = payload.get("meta", {}) + return items, meta if isinstance(meta, dict) else {} + + +def _load_prompt_items(voice_id: str) -> Tuple[List[VoiceClonePromptItem], Dict[str, Any]]: + with PROMPT_CACHE_LOCK: + cached = PROMPT_CACHE.get(voice_id) + if cached is not None: + return cached + + with VOICE_INDEX_LOCK: + meta = VOICE_INDEX.get(voice_id) + if not meta: + raise ValueError("Voice ID not found.") + rel_path = meta.get("path") + if not rel_path: + raise ValueError("Voice path missing.") + + payload = _torch_load_safe(VOICE_STORE / rel_path) + items, prompt_meta = _deserialize_prompt_items(payload) + + with PROMPT_CACHE_LOCK: + PROMPT_CACHE[voice_id] = (items, prompt_meta) + return items, prompt_meta + + +def _validate_prompt_items(items: List[VoiceClonePromptItem], tts: Qwen3TTSModel) -> None: + vocab_size = int(tts.model.talker.config.vocab_size) + num_groups = int(tts.model.talker.config.num_code_groups) + for idx, item in enumerate(items): + ref_code = item.ref_code + if ref_code is None: + continue + if not torch.is_tensor(ref_code): + ref_code = torch.tensor(ref_code) + if ref_code.dim() != 2 or ref_code.shape[1] != num_groups: + raise ValueError( + f"ref_code shape mismatch for prompt[{idx}]: " + f"expected (*, {num_groups}), got {tuple(ref_code.shape)}." + ) + if ref_code.dtype not in (torch.int64, torch.int32, torch.int16, torch.uint8): + ref_code = ref_code.long() + if ref_code.numel() > 0: + min_id = int(ref_code.min().item()) + max_id = int(ref_code.max().item()) + if min_id < 0 or max_id >= vocab_size: + raise ValueError( + f"ref_code out of range for model vocab_size={vocab_size}: min={min_id}, max={max_id}. " + "Recreate the voice prompt with the same model." + ) + item.ref_code = ref_code + + +def _load_tts(model_id: str, device: str, dtype: torch.dtype, flash_attn: bool) -> Qwen3TTSModel: + global CURRENT_TTS, CURRENT_MODEL_ID + attn_impl = "flash_attention_2" if flash_attn else "eager" + tts = Qwen3TTSModel.from_pretrained( + model_id, + device_map=device, + dtype=dtype, + attn_implementation=attn_impl, + ) + if getattr(tts.model, "tts_model_type", None) != "base": + raise ValueError("Only Base models support voice cloning.") + CURRENT_TTS = tts + CURRENT_MODEL_ID = model_id + return tts + + +class StreamRequest(BaseModel): + voice_id: str + text: str + language: str = "Auto" + chunk_size: int = 8 + left_context_size: int = 25 + do_sample: Optional[bool] = None + top_k: Optional[int] = None + top_p: Optional[float] = None + temperature: Optional[float] = None + repetition_penalty: Optional[float] = None + subtalker_dosample: Optional[bool] = None + subtalker_top_k: Optional[int] = None + subtalker_top_p: Optional[float] = None + subtalker_temperature: Optional[float] = None + max_new_tokens: Optional[int] = None + + +class ModelLoadRequest(BaseModel): + model_id: str + device: Optional[str] = None + dtype: Optional[str] = None + flash_attn: Optional[bool] = None + tf32: Optional[bool] = None + clear_cache: bool = True + safe_mode: Optional[bool] = None + + +def build_app(args: argparse.Namespace) -> FastAPI: + _init_voice_store(Path(args.voice_store)) + _apply_tf32(bool(args.tf32)) + with MODEL_LOCK: + _load_tts(args.model, args.device, _dtype_from_str(args.dtype), args.flash_attn) + _set_current_config(args.model, args.device, args.dtype, args.flash_attn, args.tf32, False) + + app = FastAPI() + + @app.get("/") + def index(): + if not TEST_PAGE_PATH.exists(): + raise HTTPException(status_code=404, detail="Test page not found.") + return FileResponse(TEST_PAGE_PATH, media_type="text/html") + + @app.get("/health") + def health(): + return { + "status": "ok", + "model": CURRENT_MODEL_ID, + "device": CURRENT_CONFIG.get("device"), + "dtype": CURRENT_CONFIG.get("dtype"), + "flash_attn": CURRENT_CONFIG.get("flash_attn"), + "tf32": CURRENT_CONFIG.get("tf32"), + "safe_mode": CURRENT_CONFIG.get("safe_mode"), + } + + @app.get("/models") + def list_models(): + with VOICE_INDEX_LOCK: + voices = list(VOICE_INDEX.values()) + models = sorted({meta.get("model_id") for meta in voices if meta.get("model_id")}) + return {"models": models} + + @app.get("/voices") + def list_voices(): + with VOICE_INDEX_LOCK: + voices = dict(VOICE_INDEX) + return {"voices": voices} + + @app.post("/voice/stream") + def voice_stream(payload: StreamRequest): + if not payload.text.strip(): + raise HTTPException(status_code=400, detail="Target text is required.") + try: + items, prompt_meta = _load_prompt_items(payload.voice_id) + except Exception as e: + raise HTTPException(status_code=404, detail=str(e)) + + prompt_model = prompt_meta.get("model_id") + if prompt_model and prompt_model != CURRENT_MODEL_ID: + raise HTTPException(status_code=400, detail=f"Voice created with {prompt_model}. Switch model to match.") + tts = CURRENT_TTS + if tts is None: + raise HTTPException(status_code=500, detail="Model not loaded.") + try: + _validate_prompt_items(items, tts) + except ValueError as exc: + raise HTTPException(status_code=400, detail=str(exc)) + + gen_kwargs = { + "do_sample": payload.do_sample, + "top_k": payload.top_k, + "top_p": payload.top_p, + "temperature": payload.temperature, + "repetition_penalty": payload.repetition_penalty, + "subtalker_dosample": payload.subtalker_dosample, + "subtalker_top_k": payload.subtalker_top_k, + "subtalker_top_p": payload.subtalker_top_p, + "subtalker_temperature": payload.subtalker_temperature, + "max_new_tokens": payload.max_new_tokens, + } + gen_kwargs = {k: v for k, v in gen_kwargs.items() if v is not None} + if CURRENT_CONFIG.get("safe_mode"): + gen_kwargs.setdefault("subtalker_dosample", False) + + def _iter_events(): + header = {"sr": int(tts.model.speech_tokenizer.get_output_sample_rate()), "dtype": "int16"} + yield f"event:meta\ndata:{json.dumps(header)}\n\n" + chunk_idx = 0 + with MODEL_LOCK: + for wav_chunk, sr in tts.generate_voice_clone_stream( + text=payload.text, + language=payload.language, + voice_clone_prompt=items, + chunk_size=payload.chunk_size, + left_context_size=payload.left_context_size, + **gen_kwargs, + ): + pcm16 = (np.clip(wav_chunk, -1.0, 1.0) * 32767.0).astype(np.int16) + b64 = base64.b64encode(pcm16.tobytes()).decode("ascii") + data = {"i": chunk_idx, "sr": sr, "audio": b64} + yield f"data:{json.dumps(data)}\n\n" + chunk_idx += 1 + yield "event:end\ndata:done\n\n" + + headers = {"Cache-Control": "no-cache", "X-Accel-Buffering": "no"} + return StreamingResponse(_iter_events(), media_type="text/event-stream", headers=headers) + + @app.post("/model/load") + def load_model(payload: ModelLoadRequest): + model_id = (payload.model_id or "").strip() + if not model_id: + raise HTTPException(status_code=400, detail="model_id is required.") + if not MODEL_LOCK.acquire(blocking=False): + raise HTTPException(status_code=409, detail="Model is busy. Wait for streaming to finish.") + try: + current_device = CURRENT_CONFIG.get("device") or args.device + current_dtype = CURRENT_CONFIG.get("dtype") or args.dtype + current_flash = ( + CURRENT_CONFIG.get("flash_attn") if CURRENT_CONFIG.get("flash_attn") is not None else args.flash_attn + ) + current_tf32 = CURRENT_CONFIG.get("tf32") if CURRENT_CONFIG.get("tf32") is not None else args.tf32 + current_safe = CURRENT_CONFIG.get("safe_mode") if CURRENT_CONFIG.get("safe_mode") is not None else False + + device = payload.device or current_device + dtype_str = payload.dtype or current_dtype + flash_attn = payload.flash_attn if payload.flash_attn is not None else current_flash + tf32 = payload.tf32 if payload.tf32 is not None else current_tf32 + safe_mode = payload.safe_mode if payload.safe_mode is not None else current_safe + + _clear_model() + _apply_tf32(bool(tf32)) + _load_tts(model_id, device, _dtype_from_str(dtype_str), bool(flash_attn)) + _set_current_config(model_id, device, dtype_str, bool(flash_attn), bool(tf32), bool(safe_mode)) + if payload.clear_cache: + with PROMPT_CACHE_LOCK: + PROMPT_CACHE.clear() + return {"status": "ok", "model": CURRENT_MODEL_ID, "safe_mode": CURRENT_CONFIG.get("safe_mode")} + except Exception as exc: + raise HTTPException(status_code=400, detail=str(exc)) + finally: + MODEL_LOCK.release() + + return app + + +def build_parser() -> argparse.ArgumentParser: + parser = argparse.ArgumentParser( + prog="voice-clone-stream-service", + description="Launch a streaming voice-clone service (SSE).", + formatter_class=argparse.RawTextHelpFormatter, + add_help=True, + ) + parser.add_argument( + "--model", + default="Qwen/Qwen3-TTS-12Hz-1.7B-Base", + help="Base model checkpoint path or HuggingFace repo id.", + ) + parser.add_argument("--device", default="cuda:0", help="Device for device_map, e.g. cpu, cuda:0.") + parser.add_argument( + "--dtype", + default="float16", + choices=["bfloat16", "bf16", "float16", "fp16", "float32", "fp32"], + help="Torch dtype for loading the model (default: float16).", + ) + parser.add_argument( + "--flash-attn/--no-flash-attn", + dest="flash_attn", + default=True, + action=argparse.BooleanOptionalAction, + help="Enable FlashAttention-2 (default: enabled for streaming).", + ) + parser.add_argument( + "--tf32/--no-tf32", + dest="tf32", + default=True, + action=argparse.BooleanOptionalAction, + help="Enable TF32 matmul/cudnn on supported GPUs (default: enabled).", + ) + parser.add_argument("--voice-store", default="voice_store", help="Directory to store voice prompts.") + parser.add_argument("--ip", default="0.0.0.0", help="Server bind IP (default: 0.0.0.0).") + parser.add_argument("--port", type=int, default=8002, help="Server port (default: 8002).") + return parser + + +def main(argv=None) -> int: + parser = build_parser() + args = parser.parse_args(argv) + + app = build_app(args) + import uvicorn + + uvicorn.run(app, host=args.ip, port=int(args.port), log_level="info") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/examples/voice_clone_stream_test.html b/examples/voice_clone_stream_test.html new file mode 100644 index 00000000..42bea2a5 --- /dev/null +++ b/examples/voice_clone_stream_test.html @@ -0,0 +1,613 @@ + + + + + + Voice Clone Streaming Test + + + +
+
+

Voice Clone Streaming Test

+

Stream from the SSE endpoint and hear chunks immediately.

+
+ +
+
+
+ + +
+
+ + +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+
+ +
+
+ + +
+
+ + +
+
+ +
+ + +
+ +
+ + +
+ +
+ + + +
+
+ idle + sr: - +
+
+ +
+ +

+      
+
+ + + + diff --git a/qwen_tts/inference/qwen3_tts_model.py b/qwen_tts/inference/qwen3_tts_model.py index f4d33bf3..f9f9bde0 100644 --- a/qwen_tts/inference/qwen3_tts_model.py +++ b/qwen_tts/inference/qwen3_tts_model.py @@ -17,7 +17,7 @@ import io import urllib.request from dataclasses import dataclass -from typing import Any, Dict, List, Optional, Tuple, Union +from typing import Any, Dict, Iterator, List, Optional, Tuple, Union from urllib.parse import urlparse import librosa @@ -632,6 +632,390 @@ def generate_voice_clone( return wavs_out, fs + @torch.inference_mode() + def generate_voice_clone_stream( + self, + text: str, + language: Optional[str] = None, + ref_audio: Optional[AudioLike] = None, + ref_text: Optional[str] = None, + x_vector_only_mode: bool = False, + voice_clone_prompt: Optional[Union[Dict[str, Any], List[VoiceClonePromptItem]]] = None, + non_streaming_mode: bool = False, + chunk_size: int = 8, + left_context_size: int = 25, + **kwargs, + ) -> Iterator[Tuple[np.ndarray, int]]: + """ + Stream voice-clone audio chunks (single sample only). + + This method yields (wav_chunk, sample_rate) tuples as soon as each chunk is decoded. + """ + if self.model.tts_model_type != "base": + raise ValueError( + f"model with \ntokenizer_type: {self.model.tokenizer_type}\n" + f"tts_model_size: {self.model.tts_model_size}\n" + f"tts_model_type: {self.model.tts_model_type}\n" + "does not support generate_voice_clone_stream, Please check Model Card or Readme for more details." + ) + if not isinstance(text, str): + raise ValueError("Streaming mode only supports a single text string.") + if chunk_size <= 0: + raise ValueError("chunk_size must be a positive integer.") + if left_context_size < 0: + raise ValueError("left_context_size must be >= 0.") + + if voice_clone_prompt is None: + if ref_audio is None: + raise ValueError("Either `voice_clone_prompt` or `ref_audio` must be provided.") + prompt_items = self.create_voice_clone_prompt( + ref_audio=ref_audio, + ref_text=ref_text, + x_vector_only_mode=x_vector_only_mode, + ) + if len(prompt_items) != 1: + raise ValueError("Streaming mode only supports a single prompt item.") + voice_clone_prompt_dict = self._prompt_items_to_voice_clone_prompt(prompt_items) + ref_text_for_ids = prompt_items[0].ref_text + else: + if isinstance(voice_clone_prompt, list): + if len(voice_clone_prompt) != 1: + raise ValueError("Streaming mode only supports a single prompt item.") + voice_clone_prompt_dict = self._prompt_items_to_voice_clone_prompt(voice_clone_prompt) + ref_text_for_ids = voice_clone_prompt[0].ref_text + else: + voice_clone_prompt_dict = voice_clone_prompt + ref_text_for_ids = None + + def _ensure_list_field(val): + if val is None: + return None + return val if isinstance(val, list) else [val] + + voice_clone_prompt_dict = { + "ref_code": _ensure_list_field(voice_clone_prompt_dict.get("ref_code")), + "ref_spk_embedding": _ensure_list_field(voice_clone_prompt_dict.get("ref_spk_embedding")), + "x_vector_only_mode": _ensure_list_field(voice_clone_prompt_dict.get("x_vector_only_mode", False)), + "icl_mode": _ensure_list_field(voice_clone_prompt_dict.get("icl_mode", False)), + } + + if language is None: + language = "Auto" + self._validate_languages([language]) + + input_ids = self._tokenize_texts([self._build_assistant_text(text)]) + input_id = input_ids[0] + + ref_id = None + if ref_text_for_ids: + ref_id = self._tokenize_texts([self._build_ref_text(ref_text_for_ids)])[0] + + gen_kwargs = self._merge_generate_kwargs(**kwargs) + + if self.model.speech_tokenizer.get_model_type() != "qwen3_tts_tokenizer_12hz": + raise ValueError("Streaming decode currently supports only 12Hz tokenizer models.") + + decoder = self.model.speech_tokenizer.model.decoder + decoder_device = getattr(self.model.speech_tokenizer, "device", self.model.talker.device) + decode_upsample = int(getattr(decoder, "total_upsample", 0)) or int( + self.model.speech_tokenizer.get_decode_upsample_rate() + ) + + def _decode_codes(codes: torch.Tensor, drop_codes: int) -> Optional[np.ndarray]: + if codes.numel() == 0: + return None + codes_t = codes.transpose(0, 1).unsqueeze(0).to(decoder_device) + wav = decoder(codes_t).squeeze(0).squeeze(0) + if drop_codes > 0: + drop = drop_codes * decode_upsample + if drop < wav.shape[-1]: + wav = wav[drop:] + else: + wav = wav[:0] + return wav.detach().to(torch.float32).cpu().numpy() + + suppress_token_ids = [ + i + for i in range(self.model.config.talker_config.vocab_size - 1024, self.model.config.talker_config.vocab_size) + if i not in (self.model.config.talker_config.codec_eos_token_id,) + ] + + def _apply_repetition_penalty(logits: torch.Tensor, prev_tokens: List[int], penalty: float) -> torch.Tensor: + if penalty is None or penalty == 1.0 or not prev_tokens: + return logits + for tok in set(prev_tokens): + if logits[tok] < 0: + logits[tok] *= penalty + else: + logits[tok] /= penalty + return logits + + def _filter_top_k_top_p(logits: torch.Tensor, top_k: int, top_p: float) -> torch.Tensor: + if top_k and top_k > 0: + values, _ = torch.topk(logits, top_k) + min_keep = values[-1] + logits = torch.where(logits < min_keep, torch.tensor(-float("inf"), device=logits.device), logits) + if top_p is not None and top_p < 1.0: + sorted_logits, sorted_indices = torch.sort(logits, descending=True) + probs = torch.softmax(sorted_logits, dim=-1) + cum_probs = probs.cumsum(dim=-1) + mask = cum_probs > top_p + if mask.numel() > 0: + mask[0] = False + sorted_logits[mask] = -float("inf") + logits = torch.empty_like(logits).scatter_(0, sorted_indices, sorted_logits) + return logits + + def _sample_next(logits: torch.Tensor, prev_tokens: List[int]) -> int: + logits = logits.clone() + if suppress_token_ids: + logits[suppress_token_ids] = -float("inf") + logits = _apply_repetition_penalty(logits, prev_tokens, float(gen_kwargs["repetition_penalty"])) + temperature = float(gen_kwargs["temperature"]) if gen_kwargs.get("temperature") is not None else 1.0 + if temperature <= 0: + temperature = 1.0 + logits = logits / temperature + logits = _filter_top_k_top_p( + logits, + int(gen_kwargs["top_k"]) if gen_kwargs.get("top_k") is not None else 0, + float(gen_kwargs["top_p"]) if gen_kwargs.get("top_p") is not None else 1.0, + ) + if not bool(gen_kwargs.get("do_sample", True)): + return int(torch.argmax(logits).item()) + probs = torch.softmax(logits.float(), dim=-1) + if not torch.isfinite(probs).all() or float(probs.sum().item()) <= 0: + return int(torch.argmax(logits).item()) + return int(torch.multinomial(probs, num_samples=1).item()) + + voice_clone_spk_embeds = None + if voice_clone_prompt_dict.get("ref_spk_embedding") is not None: + voice_clone_spk_embeds = self.model.generate_speaker_prompt(voice_clone_prompt_dict) + + if voice_clone_spk_embeds is None: + speaker_embed = None + else: + if voice_clone_prompt_dict["x_vector_only_mode"][0] or voice_clone_prompt_dict["icl_mode"][0]: + speaker_embed = voice_clone_spk_embeds[0] + else: + speaker_embed = None + + if language.lower() == "auto": + language_id = None + else: + language_id = self.model.config.talker_config.codec_language_id[language.lower()] + + tts_bos_embed, tts_eos_embed, tts_pad_embed = self.model.talker.text_projection( + self.model.talker.get_text_embeddings()( + torch.tensor( + [[self.model.config.tts_bos_token_id, self.model.config.tts_eos_token_id, self.model.config.tts_pad_token_id]], + device=self.model.talker.device, + dtype=input_id.dtype, + ) + ) + ).chunk(3, dim=1) + + if language_id is None: + codec_prefill_list = [[ + self.model.config.talker_config.codec_nothink_id, + self.model.config.talker_config.codec_think_bos_id, + self.model.config.talker_config.codec_think_eos_id, + ]] + else: + codec_prefill_list = [[ + self.model.config.talker_config.codec_think_id, + self.model.config.talker_config.codec_think_bos_id, + language_id, + self.model.config.talker_config.codec_think_eos_id, + ]] + + codec_input_embedding_0 = self.model.talker.get_input_embeddings()( + torch.tensor(codec_prefill_list, device=self.model.talker.device, dtype=input_id.dtype) + ) + codec_input_embedding_1 = self.model.talker.get_input_embeddings()( + torch.tensor( + [[self.model.config.talker_config.codec_pad_id, self.model.config.talker_config.codec_bos_id]], + device=self.model.talker.device, + dtype=input_id.dtype, + ) + ) + if speaker_embed is None: + codec_input_embedding = torch.cat([codec_input_embedding_0, codec_input_embedding_1], dim=1) + else: + codec_input_embedding = torch.cat( + [codec_input_embedding_0, speaker_embed.view(1, 1, -1), codec_input_embedding_1], dim=1 + ) + + talker_input_embed_role = self.model.talker.text_projection( + self.model.talker.get_text_embeddings()(input_id[:, :3]) + ) + _talker_input_embed = torch.cat( + (tts_pad_embed.expand(-1, codec_input_embedding.shape[1] - 2, -1), tts_bos_embed), + dim=1, + ) + codec_input_embedding[:, :-1] + talker_input_embed = torch.cat((talker_input_embed_role, _talker_input_embed), dim=1) + + ref_code_list = voice_clone_prompt_dict.get("ref_code") + ref_code_item = ref_code_list[0] if ref_code_list else None + if ref_code_item is not None and voice_clone_prompt_dict["icl_mode"][0]: + if ref_id is None: + raise ValueError("ref_text is required for ICL mode in streaming generation.") + icl_input_embed, trailing_text_hidden = self.model.generate_icl_prompt( + text_id=input_id[:, 3:-5], + ref_id=ref_id[:, 3:-2], + ref_code=ref_code_item.to(self.model.talker.device), + tts_pad_embed=tts_pad_embed, + tts_eos_embed=tts_eos_embed, + non_streaming_mode=non_streaming_mode, + ) + talker_input_embed = torch.cat([talker_input_embed, icl_input_embed], dim=1) + else: + talker_input_embed = torch.cat( + [ + talker_input_embed, + self.model.talker.text_projection( + self.model.talker.get_text_embeddings()(input_id[:, 3:4]) + ) + codec_input_embedding[:, -1:], + ], + dim=1, + ) + if non_streaming_mode: + talker_input_embed = talker_input_embed[:, :-1] + talker_input_embed = torch.cat( + [ + talker_input_embed, + torch.cat( + ( + self.model.talker.text_projection( + self.model.talker.get_text_embeddings()(input_id[:, 3:-5]) + ), + tts_eos_embed, + ), + dim=1, + ) + + self.model.talker.get_input_embeddings()( + torch.tensor( + [[self.model.config.talker_config.codec_pad_id]] * (input_id[:, 3:-5].shape[1] + 1), + device=self.model.talker.device, + dtype=input_id.dtype, + ) + ), + tts_pad_embed + + self.model.talker.get_input_embeddings()( + torch.tensor( + [[self.model.config.talker_config.codec_bos_id]], + device=self.model.talker.device, + dtype=input_id.dtype, + ) + ), + ], + dim=1, + ) + trailing_text_hidden = tts_pad_embed + else: + trailing_text_hidden = torch.cat( + ( + self.model.talker.text_projection( + self.model.talker.get_text_embeddings()(input_id[:, 4:-5]) + ), + tts_eos_embed, + ), + dim=1, + ) + + prefill = self.model.talker( + inputs_embeds=talker_input_embed, + attention_mask=None, + use_cache=True, + output_hidden_states=True, + return_dict=True, + trailing_text_hidden=trailing_text_hidden, + tts_pad_embed=tts_pad_embed, + subtalker_dosample=bool(gen_kwargs.get("subtalker_dosample", True)), + subtalker_top_k=gen_kwargs.get("subtalker_top_k"), + subtalker_top_p=gen_kwargs.get("subtalker_top_p"), + subtalker_temperature=gen_kwargs.get("subtalker_temperature"), + ) + + next_token = _sample_next(prefill.logits[:, -1, :].squeeze(0), []) + past_key_values = prefill.past_key_values + past_hidden = prefill.past_hidden + generation_step = prefill.generation_step + + ref_code = ref_code_item + context_codes = None + if ref_code is not None: + if left_context_size > 0: + context_codes = ref_code[-left_context_size:].to(decoder_device) + else: + context_codes = ref_code.to(decoder_device) + + pending_codes: List[torch.Tensor] = [] + prev_tokens: List[int] = [] + max_new_tokens = int(gen_kwargs.get("max_new_tokens", 2048)) + eos_token_id = int(self.model.config.talker_config.codec_eos_token_id) + sample_rate = int(self.model.speech_tokenizer.get_output_sample_rate()) + + for _ in range(max_new_tokens): + if next_token == eos_token_id: + break + + output = self.model.talker( + input_ids=torch.tensor([[next_token]], device=self.model.talker.device), + attention_mask=None, + past_key_values=past_key_values, + use_cache=True, + output_hidden_states=True, + return_dict=True, + past_hidden=past_hidden, + trailing_text_hidden=trailing_text_hidden, + tts_pad_embed=tts_pad_embed, + generation_step=generation_step, + subtalker_dosample=bool(gen_kwargs.get("subtalker_dosample", True)), + subtalker_top_k=gen_kwargs.get("subtalker_top_k"), + subtalker_top_p=gen_kwargs.get("subtalker_top_p"), + subtalker_temperature=gen_kwargs.get("subtalker_temperature"), + ) + + codec_ids = output.hidden_states[1] + if codec_ids is None: + break + pending_codes.append(codec_ids.squeeze(0)) + prev_tokens.append(int(next_token)) + + if len(pending_codes) >= chunk_size: + chunk = torch.stack(pending_codes[:chunk_size], dim=0) + pending_codes = pending_codes[chunk_size:] + if context_codes is not None and context_codes.numel() > 0: + decode_codes = torch.cat([context_codes, chunk], dim=0) + drop = int(context_codes.shape[0]) + else: + decode_codes = chunk + drop = 0 + wav_chunk = _decode_codes(decode_codes, drop) + if wav_chunk is not None and wav_chunk.size > 0: + yield wav_chunk, sample_rate + if left_context_size > 0: + context_codes = decode_codes[-left_context_size:] + else: + context_codes = None + + past_key_values = output.past_key_values + past_hidden = output.past_hidden + generation_step = output.generation_step + next_token = _sample_next(output.logits[:, -1, :].squeeze(0), prev_tokens) + + if pending_codes: + chunk = torch.stack(pending_codes, dim=0) + if context_codes is not None and context_codes.numel() > 0: + decode_codes = torch.cat([context_codes, chunk], dim=0) + drop = int(context_codes.shape[0]) + else: + decode_codes = chunk + drop = 0 + wav_chunk = _decode_codes(decode_codes, drop) + if wav_chunk is not None and wav_chunk.size > 0: + yield wav_chunk, sample_rate + # voice design model @torch.no_grad() def generate_voice_design( diff --git a/voice_store/prompts/03f79f10717a47e39e186e7ee4e53027.pt b/voice_store/prompts/03f79f10717a47e39e186e7ee4e53027.pt new file mode 100644 index 0000000000000000000000000000000000000000..4a75336854d3f74ab2a1c92eedc94636914a255d GIT binary patch literal 199725 zcmbTf2Y8mn)~FpiM5Xr{r1uWeq$9m62qFXsMQMS6^xk`yE>%FfAksvtfC^Go1Vls- zNGQ^qdfwoDbN0!(Jp2ECu5a(PXJ+-8XJ*Zs_2z3(J5Jo7po9s7{;z*|f=UM!F4n$O z>Gnkmmnu>!w0NnoVx_~1yjC)-R9IN?uoA@z7cEt&U1&sT!S3&Ou3ouBQ1kyk|AxdK z7#@_nS-gPwP7z^UdWOep86N10le<~8NJiqaSEtVHT1A9)?b)qItKLO}!{g=7-7G%v_n{U{C`M->vZedq47U`!Qly- z#R{Ml4o}!DegL-Z)h@J5;qXLtcejiP4{lgHsP4_!wUdqtf2nq?!2cQ*{_@ziZM${u z9M(3XQ@5@?gX{Nb7uF-JUDZx)BZ9+U$8YyLO$r zb_h?_F`!aM)u>#(bGOilA|+p_lKiaKGjhX?86zSW&yN~0KO}15l&JBGu5XwUkQ%jgQNiHI4a@(L8FGEY zoIqzt}i;M9m&kFeGxsn8-DO&Va@X#{~K#CvFG{kVGR!eK;ywi2zfOqE^fg zs1(qB(fsQhh6K#p84@{jO2J^-0T8udXGqktsR68LnV(Jwi5kA(`i7x_Mzp2ZH~wSr z#t~7YCOo%j!DlxX1`Jy?Gjj5Xs0CX?u75iGxtcRaJh%P&=R2eIx&HaqfWM+qqt&|p z+1RLs%Wo_k6YY?K0XqUd2=w0=xAn%%=PnBl2#p%C=s#R`eZz)oFP$jHw0!Vdb&1k zj$Ak^YS`we1%as!cq{Ug9RVM#iJCVdYVm~V35s4Nfi-n~>xSrA3D87touc~}e8#GZ z3al@11M|eZM143VdR`(oZ4Ed-T3FP~3C~yT^Q90HAdMQo;JMtz8?J916A-;Ju)ZP} z4*5SPD&Uh3*961|R>Fb_Py`m$^({jK{~fhr1oNWMz?Tugj~cNxTJzwj*~_Ara`gJ1 zy)v*20#<*yIBN3R|D5L~;{)nPPMrOJiv5RnT%dRB*nrfK$W=2U$8LUZ(ApURR|MEs zh<0VPO9D$TBx-T=jJnjv2fm~gV*{!O{Ixi+#8-@sUQ5wyAZp>rfMcGo`<-K=U3z^} zV8Kodi5#{vFk{jEjk|RT3u)7*U&Cu;n|uc3Qz>pi5jsnYT=sj z?9GA$?Y2F_LLfUqi6(_hl__4TOo`&n!*f30OQZMM z&e6hiHOmyhZ1_P~*Fw?%RjfdhCXEXeDO#gnfg%Mipd9~Qhv=xLP~qy8 zv;KDlW<>iu@Gowhe_*3%7X1MIfyaPVz+V7;BIv?sD@XnXk>4HqQnY`APhH?9#t$Q3eR`nx2KYxtM{t3E z*OB`J{MNwdymr!`pZ-(u-$=iDO@pscd2hi#IpeFKONIOk@Y{>LH2ou3!d}b5c-4kUxWY4;HL!YpO?UI0DfV{>(Ji^`KhtD z4=@pS{tkcPYQ~ELYvGqXwEr7i1%6C;9Xa}67!&WmwHIK|9rW*yz4@`fGj>m9{1W&> z8E=jq(`XBep!YWDw=v!U`c&{+41EpcmY{z-_`foqjQ%X(ZH9k7;1u}&g*?Ak*J(TG z&p}@o7#IGjq02*mb@-k^kJHfm{klHSL7xEpBH(wXzaxC(!}kL4L&k+$(ckg!kZ0R@ zur2%wci$rQesZIQZ{l zM@#q)q3ygn?>E8Uf;|1E{L0W>Mc-ibldpVEqnFTm`2qTWgZjt)RytvK=G*T{dD
hOw+x1@$xm%c*>c9-h?TfwIslS~U`_(fh6i+x9 zJxVhV=a|2v=;8T0pZ0h7;ZO8XZ_nQxj3)&@FM6kh?+WCo=L7KFKXPEN(DnE=daAd2 zZU^6U;|KH-Z!GPv&_jI(p++VaKX$<|&J{&D=+m-ZR(g-_{!1?YJw zJV*az^fi9!ja|wU-a>!lY4;cRiI~uRL@2)Tw&%t!^l*RsH$L{u&-Ij&dEbKGen(^I z_q)r3zucF~V2|_Q`gUHO=P%)#2tD<$^DVzq%x87{>3%X2Iqxz*`XMIF0{9#{o^*c4X<3)Xqpm;kgz}9E)nDj5 zFJ<0ck3;`aJ7^8i^VfTs=birgx41{Y#+(n^j?3rYp!^-*f`7GNenR<5Cv^PZU`)Sw zu8HsX%dBsqdi@(zAEEq&)7UqLL6 z!$0PE#?HB4N&(r@YRDbzshtU3C(04ZLS*Rae#|>E5o$-U`UKoCkgpbgD z&He8I#U0m@psn z>HHh-IPZyBC(f(q9kjdFtoBqJRI}{WClATzBr5>hC(}f&Iddu=^zb zDv2Jy!*37clNmQZQAOb z{;P{VZGrcZ_Z9FN_}af2y@mnRwe zv&jn z^I47Y5cmW`pAq~+!1avJVZ1i-zemse!0zyKU+aiJBEX*r-bM6VMgI!ulF=SPyCv<- z&=m!m_h^hh`O$L`db-b8*tUdz_cgy8_dnaNUtuEjS8wt9BJTn4L-6*}c7HxX|4N|y z@GzXyI?^z^>A54*~thx79m{xXj? zlyU9Sug=pH^d1DiJwW%5p2$A{pWfKj3_0G%-0$@3D)bdDrkxXc7lGajcEi`UcDN52 z*Be*Af}X}Dt}D-9>y9e9-=VKpGt&$kuKV{70;^ym(BJ;k)+K62#mJlH=3`7^;Yjxx?{ z1ApHaT|eFv#2VpZh%q|6{b*;z#Y;O}}+qt{>xkq5Gx$7obNQ=qJ(c#k`8| zx^zFbeUtTOTl^02@xJDK$X9%!^Q}Fulla)_J~NTF`*cs{K|V9kM?HkjpX)|{d)^dh zeHdR^AC?rqWMbU-pceD{7&|}5U*;ncL-!8wD0nlW^E>XrxOzG--tRoO+@JNg>&EX; zco97_xjyk%DEe*3KSKH1jtSlG)g$J(^z~!RgZ89C-ZSKz&uNd{w!`p?^FIr{>(hS} zyS#_*N8Wb&z2~_P7!O3(0!RM~MUUaYQ0N-co`Zfl{y`6#L0f%{R}$n z`;hTyZS?&ZXg;tEa%KWOzn-9n`-bs*3GlYDo{R^*hs?lljyFZW!{F;T?I(40&gV!?=cT~Xs3qGbE6q{85bHC#e$D< z>QeMDzRAOQ1a_G>vhMOj`bQz(`T_4Nhz&}@_`B$r3jK_;cEU%wj<=(K5_+VEz95YC zb4vJmFERh5T`^%l@V|q92=k(Sp7Xw!7|-NIzIl}6@M($PR?zMSzqhg5b*MkoM?Jl# zKL+78{0h_Fh@RfxhQr_dwegJpGJbbocmG)qo!^=FNuhST54aD-JpcU8{zlKN@a@e! zc^@+V??u1+_6qFr9jXZ9XYrrkUu)Xl^E{W;YY_f<20!nO&SN3^y(f4d|CxUCDzlMe zK1x5D&+z+{zvJ_<`!as8ZrQxR5#%g`zx!H4)=?02?!U#sZwtQr%T4g6GH!k<7{9%Q z9vh)+0sd<6uq#XFlXCZR>d5Zw|wE7JLrT&H=w=tPkUt)A+}IssMa%V$Z9Lzel?vFb#a` zGM)&yhJM%AH?*D4ipWn7pK!))yN`X2KVAjq27eUz=3m~VT_5{413jP9#~6PDzdVC) zTlglRJrO&y1DzjX3Fy7wOZPkdnPb33$oD*2f;{;ZM&CO4r7!-UO22#)(7p&<4Kz+P z&sK;2#OVJAe2p_^ApaYnzt0$e+?D9-cajf#F45l^y4J|?dmRMcQslmkT;tmQ@ONME z9n0T$xE=>WR|$E((~p7wZN}Rp-@1Sw;lCF7<`1kBFi!FNSc)B!!JkOm`S*7i^%&ob z+`X(5hTBG31&n&_25zrcSx^8SKuFnH=yn(@8x zTYx;{0?(H%@O3^X!OuAL2K43N@9z;}!QcFs`N)yLk7{J&(}Ivw+dA?W-3r*HwBNbLWU{@ANke6>kXd2w{YL`eEJAID#71<;WOI#;qwY@ z?{R)_ewSGpHy;7szc|Z70f?j#w;P2Y#wU@T_@x~Di8IM4Y^`LdJFFty>{#{4v{|xy} z!T%h7?kDEgykA~p{0eXy^f#eDk393|`_MZnc(0+Sag+CH@jWjq;4kkNN#Xk~a$J`$ z<2TRKPoeWWy$pURc*gn0F~+;bp&g<3U26(<>L>F-ThJ#i3FWr|GKtCG4T>$?)esbTtgZ#&g z2ZP@WJlBDFde3e19^R*nuV2)yz;6WlmPd}~uVFzJ*%`kFz5Brp^fZn&Z+?RQ-?7Kv7uUe<_4vhoWDoXvu4}*hUNz*p zPddI0{l+nFJyCn))`hS4J>!w{$k)zs;8{=83cj`-7y3IP?}r7Uciiux0QMHcAI1%n z=&yyGFrfQDS@cT^o%zvz*x7+`=dB;~!ta?c>rOJDpYuNq`90u26MFNXuBS)fnJ*QZ z-~R}{?yr-O8$rKtB7D4$nJ;bu-WA4!fd2lzAZ_c{tq1ge)D*pqpNC>kH}v>~@y)CU ze_v?+y)XXsd@v7&axW5>A;IcyDQMTJm2l)Uj_MBk?Xsl>+BN# z>I3YFeJ7BUh;{|&t0i~jjPX{J}e=YQ>2;Y13tDo~_ zor-z01?cTNTLgr9XUUmTz%y?X7d?)kr|Y;3cuV2uzLpz&@Ar?<-#EwjLgN|p^F#6PTi_cvPDgGP z&#T~$X;;BTQl|EFDlq382IvKbgjP22q5WAH1%FEM)fURob{DS_tk z%&)zP9j)*~U+53h?|i*U|5@ayhxu#Ick}DN##m4D(6canJP*R?4+grfkD_l!^zvPO zKJ>}yPmVt}(|?lwr|@%q>reB1E1>%m{8xcRu+RI#N$f~U{~yp9{|!RV%s_viW8T?# z-1vDne%%I42EQ@Vqjxge2Y?>|FGA<M=sEBObhn}NoVbD=_E!RLAo{p}6@lMy#^*D>0=OJIZ!vDY zSwZMhBd06=@%#7Qdka24pnoU$_%7`H+@OC5b{NMzpnofRoJ8JAQMcW8Cw24}4p~_bc@4hd=yXqVEWvzdO*+d%%l2Z{)ZyjfC$u zpyyh1_-nWE=2G-FUwKCVpm!Uf^{U>heHXqB-`}7!pMDv-35>T!&sTuSZKG#3{E(5h z?~6C#RdQyhQMwi@Y+lonOz7GRXZxc`@L8?3fJRIL3d1Z$sLy zYxgzxG3#rxq3<^6E~C$N=)3Dr@b1vR1nBpK7_B|g>k+2RO8j3k#h%VzQynMI{ovo-+XI&`j?=u zc>>=XO4DyX)BWRX`i-{-;s@_*?zbE1Uje?~mGB$9xVIa8GBOX+`_ATm zehT_d@aq8nCgdAmw85{&WyUAYhjFg?OXI!I;hzt^{rhP8_X^`>;qU(M_#npJN0sY( z^IdB$_GV)}-UXV+2*NJw(1XBlft`=guOaXe^eLb#iXJ~Q-i2|`DS!9pI>`-wIDYk> zE&VR~lY*BTJ+yx!awj0K9sbFK+F^JCl5+wWrz!Fkk4?C`-}OB zjf@-TeTklH@atIgxdq-C#vj0ND{|ZijIVD%7Z*Op6%T3qy}F;zgP-;EzK4v)uYMoi z>pz75YQ~qKR|Nd`(f$p+^Wvwuj9Xu_3;joew;I05f#w0mfY%W`-z~pGZ~2cypIOLv zeF}Z2YmPpjpwBw^cyG17v>19=7ZMDeaZ!ERX@MQ#*AG29!?!s4o42lner4cqocS4e z4WRo0Jbx!q0{r##Ujn}z@}2-&0keZQ1b*%#?gz!u*LR6Y(3uzY-QzR(R7QRi=zO=F z&bV=#@lSU6)kjbBo#thXYpgR8ehxq50N*o9;AemDxB`8C0pEINe@7I~$R?>){qbRT~39&SCfzgy`CopJF9_`V14L{Hxvf2FN|taGrv82Z29@4C=F&m-$Ar=x#1 z_-=syJ?!yZorHd?;Ojf%Txcx)XXAa}miTE9w4=^uL4!j@H%X-h( z;A?zdmhqg(x9)2s{l23WWV{;odvCr*|3UgacdWn8jvj;2-}f!?UT564(DxSO&b;Uo zmwEUOeqr>x&WAAm2mP-5#H^o6K+gg5w$;J^9y=DHS2!>^4b7fd2ibZ_rD)jq$SZU5TF33BP6@T*p0Vn+HjUT<<&Hche%z`-l8T zLmwNt?$_44wQ(H(I&YcKcN=ucfbLt#khcgr+l}D&5%gK0bANe?{(0%Y3m@}1Kf%xY zKwa8@0nft!efapE=XdM9WfJ2T;BOpfz0~jce-E%OFek7la5Jzx@HBdOKe2u4jDB+a>g?LxBCz^9%SHcesDLUL&yEd(Yp z3SZ-ZiP+Je{)EW$on^X9WC1u(Kz8{y>ja=xbhK2yOSvS;*-JpJ%jvhw^-x z3|%mMyMW&x{B_7TUT%mUp7*|!R)#(c(E5SbuyZMLGQ!{dMJ?sRSNqMozRS4h!wuTT zaaGXI^R*rPt%JPDe3wJM?+oVq8eymJIr<|be7m660AOG2$qM`)dHUb?x_OLuV!RU2 zcaOhmhpHF+)z^LEOZ2OR-R>Kkz;8(ZJ@CALPsQ$8;2D2rrN0XJo`DbN zz2R&6jmxgWrvv)01e!m21Nvd~Ti0IU3d7&7Bjem9^bbd`Z0MQCd8X}m>ixicj_aZv{+WTEOJeYGUfhq|pHHLj zeDy}3*6=9+UwchMPsyMX2){I0x@ehHs-*kk=u659IP-|x82%)^@3 z{|J4pJ6(W2=C#b{)zTm6?K@C5`fCG^qqp%zJ^E`R$GEBt{rmB&akA?;0sZg7?=E^x zrG0{N_c7yHvc5a58!(fJFH9ccMuhk zQxLo;_}ZFb!_m+B2=5Qx+mC|hdxH0) zq404(@b3o21>b%1GxYfZJv`S+LH`EwzomT%_!4y1Kf6y^r)FGs1N<++Hy*LB*zd{t zD~5kl;~(D*tT*)g_8n^{_IUrC0iEw?A+(zyKOy>jOM4S`_kd3t@N)pw?+$)2UicLJ zF!VJZG5=DB{${`r;Ab7=MflZ6zHyHC2Jelp$sd>w{c{7o7YQG-j)%av4thG?7`YYT zr#;>SX43x{x+D1MBJ!-CvVO#R0{5*irAPiSpy#*eKqCBMKH7Yod69$2dky*K=YFI= z6ZBsr&vQz@8t)#*4&PlWgWni<0e*GC8%)3TI_l-U=rZ>B_iJ+D?}pHMkFf60cyI;d z--16yy|BZ3oAH41tRvrwAH4Ve4!w9Gv|GVne`P>!UgUIw&rjIB0Q?vHz#oU5-bc(E z&w)=i;8N(#-`9Zd3-oav){1Y&xS+yKKgktUV=VV>GyZx=6Qsp;Wr7qTjj_WX5S z`JQ(S{UY#F9ojRImyv$+G%e{5$M3Jf|2A~$<+`r~p7-tE_|g2Oan>c|oQ02dAJ%m^ zU*@CScRZiWtDJ!UWca+nJdZ(d+=lh25 zsD9t~(bx0IebIXDj?9baobOw%NB7-M@&SL1{y{I-w|@2>Z(e^kc)lN>E#jwsV7@897-P zPfWWXa5~U;a{ZST{HpMY51#iq^QI}#&wS5B+S8$*jXyHL$KO9M$DcQWzAu?4Fu&Uk z`rgQINV@|3>~|eCqCYSA7trGk{5BH5uBKnS@1XPkX`Ztd`uz-j2kf)nAs6E*;p@5Y zef0zMNRHm#ca2|mBlmOYJy)O5u8*Dr;gb!RknvQ&*6<&Op7G&poZ&rd9C-N|pF(>v zcDS#aZ~g^)U00r;$H4cV)&#uV=;wF(5dAlzr{9_S7XsgVeJ$F5z|VZr0s5_G{txxnm?RV+_(q|BI`~YWKP7z3R}TPh6mq8H59>&C(r-MJ z4Eg>}!Z`R9_-LPTU=!qZfzEueams1HRQBIPtRq)7xOn$ z(8G8n4t%>H$9t%GZSMgW;cK4AI437^JD`W(%L@3KM~%a{_p5_;;_pOE8wKr-mG+uxskOaI%zAox?^TMoU71B;-S ze;3qv%Q$*FbZOy}9)DTy>$%;Te%D7e^l1ct3g(sxch_eTZ5RdGtjwze~f-Z_`uzL&b+{iOfEFN7T9 zs-}z^ZyjXZ_|f^OFBpYCHR~|&q(~LU5l~5 z9R2mc_g#BC?VIRnJnMaM8gx(Ko{1Y2E8vg!H!n~yS zcI#a27w--9@ILe>d?urZWtzmY!)zv=(=(EotmzQY^mL_z0$&AhPt%S+5p zRrFgAf4}F3wELr1R`85V-8U{^kN0}_#ZKV=iGIfCo#E@>mHY)gU9Y}R?}EIbntP%>yO%H$P*ZnL% zd=TuwvRF9!5?c{S*N7dhtry3?H~2UgXih4@WQ0p)1(a z9lEB-F`ukojo*FeGk*5{-*dfG^s%nO?=1{JmjHhge2iz>FrFU1 zO~7;Ad#A;(UT=(z!==~f0 zzC#&jy~6lW_`9!rPS(dxB_u@OLdER2^a}GIk(Km|ri+GZGDS_X-PZS0(D{_p7hBCih7$3v9?>x_tdjb7H z3o4F$<5KGzmx5ms#5}+!&`&^~e-ETPdKz~p1kb#>>&JQ-g>m2O53m@~Dq4b}pzd!tI)32R- z@uU6gX}3p?agq1KHH;gV45IDt2P$B9QPzj&nDgiU@4T6p%ZQ%p<^9L^f8#N~kMhX% zd@-*-4Ey}vJU=I+&w9pfTkrHDAA_H|fY%5)-rL+C%ujjWtBl=Op)Ulze2kZ$!0&tX zG5+{|@~e)M}Ddhc^SHX+CNJmX}){|4}Bi2uyP*5rFIzIz)v?mNrD9|kmE{wMmmPe!7D zH|*SiywcD;2AaPfjU3~%YS4Ml7{<8gS8C^n{`#~-k?Vch_vCf-uRssa$LY{@W8B|? z?4>^udU{U!`=dd~tpz*?eSg}1x9$f&!7nNNYM_VTrTO^d_|f`n&x^#&i|^d#ldT(Z z9o$8ZajkW((w%_++vsaOLjvf&qTf8%SM;}~-@2RD=yL*l8q+q;T!wwd5ylPPM@E2O z9(~M5G(%2%;1=Ks@N0l?UT`Gq#Pid7rd!NILFlIg&3}0>b6uLh_zAk5=pP^ZRv|YF zd|V%4==BqNbOq0M%{Jio1iHV?2fsAHqcr>+J5VEo|wS3&ft z0AJtX&ZEyY{OLYtUAOC`0Q^$IzY+FC&~F`q_2Mm%*AzVO|JFnO0Uz&k=EHpFzJxvn z(a-(9FY?Sg9m5{)DZZOpXPX@Sclhr79oGBMx&O6APDlD5(XIz{zp<{}{p1+@-Phj1 zZug0^(EDEOdq*Ag@xJ4^^a1|ze&@UxN7qDN7a{n4fNkmThaQ8m=OyHMK9r#S3_qKn z-%0;Y`u*L*r_7h%eK2-;9;F1o1@uAavlV@;cPItk8}Reo91q?-=>2YtYu`hjby*ML zE#_K_s7C0BXQUJ4p-wk*TJ_nH-LjSMWRfB%tZI;uv zPS`pN<2U!0ACYGrz(?>)3cc@w<k{_W}Iw1I-JBAvY&-O12K@RmZoS`O#;sG1jXhPsGyZj+ zf2QAk!u(NJ^m5<)3cmU2w=T?kt@5g3xBLHf=36_ez{mY519qCH@!nbvIocyUgFWHM zISpQ8?3f8Z^9$j$K@0Ldv;llBF|dxdbxGOa@4mbhKJFv!u&Ul??rv(R?^{XoC`eqekB@~lHFNB_s@?{`uie_R4ucjP_K z{pe@-orKQ@_*4Qqk8jX!hW+N_z0XaB{t)u?Gu=VbdrvKlp9aG32+%y*3fivM{P@Fo z*xye-rC&XayRV_gHsCrT_ye)KEOH`&=NXsoGYpuB{l;7VzQj1&@8Crq8+jAq>pRa* z_<2w9-eWvb7dh{-o~-LIPOF69tgrN)*n9LL=!#&+SLm?-f2JbrZet)$^_cp zV;@2{8`uZ_#`9H?YdwnjUgN$J&>8Q|rR{y89ex@BAMtvj-zA`N)A#y;c`Sy$?)%VGycj3zkbmBer0`>b^PA%kD>3k$Qg^CYv`{7zc8SA_te-`4}8y=Y4~pr{UgB} z4ZZoD!L(<9e;$3!|2f~~(Zjlm%kX;#eB+&4;F)iAKN|yHYV=t|`#kbn&~IE93qGHK z=lT6B{WIvFf*!anC^qfE%wH1tmxI6WG#8=w+%_KezM397{coJ^_feQ}*Tq8QKEjW_ z2Zo~WL&i^{hxfE>=&=MC3%qvlH$T1rduoHH{rdA1a@_Y~qla~EXQA_*aR&T@;9HIM zFX(5T!$$a+m$rT&74gLPzkv7QlzH5C$E&8oT^Ic*sdL=`zw#ain zgx)8Olig=rFAdP6It#^mx=7l6fv&f8;9FO*3%TpSYl@vo!TT2djC)hk)-KN#@2kc| z?!(T@U-0jRybq9bf%!AuEkxURE)jI*?TSNx5BeFvx%jgaZTA`Tz^^h7zrfG?hjEVU zF+23up%~9BhTeEU{e3s~?;NkhKgF=)Anj?uqVyMnUoGtM`-u;p`B>-g8F+u9-zz}Z z=OgU5&T=el_pzWUSi&wb4Lle*I3r|a;Yiu@eN^&RIi{cEvn6wo>le^-$LI?tuM z@Ld4h4wRpH@4oO`jGXQG?F;P5jlSkjy@z^kmBbF?>)o`y=bGP~7sI|n==&D(efL6a zP+RmhA2b0x^PFGP&I@1nGtc3H@K49M?>yE&8YjDt$A#Z56fh6^DS9-7&nMWI3O~88 zeM-M^=56?F0WS#pE67Q}_#X5$uJnC#DspoH-8bXHrv~#<40`Kp9Jg*{2;<&c|3;r3 z=y4nV-=M#7Pd()P0rb9Ue!%^B2>iOCPdw~O3ICUn|2EL`Y(MzRk$(X>OQAO|83vwy zYL2`g!FS$`Ym!2r2l?HAE#VWJb}{I!AIXpXUx4=`dU+0RqyJ0bL-1WUt>9-pm%nrE z3I1{T9RjvOPxG^->9^ju19ZmIn`xUbzX!f~zg+0^3;n-fr|Me*XT__`Evvt$%jYHl9j} z9@;+ydDF1pzpvvvX9xV_d|Pk30y@u+3h31fKF6_ZIQ3CR5jx`><1_P& zpW_epT!CK6u_q(#x8a`#zWR3=`u2rSQQ99s=kHG4=N6#v@4%|i9YRmnb9=@gAlJP2 z81VC=$4|)fJ+mKjKZaidp!d;J@N+#Rg#H`)joXbkJvT$)GZ6lN;UDt@#*K&72R&Co z=l%7?dl32`gI{m>85eloSwCW&?(dg6p|AJjw9t1!uJ@cj;lBXAjQ?H-e-7h=X%7X@ z^>3VKTyqk8d|z`N?PR{ZpL(wRh@IvMj9WLwm{<1!_qUGF8Lw2sF2CQG&@(&wIM4BE z8>e_Le~B9I;+Tz_oKl4^KpsxnK@0-RS*6CY6^(pw~gIA%~ zYtT2Py$!iJvGXhJTL<0^^jk^WI3)pibD>KCypP_-*M5(6^dtN_BX=8m?uITo#U?}z^gnv^IjKf|3-UHX;AJ^ka{9gq+_m%DF@i+XlV|OL!n*w_Q z8$o{ycnrRwK!0y=6g^MF&pdG(@NP2h?|3|~`q1xvdIW9jB@r8Boa8&~X8h;5`UY}c zcmDsC@*T^#+20wO5893Z-$~8aM4*TDyOZ&k_j=>VPoOtWO@_UmLr)kl4;+Y|o{zqJ zB}Sh2p!>9qzh8oHS^85lKVk4Y%DCtMDEyO_aet>&oc1p0htrOSeyvy^0~mK7HV;z= zzB8dKj$G}xF5nt`PQiB;bjCA_@aI#;pJ12oNXF46;J=1(^MSkJ@83D~JhI-^xcwM% z6Jt+)=+4u2J+H>9~ckc2R{URjL*$ym4%P*9j{=|QvB^bsXTZqfxcINP21mp zjK!YE$TRMCUmJx!<_D(I?g^g?$TyDfL^~h$S#JcKADoNbu$J z19J0#=e^$ddFyK{Gwyu#f=^N89t2ha8s~Z*8OK^TaRz$xUWsU%$6JnlL$SxY7WYxl zb>H8tS8`wSTrz&z2%mb`Yn_qrn#Q&J(BlcP1@m|WyF8C_!{-P55>7ic^Y8xr1o}9P zw?>a-@S6*LG4Raum4i92^K!|3h4?E24wzSbw1|0qqrdKZO{@uhaAr#~D$&A;Yi9)88X9_altdbsYb_j?aK z&jHWv`tW(5@oM^)b`Hkp!nY`LiU2nP-QPY2&;8?f^bW#~dO*jmPclw;2>of`Gvs^D zhrq7@db;npznz25dgvVBrGoAR^83AJI8vk-k>u4 zAHi=w^uA+uMD8fYjqj6z_Z|F)fEOG7=A-?NjjxL$&w1Yn-#6g54f=w#eHYn-J>Sv) zr+z?wQuw|JzdOvwQK0*nd7`t>c~A6y+yi{;d_4D4fPVx#-=yt+aT2}!J&X0%#z*c? z<^`=UoClrxudk5r{U8J5#^ITeZ=NeRc6Y~b-UF>as*axKb*v-sez_BQqv7lM)t3HE z_}P5JF!Tvw+;#Z?yeas<5qNvR^BmVd4;U|lex=ag`>*GZ?+;7TfV_mT8%6sTY z_!33Z(f$ju$Wd)k=T|oOOa{2@B z)9-z*JpA47cH?LF6~BX`$SVn4k3M^7`@UWVIp#HP!QXc+>xo7}*P3}shyTrQ=SGj_ z$VmWxDfD-r_g!oUc=Lf{;CmT-&);tF*^9io;9o&c--G%=@BJ9=tWkH!o(~=J|gUJny^O>-#}v{GJ48KJruaJcJ+22fE&kM>1gF zUhw_Cdc*H;^`w0geXS2Fj6HMU<9B%weAi(T_*?h(A^6sr824F6mk-A+M4ovL^X5Os zSP#alqrlGqeNE)}d+zMmhU-#GkwB1*Huk&2L#&}v_JNQjTPuIKq zTsg+Q->rde8v6JydjfmX(Qm%282u&i^8?1OBhTM~cpqO3|1mMvLj?Ya&$#)GGvK+- z4j{+)=OFTDLFYQPzSMoZE_QZ6&NBE~m-j04?}FD2Xq-?4eCrxq*LSejJo+N&jJppr zkBgzNg8Vi>>nFY6RDeDg&~xJ=a^AuI#n|onzK?bm;Md@p*BXj_9q6Br{2K60g`O3` z^V~3R>;8}iJl98O=&h%E3HjU5{|#UX;A+P8lXVdT=zoNK^N;2s%zHHg?-X(eppW+n z^F8jj-5K}yY{r{Q>2HW1tUDcmeDC$em^bqo{lV9tjnTvXtUvmh2OLFvAbi~a>%iv< z<+ysLQ`@9&|EUxwcM(j@v@BhUBKD&Tcx-1|^Q{BVwS@g{gZ=}!#4zfbnQ zW}N0dyfE_Cfj<}MePSH#efZ0FrXA2V1ip^kzk!vYD~Vp_aY`^=8h+mQj5~h@e=+n$ zSbvXcyHEW9eIfW&Mvr3P?S#&FJA`&P(C@?dK(_hnOZagz zbUV-|9e!}1@|^n(d53_0pWdT97lV=SdRqd2>vMZEJ`Z>vy+$Jc4df@M-3h-~Up)>w z-*J5>&xsuCif&_HY3LULK?@oL|J%sF17F{Dt<&vKzj@8vFjz~!_u9+wxddPBDTE#m z=pRFS18_8SzoMVthxu9G)%QSeU2kUS7Q&}1etVhrG1~9ZcKwd0y@m15;1db|hS*mR zefofJ9@%?}`SYsar-t5r(Yma?$ccv>?@8t(vLMI%%~jfu@vrrWh2U=-Y1~>1zO9g> z-7V3}b#V$-Lxe3$5nUB)X<(5oPPJdXyT{}r{4QpJw-fn=(LWw|ey?T08wY>ut=yL`;cxE)#+O0# zdv9F?pGWFVyCv=N@UI2jfIjQd$2^Cz{FENM z9s{k5xdC2N_)Y-^W9KaJt^Zh!KCUbCmMh?s6M6m~yEN@o_$dR>-F}d z_mAV)=exM;w;yzm;pgwl{Vukk&lT+P{Juv2Q1nxt`F7*S@3ja2C#7xP-g=v7=waQR z`$}E><@=U-wW{FzzElss{vK%-^7?}3d-*Z!I1BXMzA5&*&MG1II`pr?&vyXxPVYi@ z2mgA%@_s%QITztq4t{s>o4FI> zc!|;bJaQhQk8xXE_&ZIFas6=ted0mi4Erj8XWe5k^2X6`{?&S%GWf|nmHBbc zsZ{VcKAD7E<3#bkKz?lJ1*pHB&vNjK0^jet6K%gA>zmB)6hVK#8{bLW(O(TayvGk@ zUg83+hq4~KH+oFPKh{+_-^rl61z+*ZDC)`^&($N+wP_`8qirkx48CqVNFJ8T0zpL$`hb&Q_R`LNsinQ_ql zg+1kHKLhUo?M{q`(oZwUxXL;v_x%_9FNm?Q&-W|OdFxJp#*dz}?vr((H?Htq&bVze z{`m^}B(!~ZasK_jd*hc}*b$rg_1ra2VLJl+2jIU4|JU$KS72-S6h)5)z=qKKcaKJ5 zPbB!8f!57xr}YT_PPrv?<{bw>mmK-#DXl*-{usgde)Qe|%m%&l;=QLe`hI{s>%9wN zkNK0Y!1I3e3I4gwJim<`*V`54L01s`<=|hX?Rs7XzHzPh#arO70^fIE^GDuCzd_Dh z=sgU6zT=-qziy0+mj-_&XM7^C26%tL*Wb$q(=VT+jGLdRN89&!>ma<>?81)t*kwHI zyYWTlVGMeVr0qU(8hvNbZ=CJ=`2@RXqUS5%wSZ1&+>;!AtAX$DHoPBtt~oCg!E@aU zm%_)qaUt-`TV$i{`RBRp_q83rcn{o)-Ur}&8h;p&AlEu;^W(0YLD=0M{db{He(2wZz9Hkk1N$Ox3*!Um z_kF%T?VRAf1K&5mH~#WHtRmxoq0c7k* zf#BZ*FFAO-k$02+9P}Rnx-PCVeiG>ZS{XZhXKITa&kO6!enU<<_52Y*lO?+#larwn%gN*gnRyib@% z@Lh2!@&I>qjABr{>Sfr3H|z~DfUL7@I_#0?D4%a zn06TOXY@}5{s{Vu;wRr1I)P_Brssh5JuicA9=rwmy$s*u=$9Nm#uYS!j)I?p`7-Vq zj6Pq}|2KF?;p^`sjYrK_e#3Yh=vP2*-R@xK=Odu{SYP%5bnZ{aH@?5kL~-Ns3h?(H zPy_m$z_H-pMt}1O*3rC+e|DlzdZ2M!JNUb=Kcl@2zT@DVj`lS8l|}x$^t(RYZ@dpR zz+a=m^PcOw&L;TmW1g1)jn6AWcL%)=GkzI5@0->wokQOp=;_}#*@zy#(>ag6FV2FW z`&%C9$HH$g^c~S>DQ({c%#VBTvW}(+eAh$g-^Un^JtN?=K))kzJMx{EMDWQ6zWbo@ z>}$~Z9dw{=9AsW16gkFu6KI=1J&N4QtP_6+VE%XzdelXa_26lz?@R74W#HcieB&GI zWUTWGM_>Ogi1n)Ocdnn<_|dp^D0J4>JVJlh)w_(l{y#(?&prJ$06VO&zC_#in;xvY zv)J!_bQS!+!oE*v8&7)vdp?a}{4fx9LFUKIqg_T`Y!LjutUpMJAHsmf2aBMq0&EIA z=R9DS?;qYb{Ejc7mvt_gpc{%`zoqT>IDmFN?Du}>ysV-BB6zN!kI}>Lu@HD|u{SsJ z{C%DI1<%oY;QL-|zRG?66!MJk3*ra&uQ~7^3!dM9L)zx2o1;$}`h8z_U3Eu~7v~3d z>6agwpUXhcv-gqz4gKZ?j9VHY*Z9Kw_S^8E4y*Bua(Hzh@OsH=V5$p-DDs5s^{0p_jgsJ84rQq9r!Q8 zPVcS0>tzJL0C*qZr{U12!XJBpuYk85I05{1w9QL;?{lBq4?pGaLvQz^QRo+jKGw(W zMXvEndgPUdzBc~73oH-*T-u)@w?FNK&>Qdeq#X-rJ-FX_59mBky!U;JoWzXh$Nqxw z$w%A$!#G7bt+3bg_#N7nfc>%WG<@7wy)TReuNU?m!f$!OPssR5#{F)MFRioj9c>8q zcwQ}pJ`H*drF{hZPQ+MeU6ET7d7cXm!82din(<8V8wgwjUO&d?BiA|%?-9lW#%bOw zZzJD&7Qd&`@SDi^G1}qq|CISt@59(<+@wFPL%WEc`Y{ardhoZdVJ3Y2okbz=%KEdu)@LP!goKNe5dn4a-&^mSF$m!740eX*6KYv$N26^TKR$%W- z=xY48~87;A>sN4CKv1KiAMJr@_y9n_r+WhJ5SQ_oA2g-HePI&mTfg zFJOE48y}^lt>2BWe4p{$n*?9;XNRHdkDpVZZwv6ui+bD&E*zNb41$^t2``}meyCdOW4Z8fu^*(4^=XYwogLMej$#`C+Mc#+#J09pe z&j-jcK3~mvSM)GXVqU2z`dII<9($b!%nq{taRc_XLXWH=;ekeWL*SWrlw$Ul;sl^jjA@0)37#o{x4{+Uo1?qP8HfH1bLS%R={v@nJygg!UtMFMO9{ zhx^_s+LhtchV~Bl_+5TTzxny9jGNzHj32*5p68}{)XB_;c?I*B?qA;X%pJ^{}>R0`zzuF?lQ*PZ9&boiK$i-Vtj2lmD8QP7V;&Q|O%!MNvO2k4F< zenp%;D;#2A4AuM_FL#T1OL3mcwxrhgT5I2-bUXc_|5yf`-%0=H^BQ5Xg=d7 z_}>NYLB4fCQ_;hEJ^kc4cn!U3JHND>pieC1H3CioUIQ9`8Na-b9vOgr;G;jSr&~J@li*hce|AA{&oj@lp3tj@_w{P%?R~5|^o^0*7XId=`yszP`qhFy5&fR88=!YS zCL_NF{6>P`3cP&CHGiI&{%^sn1$`*=o+BS(_ag9LhtH?bm7zb1e(QCNx3fbZ#&~7y zG5_s3QICG}Y2NF62k^bvc;qkitOS4GO9tS#P3RShUG8g@&^rs`=8d<&?|bl9pzr&% zLy+UUemeN(L4IoJ(tvlAwskhy!JCde--E0-GjEoJ zdGS5hd+J&G$3yRaYTRIc(D(J3$o~>Oy;q#4y%sx0g6BS3hH>*D7qO=t`ul!kzIPGy z=10vVpG053-{J7_-R>m(JjWVim-YWu(ZjsUHolMS@XZPSd+@0T|Fgiaz)J|7`Q)AG zdl5JTIlI6&58Rn{ckou>FY`074RT%iPW3DDjdRP>HeRU*-{I)*{nfhM$>94=XFP13 zMt;WIqrhtT`1?A~t=H)P0sGPb{hjxI^ze5G2l3-L=sF|EILJ8MckFlIcMJUO;NJme zf}g+tHxITAfBG)45k8(n1E6#Na)0>H3(6 zoTJF!4}LD%=5e;s-yC@j;MW&9--DkRI2r$a0KRel68dWZ?}Gm`d>R3*(|f>pXYh@0 z-KWf(yaU}u@bh3-I4~3R<}r-xs)C;yxS9DhfA0O)dtY<>kO})YLU#r`uhRaNHq9X4 z2mQT*`$Z%8tOL5QeTg2wqxYXMst;ab`n?C5KPiBIrNG+)o$IGBe8)2G{tz4gt;1iH z(fEtRxC_?Ai>vv9u5|UJu+%i>?D_5>G>D})Ae(!tp zzV}mqz|!Y@c6;x&*YMrb+H3FM^Crp}@BJM5mxrEgKN@nlZ}InyxS!O7eq+FY9Qb|( zIUmA4uKU|j&VAxjwC6ki?x?R1edupB1Kkp&2O#fy&~shrf%3n@4!+OKhdk-$fsXOK z7f}Bp_}vA&nml+&+d+}6W>`X_u>F&F$!Lrx8(hroya zFW;FY&y&k>`7P|={>JkV&wB;Y?s?F?3cVkJ{NunQf}SlvzYBKp`zX$@72v~lgZGy| zgYRn8GycTycj@2qzPTIZ)8FAZUWM{D!u02xTXB9%8^YL5oWy<-^c++Xn&w)OC|J4?H zeTVk7A)h!f&i@(o<9q1mLC5&So#4;=DDIEB;LmqEiy?>co55&z6m;CThl4-kULB$L zJft(xj{e&S(9=(vg7MDZ!}=rWhd@qS(0i0O0X^SUJcxW@=sN>)xleIFBu-qHe@46O z(2nzDGw@pr`FziF4D>uFuLK?M&59wv6LkE(fPNFt3BQ0Z<8(7I&whk`ih8b_99P}I zpW|*c=sE!(-urO=Fh0Wfh6iCM$2a|zQqY(0Ql10daOgw%T-WMAUVgND1$0jU_sh_J zFY4*X^L}R?^rm0B0rc#r*}!87_>q4v*#8~UrQj2TelE%vL%)Z>_XFg4&vO*zThV?K z@(IvwhdoCjpDE8vjCXN8Is-eagZ={WV|;>fvlqet5a?eAJ^j?nP<|iU^LyZ1kROEh zgP`}n{cY5jhTimprh$(8V?NM*3A!ZGgGhN^=!Sd~w66@kCIaUhQT`_IW<2F$)SpEC zm#}XM@|D1s_eiBtUJq$C@MHXy@7WfEZymJfKE-(UB*@`?U?14Yb>lSJKMwr(Jp}#v zG2pur?KVS?MaXXj|2`<6hO`apivb_53r)bU8{|<>uIn3NFV9W0!H@k{2JN^XjRifw zPuYw7e8@iq`ye*)F8+u9G5rJXuLIG(GTJj<#CtFL1J}WB?guYZZ=~EG>8~t+9V?LL zA!Yom2lQl|^bzpy1^jwIpW{e*U(gxtS^<}PQNJ1dpFw&G<)vW%4al!TJjGlt1-}z>j&R0^Sp8e?S$Obz~>0$)4!jGdcF(cK9~Xe4bbOS@GArQXTgW- zKkvKypxrXiU5|D}kn+6(-zV|C0R2Lqqv)5v3p=^q+yT5>Kri|~T%Q?#qrP09`lG*= zqdnu;{O+7_YOVvDL7xpfxj&@Po^k3LpqmPP>L5@5=0~)z3Op2fu7{O@*EY1{ed0Rc z#e45B!2f5+e+&G&qJ2lymjVB6sLuu8B`80P@*?1KHS&`nkLR3s(XJipn?ue$$X|h! z_bs=h{&Mse?O{J0hrHq7%X^RJC?AUUosjlHc_#Fx-_#s>(%+v1dBp22@NWbDwa=Rh96C;JTceUEezQqG@}kUJLbK80My(b&JGpaw-iveJUWod)VBb*iWn7l)U`^;xdCOscJ@DoGlC~({13r%<<$LCKsIP;5 z;r`bEdhooNiFPwU$M-Ufr(Xqq_JM94=-x;92Bc$=76yO57v73?x4`aY$e)HiJhwcD z^4FmE0nksU-N;t}f5rtbgXSNXl-rI62fdr8P+`#jh)3Upj=e}NuPqrNlhxqdtjJl=v`pCf-3bUYWI z#Q5xll<(YmUsD70jMqI1{T>3}4rsR&<@6VZqy8qyy$5;jk0rpD=aE9-vjcn%p`Q0K zjF0R^Ipe1X!I$rWuLT}FC-e6!dZ7FtpnnZ=`XJBwe<8{lM^1>2frBfjPJh&K5N0ZDda2# z{lma}5BT4T^ikM(Bl16i?}gxZ0%-&~-v2Lv9PYOp!Jpq>a^CcX9`nHeNAQ~t`hm!| zMLqpD+R5_)zhhepetgeg3w$nx-m}54A^D=7aj#!shlBonU&Z~K{!9zdbpc<-o0cR0 zAnIus{pWe$+Y0vZ9LD?gYtbJIVF%9%d@qnhJNgS#kUqD)cU%2{1NoOl|BMDb{r4vzuLkP*zJs{rpq%HvZ0J1#{P!T`JDr!T(X%dlvM3|HSxIY0z*e`tl#PN0+=y(C*T-*KM&g1~(}`i=3O zE5Yvo=ubnxg|PQ~q_3Yx$NTh8A&>r1CD8qdl>Jf(dh$CCrd+2eXAtz@y}(bW&wXGQ?BctopJCTB;KKWSo=L63g0gYPJIqMY;fQt;gk zd8LtGf_6MVmIr^{+w*)z|B2@T-V=8RzoW4K0Qhkp(2t;h-4AjVa`+yD{vywDykD*e z{@;Q>&z+2G&ITW@7rd{081`>O{R6-~Kln65e{$T8M4s{86!KR=-!IXwH~8`#@ippq zfPWI{FOd5c+VTC+QsgfO-JRga{g3Z%YJhKR&~tq+4|u$$}CgUJ6C>9b7Ht}f)~qy9*5M?L2Y{q&1b&-L{KwBG`K zXTm<7D^ke+0dn~+V<7VBX!ix| z+a7fECl&llpq_sAIOKV+N`GSo+Vj1`#mMvfoZ8^G0(vlh1+^2zs|@INprShPXpDB; z2ZwJ5hfr%6TrShVq8s(*kzVAL0F)WB-Ak{!$n4{~UU@1s}#O7QmkO(5^4)Io|#Z zzWvbtW7IPa!SBl%?_~VqMbOc2{1$f6uLQdU<3C?QKK+flXx|9>Ee76gp%2%+M^Vr9 z^ls3-34TQ&=xxY<1bo>~<-xBS>Pw^kA>{7_AI9geMtK#`5wAyp^IVkk+`)IzdEiq6 z`Yk|u3CbsfZ&kGCJr2)715i%?b`9Edobz|I7}w7MU;Z8r@13hd4!sZ*RY@SJCAz9{#uYrIgL<%2K??u zIu?5JT-F@zUPC?OKs+Ze0{?%YU3=hs8S;l=*9|ED9_5US@SRNt>JOlPC-fTzyLeB* z`|vwJ&vy~rr^`TJ?k9|w%!2+Le>?{&uaM8*r`dq~cC@b! z{zuV{>m%Q7j|Sb>pz9Aho;!{~egb^yr}l&X&5&LL{i`GY0r0pMdG03{f?sja^E-oH zplAH+4YVr;I`#|ip*}=?Pw2~cKYxIp15n-=bPjyTe;Vi-p`7St-=kGQJN8Fy*p&vlhQMbV_&$l0elf=z-`ie|cEpEzlmJe=7kCkJc;5RO z?Y@Rxy^;S2bc`FFf(A-Or<(LPp$n)a|XwUOX1GHNK`yW6% zuG49d!*?{(VIS`elAx~xxx5D`j&^-e-v#+3a{5&>*w2t#67>fme+g2qZ$*&jJpLT* z8Rxkk?H5CzrqGk|s7Fw~809=4%mseDm!Ln}82m~?zY@S{Ch}(>pYLQ!A7U4 zBjb0UfNy)~!+ROVdH5cH`y2g{3($`1$O`aZ3%v>fpDgIXb3z{4I{LSazs>@m4XB?6{*=po{#BII zZ(0s{Hy~Yw_RY}W15uvN6n275VhiY+pxt5AlMlxe-xYAZx)nIp1wG?U#GT&*w1nJm zA&~LXZ_$1++Q&#&LXX|(XU+@0yJ6gu{>zP^XS{;(;0@rggXbe$MgyA#nQ+b{9gvDC9D}!ng$E z;2lBV0qMJ-{{{Kukjs6Lane!HpZCvv-_jK2^y@nVpKZYL7U~85S3uqfl>htujPg04 z6V%fmUx{*#<6@xa`cD6(F!Z5boQGXeJ_2bu*traP9tXdBFn+i`{D?gL^je@3w0i*j zc-~OdGwypG?D!+}p8$H^oAbVRCHV2Y(FQp7h5XrQ_Zav+3woaKb|YU5a@xYa&M4=) zTLOHD2jdD=<9YLQ7emlVbC+JricJD|2UZj&y{yF;x?fLGoKje%8{|(Tu7RvjB zp6BPsQC|T3=As?XMSYRyy8+%eFrIZ9{AwZ1hx8=cH9(%fU%+z@*FnAu<2@$*Uk^NP zf!&-BrBFT^`tsg9Kjh6s{aMr}k*^8d=qJ4aJg!6e-ytV;9?p!jf-l!k`t2DgKLi}vzdwKv>$#r{f}9PYe-!!Mki$4U zc-t_4Hdfzj%Mp4g5%VKk^>~mnulJk@kQ-17HvLyH}9s?+k8&K4Tz12la)) zpYM{pf$j~IgUk{`zz{G53;{#H5HJJ`0YktLFa!(%L%a#PR%z zbAMes6)2cUq^12I!bI&vy+nGG0WDe$Xq4WfQH$P9Tl8mNCh3`>gp1gNZgS3h1(i0N>0=w@youtt0f0@O?2A* z7r<<=IPIVzjoKUS}tlBm5zSU={n9;mPGDQDI<^RUjJt;746rw zXrlCUU85|0LK^62uC27v9N$0g4ohAM9PUK{|rg3&E zOXle%S~A$O!S_vONF%8fO^f!(JK964_!7}{UrRERh2tY`f#%bnQl+G))YR-`xwvoY z>!8^LsVyC&NwP-j>8a>;>8BH=rmvH#qn-3ZJ>wENJwmuoLLhAVAvPr8+A-Py@ z)aqJW{w$^SV5&fzUk184@l>fCNn9{~)&JQ>pP3*DU(>l$C*PtvLWBfr6I56DcE`M#!P zr_$nj+C|4}U%5(J22HNiO;T4jXj82&cgRvVR9nef_fE82dio;LEBT@(+?CSNy{kup zhE?3qI2pJVk7mhMKQxSyC*1@Y93OQRrLwk@X>y_F*I;q0D`bZ2;RonRpFb+4ulh^e zK6il@Y5kmkSX%m;$u-ICf%Ecci| z2YUqqG>JP|Nak|luk-upN|CcbjPHRJLr&;c>?;>j@mUnf&%hMOaIQ>Ej z`qzB^xO!Ye4oV?i>K4SgT1SROM^Xo6f3jn=#Z{GbU&npo$NMfiMoQ%-{FA<4=-1UU zMH~BZeuEAReYr&UC)fJ@^0K_?Tl!wUXP5_{xfxPXI{15aLh=Xs+Lh1~saL$}SDLGR zWT{@Q^X2buwXBdz{%P6Z-jvCyx7=aLmYJas_Jz4J){XPE^-byKYeYM9UUgr%YN^ZR zw67D-*38$RkO^*ByiqeVMr+Y{zJF52_;&i7WJ==o>S5fjm1lH~H1#93w2YVK{#fXP zgzF`feO~DC(y71bI@zb2T$b)|2mBrJKzBGbQR?W(*4Y^=0}4BH>cl5fjlzhpp%rC& za`%wMBf)D(|swu(G`o^xZR;- zsx}R29M-I-rE9W6+%B4|fBI9TO zlxDiLsJ~=tPu-syCy)E3I#s&*N>WAt8b;q#J>yUKwQ|&77B7w-mi6v0F7x%(?vr@3 zZ!6U_H`=Mo+&CE_QVZBrYCMFBjjfTeMbA{kVxt^mAmh9ClM>UKlUS{kLKN*zTXzO{t6I zUdie;YvT&LNRNc0UOc&ntv^`$^uDgIM5LFY*Qu*0M60-|c8`kb z7;Wl1%2P7Vol3r=CE{ATKDi}1Ko064J+AfrZDCZttJ8F9w8W2)L_AV9B&UTQ$?{#} z!2$Cq>}~VpYkw-aI2qOsy+tDF5=PQ{vM5zD>>+JjrD(n{?61+(fUM2 zewpnPanZP6+&SJJSJo==cE3~xN)x#t+U~de55kIBGOF*=;`X}LS98_lw%RQ&5;YIl zjh4H@?w_WkLZ2m)*{KVHM^RRXN+PWGLqo5&lsW!Qo$i*qRqm{|@o(r>S1tGeiR3j} zHX0j^m(uZGKSB4naq$<){Mt2HL^?+=%X3=S&y^Wr4Ls|{>+vwVmPtc780Qaq7K+CD z&2Exx)=&MTLCacNB)6u{4lBU^K)corh$hMa*%anrCE4V5`Aq31N8NgVm)tB1Wm9r- zSi$znUe`^B=<_ZSSMmL1lzbx7bywK2^ZZ=hp-WP?hE=_;vU7sEL=~+$qSz+bd>LuhQ0a>6Jq>8oqI)Zri}kt*-9Qnv>bXSlkdFBiIpbiHq@OTt=N-mUX%!!BJyR|ns2 zoixcEu18%9DXJIgns`X)rzv4htO|WoJJ6p=6^pJ4v!#cx(xyP%(l?e~?rxbAJfZ9` zTBi6@I#Fk7Ej<-H)ERPzP6#t)f6y>HeofzTH)t~Ita-Y`kCd&+gpT*ylheaqm9DjN z+xU`tmDG(V>-(;#l=hQ-w%_fKyJvkJUp*Qae8owAs=gvwsb0y`$!z^7Sti;cx9VVh zM6)w8q_r3gt@wxJ{^ZV7L0={69_`oV^0%;$|Kchn$H{A9hZvaL?AQ30++6+9 zpAGYGgZn@(mHg3kSslh)r+7l}Z8B5Gv|8&??k{@W-6q50f*CV{q?7JtH(xgdjGlJ8 z+}-Z1UnXV4?9CUg@kcVY`e&jH-RV!d8Ocm{bMQt>`;}p~$Ejj*MZaA7hgm)=^k;!+ zk>=06Jno_g{mxWv`B4kV$NmWy>uvr;neA2tEeiSma>$>RNm4G_?AHewb6gd-&)*s5 z*^63Ei|K3`8?E;f13pLPfcr2xBFxFjK8pA2TwU(w%k5$QU#X|u2pt>N$2Y?0enHFm za=};HCrv;-5GFkTeH0N|xSbYxbQ_>>LlUed+D%}@~ zH|c!MTR$nfPBV3S^olHv+axQoari zm)+XKw~r2suytuv`J+A3Dgp=MG9T|4KHaQ>VjPiH5{eHge z3#(mr#^x}W4u_qqQ1pD*1x8=hG58@9wO#1P%3+*duIc_A`6bNh8ObSbg>;cAL6=(o zuJ}Me{%M(!^0G?y=X~ty1#QQtK9%y)$G6Gp7ktO!t+U*RI$65Q_u-VA=`&(5UiEgnx8yC{q$>P#kACPCIxIF38qH)`xx9PO>jhhZ7N{5I;`1|kihdPP6za4)V*?;)`gYF&L zzHP1F8GvX~^qdCoEx7BZ5dTP=`}^-2v`AF^Z4Da!GX!#f|KWpr4<7Vz?-48+Z#Y}zQjajRC%S~Y9bs7cGlEn1w@ za>%?cH`fUop8M->k~1zZOa)&i!3+uHsk!eplS4;jnuKpU-yPH~Yrr z3#`ulrT>cMkiwzlx57aU2i!Y+NbeDMqFc`A-ul7&z9Q^Re#QO0-^Km@5%&)7eOLcG z1JZX59nyd3i1P(ZkV6#%Ac=E-b$=zGTZnM|ruuyz8qxpW;r;p#KcDY^M$Bseitp~< z!}p&jA*|2YkQ&9v)x`F~s4e}&%8XZoKb``ozs-+wy`7x-DsAKq55EUNr49cW*ZRw=RchTKQ~sp ScDmqPpC{77f9L4`Mf*SZ4~C-v literal 0 HcmV?d00001 diff --git a/voice_store/prompts/3665c5834221470591e3c8fcb0de6e50.pt b/voice_store/prompts/3665c5834221470591e3c8fcb0de6e50.pt new file mode 100644 index 0000000000000000000000000000000000000000..b33be6f8c7cac9218dbc26f5e758cb6ed07fa177 GIT binary patch literal 134893 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 literal 0 HcmV?d00001 diff --git a/voice_store/prompts/3a886347faee4fa6a4a5ad432a3dcab7.pt b/voice_store/prompts/3a886347faee4fa6a4a5ad432a3dcab7.pt new file mode 100644 index 0000000000000000000000000000000000000000..d33aab8e66ac1a5660f749971bcce8f86862dfc1 GIT binary patch literal 197741 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 literal 0 HcmV?d00001 diff --git a/voice_store/prompts/415c673dbc4647e788b92f3ab7318877.pt b/voice_store/prompts/415c673dbc4647e788b92f3ab7318877.pt new file mode 100644 index 0000000000000000000000000000000000000000..2fe87a7f3c1a012833af6a293e92207c66c9c02d GIT binary patch literal 135405 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 literal 0 HcmV?d00001 diff --git a/voice_store/prompts/4c5eb5a3c84c4f4183b831ac5a7fe41a.pt b/voice_store/prompts/4c5eb5a3c84c4f4183b831ac5a7fe41a.pt new file mode 100644 index 0000000000000000000000000000000000000000..79360e75df35d5f1cbc0c8fbbb885ea0fe169031 GIT binary patch literal 148781 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 G+W!M8Tz0_# literal 0 HcmV?d00001 diff --git a/voice_store/prompts/4f47f8af90404b9e93649ce83b18af78.pt b/voice_store/prompts/4f47f8af90404b9e93649ce83b18af78.pt new file mode 100644 index 0000000000000000000000000000000000000000..6b34aa5f68fa1f22b756b131bdbb0e5dd9ee8ac6 GIT binary patch literal 383661 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 z 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 A(EtDd literal 0 HcmV?d00001 diff --git a/voice_store/prompts/9a0aff0c1abe4f5e8d69b89f0b2271ce.pt b/voice_store/prompts/9a0aff0c1abe4f5e8d69b89f0b2271ce.pt new file mode 100644 index 0000000000000000000000000000000000000000..6a36f1e655922c8ce9d9c865abf8e1802ad91a24 GIT binary patch literal 199725 zcmbTf1)SH_)~G*7qtYERbazNfBi#yu2m=fuIWQpI-Q6H5AT5ZLND8PRsUjdEk~4&K zsrNVdJlu2Ve!S=Z{`tJ;th4uCz4v$Twbx$1dF$1T87n9#Uc8|H>tC**l0hXy3Wl_8 zTd;MZkXE5Z+ZGEg(WZFGRwYWdE!e7X;WrDl4lU3oBs?U4w~n2vRxB3O^#9Ml!LJMm z3(DCfc0hcG@X*dZ!eTTJ3v|WI*(6G(?xAg4wC>s_G%Qx@@UGokx6j|AXLyHBJrcC& z9@?sBhfZx;gok$N(Y1SvUWF5c#m>2#eb! zMgXN?SiB~20YQ@KOy@C0G6=V}m^Fgz?#gRsO+lAvmjZXH{Mc5W5grcH+~ z?ZT3@52(~$H7Zu^)HNi$Q1O?lBz>Vup|E8CsY>$NLGi-FQbef|6mLXW%9=4ogryqO zK1x{X@US!u!qPTL8W7gIMX!KT0mHj?>C~r1=O_=Q8}q_r9a?w#r=5QEOAm&J_6`rr z&}3y`q9az!i(D`~IAYW08=DpdM=scWW8>D~o8u=(j9Yng#_T{}-hVnbM2wvt9Jy%5 z%{emy{gEpM2S?5r8!>ctaOAixkux_(&Yhk=_~wlHH$Gn*xggLvb92PZWx)|^CkIDP z+Ys@|n#i%sZVn63jM#8<`tXRw^CO4P4~|?oIda^h8yhAEq(&}Xls`elhUNdr48E~p zPM|Y5V&%4g*!=l}BWI7!9~?1!bi|rKXF%hHqXYdB6E*|~NTLuUXN`d3)$TYDd{IV|c{4@d0K2!}`q;%V)nZb5Z2j&m+c-ju^Kr z;O_tQ=l|{xj@%M8#SzoyM||=nxKT{=21jg}6FGlpxQUV3D87roviy8e9o$h z46HA31M|eZM9!KVH7^mHwg#LZB`k8r_!leo#Zm|kkVcMM@Ivn54L7!q4v1bESYHtf z2mhZF74XTdH39K~m9Stu6oEx`W6O}he@Ctu&b%lz@MQ$>BZqH|(mX-r>}63)Icj~+ zUKv;h0js}S964$2f6nugaRK!sCd~dn#r{J(Hqg6uOh9UI#H#5LV>Z7qXzlcXD+27x zMY%G{C4r?E9Jx4ZMqTRT0$$fz%eh@{m#)*F1@iS zuwW+yM+{vVn6aq-hFv>{2Dj?jsZ)>k9m0cKN42{443C=pWr6<-SP(#4G315gmJANA z8rV}qqb4M3F9>*c+_D!sj-4DaH1HJ!oW5}Mi!C9r3j{|@TNbtORxETgc(FlD4(tN6 z|5=SuO1@Y(f&b#e4LB{(6__2C>zBh`Y(B%6M$Q`ToJXyq|9iEDz0otINnpPU>Kqy# z5|(j5SnxjwLa(kJT8Fmi&?YQXlipBIT7-m$Wowc=&{4Qx;o|uU7Rpz+Sfhe(mMU7TRKb!>!?M5FOQZJL zPEo>hG|3Ratp8DHmjY4$RU}`dMh){7DqO8^zC!umteCH2NRQC4oIQKyuU9i}y!9V1 z*l<2@*hKxO-oGBU1%qP$S7Qp~Z`-wd=aBHg-rv1P;6SQcF-B0+LQyilxP5L|)VUV* zpMRH8BCADTZDA#(5_48&@SOsE2jN_9PP!6Mk!G4qp<6*1cXQZ=ie2`9hCjQ zE6}P>cxczCgSKkL%>NI$#u}YEgok$ujnZL6*-L4n4)v)2{JRc0g0lU09ipO|0tKs9 z%=F(Cm>%Wxz`s~A|A7snToCxzfp){FkR<-H64q>QhEE(P*0z;7?|QvIV=&_Uo#;6nH` zq&*%!Wq?0G-wHinEbjoWdQX5pHF(Z*edrI;e;xj>fu9_xe_jQ@9{2?ruSI`vwci$rQesZDEJ+* zqd9yB({^5+_gmm^L7sk7ensf6p>G28ldpVEqnFTm`4RemgZjt)Rytuf=G*T{dD
v>|l(HB3B!GEoz!RqiW20!&OZc@K?_|18n2YzSZ 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 Mh5ydc|BLp20JYkk(f|Me literal 0 HcmV?d00001 diff --git a/voice_store/prompts/e5641b080c9a40d7b434cd62bf9f61d3.pt b/voice_store/prompts/e5641b080c9a40d7b434cd62bf9f61d3.pt new file mode 100644 index 0000000000000000000000000000000000000000..08244cb0cb2b3fb2963607fd4f2232032d3cbb16 GIT binary patch literal 77997 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 V{QtJCa%7HqB)9utCjFnZ{{sv9RCxdZ literal 0 HcmV?d00001 diff --git a/voice_store/voices.json b/voice_store/voices.json new file mode 100644 index 00000000..11278e3e --- /dev/null +++ b/voice_store/voices.json @@ -0,0 +1,52 @@ +{ + "voices": { + "9a0aff0c1abe4f5e8d69b89f0b2271ce": { + "name": "\uc548\uc131\uc7ac", + "path": "prompts/9a0aff0c1abe4f5e8d69b89f0b2271ce.pt", + "created_at": "2026-01-25T07:45:09Z", + "model_id": "Qwen/Qwen3-TTS-12Hz-1.7B-Base" + }, + "03f79f10717a47e39e186e7ee4e53027": { + "name": "\uc548\uc131\uc7ac", + "path": "prompts/03f79f10717a47e39e186e7ee4e53027.pt", + "created_at": "2026-01-25T07:47:54Z", + "model_id": "Qwen/Qwen3-TTS-12Hz-1.7B-Base" + }, + "4f47f8af90404b9e93649ce83b18af78": { + "name": "\uc548\uc131\uc7ac(long)", + "path": "prompts/4f47f8af90404b9e93649ce83b18af78.pt", + "created_at": "2026-01-26T00:47:11Z", + "model_id": "Qwen/Qwen3-TTS-12Hz-1.7B-Base" + }, + "3665c5834221470591e3c8fcb0de6e50": { + "name": "3665c583", + "path": "prompts/3665c5834221470591e3c8fcb0de6e50.pt", + "created_at": "2026-01-27T11:13:14Z", + "model_id": "Qwen/Qwen3-TTS-12Hz-1.7B-Base" + }, + "415c673dbc4647e788b92f3ab7318877": { + "name": "PuppyAI", + "path": "prompts/415c673dbc4647e788b92f3ab7318877.pt", + "created_at": "2026-01-27T11:15:38Z", + "model_id": "Qwen/Qwen3-TTS-12Hz-1.7B-Base" + }, + "e5641b080c9a40d7b434cd62bf9f61d3": { + "name": "\ub6b1\uc774", + "path": "prompts/e5641b080c9a40d7b434cd62bf9f61d3.pt", + "created_at": "2026-01-27T11:54:25Z", + "model_id": "Qwen/Qwen3-TTS-12Hz-1.7B-Base" + }, + "4c5eb5a3c84c4f4183b831ac5a7fe41a": { + "name": "Trump", + "path": "prompts/4c5eb5a3c84c4f4183b831ac5a7fe41a.pt", + "created_at": "2026-01-28T07:46:49Z", + "model_id": "Qwen/Qwen3-TTS-12Hz-1.7B-Base" + }, + "3a886347faee4fa6a4a5ad432a3dcab7": { + "name": "\uc548\uc131\uc7ac(0.6B)", + "path": "prompts/3a886347faee4fa6a4a5ad432a3dcab7.pt", + "created_at": "2026-01-28T13:34:55Z", + "model_id": "Qwen/Qwen3-TTS-12Hz-0.6B-Base" + } + } +} \ No newline at end of file From 308f9db91b775687c40f101e72722c77558161c4 Mon Sep 17 00:00:00 2001 From: daewook Date: Fri, 6 Feb 2026 09:25:40 +0900 Subject: [PATCH 2/2] Improve voice clone streaming stability --- examples/run_voice_clone_stream_service.sh | 2 +- .../README.md} | 22 +- .../voice_clone_stream_service.py | 141 +++++- .../voice_clone_stream_test.html | 428 ++++++++++++++++-- examples/voice_clone_service.py | 91 +++- qwen_tts/inference/qwen3_tts_model.py | 65 ++- qwen_tts/inference/qwen3_tts_tokenizer.py | 27 +- 7 files changed, 718 insertions(+), 58 deletions(-) rename examples/{voice_clone_stream_service.md => streaming/README.md} (75%) rename examples/{ => streaming}/voice_clone_stream_service.py (71%) rename examples/{ => streaming}/voice_clone_stream_test.html (56%) diff --git a/examples/run_voice_clone_stream_service.sh b/examples/run_voice_clone_stream_service.sh index bb0336b9..1359ae60 100644 --- a/examples/run_voice_clone_stream_service.sh +++ b/examples/run_voice_clone_stream_service.sh @@ -75,7 +75,7 @@ done mkdir -p "$VOICE_STORE" CUDA_VISIBLE_DEVICES="$GPU_ID" "$PYTHON_BIN" \ - "$SCRIPT_DIR/voice_clone_stream_service.py" \ + "$SCRIPT_DIR/streaming/voice_clone_stream_service.py" \ --device "$DEVICE" \ --ip "$IP" \ --port "$PORT" \ diff --git a/examples/voice_clone_stream_service.md b/examples/streaming/README.md similarity index 75% rename from examples/voice_clone_stream_service.md rename to examples/streaming/README.md index 3b253931..0ead5033 100644 --- a/examples/voice_clone_stream_service.md +++ b/examples/streaming/README.md @@ -1,6 +1,10 @@ # Voice Clone Streaming Service (SSE) -This service streams voice-clone audio chunks as Server-Sent Events (SSE). +# Streaming voice cloning service + +This service streams voice-clone audio chunks as Server-Sent Events (SSE) or binary PCM. + +Files live under `examples/streaming/`. Constraints - Single-sample only (one `text`, one `voice_id` per request). @@ -30,6 +34,22 @@ curl -N -X POST \ http://localhost:8002/voice/stream ``` +Binary PCM stream +```text +POST /voice/stream_pcm + +Binary protocol: +- 12-byte header: + - magic: "QTS1" (4 bytes) + - sample_rate: uint32 LE + - sample_width_bytes: uint16 LE (2 for int16) + - channels: uint16 LE (1) +- Then repeated frames: + - frame_len_bytes: uint32 LE + - raw PCM int16 bytes +- End of stream: frame_len_bytes = 0 +``` + Model switching ```bash curl -X POST \ diff --git a/examples/voice_clone_stream_service.py b/examples/streaming/voice_clone_stream_service.py similarity index 71% rename from examples/voice_clone_stream_service.py rename to examples/streaming/voice_clone_stream_service.py index 251dacf3..9949e85b 100644 --- a/examples/voice_clone_stream_service.py +++ b/examples/streaming/voice_clone_stream_service.py @@ -23,6 +23,7 @@ MODEL_LOCK = threading.Lock() +STREAM_CANCEL_EVENT = threading.Event() CURRENT_TTS: Optional[Qwen3TTSModel] = None CURRENT_MODEL_ID: Optional[str] = None CURRENT_CONFIG: Dict[str, Any] = { @@ -181,6 +182,7 @@ def _load_prompt_items(voice_id: str) -> Tuple[List[VoiceClonePromptItem], Dict[ def _validate_prompt_items(items: List[VoiceClonePromptItem], tts: Qwen3TTSModel) -> None: vocab_size = int(tts.model.talker.config.vocab_size) num_groups = int(tts.model.talker.config.num_code_groups) + hidden_size = int(tts.model.talker.config.hidden_size) for idx, item in enumerate(items): ref_code = item.ref_code if ref_code is None: @@ -201,9 +203,21 @@ def _validate_prompt_items(items: List[VoiceClonePromptItem], tts: Qwen3TTSModel raise ValueError( f"ref_code out of range for model vocab_size={vocab_size}: min={min_id}, max={max_id}. " "Recreate the voice prompt with the same model." - ) + ) item.ref_code = ref_code + ref_spk = item.ref_spk_embedding + if ref_spk is None: + raise ValueError(f"Missing ref_spk_embedding in prompt[{idx}].") + if not torch.is_tensor(ref_spk): + ref_spk = torch.tensor(ref_spk) + if ref_spk.dim() != 1 or int(ref_spk.shape[0]) != hidden_size: + raise ValueError( + f"ref_spk_embedding size mismatch for prompt[{idx}]: expected {hidden_size}, got {tuple(ref_spk.shape)}. " + "Recreate the voice prompt with the same model." + ) + item.ref_spk_embedding = ref_spk + def _load_tts(model_id: str, device: str, dtype: torch.dtype, flash_attn: bool) -> Qwen3TTSModel: global CURRENT_TTS, CURRENT_MODEL_ID @@ -247,6 +261,7 @@ class ModelLoadRequest(BaseModel): tf32: Optional[bool] = None clear_cache: bool = True safe_mode: Optional[bool] = None + wait_timeout_sec: Optional[float] = None def build_app(args: argparse.Namespace) -> FastAPI: @@ -274,13 +289,14 @@ def health(): "flash_attn": CURRENT_CONFIG.get("flash_attn"), "tf32": CURRENT_CONFIG.get("tf32"), "safe_mode": CURRENT_CONFIG.get("safe_mode"), + "busy": MODEL_LOCK.locked(), } @app.get("/models") def list_models(): with VOICE_INDEX_LOCK: voices = list(VOICE_INDEX.values()) - models = sorted({meta.get("model_id") for meta in voices if meta.get("model_id")}) + models = sorted([meta["model_id"] for meta in voices if meta.get("model_id")]) return {"models": models} @app.get("/voices") @@ -304,6 +320,7 @@ def voice_stream(payload: StreamRequest): tts = CURRENT_TTS if tts is None: raise HTTPException(status_code=500, detail="Model not loaded.") + assert tts is not None try: _validate_prompt_items(items, tts) except ValueError as exc: @@ -322,38 +339,137 @@ def voice_stream(payload: StreamRequest): "max_new_tokens": payload.max_new_tokens, } gen_kwargs = {k: v for k, v in gen_kwargs.items() if v is not None} + if CURRENT_MODEL_ID and "0.6B" in CURRENT_MODEL_ID: + gen_kwargs.setdefault("subtalker_dosample", False) if CURRENT_CONFIG.get("safe_mode"): + gen_kwargs.setdefault("do_sample", False) gen_kwargs.setdefault("subtalker_dosample", False) + if not MODEL_LOCK.acquire(blocking=False): + raise HTTPException(status_code=409, detail="Model is busy. Stop current stream first.") + STREAM_CANCEL_EVENT.clear() + def _iter_events(): - header = {"sr": int(tts.model.speech_tokenizer.get_output_sample_rate()), "dtype": "int16"} - yield f"event:meta\ndata:{json.dumps(header)}\n\n" - chunk_idx = 0 - with MODEL_LOCK: + try: + speech_tokenizer = tts.model.speech_tokenizer + if speech_tokenizer is None: + raise HTTPException(status_code=500, detail="Speech tokenizer missing.") + header = {"sr": int(speech_tokenizer.get_output_sample_rate()), "dtype": "int16"} + yield f"event:meta\ndata:{json.dumps(header)}\n\n" + chunk_idx = 0 for wav_chunk, sr in tts.generate_voice_clone_stream( text=payload.text, language=payload.language, voice_clone_prompt=items, chunk_size=payload.chunk_size, left_context_size=payload.left_context_size, + should_stop=STREAM_CANCEL_EVENT.is_set, **gen_kwargs, ): + if STREAM_CANCEL_EVENT.is_set(): + break pcm16 = (np.clip(wav_chunk, -1.0, 1.0) * 32767.0).astype(np.int16) b64 = base64.b64encode(pcm16.tobytes()).decode("ascii") data = {"i": chunk_idx, "sr": sr, "audio": b64} yield f"data:{json.dumps(data)}\n\n" chunk_idx += 1 - yield "event:end\ndata:done\n\n" + yield "event:end\ndata:done\n\n" + finally: + MODEL_LOCK.release() headers = {"Cache-Control": "no-cache", "X-Accel-Buffering": "no"} return StreamingResponse(_iter_events(), media_type="text/event-stream", headers=headers) + @app.post("/voice/stream_pcm") + def voice_stream_pcm(payload: StreamRequest): + if not payload.text.strip(): + raise HTTPException(status_code=400, detail="Target text is required.") + try: + items, prompt_meta = _load_prompt_items(payload.voice_id) + except Exception as e: + raise HTTPException(status_code=404, detail=str(e)) + + prompt_model = prompt_meta.get("model_id") + if prompt_model and prompt_model != CURRENT_MODEL_ID: + raise HTTPException(status_code=400, detail=f"Voice created with {prompt_model}. Switch model to match.") + tts = CURRENT_TTS + if tts is None: + raise HTTPException(status_code=500, detail="Model not loaded.") + assert tts is not None + try: + _validate_prompt_items(items, tts) + except ValueError as exc: + raise HTTPException(status_code=400, detail=str(exc)) + + gen_kwargs = { + "do_sample": payload.do_sample, + "top_k": payload.top_k, + "top_p": payload.top_p, + "temperature": payload.temperature, + "repetition_penalty": payload.repetition_penalty, + "subtalker_dosample": payload.subtalker_dosample, + "subtalker_top_k": payload.subtalker_top_k, + "subtalker_top_p": payload.subtalker_top_p, + "subtalker_temperature": payload.subtalker_temperature, + "max_new_tokens": payload.max_new_tokens, + } + gen_kwargs = {k: v for k, v in gen_kwargs.items() if v is not None} + if CURRENT_MODEL_ID and "0.6B" in CURRENT_MODEL_ID: + gen_kwargs.setdefault("subtalker_dosample", False) + if CURRENT_CONFIG.get("safe_mode"): + gen_kwargs.setdefault("do_sample", False) + gen_kwargs.setdefault("subtalker_dosample", False) + + if not MODEL_LOCK.acquire(blocking=False): + raise HTTPException(status_code=409, detail="Model is busy. Stop current stream first.") + STREAM_CANCEL_EVENT.clear() + + def _iter_pcm(): + try: + speech_tokenizer = tts.model.speech_tokenizer + if speech_tokenizer is None: + raise HTTPException(status_code=500, detail="Speech tokenizer missing.") + sr = int(speech_tokenizer.get_output_sample_rate()) + header = b"QTS1" + sr.to_bytes(4, "little") + (2).to_bytes(2, "little") + (1).to_bytes(2, "little") + yield header + for wav_chunk, _ in tts.generate_voice_clone_stream( + text=payload.text, + language=payload.language, + voice_clone_prompt=items, + chunk_size=payload.chunk_size, + left_context_size=payload.left_context_size, + should_stop=STREAM_CANCEL_EVENT.is_set, + **gen_kwargs, + ): + if STREAM_CANCEL_EVENT.is_set(): + break + pcm16 = (np.clip(wav_chunk, -1.0, 1.0) * 32767.0).astype(np.int16) + pcm_bytes = pcm16.tobytes() + yield len(pcm_bytes).to_bytes(4, "little") + if pcm_bytes: + yield pcm_bytes + yield (0).to_bytes(4, "little") + finally: + MODEL_LOCK.release() + + headers = {"Cache-Control": "no-cache", "X-Accel-Buffering": "no"} + return StreamingResponse(_iter_pcm(), media_type="application/octet-stream", headers=headers) + @app.post("/model/load") def load_model(payload: ModelLoadRequest): model_id = (payload.model_id or "").strip() if not model_id: raise HTTPException(status_code=400, detail="model_id is required.") - if not MODEL_LOCK.acquire(blocking=False): + wait_timeout = payload.wait_timeout_sec + if wait_timeout is None: + acquired = MODEL_LOCK.acquire(blocking=False) + else: + try: + timeout_value = max(0.0, float(wait_timeout)) + except (TypeError, ValueError): + raise HTTPException(status_code=400, detail="wait_timeout_sec must be a number.") + acquired = MODEL_LOCK.acquire(timeout=timeout_value) + if not acquired: raise HTTPException(status_code=409, detail="Model is busy. Wait for streaming to finish.") try: current_device = CURRENT_CONFIG.get("device") or args.device @@ -383,6 +499,11 @@ def load_model(payload: ModelLoadRequest): finally: MODEL_LOCK.release() + @app.post("/voice/stop") + def stop_voice_stream(): + STREAM_CANCEL_EVENT.set() + return {"status": "ok"} + return app @@ -401,9 +522,9 @@ def build_parser() -> argparse.ArgumentParser: parser.add_argument("--device", default="cuda:0", help="Device for device_map, e.g. cpu, cuda:0.") parser.add_argument( "--dtype", - default="float16", + default="bfloat16", choices=["bfloat16", "bf16", "float16", "fp16", "float32", "fp32"], - help="Torch dtype for loading the model (default: float16).", + help="Torch dtype for loading the model (default: bfloat16).", ) parser.add_argument( "--flash-attn/--no-flash-attn", diff --git a/examples/voice_clone_stream_test.html b/examples/streaming/voice_clone_stream_test.html similarity index 56% rename from examples/voice_clone_stream_test.html rename to examples/streaming/voice_clone_stream_test.html index 42bea2a5..9246bd1a 100644 --- a/examples/voice_clone_stream_test.html +++ b/examples/streaming/voice_clone_stream_test.html @@ -234,17 +234,28 @@

Voice Clone Streaming Test

Safe mode (stability) -
+
+ +
+
+ +
- +
- +
@@ -292,6 +303,8 @@

Voice Clone Streaming Test

const voiceSelect = document.getElementById("voiceId"); const modelSelect = document.getElementById("modelId"); const safeModeInput = document.getElementById("safeMode"); + const smoothModeInput = document.getElementById("smoothMode"); + const binaryModeInput = document.getElementById("binaryMode"); const loadModelBtn = document.getElementById("loadModel"); const chunkSizeInput = document.getElementById("chunkSize"); const leftContextInput = document.getElementById("leftContext"); @@ -309,7 +322,14 @@

Voice Clone Streaming Test

let playheadTime = 0; let streamSampleRate = null; let drainTimer = null; - const prebufferSeconds = 0.5; + let voicesCache = {}; + let prebufferSeconds = 0.5; + let pendingChunk = null; + let bufferTargetSec = 0.6; + const bufferMinSec = 0.3; + const bufferMaxSec = 1.4; + let rtfEma = null; + let lastChunkTs = null; const defaultBase = window.location.origin && window.location.origin !== "null" ? window.location.origin @@ -323,6 +343,19 @@

Voice Clone Streaming Test

function setStatus(msg) { statusEl.textContent = msg; + const busy = msg === "connecting" || msg === "streaming" || msg === "loading model"; + loadModelBtn.disabled = busy; + loadBtn.disabled = busy; + } + + async function sendStopSignal() { + const base = baseUrlInput.value.trim(); + if (!base) return; + try { + await fetch(base + "/voice/stop", { method: "POST" }); + } catch (err) { + log("Stop signal failed: " + err); + } } async function loadModels() { @@ -331,7 +364,8 @@

Voice Clone Streaming Test

try { const res = await fetch(base + "/models"); const data = await res.json(); - const models = data.models || []; + const rawModels = data.models || []; + const models = Array.from(new Set(rawModels)); const current = modelSelect.value; modelSelect.innerHTML = ""; for (const model of models) { @@ -364,7 +398,7 @@

Voice Clone Streaming Test

try { const res = await fetch(base + "/health"); const data = await res.json(); - if (data.model && !modelSelect.value) { + if (data.model) { const existing = Array.from(modelSelect.options).some((opt) => opt.value === data.model); if (!existing) { const opt = document.createElement("option"); @@ -372,7 +406,11 @@

Voice Clone Streaming Test

opt.textContent = data.model; modelSelect.appendChild(opt); } + const prev = modelSelect.value; modelSelect.value = data.model; + if (prev !== data.model) { + log("Active model: " + data.model); + } await loadVoices(); } if (typeof data.safe_mode === "boolean") { @@ -391,6 +429,7 @@

Voice Clone Streaming Test

const data = await res.json(); voiceSelect.innerHTML = ""; const voices = data.voices || {}; + voicesCache = voices; const activeModel = (modelSelect.value || "").trim(); for (const [id, meta] of Object.entries(voices)) { if (activeModel && meta.model_id && meta.model_id !== activeModel) { @@ -423,22 +462,34 @@

Voice Clone Streaming Test

return; } stopStream(true); + await sendStopSignal(); + setStatus("loading model"); + startBtn.disabled = true; try { const res = await fetch(base + "/model/load", { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ model_id: modelId, safe_mode: safeModeInput.checked }), + body: JSON.stringify({ + model_id: modelId, + safe_mode: safeModeInput.checked, + wait_timeout_sec: 30, + }), }); if (!res.ok) { const errText = await res.text(); log("Model load failed: " + res.status + " " + errText); + setStatus("idle"); return; } const data = await res.json(); log("Model loaded: " + (data.model || modelId)); await loadVoices(); + setStatus("idle"); } catch (err) { log("Model load error: " + err); + setStatus("idle"); + } finally { + startBtn.disabled = false; } } @@ -447,10 +498,15 @@

Voice Clone Streaming Test

controller.abort(); controller = null; } + sendStopSignal(); if (drainTimer) { clearTimeout(drainTimer); drainTimer = null; } + pendingChunk = null; + bufferTargetSec = 0.6; + rtfEma = null; + lastChunkTs = null; if (closeAudio && audioCtx) { audioCtx.close(); audioCtx = null; @@ -467,6 +523,7 @@

Voice Clone Streaming Test

function scheduleAudio(samples, sr) { if (!audioCtx) return; + if (!samples || samples.length === 0) return; const buffer = audioCtx.createBuffer(1, samples.length, sr); buffer.getChannelData(0).set(samples); const source = audioCtx.createBufferSource(); @@ -494,6 +551,133 @@

Voice Clone Streaming Test

return samples; } + function decodePcm16Bytes(bytes) { + const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength); + const samples = new Float32Array(bytes.byteLength / 2); + for (let i = 0; i < samples.length; i++) { + samples[i] = view.getInt16(i * 2, true) / 32768; + } + return samples; + } + + function concatUint8(a, b) { + if (!a || a.length === 0) return b || new Uint8Array(0); + if (!b || b.length === 0) return a; + const out = new Uint8Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + + function parsePcmHeader(bytes) { + if (bytes.length < 12) return null; + const magic = String.fromCharCode(bytes[0], bytes[1], bytes[2], bytes[3]); + if (magic !== "QTS1") { + throw new Error("Invalid PCM stream header"); + } + const view = new DataView(bytes.buffer, bytes.byteOffset, 12); + const sr = view.getUint32(4, true); + const sampleWidth = view.getUint16(8, true); + const channels = view.getUint16(10, true); + return { sr, sampleWidth, channels }; + } + + function concatFloat32(a, b) { + if (!a || a.length === 0) return b || new Float32Array(0); + if (!b || b.length === 0) return a; + const out = new Float32Array(a.length + b.length); + out.set(a, 0); + out.set(b, a.length); + return out; + } + + function findLowEnergyIndex(samples, start, end, windowSize) { + const len = samples.length; + const s = Math.max(0, Math.min(start, len)); + const e = Math.max(s + 1, Math.min(end, len)); + if (e - s <= windowSize) return s; + const step = Math.max(1, Math.floor(windowSize / 2)); + let bestIdx = s; + let bestEnergy = Infinity; + for (let i = s; i + windowSize <= e; i += step) { + let sum = 0; + for (let j = 0; j < windowSize; j++) { + const v = samples[i + j]; + sum += v * v; + } + if (sum < bestEnergy) { + bestEnergy = sum; + bestIdx = i; + } + } + return bestIdx + Math.floor(windowSize / 2); + } + + function crossfadeBoundary(left, right, sr) { + const fadeSamples = Math.max(1, Math.floor(sr * 0.018)); + if (left.length < fadeSamples || right.length < fadeSamples) { + return { output: left, pending: right }; + } + const tail = left.slice(left.length - fadeSamples); + const head = right.slice(0, fadeSamples); + const mixed = new Float32Array(fadeSamples); + const denom = Math.max(1, fadeSamples - 1); + for (let i = 0; i < fadeSamples; i++) { + const t = i / denom; + mixed[i] = tail[i] * (1 - t) + head[i] * t; + } + const output = concatFloat32(left.slice(0, left.length - fadeSamples), mixed); + const pending = right.slice(fadeSamples); + return { output, pending }; + } + + function emitBuffered(sr, forceFlush) { + if (!pendingChunk || pendingChunk.length === 0) return; + + const fadeSamples = Math.max(1, Math.floor(sr * 0.018)); + const windowSamples = Math.max(4, Math.floor(sr * 0.012)); + const searchSamples = Math.max(fadeSamples * 2, Math.floor(sr * 0.12)); + const tailSamples = Math.max(fadeSamples * 2, Math.floor(sr * 0.08)); + const minBufferSamples = Math.max(fadeSamples * 2, Math.floor(sr * bufferTargetSec)); + + if (!forceFlush) { + if (pendingChunk.length < minBufferSamples + tailSamples + windowSamples) { + return; + } + } + + if (forceFlush && pendingChunk.length <= fadeSamples * 2) { + scheduleAudio(pendingChunk, sr); + pendingChunk = null; + return; + } + + const maxLen = pendingChunk.length; + const end = Math.max(windowSamples, maxLen - tailSamples); + const start = Math.max(0, end - searchSamples); + if (start >= end) { + scheduleAudio(pendingChunk, sr); + pendingChunk = null; + return; + } + + let cutIdx = findLowEnergyIndex(pendingChunk, start, end, windowSamples); + cutIdx = Math.min(end, Math.max(minBufferSamples, cutIdx)); + if (!forceFlush && cutIdx < minBufferSamples) { + return; + } + + const left = pendingChunk.slice(0, cutIdx); + const right = pendingChunk.slice(cutIdx); + const stitched = crossfadeBoundary(left, right, sr); + scheduleAudio(stitched.output, sr); + pendingChunk = stitched.pending && stitched.pending.length ? stitched.pending : null; + if (forceFlush && pendingChunk && pendingChunk.length) { + scheduleAudio(pendingChunk, sr); + pendingChunk = null; + } + } + function parseEventBlock(block) { let event = "message"; const dataLines = []; @@ -508,32 +692,108 @@

Voice Clone Streaming Test

return { event, data: dataLines.join("\n").trim() }; } - async function startStreaming() { - const base = baseUrlInput.value.trim(); - const voiceId = voiceSelect.value; - const text = textInput.value.trim(); - if (!base || !voiceId || !text) { - log("Missing base URL, voice, or text."); + async function startStreamingBinary(base, payload) { + controller = new AbortController(); + const res = await fetch(base + "/voice/stream_pcm", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + signal: controller.signal, + }); + + if (!res.ok || !res.body) { + let errText = ""; + try { + errText = await res.text(); + } catch (err) { + errText = ""; + } + log("Binary stream failed: " + res.status + (errText ? " " + errText : "")); + if (res.status === 404 || res.status === 405) { + log("Falling back to SSE stream."); + binaryModeInput.checked = false; + return startStreamingSse(base, payload); + } + stopStream(true); return; } - stopStream(false); - setStatus("connecting"); - startBtn.disabled = true; - stopBtn.disabled = false; + setStatus("streaming"); + const reader = res.body.getReader(); + let buffer = new Uint8Array(0); + let headerParsed = false; + let endReceived = false; - audioCtx = new (window.AudioContext || window.webkitAudioContext)(); - await audioCtx.resume(); - playheadTime = audioCtx.currentTime + prebufferSeconds; + while (true) { + const { value, done } = await reader.read(); + if (done) break; + if (value && value.length) { + buffer = concatUint8(buffer, value); + } + while (true) { + if (!headerParsed) { + const header = parsePcmHeader(buffer); + if (!header) break; + streamSampleRate = Number(header.sr); + srLabel.textContent = "sr: " + streamSampleRate; + log("pcm meta: sr=" + streamSampleRate); + if (header.sampleWidth !== 2 || header.channels !== 1) { + log("pcm format: " + header.sampleWidth + " bytes, ch=" + header.channels); + } + buffer = buffer.slice(12); + headerParsed = true; + continue; + } + if (buffer.length < 4) break; + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + const frameLen = view.getUint32(0, true); + if (frameLen === 0) { + buffer = buffer.slice(4); + endReceived = true; + break; + } + if (buffer.length < 4 + frameLen) break; + const frame = buffer.slice(4, 4 + frameLen); + buffer = buffer.slice(4 + frameLen); + const samples = decodePcm16Bytes(frame); + const sr = streamSampleRate || audioCtx.sampleRate; + const now = performance.now() / 1000; + if (lastChunkTs !== null) { + const dt = now - lastChunkTs; + const chunkSec = samples.length / Math.max(1, sr); + if (chunkSec > 0) { + const rtf = dt / chunkSec; + rtfEma = rtfEma === null ? rtf : (0.8 * rtfEma + 0.2 * rtf); + if (rtfEma > 1.05) { + bufferTargetSec = Math.min(bufferMaxSec, bufferTargetSec + 0.08); + } else if (rtfEma < 0.9) { + bufferTargetSec = Math.max(bufferMinSec, bufferTargetSec - 0.04); + } + } + } + lastChunkTs = now; + if (smoothModeInput.checked) { + pendingChunk = concatFloat32(pendingChunk, samples); + emitBuffered(sr, false); + } else { + scheduleAudio(samples, sr); + } + } + if (endReceived) break; + } - const payload = { - voice_id: voiceId, - text, - language: languageInput.value || "Auto", - chunk_size: Number(chunkSizeInput.value) || 8, - left_context_size: Number(leftContextInput.value) || 25, - }; + setStatus("done"); + if (smoothModeInput.checked) { + emitBuffered(streamSampleRate || audioCtx.sampleRate, true); + } + const remaining = Math.max(0, playheadTime - audioCtx.currentTime); + drainTimer = setTimeout(() => { + stopStream(false); + setStatus("done"); + }, (remaining + 0.05) * 1000); + } + async function startStreamingSse(base, payload) { controller = new AbortController(); const res = await fetch(base + "/voice/stream", { method: "POST", @@ -543,7 +803,13 @@

Voice Clone Streaming Test

}); if (!res.ok || !res.body) { - log("Request failed: " + res.status); + let errText = ""; + try { + errText = await res.text(); + } catch (err) { + errText = ""; + } + log("Request failed: " + res.status + (errText ? " " + errText : "")); stopStream(true); return; } @@ -574,6 +840,9 @@

Voice Clone Streaming Test

} } else if (event === "end") { setStatus("done"); + if (smoothModeInput.checked) { + emitBuffered(streamSampleRate || audioCtx.sampleRate, true); + } const remaining = Math.max(0, playheadTime - audioCtx.currentTime); drainTimer = setTimeout(() => { stopStream(false); @@ -585,7 +854,30 @@

Voice Clone Streaming Test

const obj = JSON.parse(data); const samples = decodePcm16(obj.audio); const sr = streamSampleRate || obj.sr || audioCtx.sampleRate; - scheduleAudio(samples, sr); + const now = performance.now() / 1000; + if (lastChunkTs !== null) { + const dt = now - lastChunkTs; + const chunkSec = samples.length / Math.max(1, sr); + if (chunkSec > 0) { + const rtf = dt / chunkSec; + rtfEma = rtfEma === null ? rtf : (0.8 * rtfEma + 0.2 * rtf); + if (rtfEma > 1.05) { + bufferTargetSec = Math.min(bufferMaxSec, bufferTargetSec + 0.08); + } else if (rtfEma < 0.9) { + bufferTargetSec = Math.max(bufferMinSec, bufferTargetSec - 0.04); + } + } + } + lastChunkTs = now; + if (smoothModeInput.checked) { + pendingChunk = concatFloat32(pendingChunk, samples); + emitBuffered(sr, false); + } else { + scheduleAudio(samples, sr); + } + if (obj.i === 0) { + log("audio chunk 0 received"); + } } catch (err) { log("chunk parse error: " + err); } @@ -593,6 +885,9 @@

Voice Clone Streaming Test

} } setStatus("done"); + if (smoothModeInput.checked) { + emitBuffered(streamSampleRate || audioCtx.sampleRate, true); + } const remaining = Math.max(0, playheadTime - audioCtx.currentTime); drainTimer = setTimeout(() => { stopStream(false); @@ -600,14 +895,83 @@

Voice Clone Streaming Test

}, (remaining + 0.05) * 1000); } + async function startStreaming() { + const base = baseUrlInput.value.trim(); + const voiceId = voiceSelect.value; + const text = textInput.value.trim(); + if (!base || !voiceId || !text) { + log("Missing base URL, voice, or text."); + return; + } + + stopStream(false); + setStatus("connecting"); + startBtn.disabled = true; + stopBtn.disabled = false; + + audioCtx = new (window.AudioContext || window.webkitAudioContext)(); + await audioCtx.resume(); + bufferTargetSec = smoothModeInput.checked ? 0.6 : bufferMinSec; + rtfEma = null; + lastChunkTs = null; + prebufferSeconds = smoothModeInput.checked ? bufferTargetSec : 0.5; + playheadTime = audioCtx.currentTime + prebufferSeconds; + + const payload = { + voice_id: voiceId, + text, + language: languageInput.value || "Auto", + chunk_size: Number(chunkSizeInput.value) || 8, + left_context_size: Number(leftContextInput.value) || 25, + }; + + const voiceMeta = voicesCache[voiceId] || {}; + const expectedModel = (voiceMeta.model_id || "").trim(); + if (expectedModel) { + try { + const res = await fetch(base + "/health"); + if (res.ok) { + const data = await res.json(); + const currentModel = (data.model || "").trim(); + if (currentModel && currentModel !== expectedModel) { + log( + "Voice created with " + expectedModel + ". Server model is " + currentModel + ". Click Load model." + ); + stopStream(true); + return; + } + } + } catch (err) { + log("Model check failed: " + err); + } + } + const modelHint = (voiceMeta.model_id || modelSelect.value || "").trim(); + if (safeModeInput.checked) { + payload.do_sample = false; + payload.subtalker_dosample = false; + } else if (modelHint.includes("0.6B")) { + payload.subtalker_dosample = false; + } + + if (binaryModeInput.checked) { + await startStreamingBinary(base, payload); + } else { + await startStreamingSse(base, payload); + } + } + loadBtn.addEventListener("click", loadVoices); loadModelBtn.addEventListener("click", switchModel); startBtn.addEventListener("click", startStreaming); stopBtn.addEventListener("click", () => stopStream(true)); - loadCurrentModel(); - loadModels(); - loadVoices(); + async function initPage() { + await loadCurrentModel(); + await loadModels(); + await loadVoices(); + } + + initPage(); diff --git a/examples/voice_clone_service.py b/examples/voice_clone_service.py index 5a9e57f0..44d5503c 100644 --- a/examples/voice_clone_service.py +++ b/examples/voice_clone_service.py @@ -194,7 +194,7 @@ def _add_voice_meta(voice_id: str, meta: Dict[str, Any]) -> None: _save_voice_index(INDEX_PATH, VOICE_INDEX) -def _build_voice_choices() -> Tuple[List[str], Dict[str, str]]: +def _build_voice_choices(model_id: Optional[str] = None) -> Tuple[List[str], Dict[str, str]]: with VOICE_INDEX_LOCK: voices = dict(VOICE_INDEX) items = list(voices.items()) @@ -202,6 +202,9 @@ def _build_voice_choices() -> Tuple[List[str], Dict[str, str]]: choices: List[str] = [] mapping: Dict[str, str] = {} for voice_id, meta in items: + voice_model = meta.get("model_id") + if model_id and voice_model != model_id: + continue name = meta.get("name") or voice_id[:8] disp = f"{name} ({voice_id[:8]})" choices.append(disp) @@ -267,6 +270,45 @@ def _load_prompt_items(voice_id: str) -> Tuple[List[VoiceClonePromptItem], Dict[ return items, prompt_meta +def _validate_prompt_items(items: List[VoiceClonePromptItem], tts: Qwen3TTSModel) -> None: + vocab_size = int(tts.model.talker.config.vocab_size) + num_groups = int(tts.model.talker.config.num_code_groups) + hidden_size = int(tts.model.talker.config.hidden_size) + for idx, item in enumerate(items): + ref_code = item.ref_code + if ref_code is not None: + if not torch.is_tensor(ref_code): + ref_code = torch.tensor(ref_code) + if ref_code.dim() != 2 or ref_code.shape[1] != num_groups: + raise ValueError( + f"ref_code shape mismatch for prompt[{idx}]: " + f"expected (*, {num_groups}), got {tuple(ref_code.shape)}." + ) + if ref_code.dtype not in (torch.int64, torch.int32, torch.int16, torch.uint8): + ref_code = ref_code.long() + if ref_code.numel() > 0: + min_id = int(ref_code.min().item()) + max_id = int(ref_code.max().item()) + if min_id < 0 or max_id >= vocab_size: + raise ValueError( + f"ref_code out of range for model vocab_size={vocab_size}: min={min_id}, max={max_id}. " + "Recreate the voice prompt with the same model." + ) + item.ref_code = ref_code + + ref_spk = item.ref_spk_embedding + if ref_spk is None: + raise ValueError(f"Missing ref_spk_embedding in prompt[{idx}].") + if not torch.is_tensor(ref_spk): + ref_spk = torch.tensor(ref_spk) + if ref_spk.dim() != 1 or int(ref_spk.shape[0]) != hidden_size: + raise ValueError( + f"ref_spk_embedding size mismatch for prompt[{idx}]: expected {hidden_size}, got {tuple(ref_spk.shape)}. " + "Recreate the voice prompt with the same model." + ) + item.ref_spk_embedding = ref_spk + + def _load_tts( model_id: str, device: str, @@ -315,24 +357,45 @@ def build_app(args: argparse.Namespace) -> gr.Blocks: tts = _load_tts(args.model, args.device, _dtype_from_str(args.dtype), args.flash_attn, args.cache_models) lang_choices, lang_map = _get_lang_choices(tts) - voice_choices, voice_map = _build_voice_choices() + voice_choices, voice_map = _build_voice_choices(args.model) gen_kwargs_default = _collect_gen_kwargs(args) - def switch_model(model_label: str, cur_model: str, cur_lang_map: Dict[str, str]): + def switch_model( + model_label: str, + cur_model: str, + cur_lang_map: Dict[str, str], + cur_voice_map: Dict[str, str], + ): model_id = model_label_map.get(model_label, model_label) try: with MODEL_LOCK: tts_local = _load_tts(model_id, args.device, _dtype_from_str(args.dtype), args.flash_attn, args.cache_models) choices, mapping = _get_lang_choices(tts_local) value = "Auto" if "Auto" in choices else (choices[0] if choices else None) + voice_choices, voice_map = _build_voice_choices(model_id) + voice_value = voice_choices[0] if voice_choices else None status = f"Loaded {model_id}" - return status, gr.update(choices=choices, value=value), model_id, mapping + return ( + status, + gr.update(choices=choices, value=value), + model_id, + mapping, + gr.update(choices=voice_choices, value=voice_value), + voice_map, + ) except Exception as e: - return f"Failed to load model: {type(e).__name__}: {e}", gr.update(), cur_model, cur_lang_map + return ( + f"Failed to load model: {type(e).__name__}: {e}", + gr.update(), + cur_model, + cur_lang_map, + gr.update(), + cur_voice_map, + ) - def refresh_voices(): - choices, mapping = _build_voice_choices() + def refresh_voices(cur_model: str): + choices, mapping = _build_voice_choices(cur_model) value = choices[0] if choices else None return gr.update(choices=choices, value=value), mapping @@ -378,7 +441,7 @@ def save_voice(ref_audio, ref_text: str, use_xvec: bool, voice_name: str, cur_mo with PROMPT_CACHE_LOCK: PROMPT_CACHE[voice_id] = (items, payload["meta"]) - choices, mapping = _build_voice_choices() + choices, mapping = _build_voice_choices(cur_model) value = choices[0] if choices else None status = f"Saved voice '{name}' ({voice_id})." return status, gr.update(choices=choices, value=value), mapping @@ -407,8 +470,13 @@ def run_tts( if prompt_model and prompt_model != cur_model: return None, f"Voice created with {prompt_model}. Switch model to match." - language = lang_map_local.get(lang_disp, "Auto") tts_local = _get_current_tts() + try: + _validate_prompt_items(items, tts_local) + except ValueError as exc: + return None, str(exc) + + language = lang_map_local.get(lang_disp, "Auto") with MODEL_LOCK: wavs, sr = tts_local.generate_voice_clone( text=text.strip(), @@ -481,11 +549,12 @@ def run_tts( load_btn.click( switch_model, - inputs=[model_dd, model_state, lang_state], - outputs=[model_status, lang_in, model_state, lang_state], + inputs=[model_dd, model_state, lang_state, voice_map_state], + outputs=[model_status, lang_in, model_state, lang_state, voice_dd, voice_map_state], ) refresh_btn.click( refresh_voices, + inputs=[model_state], outputs=[voice_dd, voice_map_state], ) save_btn.click( diff --git a/qwen_tts/inference/qwen3_tts_model.py b/qwen_tts/inference/qwen3_tts_model.py index f9f9bde0..42d660cd 100644 --- a/qwen_tts/inference/qwen3_tts_model.py +++ b/qwen_tts/inference/qwen3_tts_model.py @@ -17,7 +17,7 @@ import io import urllib.request from dataclasses import dataclass -from typing import Any, Dict, Iterator, List, Optional, Tuple, Union +from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Union from urllib.parse import urlparse import librosa @@ -72,6 +72,8 @@ def __init__(self, model: Qwen3TTSForConditionalGeneration, processor, generate_ self.processor = processor self.generate_defaults = generate_defaults or {} + self.model.eval() + self.device = getattr(model, "device", None) if self.device is None: try: @@ -99,6 +101,7 @@ def from_pretrained( HuggingFace repo id or local directory of the model. **kwargs: Forwarded as-is into `AutoModel.from_pretrained(...)`. + `dtype` is accepted as an alias for `torch_dtype`. Typical examples: device_map="cuda:0", dtype=torch.bfloat16, attn_implementation="flash_attention_2". Returns: @@ -109,6 +112,13 @@ def from_pretrained( AutoModel.register(Qwen3TTSConfig, Qwen3TTSForConditionalGeneration) AutoProcessor.register(Qwen3TTSConfig, Qwen3TTSProcessor) + torch_dtype = kwargs.pop("torch_dtype", None) + dtype = kwargs.pop("dtype", None) + if dtype is None and torch_dtype is not None: + dtype = torch_dtype + if dtype is not None: + kwargs["torch_dtype"] = cls._normalize_torch_dtype(dtype) + model = AutoModel.from_pretrained(pretrained_model_name_or_path, **kwargs) if not isinstance(model, Qwen3TTSForConditionalGeneration): raise TypeError( @@ -120,6 +130,24 @@ def from_pretrained( generate_defaults = model.generate_config return cls(model=model, processor=processor, generate_defaults=generate_defaults) + @staticmethod + def _normalize_torch_dtype(dtype: Any) -> torch.dtype: + if isinstance(dtype, torch.dtype): + return dtype + if isinstance(dtype, str): + key = dtype.strip().lower() + mapping = { + "bf16": torch.bfloat16, + "bfloat16": torch.bfloat16, + "fp16": torch.float16, + "float16": torch.float16, + "fp32": torch.float32, + "float32": torch.float32, + } + if key in mapping: + return mapping[key] + raise ValueError(f"Unsupported torch dtype: {dtype}") + def _supported_languages_set(self) -> Optional[set]: langs = getattr(self.model, "get_supported_languages", None) if callable(langs): @@ -476,6 +504,7 @@ def generate_voice_clone( x_vector_only_mode: Union[bool, List[bool]] = False, voice_clone_prompt: Optional[Union[Dict[str, Any], List[VoiceClonePromptItem]]] = None, non_streaming_mode: bool = False, + match_voice: bool = False, **kwargs, ) -> Tuple[List[np.ndarray], int]: """ @@ -533,6 +562,8 @@ def generate_voice_clone( Temperature for sub-talker sampling (only valid for qwen3-tts-tokenizer-v2). max_new_tokens: Maximum number of new codec tokens to generate. + match_voice: + If True, enforce deterministic decoding for voice cloning unless sampling is explicitly requested. **kwargs: Any other keyword arguments supported by HuggingFace Transformers `generate()` can be passed. They will be forwarded to the underlying `Qwen3TTSForConditionalGeneration.generate(...)`. @@ -599,6 +630,11 @@ def generate_voice_clone( ref_ids.append(ref_tok) gen_kwargs = self._merge_generate_kwargs(**kwargs) + if match_voice: + if "do_sample" not in kwargs: + gen_kwargs["do_sample"] = False + if "subtalker_dosample" not in kwargs: + gen_kwargs["subtalker_dosample"] = False talker_codes_list, _ = self.model.generate( input_ids=input_ids, @@ -644,12 +680,15 @@ def generate_voice_clone_stream( non_streaming_mode: bool = False, chunk_size: int = 8, left_context_size: int = 25, + match_voice: bool = False, + should_stop: Optional[Callable[[], bool]] = None, **kwargs, ) -> Iterator[Tuple[np.ndarray, int]]: """ Stream voice-clone audio chunks (single sample only). This method yields (wav_chunk, sample_rate) tuples as soon as each chunk is decoded. + match_voice=True enforces deterministic decoding unless sampling is explicitly requested. """ if self.model.tts_model_type != "base": raise ValueError( @@ -711,6 +750,17 @@ def _ensure_list_field(val): ref_id = self._tokenize_texts([self._build_ref_text(ref_text_for_ids)])[0] gen_kwargs = self._merge_generate_kwargs(**kwargs) + if match_voice: + if "do_sample" not in kwargs: + gen_kwargs["do_sample"] = False + if "subtalker_dosample" not in kwargs: + gen_kwargs["subtalker_dosample"] = False + + def _stop_requested() -> bool: + return bool(should_stop()) if should_stop is not None else False + + if _stop_requested(): + return if self.model.speech_tokenizer.get_model_type() != "qwen3_tts_tokenizer_12hz": raise ValueError("Streaming decode currently supports only 12Hz tokenizer models.") @@ -936,6 +986,9 @@ def _sample_next(logits: torch.Tensor, prev_tokens: List[int]) -> int: subtalker_temperature=gen_kwargs.get("subtalker_temperature"), ) + if _stop_requested(): + return + next_token = _sample_next(prefill.logits[:, -1, :].squeeze(0), []) past_key_values = prefill.past_key_values past_hidden = prefill.past_hidden @@ -955,7 +1008,11 @@ def _sample_next(logits: torch.Tensor, prev_tokens: List[int]) -> int: eos_token_id = int(self.model.config.talker_config.codec_eos_token_id) sample_rate = int(self.model.speech_tokenizer.get_output_sample_rate()) + stopped = False for _ in range(max_new_tokens): + if _stop_requested(): + stopped = True + break if next_token == eos_token_id: break @@ -976,6 +1033,10 @@ def _sample_next(logits: torch.Tensor, prev_tokens: List[int]) -> int: subtalker_temperature=gen_kwargs.get("subtalker_temperature"), ) + if _stop_requested(): + stopped = True + break + codec_ids = output.hidden_states[1] if codec_ids is None: break @@ -1004,7 +1065,7 @@ def _sample_next(logits: torch.Tensor, prev_tokens: List[int]) -> int: generation_step = output.generation_step next_token = _sample_next(output.logits[:, -1, :].squeeze(0), prev_tokens) - if pending_codes: + if pending_codes and not stopped: chunk = torch.stack(pending_codes, dim=0) if context_codes is not None and context_codes.numel() > 0: decode_codes = torch.cat([context_codes, chunk], dim=0) diff --git a/qwen_tts/inference/qwen3_tts_tokenizer.py b/qwen_tts/inference/qwen3_tts_tokenizer.py index eae969d9..5f0f7cee 100644 --- a/qwen_tts/inference/qwen3_tts_tokenizer.py +++ b/qwen_tts/inference/qwen3_tts_tokenizer.py @@ -84,6 +84,13 @@ def from_pretrained(cls, pretrained_model_name_or_path: str, **kwargs) -> "Qwen3 AutoConfig.register("qwen3_tts_tokenizer_12hz", Qwen3TTSTokenizerV2Config) AutoModel.register(Qwen3TTSTokenizerV2Config, Qwen3TTSTokenizerV2Model) + torch_dtype = kwargs.pop("torch_dtype", None) + dtype = kwargs.pop("dtype", None) + if dtype is None and torch_dtype is not None: + dtype = torch_dtype + if dtype is not None: + kwargs["torch_dtype"] = _normalize_torch_dtype(dtype) + inst.feature_extractor = AutoFeatureExtractor.from_pretrained(pretrained_model_name_or_path) inst.model = AutoModel.from_pretrained(pretrained_model_name_or_path, **kwargs) inst.config = inst.model.config @@ -408,4 +415,22 @@ def get_decode_upsample_rate(self) -> int: Returns: int: Decode upsample rate. """ - return int(self.model.get_decode_upsample_rate()) \ No newline at end of file + return int(self.model.get_decode_upsample_rate()) + + +def _normalize_torch_dtype(dtype: Union[str, torch.dtype]) -> torch.dtype: + if isinstance(dtype, torch.dtype): + return dtype + if isinstance(dtype, str): + key = dtype.strip().lower() + mapping = { + "bf16": torch.bfloat16, + "bfloat16": torch.bfloat16, + "fp16": torch.float16, + "float16": torch.float16, + "fp32": torch.float32, + "float32": torch.float32, + } + if key in mapping: + return mapping[key] + raise ValueError(f"Unsupported torch dtype: {dtype}")