# Core Module > **The heart of Semantica - orchestrating all framework components with configuration, lifecycle, and plugin management.** --- ## 🎯 Overview
- :material-cog-outline:{ .lg .middle } **Framework Orchestration** --- Main `Semantica` class coordinating all operations and modules - :material-file-cog:{ .lg .middle } **Configuration Management** --- Centralized config with YAML/JSON support and validation - :material-timeline:{ .lg .middle } **Lifecycle Management** --- Startup, shutdown, health monitoring with hook system - :material-puzzle:{ .lg .middle } **Plugin System** --- Dynamic plugin discovery, loading, and isolation - :material-registry:{ .lg .middle } **Method Registry** --- Extensible method registration for custom implementations - :material-api:{ .lg .middle } **Convenience API** --- Simple `build()` function for quick knowledge base creation
!!! example "Quick Start" ```python from semantica import Semantica # One-liner to build knowledge base semantica = Semantica() result = semantica.build_knowledge_base(["documents/"]) print(f"Nodes: {result['knowledge_graph'].node_count}") ``` --- ## ⚙️ Algorithms Used ### Configuration Management - **YAML/JSON Parsing**: Configuration file parsing with schema validation - **Environment Variable Substitution**: `${VAR_NAME}` pattern replacement - **Configuration Merging**: Deep merge algorithm for layered configs - **Validation**: JSON Schema validation for type checking ### Lifecycle Management - **Hook System**: Observer pattern for lifecycle events - **Health Monitoring**: Periodic health checks with exponential backoff - **Graceful Shutdown**: Resource cleanup with timeout handling ### Plugin System - **Discovery**: File system scanning for plugin modules - **Loading**: Dynamic import with dependency resolution - **Isolation**: Separate namespace for each plugin --- ## Main Classes ### Semantica **Methods:** | Method | Description | Algorithm | |--------|-------------|-----------| | `__init__(config)` | Initialize framework | Configuration loading + validation | | `build_knowledge_base(sources)` | Build knowledge graph | Orchestrate ingest → parse → extract → build | | `run_pipeline(pipeline_config)` | Execute custom pipeline | DAG execution with error handling | | `shutdown()` | Graceful shutdown | Resource cleanup with lifecycle hooks | | `get_health_status()` | Get system health | Component health aggregation | **Example:** ```python from semantica import Semantica # Initialize with default config semantica = Semantica() # Build knowledge base result = semantica.build_knowledge_base( sources=["documents/"], extract_entities=True, extract_relations=True, embeddings=True, graph=True ) kg = result["knowledge_graph"] print(f"Nodes: {kg.node_count}, Edges: {kg.edge_count}") # Shutdown semantica.shutdown() ``` --- ### Config **Configuration Structure:** ```python @dataclass class Config: llm: Optional[Dict[str, Any]] = None embeddings: Optional[Dict[str, Any]] = None knowledge_graph: Optional[Dict[str, Any]] = None vector_store: Optional[Dict[str, Any]] = None # ... other configuration fields ``` **Example:** ```python from semantica.core import Config config = Config( llm={"provider": "openai", "model": "gpt-4"}, embeddings={"provider": "openai", "model": "text-embedding-3-large"}, knowledge_graph={"merge_entities": True, "resolve_conflicts": True} ) semantica = Semantica(config=config) ``` --- ### ConfigManager **Methods:** | Method | Description | Algorithm | |--------|-------------|-----------| | `load_config(path)` | Load configuration file | YAML/JSON parsing + validation | | `validate_config(config)` | Validate configuration | JSON Schema validation | | `get(key, default)` | Get config value | Nested key lookup with dot notation | | `set(key, value)` | Set config value | Nested key assignment | | `merge_configs(configs)` | Merge multiple configs | Deep merge algorithm | **Example:** ```python from semantica.core import ConfigManager manager = ConfigManager() # Load from file config = manager.load_config("config.yaml") # Validate is_valid, errors = manager.validate_config(config) # Get/set values llm_model = manager.get("llm.model", default="gpt-4") manager.set("llm.temperature", 0.7) ``` --- ### LifecycleManager **Methods:** | Method | Description | Algorithm | |--------|-------------|-----------| | `startup()` | Execute startup sequence | Sequential hook execution | | `shutdown()` | Execute shutdown sequence | Reverse-order hook execution | | `register_hook(event, callback)` | Register lifecycle hook | Hook registration | | `get_health_status()` | Get system health | Component health aggregation | **Lifecycle Events:** - `on_startup`: Framework initialization - `on_shutdown`: Framework cleanup - `on_error`: Error handling - `on_health_check`: Health monitoring **Example:** ```python from semantica.core import LifecycleManager manager = LifecycleManager() # Register hooks manager.register_hook("on_startup", lambda: print("Starting...")) manager.register_hook("on_shutdown", lambda: print("Shutting down...")) # Startup manager.startup() # Health check health = manager.get_health_status() print(f"Status: {health.status}, Components: {health.components}") # Shutdown manager.shutdown() ``` --- ### PluginRegistry **Methods:** | Method | Description | Algorithm | |--------|-------------|-----------| | `discover_plugins(path)` | Discover available plugins | File system scanning | | `load_plugin(name)` | Load plugin | Dynamic import + initialization | | `unload_plugin(name)` | Unload plugin | Cleanup + namespace removal | | `list_plugins()` | List loaded plugins | Plugin registry enumeration | | `get_plugin(name)` | Get plugin instance | Registry lookup | **Example:** ```python from semantica.core import PluginRegistry registry = PluginRegistry() # Discover plugins registry.discover_plugins("plugins/") # Load plugin registry.load_plugin("custom_extractor") # Use plugin plugin = registry.get_plugin("custom_extractor") result = plugin.extract(text) # Unload registry.unload_plugin("custom_extractor") ``` --- ## Convenience Functions ### build() **Signature:** ```python def build( sources: Union[str, List[Union[str, Path]]], extract_entities: bool = True, extract_relations: bool = True, embeddings: bool = True, graph: bool = True, **options ) -> Dict[str, Any] ``` **Example:** ```python from semantica.core import build # Simple one-liner result = build(sources=["documents/"]) # With options result = build( sources=["documents/"], extract_entities=True, extract_relations=True, embeddings=True, graph=True, llm_provider="openai", llm_model="gpt-4" ) ``` --- ## Configuration Reference ```yaml # config.yaml - Complete Configuration Example # LLM Configuration llm: provider: openai # openai, anthropic, google, groq, ollama model: gpt-4 temperature: 0.1 max_tokens: 4000 api_key: ${OPENAI_API_KEY} # Embeddings Configuration embeddings: provider: openai model: text-embedding-3-large dimensions: 3072 batch_size: 100 # Knowledge Graph Configuration knowledge_graph: merge_entities: true entity_resolution_strategy: fuzzy similarity_threshold: 0.85 resolve_conflicts: true enable_temporal: true # Vector Store Configuration vector_store: backend: faiss index_type: HNSW metric: cosine dimension: 3072 # Pipeline Configuration pipeline: parallel: true max_workers: 4 error_handling: retry max_retries: 3 # Logging Configuration logging: level: INFO format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s" handlers: - console - file ``` --- ## Common Patterns ### Pattern 1: Basic Usage ```python from semantica import Semantica semantica = Semantica() result = semantica.build_knowledge_base(["documents/"]) kg = result["knowledge_graph"] ``` ### Pattern 2: Custom Configuration ```python from semantica import Semantica, Config config = Config( llm={"provider": "openai", "model": "gpt-4"}, embeddings={"provider": "openai", "model": "text-embedding-3-large"} ) semantica = Semantica(config=config) result = semantica.build_knowledge_base(["documents/"]) ``` ### Pattern 3: Pipeline Execution ```python from semantica import Semantica semantica = Semantica() pipeline_config = { "steps": [ {"name": "ingest", "type": "FileIngestor"}, {"name": "parse", "type": "DocumentParser"}, {"name": "extract", "type": "NERExtractor"}, {"name": "build_kg", "type": "GraphBuilder"} ] } result = semantica.run_pipeline(pipeline_config) ``` --- ## Error Handling ```python from semantica import Semantica from semantica.core import ConfigurationError, PipelineError try: semantica = Semantica(config="invalid_config.yaml") except ConfigurationError as e: print(f"Configuration error: {e}") try: result = semantica.build_knowledge_base([]) except PipelineError as e: print(f"Pipeline error: {e}") ``` --- ## See Also - [Pipeline Module](pipeline.md) - Pipeline building and execution - [Knowledge Graph Module](kg.md) - Graph construction - [Semantic Extract Module](semantic_extract.md) - Entity extraction