Breaking Changes
- When using MinIO or Azure storage, downloading using `StorageManager.download_file()` and `StorageManager.download_folder()` will not create a subfolder with the bucket name in the generated download path (709)
New Features and Improvements
- Improve the `Task.mark_completed`, `Task.close`, and the hyperparameter example (927, thanks Make42!)
- Add `Task.get_debug_samples()` to retrieve task's debug samples (761)
- Add custom artifact serialization for pipelines using the new `artifact_{serialization,deserialization}_function` parameters in `PipelineController` and `PipelineDecorator` (689)
- Allow registering offline models (653)
- Add table layout configuration to `Logger.report_table()` through `extra_data` parameter, solving (796)
- Add support for attaching plots and scalars to models using the new `Model.report_*` methods
- Add `force_download` argument to `Model.get_local_copy()` to force the downloading of a new copy of a model even if already in the cache
- Add `PipelineController.connect_configuration()` to add configuration dictionaries to a pipeline
- Add `Dataset.delete` configurable hosted contents deletion support, allowing deletion of both ClearML file server hosted files, and external storage hosted files
- Add `PipelineController.is_successful()` criteria customization
- Adjust `CLEARML_VCS_DIFF` environment variable behavior, setting it to an empty string now forces the task to not log uncommitted changes
- Add support for API v2.23
- Add Getting Started Notebooks
- Add the `output_uri=True` argument in the hook config for the OpenMMLab example
- Add local HPO command line execution with the `--local` argument
- Add support for python package namespace detection
Bug Fixes
- Fix logging dependencies that use the `subdirectory` argument when `pip install`ing from a git repo (947, thanks jday1!)
- Fix missing comma leading to a `SyntaxError` (959, thanks jday1!)
- Fix auto-logging for multiple models trained by the same framework in the same task (767)
- Fix wrong overriding of custom server URLs when running `clearml-init` ([clearml-server 181](https://github.com/allegroai/clearml-server/issues/181) and #910)
- Fix parallel coordinates plot display of categorical variables (907)
- Fix `task.connect()` docstring ([ClearML Docs issue 473](https://github.com/allegroai/clearml-docs/issues/473))
- Fix auto-publishing in `Dataset.finalize()` raises exception due to backward compatibility issue (908)
- Fix auto-detection of Jupyter Notebooks in Sagemaker
- Fix Gradio binding being triggered even when `gradio` is not imported
- Fix reconnection following an offline session. Only allow closed tasks to be reconnected
- Fix `python-fire` support
- Fix mishandling nested dictionaries in `Task.connect()` inside `PipelineDecorator`
- Fix `get_or_create_project` crashes when run in parallel
- Fix `task.get_user_properties(value_only=True)`, previously raising an exception
- Fix `silence_errors` parameter not working as expected in `StorageManager.get_file_size_bytes()`
- Fix setting `Dataset` metadata name to a string prefixed with `data_` breaking `Dataset.get`
- Fix Pipeline fails when creating tasks from multi-argument functions, due to a parsing error when working with Python comma slices