from ..chunking.chunking_strategy import ChunkingStrategy class _ChunkingRegistry: def __init__(self): self._chunking_strategies: dict[str, ChunkingStrategy] = {} def register(self, name: str, strategy: ChunkingStrategy): self._chunking_strategies[name] = strategy def get(self, name: str) -> ChunkingStrategy: return self._chunking_strategies[name] def get_names(self) -> list[str]: return list(self._chunking_strategies.keys()) def __len__(self) -> int: return len(self._chunking_strategies) def __contains__(self, name: str | ChunkingStrategy) -> bool: if isinstance(name, ChunkingStrategy): return name in self._chunking_strategies.values() return name in self._chunking_strategies def __dict__(self) -> dict: return self._chunking_strategies def __getitem__(self, name: str) -> ChunkingStrategy: return self._chunking_strategies[name] chunking_registry = _ChunkingRegistry() def register_chunking_strategy(name: str | None = None): def decorator(cls: type[ChunkingStrategy]) -> type[ChunkingStrategy]: chunking_registry.register(name or cls.__name__, cls) return cls return decorator