from __future__ import annotations
from collections.abc import Callable
from dataclasses import dataclass, field
from typing import TYPE_CHECKING, Any, Generic, TypeAlias, TypeVar
import torch
from torch import nn
from .. import p2p_pb2
from ..accelerators import AcceleratorBackend, CudaAcceleratorBackend
from ..client import MxClientBase
if TYPE_CHECKING:
from sglang.srt.configs.load_config import LoadConfig as SglangLoadConfig
from sglang.srt.configs.model_config import ModelConfig as SglangModelConfig
from vllm.config import ModelConfig as VllmModelConfig
from vllm.config.load import LoadConfig as VllmLoadConfig
from ..adapter import EngineAdapter
from ..nixl_transfer import NixlTransferManager
from ..vmm import VmmArena
EngineModelConfig: TypeAlias = VllmModelConfig | SglangModelConfig
EngineLoadConfig: TypeAlias = VllmLoadConfig | SglangLoadConfig
else:
EngineModelConfig = object
EngineLoadConfig = object
T = TypeVar("T")
@dataclass
class LoadResult(Generic[T]):
value: T
model: nn.Module | None = None
publishable: bool = True
metadata: dict[str, Any] = field(default_factory=dict)
@property
def model_for_publish(self) -> nn.Module | None:
return self.model if self.publishable else None
@dataclass
class LoadContext:
model_config: EngineModelConfig
load_config: EngineLoadConfig
target_device: torch.device
global_rank: int
worker_rank: int
local_rank: int
device_id: int
identity: p2p_pb2.SourceIdentity
mx_client: MxClientBase
worker_id: str
mx_server_url: str | None = None
node_rank: int = 0
head_addr: str | None = None
adapter: EngineAdapter | None = None
accelerator_backend: AcceleratorBackend = field(
default_factory=CudaAcceleratorBackend
)
p2p_enabled: bool = True
desired_version_uid: str | None = None
source_ready_fn: Callable[[], bool] | None = None
nixl_manager: NixlTransferManager | None = None
tensors: dict[str, torch.Tensor] = field(default_factory=dict)
vmm_arena: VmmArena | None = None