ReviewPulse v2.2.0 — Modular Package Refactor
ReviewPulse v2.2.0 — Modular Package Refactor
Release date: 2026-05-04
Summary
ReviewPulse v2.2.0 completes the modular package refactor track. The release keeps model behavior, thresholds, artifacts, output filenames, and the Streamlit app experience unchanged while moving major responsibilities out of legacy flat modules.
The public compatibility surface remains intact: existing commands such as python -m src.evaluate, python -m src.train, python -m src.train_bert, and imports from src.inference continue to work.
Highlights
- Split data concerns into
src.data:src/data/parser.pysrc/data/preprocess.pysrc/data/features.py
- Split tokenization concerns into
src.tokenization:src/tokenization/vocab.pysrc/tokenization/sequence.pysrc/tokenization/bert.py
- Split model definitions into
src.models:src/models/baseline.pysrc/models/bilstm.pysrc/models/bert.py
- Split training orchestration into
src.training:src/training/baseline.pysrc/training/bilstm.pysrc/training/bert.py
- Split single-text inference into
src.inference:src/inference/loaders.pysrc/inference/predictors.pysrc/inference/registry.pysrc/inference/api.py
- Split batch evaluation into
src.evaluation:src/evaluation/metrics.pysrc/evaluation/plots.pysrc/evaluation/errors.pysrc/evaluation/bilstm.pysrc/evaluation/bert.pysrc/evaluation/runner.py
- Moved Streamlit service helpers to
src/app/service.py. - Added or preserved compatibility wrappers for legacy import paths and CLI commands.
- Updated submission checklist, README, and architecture documentation for the final modular layout.
Compatibility Wrappers Kept
The following wrappers remain to protect older imports and commands:
src/evaluate.pywrapssrc.evaluationand remains compatible withpython -m src.evaluate.src/inference.pyandsrc/inference/__init__.pypreserve the existingsrc.inferenceAPI.src/baseline.pywrapssrc.training.baseline.src/train.pywrapssrc.training.bilstm.src/train_bert.pywrapssrc.training.bert.src/parser.pywrapssrc.data.parser.src/preprocess.pywrapssrc.data.preprocess.src/features.pywrapssrc.data.features.src/dataset.pyandsrc/dataset_bert.pypreserve legacy tokenization imports.src/model.pyandsrc/model_bert.pypreserve legacy model imports.src/app_service.pywrapssrc.app.service.
Behavior And Artifact Guarantees
No retraining is required from v2.1.0 to v2.2.0.
Unchanged:
- Prediction threshold:
0.5 - App command:
streamlit run app.py - Baseline artifact:
outputs/baseline.joblib - BiLSTM checkpoint:
outputs/bilstm.pt - Vocabulary artifact:
outputs/vocab.json - DistilBERT checkpoint:
outputs/distilbert.pt - Evaluation output filenames under
outputs/ - Existing model metrics and checkpoint formats
DistilBERT remains integrated in the app. The only open DistilBERT deployment item is external checkpoint hosting, tracked in Issue #28.
Validation
Latest verified fast suite:
.venv/bin/python3 -m pytest tests/ -q -m "not slow"
# 204 passed, 5 deselectedIssue-specific validation was run during the modular refactor PRs:
.venv/bin/python3 -m pytest tests/test_inference.py tests/test_boundaries.py -q
.venv/bin/python3 -m pytest tests/test_evaluate.py tests/test_boundaries.py -qWarnings observed locally:
UndefinedMetricWarningin small mocked DistilBERT evaluation tests where one class has no predicted samples.PytestCacheWarningbecause.pytest_cachewas not writable in the local execution environment.
Both warnings are non-blocking and unrelated to app behavior.
Related Pull Requests
- #61 — data module refactor
- #62 — tokenization module refactor
- #63 — training package refactor
- #64 — tests migrated to new import paths
- #66 — inference package refactor
- #67 — evaluation package refactor
- #65 — final submission checklist