You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Version 0.2.0
⚙️ Improvements
return_features_only now returns unpooled features (preserving temporal/spatial information) in all model forward() methods
Separated API and development dependencies, making the package installable without esp-data for basic API usage
Created internal IO module to replace esp-data.io dependencies for API-only usage
Optimized test suite by using class-scoped fixtures to load models once, significantly reducing test execution time
Added deterministic embedding regression tests for BEATs, EAT-HF, EfficientNet, and AVES models
Fixed deprecated warnings: replaced torchvision 'pretrained' with weights parameter, updated TypedStorage usage, replaced weight_norm with parametrizations
Force torch and CUDA initialization to prevent CUDA becoming unavailable during model loading
🐛 Bug Fixes
Fixed operator precedence issue in test_beats_model.py where assert not sample_audio.grad is not None was changed to assert sample_audio.grad is None
Fixed model state isolation in test_base_model.py by resetting the model to eval mode after gradient propagation tests using try/finally block
Added missing .eval() calls in BEATs and EAT-HF deterministic regression tests to ensure models are in evaluation mode
Fixed BirdNet model shape conversion and tensor handling issues
Fixed sklearn metrics warnings by adding warning filter for "No positive class found"
Fixed torch.load weights_only warning by adding explicit weights_only=False parameter
📚 Documentation & Examples
Completely rewrote installation section in README with clear separation between API Usage and Development Usage
Updated examples to detect and display 3D/4D output shapes for unpooled features
Added detailed shape breakdowns and explanatory text about temporal/spatial information preservation
🧪 Testing
Optimized all model tests (BEATs, AVES, EAT-HF, EfficientNet, base model, probes) by using class-scoped fixtures, reducing test count by ~60% while maintaining coverage
Consolidated overlapping test files: merged probe, embedding, and projector tests into unified test suites
Pruned API integration tests from 12 to 3 tests (75% reduction) while maintaining coverage
Added autouse cleanup fixtures and setup_and_cleanup_hooks pattern for proper test isolation
Fixed PytestReturnNotNoneWarning by replacing return True/False with pytest.fail()
Version 0.1.1
⚙️ Improvements
Human-readable output for list_models() and describe_model() showing classifier head status
Simplified model loading API (removed num_classes=None requirement)
Updated esp-data to 1.3.0 (thanks, Gagan!)
Renamed load_class_mapping() to load_label_mapping()
list_models() now always prints table and returns human-readable dictionaries (removed print_table and return_raw parameters)
📚 Documentation & Examples
New Google Colab demo notebook (examples/colab_sl_beats_demo.ipynb)
Installation instructions for internal PyPI (esp-pypi) using uv
YAML configuration examples for custom ModelSpec definitions
Updated README with current API and file paths
Updated all example scripts to new API conventions