from typing import Optional, Any
import numpy as np

from .base import ModelManagerBase
from models.config import ModelConfig


class ModelManager(ModelManagerBase):
    async def load_model(self, config: ModelConfig) -> bool:
        raise NotImplementedError

    async def unload_model(self, model_name: str) -> bool:
        raise NotImplementedError

    async def get_model(self, model_name: str) -> Optional[Any]:
        raise NotImplementedError

    async def run_inference(
        self, model_name: str, inputs: dict[str, np.ndarray]
    ) -> dict[str, np.ndarray]:
        raise NotImplementedError

    async def warmup_model(
        self, model_name: str, iterations: int = 3
    ) -> bool:
        raise NotImplementedError

    async def get_loaded_models(self) -> list[str]:
        raise NotImplementedError

    async def get_model_info(self, model_name: str) -> Optional[dict]:
        raise NotImplementedError

