# SPDX-License-Identifier: Apache-2.0
from abc import ABC, abstractmethod

import torch.nn as nn

from vllm.config import LoadConfig, ModelConfig, VllmConfig


class BaseModelLoader(ABC):
    """Base class for model loaders."""

    def __init__(self, load_config: LoadConfig):
        self.load_config = load_config

    @abstractmethod
    def download_model(self, model_config: ModelConfig) -> None:
        """Download a model so that it can be immediately loaded."""
        raise NotImplementedError

    @abstractmethod
    def load_model(self, *, vllm_config: VllmConfig,
                   model_config: ModelConfig) -> nn.Module:
        """Load a model with the given configurations."""
        raise NotImplementedError
