Pre-merge diagnostic framework for LLM model merging — analyze, diagnose, and optimize before you merge.
Project description
MergeLens
Pre-merge diagnostics for LLM model merging
34% of top Open LLM Leaderboard models are merges, yet merging is blind trial-and-error. MergeLens tells you before you merge whether it will work — and which method to use.
Features
- Single compatibility score — Merge Compatibility Index (MCI): 0-100, go/no-go verdict
- 10 diagnostic metrics — cosine similarity, spectral overlap, sign disagreement, TSV interference, CKA, and more
- Strategy recommender — optimal merge method + ready-to-paste MergeKit YAML
- Conflict zone detection — pinpoints problematic layers
- Interactive HTML reports — self-contained Plotly dashboards
- MCP server — AI assistants can diagnose merges natively
- Memory efficient — lazy safetensors loading, peak memory = 2× largest layer
Install
pip install mergelens
Optional extras:
pip install mergelens[report] # Interactive HTML report generation
pip install mergelens[mcp] # MCP server for AI assistants
pip install mergelens[audit] # Capability probing (requires transformers)
pip install mergelens[all] # Everything
Quick Start
CLI
Compare two models (local paths or HuggingFace Hub IDs):
mergelens compare model_a/ model_b/
mergelens compare meta-llama/Llama-3-8B mistralai/Mistral-7B-v0.1
Add a base model for task vector metrics:
mergelens compare model_a/ model_b/ --base base_model/
Generate an interactive HTML report:
mergelens compare model_a/ model_b/ --report report.html
mergelens compare model_a/ model_b/ --base base_model/ --report report.html
The HTML report is a single self-contained file with embedded Plotly charts — no server required.
Report contents:
- MCI Gauge — score, verdict, confidence interval
- MCI Components — per-metric breakdown table
- Weight Similarity Heatmap — layer × model-pair cosine similarity grid
- Spectral Analysis Dashboard — spectral overlap, rank ratio, task vector energy, and sign disagreement across layers
- Layer Divergence Chart — L2 distance (bars) and sign disagreement rate (line) on dual axes
- Conflict Zone Analysis — bar chart + table with severity, layer range, and recommendation per zone
- Layer Metrics Table — raw values for all metrics per layer, scrollable
- Strategy Recommendation — method, confidence, reasoning, and copy-paste MergeKit YAML
Diagnose a MergeKit config before running it:
mergelens diagnose merge.yaml
Python API
from mergelens import compare_models
result = compare_models(["model_a/", "model_b/"])
print(f"MCI: {result.mci.score} — {result.mci.verdict}")
# MCI: 72.3 — compatible
Inspect conflicts and get a strategy recommendation:
for zone in result.conflict_zones:
print(f"Layers {zone.start_layer}-{zone.end_layer}: {zone.severity.value}")
if result.strategy:
print(f"Recommended: {result.strategy.method.value}")
print(result.strategy.mergekit_yaml) # copy-paste into MergeKit
Diagnose a MergeKit config:
from mergelens import diagnose_config
result = diagnose_config("merge.yaml")
print(f"Overall interference: {result.overall_interference:.4f}")
Metrics
| Metric | What It Measures | Range | Source |
|---|---|---|---|
| Cosine Similarity | Weight vector alignment | [-1, 1] | Standard |
| L2 Distance | Normalized weight divergence | [0, +inf) | Standard |
| KL Divergence | Weight distribution difference | [0, +inf) | Standard |
| Spectral Subspace Overlap | Top-k SVD direction alignment | [0, 1] | Zhou et al. 2026 |
| Effective Rank Ratio | Dimensionality compatibility | [0, 1] | Shannon entropy |
| Sign Disagreement Rate | Parameter sign conflicts | [0, 1] | TIES-Merging (Yadav et al. 2023) |
| TSV Interference | Cross-task singular vector conflict | [0, +inf) | Gargiulo et al. 2025 |
| Task Vector Energy | Knowledge concentration in top SVs | [0, 1] | Choi et al. 2024 |
| CKA Similarity | Activation representation similarity | [0, 1] | Kornblith et al. 2019 |
| Merge Compatibility Index | Composite go/no-go score | [0, 100] | Ours |
MCI Verdicts
| Score | Verdict | Meaning |
|---|---|---|
| 75-100 | Highly Compatible | Merge with confidence |
| 55-74 | Compatible | Should work, monitor quality |
| 35-54 | Risky | Expect degradation, use targeted methods |
| 0-34 | Incompatible | These models likely shouldn't be merged |
Strategy Recommendations
MergeLens maps diagnostic profiles to merge methods. Different metrics predict success for different methods (Zhou et al. 2026 found only 46.7% metric overlap between methods):
| Diagnostic Profile | Recommended Method |
|---|---|
| High cosine similarity everywhere | SLERP |
| High sign disagreement (>30%) | TIES |
| Concentrated task vector energy | DARE |
| Low spectral overlap | Linear (small alpha) |
Each recommendation includes a ready-to-paste MergeKit YAML config.
MCP Integration
{
"mcpServers": {
"mergelens": {
"command": "mergelens",
"args": ["serve"]
}
}
}
Tools: compare_models, diagnose_merge, get_conflict_zones, suggest_strategy, generate_report, explain_layer, get_compatibility_score, audit_model
How It Works
MergeLens loads model weights lazily via memory-mapped safetensors (peak memory: 2× largest layer, not 2× full model). It computes metrics layer-by-layer, detects conflict zones, and aggregates everything into the MCI score.
Security: No pickle/torch.load (safetensors only), yaml.safe_load(), tensor size limits, no credential leakage.
Development
git clone https://github.com/shuhulx/mergelens.git
cd mergelens
pip install -e ".[dev,all]"
pytest
References
- Zhou et al. 2026, "Demystifying Mergeability of Homologous LLMs" (arXiv:2601.22285)
- Gargiulo et al. CVPR 2025, "Task Singular Vectors" (arXiv:2412.00081)
- Yadav et al. NeurIPS 2023, "TIES-Merging" (arXiv:2306.01708)
- Choi et al. 2024, "Revisiting Weight Averaging for Model Merging" (arXiv:2412.12153)
- Kornblith et al. 2019, "Similarity of Neural Network Representations Revisited" (arXiv:1905.00414)
- Rahamim et al. 2026, "Will it Merge?" (arXiv:2601.06672)
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
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 mergelens-0.2.1.tar.gz.
File metadata
- Download URL: mergelens-0.2.1.tar.gz
- Upload date:
- Size: 42.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b177a9365b859dab9252022de7b7714a189dd9c2abdb52a326c001991dafeace
|
|
| MD5 |
79d8146fafae30d011ca1bbf3e852a4e
|
|
| BLAKE2b-256 |
23cccc15ad0c0bc961121ae998ec3660c2e400b268a7280997fcff83cd793f39
|
File details
Details for the file mergelens-0.2.1-py3-none-any.whl.
File metadata
- Download URL: mergelens-0.2.1-py3-none-any.whl
- Upload date:
- Size: 51.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9f907fffc8ed9a52cebe39d5f64569f48c3498462ee783a0db849a3e61632c9
|
|
| MD5 |
5e5f1d4a969a1c5c2544c33746868ceb
|
|
| BLAKE2b-256 |
e8fa61ea320fdaefec04f4a0f9593aedfaa3f1b0de5a801155aff97fb4be6b36
|