| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- from __future__ import annotations
- from collections.abc import Iterable
- from copy import deepcopy
- from agent_lab.application.events.models import EventDefinition
- class EventRegistry:
- def __init__(self, definitions: Iterable[EventDefinition] = ()) -> None:
- self._definitions: dict[str, EventDefinition] = {}
- for definition in definitions:
- self.register(definition)
- def register(self, definition: EventDefinition) -> None:
- if definition.name in self._definitions:
- raise ValueError(f"duplicate event definition: {definition.name}")
- self._definitions[definition.name] = definition
- def definition(self, name: str) -> EventDefinition | None:
- return self._definitions.get(name)
- def catalog(self, enabled_names: Iterable[str] | None = None) -> list[dict]:
- enabled = set(enabled_names) if enabled_names is not None else None
- return [
- {
- "name": definition.name,
- "description": definition.description,
- "parameters": deepcopy(definition.parameters),
- }
- for definition in self._definitions.values()
- if enabled is None or definition.name in enabled
- ]
- def tool_schema(self, name: str) -> dict | None:
- definition = self.definition(name)
- if definition is None:
- return None
- return {
- "type": "function",
- "function": {
- "name": definition.name,
- "description": definition.description,
- "parameters": deepcopy(definition.parameters),
- },
- }
|