Engine
What it is
Engineis the main runtime orchestrator fornaas_abi_core.- It loads configuration, resolves module dependencies, loads services and modules, optionally loads ontologies into a triple store, then notifies modules that initialization is complete.
Public API
Class: Engine(IEngine)
Engine(configuration: str | None = None)- Loads an
EngineConfiguration(optionally from a provided configuration path/identifier). - Prepares module and service loaders.
- Loads an
Properties
-
configuration -> EngineConfiguration- Returns the loaded engine configuration.
-
modules -> Dict[str, BaseModule]- Returns loaded modules keyed by name.
- Raises
RuntimeErrorif accessed beforeload()completes (e.g., inside module constructors oron_load).
-
services -> IEngine.Services- Returns loaded services (as defined by
IEngine.Services).
- Returns loaded services (as defined by
Methods
-
load(module_names: List[str] = []) -> None- Resolves module dependencies.
- Loads services required by the module set.
- Loads modules.
- If a triple store is available and ontology loading is not skipped, loads ontologies for ordered modules.
- Calls
on_initialized().
-
on_initialized() -> None- Calls
on_initialized()on each loaded module.
- Calls
Configuration/Dependencies
- Depends on:
EngineConfiguration.load_configuration(...)EngineModuleLoader(dependency resolution and module loading)EngineServiceLoader(service loading)EngineOntologyLoader.load_ontologies(...)(optional ontology loading)IEngineandBaseModule
- Ontology loading behavior:
- Runs only if
services.triple_store_available()is true. - Skipped when
configuration.global_config.skip_ontology_loadingis true.
- Runs only if
Usage
from naas_abi_core.engine.Engine import Engine
engine = Engine() # or Engine(configuration="path-or-id")
engine.load(module_names=["chatgpt"])
# After load() completes:
mods = engine.modules
svcs = engine.services
print("Loaded modules:", list(mods.keys()))
Caveats
- Do not access
engine.modulesbeforeEngine.load()finishes.- Accessing it too early raises
RuntimeErrorand logs an error. - The error message indicates modules are accessible when
on_initializedis called; avoid usingself.enginein module constructors oron_load.
- Accessing it too early raises