SLM Builder Examples
This directory contains comprehensive examples demonstrating all features of the SLM Builder package.
📋 Example Overview
Basic Usage
build_qa_from_csv.py
Purpose: Basic QA model training from CSV files
What it demonstrates:
- Loading data from CSV files
- Building a QA model with LoRA fine-tuning
- Basic configuration and training workflow
Prerequisites: CSV file with question and answer columns
Run:
1
python examples/build_qa_from_csv.py
Database Integration
build_from_database.py
Purpose: Load training data from SQL databases (PostgreSQL, MySQL, SQLite)
What it demonstrates:
- SQL database connections with different dialects
- Custom SQL queries for data extraction
- Column mapping for QA tasks
- Error handling and connection management
Prerequisites:
- PostgreSQL/MySQL/SQLite database running
- Database credentials
sqlalchemy,psycopg2-binary(PostgreSQL), orpymysql(MySQL) installed
Configuration:
1
2
3
4
5
6
7
8
connection_params = {
"dialect": "postgresql", # or "mysql", "sqlite"
"host": "localhost",
"port": 5432,
"database": "your_db",
"user": "your_user",
"password": "your_password"
}
Run:
1
2
pip install sqlalchemy psycopg2-binary
python examples/build_from_database.py
build_from_mongodb.py
Purpose: Load training data from MongoDB collections
What it demonstrates:
- MongoDB connection and authentication
- Query filters and field projections
- Document-to-record conversion
- Handling nested MongoDB documents
Prerequisites:
- MongoDB instance running
pymongoinstalled
Configuration:
1
2
3
4
5
6
7
connection_params = {
"host": "localhost",
"port": 27017,
"database": "qa_database",
"user": "admin",
"password": "password"
}
Run:
1
2
pip install pymongo
python examples/build_from_mongodb.py
API Integration
build_from_api.py
Purpose: Load training data from REST APIs
What it demonstrates:
- Multiple authentication methods (Bearer token, API key, Basic auth)
- Pagination strategies (offset, page-based, cursor-based)
- Rate limiting and throttling
- Custom response parsers
- Error handling and retries
Prerequisites:
- REST API endpoint
- API credentials
requests,tqdminstalled
Supported Authentication:
- Bearer token authentication
- API key authentication (header or query param)
- Basic HTTP authentication
- OAuth2 (token-based)
Supported Pagination:
- Offset-based (e.g.,
?offset=0&limit=100) - Page-based (e.g.,
?page=1&per_page=100) - Cursor-based (e.g.,
?cursor=abc123)
Run:
1
2
pip install requests tqdm
python examples/build_from_api.py
Data Preparation
dataset_splitting.py
Purpose: Dataset validation, splitting, and quality analysis
What it demonstrates:
- Dataset quality validation with detailed reports
- Train/validation/test splitting with stratification
- K-fold cross-validation
- Class balance checking and imbalance detection
- Random seed control for reproducibility
Features:
- Validation: Check dataset quality, missing values, duplicates
- Splitting: Multiple strategies (simple, stratified, time-based)
- K-Fold CV: Cross-validation with configurable folds
- Balance Analysis: Detect class imbalances and distribution issues
Run:
1
python examples/dataset_splitting.py
Output:
- Validation reports with quality metrics
- Split datasets (train/val/test)
- Class distribution analysis
- Recommendations for handling imbalances
Model Comparison
model_comparison.py
Purpose: Compare multiple models and track experiments
What it demonstrates:
- Training multiple models with different configurations
- Comprehensive metric comparison (perplexity, accuracy, BLEU, ROUGE, F1)
- Model ranking by performance
- Report generation (Markdown, HTML, text, JSON)
- Experiment tracking with hyperparameter logging
- Finding best performing models
Features:
- Multi-Model Evaluation: Compare 2+ models on same dataset
- Metrics: Perplexity, Accuracy, BLEU, ROUGE, F1, training time
- Rankings: Sort models by any metric
- Reports: Generate comparison reports in multiple formats
- Tracking: Log experiments with hyperparameters and metadata
Prerequisites:
nltk,rouge-scorefor BLEU and ROUGE metrics (optional)
Run:
1
2
pip install nltk rouge-score # Optional for advanced metrics
python examples/model_comparison.py
Output:
- Comparison reports in
comparison_reports/ - Experiment logs in
experiments/ - Rankings by metric
- Performance summaries
🔧 Installation
Core Dependencies
1
pip install torch transformers datasets peft accelerate bitsandbytes
Optional Dependencies
For database support:
1
pip install sqlalchemy psycopg2-binary pymongo pymysql
For API loading:
1
pip install requests tqdm
For advanced metrics:
1
pip install nltk rouge-score
For all features:
1
pip install sqlalchemy psycopg2-binary pymongo requests tqdm nltk rouge-score
📊 Example Workflow
Complete Training Pipeline
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from slm_builder import SLMBuilder
# Step 1: Initialize builder
builder = SLMBuilder(project_name="my-slm", base_model="gpt2")
# Step 2: Load data from database
result = builder.build_from_database(
query="SELECT question, answer FROM qa_table WHERE quality > 0.8",
connection_params={
"dialect": "postgresql",
"host": "localhost",
"database": "mydb",
"user": "user",
"password": "pass"
},
db_type="sql",
task="qa",
recipe="lora"
)
# Step 3: Validate and split data
from slm_builder.data import validate_dataset, split_dataset
validation_report = validate_dataset(result['dataset'], task='qa')
splits = split_dataset(
result['dataset'],
test_size=0.2,
val_size=0.15,
stratify_by='label.label'
)
# Step 4: Compare models
from slm_builder.models import compare_models
models = [
{'model': 'gpt2', 'name': 'GPT2-Base'},
{'model': 'distilgpt2', 'name': 'DistilGPT2'}
]
comparison = compare_models(
models=models,
test_dataset=splits['test'],
metrics=['perplexity', 'accuracy', 'bleu']
)
print(f"Best model: {comparison.get_rankings()[0]['name']}")
🎯 Use Cases
Use Case 1: Customer Support QA Bot
Goal: Build a QA model from existing support tickets
Steps:
- Load tickets from PostgreSQL:
build_from_database.py - Validate data quality:
dataset_splitting.py - Train with LoRA:
build_qa_from_csv.py - Compare with baseline:
model_comparison.py
Use Case 2: API-Driven Content Model
Goal: Build a model from API-sourced content
Steps:
- Load from REST API:
build_from_api.py - Split and validate:
dataset_splitting.py - Train and evaluate:
build_qa_from_csv.py
Use Case 3: Multi-Source Knowledge Base
Goal: Combine data from multiple sources
Steps:
- Load from MongoDB:
build_from_mongodb.py - Load from API:
build_from_api.py - Merge datasets and validate:
dataset_splitting.py - Compare models:
model_comparison.py
📝 Tips and Best Practices
Data Loading
- Always validate connection parameters before loading
- Use query filters to reduce data transfer
- Handle authentication securely (environment variables)
- Implement retry logic for API calls
Dataset Preparation
- Always validate before splitting
- Use stratification for imbalanced datasets
- Set random seeds for reproducibility
- Check for duplicates and missing values
Model Training
- Start with LoRA for faster iterations
- Use quantization for limited resources
- Monitor validation metrics during training
- Save checkpoints regularly
Experiment Tracking
- Log all hyperparameters
- Track multiple metrics (not just loss)
- Compare with baseline models
- Generate reports for documentation
🐛 Troubleshooting
Database Connection Issues
1
2
3
4
5
6
# Test connection first
import sqlalchemy
engine = sqlalchemy.create_engine("postgresql://user:pass@localhost/db")
with engine.connect() as conn:
result = conn.execute("SELECT 1")
print("Connection successful")
API Authentication Issues
1
2
3
4
5
6
7
# Test API endpoint
import requests
response = requests.get(
"https://api.example.com/data",
headers={"Authorization": "Bearer YOUR_TOKEN"}
)
print(response.status_code, response.json())
Import Errors
1
2
# Install missing dependencies
pip install sqlalchemy psycopg2-binary pymongo requests tqdm nltk rouge-score
📚 Additional Resources
- FEATURES.md - Dynamic model loading and core features
- ADDITIONAL_FEATURES.md - Advanced features documentation
- CONTRIBUTING.md - Contributing guidelines
- README.md - Main project documentation
🤝 Need Help?
- Check the main documentation in the parent directory
- Review ADDITIONAL_FEATURES.md for detailed API documentation
- Open an issue on GitHub for bugs or feature requests
- See CONTRIBUTING.md for development guidelines
Happy Building! 🚀