From d7ea5d5979c78fb697e7497dd1aed75bf886a9cf Mon Sep 17 00:00:00 2001 From: Dnoob Date: Tue, 12 May 2026 14:39:58 +0800 Subject: [PATCH] [New Model] Add support for tencent/Covo-Audio-Chat (#2293) Signed-off-by: Dnoob Signed-off-by: Yueqian Lin <70319226+linyueqian@users.noreply.github.com> Co-authored-by: Yueqian Lin <70319226+linyueqian@users.noreply.github.com> Co-authored-by: Hongsheng Liu --- docs/models/supported_models.md | 1 + .../offline_inference/covo_audio/README.md | 76 ++ .../offline_inference/covo_audio/end2end.py | 222 ++++ examples/online_serving/covo_audio/README.md | 93 ++ .../openai_chat_completion_client.py | 216 ++++ recipes/README.md | 2 + recipes/Tencent/Covo-Audio-Chat.md | 92 ++ .../test_covo_audio_expansion.py | 47 + .../test_covo_audio_expansion.py | 61 ++ vllm_omni/config/pipeline_registry.py | 4 + vllm_omni/deploy/covo_audio.yaml | 46 + .../entrypoints/openai/serving_speech.py | 47 + .../models/covo_audio/__init__.py | 0 .../models/covo_audio/config_covo_audio.py | 72 ++ .../models/covo_audio/covo_audio.py | 426 ++++++++ .../models/covo_audio/covo_audio_code2wav.py | 126 +++ .../models/covo_audio/covo_audio_llm.py | 152 +++ .../models/covo_audio/pipeline.py | 50 + .../models/covo_audio/prompt_utils.py | 56 + .../speaker_prompt/prompt_latent.npy | Bin 0 -> 298880 bytes .../speaker_prompt/prompt_token.npy | Bin 0 -> 2456 bytes .../speaker_prompt/speaker_embed.npy | Bin 0 -> 4224 bytes .../models/covo_audio/token2wav.py | 996 ++++++++++++++++++ vllm_omni/model_executor/models/registry.py | 26 + .../stage_input_processors/covo_audio.py | 33 + 25 files changed, 2844 insertions(+) create mode 100644 examples/offline_inference/covo_audio/README.md create mode 100644 examples/offline_inference/covo_audio/end2end.py create mode 100644 examples/online_serving/covo_audio/README.md create mode 100644 examples/online_serving/covo_audio/openai_chat_completion_client.py create mode 100644 recipes/Tencent/Covo-Audio-Chat.md create mode 100644 tests/e2e/offline_inference/test_covo_audio_expansion.py create mode 100644 tests/e2e/online_serving/test_covo_audio_expansion.py create mode 100644 vllm_omni/deploy/covo_audio.yaml create mode 100644 vllm_omni/model_executor/models/covo_audio/__init__.py create mode 100644 vllm_omni/model_executor/models/covo_audio/config_covo_audio.py create mode 100644 vllm_omni/model_executor/models/covo_audio/covo_audio.py create mode 100644 vllm_omni/model_executor/models/covo_audio/covo_audio_code2wav.py create mode 100644 vllm_omni/model_executor/models/covo_audio/covo_audio_llm.py create mode 100644 vllm_omni/model_executor/models/covo_audio/pipeline.py create mode 100644 vllm_omni/model_executor/models/covo_audio/prompt_utils.py create mode 100644 vllm_omni/model_executor/models/covo_audio/speaker_prompt/prompt_latent.npy create mode 100644 vllm_omni/model_executor/models/covo_audio/speaker_prompt/prompt_token.npy create mode 100644 vllm_omni/model_executor/models/covo_audio/speaker_prompt/speaker_embed.npy create mode 100644 vllm_omni/model_executor/models/covo_audio/token2wav.py create mode 100644 vllm_omni/model_executor/stage_input_processors/covo_audio.py diff --git a/docs/models/supported_models.md b/docs/models/supported_models.md index 8edafec1e..f30f34758 100644 --- a/docs/models/supported_models.md +++ b/docs/models/supported_models.md @@ -68,6 +68,7 @@ th { | `HunyuanVideo15Pipeline` | HunyuanVideo-1.5-T2V | `hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-480p_t2v`, `hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_t2v` | ✅︎ | ✅︎ | | | | `HunyuanVideo15ImageToVideoPipeline` | HunyuanVideo-1.5-I2V | `hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-480p_i2v`, `hunyuanvideo-community/HunyuanVideo-1.5-Diffusers-720p_i2v` | ✅︎ | ✅︎ | | | | `VoxtralTTSForConditionalGeneration` | Voxtral TTS | `mistralai/Voxtral-4B-TTS-2603` | ✅︎ | ✅︎ | | | +| `CovoAudioForConditionalGeneration` | Covo-Audio-Chat | `tencent/Covo-Audio-Chat` | ✅︎ | | | | |`DyninOmniForConditionalGeneration` | Dynin-Omni | `snu-aidas/Dynin-Omni` | ✅︎ | | | | | `ErnieImagePipeline` | ERNIE-Image | `baidu/ERNIE-Image`, `baidu/ERNIE-Image-Turbo` | ✅︎ | ✅︎ | ✅︎ | ✅︎ | ✅︎ indicates the model is supported on that backend. Empty cells mean not listed as supported on that backend. diff --git a/examples/offline_inference/covo_audio/README.md b/examples/offline_inference/covo_audio/README.md new file mode 100644 index 000000000..d13783d39 --- /dev/null +++ b/examples/offline_inference/covo_audio/README.md @@ -0,0 +1,76 @@ +# Covo-Audio-Chat (Offline Inference) + +## Setup + +Please refer to the [stage configuration documentation](https://docs.vllm.ai/projects/vllm-omni/en/latest/configuration/stage_configs/) to configure memory allocation appropriately for your hardware setup. + +> **Note** +> Covo-Audio code2wav requires `torchdiffeq`. Install it with: `pip install torchdiffeq` + +## Run examples + +Get into the example folder: +```bash +cd examples/offline_inference/covo_audio +``` + +### Audio input chat + +Using the default audio asset: +```bash +python end2end.py +``` + +Using a custom audio file: +```bash +python end2end.py --audio-path /path/to/audio.wav +``` + +Using a local model: +```bash +python end2end.py -m /path/to/Covo-Audio-Chat --output-dir ./my_output +``` + +### Command-line Arguments + +| Argument | Short | Default | Description | +|----------|-------|---------|-------------| +| `--model-name` | `-m` | `tencent/Covo-Audio-Chat` | Model path or HuggingFace model ID | +| `--text` | `-t` | `请回答这段音频里的问题。` | Text prompt / question for the audio | +| `--audio-path` | `-a` | default audio asset | Path to local audio file | +| `--sampling-rate` | | `16000` | Sampling rate for audio loading (Hz) | +| `--output-dir` | | `./output_audio` | Output directory for generated files | +| `--num-prompts` | | `1` | Number of prompts to generate | +| `--stage-configs-path` | | (auto) | Path to stage configs YAML file | +| `--log-stats` | | `false` | Enable detailed statistics logging | +| `--stage-init-timeout` | | `300` | Stage initialization timeout (seconds) | +| `--batch-timeout` | | `5` | Batching timeout (seconds) | +| `--init-timeout` | | `300` | Overall initialization timeout (seconds) | +| `--shm-threshold-bytes` | | `65536` | Shared memory threshold (bytes) | + +## Pipeline + +Covo-Audio-Chat uses a 2-stage pipeline: + +- **Stage 0 (fused_thinker_talker):** The 7B LLM generates interleaved text and audio tokens in a single autoregressive pass. +- **Stage 1 (code2wav):** A BigVGAN-based vocoder converts the extracted audio codes into a 24kHz WAV waveform. + +## Output + +The script generates two files per request in the output directory: + +- `{request_id}.txt` -- prompt and generated text +- `{request_id}.wav` -- generated audio (24kHz WAV) + +## FAQ + +If you encounter `ModuleNotFoundError: No module named 'librosa'`, install it with: +```bash +pip install librosa +``` + +## Environment + +- GPU: 1x A100 (80 GiB) +- Stage 0 (7B LLM): ~16 GiB VRAM +- Stage 1 (BigVGAN vocoder): ~2 GiB VRAM diff --git a/examples/offline_inference/covo_audio/end2end.py b/examples/offline_inference/covo_audio/end2end.py new file mode 100644 index 000000000..ae7e5c6bb --- /dev/null +++ b/examples/offline_inference/covo_audio/end2end.py @@ -0,0 +1,222 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright contributors to the vLLM project +""" +This example shows how to use vLLM-Omni for running offline inference +with the correct prompt format on Covo-Audio-Chat. + +Usage: + python end2end.py --audio-path /path/to/audio.wav +""" + +import os + +import soundfile as sf +from vllm.assets.audio import AudioAsset +from vllm.multimodal.media.audio import load_audio +from vllm.sampling_params import SamplingParams +from vllm.utils.argparse_utils import FlexibleArgumentParser + +from vllm_omni.entrypoints.omni import Omni +from vllm_omni.model_executor.models.covo_audio.prompt_utils import ( + COVO_AUDIO_INPUT_PREFIX, + build_covo_audio_chat_prompt, +) + +SEED = 42 + + +def get_audio_query( + question: str | None = None, + audio_path: str | None = None, + sampling_rate: int = 16000, +) -> dict: + if question is None: + question = "请回答这段音频里的问题。" + user_content = COVO_AUDIO_INPUT_PREFIX + question + prompt = build_covo_audio_chat_prompt(user_content) + + if audio_path is None: + audio_data = AudioAsset("mary_had_lamb").audio_and_sample_rate + else: + import numpy as np + + audio_signal, sr = load_audio(audio_path, sr=sampling_rate) + audio_data = (audio_signal.astype(np.float32), sr) + + return { + "prompt": prompt, + "multi_modal_data": {"audio": audio_data}, + "modalities": ["audio"], + } + + +def main(args): + query_result = get_audio_query( + question=args.text, + audio_path=args.audio_path, + sampling_rate=args.sampling_rate, + ) + + omni = Omni( + model=args.model_name, + stage_configs_path=args.stage_configs_path, + log_stats=args.log_stats, + stage_init_timeout=args.stage_init_timeout, + batch_timeout=args.batch_timeout, + init_timeout=args.init_timeout, + shm_threshold_bytes=args.shm_threshold_bytes, + ) + + # Stage 0: fused_thinker_talker + # stop_token_ids=[151645] (<|im_end|>) and ignore_eos=True are required + # so the model generates interleaved text+audio tokens before stopping. + thinker_sampling_params = SamplingParams( + temperature=0.0, + top_p=1.0, + top_k=-1, + max_tokens=2048, + seed=SEED, + detokenize=True, + repetition_penalty=1.05, + stop_token_ids=[151645], + ignore_eos=True, + ) + # Stage 1: code2wav (audio codes, not real token IDs — skip detokenize) + code2wav_sampling_params = SamplingParams( + temperature=0.0, + top_p=1.0, + top_k=-1, + max_tokens=2048, + seed=SEED, + detokenize=False, + repetition_penalty=1.1, + ) + + sampling_params_list = [ + thinker_sampling_params, + code2wav_sampling_params, + ] + + prompts = [query_result for _ in range(args.num_prompts)] + + omni_outputs = omni.generate(prompts, sampling_params_list) + + output_dir = args.output_dir + os.makedirs(output_dir, exist_ok=True) + + for stage_outputs in omni_outputs: + output = stage_outputs.request_output + if stage_outputs.final_output_type == "text": + request_id = output.request_id + text_output = output.outputs[0].text + prompt_text = output.prompt + out_txt = os.path.join(output_dir, f"{request_id}.txt") + lines = [ + "Prompt:\n", + str(prompt_text) + "\n", + "vllm_text_output:\n", + str(text_output).strip() + "\n", + ] + try: + with open(out_txt, "w", encoding="utf-8") as f: + f.writelines(lines) + except Exception as e: + print(f"[Warn] Failed writing text file {out_txt}: {e}") + print(f"Request ID: {request_id}, Text saved to {out_txt}") + elif stage_outputs.final_output_type == "audio": + request_id = output.request_id + audio_tensor = output.outputs[0].multimodal_output.get("audio") + if audio_tensor is None: + continue + output_wav = os.path.join(output_dir, f"{request_id}.wav") + audio_numpy = audio_tensor.float().detach().cpu().numpy() + if audio_numpy.ndim > 1: + audio_numpy = audio_numpy.flatten() + sf.write(output_wav, audio_numpy, samplerate=24000, format="WAV") + print(f"Request ID: {request_id}, Audio saved to {output_wav}") + + omni.close() + + +def parse_args(): + parser = FlexibleArgumentParser(description="Offline inference demo for Covo-Audio-Chat") + parser.add_argument( + "--model-name", + "-m", + type=str, + default="tencent/Covo-Audio-Chat", + help="Model path or HuggingFace model ID.", + ) + parser.add_argument( + "--text", + "-t", + type=str, + default=None, + help="Text prompt / question for the audio.", + ) + parser.add_argument( + "--audio-path", + "-a", + type=str, + default=None, + help="Path to local audio file. Uses default asset if not provided.", + ) + parser.add_argument( + "--sampling-rate", + type=int, + default=16000, + help="Sampling rate for audio loading (default: 16000).", + ) + parser.add_argument( + "--stage-configs-path", + type=str, + default=None, + help="Path to stage configs YAML file.", + ) + parser.add_argument( + "--log-stats", + action="store_true", + default=False, + help="Enable writing detailed statistics.", + ) + parser.add_argument( + "--stage-init-timeout", + type=int, + default=300, + help="Timeout for initializing a single stage in seconds.", + ) + parser.add_argument( + "--batch-timeout", + type=int, + default=5, + help="Timeout for batching in seconds.", + ) + parser.add_argument( + "--init-timeout", + type=int, + default=300, + help="Timeout for initializing stages in seconds.", + ) + parser.add_argument( + "--shm-threshold-bytes", + type=int, + default=65536, + help="Threshold for using shared memory in bytes.", + ) + parser.add_argument( + "--output-dir", + default="./output_audio", + help="Output directory for generated files.", + ) + parser.add_argument( + "--num-prompts", + type=int, + default=1, + help="Number of prompts to generate.", + ) + return parser.parse_args() + + +if __name__ == "__main__": + args = parse_args() + main(args) diff --git a/examples/online_serving/covo_audio/README.md b/examples/online_serving/covo_audio/README.md new file mode 100644 index 000000000..6894507ef --- /dev/null +++ b/examples/online_serving/covo_audio/README.md @@ -0,0 +1,93 @@ +# Covo-Audio-Chat + +## Installation + +Please refer to [README.md](../../../README.md) + +> **Note** +> Covo-Audio code2wav requires `torchdiffeq`. Install it with: `pip install torchdiffeq` + +## Run examples (Covo-Audio-Chat) + +### Launch the Server + +```bash +CUDA_VISIBLE_DEVICES=0 vllm serve tencent/Covo-Audio-Chat --omni \ + --trust-remote-code --port 18091 +``` + +> The default deploy config is located at `vllm_omni/deploy/covo_audio.yaml` and is loaded automatically by the model registry — no `--deploy-config` flag needed for default use. + +### Send Request + +Get into the example folder: +```bash +cd examples/online_serving/covo_audio +``` + +#### Audio input chat + +Using the default audio asset: +```bash +python openai_chat_completion_client.py +``` + +Using a custom audio file: +```bash +python openai_chat_completion_client.py --audio-path /path/to/audio.wav +``` + +#### Streaming mode + +```bash +python openai_chat_completion_client.py --audio-path /path/to/audio.wav --stream +``` + +### Command-line Arguments + +The Python client supports the following arguments: + +- `--prompt` (or `-p`): Text prompt (default: `"请回答这段音频里的问题。"`) +- `--audio-path`: Path to audio file. Supports local file paths or HTTP/HTTPS URLs. Common audio formats: WAV, MP3, OGG, FLAC, M4A. Uses the default audio asset if omitted +- `--output-audio-path` (or `-o`): Output path for generated audio (default: `./audio_0.wav`) +- `--model`: Model name for the API. Auto-detected from server if omitted +- `--stream`: Enable streaming mode + +## Pipeline + +Covo-Audio-Chat uses a 2-stage pipeline: + +- **Stage 0 (fused_thinker_talker):** The 7B LLM generates interleaved text and audio tokens in a single autoregressive pass. +- **Stage 1 (code2wav):** A BigVGAN-based vocoder converts the extracted audio codes into a 24kHz WAV waveform. + +## Environment + +- GPU: 1x H100 (80 GiB) +- Stage 0 (7B LLM): ~16 GiB VRAM +- Stage 1 (BigVGAN vocoder): ~2 GiB VRAM + +## Important: System Prompt + +Covo-Audio-Chat requires a specific system prompt to enable interleaved text+audio generation. Without it, Stage 0 produces text-only tokens, and the output audio will be **silent**. + +The system prompt must include the instruction: + +``` +请用文本和音频进行对话,交替生成5个文本token和15个音频token,音频部分使用发音人:default_female +``` + +The full system prompt is defined in `vllm_omni/model_executor/models/covo_audio/prompt_utils.py` (`COVO_AUDIO_SYSTEM_PROMPT`). + +## FAQ + +If you encounter `ModuleNotFoundError: No module named 'librosa'`, install it with: +```bash +pip install librosa +``` + +### Audio output is silent (0.1s, all zeros) + +This means Stage 0 did not generate any audio tokens. Most likely causes: + +1. **Missing system prompt** -- see the "Important: System Prompt" section above. The model needs the interleaved generation instruction in the system message. +2. **Missing `ignore_eos: true` / `stop_token_ids: [151645]`** in Stage 0 sampling params -- without these, the model stops at `<|endoftext|>` before generating audio tokens. diff --git a/examples/online_serving/covo_audio/openai_chat_completion_client.py b/examples/online_serving/covo_audio/openai_chat_completion_client.py new file mode 100644 index 000000000..d3aa042d5 --- /dev/null +++ b/examples/online_serving/covo_audio/openai_chat_completion_client.py @@ -0,0 +1,216 @@ +""" +Client example for Covo-Audio-Chat with vllm-omni. + +Usage +----- +# Start the server first: +# CUDA_VISIBLE_DEVICES=0 vllm serve tencent/Covo-Audio-Chat --omni --trust-remote-code + +# Audio input chat (uses default audio asset if --audio-path not provided): +python openai_chat_completion_client.py +python openai_chat_completion_client.py --audio-path /path/to/audio.wav + +# Streaming mode: +python openai_chat_completion_client.py --stream +""" + +import base64 +import os +import sys +import time + +from openai import OpenAI +from vllm.assets.audio import AudioAsset +from vllm.utils.argparse_utils import FlexibleArgumentParser + +from vllm_omni.model_executor.models.covo_audio.prompt_utils import ( + COVO_AUDIO_SYSTEM_PROMPT, +) + +openai_api_key = "EMPTY" +openai_api_base = "http://localhost:18091/v1" + +client = OpenAI(api_key=openai_api_key, base_url=openai_api_base) + +SEED = 42 + + +def encode_base64_content_from_file(file_path: str) -> str: + """Encode a local file to base64 format.""" + with open(file_path, "rb") as f: + return base64.b64encode(f.read()).decode("utf-8") + + +def get_audio_url(audio_path: str | None) -> str: + """Convert an audio path to a data URL for the API.""" + if not audio_path: + return AudioAsset("mary_had_lamb").url + + if audio_path.startswith(("data:", "http://", "https://")): + return audio_path + + if not os.path.exists(audio_path): + raise FileNotFoundError(f"Audio file not found: {audio_path}") + + ext = audio_path.rsplit(".", 1)[-1].lower() if "." in audio_path else "wav" + mime_map = { + "wav": "audio/wav", + "mp3": "audio/mpeg", + "mpeg": "audio/mpeg", + "ogg": "audio/ogg", + "flac": "audio/flac", + "m4a": "audio/mp4", + } + mime = mime_map.get(ext, "audio/wav") + b64 = encode_base64_content_from_file(audio_path) + return f"data:{mime};base64,{b64}" + + +def build_audio_messages(audio_path: str | None, prompt: str) -> list[dict]: + """Build messages for an audio chat request.""" + audio_url = get_audio_url(audio_path) + return [ + {"role": "system", "content": COVO_AUDIO_SYSTEM_PROMPT}, + { + "role": "user", + "content": [ + {"type": "audio_url", "audio_url": {"url": audio_url}}, + {"type": "text", "text": prompt}, + ], + }, + ] + + +def get_model_name(override: str | None = None) -> str: + """Return the model name to use in API calls.""" + if override: + return override + # Auto-detect from the server + models = client.models.list() + return models.data[0].id + + +def run(args) -> None: + model_name = get_model_name(args.model) + thinker_params = { + "temperature": 0.0, + "top_p": 1.0, + "top_k": -1, + "max_tokens": 2048, + "seed": SEED, + "detokenize": True, + "repetition_penalty": 1.05, + "stop_token_ids": [151645], + "ignore_eos": True, + } + code2wav_params = { + "temperature": 0.0, + "top_p": 1.0, + "top_k": -1, + "max_tokens": 2048, + "seed": SEED, + "detokenize": False, + "repetition_penalty": 1.05, + } + + extra_body = { + "sampling_params_list": [thinker_params, code2wav_params], + } + + messages = build_audio_messages(args.audio_path, args.prompt) + + start = time.perf_counter() + + if not args.stream: + completion = client.chat.completions.create( + messages=messages, + model=model_name, + extra_body=extra_body, + stream=False, + ) + elapsed = time.perf_counter() - start + + for choice in completion.choices: + if choice.message.audio: + audio_bytes = base64.b64decode(choice.message.audio.data) + out_path = args.output_audio_path + os.makedirs(os.path.dirname(out_path) or ".", exist_ok=True) + with open(out_path, "wb") as f: + f.write(audio_bytes) + print(f"Audio saved to {out_path} ({len(audio_bytes)} bytes)") + elif choice.message.content: + print("Chat completion output from text:", choice.message.content) + + print(f"Elapsed: {elapsed:.2f}s", file=sys.stderr) + + else: + stream = client.chat.completions.create( + messages=messages, + model=model_name, + extra_body=extra_body, + stream=True, + ) + audio_idx = 0 + for chunk in stream: + modality = getattr(chunk, "modality", None) + elapsed = time.perf_counter() - start + for choice in chunk.choices: + content = getattr(choice.delta, "content", None) if hasattr(choice, "delta") else None + if not content: + continue + if modality == "audio": + audio_bytes = base64.b64decode(content) + out_dir = os.path.dirname(args.output_audio_path) or "." + out_path = os.path.join(out_dir, f"audio_{audio_idx}.wav") + os.makedirs(out_dir, exist_ok=True) + with open(out_path, "wb") as f: + f.write(audio_bytes) + print(f"[{elapsed:.2f}s] Audio chunk saved to {out_path}", file=sys.stderr) + audio_idx += 1 + elif modality == "text": + print(content, end="", flush=True) + + print() # trailing newline + elapsed = time.perf_counter() - start + print(f"Elapsed: {elapsed:.2f}s", file=sys.stderr) + + +def parse_args(): + parser = FlexibleArgumentParser(description="Covo-Audio-Chat client example") + parser.add_argument( + "--prompt", + "-p", + type=str, + default="请回答这段音频里的问题。", + help="Text prompt.", + ) + parser.add_argument( + "--audio-path", + type=str, + default=None, + help="Path to audio file. Uses default audio asset if omitted.", + ) + parser.add_argument( + "--output-audio-path", + "-o", + type=str, + default="./audio_0.wav", + help="Output path for generated audio.", + ) + parser.add_argument( + "--model", + type=str, + default=None, + help="Model name for the API. Auto-detected from server if omitted.", + ) + parser.add_argument( + "--stream", + action="store_true", + help="Enable streaming mode.", + ) + return parser.parse_args() + + +if __name__ == "__main__": + args = parse_args() + run(args) diff --git a/recipes/README.md b/recipes/README.md index de07d22da..bccc4b222 100644 --- a/recipes/README.md +++ b/recipes/README.md @@ -29,6 +29,8 @@ recipes/ Qwen-Image on `1x A100 80GB`, including optional step-wise continuous batching replay - [`Qwen/Qwen3-Omni.md`](./Qwen/Qwen3-Omni.md): online serving recipe for multimodal chat on `1x A100 80GB` +- [`Tencent/Covo-Audio-Chat.md`](./Tencent/Covo-Audio-Chat.md): online + serving recipe for audio chat on `1x A100 80GB` - [`Qwen/Qwen3-TTS.md`](./Qwen/Qwen3-TTS.md): text-to-speech serving recipe for Qwen3-TTS (CustomVoice / VoiceDesign / Base) on `1x H100/A100 80GB` - [`LTX/LTX-2.md`](./LTX/LTX-2.md): text-to-video and image-to-video serving diff --git a/recipes/Tencent/Covo-Audio-Chat.md b/recipes/Tencent/Covo-Audio-Chat.md new file mode 100644 index 000000000..4f2eab635 --- /dev/null +++ b/recipes/Tencent/Covo-Audio-Chat.md @@ -0,0 +1,92 @@ +# Covo-Audio-Chat for audio chat on 1x A100 80GB + +## Summary + +- Vendor: Tencent +- Model: `tencent/Covo-Audio-Chat` +- Task: Audio chat — audio (and optional text) input, interleaved text + audio output +- Mode: Online serving with the OpenAI-compatible API (offline inference also supported) +- Maintainer: Community + +## When to use this recipe + +Use this recipe when you want a known-good starting point for serving +`tencent/Covo-Audio-Chat` with vLLM-Omni on a single 80 GB-class GPU and +validate the deployment with the bundled client example. + +## References + +- Related example under `examples/`: + [`examples/online_serving/covo_audio/README.md`](../../examples/online_serving/covo_audio/README.md) +- Offline end-to-end script: + [`examples/offline_inference/covo_audio/end2end.py`](../../examples/offline_inference/covo_audio/end2end.py) +- Deploy config: + [`vllm_omni/deploy/covo_audio.yaml`](../../vllm_omni/deploy/covo_audio.yaml) +- Pipeline topology: + [`vllm_omni/model_executor/models/covo_audio/pipeline.py`](../../vllm_omni/model_executor/models/covo_audio/pipeline.py) + +## Hardware Support + +This recipe currently documents one tested reference configuration for +CUDA GPU serving. The fused thinker+talker stage and the BigVGAN code2wav +stage both run on the same physical device. + +## GPU + +### 1x A100 80GB + +#### Environment + +- OS: Linux +- Python: 3.12 +- Driver / runtime: NVIDIA CUDA 12.x with an A100 80 GB GPU +- vLLM version: Match the repository requirements for your checkout +- vLLM-Omni version or commit: Use the commit you are deploying from +- Extra Python deps: `torchdiffeq`, `librosa` + +#### Command + +Install the two runtime-only deps that are not pulled in by vLLM-Omni itself: + +```bash +pip install torchdiffeq librosa +``` + +Start the server from the repository root: + +```bash +CUDA_VISIBLE_DEVICES=0 vllm serve tencent/Covo-Audio-Chat --omni \ + --trust-remote-code --port 18091 +``` + +The deploy config at `vllm_omni/deploy/covo_audio.yaml` is loaded +automatically by the model registry. + +#### Verification + +With the server ready, send a test request via the bundled client: + +```bash +cd examples/online_serving/covo_audio +python openai_chat_completion_client.py +``` + +Expected: the client prints the generated text and writes an output WAV +file to the current directory. + +#### Notes + +- Memory usage: Stage 0 (7B LLM) ~16 GiB + stage 1 (BigVGAN vocoder) + ~2 GiB, both resident on the same device. +- Key flags: `--omni` and `--trust-remote-code` are both required. +- System prompt: the bundled `openai_chat_completion_client.py` and + `end2end.py` already include `COVO_AUDIO_SYSTEM_PROMPT` (defined in + `vllm_omni/model_executor/models/covo_audio/prompt_utils.py`) in the + system message by default. When integrating your own client, make sure + to include it — without it, stage 0 emits text-only tokens and the + output audio is silent. +- Stage 1 runs with `enforce_eager: true` and `dtype: float32` — see the + header of `deploy/covo_audio.yaml` for the specific reasons. +- Known limitations: this starter recipe covers the single-GPU online-serving + path only; multi-GPU layouts and platform-specific overrides are not + documented here. diff --git a/tests/e2e/offline_inference/test_covo_audio_expansion.py b/tests/e2e/offline_inference/test_covo_audio_expansion.py new file mode 100644 index 000000000..3c6e5efb7 --- /dev/null +++ b/tests/e2e/offline_inference/test_covo_audio_expansion.py @@ -0,0 +1,47 @@ +""" +E2E tests for Covo-Audio-Chat model with audio input and audio/text output. +""" + +import pytest + +from tests.helpers.mark import hardware_test +from tests.helpers.media import generate_synthetic_audio +from tests.helpers.stage_config import get_deploy_config_path +from vllm_omni.model_executor.models.covo_audio.prompt_utils import ( + COVO_AUDIO_INPUT_PREFIX, + build_covo_audio_chat_prompt, +) + +models = ["tencent/Covo-Audio-Chat"] +stage_config = get_deploy_config_path("covo_audio.yaml") +test_params = [(model, stage_config) for model in models] + + +def get_question(): + return "请回答这段音频里的问题。" + + +@pytest.mark.full_model +@pytest.mark.omni +@hardware_test(res={"cuda": "H100"}, num_cards={"cuda": 1}) +@pytest.mark.parametrize("omni_runner", test_params, indirect=True) +def test_audio_to_audio(omni_runner, omni_runner_handler) -> None: + """ + Test audio input → text + audio output. + Deploy Setting: default yaml + Input Modal: text + audio + Output Modal: audio + """ + audio = generate_synthetic_audio(2, 1, 16000)["np_array"] + if len(audio.shape) == 2: + audio = audio.squeeze() + + user_content = COVO_AUDIO_INPUT_PREFIX + get_question() + prompt = build_covo_audio_chat_prompt(user_content) + + request_config = { + "prompts": prompt, + "audios": (audio, 16000), + "modalities": ["audio"], + } + omni_runner_handler.send_omni_request(request_config) diff --git a/tests/e2e/online_serving/test_covo_audio_expansion.py b/tests/e2e/online_serving/test_covo_audio_expansion.py new file mode 100644 index 000000000..a1baca554 --- /dev/null +++ b/tests/e2e/online_serving/test_covo_audio_expansion.py @@ -0,0 +1,61 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright contributors to the vLLM project +""" +E2E Online tests for Covo-Audio-Chat model. +""" + +import os + +os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn" + +import pytest + +from tests.helpers.mark import hardware_test +from tests.helpers.media import generate_synthetic_audio +from tests.helpers.runtime import OmniServerParams, dummy_messages_from_mix_data +from tests.helpers.stage_config import get_deploy_config_path +from vllm_omni.model_executor.models.covo_audio.prompt_utils import ( + COVO_AUDIO_SYSTEM_PROMPT, +) + +model = "tencent/Covo-Audio-Chat" +stage_config_path = get_deploy_config_path("covo_audio.yaml") + +test_params = [ + pytest.param( + OmniServerParams( + model=model, + stage_config_path=stage_config_path, + server_args=["--trust-remote-code"], + ), + id="default", + ), +] + + +@pytest.mark.full_model +@pytest.mark.omni +@hardware_test(res={"cuda": "H100"}, num_cards=1) +@pytest.mark.parametrize("omni_server", test_params, indirect=True) +def test_audio_to_audio_001(omni_server, openai_client) -> None: + """ + Input Modal: text + audio + Output Modal: audio + Input Setting: stream=False + Datasets: single request + """ + audio_data_url = f"data:audio/wav;base64,{generate_synthetic_audio(2, 1, sample_rate=16000)['base64']}" + messages = dummy_messages_from_mix_data( + system_prompt={"role": "system", "content": COVO_AUDIO_SYSTEM_PROMPT}, + audio_data_url=audio_data_url, + content_text="请回答这段音频里的问题。", + ) + + request_config = { + "model": omni_server.model, + "messages": messages, + "modalities": ["audio"], + "stream": False, + } + + openai_client.send_omni_request(request_config) diff --git a/vllm_omni/config/pipeline_registry.py b/vllm_omni/config/pipeline_registry.py index 3d44d1bff..1067316a2 100644 --- a/vllm_omni/config/pipeline_registry.py +++ b/vllm_omni/config/pipeline_registry.py @@ -49,6 +49,10 @@ _OMNI_PIPELINES: dict[str, tuple[str, str]] = { "vllm_omni.model_executor.models.qwen3_tts.pipeline", "QWEN3_TTS_PIPELINE", ), + "covo_audio": ( + "vllm_omni.model_executor.models.covo_audio.pipeline", + "COVO_AUDIO_PIPELINE", + ), "bagel": ( "vllm_omni.model_executor.models.bagel.pipeline", "BAGEL_PIPELINE", diff --git a/vllm_omni/deploy/covo_audio.yaml b/vllm_omni/deploy/covo_audio.yaml new file mode 100644 index 000000000..613a91b4a --- /dev/null +++ b/vllm_omni/deploy/covo_audio.yaml @@ -0,0 +1,46 @@ +# Covo-Audio-Chat deploy: fused_thinker_talker → code2wav on a single GPU. +# Verified on 1x A100-80G. +# +# Fields omitted from a stage fall back to StageDeployConfig defaults (see +# vllm_omni/config/stage_config.py). Non-default choices in this file: +# * async_chunk: false — pipeline defines no async-chunk processor funcs. +# * Stage 1 max_num_batched_tokens=2048, max_model_len=2048 — audio code +# sequences are short; the 32k default is unnecessary here. +# * Stage 1 dtype: float32 — BigVGAN vocoder weights are fp32; the default +# bf16 triggers mat1/mat2 dtype mismatch during warmup. +# * Stage 1 enforce_eager: true — the code2wav forward pass performs a +# GPU→CPU sync (int(code.flatten()[0]) in covo_audio.py) which is +# illegal during CUDA graph capture. +async_chunk: false +trust_remote_code: true + +stages: + - stage_id: 0 + max_num_seqs: 1 + gpu_memory_utilization: 0.5 + mm_processor_cache_gb: 0 + devices: "0" + default_sampling_params: + temperature: 0.0 + top_p: 1.0 + top_k: -1 + max_tokens: 2048 + seed: 42 + repetition_penalty: 1.1 + + - stage_id: 1 + max_num_seqs: 1 + gpu_memory_utilization: 0.2 + enforce_eager: true + dtype: float32 + max_num_batched_tokens: 2048 + max_model_len: 2048 + mm_processor_cache_gb: 0 + devices: "0" + default_sampling_params: + temperature: 0.0 + top_p: 1.0 + top_k: -1 + max_tokens: 2048 + seed: 42 + repetition_penalty: 1.1 diff --git a/vllm_omni/entrypoints/openai/serving_speech.py b/vllm_omni/entrypoints/openai/serving_speech.py index 05a52b537..256b9a56b 100644 --- a/vllm_omni/entrypoints/openai/serving_speech.py +++ b/vllm_omni/entrypoints/openai/serving_speech.py @@ -64,6 +64,7 @@ _QWEN3_TTS_MODEL_STAGES = {"qwen3_tts"} _FISH_TTS_MODEL_STAGES = {"fish_speech_slow_ar"} _COSYVOICE3_TTS_MODEL_STAGES = {"cosyvoice3_talker"} _OMNIVOICE_TTS_MODEL_STAGES = {"omnivoice_generator"} +_COVO_AUDIO_MODEL_STAGES = {"fused_thinker_talker"} _VOXCPM_TTS_MODEL_STAGES = {"latent_generator", "vae"} _VOXCPM2_TTS_MODEL_STAGES = {"latent_generator"} _MING_TTS_MODEL_STAGES = {"ming_tts"} @@ -74,6 +75,7 @@ _TTS_MODEL_STAGES: set[str] = ( | _FISH_TTS_MODEL_STAGES | _COSYVOICE3_TTS_MODEL_STAGES | _OMNIVOICE_TTS_MODEL_STAGES + | _COVO_AUDIO_MODEL_STAGES | _VOXCPM_TTS_MODEL_STAGES | _VOXCPM2_TTS_MODEL_STAGES | _MING_TTS_MODEL_STAGES @@ -325,6 +327,7 @@ class OmniOpenAIServingSpeech(OpenAIServing, AudioMixin): and getattr(getattr(self._tts_stage, "engine_args", None), "model_stage", None) == "fish_speech_slow_ar" ) self._fish_speech_tokenizer = None + self._covo_audio_tokenizer = None self._is_cosyvoice3 = ( self._tts_stage is not None @@ -490,6 +493,10 @@ class OmniOpenAIServingSpeech(OpenAIServing, AudioMixin): return "cosyvoice3" if model_stage in _OMNIVOICE_TTS_MODEL_STAGES: return "omnivoice" + if model_stage in _COVO_AUDIO_MODEL_STAGES: + model_arch = getattr(self._tts_stage.engine_args, "model_arch", None) + if model_arch and "CovoAudio" in model_arch: + return "covo_audio" if model_stage in (_VOXCPM_TTS_MODEL_STAGES | _VOXCPM2_TTS_MODEL_STAGES): has_vae_stage = any( getattr(getattr(stage, "engine_args", None), "model_stage", None) == "vae" @@ -1874,6 +1881,41 @@ class OmniOpenAIServingSpeech(OpenAIServing, AudioMixin): "mm_processor_kwargs": mm_kwargs, } + # ---- Covo-Audio helpers ---- + + def _build_covo_audio_prompt( + self, + request: OpenAICreateSpeechRequest, + ) -> dict[str, Any]: + """Build a chat-style prompt for Covo-Audio-Chat. + + Covo-Audio requires a specific system prompt that instructs the model + to interleave text and audio tokens in its output. We render the + messages through the chat template and pass prompt_token_ids so that + the engine does not need to re-tokenize. + """ + from transformers import AutoTokenizer + + from vllm_omni.model_executor.models.covo_audio.prompt_utils import ( + build_covo_audio_prompt_token_ids, + ) + + if self._covo_audio_tokenizer is None: + model_name = self.engine_client.model_config.model + try: + self._covo_audio_tokenizer = AutoTokenizer.from_pretrained( + model_name, + trust_remote_code=True, + ) + except Exception as exc: + raise RuntimeError(f"Failed to load Covo-Audio tokenizer from '{model_name}': {exc}") from exc + + prompt_ids = build_covo_audio_prompt_token_ids( + self._covo_audio_tokenizer, + request.input, + ) + return {"prompt_token_ids": prompt_ids} + def _apply_cosyvoice3_dynamic_tokens( self, sampling_params_list: list, @@ -2014,6 +2056,9 @@ class OmniOpenAIServingSpeech(OpenAIServing, AudioMixin): prompt["lang"] = request.language if request.instructions: prompt["instruct"] = request.instructions + elif self._tts_model_type == "covo_audio": + prompt = self._build_covo_audio_prompt(request) + tts_params = {} elif self._tts_model_type == "voxcpm2": # voxcpm2 doesn't use `_apply_uploaded_speaker` because the prompt builder needs the # raw waveform tuple for prefill-length accounting, not a base64 data URL. @@ -2100,6 +2145,8 @@ class OmniOpenAIServingSpeech(OpenAIServing, AudioMixin): request_id = request_id or f"speech-{random_uuid()}" if self._is_fish_speech: model_type = "fish_speech" + elif self._tts_model_type == "covo_audio": + model_type = "covo_audio" elif self._tts_model_type == "voxtral_tts": model_type = "voxtral_tts" elif self._tts_model_type == "cosyvoice3": diff --git a/vllm_omni/model_executor/models/covo_audio/__init__.py b/vllm_omni/model_executor/models/covo_audio/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/vllm_omni/model_executor/models/covo_audio/config_covo_audio.py b/vllm_omni/model_executor/models/covo_audio/config_covo_audio.py new file mode 100644 index 000000000..8153c2f38 --- /dev/null +++ b/vllm_omni/model_executor/models/covo_audio/config_covo_audio.py @@ -0,0 +1,72 @@ +# Copyright 2026 Tencent. +from transformers.configuration_utils import PretrainedConfig + +# audio_token_index: token IDs >= this value are audio codes. +# Matches config.audio_token_index and len(tokenizer) = 151671. +# Note: the LLM total vocab_size is 168055 (includes audio tokens), which +# is different from this boundary value. +COVO_AUDIO_TOKEN_INDEX = 151671 + + +class CovoAudioCode2WavConfig(PretrainedConfig): + model_type = "covo_audio_code2wav" + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.wav_input_sr = 24000 + self.n_speakers = 1 + self.n_styles = 1 + + self.token2latent = { + "upsample_factor": 4, + "token_vocab_size": 16384, + "token_input_dim": 512, + "z_dim": 64, + "spkr_embed_dim": 1024, + "spkr_mask_ratio": 0.0, + "bert_mask_rate0": 0.7, + "bert_mask_rate1": 1.0, + "random_maskrate": 0.3, + "cfg_dropout": 0.2, + "sigma": 1e-05, + "transformer": { + "num_layers": 12, + "hidden_size": 1024, + "ffn_hidden_size": 4096, + "num_heads": 16, + "modulation": True, + "alibi_bias": False, + "rotary_bias": True, + "qk_norm": False, + "max_position_embeddings": 4096, + "attn_dropout": 0.0, + "dropout": 0.1, + }, + } + + self.wavegan = { + "type": "BigVGANFlowVAE", + "upsample_rates": [5, 3, 2, 2, 2, 2], + "upsample_kernel_sizes": [10, 6, 4, 4, 4, 4], + "upsample_initial_channel": 1536, + "resblock": "1", + "resblock_kernel_sizes": [3, 7, 11], + "resblock_dilation_sizes": [[1, 3, 5], [1, 3, 5], [1, 3, 5]], + "downsample_rates": [2, 2, 2, 2, 3, 5], + "downsample_channels": [12, 24, 48, 96, 192, 384, 768], + "activation": "snakebeta", + "snake_logscale": True, + "latent_dim": 64, + "use_flow": True, + "use_vae": True, + "kl_weight": 5, + "causal": True, + "flow_hidden_channels": 256, + } + + self.inference = { + "s_steps": 10, + "cfg_alpha": 1.0, + "dynamic_the": False, + "rescale_logits": False, + } diff --git a/vllm_omni/model_executor/models/covo_audio/covo_audio.py b/vllm_omni/model_executor/models/covo_audio/covo_audio.py new file mode 100644 index 000000000..42f80bb74 --- /dev/null +++ b/vllm_omni/model_executor/models/covo_audio/covo_audio.py @@ -0,0 +1,426 @@ +# Copyright 2026 Tencent. +from collections.abc import Iterable, Mapping, Sequence +from typing import Any + +import numpy as np +import torch +from torch import nn +from transformers import BatchFeature, WhisperFeatureExtractor +from vllm.config import VllmConfig +from vllm.config.multimodal import BaseDummyOptions +from vllm.inputs import MultiModalDataDict +from vllm.model_executor.models import SupportsPP +from vllm.model_executor.models.interfaces import SupportsMultiModal +from vllm.model_executor.models.utils import init_vllm_registered_model +from vllm.multimodal import MULTIMODAL_REGISTRY +from vllm.multimodal.inputs import MultiModalFieldConfig +from vllm.multimodal.parse import MultiModalDataItems, MultiModalDataParser +from vllm.multimodal.processing import ( + BaseDummyInputsBuilder, + BaseMultiModalProcessor, + BaseProcessingInfo, + ProcessorInputs, + PromptReplacement, + PromptUpdateDetails, +) +from vllm.sequence import IntermediateTensors +from vllm.v1.sample.metadata import SamplingMetadata + +from vllm_omni.model_executor.custom_process_mixin import CustomProcessMixin +from vllm_omni.model_executor.models.output_templates import OmniOutput +from vllm_omni.model_executor.models.utils import add_prefix_to_loaded_weights + +# Max tokens per audio: Whisper 30s → 3000 mel frames → encoder 2x + adapter 8x = 16x → 188 +MAX_AUDIO_TOKENS = 188 + + +def _calc_audio_num_tokens(num_samples: int, sample_rate: int) -> int: + """Calculate the number of audio tokens for a given audio. + + Matches the original Covo-Audio calc_seq_len: 4 rounds of stride-2 + downsampling (Whisper encoder 2x + AudioAdapter 3-layer 8x = 16x total). + """ + centiseconds = num_samples * 100 // sample_rate + seq_len = centiseconds + for _ in range(4): + seq_len = (seq_len + 1) // 2 + return seq_len + + +class CovoAudioProcessingInfo(BaseProcessingInfo): + def get_hf_config(self): + return self.ctx.get_hf_config() + + def get_hf_processor(self, **kwargs): + return None + + def get_feature_extractor(self, **kwargs): + return WhisperFeatureExtractor( + feature_size=128, + sampling_rate=16000, + ) + + def get_data_parser(self) -> MultiModalDataParser: + return MultiModalDataParser( + target_sr=16000, + ) + + def get_supported_mm_limits(self) -> Mapping[str, int | None]: + return {"audio": None} + + def get_mm_max_tokens_per_item(self, seq_len, mm_counts): + return {"audio": MAX_AUDIO_TOKENS} + + +class CovoAudioDummyInputsBuilder(BaseDummyInputsBuilder[CovoAudioProcessingInfo]): + def get_dummy_text(self, mm_counts: Mapping[str, int]) -> str: + num_audios = mm_counts.get("audio", 0) + return (" <|begofcAUDIO|><|cAUDIO|><|endofcAUDIO|>" * num_audios).strip() + + def get_dummy_mm_data( + self, + seq_len: int, + mm_counts: Mapping[str, int], + mm_options: Mapping[str, BaseDummyOptions] | None = None, + ) -> MultiModalDataDict: + num_audios = mm_counts.get("audio", 0) + if num_audios == 0: + return {} + # 30s at 16kHz = Whisper's max input length, ensures profile_run + # allocates memory for the worst-case MAX_AUDIO_TOKENS (188) tokens. + dummy_audio = np.zeros((16000 * 30,), dtype=np.float32) + return {"audio": [(dummy_audio, 16000)] * num_audios} + + def get_dummy_processor_inputs( + self, + seq_len: int, + mm_counts: Mapping[str, int], + mm_options: Mapping[str, BaseDummyOptions] | None = None, + ) -> ProcessorInputs: + dummy_text = self.get_dummy_text(mm_counts) + dummy_mm_data = self.get_dummy_mm_data(seq_len, mm_counts, mm_options) + dummy_mm_items = self.info.parse_mm_data(dummy_mm_data) + return ProcessorInputs( + prompt=dummy_text, + mm_data_items=dummy_mm_items, + ) + + +class CovoAudioMultiModalProcessor(BaseMultiModalProcessor[CovoAudioProcessingInfo]): + def _hf_processor_applies_updates(self, prompt_text, mm_items, hf_processor_mm_kwargs, tokenization_kwargs) -> bool: + return False + + def _call_hf_processor( + self, prompt: str, mm_data: Mapping[str, object], mm_kwargs: Mapping[str, Any], tok_kwargs: Mapping[str, object] + ) -> BatchFeature: + tokenizer = self.info.get_tokenizer() + feature_extractor = self.info.get_feature_extractor() + + if isinstance(prompt, str): + prompt_ids = tokenizer.encode(prompt) + else: + prompt_ids = prompt + + audios = mm_data.get("audios", []) or mm_data.get("audio", []) + if not audios: + return BatchFeature(dict(input_ids=[prompt_ids]), tensor_type="pt") + + raw_audios = [] + num_tokens_list = [] + for item in audios: + if isinstance(item, tuple): + audio_array, _sr = item + else: + audio_array = item + raw_audios.append(audio_array) + # MultiModalDataParser resamples to target_sr=16000, so always + # compute token count at 16 kHz regardless of the original sr. + num_tokens_list.append(_calc_audio_num_tokens(len(audio_array), 16000)) + + features = feature_extractor( + raw_audios, + sampling_rate=16000, + return_tensors="pt", + ) + + return BatchFeature( + data={ + "input_ids": torch.tensor([prompt_ids], dtype=torch.int64), + "audio_features": features["input_features"], + "audio_num_tokens": torch.tensor(num_tokens_list, dtype=torch.int64), + }, + tensor_type=None, + ) + + def _get_mm_fields_config( + self, + hf_inputs: BatchFeature, + hf_processor_mm_kwargs: Mapping[str, object], + ) -> Mapping[str, MultiModalFieldConfig]: + return { + "audio_features": MultiModalFieldConfig.batched("audio"), + "audio_num_tokens": MultiModalFieldConfig.batched("audio"), + } + + def _get_prompt_updates( + self, + mm_items: MultiModalDataItems, + hf_processor_mm_kwargs: Mapping[str, object], + out_mm_kwargs, + ) -> Sequence[PromptReplacement]: + tokenizer = self.info.get_tokenizer() + vocab = tokenizer.get_vocab() + audio_token_id = vocab["<|cAUDIO|>"] + + out_mm_data = out_mm_kwargs.get_data() + + def get_replacement(item_idx: int): + num_tokens_tensor = out_mm_data.get("audio_num_tokens") + if num_tokens_tensor is not None: + num_tokens = int(num_tokens_tensor[item_idx]) + else: + num_tokens = MAX_AUDIO_TOKENS + return PromptUpdateDetails.select_token_id( + [audio_token_id] * num_tokens, + embed_token_id=audio_token_id, + ) + + return [ + PromptReplacement("audio", "<|cAUDIO|>", get_replacement), + ] + + +@MULTIMODAL_REGISTRY.register_processor( + CovoAudioMultiModalProcessor, + info=CovoAudioProcessingInfo, + dummy_inputs=CovoAudioDummyInputsBuilder, +) +class CovoAudioForConditionalGeneration( + nn.Module, + SupportsPP, + SupportsMultiModal, + CustomProcessMixin, +): + requires_raw_input_tokens: bool = True + + @classmethod + def get_placeholder_str(cls, modality: str, i: int) -> str | None: + if modality.startswith("audio"): + return "<|begofcAUDIO|><|cAUDIO|><|endofcAUDIO|>" + return None + + def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""): + super().__init__() + self.has_preprocess = False + self.have_multimodal_outputs = True + self.vllm_config = vllm_config + + self.model_stage = vllm_config.model_config.model_stage + if self.model_stage == "fused_thinker_talker": + self.has_preprocess = True + self.set_custom_preprocess(self.fused_thinker_talker_preprocess) + self.fused_thinker_talker = init_vllm_registered_model( + vllm_config=vllm_config, + hf_config=vllm_config.model_config.hf_config, + architectures=["CovoAudioLLMModel"], + ) + self.code2wav = None + self.model = self.fused_thinker_talker + + elif self.model_stage == "code2wav": + self.code2wav = init_vllm_registered_model( + vllm_config=vllm_config, + architectures=["CovoAudioCode2WavModel"], + ) + self.fused_thinker_talker = None + self.model = self.code2wav + else: + raise ValueError("Invalid model stage") + + self.make_empty_intermediate_tensors = ( + self.fused_thinker_talker.make_empty_intermediate_tensors + if self.model_stage == "fused_thinker_talker" + else lambda *args, **kwargs: None + ) + + def fused_thinker_talker_preprocess( + self, + input_ids: torch.Tensor | None, + input_embeds: torch.Tensor | None, + **info_dict: dict, + ): + if input_embeds is None and input_ids is not None: + input_embeds = self.fused_thinker_talker.embed_input_ids(input_ids) + return input_ids, input_embeds, info_dict + + def embed_multimodal(self, **kwargs: object): + if self.model_stage == "fused_thinker_talker": + return self.fused_thinker_talker.embed_multimodal(**kwargs) + return None + + def embed_input_ids( + self, + input_ids: torch.Tensor, + multimodal_embeddings=None, + is_multimodal: bool = False, + ) -> torch.Tensor: + if self.model_stage == "code2wav": + hidden_size = self.vllm_config.model_config.get_hidden_size() + return torch.zeros( + input_ids.numel(), + hidden_size, + dtype=self.vllm_config.model_config.dtype, + device=input_ids.device, + ) + return self.model.embed_input_ids(input_ids, multimodal_embeddings, is_multimodal=is_multimodal) + + def compute_logits( + self, + hidden_states: torch.Tensor, + sampling_metadata: SamplingMetadata | None = None, + ) -> torch.Tensor | None: + if isinstance(hidden_states, OmniOutput): + hidden_states = hidden_states.text_hidden_states + return self.model.compute_logits(hidden_states) + + @staticmethod + def _module_device(module: nn.Module) -> torch.device: + try: + return next(module.parameters()).device + except StopIteration: + # No parameters; fall back to buffers or cpu + for _, buf in module.named_buffers(recurse=True): + return buf.device + return torch.device("cpu") + + def generate_codes( + self, + input_ids: torch.Tensor, + positions: torch.Tensor, + inputs_embeds: torch.Tensor, + intermediate_tensors: IntermediateTensors | None = None, + **kwargs: object, + ): + llm_dev = self._module_device(self.fused_thinker_talker) + + # Fallback: dummy input_ids matching embedding length + if input_ids is None: + input_ids = torch.zeros(inputs_embeds.shape[1], dtype=torch.long, device=llm_dev).unsqueeze( + 0 + ) # (1, seq_len) + + # Thinker (ensure inputs on thinker's device) + if input_ids is not None and input_ids.device != llm_dev: + input_ids = input_ids.to(llm_dev) + if positions is not None and positions.device != llm_dev: + positions = positions.to(llm_dev) + if inputs_embeds is not None and inputs_embeds.device != llm_dev: + inputs_embeds = inputs_embeds.to(llm_dev) + + # Run llm + llm_output = self.fused_thinker_talker( + input_ids=input_ids, + positions=positions, + intermediate_tensors=intermediate_tensors, + inputs_embeds=inputs_embeds, + **kwargs, + ) + + # CovoAudio interleaves audio tokens directly in the LLM output + # token stream; the stage input processor extracts them from + # token_ids, so there is no separate codec output here. + return None, llm_output + + def generate_audio(self, code: torch.Tensor): + code2wav_dev = self._module_device(self.code2wav) + + if isinstance(code, torch.Tensor): + code_tensor = code.to(dtype=torch.long, device=code2wav_dev) + else: + code_tensor = torch.as_tensor(code, dtype=torch.long, device=code2wav_dev) + + if code_tensor.ndim == 2 and code_tensor.shape[0] == 1: + code_tensor = code_tensor.squeeze(0) + + with torch.inference_mode(): + audio_tensor = self.code2wav(input_ids=code_tensor) + + return audio_tensor + + def load_weights(self, weights: Iterable[tuple[str, torch.Tensor]]) -> set[str]: + """Load weights for all components of the omni model.""" + loaded_weights: set[str] = set() + + # code2wav weights are loaded in its __init__ via torch.load; + # skip iterating safetensors entirely for this stage. + if self.code2wav: + c2w_loaded = self.code2wav.load_weights(iter([])) + c2w_loaded = add_prefix_to_loaded_weights(c2w_loaded, "code2wav") + loaded_weights.update(c2w_loaded) + return loaded_weights + + llm_weights = ((k, v) for k, v in weights if k.startswith(("llm", "encoder", "audio_adapter"))) + if self.fused_thinker_talker: + llm_loaded = self.fused_thinker_talker.load_weights(llm_weights) + llm_loaded = add_prefix_to_loaded_weights(llm_loaded, "fused_thinker_talker") + loaded_weights.update(llm_loaded) + + return loaded_weights + + def forward( + self, + input_ids: torch.Tensor, + positions: torch.Tensor, + intermediate_tensors: IntermediateTensors | None = None, + inputs_embeds: torch.Tensor | None = None, + sampling_metadata: SamplingMetadata | None = None, + **kwargs: object, + ) -> torch.Tensor | IntermediateTensors | OmniOutput: + """Route forward to the active stage. + + - fused_thinker_talker: run Whisper + LLM → text hidden states + (audio tokens are interleaved in the output token stream). + - code2wav: run BigVGAN vocoder on audio codes → waveform. + """ + if self.model_stage == "fused_thinker_talker": + _, text_hidden_states = self.generate_codes( + input_ids=input_ids, + positions=positions, + inputs_embeds=inputs_embeds, + intermediate_tensors=intermediate_tensors, + **kwargs, + ) + + return OmniOutput( + text_hidden_states=text_hidden_states.reshape(-1, text_hidden_states.shape[-1]), + multimodal_outputs={}, + ) + + if self.model_stage == "code2wav": + code = ( + input_ids + if input_ids is not None + else torch.zeros( + inputs_embeds.shape[0], + dtype=torch.long, + device=inputs_embeds.device, + ) + ) + + # Text-only response: stage processor sends a single sentinel [-1] + # token. Skip BigVGAN inference and return a short silence so the + # serving layer produces a valid WAV instead of noise. + if code.numel() == 1 and int(code.flatten()[0]) == -1: + # 0.1s of silence at 24 kHz + return OmniOutput( + text_hidden_states=None, + multimodal_outputs={"model_outputs": torch.zeros(1, 2400, device=code.device)}, + ) + + audio_tensor = self.generate_audio(code) + return OmniOutput( + text_hidden_states=None, + multimodal_outputs={ + "model_outputs": audio_tensor.reshape(1, -1) if audio_tensor is not None else audio_tensor + }, + ) diff --git a/vllm_omni/model_executor/models/covo_audio/covo_audio_code2wav.py b/vllm_omni/model_executor/models/covo_audio/covo_audio_code2wav.py new file mode 100644 index 000000000..4b0b2fe4b --- /dev/null +++ b/vllm_omni/model_executor/models/covo_audio/covo_audio_code2wav.py @@ -0,0 +1,126 @@ +# Copyright 2026 Tencent. +import os +from collections.abc import Iterable + +import numpy as np +import torch +from torch import nn +from vllm.config import VllmConfig +from vllm.model_executor.models import SupportsPP +from vllm.v1.outputs import SamplerOutput +from vllm.v1.sample.metadata import SamplingMetadata +from vllm.v1.sample.sampler import Sampler + +from .config_covo_audio import CovoAudioCode2WavConfig +from .token2wav import JsonHParams, Token2WavDecoder + + +class CovoAudioCode2WavForConditionalGeneration(nn.Module, SupportsPP): + def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""): + super().__init__() + + self.vllm_config = vllm_config + self.config = vllm_config.model_config.hf_config + model_name = vllm_config.model_config.model + if os.path.isdir(model_name): + model_path = model_name + else: + from huggingface_hub import snapshot_download + + model_path = snapshot_download(model_name) + token2wav_path = os.path.join(model_path, "token2wav") + + code2wav_config = CovoAudioCode2WavConfig() + model_config = JsonHParams( + **{ + "token2latent": code2wav_config.token2latent, + "wavegan": code2wav_config.wavegan, + "wav_input_sr": code2wav_config.wav_input_sr, + "global_mean_var": os.path.join(token2wav_path, "global_mean_var.npy"), + } + ) + + self.decoder = Token2WavDecoder(model_config) + ckpt = torch.load( + os.path.join(token2wav_path, "model.pt"), + map_location="cpu", + weights_only=True, + ) + self.decoder.load_state_dict(ckpt) + self.decoder.eval() + self.infer_config = code2wav_config.inference + self._decoder_moved = False + self._sampler = Sampler() + + # Load bundled speaker prompt files for voice timbre control. + prompt_dir = os.path.join(os.path.dirname(__file__), "speaker_prompt") + self._prompt_token = torch.from_numpy(np.load(os.path.join(prompt_dir, "prompt_token.npy"))).long() + self._prompt_latent = torch.from_numpy(np.load(os.path.join(prompt_dir, "prompt_latent.npy"))).float() + self._spkr_embed = torch.from_numpy(np.load(os.path.join(prompt_dir, "speaker_embed.npy"))).float() + + def _ensure_on_device(self, device: torch.device) -> None: + """Move decoder and prompt tensors to *device* once.""" + if self._decoder_moved: + return + self.decoder = self.decoder.to(device) + self._prompt_token = self._prompt_token.to(device) + self._prompt_latent = self._prompt_latent.to(device) + self._spkr_embed = self._spkr_embed.to(device) + self._decoder_moved = True + + def forward(self, input_ids: torch.Tensor, **kwargs): + self._ensure_on_device(input_ids.device) + data = { + "target_token": input_ids.unsqueeze(0), + "sample_rate": 24000, + "prompt_token": self._prompt_token, + "prompt_latent": self._prompt_latent, + "spkr_embed": self._spkr_embed, + } + audio = self.decoder.inference(data, **self.infer_config) + return audio + + def embed_input_ids( + self, + input_ids: torch.Tensor, + multimodal_embeddings=None, + is_multimodal: bool = False, + ) -> torch.Tensor: + hidden_size = self.vllm_config.model_config.get_hidden_size() + return torch.zeros( + input_ids.numel(), + hidden_size, + dtype=self.vllm_config.model_config.dtype, + device=input_ids.device, + ) + + def compute_logits( + self, + hidden_states: torch.Tensor, + ) -> torch.Tensor | None: + if hidden_states.numel() == 0: + return None + batch_size = hidden_states.shape[0] if hidden_states.ndim > 0 else 1 + vocab_size = self.config.llm_config.vocab_size + return torch.zeros( + (batch_size, vocab_size), + dtype=hidden_states.dtype, + device=hidden_states.device, + ) + + def sample( + self, + logits: torch.Tensor, + sampling_metadata: SamplingMetadata, + ) -> SamplerOutput | None: + if logits is None or logits.numel() == 0: + return None + return self._sampler(logits=logits, sampling_metadata=sampling_metadata) + + def load_weights( + self, + weights: Iterable[tuple[str, torch.Tensor]], + ) -> set[str]: + # Weights are loaded in __init__ via torch.load + # Return all decoder state_dict keys so vLLM knows they are initialized + return {f"decoder.{k}" for k in self.decoder.state_dict()} diff --git a/vllm_omni/model_executor/models/covo_audio/covo_audio_llm.py b/vllm_omni/model_executor/models/covo_audio/covo_audio_llm.py new file mode 100644 index 000000000..09a9d6b66 --- /dev/null +++ b/vllm_omni/model_executor/models/covo_audio/covo_audio_llm.py @@ -0,0 +1,152 @@ +# Copyright 2026 Tencent. +from collections.abc import Iterable + +import torch +from torch import nn +from transformers.models.whisper.modeling_whisper import WhisperEncoder +from vllm.config import VllmConfig +from vllm.model_executor.models.interfaces import MultiModalEmbeddings, SupportsMultiModal, SupportsPP +from vllm.model_executor.models.utils import AutoWeightsLoader, init_vllm_registered_model, maybe_prefix +from vllm.sequence import IntermediateTensors + + +class DownsampleLayer(nn.Module): + """ + Downsample layer with 1D convolution and linear layers. + """ + + def __init__(self, input_dim, output_dim, hidden_dim=2048): + super().__init__() + self.conv1d = nn.Conv1d(in_channels=input_dim, out_channels=input_dim, kernel_size=3, stride=2, padding=1) + self.linear1 = nn.Linear(input_dim, hidden_dim) + self.relu1 = nn.ReLU() + self.linear2 = nn.Linear(hidden_dim, output_dim) + self.relu2 = nn.ReLU() + + def forward(self, x): + # x: (B, T, C) + x = x.transpose(1, 2) # -> (B, C, T) + x = self.conv1d(x) # -> (B, C, T // 2) + x = x.transpose(1, 2) # -> (B, T // 2, C) + x = self.relu1(x) + x = self.linear1(x) # -> (B, T // 2, hidden_dim) + x = self.relu2(x) + x = self.linear2(x) # -> (B, T // 2, output_dim) + return x + + +class AudioAdapter(nn.Module): + """ + Audio adapter with downsample layers. + """ + + def __init__(self, input_dim, output_dim, downsample=8): + """ + Args: + input_dim (int): input feature dimension (number of channels) + output_dim (int): output feature dimension + downsample (int): total downsampling factor, must be a power of 2 + """ + super().__init__() + assert downsample >= 2 and (downsample & (downsample - 1)) == 0, "downsample must be a power of 2" + + num_layers = ( + downsample.bit_length() - 1 + ) # calculate how many downsampling steps are needed to reach the target factor + + layers = [] + in_dim = input_dim + for i in range(num_layers): + is_last = i == num_layers - 1 + out_dim = output_dim if is_last else input_dim + layers.append(DownsampleLayer(in_dim, out_dim)) + in_dim = out_dim + + self.downsample_layers = nn.ModuleList(layers) + + def forward(self, x): + """ + Args: + x (Tensor): shape (B, T, C),C=input_dim + Returns: + Tensor: shape (B, T // downsample, output_dim) + """ + for layer in self.downsample_layers: + x = layer(x) + return x + + +class CovoAudioLLMForConditionalGeneration(nn.Module, SupportsPP, SupportsMultiModal): + def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""): + super().__init__() + + config = vllm_config.model_config.hf_config + self.llm = init_vllm_registered_model( + vllm_config=vllm_config, + prefix=maybe_prefix(prefix, "llm"), + architectures=["Qwen2ForCausalLM"], + ) + self.encoder = WhisperEncoder(config.encoder_config) + self.audio_adapter = AudioAdapter( + config.whisper_feats_dim, config.llm_config.hidden_size, config.adapter_downsample + ) + self.make_empty_intermediate_tensors = self.llm.make_empty_intermediate_tensors + + def get_language_model(self) -> torch.nn.Module: + return self.llm + + def embed_input_ids( + self, + input_ids: torch.Tensor, + multimodal_embeddings=None, + is_multimodal=None, + ) -> torch.Tensor: + return super().embed_input_ids( + input_ids, + multimodal_embeddings=multimodal_embeddings, + is_multimodal=is_multimodal, + ) + + def embed_multimodal(self, **kwargs: object) -> MultiModalEmbeddings: + audio_features = kwargs["audio_features"] + audio_num_tokens = kwargs.get("audio_num_tokens") + # Match encoder dtype (bfloat16) since audio_features from WhisperFeatureExtractor are float32 + encoder_dtype = next(self.encoder.parameters()).dtype + audio_features = audio_features.to(dtype=encoder_dtype) + feats = self.encoder(audio_features).last_hidden_state + features = self.audio_adapter(feats) + # Truncate each audio to its actual length (Whisper pads all to 30s) + # Return a list of per-item tensors since lengths may differ. + batch_size = features.shape[0] + result = [] + for i in range(batch_size): + if audio_num_tokens is not None: + n = int(audio_num_tokens[i]) + result.append(features[i, :n, :]) + else: + result.append(features[i]) + return result + + def forward( + self, + input_ids: torch.Tensor, + positions: torch.Tensor, + intermediate_tensors: IntermediateTensors | None = None, + inputs_embeds: torch.Tensor | None = None, + **kwargs: object, + ) -> torch.Tensor | IntermediateTensors: + if intermediate_tensors is not None: + inputs_embeds = None + + hidden_state = self.llm(input_ids, positions, intermediate_tensors, inputs_embeds=inputs_embeds) + return hidden_state + + def compute_logits( + self, + hidden_states: torch.Tensor, + ) -> torch.Tensor | None: + return self.llm.compute_logits(hidden_states) + + def load_weights(self, weights: Iterable[tuple[str, torch.Tensor]]) -> set[str]: + loader = AutoWeightsLoader(self) + return loader.load_weights(weights) diff --git a/vllm_omni/model_executor/models/covo_audio/pipeline.py b/vllm_omni/model_executor/models/covo_audio/pipeline.py new file mode 100644 index 000000000..5b1a31d6e --- /dev/null +++ b/vllm_omni/model_executor/models/covo_audio/pipeline.py @@ -0,0 +1,50 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright contributors to the vLLM project +"""Covo-Audio pipeline topology (frozen). + +Stage 0: fused_thinker_talker — multimodal understanding + interleaved text/audio + token generation (AR). +Stage 1: code2wav — audio codes → waveform (generation). +""" + +from vllm_omni.config.stage_config import ( + PipelineConfig, + StageExecutionType, + StagePipelineConfig, +) + +_PROC = "vllm_omni.model_executor.stage_input_processors.covo_audio" + +COVO_AUDIO_PIPELINE = PipelineConfig( + model_type="covo_audio", + model_arch="CovoAudioForConditionalGeneration", + stages=( + StagePipelineConfig( + stage_id=0, + model_stage="fused_thinker_talker", + execution_type=StageExecutionType.LLM_AR, + input_sources=(), + final_output=True, + final_output_type="text", + owns_tokenizer=True, + requires_multimodal_data=True, + engine_output_type="latent", + sampling_constraints={ + "detokenize": True, + "stop_token_ids": [151645], + "ignore_eos": True, + }, + ), + StagePipelineConfig( + stage_id=1, + model_stage="code2wav", + execution_type=StageExecutionType.LLM_GENERATION, + input_sources=(0,), + final_output=True, + final_output_type="audio", + engine_output_type="audio", + custom_process_input_func=f"{_PROC}.llm2code2wav", + sampling_constraints={"detokenize": False}, + ), + ), +) diff --git a/vllm_omni/model_executor/models/covo_audio/prompt_utils.py b/vllm_omni/model_executor/models/covo_audio/prompt_utils.py new file mode 100644 index 000000000..99338ae8e --- /dev/null +++ b/vllm_omni/model_executor/models/covo_audio/prompt_utils.py @@ -0,0 +1,56 @@ +"""Shared Covo-Audio prompt constants and construction helpers.""" + +from __future__ import annotations + +from typing import Any + +COVO_AUDIO_INPUT_PREFIX = "<|begofcAUDIO|><|cAUDIO|><|endofcAUDIO|>" + +COVO_AUDIO_SYSTEM_PROMPT = ( + '你是"小腾",英文名是"Covo",由腾讯开发的AI助手。\n' + "1、请使用简洁、口语化的语言和用户聊天," + "你的态度积极、耐心,像一位值得信赖的朋友。\n" + "2、不要使用列表或编号,避免输出网址、表情符号和复杂的公式。\n" + "3、不评价竞争对手,不发表主观政治观点," + "针对色情类、政治类、恐怖类、歧视类、暴力类的用户问题," + "你要妥善应对潜在的安全风险,并给出幽默,情绪安抚以及安全的劝导。\n" + "请用文本和音频进行对话,交替生成5个文本token和15个音频token," + "音频部分使用发音人:default_female" +) + + +def build_covo_audio_chat_prompt( + user_content: str, + system_prompt: str = COVO_AUDIO_SYSTEM_PROMPT, +) -> str: + """Build a raw chat-template prompt string for Covo-Audio-Chat. + + Used by offline inference and tests where the prompt is passed as a + plain string (tokenization happens downstream). + """ + return ( + f"<|im_start|>system\n{system_prompt}<|im_end|>\n" + f"<|im_start|>user\n{user_content}<|im_end|>\n" + f"<|im_start|>assistant\n" + ) + + +def build_covo_audio_prompt_token_ids( + tokenizer: Any, + user_text: str, + system_prompt: str = COVO_AUDIO_SYSTEM_PROMPT, +) -> list[int]: + """Build tokenized prompt IDs for Covo-Audio-Chat. + + Used by the OpenAI-compatible serving layer where prompt_token_ids + are passed directly to the engine. + """ + messages = [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_text}, + ] + return tokenizer.apply_chat_template( + messages, + tokenize=True, + add_generation_prompt=True, + ) diff --git a/vllm_omni/model_executor/models/covo_audio/speaker_prompt/prompt_latent.npy b/vllm_omni/model_executor/models/covo_audio/speaker_prompt/prompt_latent.npy new file mode 100644 index 0000000000000000000000000000000000000000..33b9ee06997e165bc8c799e030ead764fc9aab08 GIT binary patch literal 298880 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 literal 0 HcmV?d00001 diff --git a/vllm_omni/model_executor/models/covo_audio/speaker_prompt/prompt_token.npy b/vllm_omni/model_executor/models/covo_audio/speaker_prompt/prompt_token.npy new file mode 100644 index 0000000000000000000000000000000000000000..7610be3a8fe2257c7492b7bc5093fad23f233148 GIT binary patch literal 2456 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 literal 0 HcmV?d00001 diff --git a/vllm_omni/model_executor/models/covo_audio/token2wav.py b/vllm_omni/model_executor/models/covo_audio/token2wav.py new file mode 100644 index 000000000..f6bed125c --- /dev/null +++ b/vllm_omni/model_executor/models/covo_audio/token2wav.py @@ -0,0 +1,996 @@ +# Copyright 2026 Tencent. +# token2wav: audio token codes -> waveform (inference only) +# Pipeline: Token -> Latent (flow matching) -> Waveform (BigVGAN) + +import math +from collections import OrderedDict, namedtuple + +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +from einops import rearrange +from torch import pow, sin +from torch.nn import Parameter +from torch.nn.utils import weight_norm + +# --------------- Utilities --------------- + + +class JsonHParams: + def __init__(self, **kwargs): + for k, v in kwargs.items(): + if isinstance(v, dict): + v = JsonHParams(**v) + if isinstance(v, str) and v.lower() in ["non", "none", "nil", "null"]: + v = None + self[k] = v + + def keys(self): + return self.__dict__.keys() + + def items(self): + return self.__dict__.items() + + def values(self): + return self.__dict__.values() + + def __len__(self): + return len(self.__dict__) + + def __getitem__(self, key): + return getattr(self, key) + + def __setitem__(self, key, value): + return setattr(self, key, value) + + def __contains__(self, key): + return key in self.__dict__ + + def __repr__(self): + return self.__dict__.__repr__() + + def get(self, key, default=None): + return self.__dict__.get(key, default) + + +def exists(val): + return val is not None + + +def eval_decorator(fn): + def inner(model, *args, **kwargs): + was_training = model.training + model.eval() + out = fn(model, *args, **kwargs) + model.train(was_training) + return out + + return inner + + +def init_weights(m, mean=0.0, std=0.01): + classname = m.__class__.__name__ + if classname.find("Conv") != -1: + m.weight.data.normal_(mean, std) + + +def get_padding(kernel_size, dilation=1): + return int((kernel_size * dilation - dilation) / 2) + + +def modulate(x, shift, scale): + return x * (1 + scale.unsqueeze(1)) + shift.unsqueeze(1) + + +def rotate_half(x): + x1, x2 = x.chunk(2, dim=-1) + return torch.cat((-x2, x1), dim=-1) + + +@torch.autocast(enabled=False, device_type="cuda") +def apply_rotary_pos_emb(pos, t): + return t * pos.cos() + rotate_half(t) * pos.sin() + + +if "sinc" in dir(torch): + sinc = torch.sinc +else: + + def sinc(x: torch.Tensor): + return torch.where( + x == 0, torch.tensor(1.0, device=x.device, dtype=x.dtype), torch.sin(math.pi * x) / math.pi / x + ) + + +def kaiser_sinc_filter1d(cutoff, half_width, kernel_size): + even = kernel_size % 2 == 0 + half_size = kernel_size // 2 + + delta_f = 4 * half_width + A = 2.285 * (half_size - 1) * math.pi * delta_f + 7.95 + if A > 50.0: + beta = 0.1102 * (A - 8.7) + elif A >= 21.0: + beta = 0.5842 * (A - 21) ** 0.4 + 0.07886 * (A - 21.0) + else: + beta = 0.0 + window = torch.kaiser_window(kernel_size, beta=beta, periodic=False) + + if even: + time = torch.arange(-half_size, half_size) + 0.5 + else: + time = torch.arange(kernel_size) - half_size + if cutoff == 0: + filter_ = torch.zeros_like(time) + else: + filter_ = 2 * cutoff * window * sinc(2 * cutoff * time) + filter_ /= filter_.sum() + + return filter_.view(1, 1, kernel_size) + + +# --------------- Basic Layers --------------- + + +class Dropout(nn.Module): + def __init__(self, p: float = 0.5, inplace: bool = False, force_drop: bool = False, **kwargs): + super().__init__() + if p < 0.0 or p > 1.0: + raise ValueError(f"dropout probability has to be between 0 and 1, but got {p}") + self.p = p + self.inplace = inplace + self.force_drop = force_drop + + def forward(self, x, **kwargs): + return F.dropout(x, p=self.p, training=True if self.force_drop else self.training, inplace=self.inplace) + + +class EmbeddingTable(nn.Embedding): + def __init__(self, num_embeddings: int, embedding_dim: int, pad_id=-1, **kwargs): + super().__init__(num_embeddings, embedding_dim, **kwargs) + nn.init.normal_(self.weight, 0.0, embedding_dim**-0.5) + self.pad_id = pad_id + self.output_dim = embedding_dim + + def forward(self, x): + if self.pad_id is not None: + mask = x == self.pad_id + x = x.masked_fill(mask, 0) + outputs = super().forward(x) + if self.pad_id is not None: + outputs = outputs.masked_fill(mask.unsqueeze(-1), 0.0) + return outputs + + +class Linear(nn.Linear): + def __init__( + self, + in_channels: int, + out_channels: int, + bias: bool = True, + w_init_gain: str = "linear", + activation=None, + **kwargs, + ): + super().__init__(in_channels, out_channels, bias=bias) + self.activation = activation if activation is not None else nn.Identity() + self.output_dim = out_channels + if w_init_gain is not None: + if isinstance(w_init_gain, str): + gain = nn.init.calculate_gain(w_init_gain) + else: + gain = w_init_gain + nn.init.xavier_uniform_(self.weight, gain=gain) + if bias: + nn.init.constant_(self.bias, 0.0) + + def forward(self, x, **kwargs): + return self.activation(super().forward(x)) + + +class Conv1d(nn.Conv1d): + def __init__( + self, + in_channels: int, + out_channels: int, + kernel_size: int = 1, + stride: int = 1, + dilation: int = 1, + groups: int = 1, + padding_mode: str = "zeros", + bias: bool = True, + padding=None, + causal: bool = False, + bn: bool = False, + activation=None, + w_init_gain=None, + input_transpose: bool = False, + **kwargs, + ): + self.causal = causal + if padding is None: + if causal: + padding = 0 + self.left_padding = dilation * (kernel_size - 1) + else: + padding = get_padding(kernel_size, dilation) + + super().__init__( + in_channels, + out_channels, + kernel_size, + stride=stride, + padding=padding, + dilation=dilation, + groups=groups, + padding_mode=padding_mode, + bias=bias, + ) + + self.in_channels = in_channels + self.transpose = input_transpose + self.bn = nn.BatchNorm1d(out_channels) if bn else nn.Identity() + self.activation = activation if activation is not None else nn.Identity() + if w_init_gain is not None: + nn.init.xavier_uniform_(self.weight, gain=nn.init.calculate_gain(w_init_gain)) + + def forward(self, x): + if self.transpose or x.size(1) != self.in_channels: + assert x.size(2) == self.in_channels + x = x.transpose(1, 2) + self.transpose = True + + if self.causal: + x = F.pad(x.unsqueeze(2), (self.left_padding, 0, 0, 0)).squeeze(2) + + outputs = self.activation(self.bn(super().forward(x))) + return outputs.transpose(1, 2) if self.transpose else outputs + + +class ConvTranspose1d(nn.ConvTranspose1d): + def __init__( + self, + in_channels: int, + out_channels: int, + kernel_size: int, + stride: int = 1, + output_padding: int = 0, + groups: int = 1, + bias: bool = True, + dilation: int = 1, + padding=None, + padding_mode: str = "zeros", + causal: bool = False, + input_transpose: bool = False, + **kwargs, + ): + if padding is None: + padding = 0 if causal else (kernel_size - stride) // 2 + if causal: + assert padding == 0, "padding is not allowed in causal ConvTranspose1d." + assert kernel_size == 2 * stride, "kernel_size must be equal to 2*stride in Causal ConvTranspose1d." + + super().__init__( + in_channels, + out_channels, + kernel_size, + stride=stride, + padding=padding, + output_padding=output_padding, + groups=groups, + bias=bias, + dilation=dilation, + padding_mode=padding_mode, + ) + + self.causal = causal + self.stride = stride + self.transpose = input_transpose + + def forward(self, x): + if self.transpose or x.size(1) != self.in_channels: + assert x.size(2) == self.in_channels + x = x.transpose(1, 2) + self.transpose = True + + x = super().forward(x) + if self.causal: + x = x[:, :, : -self.stride] + return x.transpose(1, 2) if self.transpose else x + + +class ConvPositionEmbed(nn.Module): + def __init__(self, hidden_size: int, kernel_size: int = 31, groups: int = 16): + super().__init__() + self.conv = Conv1d( + hidden_size, hidden_size, kernel_size, groups=groups, input_transpose=True, activation=nn.GELU() + ) + + def forward(self, x, mask=None): + if mask is not None: + mask = mask[..., None] + x = x.masked_fill(~mask, 0.0) + x = self.conv(x) + if mask is not None: + x = x.masked_fill(~mask, 0.0) + return x + + +# --------------- Anti-aliasing (BigVGAN) --------------- + + +class LowPassFilter1d(nn.Module): + def __init__( + self, + cutoff=0.5, + half_width=0.6, + stride: int = 1, + padding: bool = True, + padding_mode: str = "replicate", + kernel_size: int = 12, + ): + super().__init__() + if cutoff < -0.0: + raise ValueError("Minimum cutoff must be larger than zero.") + if cutoff > 0.5: + raise ValueError("A cutoff above 0.5 does not make sense.") + self.kernel_size = kernel_size + self.even = kernel_size % 2 == 0 + self.pad_left = kernel_size // 2 - int(self.even) + self.pad_right = kernel_size // 2 + self.stride = stride + self.padding = padding + self.padding_mode = padding_mode + filter = kaiser_sinc_filter1d(cutoff, half_width, kernel_size) + self.register_buffer("filter", filter) + + def forward(self, x): + _, C, _ = x.shape + if self.padding: + x = F.pad(x, (self.pad_left, self.pad_right), mode=self.padding_mode) + out = F.conv1d(x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C) + return out + + +class UpSample1d(nn.Module): + def __init__(self, ratio=2, kernel_size=None): + super().__init__() + self.ratio = ratio + self.kernel_size = int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size + self.stride = ratio + self.pad = self.kernel_size // ratio - 1 + self.pad_left = self.pad * self.stride + (self.kernel_size - self.stride) // 2 + self.pad_right = self.pad * self.stride + (self.kernel_size - self.stride + 1) // 2 + filter = kaiser_sinc_filter1d(cutoff=0.5 / ratio, half_width=0.6 / ratio, kernel_size=self.kernel_size) + self.register_buffer("filter", filter) + + def forward(self, x): + _, C, _ = x.shape + x = F.pad(x, (self.pad, self.pad), mode="replicate") + x = self.ratio * F.conv_transpose1d(x, self.filter.expand(C, -1, -1), stride=self.stride, groups=C) + x = x[..., self.pad_left : -self.pad_right] + return x + + +class DownSample1d(nn.Module): + def __init__(self, ratio=2, kernel_size=None): + super().__init__() + self.ratio = ratio + self.kernel_size = int(6 * ratio // 2) * 2 if kernel_size is None else kernel_size + self.lowpass = LowPassFilter1d( + cutoff=0.5 / ratio, half_width=0.6 / ratio, stride=ratio, kernel_size=self.kernel_size + ) + + def forward(self, x): + return self.lowpass(x) + + +class Activation1d(nn.Module): + def __init__( + self, activation, up_ratio: int = 2, down_ratio: int = 2, up_kernel_size: int = 12, down_kernel_size: int = 12 + ): + super().__init__() + self.up_ratio = up_ratio + self.down_ratio = down_ratio + self.act = activation + self.upsample = UpSample1d(up_ratio, up_kernel_size) + self.downsample = DownSample1d(down_ratio, down_kernel_size) + + def forward(self, x): + x = self.upsample(x) + x = self.act(x) + x = self.downsample(x) + return x + + +# --------------- Activations --------------- + + +class SnakeBeta(nn.Module): + def __init__(self, in_features, alpha=1.0, alpha_trainable=True, alpha_logscale=False): + super().__init__() + self.in_features = in_features + self.alpha_logscale = alpha_logscale + if self.alpha_logscale: + self.alpha = Parameter(torch.zeros(in_features) * alpha) + self.beta = Parameter(torch.zeros(in_features) * alpha) + else: + self.alpha = Parameter(torch.ones(in_features) * alpha) + self.beta = Parameter(torch.ones(in_features) * alpha) + self.alpha.requires_grad = alpha_trainable + self.beta.requires_grad = alpha_trainable + self.no_div_by_zero = 0.000000001 + + def forward(self, x): + alpha = self.alpha.unsqueeze(0).unsqueeze(-1) + beta = self.beta.unsqueeze(0).unsqueeze(-1) + if self.alpha_logscale: + alpha = torch.exp(alpha) + beta = torch.exp(beta) + x = x + (1.0 / (beta + self.no_div_by_zero)) * pow(sin(x * alpha), 2) + return x + + +# --------------- Attention --------------- + +AttentionConfig = namedtuple("AttentionConfig", ["enable_flash", "enable_math", "enable_mem_efficient"]) + + +class RotaryEmbedding(nn.Module): + def __init__(self, dim, theta=50000): + super().__init__() + inv_freq = 1.0 / (theta ** (torch.arange(0, dim, 2).float() / dim)) + self.register_buffer("inv_freq", inv_freq) + + @property + def device(self): + return self.inv_freq.device + + @torch.autocast(enabled=False, device_type="cuda") + def forward(self, t): + if not torch.is_tensor(t): + t = torch.arange(t, device=self.device) + t = t.type_as(self.inv_freq) + freqs = torch.einsum("i , j -> i j", t, self.inv_freq) + freqs = torch.cat((freqs, freqs), dim=-1) + return freqs + + +class MultiHeadAttention(nn.Module): + def __init__( + self, + hidden_size: int, + num_heads: int = 8, + qkv_bias: bool = False, + qk_norm: bool = False, + attn_drop: float = 0.0, + dropout: float = 0.0, + max_position_embeddings: int = 4096, + norm_layer: nn.Module = nn.LayerNorm, + rotary_bias: bool = False, + **kwargs, + ): + super().__init__() + assert hidden_size % num_heads == 0, "hidden_size should be divisible by num_heads" + self.num_heads = num_heads + self.head_dim = hidden_size // num_heads + self.scale = self.head_dim**-0.5 + self.max_position_embeddings = max_position_embeddings + self.rotary_bias = rotary_bias + + self.q_proj = Linear(hidden_size, hidden_size, bias=qkv_bias) + self.k_proj = Linear(hidden_size, hidden_size, bias=qkv_bias) + self.v_proj = Linear(hidden_size, hidden_size, bias=qkv_bias) + self.q_norm = norm_layer(self.head_dim) if qk_norm else nn.Identity() + self.k_norm = norm_layer(self.head_dim) if qk_norm else nn.Identity() + + self.attn_drop = Dropout(attn_drop) + self.o_proj = Linear(hidden_size, hidden_size) + self.o_dropout = Dropout(dropout) + + self.cpu_config = AttentionConfig(True, True, True) + device_properties = torch.cuda.get_device_properties(torch.device("cuda")) + if device_properties.major == 8 and device_properties.minor == 0: + self.cuda_config = AttentionConfig(True, True, True) + else: + self.cuda_config = AttentionConfig(False, True, True) + + if self.rotary_bias: + self.rotary = RotaryEmbedding(self.head_dim) + + def forward(self, q, k=None, v=None, mask=None): + k = k or q + v = v or q + B, L, C = q.shape + B, S, C = v.shape + if mask is not None: + if mask.ndim == 2: + assert L == S + mask = rearrange(mask, "b j -> b 1 1 j") + mask = mask.expand(-1, self.num_heads, L, -1) + elif mask.ndim == 3: + assert mask.size(1) == L and mask.size(2) == S + mask = mask.unsqueeze(1).expand(-1, self.num_heads, -1, -1) + + q, k, v = self.q_proj(q), self.k_proj(k), self.v_proj(v) + q = rearrange(q, "b n (h d) -> b h n d", h=self.num_heads) + k = rearrange(k, "b n (h d) -> b h n d", h=self.num_heads) + v = rearrange(v, "b n (h d) -> b h n d", h=self.num_heads) + q, k = self.q_norm(q), self.k_norm(k) + + config = self.cuda_config if q.is_cuda else self.cpu_config + attn_bias = torch.zeros(B, self.num_heads, L, S, dtype=q.dtype, device=q.device) + + if self.rotary_bias: + if L == S: + rotary_emb = self.rotary(L) + q, k = map(lambda x: apply_rotary_pos_emb(rotary_emb, x), (q, k)) + else: + q_rotary_emb = self.rotary(L) + k_rotary_emb = self.rotary(S) + q = apply_rotary_pos_emb(q_rotary_emb, q) + k = apply_rotary_pos_emb(k_rotary_emb, k) + + if mask is not None: + attn_bias.masked_fill_(mask.logical_not(), float("-inf")) + + with torch.backends.cuda.sdp_kernel(**config._asdict()): + out = F.scaled_dot_product_attention( + q, k, v, attn_mask=attn_bias, dropout_p=self.attn_drop.p if self.training else 0.0 + ) + + out = rearrange(out, "b h n d -> b n (h d)") + out = self.o_dropout(self.o_proj(out)) + return out + + +# --------------- DiT Modules --------------- + + +class TimestepEmbedder(nn.Module): + def __init__(self, hidden_size, frequency_embedding_size=256): + super().__init__() + self.mlp = nn.Sequential( + Linear(frequency_embedding_size, hidden_size, bias=True), + nn.SiLU(), + Linear(hidden_size, hidden_size, bias=True), + ) + self.frequency_embedding_size = frequency_embedding_size + + @staticmethod + def timestep_embedding(t, dim, max_period=10000): + half = dim // 2 + freqs = torch.exp(-math.log(max_period) * torch.arange(start=0, end=half, dtype=torch.float32) / half).to( + device=t.device + ) + args = t[:, None].float() * freqs[None] + embedding = torch.cat([torch.cos(args), torch.sin(args)], dim=-1) + if dim % 2: + embedding = torch.cat([embedding, torch.zeros_like(embedding[:, :1])], dim=-1) + return embedding + + def forward(self, t): + t_freq = self.timestep_embedding(t, self.frequency_embedding_size) + t_emb = self.mlp(t_freq) + return t_emb + + +class FinalLayer(nn.Module): + def __init__(self, hidden_size, output_size): + super().__init__() + self.adaLN_modulation = nn.Sequential(nn.SiLU(), nn.Linear(hidden_size, 2 * hidden_size, bias=True)) + self.norm = nn.LayerNorm(hidden_size, elementwise_affine=False, eps=1e-6) + self.linear = Linear(hidden_size, output_size, bias=True) + + def forward(self, x, c, mask=None): + shift, scale = self.adaLN_modulation(c).chunk(2, dim=1) + x = modulate(self.norm(x), shift, scale) + x = self.linear(x) + return x + + +# --------------- Transformer --------------- + + +class Mlp(nn.Module): + def __init__(self, hidden_size, ffn_hidden_size=4096, act_layer=nn.GELU, dropout=0.0, **kwargs): + super().__init__() + self.fc1 = Linear(hidden_size, ffn_hidden_size) + self.act = act_layer() + self.fc2 = Linear(ffn_hidden_size, hidden_size) + self.drop = Dropout(dropout) + + def forward(self, x, **kwargs): + x = self.fc1(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + return x + + +class TransformerBlock(nn.Module): + def __init__( + self, + attention: nn.Module, + ffn: nn.Module, + hidden_size: int = 1024, + modulation: bool = False, + eps: float = 1e-6, + **kwargs, + ): + super().__init__() + self.norm1 = nn.LayerNorm(hidden_size, elementwise_affine=not modulation, eps=eps) + self.norm2 = nn.LayerNorm(hidden_size, elementwise_affine=not modulation, eps=eps) + self.attn = attention + self.ffn = ffn + self.modulation = modulation + if modulation: + self.modulation_layer = nn.Sequential(nn.SiLU(), Linear(hidden_size, 6 * hidden_size, bias=True)) + nn.init.constant_(self.modulation_layer[-1].weight, 0.0) + nn.init.constant_(self.modulation_layer[-1].bias, 0.0) + + def forward(self, x, condition=None, mask=None): + if condition is None: + assert not self.modulation, "Without global condition, must set modulation to False" + else: + assert self.modulation, "With global condition, must set modulation to True" + shift_attn, scale_attn, gate_attn, shift_ffn, scale_ffn, gate_ffn = self.modulation_layer(condition).chunk( + 6, dim=1 + ) + + if condition is not None: + x = x + gate_attn.unsqueeze(1) * self.attn(modulate(self.norm1(x), shift_attn, scale_attn), mask=mask) + else: + x = x + self.attn(self.norm1(x), mask=mask) + + if condition is not None: + x = x + gate_ffn.unsqueeze(1) * self.ffn(modulate(self.norm2(x), shift_ffn, scale_ffn)) + else: + x = x + self.ffn(self.norm2(x), mask=mask) + return x + + +# --------------- Flow Matching: Token -> Latent --------------- + + +class Token2latentFlowMatching(nn.Module): + def __init__(self, config): + super().__init__() + self.config = config + self.model_dim = config.transformer.hidden_size + self.token_input_dim = config.get("token_input_dim", self.model_dim) + self.target_dim = config.z_dim + + self.spkr_embed_dim = config.get("spkr_embed_dim", 512) + self.cond_proj = Linear(self.model_dim + self.spkr_embed_dim, self.model_dim) + self.token_pad_id = -1 + if config.upsample_factor > 1: + self.token_proj = nn.Sequential( + Linear(self.token_input_dim, self.model_dim, bias=True), + ConvTranspose1d( + self.model_dim, + self.model_dim, + stride=config.upsample_factor, + kernel_size=config.upsample_factor * 2, + ), + ) + else: + self.token_proj = Linear(self.token_input_dim, self.model_dim) + + self.transformer_input_proj = Linear(self.model_dim + self.target_dim * 2, self.model_dim) + self.time_embedder = TimestepEmbedder(self.model_dim) + self.conv_embed = ConvPositionEmbed(hidden_size=self.model_dim, kernel_size=31, groups=16) + self.blocks = nn.ModuleList() + for _ in range(config.transformer.num_layers): + attn_block = MultiHeadAttention(**config.transformer) + ffn_block = Mlp(act_layer=lambda: nn.GELU(approximate="tanh"), **config.transformer) + self.blocks.append(TransformerBlock(attn_block, ffn_block, **config.transformer)) + self.output_layer = FinalLayer(config.transformer.hidden_size, self.target_dim) + + def cond_mask_spkr_embed(self, x, spkr_embed): + b, device = x.size(0), x.device + if not exists(spkr_embed): + spkr_embed = torch.zeros(b, self.spkr_embed_dim, device=device, dtype=x.dtype) + return spkr_embed + + def vectorfield_forward(self, inputs, times, self_attn_mask, g_cond=None): + t = self.time_embedder(times) + if g_cond is None: + c = t + else: + cond_inp = torch.cat([t, g_cond], dim=-1) + c = self.cond_proj(cond_inp) + + ut = self.transformer_input_proj(inputs) + ut = self.conv_embed(ut, mask=self_attn_mask) + ut + + for block in self.blocks: + ut = block(ut, c, mask=self_attn_mask) + ut = self.output_layer(ut, c) + return ut + + @eval_decorator + @torch.no_grad() + def inference( + self, + *, + token: torch.Tensor, + prefix_target: torch.Tensor | None = None, + spkr_embed: torch.Tensor | None = None, + s_steps: int | None = 10, + cfg_alpha: float | None = 2.0, + rescale_logits: bool = False, + **kwargs, + ): + b, device = token.size(0), token.device + assert b == 1, "Only support batch_size == 1 when inference" + + token = self.token_proj(token) + ge = self.cond_mask_spkr_embed(token, spkr_embed) + tgt_lens = token.size(1) + latent_cond = torch.zeros(b, tgt_lens, self.target_dim).to(device) + if prefix_target is not None: + latent_cond[:, : prefix_target.size(1), :] = prefix_target + sample, trajectory = self.sample( + tokens=token, audio=latent_cond, steps=s_steps, alpha=cfg_alpha, g_cond=ge, rescale_logits=rescale_logits + ) + return sample + + def sample(self, tokens, audio, steps, alpha=None, g_cond=None, rescale_logits=False): + noise = torch.randn([audio.size(0), audio.shape[1], self.target_dim], device=audio.device) + times = torch.linspace(0, 1, steps, device=audio.device) + + def solver(t, z): + if alpha is None: + output = torch.cat([tokens, audio, z], dim=-1) + return self.vectorfield_forward(inputs=output, times=t.unsqueeze(0), self_attn_mask=None, g_cond=g_cond) + tokens_empty = torch.zeros(*audio.shape[:2], self.model_dim, device=tokens.device, dtype=tokens.dtype) + audio_empty = audio + tokens_t = torch.cat([tokens_empty, tokens], dim=0) + audio_t = torch.cat([audio_empty, audio], dim=0) + audio_noizy_t = torch.cat([z, z], dim=0) + t_t = torch.stack([t, t], dim=0) + c = g_cond + if g_cond is not None: + c = torch.cat([g_cond, g_cond], dim=0) + output = torch.cat([tokens_t, audio_t, audio_noizy_t], dim=-1) + predicted_mix = self.vectorfield_forward(inputs=output, times=t_t, self_attn_mask=None, g_cond=c) + predicted_conditioned = predicted_mix[1].unsqueeze(0) + predicted_unconditioned = predicted_mix[0].unsqueeze(0) + + prediction = predicted_conditioned + (predicted_conditioned - predicted_unconditioned) * alpha + prediction_rescaled = predicted_conditioned.std() * (prediction / prediction.std()) + if rescale_logits: + return prediction_rescaled + else: + return prediction + + try: + from torchdiffeq import odeint + except ImportError: + raise ImportError("Covo-Audio code2wav requires `torchdiffeq`. Install it with: pip install torchdiffeq") + trajectory = odeint(solver, noise, times, atol=1e-5, rtol=1e-5, method="midpoint") + return trajectory[-1], trajectory + + +class Token2latentFlowMatchingWithEmbed(Token2latentFlowMatching): + def __init__(self, config, **kwargs): + super().__init__(config) + self.vocab_size = config.token_vocab_size + self.token_embedding = EmbeddingTable( + num_embeddings=self.vocab_size, embedding_dim=self.token_input_dim, pad_id=self.token_pad_id + ) + + def inference( + self, *, token, prefix_target=None, spkr_embed=None, s_steps=10, cfg_alpha=2, rescale_logits=False, **kwargs + ): + token = self.token_embedding(token) + return super().inference( + token=token, + prefix_target=prefix_target, + spkr_embed=spkr_embed, + s_steps=s_steps, + cfg_alpha=cfg_alpha, + rescale_logits=rescale_logits, + **kwargs, + ) + + +# --------------- Vocoder: Latent -> Waveform (BigVGAN) --------------- + + +class AMPBlock1(torch.nn.Module): + def __init__(self, h, channels, kernel_size=3, dilation=(1, 3, 5), causal=True): + super().__init__() + self.h = h + + self.convs1 = nn.ModuleList( + [ + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0], causal=causal)), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1], causal=causal)), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[2], causal=causal)), + ] + ) + self.convs1.apply(init_weights) + + self.convs2 = nn.ModuleList( + [ + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1, causal=causal)), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1, causal=causal)), + weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1, causal=causal)), + ] + ) + self.convs2.apply(init_weights) + + self.num_layers = len(self.convs1) + len(self.convs2) + + self.activations = nn.ModuleList( + [ + Activation1d(activation=SnakeBeta(channels, alpha_logscale=h.snake_logscale)) + for _ in range(self.num_layers) + ] + ) + + def forward(self, x): + acts1, acts2 = self.activations[::2], self.activations[1::2] + for c1, c2, a1, a2 in zip(self.convs1, self.convs2, acts1, acts2): + xt = a1(x) + xt = c1(xt) + xt = a2(xt) + xt = c2(xt) + x = xt + x + return x + + +class BigVGANFlowVAE(nn.Module): + def __init__(self, h): + super().__init__() + self.config = h + self.h = h + causal = h.causal + self.hop_size = np.prod(h.downsample_rates) + + self.num_kernels = len(h.resblock_kernel_sizes) + self.num_upsamples = len(h.upsample_rates) + + self.conv_pre = weight_norm(Conv1d(h.latent_dim, h.upsample_initial_channel, 7, 1, causal=False)) + + self.ups = nn.ModuleList() + for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)): + self.ups.append( + nn.ModuleList( + [ + weight_norm( + ConvTranspose1d( + h.upsample_initial_channel // (2**i), + h.upsample_initial_channel // (2 ** (i + 1)), + k, + u, + causal=causal, + ) + ) + ] + ) + ) + + self.resblocks = nn.ModuleList() + for i in range(len(self.ups)): + ch = h.upsample_initial_channel // (2 ** (i + 1)) + for j, (k, d) in enumerate(zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes)): + self.resblocks.append(AMPBlock1(h, ch, k, d, causal=causal)) + + activation_post = SnakeBeta(ch, alpha_logscale=h.snake_logscale) + self.activation_post = Activation1d(activation=activation_post) + + self.conv_post = weight_norm(Conv1d(ch, 1, 7, 1, causal=causal)) + + for i in range(len(self.ups)): + self.ups[i].apply(init_weights) + self.conv_post.apply(init_weights) + + def inference_from_latents(self, x, do_sample=True, noise_scale=1.0): + if self.h.use_vae and do_sample: + assert x.size(1) == self.h.latent_dim * 2, f"Input must be like [B, D, H], got {x.shape}" + m_q, logs_q = torch.split(x, self.h.latent_dim, dim=1) + x = m_q + torch.randn_like(m_q) * torch.exp(logs_q) * noise_scale + else: + assert x.size(1) == self.h.latent_dim, f"Input must be like [B, D, H], got {x.shape}" + + x = self.conv_pre(x) + + for i in range(self.num_upsamples): + for i_up in range(len(self.ups[i])): + x = self.ups[i][i_up](x) + xs = None + for j in range(self.num_kernels): + if xs is None: + xs = self.resblocks[i * self.num_kernels + j](x) + else: + xs += self.resblocks[i * self.num_kernels + j](x) + x = xs / self.num_kernels + + x = self.activation_post(x) + x = self.conv_post(x) + x = torch.tanh(x) + return x + + +# --------------- Token2WavDecoder --------------- + + +class Token2WavDecoder(nn.Module): + def __init__(self, config, **kwargs): + super().__init__() + self.config = config + + self.wavegan = BigVGANFlowVAE(config.wavegan) + self.wavegan_hop_size = np.prod(config.wavegan.downsample_rates) + self.global_mean_var = getattr(config, "global_mean_var", None) + if self.global_mean_var is not None: + mean_var_data = torch.from_numpy(np.load(self.global_mean_var)).float().squeeze() + global_mean, global_var = mean_var_data.chunk(2, 0) + self.register_buffer("global_mean", global_mean) + self.register_buffer("global_var", global_var) + + self.token2latent = Token2latentFlowMatchingWithEmbed(config.token2latent) + + self.upsample_factor = self.token2latent.config.get("upsample_factor", 1) + self.wav_input_sr = config.get("wav_input_sr", 24000) + + self.trainable_module = ["wavegan", "token2latent"] + + def state_dict(self): + param_dict = OrderedDict() + for name in self.trainable_module: + state = self.get_submodule(name).state_dict(prefix=f"{name}.") + param_dict.update(state) + return param_dict + + def load_state_dict(self, param_dict): + for name in self.trainable_module: + module_state = OrderedDict() + name_len = len(name) + for k, v in param_dict.items(): + if k.startswith(f"{name}."): + new_k = k[name_len + 1 :] + module_state[new_k] = v + self.get_submodule(name).load_state_dict(module_state, strict=False) + + @torch.no_grad() + def preprocess_infer_data(self, data): + zero_spkr = data.get("zero_spkr", False) + + token = data["target_token"] + prefix_target = None + res_prefix_len = 0 + prompt_token = data.get("prompt_token", None) + prompt_latent = data.get("prompt_latent", None) + if exists(prompt_token): + token = torch.cat([prompt_token, token], dim=1) + if exists(prompt_latent): + prefix_target = prompt_latent + res_prefix_len = prompt_latent.shape[1] + + spkr_embed = None + if not zero_spkr: + spkr_embed = data.get("spkr_embed", None) + res = {"token": token, "prefix_target": prefix_target, "spkr_embed": spkr_embed} + return res, res_prefix_len + + @eval_decorator + @torch.no_grad() + def inference(self, data, **kwargs): + infer_data, prefix_len = self.preprocess_infer_data(data) + prefix_target = infer_data["prefix_target"] + res_latents = self.token2latent.inference(**infer_data, **kwargs) + if self.global_mean_var is not None: + res_latents = self.global_mean + res_latents * torch.sqrt(self.global_var) + if exists(prefix_target): + prefix_target = self.global_mean + prefix_target * torch.sqrt(self.global_var) + if exists(prefix_target): + res_latents[:, : prefix_target.shape[1]] = prefix_target + res_latents = res_latents[:, prefix_len:] + audio = self.wavegan.inference_from_latents(res_latents.transpose(1, 2), do_sample=False) + return audio diff --git a/vllm_omni/model_executor/models/registry.py b/vllm_omni/model_executor/models/registry.py index 5c2ef65d0..cc900d471 100644 --- a/vllm_omni/model_executor/models/registry.py +++ b/vllm_omni/model_executor/models/registry.py @@ -174,6 +174,32 @@ _OMNI_MODELS = { "VoxtralTTSAudioGenerationForConditionalGeneration", ), "VoxtralTTSAudioTokenizer": ("voxtral_tts", "voxtral_tts_audio_tokenizer", "VoxtralTTSAudioTokenizer"), + ## covo_audio + "CovoAudioForCausalLM": ( + "covo_audio", + "covo_audio", + "CovoAudioForConditionalGeneration", + ), + "CovoAudioForConditionalGeneration": ( + "covo_audio", + "covo_audio", + "CovoAudioForConditionalGeneration", + ), + "CovoAudioModel": ( + "covo_audio", + "covo_audio", + "CovoAudioForConditionalGeneration", + ), + "CovoAudioLLMModel": ( + "covo_audio", + "covo_audio_llm", + "CovoAudioLLMForConditionalGeneration", + ), + "CovoAudioCode2WavModel": ( + "covo_audio", + "covo_audio_code2wav", + "CovoAudioCode2WavForConditionalGeneration", + ), ## MOSS-TTS-Nano "MossTTSNanoForCausalLM": ( "moss_tts_nano", diff --git a/vllm_omni/model_executor/stage_input_processors/covo_audio.py b/vllm_omni/model_executor/stage_input_processors/covo_audio.py new file mode 100644 index 000000000..a0a964bdd --- /dev/null +++ b/vllm_omni/model_executor/stage_input_processors/covo_audio.py @@ -0,0 +1,33 @@ +# Copyright 2026 Tencent. +from typing import Any + +from vllm_omni.inputs.data import OmniTokensPrompt +from vllm_omni.model_executor.models.covo_audio.config_covo_audio import COVO_AUDIO_TOKEN_INDEX + + +def llm2code2wav( + source_outputs: list[Any], + prompt: Any = None, + requires_multimodal_data: bool = False, +) -> list[OmniTokensPrompt]: + talker_outputs = source_outputs + code2wav_inputs = [] + + for i, talker_output in enumerate(talker_outputs): + output = talker_output.outputs[0] + token_ids = output.token_ids + + audio_codes = [t - COVO_AUDIO_TOKEN_INDEX for t in token_ids if t >= COVO_AUDIO_TOKEN_INDEX] + + if not audio_codes: + audio_codes = [-1] + + code2wav_inputs.append( + OmniTokensPrompt( + prompt_token_ids=audio_codes, + multi_modal_data=None, + mm_processor_kwargs=None, + ) + ) + + return code2wav_inputs