diffai-js
Version:
A Node.js wrapper for the diffai CLI tool - AI/ML specialized diff tool for PyTorch, Safetensors, NumPy, and MATLAB files with deep tensor analysis
246 lines (186 loc) • 8 kB
Markdown
[](https://badge.fury.io/js/diffai-js)
[](https://npmjs.org/package/diffai-js)
AI/ML specialized data diff tool for deep tensor comparison and analysis. This npm package provides a convenient way to install and use diffai through Node.js.
```bash
npm install -g diffai-js
npm install diffai-js
npx diffai model1.safetensors model2.safetensors
```
```bash
diffai model_v1.safetensors model_v2.safetensors
diffai model1.safetensors model2.safetensors --output json
diffai model1.safetensors model2.safetensors --verbose
diffai experiment_v1.npy experiment_v2.npy
diffai simulation_v1.mat simulation_v2.mat
diffai config_v1.json config_v2.json
diffai data_v1.yaml data_v2.yaml
```
- **Safetensors** (.safetensors) - PyTorch model format with ML analysis
- **PyTorch** (.pt, .pth) - Native PyTorch models with tensor statistics
- **NumPy** (.npy, .npz) - Scientific computing arrays with statistical analysis
- **MATLAB** (.mat) - Engineering/scientific data with numerical analysis
- **JSON** (.json) - API configurations, model metadata
- **YAML** (.yaml, .yml) - Configuration files, CI/CD pipelines
- **TOML** (.toml) - Rust configs, Python pyproject.toml
- **XML** (.xml) - Legacy configurations, model definitions
- **CSV** (.csv) - Datasets, experiment results
- **INI** (.ini) - Legacy configuration files
diffai provides 30+ specialized analysis functions that run automatically for AI/ML models:
For PyTorch and Safetensors files, all analysis features run automatically:
- **Statistical Analysis** - Detailed tensor statistics (mean, std, min, max, shape, dtype)
- **Quantization Analysis** - Quantization effect analysis
- **Architecture Comparison** - Model architecture and structural changes (architecture-comparison)
- **Memory Analysis** - Memory usage and optimization opportunities
- **Anomaly Detection** - Numerical anomalies and training issues
- **Convergence Analysis** - Training convergence patterns
- **Gradient Analysis** - Gradient flow health assessment
- **Deployment Readiness** - Production deployment assessment
- **Plus 22+ additional specialized features**
## 💡 Usage Examples
### Research & Development
```bash
# Monitor training progress (all analysis automatic)
diffai epoch_100.safetensors epoch_101.safetensors
# Analyze fine-tuning effects (comprehensive analysis automatic)
diffai base_model.safetensors finetuned_model.safetensors
# Debug training issues (full analysis automatic)
diffai stable_checkpoint.safetensors problematic_checkpoint.safetensors
```
### MLOps & Production
```bash
# Pre-deployment validation (all analysis automatic)
diffai current_prod.safetensors candidate.safetensors
# CI/CD integration with JSON output
diffai baseline.safetensors modified.safetensors --output json | jq .
# Performance impact assessment (comprehensive analysis automatic)
diffai model_v1.safetensors model_v2.safetensors
```
### Scientific Computing
```bash
# Compare experimental results
diffai control_group.npy treatment_group.npy
# Engineering simulation analysis
diffai simulation_baseline.mat simulation_optimized.mat
# Dataset version comparison
diffai dataset_v1.npz dataset_v2.npz --sort-by-change-magnitude
```
## 🔧 Integration Examples
### JavaScript API (Recommended)
```javascript
const { diff, diffString, inspect, isDiffaiAvailable, getVersion, DiffaiError } = require('diffai');
// Basic model comparison
async function compareModels() {
try {
const result = await diff('model1.safetensors', 'model2.safetensors', {
output: 'json'
});
console.log(`Found ${result.length} differences`);
result.forEach(diff => {
console.log(`${diff.type}: ${diff.path}`);
});
} catch (error) {
if (error instanceof DiffaiError) {
console.error(`diffai failed: ${error.message}`);
}
}
}
// String comparison
async function compareStrings() {
const model1Data = JSON.stringify({name: "bert-base", layers: 12});
const model2Data = JSON.stringify({name: "bert-large", layers: 24});
const result = await diffString(model1Data, model2Data, 'json', {
output: 'json'
});
return result;
}
// Check availability
async function checkDiffai() {
if (await isDiffaiAvailable()) {
const version = await getVersion();
console.log(`diffai ${version} is available`);
} else {
console.error('diffai is not available');
}
}
```
```javascript
const { spawn } = require('child_process');
function compareTensors(model1, model2, options = []) {
return new Promise((resolve, reject) => {
const args = [model1, model2, ...options];
const child = spawn('diffai', args);
let output = '';
child.stdout.on('data', (data) => output += data);
child.on('close', (code) => {
if (code === 0) resolve(output);
else reject(new Error(`diffai failed with code ${code}`));
});
});
}
// Usage
compareTensors('model1.safetensors', 'model2.safetensors', ['--output', 'json'])
.then(result => console.log(JSON.parse(result)))
.catch(console.error);
```
```javascript
const fs = require('fs');
const { diff } = require('diffai');
async function logModelDiff(model1Path, model2Path, runId) {
try {
const diffData = await diff(model1Path, model2Path, {
output: 'json'
});
// Save comparison results
fs.writeFileSync(`mlruns/${runId}/artifacts/model_comparison.json`,
JSON.stringify(diffData, null, 2));
console.log(`Model comparison logged for run ${runId}`);
return diffData;
} catch (error) {
console.error(`MLflow integration failed: ${error.message}`);
throw error;
}
}
```
This npm package automatically downloads the appropriate binary for your platform:
- **Linux** (x86_64, ARM64)
- **macOS** (Intel x86_64, Apple Silicon ARM64)
- **Windows** (x86_64)
The binary is downloaded during `npm install` and cached locally. If download fails, the package falls back to using `diffai` from your system PATH.
- **[diffx](https://www.npmjs.com/package/diffx-js)** - General-purpose structured data diff tool
- **[diffai (PyPI)](https://pypi.org/project/diffai-python/)** - Python package for diffai
- **[diffai (GitHub)](https://github.com/kako-jun/diffai)** - Main repository
- [CLI Reference](https://github.com/kako-jun/diffai/blob/main/docs/reference/cli-reference.md)
- [ML Analysis Guide](https://github.com/kako-jun/diffai/blob/main/docs/reference/ml-analysis.md)
- [User Guide](https://github.com/kako-jun/diffai/blob/main/docs/user-guide/)
MIT License - see [LICENSE](https://github.com/diffai-team/diffai/blob/main/LICENSE) file for details.
Contributions welcome! Please see [CONTRIBUTING.md](https://github.com/diffai-team/diffai/blob/main/CONTRIBUTING.md) for guidelines.
---
**diffai** - Making AI/ML data differences visible, measurable, and actionable. 🚀