feat: v0.5.0 adversarial classifier (opt-in ML scorer)#34
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (200)
📒 Files selected for processing (74)
📝 WalkthroughWalkthroughVersion 0.5.0 adds an opt-in ML workflow: an XGBoost-based AdversarialClassifier (shipped as a joblib bundle), feature extraction and scoring APIs, a reproducible training/evaluation script with held-out benchmark results, an executable example, packaging/optional-deps updates, and many new benign-control JSONL fixtures plus a benchmark JSON. Changes
Sequence DiagramsequenceDiagram
participant Script as scripts/classifier_vs_heuristic.py
participant Loader as JSONL Loader
participant Splitter as Seed Splitter
participant Featurer as Feature Extractor
participant Trainer as XGBoost Trainer
participant Heuristic as Heuristic Pipeline
participant Evaluator as Evaluator/Metrics
participant Bundle as Joblib Bundle
Script->>Loader: read JSONL benign/adversarial entries
Loader-->>Script: normalized entries (category/context/params)
Script->>Splitter: deterministically split by seed ID (train/test)
Splitter-->>Script: train/test partitions
Script->>Featurer: convert entries -> feature vectors
Featurer-->>Script: feature matrix, vocab, feature names
Script->>Trainer: train XGBoost on train features/labels
Trainer-->>Script: trained model
Script->>Evaluator: predict probabilities on test set
Evaluator->>Trainer: model.predict_proba(features)
Trainer-->>Evaluator: probabilities
Script->>Heuristic: generate heuristic binary decisions via Pipeline
Heuristic-->>Evaluator: heuristic predictions
Evaluator->>Evaluator: compute recall/FPR/balanced-accuracy by threshold
Evaluator->>Bundle: save model, vocab, feature names, default threshold to joblib
Bundle-->>Script: adversarial_classifier_v1.joblib artifact
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~35 minutes Possibly related PRs
Poem
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
| if force_malicious is not None: | ||
| e["expected"] = "ALLOW" if is_benign_file else "DENY" | ||
| out.append(e) | ||
| except json.JSONDecodeError: |
Summary by CodeRabbit
Release Notes
New Features
vaara[ml]installation extra.Documentation
Tests