Skip to content

Changelog

All notable changes to the ROSE project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]


[0.3.0] - 2026-03-05

Added

  • IterationState.learner_id: New field (int | str | None, default None) on IterationState identifying which parallel learner produced a given state. Integer index for ParallelActiveLearner and ParallelReinforcementLearner; learner name string for ParallelUQLearner.

Changed

  • Unified async-iterator API for parallel learners: ParallelActiveLearner.start(), ParallelReinforcementLearner.start(), and ParallelUQLearner.start() now return AsyncIterator[IterationState] instead of blocking until all learners finish and returning list[Any]. States stream in real time as each parallel learner completes an iteration, using the same async for state in learner.start(): interface as SequentialActiveLearner.
  • Shared _stream_parallel helper: The internal asyncio.Queue-based fan-in pattern is extracted into a single module-level async generator in rose/learner.py, eliminating identical code that was previously duplicated across all three parallel learner classes.

Deprecated

  • ParallelActiveLearner.teach(), ParallelReinforcementLearner.learn(), and ParallelUQLearner.teach() still work but now internally iterate start() and collect final states into a list. Migrate to async for state in learner.start():.

[0.2.0] - 2026-02-27

Added

  • RHAPSODY backend integration: Execution backends (RadicalExecutionBackend, ConcurrentExecutionBackend) are now imported from rhapsody-py (from rhapsody.backends import ...) instead of radical.asyncflow. WorkflowEngine remains in radical.asyncflow. Updated all examples, tutorials, docs, and notebooks accordingly.
  • Pre-commit hooks: Added .pre-commit-config.yaml with docformatter, ruff, standard file checks, actionlint, GitHub workflow validation, and typos. The examples/use_cases/ directory is excluded from linting.
  • CI pre-commit gate: The tests.yml workflow now runs pre-commit as a required job before unit and integration tests, replacing the separate lint job.
  • New tutorials: Added 03-highly-parallel-surrogates and 04-al-algorithm-selector tutorials with corresponding optional dependencies in tutorials/pyproject.toml and tutorials/README.md.
  • New start() API: Replaced the blocking teach() method with an asynchronous iterator start(). This allows users to instrument the loop, log metrics in real-time (e.g., to MLflow), and implement custom early stopping or adaptive logic.
  • IterationState: Granular state reporting after each iteration, providing metrics, labeled/unlabeled counts, and statistics in a structured dataclass.
  • Dynamic Configuration: Added ability to update learner configuration (batch sizes, task arguments, etc.) between iterations using learner.set_next_config().
  • MLflow integration: rose.learner() is now compatible with MLflow tracking to support the diffusion model community's need to monitor the training process via ROSE.

Changed

  • Dependency update: rhapsody-py[radical_pilot] added as a core dependency; Dragon HPC backend (rhapsody-py[dragon]) auto-installed on Python ≤3.12 via PEP 508 environment marker. radical.asyncflow retained for WorkflowEngine.
  • Python support: Minimum Python version is 3.10; Python 3.9 dropped from all tooling, CI, and tox environments.
  • Async-first execution: The core learner logic is now asyncio-based, enabling better concurrency and integration with modern Python stacks.
  • Separation of concerns: Orchestration logic (ROSE) is more clearly separated from task execution (AsyncFlow/RHAPSODY).
  • Package discovery: Explicitly scoped setuptools to the rose package to prevent accidental inclusion of tutorials/ and examples/ in the distribution.
  • Ruff configuration: Raised line length to 100, added ML naming convention rules to the ignore list (N803, N806, N801, N812N817), and scoped the B006 exception to example run_me.py files where task_description={"shell": True} is a required API pattern.
  • GitHub Actions: Fixed unquoted $GITHUB_ENV shell variable in tests.yml and ci.yml (shellcheck SC2086).

Deprecated

  • learner.teach(): This method is deprecated and will be removed in a future version. Users should migrate to the async for state in learner.start() pattern.