[Bugfix] Ming-omni-tts: generalize dict checks to Mapping (#4397)
Signed-off-by: akshatvishu <akshatnayak197@gmail.com>
This commit is contained in:
1 parent
9bc8705c98
commit
d4f2a49a68
2 files changed
+19
-16
No files matched your search
@@ -5,6 +5,8 @@
|
||||
|
||||
import asyncio
|
||||
import uuid
|
||||
from collections.abc import Mapping
|
||||
from typing import Any
|
||||
|
||||
import numpy as np
|
||||
import pytest
|
||||
@@ -102,8 +104,8 @@ def _flatten_audio(audio) -> torch.Tensor:
|
||||
return torch.as_tensor(audio, dtype=torch.float32).reshape(-1).cpu()
|
||||
|
||||
|
||||
def _extract_audio(multimodal_output: dict) -> torch.Tensor:
|
||||
assert isinstance(multimodal_output, dict), f"Expected dict, got {type(multimodal_output)}"
|
||||
def _extract_audio(multimodal_output: Mapping[str, Any]) -> torch.Tensor:
|
||||
assert isinstance(multimodal_output, Mapping), f"Expected Mapping, got {type(multimodal_output)}"
|
||||
audio = multimodal_output.get("audio", multimodal_output.get("model_outputs"))
|
||||
assert audio is not None, f"No audio output found, keys={list(multimodal_output.keys())}"
|
||||
waveform = _flatten_audio(audio)
|
||||
@@ -112,7 +114,7 @@ def _extract_audio(multimodal_output: dict) -> torch.Tensor:
|
||||
return waveform
|
||||
|
||||
|
||||
def _extract_sample_rate(multimodal_output: dict) -> int:
|
||||
def _extract_sample_rate(multimodal_output: Mapping[str, Any]) -> int:
|
||||
sample_rate = multimodal_output.get("sr")
|
||||
if sample_rate is None:
|
||||
raise RuntimeError("Expected multimodal_output['sr']")
|
||||
@@ -133,29 +135,29 @@ def _extract_final_audio_outputs(outputs):
|
||||
if request_output is None:
|
||||
continue
|
||||
multimodal_output = getattr(request_output, "multimodal_output", None)
|
||||
if isinstance(multimodal_output, dict):
|
||||
if isinstance(multimodal_output, Mapping):
|
||||
final_outputs.append(item)
|
||||
continue
|
||||
completions = getattr(request_output, "outputs", None) or []
|
||||
if any(isinstance(getattr(completion, "multimodal_output", None), dict) for completion in completions):
|
||||
if any(isinstance(getattr(completion, "multimodal_output", None), Mapping) for completion in completions):
|
||||
final_outputs.append(item)
|
||||
return final_outputs
|
||||
|
||||
|
||||
def _extract_multimodal_output(output) -> dict:
|
||||
def _extract_multimodal_output(output) -> Mapping[str, Any]:
|
||||
multimodal_output = getattr(output, "multimodal_output", None)
|
||||
if isinstance(multimodal_output, dict):
|
||||
if isinstance(multimodal_output, Mapping):
|
||||
return multimodal_output
|
||||
|
||||
request_output = getattr(output, "request_output", None)
|
||||
if request_output is not None:
|
||||
multimodal_output = getattr(request_output, "multimodal_output", None)
|
||||
if isinstance(multimodal_output, dict):
|
||||
if isinstance(multimodal_output, Mapping):
|
||||
return multimodal_output
|
||||
completions = getattr(request_output, "outputs", None) or []
|
||||
for completion in completions:
|
||||
multimodal_output = getattr(completion, "multimodal_output", None)
|
||||
if isinstance(multimodal_output, dict):
|
||||
if isinstance(multimodal_output, Mapping):
|
||||
return multimodal_output
|
||||
|
||||
raise AssertionError("No multimodal audio output found in Ming generate results")
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
||||
from __future__ import annotations
|
||||
|
||||
from collections.abc import Mapping
|
||||
from typing import Any
|
||||
|
||||
import torch
|
||||
@@ -33,8 +34,8 @@ MING_FINAL_DECODE_STEP_KEY = "ming_final_decode_step"
|
||||
MING_STOP_REASON_BY_CODE = {code: reason for reason, code in MING_STOP_REASON_CODES.items()}
|
||||
|
||||
|
||||
def _extract_last_patch(pooling_output: dict[str, Any] | None) -> torch.Tensor | None:
|
||||
if not isinstance(pooling_output, dict):
|
||||
def _extract_last_patch(pooling_output: Mapping[str, Any] | None) -> torch.Tensor | None:
|
||||
if not isinstance(pooling_output, Mapping):
|
||||
return None
|
||||
has_patch = pooling_output.get("ming_has_patch")
|
||||
patch = pooling_output.get("ming_latent_patch")
|
||||
@@ -54,8 +55,8 @@ def _extract_last_patch(pooling_output: dict[str, Any] | None) -> torch.Tensor |
|
||||
return patch.to(torch.float32).cpu()
|
||||
|
||||
|
||||
def _extract_all_patches(pooling_output: dict[str, Any] | None) -> torch.Tensor | None:
|
||||
if not isinstance(pooling_output, dict):
|
||||
def _extract_all_patches(pooling_output: Mapping[str, Any] | None) -> torch.Tensor | None:
|
||||
if not isinstance(pooling_output, Mapping):
|
||||
return None
|
||||
has_patch = pooling_output.get("ming_has_patch")
|
||||
patch = pooling_output.get("ming_latent_patch")
|
||||
@@ -78,8 +79,8 @@ def _extract_all_patches(pooling_output: dict[str, Any] | None) -> torch.Tensor
|
||||
return patch.to(torch.float32).cpu()
|
||||
|
||||
|
||||
def _extract_last_value(pooling_output: dict[str, Any] | None, key: str) -> Any:
|
||||
if not isinstance(pooling_output, dict):
|
||||
def _extract_last_value(pooling_output: Mapping[str, Any] | None, key: str) -> Any:
|
||||
if not isinstance(pooling_output, Mapping):
|
||||
return None
|
||||
value = pooling_output.get(key)
|
||||
if value is None:
|
||||
@@ -118,7 +119,7 @@ def _decode_stop_reason(value: Any) -> str | None:
|
||||
def _get_async_chunk_config(transfer_manager: Any) -> tuple[int, int]:
|
||||
connector = getattr(transfer_manager, "connector", None)
|
||||
raw_cfg = getattr(connector, "config", {}) or {}
|
||||
cfg = raw_cfg.get("extra", raw_cfg) if isinstance(raw_cfg, dict) else {}
|
||||
cfg = raw_cfg.get("extra", raw_cfg) if isinstance(raw_cfg, Mapping) else {}
|
||||
if "latent_chunk_size" not in cfg:
|
||||
logger.warning(
|
||||
"Ming async chunk config missing latent_chunk_size, using fallback value %s",
|
||||
|
||||
Reference in new issue
Block a user