44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
|
|
"""Provides lazy import of the vllm.tokenizers.mistral module."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, TypeGuard
|
|
|
|
from vllm.tokenizers import TokenizerLike
|
|
from vllm.utils.import_utils import LazyLoader
|
|
|
|
if TYPE_CHECKING:
|
|
# if type checking, eagerly import the module
|
|
import vllm.tokenizers.mistral as mt
|
|
import vllm.tool_parsers.mistral_tool_parser as mtp
|
|
else:
|
|
mt = LazyLoader("mt", globals(), "vllm.tokenizers.mistral")
|
|
mtp = LazyLoader("mtp", globals(), "vllm.tool_parsers.mistral_tool_parser")
|
|
|
|
|
|
def is_mistral_tokenizer(obj: TokenizerLike | None) -> TypeGuard[mt.MistralTokenizer]:
|
|
"""Return true if the tokenizer is a MistralTokenizer instance."""
|
|
cls = type(obj)
|
|
# Check for special class attribute, this avoids importing the class to
|
|
# do an isinstance() check. If the attribute is True, do an isinstance
|
|
# check to be sure we have the correct type.
|
|
return bool(
|
|
getattr(cls, "IS_MISTRAL_TOKENIZER", False)
|
|
and isinstance(obj, mt.MistralTokenizer)
|
|
)
|
|
|
|
|
|
def is_mistral_tool_parser(cls: type | None) -> bool:
|
|
"""Return true if *cls* is (a subclass of) MistralToolParser.
|
|
|
|
Uses a class attribute check so that importing
|
|
``vllm.tool_parsers.mistral_tool_parser`` — and transitively
|
|
``mistral_common`` — is not required.
|
|
"""
|
|
return bool(
|
|
getattr(cls, "IS_MISTRAL_TOOL_PARSER", False)
|
|
and issubclass(cls, mtp.MistralToolParser) # type: ignore[arg-type]
|
|
)
|