-
Notifications
You must be signed in to change notification settings - Fork 0
PluginRegistry
gitpavleenbali edited this page Feb 17, 2026
·
2 revisions
The PluginRegistry manages plugin discovery, loading, and lifecycle in pyai.
from pyai.plugins import PluginRegistryfrom pyai.plugins import PluginRegistry, Plugin
# Create registry
registry = PluginRegistry()
# Register plugins
registry.register(MyPlugin())
registry.register(AnotherPlugin())
# Use with agent
agent = Agent(plugins=registry.get_all())PluginRegistry(
auto_discover: bool = False, # Auto-discover plugins in PYTHONPATH
plugin_dirs: list[str] = None # Additional directories to scan
)Register a plugin instance.
registry.register(plugin: Plugin) -> NoneExample:
plugin = WeatherPlugin(api_key="xxx")
registry.register(plugin)Register a plugin class for lazy instantiation.
registry.register_class(
plugin_class: type[Plugin],
config: dict = None
) -> NoneExample:
registry.register_class(
WeatherPlugin,
config={"api_key": "xxx"}
)Remove a plugin from the registry.
registry.unregister(name: str) -> boolExample:
if registry.unregister("weather"):
print("Plugin removed")Auto-discover plugins in specified paths.
registry.discover(
paths: list[str] = None, # Directories to scan
pattern: str = "*_plugin.py" # File pattern
) -> int # Number of plugins foundExample:
count = registry.discover(paths=["./plugins"])
print(f"Found {count} plugins")Load plugins from package entry points.
registry.discover_entry_points(group: str = "pyai.plugins") -> intExample:
# In plugin package's pyproject.toml:
# [project.entry-points."pyai.plugins"]
# my_plugin = "my_package:MyPlugin"
registry.discover_entry_points()Get a plugin by name.
plugin = registry.get(name: str) -> Plugin | NoneGet all registered plugins.
plugins = registry.get_all() -> list[Plugin]Check if a plugin is registered.
if registry.has("weather"):
print("Weather plugin available")Get all plugin names.
names = registry.list_names() -> list[str]Get all functions across all plugins.
functions = registry.list_functions() -> dict[str, callable]
# Returns {"plugin.function": callable, ...}Configure a plugin with settings.
registry.configure(
name: str,
settings: dict
) -> NoneExample:
registry.configure("weather", {
"api_key": "new_key",
"timeout": 60
})Configure multiple plugins at once.
registry.configure_all(config: dict) -> NoneExample:
registry.configure_all({
"weather": {"api_key": "xxx"},
"search": {"endpoint": "production"}
})Initialize all registered plugins.
registry.load_all() -> NoneClean up all plugins.
registry.unload_all() -> Nonewith PluginRegistry(auto_discover=True) as registry:
agent = Agent(plugins=registry.get_all())
# ... use agent
# Plugins automatically unloadedregistry.on_plugin_loaded = lambda plugin: print(f"Loaded: {plugin.name}")
registry.on_plugin_error = lambda plugin, error: print(f"Error: {error}")For convenience, a global registry is available:
from pyai.plugins import global_registry
# Register globally
global_registry.register(MyPlugin())
# Access from anywhere
plugin = global_registry.get("my_plugin")my_project/
βββ plugins/
β βββ __init__.py
β βββ weather_plugin.py
β βββ search_plugin.py
β βββ custom_plugin.py
βββ main.py
# main.py
from pyai.plugins import PluginRegistry
from pyai import Agent
registry = PluginRegistry()
registry.discover(paths=["./plugins"])
agent = Agent(
name="Assistant",
plugins=registry.get_all()
)- Plugins-Module - Module overview
- PluginBase - Creating plugins
Intelligence, Embedded.