request.py 2.83 KB
Newer Older
1
# SPDX-License-Identifier: Apache-2.0
2
# SPDX-FileCopyrightText: Copyright contributors to the vLLM project
3

4
import warnings
5

6
7
import msgspec

8

9
class LoRARequest(
10
11
12
13
    msgspec.Struct,
    omit_defaults=True,  # type: ignore[call-arg]
    array_like=True,
):  # type: ignore[call-arg]
14
15
16
17
18
19
    """
    Request for a LoRA adapter.

    lora_int_id must be globally unique for a given adapter.
    This is currently not enforced in vLLM.
    """
20

21
22
    lora_name: str
    lora_int_id: int
23
    lora_path: str = ""
24
25
26
27
    lora_local_path: str | None = msgspec.field(default=None)
    long_lora_max_len: int | None = None
    base_model_name: str | None = msgspec.field(default=None)
    tensorizer_config_dict: dict | None = None
28

29
    def __post_init__(self):
30
31
        if self.lora_int_id < 1:
            raise ValueError(f"id must be > 0, got {self.lora_int_id}")
32
        if self.lora_local_path:
33
34
35
36
37
            warnings.warn(
                "The 'lora_local_path' attribute is deprecated "
                "and will be removed in a future version. "
                "Please use 'lora_path' instead.",
                DeprecationWarning,
38
39
                stacklevel=2,
            )
40
41
42
43
44
45
            if not self.lora_path:
                self.lora_path = self.lora_local_path or ""

        # Ensure lora_path is not empty
        assert self.lora_path, "lora_path cannot be empty"

46
47
48
    @property
    def adapter_id(self):
        return self.lora_int_id
49

50
51
52
    @property
    def name(self):
        return self.lora_name
53

54
55
56
57
    @property
    def path(self):
        return self.lora_path

58
59
    @property
    def local_path(self):
60
61
62
63
64
        warnings.warn(
            "The 'local_path' attribute is deprecated "
            "and will be removed in a future version. "
            "Please use 'path' instead.",
            DeprecationWarning,
65
66
            stacklevel=2,
        )
67
68
69
70
71
72
73
74
75
        return self.lora_path

    @local_path.setter
    def local_path(self, value):
        warnings.warn(
            "The 'local_path' attribute is deprecated "
            "and will be removed in a future version. "
            "Please use 'path' instead.",
            DeprecationWarning,
76
77
            stacklevel=2,
        )
78
        self.lora_path = value
79
80
81
82
83
84
85

    def __eq__(self, value: object) -> bool:
        """
        Overrides the equality method to compare LoRARequest
        instances based on lora_name. This allows for identification
        and comparison lora adapter across engines.
        """
86
        return isinstance(value, self.__class__) and self.lora_name == value.lora_name
87
88
89
90
91
92
93
94
95

    def __hash__(self) -> int:
        """
        Overrides the hash method to hash LoRARequest instances
        based on lora_name. This ensures that LoRARequest instances
        can be used in hash-based collections such as sets and dictionaries,
        identified by their names across engines.
        """
        return hash(self.lora_name)