from __future__ import annotations

from abc import ABC, abstractmethod
from typing import Mapping, Sequence


class Router(ABC):
    """Routing interface used by the gateway pipeline."""

    @abstractmethod
    def choose(
        self,
        admissible_providers: Sequence[str],
        *,
        session_id: str | None = None,
    ) -> tuple[str, Mapping[str, float], bool]:
        """Return (provider, score_components, sticky) for the request."""


__all__ = ["Router"]
