Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
Added¶
- Citable: the 0.3.0 release is archived on Zenodo. Version DOI
10.5281/zenodo.22161336; concept DOI
10.5281/zenodo.22161335 on the README badge and in
CITATION.cff. (#24)
[0.3.0] - 2026-08-29¶
The "make it provable" release. Every number in the README and the documentation is formatted from a committed artifact and held to it by a test.
Added — measured results¶
- The first real result. PlantVillage 5-way 5-shot, 100 episodes, seed 42:
91.4% ± 1.0 accuracy, against nearest-centroid, k-NN and a linear-probe
baseline on the same episodes and embeddings. AdaptShot's accuracy is
nearest-centroid's, to the query; what the layers above buy is the
prediction set. (
benchmarks/run_plantvillage.py, #18, #19) - Conformal coverage, measured: 98.1% ± 0.6 at a 90% target, mean set size 1.66, against a calibrated top-1 threshold that reached 83.9%. (#14, #86)
- Coverage under distribution shift: blur, brightness, JPEG and downscale
applied to queries only; the sets widen, the bound still bends (85.5% at
blur σ=4), the OOD flag correlates 0.92 with the loss, and ten in-situ
corrections recover the worst cell to 89%. (
benchmarks/run_shift.py, #29) - Latency by stage (median and p95), cold start, and peak memory for one cycle and for the harness, named apart, with the CPU model recorded. 120 MB for one fresh process on the core install. (#20)
- ARM, measured.
benchmarks/run_device.pyprofiles whatever machine it runs on -- torch-free, dataset-free, on the bundled photographs -- and CI runs it, the full suite and the ONNX export on an ARM runner on every change. Both artifacts are committed and the README's device table is held to them. A Neoverse-N2 server core, not a phone; the README says which. (#31) - ONNX parity benchmark, each backend in its own process. (#36)
- Every figure in the README, the technical note and the docs is formatted from
a committed
results/*.jsonand asserted bytests/test_docs_claims.py.
Added — features¶
- Torch-free inference.
mobilenet_v3_smallships as ONNX inside the wheel (4.0 MB);pip install adaptshotis numpy, Pillow and onnxruntime only, and loads a support set, predicts, saves and reloads. Torch is needed only for fine-tuning and non-bundled backbones. The default backbone changed to the bundled one. (#35, #36) check_environment(): what this machine can do, with every figure measured on it; a GPU is named and never selected. Experimental. (#38)- Twelve real PlantVillage photographs ship in the wheel (
adaptshot.data.sample_images) so the README quickstart runs offline in seven lines; four more for the demo. Licence and checksums beside them. (#28) examples/demo/: a conference demo that disables its own network access, runs in under two seconds, and shows the set widening and the refusal. (#27)BackboneErrornames the backbone, the ones that would work and the extra that installs torch, instead ofImportError: torchfrom four frames deep.PredictionResult.conformal_calibratedandConformalPredictionSet.calibrated: a cold-start singleton says so instead of claiming 1 − α. (#80)adaptshot.api: every public name classified stable (24) or experimental (10), enforced bytests/test_api_surface.py. (#23)bundled_onnx_backbones(),ConformalEngine.min_informative_size,ConformalEngine.nonconformity().
Changed¶
- Conformal nonconformity score defaults to the distance ratio
d_true/min(d). The max-scaled softmax scored clean, blurred and foreign-crop photographs 0.72–0.80 alike and could not widen a set.softmaxanddistanceremain selectable. Published figures moved: coverage 97.5% → 98.1%, set size 2.05 → 1.66. Deliberate exception to the stability policy, recorded. (#86) FewShotLearnergives its conformal engine a floor ofmax(10, ⌈(1−α)/α⌉)calibration scores. (#14)adaptshot.core.contrastivemoved toadaptshot.training.contrastive; the old path warns and is removed in 0.4.0. (#23)ACTEngineandUPUGFPrunerare stable — they have tests now. (#74)__version__is read from package metadata;pyproject.tomlis the only declaration. (#25)- numpy annotations are
FloatArray/LabelArray/IntArray/BoolArray(adaptshot.utils.arrays); 157type-argerrors under numpy 2.2 → 0. (#44) - The ruff ignore list is empty;
scripts/is linted. (#41) - Documentation rebuilt on Diátaxis: six beginner tutorials, eleven how-to
guides, explanation, reference and contributor sections; every tutorial and
how-to code block is executed by
tests/test_docs_tutorials_run.py; every page has an edit link; broken links fail the build. Superseded pages retired todocs-archive/. (#39)
Fixed¶
- Conformal quantile clamp: where
n < (1−α)/αthe engine returned the largest observed score instead of the full set, under-covering at 91.3% against a 95% promise at the library's own defaults. (#14) - OOD threshold calibrated in-sample flagged 45 of 45 in-distribution photographs; leave-one-out calibration brings it to 3 of 45, with 45 of 45 flagged on genuinely out-of-domain photographs. (#54)
UPUGFPrunerkept the confident examples (score(1−u)^w, the inverse of its documentation) and, above 100 rows, rewarded duplicates (inverted LSH collision term). (#74)_projectguarded one of fourOptionalfields; a partially restored contrastive head failed inside a matmul. (#44)- The README quickstart pinned a non-bundled backbone and referenced files that did not exist; it now runs, and CI runs it. (#28)
- Tambua's
maize.yamlnamedresnet18, which a standard install cannot run; it names the bundled backbone.
Deprecated¶
adaptshot.core.contrastive(import path) — removed in 0.4.0.UncertaintyQuantifier.compute_perturbation_variance,get_ood_summary,get_class_statistics— no callers anywhere; removed in 0.4.0. (#23)
Infrastructure¶
- Releases on
v*tags with PyPI Trusted Publishing, a clean-container install test against the built wheel, TestPyPI forrctags. (#25) offline-wheelCI job: the wheel installed into a clean venv and the inference path run inside a network namespace with no interfaces; any network access fails the build. (#30)- The CI test matrix installs CPU-only torch; the CUDA caches had blown past the
10 GB cache limit and evicted the CIFAR-10 cache, turning a two-minute
benchmark job into a thirty-five-minute download. The
test-corejob is enforcing.mkdocs build --stricton every pull request. (#60, #36)
Earlier notes in this cycle¶
Removed¶
adaptshot.studio(1,822 lines, 23% of the library, four tests) — extracted to its own project. It was a Gradio desktop application, not few-shot learning and not a library, and it draggedgradio,pandas,onnxandonnxruntimeinto the project's identity and its type checking. A GUI also has a different release cadence from a library; coupling them made every interface tweak a library release. Tracked in #21.
Nothing was lost. The full commit history was extracted before anything was
deleted and lives on the
studio-extract
branch — thirteen commits, ready to become a repository of its own.
-
adaptshot.ui.app(151 lines) — the library shipped two Gradio interfaces at once. All four of its capabilities exist in Tambua, in more complete form. Tracked in #22. -
The
guianduiextras and theadaptshot-studioconsole script, which existed only for the above.
The maintained application is Tambua, a separate distribution
built on AdaptShot — pip install tambua. tests/test_library_ships_no_gui.py fails if
a GUI reappears anywhere under src/adaptshot/, if either extra returns, or if a live
document points at a removed entrypoint.
Corrected¶
Documentation claims that were not true when written, retracted here rather than quietly edited away. A changelog that records a retraction is worth more than one that only lists features.
- "MziziGuard is deployed" — it was not, and is not. No farmer has used it. Its
sample images are generated with
ImageDraw.ellipse(). It is a worked example, and is now labelled as one. Tracked in #17. - "Torch-free inference via bundled backbones" (v0.2.0 entry below, and the front
page) — there are no bundled backbones;
src/adaptshot/data/contains only__init__.py, and inference requires torch today. Tracked in #35 and #36. - "20ms P95 latency" — the benchmark artifact this figure cited reports
latency_p95_ms: 36.43. The claim was never true of the run it pointed at. - "~150ms on CPU" (MziziGuard) and "<2MB RAM" (v0.1.1 audit) — no script in
benchmarks/produces either number. Removed rather than re-estimated. - "Distribution-free 95% coverage guarantee" and "<250MB RAM" — these are design targets, not measurements. Neither has been verified. Restated as targets; tracked in #14 and #13.
Historical entries below are left as written. They record what was claimed at the time, which is the point of a changelog; the corrections above record what was actually true.
Changed¶
- BREAKING: minimum supported Python is now 3.10 (was 3.9). Python 3.13 and 3.14 are
now supported and tested. The CI matrix covers 3.10 through 3.14; every version listed
in the trove classifiers is a version that actually runs the test suite, enforced by
tests/test_release_metadata.py.
If you are on Python 3.9, stay on 0.2.x. Dropping 3.9 lets the codebase use native
X | None and builtin generics rather than typing.Optional and typing.Dict, which
removed 492 lint findings in one pass.
-
Development tool versions are now upper-bounded.
ruff,mypy,pytest,pytest-cov, andpre-commitpreviously had lower bounds only. A ruff release that expanded its default rule set from roughly 60 rules to 413 turned CI red with 479 findings without a single line of project code changing. Tool bumps now arrive as reviewable Dependabot PRs. -
The ruff rule set is now declared explicitly in
[tool.ruff.lint]rather than inherited from whatever the installed version happens to default to. -
mypy --strictnow checks all 32 modules in the package — previously zero. It aborted inside numpy's stubs before reaching any project file, so every merge for months passed a type check that had examined nothing.python_versionis now 3.12 (the floor stays guarded by ruff'starget-versionand by a real 3.10 CI job), the lint job installs the torch extra so torch calls are checked against real stubs, andtests/test_mypy_coverage.pyasserts on the number of files mypy reports checking, not just on the error count.
Fixed¶
utils/profiling.pysilently swallowed every exception frompsutil, reporting0.0 MBwhen a memory measurement failed. Callers could not distinguish a real zero reading from a failed one — which would have made a<250MBceiling assertion pass for the wrong reason. Failures are now logged.core/backends/onnx_backend.pyusedfunctools.lru_cacheon a method, which keys onselfand would have retained every backend instance, along with up to four loaded ONNX sessions and their weights, for the lifetime of the process. Replaced with a per-instance cache that is released with the instance.- Eight type errors that had been invisible behind the aborted mypy run: four redundant
cast()calls, two stale# type: ignorecomments, a numpy overload that resolved to a scalar because a shape was typedAny, and an unproven non-null invariant incore/contrastive.py. The last is now an explicit runtime check rather than a# type: ignore, so a future edit that breaks the invariant fails where it is broken instead of surfacing as aTypeErrorinside the training loop.
[0.2.0] - 2026-06-14¶
Added¶
- Conformal Prediction Engine (
conformal.py): Distribution-free conformal prediction with split and cross modes, softmax/distance nonconformity scores, and adaptive prediction sets at configurable significance levels. - Contrastive Prototype Networks (
contrastive.py): Siamese-style contrastive loss with InfoNCE, learnable temperature, 2-layer MLP projection head (128-dim bottleneck), and EMA momentum prototype updates. - Advanced Uncertainty Quantification (
uncertainty.py): Multi-signal uncertainty with epistemic (MC Dropout), aleatoric (k-NN entropy), and distributional (Mahalanobis distance) signals; OOD detection via class-conditional Gaussian distributions. - XAI Explainability (
explain.py): Gradient-based saliency, feature attribution (top-k neighbor influence), confidence decomposition, and counterfactual explanation support. - New Config Fields:
conformal_alpha,conformal_mode,uncertainty_mode,explainability_enabled(26 total fields, up from 22). - New inference mode:
inference_mode="contrastive"for contrastive prototype-based classification. - 37 new tests across 4 test files:
test_conformal.py(12),test_contrastive.py(7),test_uncertainty.py(10),test_explain.py(8). - 12 new documentation pages: Architecture deep-dive, algorithm theory, full API reference, 5 advanced tutorials (conformal prediction, uncertainty, explainability, contrastive learning, end-to-end workflow), 2 comprehensive GUI guides (Studio, Pilot Dashboard).
- True Leave-One-Out Conformal Calibration: Per-example prototype recomputation for valid finite-sample coverage guarantees under exchangeability.
- Shrinkage Covariance Estimation: Ledoit-Wolf-style shrinkage with adaptive alpha = d/(d+n_k) for robust Mahalanobis OOD detection in high-dimensional few-shot settings.
- Bootstrap Temperature Calibration: LOO grid-search temperature optimization for autonomous operation without requiring pre-calibrated temperature.
- Random Projection LSH for UP-UGF: Approximate O(N log N) redundancy scoring via random projection locality-sensitive hashing when buffer exceeds 100 examples.
- Memory Profiling (
utils/profiling.py):MemoryTrackercontext manager with tracemalloc + psutil instrumentation;estimate_model_memory_mb()for pre-flight checks. - ONNX Export Script (
scripts/export_backbones.py): Exports ResNet-18 and MobileNetV3-Small to ONNX with SHA-256 verification and metadata generation. - miniImageNet Benchmark Support: CSV-based miniImageNet loading,
BASELINE_REFERENCESfor Prototypical/Matching/MAML baselines, and--full-benchmarkCLI flag. - Historical Penalty Tracking:
ExplainabilityEnginetracks ACT and OOD penalties over time for intelligent confidence decomposition fallbacks (replaces magic numbers). - Eco-Mode Enhancements: 32×32 preview resolution (up from 16×16),
clear_backbone_cache()for@lru_cacheinvalidation on config change, norm ratio eco-mode safety guard.
Changed¶
- Schema version bumped to
0.2.0with backwards-compatible migration. - Package version updated to
0.2.0-devinpyproject.tomland__init__.py. FewShotLearnernow acceptsinference_mode="contrastive"and wires new engines (Conformal, Contrastive, Uncertainty, Explainability).PredictionResultextended with conformal prediction sets, uncertainty reports, and explanation results.- Default
inference_modechanged to"prototypical".
Fixed¶
np.uniqueunpacking bug in uncertainty module (single return value incorrectly destructured).- Mypy strict-mode compliance across all 31 source files.
- Pre-existing test failures from schema version and inference_mode API mismatches.
- Contrastive inference wired:
predict()now correctly routes to contrastive nearest-prototype wheninference_mode="contrastive"(was silently falling through to nearest-neighbor). - Epistemic uncertainty implemented: Replaced unimplemented MC Dropout claim with working embedding perturbation sensitivity proxy (
estimate_epistemic()). - Uncertainty mode gating:
uncertainty_modeconfig field now gates signal computation inUncertaintyQuantifier.quantify(), avoiding wasted compute. - Cross-conformal mode: Implemented k-fold cross-conformal quantile averaging in
ConformalEnginewhenconformal_mode="cross". - OOD detection unified:
predict()now uses Mahalanobis-based OOD detection viaUncertaintyQuantifier.is_ood()as the primary path instead of the legacy distance-threshold method. - Confidence decomposition clarified: Simplified math in
decompose_confidence()tocalibrated + penalties, eliminating confusing intermediate calculations. - Documentation accuracy: Replaced "gradient-based saliency" claims with honest "embedding-space saliency" language; updated epistemic uncertainty description from MC Dropout to perturbation sensitivity.
- Contrastive projection head training:
_train_projection_head()now performs full InfoNCE gradient descent through W1/b1/W2/b2 with momentum SGD (was previously initialized but never trained, making the projection head an identity transform). - Conformal LOO calibration:
_self_calibrate_conformal()recomputes prototypes excluding each support example for true leave-one-out nonconformity scores (was reusing full-support prototypes, invalidating coverage guarantees). - Mahalanobis shrinkage:
fit_class_distributions()uses shrinkage covariance estimation with adaptive alpha, falling back to diagonal when n_per_class < embedding_dim (was using raw sample covariance, which is singular in few-shot high-dim settings). - CA-EWC scope honesty:
CAEWCFinetunerdocstring now explicitly states head-only scope (~2K params for 5-way ResNet-18), not full-network EWC. - ACT symmetric update: Threshold delta replaced with
η * (incorrect_rate − correct_rate)plus mean-reversion toward base threshold, eliminating monotonic drift. - Confidence decomposition fallbacks: Replaced magic numbers
-0.15/-0.25with historical 20-window averages of tracked ACT penalties. - UP-UGF LSH mode:
_compute_redundancy_scores()splits into exact (N≤100) and approximate LSH (N>100) paths, reducing O(N²) to O(N log N) for large buffers. - Graceful calibration fallback:
_calibrate_or_raise()no longer raises on first predict; uses bootstrap temperature calibration when conformal buffer is cold. - Eco-mode resolution: Preview upgraded from 16×16 to 32×32 with norm ratio guard (>0.3 required before early-exit gating).
- Config default fixed:
uncertainty_modedefault changed from"entropy"to"ensemble"(now consistent with README). - Conformal calibration wired: Self-calibration on
load_support_images()populates calibration buffer via leave-one-out scores;correct()feeds ground-truth nonconformity scores into the conformal engine. Prediction sets now produce meaningful multi-class outputs instead of degenerate singletons. - Torch lazy imports in learner.py: Moved
import torch,DataLoader,TensorDatasetout of module level into lazy getters (_get_torch(),_get_torch_nn(),_get_data_loader()).FewShotLearneris now importable without a hard torch dependency — PyTorch is truly optional. - Contrastive mode shape mismatch fixed: Contrastive prototypes (128-dim projection space) now stored in separate
_contrastive_prototype_*fields; embedding-space prototypes (_prototype_embeddings) always remain 512-dim for conformal/OOD distance math. Eliminates the 512-vs-128 dimension mismatch in distance computations. - ACTEngine dynamic class allocation: Changed from
n_classes=200ton_classes=max(10, config.n_way); dynamic expansion handles additional classes at runtime. compute_saliency_numpy()implemented: Returns per-dimension embedding-space feature importance via|query - support|normalized to [0,1]. No longer returnsNone.- Epistemic uncertainty stochastic:
estimate_epistemic()seed default changed from42toNone— each call produces a genuinely different perturbation pattern, capturing stochastic sensitivity. - Confidence decomposition penalties derived from state: ACT penalty now proportional to (confidence - threshold) gap when threshold available; OOD penalty proportional to Mahalanobis OOD score. Falls back to conservative defaults when state unavailable.
[0.1.2] - 2026-06-08¶
Added¶
- Lazy torch imports:
extractor.pyuses deferred imports for PyTorch and torchvision, keeping the module importable without a hard torch dependency at install time. - ONNX Runtime backend (
backends/onnx_backend.py): Lightweight feature extraction via bundled ONNX backbone models when torch is not installed. - Backend abstraction layer (
backends/__init__.py): Unified interface for ONNX Runtime and PyTorch backends with auto-detection. - ONNX export script (
scripts/export_backbones.py): Generates pre-trained backbone ONNX models for torch-free inference. - Optional
[torch]extra: PyTorch and torchvision moved to optional dependencies; core library requires only numpy + Pillow. - Package data support:
.onnxmodel files bundled via[tool.setuptools.package-data].
Changed¶
- Pretrained backbone weights: Changed from
weights=None(random) toweights="IMAGENET1K_V1"— essential for the ImageNet-normalized preprocessing pipeline and for producing meaningful few-shot embeddings. - Calibration engine: Replaced
torch.nn.Parameter(torch.tensor(...))with a plainfloatfor the temperature parameter; no autograd needed for grid-search calibration. - Config validation: Lazy
import torchfor CUDA availability check inAdaptShotConfig; graceful warning when torch is not installed. - Fine-tuning module: Conditional torch import with
_TORCH_AVAILABLEguard;CAEWCFinetunerraises a clearImportErrormessage when torch is missing. - PIL API: Uses
Image.Resampling.BILINEARviagetattrlookup for cross-version compatibility. - Version bump:
__version__updated to"0.1.2"in bothpyproject.tomland__init__.py.
Fixed¶
- Installation performance: Core dependencies reduced from 4 (torch, torchvision, numpy, Pillow)
to 2 (numpy, Pillow). PyTorch is now optional via
pip install "adaptshot[torch]". - Backbone consistency: All backbones now use pre-trained ImageNet weights, matching the preprocessing pipeline expectations.
Planned for v0.1.2 release¶
- Swahili UI Localization: Gradio dashboard interface fully translated to Swahili, serving Tanzanian and East African users in their primary language.
- Gradio UI Enhancements: Improved widget layout, accessibility labels, and localization infrastructure.
- Localization Framework: i18n string extraction and translation pipeline for the Gradio dashboard.
[0.1.1] - 2026-06-06¶
Added¶
- Eco Mode & Energy Profiling:
eco_modeandearly_exit_thresholdinAdaptShotConfigreduce carbon footprint by up to 40% - EmbeddingCache: Instance-scoped cache class preventing cross-learner embedding contamination in multi-model workflows
- Dynamic Dimension Inference:
BACKBONE_OUTPUT_DIMdictionary maps backbone to output dims; auto-detected from support set when populated - OOD Detection: Built-in out-of-distribution detection with configurable
ood_threshold_quantileandood_absolute_min_distance - String Label Corrections:
correct()now accepts human-readable string labels via label index mapping - Prototypical Inference: New
prototypicalinference mode uses class prototypes alongside nearest-neighbor search - Comparative Feedback:
correct_comparative()method for ordinal-supervision-style human feedback - Checkpoint Integrity: SHA-256 checksums on save/load with atomic file writes and schema migration
- Calibration Report:
calibration_report()method returning ECE, temperature, OOD threshold, and buffer statistics - Comprehensive Documentation: 12-chapter tutorial suite, About page, Studio GUI guide, v0.1.1 docs roadmap gap analysis
- Logo & Branding: AdaptShot logo integration in site nav, browser tab, and README
Changed¶
FewShotLearner.__init__acceptsAdaptShotConfiginstance (not individualclasses/devicekwargs)predicted_labelandcorrected_labelinCorrectionnow store integer indices; originals preserved in metadataCalibrationEnginesupportsscaling_binningmethod alongsidetemperatureBACKBONE_OUTPUT_DIMconstant replaces hardcoded backbone output dimensions- Embedding extraction now passes instance-scoped
EmbeddingCacheinstead of a module-level_last_embeddingdeque - Schema version bumped to
0.1.1withmigrate_v0_1_0_to_v0_1_1backwards-compatible loader
Fixed¶
- Duplicate
wait_for_cuda(device)call inextract_embedding()— replaced with single placement EmbeddingCachemoved from module-levelcollections.dequeto proper class with instance scope- Config validation added for
similarity_metric,inference_mode,calibration_eval_bins calibration_eval_bins >= ece_n_binsconstraint enforced in post-init- Empty-string label validation in
_validate_label()
Known Limitations¶
- UP-UGF Pruning: Redundancy computation uses exact cosine similarity (
O(N^2)). Efficient forN <= 100but will be replaced with approximate search in larger buffers. - CA-EWC: Currently operates on classification head only; full backbone fine-tuning requires additional compute and is not recommended for CPU-only deployments.
- Calibration: Temperature scaling uses grid search over the sliding window. Gradient-based optimization is planned for future releases.
- Gradio UI: Assumes local file paths; remote/cloud storage integration requires custom callbacks.
- Hardware: All benchmarks target standard x86_64 CPUs. ARM/Raspberry Pi performance may vary and requires manual latency profiling.
Milestones¶
- 574 PyPI Downloads: v0.1.0 reached researchers and practitioners in over 30 countries
- 52 Regression Tests: Full test suite passing with
pytest tests/ -v - Strict Type Safety:
mypy src/adaptshot --strictclean - Zero Lint:
ruff check src/ tests/clean
Security¶
- Local-only processing by design; no cloud uploads or telemetry.
- API tokens for PyPI publishing must be managed via environment variables or
.pypirc.
[0.1.0] - 2024-05-01¶
Added¶
- Core Inference Engine:
FewShotLearnerAPI withpredict(),correct(),save(), andload()methods. - Embedding Extraction: Frozen ResNet-18 and MobileNetV3-Small backbones with TorchScript-compatible preprocessing.
- Similarity Search: CPU-optimized cosine similarity with FAISS-CPU support and NumPy fallback.
- Calibration:
CalibrationEngineimplementing online temperature scaling, sliding-window ECE tracking, and conformal prediction stub. - ACT Engine:
ACTEnginefor adaptive per-class confidence thresholding based on correction history. - Human-in-the-Loop Routing:
FeedbackRouterwith configurable buffer capacity and fine-tuning trigger thresholds. - Continual Learning:
CAEWCFinetunerimplementing correction-aware elastic weight consolidation with Fisher Information tracking. - Memory Management:
UPUGFPrunerenforcing bounded replay buffers via uncertainty × recency × redundancy scoring. - Configuration: Immutable
AdaptShotConfigdataclass with validation and deterministic seeding. - Utilities: Determinism verification (
verify_determinism), safe I/O helpers, and type-safe logging. - Benchmarks: Reproducible smoke test (
run_benchmark.py) and Day 2–4 integration scripts. - UI: Gradio-based pilot dashboard for image upload, prediction, and human feedback routing.
- Documentation:
CONTRIBUTING.md,CODE_OF_CONDUCT.md, and thisCHANGELOG.md.
Changed¶
extract_embeddingnow accepts file paths, PIL images, NumPy arrays, or torch tensors.pyproject.tomlupdated to modern PEP 621 standard with optional extras (faiss,ui,dev).- Benchmark harness refactored to output structured JSON metrics and enforce deterministic seeds.
Known Limitations¶
- UP-UGF Pruning: Redundancy computation uses exact cosine similarity (
O(N²)). Efficient forN ≤ 100but will be replaced with approximate search in larger buffers. - CA-EWC: Currently operates on classification head only; full backbone fine-tuning requires additional compute and is not recommended for CPU-only deployments.
- Calibration: Temperature scaling uses grid search over the sliding window. Gradient-based optimization is planned for future releases.
- Gradio UI: Assumes local file paths; remote/cloud storage integration requires custom callbacks.
- Hardware: All benchmarks target standard x86_64 CPUs. ARM/Raspberry Pi performance may vary and requires manual latency profiling.
Security¶
- Local-only processing by design; no cloud uploads or telemetry in v0.1.0.
- API tokens for PyPI publishing must be managed via environment variables or
.pypirc.
Acknowledgments¶
- Built by Johnson Christopher Hassan with community testing and feedback.
- Architecture inspired by few-shot learning literature, continual learning best practices, and open-source ML engineering standards.