# Utils
> **Shared utilities for logging, validation, error handling, and common operations.**
---
## 🎯 Overview
The **Utils Module** provides shared utilities used throughout all Semantica modules. It includes logging, error handling, validation, progress tracking, and common helper functions.
### What is the Utils Module?
The Utils module provides:
- **Logging**: Structured logging with performance tracking
- **Error Handling**: Custom exception hierarchy and error formatting
- **Validation**: Data validation for entities, relationships, and configuration
- **Progress Tracking**: Track long-running operations
- **Helpers**: Common functions for text cleaning, hashing, file I/O
- **Type Definitions**: Shared TypedDicts and Enums for type safety
### Why Use the Utils Module?
- **Consistency**: Shared utilities ensure consistent behavior across modules
- **Error Handling**: Standardized error handling and reporting
- **Logging**: Unified logging across all modules
- **Validation**: Reusable validation functions
- **Type Safety**: Shared type definitions for better IDE support
### How It Works
The Utils module is used internally by all Semantica modules. You typically don't use it directly, but it provides:
- **Logging Functions**: `` `get_logger()` ``, `` `setup_logging()` ``
- **Validation Functions**: `` `validate_entity()` ``, `` `validate_relationship()` ``
- **Error Classes**: Custom exceptions for different error types
- **Progress Tracking**: `` `ProgressTracker` `` for long operations
- **Helper Functions**: Text cleaning, hashing, file operations
- :material-console-line:{ .lg .middle } **Logging**
---
Structured logging with performance tracking and error reporting
- :material-alert-circle-outline:{ .lg .middle } **Error Handling**
---
Custom exception hierarchy and error formatting
- :material-check-all:{ .lg .middle } **Validation**
---
Data validation for entities, relationships, and configuration
- :material-progress-clock:{ .lg .middle } **Progress Tracking**
---
Track long-running operations with console or file output
- :material-tools:{ .lg .middle } **Helpers**
---
Common functions for text cleaning, hashing, and file I/O
- :material-code-json:{ .lg .middle } **Type Definitions**
---
Shared TypedDicts and Enums for type safety
!!! tip "When to Use"
- **Development**: Use `setup_logging` to configure output.
- **Data Cleaning**: Use `clean_text` and `normalize_entities`.
- **Validation**: Use `validate_data` before processing external input.
- **Debugging**: Use `log_performance` to find bottlenecks.
---
## ⚙️ Key Components
### Logging
- **Structured Output**: JSON or formatted text logs.
- **Performance Metrics**: Decorators for timing functions.
- **Quality Logging**: Specialized loggers for data quality issues.
### Validation
- **Schema Validation**: Check dictionary structure against requirements.
- **Type Checking**: Runtime type validation.
- **Constraint Checking**: Numeric ranges, string lengths, regex patterns.
### Progress Tracking
- **Multi-Environment**: Supports Console (tqdm), Jupyter, and File logging.
- **Module Awareness**: Tracks progress per module.
---
## Main Classes
### Logger
Centralized logging configuration.
**Functions:**
| Function | Description |
|----------|-------------|
| `setup_logging(level)` | Configure global logging |
| `get_logger(name)` | Get named logger instance |
| `log_performance(func)` | Decorator for timing |
**Example:**
```python
from semantica.utils import setup_logging, get_logger, log_performance
setup_logging(level="INFO")
logger = get_logger(__name__)
@log_performance
def process_data(data):
logger.info(f"Processing {len(data)} items")
```
### Validators
Data validation functions.
**Functions:**
| Function | Description |
|----------|-------------|
| `validate_entity(data)` | Check entity structure |
| `validate_config(cfg)` | Check configuration |
**Example:**
```python
from semantica.utils import validate_entity, ValidationError
try:
validate_entity({"id": "1", "type": "PERSON"})
except ValidationError as e:
print(f"Invalid entity: {e}")
```
### ProgressTracker
Tracks execution progress.
**Classes:**
| Class | Description |
|-------|-------------|
| `ProgressTracker` | Main tracker interface |
| `ConsoleProgressDisplay` | CLI output |
**Example:**
```python
from semantica.utils import track_progress
for item in track_progress(items, desc="Processing"):
process(item)
```
---
## Convenience Functions
```python
from semantica.utils import clean_text, hash_data, safe_filename
# Text cleaning
clean = clean_text(" Hello World ") # "Hello World"
# Hashing
id = hash_data({"key": "value"})
# File safety
fname = safe_filename("My File?.txt") # "My_File_.txt"
```
---
## Configuration
### Environment Variables
```bash
export SEMANTICA_LOG_LEVEL=DEBUG
export SEMANTICA_LOG_FORMAT=json
export SEMANTICA_PROGRESS_BAR=true
```
---
## Best Practices
1. **Use `get_logger`**: Always use `get_logger(__name__)` instead of `print` for production code.
2. **Validate Early**: Validate input data at the boundary (Ingest/Parse) using `validate_data`.
3. **Handle Exceptions**: Catch `SemanticaError` for framework-specific errors.
4. **Clean Text**: Use `clean_text` before embedding or extraction to improve quality.
---
## Cookbook
The Utils module is used throughout all Semantica modules. See any cookbook tutorial for examples of logging, validation, and error handling in practice.
- **[Welcome to Semantica](https://github.com/Hawksight-AI/semantica/blob/main/cookbook/introduction/01_Welcome_to_Semantica.ipynb)**: See utils in action across all modules
- **Topics**: Framework overview, all modules, utilities
- **Difficulty**: Beginner
- **Use Cases**: Understanding utility functions used throughout Semantica
## See Also
- [Core Module](core.md) - Uses Utils for infrastructure
- [Pipeline Module](pipeline.md) - Uses ProgressTracker