25 lines
679 B
Python
25 lines
679 B
Python
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)
|