from typing import Dict, Type from llm_eval.base import BaseEvaluator class EvalFactory: _registry: Dict[str, Type[BaseEvaluator]] = {} @classmethod def register(cls, name: str): def decorator(klass: Type[BaseEvaluator]): cls._registry[name] = klass return klass return decorator @classmethod def create(cls, name: str, **kwargs) -> BaseEvaluator: if name not in cls._registry: raise KeyError(f"Unknown evaluator '{name}'. Available: {list(cls._registry)}") return cls._registry[name](**kwargs) @classmethod def list_registered(cls) -> list: return list(cls._registry)