Module System
Modules are the primary extension mechanism in naas-abi-core.
Related pages: Engine, Architecture, Built-in-Module-Templatable-SPARQL.
Module contract
Every module exports ABIModule (subclass of BaseModule) and a nested Configuration class (subclass of ModuleConfiguration).
It also defines static dependencies:
- dependent modules
- required services
Example skeleton
from naas_abi_core.module.Module import BaseModule, ModuleConfiguration, ModuleDependencies
from naas_abi_core.services.triple_store.TripleStoreService import TripleStoreService
class ABIModule(BaseModule):
dependencies = ModuleDependencies(
modules=["my_other_module"],
services=[TripleStoreService],
)
class Configuration(ModuleConfiguration):
pass
def on_load(self):
super().on_load()
def on_initialized(self):
# Safe point to access dependencies
passLifecycle hooks
on_load(): called during module loading.on_initialized(): called after all modules/services/ontologies are loaded.on_unloaded(): optional unload hook.
Auto-discovery inside a module
On load, the module runtime auto-discovers:
- ontology files in
<module_root>/ontologies/**/*.ttl - agent classes in
<module_root>/agents/*.py - orchestration classes in
<module_root>/orchestrations/*.py
Dependency visibility
Inside module code, self.engine is an EngineProxy:
- you can access only declared service dependencies
- you can access only declared module dependencies
This keeps module boundaries explicit and enforceable.
For a step-by-step build guide, see Creating-a-Module.