scomp-link: The Astromech Arm for Your Python Projects
May the code be with you
Overview
scomp-link is an end-to-end machine learning toolkit that automates the complete ML workflow — from data profiling and preprocessing to model selection, training, validation, explainability, monitoring, and deployment.
It includes a full-featured CLI for zero-code ML workflows and a Python API for programmatic use.
Installation
pip install scomp-link
Requires Python 3.10+. Import is near-instant (~6ms) thanks to lazy loading — heavy dependencies load only when needed. Python 3.14 is supported experimentally (TensorFlow not yet available on 3.14).
Key Features
| Category | Features |
|---|---|
| Pipeline | Automated model selection, training, validation, HTML reports |
| CLI | 26 commands — run, predict, text, embed, cluster, tune, validate, explain, engineer, forecast, anomaly, drift, fairness, quality, describe, report, compare, monitor, serve, export, pipeline, info, init, init-config, list-models, check-deps |
| Preprocessing | Data cleaning, feature engineering (Polars backend — interactions, log, dates, target encoding, binning), data quality profiling |
| Models | Regression, classification, clustering, time series forecasting, anomaly detection, text (BERT contrastive + weak learner head), images (CNN) |
| Tuning | Optuna (Bayesian), Halving Grid Search, Early Stopping CV |
| Validation | K-Fold, LOOCV, Bootstrap, ensemble (voting/stacking) |
| Explainability | SHAP values, LIME explanations |
| Monitoring | Data drift detection (PSI + KS test) |
| Fairness | Demographic parity, disparate impact (4/5 rule), equalized odds |
| Persistence | Custom .scomp format (model + preprocessor + config + metrics + sample data) |
| Visualization | 31 RAWGraphs SVG charts, Plotly interactive, Highcharts, centralized color system |
| Reporting | Interactive HTML reports with embedded charts, data quality reports |
CLI Quick Start
# Scaffold a new project
scomp-link init my_project
# Quick dataset profiling
scomp-link describe --data data.csv --format table
# Full data quality report
scomp-link quality --data data.csv --output report.html
# Feature engineering
scomp-link engineer --data data.csv --target y --interactions --log-transform --output features.csv
# Train a model
scomp-link run --data features.csv --target y --task regression --save-artifact model.scomp
# Train with text data
scomp-link text --data tickets.csv --text-col message --target category --method contrastive --head auto
# Extract embeddings from trained model
scomp-link embed --data new_texts.csv --text-col message --artifact model.scomp --output embeddings.npy
# Clustering
scomp-link cluster --data customers.csv --n-clusters 5 --plot clusters.html
# Hyperparameter tuning
scomp-link tune --data train.csv --target y --task regression --method optuna --n-trials 100
# Predict
scomp-link predict --artifact model.scomp --data new_data.csv --output predictions.csv
# Validate on test data
scomp-link validate --artifact model.scomp --data test.csv --target y --report report.html
# Explain
scomp-link explain --artifact model.scomp --data test.csv
# Detect drift
scomp-link drift --reference train.csv --current production.csv --plot drift.html
# Production monitoring (drift + quality + performance)
scomp-link monitor --reference train.csv --current prod.csv --artifact model.scomp --target y
# Forecast time series
scomp-link forecast --data series.csv --column value --horizon 30 --plot forecast.html
# Anomaly detection
scomp-link anomaly --data data.csv --methods iforest,lof,tabnet,transformer
# Fairness check
scomp-link fairness --data preds.csv --target y_true --predicted y_pred --sensitive gender
# Compare models
scomp-link compare --artifacts v1.scomp v2.scomp --plot comparison.html
# Run full pipeline from YAML config
scomp-link pipeline --config pipeline.yaml
# Serve model as REST API
scomp-link serve --artifact model.scomp --port 8080
# Export model to standard format
scomp-link export --artifact model.scomp --format onnx
# Generate reports
scomp-link report --data data.csv --output eda_report.html
scomp-link report --artifact model.scomp --data test.csv --output model_report.html
# Utilities
scomp-link list-models
scomp-link check-deps
# Configuration
scomp-link init-config # Create global config (~/.scomp-link/config.yaml)
scomp-link init-config --local # Create project-level config (.scomp-link.yaml)
Python API Quick Start
from scomp_link import ScompLinkPipeline, ScompArtifact, set_verbosity
import pandas as pd
# Control output
set_verbosity("info") # "silent" | "warning" | "info" | "debug"
# Build pipeline
pipe = ScompLinkPipeline("My Project")
pipe.set_objectives(["Minimize RMSE"])
pipe.import_and_clean_data(df)
pipe.select_variables(target_col='target')
pipe.choose_model("numerical_prediction")
results = pipe.run_pipeline(task_type="regression")
# Save as artifact
artifact = ScompArtifact()
artifact.set_model(pipe.model)
artifact.set_config(task_type='regression', target_col='target')
artifact.set_metrics(results['metrics'])
artifact.save('model.scomp')
# Load and predict
loaded = ScompArtifact.load('model.scomp')
predictions = loaded.predict(new_data)
Pipeline DSL (>> operator)
Compose ML pipelines and HTML reports declaratively with Airflow-style >> syntax:
from scomp_link import CleanStep, SelectStep, ModelStep, TrainStep
# Lazy pipeline — >> builds the chain, .run() executes it
results = (
CleanStep(df)
>> SelectStep("price", features=["sqm", "rooms"])
>> ModelStep("numerical_prediction")
>> TrainStep("regression", test_size=0.2)
).run()
Build HTML reports the same way:
from scomp_link import SectionStep, TitleStep, TableStep, GraphStep, SaveStep
from scomp_link.utils.report_html import ScompLinkHTMLReport
report = ScompLinkHTMLReport("Q4 Report")
(
SectionStep("Results")
>> TitleStep("Model Performance")
>> TableStep(metrics_df, "Metrics")
>> GraphStep(fig, "RMSE Chart")
>> SaveStep("q4_report.html")
).run(report)
Use LogStep to inspect intermediate state:
from scomp_link import LogStep
(CleanStep(df) >> LogStep("after clean") >> SelectStep("y") >> TrainStep("regression")).run()
Feature Engineering
from scomp_link import FeatureEngineer
fe = FeatureEngineer(
interactions=True, # Polynomial interactions
log_transform=True, # Log1p for skewed features
date_features=True, # Extract year/month/dow/weekend
target_encode=True, # Encode high-cardinality categoricals
auto_bin=True, # Quantile binning
)
X_train_eng = fe.fit_transform(X_train, y_train)
X_test_eng = fe.transform(X_test)
Advanced Hyperparameter Tuning
from scomp_link.models.advanced_tuning import OptunaOptimizer
def param_space(trial):
return {
'n_estimators': trial.suggest_int('n_estimators', 50, 500),
'max_depth': trial.suggest_int('max_depth', 3, 20),
'learning_rate': trial.suggest_float('learning_rate', 0.01, 0.3, log=True),
}
optimizer = OptunaOptimizer(GradientBoostingRegressor, param_space, scoring='r2', n_trials=100)
best_model = optimizer.optimize(X_train, y_train)
Explainability
from scomp_link import ShapExplainer, LimeExplainer
# SHAP
shap_exp = ShapExplainer(model, X_train[:100])
shap_exp.explain(X_test)
importance = shap_exp.feature_importance()
fig = shap_exp.plot_importance()
# LIME
lime_exp = LimeExplainer(model, X_train, task='regression')
exp = lime_exp.explain_instance(X_test.iloc[0])
fig = lime_exp.plot_explanation(exp)
Data Drift Detection
from scomp_link import DriftDetector
detector = DriftDetector(X_train, psi_threshold=0.2)
report = detector.detect(X_production)
summary = detector.summary(report)
fig = detector.plot_drift_report(report)
Fairness & Bias Metrics
from scomp_link import FairnessMetrics
fm = FairnessMetrics(y_true, y_pred, sensitive_feature=df['gender'])
report = fm.compute_all()
print(fm.summary(report))
fig = fm.plot_fairness_report(report)
Time Series Forecasting
from scomp_link import TimeSeriesForecaster
fc = TimeSeriesForecaster(method='auto', horizon=30)
fc.fit(series)
forecast = fc.predict_with_ci()
cv_results = fc.walk_forward_cv(series, n_splits=5)
fig = fc.plot_forecast()
Data Quality Report
from scomp_link import DataQualityReport
dqr = DataQualityReport(df)
report = dqr.generate() # missing, cardinality, constants, duplicates, correlations
dqr.save_html('quality_report.html')
Anomaly Detection
from scomp_link import AnomalyDetector
detector = AnomalyDetector(
contamination=0.05,
methods=['iforest', 'lof', 'tabnet', 'transformer'],
consensus_threshold=2,
)
results = detector.fit_predict(df, features=['col1', 'col2', 'col3'])
Project Structure
scomp_link/
├── cli.py # CLI (24 commands)
├── core.py # ScompLinkPipeline orchestrator
├── preprocessing/
│ ├── data_processor.py # Preprocessor (polars backend)
│ ├── feature_engineer.py # FeatureEngineer (sklearn-compatible)
│ └── data_quality.py # DataQualityReport
├── models/
│ ├── model_factory.py # Decision-tree model selection
│ ├── regressor_optimizer.py
│ ├── classifier_optimizer.py
│ ├── ensemble_optimizer.py
│ ├── advanced_tuning.py # Optuna, Halving, EarlyStopping
│ ├── forecaster.py # TimeSeriesForecaster
│ ├── anomaly_detector.py
│ ├── ts_anomaly_detector.py
│ ├── contrastive_text.py # BERT contrastive learning
│ ├── supervised_text.py
│ └── supervised_img.py
├── validation/
│ ├── model_validator.py # Metrics + HTML reports
│ ├── advanced_cv.py # LOOCV, Bootstrap
│ └── fairness.py # FairnessMetrics
├── explainability/
│ └── explainer.py # ShapExplainer, LimeExplainer
├── monitoring/
│ └── drift_detector.py # DriftDetector (PSI + KS)
├── persistence/
│ └── artifact.py # ScompArtifact (.scomp format)
└── utils/
├── colors.py # Centralized color palettes
├── logger.py # Configurable logging
├── report_html.py # HTML report builder
├── plotly_utils.py # Plotly chart utilities
├── highcharts.py # Highcharts visualizations
└── rawgraphs/ # 31 SVG chart functions (server-side)
AI Agent Integration
scomp-link works natively with AI agents via MCP (Model Context Protocol) and Agent Skills.
MCP Server (22 tools for structured agent calls)
pip install scomp-link[mcp]
scomp-link mcp # Starts MCP server (stdio transport)
Claude Desktop (claude_desktop_config.json):
{"mcpServers": {"scomp-link": {"command": "scomp-link", "args": ["mcp"]}}}
Cursor (plugin — one click):
Kiro (.kiro/mcp.json):
{"mcpServers": {"scomp-link": {"command": "scomp-link", "args": ["mcp"]}}}
Remote (no install needed) — connect to the hosted MCP server on 🤗 Hugging Face Space or 🔧 Smithery:
{"mcpServers": {"scomp-link": {"url": "https://Euribor512-scomp-link.hf.space/sse"}}}
Docker:
docker pull jack15121/scomp-link:latest
docker run -i jack15121/scomp-link mcp
Available tools: describe_data, train_model, predict, validate_model, detect_drift, detect_anomalies, check_fairness, forecast_series, engineer_features, cluster_data, generate_report, create_visualization, compare_models, export_model, embed_text, select_backbone, report_create, report_add_section, report_add_text, report_add_table, report_add_chart, report_save
Quick Setup Prompt for AI Agents
Copy-paste this prompt into your AI agent (Claude, ChatGPT, Cursor, etc.) to enable scomp-link capabilities:
You have access to scomp-link, an ML toolkit with 22 MCP tools. Use them for:
- Data profiling:
describe_data(path)— always start here- Training:
train_model(data, target, task)with optionaltune=truefor Optuna- Validation:
validate_model(artifact, data, target)for test evaluation- Reports: Use the report builder for custom dashboards:
report_create(title)→ get report_idreport_add_section(id, title)→ structurereport_add_chart(id, engine, type, data, title)→ 39 chart types (plotly/rawgraphs/highcharts)report_add_table(id, json_data, title)→ data tablesreport_save(id, path)→ save HTML- Monitoring:
detect_drift,detect_anomalies,check_fairness- Forecasting:
forecast_series(data, column, horizon)Report branding defaults come from
~/.scomp-link/config.yaml. Runscomp-link init-configto set up.
Agent Skill (zero-dependency documentation)
# For Kiro
cp -r skills/scomp-link ~/.kiro/skills/
# For Claude Code
cp -r skills/scomp-link .claude/skills/
See AGENT_INTEGRATION.md for full setup guide.
Report Builder (MCP)
Build fully custom branded HTML reports step-by-step via MCP tools:
# 1. Configure corporate defaults (one-time setup)
# scomp-link init-config
# Edit ~/.scomp-link/config.yaml with your branding
# 2. Create a report (uses config defaults automatically)
report_create("Q4 Performance Report")
# 3. Add content
report_add_section(report_id, "Executive Summary")
report_add_table(report_id, metrics_json, "Key Metrics")
report_add_chart(report_id, "plotly", "linechart", data, "Revenue Trend")
report_add_chart(report_id, "rawgraphs", "treemap", data, "Market Share")
# 4. Save
report_save(report_id, "q4_report.html")
Configuration precedence: .scomp-link.yaml (local) > ~/.scomp-link/config.yaml (global) > built-in defaults
# Create global config with your corporate branding
scomp-link init-config
# Or create project-level config
scomp-link init-config --local
Testing
# Run all tests
pytest tests/ -v
# With coverage
pytest tests/ --cov=scomp_link --cov-report=html
Documentation
Full documentation with API reference and CLI guide:
pip install mkdocs mkdocs-material "mkdocstrings[python]"
mkdocs serve # http://localhost:8000
Contributing
git clone https://github.com/GiacomoSaccaggi/scomp-link.git
cd scomp_link
pip install -e ".[dev]"
pytest tests/ -v
License
MIT License
May the code be with you. 🚀
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file scomp_link-2.1.0.tar.gz.
File metadata
- Download URL: scomp_link-2.1.0.tar.gz
- Upload date:
- Size: 235.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c16382b5fe56bdf08fb857bd30dc7343ecbbf1b7688ebb84bda8e02b88aebc1a
|
|
| MD5 |
e75c856e178efeffe51ca18bb9937bde
|
|
| BLAKE2b-256 |
f3712028c8538d249399941fbe2f4dff3baf2a4ed211943cb1e46b64f236c3c3
|
File details
Details for the file scomp_link-2.1.0-py3-none-any.whl.
File metadata
- Download URL: scomp_link-2.1.0-py3-none-any.whl
- Upload date:
- Size: 204.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a24614e9c5c3e274fee275dbab01199c470fd8df64ef4d955a13d264eea5dd75
|
|
| MD5 |
1fb9b5b72cb7f135d77b5b79b55ba2e3
|
|
| BLAKE2b-256 |
b554da38acec55787304dd6d55cae8fed6de2f760ed32216af51c83210c2867f
|