__init__.py 2.16 KB
Newer Older
1
2
import enum
from dataclasses import dataclass
3
from typing import TYPE_CHECKING, List, Optional, Union
4
5
6

import msgspec

7
8
9
10
11
if TYPE_CHECKING:
    from vllm.lora.request import LoRARequest
    from vllm.multimodal import MultiModalKwargs
    from vllm.multimodal.inputs import PlaceholderRange
    from vllm.sampling_params import SamplingParams
12
13


14
15
@dataclass
class EngineCoreRequest:
16
17
18
19
20
21

    # NOTE: prompt and prompt_token_ids should be DecoderOnlyInput,
    # but this object is currently not playing well with msgspec
    # due to circular imports and typing we have in data.py

    request_id: str
22
23
    # NOTE(ywang96): original text prompt is needed when a request is added to
    # Detokenizer, but set to None when it is added to EngineCoreClient.
24
25
    prompt: Optional[str]
    prompt_token_ids: List[int]
26
    mm_inputs: Optional[List[Optional["MultiModalKwargs"]]]
27
    mm_hashes: Optional[List[str]]
28
29
    mm_placeholders: Optional[List["PlaceholderRange"]]
    sampling_params: "SamplingParams"
30
31
    eos_token_id: Optional[int]
    arrival_time: float
32
    lora_request: Optional["LoRARequest"]
33
34


35
36
37
38
39
class EngineCoreOutput(
        msgspec.Struct,
        array_like=True,  # type: ignore[call-arg]
        omit_defaults=True,  # type: ignore[call-arg]
        gc=False):  # type: ignore[call-arg]
40
41
42
43
44
45
46
47

    request_id: str
    new_token_ids: List[int]
    finished: bool
    finish_reason: Optional[str] = None
    stop_reason: Union[int, str, None] = None


48
49
50
51
52
class EngineCoreOutputs(
        msgspec.Struct,
        array_like=True,  # type: ignore[call-arg]
        omit_defaults=True,  # type: ignore[call-arg]
        gc=False):  # type: ignore[call-arg]
53
54
55
56
57
58
59
60

    #NOTE(Nick): We could consider ways to make this more compact,
    # e.g. columnwise layout and using an int enum for finish/stop reason

    # [num_reqs]
    outputs: List[EngineCoreOutput]


61
62
63
64
65
@dataclass
class EngineCoreProfile:
    is_start: bool


66
67
68
69
70
71
72
class EngineCoreRequestType(enum.Enum):
    """
    Request types defined as hex byte strings, so it can be sent over sockets
    without separate encoding step.
    """
    ADD = b'\x00'
    ABORT = b'\x01'
73
    PROFILE = b'\x02'
74
75
76


EngineCoreRequestUnion = Union[EngineCoreRequest, EngineCoreProfile, List[str]]