Signed-off-by: tunglinwood <tunglinwood@gmail.com> Signed-off-by: tunglinwood <tomwu.tunglin@gmail.com> Signed-off-by: tunglinwood <113751333+tunglinwood@users.noreply.github.com>
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
from typing import Any, cast
|
|
|
|
from vllm.config import VllmConfig
|
|
from vllm.tokenizers.kimi_audio import KimiAudioTokenizer
|
|
from vllm.tokenizers.registry import get_tokenizer
|
|
|
|
from .hf import HfRenderer, HfTokenizer
|
|
|
|
|
|
class KimiAudioRenderer(HfRenderer):
|
|
"""Renderer for Kimi-Audio models.
|
|
|
|
This renderer uses HfRenderer internally with a custom TikToken tokenizer.
|
|
"""
|
|
|
|
@classmethod
|
|
def from_config( # type: ignore[override]
|
|
cls,
|
|
config: VllmConfig,
|
|
tokenizer_kwargs: dict[str, Any],
|
|
) -> "HfRenderer":
|
|
"""Create an HfRenderer instance for Kimi-Audio models."""
|
|
model_config = config.model_config
|
|
if model_config.skip_tokenizer_init:
|
|
tokenizer = None
|
|
else:
|
|
# Extract tokenizer_name from kwargs (already processed by
|
|
# tokenizer_args_from_config for ModelScope/GGUF/etc)
|
|
tokenizer_name = tokenizer_kwargs.pop(
|
|
"tokenizer_name", model_config.tokenizer
|
|
)
|
|
# Remove tokenizer_cls from kwargs to avoid duplicate argument
|
|
tokenizer_kwargs = {
|
|
k: v for k, v in tokenizer_kwargs.items() if k != "tokenizer_cls"
|
|
}
|
|
# Use get_tokenizer directly instead of cached_get_tokenizer
|
|
# (KimiAudioTokenizer doesn't work with get_cached_tokenizer)
|
|
tokenizer = cast(
|
|
HfTokenizer,
|
|
get_tokenizer(
|
|
tokenizer_name,
|
|
tokenizer_cls=KimiAudioTokenizer, # type: ignore[arg-type]
|
|
**tokenizer_kwargs,
|
|
),
|
|
)
|
|
|
|
return HfRenderer(config, tokenizer)
|