Crates.io | diffai |
lib.rs | diffai |
version | 0.3.16 |
created_at | 2025-07-04 12:25:25.27277+00 |
updated_at | 2025-07-18 07:30:55.643865+00 |
description | AI/ML specialized diff CLI - PyTorch, Safetensors model comparison, tensor analysis |
homepage | https://github.com/kako-jun/diffai |
repository | https://github.com/kako-jun/diffai |
max_upload_size | |
id | 1737964 |
size | 164,071 |
AI/ML specialized diff tool for PyTorch, Safetensors, NumPy, and MATLAB files
A next-generation diff tool specialized for AI/ML and scientific computing workflows that understands model structures, tensor statistics, and numerical data - not just text changes. Native support for PyTorch, Safetensors, NumPy arrays, MATLAB files, and structured data.
# Traditional diff fails with binary model files
$ diff model_v1.safetensors model_v2.safetensors
Binary files model_v1.safetensors and model_v2.safetensors differ
# diffai shows meaningful model changes with full analysis
$ diffai model_v1.safetensors model_v2.safetensors
~ fc1.bias: mean=0.0018->0.0017, std=0.0518->0.0647
~ fc1.weight: mean=-0.0002->-0.0001, std=0.0514->0.0716
~ fc2.weight: mean=-0.0008->-0.0018, std=0.0719->0.0883
gradient_analysis: flow_health=healthy, norm=0.015000, ratio=1.0500
deployment_readiness: readiness=0.92, strategy=blue_green, risk=low
quantization_analysis: compression=0.0%, speedup=1.8x, precision_loss=1.5%
[WARNING]
• Memory usage increased moderately (+250MB). Monitor resource consumption.
• Inference speed moderately affected (1.3x slower). Consider optimization opportunities.
Traditional diff tools are inadequate for AI/ML workflows:
Challenge | Traditional Tools | diffai |
---|---|---|
Binary model files | "Binary files differ" | Tensor-level analysis with statistics |
Large files (GB+) | Memory issues or failures | Efficient streaming and chunked processing |
Statistical changes | No semantic understanding | Mean/std/shape comparison with significance |
ML-specific formats | No support | Native PyTorch/Safetensors/NumPy/MATLAB |
Scientific workflows | Text-only comparison | Numerical array analysis and visualization |
diffai complements existing MLOps tools by focusing on structural comparison rather than experiment management:
Aspect | diffai | MLflow / DVC / ModelDB |
---|---|---|
Focus | "Making incomparable things comparable" | Systematization, reproducibility, CI/CD integration |
Data Assumption | Unknown origin files / black-box generated artifacts | Well-documented and tracked data |
Operation | Structural and visual comparison optimization | Version control and experiment tracking specialization |
Scope | Visualization of "ambiguous structures" including JSON/YAML/model files | Experiment metadata, version management, reproducibility |
cargo install diffai
git clone https://github.com/kako-jun/diffai.git
cd diffai
cargo build --release
# Compare PyTorch models with full analysis (default)
diffai model_old.pt model_new.pt
# Compare Safetensors with complete ML analysis
diffai checkpoint_v1.safetensors checkpoint_v2.safetensors
# Compare NumPy arrays
diffai data_v1.npy data_v2.npy
# Compare MATLAB files
diffai experiment_v1.mat experiment_v2.mat
# Full ML analysis runs automatically for PyTorch/Safetensors
diffai baseline.safetensors finetuned.safetensors
# Outputs: 30+ analysis types including quantization, architecture, memory, etc.
# JSON output for automation
diffai model_v1.safetensors model_v2.safetensors --output json
# Detailed diagnostic information with verbose mode
diffai model_v1.safetensors model_v2.safetensors --verbose
# YAML output for human-readable reports
diffai model_v1.safetensors model_v2.safetensors --output yaml
When comparing PyTorch or Safetensors files, diffai automatically runs 30+ ML analysis features:
Automatic Features Include:
diffai provides comprehensive analysis by default for ML models, eliminating choice paralysis. Users get all relevant insights without needing to remember or specify dozens of analysis flags.
--verbose
/ -v
)Get comprehensive diagnostic information for debugging and performance analysis:
# Basic verbose output
diffai model1.safetensors model2.safetensors --verbose
# Verbose with structured data filtering
diffai data1.json data2.json --verbose --epsilon 0.001 --ignore-keys-regex "^id$"
Verbose output includes:
--recursive
)Example verbose output:
=== diffai verbose mode enabled ===
Configuration:
Input format: Safetensors
Output format: Cli
ML analysis: Full analysis enabled (all 30 features)
Epsilon tolerance: 0.001
File analysis:
Input 1: model1.safetensors
Input 2: model2.safetensors
Detected format: Safetensors
File 1 size: 1048576 bytes
File 2 size: 1048576 bytes
Processing results:
Total processing time: 1.234ms
Differences found: 15
ML/Scientific data analysis completed
📚 See Verbose Output Guide for detailed usage
Colored, human-readable output with intuitive symbols:
~
Changed tensors/arrays with statistical comparison+
Added tensors/arrays with metadata-
Removed tensors/arrays with metadataStructured output for MLOps integration and automation:
diffai model1.safetensors model2.safetensors --output json | jq .
Human-readable structured output for documentation:
diffai model1.safetensors model2.safetensors --output yaml
# Compare model before and after fine-tuning (full analysis automatic)
diffai pretrained_model.safetensors finetuned_model.safetensors
# Outputs: learning_progress, convergence_analysis, parameter stats, and 27 more analyses
# Analyze architectural changes during development
diffai baseline_architecture.pt improved_architecture.pt
# Outputs: architecture_comparison, param_efficiency_analysis, and full ML analysis
# Automated model validation in CI/CD (comprehensive analysis)
diffai production_model.safetensors candidate_model.safetensors
# Outputs: deployment_readiness, regression_test, risk_assessment, and 27 more analyses
# Performance impact assessment with JSON output for automation
diffai original_model.pt optimized_model.pt --output json
# Outputs: quantization_analysis, memory_analysis, performance_impact_estimate, etc.
# Compare NumPy experiment results
diffai baseline_results.npy new_results.npy
# Analyze MATLAB simulation data
diffai simulation_v1.mat simulation_v2.mat
# Compare compressed NumPy archives
diffai dataset_v1.npz dataset_v2.npz
# Generate comprehensive reports
diffai experiment_baseline.safetensors experiment_improved.safetensors \
--generate-report --markdown-output --review-friendly
# A/B test analysis
diffai model_a.safetensors model_b.safetensors \
--statistical-significance --hyperparameter-comparison
-f, --format <FORMAT>
- Specify input file format-o, --output <OUTPUT>
- Choose output format (cli, json, yaml)-r, --recursive
- Compare directories recursivelyNote: For ML models (PyTorch/Safetensors), comprehensive analysis including statistics runs automatically
--path <PATH>
- Filter differences by specific path--ignore-keys-regex <REGEX>
- Ignore keys matching regex pattern--epsilon <FLOAT>
- Set tolerance for float comparisons--array-id-key <KEY>
- Specify key for array element identification--sort-by-change-magnitude
- Sort by change magnitude$ diffai simple_model_v1.safetensors simple_model_v2.safetensors
anomaly_detection: type=none, severity=none, action="continue_training"
architecture_comparison: type1=feedforward, type2=feedforward, deployment_readiness=ready
convergence_analysis: status=converging, stability=0.92
gradient_analysis: flow_health=healthy, norm=0.021069
memory_analysis: delta=+0.0MB, efficiency=1.000000
quantization_analysis: compression=0.0%, speedup=1.8x, precision_loss=1.5%
regression_test: passed=true, degradation=-2.5%, severity=low
~ fc1.bias: mean=0.0018->0.0017, std=0.0518->0.0647
~ fc1.weight: mean=-0.0002->-0.0001, std=0.0514->0.0716
~ fc2.bias: mean=-0.0076->-0.0257, std=0.0661->0.0973
~ fc2.weight: mean=-0.0008->-0.0018, std=0.0719->0.0883
~ fc3.bias: mean=-0.0074->-0.0130, std=0.1031->0.1093
~ fc3.weight: mean=-0.0035->-0.0010, std=0.0990->0.1113
$ diffai baseline.safetensors improved.safetensors --output json
{
"anomaly_detection": {"type": "none", "severity": "none"},
"architecture_comparison": {"type1": "feedforward", "type2": "feedforward"},
"deployment_readiness": {"readiness": 0.92, "strategy": "blue_green"},
"quantization_analysis": {"compression": "0.0%", "speedup": "1.8x"},
"regression_test": {"passed": true, "degradation": "-2.5%"}
// ... plus 25+ additional analysis features
}
$ diffai experiment_data_v1.npy experiment_data_v2.npy
~ data: shape=[1000, 256], mean=0.1234->0.1456, std=0.9876->0.9654, dtype=float64
$ diffai simulation_v1.mat simulation_v2.mat
~ results: var=results, shape=[500, 100], mean=2.3456->2.4567, std=1.2345->1.3456, dtype=double
+ new_variable: var=new_variable, shape=[100], dtype=single, elements=100, size=0.39KB
diffai is optimized for large files and scientific workflows:
We welcome contributions! Please see CONTRIBUTING for guidelines.
git clone https://github.com/kako-jun/diffai.git
cd diffai
cargo build
cargo test
# Run all tests
cargo test
# Run specific test categories
cargo test --test integration
cargo test --test ml_analysis
This project is licensed under the MIT License - see the LICENSE file for details.