Engine
What it is
Engineis the main runtime orchestrator for naas-abi-core.- It loads:
- configuration (
EngineConfiguration) - services (
EngineServiceLoader) - modules (
EngineModuleLoader) - ontologies (via
EngineOntologyLoader, only if a triple store is available)
- configuration (
- It then initializes modules by calling
on_initialized().
Public API
Class: Engine(IEngine)
-
Engine(configuration: str | None = None)- Creates an engine instance.
- Loads configuration using
EngineConfiguration.load_configuration(configuration). - Prepares module and service loaders.
-
load(module_names: List[str] = [])- Loads and initializes the engine.
- Steps:
- Resolve module dependencies for
module_names. - Load engine services for those dependencies.
- Load modules (passing the engine instance to the module loader).
- If
services.triple_store_available()is true, load ontologies into the triple store. - Call
on_initialized().
- Resolve module dependencies for
-
on_initialized()- Calls
on_initialized()on each loaded module.
- Calls
Properties
-
configuration -> EngineConfiguration- Returns the loaded engine configuration.
-
modules -> Dict[str, BaseModule]- Returns loaded modules.
- Raises
RuntimeErrorif accessed before modules are loaded (e.g., during module construction oron_load).
-
services -> IEngine.Services- Returns loaded engine services.
Configuration/Dependencies
-
Configuration
- Loaded via
EngineConfiguration.load_configuration(configuration). - The
configurationargument is passed through to that loader (string path or identifier, depending on implementation).
- Loaded via
-
Loaders/Services
EngineModuleLoader: resolves dependencies and loads modules.EngineServiceLoader: loads engine services used by modules.EngineOntologyLoader: loads ontologies when a triple store is available (services.triple_store_available()).
-
Logging
- Uses
naas_abi_core.loggerfor debug/error output.
- Uses
Usage
from naas_abi_core.engine.Engine import Engine
engine = Engine() # or Engine(configuration="path/or/name")
engine.load(module_names=["chatgpt"])
# Access loaded components after load()
mods = engine.modules
svcs = engine.services
Caveats
- Do not access
engine.modulesbeforeEngine.load()completes.- Attempting to do so raises a
RuntimeErrorand logs an error. - In particular: avoid accessing
self.engine.modulesfrom module constructors oron_load; modules are safe to access whenon_initializedis called.
- Attempting to do so raises a
- Ontology loading is skipped when no triple store is available.