Skip to content

v0.2.0

Choose a tag to compare

@nkundiushuti nkundiushuti released this 11 Dec 16:34
· 43 commits to main since this release
031259b

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