Decorator-based registry for runtime discovery of pluggable components.
Adapted from IPW's src/ipw/core/registry.py. Each typed subclass gets its
own isolated storage so registrations in one registry never leak into another.
Classes
RegistryBase
Bases: Generic[T]
Generic registry base class with class-specific entry isolation.
Functions
register
classmethod
register(key: str) -> Callable[[T], T]
Decorator that registers entry under key.
Source code in src/openjarvis/core/registry.py
| @classmethod
def register(cls, key: str) -> Callable[[T], T]:
"""Decorator that registers *entry* under *key*."""
def decorator(entry: T) -> T:
entries = cls._entries()
if key in entries:
raise ValueError(f"{cls.__name__} already has an entry for '{key}'")
entries[key] = entry
return entry
return decorator
|
register_value
classmethod
register_value(key: str, value: T) -> T
Imperatively register a value under key.
Source code in src/openjarvis/core/registry.py
| @classmethod
def register_value(cls, key: str, value: T) -> T:
"""Imperatively register a *value* under *key*."""
entries = cls._entries()
if key in entries:
raise ValueError(f"{cls.__name__} already has an entry for '{key}'")
entries[key] = value
return value
|
get
classmethod
Retrieve the entry for key, raising KeyError if missing.
Source code in src/openjarvis/core/registry.py
| @classmethod
def get(cls, key: str) -> T:
"""Retrieve the entry for *key*, raising ``KeyError`` if missing."""
try:
return cls._entries()[key]
except KeyError as exc:
raise KeyError(
f"{cls.__name__} does not have an entry for '{key}'"
) from exc
|
create
classmethod
create(key: str, *args: Any, **kwargs: Any) -> Any
Look up key and instantiate it with the given arguments.
Source code in src/openjarvis/core/registry.py
| @classmethod
def create(cls, key: str, *args: Any, **kwargs: Any) -> Any:
"""Look up *key* and instantiate it with the given arguments."""
entry = cls.get(key)
if not callable(entry):
raise TypeError(
f"{cls.__name__} entry '{key}' is not callable"
" and cannot be instantiated"
)
return entry(*args, **kwargs)
|
items
classmethod
items() -> Tuple[Tuple[str, T], ...]
Return all (key, entry) pairs as a tuple.
Source code in src/openjarvis/core/registry.py
| @classmethod
def items(cls) -> Tuple[Tuple[str, T], ...]:
"""Return all ``(key, entry)`` pairs as a tuple."""
return tuple(cls._entries().items())
|
keys
classmethod
keys() -> Tuple[str, ...]
Return all registered keys as a tuple.
Source code in src/openjarvis/core/registry.py
| @classmethod
def keys(cls) -> Tuple[str, ...]:
"""Return all registered keys as a tuple."""
return tuple(cls._entries().keys())
|
contains
classmethod
contains(key: str) -> bool
Check whether key is registered.
Source code in src/openjarvis/core/registry.py
| @classmethod
def contains(cls, key: str) -> bool:
"""Check whether *key* is registered."""
return key in cls._entries()
|
clear
classmethod
Remove all entries (useful in tests).
Source code in src/openjarvis/core/registry.py
| @classmethod
def clear(cls) -> None:
"""Remove all entries (useful in tests)."""
cls._entries().clear()
|
ModelRegistry
Bases: RegistryBase[Any]
Registry for ModelSpec objects.
EngineRegistry
Bases: RegistryBase[Type['InferenceEngine']]
Registry for inference engine backends.
MemoryRegistry
Bases: RegistryBase[Type['MemoryBackend']]
Registry for memory / retrieval backends.
AgentRegistry
Bases: RegistryBase[Type['BaseAgent']]
Registry for agent implementations.
RouterPolicyRegistry
Bases: RegistryBase[Any]
Registry for router policy implementations.
BenchmarkRegistry
Bases: RegistryBase[Any]
Registry for benchmark implementations.
ChannelRegistry
Bases: RegistryBase[Any]
Registry for channel implementations.
LearningRegistry
Bases: RegistryBase[Any]
Registry for learning policies.
SkillRegistry
Bases: RegistryBase[Any]
Registry for skill manifests.
SpeechRegistry
Bases: RegistryBase[Any]
Registry for speech backend implementations.