diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cb05db93..8f8f2bf7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,4 +28,4 @@ jobs: # Runs a single command using the runners shell - name: Run a one-line script run: | - grep -r -Eoh "(https?://github.com/[a-zA-Z0-9./?=_%:-]*)" $GITHUB_WORKSPACE | sort -u | grep -v "://github.com/allegroai/clearml-docs" | xargs -n 1 sh -c 'curl --output /dev/null --silent --head --fail $0 || curl --output /dev/null --silent --head --fail --write-out "%{url_effective}: %{http_code}\n" $0' + grep -r -Eoh "(https?://github.com/[a-zA-Z0-9./?=_%:-]*)" $GITHUB_WORKSPACE | sort -u | grep -v "://github.com/clearml/clearml-docs" | xargs -n 1 sh -c 'curl --output /dev/null --silent --head --fail $0 || curl --output /dev/null --silent --head --fail --write-out "%{url_effective}: %{http_code}\n" $0' diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 878dfa8a..843730c9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,7 +25,7 @@ jobs: env: INCOMING_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} with: - text: Link Checker failure in github.com/allegroai/clearl-docs + text: Link Checker failure in github.com/clearml/clearl-docs blocks: | [ {"type": "section", "text": {"type": "mrkdwn", "text": "Testing!"}} diff --git a/README.md b/README.md index 735b6445..eeb012b5 100644 --- a/README.md +++ b/README.md @@ -1,27 +1,27 @@
- + -**ClearML - Auto-Magical Suite of tools to streamline your AI workflow -
Experiment Manager, MLOps, LLMOps, and Data-Management** +**ClearML - The End-to-End Platform for AI Builders +
Accelerate Your Generative AI Adoption and LLMOps & MLOps Development Lifecycle**
# ClearML Documentation Website -The [ClearML documentation website](https://clear.ml/docs/latest/docs) is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website generator. +The [ClearML documentation website](https://clear.ml/docs/latest/docs) is built using [Docusaurus 3](https://docusaurus.io/), a modern static website generator. ## Contributing (yes, please!) -**PRs are always welcomed** :heart: +**PRs are always welcome** :heart: Good PR examples: * If you see something that is inaccurate or missing * A topic that interests you is not addressed * You feel that a guide would have made your life easier * Anything you know / experienced that might also help other community members -* Setup and use-case examples +* Setup and use case examples _May the force (and the goddess of learning rates) be with you!_ diff --git a/docs/apps/clearml_param_search.md b/docs/apps/clearml_param_search.md index 74b7335d..094fb443 100644 --- a/docs/apps/clearml_param_search.md +++ b/docs/apps/clearml_param_search.md @@ -3,7 +3,7 @@ title: ClearML Parameter Search CLI (HPO) --- Use the `clearml-param-search` CLI tool to launch ClearML's automated hyperparameter optimization (HPO). This process finds -the optimal values for your experiments' hyperparameters that yield the best performing models. +the optimal values for your tasks' hyperparameters that yield the best performing models. ## How Does `clearml-param-search` Work? @@ -25,22 +25,22 @@ of the optimization results in table and graph forms. |Name | Description| Mandatory | |---|----|---| |`--args`| List of `=` strings to pass to the remote execution. Currently only argparse/click/hydra/fire arguments are supported. Example: `--args lr=0.003 batch_size=64`|No| -|`--compute-time-limit`|The maximum compute time in minutes that experiment can consume. If this time limit is exceeded, all jobs are aborted.|No| +|`--compute-time-limit`|The maximum compute time in minutes that a task can consume. If this time limit is exceeded, all jobs are aborted.|No| |`--max-iteration-per-job`|The maximum iterations (of the objective metric) per single job. When iteration maximum is exceeded, the job is aborted.|No| -|`--max-number-of-concurrent-tasks`|The maximum number of concurrent Tasks (experiments) running at the same time|No| +|`--max-number-of-concurrent-tasks`|The maximum number of concurrent Tasks running at the same time.|No| |`--min-iteration-per-job`|The minimum iterations (of the objective metric) per single job.|No| -|`--local`| If set, run the experiments locally. Notice that no new python environment will be created. The `--script` parameter must point to a local file entry point and all arguments must be passed with `--args`| No| +|`--local`| If set, run the tasks locally. Notice that no new Python environment will be created. The `--script` parameter must point to a local file entry point and all arguments must be passed with `--args`.| No| |`--objective-metric-series`| Objective metric series to maximize/minimize (e.g. 'loss').|Yes| |`--objective-metric-sign`| Optimization target, whether to maximize or minimize the value of the objective metric specified. Possible values: "min", "max", "min_global", "max_global". For more information, see [Optimization Objective](#optimization-objective). |Yes| |`--objective-metric-title`| Objective metric title to maximize/minimize (e.g. 'validation').|Yes| |`--optimization-time-limit`|The maximum time (minutes) for the optimization to run. The default is `None`, indicating no time limit.|No| -|`--optimizer-class`|The optimizer to use. Possible values are: OptimizerOptuna (default), OptimizerBOHB, GridSearch, RandomSearch. For more information, see [Supported Optimizers](../fundamentals/hpo.md#supported-optimizers). |Yes| +|`--optimizer-class`|The optimizer to use. Possible values are: OptimizerOptuna (default), OptimizerBOHB, GridSearch, RandomSearch. For more information, see [Supported Optimizers](../clearml_sdk/hpo_sdk.md#supported-optimizers). |Yes| |`--params-search`|Parameters space for optimization. See more information in [Specifying the Parameter Space](#specifying-the-parameter-space). |Yes| |`--params-override`|Additional parameters of the base task to override for this parameter search. Use the following JSON format for each parameter: `{"name": "param_name", "value": }`. Windows users, see [JSON format note](#json_note).|No| |`--pool-period-min`|The time between two consecutive polls (minutes).|No| |`--project-name`|Name of the project in which the optimization task will be created. If the project does not exist, it is created. If unspecified, the repository name is used.|No| -|`--queue`|Queue to enqueue the experiments on.|No| -|`--save-top-k-tasks-only`| Keep only the top \ performing tasks, and archive the rest of the experiments. Input `-1` to keep all tasks. Default: `10`.|No| +|`--queue`|Queue to enqueue the tasks on.|No| +|`--save-top-k-tasks-only`| Keep only the top \ performing tasks, and archive the rest of them. Input `-1` to keep all tasks. Default: `10`.|No| |`--script`|Script to run the parameter search on. Required unless `--task-id` is specified.|No| |`--task-id`|ID of a ClearML task whose hyperparameters will be optimized. Required unless `--script` is specified.|No| |`--task-name`|Name of the optimization task. If unspecified, the base Python script's file name is used.|No| @@ -109,8 +109,8 @@ clearml-param-search --script base_template_keras_simple.py --params-search "{\" ### Optimization Objective Use the `--objective-metric-sign` to specify which optimum your optimization process should use. The options are: -* `min` - Least value of the specified objective metric reported at the end of the experiment -* `max` - Greatest value of the specified objective metric reported at the end of the experiment -* `min_global` - Least value of the specified objective metric reported at any time in the experiment -* `max_global` - Greatest value of the specified objective metric reported at any time in the experiment +* `min` - Least value of the specified objective metric reported at the end of the task +* `max` - Greatest value of the specified objective metric reported at the end of the task +* `min_global` - Least value of the specified objective metric reported at any time in the task +* `max_global` - Greatest value of the specified objective metric reported at any time in the task diff --git a/docs/apps/clearml_session.md b/docs/apps/clearml_session.md index 966e167e..fd5de9c3 100644 --- a/docs/apps/clearml_session.md +++ b/docs/apps/clearml_session.md @@ -23,7 +23,7 @@ VS Code remote sessions use ports 8878 and 8898 respectively. ## Prerequisites -* `clearml` installed and configured. See [Getting Started](../getting_started/ds/ds_first_steps.md) for details. +* `clearml` installed and configured. See [ClearML Setup](../clearml_sdk/clearml_sdk_setup) for details. * At least one `clearml-agent` running on a remote host. See [installation](../clearml_agent/clearml_agent_setup.md#installation) for details. * An SSH client installed on your machine. To verify, open your terminal and execute `ssh`. If you did not receive an error, you are good to go. @@ -41,7 +41,7 @@ error, you are good to go. clearml-session ``` - You can add flags to set a Docker image, the remote SSH port, JupyterLab/VS Code versions, and more. See [CLI options](#command-line-options) + You can add flags to set a container image, the remote SSH port, JupyterLab/VS Code versions, and more. See [CLI options](#command-line-options) for all configuration options. `clearml-session` creates a new [Task](../fundamentals/task.md) that is responsible for setting up the SSH and @@ -56,9 +56,9 @@ error, you are good to go. 1. The session Task is enqueued in the selected queue, and a ClearML Agent pulls and executes it. The agent downloads the appropriate IDE(s) and launches it. -1. Once the agent finishes the initial setup of the interactive Task, the local `cleaml-session` connects to the host - machine via SSH, and tunnels both SSH and IDE over the SSH connection. If a Docker is specified, the - IDE environment runs inside the Docker. +1. Once the agent finishes the initial setup of the interactive Task, the local `clearml-session` connects to the host + machine via SSH, and tunnels both SSH and IDE over the SSH connection. If a container is specified, the + IDE environment runs inside of it. 1. The CLI outputs access links to the remote JupyterLab and VS Code sessions: @@ -101,18 +101,18 @@ When `clearml-session` is launched, it initializes a task with a unique ID in th To connect to an existing session: 1. Go to the web UI, find the interactive session task (by default, it's in project "DevOps"). -1. Click the `ID` button in the task page's header to copy the unique ID. +1. Copy the unique ID by clicking the `ID` button in the task page's header. 1. Run the following command: `clearml-session --attach `. 1. Click on the JupyterLab / VS Code link that is outputted, or connect directly to the SSH session ## Features -### Running in Docker -To run a session inside a Docker container, use the `--docker` flag and enter the docker image to use in the interactive +### Running in a Container +To run a session inside a container, use the `--docker` flag and enter the image to use in the interactive session. ### Kubernetes Support With ClearML k8s-glue you can enable launching ClearML sessions directly within Kubernetes pods. Set up the network and -ingress settings for `clearml-session` in the `sessions` section of the [`values.yaml`](https://github.com/allegroai/clearml-helm-charts/blob/main/charts/clearml-agent/values.yaml) +ingress settings for `clearml-session` in the `sessions` section of the [`values.yaml`](https://github.com/clearml/clearml-helm-charts/blob/main/charts/clearml-agent/values.yaml) file. Make sure to set the following values: @@ -142,7 +142,7 @@ sessions: maxServices: 20 ``` -For more information, see [Kubernetes](../clearml_agent/clearml_agent_deployment.md#kubernetes). +For more information, see [Kubernetes](../clearml_agent/clearml_agent_deployment_k8s.md). ### Installing Requirements @@ -169,20 +169,20 @@ clearml-session --upload-files /mnt/data/stuff You can upload your files in conjunction with the `--store-workspace` option to easily move workloads between local development machines and remote machines with persistent workspace synchronization. See [Storing and Synchronizing Workspace](#storing-and-synchronizing-workspace). -### Starting a Debugging Session -You can debug previously executed experiments registered in the ClearML system on a remote interactive session. -Input into `clearml-session` the ID of a Task to debug, then `clearml-session` clones the experiment's git repository and +### Starting a Debugging Session +You can debug previously executed tasks registered in the ClearML system on a remote interactive session. +Input into `clearml-session` the ID of a Task to debug, then `clearml-session` clones the task's git repository and replicates the environment on a remote machine. Then the code can be interactively executed and debugged on JupyterLab / VS Code. :::note The Task must be connected to a git repository, since currently single script debugging is not supported. ::: -1. In the **ClearML web UI**, find the experiment (Task) that needs debugging. -1. Click the `ID` button next to the Task name, and copy the unique ID. -1. Enter the following command: `clearml-session --debugging-session ` +1. In the **ClearML web UI**, find the task that needs debugging. +1. Copy the unique ID by clicking the `ID` button in the task page's header. +1. Enter the following command: `clearml-session --debugging-session ` 1. Click on the JupyterLab / VS Code link, or connect directly to the SSH session. -1. In JupyterLab / VS Code, access the experiment's repository in the `environment/task_repository` folder. +1. In JupyterLab / VS Code, access the task's repository in the `environment/task_repository` folder. ### Storing and Synchronizing Workspace You can store and sync your interactive session workspace with the `--store-workspace` option. `clearml-session` @@ -220,12 +220,12 @@ clearml-session --continue-session --store-workspace ~/workspace | `--base-task-id` | Pass the ID of a task that will become the base task, so the session will use its configurations | `none` or the previously entered base task | | `--config-file` | Specify a path to another configuration file for `clearml-session` to store its previous state | `.clearml_session.json` or previously entered configuration file | | `--continue-session` | Pass the session of a previous session to continue, restoring your workspace (see `--store-workspace`) | `none` | -| `--debugging-session` | Pass existing Task ID, create a copy of the experiment on a remote machine, and launch Jupyter/SSH for interactive access. Example `--debugging-session `| `none`| +| `--debugging-session` | Pass existing Task ID, create a copy of the task on a remote machine, and launch Jupyter/SSH for interactive access. Example `--debugging-session `| `none`| | `--disable-fingerprint-check` | If set, bypass the remote SSH server fingerprint verification process | `none` | | `--disable-session-cleanup` | If `True`, previous interactive sessions are not deleted | `false`| | `--disable-store-defaults` | If set, do not store current setup as new default configuration| `none`| -| `--docker`| Select the docker image to use in the interactive session |`nvidia/cuda:11.6.2-runtime-ubuntu20.04` or previously used docker image| -| `--docker-args` | Add additional arguments for the docker image to use in the interactive session | `none` or the previously used docker-args | +| `--docker`| Select the image to use in the interactive session |`nvidia/cuda:11.6.2-runtime-ubuntu20.04` or previously used image| +| `--docker-args` | Add additional arguments for the docker image to use in the interactive session | `none` or the previously used `docker-args` | | `--force_dropbear`| Force using `dropbear` instead of SSHd |`none`| | `--git-credentials` | If `True`, local `.git-credentials` file is sent to the interactive session.| `false`| | `--init-script` | Specify a BASH init script file to be executed when the interactive session is being set up | `none` or previously entered BASH script | @@ -253,9 +253,9 @@ clearml-session --continue-session --store-workspace ~/workspace | `--username`| Set your own SSH username for the interactive session | `root` or a previously used username | | `--verbose` | Increase verbosity of logging | `none` | | `--version`| Display the clearml-session utility version| N/A| -| `--vscode-extensions` |Install additional VSCode extensions and VSCode python extensions (example: `ms-python.python,ms-python.black-formatter,ms-python.pylint,ms-python.flake8`)|`none`| +| `--vscode-extensions` |Install additional VSCode extensions and VSCode Python extensions (example: `ms-python.python,ms-python.black-formatter,ms-python.pylint,ms-python.flake8`)|`none`| | `--vscode-server` | Install VSCode on interactive session | `true` | -| `--vscode-version` | Set VSCode server (code-server) version, as well as VSCode python extension version `` (example: "3.7.4:2020.10.332292344")| `4.14.1:2023.12.0`| +| `--vscode-version` | Set VSCode server (code-server) version, as well as VSCode Python extension version `` (example: "3.7.4:2020.10.332292344")| `4.14.1:2023.12.0`| | `--yes`, `-y`| Automatic yes to prompts; assume "yes" as answer to all prompts and run non-interactively |N/A| diff --git a/docs/apps/clearml_task.md b/docs/apps/clearml_task.md index cd390f6c..00fb0379 100644 --- a/docs/apps/clearml_task.md +++ b/docs/apps/clearml_task.md @@ -11,14 +11,14 @@ line arguments, Python module dependencies, and a requirements.txt file! ## What Is ClearML Task For? * Launching off-the-shelf code on a remote machine with dedicated resources (e.g. GPU) -* Running [hyperparameter optimization](../fundamentals/hpo.md) on a codebase that is still not in ClearML +* Running [hyperparameter optimization](../getting_started/hpo.md) on a codebase that is still not in ClearML * Creating a pipeline from an assortment of scripts, that you need to turn into ClearML tasks * Running some code on a remote machine, either using an on-prem cluster or on the cloud ## How Does ClearML Task Work? 1. Execute `clearml-task`, specifying the ClearML target project and task name, along with your script (and repository / commit / branch). - Optionally, specify an execution queue and Docker image to use. + Optionally, specify an execution queue and container image to use. 1. `clearml-task` does its magic! It creates a new [ClearML Task](../fundamentals/task.md), and, if so directed, enqueues it for execution by a ClearML Agent. 1. While the Task is running on the remote machine, all its console outputs are logged in real-time, alongside your @@ -26,9 +26,9 @@ line arguments, Python module dependencies, and a requirements.txt file! (a link to your task details page in the ClearML Web UI is printed as ClearML Task creates the task). ## Execution Configuration -### Docker -Specify a Docker container to run the code in with the `--docker ` option. -The ClearML Agent pulls it from Docker Hub or a Docker artifactory automatically. +### Container +Specify a container to run the code in with the `--docker ` option. +The ClearML Agent pulls it from Docker Hub or a container artifactory automatically. ### Package Dependencies `clearml-task` automatically finds the `requirements.txt` file in remote repositories. @@ -61,8 +61,8 @@ errors in identifying the correct default branch. | `--branch` | Select repository branch / tag. By default, latest commit from the master branch | No | | `--commit` | Select commit ID to use. By default, latest commit, or local commit ID when using local repository | No | | `--cwd` | Working directory to launch the script from. Relative to repo root or local `--folder` | No | -| `--docker` | Select the Docker image to use in the remote task | No | -| `--docker_bash_setup_script` | Add a bash script to be executed inside the Docker before setting up the task's environment | No | +| `--docker` | Select the container image to use in the remote task | No | +| `--docker_bash_setup_script` | Add a bash script to be executed inside the container before setting up the task's environment | No | | `--docker_args` | Add Docker arguments. Pass a single string in the following format: `--docker_args ""`. For example: `--docker_args "-v some_dir_1:other_dir_1 -v some_dir_2:other_dir_2"` | No | | `--folder` | Execute the code from a local folder. Notice, it assumes a git repository already exists. Current state of the repo (commit ID and uncommitted changes) is logged and replicated on the remote machine | No | | `--import-offline-session`| Specify the path to the offline session you want to import.| No | @@ -71,7 +71,7 @@ errors in identifying the correct default branch. | `--packages` | Manually specify a list of required packages. Example: `--packages "tqdm>=2.1" "scikit-learn"` | No | | `--project`| Set the project name for the task (required, unless using `--base-task-id`). If the named project does not exist, it is created on-the-fly | Yes | | `--queue` | Select a task's execution queue. If not provided, a task is created but not launched | No | -| `--repo` | URL of remote repository. Example: `--repo https://github.com/allegroai/clearml.git` | No | +| `--repo` | URL of remote repository. Example: `--repo https://github.com/clearml/clearml.git` | No | | `--requirements` | Specify `requirements.txt` file to install when setting the session. By default, the` requirements.txt` from the repository will be used | No | | `--script` | Entry point script for the remote execution. When used with `--repo`, input the script's relative path inside the repository. For example: `--script source/train.py`. When used with `--folder`, it supports a direct path to a file inside the local repository itself, for example: `--script ~/project/source/train.py` | Yes | | `--skip-task-init` | If set, `Task.init()` call is not added to the entry point, and is assumed to be called within the script | No | @@ -87,10 +87,10 @@ These commands demonstrate a few useful use cases for `clearml-task`. ### Executing Code from a Remote Repository ```bash -clearml-task --project examples --name remote_test --repo https://github.com/allegroai/events.git --branch master --script /webinar-0620/keras_mnist.py --args batch_size=64 epochs=1 --queue default +clearml-task --project examples --name remote_test --repo https://github.com/clearml/events.git --branch master --script /webinar-0620/keras_mnist.py --args batch_size=64 epochs=1 --queue default ``` -The `keras_mnist.py` script from the [events](https://github.com/allegroai/events) GitHub repository is imported as a +The `keras_mnist.py` script from the [events](https://github.com/clearml/events) GitHub repository is imported as a ClearML task named `remote_test` in the `examples` project. Its command line arguments `batch_size` and `epochs` values are set, and the task is enqueued for execution on the `default` queue. diff --git a/docs/clearml_data/best_practices.md b/docs/best_practices/data_best_practices.md similarity index 88% rename from docs/clearml_data/best_practices.md rename to docs/best_practices/data_best_practices.md index f198dabb..04d6950c 100644 --- a/docs/clearml_data/best_practices.md +++ b/docs/best_practices/data_best_practices.md @@ -9,12 +9,13 @@ See [Hyper-Datasets](../hyperdatasets/overview.md) for ClearML's advanced querya The following are some recommendations for using ClearML Data. -![Dataset UI gif](../img/gif/dataset.gif) +![Dataset UI gif](../img/gif/dataset.gif#light-mode-only) +![Dataset UI gif](../img/gif/dataset_dark.gif#dark-mode-only) ## Versioning Datasets Use ClearML Data to version your datasets. Once a dataset is finalized, it can no longer be modified. This makes clear -which version of the dataset was used with which task, enabling the accurate reproduction of your experiments. +which version of the dataset was used with which task, enabling the accurate reproduction of your tasks. Once you need to change the dataset's contents, you can create a new version of the dataset by specifying the previous dataset as a parent. This makes the new dataset version inherit the previous version's contents, with the dataset's new @@ -25,7 +26,7 @@ version contents ready to be updated. Organize the datasets according to use-cases and use tags. This makes managing multiple datasets and accessing the most updated datasets for different use-cases easier. -Like any ClearML tasks, datasets can be organized into [projects (and subprojects)](../fundamentals/projects.md#creating-subprojects). +Like any ClearML tasks, datasets can be organized into [projects (and subprojects)](../fundamentals/projects.md#creating-projects-and-subprojects). Additionally, when creating a dataset, tags can be applied to the dataset, which will make searching for the dataset easier. Organizing your datasets into projects by use-case makes it easier to access the most recent dataset version for that use-case. @@ -55,5 +56,5 @@ serves as a dataset's single point of truth, you can schedule a script which use will update the dataset based on the modifications made to the folder. This way, there is no need to manually modify a dataset. This functionality will also track the modifications made to a folder. -See the sync function with the [CLI](clearml_data_cli.md#sync) or [SDK](clearml_data_sdk.md#syncing-local-storage) +See the sync function with the [CLI](../clearml_data/clearml_data_cli.md#sync) or [SDK](../clearml_data/clearml_data_sdk.md#syncing-local-storage) interface. diff --git a/docs/getting_started/ds/best_practices.md b/docs/best_practices/data_scientist_best_practices.md similarity index 64% rename from docs/getting_started/ds/best_practices.md rename to docs/best_practices/data_scientist_best_practices.md index f7858714..2996d5ef 100644 --- a/docs/getting_started/ds/best_practices.md +++ b/docs/best_practices/data_scientist_best_practices.md @@ -24,12 +24,12 @@ During early stages of model development, while code is still being modified hea These setups can be folded into each other and that's great! If you have a GPU machine for each researcher, that's awesome! The goal of this phase is to get a code, dataset, and environment set up, so you can start digging to find the best model! -- [ClearML SDK](../../clearml_sdk/clearml_sdk.md) should be integrated into your code (check out [Getting Started](ds_first_steps.md)). +- [ClearML SDK](../clearml_sdk/clearml_sdk.md) should be integrated into your code (check out [ClearML Setup](../clearml_sdk/clearml_sdk_setup.md)). This helps visualizing the results and tracking progress. -- [ClearML Agent](../../clearml_agent.md) helps moving your work to other machines without the hassle of rebuilding the environment every time, - while also creating an easy queue interface that easily lets you drop your experiments to be executed one by one +- [ClearML Agent](../clearml_agent.md) helps moving your work to other machines without the hassle of rebuilding the environment every time, + while also creating an easy queue interface that easily lets you drop your tasks to be executed one by one (great for ensuring that the GPUs are churning during the weekend). -- [ClearML Session](../../apps/clearml_session.md) helps with developing on remote machines, in the same way that you'd develop on your local laptop! +- [ClearML Session](../apps/clearml_session.md) helps with developing on remote machines, in the same way that you'd develop on your local laptop! ## Train Remotely @@ -38,17 +38,17 @@ yields the best performing model for your task! - The real training (usually) should **not** be executed on your development machine. - Training sessions should be launched and monitored from a web UI. - - You should continue coding while experiments are being executed without interrupting them. + - You should continue coding while tasks are being executed without interrupting them. - Stop optimizing your code because your machine struggles, and run it on a beefier machine (cloud / on-prem). Visualization and comparison dashboards keep your sanity at bay! At this stage you usually have a docker container with all the binaries that you need. -- [ClearML SDK](../../clearml_sdk/clearml_sdk.md) ensures that all the metrics, parameters and Models are automatically logged and can later be - accessed, [compared](../../webapp/webapp_exp_comparing.md) and [tracked](../../webapp/webapp_exp_track_visual.md). -- [ClearML Agent](../../clearml_agent.md) does the heavy lifting. It reproduces the execution environment, clones your code, +- [ClearML SDK](../clearml_sdk/clearml_sdk.md) ensures that all the metrics, parameters and Models are automatically logged and can later be + accessed, [compared](../webapp/webapp_exp_comparing.md) and [tracked](../webapp/webapp_exp_track_visual.md). +- [ClearML Agent](../clearml_agent.md) does the heavy lifting. It reproduces the execution environment, clones your code, applies code patches, manages parameters (including overriding them on the fly), executes the code, and queues multiple tasks. - It can even [build](../../clearml_agent/clearml_agent_docker.md#exporting-a-task-into-a-standalone-docker-container) the docker container for you! -- [ClearML Pipelines](../../pipelines/pipelines.md) ensure that steps run in the same order, + It can even [build](../getting_started/clearml_agent_docker_exec.md#exporting-a-task-into-a-standalone-docker-container) the container for you! +- [ClearML Pipelines](../pipelines/pipelines.md) ensure that steps run in the same order, programmatically chaining tasks together, while giving an overview of the execution pipeline's status. **Your entire environment should magically be able to run on any machine, without you working hard.** @@ -58,23 +58,23 @@ that you need. Track everything--from obscure parameters to weird metrics, it's impossible to know what will end up improving your results later on! -- Make sure experiments are reproducible! ClearML logs code, parameters, and environment in a single, easily searchable place. +- Make sure tasks are reproducible! ClearML logs code, parameters, and environment in a single, easily searchable place. - Development is not linear. Configuration / Parameters should not be stored in your git, as they are temporary and constantly changing. They still need to be logged because who knows, one day... - Uncommitted changes to your code should be stored for later forensics in case that magic number actually saved the day. Not every line change should be committed. -- Mark potentially good experiments, make them the new baseline for comparison. +- Mark potentially good tasks, make them the new baseline for comparison. ## Visibility Matters -While you can track experiments with one tool, and pipeline them with another, having +While you can track tasks with one tool, and pipeline them with another, having everything under the same roof has its benefits! -Being able to track experiment progress and compare experiments, and, based on that, send experiments to execution on remote +Being able to track task progress and compare tasks, and, based on that, send tasks to execution on remote machines (that also build the environment themselves) has tremendous benefits in terms of visibility and ease of integration. -Being able to have visibility in your pipeline, while using experiments already defined in the platform, +Being able to have visibility in your pipeline, while using tasks already defined in the platform, enables users to have a clearer picture of the pipeline's status and makes it easier to start using pipelines earlier in the process by simplifying chaining tasks. -Managing datasets with the same tools and APIs that manage the experiments also lowers the barrier of entry into -experiment and data provenance. +Managing datasets with the same tools and APIs that manage the tasks also lowers the barrier of entry into +task and data provenance. diff --git a/docs/getting_started/mlops/mlops_best_practices.md b/docs/best_practices/mlops_best_practices.md similarity index 69% rename from docs/getting_started/mlops/mlops_best_practices.md rename to docs/best_practices/mlops_best_practices.md index 24283698..71c9d7d7 100644 --- a/docs/getting_started/mlops/mlops_best_practices.md +++ b/docs/best_practices/mlops_best_practices.md @@ -7,34 +7,34 @@ From training models to data processing to deploying to production. ## Development - Preparing for Automation Basically, track everything. There is nothing that is not worth having visibility to. -If you are afraid of clutter, use the archive option, and set up your own [cleanup service](../../guides/services/cleanup_service.md). +If you are afraid of clutter, use the archive option, and set up your own [cleanup service](../guides/services/cleanup_service.md). - Track the code base. There is no reason not to add metrics to any process in your workflow, even if it is not directly ML. Visibility is key to iterative improvement of your code / workflow. -- Create per-project [leaderboards](../../guides/ui/building_leader_board.md) based on custom columns +- Create per-project [leaderboards](../guides/ui/building_leader_board.md) based on custom columns (hyperparameters and performance accuracy), and bookmark them (full URL will always reproduce the same view and table). -- Share experiments with your colleagues and team-leaders. +- Share tasks with your colleagues and team-leaders. Invite more people to see how your project is progressing, and suggest they add metric reporting for their own. These metrics can later be part of your own in-house monitoring solution, don't let good data go to waste :) ## Clone Tasks Define a ClearML Task with one of the following options: -- Run the actual code with the `Task.init()` call. This will create and auto-populate the Task in CleaML (including Git Repo / Python Packages / Command line etc.). -- Register local / remote code repository with `clearml-task`. See [details](../../apps/clearml_task.md). +- Run the actual code with the `Task.init()` call. This will create and auto-populate the Task in ClearML (including Git Repo / Python Packages / Command line etc.). +- Register local / remote code repository with `clearml-task`. See [details](../apps/clearml_task.md). -Once you have a Task in ClearML, you can clone and edit its definitions in the UI, then launch it on one of your nodes with [ClearML Agent](../../clearml_agent.md). +Once you have a Task in ClearML, you can clone and edit its definitions in the UI, then launch it on one of your nodes with [ClearML Agent](../clearml_agent.md). ## Advanced Automation - Create daily / weekly cron jobs for retraining best performing models on. - Create data monitoring & scheduling and launch inference jobs to test performance on any new coming dataset. -- Once there are two or more experiments that run after another, group them together into a [pipeline](../../pipelines/pipelines.md). +- Once there are two or more tasks that run after another, group them together into a [pipeline](../pipelines/pipelines.md). ## Manage Your Data -Use [ClearML Data](../../clearml_data/clearml_data.md) to version your data, then link it to running experiments for easy reproduction. +Use [ClearML Data](../clearml_data/clearml_data.md) to version your data, then link it to running tasks for easy reproduction. Make datasets machine agnostic (i.e. store original dataset in a shared storage location, e.g. shared-folder / S3 / Gs / Azure). ClearML Data supports efficient Dataset storage and caching, differentiable and compressed. ## Scale Your Work -Use [ClearML Agent](../../clearml_agent.md) to scale work. Install the agent machines (remote or local) and manage +Use [ClearML Agent](../clearml_agent.md) to scale work. Install the agent machines (remote or local) and manage training workload with it. Improve team collaboration by transparent resource monitoring, always know what is running where. diff --git a/docs/build_interactive_models.md b/docs/build_interactive_models.md new file mode 100644 index 00000000..eda59ab0 --- /dev/null +++ b/docs/build_interactive_models.md @@ -0,0 +1,18 @@ +--- +title: Build Interactive Model Demos +--- + +:::info Enterprise Feature +The Gradio Launcher and Streamlit Apps are available under the ClearML Enterprise plan. +::: + +ClearML supports quickly creating web-based interfaces for AI models, making it easier to +test, demo, and iterate on new capabilities. With ClearML's built-in orchestration, you can effortlessly launch, manage, +and optimize AI-powered applications to accelerate their way to production. + +ClearML provides the following applications for building an interactive model interface: +* [Gradio Launcher](webapp/applications/apps_gradio.md) +* [Streamlit Launcher](webapp/applications/apps_streamlit.md) + +![Gradio Dashboard](img/apps_gradio.png#light-mode-only) +![Gradio Dashboard](img/apps_gradio_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/clearml_agent.md b/docs/clearml_agent.md index b254754c..768b8e9a 100644 --- a/docs/clearml_agent.md +++ b/docs/clearml_agent.md @@ -17,10 +17,10 @@ title: ClearML Agent **ClearML Agent** is a virtual environment and execution manager for DL / ML solutions on GPU machines. It integrates with the **ClearML Python Package** and ClearML Server to provide a full AI cluster solution.
Its main focus is around: -- Reproducing experiments, including their complete environments. +- Reproducing task runs, including their complete environments. - Scaling workflows on multiple target machines. -ClearML Agent executes an experiment or other workflow by reproducing the state of the code from the original machine +ClearML Agent executes a task or other workflow by reproducing the state of the code from the original machine to a remote machine. ![ClearML Agent flow diagram](img/clearml_agent_flow_diagram.png) @@ -29,40 +29,40 @@ The preceding diagram demonstrates a typical flow where an agent executes a task 1. Enqueue a task for execution on the queue. 1. The agent pulls the task from the queue. -1. The agent launches a docker container in which to run the task's code. +1. The agent launches a container in which to run the task's code. 1. The task's execution environment is set up: 1. Execute any custom setup script configured. 1. Install any required system packages. 1. Clone the code from a git repository. 1. Apply any uncommitted changes recorded. - 1. Set up the python environment and required packages. + 1. Set up the Python environment and required packages. 1. The task's script/code is executed. :::note Python Version -ClearML Agent uses the Python version available in the environment or docker in which it executes the code. It does not -install Python, so make sure to use a docker or environment with the version you need. +ClearML Agent uses the Python version available in the environment or container in which it executes the code. It does not +install Python, so make sure to use a container or environment with the version you need. ::: While the agent is running, it continuously reports system metrics to the ClearML Server (these can be monitored in the [**Orchestration**](webapp/webapp_workers_queues.md) page). -Continue using ClearML Agent once it is running on a target machine. Reproduce experiments and execute +Continue using ClearML Agent once it is running on a target machine. Reproducing task runs and execute automated workflows in one (or both) of the following ways: * Programmatically (using [`Task.enqueue()`](references/sdk/task.md#taskenqueue) or [`Task.execute_remotely()`](references/sdk/task.md#execute_remotely)) -* Through the ClearML Web UI (without working directly with code), by cloning experiments and enqueuing them to the +* Through the ClearML Web UI (without working directly with code), by cloning tasks and enqueuing them to the queue that a ClearML Agent is servicing. The agent facilitates [overriding task execution detail](webapp/webapp_exp_tuning.md) values through the UI without code modification. Modifying a task clone’s configuration will have the ClearML agent executing it override the original values: -* Modified package requirements will have the experiment script run with updated packages +* Modified package requirements will have the task script run with updated packages * Modified recorded command line arguments will have the ClearML agent inject the new values in their stead * Code-level configuration instrumented with [`Task.connect()`](references/sdk/task.md#connect) will be overridden by modified hyperparameters ClearML Agent can be deployed in various setups to suit different workflows and infrastructure needs: -* [Bare Metal](clearml_agent/clearml_agent_deployment.md#spinning-up-an-agent) -* [Kubernetes](clearml_agent/clearml_agent_deployment.md#kubernetes) -* [Slurm](clearml_agent/clearml_agent_deployment.md#slurm) +* [Bare Metal](clearml_agent/clearml_agent_deployment_bare_metal.md#spinning-up-an-agent) +* [Kubernetes](clearml_agent/clearml_agent_deployment_k8s.md) +* [Slurm](clearml_agent/clearml_agent_deployment_slurm.md) * [Google Colab](guides/ide/google_colab.md) ## References diff --git a/docs/clearml_agent/clearml_agent_deployment.md b/docs/clearml_agent/clearml_agent_deployment.md deleted file mode 100644 index 27c1f5f5..00000000 --- a/docs/clearml_agent/clearml_agent_deployment.md +++ /dev/null @@ -1,292 +0,0 @@ ---- -title: Deployment ---- - -## Spinning Up an Agent -You can spin up an agent on any machine: on-prem and/or cloud instance. When spinning up an agent, you assign it to -service a queue(s). Utilize the machine by enqueuing tasks to the queue that the agent is servicing, and the agent will -pull and execute the tasks. - -:::tip cross-platform execution -ClearML Agent is platform agnostic. When using the ClearML Agent to execute experiments cross-platform, set platform -specific environment variables before launching the agent. - -For example, to run an agent on an ARM device, set the core type environment variable before spinning up the agent: - -```bash -export OPENBLAS_CORETYPE=ARMV8 -clearml-agent daemon --queue -``` -::: - -### Executing an Agent -To execute an agent, listening to a queue, run: - -```bash -clearml-agent daemon --queue -``` - -### Executing in Background -To execute an agent in the background, run: -```bash -clearml-agent daemon --queue --detached -``` -### Stopping Agents -To stop an agent running in the background, run: -```bash -clearml-agent daemon --stop -``` - -### Allocating Resources -To specify GPUs associated with the agent, add the `--gpus` flag. - -:::info Docker Mode -Make sure to include the `--docker` flag, as GPU management through the agent is only supported in [Docker Mode](clearml_agent_execution_env.md#docker-mode). -::: - -To execute multiple agents on the same machine (usually assigning GPU for the different agents), run: -```bash -clearml-agent daemon --gpus 0 --queue default --docker -clearml-agent daemon --gpus 1 --queue default --docker -``` -To allocate more than one GPU, provide a list of allocated GPUs -```bash -clearml-agent daemon --gpus 0,1 --queue dual_gpu --docker -``` - -### Queue Prioritization -A single agent can listen to multiple queues. The priority is set by their order. - -```bash -clearml-agent daemon --queue high_q low_q -``` -This ensures the agent first tries to pull a Task from the `high_q` queue, and only if it is empty, the agent will try to pull -from the `low_q` queue. - -To make sure an agent pulls from all queues equally, add the `--order-fairness` flag. -```bash -clearml-agent daemon --queue group_a group_b --order-fairness -``` -It will make sure the agent will pull from the `group_a` queue, then from `group_b`, then back to `group_a`, etc. This ensures -that `group_a` or `group_b` will not be able to starve one another of resources. - -### SSH Access -By default, ClearML Agent maps the host's `~/.ssh` into the container's `/root/.ssh` directory (configurable, -see [clearml.conf](../configs/clearml_conf.md#docker_internal_mounts)). - -If you want to use existing auth sockets with ssh-agent, you can verify your host ssh-agent is working correctly with: - -```commandline -echo $SSH_AUTH_SOCK -``` - -You should see a path to a temporary file, something like this: - -```console -/tmp/ssh-/agent. -``` - -Then run your `clearml-agent` in Docker mode, which will automatically detect the `SSH_AUTH_SOCK` environment variable, -and mount the socket into any container it spins. - -You can also explicitly set the `SSH_AUTH_SOCK` environment variable when executing an agent. The command below will -execute an agent in Docker mode and assign it to service a queue. The agent will have access to -the SSH socket provided in the environment variable. - -``` -SSH_AUTH_SOCK= clearml-agent daemon --gpus --queue --docker -``` - -## Kubernetes - -Agents can be deployed bare-metal or as Docker containers in a Kubernetes cluster. ClearML Agent adds missing scheduling capabilities to Kubernetes, enabling more flexible automation from code while leveraging all of ClearML Agent's features. - -ClearML Agent is deployed onto a Kubernetes cluster using **Kubernetes-Glue**, which maps ClearML jobs directly to Kubernetes jobs. This allows seamless task execution and resource allocation across your cluster. - -### Deployment Options -You can deploy ClearML Agent onto Kubernetes using one of the following methods: - -1. **ClearML Agent Helm Chart (Recommended)**: - Use the [ClearML Agent Helm Chart](https://github.com/allegroai/clearml-helm-charts/tree/main/charts/clearml-agent) to spin up an agent pod acting as a controller. This is the recommended and scalable approach. - -2. **K8s Glue Script**: - Run a [K8s Glue script](https://github.com/allegroai/clearml-agent/blob/master/examples/k8s_glue_example.py) on a Kubernetes CPU node. This approach is less scalable and typically suited for simpler use cases. - -### How It Works -The ClearML Kubernetes-Glue performs the following: -- Pulls jobs from the ClearML execution queue. -- Prepares a Kubernetes job based on a provided YAML template. -- Inside each job pod, the `clearml-agent`: - - Installs the required environment for the task. - - Executes and monitors the experiment process. - -:::important Enterprise Features -ClearML Enterprise adds advanced Kubernetes features: -- **Multi-Queue Support**: Service multiple ClearML queues within the same Kubernetes cluster. -- **Pod-Specific Templates**: Define resource configurations per queue using pod templates. - -For example, you can configure resources for different queues as shown below: - -```yaml -agentk8sglue: - queues: - example_queue_1: - templateOverrides: - nodeSelector: - nvidia.com/gpu.product: A100-SXM4-40GB-MIG-1g.5gb - resources: - limits: - nvidia.com/gpu: 1 - example_queue_2: - templateOverrides: - nodeSelector: - nvidia.com/gpu.product: A100-SXM4-40GB - resources: - limits: - nvidia.com/gpu: 2 -``` -::: - -## Slurm - -:::important Enterprise Feature -Slurm Glue is available under the ClearML Enterprise plan. -::: - -Agents can be deployed bare-metal or inside [`Singularity`](https://docs.sylabs.io/guides/3.5/user-guide/introduction.html) -containers in Linux clusters managed with Slurm. - -ClearML Agent Slurm Glue maps jobs to Slurm batch scripts: associate a ClearML queue to a batch script template, then -when a Task is pushed into the queue, it will be converted and executed as an `sbatch` job according to the sbatch -template specification attached to the queue. - -1. Install the Slurm Glue on a machine where you can run `sbatch` / `squeue` etc. - - ``` - pip3 install -U --extra-index-url https://*****@*****.allegro.ai/repository/clearml_agent_slurm/simple clearml-agent-slurm - ``` - -1. Create a batch template. Make sure to set the `SBATCH` variables to the resources you want to attach to the queue. - The script below sets up an agent to run bare-metal, creating a virtual environment per job. For example: - - ``` - #!/bin/bash - # available template variables (default value separator ":") - # ${CLEARML_QUEUE_NAME} - # ${CLEARML_QUEUE_ID} - # ${CLEARML_WORKER_ID}. - # complex template variables (default value separator ":") - # ${CLEARML_TASK.id} - # ${CLEARML_TASK.name} - # ${CLEARML_TASK.project.id} - # ${CLEARML_TASK.hyperparams.properties.user_key.value} - - - # example - #SBATCH --job-name=clearml_task_${CLEARML_TASK.id} # Job name DO NOT CHANGE - #SBATCH --ntasks=1 # Run on a single CPU - # #SBATCH --mem=1mb # Job memory request - # #SBATCH --time=00:05:00 # Time limit hrs:min:sec - #SBATCH --output=task-${CLEARML_TASK.id}-%j.log - #SBATCH --partition debug - #SBATCH --cpus-per-task=1 - #SBATCH --priority=5 - #SBATCH --nodes=${CLEARML_TASK.hyperparams.properties.num_nodes.value:1} - - - ${CLEARML_PRE_SETUP} - - echo whoami $(whoami) - - ${CLEARML_AGENT_EXECUTE} - - ${CLEARML_POST_SETUP} - ``` - - Notice: If you are using Slurm with Singularity container support replace `${CLEARML_AGENT_EXECUTE}` in the batch - template with `singularity exec ${CLEARML_AGENT_EXECUTE}`. For additional required settings, see [Slurm with Singularity](#slurm-with-singularity). - - :::tip - You can override the default values of a Slurm job template via the ClearML Web UI. The following command in the - template sets the `nodes` value to be the ClearML Task’s `num_nodes` user property: - ``` - #SBATCH --nodes=${CLEARML_TASK.hyperparams.properties.num_nodes.value:1} - ``` - This user property can be modified in the UI, in the task's **CONFIGURATION > User Properties** section, and when the - task is executed the new modified value will be used. - ::: - -3. Launch the ClearML Agent Slurm Glue and assign the Slurm configuration to a ClearML queue. For example, the following - associates the `default` queue to the `slurm.example.template` script, so any jobs pushed to this queue will use the - resources set by that script. - ``` - clearml-agent-slurm --template-files slurm.example.template --queue default - ``` - - You can also pass multiple templates and queues. For example: - ``` - clearml-agent-slurm --template-files slurm.template1 slurm.template2 --queue queue1 queue2 - ``` - -### Slurm with Singularity -If you are running Slurm with Singularity containers support, set the following: - -1. Make sure your `sbatch` template contains: - ``` - singularity exec ${CLEARML_AGENT_EXECUTE} - ``` - Additional singularity arguments can be added, for example: - ``` - singularity exec --uts ${CLEARML_AGENT_EXECUTE}` - ``` -1. Set the default Singularity container to use in your [clearml.conf](../configs/clearml_conf.md) file: - ``` - agent.default_docker.image="shub://repo/hello-world" - ``` - Or - ``` - agent.default_docker.image="docker://ubuntu" - ``` - -1. Add `--singularity-mode` to the command line, for example: - ``` - clearml-agent-slurm --singularity-mode --template-files slurm.example_singularity.template --queue default - ``` - -## Google Colab - -ClearML Agent can run on a [Google Colab](https://colab.research.google.com/) instance. This helps users to leverage -compute resources provided by Google Colab and send experiments for execution on it. - -Check out [this tutorial](../guides/ide/google_colab.md) on how to run a ClearML Agent on Google Colab! - -## Explicit Task Execution - -ClearML Agent can also execute specific tasks directly, without listening to a queue. - -### Execute a Task without Queue - -Execute a Task with a `clearml-agent` worker without a queue. -```bash -clearml-agent execute --id -``` -### Clone a Task and Execute the Cloned Task - -Clone the specified Task and execute the cloned Task with a `clearml-agent` worker without a queue. -```bash -clearml-agent execute --id --clone -``` - -### Execute Task inside a Docker - -Execute a Task with a `clearml-agent` worker using a Docker container without a queue. -```bash -clearml-agent execute --id --docker -``` - -## Debugging - -Run a `clearml-agent` daemon in foreground mode, sending all output to the console. -```bash -clearml-agent daemon --queue default --foreground -``` diff --git a/docs/clearml_agent/clearml_agent_deployment_bare_metal.md b/docs/clearml_agent/clearml_agent_deployment_bare_metal.md new file mode 100644 index 00000000..cfe55bab --- /dev/null +++ b/docs/clearml_agent/clearml_agent_deployment_bare_metal.md @@ -0,0 +1,136 @@ +--- +title: Manual Deployment +--- + +## Spinning Up an Agent +You can spin up an agent on any machine: on-prem and/or cloud instance. When spinning up an agent, you assign it to +service a queue(s). Utilize the machine by enqueuing tasks to the queue that the agent is servicing, and the agent will +pull and execute the tasks. + +:::tip cross-platform execution +ClearML Agent is platform-agnostic. When using the ClearML Agent to execute tasks cross-platform, set platform +specific environment variables before launching the agent. + +For example, to run an agent on an ARM device, set the core type environment variable before spinning up the agent: + +```bash +export OPENBLAS_CORETYPE=ARMV8 +clearml-agent daemon --queue +``` +::: + +### Executing an Agent +To execute an agent, listening to a queue, run: + +```bash +clearml-agent daemon --queue +``` + +### Executing in Background +To execute an agent in the background, run: +```bash +clearml-agent daemon --queue --detached +``` +### Stopping Agents +To stop an agent running in the background, run: +```bash +clearml-agent daemon --stop +``` + +### Allocating Resources +To specify GPUs associated with the agent, add the `--gpus` flag. + +:::info Docker Mode +Make sure to include the `--docker` flag, as GPU management through the agent is only supported in [Docker Mode](clearml_agent_execution_env.md#docker-mode). +::: + +To execute multiple agents on the same machine (usually assigning GPU for the different agents), run: +```bash +clearml-agent daemon --gpus 0 --queue default --docker +clearml-agent daemon --gpus 1 --queue default --docker +``` +To allocate more than one GPU, provide a list of allocated GPUs +```bash +clearml-agent daemon --gpus 0,1 --queue dual_gpu --docker +``` + +### Queue Prioritization +A single agent can listen to multiple queues. The priority is set by their order. + +```bash +clearml-agent daemon --queue high_q low_q +``` +This ensures the agent first tries to pull a Task from the `high_q` queue, and only if it is empty, the agent will try to pull +from the `low_q` queue. + +To make sure an agent pulls from all queues equally, add the `--order-fairness` flag. +```bash +clearml-agent daemon --queue group_a group_b --order-fairness +``` +It will make sure the agent will pull from the `group_a` queue, then from `group_b`, then back to `group_a`, etc. This ensures +that `group_a` or `group_b` will not be able to starve one another of resources. + +### SSH Access +By default, ClearML Agent maps the host's `~/.ssh` into the container's `/root/.ssh` directory (configurable, +see [clearml.conf](../configs/clearml_conf.md#docker_internal_mounts)). + +If you want to use existing auth sockets with ssh-agent, you can verify your host ssh-agent is working correctly with: + +```commandline +echo $SSH_AUTH_SOCK +``` + +You should see a path to a temporary file, something like this: + +```console +/tmp/ssh-/agent. +``` + +Then run your `clearml-agent` in Docker mode, which will automatically detect the `SSH_AUTH_SOCK` environment variable, +and mount the socket into any container it spins. + +You can also explicitly set the `SSH_AUTH_SOCK` environment variable when executing an agent. The command below will +execute an agent in Docker mode and assign it to service a queue. The agent will have access to +the SSH socket provided in the environment variable. + +``` +SSH_AUTH_SOCK= clearml-agent daemon --gpus --queue --docker +``` + +## Google Colab + +ClearML Agent can run on a [Google Colab](https://colab.research.google.com/) instance. This helps users to leverage +compute resources provided by Google Colab and send tasks for execution on it. + +Check out [this tutorial](../guides/ide/google_colab.md) on how to run a ClearML Agent on Google Colab! + +## Explicit Task Execution + +ClearML Agent can also execute specific tasks directly, without listening to a queue. + +### Execute a Task without Queue + +Execute a Task with a `clearml-agent` worker without a queue. +```bash +clearml-agent execute --id +``` +### Clone a Task and Execute the Cloned Task + +Clone the specified Task and execute the cloned Task with a `clearml-agent` worker without a queue. +```bash +clearml-agent execute --id --clone +``` + +### Execute Task inside a Docker + +Execute a Task with a `clearml-agent` worker using a Docker container without a queue. +```bash +clearml-agent execute --id --docker +``` + +## Debugging + +Run a `clearml-agent` daemon in foreground mode, sending all output to the console. +```bash +clearml-agent daemon --queue default --foreground +``` diff --git a/docs/clearml_agent/clearml_agent_deployment_k8s.md b/docs/clearml_agent/clearml_agent_deployment_k8s.md new file mode 100644 index 00000000..4fb9f6bf --- /dev/null +++ b/docs/clearml_agent/clearml_agent_deployment_k8s.md @@ -0,0 +1,51 @@ +--- +title: Kubernetes +--- + +Agents can be deployed bare-metal or as Docker containers in a Kubernetes cluster. ClearML Agent adds missing scheduling capabilities to Kubernetes, enabling more flexible automation from code while leveraging all of ClearML Agent's features. + +ClearML Agent is deployed onto a Kubernetes cluster using **Kubernetes-Glue**, which maps ClearML jobs directly to Kubernetes jobs. This allows seamless task execution and resource allocation across your cluster. + +## Deployment Options +You can deploy ClearML Agent onto Kubernetes using one of the following methods: + +1. **ClearML Agent Helm Chart (Recommended)**: + Use the [ClearML Agent Helm Chart](https://github.com/clearml/clearml-helm-charts/tree/main/charts/clearml-agent) to spin up an agent pod acting as a controller. This is the recommended and scalable approach. + +2. **K8s Glue Script**: + Run a [K8s Glue script](https://github.com/clearml/clearml-agent/blob/master/examples/k8s_glue_example.py) on a Kubernetes CPU node. This approach is less scalable and typically suited for simpler use cases. + +## How It Works +The ClearML Kubernetes-Glue performs the following: +- Pulls jobs from the ClearML execution queue. +- Prepares a Kubernetes job based on a provided YAML template. +- Inside each job pod, the `clearml-agent`: + - Installs the required environment for the task. + - Executes and monitors the task process. + +:::important Enterprise Features +ClearML Enterprise adds advanced Kubernetes features: +- **Multi-Queue Support**: Service multiple ClearML queues within the same Kubernetes cluster. +- **Pod-Specific Templates**: Define resource configurations per queue using pod templates. + +For example, you can configure resources for different queues as shown below: + +```yaml +agentk8sglue: + queues: + example_queue_1: + templateOverrides: + nodeSelector: + nvidia.com/gpu.product: A100-SXM4-40GB-MIG-1g.5gb + resources: + limits: + nvidia.com/gpu: 1 + example_queue_2: + templateOverrides: + nodeSelector: + nvidia.com/gpu.product: A100-SXM4-40GB + resources: + limits: + nvidia.com/gpu: 2 +``` +::: diff --git a/docs/clearml_agent/clearml_agent_deployment_slurm.md b/docs/clearml_agent/clearml_agent_deployment_slurm.md new file mode 100644 index 00000000..b236ae97 --- /dev/null +++ b/docs/clearml_agent/clearml_agent_deployment_slurm.md @@ -0,0 +1,107 @@ +--- +title: Slurm +--- + +:::important Enterprise Feature +Slurm Glue is available under the ClearML Enterprise plan. +::: + +Agents can be deployed bare-metal or inside [`Singularity`](https://docs.sylabs.io/guides/3.5/user-guide/introduction.html) +containers in Linux clusters managed with Slurm. + +ClearML Agent Slurm Glue maps jobs to Slurm batch scripts: associate a ClearML queue to a batch script template, then +when a Task is pushed into the queue, it will be converted and executed as an `sbatch` job according to the sbatch +template specification attached to the queue. + +1. Install the Slurm Glue on a machine where you can run `sbatch` / `squeue` etc. + + ``` + pip3 install -U --extra-index-url https://*****@*****.allegro.ai/repository/clearml_agent_slurm/simple clearml-agent-slurm + ``` + +1. Create a batch template. Make sure to set the `SBATCH` variables to the resources you want to attach to the queue. + The script below sets up an agent to run bare-metal, creating a virtual environment per job. For example: + + ``` + #!/bin/bash + # available template variables (default value separator ":") + # ${CLEARML_QUEUE_NAME} + # ${CLEARML_QUEUE_ID} + # ${CLEARML_WORKER_ID}. + # complex template variables (default value separator ":") + # ${CLEARML_TASK.id} + # ${CLEARML_TASK.name} + # ${CLEARML_TASK.project.id} + # ${CLEARML_TASK.hyperparams.properties.user_key.value} + + + # example + #SBATCH --job-name=clearml_task_${CLEARML_TASK.id} # Job name DO NOT CHANGE + #SBATCH --ntasks=1 # Run on a single CPU + # #SBATCH --mem=1mb # Job memory request + # #SBATCH --time=00:05:00 # Time limit hrs:min:sec + #SBATCH --output=task-${CLEARML_TASK.id}-%j.log + #SBATCH --partition debug + #SBATCH --cpus-per-task=1 + #SBATCH --priority=5 + #SBATCH --nodes=${CLEARML_TASK.hyperparams.properties.num_nodes.value:1} + + + ${CLEARML_PRE_SETUP} + + echo whoami $(whoami) + + ${CLEARML_AGENT_EXECUTE} + + ${CLEARML_POST_SETUP} + ``` + + Notice: If you are using Slurm with Singularity container support replace `${CLEARML_AGENT_EXECUTE}` in the batch + template with `singularity exec ${CLEARML_AGENT_EXECUTE}`. For additional required settings, see [Slurm with Singularity](#slurm-with-singularity). + + :::tip + You can override the default values of a Slurm job template via the ClearML Web UI. The following command in the + template sets the `nodes` value to be the ClearML Task’s `num_nodes` user property: + ``` + #SBATCH --nodes=${CLEARML_TASK.hyperparams.properties.num_nodes.value:1} + ``` + This user property can be modified in the UI, in the task's **CONFIGURATION > User Properties** section, and when the + task is executed the new modified value will be used. + ::: + +3. Launch the ClearML Agent Slurm Glue and assign the Slurm configuration to a ClearML queue. For example, the following + associates the `default` queue to the `slurm.example.template` script, so any jobs pushed to this queue will use the + resources set by that script. + ``` + clearml-agent-slurm --template-files slurm.example.template --queue default + ``` + + You can also pass multiple templates and queues. For example: + ``` + clearml-agent-slurm --template-files slurm.template1 slurm.template2 --queue queue1 queue2 + ``` + +## Slurm with Singularity +If you are running Slurm with Singularity containers support, set the following: + +1. Make sure your `sbatch` template contains: + ``` + singularity exec ${CLEARML_AGENT_EXECUTE} + ``` + Additional singularity arguments can be added, for example: + ``` + singularity exec --uts ${CLEARML_AGENT_EXECUTE}` + ``` +1. Set the default Singularity container to use in your [clearml.conf](../configs/clearml_conf.md) file: + ``` + agent.default_docker.image="shub://repo/hello-world" + ``` + Or + ``` + agent.default_docker.image="docker://ubuntu" + ``` + +1. Add `--singularity-mode` to the command line, for example: + ``` + clearml-agent-slurm --singularity-mode --template-files slurm.example_singularity.template --queue default + ``` diff --git a/docs/clearml_agent/clearml_agent_docker.md b/docs/clearml_agent/clearml_agent_docker.md deleted file mode 100644 index 2f6ce780..00000000 --- a/docs/clearml_agent/clearml_agent_docker.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Building Docker Containers ---- - -## Exporting a Task into a Standalone Docker Container - -### Task Container - -Build a Docker container that when launched executes a specific experiment, or a clone (copy) of that experiment. - -- Build a Docker container that at launch will execute a specific Task: - - ```bash - clearml-agent build --id --docker --target --entry-point reuse_task - ``` - -- Build a Docker container that at launch will clone a Task specified by Task ID, and will execute the newly cloned Task: - - ```bash - clearml-agent build --id --docker --target --entry-point clone_task - ``` - -- Run built Docker by executing: - - ```bash - docker run - ``` - -Check out [this tutorial](../guides/clearml_agent/executable_exp_containers.md) for building executable experiment -containers. - -### Base Docker Container - -Build a Docker container according to the execution environment of a specific task. - -```bash -clearml-agent build --id --docker --target -``` - -You can add the Docker container as the base Docker image to a task (experiment), using one of the following methods: - -- Using the **ClearML Web UI** - See [Base Docker image](../webapp/webapp_exp_tuning.md#base-docker-image) on the "Tuning - Experiments" page. -- In the ClearML configuration file - Use the ClearML configuration file [`agent.default_docker`](../configs/clearml_conf.md#agentdefault_docker) - options. - -Check out [this tutorial](../guides/clearml_agent/exp_environment_containers.md) for building a Docker container -replicating the execution environment of an existing task. \ No newline at end of file diff --git a/docs/clearml_agent/clearml_agent_dynamic_gpus.md b/docs/clearml_agent/clearml_agent_dynamic_gpus.md index 2b72d0fc..94c3862b 100644 --- a/docs/clearml_agent/clearml_agent_dynamic_gpus.md +++ b/docs/clearml_agent/clearml_agent_dynamic_gpus.md @@ -1,8 +1,9 @@ --- title: Dynamic GPU Allocation --- + :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Dynamic GPU allocation is available under the ClearML Enterprise plan. ::: The ClearML Enterprise server supports dynamic allocation of GPUs based on queue properties. @@ -21,7 +22,7 @@ clearml-agent daemon --dynamic-gpus --gpus 0-2 --queue dual_gpus=2 single_gpu=1 Make sure to include the `--docker` flag, as dynamic GPU allocation is only supported in [Docker Mode](clearml_agent_execution_env.md#docker-mode). ::: -## Example +#### Example Let's say a server has three queues: * `dual_gpu` diff --git a/docs/clearml_agent/clearml_agent_env_caching.md b/docs/clearml_agent/clearml_agent_env_caching.md index 4a7de699..60a3372d 100644 --- a/docs/clearml_agent/clearml_agent_env_caching.md +++ b/docs/clearml_agent/clearml_agent_env_caching.md @@ -2,18 +2,18 @@ title: Environment Caching --- -ClearML Agent caches virtual environments so when running experiments multiple times, there's no need to spend time reinstalling +ClearML Agent caches virtual environments so when running tasks multiple times, there's no need to spend time reinstalling pre-installed packages. To make use of the cached virtual environments, enable the virtual environment reuse mechanism. ## Virtual Environment Reuse -The virtual environment reuse feature may reduce experiment startup time dramatically. +The virtual environment reuse feature may reduce task startup time dramatically. By default, ClearML uses the package manager's environment caching. This means that even if no new packages need to be installed, checking the list of packages can take a long time. ClearML has a virtual environment reuse mechanism which, when enabled, allows using environments as-is without resolving -installed packages. This means that when executing multiple experiments with the same package dependencies, +installed packages. This means that when executing multiple tasks with the same package dependencies, the same environment will be used. :::note diff --git a/docs/clearml_agent/clearml_agent_env_var.md b/docs/clearml_agent/clearml_agent_env_var.md index 0170e2db..75a8f3bb 100644 --- a/docs/clearml_agent/clearml_agent_env_var.md +++ b/docs/clearml_agent/clearml_agent_env_var.md @@ -23,6 +23,7 @@ but can be overridden by command-line arguments. |**CLEARML_CUDNN_VERSION** | Sets the CUDNN version to be used | |**CLEARML_CPU_ONLY** | Force CPU only mode | |**CLEARML_DOCKER_SKIP_GPUS_FLAG** | Skips the GPUs flag (support for docker V18) | +|**CLEARML_AGENT_DOCKER_ARGS_FILTERS**| Set a whitelist of allowed Docker arguments. Only arguments matching the specified patterns can be used when running a task. Use `shlex.split` whitespace-separated format. For example: `CLEARML_AGENT_DOCKER_ARGS_FILTERS="^--env$ ^-e$"`| |**CLEARML_AGENT_DOCKER_ARGS_HIDE_ENV** | Hide Docker environment variables containing secrets when printing out the Docker command. When printed, the variable values will be replaced by `********`. See [`agent.hide_docker_command_env_vars`](../configs/clearml_conf.md#hide_docker) | |**CLEARML_AGENT_DISABLE_SSH_MOUNT** | Disables the auto `.ssh` mount into the docker | |**CLEARML_AGENT_FORCE_CODE_DIR**| Allows overriding the remote execution code directory to bypass repository cloning and use a repo already available where the remote agent is running. | @@ -38,7 +39,7 @@ but can be overridden by command-line arguments. |**CLEARML_AGENT_EXTRA_DOCKER_ARGS** | Overrides extra docker args configuration | |**CLEARML_AGENT_EXTRA_DOCKER_LABELS** | List of labels to add to docker container. See [Docker documentation](https://docs.docker.com/config/labels-custom-metadata/). | |**CLEARML_EXTRA_PIP_INSTALL_FLAGS**| List of additional flags to use when the agent installs packages. For example: `CLEARML_EXTRA_PIP_INSTALL_FLAGS=--use-deprecated=legacy-resolver` for a single flag or `CLEARML_EXTRA_PIP_INSTALL_FLAGS="--use-deprecated=legacy-resolver --no-warn-conflicts"` for multiple flags| -|**CLEARML_AGENT_EXTRA_PYTHON_PATH** | Sets extra python path | +|**CLEARML_AGENT_EXTRA_PYTHON_PATH** | Sets extra Python path | |**CLEARML_AGENT_INITIAL_CONNECT_RETRY_OVERRIDE** | Overrides initial server connection behavior (true by default), allows explicit number to specify number of connect retries) | |**CLEARML_AGENT_NO_UPDATE** | Boolean. Set to `1` to skip agent update in the k8s pod container before the agent executes the task | |**CLEARML_AGENT_K8S_HOST_MOUNT / CLEARML_AGENT_DOCKER_HOST_MOUNT** | Specifies Agent's mount point for Docker / K8s | @@ -47,7 +48,7 @@ but can be overridden by command-line arguments. |**CLEARML_AGENT_PACKAGE_PYTORCH_RESOLVE**|Sets the PyTorch resolving mode. The options are:
  • `none` - No resolving. Install PyTorch like any other package
  • `pip` (default) - Sets extra index based on cuda and lets pip resolve
  • `direct` - Resolve a direct link to the PyTorch wheel by parsing the pytorch.org pip repository, and matching the automatically detected cuda version with the required PyTorch wheel. If the exact cuda version is not found for the required PyTorch wheel, it will try a lower cuda version until a match is found
| |**CLEARML_AGENT_DEBUG_INFO** | Provide additional debug information for a specific context (currently only the `docker` value is supported) | |**CLEARML_AGENT_CHILD_AGENTS_COUNT_CMD** | Provide an alternate bash command to list child agents while working in services mode | -|**CLEARML_AGENT_SKIP_PIP_VENV_INSTALL** | Instead of creating a new virtual environment inheriting from the system packages, use an existing virtual environment and install missing packages directly to it. Specify the python binary of the existing virtual environment. For example: `CLEARML_AGENT_SKIP_PIP_VENV_INSTALL=/home/venv/bin/python` | -|**CLEARML_AGENT_SKIP_PYTHON_ENV_INSTALL** | If set to `1`, the agent will not install any required python packages and will just use the preexisting python environment to run the task. | +|**CLEARML_AGENT_SKIP_PIP_VENV_INSTALL** | Instead of creating a new virtual environment inheriting from the system packages, use an existing virtual environment and install missing packages directly to it. Specify the Python binary of the existing virtual environment. For example: `CLEARML_AGENT_SKIP_PIP_VENV_INSTALL=/home/venv/bin/python` | +|**CLEARML_AGENT_SKIP_PYTHON_ENV_INSTALL** | If set to `1`, the agent will not install any required Python packages and will just use the preexisting Python environment to run the task. | |**CLEARML_AGENT_VENV_CACHE_PATH** | Overrides venv cache folder configuration | |**CLEARML_MULTI_NODE_SINGLE_TASK**| Control how multi-node resource monitoring is reported. The options are:
  • `-1` - Only master node's (rank zero) console/resources are reported
  • `1` - Graph per node i.e. machine/GPU graph for every node (console output prefixed with RANK)
  • `2` - Series per node under a unified machine resource graph, graph per type of resource e.g. CPU/GPU utilization (console output prefixed with RANK)
| diff --git a/docs/clearml_agent/clearml_agent_execution_env.md b/docs/clearml_agent/clearml_agent_execution_env.md index 2ac06625..fcb094bd 100644 --- a/docs/clearml_agent/clearml_agent_execution_env.md +++ b/docs/clearml_agent/clearml_agent_execution_env.md @@ -5,7 +5,7 @@ ClearML Agent has two primary execution modes: [Virtual Environment Mode](#virtu ## Virtual Environment Mode -In Virtual Environment Mode, the agent creates a virtual environment for the experiment, installs the required Python +In Virtual Environment Mode, the agent creates a virtual environment for the task, installs the required Python packages based on the task specification, clones the code repository, applies the uncommitted changes and finally executes the code while monitoring it. This mode uses smart caching so packages and environments can be reused over multiple tasks (see [Virtual Environment Reuse](clearml_agent_env_caching.md#virtual-environment-reuse)). @@ -27,7 +27,7 @@ If you are using pyenv to control the environment where you use ClearML Agent, y * Install poetry with the deprecated `get-poetry.py` installer ::: -## Docker Mode +## Docker Mode :::note notes * Docker Mode is only supported in Linux. * Docker Mode requires docker service v19.03 or higher installed. @@ -43,9 +43,12 @@ ClearML Agent uses the provided default Docker container, which can be overridde :::tip Setting Docker Container via UI You can set the docker container via the UI: -1. Clone the experiment +1. Clone the task 2. Set the Docker in the cloned task's **Execution** tab **> Container** section - ![Container section](../img/webapp_exp_container.png) + + ![Container section](../img/webapp_exp_container.png#light-mode-only) + ![Container section](../img/webapp_exp_container_dark.png#dark-mode-only) + 3. Enqueue the cloned task The task will be executed in the container specified in the UI. diff --git a/docs/clearml_agent/clearml_agent_fractional_gpus.md b/docs/clearml_agent/clearml_agent_fractional_gpus.md index 42e8870d..5aa55ed1 100644 --- a/docs/clearml_agent/clearml_agent_fractional_gpus.md +++ b/docs/clearml_agent/clearml_agent_fractional_gpus.md @@ -214,7 +214,7 @@ Where `` must be set to one of the following values: * "0.875" ## Container-based Memory Limits -Use [`clearml-fractional-gpu`](https://github.com/allegroai/clearml-fractional-gpu)'s pre-packaged containers with +Use [`clearml-fractional-gpu`](https://github.com/clearml/clearml-fractional-gpu)'s pre-packaged containers with built-in hard memory limitations. Workloads running in these containers will only be able to use up to the container's memory limit. Multiple isolated workloads can run on the same GPU without impacting each other. @@ -223,7 +223,7 @@ memory limit. Multiple isolated workloads can run on the same GPU without impact #### Manual Execution 1. Choose the container with the appropriate memory limit. ClearML supports CUDA 11.x and CUDA 12.x with memory limits -ranging from 2 GB to 12 GB (see [clearml-fractional-gpu repository](https://github.com/allegroai/clearml-fractional-gpu/blob/main/README.md#-containers) for full list). +ranging from 2 GB to 12 GB (see [clearml-fractional-gpu repository](https://github.com/clearml/clearml-fractional-gpu/blob/main/README.md#-containers) for full list). 1. Launch the container: ```bash @@ -232,7 +232,7 @@ ranging from 2 GB to 12 GB (see [clearml-fractional-gpu repository](https://gith This example runs the ClearML Ubuntu 22 with CUDA 12.3 container on GPU 0, which is limited to use up to 8GB of its memory. :::note - --pid=host is required to allow the driver to differentiate between the container's processes and other host processes when limiting memory usage + `--pid=host` is required to allow the driver to differentiate between the container's processes and other host processes when limiting memory usage ::: 1. Run the following command inside the container to verify that the fractional gpu memory limit is working correctly: ```bash @@ -273,7 +273,8 @@ The agent’s default container can be overridden via the UI: 1. Clone the task 1. Set the Docker in the cloned task's **Execution** tab > **Container** section - ![Task container](../img/fractional_gpu_task_container.png) + ![Task container](../img/fractional_gpu_task_container.png#light-mode-only) + ![Task container](../img/fractional_gpu_task_container_dark.png#dark-mode-only) 1. Enqueue the cloned task @@ -311,7 +312,7 @@ when limiting memory usage. Build your own custom fractional GPU container by inheriting from one of ClearML's containers: In your Dockerfile, make sure to include `From ` so the container will inherit from the relevant container. -See example custom Dockerfiles in the [clearml-fractional-gpu repository](https://github.com/allegroai/clearml-fractional-gpu/tree/main/examples). +See example custom Dockerfiles in the [clearml-fractional-gpu repository](https://github.com/clearml/clearml-fractional-gpu/tree/main/examples). ## Kubernetes Static MIG Fractions Set up NVIDIA MIG (Multi-Instance GPU) support for Kubernetes to define GPU fraction profiles for specific workloads diff --git a/docs/clearml_agent/clearml_agent_ref.md b/docs/clearml_agent/clearml_agent_ref.md index 161ebab3..17791e9c 100644 --- a/docs/clearml_agent/clearml_agent_ref.md +++ b/docs/clearml_agent/clearml_agent_ref.md @@ -3,10 +3,10 @@ title: ClearML Agent CLI --- The following page provides a reference to `clearml-agent`'s CLI commands: -* [build](#build) - Create a worker environment without executing an experiment. +* [build](#build) - Create a worker environment without executing a task. * [config](#config) - List your ClearML Agent configuration data. -* [daemon](#daemon) - Run a worker daemon listening to a queue for Tasks (experiments) to execute. -* [execute](#execute) - Execute an experiment, locally without a queue. +* [daemon](#daemon) - Run a worker daemon listening to a queue for tasks to execute. +* [execute](#execute) - Execute a task, locally without a queue. * [list](#list) - List the current workers. @@ -32,6 +32,8 @@ clearml-agent build [-h] --id TASK_ID [--target TARGET] ### Parameters +
+ |Name | Description| Mandatory | |---|----|---| |`--id`| Build a worker environment for this Task ID.|Yes| @@ -49,6 +51,8 @@ clearml-agent build [-h] --id TASK_ID [--target TARGET] |`-O`| Compile optimized pyc code (see [python documentation](https://docs.python.org/3/using/cmdline.html#cmdoption-O)). Repeat for more optimization.|No| |`--target`| The target folder for the virtual environment and source code that will be used at launch.|No| +
+ ## config List your ClearML Agent configuration. @@ -59,7 +63,7 @@ clearml-agent config [-h] ## daemon Use the `daemon` command to spin up an agent on any machine: on-prem and/or cloud instance. When spinning up an agent, -assign it a queue(s) to service, and when experiments are added to its queues, the agent will pull and execute them. +assign it a queue(s) to service, and when tasks are added to its queues, the agent will pull and execute them. With the `daemon` command you can configure your agent's behavior: allocate resources, prioritize queues, set it to run in a Docker, and more. @@ -80,6 +84,8 @@ clearml-agent daemon [-h] [--foreground] [--queue QUEUES [QUEUES ...]] [--order- ### Parameters +
+ |Name | Description| Mandatory | |---|----|---| |`--child-report-tags`| List of tags to send with the status reports from the worker that executes a task.|No| @@ -106,6 +112,8 @@ clearml-agent daemon [-h] [--foreground] [--queue QUEUES [QUEUES ...]] [--order- |`--uptime`| Specify uptime for clearml-agent in ` ` format. For example, use `17-20 TUE` to set Tuesday's uptime to 17-20.

NOTES:
  • This feature is available under the ClearML Enterprise plan
  • Make sure to configure only `--uptime` or `--downtime`, but not both.
|No| |`--use-owner-token`| Generate and use the task owner's token for the execution of the task.|No| +
+ ## execute Use the `execute` command to set an agent to build and execute specific tasks directly without listening to a queue. @@ -123,6 +131,8 @@ clearml-agent execute [-h] --id TASK_ID [--log-file LOG_FILE] [--disable-monitor ### Parameters +
+ |Name | Description| Mandatory | |---|----|---| |`--id`| The ID of the Task to build|Yes| @@ -141,6 +151,8 @@ clearml-agent execute [-h] --id TASK_ID [--log-file LOG_FILE] [--disable-monitor |`--require-queue`| If the specified task is not queued, the execution will fail (used for 3rd party scheduler integration, e.g. K8s, SLURM, etc.)|No| |`--standalone-mode`| Do not use any network connects, assume everything is pre-installed|No| +
+ ## list List information about all active workers. diff --git a/docs/clearml_agent/clearml_agent_setup.md b/docs/clearml_agent/clearml_agent_setup.md index 2f460f19..2e744de0 100644 --- a/docs/clearml_agent/clearml_agent_setup.md +++ b/docs/clearml_agent/clearml_agent_setup.md @@ -9,7 +9,7 @@ If ClearML was previously configured, follow [this](#adding-clearml-agent-to-a-c ClearML Agent specific configurations ::: -To install ClearML Agent, execute +To install [ClearML Agent](../clearml_agent.md), execute ```bash pip install clearml-agent ``` @@ -27,7 +27,7 @@ it can't do that when running from a virtual environment. clearml-agent init ``` - The setup wizard prompts for ClearML credentials (see [here](../webapp/settings/webapp_settings_profile.md#clearml-credentials) about obtaining credentials). + The setup wizard prompts for ClearML credentials (see [here](../webapp/settings/webapp_settings_profile.md#clearml-api-credentials) about obtaining credentials). ``` Please create new clearml credentials through the settings page in your `clearml-server` web app, or create a free account at https://app.clear.ml/settings/webapp-configuration @@ -146,7 +146,7 @@ In case a `clearml.conf` file already exists, add a few ClearML Agent specific c worker_id: "" } ``` - View a complete ClearML Agent configuration file sample including an `agent` section [here](https://github.com/allegroai/clearml-agent/blob/master/docs/clearml.conf). + View a complete ClearML Agent configuration file sample including an `agent` section [here](https://github.com/clearml/clearml-agent/blob/master/docs/clearml.conf). 1. Save the configuration. diff --git a/docs/clearml_data/clearml_data.md b/docs/clearml_data/clearml_data.md index cd7f3093..ca3bc274 100644 --- a/docs/clearml_data/clearml_data.md +++ b/docs/clearml_data/clearml_data.md @@ -11,10 +11,11 @@ In Machine Learning, you are very likely dealing with a gargantuan amount of dat which you then need to be able to share, reproduce, and track. ClearML Data Management solves two important challenges: -- Accessibility - Making data easily accessible from every machine, -- Versioning - Linking data and experiments for better **traceability**. +- Accessibility - Making data easily accessible from every machine +- Versioning - Linking data and tasks for better **traceability**. -![Dataset lineage and preview](../img/webapp_dataset_lineage_preview.png) +![Dataset preview](../img/webapp_dataset_preview.png#light-mode-only) +![Dataset preview](../img/webapp_dataset_preview_dark.png#dark-mode-only) **We believe Data is not code**. It should not be stored in a git tree, because progress on datasets is not always linear. Moreover, it can be difficult and inefficient to find on a git tree the commit associated with a certain version of a dataset. @@ -36,16 +37,16 @@ lineage and content information. See [dataset UI](../webapp/datasets/webapp_data ## Setup -`clearml-data` comes built-in with the `clearml` python package! Check out the [Getting Started](../getting_started/ds/ds_first_steps.md) +`clearml-data` comes built-in with the `clearml` Python package! Check out the [ClearML Setup](../clearml_sdk/clearml_sdk_setup) guide for more info! ## Using ClearML Data ClearML Data supports two interfaces: - `clearml-data` - A CLI utility for creating, uploading, and managing datasets. See [CLI](clearml_data_cli.md) for a reference of `clearml-data` commands. -- `clearml.Dataset` - A python interface for creating, retrieving, managing, and using datasets. See [SDK](clearml_data_sdk.md) for an overview of the basic methods of the `Dataset` module. +- `clearml.Dataset` - A Python interface for creating, retrieving, managing, and using datasets. See [SDK](clearml_data_sdk.md) for an overview of the basic methods of the `Dataset` module. -For an overview of recommendations for ClearML Data workflows and practices, see [Best Practices](best_practices.md). +For an overview of recommendations for ClearML Data workflows and practices, see [Best Practices](../best_practices/data_best_practices.md). ## Dataset Version States The following table displays the possible states for a dataset version. diff --git a/docs/clearml_data/clearml_data_cli.md b/docs/clearml_data/clearml_data_cli.md index bc205cf8..d1517e2f 100644 --- a/docs/clearml_data/clearml_data_cli.md +++ b/docs/clearml_data/clearml_data_cli.md @@ -7,7 +7,7 @@ This page covers `clearml-data`, ClearML's file-based data management solution. See [Hyper-Datasets](../hyperdatasets/overview.md) for ClearML's advanced queryable dataset management solution. ::: -`clearml-data` is a data management CLI tool that comes as part of the `clearml` python package. Use `clearml-data` to +`clearml-data` is a data management CLI tool that comes as part of the `clearml` Python package. Use `clearml-data` to create, modify, and manage your datasets. You can upload your dataset to any storage service of your choice (S3 / GS / Azure / Network Storage) by setting the dataset's upload destination (see [`--storage`](#upload)). Once you have uploaded your dataset, you can access it from any machine. @@ -107,7 +107,7 @@ Upload the local dataset changes to the server. By default, it's uploaded to the medium by entering an upload destination. For example: * A shared folder: `/mnt/shared/folder` * S3: `s3://bucket/folder` -* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket` +* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket`. **Note that port specification is required**. * Google Cloud Storage: `gs://bucket-name/folder` * Azure Storage: `azure://.blob.core.windows.net/path/to/file` diff --git a/docs/clearml_data/clearml_data_sdk.md b/docs/clearml_data/clearml_data_sdk.md index 9216cb17..8db5d204 100644 --- a/docs/clearml_data/clearml_data_sdk.md +++ b/docs/clearml_data/clearml_data_sdk.md @@ -7,7 +7,7 @@ This page covers `clearml-data`, ClearML's file-based data management solution. See [Hyper-Datasets](../hyperdatasets/overview.md) for ClearML's advanced queryable dataset management solution. ::: -Datasets can be created, modified, and managed with ClearML Data's python interface. You can upload your dataset to any +Datasets can be created, modified, and managed with ClearML Data's Python interface. You can upload your dataset to any storage service of your choice (S3 / GS / Azure / Network Storage) by setting the dataset's upload destination (see [`output_url`](#uploading-files) parameter of `Dataset.upload()`). Once you have uploaded your dataset, you can access it from any machine. @@ -65,7 +65,7 @@ Use the `output_uri` parameter to specify a network storage target to upload the (such as previews) to. For example: * A shared folder: `/mnt/share/folder` * S3: `s3://bucket/folder` -* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket` +* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket`. **Note that port specification is required**. * Google Cloud Storage: `gs://bucket-name/folder` * Azure Storage: `azure://.blob.core.windows.net/path/to/file` @@ -264,7 +264,7 @@ To upload the dataset files to network storage, use [`Dataset.upload()`](../refe Use the `output_url` parameter to specify storage target, such as S3 / GS / Azure. For example: * A shared folder: `/mnt/share/folder` * S3: `s3://bucket/folder` -* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket` +* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket`. **Note that port specification is required**. * Google Cloud Storage: `gs://bucket-name/folder` * Azure Storage: `azure://.blob.core.windows.net/path/to/file` @@ -331,7 +331,7 @@ Dataset.rename( ``` ## Moving Datasets to Another Project -Move a dataset to another project using the [`Dataset.move_to_project()`](../references/sdk/dataset.md#datasetmove_to_projetc) +Move a dataset to another project using the [`Dataset.move_to_project()`](../references/sdk/dataset.md#datasetmove_to_project) class method. All the datasets with the given `dataset_project` and `dataset_name` will be moved to the new dataset project. diff --git a/docs/clearml_data/data_management_examples/data_man_cifar_classification.md b/docs/clearml_data/data_management_examples/data_man_cifar_classification.md index 59a65eac..860c5af6 100644 --- a/docs/clearml_data/data_management_examples/data_man_cifar_classification.md +++ b/docs/clearml_data/data_management_examples/data_man_cifar_classification.md @@ -10,7 +10,7 @@ class to ingest the data. ### Downloading the Data Before registering the CIFAR dataset with `clearml-data`, you need to obtain a local copy of it. -Execute this python script to download the data: +Execute this Python script to download the data: ```python from clearml import StorageManager @@ -68,13 +68,14 @@ reproducibility. Information about the dataset can be viewed in the WebApp, in the dataset's [details panel](../../webapp/datasets/webapp_dataset_viewing.md#version-details-panel). In the panel's **CONTENT** tab, you can see a table summarizing version contents, including file names, file sizes, and hashes. -![Dataset content tab](../../img/examples_data_management_cifar_dataset.png) +![Dataset content tab](../../img/examples_data_management_cifar_dataset.png#light-mode-only) +![Dataset content tab](../../img/examples_data_management_cifar_dataset_dark.png#dark-mode-only) ## Using the Dataset Now that you have a new dataset registered, you can consume it. -The [data_ingestion.py](https://github.com/allegroai/clearml/blob/master/examples/datasets/data_ingestion.py) example +The [data_ingestion.py](https://github.com/clearml/clearml/blob/master/examples/datasets/data_ingestion.py) example script demonstrates using the dataset within Python code. ```python @@ -99,7 +100,7 @@ trainset = datasets.CIFAR10( In cases like this, where you use a dataset in a task, you can have the dataset's ID stored in the task's hyperparameters. Passing `alias=` stores the dataset's ID in the -`dataset_alias_string` parameter in the experiment's **CONFIGURATION > HYPERPARAMETERS > Datasets** section. This way +`dataset_alias_string` parameter in the task's **CONFIGURATION > HYPERPARAMETERS > Datasets** section. This way you can easily track which dataset the task is using. [`Dataset.get_local_copy()`](../../references/sdk/dataset.md#get_local_copy) returns a path to the cached, diff --git a/docs/clearml_data/data_management_examples/data_man_folder_sync.md b/docs/clearml_data/data_management_examples/data_man_folder_sync.md index 85563b9c..a222459d 100644 --- a/docs/clearml_data/data_management_examples/data_man_folder_sync.md +++ b/docs/clearml_data/data_management_examples/data_man_folder_sync.md @@ -9,7 +9,7 @@ from time to time. When the point of truth is updated, users can call `clearml-d changes (file addition, modification, or removal) will be reflected in ClearML. ## Prerequisites -1. First, make sure that you have cloned the [clearml](https://github.com/allegroai/clearml) repository. It contains all +1. First, make sure that you have cloned the [clearml](https://github.com/clearml/clearml) repository. It contains all the needed files. 1. Open terminal and change directory to the cloned repository's examples folder diff --git a/docs/clearml_data/data_management_examples/data_man_python.md b/docs/clearml_data/data_management_examples/data_man_python.md index ddebe234..5d4adc06 100644 --- a/docs/clearml_data/data_management_examples/data_man_python.md +++ b/docs/clearml_data/data_management_examples/data_man_python.md @@ -2,14 +2,14 @@ title: Data Management with Python --- -The [dataset_creation.py](https://github.com/allegroai/clearml/blob/master/examples/datasets/dataset_creation.py) and -[data_ingestion.py](https://github.com/allegroai/clearml/blob/master/examples/datasets/data_ingestion.py) scripts +The [dataset_creation.py](https://github.com/clearml/clearml/blob/master/examples/datasets/dataset_creation.py) and +[data_ingestion.py](https://github.com/clearml/clearml/blob/master/examples/datasets/data_ingestion.py) scripts together demonstrate how to use ClearML's [`Dataset`](../../references/sdk/dataset.md) class to create a dataset and subsequently ingest the data. ## Dataset Creation -The [dataset_creation.py](https://github.com/allegroai/clearml/blob/master/examples/datasets/dataset_creation.py) script +The [dataset_creation.py](https://github.com/clearml/clearml/blob/master/examples/datasets/dataset_creation.py) script demonstrates how to do the following: * Create a dataset and add files to it * Upload the dataset to the ClearML Server @@ -79,13 +79,14 @@ After a dataset has been closed, it can no longer be modified. This ensures futu Information about the dataset can be viewed in the WebApp, in the dataset's [details panel](../../webapp/datasets/webapp_dataset_viewing.md#version-details-panel). In the panel's **CONTENT** tab, you can see a table summarizing version contents, including file names, file sizes, and hashes. -![Dataset content tab](../../img/examples_data_management_cifar_dataset.png) +![Dataset content tab](../../img/examples_data_management_cifar_dataset.png#light-mode-only) +![Dataset content tab](../../img/examples_data_management_cifar_dataset_dark.png#dark-mode-only) ## Data Ingestion Now that a new dataset is registered, you can consume it! -The [data_ingestion.py](https://github.com/allegroai/clearml/blob/master/examples/datasets/data_ingestion.py) script +The [data_ingestion.py](https://github.com/clearml/clearml/blob/master/examples/datasets/data_ingestion.py) script demonstrates data ingestion using the dataset created in the first script. The following script gets the dataset and uses [`Dataset.get_local_copy()`](../../references/sdk/dataset.md#get_local_copy) diff --git a/docs/clearml_data/data_management_examples/data_man_simple.md b/docs/clearml_data/data_management_examples/data_man_simple.md index b9733c09..03f4fa1c 100644 --- a/docs/clearml_data/data_management_examples/data_man_simple.md +++ b/docs/clearml_data/data_management_examples/data_man_simple.md @@ -5,7 +5,7 @@ title: Data Management from CLI In this example we'll create a simple dataset and demonstrate basic actions on it, using the `clearml-data` CLI. ## Prerequisites -1. First, make sure that you have cloned the [clearml](https://github.com/allegroai/clearml) repository. It contains all +1. First, make sure that you have cloned the [clearml](https://github.com/clearml/clearml) repository. It contains all the needed files. 1. Open terminal and change directory to the cloned repository's examples folder: diff --git a/docs/clearml_sdk/clearml_sdk.md b/docs/clearml_sdk/clearml_sdk.md index bb17e631..bf0e93c6 100644 --- a/docs/clearml_sdk/clearml_sdk.md +++ b/docs/clearml_sdk/clearml_sdk.md @@ -3,11 +3,11 @@ title: ClearML SDK --- The ClearML Python Package supports the [automatic logging](../fundamentals/logger.md#automatic-reporting) that documents -experiments for you, and an extensive set of powerful features and functionality you can use to improve experimentation +tasks for you, and an extensive set of powerful features and functionality you can use to improve experimentation and other workflows. :::tip Installation -For installation instructions, see [Getting Started](../getting_started/ds/ds_first_steps.md#install-clearml). +For installation instructions, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup#install-clearml). ::: The ClearML Python Package collects the scripts' entire execution information, including: @@ -36,7 +36,7 @@ See an [overview](task_sdk.md) of `Task`'s pythonic methods or the [Task SDK ref The `model` module contains three classes that provide support for working with models in ClearML: * `Model` - represents an existing model in ClearML that can be loaded and connected to a Task * `InputModel` - represents an existing model that you can load into ClearML -* `OutputModel` - represents the experiment output model that is always connected to the Task +* `OutputModel` - represents the task output model that is always connected to the Task See an [overview](../clearml_sdk/model_sdk.md) of the Model classes' pythonic methods, or the SDK reference pages for [`Model`](../references/sdk/model_model.md), [`InputModel`](../references/sdk/model_inputmodel.md), and [`OutputModel`](../references/sdk/model_outputmodel.md). @@ -57,7 +57,7 @@ ClearML's `optimization` module includes classes that support hyperparameter opt controller class * Optimization search strategy classes including [Optuna](../references/sdk/hpo_optuna_optuna_optimizeroptuna.md), [HpBandSter](../references/sdk/hpo_hpbandster_bandster_optimizerbohb.md), [GridSearch](../references/sdk/hpo_optimization_gridsearch.md), [RandomSearch](../references/sdk/hpo_optimization_randomsearch.md), - and a base [SearchStrategy](https://github.com/allegroai/clearml/blob/master/clearml/automation/optimization.py#L310) + and a base [SearchStrategy](https://github.com/clearml/clearml/blob/master/clearml/automation/optimization.py#L310) that can be customized See the [HyperParameterOptimizer SDK reference page](../references/sdk/hpo_optimization_hyperparameteroptimizer.md). @@ -96,22 +96,22 @@ configurations, and other execution details. See [reference page](../references/sdk/automation_job_clearmljob.md). ### AutoScaler -The `AutoScaler` class facilitates implementing resource budgeting. See class methods [here](https://github.com/allegroai/clearml/blob/master/clearml/automation/auto_scaler.py). -ClearML also provides a class specifically for AWS autoscaling. See [code](https://github.com/allegroai/clearml/blob/master/clearml/automation/aws_auto_scaler.py#L22) -and [example script](https://github.com/allegroai/clearml/blob/master/examples/services/aws-autoscaler/aws_autoscaler.py). +The `AutoScaler` class facilitates implementing resource budgeting. See class methods [here](https://github.com/clearml/clearml/blob/master/clearml/automation/auto_scaler.py). +ClearML also provides a class specifically for AWS autoscaling. See [code](https://github.com/clearml/clearml/blob/master/clearml/automation/aws_auto_scaler.py#L22) +and [example script](https://github.com/clearml/clearml/blob/master/examples/services/aws-autoscaler/aws_autoscaler.py). ### TaskScheduler -The `TaskScheduler` class supports methods for scheduling periodic execution (like cron jobs). See the [code](https://github.com/allegroai/clearml/blob/master/clearml/automation/scheduler.py#L481) -and [example](https://github.com/allegroai/clearml/blob/master/examples/scheduler/cron_example.py). +The `TaskScheduler` class supports methods for scheduling periodic execution (like cron jobs). See the [code](https://github.com/clearml/clearml/blob/master/clearml/automation/scheduler.py#L481) +and [example](https://github.com/clearml/clearml/blob/master/examples/scheduler/cron_example.py). ### TriggerScheduler The `TriggerScheduler` class facilitates triggering task execution in the case that specific events occur in the system -(such as model publication, dataset creation, task failure). See [code](https://github.com/allegroai/clearml/blob/master/clearml/automation/trigger.py#L148) -and [usage example](https://github.com/allegroai/clearml/blob/master/examples/scheduler/trigger_example.py). +(such as model publication, dataset creation, task failure). See [code](https://github.com/clearml/clearml/blob/master/clearml/automation/trigger.py#L148) +and [usage example](https://github.com/clearml/clearml/blob/master/examples/scheduler/trigger_example.py). ## Examples -The `clearml` GitHub repository includes an [examples folder](https://github.com/allegroai/clearml/tree/master/examples) +The `clearml` GitHub repository includes an [examples folder](https://github.com/clearml/clearml/tree/master/examples) with example scripts demonstrating how to use the various functionalities of the ClearML SDK. These examples are preloaded in the [ClearML Hosted Service](https://app.clear.ml), and can be viewed, cloned, diff --git a/docs/getting_started/ds/ds_first_steps.md b/docs/clearml_sdk/clearml_sdk_setup.md similarity index 55% rename from docs/getting_started/ds/ds_first_steps.md rename to docs/clearml_sdk/clearml_sdk_setup.md index 702461de..6f8a82c7 100644 --- a/docs/getting_started/ds/ds_first_steps.md +++ b/docs/clearml_sdk/clearml_sdk_setup.md @@ -1,14 +1,16 @@ --- -title: First Steps +title: ClearML Python Package --- +This is step-by-step guide for installing the `clearml` Python package and connecting it to the ClearML Server. Once done, +you can integrate `clearml` into your code. ## Install ClearML First, [sign up for free](https://app.clear.ml). -Install the `clearml` python package: +Install the `clearml` Python package: ```bash pip install clearml ``` @@ -44,8 +46,8 @@ pip install clearml CLEARML_CONFIG_FILE = MyOtherClearML.conf ``` - For more information about running experiments inside Docker containers, see [ClearML Agent Deployment](../../clearml_agent/clearml_agent_deployment.md) - and [ClearML Agent Reference](../../clearml_agent/clearml_agent_ref.md). + For more information about running tasks inside Docker containers, see [ClearML Agent Deployment](../clearml_agent/clearml_agent_deployment_bare_metal.md) + and [ClearML Agent Reference](../clearml_agent/clearml_agent_ref.md). @@ -83,7 +85,7 @@ pip install clearml CLEARML setup completed successfully. ``` -Now you can integrate ClearML into your code! Continue [here](#auto-log-experiment). +Now you can integrate ClearML into your code! Continue [here](../getting_started/auto_log_exp.md). ### Jupyter Notebook To use ClearML with Jupyter Notebook, you need to configure ClearML Server access credentials for your notebook. @@ -94,49 +96,3 @@ To use ClearML with Jupyter Notebook, you need to configure ClearML Server acces 1. Add these commands to your notebook Now you can use ClearML in your notebook! - -## Auto-log Experiment - -In ClearML, experiments are organized as [Tasks](../../fundamentals/task.md). - -ClearML automatically logs your experiment and code, including outputs and parameters from popular ML frameworks, -once you integrate the ClearML [SDK](../../clearml_sdk/clearml_sdk.md) with your code. To control what ClearML automatically logs, see this [FAQ](../../faq.md#controlling_logging). - -At the beginning of your code, import the `clearml` package: - -```python -from clearml import Task -``` - -:::tip Full Automatic Logging -To ensure full automatic logging, it is recommended to import the `clearml` package at the top of your entry script. -::: - -Then initialize the Task object in your `main()` function, or the beginning of the script. - -```python -task = Task.init(project_name='great project', task_name='best experiment') -``` - -If the project does not already exist, a new one is created automatically. - -The console should display the following output: - -``` -ClearML Task: created new task id=1ca59ef1f86d44bd81cb517d529d9e5a -2021-07-25 13:59:09 -ClearML results page: https://app.clear.ml/projects/4043a1657f374e9298649c6ba72ad233/experiments/1ca59ef1f86d44bd81cb517d529d9e5a/output/log -2021-07-25 13:59:16 -``` - -**That's it!** You are done integrating ClearML with your code :) - -Now, [command-line arguments](../../fundamentals/hyperparameters.md#tracking-hyperparameters), [console output](../../fundamentals/logger.md#types-of-logged-results) as well as Tensorboard and Matplotlib will automatically be logged in the UI under the created Task. - -Sit back, relax, and watch your models converge :) or continue to see what else can be done with ClearML [here](ds_second_steps.md). - -## YouTube Playlist - -Or watch the **Getting Started** playlist on ClearML's YouTube Channel! - -[![Watch the video](https://img.youtube.com/vi/bjWwZAzDxTY/hqdefault.jpg)](https://www.youtube.com/watch?v=bjWwZAzDxTY&list=PLMdIlCuMqSTnoC45ME5_JnsJX0zWqDdlO&index=2) diff --git a/docs/fundamentals/hpo.md b/docs/clearml_sdk/hpo_sdk.md similarity index 78% rename from docs/fundamentals/hpo.md rename to docs/clearml_sdk/hpo_sdk.md index 0640ab50..ad39a9f6 100644 --- a/docs/fundamentals/hpo.md +++ b/docs/clearml_sdk/hpo_sdk.md @@ -2,16 +2,8 @@ title: Hyperparameter Optimization --- -## What is Hyperparameter Optimization? -Hyperparameters are variables that directly control the behaviors of training algorithms, and have a significant effect on -the performance of the resulting machine learning models. Finding the hyperparameter values that yield the best -performing models can be complicated. Manually adjusting hyperparameters over the course of many training trials can be -slow and tedious. Luckily, you can automate and boost hyperparameter optimization (HPO) with ClearML's -[**`HyperParameterOptimizer`**](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class. - -## ClearML's Hyperparameter Optimization - -ClearML provides the `HyperParameterOptimizer` class, which takes care of the entire optimization process for users +You can automate and boost hyperparameter optimization (HPO) with ClearML's +[**`HyperParameterOptimizer`**](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class, which takes care of the entire optimization process with a simple interface. ClearML's approach to hyperparameter optimization is scalable, easy to set up and to manage, and it makes it easy to @@ -31,13 +23,17 @@ The preceding diagram demonstrates the typical flow of hyperparameter optimizati summary of the optimization results in tabular and parallel coordinate formats, and in a scalar plot. -![Optimization results summary chart](../img/fundamentals_hpo_summary.png) +![Optimization results summary chart](../img/fundamentals_hpo_summary.png#light-mode-only) +![Optimization results summary chart](../img/fundamentals_hpo_summary_dark.png#dark-mode-only) + -![Parallel Coordinates](../img/fundamentals_hpo_parallel_coordinates.png) +![Parallel Coordinates](../img/fundamentals_hpo_parallel_coordinates.png#light-mode-only) +![Parallel Coordinates](../img/fundamentals_hpo_parallel_coordinates_dark.png#dark-mode-only) -![Scalars](../img/fundamentals_hpo_scalars.png) +![Scalars](../img/fundamentals_hpo_scalars.png#light-mode-only) +![Scalars](../img/fundamentals_hpo_scalars_dark.png#dark-mode-only) @@ -53,11 +49,11 @@ optimization. documentation. * **BOHB** - [`automation.hpbandster.OptimizerBOHB`](../references/sdk/hpo_hpbandster_bandster_optimizerbohb.md). BOHB performs robust and efficient hyperparameter optimization at scale by combining the speed of Hyperband searches with the guidance and guarantees of convergence of Bayesian Optimization. - For more information about HpBandSter BOHB, see the [HpBandSter](https://automl.github.io/HpBandSter/build/html/index.html) + For more information about HpBandSter BOHB, see the [HpBandSter](../https://automl.github.io/HpBandSter/build/html/index.html) documentation and a [code example](../guides/frameworks/pytorch/notebooks/image/hyperparameter_search.md). * **Random** uniform sampling of hyperparameters - [`automation.RandomSearch`](../references/sdk/hpo_optimization_randomsearch.md). * **Full grid** sampling strategy of every hyperparameter combination - [`automation.GridSearch`](../references/sdk/hpo_optimization_gridsearch.md). -* **Custom** - [`automation.optimization.SearchStrategy`](https://github.com/allegroai/clearml/blob/master/clearml/automation/optimization.py#L268) - Use a custom class and inherit from the ClearML automation base strategy class. +* **Custom** - [`automation.optimization.SearchStrategy`](../https://github.com/clearml/clearml/blob/master/clearml/automation/optimization.py#L268) - Use a custom class and inherit from the ClearML automation base strategy class. ## Defining a Hyperparameter Optimization Search Example @@ -133,9 +129,9 @@ optimization. ## Optimizer Execution Options -The `HyperParameterOptimizer` provides options to launch the optimization tasks locally or through a ClearML [queue](agents_and_queues.md#what-is-a-queue). +The `HyperParameterOptimizer` provides options to launch the optimization tasks locally or through a ClearML [queue](../fundamentals/agents_and_queues.md#what-is-a-queue). Start a `HyperParameterOptimizer` instance using either [`HyperParameterOptimizer.start()`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md#start) -or [`HyperParameterOptimizer.start_locally()`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md#start_locally). +or [`HyperParameterOptimizer.start_locally()`](references/sdk/hpo_optimization_hyperparameteroptimizer.md#start_locally). Both methods run the optimizer controller locally. `start()` launches the base task clones through a queue specified when instantiating the controller, while `start_locally()` runs the tasks locally. @@ -152,17 +148,3 @@ Check out the [Hyperparameter Optimization tutorial](../guides/optimization/hype ## SDK Reference For detailed information, see the complete [HyperParameterOptimizer SDK reference page](../references/sdk/hpo_optimization_hyperparameteroptimizer.md). - -## CLI - -ClearML also provides `clearml-param-search`, a CLI utility for managing the hyperparameter optimization process. See -[ClearML Param Search](../apps/clearml_param_search.md) for more information. - -## UI Application - -:::info Pro Plan Offering -The ClearML HPO App is available under the ClearML Pro plan. -::: - -ClearML provides the [Hyperparameter Optimization GUI application](../webapp/applications/apps_hpo.md) for launching and -managing the hyperparameter optimization process. diff --git a/docs/clearml_sdk/model_sdk.md b/docs/clearml_sdk/model_sdk.md index 2792e8d2..5625b366 100644 --- a/docs/clearml_sdk/model_sdk.md +++ b/docs/clearml_sdk/model_sdk.md @@ -6,14 +6,14 @@ The following page provides an overview of the basic Pythonic interface to Clear ClearML provides the following classes to work with models: * `Model` - Represents a ClearML model, regardless of any task connection. Use this class to programmatically access and manage the ClearML model store. -* `InputModel` - Represents a ClearML model to be used in an experiment. Use this class to load a model from ClearML's model store or to import a pre-trained -model from an external resource to use as an experiment's initial starting point. -* `OutputModel` - Represents an experiment's output model (training results). An OutputModel is always connected to a [task](../fundamentals/task.md), -so the models are traceable to experiments. +* `InputModel` - Represents a ClearML model to be used in a task. Use this class to load a model from ClearML's model store or to import a pre-trained +model from an external resource to use as a task's initial starting point. +* `OutputModel` - Represents a task's output model (training results). An OutputModel is always connected to a [task](../fundamentals/task.md), +so the models are traceable to tasks. ## Output Models -### Manually Logging Models +### Manually Logging Models To manually log a model, create an instance of OutputModel class. @@ -40,7 +40,7 @@ output_model.update_labels({'background': 0, 'label': 255}) ``` ### Updating Models -ClearML doesn't automatically log the snapshots of manually logged models. To update an experiment's model use the +ClearML doesn't automatically log the snapshots of manually logged models. To update a task's model use the [OutputModel.update_weights](../references/sdk/model_outputmodel.md#update_weights) method. ```python diff --git a/docs/clearml_sdk/task_sdk.md b/docs/clearml_sdk/task_sdk.md index a26763f1..611e4a29 100644 --- a/docs/clearml_sdk/task_sdk.md +++ b/docs/clearml_sdk/task_sdk.md @@ -60,7 +60,7 @@ Nesting projects works on multiple levels. For example: `project_name=main_proje ### Automatic Logging After invoking `Task.init` in a script, ClearML starts its automagical logging, which includes the following elements: * **Hyperparameters** - ClearML logs the following types of hyperparameters: - * Command Line Parsing - ClearML captures any command line parameters passed when invoking code that uses standard python packages, including: + * Command Line Parsing - ClearML captures any command line parameters passed when invoking code that uses standard Python packages, including: * [click](../integrations/click.md) * [argparse](../guides/reporting/hyper_parameters.md#argparse-command-line-options) * [Python Fire](../integrations/python_fire.md) @@ -89,7 +89,7 @@ After invoking `Task.init` in a script, ClearML starts its automagical logging, * **Execution details** including: * Git information - * Uncommitted code modifications - In cases where no git repository is detected (e.g. when a single python script is + * Uncommitted code modifications - In cases where no git repository is detected (e.g. when a single Python script is executed outside a git repository, or when running from a Jupyter Notebook), ClearML logs the contents of the executed script * Python environment @@ -97,7 +97,7 @@ After invoking `Task.init` in a script, ClearML starts its automagical logging, ### Control Automatic Logging By default, when ClearML is integrated into your script, it automatically captures information from supported frameworks, -and parameters from supported argument parsers. But, you may want to have more control over what your experiment logs. +and parameters from supported argument parsers. But, you may want to have more control over what your task logs. #### Frameworks To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). @@ -209,7 +209,7 @@ For example: task = Task.create( project_name='example', task_name='task template', - repo='https://github.com/allegroai/clearml.git', + repo='https://github.com/clearml/clearml.git', branch='master', script='examples/reporting/html_reporting.py', working_directory='.', @@ -239,7 +239,7 @@ Set a task's progress to a numeric value between 0 - 100. Access the task's curr [`Task.get_progress()`](../references/sdk/task.md#get_progress). ```python -task = Task.init(project_name="examples", task_name="Track experiment progress") +task = Task.init(project_name="examples", task_name="Track task progress") task.set_progress(0) # task doing stuff task.set_progress(50) @@ -248,22 +248,23 @@ print(task.get_progress()) task.set_progress(100) ``` -While the task is running, the WebApp will show the task's progress indication in the experiment table, next to the +While the task is running, the WebApp will show the task's progress indication in the task table, next to the task's status. If a task failed or was aborted, you can view how much progress it had made.
-![Experiment table progress indication](../img/fundamentals_task_progress.png) +![Task table progress indication](../img/fundamentals_task_progress.png#light-mode-only) +![Task table progress indication](../img/fundamentals_task_progress_dark.png#dark-mode-only)
-Additionally, you can view a task's progress in its [INFO](../webapp/webapp_exp_track_visual.md#general-information) tab +Additionally, you can view a task's progress in its [INFO](../webapp/webapp_exp_track_visual.md#info) tab in the WebApp. ## Accessing Tasks A task can be identified by its project and name, and by a unique identifier (UUID string). The name and project of -a task can be changed after an experiment has been executed, but its ID can't be changed. +a task can be changed after its execution, but its ID can't be changed. Programmatically, task objects can be retrieved by querying the system based on either the task ID or a project and name combination using the [`Task.get_task()`](../references/sdk/task.md#taskget_task) class method. If a project / name @@ -422,7 +423,7 @@ different number of epochs and using a new base model: cloned_task.set_parameters({'epochs':7, 'lr': 0.5}) # Override git repo information -cloned_task.set_repo(repo="https://github.com/allegroai/clearml.git", branch="my_branch_name") +cloned_task.set_repo(repo="https://github.com/clearml/clearml.git", branch="my_branch_name") # Remove input model and set a new one cloned_task.remove_input_models(models_to_remove=[""]) cloned_task.set_input_model(model_id="") @@ -440,7 +441,7 @@ Task.enqueue( ) ``` -See enqueue [example](https://github.com/allegroai/clearml/blob/master/examples/automation/programmatic_orchestration.py). +See enqueue [example](https://github.com/clearml/clearml/blob/master/examples/automation/programmatic_orchestration.py). ## Advanced Flows @@ -484,7 +485,7 @@ a_func_task = task.create_function_task( ) ``` Arguments passed to the function will be automatically logged in the -experiment's **CONFIGURATION** tab under the **HYPERPARAMETERS > Function** section. +task's **CONFIGURATION** tab under the **HYPERPARAMETERS > Function** section. Like any other arguments, they can be changed from the UI or programmatically. :::note Function Task Creation @@ -719,7 +720,7 @@ preprocess_task = Task.get_task(task_id='the_preprocessing_task_id') local_csv = preprocess_task.artifacts['data'].get_local_copy() ``` -See more details in the [Using Artifacts example](https://github.com/allegroai/clearml/blob/master/examples/reporting/using_artifacts_example.py). +See more details in the [Using Artifacts example](https://github.com/clearml/clearml/blob/master/examples/reporting/using_artifacts_example.py). ## Models The following is an overview of working with models through a `Task` object. You can also work directly with model @@ -779,14 +780,14 @@ Notice that if one of the frameworks loads an existing weights file, the running "Input Model", pointing directly to the original training task's model. This makes it easy to get the full lineage of every trained and used model in your system! -Models loaded by the ML framework appear in an experiment's **Artifacts** tab under the "Input Models" section in the ClearML UI. +Models loaded by the ML framework appear in a task's **Artifacts** tab under the "Input Models" section in the ClearML UI. ### Setting Upload Destination ClearML automatically captures the storage location of Models created by frameworks such as TensorFlow, PyTorch, and scikit-learn. By default, it stores the local path they are saved at. -To automatically store all created models by a specific experiment, modify the `Task.init` function as such: +To automatically store all created models by a specific task, modify the `Task.init` function as such: ```python task = Task.init( @@ -800,12 +801,12 @@ task = Task.init( Specify the model storage URI location using the relevant format: * A shared folder: `/mnt/share/folder` * S3: `s3://bucket/folder` -* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket` +* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket`. **Note that port specification is required**. * Google Cloud Storage: `gs://bucket-name/folder` * Azure Storage: `azure://.blob.core.windows.net/path/to/file` ::: -To automatically store all models created by any experiment at a specific location, edit the `clearml.conf` (see +To automatically store all models created by any task at a specific location, edit the `clearml.conf` (see [ClearML Configuration Reference](../configs/clearml_conf.md#sdkdevelopment)) and set `sdk.developmenmt.default_output_uri` to the desired storage (see [Storage](../integrations/storage.md)). This is especially helpful when using [clearml-agent](../clearml_agent.md) to execute code. @@ -895,7 +896,8 @@ task.connect(me) task.connect(params_dictionary) ``` -![Task parameters](../img/fundamentals_task_config_hyperparams.png) +![Task parameters](../img/fundamentals_task_config_hyperparams.png#light-mode-only) +![Task parameters](../img/fundamentals_task_config_hyperparams_dark.png#dark-mode-only) ### Configuration Objects @@ -918,7 +920,8 @@ config_file_yaml = task.connect_configuration( ) ``` -![Task configuration objects](../img/fundamentals_task_config_object.png) +![Task configuration objects](../img/fundamentals_task_config_object.png#light-mode-only) +![Task configuration objects](../img/fundamentals_task_config_object_dark.png#dark-mode-only) ### User Properties A task's user properties do not impact task execution, so you can add / modify the properties at any stage. Add user @@ -932,7 +935,8 @@ task.set_user_properties( ) ``` -![Task user properties](../img/fundamentals_task_config_properties.png) +![Task user properties](../img/fundamentals_task_config_properties.png#light-mode-only) +![Task user properties](../img/fundamentals_task_config_properties_dark.png#dark-mode-only) ## Scalars diff --git a/docs/clearml_serving/clearml_serving.md b/docs/clearml_serving/clearml_serving.md index 79aceca6..43c4b84e 100644 --- a/docs/clearml_serving/clearml_serving.md +++ b/docs/clearml_serving/clearml_serving.md @@ -16,7 +16,7 @@ solution. * Flexible * On-line model deployment * On-line endpoint model/version deployment (i.e. no need to take the service down) - * Per model standalone preprocessing and postprocessing python code + * Per model standalone preprocessing and postprocessing Python code * Scalable * Multi model per container * Multi models per serving service @@ -39,7 +39,7 @@ solution. ## Components -![ClearML Serving](https://github.com/allegroai/clearml-serving/raw/main/docs/design_diagram.png?raw=true) +![ClearML Serving](https://github.com/clearml/clearml-serving/raw/main/docs/design_diagram.png?raw=true) * **CLI** - Secure configuration interface for on-line model upgrade/deployment on running Serving Services diff --git a/docs/clearml_serving/clearml_serving_cli.md b/docs/clearml_serving/clearml_serving_cli.md index be377690..50050f40 100644 --- a/docs/clearml_serving/clearml_serving_cli.md +++ b/docs/clearml_serving/clearml_serving_cli.md @@ -202,7 +202,7 @@ clearml-serving model upload [-h] --name NAME [--tags TAGS [TAGS ...]] --project |`--publish`| Publish the newly created model (change model state to "published" (i.e. locked and ready to deploy)|No| |`--path`|Specify a model file/folder to be uploaded and registered| No| |`--url`| Specify an already uploaded model url (e.g. `s3://bucket/model.bin`, `gs://bucket/model.bin`)|No| -|`--destination`|Specify the target destination for the model to be uploaded. For example: `s3://bucket/folder/`, `s3://host_addr:port/bucket` (for non-AWS S3-like services like MinIO), `gs://bucket-name/folder`, `azure://.blob.core.windows.net/path/to/file`|No| +|`--destination`|Specify the target destination for the model to be uploaded. For example:
  • S3: `s3://bucket/folder`
  • Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket`. **Note that port specification is required**.
  • Google Cloud Storage: `gs://bucket-name/folder`
  • Azure Storage: `azure://.blob.core.windows.net/path/to/file`
|No| diff --git a/docs/clearml_serving/clearml_serving_setup.md b/docs/clearml_serving/clearml_serving_setup.md index 4da8e030..4820a946 100644 --- a/docs/clearml_serving/clearml_serving_setup.md +++ b/docs/clearml_serving/clearml_serving_setup.md @@ -13,9 +13,9 @@ The following page goes over how to set up and upgrade `clearml-serving`. ## Initial Setup 1. Set up your [ClearML Server](../deploying_clearml/clearml_server.md) or use the [free hosted service](https://app.clear.ml) -1. Connect `clearml` SDK to the server, see instructions [here](../getting_started/ds/ds_first_steps.md#install-clearml) +1. Connect `clearml` SDK to the server, see instructions [here](../clearml_sdk/clearml_sdk_setup#install-clearml) -1. Install clearml-serving CLI: +1. Install the `clearml-serving` CLI: ```bash pip3 install clearml-serving @@ -27,21 +27,22 @@ The following page goes over how to set up and upgrade `clearml-serving`. clearml-serving create --name "serving example" ``` - The new serving service UID should be printed + This command prints the Serving Service UID: ```console New Serving Service created: id=aa11bb22aa11bb22 ``` - Write down the Serving Service UID + Copy the Serving Service UID (e.g., `aa11bb22aa11bb22`), as you will need it in the next steps. 1. Clone the `clearml-serving` repository: ```bash - git clone https://github.com/allegroai/clearml-serving.git + git clone https://github.com/clearml/clearml-serving.git ``` -1. Edit the environment variables file (docker/example.env) with your clearml-server credentials and Serving Service UID. - For example, you should have something like +1. Edit the environment variables file (`docker/example.env`) with your `clearml-server` API credentials and Serving Service UID. + For example: + ```bash cat docker/example.env ``` @@ -55,31 +56,30 @@ The following page goes over how to set up and upgrade `clearml-serving`. CLEARML_SERVING_TASK_ID="" ``` -1. Spin up the `clearml-serving` containers with `docker-compose` (or if running on Kubernetes, use the helm chart) +1. Spin up the `clearml-serving` containers with `docker-compose` (or if running on Kubernetes, use the helm chart): ```bash cd docker && docker-compose --env-file example.env -f docker-compose.yml up ``` - If you need Triton support (keras/pytorch/onnx etc.), use the triton docker-compose file + If you need Triton support (Keras/PyTorch/ONNX etc.), use the triton `docker-compose` file: ```bash cd docker && docker-compose --env-file example.env -f docker-compose-triton.yml up ``` - If running on a GPU instance with Triton support (keras/pytorch/onnx etc.), use the triton gpu docker-compose file: + If running on a GPU instance with Triton support (Keras/PyTorch/ONNX etc.), use the triton gpu docker-compose file: ```bash cd docker && docker-compose --env-file example.env -f docker-compose-triton-gpu.yml up ``` :::note -Any model that registers with Triton engine will run the pre/post-processing code on the Inference service container, +Any model that registers with Triton engine will run the pre/post-processing code in the Inference service container, and the model inference itself will be executed on the Triton Engine container. ::: ## Advanced Setup - S3/GS/Azure Access (Optional) -To add access credentials and allow the inference containers to download models from your S3/GS/Azure object-storage, -add the respective environment variables to your env files (example.env). For further details, see -[Configuring Storage](../integrations/storage.md#configuring-storage). +To enable inference containers to download models from S3, Google Cloud Storage (GS), or Azure, +add access credentials in the respective environment variables to your env files (`example.env`): ``` AWS_ACCESS_KEY_ID @@ -92,14 +92,21 @@ AZURE_STORAGE_ACCOUNT AZURE_STORAGE_KEY ``` +For further details, see [Configuring Storage](../integrations/storage.md#configuring-storage). + ## Upgrading ClearML Serving **Upgrading to v1.1** -1. Take down the serving containers (`docker-compose` or k8s) -1. Update the `clearml-serving` CLI `pip3 install -U clearml-serving` +1. Shut down the serving containers (`docker-compose` or k8s) +1. Update the `clearml-serving` CLI: + + ``` + pip3 install -U clearml-serving + ``` + 1. Re-add a single existing endpoint with `clearml-serving model add ...` (press yes when asked). It will upgrade the - `clearml-serving` session definitions + `clearml-serving` session definitions. 1. Pull the latest serving containers (`docker-compose pull ...` or k8s) 1. Re-spin serving containers (`docker-compose` or k8s) diff --git a/docs/clearml_serving/clearml_serving_tutorial.md b/docs/clearml_serving/clearml_serving_tutorial.md index d6e383d6..c13e81b9 100644 --- a/docs/clearml_serving/clearml_serving_tutorial.md +++ b/docs/clearml_serving/clearml_serving_tutorial.md @@ -3,7 +3,7 @@ title: Tutorial --- In this tutorial, you will go over the model lifecycle -- from training to serving -- in the following steps: -* Training a model using the [sklearn example script](https://github.com/allegroai/clearml-serving/blob/main/examples/sklearn/train_model.py) +* Training a model using the [sklearn example script](https://github.com/clearml/clearml-serving/blob/main/examples/sklearn/train_model.py) * Serving the model using **ClearML Serving** * Spinning the inference container @@ -22,7 +22,7 @@ Before executing the steps below, make sure you have completed `clearml-serving` Train a model using the example script. Start from the root directory of your local `clearml-serving` repository. 1. Create a Python virtual environment 1. Install the script requirements: `pip3 install -r examples/sklearn/requirements.txt` -1. Execute the [training script](https://github.com/allegroai/clearml-serving/blob/main/examples/sklearn/train_model.py): `python3 examples/sklearn/train_model.py`. +1. Execute the [training script](https://github.com/clearml/clearml-serving/blob/main/examples/sklearn/train_model.py): `python3 examples/sklearn/train_model.py`. During execution, ClearML automatically registers the sklearn model and uploads it to the model repository. For information about explicit model registration, see [Registering and Deploying New Models Manually](#registering-and-deploying-new-models-manually). @@ -50,7 +50,7 @@ and downloaded in real time when updated. ### Step 3: Spin Inference Container Spin the Inference Container: -1. Customize container [Dockerfile](https://github.com/allegroai/clearml-serving/blob/main/clearml_serving/serving/Dockerfile) if needed +1. Customize container [Dockerfile](https://github.com/clearml/clearml-serving/blob/main/clearml_serving/serving/Dockerfile) if needed 1. Build container: ```bash @@ -76,19 +76,19 @@ everything is cached, responses will return almost immediately. :::note Review the model repository in the ClearML web UI, under the "serving examples" Project on your ClearML -account/server ([free hosted](https://app.clear.ml) or [self-deployed](https://github.com/allegroai/clearml-server)). +account/server ([free hosted](https://app.clear.ml) or [self-deployed](https://github.com/clearml/clearml-server)). Inference services status, console outputs and machine metrics are available in the ClearML UI in the Serving Service project (default: "DevOps" project). ::: -## Registering and Deploying New Models Manually +## Registering and Deploying New Models Manually -Uploading an existing model file into the model repository can be done via the `clearml` RestAPI, the python interface, +Uploading an existing model file into the model repository can be done via the `clearml` RestAPI, the Python interface, or with the `clearml-serving` CLI. 1. Upload the model file to the `clearml-server` file storage and register it. The `--path` parameter is used to input - the path to a local model file (local model created in [step 1](#step-1--train-model) located in `./sklearn-model.pkl`). + the path to a local model file (local model created in [step 1](#step-1-train-model) located in `./sklearn-model.pkl`). ```bash clearml-serving --id model upload --name "manual sklearn model" --project "serving examples" --framework "scikitlearn" --path ./sklearn-model.pkl @@ -107,8 +107,15 @@ or with the `clearml-serving` CLI. ``` :::info Model Storage -You can also provide a different storage destination for the model, such as S3/GS/Azure, by passing -`--destination="s3://bucket/folder"`, `s3://host_addr:port/bucket` (for non-AWS S3-like services like MinIO), `gs://bucket/folder`, `azure://.blob.core.windows.net/path/to/file`. There is no need to provide a unique +You can also provide a different storage destination for the model, such as S3/GS/Azure, by using +`--destination`. For example: + +* S3: `s3://bucket/folder` +* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket`. **Note that port specification is required**. +* Google Cloud Storage: `gs://bucket-name/folder` +* Azure Storage: `azure://.blob.core.windows.net/path/to/file` + +There is no need to provide a unique path to the destination argument, the location of the model will be a unique path based on the serving service ID and the model name. ::: @@ -200,12 +207,12 @@ Example: ### Model Monitoring and Performance Metrics -![Grafana Screenshot](https://github.com/allegroai/clearml-serving/raw/main/docs/grafana_screenshot.png) +![Grafana Screenshot](https://github.com/clearml/clearml-serving/raw/main/docs/grafana_screenshot.png) ClearML serving instances send serving statistics (count/latency) automatically to Prometheus and Grafana can be used to visualize and create live dashboards. -The default docker-compose installation is preconfigured with Prometheus and Grafana. Notice that by default data/ate +The default `docker-compose` installation is preconfigured with Prometheus and Grafana. Notice that by default data/ate of both containers is *not* persistent. To add persistence, adding a volume mount is recommended. You can also add many custom metrics on the input/predictions of your models. Once a model endpoint is registered, @@ -225,7 +232,7 @@ that you will be able to visualize on Grafana. :::info time-series values You can also log time-series values with `--variable-value x2` or discrete results (e.g. classifications strings) with `--variable-enum animal=cat,dog,sheep`. Additional custom variables can be added in the preprocess and postprocess with -a call to `collect_custom_statistics_fn({'new_var': 1.337})`. See [preprocess_template.py](https://github.com/allegroai/clearml-serving/blob/main/clearml_serving/preprocess/preprocess_template.py). +a call to `collect_custom_statistics_fn({'new_var': 1.337})`. See [preprocess_template.py](https://github.com/clearml/clearml-serving/blob/main/clearml_serving/preprocess/preprocess_template.py). ::: With the new metrics logged, you can create a visualization dashboard over the latency of the calls, and the output distribution. @@ -251,10 +258,10 @@ You can also specify per-endpoint log frequency with the `clearml-serving` CLI. See examples of ClearML Serving with other supported frameworks: -* [scikit-learn](https://github.com/allegroai/clearml-serving/blob/main/examples/sklearn/readme.md) - Random data -* [scikit-learn Model Ensemble](https://github.com/allegroai/clearml-serving/blob/main/examples/ensemble/readme.md) - Random data -* [XGBoost](https://github.com/allegroai/clearml-serving/blob/main/examples/xgboost/readme.md) - Iris dataset -* [LightGBM](https://github.com/allegroai/clearml-serving/blob/main/examples/lightgbm/readme.md) - Iris dataset -* [PyTorch](https://github.com/allegroai/clearml-serving/blob/main/examples/pytorch/readme.md) - MNIST dataset -* [TensorFlow/Keras](https://github.com/allegroai/clearml-serving/blob/main/examples/keras/readme.md) - MNIST dataset -* [Model Pipeline](https://github.com/allegroai/clearml-serving/blob/main/examples/pipeline/readme.md) - Random data +* [scikit-learn](https://github.com/clearml/clearml-serving/blob/main/examples/sklearn/readme.md) - Random data +* [scikit-learn Model Ensemble](https://github.com/clearml/clearml-serving/blob/main/examples/ensemble/readme.md) - Random data +* [XGBoost](https://github.com/clearml/clearml-serving/blob/main/examples/xgboost/readme.md) - Iris dataset +* [LightGBM](https://github.com/clearml/clearml-serving/blob/main/examples/lightgbm/readme.md) - Iris dataset +* [PyTorch](https://github.com/clearml/clearml-serving/blob/main/examples/pytorch/readme.md) - MNIST dataset +* [TensorFlow/Keras](https://github.com/clearml/clearml-serving/blob/main/examples/keras/readme.md) - MNIST dataset +* [Model Pipeline](https://github.com/clearml/clearml-serving/blob/main/examples/pipeline/readme.md) - Random data diff --git a/docs/cloud_autoscaling/autoscaling_overview.md b/docs/cloud_autoscaling/autoscaling_overview.md index 0366cbf0..1a7f0908 100644 --- a/docs/cloud_autoscaling/autoscaling_overview.md +++ b/docs/cloud_autoscaling/autoscaling_overview.md @@ -71,7 +71,7 @@ execute the tasks in the GPU queue. #### Docker Every task a cloud instance pulls will be run inside a docker container. When setting up an autoscaler app instance, you can specify a default container to run the tasks inside. If the task has its own container configured, it will -override the autoscaler’s default docker image (see [Base Docker Image](../clearml_agent/clearml_agent_docker.md#base-docker-container)). +override the autoscaler’s default docker image (see [Base Container](../getting_started/clearml_agent_base_docker.md#base-container)). #### Git Configuration If your code is saved in a private repository, you can add your Git credentials so the ClearML Agents running on your @@ -100,5 +100,5 @@ underutilized nodes. See [charts](https://github.com/kubernetes/autoscaler/tree/ :::important Enterprise features The ClearML Enterprise plan supports K8S servicing multiple ClearML queues, as well as providing a pod template for each -queue for describing the resources for each pod to use. See [ClearML Helm Charts](https://github.com/allegroai/clearml-helm-charts/tree/main). +queue for describing the resources for each pod to use. See [ClearML Helm Charts](https://github.com/clearml/clearml-helm-charts/tree/main). ::: diff --git a/docs/community.md b/docs/community.md index 4d690a7e..31dbd5dd 100644 --- a/docs/community.md +++ b/docs/community.md @@ -4,7 +4,7 @@ title: Community Resources ## Join the ClearML Conversation -For feature requests or bug reports, see **ClearML** [GitHub issues](https://github.com/allegroai/clearml/issues). +For feature requests or bug reports, see **ClearML** [GitHub issues](https://github.com/clearml/clearml/issues). If you have any questions, post on the **ClearML** [Slack channel](https://joinslack.clear.ml). @@ -28,8 +28,8 @@ Firstly, thank you for taking the time to contribute! Contributions come in many forms: -* Reporting [issues](https://github.com/allegroai/clearml/issues) you've come upon -* Participating in issue discussions in the [issue tracker](https://github.com/allegroai/clearml/issues) and the +* Reporting [issues](https://github.com/clearml/clearml/issues) you've come upon +* Participating in issue discussions in the [issue tracker](https://github.com/clearml/clearml/issues) and the [ClearML Community Slack space](https://joinslack.clear.ml) * Suggesting new features or enhancements * Implementing new features or fixing outstanding issues @@ -40,7 +40,7 @@ The list above is primarily guidelines, not rules. Use your best judgment and fe By following these guidelines, you help maintainers and the community understand your report, reproduce the behavior, and find related reports. -Before reporting an issue, please check whether it already appears [here](https://github.com/allegroai/clearml/issues). If +Before reporting an issue, please check whether it already appears [here](https://github.com/clearml/clearml/issues). If it does, join the ongoing discussion instead. :::note @@ -85,7 +85,7 @@ Enhancement suggestions are tracked as GitHub issues. After you determine which Before you submit a new PR: -* Verify that the work you plan to merge addresses an existing [issue](https://github.com/allegroai/clearml/issues) (if not, open a new one) +* Verify that the work you plan to merge addresses an existing [issue](https://github.com/clearml/clearml/issues) (if not, open a new one) * Check related discussions in the [ClearML Slack community](https://joinslack.clear.ml) (or start your own discussion on the ``#clearml-dev`` channel) * Make sure your code conforms to the ClearML coding standards by running: diff --git a/docs/configs/clearml_conf.md b/docs/configs/clearml_conf.md index cd859d20..a45308c2 100644 --- a/docs/configs/clearml_conf.md +++ b/docs/configs/clearml_conf.md @@ -14,7 +14,7 @@ This reference page is organized by configuration file section: * [files](#files-section) - Define auto-generated files to apply into local file system -See an [example configuration file](https://github.com/allegroai/clearml-agent/blob/master/docs/clearml.conf) +See an [example configuration file](https://github.com/clearml/clearml-agent/blob/master/docs/clearml.conf) in the ClearML Agent GitHub repository. :::info @@ -22,7 +22,7 @@ The values in the ClearML configuration file can be overridden by environment va and command-line arguments. ::: -# Editing Your Configuration File +## Editing Your Configuration File To add, change, or delete options, edit your configuration file. @@ -134,6 +134,15 @@ Use with care! This might introduce security risks by allowing access to keys/se the same argument is passed in both. If set to `False`, a task's docker arguments will override the `extra_docker_arguments`. --- + +**`agent.docker_args_filters`** (*list*) + +* Set a whitelist of allowed Docker arguments. Only arguments matching the specified patterns can be used when running +a task. For example: `docker_args_filters: ["^--env$", "^-e$"]`. + + +--- + **`agent.docker_container_name_format`** (*string*) :::note Compatibility Required @@ -157,7 +166,7 @@ Compatible with Docker versions 0.6.5 and above **`agent.docker_force_pull`** (*bool*) -* Always update the Docker image by forcing a Docker `pull` before running an experiment +* Always update the Docker image by forcing a Docker `pull` before running a task The values are: @@ -233,14 +242,14 @@ from `system_site_packages` **`agent.extra_docker_arguments`** (*[string]*) -* Optional arguments to pass to the Docker image when ClearML Agent is running in [Docker mode](../clearml_agent/clearml_agent_execution_env.md#docker-mode). These are local for this agent, and will not be updated in the experiment's `docker_cmd` section. For example, `["--ipc=host", ]`. +* Optional arguments to pass to the Docker image when ClearML Agent is running in [Docker mode](../clearml_agent/clearml_agent_execution_env.md#docker-mode). These are local for this agent, and will not be updated in the task's `docker_cmd` section. For example, `["--ipc=host", ]`. --- **`agent.extra_docker_shell_script`** (*[string]*) * When ClearML Agent is running in [Docker mode](../clearml_agent/clearml_agent_execution_env.md#docker-mode), this -optional shell script executes inside the Docker on startup, before the experiment starts. For example, `["apt-get install -y bindfs", ]`. +optional shell script executes inside the Docker on startup, before the task starts. For example, `["apt-get install -y bindfs", ]`. --- @@ -330,13 +339,13 @@ optional shell script executes inside the Docker on startup, before the experime **`agent.ignore_requested_python_version`** (*bool*) - * Indicates whether to ignore any requested python version + * Indicates whether to ignore any requested Python version * The values are: - * `true` - ignore any requested python version - * `false` - if a task was using a specific python version, and the system supports multiple versions, the agent will - use the requested python version (default) + * `true` - ignore any requested Python version + * `false` - if a task was using a specific Python version, and the system supports multiple versions, the agent will + use the requested Python version (default) ___ @@ -348,7 +357,7 @@ ___ **`agent.python_binary`** (*string*) -* Set the Python version to use when creating the virtual environment, and when launching the experiment. For example, `/usr/bin/python3` or `/usr/local/bin/python3.6`. +* Set the Python version to use when creating the virtual environment, and when launching the task. For example, `/usr/bin/python3` or `/usr/local/bin/python3.6`. --- @@ -367,7 +376,7 @@ ___ **`agent.venvs_dir`** (*string*) -* The target folder for virtual environments builds that are created when executing an experiment. +* The target folder for virtual environments builds that are created when executing a task. --- @@ -405,7 +414,7 @@ These settings define which Docker image and arguments should be used unless [ex * **`agent.default_docker.match_rules`** (*[dict]*) :::important Enterprise Feature - This feature is available under the ClearML Enterprise plan. + The `match_rules` configuration option is available under the ClearML Enterprise plan. ::: * Lookup table of rules that determine the default container and arguments when running a worker in Docker mode. The @@ -623,7 +632,7 @@ ___ **`agent.package_manager.system_site_packages`** (*bool*) * Indicates whether Python packages for virtual environments are inherited from the system when building a virtual environment - for an experiment. + for a task. The values are: @@ -736,7 +745,7 @@ Torch Nightly builds are ephemeral and are deleted from time to time. **`agent.vcs_cache.path`** (*string*) -* The version control system cache clone folder when executing experiments. +* The version control system cache clone folder when executing tasks.
@@ -1135,7 +1144,7 @@ URL to a CA bundle, or set this option to `false` to skip SSL certificate verifi **`sdk.development.log_os_environments`** (*[string]*) -* Log specific environment variables. OS environments are listed in the UI, under an experiment's +* Log specific environment variables. OS environments are listed in the UI, under a task's **CONFIGURATION > HYPERPARAMETERS > Environment** section. Multiple selected variables are supported including the suffix `*`. For example: `"AWS_*"` will log any OS environment variable starting with `"AWS_"`. Example: `log_os_environments: ["AWS_*", "CUDA_VERSION"]` @@ -1146,7 +1155,7 @@ URL to a CA bundle, or set this option to `false` to skip SSL certificate verifi **`sdk.development.store_uncommitted_code_diff`** (*bool*) -* For development mode, indicates whether to store the uncommitted `git diff` or `hg diff` in the experiment manifest. +* For development mode, indicates whether to store the uncommitted `git diff` or `hg diff` in the task manifest. The values are: @@ -1165,7 +1174,7 @@ URL to a CA bundle, or set this option to `false` to skip SSL certificate verifi **`sdk.development.support_stopping`** (*bool*) -* For development mode, indicates whether to allow stopping an experiment if the experiment was aborted externally, its status was changed, or it was reset. +* For development mode, indicates whether to allow stopping a task if the task was aborted externally, its status was changed, or it was reset. The values are: @@ -1178,7 +1187,7 @@ URL to a CA bundle, or set this option to `false` to skip SSL certificate verifi **`sdk.development.task_reuse_time_window_in_hours`** (*float*) -* For development mode, the number of hours after which an experiment with the same project name and experiment name is reused. +* For development mode, the number of hours after which a task with the same project name and task name is reused. --- @@ -1568,7 +1577,7 @@ environment { } ``` -### files section +### files section **`files`** (*dict*) @@ -1619,7 +1628,7 @@ sdk { ## Configuration Vault :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Configuration vaults are available under the ClearML Enterprise plan. ::: The ClearML Enterprise Server includes the configuration vault. Users can add configuration sections to the vault and, once diff --git a/docs/custom_apps.md b/docs/custom_apps.md new file mode 100644 index 00000000..518ef916 --- /dev/null +++ b/docs/custom_apps.md @@ -0,0 +1,24 @@ +--- +title: Custom Applications +--- + +:::info Enterprise Feature +The custom applications are available under the ClearML Enterprise plan. +::: + +ClearML supports creating your own GUI applications for deploying GenAI apps into your Enterprise environment. +Instantly spin up apps with customized dashboards for internal customers, enabling seamless model testing, interactive +demos, automated workflow and more. + +## Why Use Custom Applications? + +Custom Applications provide: + +* Instant Deployment: Launch interactive applications directly within your Enterprise environment +* Tailored UI: Customize forms and dashboards for monitoring processes +* Automated Execution: Run AI workflows with structured inputs and repeatable processes +* Accessible: Enable non-technical users to interact with models through GUI interfaces +* Seamless Integration: Connect with ClearML's ecosystem for task tracking and visualization + +See [Custom Application Setup](deploying_clearml/enterprise_deploy/app_custom.md) for instructions on creating and +deploying custom ClearML applications. \ No newline at end of file diff --git a/docs/deploying_clearml/clearml_server.md b/docs/deploying_clearml/clearml_server.md index 4eb44d77..dc137d76 100644 --- a/docs/deploying_clearml/clearml_server.md +++ b/docs/deploying_clearml/clearml_server.md @@ -4,14 +4,14 @@ title: ClearML Server ## What is ClearML Server? The ClearML Server is the backend service infrastructure for ClearML. It allows multiple users to collaborate and -manage their experiments by working seamlessly with the ClearML Python package and [ClearML Agent](../clearml_agent.md). +manage their tasks by working seamlessly with the ClearML Python package and [ClearML Agent](../clearml_agent.md). ClearML Server is composed of the following: -* Web server including the [ClearML Web UI](../webapp/webapp_overview.md), which is the user interface for tracking, comparing, and managing experiments. +* Web server including the [ClearML Web UI](../webapp/webapp_overview.md), which is the user interface for tracking, comparing, and managing tasks. * API server which is a RESTful API for: - * Documenting and logging experiments, including information, statistics, and results. - * Querying experiments history, logs, and results. + * Documenting and logging tasks, including information, statistics, and results. + * Querying task history, logs, and results. * File server which stores media and models making them easily accessible using the ClearML Web UI. @@ -23,9 +23,9 @@ The ClearML Web UI is the ClearML user interface and is part of ClearML Server. Use the ClearML Web UI to: -* Track experiments -* Compare experiments -* Manage experiments +* Track tasks +* Compare tasks +* Manage tasks For detailed information about the ClearML Web UI, see [User Interface](../webapp/webapp_overview.md). @@ -49,7 +49,7 @@ authentication, subdomains, and load balancers, and use any of its many configur 1. Optionally, [configure ClearML Server](clearml_server_config.md) for additional features, including subdomains and load balancers, web login authentication, and the non-responsive task watchdog. -1. [Connect the ClearML SDK to the ClearML Server](../getting_started/ds/ds_first_steps.md) +1. [Connect the ClearML SDK to the ClearML Server](../clearml_sdk/clearml_sdk_setup) ## Updating diff --git a/docs/deploying_clearml/clearml_server_aws_ec2_ami.md b/docs/deploying_clearml/clearml_server_aws_ec2_ami.md index d44096e9..e3c3a8e0 100644 --- a/docs/deploying_clearml/clearml_server_aws_ec2_ami.md +++ b/docs/deploying_clearml/clearml_server_aws_ec2_ami.md @@ -150,4 +150,4 @@ The following section contains a list of AMI Image IDs per-region for the latest ## Next Step To keep track of your experiments and/or data, the `clearml` package needs to communicate with your server. -For instruction to connect the ClearML SDK to the server, see [Getting Started: First Steps](../getting_started/ds/ds_first_steps.md). +For instruction to connect the ClearML SDK to the server, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup). diff --git a/docs/deploying_clearml/clearml_server_config.md b/docs/deploying_clearml/clearml_server_config.md index 4b3f8036..09b4e835 100644 --- a/docs/deploying_clearml/clearml_server_config.md +++ b/docs/deploying_clearml/clearml_server_config.md @@ -12,7 +12,7 @@ This page describes the ClearML Server [deployment](#clearml-server-deployment-c * [Opening Elasticsearch, MongoDB, and Redis for External Access](#opening-elasticsearch-mongodb-and-redis-for-external-access) * [Web login authentication](#web-login-authentication) - Create and manage users and passwords * [Using hashed passwords](#using-hashed-passwords) - Option to use hashed passwords instead of plain-text passwords -* [Non-responsive Task watchdog](#non-responsive-task-watchdog) - For inactive experiments +* [Non-responsive Task watchdog](#non-responsive-task-watchdog) - For inactive tasks * [Custom UI context menu actions](#custom-ui-context-menu-actions) For all configuration options, see the [ClearML Configuration Reference](../configs/clearml_conf.md) page. @@ -101,7 +101,7 @@ The ClearML Server uses the following configuration files: * `services.conf` When starting up, the ClearML Server will look for these configuration files, in the `/opt/clearml/config` directory -(this path can be modified using the `CLEARML_CONFIG_DIR` environment variable). The default configuration files are in the [clearml-server](https://github.com/allegroai/clearml-server/tree/master/apiserver/config/default) repository. +(this path can be modified using the `CLEARML_CONFIG_DIR` environment variable). The default configuration files are in the [clearml-server](https://github.com/clearml/clearml-server/tree/master/apiserver/config/default) repository. If you want to modify server configuration, and the relevant configuration file doesn't exist, you can create the file, and input the relevant modified configuration. @@ -361,10 +361,16 @@ You can also use hashed passwords instead of plain-text passwords. To do that: ### Non-responsive Task Watchdog -The non-responsive experiment watchdog monitors experiments that were not updated for a specified time interval, and then -the watchdog marks them as `aborted`. The non-responsive experiment watchdog is always active. +The non-responsive task watchdog monitors for running tasks that have stopped communicating with the ClearML Server for a specified +time interval. If a task remains unresponsive beyond the set threshold, the watchdog marks it as `aborted`. -Modify the following settings for the watchdog: +A task is considered non-responsive if the time since its last communication with the ClearML Server exceeds the +configured threshold. The watchdog starts counting after each successful communication with the server. If no further +updates are received within the specified time, the task is considered non-responsive. This typically happens if: +* The task's main process is stuck but has not exited. +* There is a network issue preventing the task from communicating with the server. + +You can configure the following watchdog settings: * Watchdog status - enabled / disabled * The time threshold (in seconds) of experiment inactivity (default value is 7200 seconds (2 hours)). @@ -372,10 +378,15 @@ Modify the following settings for the watchdog: **To configure the non-responsive watchdog for the ClearML Server:** -1. In the ClearML Server `/opt/clearml/config/services.conf` file, add or edit the `tasks.non_responsive_tasks_watchdog` - section and specify the watchdog settings. +1. Open the ClearML Server `/opt/clearml/config/services.conf` file. + + :::tip + If the `services.conf` file does not exist, create your own in ClearML Server's `/opt/clearml/config` directory (or + an alternate folder you configured). + ::: + +1. Add or edit the `tasks.non_responsive_tasks_watchdog` section and specify the watchdog settings. For example: - For example: ``` tasks { non_responsive_tasks_watchdog { @@ -389,11 +400,6 @@ Modify the following settings for the watchdog: } } ``` - - :::tip - If the `apiserver.conf` file does not exist, create your own in ClearML Server's `/opt/clearml/config` directory (or - an alternate folder you configured), and input the modified configuration - ::: 1. Restart ClearML Server. @@ -422,7 +428,7 @@ options. ### Custom UI Context Menu Actions :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Custom UI context menu actions are available under the ClearML Enterprise plan. ::: Create custom UI context menu actions to be performed on ClearML objects (projects, tasks, models, dataviews, or queues) @@ -464,8 +470,8 @@ an alternate folder you configured), and input the modified configuration ::: The action will appear in the context menu for the object type in which it was specified: -* Task, model, dataview - Right-click an object in the [experiments](../webapp/webapp_exp_table.md), [models](../webapp/webapp_model_table.md), - and [dataviews](../hyperdatasets/webapp/webapp_dataviews.md) tables respectively. Alternatively, click the object to +* Task, model, dataview - Right-click an object in the [task](../webapp/webapp_exp_table.md), [model](../webapp/webapp_model_table.md), + and [dataview](../hyperdatasets/webapp/webapp_dataviews.md) tables respectively. Alternatively, click the object to open its info tab, then click the menu button to access the context menu. * Project - In the project page > click the menu button diff --git a/docs/deploying_clearml/clearml_server_es7_migration.md b/docs/deploying_clearml/clearml_server_es7_migration.md index 0360dbf1..126b222b 100644 --- a/docs/deploying_clearml/clearml_server_es7_migration.md +++ b/docs/deploying_clearml/clearml_server_es7_migration.md @@ -72,10 +72,10 @@ and ClearML Server needs to be installed. 1. Download the migration package archive: ``` - curl -L -O https://github.com/allegroai/clearml-server/releases/download/0.16.0/trains-server-0.16.0-migration.zip + curl -L -O https://github.com/clearml/clearml-server/releases/download/0.16.0/trains-server-0.16.0-migration.zip ``` - If the file needs to be downloaded manually, use this direct link: [trains-server-0.16.0-migration.zip](https://github.com/allegroai/clearml-server/releases/download/0.16.0/trains-server-0.16.0-migration.zip). + If the file needs to be downloaded manually, use this direct link: [trains-server-0.16.0-migration.zip](https://github.com/clearml/clearml-server/releases/download/0.16.0/trains-server-0.16.0-migration.zip). 1. Extract the archive: @@ -109,7 +109,7 @@ and ClearML Server needs to be installed. 1. Clone the `trains-server-k8s` repository and change to the new `trains-server-k8s/upgrade-elastic` directory: ``` - git clone https://github.com/allegroai/clearml-server-k8s.git && cd clearml-server-k8s/upgrade-elastic + git clone https://github.com/clearml/clearml-server-k8s.git && cd clearml-server-k8s/upgrade-elastic ``` 1. Create the `upgrade-elastic` namespace and deployments: @@ -129,7 +129,7 @@ and ClearML Server needs to be installed. 1. Add the `clearml-server` repository to Helm client. ``` - helm repo add allegroai https://allegroai.github.io/clearml-server-helm/ + helm repo add clearml https://clearml.github.io/clearml-server-helm/ ``` Confirm the `clearml-server` repository is now in the Helm client. @@ -170,7 +170,7 @@ If the migration script does not complete successfully, the migration script pri :::important For help in resolving migration issues, check the **ClearML** [Slack channel](https://joinslack.clear.ml), -[GitHub issues](https://github.com/allegroai/clearml-server/issues), and the **ClearML Server** sections of the [FAQ](../faq.md). +[GitHub issues](https://github.com/clearml/clearml-server/issues), and the **ClearML Server** sections of the [FAQ](../faq.md). ::: ### Upgrading to ClearML Server v.1.2 or Newer diff --git a/docs/deploying_clearml/clearml_server_gcp.md b/docs/deploying_clearml/clearml_server_gcp.md index 7b37f5e6..db5996a8 100644 --- a/docs/deploying_clearml/clearml_server_gcp.md +++ b/docs/deploying_clearml/clearml_server_gcp.md @@ -7,7 +7,7 @@ provides custom images for each released version of ClearML Server. For a list o [ClearML Server GCP Custom Image](#clearml-server-gcp-custom-image). To keep track of your experiments and/or data, the `clearml` package needs to communicate with the server you have deployed. -For instruction to connect the ClearML SDK to the server, see [Getting Started: First Steps](../getting_started/ds/ds_first_steps.md). +For instruction to connect the ClearML SDK to the server, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup). :::info In order for `clearml` to work with a ClearML Server on GCP, set `CLEARML_API_DEFAULT_REQ_METHOD=PUT` or @@ -155,4 +155,4 @@ The following section contains a list of Custom Image URLs (exported in differen ## Next Step To keep track of your experiments and/or data, the `clearml` package needs to communicate with your server. -For instruction to connect the ClearML SDK to the server, see [Getting Started: First Steps](../getting_started/ds/ds_first_steps.md). +For instruction to connect the ClearML SDK to the server, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup). diff --git a/docs/deploying_clearml/clearml_server_kubernetes_helm.md b/docs/deploying_clearml/clearml_server_kubernetes_helm.md index 363de29d..3023e738 100644 --- a/docs/deploying_clearml/clearml_server_kubernetes_helm.md +++ b/docs/deploying_clearml/clearml_server_kubernetes_helm.md @@ -21,7 +21,7 @@ Ensure that the `helm` binary is in the PATH of your shell. ## Deployment You will create a multi-node Kubernetes cluster using Helm, and then install ClearML in your cluster. For deployment -instructions with up-to-date Helms charts, see the [clearml-helm-charts repository](https://github.com/allegroai/clearml-helm-charts/tree/main/charts/clearml#local-environment). +instructions with up-to-date Helms charts, see the [clearml-helm-charts repository](https://github.com/clearml/clearml-helm-charts/tree/main/charts/clearml#local-environment). :::warning Server Access By default, ClearML Server launches with unrestricted access. To restrict ClearML Server access, follow the @@ -32,4 +32,4 @@ instructions in the [Security](clearml_server_security.md) page. ## Next Step To keep track of your experiments and/or data, the `clearml` package needs to communicate with your server. -For instruction to connect the ClearML SDK to the server, see [Getting Started: First Steps](../getting_started/ds/ds_first_steps.md). \ No newline at end of file +For instruction to connect the ClearML SDK to the server, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup). \ No newline at end of file diff --git a/docs/deploying_clearml/clearml_server_linux_mac.md b/docs/deploying_clearml/clearml_server_linux_mac.md index a22eacc4..60979018 100644 --- a/docs/deploying_clearml/clearml_server_linux_mac.md +++ b/docs/deploying_clearml/clearml_server_linux_mac.md @@ -5,8 +5,8 @@ title: Linux and macOS Deploy the ClearML Server in Linux or macOS using the pre-built Docker image. For ClearML docker images, including previous versions, see [https://hub.docker.com/r/allegroai/clearml](https://hub.docker.com/r/allegroai/clearml). -However, pulling the ClearML Docker image directly is not required. ClearML provides a docker-compose YAML file that does this. -The docker-compose file is included in the instructions on this page. +However, pulling the ClearML Docker image directly is not required. ClearML provides a `docker-compose` YAML file that does this. +The `docker-compose` file is included in the instructions on this page. For information about upgrading ClearML Server in Linux or macOS, see [here](upgrade_server_linux_mac.md). @@ -134,9 +134,9 @@ Deploying the server requires a minimum of 8 GB of memory, 16 GB is recommended. sudo chown -R $(whoami):staff /opt/clearml ``` -2. Download the ClearML Server docker-compose YAML file. +2. Download the ClearML Server `docker-compose` YAML file: ``` - sudo curl https://raw.githubusercontent.com/allegroai/clearml-server/master/docker/docker-compose.yml -o /opt/clearml/docker-compose.yml + sudo curl https://raw.githubusercontent.com/clearml/clearml-server/master/docker/docker-compose.yml -o /opt/clearml/docker-compose.yml ``` 1. For Linux only, configure the **ClearML Agent Services**: @@ -227,4 +227,4 @@ If needed, restore data and configuration by doing the following: ## Next Step To keep track of your experiments and/or data, the `clearml` package needs to communicate with your server. -For instruction to connect the ClearML SDK to the server, see [Getting Started: First Steps](../getting_started/ds/ds_first_steps.md). \ No newline at end of file +For instruction to connect the ClearML SDK to the server, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup). \ No newline at end of file diff --git a/docs/deploying_clearml/clearml_server_mongo44_migration.md b/docs/deploying_clearml/clearml_server_mongo44_migration.md index ca529b80..0e69466f 100644 --- a/docs/deploying_clearml/clearml_server_mongo44_migration.md +++ b/docs/deploying_clearml/clearml_server_mongo44_migration.md @@ -11,7 +11,7 @@ In v1.2, the MongoDB subsystem of ClearML Server has been upgraded from version necessitates the migration of the database contents to be compatible with the new version. :::note Kubernetes installations -[ClearML’s helm chart](https://github.com/allegroai/clearml-helm-charts/tree/main/charts/clearml) is already running +[ClearML’s helm chart](https://github.com/clearml/clearml-helm-charts/tree/main/charts/clearml) is already running mongodb version 4.4. If your ClearML server had been deployed with this chart (with the default mongodb bitnami chart) - You can stop reading here, as no migration is required. ::: @@ -49,7 +49,7 @@ To avoid data corruption, shut down your ClearML server before applying the migr ### Migrating by Script A migration script is available to automatically run this process for all supported OSs. -[Download the script](https://github.com/allegroai/clearml-server/releases/download/1.2.0/clearml-server-1.2.0-migration.py) and run it on your ClearML server. +[Download the script](https://github.com/clearml/clearml-server/releases/download/1.2.0/clearml-server-1.2.0-migration.py) and run it on your ClearML server. Run `clearml-server-1.2.0-migration.py -–help` to see execution options. Note the script will create a backup archive of your data in the original directory. diff --git a/docs/deploying_clearml/clearml_server_security.md b/docs/deploying_clearml/clearml_server_security.md index 02baf210..73e00a13 100644 --- a/docs/deploying_clearml/clearml_server_security.md +++ b/docs/deploying_clearml/clearml_server_security.md @@ -39,7 +39,7 @@ with the ClearML SDK. However, this also means that the **server must be secured** by either preventing any external access, or by changing defaults so that the server's credentials are not publicly known. -The ClearML Server default secrets can be found [here](https://github.com/allegroai/clearml-server/blob/master/apiserver/config/default/secure.conf), and can be changed using the `secure.conf` configuration file or using environment variables +The ClearML Server default secrets can be found [here](https://github.com/clearml/clearml-server/blob/master/apiserver/config/default/secure.conf), and can be changed using the `secure.conf` configuration file or using environment variables (see [ClearML Server Feature Configurations](clearml_server_config.md#clearml-server-feature-configurations)). Specifically, the relevant settings are: @@ -101,6 +101,6 @@ services: :::important When generating new user keys and secrets, make sure to use sufficiently long strings (we use 30 chars for keys and 50-60 -chars for secrets). See [here](https://github.com/allegroai/clearml-server/blob/master/apiserver/service_repo/auth/utils.py) +chars for secrets). See [here](https://github.com/clearml/clearml-server/blob/master/apiserver/service_repo/auth/utils.py) for Python example code to generate these strings. ::: diff --git a/docs/deploying_clearml/clearml_server_win.md b/docs/deploying_clearml/clearml_server_win.md index ef4e849f..154dcb7f 100644 --- a/docs/deploying_clearml/clearml_server_win.md +++ b/docs/deploying_clearml/clearml_server_win.md @@ -54,10 +54,10 @@ Deploying the server requires a minimum of 8 GB of memory, 16 GB is recommended. mkdir c:\opt\clearml\logs ``` -1. Save the ClearML Server docker-compose YAML file. +1. Save the ClearML Server `docker-compose` YAML file. ``` - curl https://raw.githubusercontent.com/allegroai/clearml-server/master/docker/docker-compose-win10.yml -o c:\opt\clearml\docker-compose-win10.yml + curl https://raw.githubusercontent.com/clearml/clearml-server/master/docker/docker-compose-win10.yml -o c:\opt\clearml\docker-compose-win10.yml ``` 1. Run `docker-compose`. In PowerShell, execute the following commands: @@ -89,4 +89,4 @@ After deploying ClearML Server, the services expose the following node ports: ## Next Step To keep track of your experiments and/or data, the `clearml` package needs to communicate with your server. -For instruction to connect the ClearML SDK to the server, see [Getting Started: First Steps](../getting_started/ds/ds_first_steps.md). \ No newline at end of file +For instruction to connect the ClearML SDK to the server, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup). \ No newline at end of file diff --git a/docs/deploying_clearml/enterprise_deploy/app_custom.md b/docs/deploying_clearml/enterprise_deploy/app_custom.md new file mode 100644 index 00000000..84a37223 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/app_custom.md @@ -0,0 +1,479 @@ +--- +title: Custom Applications +--- + +The following is a guide for creating and installing custom ClearML applications on ClearML on-premises Enterprise servers. +ClearML applications are Python programs that are run as ClearML tasks whose UI--input form and output dashboard--is +defined in an attached configuration file. + +This guide will follow the `simple-app` application as an example. The application can be found on [GitHub](https://github.com/clearml/clearml-apps/tree/main/demo_apps/simple-app). + +An application will generally consist of the following: +* Configuration file: File that describes the content of the application, such as: + * The task to run and from where to run it + * The structure of the input form for launching an application instance + * The information to display in the application instances dashboard. +* Assets: Optional images and artifacts for the application, such as icons and HTML placeholders. +* Task: Python code that is run when the application is launched. Should be in a Git repository. + +## Configuration File +The configuration file describes the application. The file is a hocon file, typically named: `.app.conf`. It +contains the following sections: +* General: The root section, describing the application’s general information such as name, ID, version, icon, and queue +* Task: Information about the task to execute, such as repository info and hyperparameters +* Wizard: Fields for the application instance launch form, and where to store the input provided by the user +* Dashboard: Information section displayed for the running application instances + +### General +The `General` section is the root-level section of the configuration file, and contains the configuration options: +* `id` - A unique id for the application +* `name` - The name to display in the web application +* `version` - The version of the application implementation. Recommended to have three numbers and to bump up when updating applications, so that older running instances can still be displayed +* `provider` - The person/team/group who is the owner of the application. This will appears in the UI +* `description` - Short description of the application to be displayed in the ClearML Web UI +* `icon` (*Optional*) - Small image to display in the ClearML web UI as an icon for the application. Can be a public web url or an image in the application’s assets directory (described below) +* `no_info_html` (*Optional*) - HTML content to display as a placeholder for the dashboard when no instance is available. Can be a public web url or a file in the application’s assets directory (described below) +* `default-queue` - The queue to which application instance will be sent when launching a new instance. This queue should have an appropriate agent servicing it. See details in the Custom Apps Agent section below. +* `badges` (*Optional*) - List of strings to display as a bacge/label in the UI +* `resumable` - Boolean indication whether a running application instance can be restarted if required. Default is false. +* `category` (*Optional*) - Way to separate apps into different tabs in the ClearML web UI +* `featured` (*Optional*) - Value affecting the order of applications. Lower values are displayed first. Defaults to 500 + +#### Example +The root section in the simple application example: +``` +id: "simple-app" +version: "1.0.0" +name: "Simple example application" +provider: "ClearML" +description: "A simple example of an application" +icon: "${ASSET:app-simple-app@2x.png}" +badges: [] +details_page: "task" +no_info_html: "${ASSET:index.html}" +default_queue: "custom_apps_queue" +``` + +### Task +The `task` section describes the task to run, containing the following fields: +* `script` - Contains information about what task code to run: + * `repository` - The git repository. Note that credentials must be described in the Custom Apps Agent’s configuration. See details below. + * `branch` - The branch to use + * `entry_point` - The python file to run + * `working_dir` - The directory to run it from +* `hyperparams` (*Optional*) - A list of the task’s hyper-parameters used by the application, with their default values. There is no need to specify all the parameters here, but it enables summarizing of the parameters that will be targeted by the wizard entries described below, and allows to specify default values to optional parameters appearing in the wizard. + +#### Example +The `task` section in the simple application example: +``` +task { + script { + repository: "https://bitbucket.org/seematics/clearml_apps.git" + entry_point: "main.py" + working_dir: "demo_apps/simple-app" + branch: "master" + } + hyperparams { + General { + a_number: 30.0 + a_string: "testing 1, 2, 3" + a_boolean: False + a_project_id: "" + }, + } +} +``` + +### Wizard +The `wizard` section defines the entries to display in the application instance’s UI launch form. Each entry may contain the following fields: +* `name` - Field name +* `title` - Title to display in the wizard above the field +* `info` - Optional information hint to the user +* `type` - Can be one of the following: + * Basic types: + * `string` + * `integer` + * `float` + * `dropdown` + * `checkbox` + * `multiline_text` + * Complex types: + * `group` - Fields grouped together in a joint section. Fields of the group are defined within a list called + `item_template` + * `list` - A field or group of fields that can be inserted more than once. Target should be specified for the entire + list. Fields of the list are defined within a list called `item_template` +* `required` - Boolean indication whether the user must fill the field. Default is `false` +* `default` - Default value for the field +* `placeholder` - Text to show in the field before typing +* `collapsible` - Boolean indicates if the group can be collapsed. Default is `false` +* `collapsibleTitleTemplate` - Optional title for collapsible fields. You can use `${field name}` to reference a field. + Useful for lists. +* `conditional` - Allows setting a condition for the displaying of a field. Specify a list of entries, each containing + the name of a field that appears earlier and its expected value. The field will be displayed only if the referenced + previous fields were filled with the matching value. See example below. +* `default_conditional_on` - allows setting a field whose default value depends on the value of a previous field in the wizard. + Need to specify the `name` of the previous field and a `value` dictionary, in which each key is a potential value of the previous field and each value is the default value for the default_conditional_field. +* `choices` - for dropdown - Can be either an array of hard-coded options, for example: `["Option 1","Option 2"]`, or a ClearML object, such as task, project, queue to choose from. The following should be specified: + * `source` - The source object. One of following: + * `project` + * `task` + * `model` + * `queue` + * `dataset_version` + * `display_field` - The field of the source object to display in the list. Usually “name” + * `value_field` - The field of the source object to use for configuring the app instance. Usually “id” + * `filter` - Allows to limit the choices list by setting a filter on one or more of the object’s fields. See Project Selection example below +* `target` - Where in the application instance’s task the values will be set. Contains the following: + * `field` - Either `configuration` or `hyperparams` + * `section` - For hyperparams - the section within the field + * `name` - Key in which to store the value + * `format` - The format of the value to store. `str` By default. Use `json` for lists. +* `item_template` - list of items for `group` or for `list` fields. + +#### Example +The example is based on the `simple-app` application `wizard` section: + +* Wizard Section: + + ``` + wizard { + entries: [ + … + ] + } + ``` + +* Boolean Field: A simple boolean field stored in the `General` hyperparameters section: + + ``` + { + name: boolean_field + title: A boolean choice + default: false + type: checkbox + required: false + target { + field: hyperparams + section: General + name: a_bool + } + } + ``` + + This will look like this: + + ![Bool choice](../../img/app_bool_choice.png#light-mode-only) + ![Bool choice](../../img/app_bool_choice_dark.png#dark-mode-only) + +* Conditional String Field: A string field presented only if the boolean field was checked: + + ``` + { + name: string_field + title: A String + info: "Select a sting to be passed to the application" + type: string + placeholder: "a string..." + conditional: { + entries: [ + { + name: boolean_field + value: True + } + ] + } + target { + field: hyperparams + section: General + name: a_string + } + } + ``` + + This will look like this: + + ![Conditional string field](../../img/app_cond_str.png#light-mode-only) + ![Conditional string field](../../img/app_cond_str_dark.png#dark-mode-only) + +* Project Selection: Choices field for a projects selection, containing all projects whose names does not begin with `example`: + + ``` + { + name: a_project_field + title: Choose a Project + info: "The app will count the tasks in this project" + type: dropdown + required: true + autocomplete: true + choices { + source: project + value_field: id + display_field: name + filter { + fields { + name: "^(?i)(?!example).*$" + } + } + } + target { + field: hyperparams + section: General + name: a_project_id + } + } + ``` + + This will look like this: + + ![Project selection](../../img/app_proj_selection.png#light-mode-only) + ![Project selection](../../img/app_proj_selection_dark.png#dark-mode-only) + +* Group: Group with single field option: + + ``` + { + type: group + name: more_options_group + title: More options + collapsible: true + item_template: [ + { + name: a_text_field + title: Some Text + info: "Contains some text" + type: multiline_text + required: false + target: { + field: configuration + name: text_blob + } + } + ] + } + ``` + + This will look like this: + + ![Group with single field](../../img/app_group.png#light-mode-only) + ![Group with single field](../../img/app_group_dark.png#dark-mode-only) + + +### Dashboard +The Dashboard section of the configuration file describes the fields that will appear in the instance's dashboard display. +The dashboard elements are organized into lines. + +The section contains the following information: +* `lines` - The array of line elements, each containing: + * `style` - CSS definitions for the line e.g setting the line height + * `contents` - An array of dashboard elements to display in a given line. Each element may have several fields: + * `title` - Text to display at the top of the field + * `type` - one of the following: + * scalar-histogram + * plot + * debug-images + * log + * scalar + * hyperparameter + * configuration + * html + * `text` - For HTML. You can refer to task elements such as hyper-parameters by using `${hyperparams.
..value}` + * `metric` - For plot, scalar-histogram, debug-images, scalar - Name of the metric + * `variant` - For plot, scalar-histogram, debug-images, scalar - List of variants to display + * `key` - For histograms, one of the following: `iter`, `timestamp` or, `iso_time` + * `hide_legend` - Whether to hide the legend + +#### Example +The example is based on the `simple-app` application `Dashboard` section: +* Dashboard Section + + ``` + dashboard { + lines: [ + … + ] + } + ``` + +* Html Elements: Header with two HTML elements based on the user's input: + + ``` + { + style { + height: "initial" + } + contents: [ + { + title: "HTML box with the string selected by the user" + type: html + text: "

The string is ${hyperparams.General.a_string.value}

" + }, + { + title: "HTML box with the count of tasks" + type: html + text: "

Project ${hyperparams.General.project_name.value} contains ${hyperparams.General.tasks_count.value} tasks

" + } + ] + } + ``` + + This will look like this: + + ![HTML elements](../../img/app_html_elements.png#light-mode-only) + ![HTML elements](../../img/app_html_elements_dark.png#dark-mode-only) + +* Plot + + ``` + { + contents: [ + { + title: "A random plot" + type: plot + metric: "Plots" + variant: "plot" + } + ] + } + ``` + + This will look like this: + + ![Plot](../../img/app_plot.png#light-mode-only) + ![Plot](../../img/app_plot_dark.png#dark-mode-only) + +* Log + + ``` + { + contents: [ + { + title: "Logs" + type: log + } + ] + } + ``` + + This will look like this: + + ![Log](../../img/app_log.png#light-mode-only) + ![Log](../../img/app_log_dark.png#dark-mode-only) + +### Assets +Assets are optional elements used by the application configuration, to allow customization of the application display in +the ClearML web UI. They typically contain icons, empty-state HTML, and any other object required. Assets are stored in +a directory called `assets`. + +To access assets from the application configuration file, use `${ASSET:}`. For example: +``` +icon: "${ASSET:app-simple-app@2x.png}" +``` + +### Python Code +The code of the task that handles the application logic must be stored in a Git repository. +It is referenced by the script entry in the configuration file. For example: + +``` +script { + repository: "https://bitbucket.org/seematics/clearml_apps.git" + entry_point: "main.py" + working_dir: "demo_apps/simple-app" + branch: "master" +} +``` + +The task is run by a [Custom Applications Agent](#custom-apps-agent) within a Docker. Any packages used should be +described in a `requirements.txt` file in the working directory. + +The task can read input from configuration and from the `hyperparams` section, as defined in the configuration file of +the application, and it's the task's responsibility to update any element displayed in the dashboard. + +## Deploying Custom Applications +### Custom Apps Agent +Custom applications require a separate agent then the ClearML built-in applications since their code is downloaded from +a different Git repository. + +To define a custom-apps agent, add the following to the `docker-compose.yml` or to the `docker-compose.override.yml`: +* In the `apiserver` service section, add the following lines in the environment to create a user for handling the custom-apps: + ``` + - CLEARML__secure__credentials__custom_apps_agent__user_key="${CUSTOM_APPS_AGENT_USER_KEY}" + - CLEARML__secure__credentials__custom_apps_agent__user_secret="${CUSTOM_APPS_AGENT_USER_SECRET}" + - CLEARML__secure__credentials__custom_apps_agent__role="admin" + ``` + +* Add the custom-apps-agent service: + + ```custom-apps-agent: + container_name: custom-apps-agent + image: ${APPS_DAEMON_DOCKER_IMAGE} + restart: unless-stopped + privileged: true + environment: + - CLEARML_API_HOST=https://app.${SERVER_URL}/api + - CLEARML_FILES_HOST=https://files.${SERVER_URL} + - CLEARML_WEB_HOST=https://app.${SERVER_URL} + - CLEARML_API_ACCESS_KEY=${CUSTOM_APPS_AGENT_USER_KEY} + - CLEARML_API_SECRET_KEY=${CUSTOM_APPS_AGENT_USER_SECRET} + - CLEARML_AGENT_GIT_USER=${CUSTOM_APPS_AGENT_GIT_USER} + - CLEARML_AGENT_GIT_PASS=${CUSTOM_APPS_AGENT_GIT_PASSWORD} + - CLEARML_AGENT_DEFAULT_BASE_DOCKER=${APPS_WORKER_DOCKER_IMAGE} + - CLEARML_WORKER_ID=custom-apps-agent + - CLEARML_NO_DEFAULT_SERVER=true + - CLEARML_AGENT_DOCKER_HOST_MOUNT=/opt/allegro/data/agent/custom-app-agent:/root/.clearml + - CLEARML_AGENT_DAEMON_OPTIONS=--foreground --create-queue --use-owner-token --child-report-tags application --services-mode=${APPS_AGENT_INSTANCES:?err} + - CLEARML_AGENT_QUEUES=custom_apps_queue + - CLEARML_AGENT_NO_UPDATE: 1 + - CLEARML_AGENT_SKIP_PIP_VENV_INSTALL=/root/venv/bin/python3 + # Disable Vault so that the apps will be downloaded with git credentials provided above, and not take any user's git credentials from the Vault. + - CLEARML_AGENT_EXTRA_DOCKER_ARGS=-e CLEARML_AGENT_DISABLE_VAULT_SUPPORT=1 + - CLEARML_AGENT_SERVICES_DOCKER_RESTART=on-failure;application.resumable=True + - CLEARML_AGENT_DISABLE_SSH_MOUNT=1 + - CLEARML_AGENT__AGENT__DOCKER_CONTAINER_NAME_FORMAT="custom-app-{task_id}-{rand_string:.8}" + - CLEARML_AGENT_EXTRA_DOCKER_LABELS="allegro-type=application subtype=custom" + labels: + ai.allegro.devops.allegro-software-type: "custom-apps-agent" + networks: + - backend + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /opt/allegro/data/agent/custom-app-agent:/root/.clearml + - /opt/allegro/data/agent/custom-app-agent-v2/tmp:/tmp + depends_on: + - apiserver + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + ``` + + * Make sure to define the following variables in the `constants.env` or `runtime_created.env` configuration files: + * `CUSTOM_APPS_AGENT_USER_KEY` - A unique key for the user - any random string can be used + * `CUSTOM_APPS_AGENT_USER_SECRET` - A unique secret for the user - random UUID + * `CUSTOM_APPS_AGENT_GIT_USER` - The user for the Git repository + * `CUSTOM_APPS_AGENT_GIT_PASSWORD` - The password/app-password/token for the Git repository + +### Deploying Apps +#### Packaging an App +Create a zip file with the configuration, and with the assets, if applicable. + +``` +zip -r simple-app.zip simple-app.app.conf assets/ +``` + +#### Installing an App +Run the `upload_apps.py` script to upload the applications. You will need to provide credentials for an admin user in the system + +``` +upload_apps.py --host --user --password --files simple-app.zip +``` + +* `` can be something like `https://api.my-server.allegro.ai` or `http://localhost:8008` if running on the server. +* `--user` and `--password` are key/secret credentials of any ClearML admin user. These can be generated in the ClearML web UI. + +#### Removing an App +Applications can be uninstalled by running the `manage_apps.py` script as follows: + +``` +manage_apps.py delete --host --user --password -app +``` diff --git a/docs/deploying_clearml/enterprise_deploy/app_install_ex_server.md b/docs/deploying_clearml/enterprise_deploy/app_install_ex_server.md new file mode 100644 index 00000000..4286d2bb --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/app_install_ex_server.md @@ -0,0 +1,91 @@ +--- +title: Installing External Applications Server +--- + +:::important Enterprise Feature +UI application deployment is available under the ClearML Enterprise plan. +::: + +ClearML supports applications, which are extensions that allow additional capabilities, such as cloud auto-scaling, +Hyperparameter Optimizations, etc. For more information, see [ClearML Applications](../../webapp/applications/apps_overview.md). + +Applications run inside Docker containers, which can either reside on the ClearML Server side, or on an external server. +The `clearml-apps-agent` polls an internal applications queue, and spawns additional Docker containers for application +instances that are launched using the ClearML web UI. + +This document provides a short guide on how to configure an external applications server. + +## Requirements + +* A server, as described in [Server Requirements](#server-requirements) +* `docker-compose.yml` file provided by ClearML +* `constants.env` - Environment file with required credentials +* Credentials to access ClearML’s enterprise Dockerhub registry + +### Server Requirements + +* Operating system: Linux-based +* CPU: Since applications do not produce a high CPU load, we recommend 2-4 virtual CPUs, assuming around 10 concurrent + applications are required +* Memory: Around 1 GiB of RAM is required per each concurrent application instance +* Storage: About 100 GB of storage is recommended for the system volume, with an additional 100 GB of storage for + application caching. In AWS, `m6a.xlarge` can be used for running up to 10 applications in parallel. + +## Installation + +:::note +Installing an external server requires removing the applications’ agent from the ClearML Enterprise Server. This +is done by ClearML in hosted environments, or by removing the `apps-agent` service from the `docker-compose` override +file in VPC and on-premises installations. For K8s environments, please consult the ClearML team. +::: + +1. Install Docker. See [Docker documentation](https://docs.docker.com/engine/install/ubuntu/) +1. Copy the `docker-compose.yml` and `constants.env` files to `/opt/allegro`. The + `constants.env` file should contain following definitions: + + * `APISERVER_URL_FOR_EXTERNAL_WORKERS` - URL of the ClearML API server + * `WEBSERVER_URL_FOR_EXTERNAL_WORKERS` - URL of the ClearML WebApp + * `FILESERVER_URL_FOR_EXTERNAL_WORKERS` - URL of the ClearML files server + * `APPS_AGENT_USER_KEY` - Provided by ClearML + * `APPS_AGENT_USER_SECRET` - Provided by ClearML + * `APPS_AGENT_GIT_USER` - Provided by ClearML (required up to ClearML Server 1.8) + * `APPS_AGENT_GIT_PASSWORD` - Provided by ClearML (required up to ClearML Server 1.8) + * `APPS_WORKER_DOCKER_IMAGE` - Provided by ClearML (required up to ClearML Server 1.8) + * `APPS_DAEMON_DOCKER_IMAGE` - Provided by ClearML + +1. Log in to the Docker registry: + + ``` + sudo docker login -username allegroaienterprise + ``` + +1. Pull the container: + + ``` + docker compose -env-file constants.env pull + ``` + +1. Start the service: + + ``` + docker compose -env-file constants.env up -d + ``` + + +## Clearing Stopped Containers +Containers of running applications that are stopped are not automatically deleted. Therefore, it is recommended to +periodically delete stopped containers. This can be done by adding the following to the cron file: + +``` +0 0 * * * root docker container prune --force --filter "until=96h" --filter "label=allegro-type=application" +``` + +## Monitoring +We recommend monitoring the following: +* Available memory +* CPU usage +* Remaining Storage + +For more information contact ClearML's support team. + + diff --git a/docs/deploying_clearml/enterprise_deploy/app_install_ubuntu_on_prem.md b/docs/deploying_clearml/enterprise_deploy/app_install_ubuntu_on_prem.md new file mode 100644 index 00000000..d43f2fe1 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/app_install_ubuntu_on_prem.md @@ -0,0 +1,76 @@ +--- +title: Application Installation on On-Prem and VPC Servers +--- + +:::important Enterprise Feature +UI application deployment is available under the ClearML Enterprise plan. +::: + +ClearML Applications are like plugins that allow you to manage ML workloads and automatically run recurring workflows +without any coding. Applications are installed on top of the ClearML Server. + +## Requirements +To run application you will need the following: +* RAM: Make sure you have at least 400 MB of RAM per application instance. +* Applications Service: Make sure that the applications agent service is up and running on your server: + * If you are using a `docker-compose` solution, make sure that the clearml-apps-agent service is running. + * If you are using a Kubernetes cluster, check for the clearml-clearml-enterprise-apps component. +* Installation Files: Each application has its installation zip file. Make sure you have the relevant files for the +applications you wish to install. +* Installation Script - See below + +## Air-Gapped Environments +For Air-Gapped installations you need to copy docker images to the local registry and then update the application +configuration files to use this repository. This can be achieved by using the `convert_image_registry.py` script with +the `--repo` flag. For example: + +``` +python convert_image_registry.py \ + --apps-dir /path/to/apps/ \ + --repo local_registry/clearml-apps +``` + +The script will change the application zip files to point to the new registry, and will output the list of containers +that need to be copied to the local registry. For example: + +``` +make sure allegroai/clearml-apps:hpo-1.10.0-1062 was added to local_registry/clearml-apps +``` + +## Installing on ClearML Server +The `upload_apps.py` script handles uploading the app packages to the ClearML Server. It requires Python3. + +To see the options, run: + +```commandline +python3 upload_apps.py --help +``` + +### Credentials +The script requires user and password (`USER_KEY`/`USER_SECRET` in the example below). These can be taken from +the credentials of an admin user, which can be generated in the ClearML web application. + +### Host +For the host, supply the `apiserver` address. If running locally on the server, you can use `localhost:8008`. + +### Uploading a Single Application + +```commandline +python3 upload_apps.py \ + --host \ + --user \ + --password \ + --files "YOUR_APP.zip" +``` + +### Uploading Multiple Applications +If you wish to install more than one app you can use the `--dir` instead of the `--files` argument: + +```commandline +python3 upload_apps.py \ + --host \ + --user \ + --password \ + --dir "DIRECTORY_CONTAINING_APPS_ZIP_FILES" +``` + diff --git a/docs/deploying_clearml/enterprise_deploy/appgw.md b/docs/deploying_clearml/enterprise_deploy/appgw.md new file mode 100644 index 00000000..2679df85 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/appgw.md @@ -0,0 +1,44 @@ +--- +title: AI Application Gateway +--- + +:::important Enterprise Feature +The AI Application Gateway is available under the ClearML Enterprise plan. +::: + +Services running through a cluster orchestrator such as Kubernetes or cloud hyperscaler require meticulous configuration +to make them available as these environments do not expose their networks to external users. + +The ClearML AI Application Gateway facilitates setting up secure, authenticated access to jobs running on your compute +nodes from external networks. + +Using the AI Application Gateway, services are allocated externally accessible, SSL secure network routes which provide +access in adherence to ClearML RBAC privileges. The AI Application Gateway supports HTTP/S as well as raw TCP routing. + +The following ClearML UI applications make use of the AI Application Gateway to provide authenticated HTTPS access to +their instances: + +* GPUaaS + * [JupyterLab](../../webapp/applications/apps_jupyter_lab.md) + * [VScode](../../webapp/applications/apps_vscode.md) + * [SSH Session](../../webapp/applications/apps_ssh_session.md) +* UI Dev + * [Gradio launcher](../../webapp/applications/apps_gradio.md) + * [Streamlit launcher](../../webapp/applications/apps_streamlit.md) +* Deploy + * [vLLM Deployment](../../webapp/applications/apps_model_deployment.md) + * [Embedding Model Deployment](../../webapp/applications/apps_embed_model_deployment.md) + * [Llama.cpp Model Deployment](../../webapp/applications/apps_llama_deployment.md) + +The AI Application Gateway is provided through an additional component to the ClearML Server deployment: The ClearML Task Traffic Router. +If your ClearML Deployment does not have the Task Traffic Router properly installed, these application instances may not be accessible. + +#### Installation + +The Task Traffic Router supports two deployment options: + +* [Docker Compose](appgw_install_compose.md) +* [Kubernetes](appgw_install_k8s.md) + +The deployment configuration specifies the external and internal address and port mappings for routing requests. + diff --git a/docs/deploying_clearml/enterprise_deploy/appgw_install_compose.md b/docs/deploying_clearml/enterprise_deploy/appgw_install_compose.md new file mode 100644 index 00000000..c77f4113 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/appgw_install_compose.md @@ -0,0 +1,132 @@ +--- +title: Docker-Compose Deployment +--- + +:::important Enterprise Feature +The Application Gateway is available under the ClearML Enterprise plan. +::: + +## Requirements + +* Linux OS (x86) machine +* Root access +* Credentials for the ClearML/allegroai docker repository +* A valid ClearML Server installation + +## Host Configurations + +### Docker Installation + +Installing `docker` and `docker-compose` might vary depending on the specific operating system you’re using. Here is an example for AmazonLinux: + +``` +sudo dnf -y install docker +DOCKER_CONFIG="/usr/local/lib/docker" +sudo mkdir -p $DOCKER_CONFIG/cli-plugins +sudo curl -SL https://github.com/docker/compose/releases/download/v2.17.3/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose +sudo chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose +sudo systemctl enable docker +sudo systemctl start docker + +sudo docker login +``` + +Use the ClearML/allegroai dockerhub credentials when prompted by docker login. + +### Docker-compose File + +This is an example of the `docker-compose` file you will need: + +``` +version: '3.5' +services: +task_traffic_webserver: + image: allegroai/task-traffic-router-webserver:${TASK-TRAFFIC-ROUTER-WEBSERVER-TAG} + ports: + - "80:8080" + restart: unless-stopped + container_name: task_traffic_webserver + volumes: + - ./task_traffic_router/config/nginx:/etc/nginx/conf.d:ro + - ./task_traffic_router/config/lua:/usr/local/openresty/nginx/lua:ro +task_traffic_router: + image: allegroai/task-traffic-router:${TASK-TRAFFIC-ROUTER-TAG} + restart: unless-stopped + container_name: task_traffic_router + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./task_traffic_router/config/nginx:/etc/nginx/conf.d:rw + - ./task_traffic_router/config/lua:/usr/local/openresty/nginx/lua:rw + environment: + - LOGGER_LEVEL=INFO + - CLEARML_API_HOST=${CLEARML_API_HOST:?err} + - CLEARML_API_ACCESS_KEY=${CLEARML_API_ACCESS_KEY:?err} + - CLEARML_API_SECRET_KEY=${CLEARML_API_SECRET_KEY:?err} + - ROUTER_URL=${ROUTER_URL:?err} + - ROUTER_NAME=${ROUTER_NAME:?err} + - AUTH_ENABLED=${AUTH_ENABLED:?err} + - SSL_VERIFY=${SSL_VERIFY:?err} + - AUTH_COOKIE_NAME=${AUTH_COOKIE_NAME:?err} + - AUTH_BASE64_JWKS_KEY=${AUTH_BASE64_JWKS_KEY:?err} + - LISTEN_QUEUE_NAME=${LISTEN_QUEUE_NAME} + - EXTRA_BASH_COMMAND=${EXTRA_BASH_COMMAND} + - TCP_ROUTER_ADDRESS=${TCP_ROUTER_ADDRESS} + - TCP_PORT_START=${TCP_PORT_START} + - TCP_PORT_END=${TCP_PORT_END} + +``` + +Create a *runtime.env* file containing the following entries: + +``` +TASK-TRAFFIC-ROUTER-WEBSERVER-TAG= +TASK-TRAFFIC-ROUTER-TAG= +CLEARML_API_HOST=https://api. +CLEARML_API_ACCESS_KEY= +CLEARML_API_SECRET_KEY= +ROUTER_URL= +ROUTER_NAME=main-router +AUTH_ENABLED=true +SSL_VERIFY=true +AUTH_COOKIE_NAME= +AUTH_BASE64_JWKS_KEY= +LISTEN_QUEUE_NAME= +EXTRA_BASH_COMMAND= +TCP_ROUTER_ADDRESS= +TCP_PORT_START= +TCP_PORT_END= +``` + +Edit it according to the following guidelines: + +* `CLEARML_API_HOST`: URL usually starting with `https://api.` +* `CLEARML_API_ACCESS_KEY`: ClearML server api key +* `CLEARML_API_SECRET_KEY`: ClearML server secret key +* `ROUTER_URL`: URL for this router that was previously configured in the load balancer starting with `https://` +* `ROUTER_NAME`: Unique name for this router +* `AUTH_ENABLED`: Enable or disable http calls authentication when the router is communicating with the ClearML server +* `SSL_VERIFY`: Enable or disable SSL certificate validation when the router is communicating with the ClearML server +* `AUTH_COOKIE_NAME`: Cookie name used by the ClearML server to store the ClearML authentication cookie. This can usually be found in the `value_prefix` key starting with `allegro_token` in `envoy.yaml` file in the ClearML server installation (`/opt/allegro/config/envoy/envoy.yaml`) (see below) +* `AUTH_SECURE_ENABLED`: Enable the Set-Cookie `secure` parameter +* `AUTH_BASE64_JWKS_KEY`: Value form `k` key in the `jwks.json` file in the ClearML server installation +* `LISTEN_QUEUE_NAME`: (*optional*) Name of queue to check for tasks (if none, every task is checked) +* `EXTRA_BASH_COMMAND`: Command to be launched before starting the router +* `TCP_ROUTER_ADDRESS`: Router external address, can be an IP or the host machine or a load balancer hostname, depends on network configuration +* `TCP_PORT_START`: Start port for the TCP Session feature +* `TCP_PORT_END`: End port for the TCP Session feature + +Run the following command to start the router: + +``` +sudo docker compose --env-file runtime.env up -d +``` + +:::note How to find my jwkskey + +The *JSON Web Key Set* (*JWKS*) is a set of keys containing the public keys used to verify any JSON Web Token (JWT). + +In a `docker-compose` server installation, this can be found in the `CLEARML__secure__auth__token_secret` env var in the apiserver server component. + +::: + + diff --git a/docs/deploying_clearml/enterprise_deploy/appgw_install_k8s.md b/docs/deploying_clearml/enterprise_deploy/appgw_install_k8s.md new file mode 100644 index 00000000..906429c6 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/appgw_install_k8s.md @@ -0,0 +1,102 @@ +--- +title: Kubernetes Deployment +--- + +:::important Enterprise Feature +The Application Gateway is available under the ClearML Enterprise plan. +::: + +This guide details the installation of the ClearML AI Application Gateway, specifically the ClearML Task Router Component. + +## Requirements + +* Kubernetes cluster: `>= 1.21.0-0 < 1.32.0-0` +* Helm installed and configured +* Helm token to access `allegroai` helm-chart repo +* Credentials for `allegroai` docker repo +* A valid ClearML Server installation + +## Optional for HTTPS + +* A valid DNS entry for the new TTR instance +* A valid SSL certificate + +## Helm + +### Login + +``` +helm repo add allegroai-enterprise \ +https://raw.githubusercontent.com/clearml/clearml-enterprise-helm-charts/gh-pages \ +--username \ +--password +``` + +### Prepare Values + +Before installing the TTR, create a `helm-override` files named `task-traffic-router.values-override.yaml`: + +``` +imageCredentials: + password: "" +clearml: + apiServerKey: "" + apiServerSecret: "" + apiServerUrlReference: "https://api." + jwksKey: "" + authCookieName: "" +ingress: + enabled: true + hostName: "task-router.dev" +tcpSession: + routerAddress: "" + portRange: + start: + end: +``` + +Edit it accordingly to these guidelines: + +* `clearml.apiServerUrlReference`: URL usually starting with `https://api.` +* `clearml.apiServerKey`: ClearML server api key +* `clearml.apiServerSecret`: ClearML server secret key +* `ingress.hostName`: URL of router we configured previously for load balancer starting with `https://` +* `clearml.sslVerify`: Enable or disable SSL certificate validation on apiserver calls check +* `clearml.authCookieName`: Value from `value_prefix` key starting with `allegro_token` in `envoy.yaml` file in ClearML server installation. +* `clearml.jwksKey`: Value form `k` key in `jwks.json` file in ClearML server installation (see below) +* `tcpSession.routerAddress`: Router external address can be an IP or the host machine or a load balancer hostname, depends on the network configuration +* `tcpSession.portRange.start`: Start port for the TCP Session feature +* `tcpSession.portRange.end`: End port for the TCP Session feature + +:::note How to find my jwkskey + +The *JSON Web Key Set* (*JWKS*) is a set of keys containing the public keys used to verify any JSON Web Token (JWT). + +``` +kubectl -n clearml get secret clearml-conf \ +-o jsonpath='{.data.secure_auth_token_secret}' \ +| base64 -d && echo +``` + +::: + + +The whole list of supported configuration is available with the command: + +``` +helm show readme allegroai-enterprise/clearml-enterprise-task-traffic-router +``` + +### Install + +To install the TTR component via Helm use the following command: + +``` +helm upgrade --install \ + \ +-n \ +allegroai-enterprise/clearml-enterprise-task-traffic-router \ +--version \ +-f task-traffic-router.values-override.yaml +``` + diff --git a/docs/deploying_clearml/enterprise_deploy/change_artifact_links.md b/docs/deploying_clearml/enterprise_deploy/change_artifact_links.md new file mode 100644 index 00000000..34e67d5c --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/change_artifact_links.md @@ -0,0 +1,78 @@ +--- +title: Changing ClearML Artifacts Links +--- + +This guide describes how to update artifact references in the ClearML Enterprise server. + +By default, artifacts are stored on the file server; however, an external storage such as AWS S3, Minio, Google Cloud +Storage, etc. may be used to store artifacts. References to these artifacts may exist in ClearML databases: MongoDB and ElasticSearch. +This procedure should be used if external storage is being migrated to a different location or URL. + +:::important +This procedure does not deal with the actual migration of the data--only with changing the references in ClearML that +point to the data. +::: + +## Preparation + +### Version Confirmation + +To change the links, use the `fix_fileserver_urls.py` script, located inside the `allegro-apiserver` +Docker container. This script will be executed from within the `apiserver` container. Make sure the `apiserver` version +is 3.20 or higher. + +### Backup + +It is highly recommended to back up the ClearML MongoDB and ElasticSearch databases before running the script, as the +script changes the values in the databases, and can't be undone. + +## Fixing MongoDB links + +1. Access the `apiserver` Docker container: + * In `docker-compose:` + + ```commandline + sudo docker exec -it allegro-apiserver /bin/bash + ``` + + * In Kubernetes: + + ```commandline + kubectl exec -it -n clearml -- bash + ``` + +1. Navigate to the script location in the `upgrade` folder: + + ```commandline + cd /opt/seematics/apiserver/server/upgrade + ``` + +1. Run the following command: + + :::important + Before running the script, verify that this is indeed the correct version (`apiserver` v3.20 or higher, + or that the script provided by ClearML was copied into the container). + :::: + + ```commandline + python3 fix_fileserver_urls.py \ + --mongo-host mongodb://mongo:27017 \ + --elastic-host elasticsearch:9200 \ + --host-source "" \ + --host-target "" --datasets + ``` + +:::note Notes +* If MongoDB or ElasticSearch services are accessed from the `apiserver` container using custom addresses, then +`--mongo-host` and `--elastic-host` arguments should be updated accordingly. +* If ElasticSearch is set up to require authentication then the following arguments should be used to pass the user +and password: `--elastic-user --elastic-password ` +::: + +The script fixes the links in MongoDB, and outputs `cURL` commands for updating the links in ElasticSearch. + +## Fixing the ElasticSearch Links + +Copy the `cURL` commands printed by the script run in the previous stage, and run them one after the other. Make sure to +inspect that a "success" result was returned from each command. Depending on the amount of the data in the ElasticSearch, +running these commands may take some time. \ No newline at end of file diff --git a/docs/deploying_clearml/enterprise_deploy/custom_billing.md b/docs/deploying_clearml/enterprise_deploy/custom_billing.md new file mode 100644 index 00000000..484bff77 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/custom_billing.md @@ -0,0 +1,122 @@ +--- +title: Custom Billing Events +--- + +:::important Enterprise Feature +Sending custom billing events is available under the ClearML Enterprise plan. +::: + +ClearML supports sending custom events to selected Kafka topics. Event sending is triggered by API calls and +is available only for the companies with the `custom_events` settings set. + +## Enabling Custom Events in ClearML Server + +:::important Prerequisite +**Precondition**: Customer Kafka for custom events is installed and reachable from the `apiserver`. +::: + +Set the following environment variables in the ClearML Enterprise helm chart under the `apiserver.extraEnv`: + +* Enable custom events: + + ``` + - name: CLEARML__services__custom_events__enabled + value: "true" + ``` +* Mount custom message template files into `/mnt/custom_events/templates` folder in the `apiserver` container and point + the `apiserver` into it: + + ``` + - name: CLEARML__services__custom_events__template_folder + value: "/mnt/custom_events/templates" + ``` +* Configure the Kafka host for sending events: + + ``` + - name: CLEARML__hosts__kafka__custom_events__host + value: "[]" + ``` + Configure Kafka security parameters. Below is the example for SASL plaintext security: + + ``` + - name: CLEARML__SECURE__KAFKA__CUSTOM_EVENTS__security_protocol + value: "SASL_PLAINTEXT" + - name: CLEARML__SECURE__KAFKA__CUSTOM_EVENTS__sasl_mechanism + value: "SCRAM-SHA-512" + - name: CLEARML__SECURE__KAFKA__CUSTOM_EVENTS__sasl_plain_username + value: "" + - name: CLEARML__SECURE__KAFKA__CUSTOM_EVENTS__sasl_plain_password + value: "" + ``` +* Define Kafka topics for lifecycle and inventory messages: + + ``` + - name: CLEARML__services__custom_events__channels__main__topics__service_instance_lifecycle + value: "lifecycle" + - name: CLEARML__services__custom_events__channels__main__topics__service_instance_inventory + value: "inventory" + ``` +* For the desired companies set up the custom events properties required by the event message templates: + + ``` + curl $APISERVER_URL/system.update_company_custom_events_config -H "Content-Type: application/json" -u $APISERVER_KEY:$APISERVER_SECRET -d'{ + "company": "", + "fields": { + "service_instance_id": "", + "service_instance_name": "", + "service_instance_customer_tenant_name": "", + "service_instance_customer_space_name": "", + "service_instance_customer_space_id": "", + "parameters_connection_points": ["", ""] + }}' + ``` + +## Sending Custom Events to the API Server + +:::important Prerequisite +**Precondition:** Dedicated custom-events Redis instance installed and reachable from all the custom events deployments. +::: + +Environment lifecycle events are sent directly by the `apiserver`. Other event types are emitted by the following helm charts: + +* `clearml-pods-monitor-exporter` - Monitors running pods and sends container lifecycle events (should run one per cluster with a unique identifier, a UUID is required for the installation): + + ``` + # -- Universal Unique string to identify Pods Monitor instances across worker clusters. It cannot be empty. + # Uniqueness is required across different cluster installations to preserve the reported data status. + podsMonitorUUID: "" + # Interval + checkIntervalSeconds: 60 + ``` +* `clearml-pods-inventory` - Periodically sends inventory events about running pods. + + ``` + # Cron schedule - https://crontab.guru/ + cronJob: + schedule: "@daily" + ``` +* `clearml-company-inventory` - Monitors Clearml companies and sends environment inventory events. + + ``` + # Cron schedule - https://crontab.guru/ + cronJob: + schedule: "@daily" + ``` + +For every script chart add the below configuration to enable redis access and connection to the `apiserver`: + +``` +clearml: + apiServerUrlReference: "" + apiServerKey: "" + apiServerSecret: "" +redisConnection: + host: "" + port: + password: "" +``` + +See all other available options to customize the `custom-events` charts by running: +``` +helm show readme allegroai-enterprise/ +``` \ No newline at end of file diff --git a/docs/deploying_clearml/enterprise_deploy/delete_tenant.md b/docs/deploying_clearml/enterprise_deploy/delete_tenant.md new file mode 100644 index 00000000..9542de79 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/delete_tenant.md @@ -0,0 +1,115 @@ +--- +title: Deleting Tenants from ClearML +--- + +The following is a step-by-step guide for deleting tenants (i.e. companies, workspaces) from ClearML. + +:::caution +Deleting a tenant is a destructive operation that cannot be undone. +* Make sure you have the data prior to deleting the tenant. +* Backing up the system before deleting is recommended. +::: + +The tenant deletion is done from MongoDB, ElasticsSearch, and the Fileserver. + +The first two are done from within the `apiserver` container, and last from within the `fileserver` container. + +Any external artifacts (ex: AWS S3, GCS, minio) can be removed manually. + +## Deleting Tenants from MongoDB and ElasticSearch + +1. Enter the `apiserver` in one of the following ways + * In `docker-compose`: + + ``` + sudo docker exec -it allegro-apiserver /bin/bash + ``` + * In Kubernetes: + + ``` + kubectl -n exec -it -c clearml-apiserver -- /bin/bash + ``` + +1. Set the ID and the name of the company (tenant) you wish to delete + + ``` + tenant_to_delete= + company_name_to_delete="" + ``` + +1. Delete the company's data from MongoDB: + + ``` + PYTHONPATH=../trains-server-repo python3 \ + -m jobs.management.delete_company_data_from_mongo \ + --id $tenant_to_delete \ + --name \ + --delete-user + ``` + + :::note + This also deletes the admin users. Remove `--delete-user` to avoid this. + ::: + +1. Delete the company's data from ElasticSearch: + + ``` + PYTHONPATH=../trains-server-repo python3 \ + -m jobs.management.cleanup_deleted_companies \ + --ids $tenant_to_delete --delete-company + ``` + +1. Exit pod/container + +## Deleting Tenants from the Fileserver + +To remove a tenant's data from the fileserver, you can choose one of the following methods depending on your deployment setup: + +* Option 1: Delete the tenant's data from within the fileserver container or pod. +* Option 2: Delete the tenant's data externally from the host system. + +### Option 1 - From Within the Fileserver + + +1. Enter the `fileserver` in one of the following ways + * In `docker-compose`: + + ``` + sudo docker exec -it allegro-fileserver /bin/bash + ``` + * In Kubernetes: + + ``` + kubectl -n exec -it -c clearml-fileserver -- /bin/bash + ``` + +1. Run the following: + + ``` + rm -rf /mnt/fileserver/ + ``` + +1. Exit pod/container + +### Option 2 - External Deletion + +#### Docker compose + +Run the following: + +``` +rm -rf /opt/allegro/data/fileserver/ +``` + +#### Kubernetes + +Run the following: + +``` +kubectl -n exec -it -c clearml-apiserver -- /bin/bash -c "PYTHONPATH=../trains-server-repo python3 -m jobs.management.delete_company_data_from_mongo --id --delete-user" + +kubectl -n exec -it -c clearml-apiserver -- /bin/bash -c "PYTHONPATH=../trains-server-repo python3 -m jobs.management.cleanup_deleted_companies --ids --delete-company" + +kubectl -n exec -it -c clearml-fileserver -- /bin/bash -c "rm -rf /mnt/fileserver/" +``` + diff --git a/docs/deploying_clearml/enterprise_deploy/import_projects.md b/docs/deploying_clearml/enterprise_deploy/import_projects.md new file mode 100644 index 00000000..6c5d0387 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/import_projects.md @@ -0,0 +1,240 @@ +--- +title: Project Migration +--- + +When migrating from a ClearML Open Server to a ClearML Enterprise Server, you may need to transfer projects. This is done +using the `data_tool.py` script. This utility is available in the `apiserver` Docker image, and can be used for +exporting and importing ClearML project data for both open source and Enterprise versions. + +This guide covers the following: +* Exporting data from Open Source and Enterprise servers +* Importing data into an Enterprise server +* Handling the artifacts stored on the file server. + +:::note +Export instructions differ for ClearML open and Enterprise servers. Make sure you follow the guidelines that match your +server type. +::: + +## Exporting Data + +The export process is done by running the ***data_tool*** script that generates a zip file containing project and task +data. This file should then be copied to the server on which the import will run. + +Note that artifacts stored in the ClearML ***file server*** should be copied manually if required (see [Handling Artifacts](#handling-artifacts)). + +### Exporting Data from ClearML Open Servers + +#### Preparation + +* Make sure the `apiserver` is at least Open Source server version 1.12.0. +* Note that any `pending` or `running` tasks will not be exported. If you wish to export them, make sure to stop/dequeue +them before exporting. + +#### Running the Data Tool + +Execute the data tool within the `apiserver` container. + +Open a bash session inside the `apiserver` container of the server: +* In `docker-compose`: + + ```commandline + sudo docker exec -it clearml-apiserver /bin/bash + ``` + +* In Kubernetes: + + ```commandline + kubectl exec -it -n -- bash + ``` + +#### Export Commands +**To export specific projects:** + +```commandline +python3 -m apiserver.data_tool export --projects +--statuses created stopped published failed completed --output .zip +``` + +As a result, you should get a `.zip` file that contains all the data from the specified projects and +their children. + +**To export all the projects:** + +```commandline +python3 -m apiserver.data_tool export \ + --all \ + --statuses created stopped published failed completed \ + --output .zip +``` + +#### Optional Parameters + +* `--experiments ` - If not specified then all experiments from the specified projects are exported +* `--statuses ` - Export tasks of specific statuses. If the parameter + is omitted, only `published` tasks are exported +* `--no-events` - Do not export task events, i.e. logs and metrics (scalar, plots, debug samples). + +Make sure to copy the generated zip file containing the exported data. + +### Exporting Data from ClearML Enterprise Servers + +#### Preparation + +* Make sure the `apiserver` is at least Enterprise Server version 3.18.0. +* Note that any `pending` or `running` tasks will not be exported. If you wish to export them, make sure to stop/dequeue +before exporting. + +#### Running the Data Tool + +Execute the data tool from within the `apiserver` docker container. + +Open a bash session inside the `apiserver` container of the server: +* In `docker-compose`: + + ```commandline + sudo docker exec -it allegro-apiserver /bin/bash + ``` + +* In Kubernetes: + + ```commandline + kubectl exec -it -n -- bash + ``` + +#### Export Commands + +**To export specific projects:** + +```commandline +PYTHONPATH=/opt/seematics/apiserver/trains-server-repo python3 data_tool.py \ + export \ + --projects \ + --statuses created stopped published failed completed \ + --output .zip +``` + +As a result, you should get `.zip` file that contains all the data from the specified projects and +their children. + +**To export all the projects:** + +```commandline +PYTHONPATH=/opt/seematics/apiserver/trains-server-repo python3 data_tool.py \ + export \ + --all \ + --statuses created stopped published failed completed \ + --output .zip +``` + +#### Optional Parameters + +* `--experiments ` - If not specified then all experiments from the specified projects are exported +* `--statuses ` - Can be used to allow exporting tasks of specific statuses. If the parameter is + omitted, only `published` tasks are exported. +* `--no-events` - Do not export task events, i.e. logs, and metrics (scalar, plots, debug samples). + +Make sure to copy the generated zip file containing the exported data. + +## Importing Data + +This section explains how to import the exported data into a ClearML Enterprise server. + +### Preparation + +* It is highly recommended to back up the ClearML databases before importing data, as import injects data into the +databases, and can't be undone. +* Make sure you are working with `apiserver` version 3.22.3 or higher. +* Make the zip file accessible from within the `apiserver` container by copying the exported data to the +`apiserver` container or to a folder on the host, which the `apiserver` is mounted to. + +### Usage + +The data tool should be executed from within the `apiserver` docker container. + +1. Open a bash session inside the `apiserver` container of the server: + * In `docker-compose`: + + ```commandline + sudo docker exec -it allegro-apiserver /bin/bash + ``` + + * In Kubernetes: + + ```commandline + kubectl exec -it -n -- bash + ``` + +1. Run the data tool script in *import* mode: + + ```commandline + PYTHONPATH=/opt/seematics/apiserver/trains-server-repo python3 data_tool.py \ + import \ + \ + --company \ + --user + ``` + + * `company_id`- The default company ID used in the target deployment. Inside the `apiserver` container you can + usually get it from the environment variable `CLEARML__APISERVER__DEFAULT_COMPANY`. + If you do not specify the `--company` parameter then all the data will be imported as `Examples` (read-only) + * `user_id` - The ID of the user in the target deployment who will become the owner of the imported data + +## Handling Artifacts + +***Artifacts*** refers to any content which the ClearML server holds references to. This can include: +* Dataset or Hyper-Dataset frame URLs +* ClearML artifact URLs +* Model snapshots +* Debug samples + +Artifacts may be stored in any external storage (e.g., AWS S3, minio, Google Cloud Storage) or in the ClearML file server. +* If the artifacts are **not** stored in the ClearML file server, they do not need to be moved during the export/import process, +as the URLs registered in ClearML entities pointing to these artifacts will not change. +* If the artifacts are stored in the ClearML file server, then the file server content must also be moved, and the URLs + in the ClearML databases must point to the new location. See instructions [below](#exporting-file-server-data-for-clearml-open-server). + +### Exporting File Server Data for ClearML Open Server + +Data in the file server is organized by project. For each project, all data references by entities in that project is +stored in a folder bearing the name of the project. This folder can be located in: + +``` +/opt/clearml/data/fileserver/ +``` + +The entire projects' folders content should be copied to the target server (see [Importing Fileserver Data](#importing-file-server-data)). + +### Exporting File Server Data for ClearML Enterprise Server + +Data in the file server is organized by tenant and project. For each project, all data references by entities in that +project is stored in a folder bearing the name of the project. This folder can be located in: + +``` +/opt/allegro/data/fileserver// +``` + +The entire projects' folders content should be copied to the target server (see [Importing Fileserver Data](#importing-file-server-data)). + +## Importing File Server Data + +### Copying the Data + +Place the exported projects' folder(s) content into the target file server's storage in the following folder: + +``` +/opt/allegro/data/fileserver// +``` + +### Fixing Registered URLs + +Since URLs pointing to the file server contain the file server's address, these need to be changed to the address of the +new file server. + +Note that this is not required if the new file server is replacing the old file server and can be accessed using the same +exact address. + +Once the projects' data has been copied to the target server, and the projects themselves were imported, see +[Changing ClearML Artifacts Links](change_artifact_links.md) for information on how to fix the URLs. + + diff --git a/docs/deploying_clearml/enterprise_deploy/multi_tenant_k8s.md b/docs/deploying_clearml/enterprise_deploy/multi_tenant_k8s.md new file mode 100644 index 00000000..7ab41ef4 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/multi_tenant_k8s.md @@ -0,0 +1,544 @@ +--- +title: Multi-Tenant Service on Kubernetes +--- + +This guide provides step-by-step instructions for installing a ClearML multi-tenant service on a Kubernetes cluster. + +It covers the installation and configuration steps necessary to set up ClearML in a cloud environment, including +enabling specific features and setting up necessary components. + +## Prerequisites + +* A Kubernetes cluster +* Credentials for the ClearML Enterprise Helm chart repository +* Credentials for the ClearML Enterprise DockerHub repository +* Credentials for the ClearML billing DockerHub repository +* URL for downloading the ClearML Enterprise applications configuration +* ClearML Billing server Helm chart + +## Setting up ClearML Helm Repository + +You need to add the ClearML Enterprise Helm repository to your local Helm setup. This repository contains the Helm +charts required for deploying the ClearML Server and its components. + +To add the ClearML Enterprise repository using the following command. Replace `` with the private tokens sent to +you by ClearML: + +``` +helm repo add allegroai-enterprise --username --password +``` + +## Enabling Dynamic MIG GPUs + +Allocating GPU fractions dynamically make use of the NVIDIA GPU operator. + +1. Add the NVIDIA Helm repository: + + ``` + helm repo add nvidia + helm repo update + ``` + +2. Install the NVIDIA GPU operator with the following configuration: + + ``` + helm install -n gpu-operator \\ + gpu-operator \\ + nvidia/gpu-operator \\ + --create-namespace \\ + --set migManager.enabled=false \\ + --set mig.strategy=mixed + ``` + +## Install CDMO Chart + +The ClearML Dynamic MIG Operator (CDMO) enables running AI workloads on k8s with optimized hardware utilization and +workload performance by facilitating MIG GPUs partitioning. + +1. Prepare the `overrides.yaml` file so it will contain the following content. Replace `` + with the private token provided by ClearML: + + ``` + imageCredentials: + password: "" + ``` + +2. Install the CDMO chart: + + ``` + helm install -n cdmo-operator \\ + cdmo \\ + allegroai-enterprise/clearml-dynamic-mig-operator \\ + --create-namespace \\ + -f overrides.yaml + ``` + +### Enable MIG support + +1. Enable dynamic MIG support on your cluster by running the following command on **all nodes used for training** (run + for **each GPU** ID in your cluster): + + ``` + nvidia-smi -i -mig 1 + ``` + + This command can be issued from inside the `nvidia-device-plugin-daemonset` pod on the related node. + + If the result of the previous command indicates that a node reboot is necessary, perform the reboot. + +2. After enabling MIG support, label the MIG GPU nodes accordingly. This labeling helps in identifying nodes configured + with MIG support for resource management and scheduling: + + ``` + kubectl label nodes "cdmo.clear.ml/gpu-partitioning=mig" + ``` + +## Install ClearML Chart + +Install the ClearML chart with the required configuration: + +1. Prepare the `overrides.yaml` file and input the following content. Make sure to replace `` and `` + with a valid domain that will have records pointing to the ingress controller accordingly. + The credentials specified in `` and `` can be used to log in as the + supervisor user in the web UI. + + Note that the `` value must be explicitly quoted. To do so, put `\\"` around the quoted value. + For example `"\\"email@example.com\\””`. + + ``` + imageCredentials: + password: "" + clearml: + cookieDomain: "" + apiserver: + image: + tag: "3.21.6-1443" + ingress: + enabled: true + hostName: "api." + service: + type: ClusterIP + extraEnvs: + - name: CLEARML__billing__enabled: + value: "true" + - name: CLEARML__HOSTS__KAFKA__BILLING__HOST + value: "[clearml-billing-kafka.clearml-billing:9092]" + - name: CLEARML__HOSTS__REDIS__BILLING__HOST + value: clearml-billing-redis-master.clearml-billing + - name: CLEARML__HOSTS__REDIS__BILLING__DB + value: "2" + - name: CLEARML__SECURE__KAFKA__BILLING__security_protocol + value: SASL_PLAINTEXT + - name: CLEARML__SECURE__KAFKA__BILLING__sasl_mechanism + value: SCRAM-SHA-512 + - name: CLEARML__SECURE__KAFKA__BILLING__sasl_plain_username + value: billing + - name: CLEARML__SECURE__KAFKA__BILLING__sasl_plain_password + value: "jdhfKmsd1" + - name: CLEARML__secure__login__sso__oauth_client__auth0__client_id + value: "" + - name: CLEARML__secure__login__sso__oauth_client__auth0__client_secret + value: "" + - name: CLEARML__services__login__sso__oauth_client__auth0__base_url + value: "" + - name: CLEARML__services__login__sso__oauth_client__auth0__authorize_url + value: "" + - name: CLEARML__services__login__sso__oauth_client__auth0__access_token_url + value: "" + - name: CLEARML__services__login__sso__oauth_client__auth0__audience + value: "" + - name: CLEARML__services__organization__features__user_management_advanced + value: "true" + - name: CLEARML__services__auth__ui_features_per_role__user__show_datasets + value: "false" + - name: CLEARML__services__auth__ui_features_per_role__user__show_orchestration + value: "false" + - name: CLEARML__services__applications__max_running_apps_per_company + value: "3" + - name: CLEARML__services__auth__default_groups__users__features + value: "[\\"applications\\"]" + - name: CLEARML__services__auth__default_groups__admins__features + value: "[\\"config_vault\\", \\"experiments\\", \\"queues\\", \\"show_projects\\", \\"resource_dashboard\\", \\"user_management\\", \\"user_management_advanced\\", \\"app_management\\", \\"sso_management\\", \\"service_users\\", \\"resource_policy\\"]" + - name: CLEARML__services__workers__resource_usages__supervisor_company + value: "d1bd92a3b039400cbafc60a7a5b1e52b" # Default company + - name: CLEARML__secure__credentials__supervisor__role + value: "system" + - name: CLEARML__secure__credentials__supervisor__allow_login + value: "true" + - name: CLEARML__secure__credentials__supervisor__user_key + value: "" + - name: CLEARML__secure__credentials__supervisor__user_secret + value: "" + - name: CLEARML__secure__credentials__supervisor__sec_groups + value: "[\\"users\\", \\"admins\\", \\"queue_admins\\"]" + - name: CLEARML__secure__credentials__supervisor__email + value: "\\"\\"" + - name: CLEARML__apiserver__company__unique_names + value: "true" + fileserver: + ingress: + enabled: true + hostName: "file." + service: + type: ClusterIP + webserver: + image: + tag: "3.21.3-1657" + ingress: + enabled: true + hostName: "app." + service: + type: ClusterIP + clearmlApplications: + enabled: true + ``` + +2. Install ClearML: + + ``` + helm install -n clearml \\ + clearml \\ + allegroai-enterprise/clearml-enterprise \\ + --create-namespace \\ + -f overrides.yaml + ``` + +## Shared Redis installation + +Set up a shared Redis instance that multiple components of your ClearML deployment can use: + +1. lf not there already, add Bitnami repository: + + ``` + helm repo add bitnami + ``` + +2. Prepare the `overrides.yaml` with the following content: + + ``` + auth: + password: "sdkWoq23" + ``` + +3. Install Redis: + + ``` + helm install -n redis-shared \\ + redis \\ + bitnami/redis \\ + --create-namespace \\ + --version=17.8.3 \\ + -f overrides.yaml + ``` + +## Install Billing Chart + +The billing chart is not available as part of the ClearML private Helm repo. `clearml-billing-1.1.0.tgz` is directly +provided by the ClearML team. + +1. Prepare `values.override.yaml` - Create the file with the following content, replacing `` + with the appropriate value: + + ``` + imageCredentials: + username: dockerhubcustpocbillingaccess + password: "" + ``` + +1. Install the billing chart: + + ``` + helm install -n clearml-billing \\ + clearml-billing \\ + clearml-billing-1.0.0.tgz \\ + --create-namespace \\ + -f overrides.yaml + ``` + +## Namespace Isolation using Network Policies + +For enhanced security, isolate namespaces using the following NetworkPolicies: + +``` +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: default-deny-ingress + namespace: clearml +spec: + podSelector: {} + policyTypes: + - Ingress + ingress: + - from: + - podSelector: {} +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: allow-clearml-ingress + namespace: clearml +spec: + podSelector: + matchLabels: + app.kubernetes.io/name: clearml-clearml-enterprise + policyTypes: + - Ingress + ingress: + - from: + - ipBlock: + cidr: 0.0.0.0/0 +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: allow-clearml-ingress + namespace: clearml-billing +spec: + podSelector: {} + policyTypes: + - Ingress + ingress: + - from: + - podSelector: {} + - namespaceSelector: + matchLabels: + kubernetes.io/metadata.name: clearml +``` + +## Application Installation + +To install ClearML GUI applications: + +1. Get the apps to install and the installation script by downloading and extracting the archive provided by ClearML + + ``` + wget -O apps.zip "" + unzip apps.zip + ``` + +2. Install the apps: + + ``` + python upload_apps.py \\ --host $APISERVER_ADDRESS \\ --user $APISERVER_USER --password $APISERVER_PASSWORD \\ --dir apps -ml + ``` + +## Tenant Configuration + +Create tenants and corresponding admin users, and set up an SSO domain whitelist for secure access. To configure tenants, +follow these steps (all requests must be authenticated by root or admin). Note that placeholders like `` +must be substituted with valid domain names or values from responses. + +1. Define the following variables: + + ``` + APISERVER_URL="https://api." + APISERVER_KEY="" + APISERVER_SECRET="" + ``` + +2. Create a *Tenant* (company): + + ``` + curl $APISERVER_URL/system.create_company \\ + -H "Content-Type: application/json" \\ + -u $APISERVER_KEY:$APISERVER_SECRET \\ + -d '{"name":""}' + ``` + + This returns the new Company ID (``). If needed, you can list all companies with the following command: + + ``` + curl -u $APISERVER_KEY:$APISERVER_SECRET $APISERVER_URL/system.get_companies + ``` + +3. Create an *Admin User*: + + ``` + curl $APISERVER_URL/auth.create_user \\ + -H "Content-Type: application/json" \\ + -u $APISERVER_KEY:$APISERVER_SECRET \\ + -d '{"name":"","company":"","email":"","role":"admin"}' + ``` + + This returns the new User ID (``). + +4. Generate *Credentials* for the new Admin User: + + ``` + curl $APISERVER_URL/auth.create_credentials \\ + -H "Content-Type: application/json" \\ + -H "X-Clearml-Impersonate-As: " \\ + -u $APISERVER_KEY:$APISERVER_SECRET + ``` + + This returns a set of key and secret credentials associated with the new Admin User. + +5. Create an SSO Domain *Whitelist*. The `` is the email domain setup for users to access through SSO. + + ``` + curl $APISERVER_URL/login.set_domains \\ + -H "Content-Type: application/json" \\ + -H "X-Clearml-Act-As: " \\ + -u $APISERVER_KEY:$APISERVER_SECRET \\ + -d '{"domains":[""]}' + ``` + +### Install ClearML Agent Chart + +To install the ClearML Agent Chart, follow these steps: + +1. Prepare the `overrides.yaml` file with the following content. Make sure to replace placeholders like + ``, ``, and `` with the appropriate values: + + ``` + imageCredentials: + password: "" + clearml: + agentk8sglueKey: "-" # TODO --> Generate credentials from API in the new tenant + agentk8sglueSecret: "-" # TODO --> Generate credentials from API in the new tenant + agentk8sglue: + extraEnvs: + - name: CLEARML_K8S_SUPPORT_SUSPENSION + value: "1" + - name: CLEARML_K8S_PORTS_MODE_ON_REQUEST_ONLY + value: "1" + - name: CLEARML_AGENT_REDIS_HOST + value: "redis-master.redis-shared" + - name: CLEARML_AGENT_REDIS_PORT + value: "6379" + - name: CLEARML_AGENT_REDIS_DB + value: "0" + - name: CLEARML_AGENT_REDIS_PASSWORD + value: "sdkWoq23" + image: + tag: 1.24-1.8.1rc99-159 + monitoredResources: + maxResources: 3 + minResourcesFieldName: "metadata|labels|required-resources" + maxResourcesFieldName: "metadata|labels|required-resources" + apiServerUrlReference: "https://api." + fileServerUrlReference: "https://file." + webServerUrlReference: "https://app." + defaultContainerImage: "python:3.9" + debugMode: true + createQueues: true + queues: + default: + templateOverrides: + labels: + required-resources: "0.5" + billing-monitored: "true" + queueSettings: + maxPods: 10 + gpu-fraction-1_00: + templateOverrides: + labels: + required-resources: "1" + billing-monitored: "true" + resources: + limits: + nvidia.com/mig-7g.40gb: 1 + clear.ml/fraction-1: "1" + queueSettings: + maxPods: 10 + gpu-fraction-0_50: + templateOverrides: + labels: + required-resources: "0.5" + billing-monitored: "true" + resources: + limits: + nvidia.com/mig-3g.20gb: 1 + clear.ml/fraction-1: "0.5" + queueSettings: + maxPods: 10 + gpu-fraction-0_25: + templateOverrides: + labels: + required-resources: "0.25" + billing-monitored: "true" + resources: + limits: + nvidia.com/mig-2g.10gb: 1 + clear.ml/fraction-1: "0.25" + queueSettings: + maxPods: 10 + sessions: + portModeEnabled: false # set to true when using TCP ports mode + agentID: "" + externalIP: 0.0.0.0 # IP of one of the workers + startingPort: 31010 # be careful to not overlap other tenants (startingPort + maxServices) + maxServices: 10 + ``` + +2. Install the ClearML Agent Chart in the specified tenant namespace: + + ``` + helm install -n \\ + clearml-agent \\ + allegroai-enterprise/clearml-enterprise-agent \\ + --create-namespace \\ + -f overrides.yaml + ``` + +3. Create a queue via the API: + + ``` + curl $APISERVER_URL/queues.create \\ + -H "Content-Type: application/json" \\ + -H "X-Clearml-Impersonate-As: 75557e2ab172405bbe153705e91d1782" \\ + -u $APISERVER_KEY:$APISERVER_SECRET \\ + -d '{"name":"default"}' + ``` + +### Tenant Namespace Isolation with NetworkPolicies + +To ensure network isolation for each tenant, you need to create a `NetworkPolicy` in the tenant namespace. This way +the entire namespace/tenant will not accept any connection from other namespaces. + +Create a `NetworkPolicy` in the tenant namespace with the following configuration: + + ``` + apiVersion: networking.k8s.io/v1 + kind: NetworkPolicy + metadata: + name: default-deny-ingress + spec: + podSelector: {} + policyTypes: + - Ingress + ingress: + - from: + - podSelector: {} + ``` + +### Install Task Traffic Router Chart + +Install the [Task Traffic Router](appgw.md) in your Kubernetes cluster, allowing it to manage and route tasks: + +1. Prepare the `overrides.yaml` file with the following content: + + ``` + imageCredentials: + password: "" + clearml: + apiServerUrlReference: "" + apiserverKey: "" + apiserverSecret: "" + jwksKey: "" + ingress: + enabled: true + hostName: "" + ``` + +2. Install Task Traffic Router in the specified tenant namespace: + + ``` + helm install -n \\ + clearml-ttr \\ + allegroai-enterprise/clearml-task-traffic-router \\ + --create-namespace \\ + -f overrides.yaml + ``` + diff --git a/docs/deploying_clearml/enterprise_deploy/on_prem_ubuntu.md b/docs/deploying_clearml/enterprise_deploy/on_prem_ubuntu.md new file mode 100644 index 00000000..749f5066 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/on_prem_ubuntu.md @@ -0,0 +1,356 @@ +--- +title: On-Premises on Ubuntu +--- + +This guide provides step-by-step instruction for installing the ClearML Enterprise Server on a single Linux Ubuntu server. + +## Prerequisites +The following are required for the ClearML on-premises server: + +- At least 8 CPUs +- At least 32 GB RAM +- OS - Ubuntu 20 or higher +- 4 Disks + - Root + - For storing the system and dockers + - Recommended at least 30 GB + - mounted to `/` + - Docker + - For storing Docker data + - Recommended at least 80GB + - mounted to `/var/lib/docker` with permissions 710 + - Data + - For storing Elastic and Mongo databases + - Size depends on the usage. Recommended not to start with less than 100 GB + - Mounted to `/opt/allegro/data` + - File Server + - For storing `fileserver` files (models and debug samples) + - Size depends on usage + - Mounted to `/opt/allegro/data/fileserver` +- User for running ClearML services with administrator privileges +- Ports 8080, 8081, and 8008 available for the ClearML Server services + +In addition, make sure you have the following (provided by ClearML): + +- Docker hub credentials to access the ClearML images +- `docker-compose.yml` - The main compose file containing the services definitions +- `docker-compose.override.yml` - The override file containing additions that are server specific, such as SSO integration +- `constants.env` - The `env` file contains values of items in the `docker-compose` that are unique for +a specific environment, such as keys and secrets for system users, credentials, and image versions. The constant file +should be reviewed and modified prior to the server installation + + +## Installing ClearML Server +### Preliminary Steps + +1. Install Docker CE: + + ``` + https://docs.docker.com/install/linux/docker-ce/ubuntu/ + ``` +1. Verify the Docker CE installation: + + ``` + docker run hello-world + ``` + + Expected output: + + ``` + Hello from Docker! + This message shows that your installation appears to be working correctly. + To generate this message, Docker took the following steps: + + 1. The Docker client contacted the Docker daemon. + 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) + 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. + 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. + ``` +1. Install `docker-compose`: + + ``` + sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose + sudo chmod +x /usr/local/bin/docker-compose + ``` + + :::note + You might need to downgrade urlib3 by running `sudo pip3 install urllib3==1.26.2` + ::: + +1. Increase `vm.max_map_count` for Elasticsearch in Docker: + + ``` + echo "vm.max_map_count=262144" > /tmp/99-allegro.conf + echo "vm.overcommit_memory=1" >> /tmp/99-allegro.conf + echo "fs.inotify.max_user_instances=256" >> /tmp/99-allegro.conf + sudo mv /tmp/99-allegro.conf /etc/sysctl.d/99-allegro.conf + sudo sysctl -w vm.max_map_count=262144 + sudo service docker restart + ``` + +1. Disable THP. Create the `/etc/systemd/system/disable-thp.service` service file with the following content: + + :::important + The `ExecStart` string (Under `[Service]) should be a single line. + ::: + + ``` + [Unit] + Description=Disable Transparent Huge Pages (THP) + + [Service] + Type=simple + ExecStart=/bin/sh -c "echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled && echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag" + + [Install] + WantedBy=multi-user.target + ``` + +1. Enable the online service: + + ``` + sudo systemctl daemon-reload + sudo systemctl enable disable-thp + ``` + +1. Restart the machine. + +### Installing the Server +1. Remove any previous installation of ClearML Server: + + ``` + sudo rm -R /opt/clearml/ + sudo rm -R /opt/allegro/ + ``` + +1. Create local directories for the databases and storage: + + ``` + sudo mkdir -pv /opt/allegro/data/elastic7plus + sudo chown 1000:1000 /opt/allegro/data/elastic7plus + sudo mkdir -pv /opt/allegro/data/mongo_4/configdb + sudo mkdir -pv /opt/allegro/data/mongo_4/db + sudo mkdir -pv /opt/allegro/data/redis + sudo mkdir -pv /opt/allegro/logs/apiserver + sudo mkdir -pv /opt/allegro/documentation + sudo mkdir -pv /opt/allegro/data/fileserver + sudo mkdir -pv /opt/allegro/logs/fileserver + sudo mkdir -pv /opt/allegro/logs/fileserver-proxy + sudo mkdir -pv /opt/allegro/data/fluentd/buffer + sudo mkdir -pv /opt/allegro/config/webserver_external_files + sudo mkdir -pv /opt/allegro/config/onprem_poc + ``` + +1. Copy the following ClearML configuration files to `/opt/allegro`: + * `constants.env` + * `docker-compose.override.yml` + * `docker-compose.yml` + +1. Create an initial ClearML configuration file `/opt/allegro/config/onprem_poc/apiserver.conf` with a fixed user: + + ``` + auth { + fixed_users { + enabled: true, + users: [ + {username: "support", password: "", admin: true, name: "allegro.ai Support User"}, + ] + } + } + ``` + +1. Log into the Docker Hub repository using the username and password provided by ClearML: + + ``` + sudo docker login -u=$DOCKERHUB_USER -p=$DOCKERHUB_PASSWORD + ``` + +1. Start the `docker-compose` by changing directories to the directory containing the `docker-compose` files and running the following command: + + ``` + sudo docker-compose --env-file constants.env up -d + ``` + +1. Verify web access by browsing to your URL (IP address) and port 8080: + + ``` + http://:8080 + ``` + +## Security +To ensure the server's security, it's crucial to open only the necessary ports. + +### Working with HTTP +Directly accessing the server using `HTTP` is not recommended. However, if you choose to do so, only the following ports +should be open to any location where a ClearML client (`clearml-agent`, SDK, or web browser) may operate: +* Port 8080 for accessing the WebApp +* Port 8008 for accessing the API server +* Port 8081 for accessing the file server + +### Working with TLS / HTTPS +TLS termination through an external mechanism, such as a load balancer, is supported and recommended. For such a setup, +the following subdomains should be forwarded to the corresponding ports on the server: +* `https://api.` should be forwarded to port 8008 +* `https://app.` should be forwarded to port 8080 +* `https://files.` should be forwarded to port 8081 + + +:::warning +**Critical: Ensure no other ports are open to maintain the highest level of security.** +::: + +Additionally, ensure that the following URLs are correctly configured in the server's environment file: + +``` +WEBSERVER_URL_FOR_EXTERNAL_WORKERS=https://app. +APISERVER_URL_FOR_EXTERNAL_WORKERS=https://api. +FILESERVER_URL_FOR_EXTERNAL_WORKERS=https://files. +``` + +:::note +If you prefer to use URLs that do not begin with `app`, `api`, or `files`, you must also add the following configuration +for the web server in your `docker-compose.override.yml` file: + +``` +webserver: + environment: + - WEBSERVER__displayedServerUrls={"apiServer":"$APISERVER_URL_FOR_EXTERNAL_WORKERS","filesServer":"$FILESERVER_URL_FOR_EXTERNAL_WORKERS"} +``` +::: + + +## Backups +The main components that contain data are the databases: +* MongoDB +* ElasticSearch +* File server + +It is recommended to back them periodically. + +### Fileserver +It is recommended to back up the entire file server volume. +* Recommended to perform at least a daily backup. +* Recommended backup retention of 2 days at the least. + +### ElasticSearch +Please refer to [ElasticSearch documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/snapshot-restore.html) for creating snapshots. + + +#### MongoDB +Please refer to [MongoDB’s documentation](https://www.mongodb.com/docs/manual/core/backups/) for backing up / restoring. + +## Monitoring + +The following monitoring is recommended: + +### Basic Hardware Monitoring + +#### CPU + +CPU usage varies depending on system usage. We recommend to monitor CPU usage and to alert when the usage is higher +than normal. Recommended starting alerts would be 5-minute CPU load +level of 5 and 10, and adjusting according to performance. + +#### RAM + +Available memory usage also varies depending on system usage. Due to spikes in usage when performing certain tasks, 6-8 GB +of available RAM is recommended as the standard baseline. Some use cases may require more. Thus, we recommend to have 8 GB +of available memory on top of the regular system usage. Alert levels should alert if the available memory is below normal. + +##### Disk Usage + +There are several disks used by the system. We recommend monitoring all of them. Standard alert levels are 20%, 10% and +5% of free disk space. + +### Service Availability + +The following services should be monitored periodically for availability and for response time: + +* `apiserver` - [http://localhost:10000/api/debug.ping](http://localhost:10000/api/debug.ping) should return HTTP 200 +* `webserver` - [http://localhost:10000](http://localhost:10000/) should return HTTP 200 +* `fileserver` - [http://localhost:10000/files/](http://localhost:10000/files/) should return HTTP 405 ("method not allowed") + + +### API Server Docker Memory Usage + +A usage spike can happen during normal operation. But very high spikes (above 6GB) are not expected. We recommend using +`docker stats` to get this information. + +For example, the following comment retrieves the API server's information from the Docker server: + +``` +sudo curl -s --unix-socket /var/run/docker.sock http://localhost/containers/allegro-apiserver/stats?stream=false +``` + +We recommend monitoring the API server memory in addition to the system's available RAM. Alerts should be triggered +when memory usage of the API server exceeds the normal behavior. A starting value can be 6 GB. + +### Backup Failures + +It is also highly recommended to monitor the backups and to alert if a backup has failed. + +## Troubleshooting + +In normal operation mode, all services should be up, and a call to `sudo docker ps` should yield the list of services. + +If a service fails, it is usually due to one of the following: + +* Lack of required resources such as storage or memory +* Incorrect configuration +* Software anomaly + +When a service fails, it should automatically restart. However, if the cause of the failure is persistent, the service +will fail again. If a service fails, do the following: + +### Check the Log + +Run: + +``` +sudo docker logs -n 1000 +``` + +See if there is an error message in the log that can explain the failure. + +### Check the Server's Environment + +The system should be constantly monitored, however it is important to check the following: + +* **Storage space**: run `sudo du -hs /` +* **RAM**: + * Run `vmstat -s` to check available RAM + * Run: `top` to check the processes. + + :::note + Some operations, such as complex queries, may cause a spike in memory usage. Therefore, it is recommended to have at least 8GB of free RAM available. + ::: + +* **Network**: Make sure that there is external access to the services +* **CPU**: The best indicator of the need of additional compute resources is high CPU usage of the `apiserver` and `apiserver-es` services. + * Examine the usage of each service using `sudo docker stats` + * If there is a need to add additional CPUs after updating the server, increase the number of workers on the `apiserver` + service by changing the value of `APISERVER_WORKERS_NUMBER` in the `constants.env` file (up to one additional worker per additional core). + +### API Server + +In case of failures in the `allegro-apiserver` container, or in cases in which the web application gets unexpected errors, +and the browser's developer tools (F12) network tab shows error codes being returned by the server, also check the log +of the `apiserver` which is written to `/opt/allegro/logs/apiserver/apiserver.log`. +Additionally, you can check the server availability using: + +``` +curl http://localhost:8008/api/debug.ping +``` + +This should return HTTP 200. + +### Web Server + +Check the webserver availability by running the following: + +``` +curl http://:8080/configuration.json | +``` + + + diff --git a/docs/deploying_clearml/enterprise_deploy/sso_active_directory.md b/docs/deploying_clearml/enterprise_deploy/sso_active_directory.md new file mode 100644 index 00000000..e3b4c9c2 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/sso_active_directory.md @@ -0,0 +1,46 @@ +--- +title: Group Integration in Active Directory SAML +--- + +Follow this guide to integrate groups from Active Directory with ClearML. + +## Actions in Active Directory +Make sure that the group claims are passed to the ClearML app. + +## Actions in ClearML +### Creating the Groups +* Groups integration is disabled by default +* Groups are not auto-created and need to be created manually in ClearML using the [Users & Groups](../../webapp/settings/webapp_settings_users.md#user-groups) + page in the ClearML web UI, or using the ClearML API. +* If a group does not exist in ClearML, the user will be created, but will not be assigned to any group. +* Group claim used by ClearML is `groups` by default +* Group name is taken from the first CN of the full DN path. For example, for the following DN: `CN=test, OU=unit, DU=mycomp`, + the group name in ClearML will be `test` +* The group name matching in ClearML is case-sensitive by default + +### Configuring ClearML Group Integration + +To enable ClearML group integration set the following environment variable: +``` +CLEARML__services__login__sso__saml_client__microsoft_ad__groups__enabled=true +``` + +To configure groups that should automatically become admins in ClearML set the following environment variable: +``` +CLEARML__services__login__sso__saml_client__microsoft_ad__groups__admins=[, , ...] +``` + +To change the the default Group Claim set the following environment variable: +``` +CLEARML__services__login__sso__saml_client__microsoft_ad__groups__claim=... +``` + +To make group matching case insensitive set the following environment variable: +``` +CLEARML__services__login__sso__saml_client__microsoft_ad__groups__case_sensitive=false +``` + +In order to prohibit the users, who do not belong to any of the AD groups created in ClearML from signing up set the following environment variable: +``` +CLEARML__services__login__sso__saml_client__microsoft_ad__groups__prohibit_user_signup_if_not_in_group=true +``` diff --git a/docs/deploying_clearml/enterprise_deploy/sso_keycloak.md b/docs/deploying_clearml/enterprise_deploy/sso_keycloak.md new file mode 100644 index 00000000..4462e1af --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/sso_keycloak.md @@ -0,0 +1,225 @@ +--- +title: KeyCloak IdP Configuration +--- + +This procedure is a step-by-step guide of the configuration process for the ClearML Enterprise Server with the KeyCloak IdP. + +In the following sections, the term "publicly accessible" does not have to mean open to the entire world or publicly +accessible from the Internet, it simply means accessible to your users from their workstations (typically when using a +browser). + +In the following sections, you will be instructed to set up different environment variables for the ClearML Server. If +using a `docker-compose` deployment, these should be defined in your `docker-compose.override.yaml` file, under the +`apiserver` service’ environment variables, as follows: + +``` +services: + ... + apiserver: + ... + environment: + = + ... +``` + +If using a Kubernetes deployment, these should be set in the ClearML Enterprise server chart values override file, under +the `.Values.apiserver.extraEnvs` array section, as follows: + +``` +... +apiserver: + extraEnvs: + - name: + value: "" + - ... + +``` + +All examples below are provided in the Kubernetes format. + +## Prerequisites + +* An existing ClearML Enterprise server / control-plane installation (using `docker-compose` or Kubernetes), which is +set up with a publicly accessible endpoint fo the ClearML WebApp +* A KeyCloak IdP installed with a publicly accessible endpoint, with you as admin having access to the KeyCloak administration UI. + +## Configuration + +### Basic Setup + +#### KeyCloak Configuration + +In the KeyCloak administration UI: + +1. Register a new ClearML app with the callback url: `/callback_keycloak` +2. Make sure that the claims representing `user_id`, `email` and `user name` are returned +3. Make a note of the `client_id`, `client_secret`, `Auth url` and `Access token url` for configuration in the ClearML Server. + +#### ClearML Server Configuration + +In the ClearML Server deployment, set the environment variables specified below. + +##### KeyCloak Base URL + +Use the start of the token or authorization endpoint, usually the part just before `protocol/openid-connect/...` + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__base_url + value: "" +``` + +##### KeyCloak Authorization Endpoint + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__authorize_url + value: "" +``` + +##### KeyCloak Access Token Endpoint + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__access_token_url + value: "" +``` + +##### KeyCloak Client ID + +The client ID is obtained when creating the KeyCloak ClearML App. + +``` +- name: CLEARML__secure__login__sso__oauth_client__keycloak__client_id + value: "" +``` + +##### KeyCloak Client Secret + +The client secret is obtained when creating the KeyCloak ClearML App. + +``` +- name: CLEARML__secure__login__sso__oauth_client__keycloak__client_secret + value: "" +``` + +##### Automatic User Creation Support + +Usually, when using IdPs in ClearML, the ClearML Server will map users signing in to the server into tenants (companies) +using predefined whitelists and specific invitations (users explicitly added by admins). + +To support automatic user creation in a trusted environment, where all users signing in using this IdP are automatically +added to the same tenant (company), the following environment variable should be set: + +``` +- name: CLEARML__secure__login__sso__oauth_client__keycloak__default_company + value: "" +``` + +### User Groups Integration + +This option allows automatically synchronizing group membership from KeyCloak into existing ClearML User Groups when +logging in users (this is done on every user login, not just on user sign-in). + +Make sure a ClearML User Group exists for each potential KeyCloak group that should be synchronized to +prevent an uncontrolled proliferation of user groups. The ClearML server will not automatically create user groups in +this mode. + +#### Keycloak Configuration + +* When configuring the Open ID client for ClearML: + * Navigate to the `Client Scopes` tab + * Click on the first row `-dedicated` + * Click `Add Mapper → By configuration` and then select the `Group membership` option + * In the opened dialog enter the name `groups` and Token claim name `groups` + * Uncheck the `Full group path` option and save the mapper +* To validate yourself: + * Return to the `Client Details → Client` scope tab + * Go to the `Evaluate` sub-tab and select a user that has any group memberships + * On the right side navigate to `Generated ID` token and then to `Generated User Info` + * Inspect that in both cases you can see the groups claim in the displayed user data + +#### ClearML Server Configuration + +Set the following environment variables for the `apiserver` service: + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__groups__enabled + value: "true" +- name: CLEARML__services__login__sso__oauth_client__keycloak__groups__claim + value: "groups" +- name: CLEARML__services__login__sso__oauth_client__keycloak__claims__name + value: "preferred_username" +``` + +##### Setting Administrators by Group Association + +In case you would like the members of the particular KeyCloak group to be set as administrators in ClearML, set the +following environment variable. Note that in this case, the KeyCloak group(s) do not have to be present in the ClearML Server. + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__groups__admins + value: "[\"\"]" +``` + +##### Restrict User Signup + +To prevent sign in for users who do not have a matching group(s) found using the above-mentioned configuration, set the +following environment variable. + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__groups__prohibit_user_signup_if_not_in_group + value: "true" +``` + +### Administrator User Role Association + +For integration of an admin user role from KeyCloak into the ClearML service, do the following. + +#### KeyCloak Configuration + +1. For each administrator user, assign the admin role to that user in KeyCloak +2. In the `Client Scopes` tab, make sure that the `roles` claim is returned in the access token or userinfo token +(this depends on the configuration in step 1) + +#### ClearML Server Configuration + +By default, the ClearML Server will use the admin claim to identify administrator users. To use a different group name +for designating the admin role, set the following environment variable: + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__admin_role + value: "" +``` + +#### Disabling Admin Role Association + +To disable the automatic administrator claim and manage administrators solely from inside the ClearML WebApp, make sure +that user roles are not returned by KeyCloak in the auth token or the `userinfo` endpoint, and/or set the following +ClearML Server environment variable: + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__admin_role + value: "" +``` + +### Additional ClearML Server Configurations + +#### KeyCloak Session Logout + +To automatically log out the user from the KeyCloak provider when the user logs out of the ClearMK service, set the +following environment variable. This will make sure that the KeyCloak session is not maintained in the browser so that +when the user tries to log into the ClearML service, the KeyCloak login page will be used again and not skipped. + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__idp_logout + value: "true" +``` + +#### User Info Source + +By default, the user info is taken from the KeyCloak access token. If you prefer to use the user info available through +the OAuth’s protocol `userinfo` endpoint, set the following environment variable: + +``` +- name: CLEARML__services__login__sso__oauth_client__keycloak__get_info_from_access_token + value: "false" +``` + diff --git a/docs/deploying_clearml/enterprise_deploy/sso_multi_tenant_login.md b/docs/deploying_clearml/enterprise_deploy/sso_multi_tenant_login.md new file mode 100644 index 00000000..b1508c4f --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/sso_multi_tenant_login.md @@ -0,0 +1,98 @@ +--- +title: Multi-Tenant Login Mode +--- + +In a multi-tenant setup, each external tenant can be represented by an SSO client defined in the customer Identity provider +(Keycloak). Each ClearML tenant can be associated with a particular external tenant. Currently, only one +ClearML tenant can be associated with a particular external tenant + +## Setup IdP/SSO Client in Identity Provider + +1. Add the following URL to "Valid redirect URIs": `/callback_` +2. Add the following URLs to "Valid post logout redirect URIs": + + ``` + /login + /login/ + ``` +3. Make sure the external tenant ID and groups are returned as claims for a each user + +## Configure ClearML to use Multi-Tenant Mode + +Set the following environment variables in the ClearML enterprise helm chart under the `apiserver` section: +* To turn on the multi-tenant login mode: + + ``` + - name: CLEARML__services__login__sso__tenant_login + value: "true" + ``` +* To hide any global IdP/SSO configuration that's not associated with a specific ClearML tenant: + + ``` + - name: CLEARML__services__login__sso__allow_settings_providers + value: "false" + ``` + +Enable `onlyPasswordLogin` by setting the following environment variable in the helm chart under the `webserver` section: + +``` +- name: WEBSERVER__onlyPasswordLogin` + value: “true”` +``` + +## Setup IdP for a ClearML Tenant + +To set an IdP client for a ClearML tenant, you’ll need to set the ClearML tenant settings and define an identity provider: + +1. Call the following API to set the ClearML tenant settings: + + ``` + curl $APISERVER_URL/system.update_company_sso_config -H "Content-Type: application/json" -u $APISERVER_KEY:$APISERVER_SECRET -d'{ + "company": "", + "sso": { + "tenant": "", + "group_mapping": { + "IDP group name1": "Clearml group name1", + "IDP group name2": "Clearml group name2" + }, + "admin_groups": ["IDP admin group name1", "IDP admin group name2"] + }}' + ``` +2. Call the following API to define the ClearML tenant identity provider: + + ``` + curl $APISERVER_URL/sso.save_provider_configuration -H "Content-Type: application/json" -u $APISERVER_KEY:$APISERVER_SECRET -d'{ + "provider": "keycloak", + "company": "", + "configuration": { + "id": "", + "display_name": "", + "client_id": "", + "client_secret": "", + "authorization_endpoint": "", + "token_endpoint": "", + "revocation_endpoint": "", + "end_session_endpoint": "", + "logout_from_provider": true, + "claim_tenant": "tenant_key", + "claim_name": "name", + "group_enabled": true, + "claim_groups": "ad_groups_trusted", + "group_prohibit_user_login_if_not_in_group": true + }}' + ``` + The above configuration assumes the following: + * On logout from ClearML, the user is also logged out from the Identity Provider + * External tenant ID for the user is returned under the `tenant_key` claim + * User display name is returned under the `name` claim + * User groups list is returned under the `ad_groups_trusted` claim + * Group integration is turned on and a user will be allowed to log in if any of the groups s/he belongs to in the + IdP exists under the corresponding ClearML tenant (this is after group name translation is done according to the ClearML tenant settings) + +## Webapp Login + +When running in multi-tenant login mode, a user belonging to some external tenant should use the following link to log in: + +``` +/login/ +``` \ No newline at end of file diff --git a/docs/deploying_clearml/enterprise_deploy/sso_saml_k8s.md b/docs/deploying_clearml/enterprise_deploy/sso_saml_k8s.md new file mode 100644 index 00000000..186bf345 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/sso_saml_k8s.md @@ -0,0 +1,60 @@ +--- +title: Microsoft AD SAML +--- + +This document describes the configuration required for connecting a ClearML Kubernetes server to allow authenticating +users with Microsoft AD using SAML. + +Configuration requires two steps: +* Configuration of the application in the active directory +* Configuration in the ClearML server side + +## Active Directory Configuration +1. Register the ClearML app with the callback url: `/callback_microsoft_ad` +1. Make sure that SSO binding is set to HTTP-Redirect +1. Make sure that the following user claims are returned to the ClearML app: + + ``` + emailaddress - user.mail + displayname - user.displayname + Unique user identifier - user.principalname + ``` + +1. Generate the IdP metadata file and save the file and entity ID + +## ClearML Server Side Configuration +The following should be configured in the override file: + +``` +apiserver: + additionalConfigs: + metadata.xml: | + + + + test + + + extraEnvs: + - name: "ALLEGRO__secure__login__sso__saml_client__microsoft_ad__entity_id" + value: "" + - name: "ALLEGRO__secure__login__sso__saml_client__microsoft_ad__idp_metadata_file" + value: "/opt/clearml/config/default/metadata.xml" + - name: "ALLEGRO__secure__login__sso__saml_client__microsoft_ad__default_company" + value: "" + - name: "CLEARML__services__login__sso__saml_client__microsoft_ad__claims__object_id" + value: "http://schemas.microsoft.com/identity/claims/objectidentifier" + - name: "CLEARML__services__login__sso__saml_client__microsoft_ad__claims__name" + value: "http://schemas.microsoft.com/identity/claims/displayname" + - name: "CLEARML__services__login__sso__saml_client__microsoft_ad__claims__email" + value: "emailAddress" + - name: "CLEARML__services__login__sso__saml_client__microsoft_ad__claims__given_name" + value: "givenName" + - name: "CLEARML__services__login__sso__saml_client__microsoft_ad__claims__surname" + value: "surname" + - name: "CLEARML__services__login__sso__saml_client__microsoft_ad__claims__email" + value: "emailAddress" + - name: "CLEARML__services__login__sso__saml_client__microsoft_ad__claims__email" + value: "emailAddress" +``` + diff --git a/docs/deploying_clearml/enterprise_deploy/vpc_aws.md b/docs/deploying_clearml/enterprise_deploy/vpc_aws.md new file mode 100644 index 00000000..37fa7f28 --- /dev/null +++ b/docs/deploying_clearml/enterprise_deploy/vpc_aws.md @@ -0,0 +1,293 @@ +--- +title: AWS VPC +--- + +This guide provides step-by-step instructions for installing the ClearML Enterprise Server on AWS using a Virtual Private Cloud (VPC). + +It covers the following: +* Set up security groups and IAM role +* Create EC2 instance with required disks +* Install dependencies and mount disks +* Deploy ClearML version using `docker-compose` +* Set up load balancer and DNS +* Set up server backup + +## Prerequisites + +* It is recommended to start with 4 CPUs and 32 GB of RAM. An `r6a.xlarge` EC2 instance would accommodate these requirements. +* An AWS account with at least 2 availability zones is required. It is recommended to install on a region with at least +3 availability zones. Having fewer than 3 availability zones would prevent the use of high-availability setups, if +needed in the future. + +## Instance Setup + +:::note +It is recommended to use a VPC with IPv6 enabled for future usage expansion. +::: + +### Create Security Groups for the Server and Load Balancer + +1. Create a security group for the load balancer. + + It is recommended to configure the security group to allow access, at first, only for a trusted IP address or a set + of trusted IP addresses, that will be used for the initial setup of the server. + + * Ingress TCP ports: 80, 443 from trusted IP addresses. + * Egress: All addresses and ports. + +1. Create a security group for the main server (`clearml-main`): + + * Ingress: + * TCP port 10000, from the load balancer's security group + * TCP port 22 from trusted IP addresses. + * Egress: All addresses and ports + +:::important +A company’s security policy may require filtering Egress traffic. However, at the initial stage, one should note that +some external repositories will be used to install software. +::: + +### Create an IAM Role for the Server + +To perform backups to S3, the instance will need a role that allows EC2 access (RW) to a backup bucket. +An example policy document with the above parameters is provided at `self_installed_policy.json`. + +### Create Instance + +Instance requirements: + +1. The instance must be created in a VPC with at least two public subnets to allow for AWS load balancer setup. +2. `x86_64` based instance +3. [Amazon Linux 2 OS](https://aws.amazon.com/amazon-linux-2/?amazon-linux-whats-new.sort-by=item.additionalFields.postDateTime&amazon-linux-whats-new.sort-order=desc) +4. Disks: + 1. Root disk: 50GB `gp3` disk, or one with higher volume/performance. + 2. Data disk: + 1. Used for databases (ElasticSearch and Mongo DB) in which meta-data and events are saved + 2. Device: `/dev/sdf` + 3. Recommended initial size: 100GB + 4. Type: `gp3` or a higher random access performance one. + 3. Fileserver disk: + 1. Used for storing files such as debug images and models + 2. Device: `/dev/sdg` + 3. Recommended initial size: Should be estimated by users of the system. + 4. Type: Depending on usage, but `gp3` or `st1` are usually the best options: + 1. For a large amount of data, used by a small number of users/experiments, use `st1` (minimum `st1` disk size: 500GB). + 2. For all other scenarios, use SSD disks (e.g. `gp3`). + 3. The disk type can be changed after creation. + 4. Very large number of users and/or experiments may require higher than the default `gp3` disk performance. + 4. Docker data disk: + 1. Used for Docker data. + 2. Device: `/dev/sdh` + 3. Recommended initial size: 30GB + 4. Type: `gp3` +5. Use the `clearml-main` security group and the IAM role created in the previous step. + +## Configuration and Software Deployment + +### Install Dependencies + +1. Copy the following files to `/home/ec2-user` directory on the server: + 1. `envoy.yaml` + 2. `self_installed_VPC_EC2_amazon_linux_2_install.sh` +2. Run `self_installed_VPC_EC2_amazon_linux_2_install.sh` from the `/home/ec2-user` directory. +3. Verify the disks were mounted successfully (using: `df -h`) to: + 1. `/opt/allegro/data` + 2. `/opt/allegro/data/fileserver` + 3. `/var/lib/docker` +4. Reboot server. + +### Version Deployment + +1. Copy the following files to `/home/ec2-user` directory on the server: + * `constants.env` + * `docker-compose.yml` + * `docker-compose.override.yml` +2. Log in to Dockerhub: + + ``` + source constants.env + sudo docker login -u=$DOCKERHUB_USER -p=$DOCKERHUB_PASSWORD + ``` +3. Start the dockers: + + ``` + sudo docker-compose --env-file constants.env up -d + ``` + +## Load Balancer + +1. Create a TLS certificate: + 1. Choose a domain name to be used with the server. The main URL that will be used by the system’s users will be `app.` + 2. Create a certificate, with the following DNS names: + 1. `` + 2. `*.` + +2. Create the `envoy` target group for the server: + 1. Port: 10000 + 2. Protocol: HTTP + 3. Target type: instance + 4. Attach the server instance as the single target. + 5. Health check: + 1. Match HTTP response code 200 + 2. Path: `/api/debug.ping` + 3. timeout: 10 seconds + 4. Healthy threshold: 1 + 5. Unhealthy threshold: 2 + +3. Create an Application Load Balancer, with the following parameters: + 1. Security group: As defined [above](#create-security-groups-for-the-server-and-load-balancer) for the load balancer + 2. Subnets: Two subnets on the VPC. It is recommended to have at least one of two on the same subnet as the instance. + 3. Idle timeout: 300 seconds + 4. Enable deletion protection: True + 5. IP address type: If possible, dualstack. Otherwise, IPv4. + 6. Listeners: + 1. HTTP: + 1. Port: 80 + 2. protocol: HTTP + 3. redirect (HTTP 301\) to the same address, with HTTPS + 2. HTTPS: + 1. port 443 + 2. Protocol: HTTPS + 3. Certificate: As defined above. + 4. SSL policy: + 1. Based on your company's security policy + + 2. Currently recommended: `ELBSecurityPolicy-TLS13-1-2-Res-2021-06` + + :::note + After setting up the listener, we recommend changing the rules created automatically: Set a default HTTP 404 + response, and forwarding to the target group only if the HTTP header matches `` or `*.` + ::: + +4. Define DNS rules + 1. Use your DNS provider of choice to forward traffic to the load balancer. + 2. If using Route53, the use of A record aliases is recommended. + 3. The following domains should point to the load balancer: + 1. `` + 2. `*.` + +You can now change the load balancers security group to allow Internet access + +## Backups + +### File Server + +Identify the file server's EBS volume ID on the AWS console. + +On the AWS backup service: + +1. Create a backup vault. +2. Create a backup plan for the EBS volume into the vault. + 1. Recommended to perform at least a daily backup. + 2. Recommended backups expiration of 2 days at the least. + +### Elastic + +#### Create the Backup Repo + +1. Copy `create_elastic_backup_repo.sh` file to `/home/ec2-user` directory on the server +2. Run: + + ``` + create_elastic_backup_repo.sh + ``` + +#### Backing Up + +Backup is done by running the `elastic_backup.py` Python script periodically. + +1. Copy `elastic_backup.py` to the `/home/ec2-user` directory on the server +2. Install the required packages: + + ``` + pip3 install “elasticsearch\>=6.0.0,\<=7.17.7” + pip3 install boto3 + ``` + +3. For daily backups, run: + + ``` + /home/ec2-user/elastic_backup.py --host-address localhost --snapshot-name-prefix clearml --backup-repo daily --delete-backups-older-than-days 7 + ``` + +4. For hourly backups run: + + ``` + /home/ec2-user/elastic_backup.py --host-address localhost --snapshot-name-prefix clearml --backup-repo hourly --delete-backups-older-than-days 1 + +5. Recommended to add these to the crontab + +### MongoDB + +Backup is done by running the `mongo_backup.sh` script periodically. + +1. Copy `mongo_backup.sh` to `/home/ec2-user` directory on the server +2. Run: + + ``` + mongo_backup.sh / (ex: mongo_backup.sh mybucket/path/in/bucket) + ``` + +3. Recommended to add this to the crontab + +:::note +The MongoDB script does not deal with deletion of old backups. It's recommended to create an S3 lifecycle rule for +deletion beyond the company's required retention period. +::: + +## Monitoring +### Hardware Monitoring + +#### CPU + +CPU usage varies depending on system usage. We recommend to monitor CPU usage and to alert when the usage is higher +than normal. Recommended starting alerts would be 5-minute CPU load +level of 5 and 10, and adjusting according to performance. + +#### RAM + +Available memory usage also varies depending on system usage. Due to spikes in usage when performing certain tasks, 6-8 GB +of available RAM is recommended as the standard baseline. Some use cases may require more. Thus, we recommend to have 8 GB +of available memory on top of the regular system usage. Alert levels should alert if the available memory is below normal. + +#### Disk Usage + +There are several disks used by the system. We recommend monitoring all of them. Standard alert levels are 20%, 10% and +5% of free disk space. + +### Service Availability + +The following services should be monitored periodically for availability and for response time: + +* `apiserver` - [http://localhost:10000/api/debug.ping](http://localhost:10000/api/debug.ping) should return HTTP 200 +* `webserver` - [http://localhost:10000](http://localhost:10000/) should return HTTP 200 +* `fileserver` - [http://localhost:10000/files/](http://localhost:10000/files/) should return HTTP 405 ("method not allowed") + +### API Server Docker Memory Usage + +A usage spike can happen during normal operation. But very high spikes (above 6GB) are not expected. We recommend using +`docker stats` to get this information. + +For example, the following comment retrieves the API server's information from the Docker server: + +``` +sudo curl -s --unix-socket /var/run/docker.sock http://localhost/containers/allegro-apiserver/stats?stream=false +``` + +We recommend monitoring the API server memory in addition to the system's available RAM. Alerts should be triggered +when memory usage of the API server exceeds the normal behavior. A starting value can be 6 GB. + +### Backup Failures + +All scripts provided use exit code 0 when successfully completing the backups. Other exit codes indicate problems. The +log would usually indicate the reason for the failure. + +## Maintenance + +### Removing App Containers + +To remove old application containers, add the following to the cron: + +``` +0 0 * * * root docker container prune --force --filter "until=96h" +``` diff --git a/docs/deploying_clearml/upgrade_server_aws_ec2_ami.md b/docs/deploying_clearml/upgrade_server_aws_ec2_ami.md index 9edd3457..ed129ab2 100644 --- a/docs/deploying_clearml/upgrade_server_aws_ec2_ami.md +++ b/docs/deploying_clearml/upgrade_server_aws_ec2_ami.md @@ -2,14 +2,21 @@ title: AWS EC2 AMIs --- -:::note -For upgrade purposes, the terms **Trains Server** and **ClearML Server** are interchangeable. -::: + + +MongoDB major version was upgraded from `v5.x` to `6.x`. Please note that if your current ClearML Server version is older than +`v1.17` (where MongoDB `v5.x` was first used), you'll need to first upgrade to ClearML Server v1.17. + +First upgrade to ClearML Server v1.17 following the procedure below and using [this `docker-compose` file](https://github.com/clearml/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose.yml). Once successfully upgraded, +you can proceed to upgrade to v2.x. + + + The sections below contain the steps to upgrade ClearML Server on the [same AWS instance](#upgrading-on-the-same-aws-instance), and to upgrade and migrate to a [new AWS instance](#upgrading-and-migrating-to-a-new-aws-instance). -### Upgrading on the Same AWS Instance +## Upgrading on the Same AWS Instance This section contains the steps to upgrade ClearML Server on the same AWS instance. @@ -42,7 +49,7 @@ If upgrading from Trains Server version 0.15 or older, a data migration is requi 1. Download the latest `docker-compose.yml` file. Execute the following command: ``` - sudo curl https://raw.githubusercontent.com/allegroai/clearml-server/master/docker/docker-compose.yml -o /opt/clearml/docker-compose.yml + sudo curl https://raw.githubusercontent.com/clearml/clearml-server/master/docker/docker-compose.yml -o /opt/clearml/docker-compose.yml ``` 1. Startup ClearML Server. This automatically pulls the latest ClearML Server build. @@ -52,7 +59,7 @@ If upgrading from Trains Server version 0.15 or older, a data migration is requi docker-compose -f docker-compose.yml up -d ``` -### Upgrading and Migrating to a New AWS Instance +## Upgrading and Migrating to a New AWS Instance This section contains the steps to upgrade ClearML Server on the new AWS instance. @@ -67,8 +74,9 @@ This section contains the steps to upgrade ClearML Server on the new AWS instanc 1. On the old AWS instance, [backup your data](clearml_server_aws_ec2_ami.md#backing-up-and-restoring-data-and-configuration) and, if your configuration folder is not empty, backup your configuration. -1. If upgrading from ClearML Server version older than 1.2, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_mongo44_migration.md). - If upgrading from Trains Server version 0.15 or older, a data migration is required before continuing this upgrade. See instructions [here](clearml_server_es7_migration.md). +1. If upgrading from Trains Server version 0.15 or older, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_es7_migration.md). + +1. If upgrading from ClearML Server version 1.1 or older, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_mongo44_migration.md). 1. On the new AWS instance, [restore your data](clearml_server_aws_ec2_ami.md#backing-up-and-restoring-data-and-configuration) and, if the configuration folder is not empty, restore the configuration. diff --git a/docs/deploying_clearml/upgrade_server_gcp.md b/docs/deploying_clearml/upgrade_server_gcp.md index 93e53998..7739d82d 100644 --- a/docs/deploying_clearml/upgrade_server_gcp.md +++ b/docs/deploying_clearml/upgrade_server_gcp.md @@ -7,7 +7,7 @@ title: Google Cloud Platform MongoDB major version was upgraded from `v5.x` to `6.x`. Please note that if your current ClearML Server version is older than `v1.17` (where MongoDB `v5.x` was first used), you'll need to first upgrade to ClearML Server v1.17. -First upgrade to ClearML Server v1.17 following the procedure below and using [this `docker-compose` file](https://github.com/allegroai/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose.yml). Once successfully upgraded, +First upgrade to ClearML Server v1.17 following the procedure below and using [this `docker-compose` file](https://github.com/clearml/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose.yml). Once successfully upgraded, you can proceed to upgrade to v2.x. @@ -19,11 +19,13 @@ you can proceed to upgrade to v2.x. ``` docker-compose -f docker-compose.yml down ``` + +1. [Backing up data](clearml_server_gcp.md#backing-up-and-restoring-data-and-configuration) is recommended, and if the configuration folder is + not empty, backing up the configuration. 1. If upgrading from **Trains Server** version 0.15 or older to **ClearML Server**, do the following: - 1. Follow these [data migration instructions](clearml_server_es7_migration.md), - and then continue this upgrade. + 1. Follow these [data migration instructions](clearml_server_es7_migration.md). 1. Rename `/opt/trains` and its subdirectories to `/opt/clearml`: @@ -31,14 +33,12 @@ you can proceed to upgrade to v2.x. sudo mv /opt/trains /opt/clearml ``` -1. If upgrading from ClearML Server version older than 1.2, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_mongo44_migration.md). -1. [Backing up data](clearml_server_gcp.md#backing-up-and-restoring-data-and-configuration) is recommended, and if the configuration folder is - not empty, backing up the configuration. +1. If upgrading from ClearML Server version 1.1 or older, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_mongo44_migration.md). 1. Download the latest `docker-compose.yml` file: ``` - curl https://raw.githubusercontent.com/allegroai/clearml-server/master/docker/docker-compose.yml -o /opt/clearml/docker-compose.yml + curl https://raw.githubusercontent.com/clearml/clearml-server/master/docker/docker-compose.yml -o /opt/clearml/docker-compose.yml ``` 1. Startup ClearML Server. This automatically pulls the latest ClearML Server build. diff --git a/docs/deploying_clearml/upgrade_server_kubernetes_helm.md b/docs/deploying_clearml/upgrade_server_kubernetes_helm.md index cdb140e4..7aa1b6e0 100644 --- a/docs/deploying_clearml/upgrade_server_kubernetes_helm.md +++ b/docs/deploying_clearml/upgrade_server_kubernetes_helm.md @@ -7,16 +7,16 @@ title: Kubernetes ```bash helm repo update -helm upgrade clearml allegroai/clearml +helm upgrade clearml clearml/clearml ``` **To change the values in an existing installation,** execute the following: ```bash -helm upgrade clearml allegroai/clearml --version -f custom_values.yaml +helm upgrade clearml clearml/clearml --version -f custom_values.yaml ``` -See the [clearml-helm-charts repository](https://github.com/allegroai/clearml-helm-charts/tree/main/charts/clearml#local-environment) +See the [clearml-helm-charts repository](https://github.com/clearml/clearml-helm-charts/tree/main/charts/clearml#local-environment) to view the up-to-date charts. :::tip diff --git a/docs/deploying_clearml/upgrade_server_linux_mac.md b/docs/deploying_clearml/upgrade_server_linux_mac.md index 818fe375..3a77d8a6 100644 --- a/docs/deploying_clearml/upgrade_server_linux_mac.md +++ b/docs/deploying_clearml/upgrade_server_linux_mac.md @@ -7,7 +7,7 @@ title: Linux or macOS MongoDB major version was upgraded from `v5.x` to `6.x`. Please note that if your current ClearML Server version is older than `v1.17` (where MongoDB `v5.x` was first used), you'll need to first upgrade to ClearML Server v1.17. -First upgrade to ClearML Server v1.17 following the procedure below and using [this `docker-compose` file](https://github.com/allegroai/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose.yml). Once successfully upgraded, +First upgrade to ClearML Server v1.17 following the procedure below and using [this `docker-compose` file](https://github.com/clearml/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose.yml). Once successfully upgraded, you can proceed to upgrade to v2.x. @@ -40,24 +40,26 @@ For backwards compatibility, the environment variables ``TRAINS_HOST_IP``, ``TRA ``` docker-compose -f docker-compose.yml down ``` - -1. If upgrading from **Trains Server** version 0.15 or older, a data migration is required before continuing this upgrade. See instructions [here](clearml_server_es7_migration.md). - -1. If upgrading from ClearML Server version older than 1.2, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_mongo44_migration.md). 1. [Backing up data](clearml_server_linux_mac.md#backing-up-and-restoring-data-and-configuration) is recommended and, if the configuration folder is not empty, backing up the configuration. + +1. If upgrading from **Trains Server** version 0.15 or older to **ClearML Server**, do the following: -1. If upgrading from **Trains Server** to **ClearML Server**, rename `/opt/trains` and its subdirectories to `/opt/clearml`: + 1. Follow these [data migration instructions](clearml_server_es7_migration.md). + + 1. Rename `/opt/trains` and its subdirectories to `/opt/clearml`: + + ``` + sudo mv /opt/trains /opt/clearml + ``` - ``` - sudo mv /opt/trains /opt/clearml - ``` +1. If upgrading from ClearML Server version 1.1 or older, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_mongo44_migration.md). 1. Download the latest `docker-compose.yml` file: ``` - curl https://raw.githubusercontent.com/allegroai/clearml-server/master/docker/docker-compose.yml -o /opt/clearml/docker-compose.yml + curl https://raw.githubusercontent.com/clearml/clearml-server/master/docker/docker-compose.yml -o /opt/clearml/docker-compose.yml ``` 1. Startup ClearML Server. This automatically pulls the latest ClearML Server build: diff --git a/docs/deploying_clearml/upgrade_server_win.md b/docs/deploying_clearml/upgrade_server_win.md index 36ec3007..11f8690a 100644 --- a/docs/deploying_clearml/upgrade_server_win.md +++ b/docs/deploying_clearml/upgrade_server_win.md @@ -7,7 +7,7 @@ title: Windows MongoDB major version was upgraded from `v5.x` to `6.x`. Please note that if your current ClearML Server version is older than `v1.17` (where MongoDB `v5.x` was first used), you'll need to first upgrade to ClearML Server v1.17. -First upgrade to ClearML Server v1.17 following the procedure below and using [this `docker-compose` file](https://github.com/allegroai/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose-win10.yml). Once successfully upgraded, +First upgrade to ClearML Server v1.17 following the procedure below and using [this `docker-compose` file](https://github.com/clearml/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose-win10.yml). Once successfully upgraded, you can proceed to upgrade to v2.x. @@ -29,10 +29,7 @@ you can proceed to upgrade to v2.x. ``` docker-compose -f c:\opt\trains\docker-compose-win10.yml down ``` - -1. If upgrading from **Trains Server** version 0.15 or older, a data migration is required before continuing this upgrade. See instructions [here](clearml_server_es7_migration.md). -1. If upgrading from ClearML Server version older than 1.2, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_mongo44_migration.md). 1. Backing up data is recommended, and if the configuration folder is not empty, backing up the configuration. @@ -40,13 +37,19 @@ you can proceed to upgrade to v2.x. For example, if the configuration is in ``c:\opt\clearml``, then backup ``c:\opt\clearml\config`` and ``c:\opt\clearml\data``. Before restoring, remove the old artifacts in ``c:\opt\clearml\config`` and ``c:\opt\clearml\data``, and then restore. ::: - -1. If upgrading from **Trains Server** to **ClearML Server**, rename `/opt/trains` and its subdirectories to `/opt/clearml`. +1. If upgrading from **Trains Server** version 0.15 or older to **ClearML Server**, do the following: + + 1. Follow these [data migration instructions](clearml_server_es7_migration.md). + + 1. Rename `/opt/trains` and its subdirectories to `/opt/clearml`. + +1. If upgrading from ClearML Server version 1.1 or older, you need to migrate your data before upgrading your server. See instructions [here](clearml_server_mongo44_migration.md). + 1. Download the latest `docker-compose.yml` file: ``` - curl https://raw.githubusercontent.com/allegroai/clearml-server/master/docker/docker-compose-win10.yml -o c:\opt\clearml\docker-compose-win10.yml + curl https://raw.githubusercontent.com/clearml/clearml-server/master/docker/docker-compose-win10.yml -o c:\opt\clearml\docker-compose-win10.yml ``` 1. Startup ClearML Server. This automatically pulls the latest ClearML Server build. diff --git a/docs/deploying_models.md b/docs/deploying_models.md new file mode 100644 index 00000000..5afb240b --- /dev/null +++ b/docs/deploying_models.md @@ -0,0 +1,34 @@ +--- +title: Model Deployment +--- + +Model deployment makes trained models accessible for real-world applications. ClearML provides a comprehensive suite of +tools for seamless model deployment, which supports +features including: +* Version control +* Automatic updates +* Performance monitoring + +ClearML's offerings optimize the deployment process +while ensuring scalability and security. The solutions include: +* **Model Deployment UI Applications** (available under the Enterprise Plan) - The UI applications simplify deploying models + as network services through secure endpoints, providing an interface for managing deployments--no code required. + See more information about the following applications: + * [vLLM Deployment](webapp/applications/apps_model_deployment.md) + * [Embedding Model Deployment](webapp/applications/apps_embed_model_deployment.md) + * [Llama.cpp Model Deployment](webapp/applications/apps_llama_deployment.md) +* **Command-line Interface** - `clearml-serving` is a CLI for model deployment and orchestration. + It supports integration with Kubernetes clusters or custom container-based + solutions, offering flexibility for diverse infrastructure setups. + For more information, see [ClearML Serving](clearml_serving/clearml_serving.md). + +## Model Endpoint Monitoring +All deployed models are displayed in a unified **Model Endpoints** list in the UI. This +allows users to monitor endpoint activity and manage deployments from a single location. + +For more information, see [Model Endpoints](webapp/webapp_model_endpoints.md). + +![Model Endpoints](img/webapp_model_endpoints_monitor.png#light-mode-only) +![Model Endpoints](img/webapp_model_endpoints_monitor_dark.png#dark-mode-only) + + diff --git a/docs/faq.md b/docs/faq.md index fcad943c..097a25ea 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -17,26 +17,26 @@ title: FAQ * [Models are not accessible from the UI after I migrated ClearML Server to a new address. How do I fix this?](#migrate_server_models) * [Models are not accessible from the UI after I moved them (different bucket / server). How do I fix this?](#relocate_models) -**Experiments** +**Tasks** * [I noticed I keep getting the message "warning: uncommitted code". What does it mean?](#uncommitted-code-warning) * [I do not use argparse for hyperparameters. Do you have a solution?](#dont-want-argparser) -* [I noticed that all of my experiments appear as "Training". Are there other options?](#other-experiment-types) -* [Sometimes I see experiments as running when in fact they are not. What's going on?](#experiment-running-but-stopped) -* [My code throws an exception, but my experiment status is not "Failed". What happened?](#exception-not-failed) -* [CERTIFICATE_VERIFY_FAILED - When I run my experiment, I get an SSL Connection error. Do you have a solution?](#ssl-connection-error) -* [How do I modify experiment names once they have been created?](#modify_exp_names) +* [I noticed that all of my tasks appear as "Training". Are there other options?](#other-task-types) +* [Sometimes I see tasks as running when in fact they are not. What's going on?](#task-running-but-stopped) +* [My code throws an exception, but my task status is not "Failed". What happened?](#exception-not-failed) +* [CERTIFICATE_VERIFY_FAILED - When I run my task, I get an SSL Connection error. Do you have a solution?](#ssl-connection-error) +* [How do I modify task names once they have been created?](#modify_exp_names) * [Using Conda and the "typing" package, I get the error "AttributeError: type object 'Callable' has no attribute '_abc_registry'". How do I fix this?](#typing) * [My ClearML Server disk space usage is too high. What can I do about this?](#delete_exp) -* [Can I change the random seed my experiment uses?](#random_see) -* [In the Web UI, I can't access files that my experiment stored. Why not?](#access_files) +* [Can I change the random seed my task uses?](#random_seed) +* [In the Web UI, I can't access files that my task stored. Why not?](#access_files) * [I get the message "ClearML Monitor: Could not detect iteration reporting, falling back to iterations as seconds-from-start". What does it mean?](#resource_monitoring) * [Can I control what ClearML automatically logs?](#controlling_logging) * [Can I run a ClearML Task while working offline?](#offline_mode) **Graphs and Logs** -* [The first log lines are missing from the experiment console tab. Where did they go?](#first-log-lines-missing) +* [The first log lines are missing from the task console tab. Where did they go?](#first-log-lines-missing) * [How do I create a graph comparing hyperparameters vs model accuracy?](#compare-graph-parameters) * [I want to add more graphs, not just with TensorBoard. Is this supported?](#more-graph-types) * [How can I report more than one scatter 2D series on the same plot?](#multiple-scatter2D) @@ -65,11 +65,11 @@ title: FAQ * [How do I explicitly specify the ClearML configuration file to be used?](#change-config-path) * [How can I override ClearML credentials from the OS environment?](#credentials-os-env) -* [How can I track OS environment variables with experiments?](#track-env-vars) +* [How can I track OS environment variables with tasks?](#track-env-vars) **ClearML Hosted Service** -* [I run my script, but my experiment is not in the ClearML Hosted Service Web UI. How do I fix this?](#hosted-service-no-config) +* [I run my script, but my task is not in the ClearML Hosted Service Web UI. How do I fix this?](#hosted-service-no-config) **ClearML Server Deployment** @@ -113,7 +113,7 @@ title: FAQ #### How do I know a new version came out? Starting with ClearML v0.9.3, ClearML issues a new version release notification, which appears in the log and is -output to the console, when a Python experiment script is run. +output to the console, when a Python task script is run. For example, when a new ClearML Python Package version is available, the notification is: @@ -137,9 +137,10 @@ the following numbers are displayed: * API server version * API version -![Server version information](img/faq_server_versions.png) +![Server version information](img/faq_server_versions.png#light-mode-only) +![Server version information](img/faq_server_versions_dark.png#dark-mode-only) -ClearML python package information can be obtained by using `pip freeze`. +ClearML Python package information can be obtained by using `pip freeze`. For example: @@ -161,12 +162,12 @@ clearml-session==0.3.2 #### How can I sort models by a certain metric? To sort models by a metric, in the ClearML Web UI, -add a [custom column](webapp/webapp_model_table.md#customizing-the-models-table) in the models table and sort by +add a [custom column](webapp/webapp_model_table.md#customizing-the-model-table) to the model table and sort by that metric column. Available custom column options depend upon the models in the table and the metrics that have been attached to them (see [Logging Metrics and Plots](clearml_sdk/model_sdk.md#logging-metrics-and-plots)). -ClearML associates models with the experiments that created them, so you can also add a [custom column](webapp/webapp_exp_table.md#customizing-the-task-table) -in an experiments table and sort by that metric column. +ClearML associates models with the tasks that created them, so you can also add a [custom column](webapp/webapp_exp_table.md#customizing-the-task-table) +in a task table and sort by that metric column.
@@ -287,13 +288,13 @@ To fix this, the registered URL of each model needs to be replaced with its curr mongo backend script.js ``` -## Experiments +## Tasks #### I noticed I keep getting the message "warning: uncommitted code". What does it mean? This message is only a warning. ClearML not only detects your current repository and git commit, but also warns you -if you are using uncommitted code. ClearML does this because uncommitted code means this experiment will be difficult -to reproduce. You can see uncommitted changes in the ClearML Web UI, in the **EXECUTION** tab of the experiment info panel. +if you are using uncommitted code. ClearML does this because uncommitted code means this task will be difficult +to reproduce. You can see uncommitted changes in the ClearML Web UI, in the **EXECUTION** tab of the task info panel. #### I do not use argparse for hyperparameters. Do you have a solution? @@ -324,10 +325,10 @@ For more task configuration options, see [Hyperparameters](fundamentals/hyperpar
-#### I noticed that all of my experiments appear as "Training". Are there other options? +#### I noticed that all of my tasks appear as "Training". Are there other options? -Yes! ClearML supports [multiple experiment types](fundamentals/task.md#task-types). When creating experiments and -calling [`Task.init()`](references/sdk/task.md#taskinit), you can provide an experiment type. For example: +Yes! ClearML supports [multiple task types](fundamentals/task.md#task-types). When creating tasks and +calling [`Task.init()`](references/sdk/task.md#taskinit), you can provide a task type. For example: ```python task = Task.init(project_name, task_name, Task.TaskTypes.testing) @@ -336,13 +337,13 @@ task = Task.init(project_name, task_name, Task.TaskTypes.testing)
-#### Sometimes I see experiments as running when in fact they are not. What's going on? +#### Sometimes I see tasks as running when in fact they are not. What's going on? -ClearML monitors your Python process. When the process exits properly, ClearML closes the experiment. When the process crashes and terminates abnormally, it sometimes misses the stop signal. In this case, you can safely right-click the experiment in the WebApp and abort it. +ClearML monitors your Python process. When the process exits properly, ClearML closes the task. When the process crashes and terminates abnormally, it sometimes misses the stop signal. In this case, you can safely right-click the task in the WebApp and abort it.
-#### My code throws an exception, but my experiment status is not "Failed". What happened? +#### My code throws an exception, but my task status is not "Failed". What happened? This issue was resolved in Trains v0.9.2. Upgrade to ClearML by executing the following command: @@ -354,11 +355,11 @@ pip install -U clearml
-#### When I run my experiment, I get an SSL Connection error CERTIFICATE_VERIFY_FAILED. Do you have a solution? +#### When I run my task, I get an SSL Connection error CERTIFICATE_VERIFY_FAILED. Do you have a solution? Your firewall may be preventing the connection. Try one of the following solutions: -* Direct python "requests" to use the enterprise certificate file by setting the OS environment variables `CURL_CA_BUNDLE` or `REQUESTS_CA_BUNDLE`. For a detailed discussion of this topic, see [https://stackoverflow.com/questions/48391750/disable-python-requests-ssl-validation-for-an-imported-module](https://stackoverflow.com/questions/48391750/disable-python-requests-ssl-validation-for-an-imported-module). +* Direct Python "requests" to use the enterprise certificate file by setting the OS environment variables `CURL_CA_BUNDLE` or `REQUESTS_CA_BUNDLE`. For a detailed discussion of this topic, see [https://stackoverflow.com/questions/48391750/disable-python-requests-ssl-validation-for-an-imported-module](https://stackoverflow.com/questions/48391750/disable-python-requests-ssl-validation-for-an-imported-module). * Disable certificate verification :::warning @@ -368,7 +369,7 @@ Your firewall may be preventing the connection. Try one of the following solutio ``` pip install -U clearml ``` - 1. Create a new `clearml.conf` configuration file (see a [sample configuration file](https://github.com/allegroai/clearml/blob/master/docs/clearml.conf)), containing: + 1. Create a new `clearml.conf` configuration file (see a [sample configuration file](https://github.com/clearml/clearml/blob/master/docs/clearml.conf)), containing: ``` api { verify_certificate = False } @@ -382,11 +383,11 @@ Your firewall may be preventing the connection. Try one of the following solutio
-#### How do I modify experiment names once they have been created? +#### How do I modify task names once they have been created? -An experiment's name is a user-controlled property, which can be accessed via the `Task.name` property. This lets you use meaningful naming schemes to easily filter and compare experiments. +A task's name is a user-controlled property, which can be accessed via the `Task.name` property. This lets you use meaningful naming schemes to easily filter and compare tasks. -For example, to distinguish between different experiments, you can append the task ID to the task name: +For example, to distinguish between different tasks, you can append the task ID to the task name: ```python task = Task.init(project_name='examples', task_name='train') task.name += ' {}'.format(task.id) @@ -407,7 +408,7 @@ for t in tasks: if 'my_secret_parameter' in params: t.name += ' my_secret_parameter={}'.format(params['my_secret_parameter']) ``` -Use this experiment naming when creating automation pipelines with a naming convention. +Use this task naming when creating automation pipelines with a naming convention. @@ -419,7 +420,7 @@ Conda and the [typing](https://pypi.org/project/typing/) package may have some c However, [since Python 3.5](https://docs.python.org/3.5/library/typing.html), the `typing` package is part of the standard library. -To resolve the error, uninstall `typing` and rerun your script. If this does not fix the issue, create a [new ClearML issue](https://github.com/allegroai/clearml/issues/new), including the full error, and your environment details. +To resolve the error, uninstall `typing` and rerun your script. If this does not fix the issue, create a [new ClearML issue](https://github.com/clearml/clearml/issues/new), including the full error, and your environment details. @@ -427,10 +428,10 @@ To resolve the error, uninstall `typing` and rerun your script. If this does not #### My ClearML Server disk space usage is too high. What can I do about this? -To clear up space, you can delete ClearML objects (e.g. experiments, models, datasets, etc.). +To clear up space, you can delete ClearML objects (e.g. tasks, models, datasets, etc.). To delete an object via the UI: -1. Go to the relevant object table (e.g. [Experiments Table](webapp/webapp_exp_table.md), [Models Table](webapp/webapp_model_table.md), etc.) +1. Go to the relevant object table (e.g. [Task Table](webapp/webapp_exp_table.md), [Model Table](webapp/webapp_model_table.md), etc.) 1. Archive the object - Right-click the object in the table **>** click **Archive** 1. Click **Open Archive** on the top of the table 1. In the archive table, right-click the object **>** click **Delete**. @@ -448,11 +449,11 @@ You cannot undo the deletion of a ClearML object. ::: - +
-#### Can I change the random seed my experiment uses? +#### Can I change the random seed my task uses? Yes! By default, ClearML initializes Tasks with an initial seed of `1337` to ensure reproducibility. To set a different value for your task, use the [`Task.set_random_seed()`](references/sdk/task.md#taskset_random_seed) class method and @@ -464,7 +465,7 @@ You can disable the deterministic behavior entirely by passing `Task.set_random_
-#### In the Web UI, I can't access files that my experiment stored. Why not? +#### In the Web UI, I can't access files that my task stored. Why not? ClearML stores file locations. The machine running your browser must have access to the location where the machine that ran the Task stored the file. This applies to debug samples and artifacts. If, for example, the machine running the browser does not have access, you may see `Unable to load image`, instead of the image. @@ -586,35 +587,38 @@ See [Storing Task Data Offline](guides/set_offline.md). ## Graphs and Logs -#### The first log lines are missing from the experiment console tab. Where did they go? +#### The first log lines are missing from the task console tab. Where did they go? Due to speed/optimization issues, the console displays only the last several hundred log lines. -You can always download the full log as a file using the ClearML Web UI. In the **ClearML Web UI >** experiment's **CONSOLE** +You can always download the full log as a file using the ClearML Web UI. In the **ClearML Web UI >** task's **CONSOLE** tab, click `Download full log`. -![Download console log](img/faq_download_console_log.png) +![Download console log](img/faq_download_console_log.png#light-mode-only) +![Download console log](img/faq_download_console_log_dark.png#dark-mode-only)
#### How do I create a graph comparing hyperparameters vs. model accuracy? -You can use the UI's [experiment comparison features](webapp/webapp_exp_comparing.md) to compare the logged hyperparameter -and accuracy values of several experiments. In the experiment comparison page, under the **HYPERPARAMETERS** tab -you can visualize experiments' hyperparameter values in relation to performance metrics in a scatter plot or parallel +You can use the UI's [task comparison features](webapp/webapp_exp_comparing.md) to compare the logged hyperparameter +and accuracy values of several tasks. In the task comparison page, under the **HYPERPARAMETERS** tab +you can visualize tasks' hyperparameter values in relation to performance metrics in a scatter plot or parallel coordinates plot: * [Scatter plot](webapp/webapp_exp_comparing.md#scatter-plot): View the correlation between a selected hyperparameter and - metric. For example, the image below shows a scatter plot that displays the values of a performance metric (`epoch_accuracy`) - and a hyperparameter (`epochs`) of a few experiments: + metric. For example, the image below shows a scatter plot that displays the values of a performance metric (`accuracy`) + and a hyperparameter (`epochs`) of a few tasks: - ![Scatter plot comparison](img/faq_compare_scatter.png) + ![Scatter plot comparison](img/faq_compare_scatter.png#light-mode-only) + ![Scatter plot comparison](img/faq_compare_scatter_dark.png#dark-mode-only) * [Parallel coordinates plot](webapp/webapp_exp_comparing.md#parallel-coordinates-mode): View the impact of hyperparameters on selected metric(s). For example, the image below shows - a parallel coordinates plot which displays the values of selected hyperparameters (`base_lr`, `batch_size`, and - `number_of_epochs`) and a performance metric (`accuracy`) of three experiments: + a parallel coordinates plot which displays the values of selected hyperparameters (`epochs`, `lr`, and `batch_size`) + and a performance metric (`accuracy`) of a few tasks: - ![Parallel Coordinates](img/compare_parallel_coordinates.png) + ![Parallel Coordinates](img/compare_parallel_coordinates.png#light-mode-only) + ![Parallel Coordinates](img/compare_parallel_coordinates_dark.png#dark-mode-only)
@@ -658,8 +662,8 @@ logger.report_scatter2d( #### Is there something ClearML can do about uncommitted code running? -Yes! ClearML stores the git diff as part of the experiment's information. You can view the git diff in the **ClearML Web UI >** -experiment's **EXECUTION** tab. +Yes! ClearML stores the git diff as part of the task's information. You can view the git diff in the **ClearML Web UI >** +task's **EXECUTION** tab.
@@ -675,14 +679,14 @@ task = Task.init(project_name, task_name, output_uri="/mnt/shared/folder") ``` ClearML will copy all stored snapshots into a subfolder under `/mnt/shared/folder`. The subfolder's name will contain -the experiment's ID. If the experiment's ID is `6ea4f0b56d994320a713aeaf13a86d9d`, the following folder will be used: +the task's ID. For example, if the task's ID is `6ea4f0b56d994320a713aeaf13a86d9d`, the following folder will be used: ``` /mnt/shared/folder/task.6ea4f0b56d994320a713aeaf13a86d9d/models/ ``` ClearML supports other storage types for `output_uri`: * S3: `s3://bucket/folder` -* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket` +* Non-AWS S3-like services (such as MinIO): `s3://host_addr:port/bucket`. **Note that port specification is required**. * Google Cloud Storage: `gs://bucket-name/folder` * Azure Storage: `azure://.blob.core.windows.net/path/to/file` @@ -849,9 +853,9 @@ export CLEARML_API_HOST="http://localhost:8008"
-#### How can I track OS environment variables with experiments? +#### How can I track OS environment variables with tasks? -You can set environment variables to track in an experiment by specifying them in the `sdk.development.log_os_environments` +You can set environment variables to track in a task by specifying them in the `sdk.development.log_os_environments` field of the [`clearml.conf`](configs/clearml_conf.md#log_env_var) file: ```editorconfig @@ -884,9 +888,9 @@ The `CLEARML_LOG_ENVIRONMENT` variable always overrides the `clearml.conf` file. ## ClearML Hosted Service -#### I run my script, but my experiment is not in the ClearML Hosted Service Web UI. How do I fix this? +#### I run my script, but my task is not in the ClearML Hosted Service Web UI. How do I fix this? -If you joined the ClearML Hosted Service and ran a script, but your experiment does not appear in Web UI, you may not have configured ClearML for the hosted service. Run the ClearML setup wizard. It will request your hosted service ClearML credentials and create the ClearML configuration you need. +If you joined the ClearML Hosted Service and ran a script, but your task does not appear in Web UI, you may not have configured ClearML for the hosted service. Run the ClearML setup wizard. It will request your hosted service ClearML credentials and create the ClearML configuration you need. ``` pip install clearml @@ -961,7 +965,7 @@ For detailed instructions, see [Web Login Authentication](deploying_clearml/clea #### Can I modify non-responsive task settings? -The non-responsive experiment watchdog monitors experiments that were not updated for a specified time interval, and +The non-responsive task watchdog monitors tasks that were not updated for a specified time interval, and marks them as `aborted`. The watchdog is always active. You can modify the following settings for the watchdog: @@ -1137,9 +1141,9 @@ If your ClearML WebApp (UI) does not show anything, it may be an error authentic The network definitions inside a virtual machine (or container) are different from those of the host. The virtual machine's and the server machine's IP addresses are different, so you have to make sure that the machine that is executing the -experiment can access the server's machine. +task can access the server's machine. -Make sure to have an independent configuration file for the virtual machine where you are running your experiments. +Make sure to have an independent configuration file for the virtual machine where you are running your tasks. Edit the `api` section of your `clearml.conf` file and insert IP addresses of the server machine that are accessible from the VM. It should look something like this: diff --git a/docs/fundamentals/agents_and_queues.md b/docs/fundamentals/agents_and_queues.md index 7cf98b33..aa7a1337 100644 --- a/docs/fundamentals/agents_and_queues.md +++ b/docs/fundamentals/agents_and_queues.md @@ -6,7 +6,7 @@ Two major components of MLOps/LLMOps are experiment reproducibility, and the abi coupled with execution queues, address both these needs. A ClearML worker is instantiated by launching a ClearML Agent, which is the base for **Automation** in ClearML and can be leveraged to build automated pipelines, launch custom services -(e.g. a [monitor and alert service](https://github.com/allegroai/clearml/tree/master/examples/services/monitoring)) and more. +(e.g. a [monitor and alert service](https://github.com/clearml/clearml/tree/master/examples/services/monitoring)) and more. ## What Does a ClearML Agent Do? The ClearML agent allows users to execute code on any machine it's installed on, thus facilitating the @@ -17,7 +17,7 @@ from installing required packages to setting environment variables, all leading to executing the code (supporting both virtual environment or flexible docker container configurations). The agent also supports overriding parameter values on-the-fly without code modification, thus enabling no-code experimentation (this is also the foundation on which -ClearML [Hyperparameter Optimization](hpo.md) is implemented). +ClearML [Hyperparameter Optimization](../getting_started/hpo.md) is implemented). An agent can be associated with specific GPUs, enabling workload distribution. For example, on a machine with 8 GPUs you can allocate several GPUs to an agent and use the rest for a different workload, even through another agent (see [Dynamic GPU Allocation](../clearml_agent/clearml_agent_dynamic_gpus.md)). @@ -48,7 +48,7 @@ The diagram above demonstrates a typical flow where an agent executes a task: 1. Install any required system packages. 1. Clone the code from a git repository. 1. Apply any uncommitted changes recorded. - 1. Set up the python environment and required packages. + 1. Set up the Python environment and required packages. 1. The task's script/code is executed. While the agent is running, it continuously reports system metrics to the ClearML Server. You can monitor these metrics @@ -59,7 +59,8 @@ Installing an Agent on machines allows it to monitor all the machine's status (G When managing multiple machines, this allows users to have an overview of their HW resources: the status of each machine, the expected workload on each machine, etc. -![Workers and Queues page](../img/agents_queues_resource_management.png) +![Workers and Queues page](../img/agents_queues_resource_management.png#light-mode-only) +![Workers and Queues page](../img/agents_queues_resource_management_dark.png#dark-mode-only) You can organize your queues according to resource usage. Say you have a single-GPU machine. You can create a queue called @@ -78,7 +79,7 @@ Agents can be deployed bare-metal, with multiple instances allocating specific GPUs to the agents. They can also be deployed as dockers in a Kubernetes cluster. The Agent supports the following running modes: -* **Virtual Environment Mode** - The agent creates a new virtual environment for the experiment, installs the required +* **Virtual Environment Mode** - The agent creates a new virtual environment for the task, installs the required python packages based on the Task specification, clones the code repository, applies the uncommitted changes and finally executes the code while monitoring it. This mode uses smart caching so packages and environments can be reused over multiple tasks (see [Virtual Environment Reuse](../clearml_agent/clearml_agent_env_caching.md#virtual-environment-reuse)). @@ -107,7 +108,7 @@ in parallel (each task will register itself as a sub-agent, visible in the [Orch This mode is intended for running maintenance tasks. Some suitable tasks include: - [Pipeline controller](../guides/pipeline/pipeline_controller.md) - Implementing the pipeline scheduling and logic -- [Hyperparameter Optimization](../guides/optimization/hyper-parameter-optimization/examples_hyperparam_opt.md) - Implementing an active selection of experiments +- [Hyperparameter Optimization](../guides/optimization/hyper-parameter-optimization/examples_hyperparam_opt.md) - Implementing an active selection of tasks - [Control Service](../guides/services/aws_autoscaler.md) - AWS Autoscaler for example - [External services](../guides/services/slack_alerts.md) - Such as Slack integration alert service diff --git a/docs/fundamentals/artifacts.md b/docs/fundamentals/artifacts.md index f9820d43..adee8ed1 100644 --- a/docs/fundamentals/artifacts.md +++ b/docs/fundamentals/artifacts.md @@ -25,7 +25,7 @@ cleaning task logs its clean dataset for use by a subsequent training task). ## Logging Artifacts ClearML automatically logs artifacts created by popular frameworks, including TensorFlow and PyTorch. See [supported frameworks](../clearml_sdk/task_sdk.md#automatic-logging). -You can also log any other object using [`Task.upload_artifact()`](../references/sdk/task.md#upload_)artifact. See +You can also log any other object using [`Task.upload_artifact()`](../references/sdk/task.md#upload_artifact). See the [Artifacts Reporting](../guides/reporting/artifacts.md) example for details. ClearML can be configured to upload artifacts to any supported types of storage, which include local and shared folders, @@ -50,7 +50,8 @@ Artifacts appear under the **ARTIFACTS** tab of a Task. Each artifact's location applications are prohibited from accessing the local disk for security reasons) * **Network stored artifacts**: Display a download action to retrieve files from URLs (e.g., `https://`, `s3://`). -![WebApp Artifacts section](../img/webapp_tracking_30.png) +![WebApp Artifacts section](../img/webapp_tracking_30.png#light-mode-only) +![WebApp Artifacts section](../img/webapp_tracking_30_dark.png#dark-mode-only) ## SDK Interface See the [Artifacts](../clearml_sdk/task_sdk.md#artifacts) section in the Task SDK page for an overview of how to work diff --git a/docs/fundamentals/hyperparameters.md b/docs/fundamentals/hyperparameters.md index e021076a..52e02390 100644 --- a/docs/fundamentals/hyperparameters.md +++ b/docs/fundamentals/hyperparameters.md @@ -5,14 +5,14 @@ title: Hyperparameters Hyperparameters are a script's configuration options. Since hyperparameters can have substantial impact on model performance, it is crucial to efficiently track and manage them. -ClearML supports tracking and managing hyperparameters in each experiment and provides a dedicated [hyperparameter -optimization module](hpo.md). With ClearML's logging and tracking capabilities, experiments can be reproduced, and their +ClearML supports tracking and managing hyperparameters in each task and provides a dedicated [hyperparameter +optimization module](../getting_started/hpo.md). With ClearML's logging and tracking capabilities, tasks can be reproduced, and their hyperparameters and results can be saved and compared, which is key to understanding model behavior. ClearML lets you easily try out different hyperparameter values without changing your original code. ClearML's [execution agent](../clearml_agent.md) will override the original values with any new ones you specify through the web UI (see -[Configuration](../webapp/webapp_exp_tuning.md#configuration) in the Tuning Experiments page). You can also -programmatically set experiment parameters. +[Configuration](../webapp/webapp_exp_tuning.md#configuration) in the Tuning Tasks page). You can also +programmatically set task parameters. ## Tracking Hyperparameters Hyperparameters can be added from anywhere in your code, and ClearML provides multiple ways to obtain them! ClearML logs @@ -21,7 +21,7 @@ and tracks hyperparameters of various types, supporting automatic logging and ex ### Automatic Logging Once a ClearML Task has been [initialized](../references/sdk/task.md#taskinit) in a script, ClearML automatically captures and tracks the following types of parameters: -* Command line parsing - command line parameters passed when invoking code that uses standard python packages, including: +* Command line parsing - command line parameters passed when invoking code that uses standard Python packages, including: * [click](../integrations/click.md) * [argparse](../guides/reporting/hyper_parameters.md#argparse-command-line-options) * [Python Fire](../integrations/python_fire.md) @@ -38,8 +38,8 @@ Automatic logging can be disabled. See [Control Automatic Logging](../clearml_sd ### Environment Variables -:::important Experiment Reproducibility -Relying on environment variables makes an experiment not fully reproducible, since ClearML Agent can't reproduce them at +:::important Task Reproducibility +Relying on environment variables makes a task not fully reproducible, since ClearML Agent can't reproduce them at runtime. ::: @@ -94,15 +94,15 @@ objects are saved as blobs i.e. ClearML is not aware of their internal structure #### Setting and Updating Parameters ClearML provides methods to set and update task parameters manually. Use [`Task.set_parameters()`](../references/sdk/task.md#set_parameters) -to define parameters manually. To update the parameters in an experiment, use [`Task.set_parameters_as_dict()`](../references/sdk/task.md#set_parameters_as_dict). +to define parameters manually. To update the parameters in a task, use [`Task.set_parameters_as_dict()`](../references/sdk/task.md#set_parameters_as_dict). The `set_parameters_as_dict` method updates parameters while the `set_parameters` method overrides the parameters. ClearML does not automatically track changes to explicitly set parameters. ### User Properties User properties do not impact task execution and can be modified at any stage. They are convenient for setting -helpful values which are displayed in the [experiment table](../webapp/webapp_exp_table.md) (i.e. customize columns), -making it easier to search / filter experiments. Add user properties to an experiment with the +helpful values which are displayed in the [task table](../webapp/webapp_exp_table.md) (i.e. customize columns), +making it easier to search / filter tasks. Add user properties to a task with the [`Task.set_user_properties`](../references/sdk/task.md#set_user_properties) method. ### Accessing Parameters @@ -115,7 +115,7 @@ including their subsections (see [WebApp sections](#webapp-interface) below). ## WebApp Interface -Configurations can be viewed in web UI experiment pages, in the **CONFIGURATION** tab. +Configurations can be viewed in web UI task pages, in the **CONFIGURATION** tab. The configuration panel is split into three sections according to type: - **User Properties** - Modifiable section that can be edited post-execution @@ -124,7 +124,9 @@ The configuration panel is split into three sections according to type: These sections are further broken down into subsections based on how the parameters were logged (General / Args / TF_Define / Environment). -![Task hyperparameters sections](../img/hyperparameters_sections.png) +![Task hyperparameters sections](../img/hyperparameters_sections.png#light-mode-only) +![Task hyperparameters sections](../img/hyperparameters_sections_dark.png#dark-mode-only) + ## SDK Interface diff --git a/docs/fundamentals/logger.md b/docs/fundamentals/logger.md index 49e2033a..fde034e4 100644 --- a/docs/fundamentals/logger.md +++ b/docs/fundamentals/logger.md @@ -2,7 +2,7 @@ title: Logger --- -The ClearML Logger class is used to report experiments' results such as metrics, graphs, and debug samples. It is provided +The ClearML Logger class is used to report task results such as metrics, graphs, and debug samples. It is provided through the ClearML [Task](task.md) object. A Logger object is used to do the following: @@ -19,7 +19,8 @@ ClearML supports four types of reports: - Plots - General graphs and diagrams, such as histograms, confusion matrices, line plots, and custom plotly charts. - Debug Samples - Images, audio, and videos. Can be reported per iteration. -![image](../img/fundamentals_logger_results.png) +![Logged plots](../img/report_plotly.png#light-mode-only) +![Logged plots](../img/report_plotly_dark.png#dark-mode-only) ## Automatic Reporting @@ -31,7 +32,8 @@ library warning messages. GPU, CPU, Memory, and Network information is also automatically captured. -![image](../img/fundamentals_logger_cpu_monitoring.png) +![CPU monitoring](../img/fundamentals_logger_cpu_monitoring.png#light-mode-only) +![CPU monitoring](../img/fundamentals_logger_cpu_monitoring_dark.png#dark-mode-only) ### Supported Packages - [TensorBoard](https://www.tensorflow.org/tensorboard) @@ -74,7 +76,8 @@ outputs that would be used later on. Only the last X results of each title / series are saved to prevent overloading the server. See details in [`Logger.report_media`](../references/sdk/logger.md#report_media). -![image](../img/fundamentals_logger_reported_images.png) +![Logger reported images](../img/webapp_tracking_43.png#light-mode-only) +![Logger reported images](../img/webapp_tracking_43_dark.png#dark-mode-only) ### Explicit Reporting Examples diff --git a/docs/fundamentals/models.md b/docs/fundamentals/models.md index 2313cf3b..16ae3546 100644 --- a/docs/fundamentals/models.md +++ b/docs/fundamentals/models.md @@ -68,7 +68,8 @@ label enumeration, lineage, and general information, click the model name, which Models can also be accessed through their associated project's [Model Table](../webapp/webapp_model_table.md), where all the models associated with a project are listed. -![WebApp Model](../img/fundamentals_models.png) +![WebApp Model](../img/webapp_model_general.png#light-mode-only) +![WebApp Model](../img/webapp_model_general_dark.png#dark-mode-only) ## SDK Interface diff --git a/docs/fundamentals/projects.md b/docs/fundamentals/projects.md index 87ca4cde..33e19d1f 100644 --- a/docs/fundamentals/projects.md +++ b/docs/fundamentals/projects.md @@ -13,15 +13,15 @@ computer, making organization easier. Projects contain a textual description field for noting relevant information. The WebApp supports markdown rendering of the description (see [overview](../webapp/webapp_project_overview.md)). -In addition, the project's default output URI can be specified. When new experiments from +In addition, the project's default output URI can be specified. When new tasks from the project are executed, the model checkpoints (snapshots) and artifacts are stored in the default output location. ## WebApp Users can create and modify projects, and see project details in the [WebApp](../webapp/webapp_home.md). -A project's description can be edited in its [overview](../webapp/webapp_project_overview.md) page. Each project's experiments, -models, and dataviews, can be viewed in the project's [experiments table](../webapp/webapp_exp_table.md), - [models table](../webapp/webapp_model_table.md), and [dataviews table](../hyperdatasets/webapp/webapp_dataviews.md). +A project's description can be edited in its [overview](../webapp/webapp_project_overview.md) page. Each project's tasks, +models, and dataviews, can be viewed in the project's [task table](../webapp/webapp_exp_table.md), + [model table](../webapp/webapp_model_table.md), and [dataview table](../hyperdatasets/webapp/webapp_dataviews.md). ## Usage diff --git a/docs/fundamentals/task.md b/docs/fundamentals/task.md index be85c1c1..19ed8fc5 100644 --- a/docs/fundamentals/task.md +++ b/docs/fundamentals/task.md @@ -31,7 +31,7 @@ You can create copies of a task ([clone](../webapp/webapp_exp_reproducing.md)) t * Set hyperparameter and run-time configuration values Modifying a task clone's configuration will have the executing ClearML agent override the original values: -* Modified package requirements will have the experiment script run with updated packages +* Modified package requirements will have the task script run with updated packages * Modified recorded command line arguments will have the ClearML agent inject the new values in their stead * Code-level configuration instrumented with [`Task.connect`](../references/sdk/task.md#connect) will be overridden by modified hyperparameters @@ -39,13 +39,14 @@ modified hyperparameters -![Task](../img/fundamentals_task.png) +![Task](../img/fundamentals_task.png#light-mode-only) +![Task](../img/fundamentals_task_dark.png#dark-mode-only) ## Task Sections The sections of ClearML Task are made up of the information that a task captures and stores, which consists of code execution details and execution outputs. This information is used for tracking -and visualizing results, reproducing, tuning, and comparing experiments, and executing workflows. +and visualizing results, reproducing, tuning, and comparing tasks, and executing workflows. The captured [code execution information](../webapp/webapp_exp_track_visual.md#execution) includes: * Git information @@ -60,15 +61,15 @@ The captured [execution output](../webapp/webapp_exp_track_visual.md#task-result * [Debug samples](../webapp/webapp_exp_track_visual.md#debug-samples) * [Models](models.md) -For a more in-depth description of each task section, see [Tracking Experiments and Visualizing Results](../webapp/webapp_exp_track_visual.md). +For a more in-depth description of each task section, see [Tracking Tasks and Visualizing Results](../webapp/webapp_exp_track_visual.md). ### Execution Configuration ClearML logs a task's hyperparameters specified as command line arguments, environment or code level variables. This -allows experiments to be reproduced, and their hyperparameters and results can be saved and compared, which is key to +allows tasks to be reproduced, and their hyperparameters and results can be saved and compared, which is key to understanding model behavior. Hyperparameters can be added from anywhere in your code, and ClearML provides multiple ways to log them. If you specify -your parameters using popular python packages, such as [argparse](https://docs.python.org/3/library/argparse.html) and +your parameters using popular Python packages, such as [argparse](https://docs.python.org/3/library/argparse.html) and [click](https://click.palletsprojects.com/), all you need to do is [initialize](../references/sdk/task.md#taskinit) a task, and ClearML will automatically log the parameters. ClearML also provides methods to explicitly report parameters. @@ -79,10 +80,10 @@ See [Hyperparameters](hyperparameters.md) for more information. ### Artifacts -ClearML allows easy storage of experiments' output products as artifacts that can later be accessed easily and used, +ClearML allows easy storage of tasks' output products as artifacts that can later be accessed easily and used, through the [web UI](../webapp/webapp_overview.md) or programmatically. -ClearML provides methods to easily track files generated throughout your experiments' execution such as: +ClearML provides methods to easily track files generated throughout your tasks' execution such as: - Numpy objects - Pandas DataFrames @@ -91,7 +92,7 @@ ClearML provides methods to easily track files generated throughout your experim - Python objects - and more! -Most importantly, ClearML also logs experiments' input and output models as well as interim model snapshots (see +Most importantly, ClearML also logs tasks' input and output models as well as interim model snapshots (see [Models](models.md)). #### Logging Artifacts @@ -112,7 +113,7 @@ they are attached to, and then retrieving the artifact with one of its following * `get_local_copy()` - caches the files for later use and returns a path to the cached file. * `get()` - use for Python objects. The method that returns the Python object. -See more details in the [Using Artifacts example](https://github.com/allegroai/clearml/blob/master/examples/reporting/using_artifacts_example.py). +See more details in the [Using Artifacts example](https://github.com/clearml/clearml/blob/master/examples/reporting/using_artifacts_example.py). ## Task Types Tasks have a *type* attribute, which denotes their purpose. This helps to further @@ -123,7 +124,7 @@ Available task types are: * *inference* - Model inference job (e.g. offline / batch model execution) * *controller* - A task that lays out the logic for other tasks' interactions, manual or automatic (e.g. a pipeline controller) -* *optimizer* - A specific type of controller for optimization tasks (e.g. [hyperparameter optimization](hpo.md)) +* *optimizer* - A specific type of controller for optimization tasks (e.g. [hyperparameter optimization](../getting_started/hpo.md)) * *service* - Long lasting or recurring service (e.g. server cleanup, auto ingress, sync services etc.) * *monitor* - A specific type of service for monitoring * *application* - A task implementing custom applicative logic, like [autoscaler](../guides/services/aws_autoscaler.md) @@ -173,20 +174,20 @@ The above diagram demonstrates how a previously run task can be used as a baseli ## Task States The state of a task represents its stage in the task lifecycle. It indicates whether the task is read-write (editable) or -read-only. For each state, a state transition indicates which actions can be performed on an experiment, and the new state +read-only. For each state, a state transition indicates which actions can be performed on a task, and the new state after performing an action. The following table describes the task states and state transitions. | State | Description / Usage | State Transition | |---|---|---| -| *Draft* | The experiment is editable. Only experiments in *Draft* mode are editable. The experiment is not running locally or remotely. | If the experiment is enqueued for a [worker](../fundamentals/agents_and_queues.md) to fetch and execute, the state becomes *Pending*. | -| *Pending* | The experiment was enqueued and is waiting in a queue for a worker to fetch and execute it. | If the experiment is dequeued, the state becomes *Draft*. | -| *Running* | The experiment is running locally or remotely. | If the experiment is manually or programmatically terminated, the state becomes *Aborted*. | -| *Completed* | The experiment ran and terminated successfully. | If the experiment is reset or cloned, the state of the cloned experiment or newly cloned experiment becomes *Draft*. Resetting deletes the logs and output of a previous run. Cloning creates an exact, editable copy. | -| *Failed* | The experiment ran and terminated with an error. | The same as *Completed*. | -| *Aborted* | The experiment ran, and was manually or programmatically terminated. The server's [non-responsive task monitor](../deploying_clearml/clearml_server_config.md#non-responsive-task-watchdog) aborts a task automatically after no activity has been detected for a specified time interval (configurable). | The same as *Completed*. | -| *Published* | The experiment is read-only. Publish an experiment to prevent changes to its inputs and outputs. | A *Published* experiment cannot be reset. If it is cloned, the state of the newly cloned experiment becomes *Draft*. | +| *Draft* | The task is editable. Only tasks in *Draft* mode are editable. The task is not running locally or remotely. | If the task is enqueued for a [worker](../fundamentals/agents_and_queues.md) to fetch and execute, the state becomes *Pending*. | +| *Pending* | The task was enqueued and is waiting in a queue for a worker to fetch and execute it. | If the task is dequeued, the state becomes *Draft*. | +| *Running* | The task is running locally or remotely. | If the task is manually or programmatically terminated, the state becomes *Aborted*. | +| *Completed* | The task ran and terminated successfully. | If the task is reset or cloned, the state of the cloned task or newly cloned task becomes *Draft*. Resetting deletes the logs and output of a previous run. Cloning creates an exact, editable copy. | +| *Failed* | The task ran and terminated with an error. | The same as *Completed*. | +| *Aborted* | The task ran, and was manually or programmatically terminated. The server's [non-responsive task monitor](../deploying_clearml/clearml_server_config.md#non-responsive-task-watchdog) aborts a task automatically after no activity has been detected for a specified time interval (configurable). | The same as *Completed*. | +| *Published* | The task is read-only. Publish a task to prevent changes to its inputs and outputs. | A *Published* task cannot be reset. If it is cloned, the state of the newly cloned task becomes *Draft*. | ## SDK Interface diff --git a/docs/getting_started/architecture.md b/docs/getting_started/architecture.md index 1343e688..cc59cdd3 100644 --- a/docs/getting_started/architecture.md +++ b/docs/getting_started/architecture.md @@ -2,9 +2,9 @@ title: ClearML Modules --- -- [**ClearML Python Package**](../getting_started/ds/ds_first_steps.md#install-clearml) (`clearml`) for integrating ClearML into your existing code-base. -- [**ClearML Server**](../deploying_clearml/clearml_server.md) (`clearml-server`) for storing experiment, model, and workflow data, and supporting the Web UI experiment manager. It is also the control plane for the MLOps. -- [**ClearML Agent**](../clearml_agent.md) (`clearml-agent`), the MLOps orchestration agent. Enabling experiment and workflow reproducibility, and scalability. +- [**ClearML Python Package**](../clearml_sdk/clearml_sdk_setup.md) (`clearml`) for integrating ClearML into your existing code-base. +- [**ClearML Server**](../deploying_clearml/clearml_server.md) (`clearml-server`) for storing task, model, and workflow data, and supporting the Web UI experiment manager. It is also the control plane for the MLOps. +- [**ClearML Agent**](../clearml_agent.md) (`clearml-agent`), the MLOps orchestration agent. Enabling task and workflow reproducibility, and scalability. - [**ClearML Data**](../clearml_data/clearml_data.md) (`clearml-data`) data management and versioning on top of file-systems/object-storage. - [**ClearML Serving**](../clearml_serving/clearml_serving.md) (`clearml-serving`) for model deployment and orchestration. - [**ClearML Session**](../apps/clearml_session.md) (`clearml-session`) for launching remote instances of Jupyter Notebooks and VSCode. diff --git a/docs/getting_started/auto_log_exp.md b/docs/getting_started/auto_log_exp.md new file mode 100644 index 00000000..2f3b44d8 --- /dev/null +++ b/docs/getting_started/auto_log_exp.md @@ -0,0 +1,59 @@ +--- +title: Auto-logging Experiments +--- + +In ClearML, experiments are organized as [Tasks](../fundamentals/task.md). + +When you integrate the ClearML SDK with your code, the ClearML task manager automatically captures: +* Source code and uncommitted changes +* Installed packages +* General information such as machine details, runtime, creation date etc. +* Model files, parameters, scalars, and plots from popular ML frameworks such as TensorFlow and PyTorch (see list of [supported frameworks](../clearml_sdk/task_sdk.md#automatic-logging)) +* Console output + +:::tip Automatic logging control +To control what ClearML automatically logs, see this [FAQ](../faq.md#controlling_logging). +::: + +## To Auto-log Your Experiments + +1. Install `clearml` and connect it to the ClearML Server (see [instructions](../clearml_sdk/clearml_sdk.md)) +1. At the beginning of your code, import the `clearml` package: + + ```python + from clearml import Task + ``` + + :::tip Full Automatic Logging + To ensure full automatic logging, it is recommended to import the `clearml` package at the top of your entry script. + ::: + +1. Initialize the Task object in your `main()` function, or the beginning of the script. + + ```python + task = Task.init(project_name='great project', task_name='best task') + ``` + + If the project does not already exist, a new one is created automatically. + + The console should display the following output: + + ``` + ClearML Task: created new task id=1ca59ef1f86d44bd81cb517d529d9e5a + 2021-07-25 13:59:09 + ClearML results page: https://app.clear.ml/projects/4043a1657f374e9298649c6ba72ad233/experiments/1ca59ef1f86d44bd81cb517d529d9e5a/output/log + 2025-01-25 13:59:16 + ``` + +1. Click the results page link to go to the [task's detail page in the ClearML WebApp](../webapp/webapp_exp_track_visual.md), + where you can monitor the task's status, view all its logged data, visualize its results, and more! + + ![Info panel](../img/webapp_tracking_40.png#light-mode-only) + ![Info panel](../img/webapp_tracking_40_dark.png#dark-mode-only) + +**That's it!** You are done integrating ClearML with your code :) + +Now, [command-line arguments](../fundamentals/hyperparameters.md#tracking-hyperparameters), [console output](../fundamentals/logger.md#types-of-logged-results), TensorBoard and Matplotlib, and much more will automatically be +logged in the UI under the created Task. + +Sit back, relax, and watch your models converge :) \ No newline at end of file diff --git a/docs/getting_started/building_pipelines.md b/docs/getting_started/building_pipelines.md new file mode 100644 index 00000000..a6a7466d --- /dev/null +++ b/docs/getting_started/building_pipelines.md @@ -0,0 +1,25 @@ +--- +title: Building Pipelines +--- + + +Pipelines are a way to streamline and connect multiple processes, plugging the output of one process as the input of another. + +ClearML Pipelines are implemented by a Controller Task that holds the logic of the pipeline steps' interactions. The +execution logic controls which step to launch based on parent steps completing their execution. Depending on the +specifications laid out in the controller task, a step's parameters can be overridden, enabling users to leverage other +steps' execution products such as artifacts and parameters. + +When run, the controller will sequentially launch the pipeline steps. Pipelines can be executed locally or +on any machine using the [clearml-agent](../clearml_agent.md). + +ClearML pipelines are created from code using one of the following: +* [PipelineController class](../pipelines/pipelines_sdk_tasks.md) - A pythonic interface for defining and configuring the + pipeline controller and its steps. The controller and steps can be functions in your Python code or existing ClearML tasks. +* [PipelineDecorator class](../pipelines/pipelines_sdk_function_decorators.md) - A set of Python decorators which transform + your functions into the pipeline controller and steps + +For more information, see [ClearML Pipelines](../pipelines/pipelines.md). + +![Pipeline DAG](../img/webapp_pipeline_DAG.png#light-mode-only) +![Pipeline DAG](../img/webapp_pipeline_DAG_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/getting_started/clearml_agent_base_docker.md b/docs/getting_started/clearml_agent_base_docker.md new file mode 100644 index 00000000..b4959647 --- /dev/null +++ b/docs/getting_started/clearml_agent_base_docker.md @@ -0,0 +1,20 @@ +--- +title: Building Task Execution Environments in a Container +--- + +### Base Container + +Build a container according to the execution environment of a specific task. + +```bash +clearml-agent build --id --docker --target +``` + +You can add the container as the base container image to a task, using one of the following methods: + +- Using the **ClearML Web UI** - See [Default Container](../webapp/webapp_exp_tuning.md#default-container). +- In the ClearML configuration file - Use the ClearML configuration file [`agent.default_docker`](../configs/clearml_conf.md#agentdefault_docker) + options. + +Check out [this tutorial](../guides/clearml_agent/exp_environment_containers.md) for building a Docker container +replicating the execution environment of an existing task. \ No newline at end of file diff --git a/docs/getting_started/clearml_agent_docker_exec.md b/docs/getting_started/clearml_agent_docker_exec.md new file mode 100644 index 00000000..6e15df1f --- /dev/null +++ b/docs/getting_started/clearml_agent_docker_exec.md @@ -0,0 +1,30 @@ +--- +title: Building Executable Task Containers +--- + +## Exporting a Task into a Standalone Docker Container + +### Task Container + +Build a Docker container that when launched executes a specific task, or a clone (copy) of that task. + +- Build a Docker container that at launch will execute a specific Task: + + ```bash + clearml-agent build --id --docker --target --entry-point reuse_task + ``` + +- Build a Docker container that at launch will clone a Task specified by Task ID, and will execute the newly cloned Task: + + ```bash + clearml-agent build --id --docker --target --entry-point clone_task + ``` + +- Run built Docker by executing: + + ```bash + docker run + ``` + +Check out [this tutorial](../guides/clearml_agent/executable_exp_containers.md) for building executable task +containers. diff --git a/docs/clearml_agent/clearml_agent_scheduling.md b/docs/getting_started/clearml_agent_scheduling.md similarity index 97% rename from docs/clearml_agent/clearml_agent_scheduling.md rename to docs/getting_started/clearml_agent_scheduling.md index 469dfe54..ed3c5948 100644 --- a/docs/clearml_agent/clearml_agent_scheduling.md +++ b/docs/getting_started/clearml_agent_scheduling.md @@ -1,8 +1,9 @@ --- -title: Scheduling Working Hours +title: Managing Agent Work Schedules --- + :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Agent work schedule management is available under the ClearML Enterprise plan. ::: The Agent scheduler enables scheduling working hours for each Agent. During working hours, a worker will actively poll diff --git a/docs/getting_started/data_management.md b/docs/getting_started/data_management.md new file mode 100644 index 00000000..3064a51f --- /dev/null +++ b/docs/getting_started/data_management.md @@ -0,0 +1,131 @@ +--- +title: Managing Your Data +--- + +Data is probably one of the biggest factors that determines the success of a project. Associating a model's data with +the model's configuration, code, and results (such as accuracy) is key to deducing meaningful insights into model behavior. + +[ClearML Data](../clearml_data/clearml_data.md) lets you: +* Version your data +* Fetch your data from every machine with minimal code changes +* Use the data with any other task +* Associate data to task results. + +ClearML offers the following data management solutions: + +* `clearml.Dataset` - A Python interface for creating, retrieving, managing, and using datasets. See [SDK](../clearml_data/clearml_data_sdk.md) + for an overview of the basic methods of the Dataset module. +* `clearml-data` - A CLI utility for creating, uploading, and managing datasets. See [CLI](../clearml_data/clearml_data_cli.md) + for a reference of `clearml-data` commands. +* Hyper-Datasets - ClearML's advanced queryable dataset management solution. For more information, see [Hyper-Datasets](../hyperdatasets/overview.md) + +The following guide will use both the `clearml-data` CLI and the `Dataset` class to do the following: +1. Create a ClearML dataset +2. Access the dataset from a ClearML Task in order to preprocess the data +3. Create a new version of the dataset with the modified data +4. Use the new version of the dataset to train a model + +## Creating Dataset + +Let's assume you have some code that extracts data from a production database into a local folder. +Your goal is to create an immutable copy of the data to be used by further steps. + +1. Create the dataset using the `clearml-data create` command and passing the dataset's project and name. You can add a + `latest` tag, making it easier to find it later. + + ```bash + clearml-data create --project chatbot_data --name dataset_v1 --latest + ``` + +1. Add data to the dataset using `clearml-data sync` and passing the path of the folder to be added to the dataset. + This command also uploads the data and finalizes the dataset automatically. + + ```bash + clearml-data sync --folder ./work_dataset + ``` + + +## Preprocessing Data +The second step is to preprocess the data. First access the data, then modify it, +and lastly create a new version of the data. + +1. Create a task for you data preprocessing (not required): + + ```python + from clearml import Task, Dataset + + # create a task for the data processing + task = Task.init(project_name='data', task_name='create', task_type='data_processing') + ``` + +1. Access a dataset using [`Dataset.get()`](../references/sdk/dataset.md#datasetget): + + ```python + # get the v1 dataset + dataset = Dataset.get(dataset_project='data', dataset_name='dataset_v1') + ``` +1. Get a local mutable copy of the dataset using [`Dataset.get_mutable_local_copy`](../references/sdk/dataset.md#get_mutable_local_copy). \ + This downloads the dataset to a specified `target_folder` (non-cached). If the folder already has contents, specify + whether to overwrite its contents with the dataset contents using the `overwrite` parameter. + + ```python + # get a local mutable copy of the dataset + dataset_folder = dataset.get_mutable_local_copy( + target_folder='work_dataset', + overwrite=True + ) + ``` + +1. Preprocess the data, including modifying some files in the `./work_dataset` folder. + +1. Create a new version of the dataset: + + ```python + # create a new version of the dataset with the pickle file + new_dataset = Dataset.create( + dataset_project='data', + dataset_name='dataset_v2', + parent_datasets=[dataset], + # this will make sure we have the creation code and the actual dataset artifacts on the same Task + use_current_task=True, + ) + +1. Add the modified data to the dataset: + + ```python + new_dataset.sync_folder(local_path=dataset_folder) + new_dataset.upload() + new_dataset.finalize() + ``` + +1. Remove the `latest` tag from the previous dataset and add the tag to the new dataset: + ```python + # now let's remove the previous dataset tag + dataset.tags = [] + new_dataset.tags = ['latest'] + ``` + +The new dataset inherits the contents of the datasets specified in `Dataset.create`'s `parent_datasets` argument. +This not only helps trace back dataset changes with full genealogy, but also makes the storage more efficient, +since it only stores the changed and/or added files from the parent versions. +When you access the dataset, it automatically merges the files from all parent versions +in a fully automatic and transparent process, as if the files were always part of the requested Dataset. + +## Training +You can now train your model with the **latest** dataset you have in the system, by getting the instance of the Dataset +based on the `latest` tag (if you have two Datasets with the same tag you will get the newest). +Once you have the dataset you can request a local copy of the data. All local copy requests are cached, +which means that if you access the same dataset multiple times you will not have any unnecessary downloads. + +```python +# create a task for the model training +task = Task.init(project_name='data', task_name='ingest', task_type='training') + +# get the latest dataset with the tag `latest` +dataset = Dataset.get(dataset_tags='latest') + +# get a cached copy of the Dataset files +dataset_folder = dataset.get_local_copy() + +# train model here +``` \ No newline at end of file diff --git a/docs/getting_started/ds/ds_second_steps.md b/docs/getting_started/ds/ds_second_steps.md deleted file mode 100644 index a098aa72..00000000 --- a/docs/getting_started/ds/ds_second_steps.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: Next Steps ---- - -So, you've already [installed ClearML's python package](ds_first_steps.md) and run your first experiment! - -Now, you'll learn how to track Hyperparameters, Artifacts, and Metrics! - -## Accessing Experiments - -Every previously executed experiment is stored as a Task. -A Task's project and name can be changed after the experiment has been executed. -A Task is also automatically assigned an auto-generated unique identifier (UUID string) that cannot be changed and always locates the same Task in the system. - -Retrieve a Task object programmatically by querying the system based on either the Task ID, -or project and name combination. You can also query tasks based on their properties, like tags (see [Querying Tasks](../../clearml_sdk/task_sdk.md#querying--searching-tasks)). - -```python -prev_task = Task.get_task(task_id='123456deadbeef') -``` - -Once you have a Task object you can query the state of the Task, get its model(s), scalars, parameters, etc. - -## Log Hyperparameters - -For full reproducibility, it's paramount to save hyperparameters for each experiment. Since hyperparameters can have substantial impact -on model performance, saving and comparing these between experiments is sometimes the key to understanding model behavior. - -ClearML supports logging `argparse` module arguments out of the box, so once ClearML is integrated into the code, it automatically logs all parameters provided to the argument parser. - -You can also log parameter dictionaries (very useful when parsing an external configuration file and storing as a dict object), -whole configuration files, or even custom objects or [Hydra](https://hydra.cc/docs/intro/) configurations! - -```python -params_dictionary = {'epochs': 3, 'lr': 0.4} -task.connect(params_dictionary) -``` - -See [Configuration](../../clearml_sdk/task_sdk.md#configuration) for all hyperparameter logging options. - -## Log Artifacts - -ClearML lets you easily store the output products of an experiment - Model snapshot / weights file, a preprocessing of your data, feature representation of data and more! - -Essentially, artifacts are files (or Python objects) uploaded from a script and are stored alongside the Task. -These artifacts can be easily accessed by the web UI or programmatically. - -Artifacts can be stored anywhere, either on the ClearML server, or any object storage solution or shared folder. -See all [storage capabilities](../../integrations/storage.md). - - -### Adding Artifacts - -Upload a local file containing the preprocessed results of the data: -```python -task.upload_artifact(name='data', artifact_object='/path/to/preprocess_data.csv') -``` - -You can also upload an entire folder with all its content by passing the folder (the folder will be zipped and uploaded as a single zip file). -```python -task.upload_artifact(name='folder', artifact_object='/path/to/folder/') -``` - -Lastly, you can upload an instance of an object; Numpy/Pandas/PIL Images are supported with `npz`/`csv.gz`/`jpg` formats accordingly. -If the object type is unknown, ClearML pickles it and uploads the pickle file. - -```python -numpy_object = np.eye(100, 100) -task.upload_artifact(name='features', artifact_object=numpy_object) -``` - -For more artifact logging options, see [Artifacts](../../clearml_sdk/task_sdk.md#artifacts). - -### Using Artifacts - -Logged artifacts can be used by other Tasks, whether it's a pre-trained Model or processed data. -To use an artifact, first you have to get an instance of the Task that originally created it, -then you either download it and get its path, or get the artifact object directly. - -For example, using a previously generated preprocessed data. - -```python -preprocess_task = Task.get_task(task_id='preprocessing_task_id') -local_csv = preprocess_task.artifacts['data'].get_local_copy() -``` - -`task.artifacts` is a dictionary where the keys are the artifact names, and the returned object is the artifact object. -Calling `get_local_copy()` returns a local cached copy of the artifact. Therefore, next time you execute the code, you don't -need to download the artifact again. -Calling `get()` gets a deserialized pickled object. - -Check out the [artifacts retrieval](https://github.com/allegroai/clearml/blob/master/examples/reporting/artifacts_retrieval.py) example code. - -### Models - -Models are a special kind of artifact. -Models created by popular frameworks (such as PyTorch, TensorFlow, Scikit-learn) are automatically logged by ClearML. -All snapshots are automatically logged. In order to make sure you also automatically upload the model snapshot (instead of saving its local path), -pass a storage location for the model files to be uploaded to. - -For example, upload all snapshots to an S3 bucket: -```python -task = Task.init( - project_name='examples', - task_name='storing model', - output_uri='s3://my_models/' -) -``` - -Now, whenever the framework (TensorFlow/Keras/PyTorch etc.) stores a snapshot, the model file is automatically uploaded to the bucket to a specific folder for the experiment. - -Loading models by a framework is also logged by the system; these models appear in an experiment's **Artifacts** tab, -under the "Input Models" section. - -Check out model snapshots examples for [TensorFlow](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorflow/tensorflow_mnist.py), -[PyTorch](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py), -[Keras](https://github.com/allegroai/clearml/blob/master/examples/frameworks/keras/keras_tensorboard.py), -[scikit-learn](https://github.com/allegroai/clearml/blob/master/examples/frameworks/scikit-learn/sklearn_joblib_example.py). - -#### Loading Models -Loading a previously trained model is quite similar to loading artifacts. - -```python -prev_task = Task.get_task(task_id='the_training_task') -last_snapshot = prev_task.models['output'][-1] -local_weights_path = last_snapshot.get_local_copy() -``` - -Like before, you have to get the instance of the task training the original weights files, then you can query the task for its output models (a list of snapshots), and get the latest snapshot. -:::note -Using TensorFlow, the snapshots are stored in a folder, meaning the `local_weights_path` will point to a folder containing your requested snapshot. -::: -As with artifacts, all models are cached, meaning the next time you run this code, no model needs to be downloaded. -Once one of the frameworks will load the weights file, the running task will be automatically updated with "Input Model" pointing directly to the original training Task's Model. -This feature lets you easily get a full genealogy of every trained and used model by your system! - -## Log Metrics - -Full metrics logging is the key to finding the best performing model! -By default, ClearML automatically captures and logs everything reported to TensorBoard and Matplotlib. - -Since not all metrics are tracked that way, you can also manually report metrics using a [`Logger`](../../fundamentals/logger.md) object. - -You can log everything, from time series data and confusion matrices to HTML, Audio, and Video, to custom plotly graphs! Everything goes! - -![Experiment plots](../../img/report_plotly.png) - -Once everything is neatly logged and displayed, use the [comparison tool](../../webapp/webapp_exp_comparing.md) to find the best configuration! - - -## Track Experiments - -The experiments table is a powerful tool for creating dashboards and views of your own projects, your team's projects, or the entire development. - -![Experiments table](../../img/webapp_experiment_table.png) - - -### Creating Leaderboards -Customize the [experiments table](../../webapp/webapp_exp_table.md) to fit your own needs, adding desired views of parameters, metrics, and tags. -You can filter and sort based on parameters and metrics, so creating custom views is simple and flexible. - -Create a dashboard for a project, presenting the latest Models and their accuracy scores, for immediate insights. - -It can also be used as a live leaderboard, showing the best performing experiments' status, updated in real time. -This is helpful to monitor your projects' progress, and to share it across the organization. - -Any page is sharable by copying the URL from the address bar, allowing you to bookmark leaderboards or to send an exact view of a specific experiment or a comparison page. - -You can also tag Tasks for visibility and filtering allowing you to add more information on the execution of the experiment. -Later you can search based on task name in the search bar, and filter experiments based on their tags, parameters, status, and more. - -## What's Next? - -This covers the basics of ClearML! Running through this guide you've learned how to log Parameters, Artifacts and Metrics! - -If you want to learn more look at how we see the data science process in our [best practices](best_practices.md) page, -or check these pages out: - -- Scale you work and deploy [ClearML Agents](../../clearml_agent.md) -- Develop on remote machines with [ClearML Session](../../apps/clearml_session.md) -- Structure your work and put it into [Pipelines](../../pipelines/pipelines.md) -- Improve your experiments with [Hyperparameter Optimization](../../fundamentals/hpo.md) -- Check out ClearML's integrations with your favorite ML frameworks like [TensorFlow](../../integrations/tensorflow.md), - [PyTorch](../../integrations/pytorch.md), [Keras](../../integrations/keras.md), - and more - -## YouTube Playlist - -All these tips and tricks are also covered in ClearML's **Getting Started** series on YouTube. Go check it out :) - -[![Watch the video](https://img.youtube.com/vi/kyOfwVg05EM/hqdefault.jpg)](https://www.youtube.com/watch?v=kyOfwVg05EM&list=PLMdIlCuMqSTnoC45ME5_JnsJX0zWqDdlO&index=3) \ No newline at end of file diff --git a/docs/getting_started/hpo.md b/docs/getting_started/hpo.md new file mode 100644 index 00000000..aa388581 --- /dev/null +++ b/docs/getting_started/hpo.md @@ -0,0 +1,34 @@ +--- +title: Hyperparameter Optimization +--- + +## What is Hyperparameter Optimization? +Hyperparameters are variables that directly control the behaviors of training algorithms, and have a significant effect on +the performance of the resulting machine learning models. Hyperparameter optimization (HPO) is crucial for improving +model performance and generalization. + +Finding the hyperparameter values that yield the best performing models can be complicated. Manually adjusting +hyperparameters over the course of many training trials can be slow and tedious. Luckily, ClearML offers automated +solutions to boost hyperparameter optimization efficiency. + +## Workflow + +![Hyperparameter optimization diagram](../img/hpo_diagram.png) + +The preceding diagram demonstrates the typical flow of hyperparameter optimization where the parameters of a base task are optimized: + +1. Configure an Optimization Task with a base task whose parameters will be optimized, optimization targets, and a set of parameter values to + test +1. Clone the base task. Each clone's parameter is overridden with a value from the optimization task +1. Enqueue each clone for execution by a ClearML Agent +1. The Optimization Task records and monitors the cloned tasks' configuration and execution details, and returns a + summary of the optimization results. + +## ClearML Solutions + +ClearML offers three solutions for hyperparameter optimization: +* [GUI application](../webapp/applications/apps_hpo.md): The Hyperparameter Optimization app allows you to run and manage the optimization tasks + directly from the web interface--no code necessary (available under the ClearML Pro plan). +* [Command-Line Interface (CLI)](../apps/clearml_param_search.md): The `clearml-param-search` CLI tool enables you to configure and launch the optimization process from your terminal. +* [Python Interface](../clearml_sdk/hpo_sdk.md): The `HyperParameterOptimizer` class within the ClearML SDK allows you to + configure and launch optimization tasks, and seamlessly integrate them in your existing model training tasks. diff --git a/docs/getting_started/logging_using_artifacts.md b/docs/getting_started/logging_using_artifacts.md new file mode 100644 index 00000000..27cafc98 --- /dev/null +++ b/docs/getting_started/logging_using_artifacts.md @@ -0,0 +1,122 @@ +--- +title: Logging and Using Task Artifacts +--- + +:::note +This tutorial assumes that you've already set up [ClearML](../clearml_sdk/clearml_sdk_setup.md) +::: + + +ClearML lets you easily store a task's output products--or **Artifacts**: +* [Model](#models) snapshot / weights file +* Preprocessing of your data +* Feature representation of data +* And more! + +**Artifacts** are files or Python objects that are uploaded and stored alongside the Task. +These artifacts can be easily accessed by the web UI or programmatically. + +Artifacts can be stored anywhere, either on the ClearML Server, or any object storage solution or shared folder. +See all [storage capabilities](../integrations/storage.md). + + +## Adding Artifacts + +Let's create a [Task](../fundamentals/task.md) and add some artifacts to it. + +1. Create a task using [`Task.init()`](../references/sdk/task.md#taskinit) + + ```python + from clearml import Task + + task = Task.init(project_name='great project', task_name='task with artifacts') + ``` + +1. Upload a local **file** using [`Task.upload_folder()`](../references/sdk/task.md#upload_artifact) and specifying the artifact's + name and its path: + + ```python + task.upload_artifact(name='data', artifact_object='/path/to/preprocess_data.csv') + ``` + +1. Upload an **entire folder** with all its content by passing the folder path (the folder will be zipped and uploaded as a single zip file). + + ```python + task.upload_artifact(name='folder', artifact_object='/path/to/folder/') + ``` + +1. Upload an instance of an object. Numpy/Pandas/PIL Images are supported with `npz`/`csv.gz`/`jpg` formats accordingly. + If the object type is unknown, ClearML pickles it and uploads the pickle file. + + ```python + numpy_object = np.eye(100, 100) + task.upload_artifact(name='features', artifact_object=numpy_object) + ``` + +For more artifact logging options, see [Artifacts](../clearml_sdk/task_sdk.md#artifacts). + +### Using Artifacts + +Logged artifacts can be used by other Tasks, whether it's a pre-trained Model or processed data. +To use an artifact, first you have to get an instance of the Task that originally created it, +then you either download it and get its path, or get the artifact object directly. + +For example, using a previously generated preprocessed data. + +```python +preprocess_task = Task.get_task(task_id='preprocessing_task_id') +local_csv = preprocess_task.artifacts['data'].get_local_copy() +``` + +`task.artifacts` is a dictionary where the keys are the artifact names, and the returned object is the artifact object. +Calling `get_local_copy()` returns a local cached copy of the artifact. Therefore, next time you execute the code, you don't +need to download the artifact again. +Calling `get()` gets a deserialized pickled object. + +Check out the [artifacts retrieval](https://github.com/clearml/clearml/blob/master/examples/reporting/artifacts_retrieval.py) example code. + +## Models + +Models are a special kind of artifact. +Models created by popular frameworks (such as PyTorch, TensorFlow, Scikit-learn) are automatically logged by ClearML. +All snapshots are automatically logged. In order to make sure you also automatically upload the model snapshot (instead of saving its local path), +pass a storage location for the model files to be uploaded to. + +For example, upload all snapshots to an S3 bucket: +```python +task = Task.init( + project_name='examples', + task_name='storing model', + output_uri='s3://my_models/' +) +``` + +Now, whenever the framework (TensorFlow/Keras/PyTorch etc.) stores a snapshot, the model file is automatically uploaded to the bucket to a specific folder for the task. + +Loading models by a framework is also logged by the system; these models appear in a task's **Artifacts** tab, +under the "Input Models" section. + +Check out model snapshots examples for [TensorFlow](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorflow/tensorflow_mnist.py), +[PyTorch](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py), +[Keras](https://github.com/clearml/clearml/blob/master/examples/frameworks/keras/keras_tensorboard.py), +[scikit-learn](https://github.com/clearml/clearml/blob/master/examples/frameworks/scikit-learn/sklearn_joblib_example.py). + +### Loading Models +Loading a previously trained model is quite similar to loading artifacts. + +```python +prev_task = Task.get_task(task_id='the_training_task') +last_snapshot = prev_task.models['output'][-1] +local_weights_path = last_snapshot.get_local_copy() +``` + +Like before, you have to get the instance of the task training the original weights files, then you can query the task for its output models (a list of snapshots), and get the latest snapshot. + +:::note +Using TensorFlow, the snapshots are stored in a folder, meaning the `local_weights_path` will point to a folder containing your requested snapshot. +::: + +As with artifacts, all models are cached, meaning the next time you run this code, no model needs to be downloaded. +Once one of the frameworks will load the weights file, the running task will be automatically updated with "Input Model" pointing directly to the original training Task's Model. +This feature lets you easily get a full genealogy of every trained and used model by your system! + diff --git a/docs/getting_started/main.md b/docs/getting_started/main.md index ec2f70fb..12ab7727 100644 --- a/docs/getting_started/main.md +++ b/docs/getting_started/main.md @@ -1,8 +1,4 @@ ---- -id: main -title: What is ClearML? -slug: / ---- +# What is ClearML? ClearML is an open-source, end-to-end AI Platform designed to streamline AI adoption and the entire development lifecycle. It supports every phase of AI development, from research to production, allowing users to @@ -35,20 +31,20 @@ training, and deploying models at every scale on any AI infrastructure. - - + - - + - - + @@ -108,19 +104,20 @@ Want a more in depth introduction to ClearML? Choose where you want to get start ## What Can You Do with ClearML? - [Track and upload](../fundamentals/task.md) metrics and models with only 2 lines of code -- [Reproduce](../webapp/webapp_exp_reproducing.md) experiments with 3 mouse clicks -- [Create bots](../guides/services/slack_alerts.md) that send you Slack messages based on experiment behavior (for example, +- [Reproduce](../webapp/webapp_exp_reproducing.md) tasks with 3 mouse clicks +- [Create bots](../guides/services/slack_alerts.md) that send you Slack messages based on task behavior (for example, alert you whenever your model improves in accuracy) - Manage your [data](../clearml_data/clearml_data.md) - store, track, and version control -- Remotely execute experiments on any compute resource you have available with [ClearML Agent](../clearml_agent.md) +- Remotely execute tasks on any compute resource you have available with [ClearML Agent](../clearml_agent.md) - Automatically scale cloud instances according to your resource needs with ClearML's [AWS Autoscaler](../webapp/applications/apps_aws_autoscaler.md) and [GCP Autoscaler](../webapp/applications/apps_gcp_autoscaler.md) GUI applications -- Run [hyperparameter optimization](../fundamentals/hpo.md) +- Run [hyperparameter optimization](hpo.md) - Build [pipelines](../pipelines/pipelines.md) from code - Much more! -![Webapp gif](../img/gif/webapp_screenshots.gif) +![Webapp gif](../img/gif/webapp_screenshots.gif#light-mode-only) +![Webapp gif](../img/gif/webapp_screenshots_dark.gif#dark-mode-only) ## Who We Are ClearML is supported by you :heart: and the [clear.ml](https://clear.ml) team, which helps enterprise companies build scalable MLOps/LLMOps. diff --git a/docs/getting_started/mlops/mlops_first_steps.md b/docs/getting_started/mlops/mlops_first_steps.md deleted file mode 100644 index b8f60c2b..00000000 --- a/docs/getting_started/mlops/mlops_first_steps.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -title: First Steps ---- - -:::note -This tutorial assumes that you've already [signed up](https://app.clear.ml) to ClearML -::: - -ClearML provides tools for **automation**, **orchestration**, and **tracking**, all key in performing effective MLOps and LLMOps. - -Effective MLOps and LLMOps rely on the ability to scale work beyond one's own computer. Moving from your own machine can be time-consuming. -Even assuming that you have all the drivers and applications installed, you still need to manage multiple python environments -for different packages / package versions, or worse - manage different Dockers for different package versions. - -Not to mention, when working on remote machines, executing experiments, tracking what's running where, and making sure machines -are fully utilized at all times become daunting tasks. - -This can create overhead that derails you from your core work! - -ClearML Agent was designed to deal with such issues and more! It is a tool responsible for executing experiments on remote machines: on-premises or in the cloud! ClearML Agent provides the means to reproduce and track experiments in your -machine of choice through the ClearML WebApp with no need for additional code. - -The agent will set up the environment for a specific Task's execution (inside a Docker, or bare-metal), install the -required python packages, and execute and monitor the process. - - -## Set up an Agent - -1. Install the agent: - - ```bash - pip install clearml-agent - ``` - -1. Connect the agent to the server by [creating credentials](https://app.clear.ml/settings/workspace-configuration), then run this: - - ```bash - clearml-agent init - ``` - - :::note - If you've already created credentials, you can copy-paste the default agent section from [here](https://github.com/allegroai/clearml-agent/blob/master/docs/clearml.conf#L15) (this is optional. If the section is not provided the default values will be used) - ::: - -1. Start the agent's daemon and assign it to a [queue](../../fundamentals/agents_and_queues.md#what-is-a-queue): - - ```bash - clearml-agent daemon --queue default - ``` - - A queue is an ordered list of Tasks that are scheduled for execution. The agent will pull Tasks from its assigned - queue (`default` in this case), and execute them one after the other. Multiple agents can listen to the same queue - (or even multiple queues), but only a single agent will pull a Task to be executed. - -:::tip Agent Deployment Modes -ClearML Agents can be deployed in: -* [Virtual environment mode](../../clearml_agent/clearml_agent_execution_env.md): Agent creates a new venv to execute an experiment. -* [Docker mode](../../clearml_agent/clearml_agent_execution_env.md#docker-mode): Agent executes an experiment inside a -Docker container. - -For more information, see [Running Modes](../../fundamentals/agents_and_queues.md#running-modes). -::: - -## Clone an Experiment -Experiments can be reproduced (cloned) for validation or as a baseline for further experimentation. -Cloning a task duplicates the task's configuration, but not its outputs. - -**To clone an experiment in the ClearML WebApp:** -1. Click on any project card to open its [experiments table](../../webapp/webapp_exp_table.md). -1. Right-click one of the experiments on the table. -1. Click **Clone** in the context menu, which will open a **CLONE EXPERIMENT** window. -1. Click **CLONE** in the window. - -The newly cloned experiment will appear and its info panel will slide open. The cloned experiment is in draft mode, so -it can be modified. You can edit the Git / code references, control the python packages to be installed, specify the -Docker container image to be used, or change the hyperparameters and configuration files. See [Modifying Experiments](../../webapp/webapp_exp_tuning.md#modifying-experiments) for more information about editing experiments in the UI. - -## Enqueue an Experiment -Once you have set up an experiment, it is now time to execute it. - -**To execute an experiment through the ClearML WebApp:** -1. Right-click your draft experiment (the context menu is also available through the Menu - button on the top right of the experiment's info panel) -1. Click **ENQUEUE,** which will open the **ENQUEUE EXPERIMENT** window -1. In the window, select `default` in the queue menu -1. Click **ENQUEUE** - -This action pushes the experiment into the `default` queue. The experiment's status becomes *Pending* until an agent -assigned to the queue fetches it, at which time the experiment's status becomes *Running*. The agent executes the -experiment, and the experiment can be [tracked and its results visualized](../../webapp/webapp_exp_track_visual.md). - - -## Programmatic Interface - -The cloning, modifying, and enqueuing actions described above can also be performed programmatically. - -### First Steps -#### Access Previously Executed Experiments -All Tasks in the system can be accessed through their unique Task ID, or based on their properties using the [`Task.get_task`](../../references/sdk/task.md#taskget_task) -method. For example: -```python -from clearml import Task - -executed_task = Task.get_task(task_id='aabbcc') -``` - -Once a specific Task object has been obtained, it can be cloned, modified, and more. See [Advanced Usage](#advanced-usage). - -#### Clone an Experiment - -To duplicate an experiment, use the [`Task.clone`](../../references/sdk/task.md#taskclone) method, and input either a -Task object or the Task's ID as the `source_task` argument. -```python -cloned_task = Task.clone(source_task=executed_task) -``` - -#### Enqueue an Experiment -To enqueue the task, use the [`Task.enqueue`](../../references/sdk/task.md#taskenqueue) method, and input the Task object -with the `task` argument, and the queue to push the task into with `queue_name`. - -```python -Task.enqueue(task=cloned_task, queue_name='default') -``` - -### Advanced Usage -Before execution, use a variety of programmatic methods to manipulate a task object. - -#### Modify Hyperparameters -[Hyperparameters](../../fundamentals/hyperparameters.md) are an integral part of Machine Learning code as they let you -control the code without directly modifying it. Hyperparameters can be added from anywhere in your code, and ClearML supports multiple ways to obtain them! - -Users can programmatically change cloned experiments' parameters. - -For example: -```python -from clearml import Task - -cloned_task = Task.clone(task_id='aabbcc') -cloned_task.set_parameter(name='internal/magic', value=42) -``` - -#### Report Artifacts -Artifacts are files created by your task. Users can upload [multiple types of data](../../clearml_sdk/task_sdk.md#logging-artifacts), -objects and files to a task anywhere from code. - -```python -import numpy as np -from clearml import Task - -Task.current_task().upload_artifact(name='a_file', artifact_object='local_file.bin') -Task.current_task().upload_artifact(name='numpy', artifact_object=np.ones(4,4)) -``` - -Artifacts serve as a great way to pass and reuse data between tasks. Artifacts can be [retrieved](../../clearml_sdk/task_sdk.md#using-artifacts) -by accessing the Task that created them. These artifacts can be modified and uploaded to other tasks. - -```python -from clearml import Task - -executed_task = Task.get_task(task_id='aabbcc') -# artifact as a file -local_file = executed_task.artifacts['file'].get_local_copy() -# artifact as object -a_numpy = executed_task.artifacts['numpy'].get() -``` - -By facilitating the communication of complex objects between tasks, artifacts serve as the foundation of ClearML's [Data Management](../../clearml_data/clearml_data.md) -and [pipeline](../../pipelines/pipelines.md) solutions. - -#### Log Models -Logging models into the model repository is the easiest way to integrate the development process directly with production. -Any model stored by a supported framework (Keras / TensorFlow / PyTorch / Joblib etc.) will be automatically logged into ClearML. - -ClearML also supports methods to explicitly log models. Models can be automatically stored on a preferred storage medium -(S3 bucket, Google storage, etc.). - -#### Log Metrics -Log as many metrics as you want from your processes using the [Logger](../../fundamentals/logger.md) module. This -improves the visibility of your processes' progress. - -```python -from clearml import Logger - -Logger.current_logger().report_scalar( - graph='metric', - series='variant', - value=13.37, - iteration=counter -) -``` - -You can also retrieve reported scalars for programmatic analysis: -```python -from clearml import Task - -executed_task = Task.get_task(task_id='aabbcc') -# get a summary of the min/max/last value of all reported scalars -min_max_values = executed_task.get_last_scalar_metrics() -# get detailed graphs of all scalars -full_scalars = executed_task.get_reported_scalars() -``` - -#### Query Experiments -You can also search and query Tasks in the system. Use the [`Task.get_tasks`](../../references/sdk/task.md#taskget_tasks) -class method to retrieve Task objects and filter based on the specific values of the Task - status, parameters, metrics and more! - -```python -from clearml import Task - -tasks = Task.get_tasks( - project_name='examples', - task_name='partial_name_match', - task_filter={'status': 'in_progress'} -) -``` - -#### Manage Your Data -Data is probably one of the biggest factors that determines the success of a project. Associating a model's data with -the model's configuration, code, and results (such as accuracy) is key to deducing meaningful insights into model behavior. - -[ClearML Data](../../clearml_data/clearml_data.md) lets you version your data, so it's never lost, fetch it from every -machine with minimal code changes, and associate data to experiment results. - -Logging data can be done via command line, or programmatically. If any preprocessing code is involved, ClearML logs it -as well! Once data is logged, it can be used by other experiments. diff --git a/docs/getting_started/mlops/mlops_second_steps.md b/docs/getting_started/mlops/mlops_second_steps.md deleted file mode 100644 index aa56772b..00000000 --- a/docs/getting_started/mlops/mlops_second_steps.md +++ /dev/null @@ -1,121 +0,0 @@ ---- -title: Next Steps ---- - -Once Tasks are defined and in the ClearML system, they can be chained together to create Pipelines. -Pipelines provide users with a greater level of abstraction and automation, with Tasks running one after the other. - -Tasks can interface with other Tasks in the pipeline and leverage other Tasks' work products. - -The sections below describe the following scenarios: -* [Dataset creation](#dataset-creation) -* Data [processing](#preprocessing-data) and [consumption](#training) -* [Pipeline building](#building-the-pipeline) - - -## Building Tasks -### Dataset Creation - -Let's assume you have some code that extracts data from a production database into a local folder. -Your goal is to create an immutable copy of the data to be used by further steps: - -```bash -clearml-data create --project data --name dataset -clearml-data sync --folder ./from_production -``` - -You can add a tag `latest` to the Dataset, marking it as the latest version. - -### Preprocessing Data -The second step is to preprocess the data. First access the data, then modify it, -and lastly create a new version of the data. - -```python -from clearml import Task, Dataset - -# create a task for the data processing part -task = Task.init(project_name='data', task_name='create', task_type='data_processing') - -# get the v1 dataset -dataset = Dataset.get(dataset_project='data', dataset_name='dataset_v1') - -# get a local mutable copy of the dataset -dataset_folder = dataset.get_mutable_local_copy( - target_folder='work_dataset', - overwrite=True -) -# change some files in the `./work_dataset` folder - -# create a new version of the dataset with the pickle file -new_dataset = Dataset.create( - dataset_project='data', - dataset_name='dataset_v2', - parent_datasets=[dataset], - # this will make sure we have the creation code and the actual dataset artifacts on the same Task - use_current_task=True, -) -new_dataset.sync_folder(local_path=dataset_folder) -new_dataset.upload() -new_dataset.finalize() -# now let's remove the previous dataset tag -dataset.tags = [] -new_dataset.tags = ['latest'] -``` - -The new dataset inherits the contents of the datasets specified in `Dataset.create`'s `parent_datasets` argument. -This not only helps trace back dataset changes with full genealogy, but also makes the storage more efficient, -since it only stores the changed and/or added files from the parent versions. -When you access the Dataset, it automatically merges the files from all parent versions -in a fully automatic and transparent process, as if the files were always part of the requested Dataset. - -### Training -You can now train your model with the **latest** Dataset you have in the system, by getting the instance of the Dataset -based on the `latest` tag -(if by any chance you have two Datasets with the same tag you will get the newest). -Once you have the dataset you can request a local copy of the data. All local copy requests are cached, -which means that if you access the same dataset multiple times you will not have any unnecessary downloads. - -```python -# create a task for the model training -task = Task.init(project_name='data', task_name='ingest', task_type='training') - -# get the latest dataset with the tag `latest` -dataset = Dataset.get(dataset_tags='latest') - -# get a cached copy of the Dataset files -dataset_folder = dataset.get_local_copy() - -# train our model here -``` - -## Building the Pipeline - -Now that you have the data creation step, and the data training step, create a pipeline that when executed, -will first run the first and then run the second. -It is important to remember that pipelines are Tasks by themselves and can also be automated by other pipelines (i.e. pipelines of pipelines). - -```python -from clearml import PipelineController - -pipe = PipelineController( - project='data', - name='pipeline demo', - version="1.0" -) - -pipe.add_step( - name='step 1 data', - base_project_name='data', - base_task_name='create' -) -pipe.add_step( - name='step 2 train', - parents=['step 1 data', ], - base_project_name='data', - base_task_name='ingest' -) -``` - -You can also pass the parameters from one step to the other (for example `Task.id`). -In addition to pipelines made up of Task steps, ClearML also supports pipelines consisting of function steps. For more -information, see the [full pipeline documentation](../../pipelines/pipelines.md). diff --git a/docs/getting_started/project_progress.md b/docs/getting_started/project_progress.md new file mode 100644 index 00000000..1c534e47 --- /dev/null +++ b/docs/getting_started/project_progress.md @@ -0,0 +1,62 @@ +--- +title: Monitoring Project Progress +--- + +ClearML provides a comprehensive set of monitoring tools to help effectively track and manage machine learning projects. +These tools offer both high-level overviews and detailed insights into task execution, resource +utilization, and project performance. + + +## Project Overview + +A project's **OVERVIEW** tab in the UI presents a general picture of a project: +* Metric Snapshot – A graphical representation of selected metric values across project tasks, offering a quick assessment of progress. +* Task Status Tracking – When a single metric variant is selected for the snapshot, task status is color-coded (e.g., +Completed, Aborted, Published, Failed) for better visibility. + +Use the Metric Snapshot to track project progress and identify trends in task performance. + +For more information, see [Project Overview](../webapp/webapp_project_overview.md). + +![Project Overview](../img/webapp_project_overview.png#light-mode-only) +![Project Overview](../img/webapp_project_overview_dark.png#dark-mode-only) + +## Project Dashboard + +:::info Pro Plan Offering +The Project Dashboard app is available under the ClearML Pro plan. +::: + +The [**Project Dashboard**](../webapp/applications/apps_dashboard.md) UI application provides a centralized +view of project progress, task statuses, resource usage, and key performance metrics. It offers: +* Comprehensive insights: + * Track task statuses and trends over time. + * Monitor GPU utilization and worker activity. + * Analyze performance metrics. +* Proactive alerts - By integrating with Slack, the Dashboard can notify teams of task failures + and completions. + +For more information, see [Project Dashboard](../webapp/applications/apps_dashboard.md). + +![Project Dashboard](../img/apps_dashboard.png#light-mode-only) +![Project Dashboard](../img/apps_dashboard_dark.png#dark-mode-only) + +## Task Monitoring + +ClearML provides task monitoring capabilities through the [`clearml.automation.Monitor`](https://github.com/clearml/clearml/blob/master/clearml/automation/monitor.py) +class. With this class you can implement monitoring workflows such as: + +* Send notifications via Slack or other channels +* Trigger automated responses based on specific task conditions + +For a practical example, see the [Slack Alerts Example](../guides/services/slack_alerts.md), which demonstrates how to: + +* Track task status (completion, failure, etc.) +* Send notifications to a specified Slack channel +* Retrieve task details such as status, console logs, and links to the ClearML Web UI + +You can also configure filters for task types and projects to reduce unnecessary notifications. + +![Slack Alerts](../img/examples_slack_alerts.png#light-mode-only) +![Slack Alerts](../img/examples_slack_alerts_dark.png#dark-mode-only) + diff --git a/docs/getting_started/remote_execution.md b/docs/getting_started/remote_execution.md new file mode 100644 index 00000000..dbb98ce6 --- /dev/null +++ b/docs/getting_started/remote_execution.md @@ -0,0 +1,84 @@ +--- +title: Remote Execution +--- + +:::note +This guide assumes that you've already set up [ClearML](../clearml_sdk/clearml_sdk_setup.md) and [ClearML Agent](../clearml_agent/clearml_agent_setup.md). +::: + +ClearML Agent enables seamless remote execution by offloading computations from a local development environment to a more +powerful remote machine. This is useful for: + +* Running initial process (a task or function) locally before scaling up. +* Offloading resource-intensive tasks to dedicated compute nodes. +* Managing execution through ClearML's queue system. + +This guide focuses on transitioning a locally executed process to a remote machine for scalable execution. To learn how +to reproduce a previously executed process on a remote machine, see [Reproducing Task Runs](reproduce_tasks.md). + +## Running a Task Remotely + +A compelling workflow is: + +1. Run code on a development machine for a few iterations, or just set up the environment. +1. Move the execution to a beefier remote machine for the actual training. + +Use [`Task.execute_remotely()`](../references/sdk/task.md#execute_remotely) to implement this workflow. This method stops the current manual execution, and then +re-runs it on a remote machine. + +1. Deploy a `clearml-agent` from your beefier remote machine and assign it to the `default` queue: + + ```commandline + clearml-agent daemon --queue default + ``` + +1. Run the local code to send to the remote machine for execution: + + ```python + from clearml import Task + + task = Task.init(project_name="myProject", task_name="myTask") + + # training code + + task.execute_remotely( + queue_name='default', + clone=False, + exit_process=True + ) + ``` + +Once `execute_remotely()` is called on the machine, it stops the local process and enqueues the current task into the `default` +queue. From there, an agent assigned to the queue can pull and launch it. + +## Running a Function Remotely + +You can execute a specific function remotely using [`Task.create_function_task()`](../references/sdk/task.md#create_function_task). +This method creates a ClearML Task from a Python function and runs it on a remote machine. + +For example: + +```python +from clearml import Task + +task = Task.init(project_name="myProject", task_name="Remote function") + +def run_me_remotely(some_argument): + print(some_argument) + +a_func_task = task.create_function_task( + func=run_me_remotely, + func_name='func_id_run_me_remotely', + task_name='a func task', + # everything below will be passed directly to our function as arguments + some_argument=123 +) +``` + +:::important Function Task Creation +Function tasks must be created from within a regular task, created by calling `Task.init` +::: + +Arguments passed to the function will be automatically logged in the task's **CONFIGURATION** tab under the **HYPERPARAMETERS > Function section**. +Like any other arguments, they can be changed from the UI or programmatically. + diff --git a/docs/getting_started/reproduce_tasks.md b/docs/getting_started/reproduce_tasks.md new file mode 100644 index 00000000..4f73077b --- /dev/null +++ b/docs/getting_started/reproduce_tasks.md @@ -0,0 +1,82 @@ +--- +title: Reproducing Task Runs +--- + +:::note +This tutorial assumes that you've already set up [ClearML](../clearml_sdk/clearml_sdk_setup.md) and [ClearML Agent](../clearml_agent/clearml_agent_setup.md). +::: + +Tasks can be reproduced--or **Cloned**--for validation or as a baseline for further experimentation. When you initialize a task in your +code, ClearML logs everything needed to reproduce your task and its environment: +* Uncommitted changes +* Used packages and their versions +* Parameters +* and more + +Cloning a task duplicates the task's configuration, but not its outputs. + +ClearML offers two ways to clone your task: +* [Via the WebApp](#via-the-webapp)--no further code required +* [Via programmatic interface](#via-programmatic-interface) using the `clearml` Python package + +Once you have cloned your task, you can modify its setup, and then execute it remotely on a machine of your choice using a ClearML Agent. + +## Via the WebApp + +**To clone a task in the ClearML WebApp:** +1. Click on any project card to open its [task table](../webapp/webapp_exp_table.md). +1. Right-click the task you want to reproduce. +1. Click **Clone** in the context menu, which will open a **CLONE TASK** window. +1. Click **CLONE** in the window. + +The newly cloned task's details page will open up. The cloned task is in *draft* mode, which means +it can be modified. You can edit any of the Task's setup details, including: +* Git and/or code references +* Python packages to be installed +* Container image to be used + +You can adjust the values of the task's hyperparameters and configuration files. See [Modifying Tasks](../webapp/webapp_exp_tuning.md#modifying-tasks) for more +information about editing tasks in the UI. + +### Enqueue a Task +Once you have set up a task, it is now time to execute it. + +**To execute a task through the ClearML WebApp:** +1. In the task's details page, click "Menu" Menu +1. Click **ENQUEUE** to open the **ENQUEUE TASK** window +1. In the window, select `default` in the `Queue` menu +1. Click **ENQUEUE** + +This action pushes the task into the `default` queue. The task's status becomes *Pending* until an agent +assigned to the queue fetches it, at which time the task's status becomes *Running*. The agent executes the +task, and the task can be [tracked and its results visualized](../webapp/webapp_exp_track_visual.md). + + +## Via Programmatic Interface + +The cloning, modifying, and enqueuing actions described above can also be performed programmatically using `clearml`. + + +### Clone the Task + +To duplicate the task, use [`Task.clone()`](../references/sdk/task.md#taskclone), and input either a +Task object or the Task's ID as the `source_task` argument. + +```python +cloned_task = Task.clone(source_task='qw03485je3hap903ere54') +``` + +The cloned task is in *draft* mode, which means it can be modified. For modification options, such as setting new parameter +values, see [Task SDK](../clearml_sdk/task_sdk.md). + +### Enqueue the Task +To enqueue the task, use [`Task.enqueue()`](../references/sdk/task.md#taskenqueue), and input the Task object +with the `task` argument, and the queue to push the task into with `queue_name`. + +```python +Task.enqueue(task=cloned_task, queue_name='default') +``` + +This action pushes the task into the `default` queue. The task's status becomes *Pending* until an agent +assigned to the queue fetches it, at which time the task's status becomes *Running*. The agent executes the +task, and the task can be [tracked and its results visualized](../webapp/webapp_exp_track_visual.md). \ No newline at end of file diff --git a/docs/getting_started/task_trigger_schedule.md b/docs/getting_started/task_trigger_schedule.md new file mode 100644 index 00000000..f1822e22 --- /dev/null +++ b/docs/getting_started/task_trigger_schedule.md @@ -0,0 +1,41 @@ +--- +title: Scheduling and Triggering Task Execution +--- + + In ClearML, tasks can be scheduled and triggered automatically, enabling seamless workflow automation. This section + provides an overview of the mechanisms available for managing task scheduling and event-based + triggering. + +## Task Scheduling +Task scheduling allows users to define one-shot or periodic executions at specified times and intervals. This +is useful for: + +* Running routine operations such as periodic model training, evaluation jobs, backups, and reports. +* Automating data ingestion and preprocessing workflows. +* Ensuring regular execution of monitoring and reporting tasks. + +ClearML's offers the following scheduling solutions: +* [**UI Application**](../webapp/applications/apps_task_scheduler.md) (available under the Enterprise Plan) - The **Task Scheduler** app + provides a simple no-code interface for managing task schedules. + +* [**Python Interface**](../references/sdk/scheduler.md) - Use the `TaskScheduler` class to programmatically manage + task schedules. + +## Task Execution Triggering + +ClearML's trigger manager enables you to automate task execution based on event occurence in the ClearML system, such as: +* Changes in task status (e.g. running, completed, etc.) +* Publication, archiving, or tagging of tasks, models, or datasets +* Task metrics crossing predefined thresholds + +This is useful for: +* Triggering a training task when a dataset has been tagged as `latest` or any other tag +* Running an inference task when a model has been published +* Retraining a model when accuracy falls below a certain threshold +* And more + +ClearML's offers the following trigger management solutions: +* [**UI Application**](../webapp/applications/apps_trigger_manager.md) (available under the Enterprise Plan) - The **Trigger Manager** app + provides a simple no-code interface for managing task triggers . +* [**Python Interface**](../references/sdk/trigger.md) - Use the `TriggerScheduler` class to programmatically manage + task triggers. diff --git a/docs/getting_started/track_tasks.md b/docs/getting_started/track_tasks.md new file mode 100644 index 00000000..0b8223f6 --- /dev/null +++ b/docs/getting_started/track_tasks.md @@ -0,0 +1,46 @@ +--- +title: Tracking Tasks +--- + +Every ClearML [task](../fundamentals/task.md) you create can be found in the **All Tasks** table and in its project's +task table. + +The task table is a powerful tool for creating dashboards and views of your own projects, your team's projects, or the +entire development. + +![Task table](../img/webapp_experiment_table.png#light-mode-only) +![Task table](../img/webapp_experiment_table_dark.png#dark-mode-only) + +Customize the [task table](../webapp/webapp_exp_table.md) to fit your own needs by adding views of parameters, metrics, and tags. +Filter and sort based on various criteria, such as parameters and metrics, making it simple to create custom +views. This allows you to: + +* Create a dashboard for a project, presenting the latest model accuracy scores, for immediate insights. +* Create a live leaderboard displaying the best-performing tasks, updated in real time +* Monitor a projects' progress and share it across the organization. + +## Creating Leaderboards + +To create a leaderboard: + +1. Select a project in the ClearML WebApp and go to its task table +1. Customize the column selection. Click "Settings" Setting Gear + to view and select columns to display. +1. Filter tasks by name using the search bar to find tasks containing any search term +1. Filter by other categories by clicking "Filter" Filter + on the relevant column. There are a few types of filters: + * Value set - Choose which values to include from a list of all values in the column + * Numerical ranges - Insert minimum and/or maximum value + * Date ranges - Insert starting and/or ending date and time + * Tags - Choose which tags to filter by from a list of all tags used in the column. + * Filter by multiple tag values using the **ANY** or **ALL** options, which correspond to the logical "AND" and "OR" respectively. These + options appear on the top of the tag list. + * Filter by the absence of a tag (logical "NOT") by clicking its checkbox twice. An `X` will appear in the tag's checkbox. +1. Enable auto-refresh for real-time monitoring + +For more detailed instructions, see the [Tracking Leaderboards Tutorial](../guides/ui/building_leader_board.md). + +## Sharing Leaderboards + +Bookmark the URL of your customized leaderboard to save and share your view. The URL contains all parameters and values +for your specific leaderboard view. \ No newline at end of file diff --git a/docs/getting_started/video_tutorials/agent_remote_execution_and_automation.md b/docs/getting_started/video_tutorials/agent_remote_execution_and_automation.md index cd10257a..345024c9 100644 --- a/docs/getting_started/video_tutorials/agent_remote_execution_and_automation.md +++ b/docs/getting_started/video_tutorials/agent_remote_execution_and_automation.md @@ -36,13 +36,13 @@ The most important difference is that you’ll also be asked for your git inform Before we run the agent though, let's take a quick look at what will happen when we spin it up. -Our server hosts one or more queues in which we can put our tasks. And then we have our agent. By default, it will be running in pip mode, or virtual environment mode. Once an agent pulls a new task from the queue to be executed, it will create a new python virtual environment for it. It will then clone the code itself and install all required python packages in the new virtual environment. It then runs the code and injects any new hyperparameters we changed in the UI. +Our server hosts one or more queues in which we can put our tasks. And then we have our agent. By default, it will be running in pip mode, or virtual environment mode. Once an agent pulls a new task from the queue to be executed, it will create a new Python virtual environment for it. It will then clone the code itself and install all required Python packages in the new virtual environment. It then runs the code and injects any new hyperparameters we changed in the UI. -PIP mode is really handy and efficient. It will create a new python virtual environment for every task it pulls and will use smart caching so packages or even whole environments can be reused over multiple tasks. +PIP mode is really handy and efficient. It will create a new Python virtual environment for every task it pulls and will use smart caching so packages or even whole environments can be reused over multiple tasks. You can also run the agent in conda mode or poetry mode, which essentially do the same thing as pip mode, only with a conda or poetry environment instead. -However, there’s also docker mode. In this case the agent will run every incoming task in its own docker container instead of just a virtual environment. This makes things much easier if your tasks have system package dependencies for example, or when not every task uses the same python version. For our example, we’ll be using docker mode. +However, there’s also docker mode. In this case the agent will run every incoming task in its own docker container instead of just a virtual environment. This makes things much easier if your tasks have system package dependencies for example, or when not every task uses the same Python version. For our example, we’ll be using docker mode. Now that our configuration is ready, we can start our agent in docker mode by running the command `clearml-agent daemon –docker`. diff --git a/docs/getting_started/video_tutorials/clearml-data.md b/docs/getting_started/video_tutorials/clearml-data.md index da921598..bdc3e539 100644 --- a/docs/getting_started/video_tutorials/clearml-data.md +++ b/docs/getting_started/video_tutorials/clearml-data.md @@ -20,13 +20,13 @@ keywords: [mlops, components, ClearML data]
-Hello and welcome to ClearML. In this video we'll take a look at both the command line and python interfaces of our data versioning tool called `clearml-data`. +Hello and welcome to ClearML. In this video we'll take a look at both the command line and Python interfaces of our data versioning tool called `clearml-data`. In the world of machine learning, you are very likely dealing with large amounts of data that you need to put into a dataset. ClearML Data solves 2 important challenges that occur in this situation: One is accessibility, making sure the data can be accessed from every machine you use. And two is versioning, linking which dataset version was used in which task. This helps to make experiments more reproducible. Moreover, versioning systems like git were never really designed for the size and number of files in machine learning datasets. We're going to need something else. -ClearML Data comes built-in with the `clearml` python package and has both a command line interface for easy and quick operations and a python interface if you want more flexibility. Both interfaces are quite similar, so we'll address both of them in the video. +ClearML Data comes built-in with the `clearml` Python package and has both a command line interface for easy and quick operations and a Python interface if you want more flexibility. Both interfaces are quite similar, so we'll address both of them in the video. Let's start with an example. Say I have some files here that I want to put into a dataset and start to keep track of. @@ -36,13 +36,13 @@ We can do that by using the `clearml-data add` command and providing the path to Now we need to tell the server that we're done here. We can call `clearml-data close` to upload the files and change the dataset status to done, which finalizes this version of the dataset. -The process of doing this with the python interface is very similar. +The process of doing this with the Python interface is very similar. You can create a new Dataset by importing the Dataset object from the `clearml` pip package and calling its `create` method. Now we have to give the dataset a name and a project just like with the command line tool. The create method returns a dataset instance which we will use to do all of our operations on. To add some files to this newly created dataset version, call the `add_files` method on the dataset object and provide a path to a local file or folder. Bear in mind that nothing is uploaded just yet, we're simply instructing the dataset object what it should do when we eventually *do* want to upload. -A really useful thing we can do with the python interface is adding some interesting statistics about the dataset itself, such as a plot for example. Here we simply report a histogram on the amount of files in the train and test folders. You can add anything to a dataset that you can add to a ClearML task, so go nuts! +A really useful thing we can do with the Python interface is adding some interesting statistics about the dataset itself, such as a plot for example. Here we simply report a histogram on the amount of files in the train and test folders. You can add anything to a dataset that you can add to a ClearML task, so go nuts! Finally, upload the dataset and then finalize it, or just set `auto_upload` to `true` to make it a one-liner. @@ -56,7 +56,7 @@ Using the command line tool, you can download a dataset version locally by using That path will be a local cached folder, which means that if you try to get the same dataset again, or any other dataset that's based on this one, it will check which files are already on your system, and it will not download these again. -The python interface is similar, with one major difference. You can also get a dataset using any combination of name, project, ID or tags, but _getting_ the dataset does not mean it is downloaded, we simply got all of the metadata, which we can now access from the dataset object. This is important, as it means you don't have to download the dataset to make changes to it, or to add files. More on that in just a moment. +The Python interface is similar, with one major difference. You can also get a dataset using any combination of name, project, ID or tags, but _getting_ the dataset does not mean it is downloaded, we simply got all of the metadata, which we can now access from the dataset object. This is important, as it means you don't have to download the dataset to make changes to it, or to add files. More on that in just a moment. If you do want to download a local copy of the dataset, it has to be done explicitly, by calling `get_local_copy` which will return the path to which the data was downloaded for you. @@ -70,7 +70,7 @@ Let's say we found an issue with the hamburgers here, so we remove them from the Now we can tell ClearML that the changes we made to this folder should become a new version of the previous dataset. We start by creating a new dataset just like we saw before, but now, we add the previous dataset ID as a parent. This tells ClearML that this new dataset version we're creating is based on the previous one and so our dataset object here will already contain all the files that the parent contained. -Now we can manually remove and add the files that we want, even without actually downloading the dataset. It will just change the metadata inside the python object and sync everything when it's finalized. +Now we can manually remove and add the files that we want, even without actually downloading the dataset. It will just change the metadata inside the Python object and sync everything when it's finalized. That said, we do have a local copy of the dataset in this case, so we have a better option. diff --git a/docs/getting_started/video_tutorials/core_component_overview.md b/docs/getting_started/video_tutorials/core_component_overview.md index 3a21eea8..8b51a83f 100644 --- a/docs/getting_started/video_tutorials/core_component_overview.md +++ b/docs/getting_started/video_tutorials/core_component_overview.md @@ -25,13 +25,13 @@ ClearML is designed to get you up and running in less than 10 minutes and 2 magi At the heart of ClearML lies the experiment manager. It consists of the `clearml` pip package and the ClearML Server. -After running `pip install clearml` we can add 2 simple lines of python code to your existing codebase. These 2 lines will capture all the output that your code produces: logs, source code, hyperparameters, plots, images, you name it. +After running `pip install clearml` we can add 2 simple lines of Python code to your existing codebase. These 2 lines will capture all the output that your code produces: logs, source code, hyperparameters, plots, images, you name it. The pip package also includes `clearml-data`. It can help you keep track of your ever-changing datasets and provides an easy way to store, track and version control your data. It's also an easy way to share your dataset with colleagues over multiple machines while keeping track of who has which version. ClearML Data can even keep track of your data's ancestry, making sure you can always figure out where specific parts of your data came from. Both the 2 magic lines and the data tool will send all of their information to a ClearML server. This server then keeps an overview of your experiment runs and data sets over time, so you can always go back to a previous experiment, see how it was created and even recreate it exactly. Keep track of your best models by creating leaderboards based on your own metrics, and you can even directly compare multiple experiment runs, helping you to figure out the best way forward for your models. -To get started with a server right away, you can make use of the free tier. And when your needs grow, we've got you covered too! Just check out our website to find a tier that fits your organisation best. But, because we're open source, you can also host your own completely for free. We have AWS images, Google Cloud images, you can run it on docker-compose locally or even, if you really hate yourself, run it on a self-hosted kubernetes cluster using our helm charts. +To get started with a server right away, you can make use of the free tier. And when your needs grow, we've got you covered too! Just check out our website to find a tier that fits your organisation best. But, because we're open source, you can also host your own completely for free. We have AWS images, Google Cloud images, you can run it on `docker-compose` locally or even, if you really hate yourself, run it on a self-hosted kubernetes cluster using our helm charts. So, to recap: to get started, all you need is a pip package and a server to store everything. Easy right? But MLOps is much more than experiment and data management. It's also about automation and orchestration, which is exactly where the `clearml-agent` comes into play. diff --git a/docs/getting_started/video_tutorials/experiment_manager_hands-on.md b/docs/getting_started/video_tutorials/experiment_manager_hands-on.md index 83839d0e..f830a495 100644 --- a/docs/getting_started/video_tutorials/experiment_manager_hands-on.md +++ b/docs/getting_started/video_tutorials/experiment_manager_hands-on.md @@ -26,7 +26,7 @@ This is the experiment manager's UI, and every row you can see here, is a single We’re currently in our project folder. As you can see, we have our very basic toy example here that we want to keep track of by using ClearML’s experiment manager. -The first thing to do is to install the `clearml` python package in our virtual environment. Installing the package itself, will add 3 commands for you. We’ll cover the `clearml-data` and `clearml-task` commands later. For now the one we need is `clearml-init`. +The first thing to do is to install the `clearml` Python package in our virtual environment. Installing the package itself, will add 3 commands for you. We’ll cover the `clearml-data` and `clearml-task` commands later. For now the one we need is `clearml-init`. If you paid attention in the first video of this series, you’d remember that we need to connect to a ClearML Server to save all our tracked data. The server is where we saw the list of experiments earlier. This connection is what `clearml-init` will set up for us. When running the command it’ll ask for your server API credentials. diff --git a/docs/getting_started/video_tutorials/hyperparameter_optimization.md b/docs/getting_started/video_tutorials/hyperparameter_optimization.md index b255a9fd..aac7512b 100644 --- a/docs/getting_started/video_tutorials/hyperparameter_optimization.md +++ b/docs/getting_started/video_tutorials/hyperparameter_optimization.md @@ -36,7 +36,7 @@ We can see that no code was used to log the scalar. It's done automatically beca We are using a training script as our task in our example here, but the optimizer doesn’t actually care what’s in our task, it just wants inputs and outputs. So you can optimize basically anything you want. -The only thing we have to do to start optimizing this model is to write a small python file detailing what exactly we want our optimizer to do. +The only thing we have to do to start optimizing this model is to write a small Python file detailing what exactly we want our optimizer to do. When you’re a ClearML Pro user, you can just start the optimizer straight from the UI, but more on that later. diff --git a/docs/getting_started/video_tutorials/pipelines_from_code.md b/docs/getting_started/video_tutorials/pipelines_from_code.md index 6743c576..d4b08e2b 100644 --- a/docs/getting_started/video_tutorials/pipelines_from_code.md +++ b/docs/getting_started/video_tutorials/pipelines_from_code.md @@ -34,7 +34,7 @@ One is you can easily chain existing ClearML tasks together to create a single p Let's say we have some functions that we already use to run ETL and another function that trains a model on the preprocessed data. We already have a main function too, that orchestrates when and how these other components should be run. -If we want to make this code into a pipeline, the first thing we have to do is to tell ClearML that these functions are supposed to become steps in our pipeline. We can do that by using a python decorator! For each function we want as a step, we can decorate it with `PipelineDecorator.component`. +If we want to make this code into a pipeline, the first thing we have to do is to tell ClearML that these functions are supposed to become steps in our pipeline. We can do that by using a Python decorator! For each function we want as a step, we can decorate it with `PipelineDecorator.component`. The component call will fully automatically transform this function into a ClearML task, with all the benefits that come with that. It will also make it clear that this task will be part of a larger pipeline. diff --git a/docs/getting_started/video_tutorials/quick_introduction.md b/docs/getting_started/video_tutorials/quick_introduction.md index 7777f80f..b6028dc3 100644 --- a/docs/getting_started/video_tutorials/quick_introduction.md +++ b/docs/getting_started/video_tutorials/quick_introduction.md @@ -32,6 +32,6 @@ It's essentially a toolbox stuffed with everything you'll need to go from experi Doesn't matter if you're starting small or already in production, there's always a ClearML tool that can make your life easier. -Start for free at [app.clear.ml](https://app.clear.ml) or host your own server from our [GitHub page](https://github.com/allegroai/clearml-server). +Start for free at [app.clear.ml](https://app.clear.ml) or host your own server from our [GitHub page](https://github.com/clearml/clearml-server). diff --git a/docs/guides/advanced/execute_remotely.md b/docs/guides/advanced/execute_remotely.md index aaa77375..171dffb4 100644 --- a/docs/guides/advanced/execute_remotely.md +++ b/docs/guides/advanced/execute_remotely.md @@ -2,7 +2,7 @@ title: Remote Execution --- -The [execute_remotely_example](https://github.com/allegroai/clearml/blob/master/examples/advanced/execute_remotely_example.py) +The [execute_remotely_example](https://github.com/clearml/clearml/blob/master/examples/advanced/execute_remotely_example.py) script demonstrates the use of the [`Task.execute_remotely()`](../../references/sdk/task.md#execute_remotely) method. :::note @@ -28,7 +28,7 @@ moved to be executed by a stronger machine. During the execution of the example script, the code does the following: * Uses ClearML's automatic and explicit logging. -* Creates an experiment named `Remote_execution PyTorch MNIST train` in the `examples` project. +* Creates an task named `Remote_execution PyTorch MNIST train` in the `examples` project. ## Scalars @@ -55,26 +55,30 @@ Logger.current_logger().report_scalar( ) ``` -These scalars can be visualized in plots, which appear in the ClearML web UI, in the experiment's **SCALARS** tab. +These scalars can be visualized in plots, which appear in the ClearML web UI, in the task's **SCALARS** tab. -![Experiment Scalars](../../img/examples_pytorch_mnist_07.png) +![Task Scalars](../../img/examples_pytorch_mnist_07.png#light-mode-only) +![Task Scalars](../../img/examples_pytorch_mnist_07_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs command line options defined with `argparse`. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **Args**. -![Experiment hyperparameters](../../img/examples_pytorch_mnist_01.png) +![Task hyperparameters](../../img/examples_pytorch_mnist_01.png#light-mode-only) +![Task hyperparameters](../../img/examples_pytorch_mnist_01_dark.png#dark-mode-only) ## Console Text printed to the console for training progress, as well as all other console output, appear in **CONSOLE**. -![Experiment console log](../../img/examples_pytorch_mnist_06.png) +![Task console log](../../img/examples_pytorch_mnist_06.png#light-mode-only) +![Task console log](../../img/examples_pytorch_mnist_06_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks models +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using PyTorch. -![Experiment artifacts](../../img/examples_remote_execution_artifacts.png) +![Task artifacts](../../img/examples_remote_execution_artifacts.png#light-mode-only) +![Task artifacts](../../img/examples_remote_execution_artifacts_dark.png#dark-mode-only) diff --git a/docs/guides/advanced/multiple_tasks_single_process.md b/docs/guides/advanced/multiple_tasks_single_process.md index 74e9aeed..65314e56 100644 --- a/docs/guides/advanced/multiple_tasks_single_process.md +++ b/docs/guides/advanced/multiple_tasks_single_process.md @@ -2,7 +2,7 @@ title: Multiple Tasks in Single Process --- -The [multiple_tasks_single_process](https://github.com/allegroai/clearml/blob/master/examples/advanced/multiple_tasks_single_process.py) +The [multiple_tasks_single_process](https://github.com/clearml/clearml/blob/master/examples/advanced/multiple_tasks_single_process.py) script demonstrates the capability to log a single script in multiple ClearML tasks. In order to log a script in multiple tasks, each task needs to be initialized using [`Task.init()`](../../references/sdk/task.md#taskinit) diff --git a/docs/guides/automation/manual_random_param_search_example.md b/docs/guides/automation/manual_random_param_search_example.md index d3006f94..36e94ebd 100644 --- a/docs/guides/automation/manual_random_param_search_example.md +++ b/docs/guides/automation/manual_random_param_search_example.md @@ -2,33 +2,34 @@ title: Manual Random Parameter Search --- -The [manual_random_param_search_example.py](https://github.com/allegroai/clearml/blob/master/examples/automation/manual_random_param_search_example.py) -script demonstrates a random parameter search by automating the execution of an experiment multiple times, each time with +The [manual_random_param_search_example.py](https://github.com/clearml/clearml/blob/master/examples/automation/manual_random_param_search_example.py) +script demonstrates a random parameter search by automating the execution of a task multiple times, each time with a different set of random hyperparameters. This example accomplishes the automated random parameter search by doing the following: -1. Creating a template Task named `Keras HP optimization base`. To create it, run the [base_template_keras_simple.py](https://github.com/allegroai/clearml/blob/master/examples/optimization/hyper-parameter-optimization/base_template_keras_simple.py) -script. This experiment must be executed first, so it will be stored in the server, and then it can be accessed, cloned, +1. Creating a template Task named `Keras HP optimization base`. To create it, run the [base_template_keras_simple.py](https://github.com/clearml/clearml/blob/master/examples/optimization/hyper-parameter-optimization/base_template_keras_simple.py) +script. This task must be executed first, so it will be stored in the server, and then it can be accessed, cloned, and modified by another Task. 1. Creating a parameter dictionary, which is connected to the Task by calling [`Task.connect()`](../../references/sdk/task.md#connect) so that the parameters are logged by ClearML. -1. Adding the random search hyperparameters and parameters defining the search (e.g., the experiment name, and number of - times to run the experiment). -1. Creating a Task object referencing the template experiment, `Keras HP optimization base`. See [`Task.get_task`](../../references/sdk/task.md#taskget_task). +1. Adding the random search hyperparameters and parameters defining the search (e.g., the task name, and number of + times to run the task). +1. Creating a Task object referencing the template task, `Keras HP optimization base`. See [`Task.get_task`](../../references/sdk/task.md#taskget_task). 1. For each set of parameters: 1. Cloning the Task object. See [`Task.clone`](../../references/sdk/task.md#taskclone). 1. Getting the newly cloned Task's parameters. See [`Task.get_parameters`](../../references/sdk/task.md#get_parameters). 1. Setting the newly cloned Task's parameters to the search values in the parameter dictionary (Step 1). See [`Task.set_parameters`](../../references/sdk/task.md#set_parameters). 1. Enqueuing the newly cloned Task to execute. See [`Task.enqueue`](../../references/sdk/task.md#taskenqueue). -When the example script runs, it creates an experiment named `Random Hyper-Parameter Search Example` in -the `examples` project. This starts the parameter search, and creates the experiments: +When the example script runs, it creates a task named `Random Hyper-Parameter Search Example` in +the `examples` project. This starts the parameter search, and creates the tasks: * `Keras HP optimization base 0` * `Keras HP optimization base 1` * `Keras HP optimization base 2`. -When these experiments are completed, their [results can be compared](../../webapp/webapp_exp_comparing.md). +When these tasks are completed, their [results can be compared](../../webapp/webapp_exp_comparing.md). -![Comparison parallel coordinates](../../img/examples_hpo_parallel_coordinates.png) \ No newline at end of file +![Comparison parallel coordinates](../../img/examples_hpo_parallel_coordinates.png#light-mode-only) +![Comparison parallel coordinates](../../img/examples_hpo_parallel_coordinates_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/automation/task_piping.md b/docs/guides/automation/task_piping.md index 18eff9e0..9cbde00f 100644 --- a/docs/guides/automation/task_piping.md +++ b/docs/guides/automation/task_piping.md @@ -2,7 +2,7 @@ title: Programmatic Orchestration --- -The [programmatic_orchestration.py](https://github.com/allegroai/clearml/blob/master/examples/automation/programmatic_orchestration.py) +The [programmatic_orchestration.py](https://github.com/clearml/clearml/blob/master/examples/automation/programmatic_orchestration.py) example demonstrates: 1. Creating an instance of a Task from a template Task. 1. Customizing that instance by changing the value of a parameter @@ -11,7 +11,7 @@ example demonstrates: This example accomplishes a task pipe by doing the following: 1. Creating the template Task which is named `Toy Base Task`. It must be stored in ClearML Server before instances of - it can be created. To create it, run another ClearML example script, [toy_base_task.py](https://github.com/allegroai/clearml/blob/master/examples/automation/toy_base_task.py). + it can be created. To create it, run another ClearML example script, [toy_base_task.py](https://github.com/clearml/clearml/blob/master/examples/automation/toy_base_task.py). The template Task has a parameter dictionary, which is connected to the Task: `{'Example_Param': 1}`. 1. Back in `programmatic_orchestration.py`, creating a parameter dictionary, which is connected to the Task by calling [`Task.connect`](../../references/sdk/task.md#connect) so that the parameters are logged by ClearML. The dictionary contains the name of the parameter from the template @@ -22,4 +22,4 @@ This example accomplishes a task pipe by doing the following: 1. Setting the newly cloned Task's parameters to the search values in the parameter dictionary (Step 2). See [`Task.set_parameters`](../../references/sdk/task.md#set_parameters). 1. Enqueuing the newly cloned Task to execute. See [`Task.enqueue`](../../references/sdk/task.md#taskenqueue). -When the example script runs, it creates an instance of the template experiment, named `Auto generated cloned task` in the `examples` project. In the instance, the value of the customized parameter, `Example_Param` changed to `3`. You can see it in **CONFIGURATION** **>** **HYPERPARAMETERS**. \ No newline at end of file +When the example script runs, it creates an instance of the template task, named `Auto generated cloned task` in the `examples` project. In the instance, the value of the customized parameter, `Example_Param` changed to `3`. You can see it in **CONFIGURATION** **>** **HYPERPARAMETERS**. \ No newline at end of file diff --git a/docs/guides/clearml-task/clearml_task_tutorial.md b/docs/guides/clearml-task/clearml_task_tutorial.md index 9bdf28a0..9f47b5df 100644 --- a/docs/guides/clearml-task/clearml_task_tutorial.md +++ b/docs/guides/clearml-task/clearml_task_tutorial.md @@ -2,29 +2,29 @@ title: ClearML Task Tutorial --- -In this tutorial, you will use `clearml-task` to execute [a script](https://github.com/allegroai/events/blob/master/webinar-0620/keras_mnist.py) +In this tutorial, you will use `clearml-task` to execute [a script](https://github.com/clearml/events/blob/master/webinar-0620/keras_mnist.py) on a remote or local machine, from a remote repository and your local machine. ### Prerequisites -- [`clearml`](../../getting_started/ds/ds_first_steps.md) Python package installed and configured -- [`clearml-agent`](../../clearml_agent/clearml_agent_setup.md#installation) running on at least one machine (to execute the experiment), configured to listen to `default` queue +- [`clearml`](../../clearml_sdk/clearml_sdk_setup) Python package installed and configured +- [`clearml-agent`](../../clearml_agent/clearml_agent_setup.md#installation) running on at least one machine (to execute the task), configured to listen to `default` queue ### Executing Code from a Remote Repository ``` bash -clearml-task --project keras_examples --name remote_test --repo https://github.com/allegroai/events.git --branch master --script /webinar-0620/keras_mnist.py --args batch_size=64 epochs=1 --queue default +clearml-task --project keras_examples --name remote_test --repo https://github.com/clearml/events.git --branch master --script /webinar-0620/keras_mnist.py --args batch_size=64 epochs=1 --queue default ``` This sets the following arguments: -* `--project keras_examples --name remote_test` - The project and experiment names -* `--repo https://github.com/allegroai/events.git` - The repository's URL. By default, `clearml-task` uses the latest +* `--project keras_examples --name remote_test` - The project and task names +* `--repo https://github.com/clearml/events.git` - The repository's URL. By default, `clearml-task` uses the latest commit from the master branch * `--branch master` - The repository branch * `--script /webinar-0620/keras_mnist.py` - The script to be executed * `--args batch_size=64 epochs=1` - Arguments passed to the script. This uses the `argparse` object to get CLI parameters -* `--queue default` - Selected queue to send the experiment to +* `--queue default` - Selected queue to send the task to :::note Adding Requirements `clearml-task` automatically finds the requirements.txt file in remote repositories. @@ -48,8 +48,8 @@ Execution log at: https://app.clear.ml/projects/552d5399112d47029c146d5248570295 ### Executing a Local Script -For this example, use a local version of [this script](https://github.com/allegroai/events/blob/master/webinar-0620/keras_mnist.py). -1. Clone the [allegroai/events](https://github.com/allegroai/events) repository +For this example, use a local version of [this script](https://github.com/clearml/events/blob/master/webinar-0620/keras_mnist.py). +1. Clone the [clearml/events](https://github.com/clearml/events) repository 1. Go to the root folder of the cloned repository 1. Run the following command: @@ -58,10 +58,10 @@ clearml-task --project keras --name local_test --script webinar-0620/keras_mnist ``` This sets the following arguments: -* `--project keras --name local_test` - The project and experiment names +* `--project keras --name local_test` - The project and task names * `--script /webinar-0620/keras_mnist.py` - The local script to be executed -* `-requirements webinar-0620/requirements.txt` - The local python package requirements file +* `-requirements webinar-0620/requirements.txt` - The local Python package requirements file * `--args batch_size=64 epochs=1` - Arguments passed to the script. This uses the argparse object to capture CLI parameters -* `--queue default` - Selected queue to send the experiment to +* `--queue default` - Selected queue to send the task to `clearml-task` creates a task according to the input parameters, and sends the task to the `default` queue for execution. \ No newline at end of file diff --git a/docs/guides/clearml_agent/executable_exp_containers.md b/docs/guides/clearml_agent/executable_exp_containers.md index 396b81e0..884bc53a 100644 --- a/docs/guides/clearml_agent/executable_exp_containers.md +++ b/docs/guides/clearml_agent/executable_exp_containers.md @@ -1,26 +1,26 @@ --- -title: Executable Experiment Containers +title: Executable Task Containers --- This tutorial demonstrates using [`clearml-agent`](../../clearml_agent.md)'s [`build`](../../clearml_agent/clearml_agent_ref.md#build) -command to package an experiment into an executable container. In this example, you will build a Docker image that, when -run, will automatically execute the [keras_tensorboard.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/keras/keras_tensorboard.py) +command to package a task into an executable container. In this example, you will build a container image that, when +run, will automatically execute the [keras_tensorboard.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/keras/keras_tensorboard.py) script. ## Prerequisites * [`clearml-agent`](../../clearml_agent/clearml_agent_setup.md#installation) installed and configured -* [`clearml`](../../getting_started/ds/ds_first_steps.md#install-clearml) installed and configured -* [clearml](https://github.com/allegroai/clearml) repo cloned (`git clone https://github.com/allegroai/clearml.git`) +* [`clearml`](../../clearml_sdk/clearml_sdk_setup#install-clearml) installed and configured +* [clearml](https://github.com/clearml/clearml) repo cloned (`git clone https://github.com/clearml/clearml.git`) -## Creating the ClearML Experiment -1. Set up the experiment's execution environment: +## Creating the ClearML Task +1. Set up the task's execution environment: ```console cd clearml/examples/frameworks/keras pip install -r requirements.txt ``` -1. Run the experiment: +1. Run the task: ```console python keras_tensorboard.py @@ -44,8 +44,8 @@ script. If the container will not make use of a GPU, add the `--cpu-only` flag. ::: - This command will create a Docker container, set up with the execution environment for this experiment in the - specified `--target` folder. When the Docker container is launched, it will clone the task specified with `id` and + This command will create a container, set up with the execution environment for this task in the + specified `--target` folder. When the container is launched, it will clone the task specified with `id` and execute the clone (as designated by the `--entry-point` parameter). 1. Run the Docker, pointing to the new container: diff --git a/docs/guides/clearml_agent/exp_environment_containers.md b/docs/guides/clearml_agent/exp_environment_containers.md index 03522475..388d932e 100644 --- a/docs/guides/clearml_agent/exp_environment_containers.md +++ b/docs/guides/clearml_agent/exp_environment_containers.md @@ -1,9 +1,9 @@ --- -title: Experiment Environment Containers +title: Task Environment Containers --- This tutorial demonstrates using [`clearml-agent`](../../clearml_agent.md)'s [`build`](../../clearml_agent/clearml_agent_ref.md#build) -command to build a Docker container replicating the execution environment of an existing task. ClearML Agents can make +command to build a container replicating the execution environment of an existing task. ClearML Agents can make use of such containers to execute tasks without having to set up their environment every time. A use case for this would be manual hyperparameter optimization, where a base task can be used to create a container to @@ -11,18 +11,18 @@ be used when running optimization tasks. ## Prerequisites * [`clearml-agent`](../../clearml_agent/clearml_agent_setup.md#installation) installed and configured -* [`clearml`](../../getting_started/ds/ds_first_steps.md#install-clearml) installed and configured -* [clearml](https://github.com/allegroai/clearml) repo cloned (`git clone https://github.com/allegroai/clearml.git`) +* [`clearml`](../../clearml_sdk/clearml_sdk_setup#install-clearml) installed and configured +* [clearml](https://github.com/clearml/clearml) repo cloned (`git clone https://github.com/clearml/clearml.git`) -## Creating the ClearML Experiment -1. Set up the experiment's execution environment: +## Creating the ClearML Task +1. Set up the task's execution environment: ```console cd clearml/examples/frameworks/keras pip install -r requirements.txt ``` -1. Run the experiment: +1. Run the task: ```console python keras_tensorboard.py @@ -36,7 +36,7 @@ be used when running optimization tasks. ``` This ID will be used in the following section. -## Building the Docker Container +## Building the Container Execute the following command to build the container. Input the ID of the task created above. ```console @@ -56,16 +56,16 @@ Committing docker container to: new_docker sha256:460453b93ct1989fd1c6637c236e544031c4d378581433fc0b961103ce206af1 ``` -## Using the New Docker Container -Make use of the container you've just built by having a ClearML agent make use of it for executing a new experiment: +## Using the New Container +Make use of the container you've just built by having a ClearML agent make use of it for executing a new task: 1. In the [ClearML Web UI](../../webapp/webapp_overview.md), go to the "examples" project, "Keras with TensorBoard - example" task (the one executed [above](#creating-the-clearml-experiment)). -1. [Clone](../../webapp/webapp_exp_reproducing.md) the experiment. -1. In the cloned experiment, go to the **EXECUTION** tab **>** **CONTAINER** section. Under **IMAGE**, insert the name - of the new Docker image, `new_docker`. See [Tuning Experiments](../../webapp/webapp_exp_tuning.md) for more task + example" task (the one executed [above](#creating-the-clearml-task)). +1. [Clone](../../webapp/webapp_exp_reproducing.md) the task. +1. In the cloned task, go to the **EXECUTION** tab **>** **CONTAINER** section. Under **IMAGE**, insert the name + of the new Docker image, `new_docker`. See [Tuning Tasks](../../webapp/webapp_exp_tuning.md) for more task modification options. -1. Enqueue the cloned experiment to the `default` queue. +1. Enqueue the cloned task to the `default` queue. 1. Launch a `clearml-agent` in [Docker Mode](../../clearml_agent/clearml_agent_execution_env.md#docker-mode) and assign it to the `default` queue: ```console clearml-agent daemon --docker --queue default diff --git a/docs/guides/clearml_agent/reproduce_exp.md b/docs/guides/clearml_agent/reproduce_exp.md index 8975c082..986b4b09 100644 --- a/docs/guides/clearml_agent/reproduce_exp.md +++ b/docs/guides/clearml_agent/reproduce_exp.md @@ -1,5 +1,5 @@ --- -title: Recreating Experiment Environments +title: Recreating Task Environments ---
@@ -14,21 +14,23 @@ title: Recreating Experiment Environments
-Sometimes, you may need to recreate your experiment environment on a different machine, but you haven't committed your +Sometimes, you may need to recreate your task environment on a different machine, but you haven't committed your code. -ClearML logs everything needed to reproduce your experiment and its environment (uncommitted changes, used packages, and -more), making it easy to reproduce your experiment's execution environment using ClearML. +ClearML logs everything needed to reproduce your task and its environment (uncommitted changes, used packages, and +more), making it easy to reproduce your task's execution environment using ClearML. -You can reproduce the execution environment of any experiment you've run with ClearML on any workload: +You can reproduce the execution environment of any task you've run with ClearML on any workload: + +1. Go to the task page of the task you want to reproduce in the [ClearML WebApp](../../webapp/webapp_overview.md) -1. Go to the experiment page of the task you want to reproduce in the [ClearML WebApp](../../webapp/webapp_overview.md), :::tip - Use the UI's [filtering and sorting](../../webapp/webapp_exp_table.md#filtering-columns) to find the best performing experiments. + Use the UI's [filtering and sorting](../../webapp/webapp_exp_table.md#filtering-columns) to find the best performing tasks. ::: -1. Copy the desired experiment's ID -1. Use the ClearML Agent's [`build`](../../clearml_agent/clearml_agent_ref.md#build) command to rebuild the experiment's - execution environment. Input the experiment's ID and the target local folder, where the environment will be created: + +1. Copy the task's ID +1. Use the ClearML Agent's [`build`](../../clearml_agent/clearml_agent_ref.md#build) command to rebuild the task's + execution environment. Input the task's ID and the target local folder, where the environment will be created: ```commandline clearml-agent build --id --target @@ -38,4 +40,4 @@ You can reproduce the execution environment of any experiment you've run with Cl 2. Activate the virtual environment using the activation script. Once done, you'll find all of your environment's packages already installed in the environment -And that's it! Your experiment's environment and your code has been reproduced! \ No newline at end of file +And that's it! Your task's environment and your code has been reproduced! \ No newline at end of file diff --git a/docs/guides/distributed/distributed_pytorch_example.md b/docs/guides/distributed/distributed_pytorch_example.md index 5047481f..a972e9ac 100644 --- a/docs/guides/distributed/distributed_pytorch_example.md +++ b/docs/guides/distributed/distributed_pytorch_example.md @@ -2,7 +2,7 @@ title: PyTorch Distributed --- -The [pytorch_distributed_example.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_distributed_example.py) +The [pytorch_distributed_example.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_distributed_example.py) script demonstrates integrating ClearML into code that uses the [PyTorch Distributed Communications Package](https://pytorch.org/docs/stable/distributed.html) (`torch.distributed`). @@ -17,7 +17,7 @@ dataset), and reports (uploads) the following to the main Task: Each Task in a subprocess references the main Task by calling [`Task.current_task()`](../../references/sdk/task.md#taskcurrent_task), which always returns the main Task. -When the script runs, it creates an experiment named `test torch distributed` in the `examples` project. +When the script runs, it creates a task named `test torch distributed` in the `examples` project. ## Artifacts @@ -34,7 +34,8 @@ Task.current_task().upload_artifact( All of these artifacts appear in the main Task under **ARTIFACTS** **>** **OTHER**. -![Experiment artifacts](../../img/examples_pytorch_distributed_example_09.png) +![Task artifacts](../../img/examples_pytorch_distributed_example_09.png#light-mode-only) +![Task artifacts](../../img/examples_pytorch_distributed_example_09_dark.png#dark-mode-only) ## Scalars @@ -54,7 +55,8 @@ Task.current_task().get_logger().report_scalar( The single scalar plot for loss appears in **SCALARS**. -![Experiment scalars](../../img/examples_pytorch_distributed_example_08.png) +![Task scalars](../../img/examples_pytorch_distributed_example_08.png#light-mode-only) +![Task scalars](../../img/examples_pytorch_distributed_example_08_dark.png#dark-mode-only) ## Hyperparameters @@ -69,12 +71,15 @@ Task.current_task().connect(param) All the hyperparameters appear in **CONFIGURATION** **>** **HYPERPARAMETERS**. -![Experiment hyperparameters Args](../../img/examples_pytorch_distributed_example_01.png) +![Task hyperparameters Args](../../img/examples_pytorch_distributed_example_01.png#light-mode-only) +![Task hyperparameters Args](../../img/examples_pytorch_distributed_example_01_dark.png#dark-mode-only) -![Experiment hyperparameters General ](../../img/examples_pytorch_distributed_example_01a.png) +![Task hyperparameters General ](../../img/examples_pytorch_distributed_example_02.png#light-mode-only) +![Task hyperparameters General ](../../img/examples_pytorch_distributed_example_02_dark.png#dark-mode-only) ## Console Output to the console, including the text messages printed from the main Task object and each subprocess appear in **CONSOLE**. -![Experiment console log](../../img/examples_pytorch_distributed_example_06.png) \ No newline at end of file +![Task console log](../../img/examples_pytorch_distributed_example_06.png#light-mode-only) +![Task console log](../../img/examples_pytorch_distributed_example_06_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/distributed/subprocess_example.md b/docs/guides/distributed/subprocess_example.md index 2c61860f..4f9c80c4 100644 --- a/docs/guides/distributed/subprocess_example.md +++ b/docs/guides/distributed/subprocess_example.md @@ -2,7 +2,7 @@ title: Subprocess --- -The [subprocess_example.py](https://github.com/allegroai/clearml/blob/master/examples/distributed/subprocess_example.py) +The [subprocess_example.py](https://github.com/clearml/clearml/blob/master/examples/distributed/subprocess_example.py) script demonstrates multiple subprocesses interacting and reporting to a main Task. The following happens in the script: * This script initializes a main Task and spawns subprocesses, each for an instances of that Task. * Each Task in a subprocess references the main Task by calling [`Task.current_task()`](../../references/sdk/task.md#taskcurrent_task), @@ -10,7 +10,7 @@ which always returns the main Task. * The Task in each subprocess reports the following to the main Task: * Hyperparameters - Additional, different hyperparameters. * Console - Text logged to the console as the Task in each subprocess executes. -* When the script runs, it creates an experiment named `Popen example` in the `examples` project. +* When the script runs, it creates a task named `Popen example` in the `examples` project. ## Hyperparameters @@ -26,14 +26,17 @@ Task.current_task().connect(additional_parameters) Command line options appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **Args**. -![image](../../img/examples_subprocess_example_01.png) +![Hyperparameter Args](../../img/examples_subprocess_example_01.png#light-mode-only) +![Hyperparameter Args](../../img/examples_subprocess_example_01_dark.png#dark-mode-only) Parameter dictionaries appear in **General**. -![image](../../img/examples_subprocess_example_01a.png) +![Hyperparameter General](../../img/examples_subprocess_example_01a.png#light-mode-only) +![Hyperparameter General](../../img/examples_subprocess_example_01a_dark.png#dark-mode-only) ## Console Output to the console, including the text messages from the Task in each subprocess, appear in **CONSOLE**. -![image](../../img/examples_subprocess_example_02.png) \ No newline at end of file +![Console](../../img/examples_subprocess_example_02.png#light-mode-only) +![Console](../../img/examples_subprocess_example_02_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/docker/extra_docker_shell_script.md b/docs/guides/docker/extra_docker_shell_script.md index 81489d41..ae920334 100644 --- a/docs/guides/docker/extra_docker_shell_script.md +++ b/docs/guides/docker/extra_docker_shell_script.md @@ -2,14 +2,14 @@ title: Extra Docker Shell Script --- -When using `clearml-agent`, an agent recreates an entire execution environment, be it by pulling the docker container or +When using `clearml-agent`, an agent recreates an entire execution environment, be it by pulling a container or installing specified packages, and then executes the code on a remote machine. The Agent takes into account required Python packages, but sometimes, when using a Docker container, a user may need to use additional, non-Python tools. ## Tutorial In this tutorial, you will learn how to use `extra_docker_shell_script` to reconfigure an Agent to execute -a shell script when a docker is started, but before an experiment is run. +a shell script when a docker is started, but before a task is run. ## Prerequisites * `clearml-agent` downloaded and configured - work on a machine which has access to the configuration file of the Agent diff --git a/docs/guides/frameworks/autokeras/autokeras_imdb_example.md b/docs/guides/frameworks/autokeras/autokeras_imdb_example.md index c0b6592a..ceb7d42a 100644 --- a/docs/guides/frameworks/autokeras/autokeras_imdb_example.md +++ b/docs/guides/frameworks/autokeras/autokeras_imdb_example.md @@ -1,7 +1,7 @@ --- title: AutoKeras --- -The [autokeras_imdb_example.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/autokeras/autokeras_imdb_example.py) example +The [autokeras_imdb_example.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/autokeras/autokeras_imdb_example.py) example script demonstrates the integration of ClearML into code, which uses [autokeras](https://github.com/keras-team/autokeras). The example does the following: @@ -9,7 +9,7 @@ The example does the following: the autokeras [TextClassifier](https://autokeras.com/text_classifier/) class, and searches for the best model. * Uses two TensorBoard callbacks, one for training and one for testing. * ClearML automatically logs everything the code sends to TensorBoard. -* Creates an experiment named `autokeras imdb example with scalars` in the `autokeras` project. +* Creates a task named `autokeras imdb example with scalars` in the `autokeras` project. ## Scalars @@ -32,7 +32,7 @@ Text printed to the console for training progress, as well as all other console ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. +Models created by the task appear in the task's **ARTIFACTS** tab. ![image](../../../img/examples_keras_18.png) diff --git a/docs/guides/frameworks/catboost/catboost.md b/docs/guides/frameworks/catboost/catboost.md index c36b8e99..365cea5a 100644 --- a/docs/guides/frameworks/catboost/catboost.md +++ b/docs/guides/frameworks/catboost/catboost.md @@ -2,38 +2,43 @@ title: CatBoost --- -The [catboost_example.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/catboost/catboost_example.py) +The [catboost_example.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/catboost/catboost_example.py) example demonstrates the integration of ClearML into code that uses [CatBoost](https://catboost.ai). The example script does the following: * Trains a simple deep neural network on the CatBoost built-in [msrank](https://catboost.ai/en/docs/concepts/python-reference_datasets_msrank) dataset. -* Creates an experiment named `CatBoost simple example` in the `examples` project +* Creates a task named `CatBoost simple example` in the `examples` project * ClearML automatically logs argparse command line options, and models and metrics logged by CatBoost ## Scalars ClearML automatically captures scalars logged by CatBoost. These scalars can be visualized in plots, which appear in the -[ClearML web UI](../../../webapp/webapp_overview.md), in the experiment's page **> SCALARS**. +[ClearML web UI](../../../webapp/webapp_overview.md), in the task's **SCALARS** tab. -![Experiment scalars](../../../img/examples_catboost_scalars.png) +![Task scalars](../../../img/examples_catboost_scalars.png#light-mode-only) +![Task scalars](../../../img/examples_catboost_scalars_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs command line options defined with argparse. They appear in **CONFIGURATIONS > HYPERPARAMETERS > Args**. -![Experiment hyperparameters](../../../img/examples_catboost_configurations.png) +![Task hyperparameters](../../../img/examples_catboost_configurations.png#light-mode-only) +![Task hyperparameters](../../../img/examples_catboost_configurations_dark.png#dark-mode-only) ## Console Text printed to the console for training progress, as well as all other console output, appear in **CONSOLE**. -![Experiment console](../../../img/examples_catboost_console.png) +![Task console](../../../img/examples_catboost_console.png#light-mode-only) +![Task console](../../../img/examples_catboost_console_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models created using CatBoost. -![Experiment artifacts](../../../img/examples_catboost_artifacts.png) +![Task artifacts](../../../img/examples_catboost_artifacts.png#light-mode-only) +![Task artifacts](../../../img/examples_catboost_artifacts_dark.png#dark-mode-only) Clicking on the model name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![Model page](../../../img/examples_catboost_model.png) +![Model page](../../../img/examples_catboost_model.png#light-mode-only) +![Model page](../../../img/examples_catboost_model_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/fastai/fastai_with_tensorboard.md b/docs/guides/frameworks/fastai/fastai_with_tensorboard.md index ef578e2a..59b9fd3c 100644 --- a/docs/guides/frameworks/fastai/fastai_with_tensorboard.md +++ b/docs/guides/frameworks/fastai/fastai_with_tensorboard.md @@ -1,33 +1,36 @@ --- title: Fast.ai --- -The [fastai_with_tensorboard_example.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/fastai/legacy/fastai_with_tensorboard_example.py) +The [fastai_with_tensorboard_example.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/fastai/legacy/fastai_with_tensorboard_example.py) example demonstrates the integration of ClearML into code that uses FastAI v1 and TensorBoard. :::note FastAI V2 -The ClearML repository also includes [examples using FastAI v2](https://github.com/allegroai/clearml/tree/master/examples/frameworks/fastai). +The ClearML repository also includes [examples using FastAI v2](https://github.com/clearml/clearml/tree/master/examples/frameworks/fastai). ::: The example code does the following: 1. Trains a simple deep neural network on the fastai built-in MNIST dataset (see the [fast.ai](https://fastai1.fast.ai) documentation). 1. Uses the fastai `LearnerTensorboardWriter` callback, and ClearML automatically logs TensorBoard through the callback. -1. During script execution, creates an experiment named `fastai with tensorboard callback` in the `examples` project. +1. During script execution, creates a task named `fastai with tensorboard callback` in the `examples` project. ## Scalars ClearML automatically logs the histogram output to TensorBoard. They appear in **PLOTS**. -![image](../../../img/examples_reporting_fastai_01.png) +![Scalars](../../../img/examples_reporting_fastai_01.png#light-mode-only) +![Scalars](../../../img/examples_reporting_fastai_01_dark.png#dark-mode-only) ## Plots Histograms output to TensorBoard. They appear in **PLOTS**. -![image](../../../img/examples_reporting_fastai_02.png) +![Plots](../../../img/examples_reporting_fastai_02.png#light-mode-only) +![Plots](../../../img/examples_reporting_fastai_02_dark.png#dark-mode-only) ## Logs Text printed to the console for training progress, as well as all other console output, appear in **CONSOLE**. -![image](../../../img/examples_reporting_fastai_03.png) +![Console](../../../img/examples_reporting_fastai_03.png#light-mode-only) +![Console](../../../img/examples_reporting_fastai_03_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/huggingface/transformers.md b/docs/guides/frameworks/huggingface/transformers.md index 9f37260b..a9a96ade 100644 --- a/docs/guides/frameworks/huggingface/transformers.md +++ b/docs/guides/frameworks/huggingface/transformers.md @@ -2,7 +2,7 @@ title: Transformers --- -The [Hugging Face Transformers example](https://github.com/allegroai/clearml/blob/master/examples/frameworks/huggingface/transformers.ipynb) +The [Hugging Face Transformers example](https://github.com/clearml/clearml/blob/master/examples/frameworks/huggingface/transformers.ipynb) demonstrates how to integrate ClearML into your Transformer's [Trainer](https://huggingface.co/docs/transformers/v4.34.1/en/main_classes/trainer) code. The Hugging Face Trainer automatically uses the built-in [`ClearMLCallback`](https://huggingface.co/docs/transformers/v4.34.1/en/main_classes/callback#transformers.integrations.ClearMLCallback) if the `clearml` package is already installed, to log Transformers models, parameters, scalars, and more. @@ -34,9 +34,10 @@ training_args = TrainingArguments( ClearML captures all of the `TrainingArguments` passed to the Trainer. -View these parameters in the experiment's **CONFIGURATION** tab **> Hyperparameters** section. +View these parameters in the task's **CONFIGURATION** tab **> Hyperparameters** section. -![Transformers params](../../../img/examples_transformers_params.png) +![Transformers params](../../../img/examples_transformers_params.png#light-mode-only) +![Transformers params](../../../img/examples_transformers_params_dark.png#dark-mode-only) ### Models @@ -45,12 +46,14 @@ In order for ClearML to log the models created during training in this example, variable is set to `True`. ClearML automatically captures the model snapshots created by the Trainer, and saves them as artifacts. View the snapshots in the -experiment's **ARTIFACTS** tab. +task's **ARTIFACTS** tab. -![Transformers models](../../../img/examples_transformers_artifacts.png) +![Transformers models](../../../img/examples_transformers_artifacts.png#light-mode-only) +![Transformers models](../../../img/examples_transformers_artifacts_dark.png#dark-mode-only) ### Scalars -ClearML automatically captures the Trainer's scalars, which can be viewed in the experiment's **Scalars** tab. +ClearML automatically captures the Trainer's scalars, which can be viewed in the task's **Scalars** tab. -![Transformers scalars](../../../img/integrations_transformers_scalars.png) +![Transformers scalars](../../../img/integrations_transformers_scalars.png#light-mode-only) +![Transformers scalars](../../../img/integrations_transformers_scalars_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/keras/jupyter.md b/docs/guides/frameworks/keras/jupyter.md index 9246a44c..bbb3864a 100644 --- a/docs/guides/frameworks/keras/jupyter.md +++ b/docs/guides/frameworks/keras/jupyter.md @@ -2,7 +2,7 @@ title: Keras with Matplotlib - Jupyter Notebook --- -The [jupyter.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/keras/jupyter.ipynb) example +The [jupyter.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/keras/jupyter.ipynb) example demonstrates ClearML's automatic logging of code running in a Jupyter Notebook that uses Keras and Matplotlib. The example does the following: @@ -12,28 +12,32 @@ The example does the following: 1. Specifies accuracy as the metric, and uses two callbacks: a TensorBoard callback and a model checkpoint callback. -1. During script execution, creates an experiment named `notebook example` in the `examples` project. +1. During script execution, creates a task named `notebook example` in the `examples` project. ## Scalars The loss and accuracy metric scalar plots appear in **SCALARS**, along with the resource utilization plots, which are titled **:monitor: machine**. -![image](../../../img/examples_keras_jupyter_08.png) +![Scalars](../../../img/examples_keras_jupyter_08.png#light-mode-only) +![Scalars](../../../img/examples_keras_jupyter_08_dark.png#dark-mode-only) ## Plots The example calls Matplotlib methods to create several sample plots, and TensorBoard methods to plot histograms for layer density. They appear in **PLOTS**. -![image](../../../img/examples_keras_jupyter_03.png) +![Plots 1](../../../img/examples_keras_jupyter_03.png#light-mode-only) +![Plots 1](../../../img/examples_keras_jupyter_03_dark.png#dark-mode-only) -![image](../../../img/examples_keras_jupyter_03a.png) +![Plots 2](../../../img/examples_keras_jupyter_03a.png#light-mode-only) +![Plots 2](../../../img/examples_keras_jupyter_03a_dark.png#dark-mode-only) ## Debug Samples The example calls Matplotlib methods to log debug sample images. They appear in **DEBUG SAMPLES**. -![image](../../../img/examples_keras_jupyter_04.png) +![Debug Samples](../../../img/examples_keras_jupyter_04.png#light-mode-only) +![Debug Samples](../../../img/examples_keras_jupyter_04_dark.png#dark-mode-only) ## Hyperparameters @@ -55,28 +59,33 @@ task_params['hidden_dim'] = 512 Parameter dictionaries appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **General**. -![image](../../../img/examples_keras_jupyter_20.png) +![General Hyperparameters](../../../img/examples_keras_jupyter_20.png#light-mode-only) +![General Hyperparameters](../../../img/examples_keras_jupyter_20_dark.png#dark-mode-only) The TensorFlow Definitions appear in the **TF_DEFINE** subsection. -![image](../../../img/examples_keras_jupyter_21.png) +![TF Define](../../../img/examples_keras_jupyter_21.png#light-mode-only) +![TF Define](../../../img/examples_keras_jupyter_21_dark.png#dark-mode-only) ## Console Text printed to the console for training appears in **CONSOLE**. -![image](../../../img/examples_keras_jupyter_07.png) +![Console Log](../../../img/examples_keras_jupyter_07.png#light-mode-only) +![Console Log](../../../img/examples_keras_jupyter_07_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks models +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models created using Keras. -The experiment info panel shows model tracking, including the model name and design in **ARTIFACTS** **>** **Output Model**. +The task info panel shows model tracking, including the model name and design in **ARTIFACTS** **>** **Output Model**. -![image](../../../img/examples_keras_jupyter_23.png) +![Artifacts](../../../img/examples_keras_jupyter_23.png#light-mode-only) +![Artifacts](../../../img/examples_keras_jupyter_23_dark.png#dark-mode-only) Clicking on the model name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![image](../../../img/examples_keras_jupyter_24.png) \ No newline at end of file +![Model details](../../../img/examples_keras_jupyter_24.png#light-mode-only) +![Model details](../../../img/examples_keras_jupyter_24_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/keras/keras_tensorboard.md b/docs/guides/frameworks/keras/keras_tensorboard.md index 97a69055..fc9cfb6c 100644 --- a/docs/guides/frameworks/keras/keras_tensorboard.md +++ b/docs/guides/frameworks/keras/keras_tensorboard.md @@ -3,11 +3,11 @@ title: Keras with TensorBoard --- The example below demonstrates the integration of ClearML into code which uses Keras and TensorBoard. -View it in [script](https://github.com/allegroai/clearml/blob/master/examples/frameworks/keras/keras_tensorboard.py) -or in [Jupyter Notebook](https://github.com/allegroai/clearml/blob/master/examples/frameworks/keras/jupyter_keras_TB_example.ipynb). +View it in [script](https://github.com/clearml/clearml/blob/master/examples/frameworks/keras/keras_tensorboard.py) +or in [Jupyter Notebook](https://github.com/clearml/clearml/blob/master/examples/frameworks/keras/jupyter_keras_TB_example.ipynb). :::note -The example in [Jupyter Notebook](https://github.com/allegroai/clearml/blob/master/examples/frameworks/keras/jupyter_keras_TB_example.ipynb) +The example in [Jupyter Notebook](https://github.com/clearml/clearml/blob/master/examples/frameworks/keras/jupyter_keras_TB_example.ipynb) includes a clickable icon to open the notebook in Google Colab. ::: @@ -16,7 +16,7 @@ The example script does the following: dataset. 1. Builds a sequential model using a categorical cross entropy loss objective function. 1. Specifies accuracy as the metric, and uses two callbacks: a TensorBoard callback and a model checkpoint callback. -1. During script execution, creates an experiment named `Keras with TensorBoard example` in the +1. During script execution, creates a task named `Keras with TensorBoard example` in the `examples` project (in script) or the `Colab notebooks` project (in Jupyter Notebook). @@ -25,35 +25,40 @@ The example script does the following: The loss and accuracy metric scalar plots appear in **SCALARS**, along with the resource utilization plots, which are titled **:monitor: machine**. -![image](../../../img/examples_keras_01.png) +![Scalars](../../../img/examples_keras_01.png#light-mode-only) +![Scalars](../../../img/examples_keras_01_dark.png#dark-mode-only) ## Histograms Histograms for layer density appear in **PLOTS**. -![image](../../../img/examples_keras_02.png) +![Histograms](../../../img/examples_keras_02.png#light-mode-only) +![Histograms](../../../img/examples_keras_02_dark.png#dark-mode-only) ## Hyperparameters -ClearML automatically logs command line options generated with `argparse`, and TensorFlow Definitions. +ClearML automatically logs command line options generated with `argparse` and TensorFlow Definitions. Command line options appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **Args**. -![image](../../../img/examples_keras_00.png) +![Hyperparameters Args](../../../img/examples_keras_00.png#light-mode-only) +![Hyperparameters Args](../../../img/examples_keras_00_dark.png#dark-mode-only) TensorFlow Definitions appear in **TF_DEFINE**. -![image](../../../img/examples_keras_00a.png) +![TF Defines](../../../img/examples_keras_00a.png#light-mode-only) +![TF Defines](../../../img/examples_keras_00a_dark.png#dark-mode-only) ## Console Text printed to the console for training progress, as well as all other console output, appear in **CONSOLE**. -![image](../../../img/keras_colab_01.png) +![Console Log](../../../img/keras_colab_01.png#light-mode-only) +![Console Log](../../../img/keras_colab_01_dark.png#dark-mode-only) ## Configuration Objects -In the experiment code, a configuration dictionary is connected to the Task by calling [`Task.connect()`](../../../references/sdk/task.md#connect). +A configuration dictionary is connected to the Task by calling [`Task.connect()`](../../../references/sdk/task.md#connect). ```python task.connect_configuration( @@ -64,4 +69,5 @@ task.connect_configuration( It appears in **CONFIGURATION** **>** **CONFIGURATION OBJECTS** **>** **MyConfig**. -![image](../../../img/keras_colab_02.png) \ No newline at end of file +![Custom configuration](../../../img/keras_colab_02.png#light-mode-only) +![Custom configuration](../../../img/keras_colab_02_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/lightgbm/lightgbm_example.md b/docs/guides/frameworks/lightgbm/lightgbm_example.md index d5effb11..5530d77f 100644 --- a/docs/guides/frameworks/lightgbm/lightgbm_example.md +++ b/docs/guides/frameworks/lightgbm/lightgbm_example.md @@ -2,18 +2,18 @@ title: LightGBM --- -The [lightgbm_example](https://github.com/allegroai/clearml/blob/master/examples/frameworks/lightgbm/lightgbm_example.py) +The [lightgbm_example](https://github.com/clearml/clearml/blob/master/examples/frameworks/lightgbm/lightgbm_example.py) script demonstrates the integration of ClearML into code that uses LightGBM. The example script does the following: * Creates a dataset for LightGBM to train a model * Specifies configuration which are automatically captured by ClearML * Saves model which ClearML automatically captures -* Creates an experiment named `LightGBM` in the `examples` project. +* Creates a task named `LightGBM` in the `examples` project. ## Scalars -The scalars logged in the experiment can be visualized in a plot, which appears in the ClearML web UI, in the experiment's **SCALARS** tab. +The scalars logged in the task can be visualized in a plot, which appears in the ClearML web UI, in the task's **SCALARS** tab. ![LightGBM scalars](../../../img/examples_lightgbm_scalars.png) @@ -25,7 +25,7 @@ ClearML automatically logs the configurations applied to LightGBM. They appear i ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using LightGBM. ![LightGBM model](../../../img/examples_lightgbm_model.png) diff --git a/docs/guides/frameworks/matplotlib/matplotlib_example.md b/docs/guides/frameworks/matplotlib/matplotlib_example.md index fd5bc12c..d8686aa1 100644 --- a/docs/guides/frameworks/matplotlib/matplotlib_example.md +++ b/docs/guides/frameworks/matplotlib/matplotlib_example.md @@ -5,15 +5,15 @@ title: Matplotlib The example below demonstrates integrating ClearML into code that uses `matplotlib` to plot scatter diagrams, and show images. ClearML automatically logs the diagrams and images. -View the example in [script](https://github.com/allegroai/clearml/blob/master/examples/frameworks/matplotlib/matplotlib_example.py) -or in [Jupyter Notebook](https://github.com/allegroai/clearml/blob/master/examples/frameworks/matplotlib/jupyter_matplotlib_example.ipynb). +View the example in [script](https://github.com/clearml/clearml/blob/master/examples/frameworks/matplotlib/matplotlib_example.py) +or in [Jupyter Notebook](https://github.com/clearml/clearml/blob/master/examples/frameworks/matplotlib/jupyter_matplotlib_example.ipynb). :::note -The example in [Jupyter Notebook](https://github.com/allegroai/clearml/blob/master/examples/frameworks/matplotlib/jupyter_matplotlib_example.ipynb) +The example in [Jupyter Notebook](https://github.com/clearml/clearml/blob/master/examples/frameworks/matplotlib/jupyter_matplotlib_example.ipynb) includes a clickable icon to open the notebook in Google Colab. ::: -When the example runs, it creates an experiment named `Matplotlib example` +When the example runs, it creates a task named `Matplotlib example` in the `examples` project (in script) or the `Colab notebooks` project (in Jupyter Notebook). diff --git a/docs/guides/frameworks/megengine/megengine_mnist.md b/docs/guides/frameworks/megengine/megengine_mnist.md index d229230e..a2f000e3 100644 --- a/docs/guides/frameworks/megengine/megengine_mnist.md +++ b/docs/guides/frameworks/megengine/megengine_mnist.md @@ -2,7 +2,7 @@ title: MegEngine --- -The [megengine_mnist.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/megengine/megengine_mnist.py) +The [megengine_mnist.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/megengine/megengine_mnist.py) example demonstrates the integration of ClearML into code that uses [MegEngine](https://github.com/MegEngine/MegEngine) and [TensorBoardX](https://github.com/lanpa/tensorboardX). ClearML automatically captures models saved with `megengine`. @@ -10,11 +10,11 @@ The example script does the following: * Trains a simple deep neural network on MegEngine's built-in [MNIST](https://www.megengine.org.cn/doc/master/en/reference/api/megengine.data.dataset.MNIST.html) dataset. * Creates a TensorBoardX `SummaryWriter` object to log scalars during training. -* Creates a ClearML experiment named `megengine mnist train` in the `examples` project. +* Creates a ClearML task named `megengine mnist train` in the `examples` project. ## Hyperparameters -ClearML automatically logs command line options defined with `argparse`. They appear in the experiment's **CONFIGURATION** +ClearML automatically logs command line options defined with `argparse`. They appear in the task's **CONFIGURATION** tab under **HYPERPARAMETERS** **>** **Args**. ![Configuration tab](../../../img/examples_megengine_mnist_config.png) @@ -25,7 +25,7 @@ The example script's `train` function calls TensorBoardX's `SummaryWriter.add_sc ClearML automatically captures the data that is added to the `SummaryWriter` object. These scalars can be visualized in plots, which appear in the ClearML [WebApp](../../../webapp/webapp_home.md), in the -experiment's **SCALARS** tab. +task's **SCALARS** tab. ![Scalars tab](../../../img/examples_megengine_mnist_scalars.png) @@ -34,7 +34,7 @@ experiment's **SCALARS** tab. ClearML automatically captures the model logged using the `megengine.save` method, and saves it as an artifact. -View saved snapshots in the experiment's **ARTIFACTS** tab. +View saved snapshots in the task's **ARTIFACTS** tab. ![Artifacts tab](../../../img/examples_megengine_models_1.png) @@ -49,7 +49,7 @@ The model info panel contains the model details, including: ## Console -All console output during the script's execution appears in the experiment's **CONSOLE** page. +All console output during the script's execution appears in the task's **CONSOLE** page. ![Console tab](../../../img/examples_megengine_console.png) diff --git a/docs/guides/frameworks/pytorch/model_updating.md b/docs/guides/frameworks/pytorch/model_updating.md index 6d9471da..cb5360a7 100644 --- a/docs/guides/frameworks/pytorch/model_updating.md +++ b/docs/guides/frameworks/pytorch/model_updating.md @@ -2,7 +2,7 @@ title: PyTorch Model Updating --- -The [pytorch_model_update.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_model_update.py) +The [pytorch_model_update.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_model_update.py) example demonstrates training a model and logging it using the [OutputModel](../../../references/sdk/model_outputmodel.md) class. @@ -83,18 +83,22 @@ if CONDITION: ## WebApp The model appears in the task's **ARTIFACTS** tab. -![Task artifacts](../../../img/examples_model_update_artifacts.png) +![Task artifacts](../../../img/examples_model_update_artifacts.png#light-mode-only) +![Task artifacts](../../../img/examples_model_update_artifacts_dark.png#dark-mode-only) Clicking on the model name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![Model page](../../../img/examples_model_update_model.png) +![Model page](../../../img/examples_model_update_model.png#light-mode-only) +![Model page](../../../img/examples_model_update_model_dark.png#dark-mode-only) The model's **NETWORK** tab displays its configuration. -![Model network tab](../../../img/examples_model_update_network.png) +![Model network tab](../../../img/examples_model_update_network.png#light-mode-only) +![Model network tab](../../../img/examples_model_update_network_dark.png#dark-mode-only) The model's **LABELS** tab displays its label enumeration. -![Model labels](../../../img/examples_model_update_labels.png) +![Model labels](../../../img/examples_model_update_labels.png#light-mode-only) +![Model labels](../../../img/examples_model_update_labels_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/pytorch/notebooks/audio/audio_classification_UrbanSound8K.md b/docs/guides/frameworks/pytorch/notebooks/audio/audio_classification_UrbanSound8K.md index 76ceda50..396cb0c2 100644 --- a/docs/guides/frameworks/pytorch/notebooks/audio/audio_classification_UrbanSound8K.md +++ b/docs/guides/frameworks/pytorch/notebooks/audio/audio_classification_UrbanSound8K.md @@ -2,7 +2,7 @@ title: Audio Classification - Jupyter Notebooks --- -The [audio_classification_UrbanSound8K.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/audio/audio_classifier_UrbanSound8K.ipynb) example script demonstrates integrating ClearML into a Jupyter Notebook which uses PyTorch, TensorBoard, and TorchVision to train a neural network on the UrbanSound8K dataset for audio classification. The example calls TensorBoard methods in training and testing to report scalars, audio debug samples, and spectrogram visualizations. The spectrogram visualizations are plotted by calling Matplotlib methods. The example also demonstrates connecting parameters to a Task and logging them. When the script runs, it creates an experiment named `audio classification UrbanSound8K` in the `Audio Example` project. +The [audio_classification_UrbanSound8K.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/audio/audio_classifier_UrbanSound8K.ipynb) example script demonstrates integrating ClearML into a Jupyter Notebook which uses PyTorch, TensorBoard, and TorchVision to train a neural network on the UrbanSound8K dataset for audio classification. The example calls TensorBoard methods in training and testing to report scalars, audio debug samples, and spectrogram visualizations. The spectrogram visualizations are plotted by calling Matplotlib methods. The example also demonstrates connecting parameters to a Task and logging them. When the script runs, it creates a task named `audio classification UrbanSound8K` in the `Audio Example` project. ## Scalars diff --git a/docs/guides/frameworks/pytorch/notebooks/audio/audio_preprocessing_example.md b/docs/guides/frameworks/pytorch/notebooks/audio/audio_preprocessing_example.md index 02bab176..7c0661d9 100644 --- a/docs/guides/frameworks/pytorch/notebooks/audio/audio_preprocessing_example.md +++ b/docs/guides/frameworks/pytorch/notebooks/audio/audio_preprocessing_example.md @@ -2,8 +2,8 @@ title: Audio Preprocessing - Jupyter Notebook --- -The example [audio_preprocessing_example.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/audio/audio_preprocessing_example.ipynb) -demonstrates integrating ClearML into a Jupyter Notebook which uses PyTorch and preprocesses audio samples. ClearML automatically logs spectrogram visualizations reported by calling Matplotlib methods, and audio samples reported by calling TensorBoard methods. The example also demonstrates connecting parameters to a Task and logging them. When the script runs, it creates an experiment named `data pre-processing` in the `Audio Example` project. +The example [audio_preprocessing_example.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/audio/audio_preprocessing_example.ipynb) +demonstrates integrating ClearML into a Jupyter Notebook which uses PyTorch and preprocesses audio samples. ClearML automatically logs spectrogram visualizations reported by calling Matplotlib methods, and audio samples reported by calling TensorBoard methods. The example also demonstrates connecting parameters to a Task and logging them. When the script runs, it creates a task named `data pre-processing` in the `Audio Example` project. ## Plots diff --git a/docs/guides/frameworks/pytorch/notebooks/image/hyperparameter_search.md b/docs/guides/frameworks/pytorch/notebooks/image/hyperparameter_search.md index ead05100..b93ddd94 100644 --- a/docs/guides/frameworks/pytorch/notebooks/image/hyperparameter_search.md +++ b/docs/guides/frameworks/pytorch/notebooks/image/hyperparameter_search.md @@ -2,20 +2,20 @@ title: Image Hyperparameter Optimization - Jupyter Notebook --- -[hyperparameter_search.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/image/hyperparameter_search.ipynb) +[hyperparameter_search.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/image/hyperparameter_search.ipynb) demonstrates using ClearML's [HyperParameterOptimizer](../../../../../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to perform automated hyperparameter optimization (HPO). The code creates a HyperParameterOptimizer object, which is a search controller. The search controller uses the [Optuna](../../../../../references/sdk/hpo_optuna_optuna_optimizeroptuna.md) search strategy optimizer. The example maximizes total accuracy by finding an optimal number of epochs, batch size, base learning rate, and dropout. ClearML -automatically logs the optimization's top performing experiments. +automatically logs the optimization's top performing tasks. -The experiment whose hyperparameters are optimized is named `image_classification_CIFAR10`. It is created by running another -ClearML example, [image_classification_CIFAR10.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/image/image_classification_CIFAR10.ipynb), +The task whose hyperparameters are optimized is named `image_classification_CIFAR10`. It is created by running another +ClearML example, [image_classification_CIFAR10.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/image/image_classification_CIFAR10.ipynb), which must run before `hyperparameter_search.ipynb`. -The optimizer Task, `Hyperparameter Optimization`, and the experiments appear individually in the [ClearML Web UI](../../../../../webapp/webapp_overview.md). +The optimizer Task, `Hyperparameter Optimization`, and the tasks appear individually in the [ClearML Web UI](../../../../../webapp/webapp_overview.md). ## Optimizer Task @@ -26,7 +26,7 @@ optimizer task's **CONFIGURATION > HYPERPARAMETERS > General** section. ```python optimizer = HyperParameterOptimizer( - base_task_id=TEMPLATE_TASK_ID, # This is the experiment we want to optimize + base_task_id=TEMPLATE_TASK_ID, # This is the task we want to optimize # here we define the hyperparameters to optimize hyper_parameters=[ UniformIntegerParameterRange('number_of_epochs', min_value=2, max_value=12, step_size=2), @@ -43,33 +43,33 @@ optimizer = HyperParameterOptimizer( optimizer_class=OptimizerOptuna, # Configuring optimization parameters - execution_queue='dan_queue', # queue to schedule the experiments for execution - max_number_of_concurrent_tasks=2, # number of concurrent experiments + execution_queue='dan_queue', # queue to schedule the tasks for execution + max_number_of_concurrent_tasks=2, # number of concurrent tasks optimization_time_limit=60, # set the time limit for the optimization process compute_time_limit=120, # set the compute time limit (sum of execution time on all machines) - total_max_jobs=20, # set the maximum number of experiments for the optimization. + total_max_jobs=20, # set the maximum number of tasks for the optimization. # Converted to total number of iteration for OptimizerBOHB - min_iteration_per_job=15000, # minimum number of iterations per experiment, till early stopping - max_iteration_per_job=150000, # maximum number of iterations per experiment + min_iteration_per_job=15000, # minimum number of iterations per task, till early stopping + max_iteration_per_job=150000, # maximum number of iterations per task ) ``` -![Experiment hyperparameters](../../../../../img/examples_hyperparameter_search_01.png) +![Task hyperparameters](../../../../../img/examples_hyperparameter_search_01.png) ### Console All console output appears in the optimizer task's **CONSOLE**. -![Experiment console](../../../../../img/examples_hyperparameter_search_03.png) +![Task console](../../../../../img/examples_hyperparameter_search_03.png) ### Scalars Scalar metrics for total accuracy and remaining budget by iteration, and a plot of total accuracy by iteration appear in the -experiment's **SCALARS** tab. Remaining budget indicates the percentage of total iterations for all jobs left before that total is reached. +task's **SCALARS** tab. Remaining budget indicates the percentage of total iterations for all jobs left before that total is reached. ClearML automatically reports the scalars generated by `HyperParameterOptimizer`. -![Experiment Scalars](../../../../../img/examples_hyperparameter_search_04.png) +![Task Scalars](../../../../../img/examples_hyperparameter_search_04.png) ### Plots @@ -77,17 +77,17 @@ The optimization task automatically records and monitors the different trial tas provides a summary of the optimization results in tabular and parallel coordinate formats. View these plots in the task's **PLOTS**. -![Experiment scatter plot](../../../../../img/examples_hyperparameter_search_05.png) +![Task scatter plot](../../../../../img/examples_hyperparameter_search_05.png) -![Experiment parallel coordinates](../../../../../img/examples_hyperparameter_search_02a.png) +![Task parallel coordinates](../../../../../img/examples_hyperparameter_search_02a.png) -![Experiment summary plot](../../../../../img/examples_hyperparameter_search_02b.png) +![Task summary plot](../../../../../img/examples_hyperparameter_search_02b.png) -## Experiments Comparison +## Task Comparison -ClearML automatically logs each job, meaning each experiment that executes with a set of hyperparameters, separately. Each appears as an individual experiment in the ClearML Web UI, where the Task name is `image_classification_CIFAR10` and the hyperparameters appended. +ClearML automatically logs each job, meaning each task that executes with a set of hyperparameters, separately. Each appears as an individual task in the ClearML Web UI, where the Task name is `image_classification_CIFAR10` and the hyperparameters appended. For example: `image_classification_CIFAR10: base_lr=0.0075 batch_size=12 dropout=0.05 number_of_epochs=6`. -Compare the experiments' configuration, results, plots, debug samples, and more, using the WebApp [comparison features](../../../../../webapp/webapp_exp_comparing.md). +Compare the tasks' configuration, results, plots, debug samples, and more, using the WebApp [comparison features](../../../../../webapp/webapp_exp_comparing.md). ![Comparison scalars](../../../../../img/examples_hyperparameter_search_09.png) diff --git a/docs/guides/frameworks/pytorch/notebooks/image/image_classification_CIFAR10.md b/docs/guides/frameworks/pytorch/notebooks/image/image_classification_CIFAR10.md index 8d667a5b..fd8f0d82 100644 --- a/docs/guides/frameworks/pytorch/notebooks/image/image_classification_CIFAR10.md +++ b/docs/guides/frameworks/pytorch/notebooks/image/image_classification_CIFAR10.md @@ -2,12 +2,12 @@ title: Image Classification - Jupyter Notebook --- -The example [image_classification_CIFAR10.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/image/image_classification_CIFAR10.ipynb) +The example [image_classification_CIFAR10.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/image/image_classification_CIFAR10.ipynb) demonstrates integrating ClearML into a Jupyter Notebook, which uses PyTorch, TensorBoard, and TorchVision to train a neural network on the CIFAR10 dataset for image classification. ClearML automatically logs the example script's calls to TensorBoard methods in training and testing which report scalars and image debug samples, as well as the model and console log. The example also demonstrates connecting parameters to a Task and logging them. When the script runs, -it creates an experiment named `image_classification_CIFAR10` in the `Image Example` project. +it creates a task named `image_classification_CIFAR10` in the `Image Example` project. Another example optimizes the hyperparameters for this image classification example (see the [Hyperparameter Optimization - Jupyter Notebook](hyperparameter_search.md) documentation page). This image classification example must run before the hyperparameter optimization example. diff --git a/docs/guides/frameworks/pytorch/notebooks/table/download_and_preprocessing.md b/docs/guides/frameworks/pytorch/notebooks/table/download_and_preprocessing.md index 3ecd1b51..94fd9f6d 100644 --- a/docs/guides/frameworks/pytorch/notebooks/table/download_and_preprocessing.md +++ b/docs/guides/frameworks/pytorch/notebooks/table/download_and_preprocessing.md @@ -2,9 +2,9 @@ title: Tabular Data Downloading and Preprocessing - Jupyter Notebook --- -The [download_and_preprocessing.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/download_and_preprocessing.ipynb) example demonstrates ClearML storing preprocessed tabular data as artifacts, and explicitly reporting the tabular data in the **ClearML Web UI**. When the script runs, it creates an experiment named `tabular preprocessing` in the `Table Example` project. +The [download_and_preprocessing.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/download_and_preprocessing.ipynb) example demonstrates ClearML storing preprocessed tabular data as artifacts, and explicitly reporting the tabular data in the **ClearML Web UI**. When the script runs, it creates a task named `tabular preprocessing` in the `Table Example` project. -This tabular data is prepared for another script, [train_tabular_predictor.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/train_tabular_predictor.ipynb), which trains a network with it. +This tabular data is prepared for another script, [train_tabular_predictor.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/train_tabular_predictor.ipynb), which trains a network with it. ## Artifacts diff --git a/docs/guides/frameworks/pytorch/notebooks/table/tabular_training_pipeline.md b/docs/guides/frameworks/pytorch/notebooks/table/tabular_training_pipeline.md index 936fe304..e1b58f7d 100644 --- a/docs/guides/frameworks/pytorch/notebooks/table/tabular_training_pipeline.md +++ b/docs/guides/frameworks/pytorch/notebooks/table/tabular_training_pipeline.md @@ -9,17 +9,17 @@ class. The pipeline uses four Tasks (each Task is created using a different notebook): -* The pipeline controller Task ([tabular_ml_pipeline.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/tabular_ml_pipeline.ipynb)) -* A data preprocessing Task ([preprocessing_and_encoding.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/preprocessing_and_encoding.ipynb)) -* A training Task ([train_tabular_predictor.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/train_tabular_predictor.ipynb)) -* A better model comparison Task ([pick_best_model.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/pick_best_model.ipynb)) +* The pipeline controller Task ([tabular_ml_pipeline.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/tabular_ml_pipeline.ipynb)) +* A data preprocessing Task ([preprocessing_and_encoding.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/preprocessing_and_encoding.ipynb)) +* A training Task ([train_tabular_predictor.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/train_tabular_predictor.ipynb)) +* A better model comparison Task ([pick_best_model.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/pick_best_model.ipynb)) The `PipelineController` class includes functionality to create a pipeline controller, add steps to the pipeline, pass data from one step to another, control the dependencies of a step beginning only after other steps complete, run the pipeline, wait for it to complete, and cleanup afterwards. In this pipeline example, the data preprocessing Task and training Task are each added to the pipeline twice (each is in two steps). When the pipeline runs, the data preprocessing Task and training Task are cloned twice, and the newly cloned Tasks execute. The Task they are cloned from, called the base Task, does not execute. The pipeline controller passes different data to each cloned Task by overriding parameters. In this way, the same Task can run more than once in the pipeline, but with different data. :::note Download Data -The data download Task is not a step in the pipeline, see [download_and_split](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/download_and_split.ipynb). +The data download Task is not a step in the pipeline, see [download_and_split](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/download_and_split.ipynb). ::: ## Pipeline Controller and Steps @@ -246,17 +246,17 @@ By hovering over a step or path between nodes, you can view information about it **To run the pipeline:** -1. Download the data by running the notebook [download_and_split.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/download_and_split.ipynb). +1. Download the data by running the notebook [download_and_split.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/download_and_split.ipynb). 1. Run the script for each of the steps, if the script has not run once before. - * [preprocessing_and_encoding.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/preprocessing_and_encoding.ipynb) - * [train_tabular_predictor.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/train_tabular_predictor.ipynb) - * [pick_best_model.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/pick_best_model.ipynb). + * [preprocessing_and_encoding.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/preprocessing_and_encoding.ipynb) + * [train_tabular_predictor.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/train_tabular_predictor.ipynb) + * [pick_best_model.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/pick_best_model.ipynb). 1. Run the pipeline controller one of the following two ways: - * Run the notebook [tabular_ml_pipeline.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/tabular_ml_pipeline.ipynb). + * Run the notebook [tabular_ml_pipeline.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/table/tabular_ml_pipeline.ipynb). * Remotely execute the Task - If the Task `tabular training pipeline` which is associated with the project `Tabular Example` already exists in ClearML Server, clone it and enqueue it to execute. diff --git a/docs/guides/frameworks/pytorch/notebooks/text/text_classification_AG_NEWS.md b/docs/guides/frameworks/pytorch/notebooks/text/text_classification_AG_NEWS.md index 2c8a5693..692f1b27 100644 --- a/docs/guides/frameworks/pytorch/notebooks/text/text_classification_AG_NEWS.md +++ b/docs/guides/frameworks/pytorch/notebooks/text/text_classification_AG_NEWS.md @@ -2,11 +2,11 @@ title: Text Classification - Jupyter Notebook --- -The example [text_classification_AG_NEWS.ipynb](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/notebooks/text/text_classification_AG_NEWS.ipynb) +The example [text_classification_AG_NEWS.ipynb](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/notebooks/text/text_classification_AG_NEWS.ipynb) demonstrates using Jupyter Notebook for ClearML, and the integration of ClearML into code which trains a network to classify text in the `torchtext` [AG_NEWS](https://pytorch.org/text/stable/datasets.html#ag-news) dataset, and then applies the model to predict the classification of sample text. -ClearML automatically logs the scalars and text samples reported with TensorBoard methods. The example code explicitly logs parameters to the Task. When the script runs, it creates an experiment named `text classifier` in the `Text Example` project. +ClearML automatically logs the scalars and text samples reported with TensorBoard methods. The example code explicitly logs parameters to the Task. When the script runs, it creates a task named `text classifier` in the `Text Example` project. ## Scalars @@ -16,7 +16,7 @@ Accuracy, learning rate, and training loss appear in **SCALARS**, along with the ## Debug Samples -ClearML automatically logs the text samples reported to TensorBoard. They are displayed in the experiment's **DEBUG SAMPLES**. +ClearML automatically logs the text samples reported to TensorBoard. They are displayed in the task's **DEBUG SAMPLES**. ![Debug samples](../../../../../img/text_classification_AG_NEWS_04.png) @@ -32,7 +32,7 @@ configuration_dict = { configuration_dict = task.connect(configuration_dict) ``` -The parameters are displayed in the experiment's **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **General** section. +The parameters are displayed in the task's **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **General** section. ![Hyperparameters](../../../../../img/text_classification_AG_NEWS_01.png) diff --git a/docs/guides/frameworks/pytorch/pytorch_abseil.md b/docs/guides/frameworks/pytorch/pytorch_abseil.md index 3d09b176..da1a4cf7 100644 --- a/docs/guides/frameworks/pytorch/pytorch_abseil.md +++ b/docs/guides/frameworks/pytorch/pytorch_abseil.md @@ -2,13 +2,13 @@ title: PyTorch Abseil --- -The [pytorch_abseil.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_abseil.py) +The [pytorch_abseil.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_abseil.py) example demonstrates the integration of ClearML into code that uses PyTorch and [`absl.flags`](https://abseil.io/docs/python/guides/flags). The example script does the following: * Trains a simple deep neural network on the PyTorch built-in [MNIST](https://pytorch.org/vision/stable/datasets.html#mnist) dataset -* Creates an experiment named `pytorch mnist train with abseil` in the `examples` project +* Creates a task named `pytorch mnist train with abseil` in the `examples` project * ClearML automatically logs the absl.flags, and the models (and their snapshots) created by PyTorch * Additional metrics are logged by calling [`Logger.report_scalar()`](../../../references/sdk/logger.md#report_scalar) @@ -40,7 +40,7 @@ Logger.current_logger().report_scalar( ``` These scalars can be visualized in plots, which appear in the [ClearML web UI](../../../webapp/webapp_overview.md), in -the experiment's **SCALARS** tab. +the task's **SCALARS** tab. ![image](../../../img/examples_pytorch_mnist_07.png) @@ -59,7 +59,7 @@ Text printed to the console for training progress, as well as all other console ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using PyTorch. ![image](../../../img/examples_pytorch_abseil_models.png) diff --git a/docs/guides/frameworks/pytorch/pytorch_distributed_example.md b/docs/guides/frameworks/pytorch/pytorch_distributed_example.md index 3084f529..1b81edf1 100644 --- a/docs/guides/frameworks/pytorch/pytorch_distributed_example.md +++ b/docs/guides/frameworks/pytorch/pytorch_distributed_example.md @@ -2,7 +2,7 @@ title: PyTorch Distributed --- -The [pytorch_distributed_example.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_distributed_example.py) +The [pytorch_distributed_example.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_distributed_example.py) script demonstrates integrating ClearML into a code that uses the [PyTorch Distributed Communications Package](https://pytorch.org/docs/stable/distributed.html) (`torch.distributed`). @@ -19,7 +19,7 @@ The script does the following: Each Task in a subprocess references the main Task by calling [`Task.current_task()`](../../../references/sdk/task.md#taskcurrent_task), which always returns the main Task. -1. When the script runs, it creates an experiment named `test torch distributed` in the `examples` project in the **ClearML Web UI**. +1. When the script runs, it creates a task named `test torch distributed` in the `examples` project in the **ClearML Web UI**. ### Artifacts @@ -35,7 +35,8 @@ Task.current_task().upload_artifact( All of these artifacts appear in the main Task, **ARTIFACTS** **>** **OTHER**. -![image](../../../img/examples_pytorch_distributed_example_09.png) +![Artifacts](../../../img/examples_pytorch_distributed_example_09.png#light-mode-only) +![Artifacts](../../../img/examples_pytorch_distributed_example_09_dark.png#dark-mode-only) ## Scalars @@ -54,7 +55,8 @@ Task.current_task().get_logger().report_scalar( The single scalar plot for loss appears in **SCALARS**. -![image](../../../img/examples_pytorch_distributed_example_08.png) +![Scalars](../../../img/examples_pytorch_distributed_example_08.png#light-mode-only) +![Scalars](../../../img/examples_pytorch_distributed_example_08_dark.png#dark-mode-only) ## Hyperparameters @@ -69,7 +71,8 @@ Task.current_task().connect(param) Command line options appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **Args**. -![image](../../../img/examples_pytorch_distributed_example_01.png) +![Hyperparamter Args](../../../img/examples_pytorch_distributed_example_01.png#light-mode-only) +![Hyperparamter Args](../../../img/examples_pytorch_distributed_example_01_dark.png#dark-mode-only) Parameter dictionaries appear in the **General** section of **HYPERPARAMETERS**. @@ -78,10 +81,12 @@ param = {'worker_{}_stuff'.format(dist.get_rank()): 'some stuff ' + str(randint( Task.current_task().connect(param) ``` -![image](../../../img/examples_pytorch_distributed_example_02.png) +![Hyperparameter General args](../../../img/examples_pytorch_distributed_example_02.png#light-mode-only) +![Hyperparameter General args](../../../img/examples_pytorch_distributed_example_02_dark.png#dark-mode-only) ## Log Output to the console, including the text messages printed from the main Task object and each subprocess, appears in **CONSOLE**. -![image](../../../img/examples_pytorch_distributed_example_06.png) \ No newline at end of file +![Console log](../../../img/examples_pytorch_distributed_example_06.png#light-mode-only) +![Console log](../../../img/examples_pytorch_distributed_example_06_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/pytorch/pytorch_matplotlib.md b/docs/guides/frameworks/pytorch/pytorch_matplotlib.md index df480c55..0e580fd7 100644 --- a/docs/guides/frameworks/pytorch/pytorch_matplotlib.md +++ b/docs/guides/frameworks/pytorch/pytorch_matplotlib.md @@ -2,11 +2,11 @@ title: PyTorch with Matplotlib --- -The [pytorch_matplotlib.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_matplotlib.py) +The [pytorch_matplotlib.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_matplotlib.py) example demonstrates the integration of ClearML into code that uses PyTorch and Matplotlib. The example does the following: -* Creates an experiment named `pytorch with matplotlib example`, in the `examples` project. +* Creates a task named `pytorch with matplotlib example`, in the `examples` project. * The script calls Matplotlib methods to show images, each with a different title. * ClearML automatically logs the images as debug samples. @@ -14,15 +14,18 @@ The example does the following: The images shown in the example script's `imshow` function appear according to metric in **DEBUG SAMPLES**. -![image](../../../img/examples_pytorch_matplotlib_02.png) +![Debug samples](../../../img/examples_pytorch_matplotlib_02.png#light-mode-only) +![Debug samples](../../../img/examples_pytorch_matplotlib_02_dark.png#dark-mode-only) Select a debug sample by metric. -![image](../../../img/examples_pytorch_matplotlib_02a.png) +![Debug sample selection](../../../img/examples_pytorch_matplotlib_02a.png#light-mode-only) +![Debug sample selection](../../../img/examples_pytorch_matplotlib_02a_dark.png#dark-mode-only) -Open the debug sample in the image viewer. +Click a debug sample to view it in the image viewer. -![image](../../../img/examples_pytorch_matplotlib_02b.png) +![Debug sample image viewer](../../../img/examples_pytorch_matplotlib_02b.png#light-mode-only) +![Debug sample image viewer](../../../img/examples_pytorch_matplotlib_02b_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/pytorch/pytorch_mnist.md b/docs/guides/frameworks/pytorch/pytorch_mnist.md index 00b26850..aae3ed37 100644 --- a/docs/guides/frameworks/pytorch/pytorch_mnist.md +++ b/docs/guides/frameworks/pytorch/pytorch_mnist.md @@ -2,13 +2,13 @@ title: PyTorch MNIST --- -The [pytorch_mnist.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py) example +The [pytorch_mnist.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py) example demonstrates the integration of ClearML into code that uses PyTorch. The example script does the following: * Trains a simple deep neural network on the PyTorch built-in [MNIST](https://pytorch.org/vision/stable/datasets.html#mnist) dataset. -* Creates an experiment named `pytorch mnist train` in the `examples` project. +* Creates a task named `pytorch mnist train` in the `examples` project. * ClearML automatically logs `argparse` command line options, and models (and their snapshots) created by PyTorch. * Additional metrics are logged by calling [`Logger.report_scalar()`](../../../references/sdk/logger.md#report_scalar). @@ -34,30 +34,35 @@ Logger.current_logger().report_scalar( ``` These scalars can be visualized in plots, which appear in the ClearML [web UI](../../../webapp/webapp_overview.md), -in the experiment's page **>** **SCALARS**. +in the task's **SCALARS** tab. -![image](../../../img/examples_pytorch_mnist_07.png) +![Scalars](../../../img/examples_pytorch_mnist_07.png#light-mode-only) +![Scalars](../../../img/examples_pytorch_mnist_07_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs command line options defined with `argparse`. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **Args**. -![image](../../../img/examples_pytorch_mnist_01.png) +![Hyperparameters](../../../img/examples_pytorch_mnist_01.png#light-mode-only) +![Hyperparameters](../../../img/examples_pytorch_mnist_01_dark.png#dark-mode-only) ## Console Text printed to the console for training progress, as well as all other console output, appear in **CONSOLE**. -![image](../../../img/examples_pytorch_mnist_06.png) +![Console Log](../../../img/examples_pytorch_mnist_06.png#light-mode-only) +![Console Log](../../../img/examples_pytorch_mnist_06_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks models +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using PyTorch. -![image](../../../img/examples_pytorch_mnist_02.png) +![Models](../../../img/examples_pytorch_mnist_02.png#light-mode-only) +![Models](../../../img/examples_pytorch_mnist_02_dark.png#dark-mode-only) Clicking on the model name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![image](../../../img/examples_pytorch_mnist_03.png) \ No newline at end of file +![Model details](../../../img/examples_pytorch_mnist_03.png#light-mode-only) +![Model details](../../../img/examples_pytorch_mnist_03_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/pytorch/pytorch_tensorboard.md b/docs/guides/frameworks/pytorch/pytorch_tensorboard.md index 8f270531..41b282c0 100644 --- a/docs/guides/frameworks/pytorch/pytorch_tensorboard.md +++ b/docs/guides/frameworks/pytorch/pytorch_tensorboard.md @@ -2,50 +2,56 @@ title: PyTorch with TensorBoard --- -The [pytorch_tensorboard.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_tensorboard.py) +The [pytorch_tensorboard.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_tensorboard.py) example demonstrates the integration of ClearML into code that uses PyTorch and TensorBoard. The example does the following: * Trains a simple deep neural network on the PyTorch built-in [MNIST](https://pytorch.org/vision/stable/datasets.html#mnist) dataset. -* Creates an experiment named `pytorch with tensorboard` in the `examples` project. +* Creates a task named `pytorch with tensorboard` in the `examples` project. * ClearML automatically captures scalars and text logged using the TensorBoard `SummaryWriter` object, and the model created by PyTorch. ## Scalars In the example script, the `train` and `test` functions call the TensorBoard `SummaryWriter.add_scalar` method to log loss. -These scalars, along with the resource utilization plots, which are titled **:monitor: machine**, appear in the experiment's +These scalars, along with the resource utilization plots, which are titled **:monitor: machine**, appear in the task's page in the [ClearML web UI](../../../webapp/webapp_overview.md) under **SCALARS**. -![image](../../../img/examples_pytorch_tensorboard_07.png) +![Scalars](../../../img/examples_pytorch_tensorboard_07.png#light-mode-only) +![Scalars](../../../img/examples_pytorch_tensorboard_07_dark.png#dark-mode-only) ## Debug Samples ClearML automatically tracks images and text output to TensorFlow. They appear in **DEBUG SAMPLES**. -![image](../../../img/examples_pytorch_tensorboard_08.png) +![Debug Samples](../../../img/examples_pytorch_tensorboard_08.png#light-mode-only) +![Debug Samples](../../../img/examples_pytorch_tensorboard_08_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs TensorFlow Definitions. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **TF_DEFINE**. -![image](../../../img/examples_pytorch_tensorboard_01.png) +![Hyperparameters](../../../img/examples_pytorch_tensorboard_01.png#light-mode-only) +![Hyperparameters](../../../img/examples_pytorch_tensorboard_01_dark.png#dark-mode-only) ## Console Text printed to the console for training progress, as well as all other console output, appear in **CONSOLE**. -![image](../../../img/examples_pytorch_tensorboard_06.png) +![Console Log](../../../img/examples_pytorch_tensorboard_06.png#light-mode-only) +![Console Log](../../../img/examples_pytorch_tensorboard_06_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using PyTorch. -![image](../../../img/examples_pytorch_tensorboard_02.png) +![Artifacts](../../../img/examples_pytorch_tensorboard_02.png#light-mode-only) +![Artifacts](../../../img/examples_pytorch_tensorboard_02_dark.png#dark-mode-only) Clicking on a model's name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![image](../../../img/examples_pytorch_tensorboard_03.png) \ No newline at end of file +![Model details](../../../img/examples_pytorch_tensorboard_03.png#light-mode-only) +![Model details](../../../img/examples_pytorch_tensorboard_03_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/pytorch/pytorch_tensorboardx.md b/docs/guides/frameworks/pytorch/pytorch_tensorboardx.md index 828f6723..d1f08722 100644 --- a/docs/guides/frameworks/pytorch/pytorch_tensorboardx.md +++ b/docs/guides/frameworks/pytorch/pytorch_tensorboardx.md @@ -2,45 +2,50 @@ title: PyTorch TensorBoardX --- -The [pytorch_tensorboardX.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorboardx/pytorch_tensorboardX.py) +The [pytorch_tensorboardX.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorboardx/pytorch_tensorboardX.py) example demonstrates the integration of ClearML into code that uses PyTorch and TensorBoardX. The example does the following: * Trains a simple deep neural network on the PyTorch built-in [MNIST](https://pytorch.org/vision/stable/datasets.html#mnist) dataset. -* Creates an experiment named `pytorch with tensorboardX` in the `examples` project. +* Creates a task named `pytorch with tensorboardX` in the `examples` project. * ClearML automatically captures scalars and text logged using the TensorBoardX `SummaryWriter` object, and the model created by PyTorch. ## Scalars The loss and accuracy metric scalar plots, along with the resource utilization plots, which are titled **:monitor: machine**, -appear in the experiment's page in the [web UI](../../../webapp/webapp_overview.md), under **SCALARS**. +appear in the task's page in the [web UI](../../../webapp/webapp_overview.md), under **SCALARS**. -![image](../../../img/examples_pytorch_tensorboardx_03.png) +![Scalars](../../../img/examples_pytorch_tensorboardx_03.png#light-mode-only) +![Scalars](../../../img/examples_pytorch_tensorboardx_03_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs command line options defined with `argparse`. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **Args**. -![image](../../../img/examples_pytorch_tensorboardx_01.png) +![Hyperparameters](../../../img/examples_pytorch_tensorboardx_01.png#light-mode-only) +![Hyperparameters](../../../img/examples_pytorch_tensorboardx_01_dark.png#dark-mode-only) ## Log Text printed to the console for training progress, as well as all other console output, appear in **CONSOLE**. -![image](../../../img/examples_pytorch_tensorboardx_02.png) +![Console log](../../../img/examples_pytorch_tensorboardx_02.png#light-mode-only) +![Console log](../../../img/examples_pytorch_tensorboardx_02_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using PyTorch. -![image](../../../img/examples_pytorch_tensorboardx_04.png) +![Artifacts](../../../img/examples_pytorch_tensorboardx_04.png#light-mode-only) +![Artifacts](../../../img/examples_pytorch_tensorboardx_04_dark.png#dark-mode-only) Clicking on the model name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![image](../../../img/examples_pytorch_tensorboardx_model.png) +![Model details](../../../img/examples_pytorch_tensorboardx_model.png#light-mode-only) +![Model details](../../../img/examples_pytorch_tensorboardx_model_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/pytorch/tensorboard_toy_pytorch.md b/docs/guides/frameworks/pytorch/tensorboard_toy_pytorch.md index becf7da2..cf17ac86 100644 --- a/docs/guides/frameworks/pytorch/tensorboard_toy_pytorch.md +++ b/docs/guides/frameworks/pytorch/tensorboard_toy_pytorch.md @@ -2,19 +2,21 @@ title: PyTorch TensorBoard Toy --- -The [tensorboard_toy_pytorch.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/tensorboard_toy_pytorch.py) +The [tensorboard_toy_pytorch.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/tensorboard_toy_pytorch.py) example demonstrates the integration of ClearML into code, which creates a TensorBoard `SummaryWriter` object to log -debug sample images. When the script runs, it creates an experiment named `pytorch tensorboard toy example`, which is +debug sample images. When the script runs, it creates a task named `pytorch tensorboard toy example`, which is associated with the `examples` project. ## Debug Samples -The debug sample images appear according to metric, in the experiment's **DEBUG SAMPLES** tab. +The debug sample images appear according to metric, in the task's **DEBUG SAMPLES** tab. -![image](../../../img/examples_tensorboard_toy_pytorch_02.png) +![Debug samples](../../../img/examples_tensorboard_toy_pytorch_02.png#light-mode-only) +![Debug samples](../../../img/examples_tensorboard_toy_pytorch_02_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs TensorFlow Definitions. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **TF_DEFINE**. -![image](../../../img/examples_tensorboard_toy_pytorch_00.png) \ No newline at end of file +![Hyperparameters](../../../img/examples_tensorboard_toy_pytorch_00.png#light-mode-only) +![Hyperparameters](../../../img/examples_tensorboard_toy_pytorch_00_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/pytorch_ignite/integration_pytorch_ignite.md b/docs/guides/frameworks/pytorch_ignite/integration_pytorch_ignite.md index 2eec4dc8..3e56e835 100644 --- a/docs/guides/frameworks/pytorch_ignite/integration_pytorch_ignite.md +++ b/docs/guides/frameworks/pytorch_ignite/integration_pytorch_ignite.md @@ -2,14 +2,14 @@ title: PyTorch Ignite TensorboardLogger --- -The [cifar_ignite.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/ignite/cifar_ignite.py) example +The [cifar_ignite.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/ignite/cifar_ignite.py) example script integrates ClearML into code that uses [PyTorch Ignite](https://github.com/pytorch/ignite). The example script does the following: * Trains a neural network on the CIFAR10 dataset for image classification. * Creates a [ClearML Task](../../../fundamentals/task.md) named `image classification CIFAR10` in the `examples` project. -* Calls the [`Task.connect`](../../../references/sdk/task.md#connect) method to track experiment configuration. +* Calls the [`Task.connect`](../../../references/sdk/task.md#connect) method to track task configuration. * Uses `ignite`'s `TensorboardLogger` and attaches handlers to it. See [`TensorboardLogger`](https://github.com/pytorch/ignite/blob/master/ignite/contrib/handlers/tensorboard_logger.py). ClearML's automatic logging captures information and outputs logged with `TensorboardLogger`. @@ -22,7 +22,7 @@ Parameters are explicitly reported to ClearML using the [`Task.connect`](../../. params = {'number_of_epochs': 20, 'batch_size': 64, 'dropout': 0.25, 'base_lr': 0.001, 'momentum': 0.9, 'loss_report': 100} params = task.connect(params) # enabling configuration override by clearml ``` -The hyperparameter configurations can be viewed in the WebApp in the experiment's **CONFIGURATION** tab. +The hyperparameter configurations can be viewed in the WebApp in the task's **CONFIGURATION** tab. ![image](../../../img/examples_integration_pytorch_ignite_config.png) @@ -35,22 +35,22 @@ into a script which uses `TensorboardLogger`, all information logged through the ClearML automatically captures scalars logged through `TensorboardLogger`. -View the scalars in the experiment's page in the **ClearML Web UI**, in **SCALARS**. +View the scalars in the task's page in the **ClearML Web UI**, in **SCALARS**. -![image](../../../img/examples_cifar_scalars.png) +![Task scalars](../../../img/examples_cifar_scalars.png) ## Model Snapshots ClearML automatically captures the model logged with Torch, and saves it as an artifact. -View saved snapshots in the experiment's **ARTIFACTS** tab. +View saved snapshots in the task's **ARTIFACTS** tab. -![image](../../../img/examples_cifar_artifacts.png) +![Task models](../../../img/examples_cifar_artifacts.png) To view the model, in the **ARTIFACTS** tab, click the model name (or download it). -![image](../../../img/examples_cifar_model.png) +![Model details](../../../img/examples_cifar_model.png) ## Debug Samples diff --git a/docs/guides/frameworks/pytorch_ignite/pytorch_ignite_mnist.md b/docs/guides/frameworks/pytorch_ignite/pytorch_ignite_mnist.md index a30aa516..136108c7 100644 --- a/docs/guides/frameworks/pytorch_ignite/pytorch_ignite_mnist.md +++ b/docs/guides/frameworks/pytorch_ignite/pytorch_ignite_mnist.md @@ -45,9 +45,9 @@ Integrate ClearML with the following steps: ### Parameters The following are the `ClearMLLogger` parameters: -* `project_name` - The name of the project in which the experiment will be created. +* `project_name` - The name of the project in which the task will be created. * `task_name` – The name of task. -* `task_type` – The type of experiment (see [task types](../../../fundamentals/task.md#task-types)). +* `task_type` – The type of task (see [task types](../../../fundamentals/task.md#task-types)). * `report_freq` – The histogram processing frequency (handles histogram values every X calls to the handler). Affects `GradsHistHandler` and `WeightsHistHandler`. Default value is 100. * `histogram_update_freq_multiplier` – The histogram report frequency (report first X histograms and once every X @@ -152,16 +152,16 @@ validation_evaluator.add_event_handler(Events.EPOCH_COMPLETED, handler) ``` -## Visualizing Experiment Results +## Visualizing Task Results -When the code runs, the experiment results can be viewed in the [ClearML Web UI](../../../webapp/webapp_overview.md). +When the code runs, the task results can be viewed in the [ClearML Web UI](../../../webapp/webapp_overview.md). ### Scalars -View the scalars, including training and validation metrics, in the experiment's page in the ClearML Web UI, under +View the scalars, including training and validation metrics, in the task's page in the ClearML Web UI, under **SCALARS**. -![image](../../../img/ignite_training.png) +![Task scalars](../../../img/ignite_training.png) ### Model Snapshots diff --git a/docs/guides/frameworks/pytorch_lightning/pytorch_lightning_example.md b/docs/guides/frameworks/pytorch_lightning/pytorch_lightning_example.md index 1ca5d7e9..951ffa62 100644 --- a/docs/guides/frameworks/pytorch_lightning/pytorch_lightning_example.md +++ b/docs/guides/frameworks/pytorch_lightning/pytorch_lightning_example.md @@ -2,17 +2,17 @@ title: PyTorch Lightning --- -The [pytorch-lightning](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch-lightning/pytorch_lightning_example.py) +The [pytorch-lightning](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch-lightning/pytorch_lightning_example.py) script demonstrates the integration of ClearML into code that uses [PyTorch Lightning](https://www.pytorchlightning.ai/). The example script does the following: * Trains a simple deep neural network on the PyTorch built-in MNIST dataset * Defines Argparse command line options, which are automatically captured by ClearML -* Creates an experiment named `pytorch lightning mnist example` in the `examples` project. +* Creates a task named `pytorch lightning mnist example` in the `examples` project. ## Scalars -The test loss and validation loss plots appear in the experiment's page in the ClearML web UI under **SCALARS**. +The test loss and validation loss plots appear in the task's page in the ClearML web UI under **SCALARS**. Resource utilization plots, which are titled **:monitor: machine**, also appear in the **SCALARS** tab. All of these plots are automatically captured by ClearML. @@ -28,7 +28,7 @@ ClearML automatically logs command line options defined with argparse and Tensor ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. +Models created by the task appear in the task's **ARTIFACTS** tab. ![PyTorch Lightning model](../../../img/examples_pytorch_lightning_model.png) diff --git a/docs/guides/frameworks/scikit-learn/sklearn_joblib_example.md b/docs/guides/frameworks/scikit-learn/sklearn_joblib_example.md index 9ce2bbfb..39b2f71d 100644 --- a/docs/guides/frameworks/scikit-learn/sklearn_joblib_example.md +++ b/docs/guides/frameworks/scikit-learn/sklearn_joblib_example.md @@ -2,26 +2,29 @@ title: scikit-learn with Joblib --- -The [sklearn_joblib_example.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/scikit-learn/sklearn_joblib_example.py) +The [sklearn_joblib_example.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/scikit-learn/sklearn_joblib_example.py) demonstrates the integration of ClearML into code that uses `scikit-learn` and `joblib` to store a model and model snapshots, -and `matplotlib` to create a scatter diagram. When the script runs, it creates an experiment named +and `matplotlib` to create a scatter diagram. When the script runs, it creates a task named `scikit-learn joblib example` in the `examples` project. ## Plots -ClearML automatically logs the scatter plot, which appears in the [experiment's page](../../../webapp/webapp_exp_track_visual.md) +ClearML automatically logs the scatter plot, which appears in the [task's page](../../../webapp/webapp_exp_track_visual.md) in the ClearML web UI, under **PLOTS**. -![image](../../../img/examples_sklearn_joblib_example_06.png) +![Plots](../../../img/examples_sklearn_joblib_example_06.png#light-mode-only) +![Plots](../../../img/examples_sklearn_joblib_example_06_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. +Models created by the task appear in the task's **ARTIFACTS** tab. -![image](../../../img/examples_sklearn_joblib_example_01.png) +![Artifacts](../../../img/examples_sklearn_joblib_example_01.png#light-mode-only) +![Artifacts](../../../img/examples_sklearn_joblib_example_01_dark.png#dark-mode-only) Clicking on the model name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![image](../../../img/examples_sklearn_joblib_example_02.png) \ No newline at end of file +![Model details](../../../img/examples_sklearn_joblib_example_02.png#light-mode-only) +![Model details](../../../img/examples_sklearn_joblib_example_02_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/scikit-learn/sklearn_matplotlib_example.md b/docs/guides/frameworks/scikit-learn/sklearn_matplotlib_example.md index e66d5c7f..aec6536b 100644 --- a/docs/guides/frameworks/scikit-learn/sklearn_matplotlib_example.md +++ b/docs/guides/frameworks/scikit-learn/sklearn_matplotlib_example.md @@ -2,14 +2,14 @@ title: scikit-learn with Matplotlib --- -The [sklearn_matplotlib_example.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/scikit-learn/sklearn_matplotlib_example.py) +The [sklearn_matplotlib_example.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/scikit-learn/sklearn_matplotlib_example.py) script demonstrates the integration of ClearML into code that uses `scikit-learn` and `matplotlib`. The example does the following: * Uses `scikit-learn` to determine cross-validated training and test scores. * Uses `matplotlib` to plot the learning curves. * ClearML automatically logs the scatter diagrams for the learning curves. -* Creates an experiment named `scikit-learn matplotlib example` in the `examples` project. +* Creates a task named `scikit-learn matplotlib example` in the `examples` project. ## Plots diff --git a/docs/guides/frameworks/tensorboardx/tensorboardx.md b/docs/guides/frameworks/tensorboardx/tensorboardx.md index c3a030f1..a2b2fd47 100644 --- a/docs/guides/frameworks/tensorboardx/tensorboardx.md +++ b/docs/guides/frameworks/tensorboardx/tensorboardx.md @@ -2,44 +2,49 @@ title: TensorBoardX with PyTorch --- -The [pytorch_tensorboardX.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorboardx/pytorch_tensorboardX.py) +The [pytorch_tensorboardX.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorboardx/pytorch_tensorboardX.py) example demonstrates the integration of ClearML into code that uses PyTorch and TensorBoardX. The script does the following: * Trains a simple deep neural network on the PyTorch built-in [MNIST](https://pytorch.org/vision/stable/datasets.html#mnist) dataset -* Creates an experiment named `pytorch with tensorboardX` in the `examples` project +* Creates a task named `pytorch with tensorboardX` in the `examples` project * ClearML automatically captures scalars and text logged using the TensorBoardX `SummaryWriter` object, and the model created by PyTorch ## Scalars -The loss and accuracy metric scalar plots appear in the experiment's page in the **ClearML web UI**, under +The loss and accuracy metric scalar plots appear in the task's page in the **ClearML web UI**, under **SCALARS**. The also includes resource utilization plots, which are titled **:monitor: machine**. -![image](../../../img/examples_pytorch_tensorboardx_03.png) +![Scalars](../../../img/examples_pytorch_tensorboardx_03.png#light-mode-only) +![Scalars](../../../img/examples_pytorch_tensorboardx_03_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs command line options defined with `argparse`. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **Args**. -![image](../../../img/examples_pytorch_tensorboardx_01.png) +![Hyperparameters](../../../img/examples_pytorch_tensorboardx_01.png#light-mode-only) +![Hyperparameters](../../../img/examples_pytorch_tensorboardx_01_dark.png#dark-mode-only) ## Console Text printed to the console for training progress, as well as all other console output, appear in **CONSOLE**. -![image](../../../img/examples_pytorch_tensorboardx_02.png) +![Console log](../../../img/examples_pytorch_tensorboardx_02.png#light-mode-only) +![Console log](../../../img/examples_pytorch_tensorboardx_02_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using PyTorch. -![image](../../../img/examples_pytorch_tensorboardx_04.png) +![Artifacts](../../../img/examples_pytorch_tensorboardx_04.png#light-mode-only) +![Artifacts](../../../img/examples_pytorch_tensorboardx_04_dark.png#dark-mode-only) Clicking on the model's name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![image](../../../img/examples_pytorch_tensorboardx_model.png) +![Model details](../../../img/examples_pytorch_tensorboardx_model.png#light-mode-only) +![Model details](../../../img/examples_pytorch_tensorboardx_model_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/tensorboardx/video_tensorboardx.md b/docs/guides/frameworks/tensorboardx/video_tensorboardx.md index 9aee9449..fa909233 100644 --- a/docs/guides/frameworks/tensorboardx/video_tensorboardx.md +++ b/docs/guides/frameworks/tensorboardx/video_tensorboardx.md @@ -2,17 +2,18 @@ title: TensorBoardX Video --- -The [moveiepy_tensorboardx.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorboardx/moviepy_tensorboardx.py) +The [moveiepy_tensorboardx.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorboardx/moviepy_tensorboardx.py) example demonstrates the integration of ClearML into code, which creates a TensorBoardX `SummaryWriter` object to log video data. -When the script runs, it creates an experiment named `pytorch with video tensorboardX` in +When the script runs, it creates a task named `pytorch with video tensorboardX` in the `examples` project. ## Debug Samples ClearML automatically captures the video data that is added to the `SummaryWriter` object, using the `add_video` method. -The video appears in the experiment's **DEBUG SAMPLES** tab. +The video appears in the task's **DEBUG SAMPLES** tab. -![Debug Samples](../../../img/examples_tensorboardx_debug.png) +![Debug Samples](../../../img/examples_tensorboardx_debug.png#light-mode-only) +![Debug Samples](../../../img/examples_tensorboardx_debug_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/tensorflow/integration_keras_tuner.md b/docs/guides/frameworks/tensorflow/integration_keras_tuner.md index 3da98a6c..8fbba5fb 100644 --- a/docs/guides/frameworks/tensorflow/integration_keras_tuner.md +++ b/docs/guides/frameworks/tensorflow/integration_keras_tuner.md @@ -3,17 +3,17 @@ title: Keras Tuner --- :::tip -If you are not already using ClearML, see [Getting Started](../../../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + Integrate ClearML into code that uses [Keras Tuner](https://www.tensorflow.org/tutorials/keras/keras_tuner). By -specifying `ClearMLTunerLogger` (see [kerastuner.py](https://github.com/allegroai/clearml/blob/master/clearml/external/kerastuner.py)) +specifying `ClearMLTunerLogger` (see [kerastuner.py](https://github.com/clearml/clearml/blob/master/clearml/external/kerastuner.py)) as the Keras Tuner logger, ClearML automatically logs scalars and hyperparameter optimization. ## ClearMLTunerLogger -Take a look at [keras_tuner_cifar.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/kerastuner/keras_tuner_cifar.py) +Take a look at [keras_tuner_cifar.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/kerastuner/keras_tuner_cifar.py) example script, which demonstrates the integration of ClearML in a code that uses Keras Tuner. The script does the following: @@ -41,31 +41,36 @@ When the script runs, it logs: ## Scalars -ClearML logs the scalars from training each network. They appear in the experiment's page in the **ClearML web UI**, under +ClearML logs the scalars from training each network. They appear in the task's page in the **ClearML web UI**, under **SCALARS**. -![image](../../../img/integration_keras_tuner_06.png) +![Scalars](../../../img/integration_keras_tuner_06.png#light-mode-only) +![Scalars](../../../img/integration_keras_tuner_06_dark.png#dark-mode-only) ## Summary of Hyperparameter Optimization -ClearML automatically logs the parameters of each experiment run in the hyperparameter search. They appear in tabular +ClearML automatically logs the parameters of each task run in the hyperparameter search. They appear in tabular form in **PLOTS**. -![image](../../../img/integration_keras_tuner_07.png) +![HPO summary plot](../../../img/integration_keras_tuner_07.png#light-mode-only) +![HPO summary plot](../../../img/integration_keras_tuner_07_dark.png#dark-mode-only) ## Artifacts ClearML automatically stores the output model. It appears in **ARTIFACTS** **>** **Output Model**. -![image](../../../img/integration_keras_tuner_03.png) +![Artifact](../../../img/integration_keras_tuner_03.png#light-mode-only) +![Artifact](../../../img/integration_keras_tuner_03_dark.png#dark-mode-only) Model details, such as snap locations, appear in the **MODELS** tab. -![image](../../../img/integration_keras_tuner_04.png) +![Model details](../../../img/integration_keras_tuner_04.png#light-mode-only) +![Model details](../../../img/integration_keras_tuner_04_dark.png#dark-mode-only) The model configuration is stored with the model. -![image](../../../img/integration_keras_tuner_05.png) +![Model configuration](../../../img/integration_keras_tuner_05.png#light-mode-only) +![Model configuration](../../../img/integration_keras_tuner_05_dark.png#dark-mode-only) ## Configuration Objects @@ -73,12 +78,14 @@ The model configuration is stored with the model. ClearML automatically logs the TensorFlow Definitions, which appear in **CONFIGURATION** **>** **HYPERPARAMETERS**. -![image](../../../img/integration_keras_tuner_01.png) +![Hyperparameters](../../../img/integration_keras_tuner_01.png#light-mode-only) +![Hyperparameters](../../../img/integration_keras_tuner_01_dark.png#dark-mode-only) ### Configuration The Task configuration appears in **CONFIGURATION** **>** **General**. -![image](../../../img/integration_keras_tuner_02.png) +![Configuration object](../../../img/integration_keras_tuner_02.png#light-mode-only) +![Configuration object](../../../img/integration_keras_tuner_02_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/tensorflow/tensorboard_pr_curve.md b/docs/guides/frameworks/tensorflow/tensorboard_pr_curve.md index b8af5f25..24145b65 100644 --- a/docs/guides/frameworks/tensorflow/tensorboard_pr_curve.md +++ b/docs/guides/frameworks/tensorflow/tensorboard_pr_curve.md @@ -2,11 +2,11 @@ title: TensorBoard PR Curve --- -The [tensorboard_pr_curve.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorflow/tensorboard_pr_curve.py) +The [tensorboard_pr_curve.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorflow/tensorboard_pr_curve.py) example demonstrates the integration of ClearML into code that uses TensorFlow and TensorBoard. The example script does the following: -* Creates an experiment named `tensorboard pr_curve` in the `examples` project. +* Creates a task named `tensorboard pr_curve` in the `examples` project. * Creates three classes, R, G, and B, and generates colors within the RGB space from normal distributions. The true label of each random color is associated with the normal distribution that generated it. * Computes the probability that each color belongs to the class, using three other normal distributions. @@ -16,28 +16,33 @@ The example script does the following: ## Plots -In the **ClearML Web UI**, the PR Curve summaries appear in the experiment's page under **PLOTS**. +In the **ClearML Web UI**, the PR Curve summaries appear in the task's page under **PLOTS**. * Blue PR curves - ![image](../../../img/examples_tensorboard_pr_curve_01.png) + ![Blue PR curves](../../../img/examples_tensorboard_pr_curve_01.png#light-mode-only) + ![Blue PR curves](../../../img/examples_tensorboard_pr_curve_01_dark.png#dark-mode-only) * Green PR curves - ![image](../../../img/examples_tensorboard_pr_curve_02.png) + ![Green PR curves](../../../img/examples_tensorboard_pr_curve_02.png#light-mode-only) + ![Green PR curves](../../../img/examples_tensorboard_pr_curve_02_dark.png#dark-mode-only) * Red PR curves - ![image](../../../img/examples_tensorboard_pr_curve_03.png) + ![Red PR curves](../../../img/examples_tensorboard_pr_curve_03.png#light-mode-only) + ![Red PR curves](../../../img/examples_tensorboard_pr_curve_03_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs TensorFlow Definitions. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **TF_DEFINE**. -![image](../../../img/examples_tensorboard_pr_curve_04.png) +![Hyperparameters](../../../img/examples_tensorboard_pr_curve_04.png#light-mode-only) +![Hyperparameters](../../../img/examples_tensorboard_pr_curve_04_dark.png#dark-mode-only) ## Console -All other console output appears in **CONSOLE**. +All console output appears in **CONSOLE** tab. -![image](../../../img/examples_tensorboard_pr_curve_05.png) +![Console log](../../../img/examples_tensorboard_pr_curve_05.png#light-mode-only) +![Console log](../../../img/examples_tensorboard_pr_curve_05_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/tensorflow/tensorboard_toy.md b/docs/guides/frameworks/tensorflow/tensorboard_toy.md index 6866c892..bd622df6 100644 --- a/docs/guides/frameworks/tensorflow/tensorboard_toy.md +++ b/docs/guides/frameworks/tensorflow/tensorboard_toy.md @@ -2,37 +2,41 @@ title: TensorBoard Toy --- -The [tensorboard_toy.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorflow/tensorboard_toy.py) +The [tensorboard_toy.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorflow/tensorboard_toy.py) example demonstrates ClearML's automatic logging of TensorBoard scalars, histograms, images, and text, as well as all other console output and TensorFlow Definitions. -When the script runs, it creates an experiment named `tensorboard toy example` in the `examples` +When the script runs, it creates a task named `tensorboard toy example` in the `examples` project. ## Scalars -The `tf.summary.scalar` output appears in the ClearML web UI, in the experiment's +The `tf.summary.scalar` output appears in the ClearML web UI, in the task's **SCALARS**. Resource utilization plots, which are titled **:monitor: machine**, also appear in the **SCALARS** tab. -![image](../../../img/examples_tensorboard_toy_03.png) +![Scalars](../../../img/examples_tensorboard_toy_03.png#light-mode-only) +![Scalars](../../../img/examples_tensorboard_toy_03_dark.png#dark-mode-only) ## Plots The `tf.summary.histogram` output appears in **PLOTS**. -![image](../../../img/examples_tensorboard_toy_04.png) +![Plots](../../../img/examples_tensorboard_toy_04.png#light-mode-only) +![Plots](../../../img/examples_tensorboard_toy_04_dark.png#dark-mode-only) ## Debug Samples ClearML automatically tracks images and text output to TensorFlow. They appear in **DEBUG SAMPLES**. -![image](../../../img/examples_tensorboard_toy_05.png) +![Debug Samples](../../../img/examples_tensorboard_toy_05.png#light-mode-only) +![Debug Samples](../../../img/examples_tensorboard_toy_05_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs TensorFlow Definitions. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **TF_DEFINE**. -![image](../../../img/examples_tensorboard_toy_01.png) +![Hyperparameters](../../../img/examples_tensorboard_toy_01.png#light-mode-only) +![Hyperparameters](../../../img/examples_tensorboard_toy_01_dark.png#dark-mode-only) diff --git a/docs/guides/frameworks/tensorflow/tensorflow_mnist.md b/docs/guides/frameworks/tensorflow/tensorflow_mnist.md index 82a052a1..a4afd8f9 100644 --- a/docs/guides/frameworks/tensorflow/tensorflow_mnist.md +++ b/docs/guides/frameworks/tensorflow/tensorflow_mnist.md @@ -2,41 +2,46 @@ title: TensorFlow MNIST --- -The [tensorflow_mnist.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorflow/tensorflow_mnist.py) +The [tensorflow_mnist.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorflow/tensorflow_mnist.py) example demonstrates the integration of ClearML into code that uses TensorFlow and Keras to train a neural network on the Keras built-in [MNIST](https://www.tensorflow.org/api_docs/python/tf/keras/datasets/mnist) handwritten digits dataset. -When the script runs, it creates an experiment named `Tensorflow v2 mnist with summaries` in the `examples` project. +When the script runs, it creates a task named `Tensorflow v2 mnist with summaries` in the `examples` project. ## Scalars -The loss and accuracy metric scalar plots appear in the experiment's page in the **ClearML web UI** under +The loss and accuracy metric scalar plots appear in the task's page in the **ClearML web UI** under **SCALARS**. Resource utilization plots, which are titled **:monitor: machine**, also appear in the **SCALARS** tab. -![image](../../../img/examples_tensorflow_mnist_06.png) +![Task scalars](../../../img/examples_tensorflow_mnist_06.png#light-mode-only) +![Task scalars](../../../img/examples_tensorflow_mnist_06_dark.png#dark-mode-only) ## Hyperparameters ClearML automatically logs TensorFlow Definitions. They appear in **CONFIGURATION** **>** **HYPERPARAMETERS** **>** **TF_DEFINE**. -![image](../../../img/examples_tensorflow_mnist_01.png) +![Task hyperparameters](../../../img/examples_tensorflow_mnist_01.png#light-mode-only) +![Task hyperparameters](../../../img/examples_tensorflow_mnist_01_dark.png#dark-mode-only) ## Console All console output appears in **CONSOLE**. -![image](../../../img/examples_tensorflow_mnist_05.png) +![Task console](../../../img/examples_tensorflow_mnist_05.png#light-mode-only) +![Task console](../../../img/examples_tensorflow_mnist_05_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using TensorFlow. -![image](../../../img/examples_tensorflow_mnist_03.png) +![Task models](../../../img/examples_tensorflow_mnist_03.png#light-mode-only) +![Task models](../../../img/examples_tensorflow_mnist_03_dark.png#dark-mode-only) Clicking on a model's name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![image](../../../img/examples_tensorflow_mnist_10.png) \ No newline at end of file +![Model details](../../../img/examples_tensorflow_mnist_10.png#light-mode-only) +![Model details](../../../img/examples_tensorflow_mnist_10_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/xgboost/xgboost_metrics.md b/docs/guides/frameworks/xgboost/xgboost_metrics.md index b061a460..384398e2 100644 --- a/docs/guides/frameworks/xgboost/xgboost_metrics.md +++ b/docs/guides/frameworks/xgboost/xgboost_metrics.md @@ -2,33 +2,37 @@ title: XGBoost Metrics --- -The [xgboost_metrics.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/xgboost/xgboost_metrics.py) +The [xgboost_metrics.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/xgboost/xgboost_metrics.py) example demonstrates the integration of ClearML into code that uses XGBoost to train a network on the scikit-learn [iris](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_iris.html#sklearn.datasets.load_iris) classification dataset. ClearML automatically captures models and scalars logged with XGBoost. -When the script runs, it creates a ClearML experiment named `xgboost metric auto reporting` in +When the script runs, it creates a ClearML task named `xgboost metric auto reporting` in the `examples` project. ## Scalars ClearML automatically captures scalars logged with XGBoost, which can be visualized in plots in the -ClearML WebApp, in the experiment's **SCALARS** tab. +ClearML WebApp, in the task's **SCALARS** tab. -![Scalars](../../../img/examples_xgboost_metric_scalars.png) +![Scalars](../../../img/examples_xgboost_metric_scalars.png#light-mode-only) +![Scalars](../../../img/examples_xgboost_metric_scalars_dark.png#dark-mode-only) ## Models ClearML automatically captures the model logged using the `xgboost.save` method, and saves it as an artifact. -View saved snapshots in the experiment's **ARTIFACTS** tab. +View saved snapshots in the task's **ARTIFACTS** tab. -![Artifacts tab](../../../img/examples_xgboost_metric_artifacts.png) +![Artifacts tab](../../../img/examples_xgboost_metric_artifacts.png#light-mode-only) +![Artifacts tab](../../../img/examples_xgboost_metric_artifacts_dark.png#dark-mode-only) To view the model details, click the model name in the **ARTIFACTS** page, which will open the model's info tab. Alternatively, download the model. -![Model info panel](../../../img/examples_xgboost_metric_model.png) +![Model info panel](../../../img/examples_xgboost_metric_model.png#light-mode-only) +![Model info panel](../../../img/examples_xgboost_metric_model_dark.png#dark-mode-only) ## Console -All console output during the script's execution appears in the experiment's **CONSOLE** page. +All console output during the script's execution appears in the task's **CONSOLE** page. -![Console output](../../../img/examples_xgboost_metric_console.png) \ No newline at end of file +![Console output](../../../img/examples_xgboost_metric_console.png#light-mode-only) +![Console output](../../../img/examples_xgboost_metric_console_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/frameworks/xgboost/xgboost_sample.md b/docs/guides/frameworks/xgboost/xgboost_sample.md index cb16108d..3d0f349d 100644 --- a/docs/guides/frameworks/xgboost/xgboost_sample.md +++ b/docs/guides/frameworks/xgboost/xgboost_sample.md @@ -2,7 +2,7 @@ title: XGBoost and scikit-learn --- -The [xgboost_sample.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/xgboost/xgboost_sample.py) +The [xgboost_sample.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/xgboost/xgboost_sample.py) example demonstrates integrating ClearML into code that uses [XGBoost](https://xgboost.readthedocs.io/en/stable/). The example does the following: @@ -11,32 +11,37 @@ classification dataset using XGBoost * Scores accuracy using scikit-learn * ClearML automatically logs the input model registered by XGBoost, and the output model (and its checkpoints), feature importance plot, and tree plot created with XGBoost. -* Creates an experiment named `XGBoost simple example` in the `examples` project. +* Creates a task named `XGBoost simple example` in the `examples` project. ## Plots -The feature importance plot and tree plot appear in the experiment's page in the **ClearML web UI**, under +The feature importance plot and tree plot appear in the task's page in the **ClearML web UI**, under **PLOTS**. -![Feature importance plot](../../../img/examples_xgboost_sample_06.png) +![Feature importance plot](../../../img/examples_xgboost_sample_06.png#light-mode-only) +![Feature importance plot](../../../img/examples_xgboost_sample_06_dark.png#dark-mode-only) -![Tree plot](../../../img/examples_xgboost_sample_06a.png) +![Tree plot](../../../img/examples_xgboost_sample_06a.png#light-mode-only) +![Tree plot](../../../img/examples_xgboost_sample_06a_dark.png#dark-mode-only) ## Console All other console output appear in **CONSOLE**. -![image](../../../img/examples_xgboost_sample_05.png) +![Console log](../../../img/examples_xgboost_sample_05.png#light-mode-only) +![Console log](../../../img/examples_xgboost_sample_05_dark.png#dark-mode-only) ## Artifacts -Models created by the experiment appear in the experiment's **ARTIFACTS** tab. ClearML automatically logs and tracks +Models created by the task appear in the task's **ARTIFACTS** tab. ClearML automatically logs and tracks models and any snapshots created using XGBoost. -![image](../../../img/examples_xgboost_sample_10.png) +![Artifacts](../../../img/examples_xgboost_sample_10.png#light-mode-only) +![Artifacts](../../../img/examples_xgboost_sample_10_dark.png#dark-mode-only) Clicking on the model's name takes you to the [model's page](../../../webapp/webapp_model_viewing.md), where you can view the model's details and access the model. -![image](../../../img/examples_xgboost_sample_03.png) \ No newline at end of file +![Model details](../../../img/examples_xgboost_sample_03.png#light-mode-only) +![Model details](../../../img/examples_xgboost_sample_03_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/guides/ide/google_colab.md b/docs/guides/ide/google_colab.md index 00f2348b..e6b9d2a2 100644 --- a/docs/guides/ide/google_colab.md +++ b/docs/guides/ide/google_colab.md @@ -16,11 +16,11 @@ and running, users can send Tasks to be executed on Google Colab's hardware. ## Steps -1. Open up [this Google Colab notebook](https://colab.research.google.com/github/allegroai/clearml/blob/master/examples/clearml_agent/clearml_colab_agent.ipynb). +1. Open up [this Google Colab notebook](https://colab.research.google.com/github/clearml/clearml/blob/master/examples/clearml_agent/clearml_colab_agent.ipynb). 1. Run the first cell, which installs all the necessary packages: ``` - !pip install git+https://github.com/allegroai/clearml + !pip install git+https://github.com/clearml/clearml !pip install clearml-agent ``` 1. Run the second cell, which exports this environment variable: @@ -30,7 +30,7 @@ and running, users can send Tasks to be executed on Google Colab's hardware. This environment variable makes Matplotlib work in headless mode, so it won't output graphs to the screen. 1. Create new credentials. Go to your [**Settings**](https://app.clear.ml/settings/workspace-configuration) page > **WORKSPACE** section. - Under **App Credentials**, click **+ Create new credentials**, and copy the information that pops up. + Under **API Credentials**, click **+ Create new credentials**, and copy the information that pops up. 1. Set the credentials. In the third cell, enter your own credentials: ```python @@ -40,8 +40,8 @@ and running, users can send Tasks to be executed on Google Colab's hardware. api_host="https://api.clear.ml", web_host="https://app.clear.ml", files_host="https://files.clear.ml", - key='6ZHX9UQMYL874A1NE8', - secret='=2h6#%@Y&m*tC!VLEXq&JI7QhZPKuJfbaYD4!uUk(t7=9ENv' + key='', + secret='' ) ``` @@ -54,7 +54,7 @@ and running, users can send Tasks to be executed on Google Colab's hardware. For additional options for running `clearml-agent`, see the [clearml-agent reference](../../clearml_agent/clearml_agent_ref.md). After executing cell 4, the worker appears in the [**Orchestration**](../../webapp/webapp_workers_queues.md) - page of your server. Clone experiments and enqueue them to your hearts content! The `clearml-agent` will fetch - experiments and execute them using the Google Colab hardware. + page of your server. Clone tasks and enqueue them to your hearts content! The `clearml-agent` will fetch + tasks and execute them using the Google Colab hardware. diff --git a/docs/guides/ide/integration_pycharm.md b/docs/guides/ide/integration_pycharm.md index d8ebde0f..20fd7c15 100644 --- a/docs/guides/ide/integration_pycharm.md +++ b/docs/guides/ide/integration_pycharm.md @@ -17,7 +17,7 @@ private credentials (assuming the entire code base, including `.git` already exi ## Installation -1. Download the latest plugin version from the [Releases page](https://github.com/allegroai/clearml-pycharm-plugin/releases). +1. Download the latest plugin version from the [Releases page](https://github.com/clearml/clearml-pycharm-plugin/releases). 1. Install the plugin in PyCharm from local disk: diff --git a/docs/guides/ide/remote_jupyter_tutorial.md b/docs/guides/ide/remote_jupyter_tutorial.md index 7054f9ed..fcf519cb 100644 --- a/docs/guides/ide/remote_jupyter_tutorial.md +++ b/docs/guides/ide/remote_jupyter_tutorial.md @@ -27,7 +27,7 @@ clearml-session --docker nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04 --packages This sets the following arguments: -* `--docker nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04` - Docker image +* `--docker nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04` - Container image * `--packages "clearml" "tensorflow>=2.2" "keras"` - Required Python packages @@ -39,7 +39,7 @@ name is `DevOps`. ::: After launching the command, the `clearml-agent` listening to the `default` queue spins a remote Jupyter environment with -the specifications. It will automatically connect to the docker on the remote machine. +the specifications. It will automatically connect to the container on the remote machine. The console should display the session's configuration details: @@ -93,13 +93,13 @@ Now, let's execute some code in the remote session! 1. Open up a new Notebook. -1. In the first cell of the notebook, clone the [ClearML repository](https://github.com/allegroai/clearml): +1. In the first cell of the notebook, clone the [ClearML repository](https://github.com/clearml/clearml): ``` - !git clone https://github.com/allegroai/clearml.git + !git clone https://github.com/clearml/clearml.git ``` -1. In the second cell of the notebook, run this [script](https://github.com/allegroai/clearml/blob/master/examples/frameworks/keras/keras_tensorboard.py) +1. In the second cell of the notebook, run this [script](https://github.com/clearml/clearml/blob/master/examples/frameworks/keras/keras_tensorboard.py) from the cloned repository: ``` diff --git a/docs/guides/main.md b/docs/guides/main.md index def8fe29..202eaa40 100644 --- a/docs/guides/main.md +++ b/docs/guides/main.md @@ -1,13 +1,13 @@ --- id: guidemain -title: Examples +title: ClearML Tutorials slug: /guides --- To help learn and use ClearML, we provide example scripts that demonstrate how to use ClearML's various features. -Examples scripts are in the [examples](https://github.com/allegroai/clearml/tree/master/examples) folder of the GitHub `clearml` +Examples scripts are in the [examples](https://github.com/clearml/clearml/tree/master/examples) folder of the GitHub `clearml` repository. They are also preloaded in the **ClearML Server**. Each examples folder in the GitHub ``clearml`` repository contains a ``requirements.txt`` file for example scripts in that folder. diff --git a/docs/guides/optimization/hyper-parameter-optimization/examples_hyperparam_opt.md b/docs/guides/optimization/hyper-parameter-optimization/examples_hyperparam_opt.md index b70f28ae..2b385640 100644 --- a/docs/guides/optimization/hyper-parameter-optimization/examples_hyperparam_opt.md +++ b/docs/guides/optimization/hyper-parameter-optimization/examples_hyperparam_opt.md @@ -2,7 +2,7 @@ title: Hyperparameter Optimization --- -The [hyper_parameter_optimizer.py](https://github.com/allegroai/clearml/blob/master/examples/optimization/hyper-parameter-optimization/hyper_parameter_optimizer.py) +The [hyper_parameter_optimizer.py](https://github.com/clearml/clearml/blob/master/examples/optimization/hyper-parameter-optimization/hyper_parameter_optimizer.py) example script demonstrates hyperparameter optimization (HPO), which is automated by using ClearML. ## Set the Search Strategy for Optimization @@ -24,7 +24,7 @@ The following search strategies can be used: * Random uniform sampling of hyperparameter strategy - [`automation.RandomSearch`](../../../references/sdk/hpo_optimization_randomsearch.md) * Full grid sampling strategy of every hyperparameter combination - [`automation.GridSearch`](../../../references/sdk/hpo_optimization_gridsearch.md). -* Custom - Use a custom class and inherit from the ClearML automation base strategy class, [`SearchStrategy`](https://github.com/allegroai/clearml/blob/master/clearml/automation/optimization.py#L310) +* Custom - Use a custom class and inherit from the ClearML automation base strategy class, [`SearchStrategy`](https://github.com/clearml/clearml/blob/master/clearml/automation/optimization.py#L310) The search strategy class that is chosen will be passed to the [`automation.HyperParameterOptimizer`](../../../references/sdk/hpo_optimization_hyperparameteroptimizer.md) object later. @@ -71,9 +71,9 @@ def job_complete_callback( Initialize the Task, which will be stored in ClearML Server when the code runs. After the code runs at least once, it can be [reproduced](../../../webapp/webapp_exp_reproducing.md) and [tuned](../../../webapp/webapp_exp_tuning.md). -Set the Task type to `optimizer`, and create a new experiment (and Task object) each time the optimizer runs (`reuse_last_task_id=False`). +Set the Task type to `optimizer`, and create a new task each time the optimizer runs (`reuse_last_task_id=False`). -When the code runs, it creates an experiment named **Automatic Hyper-Parameter Optimization** in +When the code runs, it creates a task named **Automatic Hyper-Parameter Optimization** in the **Hyper-Parameter Optimization** project, which can be seen in the **ClearML Web UI**. ```python @@ -91,21 +91,21 @@ task = Task.init( Create an arguments dictionary that contains the ID of the Task to optimize, and a Boolean indicating whether the optimizer will run as a service, see [Running as a service](#running-as-a-service). -In this example, an experiment named **Keras HP optimization base** is being optimized. The experiment must have run at +In this example, a task named **Keras HP optimization base** is being optimized. The task must have run at least once so that it is stored in ClearML Server, and, therefore, can be cloned. Since the arguments dictionary is connected to the Task, after the code runs once, the `template_task_id` can be changed -to optimize a different experiment. +to optimize a different task. ```python -# experiment template to optimize in the hyperparameter optimization +# task template to optimize in the hyperparameter optimization args = { 'template_task_id': None, 'run_as_service': False, } args = task.connect(args) -# Get the template task experiment that we want to optimize +# Get the template task that we want to optimize if not args['template_task_id']: args['template_task_id'] = Task.get_task( project_name='examples', task_name='Keras HP optimization base').id @@ -120,7 +120,7 @@ object, setting the following optimization parameters: ```python an_optimizer = HyperParameterOptimizer( - # This is the experiment we want to optimize + # This is the task we want to optimize base_task_id=args['template_task_id'], ``` @@ -174,10 +174,10 @@ object, setting the following optimization parameters: * Remaining parameters, including the time limit per Task (minutes), period for checking the optimization (minutes), maximum number of jobs to launch, minimum and maximum number of iterations for each Task: ```python - # Optional: Limit the execution time of a single experiment, in minutes. + # Optional: Limit the execution time of a single task, in minutes. # (this is optional, and if using OptimizerBOHB, it is ignored) time_limit_per_job=10., - # Check the experiments every 6 seconds is way too often, we should probably set it to 5 min, + # Check the tasks every 6 seconds is way too often, we should probably set it to 5 min, # assuming a single experiment is usually hours... pool_period_min=0.1, # set the maximum number of jobs to launch for the optimization, default (None) unlimited @@ -185,9 +185,9 @@ object, setting the following optimization parameters: # basically the cumulative number of iterations will not exceed total_max_jobs * max_iteration_per_job total_max_jobs=10, # This is only applicable for OptimizerBOHB and ignore by the rest - # set the minimum number of iterations for an experiment, before early stopping + # set the minimum number of iterations for a task before early stopping min_iteration_per_job=10, - # Set the maximum number of iterations for an experiment to execute + # Set the maximum number of iterations for a task to execute # (This is optional, unless using OptimizerBOHB where this is a must) max_iteration_per_job=30, @@ -215,7 +215,7 @@ it, providing the callback method to report the best performance: ```python # report every 12 seconds, this is way too often, but we are testing here J an_optimizer.set_report_period(0.2) -# start the optimization process, callback function to be called every time an experiment is completed +# start the optimization process, callback function to be called every time a task is completed # this function returns immediately an_optimizer.start(job_complete_callback=job_complete_callback) # set the time limit for the optimization process (2 hours) @@ -233,7 +233,7 @@ Now that it is running: an_optimizer.set_time_limit(in_minutes=90.0) # wait until process is done (notice we are controlling the optimization process in the background) an_optimizer.wait() -# optimization is completed, print the top performing experiments id +# optimization is completed, print the top performing tasks id top_exp = an_optimizer.get_top_experiments(top_k=3) print([t.id for t in top_exp]) # make sure background optimization stopped diff --git a/docs/guides/pipeline/pipeline_controller.md b/docs/guides/pipeline/pipeline_controller.md index 2bf27607..2cddb681 100644 --- a/docs/guides/pipeline/pipeline_controller.md +++ b/docs/guides/pipeline/pipeline_controller.md @@ -2,20 +2,20 @@ title: Pipeline from Tasks --- -The [pipeline_from_tasks.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/pipeline_from_tasks.py) +The [pipeline_from_tasks.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/pipeline_from_tasks.py) example demonstrates a simple pipeline, where each step is a [ClearML Task](../../fundamentals/task.md). The pipeline is implemented using the [PipelineController](../../references/sdk/automation_controller_pipelinecontroller.md) class. Steps are added to a PipelineController object, which launches and monitors the steps when executed. This example incorporates four tasks, each of which is created using a different script: -* **Controller Task** ([pipeline_from_tasks.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/pipeline_from_tasks.py)) - +* **Controller Task** ([pipeline_from_tasks.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/pipeline_from_tasks.py)) - Implements the pipeline controller, adds the steps (tasks) to the pipeline, and runs the pipeline. -* **Step 1** ([step1_dataset_artifact.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/step1_dataset_artifact.py)) - +* **Step 1** ([step1_dataset_artifact.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/step1_dataset_artifact.py)) - Downloads data and stores the data as an artifact. -* **Step 2** ([step2_data_processing.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/step2_data_processing.py)) - +* **Step 2** ([step2_data_processing.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/step2_data_processing.py)) - Loads the stored data (from Step 1), processes it, and stores the processed data as artifacts. -* **Step 3** ([step3_train_model.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/step3_train_model.py)) - +* **Step 3** ([step3_train_model.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/step3_train_model.py)) - Loads the processed data (from Step 2) and trains a network. When the controller task is executed, it clones the step tasks, and enqueues the newly cloned tasks for execution. Note @@ -100,7 +100,7 @@ The sections below describe in more detail what happens in the controller task a ## Step 1 - Downloading the Data -The pipeline's first step ([step1_dataset_artifact.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/step1_dataset_artifact.py)) +The pipeline's first step ([step1_dataset_artifact.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/step1_dataset_artifact.py)) does the following: 1. Download data using [`StorageManager.get_local_copy()`](../../references/sdk/storage.md#storagemanagerget_local_copy): @@ -108,7 +108,7 @@ does the following: ```python # simulate local dataset, download one, so we have something local local_iris_pkl = StorageManager.get_local_copy( - remote_url='https://github.com/allegroai/events/raw/master/odsc20-east/generic/iris_dataset.pkl' + remote_url='https://github.com/clearml/events/raw/master/odsc20-east/generic/iris_dataset.pkl' ) ``` 1. Store the data as an artifact named `dataset` using [`Task.upload_artifact()`](../../references/sdk/task.md#upload_artifact): @@ -119,7 +119,7 @@ does the following: ## Step 2 - Processing the Data -The pipeline's second step ([step2_data_processing.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/step2_data_processing.py)) +The pipeline's second step ([step2_data_processing.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/step2_data_processing.py)) does the following: 1. Connect its configuration parameters with the ClearML task: @@ -154,7 +154,7 @@ does the following: ## Step 3 - Training the Network -The pipeline's third step ([step3_train_model.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/step3_train_model.py)) +The pipeline's third step ([step3_train_model.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/step3_train_model.py)) does the following: 1. Connect its configuration parameters with the ClearML task. This allows the [pipeline controller](#the-pipeline-controller) to override the `dataset_task_id` value as the pipeline is run. @@ -210,7 +210,7 @@ does the following: ## WebApp -When the experiment is executed, the console output displays the task ID, and links to the pipeline controller task page and +When the task is executed, the console output displays the task ID, and links to the pipeline controller task page and pipeline page. ``` diff --git a/docs/guides/pipeline/pipeline_decorator.md b/docs/guides/pipeline/pipeline_decorator.md index af0566f4..0ae0a0a5 100644 --- a/docs/guides/pipeline/pipeline_decorator.md +++ b/docs/guides/pipeline/pipeline_decorator.md @@ -2,11 +2,11 @@ title: Pipeline from Decorators --- -The [pipeline_from_decorator.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/pipeline_from_decorator.py) -example demonstrates the creation of a pipeline in ClearML using the [`PipelineDecorator`](../../references/sdk/automation_controller_pipelinecontroller.md#class-automationcontrollerpipelinedecorator) +The [pipeline_from_decorator.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/pipeline_from_decorator.py) +example demonstrates the creation of a pipeline in ClearML using the [`PipelineDecorator`](../../references/sdk/automation_controller_pipelinedecorator.md#class-automationcontrollerpipelinedecorator) class. -This example creates a pipeline incorporating four tasks, each of which is created from a python function using a custom decorator: +This example creates a pipeline incorporating four tasks, each of which is created from a Python function using a custom decorator: * `executing_pipeline`- Implements the pipeline controller which defines the pipeline structure and execution logic. * `step_one` - Downloads and processes data. * `step_two` - Further processes the data from `step_one`. @@ -14,11 +14,11 @@ This example creates a pipeline incorporating four tasks, each of which is creat * `step_four` - Uses data from `step_two` and the model from `step_three` to make a prediction. The pipeline steps, defined in the `step_one`, `step_two`, `step_three`, and `step_four` functions, are each wrapped with the -[`@PipelineDecorator.component`](../../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorcomponent) +[`@PipelineDecorator.component`](../../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorcomponent) decorator, which creates a ClearML pipeline step for each one when the pipeline is executed. The logic that executes these steps and controls the interaction between them is implemented in the `executing_pipeline` -function. This function is wrapped with the [`@PipelineDecorator.pipeline`](../../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorpipeline) +function. This function is wrapped with the [`@PipelineDecorator.pipeline`](../../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorpipeline) decorator which creates the ClearML pipeline task when it is executed. The sections below describe in more detail what happens in the pipeline controller and steps. @@ -28,7 +28,7 @@ The sections below describe in more detail what happens in the pipeline controll In this example, the pipeline controller is implemented by the `executing_pipeline` function. Using the `@PipelineDecorator.pipeline` decorator creates a ClearML Controller Task from the function when it is executed. -For detailed information, see [`@PipelineDecorator.pipeline`](../../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorpipeline). +For detailed information, see [`@PipelineDecorator.pipeline`](../../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorpipeline). In the example script, the controller defines the interactions between the pipeline steps in the following way: 1. The controller function passes its argument, `pickle_url`, to the pipeline's first step (`step_one`) @@ -39,13 +39,13 @@ In the example script, the controller defines the interactions between the pipel :::info Local Execution In this example, the pipeline is set to run in local mode by using -the PipelineDecorator.run_locally -method before calling the pipeline function. See pipeline execution options [here](../../pipelines/pipelines_sdk_function_decorators.md#running-the-pipeline). +[`PipelineDecorator.run_locally()`](../../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorrun_locally) +before calling the pipeline function. See pipeline execution options [here](../../pipelines/pipelines_sdk_function_decorators.md#running-the-pipeline). ::: ## Pipeline Steps Using the `@PipelineDecorator.component` decorator will make the function a pipeline component that can be called from the -pipeline controller, which implements the pipeline's execution logic. For detailed information, see [`@PipelineDecorator.component`](../../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorcomponent). +pipeline controller, which implements the pipeline's execution logic. For detailed information, see [`@PipelineDecorator.component`](../../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorcomponent). When the pipeline controller calls a pipeline step, a corresponding ClearML task will be created. Notice that all package imports inside the function will be automatically logged as required packages for the pipeline execution step. @@ -58,12 +58,12 @@ PipelineDecorator.set_default_execution_queue('default') # PipelineDecorator.debug_pipeline() executing_pipeline( - pickle_url='https://github.com/allegroai/events/raw/master/odsc20-east/generic/iris_dataset.pkl', + pickle_url='https://github.com/clearml/events/raw/master/odsc20-east/generic/iris_dataset.pkl', ) ``` By default, the pipeline controller and the pipeline steps are launched through ClearML [queues](../../fundamentals/agents_and_queues.md#what-is-a-queue). -Use the [`PipelineDecorator.set_default_execution_queue`](../../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorset_default_execution_queue) +Use the [`PipelineDecorator.set_default_execution_queue`](../../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorset_default_execution_queue) method to specify the execution queue of all pipeline steps. The `execution_queue` parameter of the `@PipelineDecorator.component` decorator overrides the default queue value for the specific step for which it was specified. @@ -76,7 +76,7 @@ To run the pipeline, call the pipeline controller function. ## WebApp -When the experiment is executed, the console output displays the task ID, and links to the pipeline controller task page and pipeline page. +When the task is executed, the console output displays the task ID, and links to the pipeline controller task page and pipeline page. ``` ClearML Task: created new task id=bc93610688f242ecbbe70f413ff2cf5f diff --git a/docs/guides/pipeline/pipeline_functions.md b/docs/guides/pipeline/pipeline_functions.md index c1ada3a6..0ac60a55 100644 --- a/docs/guides/pipeline/pipeline_functions.md +++ b/docs/guides/pipeline/pipeline_functions.md @@ -2,7 +2,7 @@ title: Pipeline from Functions --- -The [pipeline_from_functions.py](https://github.com/allegroai/clearml/blob/master/examples/pipeline/pipeline_from_functions.py) +The [pipeline_from_functions.py](https://github.com/clearml/clearml/blob/master/examples/pipeline/pipeline_from_functions.py) example script demonstrates the creation of a pipeline using the [PipelineController](../../references/sdk/automation_controller_pipelinecontroller.md) class. @@ -45,7 +45,7 @@ the function will be automatically logged as required packages for the pipeline pipe.add_parameter( name='url', description='url to pickle file', - default='https://github.com/allegroai/events/raw/master/odsc20-east/generic/iris_dataset.pkl' + default='https://github.com/clearml/events/raw/master/odsc20-east/generic/iris_dataset.pkl' ) ``` @@ -105,7 +105,7 @@ the function will be automatically logged as required packages for the pipeline The pipeline will be launched remotely, through the `services` queue, unless otherwise specified. ## WebApp -When the experiment is executed, the console output displays the task ID, and links to the pipeline controller task page and pipeline page. +When the pipeline is executed, the console output displays the task ID, and links to the pipeline controller task page and pipeline page. ``` ClearML Task: created new task id=bc93610688f242ecbbe70f413ff2cf5f diff --git a/docs/guides/reporting/3d_plots_reporting.md b/docs/guides/reporting/3d_plots_reporting.md index abf8f456..080c6fdf 100644 --- a/docs/guides/reporting/3d_plots_reporting.md +++ b/docs/guides/reporting/3d_plots_reporting.md @@ -2,12 +2,12 @@ title: 3D Plots Reporting --- -The [3d_plots_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/3d_plots_reporting.py) +The [3d_plots_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/3d_plots_reporting.py) example demonstrates reporting a series as a surface plot and as a 3D scatter plot. -When the script runs, it creates an experiment named `3D plot reporting` in the `examples` project. +When the script runs, it creates a task named `3D plot reporting` in the `examples` project. -ClearML reports these plots in the experiment's **PLOTS** tab. +ClearML reports these plots in the task's **PLOTS** tab. ## Surface Plot diff --git a/docs/guides/reporting/artifacts.md b/docs/guides/reporting/artifacts.md index 41d8d7e7..8c764169 100644 --- a/docs/guides/reporting/artifacts.md +++ b/docs/guides/reporting/artifacts.md @@ -2,8 +2,8 @@ title: Artifacts Reporting --- -The [artifacts.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/artifacts.py) example demonstrates -uploading objects (other than models) to storage as experiment artifacts. +The [artifacts.py](https://github.com/clearml/clearml/blob/master/examples/reporting/artifacts.py) example demonstrates +uploading objects (other than models) to storage as task artifacts. These artifacts include: * Pandas DataFrames @@ -19,14 +19,14 @@ S3 buckets, Google Cloud Storage, and Azure Storage ([debug sample storage](../. is different). Configure ClearML in any of the following ways: * In the configuration file, set [`default_output_uri`](../../configs/clearml_conf.md#config_default_output_uri). -* In code, when [initializing a Task](../../references/sdk/task.md#taskinit), use the `output_uri` parameter. -* In the **ClearML Web UI**, when [modifying an experiment](../../webapp/webapp_exp_tuning.md#output-destination). +* In code, when [initializing a task](../../references/sdk/task.md#taskinit), use the `output_uri` parameter. +* In the **ClearML Web UI**, when [modifying a task](../../webapp/webapp_exp_tuning.md#output-destination). -When the script runs, it creates an experiment named `artifacts example` in the `examples` project. +When the script runs, it creates a task named `artifacts example` in the `examples` project. -ClearML reports artifacts in the **ClearML Web UI** **>** experiment details **>** **ARTIFACTS** tab. +ClearML reports artifacts in the **ClearML Web UI** **>** task details **>** **ARTIFACTS** tab. -![Experiment artifacts](../../img/examples_reporting_03.png) +![Task artifacts](../../img/examples_reporting_03.png) ## Dynamically Tracked Artifacts diff --git a/docs/guides/reporting/clearml_logging_example.md b/docs/guides/reporting/clearml_logging_example.md index 1931e2ac..760152b5 100644 --- a/docs/guides/reporting/clearml_logging_example.md +++ b/docs/guides/reporting/clearml_logging_example.md @@ -2,7 +2,7 @@ title: Using Logger - Jupyter Notebook --- -The [jupyter_logging_example.ipynb](https://github.com/allegroai/clearml/blob/master/examples/reporting/jupyter_logging_example.ipynb) +The [jupyter_logging_example.ipynb](https://github.com/clearml/clearml/blob/master/examples/reporting/jupyter_logging_example.ipynb) script demonstrates the integration of ClearML's explicit reporting module, `Logger`, in a Jupyter Notebook. All ClearML explicit reporting works with Jupyter Notebook. diff --git a/docs/guides/reporting/explicit_reporting.md b/docs/guides/reporting/explicit_reporting.md index edd34df2..dcf3ea53 100644 --- a/docs/guides/reporting/explicit_reporting.md +++ b/docs/guides/reporting/explicit_reporting.md @@ -4,7 +4,7 @@ title: Explicit Reporting Tutorial In this tutorial, learn how to extend ClearML automagical capturing of inputs and outputs with explicit reporting. -In this example, you will add the following to the [pytorch_mnist.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py) +In this example, you will add the following to the [pytorch_mnist.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py) example script from ClearML's GitHub repo: * Setting an output destination for model checkpoints (snapshots). @@ -14,12 +14,12 @@ example script from ClearML's GitHub repo: ## Prerequisites -* The [clearml](https://github.com/allegroai/clearml) repository is cloned. +* The [clearml](https://github.com/clearml/clearml) repository is cloned. * The `clearml` package is installed. ## Before Starting -Make a copy of [pytorch_mnist.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py) +Make a copy of [pytorch_mnist.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py) to add explicit reporting to it. ```bash @@ -29,7 +29,7 @@ cp pytorch_mnist.py pytorch_mnist_tutorial.py ## Step 1: Setting an Output Destination for Model Checkpoints Specify a default output location, which is where model checkpoints (snapshots) and artifacts will be stored when the -experiment runs. Some possible destinations include: +task runs. Some possible destinations include: * Local destination * Shared folder * Cloud storage: @@ -234,7 +234,7 @@ task.register_artifact( ### Reference the Registered Artifact -Once an artifact is registered, it can be referenced and utilized in the Python experiment script. +Once an artifact is registered, it can be referenced and utilized in the Python task script. In the tutorial script, add [`Task.current_task()`](../../references/sdk/task.md#taskcurrent_task) and [`Task.get_registered_artifacts()`](../../references/sdk/task.md#get_registered_artifacts) @@ -279,16 +279,16 @@ task.upload_artifact( ## Additional Information -After extending the Python experiment script, run it and view the results in the **ClearML Web UI**. +After extending the Python task script, run it and view the results in the **ClearML Web UI**. ```bash python pytorch_mnist_tutorial.py ``` -**To view the experiment results, do the following:** +**To view the task results:** 1. In the **ClearML Web UI**, on the Projects page, click the examples project. -1. In the experiments table, click the **Extending automagical ClearML example** experiment. +1. In the task table, click the **Extending automagical ClearML example** task. 1. In the **ARTIFACTS** tab, **DATA AUDIT** section, click **Test_Loss_Correct**. The registered Pandas DataFrame appears, including the file path, size, hash, metadata, and a preview. 1. In the **OTHER** section, click **Loss**. The uploaded numpy array appears, including its related information. diff --git a/docs/guides/reporting/html_reporting.md b/docs/guides/reporting/html_reporting.md index decbc0d9..1842e941 100644 --- a/docs/guides/reporting/html_reporting.md +++ b/docs/guides/reporting/html_reporting.md @@ -2,13 +2,12 @@ title: HTML Reporting --- -The [html_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/html_reporting.py) example +The [html_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/html_reporting.py) example demonstrates reporting local HTML files and HTML by URL using [`Logger.report_media()`](../../references/sdk/logger.md#report_media). -ClearML reports these HTML debug samples in the **ClearML Web UI** **>** experiment details **>** -**DEBUG SAMPLES** tab. +ClearML reports these HTML debug samples in the **ClearML Web UI** **>** task's **DEBUG SAMPLES** tab. -When the script runs, it creates an experiment named `html samples reporting` in the `examples` project. +When the script runs, it creates a task named `html samples reporting` in the `examples` project. ![image](../../img/examples_reporting_05.png) @@ -16,7 +15,7 @@ When the script runs, it creates an experiment named `html samples reporting` in Report HTML by URL using [`Logger.report_media()`](../../references/sdk/logger.md#report_media)'s `url` parameter. -See the example script's [`report_html_url`](https://github.com/allegroai/clearml/blob/master/examples/reporting/html_reporting.py#L16) +See the example script's [`report_html_url`](https://github.com/clearml/clearml/blob/master/examples/reporting/html_reporting.py#L16) function, which reports the ClearML documentation's home page. ```python @@ -38,7 +37,7 @@ Report the following using `Logger.report_media()`'s `local_path` parameter: ### Interactive HTML -See the example script's [`report_html_periodic_table`](https://github.com/allegroai/clearml/blob/master/examples/reporting/html_reporting.py#L26) function, which reports a file created from Bokeh sample data. +See the example script's [`report_html_periodic_table`](https://github.com/clearml/clearml/blob/master/examples/reporting/html_reporting.py#L26) function, which reports a file created from Bokeh sample data. ```python Logger.current_logger().report_media( title="html", @@ -50,7 +49,7 @@ Logger.current_logger().report_media( ### Bokeh GroupBy HTML -See the example script's [`report_html_groupby`](https://github.com/allegroai/clearml/blob/master/examples/reporting/html_reporting.py#L117) function, which reports a Pandas GroupBy with nested HTML, created from Bokeh sample data. +See the example script's [`report_html_groupby`](https://github.com/clearml/clearml/blob/master/examples/reporting/html_reporting.py#L117) function, which reports a Pandas GroupBy with nested HTML, created from Bokeh sample data. ```python Logger.current_logger().report_media( title="html", @@ -62,7 +61,7 @@ Logger.current_logger().report_media( ### Bokeh Graph HTML -See the example script's [`report_html_graph`](https://github.com/allegroai/clearml/blob/master/examples/reporting/html_reporting.py#L162) function, which reports a Bokeh plot created from Bokeh sample data. +See the example script's [`report_html_graph`](https://github.com/clearml/clearml/blob/master/examples/reporting/html_reporting.py#L162) function, which reports a Bokeh plot created from Bokeh sample data. ```python Logger.current_logger().report_media( @@ -75,7 +74,7 @@ Logger.current_logger().report_media( ### Bokeh Image HTML -See the example script's [`report_html_image`](https://github.com/allegroai/clearml/blob/master/examples/reporting/html_reporting.py#L195) function, which reports an image created from Bokeh sample data. +See the example script's [`report_html_image`](https://github.com/clearml/clearml/blob/master/examples/reporting/html_reporting.py#L195) function, which reports an image created from Bokeh sample data. ```python Logger.current_logger().report_media( diff --git a/docs/guides/reporting/hyper_parameters.md b/docs/guides/reporting/hyper_parameters.md index ac14d0a6..db6fdae6 100644 --- a/docs/guides/reporting/hyper_parameters.md +++ b/docs/guides/reporting/hyper_parameters.md @@ -2,16 +2,16 @@ title: Hyperparameters Reporting --- -The [hyper_parameters.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/hyper_parameters.py) example +The [hyper_parameters.py](https://github.com/clearml/clearml/blob/master/examples/reporting/hyper_parameters.py) example script demonstrates: * ClearML's automatic logging of `argparse` command line options and TensorFlow Definitions * Logging user-defined hyperparameters with a parameter dictionary and connecting the dictionary to a Task. -Hyperparameters appear in the **web UI** in the experiment's page, under **CONFIGURATION** **>** **HYPERPARAMETERS**. -Each type is in its own subsection. Parameters from older experiments are grouped together with the ``argparse`` command +Hyperparameters appear in the **web UI** in the task's page, under **CONFIGURATION** **>** **HYPERPARAMETERS**. +Each type is in its own subsection. Parameters from older tasks are grouped together with the ``argparse`` command line options (in the **Args** subsection). -When the script runs, it creates an experiment named `hyper-parameters example` in the `examples` project. +When the script runs, it creates a task named `hyper-parameters example` in the `examples` project. ## Argparse Command Line Options diff --git a/docs/guides/reporting/image_reporting.md b/docs/guides/reporting/image_reporting.md index 5ef2b38b..eb61136d 100644 --- a/docs/guides/reporting/image_reporting.md +++ b/docs/guides/reporting/image_reporting.md @@ -2,7 +2,7 @@ title: Image Reporting --- -The [image_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/image_reporting.py) example +The [image_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/image_reporting.py) example demonstrates reporting (uploading) images in several formats, including: * NumPy arrays * uint8 @@ -15,7 +15,7 @@ or ClearML can be configured for image storage, see [`Logger.set_default_upload_ (storage for [artifacts](../../clearml_sdk/task_sdk.md#setting-upload-destination) is different). Set credentials for storage in the ClearML configuration file. -When the script runs, it creates an experiment named `image reporting` in the `examples` project. +When the script runs, it creates a task named `image reporting` in the `examples` project. Report images using several formats by calling [`Logger.report_image()`](../../references/sdk/logger.md#report_image): @@ -47,7 +47,7 @@ Logger.current_logger().report_image( ) ``` -ClearML reports these images as debug samples in the **ClearML Web UI**, under the experiment's +ClearML reports these images as debug samples in the **ClearML Web UI**, under the task's **DEBUG SAMPLES** tab. ![Debug samples](../../img/examples_reporting_07.png) diff --git a/docs/guides/reporting/manual_matplotlib_reporting.md b/docs/guides/reporting/manual_matplotlib_reporting.md index 03a3ed91..3e0ab33f 100644 --- a/docs/guides/reporting/manual_matplotlib_reporting.md +++ b/docs/guides/reporting/manual_matplotlib_reporting.md @@ -2,21 +2,21 @@ title: Manual Matplotlib Reporting --- -The [matplotlib_manual_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/matplotlib_manual_reporting.py) +The [matplotlib_manual_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/matplotlib_manual_reporting.py) example demonstrates using ClearML to log plots and images generated by Matplotlib and Seaborn. ## Plots The Matplotlib and Seaborn plots reported using [`Logger.report_matplotlib_figure()`](../../references/sdk/logger.md#report_matplotlib_figure) -appear in the experiment's **PLOTS**. +appear in the task's **PLOTS** tab. -![Experiment Matplotlib plots](../../img/manual_matplotlib_reporting_01.png) +![Task Matplotlib plots](../../img/manual_matplotlib_reporting_01.png) -![Experiment Seaborn plot](../../img/manual_matplotlib_reporting_02.png) +![Task Seaborn plot](../../img/manual_matplotlib_reporting_02.png) ## Debug Samples Matplotlib figures can be logged as images by using [`Logger.report_matplotlib_figure()`](../../references/sdk/logger.md#report_matplotlib_figure), -and passing `report_image=True`. The images are displayed in the experiment's **DEBUG SAMPLES**. +and passing `report_image=True`. The images are displayed in the task's **DEBUG SAMPLES**. -![Experiment debug sample](../../img/manual_matplotlib_reporting_03.png) \ No newline at end of file +![Task debug sample](../../img/manual_matplotlib_reporting_03.png) \ No newline at end of file diff --git a/docs/guides/reporting/media_reporting.md b/docs/guides/reporting/media_reporting.md index eed88097..6e5b79ec 100644 --- a/docs/guides/reporting/media_reporting.md +++ b/docs/guides/reporting/media_reporting.md @@ -2,7 +2,7 @@ title: Media Reporting --- -The [media_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/media_reporting.py) example +The [media_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/media_reporting.py) example demonstrates reporting (uploading) images, audio, and video. Use [`Logger.report_media()`](../../references/sdk/logger.md#report_media) to upload from: * Local path @@ -14,10 +14,10 @@ storage using [`Logger.set_default_upload_destination()`](../../references/sdk/l (note that [artifact storage](../../clearml_sdk/task_sdk.md#setting-upload-destination) is handled differently). Set the storage credentials in the [clearml.conf file](../../configs/clearml_conf.md#sdk-section). -ClearML reports media in the **ClearML Web UI** **>** experiment details **>** **DEBUG SAMPLES** +ClearML reports media in the **ClearML Web UI** **>** task details **>** **DEBUG SAMPLES** tab. -When the script runs, it creates an experiment named `audio and video reporting` in the `examples` +When the script runs, it creates a task named `audio and video reporting` in the `examples` project. ## Reporting (Uploading) Media from a Source by URL diff --git a/docs/guides/reporting/model_config.md b/docs/guides/reporting/model_config.md index 7f21d696..2fada138 100644 --- a/docs/guides/reporting/model_config.md +++ b/docs/guides/reporting/model_config.md @@ -2,7 +2,7 @@ title: Model Reporting --- -The [model_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/model_reporting.py) example +The [model_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/model_reporting.py) example demonstrates logging a model using the [OutputModel](../../references/sdk/model_outputmodel.md) class. diff --git a/docs/guides/reporting/pandas_reporting.md b/docs/guides/reporting/pandas_reporting.md index 42db3dfb..2e1edbfd 100644 --- a/docs/guides/reporting/pandas_reporting.md +++ b/docs/guides/reporting/pandas_reporting.md @@ -2,12 +2,12 @@ title: Tables Reporting (Pandas and CSV Files) --- -The [pandas_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/pandas_reporting.py) example demonstrates reporting tabular data from Pandas DataFrames and CSV files as tables. +The [pandas_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/pandas_reporting.py) example demonstrates reporting tabular data from Pandas DataFrames and CSV files as tables. -ClearML reports these tables, and displays them in the **ClearML Web UI** **>** experiment details **>** **PLOTS** +ClearML reports these tables, and displays them in the **ClearML Web UI** **>** task's **PLOTS** tab. -When the script runs, it creates an experiment named `table reporting` in the `examples` project. +When the script runs, it creates a task named `table reporting` in the `examples` project. ## Reporting Pandas DataFrames as Tables diff --git a/docs/guides/reporting/plotly_reporting.md b/docs/guides/reporting/plotly_reporting.md index 5ec57dfa..79954808 100644 --- a/docs/guides/reporting/plotly_reporting.md +++ b/docs/guides/reporting/plotly_reporting.md @@ -2,7 +2,7 @@ title: Plotly Reporting --- -The [plotly_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/plotly_reporting.py) example +The [plotly_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/plotly_reporting.py) example demonstrates ClearML's Plotly integration and reporting. Report Plotly plots in ClearML by calling the [`Logger.report_plotly()`](../../references/sdk/logger.md#report_plotly) method, and passing a complex @@ -30,9 +30,9 @@ task.get_logger().report_plotly( ) ``` -When the script runs, it creates an experiment named `plotly reporting` in the examples project. +When the script runs, it creates a task named `plotly reporting` in the examples project. -ClearML reports Plotly figures, and displays them in the **ClearML Web UI** **>** experiment details **>** **PLOTS** +ClearML reports Plotly figures, and displays them in the **ClearML Web UI** **>** task's **PLOTS** tab. -![Web UI experiment plots](../../img/examples_reporting_13.png) \ No newline at end of file +![Web UI task plots](../../img/examples_reporting_13.png) \ No newline at end of file diff --git a/docs/guides/reporting/scalar_reporting.md b/docs/guides/reporting/scalar_reporting.md index dc3b64b2..bee2d8cf 100644 --- a/docs/guides/reporting/scalar_reporting.md +++ b/docs/guides/reporting/scalar_reporting.md @@ -2,11 +2,10 @@ title: Scalars Reporting --- -The [scalar_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/scalar_reporting.py) script -demonstrates explicit scalar reporting. ClearML reports scalars in the **ClearML Web UI** **>** experiment details -**>** **SCALARS** tab. +The [scalar_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/scalar_reporting.py) script +demonstrates explicit scalar reporting. ClearML reports scalars in the **ClearML Web UI** **>** task's **SCALARS** tab. -When the script runs, it creates an experiment named `scalar reporting` in the `examples` project. +When the script runs, it creates a task named `scalar reporting` in the `examples` project. To reports scalars, call [`Logger.report_scalar()`](../../references/sdk/logger.md#report_scalar). To report more than one series on the same plot, use the same `title` argument. For different plots, use different diff --git a/docs/guides/reporting/scatter_hist_confusion_mat_reporting.md b/docs/guides/reporting/scatter_hist_confusion_mat_reporting.md index 9acd7f7c..410b281b 100644 --- a/docs/guides/reporting/scatter_hist_confusion_mat_reporting.md +++ b/docs/guides/reporting/scatter_hist_confusion_mat_reporting.md @@ -2,15 +2,15 @@ title: 2D Plots Reporting --- -The [scatter_hist_confusion_mat_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/scatter_hist_confusion_mat_reporting.py) +The [scatter_hist_confusion_mat_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/scatter_hist_confusion_mat_reporting.py) example demonstrates reporting series data in the following 2D formats: * [Histograms](#histograms) * [Confusion matrices](#confusion-matrices) * [Scatter plots](#2d-scatter-plots) -ClearML reports these tables in the **ClearML Web UI**, experiment details **>** **PLOTS** tab. +ClearML reports these tables in the **ClearML Web UI** **>** task's **PLOTS** tab. -When the script runs, it creates an experiment named `2D plots reporting` in the `examples` project. +When the script runs, it creates a task named `2D plots reporting` in the `examples` project. ## Histograms diff --git a/docs/guides/reporting/text_reporting.md b/docs/guides/reporting/text_reporting.md index e75f985d..1b7eba72 100644 --- a/docs/guides/reporting/text_reporting.md +++ b/docs/guides/reporting/text_reporting.md @@ -2,12 +2,12 @@ title: Text Reporting --- -The [text_reporting.py](https://github.com/allegroai/clearml/blob/master/examples/reporting/text_reporting.py) script +The [text_reporting.py](https://github.com/clearml/clearml/blob/master/examples/reporting/text_reporting.py) script demonstrates reporting explicit text by calling [`Logger.report_text()`](../../references/sdk/logger.md#report_text). -ClearML reports the text in the **ClearML Web UI**, in the experiment's **CONSOLE** tab. +ClearML reports the text in the **ClearML Web UI**, in the task's **CONSOLE** tab. -When the script runs, it creates an experiment named `text reporting` in the `examples` project. +When the script runs, it creates a task named `text reporting` in the `examples` project. ```python # report text diff --git a/docs/guides/reporting/using_artifacts.md b/docs/guides/reporting/using_artifacts.md index a0ebee68..f470d971 100644 --- a/docs/guides/reporting/using_artifacts.md +++ b/docs/guides/reporting/using_artifacts.md @@ -2,7 +2,7 @@ title: Using Artifacts --- -The [using_artifacts_example](https://github.com/allegroai/clearml/blob/master/examples/reporting/using_artifacts_example.py) +The [using_artifacts_example](https://github.com/clearml/clearml/blob/master/examples/reporting/using_artifacts_example.py) script demonstrates uploading a data file to a task as an artifact and then accessing and utilizing the artifact in a different task. When the script runs it creates two tasks, `create artifact` and `use artifact from other task`, both of which are associated @@ -21,7 +21,7 @@ task1.upload_artifact(name='data file', artifact_object='data_samples/sample.jso The task is then closed, using [`Task.close()`](../../references/sdk/task.md#close), so another task can be initialized in the same script. -Artifact details (location and size) can be viewed in ClearML's **web UI > experiment details > ARTIFACTS tab > OTHER section**. +Artifact details (location and size) can be viewed in ClearML's **web UI > task details > ARTIFACTS tab > OTHER section**. ![Artifacts in WebApp](../../img/examples_using_artifacts_1.png) diff --git a/docs/guides/services/aws_autoscaler.md b/docs/guides/services/aws_autoscaler.md index 0823869a..c761b49b 100644 --- a/docs/guides/services/aws_autoscaler.md +++ b/docs/guides/services/aws_autoscaler.md @@ -2,8 +2,8 @@ title: ClearML AWS Autoscaler Service --- -The ClearML [AWS autoscaler example](https://github.com/allegroai/clearml/blob/master/examples/services/aws-autoscaler/aws_autoscaler.py) -demonstrates how to use the [`clearml.automation.auto_scaler`](https://github.com/allegroai/clearml/blob/master/clearml/automation/auto_scaler.py) +The ClearML [AWS autoscaler example](https://github.com/clearml/clearml/blob/master/examples/services/aws-autoscaler/aws_autoscaler.py) +demonstrates how to use the [`clearml.automation.auto_scaler`](https://github.com/clearml/clearml/blob/master/clearml/automation/auto_scaler.py) module to implement a service that optimizes AWS EC2 instance scaling according to a defined instance budget. The autoscaler periodically polls your AWS cluster and automatically stops idle instances based on a defined maximum idle time or spins @@ -12,7 +12,7 @@ up new instances when there aren't enough to execute pending tasks. ## Running the ClearML AWS Autoscaler Run the ClearML AWS autoscaler in one of these ways: -* Run the [aws_autoscaler.py](https://github.com/allegroai/clearml/blob/master/examples/services/aws-autoscaler/aws_autoscaler.py) +* Run the [aws_autoscaler.py](https://github.com/clearml/clearml/blob/master/examples/services/aws-autoscaler/aws_autoscaler.py) script locally * Launch through your [`services` queue](../../clearml_agent/clearml_agent_services_mode.md) @@ -166,8 +166,8 @@ The values configured through the wizard are stored in the task's hyperparameter [`Task.connect()`](../../references/sdk/task.md#connect) and [`Task.set_configuration_object()`](../../references/sdk/task.md#set_configuration_object) methods respectively. They can be viewed in the WebApp, in the task's **CONFIGURATION** page under **HYPERPARAMETERS** and **CONFIGURATION OBJECTS > General**. -ClearML automatically logs command line arguments defined with argparse. View them in the experiments **CONFIGURATION** -page under **HYPERPARAMETERS > General**. +ClearML automatically logs command line arguments defined with argparse. View them in the task's **CONFIGURATION** +tab under **HYPERPARAMETERS > General**. ![Autoscaler configuration](../../img/examples_aws_autoscaler_config.png) @@ -177,6 +177,6 @@ in [services mode](../../clearml_agent/clearml_agent_services_mode.md) for such ### Console -All other console output appears in the experiment's **CONSOLE**. +All other console output appears in the task's **CONSOLE**. ![Autoscaler console](../../img/examples_aws_autoscaler_console.png) \ No newline at end of file diff --git a/docs/guides/services/cleanup_service.md b/docs/guides/services/cleanup_service.md index 85a01fbf..fbf75776 100644 --- a/docs/guides/services/cleanup_service.md +++ b/docs/guides/services/cleanup_service.md @@ -2,11 +2,11 @@ title: Cleanup Service --- -The [cleanup service](https://github.com/allegroai/clearml/blob/master/examples/services/cleanup/cleanup_service.py) +The [cleanup service](https://github.com/clearml/clearml/blob/master/examples/services/cleanup/cleanup_service.py) demonstrates how to use the `clearml.backend_api.session.client.APIClient` class to implement a service that deletes old archived tasks and their associated files: model checkpoints, other artifacts, and debug samples. -Modify the cleanup service's parameters to specify which archived experiments to delete and when to delete them. +Modify the cleanup service's parameters to specify which archived tasks to delete and when to delete them. ### Running the Cleanup Service @@ -44,7 +44,7 @@ This is followed by details from the cleanup. ## The Cleanup Service Code -[cleanup_service.py](https://github.com/allegroai/clearml/blob/master/examples/services/cleanup/cleanup_service.py) creates +[cleanup_service.py](https://github.com/clearml/clearml/blob/master/examples/services/cleanup/cleanup_service.py) creates an `APIClient` object that establishes a session with the ClearML Server, and accomplishes the cleanup by calling: * [`Tasks.get_all`](../../references/api/tasks.md#post-tasksget_all) to get a list of Tasks to delete, providing the following parameters: * `system_tags` - Get only Tasks tagged as `archived`. @@ -52,14 +52,14 @@ an `APIClient` object that establishes a session with the ClearML Server, and ac * [`Task.delete`](../../references/sdk/task.md#delete) - Delete a Task. ## Configuration -The experiment's hyperparameters are explicitly logged to ClearML using the [`Task.connect()`](../../references/sdk/task.md#connect) -method. View them in the WebApp, in the experiment's **CONFIGURATION** page under **HYPERPARAMETERS > General**. +The task's hyperparameters are explicitly logged to ClearML using the [`Task.connect()`](../../references/sdk/task.md#connect) +method. View them in the WebApp, in the task's **CONFIGURATION** tab under **HYPERPARAMETERS > General**. The task can be reused. Clone the task, edit its parameters, and enqueue the task to run in ClearML Agent [services mode](../../clearml_agent/clearml_agent_services_mode.md). ![Cleanup service configuration](../../img/example_cleanup_configuration.png) ## Console -All console output appears in the experiment's **CONSOLE**. +All console output appears in the task's **CONSOLE** tab. ![Cleanup service console](../../img/examples_cleanup_console.png) diff --git a/docs/guides/services/slack_alerts.md b/docs/guides/services/slack_alerts.md index 1da2af78..d3913146 100644 --- a/docs/guides/services/slack_alerts.md +++ b/docs/guides/services/slack_alerts.md @@ -2,15 +2,16 @@ title: Monitoring Service Posting Slack Alerts --- -The [Slack alerts example](https://github.com/allegroai/clearml/blob/master/examples/services/monitoring/slack_alerts.py) +The [Slack alerts example](https://github.com/clearml/clearml/blob/master/examples/services/monitoring/slack_alerts.py) demonstrates how to use the `clearml.automation.monitor` class to implement a service that monitors the completion and failure of tasks, and posts alert messages on a Slack channel. -![Slack alert example](../../img/examples_slack_alerts.png) +![Slack alert example](../../img/examples_slack_alerts.png#light-mode-only) +![Slack alert example](../../img/examples_slack_alerts_dark.png#dark-mode-only) -## Creating a Slack Bot +## Creating a Slackbot -Before configuring and running the Slack alert service, create a Slack Bot (**ClearML Bot**). +Before configuring and running the Slack alert service, create a Slackbot (**ClearML Bot**). :::important The Slack API token and channel you create are required to configure the Slack alert service. @@ -22,7 +23,7 @@ The Slack API token and channel you create are required to configure the Slack a 1. In **Development Slack Workspace**, select a workspace. 1. Click **Create App**. 1. In **Basic Information**, under **Display Information**, complete the following: - - In **Short description**, enter "Allegro Train Bot". + - In **Short description**, enter "ClearML Train Bot". - In **Background color**, enter "#202432". 1. Click **Save Changes**. 1. In **OAuth & Permissions**, under **Scopes**, click **Add an OAuth Scope**, and then select the following permissions @@ -60,17 +61,17 @@ The script supports the following additional command line options: * `service_queue` - The queue to use when running remotely as a service. The default value is `services` (make sure your workspace has such a queue and to assign a ClearML Agent to this queue). * `message_prefix` - A message prefix for Slack alerts. For example, to alert all channel members use: `"Hey "`. -* `min_num_iterations` - Minimal iteration threshold below which experiments are ignored. Use this option to eliminate +* `min_num_iterations` - Minimal iteration threshold below which tasks are ignored. Use this option to eliminate debug sessions that fail quickly. The default value is 0. * `project` - The name of the project to monitor. By default, all projects are monitored. -* `include_manual_experiments` - Whether to include experiments that are running locally: - * `True` - Monitor all experiments (both local and remote, executed by ClearML Agent). - * `False` (default) - Monitor only remote experiments. +* `include_manual_experiments` - Whether to include tasks that are running locally: + * `True` - Monitor all tasks (both local and remote, executed by ClearML Agent). + * `False` (default) - Monitor only remote tasks. * `include_completed_experiments` - If `False` (default), send alerts only for failed tasks. If `True`, send an alert for completed and failed tasks. * `include_archived` - If `False` (default), only tasks that are not archived will be reported. This option can be useful if a task is archived between polling. -* `refresh_rate` - How often to monitor the experiments in seconds. The default value is 10.0. +* `refresh_rate` - How often to monitor the tasks in seconds. The default value is 10.0. * `include_users` - Only report tasks that were initiated by these users (usernames and user IDs are accepted). Mutually exclusive to `exclude_users`. * `exclude_users` - Only report tasks that were NOT initiated by these users (usernames and user IDs are accepted). @@ -79,7 +80,7 @@ The script supports the following additional command line options: ## Configuration -ClearML automatically logs command line options defined with argparse. They appear in the experiment's **CONFIGURATION** +ClearML automatically logs command line options defined with argparse. They appear in the task's **CONFIGURATION** page under **HYPERPARAMETERS > Args**. ![Monitoring configuration](../../img/examples_slack_config.png) @@ -89,7 +90,7 @@ execution (you'll typically want to use a ClearML Agent running in [services mod for such service tasks). ## Console -All console output appears in the experiment's **CONSOLE** page. +All console output appears in the task's **CONSOLE** page. ## Additional Information about slack_alerts.py diff --git a/docs/guides/set_offline.md b/docs/guides/set_offline.md index 7ea5b6f3..94f7a0ee 100644 --- a/docs/guides/set_offline.md +++ b/docs/guides/set_offline.md @@ -98,5 +98,5 @@ ClearML: Importing offline session from /home/user/.clearml/cache/offline/b78684 ClearML results page: https://app.clear.ml/projects/4043a1657f374e9298649c6ba72ad233/experiments/bb8b0f6fa0f94536a0d27fb55f02d3a5/output/log ``` -The session details can be viewed in the ClearML WebApp, in the "my_task" experiment of the "examples" +The session details can be viewed in the ClearML WebApp, in the "my_task" task of the "examples" project, as specified when initializing the Task. \ No newline at end of file diff --git a/docs/guides/ui/building_leader_board.md b/docs/guides/ui/building_leader_board.md index b0f1f99e..1d8cffe5 100644 --- a/docs/guides/ui/building_leader_board.md +++ b/docs/guides/ui/building_leader_board.md @@ -2,12 +2,12 @@ title: Tracking Leaderboards --- -In this tutorial, you will set up a tracking leaderboard. A tracking leaderboard allows easy monitoring of experiments -using a customized [experiments table](../../webapp/webapp_exp_table.md) with auto refresh for continual updates. +In this tutorial, you will set up a tracking leaderboard. A tracking leaderboard allows easy monitoring of tasks +using a customized [task table](../../webapp/webapp_exp_table.md) with auto refresh for continual updates. The tracking leaderboard can be customized to include columns with information about: -* Experiment status -* Elapsed time since the experiment started and last updated +* Task status +* Elapsed time since the task started and last updated * Most recent iteration * Metrics * Hyperparameters @@ -17,24 +17,24 @@ Bookmark the leaderboard in the browser to reuse and share the leaderboard URL w For this tutorial, use one of the following as a project: -* Recommended: One of your projects with more than one experiment. -* Clone the [clearml](https://github.com/allegroai/clearml) repository and execute some of the example scripts. +* Recommended: One of your projects with more than one task. +* Clone the [clearml](https://github.com/clearml/clearml) repository and execute some of the example scripts. ## Step 1: Select a Project -The leaderboard will track experiments in one or all projects. +The leaderboard will track tasks in one or all projects. Begin by opening the [ClearML Web UI](../../webapp/webapp_overview.md) and selecting a project, by doing one of the following: * On the Dashboard, click a project card or **VIEW ALL**. * On the Projects page, click a project card or the **All projects** card. -## Step 2: Filter the Experiments +## Step 2: Filter the Tasks -The experiments table allows filtering experiments by experiment name, type, and status. +The task table allows filtering tasks by name, type, and status. **Apply any combination of the following filters:** -* Name - Use the search bar to find experiments containing any search term. +* Name - Use the search bar to find tasks containing any search term. * Type - Click the **TYPE** column's filter and then on the list select any of the following: * **Training** * **Testing** @@ -43,13 +43,13 @@ The experiments table allows filtering experiments by experiment name, type, and * And others, depending on the types of tasks in the project * Status - Click the **STATUS** column's filter and then on the list select any of the following: - * **Draft** - The experiment is not running. - * **Pending** - The experiment is in a queue waiting to be run by a worker. - * **Running** - The experiment is currently running by a worker. - * **Completed** - The experiment ran and terminated successfully. - * **Failed** - The experiment ran and terminated with an error. - * **Aborted** - The experiment ran and was manually or programmatically terminated. - * **Published** - The experiment is not running, it is preserved as read-only. + * **Draft** - The task is not running. + * **Pending** - The task is in a queue waiting to be run by a worker. + * **Running** - The task is currently running by a worker. + * **Completed** - The task ran and terminated successfully. + * **Failed** - The task ran and terminated with an error. + * **Aborted** - The task ran and was manually or programmatically terminated. + * **Published** - The task is not running, it is preserved as read-only. ## Step 3: Hide the Default Columns @@ -60,14 +60,14 @@ Customize the columns on the tracking leaderboard by hiding any of the default c 1. Click settings. 1. Select / clear any combination of the default columns from the following: - * **TYPE** - The type of experiment: training, testing, or other, depending on the types of experiments in the project. - * **NAME** - The name of the experiment. - * **STATUS** - The status of the experiment. + * **TYPE** - The type of task: training, testing, or other, depending on the types of tasks in the project. + * **NAME** - The name of the task. + * **STATUS** - The status of the task. * **PROJECT** - The project name. - * **USER** - The user creating or running the experiment. - * **STARTED** - The elapsed time since the experiment started running. - * **UPDATED** - The elapsed time since the experiment update. - * **ITERATION** - The last iteration of the experiment. For experiments with a status of Running, this is the most recent iteration. For Completed, Aborted, and Failed experiments, this is the final iteration. + * **USER** - The user creating or running the task. + * **STARTED** - The elapsed time since the task started running. + * **UPDATED** - The elapsed time since the task update. + * **ITERATION** - The last iteration of the task. For tasks with a status of `Running`, this is the most recent iteration. For `Completed`, `Aborted`, and `Failed` tasks, this is the final iteration. ## Step 4: Show Metrics or Hyperparameters @@ -83,7 +83,7 @@ recent), minimum, and/or maximum values. ## Step 5: Enable Auto Refresh -Auto refresh allows monitoring the progress of experiments in real time. It is enabled by default. +Auto refresh allows monitoring the progress of tasks in real time. It is enabled by default. **To enable / disable auto refresh:** @@ -92,7 +92,7 @@ Auto refresh allows monitoring the progress of experiments in real time. It is e ## Step 6: Save the Tracking Leaderboard The URL for **ClearML Web UI** now contains parameters and values for the customized leaderboard. Bookmark it to be able -to return to the leaderboard and monitor the experiments. +to return to the leaderboard and monitor the tasks. :::important Share the leaderboard with another user by copying and sharing the URL. diff --git a/docs/guides/ui/tuning_exp.md b/docs/guides/ui/tuning_exp.md index fcb7f89a..c94d95de 100644 --- a/docs/guides/ui/tuning_exp.md +++ b/docs/guides/ui/tuning_exp.md @@ -1,36 +1,36 @@ --- -title: Tuning Experiments +title: Tuning Tasks --- -In this tutorial, learn how to tune an experiment. The experiment that will be tuned is created by the [pytorch_mnist.py](https://github.com/allegroai/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py) +In this tutorial, learn how to tune a task. The task that will be tuned is created by the [pytorch_mnist.py](https://github.com/clearml/clearml/blob/master/examples/frameworks/pytorch/pytorch_mnist.py) example script. ## Prerequisites -* Clone the [clearml](https://github.com/allegroai/clearml) repository. -* Install the [requirements](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorflow/requirements.txt) +* Clone the [clearml](https://github.com/clearml/clearml) repository. +* Install the [requirements](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorflow/requirements.txt) for the TensorFlow examples. * Have **ClearML Agent** [installed and configured](../../clearml_agent/clearml_agent_setup.md#installation). -## Step 1: Run the Experiment +## Step 1: Run the Task -In the `examples/frameworks/pytorch` directory, run the experiment script: +In the `examples/frameworks/pytorch` directory, run the task script: ```commandline python pytorch_mnist.py ``` -## Step 2: Clone the Experiment +## Step 2: Clone the Task -Clone the experiment to create an editable copy for tuning. +Clone the task to create an editable copy for tuning. 1. In the ClearML WebApp (UI), on the Projects page, click the `examples` project card. -1. In the experiments table, right-click the experiment `pytorch mnist train`. +1. In the task table, right-click the task `pytorch mnist train`. -1. In the context menu, click **Clone** **>** **CLONE**. The newly cloned experiment appears and its info panel slides open. +1. In the context menu, click **Clone** **>** **CLONE**. The newly cloned task appears and its info panel slides open. -## Step 3: Tune the Cloned Experiment +## Step 3: Tune the Cloned Task To demonstrate tuning, change two hyperparameter values. @@ -44,7 +44,7 @@ To demonstrate tuning, change two hyperparameter values. ## Step 4: Run a Worker Daemon Listening to a Queue -To execute the cloned experiment, use a [ClearML Agent](../../fundamentals/agents_and_queues.md). +To execute the cloned task, use a [ClearML Agent](../../fundamentals/agents_and_queues.md). Run the agent on the local development machine: 1. Open a terminal session. @@ -78,44 +78,44 @@ Run the agent on the local development machine: Running CLEARML-AGENT daemon in background mode, writing stdout/stderr to /home//.clearml_agent_daemon_outym6lqxrz.txt ``` -## Step 5: Enqueue the Tuned Experiment +## Step 5: Enqueue the Tuned Task -Enqueue the tuned experiment. +Enqueue the tuned task. -1. In the ClearML WebApp > experiments table, right-click the experiment `Clone Of pytorch mnist train`. +1. In the ClearML WebApp > task table, right-click the task `Clone Of pytorch mnist train`. 1. In the context menu, click **Enqueue**. 1. Select **Default** queue. -1. Click **ENQUEUE**. The experiment's status becomes Pending. When the worker fetches the experiment from the queue, - the status becomes Running. The progress of the experiment can be viewed in the info panel. When the status becomes +1. Click **ENQUEUE**. The task's status becomes Pending. When the worker fetches the task from the queue, + the status becomes Running. The progress of the task can be viewed in the info panel. When the status becomes Completed, continue to the next step. -## Step 6: Compare the Experiments +## Step 6: Compare the Tasks -To compare the original and tuned experiments: +To compare the original and tuned tasks: 1. In the ClearML WebApp (UI), on the Projects page, click the `examples` project. -1. In the experiments table, select the checkboxes for the two experiments: `pytorch mnist train` and `Clone Of pytorch mnist train`. -1. On the menu bar at the bottom of the experiments table, click **COMPARE**. The experiment comparison window appears. +1. In the task table, select the checkboxes for the two tasks: `pytorch mnist train` and `Clone Of pytorch mnist train`. +1. On the menu bar at the bottom of the task table, click **COMPARE**. The task comparison window appears. All differences appear with a different background color to highlight them. - The experiment comparison window is organized in the following tabs: + The task comparison window is organized in the following tabs: * **DETAILS** - The **ARTIFACTS** section, including input and output models with their network designs, and other artifacts; the **EXECUTION** section execution, including source code control, installed Python packages and versions, uncommitted changes, and the Docker image name which, in this case, is empty. * **HYPERPARAMETERS** - The hyperparameters and their values. * **SCALARS** - Scalar metrics with the option to view them as charts or values. * **PLOTS** - Plots of any data with the option to view them as charts or values. - * **DEBUG SAMPLES** - Media including images, audio, and video uploaded by your experiment shown as thumbnails. + * **DEBUG SAMPLES** - Media including images, audio, and video uploaded by your task shown as thumbnails. 1. Examine the differences. 1. Compare the hyperparameters. In the **HYPERPARAMETERS** tab, expand **ARGS**. The hyperparameters `batch_size` and `lr` are shown with a different background color. The values are different. - 1. Compare the metrics. In the **SCALARS** tab, to the right of **Add Experiment**, select the plot or value comparison: + 1. Compare the metrics. In the **SCALARS** tab, to the right of **Add Task**, select the plot or value comparison: * **Graph** - The scalar metrics plots show `pytorch mnist train` and `Clone of pytorch mnist train`. * **Last Values** - Expand a metric and variant. ## Next Steps -* For more information about editing experiments, see [modifying experiments](../../webapp/webapp_exp_tuning.md#modifying-experiments). \ No newline at end of file +* For more information about editing tasks, see [modifying tasks](../../webapp/webapp_exp_tuning.md#modifying-tasks). \ No newline at end of file diff --git a/docs/hyper_datasets.md b/docs/hyper_datasets.md index bf7ed172..96a20312 100644 --- a/docs/hyper_datasets.md +++ b/docs/hyper_datasets.md @@ -27,13 +27,14 @@ data lineages can be created, and users can track when and how their data change you can view a dataset's version history, as well as its contents, including annotations, metadata, masks, and other information. -![Frame viewer](img/hyperdatasets/web-app/dataset_example_frame_editor.png) +![Frame viewer](img/hyperdatasets/dataset_example_frame_editor.png#light-mode-only) +![Frame viewer](img/hyperdatasets/dataset_example_frame_editor_dark.png#dark-mode-only) The basic premise of Hyper-Datasets is that a user-formed query is a full representation of the dataset used by the ML/DL process. Hyper-Datasets decouple metadata from raw data files, allowing you to manipulate metadata through sophisticated -queries and parameters that can be tracked through the experiment manager. You can clone experiments using different +queries and parameters that can be tracked through the task manager. You can clone tasks using different data manipulations--or [**DataViews**](hyperdatasets/dataviews.md)--without changing any of the hard coded values, making these manipulations part of -the experiment. +the task. ClearML **Enterprise**'s Hyper-Datasets supports rapid prototyping, creating new opportunities such as: * Hyperparameter optimization of the data itself diff --git a/docs/hyperdatasets/code_examples.md b/docs/hyperdatasets/code_examples.md index eefaeae4..5af4a163 100644 --- a/docs/hyperdatasets/code_examples.md +++ b/docs/hyperdatasets/code_examples.md @@ -2,13 +2,13 @@ title: Code Examples --- -The following examples demonstrate registering, retrieving, and ingesting your data through the Hyper-Datasets python +The following examples demonstrate registering, retrieving, and ingesting your data through the Hyper-Datasets Python interface. ## Registering your Data -* [register_dataset_with_roi.py](https://github.com/allegroai/clearml/blob/master/examples/hyperdatasets/data-registration/register_dataset_with_roi.py) - Demonstrates +* [register_dataset_with_roi.py](https://github.com/clearml/clearml/blob/master/examples/hyperdatasets/data-registration/register_dataset_with_roi.py) - Demonstrates creating a new DatasetVersion and adding to it frames, supporting ROI annotations and metadata -* [register_dataset_masks.py](https://github.com/allegroai/clearml/blob/master/examples/hyperdatasets/data-registration/register_dataset_masks.py) - Demonstrates +* [register_dataset_masks.py](https://github.com/clearml/clearml/blob/master/examples/hyperdatasets/data-registration/register_dataset_masks.py) - Demonstrates creating a new DatasetVersion and adding to it frames containing masks. This example also demonstrates the DatasetVersion-level [pixel segmentation masks](masks.md#pixel-segmentation-masks). @@ -16,18 +16,18 @@ After executing either of these scripts, you can view your DatasetVersion conten ## Using your Data ### Dataviews -The [dataview_example_framegroup.py](https://github.com/allegroai/clearml/blob/master/examples/hyperdatasets/data-ingestion/dataview_example_framegroup.py) -and [dataview_example_singleframe.py](https://github.com/allegroai/clearml/blob/master/examples/hyperdatasets/data-ingestion/dataview_example_singleframe.py) +The [dataview_example_framegroup.py](https://github.com/clearml/clearml/blob/master/examples/hyperdatasets/data-ingestion/dataview_example_framegroup.py) +and [dataview_example_singleframe.py](https://github.com/clearml/clearml/blob/master/examples/hyperdatasets/data-ingestion/dataview_example_singleframe.py) examples demonstrate how to use a [DataView](dataviews.md) to retrieve your data as SingleFrames and FrameGroups as -part of a running experiment. This is done by creating a DataView query and then retrieving the corresponding frames. +part of a running task. This is done by creating a DataView query and then retrieving the corresponding frames. -DataView details are displayed in the UI in an experiment's **DATAVIEWS** tab. +DataView details are displayed in the UI in a task's **DATAVIEWS** tab. ### Data Ingestion -The [pytorch_dataset_example.py](https://github.com/allegroai/clearml/blob/master/examples/hyperdatasets/data-ingestion/pytorch_dataset_example.py) +The [pytorch_dataset_example.py](https://github.com/clearml/clearml/blob/master/examples/hyperdatasets/data-ingestion/pytorch_dataset_example.py) example demonstrates how to feed your DataViews to an ML framework by creating a DataView query and wrapping it as a PyTorch Dataset. -The [pytorch_dataset_example_with_masks.py](https://github.com/allegroai/clearml/blob/master/examples/hyperdatasets/data-ingestion/pytorch_dataset_example_with_masks.py) +The [pytorch_dataset_example_with_masks.py](https://github.com/clearml/clearml/blob/master/examples/hyperdatasets/data-ingestion/pytorch_dataset_example_with_masks.py) example demonstrates the additional actions required when your frames contain masks. \ No newline at end of file diff --git a/docs/hyperdatasets/dataset.md b/docs/hyperdatasets/dataset.md index 5c3b786a..d80ddcca 100644 --- a/docs/hyperdatasets/dataset.md +++ b/docs/hyperdatasets/dataset.md @@ -6,7 +6,7 @@ ClearML Enterprise's **Datasets** and **Dataset versions** provide the internal and functionality for the following purposes: * Connecting source data to the ClearML Enterprise platform * Using ClearML Enterprise's Git-like [Dataset versioning](#dataset-versioning) -* Integrating the powerful features of [Dataviews](dataviews.md) with an experiment +* Integrating the powerful features of [Dataviews](dataviews.md) with a task * [Annotating](webapp/webapp_datasets_frames.md#annotations) images and videos Datasets consist of versions with SingleFrames and/or FrameGroups. Each Dataset can contain multiple versions, which @@ -128,7 +128,7 @@ Use the [`Dataset.delete`](../references/hyperdataset/hyperdataset.md#datasetdel ### Tagging Datasets -Tags can be added to datasets, allowing to easily identify and group experiments. +Tags can be added to datasets, allowing to easily identify and group tasks. Add tags to a dataset: ```python @@ -159,7 +159,7 @@ Dataset versions can have either *Draft* or *Published* state. A *Draft* version is editable, so frames can be added to and deleted and/or modified. -A *Published* version is read-only, which ensures reproducible experiments and preserves the Dataset version contents. +A *Published* version is read-only, which ensures reproducible tasks and preserves the Dataset version contents. Child versions can only be created from *Published* versions, as they inherit their predecessor version contents. ## Dataset Version Structure diff --git a/docs/hyperdatasets/dataviews.md b/docs/hyperdatasets/dataviews.md index 3e32a9f0..1f26a841 100644 --- a/docs/hyperdatasets/dataviews.md +++ b/docs/hyperdatasets/dataviews.md @@ -14,19 +14,19 @@ Dataviews support: * Class label enumeration * Controls for the frame iteration, such as sequential or random iteration, limited or infinite iteration, and reproducibility. -Dataviews are lazy and optimize processing. When an experiment script runs in a local environment, Dataview pointers -are initialized. If the experiment is cloned or extended, and that newly cloned or extended experiment is tuned and run, +Dataviews are lazy and optimize processing. When a task script runs in a local environment, Dataview pointers +are initialized. If the task is cloned or extended, and that newly cloned or extended task is tuned and run, only changed pointers are initialized. The pointers that did not change are reused. ## Dataview State Dataviews can be in either *Draft* or *Published* state. -A *Draft* Dataview is editable. A *Published* Dataview is read-only, which ensures reproducible experiments and +A *Draft* Dataview is editable. A *Published* Dataview is read-only, which ensures reproducible tasks and preserves the Dataview's settings. ## Filtering -A Dataview filters experiment input data, using one or more frame filters. A frame filter defines the criteria for the +A Dataview filters task input data, using one or more frame filters. A frame filter defines the criteria for the selection of SingleFrames iterated by a Dataview. A frame filter contains the following criteria: @@ -71,40 +71,6 @@ ROI label mapping (label translation) applies to the new model. For example, app Define class labels for the new model and assign integers to each in order to maintain data conformity across multiple codebases and datasets. It is important to set enumeration values for all labels of importance. -## Data Augmentation - -On-the-fly data augmentation is applied to SingleFrames, transforming images without creating new data. Apply data augmentation -in steps, where each step is composed of a method, an operation, and a strength as follows: - -* **Affine** augmentation method - Transform an image's geometric shape to another position on a 2-dimensional plane. - Use any of the following operations: - - * Rotate - * Reflect-horiz - Flip images horizontally - * Reflect-vert - Flip images vertically - * Scale - * Shear - Skew - * No operation - Randomly select SingleFrames that are not transformed (skipped). If the experiment runs again, and - the random seed in [iteration control](#iteration-control) is unchanged, the same SingleFrames are not augmented. - -* **Pixel** augmentation method - Transform images by modifying pixel values while retaining shape and perspective. - Use any of the following operations: - - * Blur - Gaussian smoothing - * Noise - ClearML Enterprise's own noise augmentation consisting of: - * **high** noise - like snow on analog televisions with a weak TV signal - * **low** noise - like a low resolution image magnified in localized areas on the image - * Recolor - using an internal RGB lookup-table - * No operation - Randomly select SingleFrames that are not transformed (skipped). If the experiment runs again, and - the random seed in [iteration control](#iteration-control) is unchanged, the same SingleFrames are not augmented. - -* Strength - A number applied to adjust the degree of transformation. The recommended strengths are the following: - - * 0.0 - No effect - * 0.5 - Low (weak) - * 1.0 - Medium (recommended) - * 2.0 - High (strong) - ## Iteration Control The input data **iteration control** settings determine the order, number, timing, and reproducibility of the Dataview iterating @@ -126,11 +92,11 @@ may repeat. The settings include the following: the maximum, then the actual number of SingleFrames are iterated. If the order is sequential, then no SingleFrames repeat. If the order is random, then some SingleFrames may repeat. - * Infinite Iterations - Iterate SingleFrames until the experiment is manually terminated. If the order is sequential, - then all SingleFrames are iterated (unless the experiment is manually terminated before all iterate) and SingleFrames + * Infinite Iterations - Iterate SingleFrames until the task is manually terminated. If the order is sequential, + then all SingleFrames are iterated (unless the task is manually terminated before all iterate) and SingleFrames repeat. If the order is random, then all SingleFrames may not be iterated, and some SingleFrames may repeat. -* Random Seed - If the experiment is rerun and the seed remains unchanged, the SingleFrames iteration is the same. +* Random Seed - If the task is rerun and the seed remains unchanged, the SingleFrames iteration is the same. * Clip Length - For video data sources, in the number of sequential SingleFrames from a clip to iterate. @@ -173,13 +139,15 @@ You can retrieve the Dataview frames using [`DataView.to_list()`](../references/ [`DataView.to_dict()`](../references/hyperdataset/dataview.md#to_dict), or [`DataView.get_iterator()`](../references/hyperdataset/dataview.md#get_iterator) (see [Accessing Frames](#accessing-frames)). -#### ROI Queries: +### ROI Query Examples -* **ROI query for a single label** +#### ROI query for a single label This example uses an ROI query to filter for frames containing at least one ROI with the label `cat`: ```python +from allegroai import DataView, IterationOrder + # Create a Dataview object for an iterator that randomly returns frames according to queries myDataView = DataView(iteration_order=IterationOrder.random, iteration_infinite=False) @@ -195,11 +163,13 @@ myDataView.add_query( list_of_frames = myDataView.to_list() ``` -* **ROI query for one label OR another** +#### ROI query for one label OR another This example uses an ROI query to filter for frames containing at least one ROI with either the label `cat` OR the label `dog`: ```python +from allegroai import DataView + # Add a query for a Dataset version myDataView.add_query( dataset_name='myDataset', @@ -218,11 +188,13 @@ myDataView.add_query( list_of_frames = myDataView.to_list() ``` -* **ROI query for two specific labels in the same ROI** +#### ROI query for two specific labels in the same ROI This example uses an ROI query to filter for frames containing at least one ROI with both the label `Car` AND the label `partly_occluded`: ```python +from allegroai import DataView + # Add a query for a Dataset version myDataView.add_query( dataset_name='myDataset', @@ -235,12 +207,14 @@ myDataView.add_query( list_of_frames = myDataView.to_list() ``` -* **ROI query for one label AND NOT another (Lucene query)** +#### ROI query for one label AND NOT another (Lucene query) This example uses an ROI query to filter for frames containing at least one ROI that has with the label `Car` AND DOES NOT have the label `partly_occluded`: ```python +from allegroai import DataView + # Add a query for a Dataset version # Use a Lucene Query # "label" is a key in the rois dictionary of a frame @@ -256,13 +230,15 @@ myDataView.add_query( list_of_frames = myDataView.to_list() ``` -* **ROI query for one label AND another label in different ROIs** +#### ROI query for one label AND another label in different ROIs This example uses an ROI query to filter for frames containing at least one ROI with the label `Car` and at least one ROI with the label `Person`. The example demonstrates using the `roi_queries` parameter of [`DataView.add_multi_query()`](../references/hyperdataset/dataview.md#add_multi_query) with a list of [`DataView.RoiQuery`](../references/hyperdataset/dataview.md#roiquery) objects: ```python +from allegroai import DataView + myDataview = DataView() myDataview.add_multi_query( dataset_id=self._dataset_id, @@ -274,13 +250,15 @@ myDataview.add_multi_query( list_of_frames = myDataView.to_list() ``` -* **ROI query for one label AND NOT another label in different ROIs** +#### ROI query for one label AND NOT another label in different ROIs This example uses an ROI query to filter for frames containing at least one ROI with the label `Car` AND that DO NOT contain ROIs with the label `Person`. To exclude an ROI, pass `must_not=True` in the [`DataView.RoiQuery`](../references/hyperdataset/dataview.md#roiquery) object. ```python +from allegroai import DataView + myDataview = DataView() myDataview.add_multi_query( dataset_id=self._dataset_id, @@ -300,6 +278,8 @@ This example demonstrates an ROI query filtering for frames containing the ROI l from two versions of one Dataset, and one version of another Dataset: ```python +from allegroai import DataView + # Add queries: # The 1st Dataset version @@ -331,7 +311,7 @@ myDataView.add_query( list_of_frames = myDataView.to_list() ``` -#### Frame Queries +### Frame Queries Use frame queries to filter frames by ROI labels and/or frame metadata key-value pairs that a frame must include or exclude for the Dataview to return the frame. @@ -339,9 +319,13 @@ exclude for the Dataview to return the frame. **Frame queries** match frame meta key-value pairs, ROI labels, or both. They use the same logical OR, AND, NOT AND matching as ROI queries. +#### Frame Query by Metadata + This example demonstrates a frame query filtering for frames containing the meta key `city` value of `bremen`: ```python +from allegroai import DataView + # Add a frame query for frames with the meta key "city" value of "bremen" myDataView.add_query( dataset_name='myDataset', @@ -354,6 +338,59 @@ myDataView.add_query( list_of_frames = myDataView.to_list() ``` +#### Frame Query by Date and Time +Provided that a metadata field stores date and time values, you can query frames based on date ranges and specific time +intervals + +##### Frame Query for Specific Date +This example demonstrates a frame query filtering for frames containing the meta key `updated` with the value of October +20th, 2024: + +```python +# Add a frame query for frames with the meta key "updated" value of "2024-10-20" +myDataView.add_query( + dataset_name='myDataset', + version_name='version', + frame_query='meta.updated:[2024-10-20 TO 2024-10-20]' +) + +# retrieving the actual SingleFrames / FrameGroups +# you can also iterate over the frames with `for frame in myDataView.get_iterator():` +list_of_frames = myDataView.to_list() +``` + +##### Frame Query for Date Range + +This example demonstrates a frame query filtering for frames containing the meta key `updated` with any value between the +dates of October 20th and October 30th, 2024: + +```python +# Add a frame query for frames with the meta key "updated" value between "2024-10-20" and "2024-10-30" +myDataView.add_query( + dataset_name='myDataset', + version_name='version', + frame_query='meta.updated:[2024-10-20 TO 2024-10-30]' +) + +# retrieving the actual SingleFrames / FrameGroups +# you can also iterate over the frames with `for frame in myDataView.get_iterator():` +list_of_frames = myDataView.to_list() +``` + +##### Frame Query for Time Interval + +This example demonstrates a frame query filtering for frames containing the meta key `updated` with any value between +`08:000` and `09:00` on October 20th, 2024: + +```python +# Add a frame query for frames with the meta key's value between 08:00:00 and 09:00:00 on 2024-10-20 + +myDataView.add_query( + dataset_name='myDataset', + version_name='version', + frame_query='meta.:[2024-10-20T08:00:00 TO 2024-10-20T09:00:00]' +) +``` ### Controlling Query Iteration @@ -367,6 +404,8 @@ This example demonstrates creating a Dataview and setting its parameters to iter manually terminated: ```python +from allegroai import DataView, IterationOrder + # Create a Dataview object for an iterator that returns frames myDataView = DataView() @@ -378,6 +417,8 @@ myDataView.set_iteration_parameters(order=IterationOrder.random, infinite=True) This example demonstrates creating a DataView and setting its parameters to iterate and return all frames matching a query: ```python +from allegroai import DataView, IterationOrder + # Create a Dataview object for an iterator for frames myDataView = DataView(iteration_order=IterationOrder.random, iteration_infinite=False) @@ -404,6 +445,8 @@ This example demonstrates creating a Dataview and setting its parameters to iter Dataset version contains fewer than that number of frames matching the query, then fewer are returned by the iterator. ```python +from allegroai import DataView, IterationOrder + # Create a Dataview object for an iterator for frames myDataView = DataView(iteration_order=IterationOrder.random, iteration_infinite=True) @@ -426,6 +469,8 @@ This example adjusts an imbalance in the input data to improve training for `Car one ROI labeled with both `Car` and `largely_occluded` will be input. ```python +from allegroai import DataView, IterationOrder + myDataView = DataView(iteration_order=IterationOrder.random, iteration_infinite=True) myDataView.add_query( @@ -457,6 +502,8 @@ then use the labels you map **to** when setting enumeration values. For example, if the labels `truck`, `van`, and `car` are mapped **to** `vehicle`, then set enumeration for `vehicle`. ```python +from allegroai import DataView, IterationOrder + # Create a Dataview object for an iterator that randomly returns frames according to queries myDataView = DataView(iteration_order=IterationOrder.random, iteration_infinite=True) @@ -507,6 +554,8 @@ third uses `Car` (upper case "C"). The example maps `Car` (upper case "C") to `car` (lower case "c"): ```python +from allegroai import DataView, IterationOrder + # Create a Dataview object for an iterator that randomly returns frames according to queries myDataView = DataView(iteration_order=IterationOrder.random, iteration_infinite=True) @@ -546,10 +595,12 @@ Dataview objects can be retrieved by the Dataview ID or name using the [`DataVie class method. ```python +from allegroai import DataView + my_dataview = DataView.get(dataview_id='') ``` -Access the Dataview's frames as a python list, dictionary, or through a pythonic iterator. +Access the Dataview's frames as a Python list, dictionary, or through a pythonic iterator. [`DataView.to_list()`](../references/hyperdataset/dataview.md#to_list) returns the Dataview queries result as a Python list. diff --git a/docs/hyperdatasets/frames.md b/docs/hyperdatasets/frames.md index 45c4476d..24550849 100644 --- a/docs/hyperdatasets/frames.md +++ b/docs/hyperdatasets/frames.md @@ -11,4 +11,4 @@ Two types of frames are supported: **SingleFrames** and **FrameGroups** contain data sources, metadata, and other data. A Frame can be added to [Datasets](dataset.md) and then modified or removed. [Versions](dataset.md#dataset-versioning) of the Datasets can be created, which enables -documenting changes and reproducing data for experiments. +documenting changes and reproducing data for tasks. diff --git a/docs/hyperdatasets/masks.md b/docs/hyperdatasets/masks.md index 69e7fd98..ded8dde4 100644 --- a/docs/hyperdatasets/masks.md +++ b/docs/hyperdatasets/masks.md @@ -24,7 +24,8 @@ See how to manage dataset version mask labels pythonically [here](dataset.md#man In the UI, you can view the mapping in a dataset version's [Metadata](webapp/webapp_datasets_versioning.md#metadata) tab. -![Dataset metadata panel](../img/hyperdatasets/dataset_metadata.png) +![Dataset metadata panel](../img/hyperdatasets/dataset_metadata.png#light-mode-only) +![Dataset metadata panel](../img/hyperdatasets/dataset_metadata_dark.png#dark-mode-only) When viewing a frame with a mask corresponding with the version's mask-label mapping, the UI arbitrarily assigns a color to each label. The color assignment can be [customized](webapp/webapp_datasets_frames.md#labels). @@ -32,12 +33,14 @@ to each label. The color assignment can be [customized](webapp/webapp_datasets_f For example: * Original frame image: - ![Frame without mask](../img/hyperdatasets/dataset_pixel_masks_1.png) + ![Frame without mask](../img/hyperdatasets/dataset_pixel_masks_1.png#light-mode-only) + ![Frame without mask](../img/hyperdatasets/dataset_pixel_masks_1_dark.png#dark-mode-only) * Frame image with the semantic segmentation mask enabled. Labels are applied according to the dataset version's mask-label mapping: - ![Frame with semantic seg mask](../img/hyperdatasets/dataset_pixel_masks_2.png) + ![Frame with semantic seg mask](../img/hyperdatasets/dataset_pixel_masks_2.png#light-mode-only) + ![Frame with semantic seg mask](../img/hyperdatasets/dataset_pixel_masks_2_dark.png#dark-mode-only) The frame's sources array contains a masks list of dictionaries that looks something like this: @@ -75,11 +78,13 @@ desired sections of the source are visible. For example: * Original frame: - ![Maskless frame](../img/hyperdatasets/dataset_alpha_masks_1.png) + ![Maskless frame](../img/hyperdatasets/dataset_alpha_masks_1.png#light-mode-only) + ![Maskless frame](../img/hyperdatasets/dataset_alpha_masks_1_dark.png#dark-mode-only) * Same frame with an alpha channel mask, emphasizing the troll doll: - ![Alpha mask frame](../img/hyperdatasets/dataset_alpha_masks_2.png) + ![Alpha mask frame](../img/hyperdatasets/dataset_alpha_masks_2.png#light-mode-only) + ![Alpha mask frame](../img/hyperdatasets/dataset_alpha_masks_2_dark.png#dark-mode-only) The frame's sources array contains a masks list of dictionaries that looks something like this: diff --git a/docs/hyperdatasets/overview.md b/docs/hyperdatasets/overview.md index e6863de7..d5962486 100644 --- a/docs/hyperdatasets/overview.md +++ b/docs/hyperdatasets/overview.md @@ -32,7 +32,7 @@ These components interact in a way that enables revising data and tracking and a Frames are the basic units of data in ClearML Enterprise. SingleFrames and FrameGroups make up a Dataset version. Dataset versions can be created, modified, and removed. The different versions are recorded and available, -so experiments, and their data are reproducible and traceable. +so tasks, and their data are reproducible and traceable. -Lastly, Dataviews manage views of the dataset with queries, so the input data to an experiment can be defined from a +Lastly, Dataviews manage views of the dataset with queries, so a task's input data can be defined from a subset of a Dataset or combinations of Datasets. \ No newline at end of file diff --git a/docs/hyperdatasets/previews.md b/docs/hyperdatasets/previews.md index 2b30e677..d91594aa 100644 --- a/docs/hyperdatasets/previews.md +++ b/docs/hyperdatasets/previews.md @@ -90,8 +90,10 @@ The following is an example of preview metadata. Here's an example of Previews in the ClearML Enterprise WebApp (UI). Each thumbnail is a Preview: -![Previews](../img/hyperdatasets/web-app/dataset_versions.png) +![Previews](../img/hyperdatasets/dataset_versions.png#light-mode-only) +![Previews](../img/hyperdatasets/dataset_versions_dark.png#dark-mode-only) If the preview's `uri` is for a video, the thumbnail will display the video with video controls: -![Video previews](../img/hyperdatasets/video_preview.png) \ No newline at end of file +![Video previews](../img/hyperdatasets/video_preview.png#light-mode-only) +![Video previews](../img/hyperdatasets/video_preview_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/hyperdatasets/single_frames.md b/docs/hyperdatasets/single_frames.md index 42ecb4ee..d613f820 100644 --- a/docs/hyperdatasets/single_frames.md +++ b/docs/hyperdatasets/single_frames.md @@ -147,7 +147,8 @@ object annotations, its metadata, and other details. This image shows a SingleFrame in the ClearML Enterprise WebApp (UI) [frame viewer](webapp/webapp_datasets_frames.md#frame-viewer). -![image](../img/hyperdatasets/frame_overview_01.png) +![SingleFrame in WebApp](../img/hyperdatasets/frame_overview_01.png#light-mode-only) +![SingleFrame in WebApp](../img/hyperdatasets/frame_overview_01_dark.png#dark-mode-only) @@ -222,7 +223,7 @@ frame = SingleFrame( :::tip Previewing Frames in non-AWS S3-like services For the ClearML UI to be able to show frames stored in non-AWS S3-like services (e.g. MinIO), make sure the `preview_uri` link -uses the `s3://` prefix and explicitly specifies the port number in the URL (e.g. `s3://my_address.com:80/bucket/my_image.png`). +uses the `s3://` prefix and **explicitly specifies the port number** in the URL (e.g. `s3://my_address.com:80/bucket/my_image.png`). Additionally, make sure to provide cloud storage access in the WebApp [**Settings > Configuration > Web App Cloud Access**](../webapp/settings/webapp_settings_profile.md#browser-cloud-storage-access). Input `:` in the **Host** field. diff --git a/docs/hyperdatasets/task.md b/docs/hyperdatasets/task.md index a90cd2c2..5543acaf 100644 --- a/docs/hyperdatasets/task.md +++ b/docs/hyperdatasets/task.md @@ -1,12 +1,16 @@ --- -title: Tasks +title: Dataviews --- + +:::important ENTERPRISE FEATURE +Dataviews available under the ClearML Enterprise plan. +::: Hyper-Datasets extend the ClearML [**Task**](../fundamentals/task.md) with [Dataviews](dataviews.md). ## Usage -Hyper-Datasets are supported by the `allegroai` python package. +Hyper-Datasets are supported by the `allegroai` Python package. ### Connecting Dataviews to a Task diff --git a/docs/hyperdatasets/webapp/webapp_annotator.md b/docs/hyperdatasets/webapp/webapp_annotator.md index d383995c..3a52547f 100644 --- a/docs/hyperdatasets/webapp/webapp_annotator.md +++ b/docs/hyperdatasets/webapp/webapp_annotator.md @@ -2,12 +2,17 @@ title: Annotation Tasks --- +:::important ENTERPRISE FEATURE +Annotation tasks are available under the ClearML Enterprise plan. +::: + Use the Annotations page to access and manage annotation Tasks. Use annotation tasks to efficiently organize the annotation of frames in Dataset versions and manage the work of annotators (see [Annotating Images and Videos](#annotating-images-and-video)). -![Annotations page](../../img/annotation_page.png) +![Annotations page](../../img/hyperdatasets/annotation_page.png#light-mode-only) +![Annotations page](../../img/hyperdatasets/annotation_page_dark.png#dark-mode-only) Click on an annotation task card to open the frame viewer, where you can view the task's frames and annotate them. @@ -15,7 +20,12 @@ Click on an annotation task card to open the frame viewer, where you can view th Click Menu on the top right of an annotation task card to open its context menu and access annotation task actions. -![Annotation task card](../../img/annotation_task_card.png) +
+ +![Annotation task card](../../img/hyperdatasets/annotation_task_card.png#light-mode-only) +![Annotation task card](../../img/hyperdatasets/annotation_task_card_dark.png#dark-mode-only) + +
* **Annotate** - Go to annotation task frame viewer * **Info** - View annotation task's definitions: dataset versions, filters, and frame iteration specification @@ -32,7 +42,8 @@ Sort the annotation tasks by either using **RECENT** or **NAME** option. ## Creating Annotation Tasks -![Annotation task creation modal](../../img/hyperdatasets/annotation_task_01.png) +![Annotation task creation modal](../../img/hyperdatasets/annotation_task_01.png#light-mode-only) +![Annotation task creation modal](../../img/hyperdatasets/annotation_task_01_dark.png#dark-mode-only) **To create an annotation task:** @@ -53,7 +64,7 @@ Sort the annotation tasks by either using **RECENT** or **NAME** option. 1. In **ITERATION**, in the **ORDER** list, choose either: * **Sequential** - Frames are sorted by the frame top-level `context_id` (primary sort key) and `timestamp` (secondary sort key) metadata key values, and returned by the iterator in the sorted order. - * **Random** - Frames are randomly returned using the value of the `random_seed` argument. The random seed is maintained with the experiments. Therefore, the random order is reproducible if the experiment is rerun. + * **Random** - Frames are randomly returned using the value of the `random_seed` argument. The random seed is maintained with the tasks. Therefore, the random order is reproducible if the task is rerun. 1. In **REPETITION**, choose either **Use Each Frame Once** or **Limit Frames**. If you select **Limit Frames**, then in **Use Max. Frames**, type the number of frames to annotate. 1. If iterating randomly, in **RANDOM SEED** type your seed or leave blank, and the ClearML Enterprise platform generates a seed for you. @@ -61,7 +72,7 @@ Sort the annotation tasks by either using **RECENT** or **NAME** option. 1. Click **Create**. -## Annotating Images and Video +## Annotating Images and Video Annotate images and video by labeling regions of interest in Dataset version frames. The frames presented for annotation depend upon the settings in the annotation task (see [Creating Annotation Tasks](#creating-annotation-tasks)). @@ -132,7 +143,7 @@ You can add labels which describe the whole frame, with no specific coordinates. ## Frame Metadata **To edit frame metadata:** -1. Expand the **FRAME METADATA** area +1. Expand the **FRAMEGROUP METADATA** area 1. Click edit edit metadata which will open an editing window 1. Modify the metadata dictionary in JSON format diff --git a/docs/hyperdatasets/webapp/webapp_datasets.md b/docs/hyperdatasets/webapp/webapp_datasets.md index d9293748..5cc3d06f 100644 --- a/docs/hyperdatasets/webapp/webapp_datasets.md +++ b/docs/hyperdatasets/webapp/webapp_datasets.md @@ -2,6 +2,10 @@ title: Hyper-Datasets Page --- +:::important ENTERPRISE FEATURE +Hyper-Datasets are available under the ClearML Enterprise plan. +::: + Use the Hyper-Datasets Page to navigate between and manage hyper-datasets. You can view the Hyper-Datasets page in Project view Project view @@ -20,7 +24,8 @@ Filter the hyper-datasets to find the one you're looking for more easily. These * Filter by the absence of a tag (logical "NOT") by clicking its checkbox twice. An X will appear in the tag's checkbox. -![Hyper-Dataset page](../../img/hyperdatasets/datasets_01.png) +![Hyper-Dataset page](../../img/hyperdatasets/datasets_01.png#light-mode-only) +![Hyper-Dataset page](../../img/hyperdatasets/datasets_01_dark.png#dark-mode-only) ## Project Cards @@ -28,7 +33,8 @@ In Project view, project cards display a project's summarized hyper-dataset info
-![Hyper-Dataset project card](../../img/hyperdatasets/hyperdataset_project_card.png) +![Hyper-Dataset project card](../../img/hyperdatasets/hyperdataset_project_card.png#light-mode-only) +![Hyper-Dataset project card](../../img/hyperdatasets/hyperdataset_project_card_dark.png#dark-mode-only)
@@ -45,7 +51,8 @@ In List view, the Hyper-Dataset cards display summarized dataset information:
-![Hyper-Dataset card](../../img/hyperdatasets/hyperdataset_card.png) +![Hyper-Dataset card](../../img/hyperdatasets/hyperdataset_card.png#light-mode-only) +![Hyper-Dataset card](../../img/hyperdatasets/hyperdataset_card_dark.png#dark-mode-only)
@@ -70,9 +77,10 @@ To change the label color coding, hover over a label color, click the hand point Click Menu on the top right of a dataset card to open its context menu and access dataset actions: -
+
-![Hyper-Dataset context menu](../../img/webapp_hyperdataset_card_context_menu.png) +![Hyper-Dataset context menu](../../img/hyperdatasets/webapp_hyperdataset_card_context_menu.png#light-mode-only) +![Hyper-Dataset context menu](../../img/hyperdatasets/webapp_hyperdataset_card_context_menu_dark.png#dark-mode-only)
@@ -85,6 +93,11 @@ of a dataset card to open its context menu and access dataset actions: To create a Hyper-Dataset, click the **+ NEW DATASET** button in the top right of the page, which will open a **New Dataset** modal. -![Hyper-Dataset creation modal](../../img/webapp_hyperdataset_creation.png) +
+ +![Hyper-Dataset creation modal](../../img/hyperdatasets/webapp_hyperdataset_creation.png#light-mode-only) +![Hyper-Dataset creation modal](../../img/hyperdatasets/webapp_hyperdataset_creation_dark.png#dark-mode-only) + +
This creates a new Hyper-Dataset that contains a single, empty draft version. diff --git a/docs/hyperdatasets/webapp/webapp_datasets_frames.md b/docs/hyperdatasets/webapp/webapp_datasets_frames.md index 144d43b3..ee4037b2 100644 --- a/docs/hyperdatasets/webapp/webapp_datasets_frames.md +++ b/docs/hyperdatasets/webapp/webapp_datasets_frames.md @@ -2,19 +2,25 @@ title: Working with Frames --- +:::important ENTERPRISE FEATURE +Hyper-Datasets are available under the ClearML Enterprise plan. +::: + View and edit SingleFrames in the Dataset page. After selecting a Hyper-Dataset version, the **Version Browser** shows a sample of frames and enables viewing SingleFrames and FramesGroups, and editing SingleFrames, in the [frame viewer](#frame-viewer). Before opening the frame viewer, you can filter the frames by applying [simple](webapp_datasets_versioning.md#simple-frame-filtering) or [advanced](webapp_datasets_versioning.md#advanced-frame-filtering) filtering logic. -![Dataset page](../../img/hyperdatasets/web-app/dataset_versions.png) +![Dataset page](../../img/hyperdatasets/dataset_versions.png#light-mode-only) +![Dataset page](../../img/hyperdatasets/dataset_versions_dark.png#dark-mode-only) ## Frame Viewer Use the frame viewer to view and edit annotations (ROIs and frame labels), frame details (see [frames](../frames.md)), and frame metadata, as well as view frame masks of your dataset version frames. -![Frame viewer](../../img/hyperdatasets/web-app/dataset_example_frame_editor.png) +![Frame viewer](../../img/hyperdatasets/dataset_example_frame_editor.png#light-mode-only) +![Frame viewer](../../img/hyperdatasets/dataset_example_frame_editor_dark.png#dark-mode-only) ### Frame Viewer Controls @@ -31,12 +37,12 @@ Use frame viewer controls to navigate between frames in a Hyper-Dataset Version, |Reload frame icon|Reload the frame.| Not applicable | |Undo icon|Undo changes.|Ctrl + Z| |Redo icon|Redo changes.|Ctrl + Y| -|Autofit icon|Autofit| Not applicable | +|Autofit icon|Autofit| Not applicable | +|Return to original size|View image in original size |Not applicable| |Zoom in icon|Zoom in| **+** or Ctrl + Mouse wheel| |Zoom out icon|Zoom out| **-** or Ctrl + Mouse wheel | |Percentage textbox|Zoom percentage| Not applicable | |Copy URL| Copy frame URL. A direct link to view the current frame|Not applicable | -|Refresh|Refresh version preview|Not applicable | #### Additional Keyboard Shortcuts @@ -93,13 +99,15 @@ Viewing and editing frames in a FrameGroup is similar to viewing and editing Sin Click the FrameGroup in the Hyper-Dataset. In the frame viewer, select SingleFrame to view / modify from a dropdown list in the **Current Source** section. -![Frame dropdown menu in FrameGroup](../../img/hyperdatasets/framegroup_01.png) +![Frame dropdown menu in FrameGroup](../../img/hyperdatasets/framegroup_01.png#light-mode-only) +![Frame dropdown menu in FrameGroup](../../img/hyperdatasets/framegroup_01_dark.png#dark-mode-only) If an annotation applies to all frames in a FrameGroup, it is displayed with a `Multi Source` indicator:
-![Multi-source ROI](../../img/hyperdatasets/multi_source_annotation.png) +![Multi-source ROI](../../img/hyperdatasets/multi_source_annotation.png#light-mode-only) +![Multi-source ROI](../../img/hyperdatasets/multi_source_annotation_dark.png#dark-mode-only)
@@ -159,11 +167,34 @@ To draw a new annotation: A new annotation is created. -1. In the newly created annotation, select or type-in a label(s). Click the circle in the label name to select a - different label color. +1. In the newly created annotation, select or type-in the labels for this annotation. You can use the **Default ROI Label(s)** list to automatically set labels to all new annotations. +:::info Annotation color +Each annotation label is automatically assigned a color based on its value. The annotation color is automatically +calculated based on the colors of its labels. + +Click the color circle in the label name to manually set the label's color. + +
+ +![Set label color](../../img/hyperdatasets/annotation_label_color.png#light-mode-only) +![Set label color](../../img/hyperdatasets/annotation_label_color_dark.png#dark-mode-only) + +
+ +Click the color circle in the annotation header to manually set the annotation’s color and its opacity. + +
+ +![Set annotation color and opacity](../../img/hyperdatasets/annotation_label_opacity.png#light-mode-only) +![Set annotation color and opacity](../../img/hyperdatasets/annotation_label_opacity_dark.png#dark-mode-only) + +
+::: + + #### Copying Frame Objects You can copy existing annotations, and paste them to any frame of your choice: 1. Click the annotation or bounded area in the frame. @@ -205,7 +236,7 @@ You can add labels which describe the whole frame, with no specific coordinates. ## Frame Metadata **To edit frame metadata:** -1. Expand the **FRAME METADATA** area +1. Expand the **FRAMEGROUP METADATA** area 1. Click edit edit metadata which will open an editing window 1. Modify the metadata dictionary in JSON format diff --git a/docs/hyperdatasets/webapp/webapp_datasets_versioning.md b/docs/hyperdatasets/webapp/webapp_datasets_versioning.md index fad9e4b7..f40d44a3 100644 --- a/docs/hyperdatasets/webapp/webapp_datasets_versioning.md +++ b/docs/hyperdatasets/webapp/webapp_datasets_versioning.md @@ -2,29 +2,52 @@ title: Dataset Versions --- +:::important ENTERPRISE FEATURE +Hyper-Datasets are available under the ClearML Enterprise plan. +::: + Use the Dataset versioning WebApp (UI) features for viewing, creating, modifying, and deleting [Dataset versions](../dataset.md#dataset-versioning). -![Dataset versions page](../../img/hyperdatasets/web-app/dataset_versions.png) +![Dataset versions page](../../img/hyperdatasets/dataset_versions.png#light-mode-only) +![Dataset versions page](../../img/hyperdatasets/dataset_versions_dark.png#dark-mode-only) ## Dataset Version History -The WebApp (UI) presents your dataset version structure in list view List view -or tree view Tree view. - -The list view lists the dataset's versions chronologically by last update time. - -![Versions list view](../../img/hyperdatasets/web-app/dataset_simple_adv_01.png) +The WebApp (UI) presents your dataset version structure in tree view Tree view +or list view List view. The tree view shows the lineage of the dataset's versions. -![Versions tree view](../../img/hyperdatasets/web-app/dataset_simple_adv_02.png) +
+ +![Versions tree view](../../img/hyperdatasets/dataset_simple_adv_02.png#light-mode-only) +![Versions tree view](../../img/hyperdatasets/dataset_simple_adv_02_dark.png#dark-mode-only) + +
+ +The list view lists the dataset's versions chronologically by last update time. + +
+ +![Versions list view](../../img/hyperdatasets/dataset_simple_adv_01.png#light-mode-only) +![Versions list view](../../img/hyperdatasets/dataset_simple_adv_01_dark.png#dark-mode-only) + +
+ +Click Sort order to order the +dataset versions in ascending or descending order based on their last update time. Use the search bar to find specific versions. You can query by version name, version description, or version ID. The search returns all versions that match the query. In tree view, parent versions that do not match the query where a child version does appear in a muted color. -![Dataset version search](../../img/hyperdatasets/hyperdataset_search_2.png) +
+ +![Dataset version search](../../img/hyperdatasets/hyperdataset_search_2.png#light-mode-only) +![Dataset version search](../../img/hyperdatasets/hyperdataset_search_2_dark.png#dark-mode-only) + +
### Version Actions @@ -40,7 +63,13 @@ Access dataset version actions, by right-clicking a version, or through the menu When publishing a version, you can create an additional working copy. The new version is created in a *draft* state, and inherits all the published version's frames. -![Publish version modal](../../img/hyperdataset_publish_version.png) +
+ +![Publish version modal](../../img/hyperdatasets/hyperdataset_publish_version.png#light-mode-only) +![Publish version modal](../../img/hyperdatasets/hyperdataset_publish_version_dark.png#dark-mode-only) + +
+ ::: ## Version Data @@ -64,12 +93,14 @@ Use the thumbnail view for a visual preview of the version's frames. You can inc and decrease Zoom out the size of the previews. -![Frame browser thumbnails](../../img/hyperdatasets/frame_browser_thumbnails.png) +![Frame browser thumbnails](../../img/hyperdatasets/frame_browser_thumbnails.png#light-mode-only) +![Frame browser thumbnails](../../img/hyperdatasets/frame_browser_thumbnails_dark.png#dark-mode-only) Use the table view to list the version's frames in a customizable table. Click Setting Gear for column customization options. -![Frame browser list](../../img/hyperdatasets/frame_browser_list.png) +![Frame browser list](../../img/hyperdatasets/frame_browser_list.png#light-mode-only) +![Frame browser list](../../img/hyperdatasets/frame_browser_list_dark.png#dark-mode-only) The dataset version's frames can be filtered by multiple criteria. The resulting frames can be [exported as a JSON file](#exporting-frames). @@ -85,11 +116,13 @@ Simple frame filtering returns frames containing at least one annotation with a * The **FRAMES** tab in the image below contains 101 frames. -![Unfiltered version browser](../../img/hyperdatasets/frame_filtering_01.png) +![Unfiltered version browser](../../img/hyperdatasets/frame_filtering_01.png#light-mode-only) +![Unfiltered version browser](../../img/hyperdatasets/frame_filtering_01_dark.png#dark-mode-only) * A simple label filter for `teddy bear` shows three frames, each containing at least one ROI labeled `teddy bear`. -![Filtered version browser](../../img/hyperdatasets/frame_filtering_02.png) +![Filtered version browser](../../img/hyperdatasets/frame_filtering_02.png#light-mode-only) +![Filtered version browser](../../img/hyperdatasets/frame_filtering_02_dark.png#dark-mode-only) @@ -118,7 +151,8 @@ A frame filter can contain a number of rules. For each frame filter, the rules a The returned frames are those that match the first rule AND the second rule within the frame filter. -![Multiple rules filter](../../img/hyperdatasets/multiple_rules.png) +![Multiple rules filter](../../img/hyperdatasets/multiple_rules.png#light-mode-only) +![Multiple rules filter](../../img/hyperdatasets/multiple_rules_dark.png#dark-mode-only) Create additional frame filters by clicking Add new. Multiple frame filters are applied with a logical OR operator. @@ -127,63 +161,106 @@ For example, the dataset version in the image below has two frame filters. "Fram described in the example above. "Frame Filter 2" specifies an ROI rule for the frame to contain an ROI with the label `dog`. So the frames returned are those that match ALL of Frame Filter 1's rules OR ALL of Frame Filter 2's rules. -![Multiple filters](../../img/hyperdatasets/multiple_filters.png) +![Multiple filters](../../img/hyperdatasets/multiple_filters.png#light-mode-only) +![Multiple filters](../../img/hyperdatasets/multiple_filters_dark.png#dark-mode-only) To clear all filters click Clear filters. -#### Filtering Examples +### Filtering Examples * Create one ROI rule for the `teddy bear` label, which shows the same three frames as the simple frame filter (above). -![Adding an ROI rule](../../img/hyperdatasets/frame_filtering_03.png) +![Adding an ROI rule](../../img/hyperdatasets/frame_filtering_03.png#light-mode-only) +![Adding an ROI rule](../../img/hyperdatasets/frame_filtering_03_dark.png#dark-mode-only) * In the ROI rule, add a second label. Add `partially_occluded`. Only frames containing at least one ROI labeled as both `teddy bear` and `partially_occluded` match the filter. -![Add label to ROI rule](../../img/hyperdatasets/frame_filtering_04.png) +![Add label to ROI rule](../../img/hyperdatasets/frame_filtering_04.png#light-mode-only) +![Add label to ROI rule](../../img/hyperdatasets/frame_filtering_04_dark.png#dark-mode-only) * By opening a frame in the frame viewer, you can see an ROI labeled with both. -![Labeled ROIs in frame viewer](../../img/hyperdatasets/frame_filtering_05.png) +![Labeled ROIs in frame viewer](../../img/hyperdatasets/frame_filtering_05.png#light-mode-only) +![Labeled ROIs in frame viewer](../../img/hyperdatasets/frame_filtering_05_dark.png#dark-mode-only) * To find frames that contain multiple ROIs, each with a different label, use separate ROI rules. Create an ROI rule for the `teddy bear` label and, in the same filter, add another ROI rule for the `person` label. This will return all frames that include at least one ROIs with a `person` label AND at least one (other) ROI with a `teddy bear` label. -![Add multiple ROI Rules](../../img/hyperdatasets/frame_filtering_06.png) +![Add multiple ROI Rules](../../img/hyperdatasets/frame_filtering_06.png#light-mode-only) +![Add multiple ROI Rules](../../img/hyperdatasets/frame_filtering_06_dark.png#dark-mode-only) * You can also exclude certain ROI labels. Create an ROI rule to include `teddy bear` and, in the same filter, an ROI rule to exclude `person`. This will return all frames that include at least one ROI with the label `teddy bear` AND have NO ROI with the `person` label -![Add Exclude ROI Rule](../../img/hyperdatasets/frame_filtering_07.png) +![Add Exclude ROI Rule](../../img/hyperdatasets/frame_filtering_07.png#light-mode-only) +![Add Exclude ROI Rule](../../img/hyperdatasets/frame_filtering_07_dark.png#dark-mode-only) - + Filter by metadata using Lucene queries. * Add a frame rule to filter by the metadata key `dangerous` for the value of `yes`. -![Filter by metadata](../../img/hyperdatasets/frame_filtering_08.png) +![Filter by metadata](../../img/hyperdatasets/frame_filtering_08.png#light-mode-only) +![Filter by metadata](../../img/hyperdatasets/frame_filtering_08_dark.png#dark-mode-only) * Open a frame in the frame viewer to see its metadata. -![Frame metadata in frame viewer](../../img/hyperdatasets/frame_filtering_09.png) +![Frame metadata in frame viewer](../../img/hyperdatasets/frame_filtering_09.png#light-mode-only) +![Frame metadata in frame viewer](../../img/hyperdatasets/frame_filtering_09_dark.png#dark-mode-only) + + +If your dataset includes a metadata field that stores date and time information, you can filter +based on date ranges or specific time intervals. + +Filter by date/time metadata fields using Lucene queries. + +* **Data range filter** + * Add a frame rule to filter by the metadata key `updated` for the value of `[2024-10-20 TO 2024-10-20]`. The query + will match all frames where the `updated` value matches October 20th 2024. Use the format `meta..[YYYY-MM-DD TO YYYY-MM-DD]`. + + ![Filter by date](../../img/hyperdatasets/frame_filtering_11.png#light-mode-only) + ![Filter by date](../../img/hyperdatasets/frame_filtering_11_dark.png#dark-mode-only) + + * Open a frame in the frame viewer to see its metadata. + + ![Frame date metadata in frame viewer](../../img/hyperdatasets/frame_filtering_12.png#light-mode-only) + ![Frame date metadata in frame viewer](../../img/hyperdatasets/frame_filtering_12_dark.png#dark-mode-only) + +* **Time interval filter** + * Add a frame rule to filter by the metadata key `updated` for the value of `[2024-10-20T08:00:00 TO 2024-10-20T09:00:00]`. + The query will match all frames where the updated value is between 08:00 and 09:00 on October 20th 2024. + Use the format `meta..[YYYY-MM-DDThh:mm:ss TO YYYY-MM-DDThh:mm:ss]`. + + ![Filter by datetime](../../img/hyperdatasets/frame_filtering_13.png#light-mode-only) + ![Filter by datetime](../../img/hyperdatasets/frame_filtering_13_dark.png#dark-mode-only) + + * Open a frame in the frame viewer to see its metadata. + + ![Frame datetimee metadata in frame viewer](../../img/hyperdatasets/frame_filtering_14.png#light-mode-only) + ![Frame datetime metadata in frame viewer](../../img/hyperdatasets/frame_filtering_14_dark.png#dark-mode-only) + + + Filter by sources using Lucene queries. * Add a source rule to filter for source URIs with wildcards. -![Filter by source](../../img/hyperdatasets/frame_filtering_10.png) +![Filter by source](../../img/hyperdatasets/frame_filtering_10.png#light-mode-only) +![Filter by source](../../img/hyperdatasets/frame_filtering_10_dark.png#dark-mode-only) Lucene queries can also be used in ROI label filters and frame rules. @@ -201,7 +278,8 @@ Sort the dataset version’s frames by any of the following attributes: Click Sort order to toggle between ascending and descending sort orders. -![Dataset frame sorting](../../img/hyperdatasets/dataset_frame_sorting.png) +![Dataset frame sorting](../../img/hyperdatasets/dataset_frame_sorting.png#light-mode-only) +![Dataset frame sorting](../../img/hyperdatasets/dataset_frame_sorting_dark.png#dark-mode-only) ### Exporting Frames @@ -211,7 +289,12 @@ To export (download) the filtered frames as a JSON file, click Menu to open the frame browser configuration settings. -![Frame browser config menu](../../img/hyperdatasets/frame_browser_menu.png) +
+ +![Frame browser config menu](../../img/hyperdatasets/frame_browser_menu.png#light-mode-only) +![Frame browser config menu](../../img/hyperdatasets/frame_browser_menu_dark.png#dark-mode-only) + +
#### Grouping Previews @@ -220,10 +303,11 @@ Use the **Grouping** menu to set how to display frames that share a common prope * **Group by URL** - Show a single preview for all FrameGroups with the same context ID. For example, users can set the same `context_id` to multiple FrameGroups that represent frames in a single video. * **Sample by Property** - Specify a frame or ROI property whose value to group frames by and set the number of frames -to preview for each group. For example, in the image below, frames are grouped by ROI labels. Each group displays six +to preview for each group. For example, in the image below, frames are grouped by ROI labels. Each group displays five samples of frames that contain an ROI with the same label. -![Sample by property](../../img/hyperdatasets/dataset_sample_by_roi_property.png) +![Sample by property](../../img/hyperdatasets/dataset_sample_by_roi_property.png#light-mode-only) +![Sample by property](../../img/hyperdatasets/dataset_sample_by_roi_property_dark.png#dark-mode-only) **To sample by property:** 1. In the **Grouping** menu, click **Sample by Property** @@ -237,12 +321,18 @@ samples of frames that contain an ROI with the same label. to use in grouping by their properties. For example, in a Hyper-Dataset where ROIs have object labels and type labels, view a sample of frames with different types of the same object by grouping frames according to `label.keyword` with a match query for the object of interest. +
+
+ + ![Sample by Property modal](../../img/hyperdatasets/sample_by_property_modal.png#light-mode-only) + ![Sample by Property modal](../../img/hyperdatasets/sample_by_property_modal_dark.png#dark-mode-only) + +
- ![Sample by Property modal](../../img/hyperdatasets/sample_by_property_modal.png) - The image below shows a sample of 3 frames which have ROIs of each type (`pedestrian`, `rider`, `sitting`) of `person`. - ![ROI Match Query](../../img/hyperdatasets/roi_match_query.png) + ![ROI Match Query](../../img/hyperdatasets/roi_match_query.png#light-mode-only) + ![ROI Match Query](../../img/hyperdatasets/roi_match_query_dark.png#dark-mode-only) :::note Property N/A group If there are frames which have no value for the grouped by property, a sample of them will be provided as a final group. If you sample according to an ROI property, this group will NOT include frames that have no ROIS at all. @@ -270,7 +360,8 @@ Choose the `All sources` option to present all the FrameGroup’s sources in a g shows annotations grouped by their respective sources. Additionally, annotation tools (e.g. create/delete/modify annotations) are not available in this view. -![All sources preview](../../img/hyperdatasets/preview_all_sources.png) +![All sources preview](../../img/hyperdatasets/preview_all_sources.png#light-mode-only) +![All sources preview](../../img/hyperdatasets/preview_all_sources_dark.png#dark-mode-only) :::note Unavailable Source If a FrameGroup doesn't have the selected preview source, the preview displays the "Source not available" message. @@ -295,7 +386,8 @@ be included in the calculation. For example, calculating the distribution for the `label` ROI property, specifying `rois.confidence: 1` for ROI matching will show the label distribution across only ROIs with a confidence level of 1. -![Distribution by ROI property](../../img/hyperdatasets/dataset_version_statistics_roi.png) +![Distribution by ROI property](../../img/hyperdatasets/dataset_version_statistics_roi.png#light-mode-only) +![Distribution by ROI property](../../img/hyperdatasets/dataset_version_statistics_roi_dark.png#dark-mode-only) By default, the ROI label distribution across the entire Hyper-Dataset version is shown. The tab displays the following information @@ -307,18 +399,20 @@ The tab displays the following information * The pie chart visualizes this distribution. Hover over a chart segment and its associated property and count will appear in a tooltip and its usage percentage will appear at the center of the chart. -![Version label statistics](../../img/hyperdatasets/dataset_version_statistics.png) +![Version label statistics](../../img/hyperdatasets/dataset_version_statistics.png#light-mode-only) +![Version label statistics](../../img/hyperdatasets/dataset_version_statistics_dark.png#dark-mode-only) ## Metadata The **Metadata** tab presents any additional metadata that has been attached to the dataset version. **To edit a version's metadata,** -1. Hover over the metadata box and click on the **EDIT** button +1. Hover over the metadata box and click **EDIT** 1. Edit the section contents (JSON format) 1. Click **OK** -![Version metadata](../../img/hyperdatasets/dataset_version_metadata.png) +![Version metadata](../../img/hyperdatasets/dataset_version_metadata.png#light-mode-only) +![Version metadata](../../img/hyperdatasets/dataset_version_metadata_dark.png#dark-mode-only) ## Info @@ -336,5 +430,6 @@ The **Info** tab presents a version's general information: * Percentage of annotated frames * Version description (editable, hover over element and click Edit pencil) -![Version info](../../img/hyperdatasets/dataset_version_info_panel.png) +![Version info](../../img/hyperdatasets/dataset_version_info_panel.png#light-mode-only) +![Version info](../../img/hyperdatasets/dataset_version_info_panel_dark.png#dark-mode-only) diff --git a/docs/hyperdatasets/webapp/webapp_dataviews.md b/docs/hyperdatasets/webapp/webapp_dataviews.md index 2ee565b7..9722528b 100644 --- a/docs/hyperdatasets/webapp/webapp_dataviews.md +++ b/docs/hyperdatasets/webapp/webapp_dataviews.md @@ -1,33 +1,38 @@ --- -title: The Dataviews Table +title: The Dataview Table --- -The **Dataviews table** is a [customizable](#customizing-the-dataviews-table) list of Dataviews associated with a project. +:::important ENTERPRISE FEATURE +Dataviews are available under the ClearML Enterprise plan. +::: + +The **Dataview table** is a [customizable](#customizing-the-dataview-table) list of Dataviews associated with a project. Use it to view and create Dataviews, and access their info panels. The table lists independent Dataview objects. To see Dataviews logged by a task, go -to the specific task's **DATAVIEWS** tab (see [Experiment Dataviews](webapp_exp_track_visual.md)). +to the specific task's **DATAVIEWS** tab (see [Task Dataviews](webapp_exp_track_visual.md)). -View the Dataviews table in table view Table view +View the Dataview table in table view Table view or in details view Details view, using the buttons on the top left of the page. Use the table view for a comparative view of your Dataviews according to columns of interest. Use the details view to access a selected Dataview's details, while keeping the Dataview list in view. Details view can also be accessed by double-clicking a specific Dataview in the table view to open its details view. -You can archive Dataviews so the Dataviews table doesn't get too cluttered. Click **OPEN ARCHIVE** on the top of the +You can archive Dataviews so the Dataview table doesn't get too cluttered. Click **OPEN ARCHIVE** on the top of the table to open the archive and view all archived Dataviews. From the archive, you can restore Dataviews to remove them from the archive. You can also permanently delete Dataviews. -You can download the Dataviews table as a CSV file by clicking Download +You can download the Dataview table as a CSV file by clicking Download and choosing one of these options: * **Download onscreen items** - Download the values for Dataviews currently visible on screen * **Download all items** - Download the values for all Dataviews in this project that match the current active filters The downloaded data consists of the currently displayed table columns. -![Dataviews table](../../img/hyperdatasets/webapp_dataviews_table.png) +![Dataview table](../../img/hyperdatasets/webapp_dataviews_table.png#light-mode-only) +![Dataview table](../../img/hyperdatasets/webapp_dataviews_table_dark.png#dark-mode-only) -The Dataviews table includes the following columns: +The Dataview table includes the following columns: |Column|Description|Type| |--|--|--| @@ -41,9 +46,9 @@ The Dataviews table includes the following columns: Dynamically order the columns by dragging a column heading to a new position. -## Customizing the Dataviews Table +## Customizing the Dataview Table -The Dataviews table can be customized. Changes are persistent (cached in the browser), and represented in the URL. +The Dataview table can be customized. Changes are persistent (cached in the browser), and represented in the URL. Save customized settings in a browser bookmark, and share the URL with teammates. Customize the table using any of the following: @@ -54,7 +59,7 @@ Customize the table using any of the following: dot on its top right (Filter on). To clear all active filters, click Clear filters in the top right corner of the table. -* Sort columns - By experiment name and/or elapsed time since creation. +* Sort columns - By task name and/or elapsed time since creation. :::note The following Dataviews-table customizations are saved on a **per-project** basis: @@ -70,17 +75,17 @@ all the Dataviews in the project. The customizations of these two views are save ## Dataview Actions -The following table describes the actions that can be performed from the Dataviews table. +The following table describes the actions that can be performed from the Dataview table. Access these actions with the context menu in any of the following ways: -* In the Dataviews table, right-click a Dataview, or hover over a Dataview and click Dot menu +* In the Dataview table, right-click a Dataview, or hover over a Dataview and click Dot menu * In a Dataview info panel, click the menu button Bar menu | ClearML Action | Description | |---|---| -| Details | View Dataview details, including input datasets, label mapping, augmentation operations, and iteration control. Can also be accessed by double-clicking a Dataview in the Dataviews table. | +| Details | View Dataview details, including input datasets, label mapping, and iteration control. Can also be accessed by double-clicking a Dataview in the Dataview table. | | Archive | Move Dataview to the Dataview's archive. | -| Restore | Action available in the archive. Restore a Dataview to the active Dataviews table. | +| Restore | Action available in the archive. Restore a Dataview to the active Dataview table. | | Delete | Action available in the archive. Permanently delete a Dataview. | | Clone | Make an exact copy of a Dataview that is editable. | | Move to Project | Move a Dataview to another project. | @@ -97,11 +102,13 @@ Select multiple Dataviews, then use either the context menu, or the batch action operations on the selected Dataviews. The context menu shows the number of Dataviews that can be affected by each action. The same information can be found in the batch action bar, in a tooltip that appears when hovering over an action icon. -![Dataviews table batch operations](../../img/hyperdatasets/webapp_dataviews_context_menu.png) +![Dataview table batch operations](../../img/hyperdatasets/webapp_dataviews_context_menu.png#light-mode-only) +![Dataview table batch operations](../../img/hyperdatasets/webapp_dataviews_context_menu_dark.png#dark-mode-only) ## Creating a Dataview -Create a Dataview by clicking the **+ NEW DATAVIEW** button at the top right of the table, which opens a +Create a Dataview by clicking **+ NEW DATAVIEW**, which opens a **NEW DATAVIEW** window. -![New Dataview window](../../img/webapp_dataview_new.png) \ No newline at end of file +![New Dataview window](../../img/hyperdatasets/webapp_dataview_new.png#light-mode-only) +![New Dataview window](../../img/hyperdatasets/webapp_dataview_new_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/hyperdatasets/webapp/webapp_exp_comparing.md b/docs/hyperdatasets/webapp/webapp_exp_comparing.md index 6a2e9605..333ba0cb 100644 --- a/docs/hyperdatasets/webapp/webapp_exp_comparing.md +++ b/docs/hyperdatasets/webapp/webapp_exp_comparing.md @@ -2,31 +2,36 @@ title: Comparing Dataviews --- +:::important ENTERPRISE FEATURE +Dataviews are available under the ClearML Enterprise plan. +::: + In addition to [ClearML's comparison features](../../webapp/webapp_exp_comparing.md), the ClearML Enterprise WebApp -supports comparing input data selection criteria of experiment [Dataviews](../dataviews.md), enabling to easily locate, visualize, and analyze differences. +supports comparing input data selection criteria of task [Dataviews](../dataviews.md), enabling to easily locate, visualize, and analyze differences. -## Selecting Experiments +## Selecting Tasks -To select experiments to compare: -1. Go to an experiments table that includes the experiments to be compared. -1. Select the experiments to compare. Once multiple experiments are selected, the batch action bar appears. +To select tasks to compare: +1. Go to a task table that includes the tasks to be compared. +1. Select the tasks to compare. Once multiple tasks are selected, the batch action bar appears. 1. In the batch action bar, click **COMPARE**. -The comparison page opens in the **DETAILS** tab, showing a column for each experiment. +The comparison page opens in the **DETAILS** tab, showing a column for each task. ## Dataviews -In the **Details** tab, you can view differences in the experiments' nominal values. Each experiment's information is +In the **Details** tab, you can view differences in the tasks' nominal values. Each task's information is displayed in a column, so each field is lined up side-by-side. Expand the **DATAVIEWS** section to view all the Dataview fields side-by-side (filters, iterations, label enumeration, etc.). The differences between the -experiments are highlighted. Obscure identical fields by switching on the `Hide Identical Fields` toggle. +tasks are highlighted. Obscure identical fields by switching on the `Hide Identical Fields` toggle. -The experiment on the left is used as the base experiment, to which the other experiments are compared. You can set a -new base experiment +The task on the left is used as the base task, to which the other tasks are compared. You can set a +new base task in one of the following ways: -* Hover and click Switch base experiment -on the experiment that will be the new base. -* Hover and click Pan icon on the new base experiment and drag it all the way to the left +* Hover and click Switch base task +on the task that will be the new base. +* Hover and click Pan icon on the new base task and drag it all the way to the left -![Dataview comparison](../../img/hyperdatasets/web-app/compare_dataviews.png) \ No newline at end of file +![Dataview comparison](../../img/hyperdatasets/compare_dataviews.png#light-mode-only) +![Dataview comparison](../../img/hyperdatasets/compare_dataviews_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/hyperdatasets/webapp/webapp_exp_modifying.md b/docs/hyperdatasets/webapp/webapp_exp_modifying.md index b41721a7..bbb57e62 100644 --- a/docs/hyperdatasets/webapp/webapp_exp_modifying.md +++ b/docs/hyperdatasets/webapp/webapp_exp_modifying.md @@ -2,8 +2,12 @@ title: Modifying Dataviews --- -An experiment that has been executed can be [cloned](../../webapp/webapp_exp_reproducing.md), then the cloned experiment's -execution details can be modified, and the modified experiment can be executed. +:::important ENTERPRISE FEATURE +Dataviews are available under the ClearML Enterprise plan. +::: + +A task that has been executed can be [cloned](../../webapp/webapp_exp_reproducing.md), then the cloned task's +execution details can be modified, and the modified task can be executed. In addition to all the [ClearML tuning capabilities](../../webapp/webapp_exp_tuning.md), the **ClearML Enterprise WebApp** (UI) enables modifying [Dataviews](webapp_dataviews.md), including: @@ -12,7 +16,6 @@ enables modifying [Dataviews](webapp_dataviews.md), including: * [Frame filtering](#filtering-frames) * [Label mapping](#mapping-labels-label-translation) * [Class label enumeration](#label-enumeration) -* [Data augmentation](#data-augmentation) * [Input frame iteration controls](#iteration-controls) ## Selecting Dataviews @@ -22,9 +25,9 @@ enables modifying [Dataviews](webapp_dataviews.md), including: * Create a new Dataview * Click **+** and then follow the instructions below to select Hyper-Dataset versions, filter frames, map labels (label translation), - and set label enumeration, data augmentation, and iteration controls. + and set label enumeration and iteration controls. -* Select a different Dataview already associated with the experiment. +* Select a different Dataview already associated with the task. * In the **SELECTED DATAVIEW** list, choose a Dataview. @@ -61,7 +64,7 @@ by the Dataview. ## Filtering Frames -Filtering of SingleFrames iterated by a Dataview for input to the experiment is accomplished by frame filters. +Filtering of SingleFrames iterated by a Dataview for input to the task is accomplished by frame filters. For more detailed information, see [Filtering](../dataviews.md#filtering). **To modify frame filtering:** @@ -118,22 +121,6 @@ Modify the label enumeration assigned to output models. 1. Click **SAVE**. -## Data Augmentation - -Modify the on-the-fly data augmentation applied to frame input from the select Hyper-Dataset versions and filtered by the frame filters. Data augmentation is applied in steps, where each step applies a method, operation, and strength. - -For more detailed information, see [Data Augmentation](../dataviews.md#data-augmentation). - -**To modify data augmentation** - -1. In the **AUGMENTATION** section, click **EDIT**. - - * Add (**+**) or edit an augmentation step - Select a **METHOD**, **OPERATION**, and **STRENGTH**. - - * Remove (Trash) an augmentation step. - -1. Click **SAVE**. - ## Iteration Controls Modify the frame iteration performed by the Dataview to control the order, number, timing, and reproducibility of frames @@ -158,7 +145,7 @@ For more detailed information, see [Iteration Control](../dataviews.md#iteration * **Infinite Iterations** -1. Select the **RANDOM SEED** - If the experiment is rerun and the seed remains unchanged, the frame iteration is the same. +1. Select the **RANDOM SEED** - If the task is rerun and the seed remains unchanged, the frame iteration is the same. 1. For video, enter a **CLIP LENGTH** - For video data sources, in the number of sequential frames from a clip to iterate. diff --git a/docs/hyperdatasets/webapp/webapp_exp_track_visual.md b/docs/hyperdatasets/webapp/webapp_exp_track_visual.md index 0d5a5546..569d1fff 100644 --- a/docs/hyperdatasets/webapp/webapp_exp_track_visual.md +++ b/docs/hyperdatasets/webapp/webapp_exp_track_visual.md @@ -1,23 +1,27 @@ --- -title: Experiment Dataviews +title: Task Dataviews --- -While an experiment is running, and any time after it finishes, results are tracked and can be visualized in the ClearML +:::important ENTERPRISE FEATURE +Dataviews are available under the ClearML Enterprise plan. +::: + +While a task is running, and any time after it finishes, results are tracked and can be visualized in the ClearML Enterprise WebApp (UI). In addition to all of ClearML's offerings, ClearML Enterprise keeps track of the Dataviews associated with an -experiment, which can be viewed and [modified](webapp_exp_modifying.md) in the WebApp. +task, which can be viewed and [modified](webapp_exp_modifying.md) in the WebApp. -## Viewing an Experiment's Dataviews +## Viewing a Task's Dataviews -In an experiment's page, go to the **DATAVIEWS** tab to view all the experiment's Dataview details, including: +In a task's page, go to the **DATAVIEWS** tab to view all the task's Dataview details, including: * Input data [selection](#input) and [filtering](#filtering) * ROI [mapping](#mapping) (label translation) * [Label enumeration](#label-enumeration) -* On-the-fly [data augmentation](#augmentation) * [Iteration controls](#iteration-control) -![Dataview tab](../../img/hyperdatasets/web-app/dataview_tab.png) +![Dataview tab](../../img/hyperdatasets/dataview_tab.png#light-mode-only) +![Dataview tab](../../img/hyperdatasets/dataview_tab_dark.png#dark-mode-only) ### Input @@ -27,7 +31,7 @@ menu. ### Filtering -The **FILTERING** section lists the SingleFrame filters iterated by a Dataview, applied to the experiment data. +The **FILTERING** section lists the SingleFrame filters iterated by a Dataview, applied to the task data. Each frame filter is composed of: * A Dataset version to input from @@ -52,13 +56,6 @@ For detailed information, see [Mapping ROI labels](../dataviews.md#mapping-roi-l Assign label enumeration in the **LABELS ENUMERATION** area. -### Augmentation - -On-the-fly data augmentation applied to SingleFrames, which does not create new data. Apply data Augmentation in steps, -where each step is composed of a method, an operation, and a strength. - -For detailed information, see [Data augmentation](../dataviews.md#data-augmentation). - ### Iteration Control The input data iteration control settings determine the order, number, timing, and reproducibility of the Dataview iterating diff --git a/docs/img/4100.png b/docs/img/4100.png index 710abe9c..7bd6b4f1 100644 Binary files a/docs/img/4100.png and b/docs/img/4100.png differ diff --git a/docs/img/4100_dark.png b/docs/img/4100_dark.png new file mode 100644 index 00000000..388b8942 Binary files /dev/null and b/docs/img/4100_dark.png differ diff --git a/docs/img/agents_queues_resource_management.png b/docs/img/agents_queues_resource_management.png index 54261f9a..8ef3443d 100644 Binary files a/docs/img/agents_queues_resource_management.png and b/docs/img/agents_queues_resource_management.png differ diff --git a/docs/img/agents_queues_resource_management_dark.png b/docs/img/agents_queues_resource_management_dark.png new file mode 100644 index 00000000..25f15847 Binary files /dev/null and b/docs/img/agents_queues_resource_management_dark.png differ diff --git a/docs/img/annotation_page.png b/docs/img/annotation_page.png deleted file mode 100644 index 24bb1e42..00000000 Binary files a/docs/img/annotation_page.png and /dev/null differ diff --git a/docs/img/annotation_task_card.png b/docs/img/annotation_task_card.png deleted file mode 100644 index c8ca94e6..00000000 Binary files a/docs/img/annotation_task_card.png and /dev/null differ diff --git a/docs/img/app_bool_choice.png b/docs/img/app_bool_choice.png new file mode 100644 index 00000000..d0df5dd8 Binary files /dev/null and b/docs/img/app_bool_choice.png differ diff --git a/docs/img/app_bool_choice_dark.png b/docs/img/app_bool_choice_dark.png new file mode 100644 index 00000000..5e28c914 Binary files /dev/null and b/docs/img/app_bool_choice_dark.png differ diff --git a/docs/img/app_cond_str.png b/docs/img/app_cond_str.png new file mode 100644 index 00000000..7ac43ae4 Binary files /dev/null and b/docs/img/app_cond_str.png differ diff --git a/docs/img/app_cond_str_dark.png b/docs/img/app_cond_str_dark.png new file mode 100644 index 00000000..8b26acbe Binary files /dev/null and b/docs/img/app_cond_str_dark.png differ diff --git a/docs/img/app_context_menu.png b/docs/img/app_context_menu.png index 5d07ea47..9287f6fa 100644 Binary files a/docs/img/app_context_menu.png and b/docs/img/app_context_menu.png differ diff --git a/docs/img/app_context_menu_dark.png b/docs/img/app_context_menu_dark.png new file mode 100644 index 00000000..39a3f514 Binary files /dev/null and b/docs/img/app_context_menu_dark.png differ diff --git a/docs/img/app_group.png b/docs/img/app_group.png new file mode 100644 index 00000000..9d377d5a Binary files /dev/null and b/docs/img/app_group.png differ diff --git a/docs/img/app_group_dark.png b/docs/img/app_group_dark.png new file mode 100644 index 00000000..116fec04 Binary files /dev/null and b/docs/img/app_group_dark.png differ diff --git a/docs/img/app_html_elements.png b/docs/img/app_html_elements.png new file mode 100644 index 00000000..67769ac1 Binary files /dev/null and b/docs/img/app_html_elements.png differ diff --git a/docs/img/app_html_elements_dark.png b/docs/img/app_html_elements_dark.png new file mode 100644 index 00000000..f9eb9eca Binary files /dev/null and b/docs/img/app_html_elements_dark.png differ diff --git a/docs/img/app_log.png b/docs/img/app_log.png new file mode 100644 index 00000000..272def23 Binary files /dev/null and b/docs/img/app_log.png differ diff --git a/docs/img/app_log_dark.png b/docs/img/app_log_dark.png new file mode 100644 index 00000000..16c90163 Binary files /dev/null and b/docs/img/app_log_dark.png differ diff --git a/docs/img/app_plot.png b/docs/img/app_plot.png new file mode 100644 index 00000000..26907fce Binary files /dev/null and b/docs/img/app_plot.png differ diff --git a/docs/img/app_plot_dark.png b/docs/img/app_plot_dark.png new file mode 100644 index 00000000..840e772a Binary files /dev/null and b/docs/img/app_plot_dark.png differ diff --git a/docs/img/app_proj_selection.png b/docs/img/app_proj_selection.png new file mode 100644 index 00000000..3b125b91 Binary files /dev/null and b/docs/img/app_proj_selection.png differ diff --git a/docs/img/app_proj_selection_dark.png b/docs/img/app_proj_selection_dark.png new file mode 100644 index 00000000..8a3dc9e3 Binary files /dev/null and b/docs/img/app_proj_selection_dark.png differ diff --git a/docs/img/apps_dashboard.png b/docs/img/apps_dashboard.png index 89a46511..1059a12e 100644 Binary files a/docs/img/apps_dashboard.png and b/docs/img/apps_dashboard.png differ diff --git a/docs/img/apps_dashboard_dark.png b/docs/img/apps_dashboard_dark.png new file mode 100644 index 00000000..ebfa8162 Binary files /dev/null and b/docs/img/apps_dashboard_dark.png differ diff --git a/docs/img/apps_dashboard_wizard.png b/docs/img/apps_dashboard_wizard.png index 53c42af4..17bfd7ba 100644 Binary files a/docs/img/apps_dashboard_wizard.png and b/docs/img/apps_dashboard_wizard.png differ diff --git a/docs/img/apps_dashboard_wizard_dark.png b/docs/img/apps_dashboard_wizard_dark.png new file mode 100644 index 00000000..57e9b977 Binary files /dev/null and b/docs/img/apps_dashboard_wizard_dark.png differ diff --git a/docs/img/apps_embedding_model_deployment.png b/docs/img/apps_embedding_model_deployment.png index 5e6cd56c..ec9b5c84 100644 Binary files a/docs/img/apps_embedding_model_deployment.png and b/docs/img/apps_embedding_model_deployment.png differ diff --git a/docs/img/apps_embedding_model_deployment_dark.png b/docs/img/apps_embedding_model_deployment_dark.png new file mode 100644 index 00000000..4469940d Binary files /dev/null and b/docs/img/apps_embedding_model_deployment_dark.png differ diff --git a/docs/img/apps_embedding_model_deployment_form.png b/docs/img/apps_embedding_model_deployment_form.png index 54574778..4a07dd10 100644 Binary files a/docs/img/apps_embedding_model_deployment_form.png and b/docs/img/apps_embedding_model_deployment_form.png differ diff --git a/docs/img/apps_embedding_model_deployment_form_dark.png b/docs/img/apps_embedding_model_deployment_form_dark.png new file mode 100644 index 00000000..9c22d1a0 Binary files /dev/null and b/docs/img/apps_embedding_model_deployment_form_dark.png differ diff --git a/docs/img/apps_format_overview.png b/docs/img/apps_format_overview.png index 790bdde2..4492ac34 100644 Binary files a/docs/img/apps_format_overview.png and b/docs/img/apps_format_overview.png differ diff --git a/docs/img/apps_format_overview_dark.png b/docs/img/apps_format_overview_dark.png new file mode 100644 index 00000000..8e71d81d Binary files /dev/null and b/docs/img/apps_format_overview_dark.png differ diff --git a/docs/img/apps_gradio.png b/docs/img/apps_gradio.png new file mode 100644 index 00000000..7d145982 Binary files /dev/null and b/docs/img/apps_gradio.png differ diff --git a/docs/img/apps_gradio_dark.png b/docs/img/apps_gradio_dark.png new file mode 100644 index 00000000..3959ed79 Binary files /dev/null and b/docs/img/apps_gradio_dark.png differ diff --git a/docs/img/apps_hpo.png b/docs/img/apps_hpo.png deleted file mode 100644 index 01529f0d..00000000 Binary files a/docs/img/apps_hpo.png and /dev/null differ diff --git a/docs/img/apps_hpo_wizard.png b/docs/img/apps_hpo_wizard.png index 5c304b54..08d97419 100644 Binary files a/docs/img/apps_hpo_wizard.png and b/docs/img/apps_hpo_wizard.png differ diff --git a/docs/img/apps_hpo_wizard_dark.png b/docs/img/apps_hpo_wizard_dark.png new file mode 100644 index 00000000..11ae211a Binary files /dev/null and b/docs/img/apps_hpo_wizard_dark.png differ diff --git a/docs/img/apps_instance_list_actions.png b/docs/img/apps_instance_list_actions.png index 849cf961..708cb41d 100644 Binary files a/docs/img/apps_instance_list_actions.png and b/docs/img/apps_instance_list_actions.png differ diff --git a/docs/img/apps_instance_list_actions_dark.png b/docs/img/apps_instance_list_actions_dark.png new file mode 100644 index 00000000..eea25792 Binary files /dev/null and b/docs/img/apps_instance_list_actions_dark.png differ diff --git a/docs/img/apps_jupyter_lab.png b/docs/img/apps_jupyter_lab.png index 55fc4365..48ba54b9 100644 Binary files a/docs/img/apps_jupyter_lab.png and b/docs/img/apps_jupyter_lab.png differ diff --git a/docs/img/apps_jupyter_lab_dark.png b/docs/img/apps_jupyter_lab_dark.png new file mode 100644 index 00000000..8cfeb724 Binary files /dev/null and b/docs/img/apps_jupyter_lab_dark.png differ diff --git a/docs/img/apps_llama_form.png b/docs/img/apps_llama_form.png index 12bb2be3..d2ef9441 100644 Binary files a/docs/img/apps_llama_form.png and b/docs/img/apps_llama_form.png differ diff --git a/docs/img/apps_llama_form_dark.png b/docs/img/apps_llama_form_dark.png new file mode 100644 index 00000000..a25a4e39 Binary files /dev/null and b/docs/img/apps_llama_form_dark.png differ diff --git a/docs/img/apps_model_deployment.png b/docs/img/apps_model_deployment.png index b05132f0..cc6e7ae4 100644 Binary files a/docs/img/apps_model_deployment.png and b/docs/img/apps_model_deployment.png differ diff --git a/docs/img/apps_model_deployment_dark.png b/docs/img/apps_model_deployment_dark.png new file mode 100644 index 00000000..301f673d Binary files /dev/null and b/docs/img/apps_model_deployment_dark.png differ diff --git a/docs/img/apps_model_deployment_form.png b/docs/img/apps_model_deployment_form.png index f1594f9f..8cef1655 100644 Binary files a/docs/img/apps_model_deployment_form.png and b/docs/img/apps_model_deployment_form.png differ diff --git a/docs/img/apps_model_deployment_form_dark.png b/docs/img/apps_model_deployment_form_dark.png new file mode 100644 index 00000000..1d0d5b1a Binary files /dev/null and b/docs/img/apps_model_deployment_form_dark.png differ diff --git a/docs/img/apps_overview_page.png b/docs/img/apps_overview_page.png index 1936b424..58c5b7c9 100644 Binary files a/docs/img/apps_overview_page.png and b/docs/img/apps_overview_page.png differ diff --git a/docs/img/apps_overview_page_dark.png b/docs/img/apps_overview_page_dark.png new file mode 100644 index 00000000..c51ae3ab Binary files /dev/null and b/docs/img/apps_overview_page_dark.png differ diff --git a/docs/img/apps_ssh_session_dashboard.png b/docs/img/apps_ssh_session_dashboard.png index 4e50d1f1..e443189d 100644 Binary files a/docs/img/apps_ssh_session_dashboard.png and b/docs/img/apps_ssh_session_dashboard.png differ diff --git a/docs/img/apps_ssh_session_dashboard_dark.png b/docs/img/apps_ssh_session_dashboard_dark.png new file mode 100644 index 00000000..b02da6e5 Binary files /dev/null and b/docs/img/apps_ssh_session_dashboard_dark.png differ diff --git a/docs/img/apps_ssh_session_wizard.png b/docs/img/apps_ssh_session_wizard.png index 5648fa78..cdf8d7ed 100644 Binary files a/docs/img/apps_ssh_session_wizard.png and b/docs/img/apps_ssh_session_wizard.png differ diff --git a/docs/img/apps_ssh_session_wizard_dark.png b/docs/img/apps_ssh_session_wizard_dark.png new file mode 100644 index 00000000..46fa4d58 Binary files /dev/null and b/docs/img/apps_ssh_session_wizard_dark.png differ diff --git a/docs/img/apps_taskscheduler_dashboard.png b/docs/img/apps_taskscheduler_dashboard.png index a5b86a98..49915fda 100644 Binary files a/docs/img/apps_taskscheduler_dashboard.png and b/docs/img/apps_taskscheduler_dashboard.png differ diff --git a/docs/img/apps_taskscheduler_dashboard_dark.png b/docs/img/apps_taskscheduler_dashboard_dark.png new file mode 100644 index 00000000..fc0647be Binary files /dev/null and b/docs/img/apps_taskscheduler_dashboard_dark.png differ diff --git a/docs/img/apps_taskscheduler_executed_tasks.png b/docs/img/apps_taskscheduler_executed_tasks.png index 30034b04..694f5360 100644 Binary files a/docs/img/apps_taskscheduler_executed_tasks.png and b/docs/img/apps_taskscheduler_executed_tasks.png differ diff --git a/docs/img/apps_taskscheduler_executed_tasks_dark.png b/docs/img/apps_taskscheduler_executed_tasks_dark.png new file mode 100644 index 00000000..57b0fb6e Binary files /dev/null and b/docs/img/apps_taskscheduler_executed_tasks_dark.png differ diff --git a/docs/img/apps_taskscheduler_scheduled_tasks.png b/docs/img/apps_taskscheduler_scheduled_tasks.png index d17f325c..d5c5af6d 100644 Binary files a/docs/img/apps_taskscheduler_scheduled_tasks.png and b/docs/img/apps_taskscheduler_scheduled_tasks.png differ diff --git a/docs/img/apps_taskscheduler_scheduled_tasks_dark.png b/docs/img/apps_taskscheduler_scheduled_tasks_dark.png new file mode 100644 index 00000000..3035f4e4 Binary files /dev/null and b/docs/img/apps_taskscheduler_scheduled_tasks_dark.png differ diff --git a/docs/img/apps_taskscheduler_wizard.png b/docs/img/apps_taskscheduler_wizard.png index 767236df..3b7ae8b7 100644 Binary files a/docs/img/apps_taskscheduler_wizard.png and b/docs/img/apps_taskscheduler_wizard.png differ diff --git a/docs/img/apps_taskscheduler_wizard_dark.png b/docs/img/apps_taskscheduler_wizard_dark.png new file mode 100644 index 00000000..2447c07f Binary files /dev/null and b/docs/img/apps_taskscheduler_wizard_dark.png differ diff --git a/docs/img/apps_trigger_manager_dashboard.png b/docs/img/apps_trigger_manager_dashboard.png index 139b595e..8eb3c0c5 100644 Binary files a/docs/img/apps_trigger_manager_dashboard.png and b/docs/img/apps_trigger_manager_dashboard.png differ diff --git a/docs/img/apps_trigger_manager_dashboard_dark.png b/docs/img/apps_trigger_manager_dashboard_dark.png new file mode 100644 index 00000000..7253ec71 Binary files /dev/null and b/docs/img/apps_trigger_manager_dashboard_dark.png differ diff --git a/docs/img/apps_trigger_manager_wizard.png b/docs/img/apps_trigger_manager_wizard.png index d2e2e243..8fc83ed3 100644 Binary files a/docs/img/apps_trigger_manager_wizard.png and b/docs/img/apps_trigger_manager_wizard.png differ diff --git a/docs/img/apps_trigger_manager_wizard_dark.png b/docs/img/apps_trigger_manager_wizard_dark.png new file mode 100644 index 00000000..55c13391 Binary files /dev/null and b/docs/img/apps_trigger_manager_wizard_dark.png differ diff --git a/docs/img/apps_vs_code.png b/docs/img/apps_vs_code.png index 4b66c78e..e12eaf4d 100644 Binary files a/docs/img/apps_vs_code.png and b/docs/img/apps_vs_code.png differ diff --git a/docs/img/apps_vs_code_dark.png b/docs/img/apps_vs_code_dark.png new file mode 100644 index 00000000..ad4abe90 Binary files /dev/null and b/docs/img/apps_vs_code_dark.png differ diff --git a/docs/img/compare_parallel_coordinates.png b/docs/img/compare_parallel_coordinates.png index 4b3b1283..81a265c9 100644 Binary files a/docs/img/compare_parallel_coordinates.png and b/docs/img/compare_parallel_coordinates.png differ diff --git a/docs/img/compare_parallel_coordinates_dark.png b/docs/img/compare_parallel_coordinates_dark.png new file mode 100644 index 00000000..dcc24c6d Binary files /dev/null and b/docs/img/compare_parallel_coordinates_dark.png differ diff --git a/docs/img/examples_catboost_artifacts.png b/docs/img/examples_catboost_artifacts.png index c2110cda..931e7fde 100644 Binary files a/docs/img/examples_catboost_artifacts.png and b/docs/img/examples_catboost_artifacts.png differ diff --git a/docs/img/examples_catboost_artifacts_dark.png b/docs/img/examples_catboost_artifacts_dark.png new file mode 100644 index 00000000..40fee1b5 Binary files /dev/null and b/docs/img/examples_catboost_artifacts_dark.png differ diff --git a/docs/img/examples_catboost_configurations.png b/docs/img/examples_catboost_configurations.png index a8272ce0..3e7823ca 100644 Binary files a/docs/img/examples_catboost_configurations.png and b/docs/img/examples_catboost_configurations.png differ diff --git a/docs/img/examples_catboost_configurations_dark.png b/docs/img/examples_catboost_configurations_dark.png new file mode 100644 index 00000000..168c34b9 Binary files /dev/null and b/docs/img/examples_catboost_configurations_dark.png differ diff --git a/docs/img/examples_catboost_console.png b/docs/img/examples_catboost_console.png index 52643fca..940433b0 100644 Binary files a/docs/img/examples_catboost_console.png and b/docs/img/examples_catboost_console.png differ diff --git a/docs/img/examples_catboost_console_dark.png b/docs/img/examples_catboost_console_dark.png new file mode 100644 index 00000000..b8b684fe Binary files /dev/null and b/docs/img/examples_catboost_console_dark.png differ diff --git a/docs/img/examples_catboost_model.png b/docs/img/examples_catboost_model.png index 70a4909b..b66a8443 100644 Binary files a/docs/img/examples_catboost_model.png and b/docs/img/examples_catboost_model.png differ diff --git a/docs/img/examples_catboost_model_dark.png b/docs/img/examples_catboost_model_dark.png new file mode 100644 index 00000000..3470c59a Binary files /dev/null and b/docs/img/examples_catboost_model_dark.png differ diff --git a/docs/img/examples_catboost_scalars.png b/docs/img/examples_catboost_scalars.png index 28a53003..580eb933 100644 Binary files a/docs/img/examples_catboost_scalars.png and b/docs/img/examples_catboost_scalars.png differ diff --git a/docs/img/examples_catboost_scalars_dark.png b/docs/img/examples_catboost_scalars_dark.png new file mode 100644 index 00000000..3daa8f9c Binary files /dev/null and b/docs/img/examples_catboost_scalars_dark.png differ diff --git a/docs/img/examples_data_management_cifar_dataset.png b/docs/img/examples_data_management_cifar_dataset.png index 57d229a4..04fd9674 100644 Binary files a/docs/img/examples_data_management_cifar_dataset.png and b/docs/img/examples_data_management_cifar_dataset.png differ diff --git a/docs/img/examples_data_management_cifar_dataset_dark.png b/docs/img/examples_data_management_cifar_dataset_dark.png new file mode 100644 index 00000000..9b122dc0 Binary files /dev/null and b/docs/img/examples_data_management_cifar_dataset_dark.png differ diff --git a/docs/img/examples_hpo_parallel_coordinates.png b/docs/img/examples_hpo_parallel_coordinates.png index 7627d8a5..8cf953a4 100644 Binary files a/docs/img/examples_hpo_parallel_coordinates.png and b/docs/img/examples_hpo_parallel_coordinates.png differ diff --git a/docs/img/examples_hpo_parallel_coordinates_dark.png b/docs/img/examples_hpo_parallel_coordinates_dark.png new file mode 100644 index 00000000..bf21644c Binary files /dev/null and b/docs/img/examples_hpo_parallel_coordinates_dark.png differ diff --git a/docs/img/examples_keras_00.png b/docs/img/examples_keras_00.png index dfdf6b2e..9273e920 100644 Binary files a/docs/img/examples_keras_00.png and b/docs/img/examples_keras_00.png differ diff --git a/docs/img/examples_keras_00_dark.png b/docs/img/examples_keras_00_dark.png new file mode 100644 index 00000000..58da61f6 Binary files /dev/null and b/docs/img/examples_keras_00_dark.png differ diff --git a/docs/img/examples_keras_00a.png b/docs/img/examples_keras_00a.png index ca3ed0d9..e35c7852 100644 Binary files a/docs/img/examples_keras_00a.png and b/docs/img/examples_keras_00a.png differ diff --git a/docs/img/examples_keras_00a_dark.png b/docs/img/examples_keras_00a_dark.png new file mode 100644 index 00000000..29b7087c Binary files /dev/null and b/docs/img/examples_keras_00a_dark.png differ diff --git a/docs/img/examples_keras_01.png b/docs/img/examples_keras_01.png index ecb8e78b..5831ed19 100644 Binary files a/docs/img/examples_keras_01.png and b/docs/img/examples_keras_01.png differ diff --git a/docs/img/examples_keras_01_dark.png b/docs/img/examples_keras_01_dark.png new file mode 100644 index 00000000..ff50b4e8 Binary files /dev/null and b/docs/img/examples_keras_01_dark.png differ diff --git a/docs/img/examples_keras_02.png b/docs/img/examples_keras_02.png index 84f58257..d40aa125 100644 Binary files a/docs/img/examples_keras_02.png and b/docs/img/examples_keras_02.png differ diff --git a/docs/img/examples_keras_02_dark.png b/docs/img/examples_keras_02_dark.png new file mode 100644 index 00000000..2b6f8edb Binary files /dev/null and b/docs/img/examples_keras_02_dark.png differ diff --git a/docs/img/examples_keras_jupyter_03.png b/docs/img/examples_keras_jupyter_03.png index c5a79cf1..c6e6827c 100644 Binary files a/docs/img/examples_keras_jupyter_03.png and b/docs/img/examples_keras_jupyter_03.png differ diff --git a/docs/img/examples_keras_jupyter_03_dark.png b/docs/img/examples_keras_jupyter_03_dark.png new file mode 100644 index 00000000..0f1d232a Binary files /dev/null and b/docs/img/examples_keras_jupyter_03_dark.png differ diff --git a/docs/img/examples_keras_jupyter_03a.png b/docs/img/examples_keras_jupyter_03a.png index 3fe892ca..380c63ce 100644 Binary files a/docs/img/examples_keras_jupyter_03a.png and b/docs/img/examples_keras_jupyter_03a.png differ diff --git a/docs/img/examples_keras_jupyter_03a_dark.png b/docs/img/examples_keras_jupyter_03a_dark.png new file mode 100644 index 00000000..bdab573e Binary files /dev/null and b/docs/img/examples_keras_jupyter_03a_dark.png differ diff --git a/docs/img/examples_keras_jupyter_04.png b/docs/img/examples_keras_jupyter_04.png index cbd03b54..fbd03b42 100644 Binary files a/docs/img/examples_keras_jupyter_04.png and b/docs/img/examples_keras_jupyter_04.png differ diff --git a/docs/img/examples_keras_jupyter_04_dark.png b/docs/img/examples_keras_jupyter_04_dark.png new file mode 100644 index 00000000..63f95eb9 Binary files /dev/null and b/docs/img/examples_keras_jupyter_04_dark.png differ diff --git a/docs/img/examples_keras_jupyter_07.png b/docs/img/examples_keras_jupyter_07.png index 2da749b4..a69559f0 100644 Binary files a/docs/img/examples_keras_jupyter_07.png and b/docs/img/examples_keras_jupyter_07.png differ diff --git a/docs/img/examples_keras_jupyter_07_dark.png b/docs/img/examples_keras_jupyter_07_dark.png new file mode 100644 index 00000000..6722519c Binary files /dev/null and b/docs/img/examples_keras_jupyter_07_dark.png differ diff --git a/docs/img/examples_keras_jupyter_08.png b/docs/img/examples_keras_jupyter_08.png index 11ae622e..dcb9f00e 100644 Binary files a/docs/img/examples_keras_jupyter_08.png and b/docs/img/examples_keras_jupyter_08.png differ diff --git a/docs/img/examples_keras_jupyter_08_dark.png b/docs/img/examples_keras_jupyter_08_dark.png new file mode 100644 index 00000000..35d2a770 Binary files /dev/null and b/docs/img/examples_keras_jupyter_08_dark.png differ diff --git a/docs/img/examples_keras_jupyter_20.png b/docs/img/examples_keras_jupyter_20.png index 9e7f4809..8e6c6d8c 100644 Binary files a/docs/img/examples_keras_jupyter_20.png and b/docs/img/examples_keras_jupyter_20.png differ diff --git a/docs/img/examples_keras_jupyter_20_dark.png b/docs/img/examples_keras_jupyter_20_dark.png new file mode 100644 index 00000000..a2d66e26 Binary files /dev/null and b/docs/img/examples_keras_jupyter_20_dark.png differ diff --git a/docs/img/examples_keras_jupyter_21.png b/docs/img/examples_keras_jupyter_21.png index 1f827cde..6a0acd43 100644 Binary files a/docs/img/examples_keras_jupyter_21.png and b/docs/img/examples_keras_jupyter_21.png differ diff --git a/docs/img/examples_keras_jupyter_21_dark.png b/docs/img/examples_keras_jupyter_21_dark.png new file mode 100644 index 00000000..f6a71306 Binary files /dev/null and b/docs/img/examples_keras_jupyter_21_dark.png differ diff --git a/docs/img/examples_keras_jupyter_23.png b/docs/img/examples_keras_jupyter_23.png index 0526c89a..63bcfbbc 100644 Binary files a/docs/img/examples_keras_jupyter_23.png and b/docs/img/examples_keras_jupyter_23.png differ diff --git a/docs/img/examples_keras_jupyter_23_dark.png b/docs/img/examples_keras_jupyter_23_dark.png new file mode 100644 index 00000000..f1ef7481 Binary files /dev/null and b/docs/img/examples_keras_jupyter_23_dark.png differ diff --git a/docs/img/examples_keras_jupyter_24.png b/docs/img/examples_keras_jupyter_24.png index 51a3d8d0..5f46bf0f 100644 Binary files a/docs/img/examples_keras_jupyter_24.png and b/docs/img/examples_keras_jupyter_24.png differ diff --git a/docs/img/examples_keras_jupyter_24_dark.png b/docs/img/examples_keras_jupyter_24_dark.png new file mode 100644 index 00000000..1fe83bbc Binary files /dev/null and b/docs/img/examples_keras_jupyter_24_dark.png differ diff --git a/docs/img/examples_model_update_artifacts.png b/docs/img/examples_model_update_artifacts.png index eee2aa00..25d5d385 100644 Binary files a/docs/img/examples_model_update_artifacts.png and b/docs/img/examples_model_update_artifacts.png differ diff --git a/docs/img/examples_model_update_artifacts_dark.png b/docs/img/examples_model_update_artifacts_dark.png new file mode 100644 index 00000000..36b1e74b Binary files /dev/null and b/docs/img/examples_model_update_artifacts_dark.png differ diff --git a/docs/img/examples_model_update_labels.png b/docs/img/examples_model_update_labels.png index 41edc686..600d968a 100644 Binary files a/docs/img/examples_model_update_labels.png and b/docs/img/examples_model_update_labels.png differ diff --git a/docs/img/examples_model_update_labels_dark.png b/docs/img/examples_model_update_labels_dark.png new file mode 100644 index 00000000..f666147b Binary files /dev/null and b/docs/img/examples_model_update_labels_dark.png differ diff --git a/docs/img/examples_model_update_model.png b/docs/img/examples_model_update_model.png index 60d8083b..bb803449 100644 Binary files a/docs/img/examples_model_update_model.png and b/docs/img/examples_model_update_model.png differ diff --git a/docs/img/examples_model_update_model_dark.png b/docs/img/examples_model_update_model_dark.png new file mode 100644 index 00000000..c511220d Binary files /dev/null and b/docs/img/examples_model_update_model_dark.png differ diff --git a/docs/img/examples_model_update_network.png b/docs/img/examples_model_update_network.png index 8db0352e..d3096a3f 100644 Binary files a/docs/img/examples_model_update_network.png and b/docs/img/examples_model_update_network.png differ diff --git a/docs/img/examples_model_update_network_dark.png b/docs/img/examples_model_update_network_dark.png new file mode 100644 index 00000000..337a98c7 Binary files /dev/null and b/docs/img/examples_model_update_network_dark.png differ diff --git a/docs/img/examples_pytorch_distributed_example_01.png b/docs/img/examples_pytorch_distributed_example_01.png index 1c757e38..562b4252 100644 Binary files a/docs/img/examples_pytorch_distributed_example_01.png and b/docs/img/examples_pytorch_distributed_example_01.png differ diff --git a/docs/img/examples_pytorch_distributed_example_01_dark.png b/docs/img/examples_pytorch_distributed_example_01_dark.png new file mode 100644 index 00000000..7ee16907 Binary files /dev/null and b/docs/img/examples_pytorch_distributed_example_01_dark.png differ diff --git a/docs/img/examples_pytorch_distributed_example_01a.png b/docs/img/examples_pytorch_distributed_example_01a.png deleted file mode 100644 index 05561153..00000000 Binary files a/docs/img/examples_pytorch_distributed_example_01a.png and /dev/null differ diff --git a/docs/img/examples_pytorch_distributed_example_02.png b/docs/img/examples_pytorch_distributed_example_02.png index d89d0378..b28509cc 100644 Binary files a/docs/img/examples_pytorch_distributed_example_02.png and b/docs/img/examples_pytorch_distributed_example_02.png differ diff --git a/docs/img/examples_pytorch_distributed_example_02_dark.png b/docs/img/examples_pytorch_distributed_example_02_dark.png new file mode 100644 index 00000000..0fb9ae1f Binary files /dev/null and b/docs/img/examples_pytorch_distributed_example_02_dark.png differ diff --git a/docs/img/examples_pytorch_distributed_example_06.png b/docs/img/examples_pytorch_distributed_example_06.png index 216dae82..a399be1e 100644 Binary files a/docs/img/examples_pytorch_distributed_example_06.png and b/docs/img/examples_pytorch_distributed_example_06.png differ diff --git a/docs/img/examples_pytorch_distributed_example_06_dark.png b/docs/img/examples_pytorch_distributed_example_06_dark.png new file mode 100644 index 00000000..1c633c5f Binary files /dev/null and b/docs/img/examples_pytorch_distributed_example_06_dark.png differ diff --git a/docs/img/examples_pytorch_distributed_example_08.png b/docs/img/examples_pytorch_distributed_example_08.png index 206b82eb..84fd3722 100644 Binary files a/docs/img/examples_pytorch_distributed_example_08.png and b/docs/img/examples_pytorch_distributed_example_08.png differ diff --git a/docs/img/examples_pytorch_distributed_example_08_dark.png b/docs/img/examples_pytorch_distributed_example_08_dark.png new file mode 100644 index 00000000..3a7ab8f3 Binary files /dev/null and b/docs/img/examples_pytorch_distributed_example_08_dark.png differ diff --git a/docs/img/examples_pytorch_distributed_example_09.png b/docs/img/examples_pytorch_distributed_example_09.png index 3e5d02e8..2880774a 100644 Binary files a/docs/img/examples_pytorch_distributed_example_09.png and b/docs/img/examples_pytorch_distributed_example_09.png differ diff --git a/docs/img/examples_pytorch_distributed_example_09_dark.png b/docs/img/examples_pytorch_distributed_example_09_dark.png new file mode 100644 index 00000000..df6a551c Binary files /dev/null and b/docs/img/examples_pytorch_distributed_example_09_dark.png differ diff --git a/docs/img/examples_pytorch_matplotlib_02.png b/docs/img/examples_pytorch_matplotlib_02.png index 67ce4d54..69499a18 100644 Binary files a/docs/img/examples_pytorch_matplotlib_02.png and b/docs/img/examples_pytorch_matplotlib_02.png differ diff --git a/docs/img/examples_pytorch_matplotlib_02_dark.png b/docs/img/examples_pytorch_matplotlib_02_dark.png new file mode 100644 index 00000000..fd09a689 Binary files /dev/null and b/docs/img/examples_pytorch_matplotlib_02_dark.png differ diff --git a/docs/img/examples_pytorch_matplotlib_02a.png b/docs/img/examples_pytorch_matplotlib_02a.png index 888821a0..7c7c95f8 100644 Binary files a/docs/img/examples_pytorch_matplotlib_02a.png and b/docs/img/examples_pytorch_matplotlib_02a.png differ diff --git a/docs/img/examples_pytorch_matplotlib_02a_dark.png b/docs/img/examples_pytorch_matplotlib_02a_dark.png new file mode 100644 index 00000000..376a955f Binary files /dev/null and b/docs/img/examples_pytorch_matplotlib_02a_dark.png differ diff --git a/docs/img/examples_pytorch_matplotlib_02b.png b/docs/img/examples_pytorch_matplotlib_02b.png index bb195fab..4a60a3d7 100644 Binary files a/docs/img/examples_pytorch_matplotlib_02b.png and b/docs/img/examples_pytorch_matplotlib_02b.png differ diff --git a/docs/img/examples_pytorch_matplotlib_02b_dark.png b/docs/img/examples_pytorch_matplotlib_02b_dark.png new file mode 100644 index 00000000..fd0973c3 Binary files /dev/null and b/docs/img/examples_pytorch_matplotlib_02b_dark.png differ diff --git a/docs/img/examples_pytorch_mnist_01.png b/docs/img/examples_pytorch_mnist_01.png index 0021706c..4f0d77d0 100644 Binary files a/docs/img/examples_pytorch_mnist_01.png and b/docs/img/examples_pytorch_mnist_01.png differ diff --git a/docs/img/examples_pytorch_mnist_01_dark.png b/docs/img/examples_pytorch_mnist_01_dark.png new file mode 100644 index 00000000..01945497 Binary files /dev/null and b/docs/img/examples_pytorch_mnist_01_dark.png differ diff --git a/docs/img/examples_pytorch_mnist_02.png b/docs/img/examples_pytorch_mnist_02.png index 0b524844..73255f68 100644 Binary files a/docs/img/examples_pytorch_mnist_02.png and b/docs/img/examples_pytorch_mnist_02.png differ diff --git a/docs/img/examples_pytorch_mnist_02_dark.png b/docs/img/examples_pytorch_mnist_02_dark.png new file mode 100644 index 00000000..f3ac5ffc Binary files /dev/null and b/docs/img/examples_pytorch_mnist_02_dark.png differ diff --git a/docs/img/examples_pytorch_mnist_03.png b/docs/img/examples_pytorch_mnist_03.png index 58c5d8cb..cdaf994b 100644 Binary files a/docs/img/examples_pytorch_mnist_03.png and b/docs/img/examples_pytorch_mnist_03.png differ diff --git a/docs/img/examples_pytorch_mnist_03_dark.png b/docs/img/examples_pytorch_mnist_03_dark.png new file mode 100644 index 00000000..f6d78038 Binary files /dev/null and b/docs/img/examples_pytorch_mnist_03_dark.png differ diff --git a/docs/img/examples_pytorch_mnist_06.png b/docs/img/examples_pytorch_mnist_06.png index a0929b8a..3a0b7005 100644 Binary files a/docs/img/examples_pytorch_mnist_06.png and b/docs/img/examples_pytorch_mnist_06.png differ diff --git a/docs/img/examples_pytorch_mnist_06_dark.png b/docs/img/examples_pytorch_mnist_06_dark.png new file mode 100644 index 00000000..f97525f1 Binary files /dev/null and b/docs/img/examples_pytorch_mnist_06_dark.png differ diff --git a/docs/img/examples_pytorch_mnist_07.png b/docs/img/examples_pytorch_mnist_07.png index 85a46d18..320e8faa 100644 Binary files a/docs/img/examples_pytorch_mnist_07.png and b/docs/img/examples_pytorch_mnist_07.png differ diff --git a/docs/img/examples_pytorch_mnist_07_dark.png b/docs/img/examples_pytorch_mnist_07_dark.png new file mode 100644 index 00000000..accc94fb Binary files /dev/null and b/docs/img/examples_pytorch_mnist_07_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboard_01.png b/docs/img/examples_pytorch_tensorboard_01.png index 5f2f456c..a1784fad 100644 Binary files a/docs/img/examples_pytorch_tensorboard_01.png and b/docs/img/examples_pytorch_tensorboard_01.png differ diff --git a/docs/img/examples_pytorch_tensorboard_01_dark.png b/docs/img/examples_pytorch_tensorboard_01_dark.png new file mode 100644 index 00000000..31d3ce68 Binary files /dev/null and b/docs/img/examples_pytorch_tensorboard_01_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboard_02.png b/docs/img/examples_pytorch_tensorboard_02.png index e43631ac..8f7debbe 100644 Binary files a/docs/img/examples_pytorch_tensorboard_02.png and b/docs/img/examples_pytorch_tensorboard_02.png differ diff --git a/docs/img/examples_pytorch_tensorboard_02_dark.png b/docs/img/examples_pytorch_tensorboard_02_dark.png new file mode 100644 index 00000000..3cfa2851 Binary files /dev/null and b/docs/img/examples_pytorch_tensorboard_02_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboard_03.png b/docs/img/examples_pytorch_tensorboard_03.png index 8b47bd04..977f20f2 100644 Binary files a/docs/img/examples_pytorch_tensorboard_03.png and b/docs/img/examples_pytorch_tensorboard_03.png differ diff --git a/docs/img/examples_pytorch_tensorboard_03_dark.png b/docs/img/examples_pytorch_tensorboard_03_dark.png new file mode 100644 index 00000000..3968a75d Binary files /dev/null and b/docs/img/examples_pytorch_tensorboard_03_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboard_06.png b/docs/img/examples_pytorch_tensorboard_06.png index 7e17a669..9d96c85f 100644 Binary files a/docs/img/examples_pytorch_tensorboard_06.png and b/docs/img/examples_pytorch_tensorboard_06.png differ diff --git a/docs/img/examples_pytorch_tensorboard_06_dark.png b/docs/img/examples_pytorch_tensorboard_06_dark.png new file mode 100644 index 00000000..a224091b Binary files /dev/null and b/docs/img/examples_pytorch_tensorboard_06_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboard_07.png b/docs/img/examples_pytorch_tensorboard_07.png index 14201747..975bbd60 100644 Binary files a/docs/img/examples_pytorch_tensorboard_07.png and b/docs/img/examples_pytorch_tensorboard_07.png differ diff --git a/docs/img/examples_pytorch_tensorboard_07_dark.png b/docs/img/examples_pytorch_tensorboard_07_dark.png new file mode 100644 index 00000000..baf8ec42 Binary files /dev/null and b/docs/img/examples_pytorch_tensorboard_07_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboard_08.png b/docs/img/examples_pytorch_tensorboard_08.png index 7ea4f6de..f207105c 100644 Binary files a/docs/img/examples_pytorch_tensorboard_08.png and b/docs/img/examples_pytorch_tensorboard_08.png differ diff --git a/docs/img/examples_pytorch_tensorboard_08_dark.png b/docs/img/examples_pytorch_tensorboard_08_dark.png new file mode 100644 index 00000000..f53da658 Binary files /dev/null and b/docs/img/examples_pytorch_tensorboard_08_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_01.png b/docs/img/examples_pytorch_tensorboardx_01.png index 1fb3bb96..564ff84e 100644 Binary files a/docs/img/examples_pytorch_tensorboardx_01.png and b/docs/img/examples_pytorch_tensorboardx_01.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_01_dark.png b/docs/img/examples_pytorch_tensorboardx_01_dark.png new file mode 100644 index 00000000..a9e55881 Binary files /dev/null and b/docs/img/examples_pytorch_tensorboardx_01_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_02.png b/docs/img/examples_pytorch_tensorboardx_02.png index 6cf3b1e1..dae5a228 100644 Binary files a/docs/img/examples_pytorch_tensorboardx_02.png and b/docs/img/examples_pytorch_tensorboardx_02.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_02_dark.png b/docs/img/examples_pytorch_tensorboardx_02_dark.png new file mode 100644 index 00000000..05825b4e Binary files /dev/null and b/docs/img/examples_pytorch_tensorboardx_02_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_03.png b/docs/img/examples_pytorch_tensorboardx_03.png index d25737a0..1397d3da 100644 Binary files a/docs/img/examples_pytorch_tensorboardx_03.png and b/docs/img/examples_pytorch_tensorboardx_03.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_03_dark.png b/docs/img/examples_pytorch_tensorboardx_03_dark.png new file mode 100644 index 00000000..76c1d437 Binary files /dev/null and b/docs/img/examples_pytorch_tensorboardx_03_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_04.png b/docs/img/examples_pytorch_tensorboardx_04.png index bc728d0e..97cc46d4 100644 Binary files a/docs/img/examples_pytorch_tensorboardx_04.png and b/docs/img/examples_pytorch_tensorboardx_04.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_04_dark.png b/docs/img/examples_pytorch_tensorboardx_04_dark.png new file mode 100644 index 00000000..0945855b Binary files /dev/null and b/docs/img/examples_pytorch_tensorboardx_04_dark.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_model.png b/docs/img/examples_pytorch_tensorboardx_model.png index 4dfe0cab..cd170b5e 100644 Binary files a/docs/img/examples_pytorch_tensorboardx_model.png and b/docs/img/examples_pytorch_tensorboardx_model.png differ diff --git a/docs/img/examples_pytorch_tensorboardx_model_dark.png b/docs/img/examples_pytorch_tensorboardx_model_dark.png new file mode 100644 index 00000000..a65850dc Binary files /dev/null and b/docs/img/examples_pytorch_tensorboardx_model_dark.png differ diff --git a/docs/img/examples_remote_execution_artifacts.png b/docs/img/examples_remote_execution_artifacts.png index ada633e4..d595bc9f 100644 Binary files a/docs/img/examples_remote_execution_artifacts.png and b/docs/img/examples_remote_execution_artifacts.png differ diff --git a/docs/img/examples_remote_execution_artifacts_dark.png b/docs/img/examples_remote_execution_artifacts_dark.png new file mode 100644 index 00000000..245d4102 Binary files /dev/null and b/docs/img/examples_remote_execution_artifacts_dark.png differ diff --git a/docs/img/examples_reporting_fastai_01.png b/docs/img/examples_reporting_fastai_01.png index 42fb4686..caf2f247 100644 Binary files a/docs/img/examples_reporting_fastai_01.png and b/docs/img/examples_reporting_fastai_01.png differ diff --git a/docs/img/examples_reporting_fastai_01_dark.png b/docs/img/examples_reporting_fastai_01_dark.png new file mode 100644 index 00000000..71853731 Binary files /dev/null and b/docs/img/examples_reporting_fastai_01_dark.png differ diff --git a/docs/img/examples_reporting_fastai_02.png b/docs/img/examples_reporting_fastai_02.png index 86164dbc..2bdd9c6c 100644 Binary files a/docs/img/examples_reporting_fastai_02.png and b/docs/img/examples_reporting_fastai_02.png differ diff --git a/docs/img/examples_reporting_fastai_02_dark.png b/docs/img/examples_reporting_fastai_02_dark.png new file mode 100644 index 00000000..708522c7 Binary files /dev/null and b/docs/img/examples_reporting_fastai_02_dark.png differ diff --git a/docs/img/examples_reporting_fastai_03.png b/docs/img/examples_reporting_fastai_03.png index 2c7bdfef..26c484d6 100644 Binary files a/docs/img/examples_reporting_fastai_03.png and b/docs/img/examples_reporting_fastai_03.png differ diff --git a/docs/img/examples_reporting_fastai_03_dark.png b/docs/img/examples_reporting_fastai_03_dark.png new file mode 100644 index 00000000..209b10b7 Binary files /dev/null and b/docs/img/examples_reporting_fastai_03_dark.png differ diff --git a/docs/img/examples_sklearn_joblib_example_01.png b/docs/img/examples_sklearn_joblib_example_01.png index fa09360b..703ec2c4 100644 Binary files a/docs/img/examples_sklearn_joblib_example_01.png and b/docs/img/examples_sklearn_joblib_example_01.png differ diff --git a/docs/img/examples_sklearn_joblib_example_01_dark.png b/docs/img/examples_sklearn_joblib_example_01_dark.png new file mode 100644 index 00000000..64b0450f Binary files /dev/null and b/docs/img/examples_sklearn_joblib_example_01_dark.png differ diff --git a/docs/img/examples_sklearn_joblib_example_02.png b/docs/img/examples_sklearn_joblib_example_02.png index dc67f71e..7e9ba664 100644 Binary files a/docs/img/examples_sklearn_joblib_example_02.png and b/docs/img/examples_sklearn_joblib_example_02.png differ diff --git a/docs/img/examples_sklearn_joblib_example_02_dark.png b/docs/img/examples_sklearn_joblib_example_02_dark.png new file mode 100644 index 00000000..0c21e28b Binary files /dev/null and b/docs/img/examples_sklearn_joblib_example_02_dark.png differ diff --git a/docs/img/examples_sklearn_joblib_example_06.png b/docs/img/examples_sklearn_joblib_example_06.png index 4c61a3be..ab909e74 100644 Binary files a/docs/img/examples_sklearn_joblib_example_06.png and b/docs/img/examples_sklearn_joblib_example_06.png differ diff --git a/docs/img/examples_sklearn_joblib_example_06_dark.png b/docs/img/examples_sklearn_joblib_example_06_dark.png new file mode 100644 index 00000000..76a3bfbd Binary files /dev/null and b/docs/img/examples_sklearn_joblib_example_06_dark.png differ diff --git a/docs/img/examples_slack_alerts.png b/docs/img/examples_slack_alerts.png index 6c38d3b0..9bba329c 100644 Binary files a/docs/img/examples_slack_alerts.png and b/docs/img/examples_slack_alerts.png differ diff --git a/docs/img/examples_slack_alerts_dark.png b/docs/img/examples_slack_alerts_dark.png new file mode 100644 index 00000000..4d29a69d Binary files /dev/null and b/docs/img/examples_slack_alerts_dark.png differ diff --git a/docs/img/examples_subprocess_example_01.png b/docs/img/examples_subprocess_example_01.png index 44b564ba..9672a54a 100644 Binary files a/docs/img/examples_subprocess_example_01.png and b/docs/img/examples_subprocess_example_01.png differ diff --git a/docs/img/examples_subprocess_example_01_dark.png b/docs/img/examples_subprocess_example_01_dark.png new file mode 100644 index 00000000..a5694b96 Binary files /dev/null and b/docs/img/examples_subprocess_example_01_dark.png differ diff --git a/docs/img/examples_subprocess_example_01a.png b/docs/img/examples_subprocess_example_01a.png index b96b6c68..da5ebb94 100644 Binary files a/docs/img/examples_subprocess_example_01a.png and b/docs/img/examples_subprocess_example_01a.png differ diff --git a/docs/img/examples_subprocess_example_01a_dark.png b/docs/img/examples_subprocess_example_01a_dark.png new file mode 100644 index 00000000..7c652229 Binary files /dev/null and b/docs/img/examples_subprocess_example_01a_dark.png differ diff --git a/docs/img/examples_subprocess_example_02.png b/docs/img/examples_subprocess_example_02.png index 2e5049fb..b636458e 100644 Binary files a/docs/img/examples_subprocess_example_02.png and b/docs/img/examples_subprocess_example_02.png differ diff --git a/docs/img/examples_subprocess_example_02_dark.png b/docs/img/examples_subprocess_example_02_dark.png new file mode 100644 index 00000000..edb95564 Binary files /dev/null and b/docs/img/examples_subprocess_example_02_dark.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_01.png b/docs/img/examples_tensorboard_pr_curve_01.png index 96ce9a62..009c64cc 100644 Binary files a/docs/img/examples_tensorboard_pr_curve_01.png and b/docs/img/examples_tensorboard_pr_curve_01.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_01_dark.png b/docs/img/examples_tensorboard_pr_curve_01_dark.png new file mode 100644 index 00000000..b5f75422 Binary files /dev/null and b/docs/img/examples_tensorboard_pr_curve_01_dark.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_02.png b/docs/img/examples_tensorboard_pr_curve_02.png index 3a69e5ad..f8b9b9e1 100644 Binary files a/docs/img/examples_tensorboard_pr_curve_02.png and b/docs/img/examples_tensorboard_pr_curve_02.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_02_dark.png b/docs/img/examples_tensorboard_pr_curve_02_dark.png new file mode 100644 index 00000000..8d981462 Binary files /dev/null and b/docs/img/examples_tensorboard_pr_curve_02_dark.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_03.png b/docs/img/examples_tensorboard_pr_curve_03.png index 17063fbe..4010838b 100644 Binary files a/docs/img/examples_tensorboard_pr_curve_03.png and b/docs/img/examples_tensorboard_pr_curve_03.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_03_dark.png b/docs/img/examples_tensorboard_pr_curve_03_dark.png new file mode 100644 index 00000000..1c436426 Binary files /dev/null and b/docs/img/examples_tensorboard_pr_curve_03_dark.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_04.png b/docs/img/examples_tensorboard_pr_curve_04.png index e6b2b38f..117fdb7f 100644 Binary files a/docs/img/examples_tensorboard_pr_curve_04.png and b/docs/img/examples_tensorboard_pr_curve_04.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_04_dark.png b/docs/img/examples_tensorboard_pr_curve_04_dark.png new file mode 100644 index 00000000..3e2c0bba Binary files /dev/null and b/docs/img/examples_tensorboard_pr_curve_04_dark.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_05.png b/docs/img/examples_tensorboard_pr_curve_05.png index 4eef245f..454c8fe0 100644 Binary files a/docs/img/examples_tensorboard_pr_curve_05.png and b/docs/img/examples_tensorboard_pr_curve_05.png differ diff --git a/docs/img/examples_tensorboard_pr_curve_05_dark.png b/docs/img/examples_tensorboard_pr_curve_05_dark.png new file mode 100644 index 00000000..cbca2f9f Binary files /dev/null and b/docs/img/examples_tensorboard_pr_curve_05_dark.png differ diff --git a/docs/img/examples_tensorboard_toy_01.png b/docs/img/examples_tensorboard_toy_01.png index 9c4e8738..910b6283 100644 Binary files a/docs/img/examples_tensorboard_toy_01.png and b/docs/img/examples_tensorboard_toy_01.png differ diff --git a/docs/img/examples_tensorboard_toy_01_dark.png b/docs/img/examples_tensorboard_toy_01_dark.png new file mode 100644 index 00000000..52387aab Binary files /dev/null and b/docs/img/examples_tensorboard_toy_01_dark.png differ diff --git a/docs/img/examples_tensorboard_toy_03.png b/docs/img/examples_tensorboard_toy_03.png index 58ae91d1..82629324 100644 Binary files a/docs/img/examples_tensorboard_toy_03.png and b/docs/img/examples_tensorboard_toy_03.png differ diff --git a/docs/img/examples_tensorboard_toy_03_dark.png b/docs/img/examples_tensorboard_toy_03_dark.png new file mode 100644 index 00000000..6bf1047a Binary files /dev/null and b/docs/img/examples_tensorboard_toy_03_dark.png differ diff --git a/docs/img/examples_tensorboard_toy_04.png b/docs/img/examples_tensorboard_toy_04.png index de4c4f2e..2972c23f 100644 Binary files a/docs/img/examples_tensorboard_toy_04.png and b/docs/img/examples_tensorboard_toy_04.png differ diff --git a/docs/img/examples_tensorboard_toy_04_dark.png b/docs/img/examples_tensorboard_toy_04_dark.png new file mode 100644 index 00000000..3db1092e Binary files /dev/null and b/docs/img/examples_tensorboard_toy_04_dark.png differ diff --git a/docs/img/examples_tensorboard_toy_05.png b/docs/img/examples_tensorboard_toy_05.png index 7423cfb3..214a9df8 100644 Binary files a/docs/img/examples_tensorboard_toy_05.png and b/docs/img/examples_tensorboard_toy_05.png differ diff --git a/docs/img/examples_tensorboard_toy_05_dark.png b/docs/img/examples_tensorboard_toy_05_dark.png new file mode 100644 index 00000000..e4829068 Binary files /dev/null and b/docs/img/examples_tensorboard_toy_05_dark.png differ diff --git a/docs/img/examples_tensorboard_toy_pytorch_00.png b/docs/img/examples_tensorboard_toy_pytorch_00.png index 4d62c3ba..9f311194 100644 Binary files a/docs/img/examples_tensorboard_toy_pytorch_00.png and b/docs/img/examples_tensorboard_toy_pytorch_00.png differ diff --git a/docs/img/examples_tensorboard_toy_pytorch_00_dark.png b/docs/img/examples_tensorboard_toy_pytorch_00_dark.png new file mode 100644 index 00000000..58e7d247 Binary files /dev/null and b/docs/img/examples_tensorboard_toy_pytorch_00_dark.png differ diff --git a/docs/img/examples_tensorboard_toy_pytorch_02.png b/docs/img/examples_tensorboard_toy_pytorch_02.png index 16e26808..e15a37a6 100644 Binary files a/docs/img/examples_tensorboard_toy_pytorch_02.png and b/docs/img/examples_tensorboard_toy_pytorch_02.png differ diff --git a/docs/img/examples_tensorboard_toy_pytorch_02_dark.png b/docs/img/examples_tensorboard_toy_pytorch_02_dark.png new file mode 100644 index 00000000..0f10c336 Binary files /dev/null and b/docs/img/examples_tensorboard_toy_pytorch_02_dark.png differ diff --git a/docs/img/examples_tensorboardx_debug.png b/docs/img/examples_tensorboardx_debug.png index 2a456dee..15c9a644 100644 Binary files a/docs/img/examples_tensorboardx_debug.png and b/docs/img/examples_tensorboardx_debug.png differ diff --git a/docs/img/examples_tensorboardx_debug_dark.png b/docs/img/examples_tensorboardx_debug_dark.png new file mode 100644 index 00000000..8b9c39af Binary files /dev/null and b/docs/img/examples_tensorboardx_debug_dark.png differ diff --git a/docs/img/examples_tensorflow_mnist_01.png b/docs/img/examples_tensorflow_mnist_01.png index 8e2d3ba3..6ad9d7d9 100644 Binary files a/docs/img/examples_tensorflow_mnist_01.png and b/docs/img/examples_tensorflow_mnist_01.png differ diff --git a/docs/img/examples_tensorflow_mnist_01_dark.png b/docs/img/examples_tensorflow_mnist_01_dark.png new file mode 100644 index 00000000..138fd9f7 Binary files /dev/null and b/docs/img/examples_tensorflow_mnist_01_dark.png differ diff --git a/docs/img/examples_tensorflow_mnist_03.png b/docs/img/examples_tensorflow_mnist_03.png index cc9e2eda..1d689fb8 100644 Binary files a/docs/img/examples_tensorflow_mnist_03.png and b/docs/img/examples_tensorflow_mnist_03.png differ diff --git a/docs/img/examples_tensorflow_mnist_03_dark.png b/docs/img/examples_tensorflow_mnist_03_dark.png new file mode 100644 index 00000000..9575e97a Binary files /dev/null and b/docs/img/examples_tensorflow_mnist_03_dark.png differ diff --git a/docs/img/examples_tensorflow_mnist_05.png b/docs/img/examples_tensorflow_mnist_05.png index 71e2a35a..3f10c8bf 100644 Binary files a/docs/img/examples_tensorflow_mnist_05.png and b/docs/img/examples_tensorflow_mnist_05.png differ diff --git a/docs/img/examples_tensorflow_mnist_05_dark.png b/docs/img/examples_tensorflow_mnist_05_dark.png new file mode 100644 index 00000000..87557c63 Binary files /dev/null and b/docs/img/examples_tensorflow_mnist_05_dark.png differ diff --git a/docs/img/examples_tensorflow_mnist_06.png b/docs/img/examples_tensorflow_mnist_06.png index d1ae8f8f..093555a1 100644 Binary files a/docs/img/examples_tensorflow_mnist_06.png and b/docs/img/examples_tensorflow_mnist_06.png differ diff --git a/docs/img/examples_tensorflow_mnist_06_dark.png b/docs/img/examples_tensorflow_mnist_06_dark.png new file mode 100644 index 00000000..b398f17c Binary files /dev/null and b/docs/img/examples_tensorflow_mnist_06_dark.png differ diff --git a/docs/img/examples_tensorflow_mnist_10.png b/docs/img/examples_tensorflow_mnist_10.png index dbe6a1ab..c736e12f 100644 Binary files a/docs/img/examples_tensorflow_mnist_10.png and b/docs/img/examples_tensorflow_mnist_10.png differ diff --git a/docs/img/examples_tensorflow_mnist_10_dark.png b/docs/img/examples_tensorflow_mnist_10_dark.png new file mode 100644 index 00000000..0df30009 Binary files /dev/null and b/docs/img/examples_tensorflow_mnist_10_dark.png differ diff --git a/docs/img/examples_transformers_artifacts.png b/docs/img/examples_transformers_artifacts.png index c222f1df..9e062156 100644 Binary files a/docs/img/examples_transformers_artifacts.png and b/docs/img/examples_transformers_artifacts.png differ diff --git a/docs/img/examples_transformers_artifacts_dark.png b/docs/img/examples_transformers_artifacts_dark.png new file mode 100644 index 00000000..0d3f6342 Binary files /dev/null and b/docs/img/examples_transformers_artifacts_dark.png differ diff --git a/docs/img/examples_transformers_params.png b/docs/img/examples_transformers_params.png index c152e069..d00216f6 100644 Binary files a/docs/img/examples_transformers_params.png and b/docs/img/examples_transformers_params.png differ diff --git a/docs/img/examples_transformers_params_dark.png b/docs/img/examples_transformers_params_dark.png new file mode 100644 index 00000000..aef72dc2 Binary files /dev/null and b/docs/img/examples_transformers_params_dark.png differ diff --git a/docs/img/examples_xgboost_metric_artifacts.png b/docs/img/examples_xgboost_metric_artifacts.png index 1eb6169b..5b002da8 100644 Binary files a/docs/img/examples_xgboost_metric_artifacts.png and b/docs/img/examples_xgboost_metric_artifacts.png differ diff --git a/docs/img/examples_xgboost_metric_artifacts_dark.png b/docs/img/examples_xgboost_metric_artifacts_dark.png new file mode 100644 index 00000000..be755564 Binary files /dev/null and b/docs/img/examples_xgboost_metric_artifacts_dark.png differ diff --git a/docs/img/examples_xgboost_metric_console.png b/docs/img/examples_xgboost_metric_console.png index 9d39bbee..8be929a6 100644 Binary files a/docs/img/examples_xgboost_metric_console.png and b/docs/img/examples_xgboost_metric_console.png differ diff --git a/docs/img/examples_xgboost_metric_console_dark.png b/docs/img/examples_xgboost_metric_console_dark.png new file mode 100644 index 00000000..dd8716da Binary files /dev/null and b/docs/img/examples_xgboost_metric_console_dark.png differ diff --git a/docs/img/examples_xgboost_metric_model.png b/docs/img/examples_xgboost_metric_model.png index 051465e3..4cd5d5de 100644 Binary files a/docs/img/examples_xgboost_metric_model.png and b/docs/img/examples_xgboost_metric_model.png differ diff --git a/docs/img/examples_xgboost_metric_model_dark.png b/docs/img/examples_xgboost_metric_model_dark.png new file mode 100644 index 00000000..2f7bd39b Binary files /dev/null and b/docs/img/examples_xgboost_metric_model_dark.png differ diff --git a/docs/img/examples_xgboost_metric_scalars.png b/docs/img/examples_xgboost_metric_scalars.png index 678ff8d2..1a968cc6 100644 Binary files a/docs/img/examples_xgboost_metric_scalars.png and b/docs/img/examples_xgboost_metric_scalars.png differ diff --git a/docs/img/examples_xgboost_metric_scalars_dark.png b/docs/img/examples_xgboost_metric_scalars_dark.png new file mode 100644 index 00000000..26cb9935 Binary files /dev/null and b/docs/img/examples_xgboost_metric_scalars_dark.png differ diff --git a/docs/img/examples_xgboost_sample_03.png b/docs/img/examples_xgboost_sample_03.png index 761aa8b9..f83cac3a 100644 Binary files a/docs/img/examples_xgboost_sample_03.png and b/docs/img/examples_xgboost_sample_03.png differ diff --git a/docs/img/examples_xgboost_sample_03_dark.png b/docs/img/examples_xgboost_sample_03_dark.png new file mode 100644 index 00000000..a32737eb Binary files /dev/null and b/docs/img/examples_xgboost_sample_03_dark.png differ diff --git a/docs/img/examples_xgboost_sample_05.png b/docs/img/examples_xgboost_sample_05.png index 2d111787..3614622f 100644 Binary files a/docs/img/examples_xgboost_sample_05.png and b/docs/img/examples_xgboost_sample_05.png differ diff --git a/docs/img/examples_xgboost_sample_05_dark.png b/docs/img/examples_xgboost_sample_05_dark.png new file mode 100644 index 00000000..263c6ddb Binary files /dev/null and b/docs/img/examples_xgboost_sample_05_dark.png differ diff --git a/docs/img/examples_xgboost_sample_06.png b/docs/img/examples_xgboost_sample_06.png index e006ecb9..b4f5142b 100644 Binary files a/docs/img/examples_xgboost_sample_06.png and b/docs/img/examples_xgboost_sample_06.png differ diff --git a/docs/img/examples_xgboost_sample_06_dark.png b/docs/img/examples_xgboost_sample_06_dark.png new file mode 100644 index 00000000..9bbc8664 Binary files /dev/null and b/docs/img/examples_xgboost_sample_06_dark.png differ diff --git a/docs/img/examples_xgboost_sample_06a.png b/docs/img/examples_xgboost_sample_06a.png index 6fa5fa99..c5a9cd83 100644 Binary files a/docs/img/examples_xgboost_sample_06a.png and b/docs/img/examples_xgboost_sample_06a.png differ diff --git a/docs/img/examples_xgboost_sample_06a_dark.png b/docs/img/examples_xgboost_sample_06a_dark.png new file mode 100644 index 00000000..6668ece9 Binary files /dev/null and b/docs/img/examples_xgboost_sample_06a_dark.png differ diff --git a/docs/img/examples_xgboost_sample_10.png b/docs/img/examples_xgboost_sample_10.png index 01b699ce..871545d2 100644 Binary files a/docs/img/examples_xgboost_sample_10.png and b/docs/img/examples_xgboost_sample_10.png differ diff --git a/docs/img/examples_xgboost_sample_10_dark.png b/docs/img/examples_xgboost_sample_10_dark.png new file mode 100644 index 00000000..3a04e86f Binary files /dev/null and b/docs/img/examples_xgboost_sample_10_dark.png differ diff --git a/docs/img/faq_compare_scatter.png b/docs/img/faq_compare_scatter.png index c79fbc3a..8bb298fb 100644 Binary files a/docs/img/faq_compare_scatter.png and b/docs/img/faq_compare_scatter.png differ diff --git a/docs/img/faq_compare_scatter_dark.png b/docs/img/faq_compare_scatter_dark.png new file mode 100644 index 00000000..82e0e4fa Binary files /dev/null and b/docs/img/faq_compare_scatter_dark.png differ diff --git a/docs/img/faq_download_console_log.png b/docs/img/faq_download_console_log.png index f642934c..ccc6dd86 100644 Binary files a/docs/img/faq_download_console_log.png and b/docs/img/faq_download_console_log.png differ diff --git a/docs/img/faq_download_console_log_dark.png b/docs/img/faq_download_console_log_dark.png new file mode 100644 index 00000000..f274a8ee Binary files /dev/null and b/docs/img/faq_download_console_log_dark.png differ diff --git a/docs/img/faq_server_versions.png b/docs/img/faq_server_versions.png index 07f1ed02..0c097e2c 100644 Binary files a/docs/img/faq_server_versions.png and b/docs/img/faq_server_versions.png differ diff --git a/docs/img/faq_server_versions_dark.png b/docs/img/faq_server_versions_dark.png new file mode 100644 index 00000000..89b6ed6d Binary files /dev/null and b/docs/img/faq_server_versions_dark.png differ diff --git a/docs/img/fractional_gpu_task_container.png b/docs/img/fractional_gpu_task_container.png index 424ce5a6..422f2611 100644 Binary files a/docs/img/fractional_gpu_task_container.png and b/docs/img/fractional_gpu_task_container.png differ diff --git a/docs/img/fractional_gpu_task_container_dark.png b/docs/img/fractional_gpu_task_container_dark.png new file mode 100644 index 00000000..8a458b47 Binary files /dev/null and b/docs/img/fractional_gpu_task_container_dark.png differ diff --git a/docs/img/fundamentals_hpo_parallel_coordinates.png b/docs/img/fundamentals_hpo_parallel_coordinates.png index 5eb1884e..2eb49d33 100644 Binary files a/docs/img/fundamentals_hpo_parallel_coordinates.png and b/docs/img/fundamentals_hpo_parallel_coordinates.png differ diff --git a/docs/img/fundamentals_hpo_parallel_coordinates_dark.png b/docs/img/fundamentals_hpo_parallel_coordinates_dark.png new file mode 100644 index 00000000..4b695605 Binary files /dev/null and b/docs/img/fundamentals_hpo_parallel_coordinates_dark.png differ diff --git a/docs/img/fundamentals_hpo_scalars.png b/docs/img/fundamentals_hpo_scalars.png index 5e515b22..86be75b7 100644 Binary files a/docs/img/fundamentals_hpo_scalars.png and b/docs/img/fundamentals_hpo_scalars.png differ diff --git a/docs/img/fundamentals_hpo_scalars_dark.png b/docs/img/fundamentals_hpo_scalars_dark.png new file mode 100644 index 00000000..be6c3716 Binary files /dev/null and b/docs/img/fundamentals_hpo_scalars_dark.png differ diff --git a/docs/img/fundamentals_hpo_summary.png b/docs/img/fundamentals_hpo_summary.png index f4b2f771..02e29c5c 100644 Binary files a/docs/img/fundamentals_hpo_summary.png and b/docs/img/fundamentals_hpo_summary.png differ diff --git a/docs/img/fundamentals_hpo_summary_dark.png b/docs/img/fundamentals_hpo_summary_dark.png new file mode 100644 index 00000000..24de2538 Binary files /dev/null and b/docs/img/fundamentals_hpo_summary_dark.png differ diff --git a/docs/img/fundamentals_logger_cpu_monitoring.png b/docs/img/fundamentals_logger_cpu_monitoring.png index 6f5b9c70..cb640a02 100644 Binary files a/docs/img/fundamentals_logger_cpu_monitoring.png and b/docs/img/fundamentals_logger_cpu_monitoring.png differ diff --git a/docs/img/fundamentals_logger_cpu_monitoring_dark.png b/docs/img/fundamentals_logger_cpu_monitoring_dark.png new file mode 100644 index 00000000..d16e9e6d Binary files /dev/null and b/docs/img/fundamentals_logger_cpu_monitoring_dark.png differ diff --git a/docs/img/fundamentals_logger_reported_images.png b/docs/img/fundamentals_logger_reported_images.png deleted file mode 100644 index 8c09a381..00000000 Binary files a/docs/img/fundamentals_logger_reported_images.png and /dev/null differ diff --git a/docs/img/fundamentals_logger_results.png b/docs/img/fundamentals_logger_results.png deleted file mode 100644 index 0707bb29..00000000 Binary files a/docs/img/fundamentals_logger_results.png and /dev/null differ diff --git a/docs/img/fundamentals_models.png b/docs/img/fundamentals_models.png deleted file mode 100644 index b57c5008..00000000 Binary files a/docs/img/fundamentals_models.png and /dev/null differ diff --git a/docs/img/fundamentals_task.png b/docs/img/fundamentals_task.png index 8389b8c6..59d24769 100644 Binary files a/docs/img/fundamentals_task.png and b/docs/img/fundamentals_task.png differ diff --git a/docs/img/fundamentals_task_config_hyperparams.png b/docs/img/fundamentals_task_config_hyperparams.png index 982b90a8..c0e7d1c9 100644 Binary files a/docs/img/fundamentals_task_config_hyperparams.png and b/docs/img/fundamentals_task_config_hyperparams.png differ diff --git a/docs/img/fundamentals_task_config_hyperparams_dark.png b/docs/img/fundamentals_task_config_hyperparams_dark.png new file mode 100644 index 00000000..940f53e2 Binary files /dev/null and b/docs/img/fundamentals_task_config_hyperparams_dark.png differ diff --git a/docs/img/fundamentals_task_config_object.png b/docs/img/fundamentals_task_config_object.png index 31026f10..e516e114 100644 Binary files a/docs/img/fundamentals_task_config_object.png and b/docs/img/fundamentals_task_config_object.png differ diff --git a/docs/img/fundamentals_task_config_object_dark.png b/docs/img/fundamentals_task_config_object_dark.png new file mode 100644 index 00000000..2dcf756c Binary files /dev/null and b/docs/img/fundamentals_task_config_object_dark.png differ diff --git a/docs/img/fundamentals_task_config_properties.png b/docs/img/fundamentals_task_config_properties.png index 8bda2e83..03db4c77 100644 Binary files a/docs/img/fundamentals_task_config_properties.png and b/docs/img/fundamentals_task_config_properties.png differ diff --git a/docs/img/fundamentals_task_config_properties_dark.png b/docs/img/fundamentals_task_config_properties_dark.png new file mode 100644 index 00000000..2695f289 Binary files /dev/null and b/docs/img/fundamentals_task_config_properties_dark.png differ diff --git a/docs/img/fundamentals_task_dark.png b/docs/img/fundamentals_task_dark.png new file mode 100644 index 00000000..665c18d7 Binary files /dev/null and b/docs/img/fundamentals_task_dark.png differ diff --git a/docs/img/fundamentals_task_progress.png b/docs/img/fundamentals_task_progress.png index 05f14738..671241d4 100644 Binary files a/docs/img/fundamentals_task_progress.png and b/docs/img/fundamentals_task_progress.png differ diff --git a/docs/img/fundamentals_task_progress_dark.png b/docs/img/fundamentals_task_progress_dark.png new file mode 100644 index 00000000..2b336aa2 Binary files /dev/null and b/docs/img/fundamentals_task_progress_dark.png differ diff --git a/docs/img/gif/ai_dev_center.gif b/docs/img/gif/ai_dev_center.gif new file mode 100644 index 00000000..7a76737a Binary files /dev/null and b/docs/img/gif/ai_dev_center.gif differ diff --git a/docs/img/gif/ai_dev_center_dark.gif b/docs/img/gif/ai_dev_center_dark.gif new file mode 100644 index 00000000..ab5a4efb Binary files /dev/null and b/docs/img/gif/ai_dev_center_dark.gif differ diff --git a/docs/img/gif/dataset.gif b/docs/img/gif/dataset.gif index a83978a4..3063a288 100644 Binary files a/docs/img/gif/dataset.gif and b/docs/img/gif/dataset.gif differ diff --git a/docs/img/gif/dataset_dark.gif b/docs/img/gif/dataset_dark.gif new file mode 100644 index 00000000..092b403b Binary files /dev/null and b/docs/img/gif/dataset_dark.gif differ diff --git a/docs/img/gif/filter_screenshots.gif b/docs/img/gif/filter_screenshots.gif index d8ddc8b3..7585193d 100644 Binary files a/docs/img/gif/filter_screenshots.gif and b/docs/img/gif/filter_screenshots.gif differ diff --git a/docs/img/gif/filter_screenshots_dark.gif b/docs/img/gif/filter_screenshots_dark.gif new file mode 100644 index 00000000..3e9ae5ab Binary files /dev/null and b/docs/img/gif/filter_screenshots_dark.gif differ diff --git a/docs/img/gif/genai_engine.gif b/docs/img/gif/genai_engine.gif new file mode 100644 index 00000000..ecca8a5e Binary files /dev/null and b/docs/img/gif/genai_engine.gif differ diff --git a/docs/img/gif/genai_engine_dark.gif b/docs/img/gif/genai_engine_dark.gif new file mode 100644 index 00000000..6af30d0f Binary files /dev/null and b/docs/img/gif/genai_engine_dark.gif differ diff --git a/docs/img/gif/infra_control_plane.gif b/docs/img/gif/infra_control_plane.gif new file mode 100644 index 00000000..66e70c8d Binary files /dev/null and b/docs/img/gif/infra_control_plane.gif differ diff --git a/docs/img/gif/infra_control_plane_dark.gif b/docs/img/gif/infra_control_plane_dark.gif new file mode 100644 index 00000000..3d25ef82 Binary files /dev/null and b/docs/img/gif/infra_control_plane_dark.gif differ diff --git a/docs/img/gif/integrations_yolov5.gif b/docs/img/gif/integrations_yolov5.gif index f332940c..4c99ca63 100644 Binary files a/docs/img/gif/integrations_yolov5.gif and b/docs/img/gif/integrations_yolov5.gif differ diff --git a/docs/img/gif/integrations_yolov5_dark.gif b/docs/img/gif/integrations_yolov5_dark.gif new file mode 100644 index 00000000..6dcfb4f2 Binary files /dev/null and b/docs/img/gif/integrations_yolov5_dark.gif differ diff --git a/docs/img/gif/webapp_exp_table_cust.gif b/docs/img/gif/webapp_exp_table_cust.gif index 190de441..fc96edec 100644 Binary files a/docs/img/gif/webapp_exp_table_cust.gif and b/docs/img/gif/webapp_exp_table_cust.gif differ diff --git a/docs/img/gif/webapp_exp_table_cust_dark.gif b/docs/img/gif/webapp_exp_table_cust_dark.gif new file mode 100644 index 00000000..1e04ad0f Binary files /dev/null and b/docs/img/gif/webapp_exp_table_cust_dark.gif differ diff --git a/docs/img/gif/webapp_metric_snapshot.gif b/docs/img/gif/webapp_metric_snapshot.gif index 95c23f78..714e61a2 100644 Binary files a/docs/img/gif/webapp_metric_snapshot.gif and b/docs/img/gif/webapp_metric_snapshot.gif differ diff --git a/docs/img/gif/webapp_metric_snapshot_dark.gif b/docs/img/gif/webapp_metric_snapshot_dark.gif new file mode 100644 index 00000000..55ab5ea2 Binary files /dev/null and b/docs/img/gif/webapp_metric_snapshot_dark.gif differ diff --git a/docs/img/gif/webapp_screenshots.gif b/docs/img/gif/webapp_screenshots.gif index b182f489..a0394169 100644 Binary files a/docs/img/gif/webapp_screenshots.gif and b/docs/img/gif/webapp_screenshots.gif differ diff --git a/docs/img/gif/webapp_screenshots_dark.gif b/docs/img/gif/webapp_screenshots_dark.gif new file mode 100644 index 00000000..83626705 Binary files /dev/null and b/docs/img/gif/webapp_screenshots_dark.gif differ diff --git a/docs/img/hyperdataset_publish_version.png b/docs/img/hyperdataset_publish_version.png deleted file mode 100644 index afd85a44..00000000 Binary files a/docs/img/hyperdataset_publish_version.png and /dev/null differ diff --git a/docs/img/hyperdatasets/annotation_label_color.png b/docs/img/hyperdatasets/annotation_label_color.png new file mode 100644 index 00000000..55da9469 Binary files /dev/null and b/docs/img/hyperdatasets/annotation_label_color.png differ diff --git a/docs/img/hyperdatasets/annotation_label_color_dark.png b/docs/img/hyperdatasets/annotation_label_color_dark.png new file mode 100644 index 00000000..98b2346d Binary files /dev/null and b/docs/img/hyperdatasets/annotation_label_color_dark.png differ diff --git a/docs/img/hyperdatasets/annotation_label_opacity.png b/docs/img/hyperdatasets/annotation_label_opacity.png new file mode 100644 index 00000000..7b65a263 Binary files /dev/null and b/docs/img/hyperdatasets/annotation_label_opacity.png differ diff --git a/docs/img/hyperdatasets/annotation_label_opacity_dark.png b/docs/img/hyperdatasets/annotation_label_opacity_dark.png new file mode 100644 index 00000000..ffde26e8 Binary files /dev/null and b/docs/img/hyperdatasets/annotation_label_opacity_dark.png differ diff --git a/docs/img/hyperdatasets/annotation_page.png b/docs/img/hyperdatasets/annotation_page.png new file mode 100644 index 00000000..da87e456 Binary files /dev/null and b/docs/img/hyperdatasets/annotation_page.png differ diff --git a/docs/img/hyperdatasets/annotation_page_dark.png b/docs/img/hyperdatasets/annotation_page_dark.png new file mode 100644 index 00000000..ca1f5025 Binary files /dev/null and b/docs/img/hyperdatasets/annotation_page_dark.png differ diff --git a/docs/img/hyperdatasets/annotation_task_01.png b/docs/img/hyperdatasets/annotation_task_01.png index 8787721e..1fa5c830 100644 Binary files a/docs/img/hyperdatasets/annotation_task_01.png and b/docs/img/hyperdatasets/annotation_task_01.png differ diff --git a/docs/img/hyperdatasets/annotation_task_01_dark.png b/docs/img/hyperdatasets/annotation_task_01_dark.png new file mode 100644 index 00000000..5f162d61 Binary files /dev/null and b/docs/img/hyperdatasets/annotation_task_01_dark.png differ diff --git a/docs/img/hyperdatasets/annotation_task_card.png b/docs/img/hyperdatasets/annotation_task_card.png new file mode 100644 index 00000000..246d8a6c Binary files /dev/null and b/docs/img/hyperdatasets/annotation_task_card.png differ diff --git a/docs/img/hyperdatasets/annotation_task_card_dark.png b/docs/img/hyperdatasets/annotation_task_card_dark.png new file mode 100644 index 00000000..bf8023f0 Binary files /dev/null and b/docs/img/hyperdatasets/annotation_task_card_dark.png differ diff --git a/docs/img/hyperdatasets/compare_dataviews.png b/docs/img/hyperdatasets/compare_dataviews.png new file mode 100644 index 00000000..92495b73 Binary files /dev/null and b/docs/img/hyperdatasets/compare_dataviews.png differ diff --git a/docs/img/hyperdatasets/compare_dataviews_dark.png b/docs/img/hyperdatasets/compare_dataviews_dark.png new file mode 100644 index 00000000..1382a5cd Binary files /dev/null and b/docs/img/hyperdatasets/compare_dataviews_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_alpha_masks_1.png b/docs/img/hyperdatasets/dataset_alpha_masks_1.png index 6216167f..0e29af67 100644 Binary files a/docs/img/hyperdatasets/dataset_alpha_masks_1.png and b/docs/img/hyperdatasets/dataset_alpha_masks_1.png differ diff --git a/docs/img/hyperdatasets/dataset_alpha_masks_1_dark.png b/docs/img/hyperdatasets/dataset_alpha_masks_1_dark.png new file mode 100644 index 00000000..9fbde9ea Binary files /dev/null and b/docs/img/hyperdatasets/dataset_alpha_masks_1_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_alpha_masks_2.png b/docs/img/hyperdatasets/dataset_alpha_masks_2.png index 7d1383f3..1bc846b6 100644 Binary files a/docs/img/hyperdatasets/dataset_alpha_masks_2.png and b/docs/img/hyperdatasets/dataset_alpha_masks_2.png differ diff --git a/docs/img/hyperdatasets/dataset_alpha_masks_2_dark.png b/docs/img/hyperdatasets/dataset_alpha_masks_2_dark.png new file mode 100644 index 00000000..e4266091 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_alpha_masks_2_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_example_frame_editor.png b/docs/img/hyperdatasets/dataset_example_frame_editor.png new file mode 100644 index 00000000..f3363b98 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_example_frame_editor.png differ diff --git a/docs/img/hyperdatasets/dataset_example_frame_editor_dark.png b/docs/img/hyperdatasets/dataset_example_frame_editor_dark.png new file mode 100644 index 00000000..14adcac3 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_example_frame_editor_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_frame_sorting.png b/docs/img/hyperdatasets/dataset_frame_sorting.png index c7c10532..9de9b604 100644 Binary files a/docs/img/hyperdatasets/dataset_frame_sorting.png and b/docs/img/hyperdatasets/dataset_frame_sorting.png differ diff --git a/docs/img/hyperdatasets/dataset_frame_sorting_dark.png b/docs/img/hyperdatasets/dataset_frame_sorting_dark.png new file mode 100644 index 00000000..2df459be Binary files /dev/null and b/docs/img/hyperdatasets/dataset_frame_sorting_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_metadata.png b/docs/img/hyperdatasets/dataset_metadata.png index ffc4a68c..f9e0442b 100644 Binary files a/docs/img/hyperdatasets/dataset_metadata.png and b/docs/img/hyperdatasets/dataset_metadata.png differ diff --git a/docs/img/hyperdatasets/dataset_metadata_dark.png b/docs/img/hyperdatasets/dataset_metadata_dark.png new file mode 100644 index 00000000..3276f692 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_metadata_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_pixel_masks_1.png b/docs/img/hyperdatasets/dataset_pixel_masks_1.png index edc5b0d0..033eaa4c 100644 Binary files a/docs/img/hyperdatasets/dataset_pixel_masks_1.png and b/docs/img/hyperdatasets/dataset_pixel_masks_1.png differ diff --git a/docs/img/hyperdatasets/dataset_pixel_masks_1_dark.png b/docs/img/hyperdatasets/dataset_pixel_masks_1_dark.png new file mode 100644 index 00000000..0a7cd520 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_pixel_masks_1_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_pixel_masks_2.png b/docs/img/hyperdatasets/dataset_pixel_masks_2.png index 9ac6a147..ee9e2865 100644 Binary files a/docs/img/hyperdatasets/dataset_pixel_masks_2.png and b/docs/img/hyperdatasets/dataset_pixel_masks_2.png differ diff --git a/docs/img/hyperdatasets/dataset_pixel_masks_2_dark.png b/docs/img/hyperdatasets/dataset_pixel_masks_2_dark.png new file mode 100644 index 00000000..1b45fad9 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_pixel_masks_2_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_sample_by_roi_property.png b/docs/img/hyperdatasets/dataset_sample_by_roi_property.png index 54afb2dc..d4502061 100644 Binary files a/docs/img/hyperdatasets/dataset_sample_by_roi_property.png and b/docs/img/hyperdatasets/dataset_sample_by_roi_property.png differ diff --git a/docs/img/hyperdatasets/dataset_sample_by_roi_property_dark.png b/docs/img/hyperdatasets/dataset_sample_by_roi_property_dark.png new file mode 100644 index 00000000..6c60a08e Binary files /dev/null and b/docs/img/hyperdatasets/dataset_sample_by_roi_property_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_simple_adv_01.png b/docs/img/hyperdatasets/dataset_simple_adv_01.png new file mode 100644 index 00000000..2fc8310f Binary files /dev/null and b/docs/img/hyperdatasets/dataset_simple_adv_01.png differ diff --git a/docs/img/hyperdatasets/dataset_simple_adv_01_dark.png b/docs/img/hyperdatasets/dataset_simple_adv_01_dark.png new file mode 100644 index 00000000..fcc40ae2 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_simple_adv_01_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_simple_adv_02.png b/docs/img/hyperdatasets/dataset_simple_adv_02.png new file mode 100644 index 00000000..51bf3e2d Binary files /dev/null and b/docs/img/hyperdatasets/dataset_simple_adv_02.png differ diff --git a/docs/img/hyperdatasets/dataset_simple_adv_02_dark.png b/docs/img/hyperdatasets/dataset_simple_adv_02_dark.png new file mode 100644 index 00000000..5e86e63d Binary files /dev/null and b/docs/img/hyperdatasets/dataset_simple_adv_02_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_version_info_panel.png b/docs/img/hyperdatasets/dataset_version_info_panel.png index 9ea184ed..3e28b744 100644 Binary files a/docs/img/hyperdatasets/dataset_version_info_panel.png and b/docs/img/hyperdatasets/dataset_version_info_panel.png differ diff --git a/docs/img/hyperdatasets/dataset_version_info_panel_dark.png b/docs/img/hyperdatasets/dataset_version_info_panel_dark.png new file mode 100644 index 00000000..873c1a95 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_version_info_panel_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_version_metadata.png b/docs/img/hyperdatasets/dataset_version_metadata.png index dd91fa20..969f0d08 100644 Binary files a/docs/img/hyperdatasets/dataset_version_metadata.png and b/docs/img/hyperdatasets/dataset_version_metadata.png differ diff --git a/docs/img/hyperdatasets/dataset_version_metadata_dark.png b/docs/img/hyperdatasets/dataset_version_metadata_dark.png new file mode 100644 index 00000000..e1b51f3c Binary files /dev/null and b/docs/img/hyperdatasets/dataset_version_metadata_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_version_statistics.png b/docs/img/hyperdatasets/dataset_version_statistics.png index 03db6c68..1fca861b 100644 Binary files a/docs/img/hyperdatasets/dataset_version_statistics.png and b/docs/img/hyperdatasets/dataset_version_statistics.png differ diff --git a/docs/img/hyperdatasets/dataset_version_statistics_dark.png b/docs/img/hyperdatasets/dataset_version_statistics_dark.png new file mode 100644 index 00000000..a4335eec Binary files /dev/null and b/docs/img/hyperdatasets/dataset_version_statistics_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_version_statistics_roi.png b/docs/img/hyperdatasets/dataset_version_statistics_roi.png index d4b985f9..3c45da45 100644 Binary files a/docs/img/hyperdatasets/dataset_version_statistics_roi.png and b/docs/img/hyperdatasets/dataset_version_statistics_roi.png differ diff --git a/docs/img/hyperdatasets/dataset_version_statistics_roi_dark.png b/docs/img/hyperdatasets/dataset_version_statistics_roi_dark.png new file mode 100644 index 00000000..c6875b76 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_version_statistics_roi_dark.png differ diff --git a/docs/img/hyperdatasets/dataset_versions.png b/docs/img/hyperdatasets/dataset_versions.png new file mode 100644 index 00000000..42300307 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_versions.png differ diff --git a/docs/img/hyperdatasets/dataset_versions_dark.png b/docs/img/hyperdatasets/dataset_versions_dark.png new file mode 100644 index 00000000..61ebafa6 Binary files /dev/null and b/docs/img/hyperdatasets/dataset_versions_dark.png differ diff --git a/docs/img/hyperdatasets/datasets_01.png b/docs/img/hyperdatasets/datasets_01.png index 83789bdc..4a51d1f4 100644 Binary files a/docs/img/hyperdatasets/datasets_01.png and b/docs/img/hyperdatasets/datasets_01.png differ diff --git a/docs/img/hyperdatasets/datasets_01_dark.png b/docs/img/hyperdatasets/datasets_01_dark.png new file mode 100644 index 00000000..5fc6c777 Binary files /dev/null and b/docs/img/hyperdatasets/datasets_01_dark.png differ diff --git a/docs/img/hyperdatasets/dataview_tab.png b/docs/img/hyperdatasets/dataview_tab.png new file mode 100644 index 00000000..058a3881 Binary files /dev/null and b/docs/img/hyperdatasets/dataview_tab.png differ diff --git a/docs/img/hyperdatasets/dataview_tab_dark.png b/docs/img/hyperdatasets/dataview_tab_dark.png new file mode 100644 index 00000000..a63f9bf9 Binary files /dev/null and b/docs/img/hyperdatasets/dataview_tab_dark.png differ diff --git a/docs/img/hyperdatasets/frame_browser_list.png b/docs/img/hyperdatasets/frame_browser_list.png index f49cd346..4c70b7e9 100644 Binary files a/docs/img/hyperdatasets/frame_browser_list.png and b/docs/img/hyperdatasets/frame_browser_list.png differ diff --git a/docs/img/hyperdatasets/frame_browser_list_dark.png b/docs/img/hyperdatasets/frame_browser_list_dark.png new file mode 100644 index 00000000..28b6e2a6 Binary files /dev/null and b/docs/img/hyperdatasets/frame_browser_list_dark.png differ diff --git a/docs/img/hyperdatasets/frame_browser_menu.png b/docs/img/hyperdatasets/frame_browser_menu.png index 97dfcf20..8648ec33 100644 Binary files a/docs/img/hyperdatasets/frame_browser_menu.png and b/docs/img/hyperdatasets/frame_browser_menu.png differ diff --git a/docs/img/hyperdatasets/frame_browser_menu_dark.png b/docs/img/hyperdatasets/frame_browser_menu_dark.png new file mode 100644 index 00000000..a2816303 Binary files /dev/null and b/docs/img/hyperdatasets/frame_browser_menu_dark.png differ diff --git a/docs/img/hyperdatasets/frame_browser_thumbnails.png b/docs/img/hyperdatasets/frame_browser_thumbnails.png index 705a253c..cb08ccf6 100644 Binary files a/docs/img/hyperdatasets/frame_browser_thumbnails.png and b/docs/img/hyperdatasets/frame_browser_thumbnails.png differ diff --git a/docs/img/hyperdatasets/frame_browser_thumbnails_dark.png b/docs/img/hyperdatasets/frame_browser_thumbnails_dark.png new file mode 100644 index 00000000..582ae41d Binary files /dev/null and b/docs/img/hyperdatasets/frame_browser_thumbnails_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_01.png b/docs/img/hyperdatasets/frame_filtering_01.png index 84f6c03c..818504a4 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_01.png and b/docs/img/hyperdatasets/frame_filtering_01.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_01_dark.png b/docs/img/hyperdatasets/frame_filtering_01_dark.png new file mode 100644 index 00000000..6a752ab3 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_01_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_02.png b/docs/img/hyperdatasets/frame_filtering_02.png index 67ab6ed5..f8ef5364 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_02.png and b/docs/img/hyperdatasets/frame_filtering_02.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_02_dark.png b/docs/img/hyperdatasets/frame_filtering_02_dark.png new file mode 100644 index 00000000..4921ba4f Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_02_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_03.png b/docs/img/hyperdatasets/frame_filtering_03.png index c4d4482a..1adb1805 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_03.png and b/docs/img/hyperdatasets/frame_filtering_03.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_03_dark.png b/docs/img/hyperdatasets/frame_filtering_03_dark.png new file mode 100644 index 00000000..c107f3ad Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_03_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_04.png b/docs/img/hyperdatasets/frame_filtering_04.png index ab9c8ef3..5bd7202c 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_04.png and b/docs/img/hyperdatasets/frame_filtering_04.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_04_dark.png b/docs/img/hyperdatasets/frame_filtering_04_dark.png new file mode 100644 index 00000000..459210a2 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_04_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_05.png b/docs/img/hyperdatasets/frame_filtering_05.png index 01be539d..c4e8f4a8 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_05.png and b/docs/img/hyperdatasets/frame_filtering_05.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_05_dark.png b/docs/img/hyperdatasets/frame_filtering_05_dark.png new file mode 100644 index 00000000..e9c2b577 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_05_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_06.png b/docs/img/hyperdatasets/frame_filtering_06.png index 0d4b28b5..f053877f 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_06.png and b/docs/img/hyperdatasets/frame_filtering_06.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_06_dark.png b/docs/img/hyperdatasets/frame_filtering_06_dark.png new file mode 100644 index 00000000..4e6cee29 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_06_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_07.png b/docs/img/hyperdatasets/frame_filtering_07.png index 94a9174b..d1e25f72 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_07.png and b/docs/img/hyperdatasets/frame_filtering_07.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_07_dark.png b/docs/img/hyperdatasets/frame_filtering_07_dark.png new file mode 100644 index 00000000..d9110de8 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_07_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_08.png b/docs/img/hyperdatasets/frame_filtering_08.png index c4caa024..3f7fc8b7 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_08.png and b/docs/img/hyperdatasets/frame_filtering_08.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_08_dark.png b/docs/img/hyperdatasets/frame_filtering_08_dark.png new file mode 100644 index 00000000..8b6ca3de Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_08_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_09.png b/docs/img/hyperdatasets/frame_filtering_09.png index 25e2ac0c..069d43b2 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_09.png and b/docs/img/hyperdatasets/frame_filtering_09.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_09_dark.png b/docs/img/hyperdatasets/frame_filtering_09_dark.png new file mode 100644 index 00000000..ef890ed6 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_09_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_10.png b/docs/img/hyperdatasets/frame_filtering_10.png index 7e8162d4..45378f13 100644 Binary files a/docs/img/hyperdatasets/frame_filtering_10.png and b/docs/img/hyperdatasets/frame_filtering_10.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_10_dark.png b/docs/img/hyperdatasets/frame_filtering_10_dark.png new file mode 100644 index 00000000..afdce169 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_10_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_11.png b/docs/img/hyperdatasets/frame_filtering_11.png new file mode 100644 index 00000000..ce6be171 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_11.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_11_dark.png b/docs/img/hyperdatasets/frame_filtering_11_dark.png new file mode 100644 index 00000000..394145cb Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_11_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_12.png b/docs/img/hyperdatasets/frame_filtering_12.png new file mode 100644 index 00000000..732b761c Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_12.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_12_dark.png b/docs/img/hyperdatasets/frame_filtering_12_dark.png new file mode 100644 index 00000000..e3bdde1a Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_12_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_13.png b/docs/img/hyperdatasets/frame_filtering_13.png new file mode 100644 index 00000000..dce2435d Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_13.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_13_dark.png b/docs/img/hyperdatasets/frame_filtering_13_dark.png new file mode 100644 index 00000000..e76fb604 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_13_dark.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_14.png b/docs/img/hyperdatasets/frame_filtering_14.png new file mode 100644 index 00000000..df6a95a9 Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_14.png differ diff --git a/docs/img/hyperdatasets/frame_filtering_14_dark.png b/docs/img/hyperdatasets/frame_filtering_14_dark.png new file mode 100644 index 00000000..3c98b41f Binary files /dev/null and b/docs/img/hyperdatasets/frame_filtering_14_dark.png differ diff --git a/docs/img/hyperdatasets/frame_overview_01.png b/docs/img/hyperdatasets/frame_overview_01.png index ccaa316b..21d5619a 100644 Binary files a/docs/img/hyperdatasets/frame_overview_01.png and b/docs/img/hyperdatasets/frame_overview_01.png differ diff --git a/docs/img/hyperdatasets/frame_overview_01_dark.png b/docs/img/hyperdatasets/frame_overview_01_dark.png new file mode 100644 index 00000000..5e32c572 Binary files /dev/null and b/docs/img/hyperdatasets/frame_overview_01_dark.png differ diff --git a/docs/img/hyperdatasets/framegroup_01.png b/docs/img/hyperdatasets/framegroup_01.png index 14a7eae1..2ed1e3a9 100644 Binary files a/docs/img/hyperdatasets/framegroup_01.png and b/docs/img/hyperdatasets/framegroup_01.png differ diff --git a/docs/img/hyperdatasets/framegroup_01_dark.png b/docs/img/hyperdatasets/framegroup_01_dark.png new file mode 100644 index 00000000..7142c1a1 Binary files /dev/null and b/docs/img/hyperdatasets/framegroup_01_dark.png differ diff --git a/docs/img/hyperdatasets/hyperdataset_card.png b/docs/img/hyperdatasets/hyperdataset_card.png index 287d66f8..b24a2f69 100644 Binary files a/docs/img/hyperdatasets/hyperdataset_card.png and b/docs/img/hyperdatasets/hyperdataset_card.png differ diff --git a/docs/img/hyperdatasets/hyperdataset_card_dark.png b/docs/img/hyperdatasets/hyperdataset_card_dark.png new file mode 100644 index 00000000..7acc2969 Binary files /dev/null and b/docs/img/hyperdatasets/hyperdataset_card_dark.png differ diff --git a/docs/img/hyperdatasets/hyperdataset_project_card.png b/docs/img/hyperdatasets/hyperdataset_project_card.png index 14d34435..8c88a940 100644 Binary files a/docs/img/hyperdatasets/hyperdataset_project_card.png and b/docs/img/hyperdatasets/hyperdataset_project_card.png differ diff --git a/docs/img/hyperdatasets/hyperdataset_project_card_dark.png b/docs/img/hyperdatasets/hyperdataset_project_card_dark.png new file mode 100644 index 00000000..d6029c17 Binary files /dev/null and b/docs/img/hyperdatasets/hyperdataset_project_card_dark.png differ diff --git a/docs/img/hyperdatasets/hyperdataset_publish_version.png b/docs/img/hyperdatasets/hyperdataset_publish_version.png new file mode 100644 index 00000000..d1626c9d Binary files /dev/null and b/docs/img/hyperdatasets/hyperdataset_publish_version.png differ diff --git a/docs/img/hyperdatasets/hyperdataset_publish_version_dark.png b/docs/img/hyperdatasets/hyperdataset_publish_version_dark.png new file mode 100644 index 00000000..fec6e5d6 Binary files /dev/null and b/docs/img/hyperdatasets/hyperdataset_publish_version_dark.png differ diff --git a/docs/img/hyperdatasets/hyperdataset_search_2.png b/docs/img/hyperdatasets/hyperdataset_search_2.png index fe4023df..3856d648 100644 Binary files a/docs/img/hyperdatasets/hyperdataset_search_2.png and b/docs/img/hyperdatasets/hyperdataset_search_2.png differ diff --git a/docs/img/hyperdatasets/hyperdataset_search_2_dark.png b/docs/img/hyperdatasets/hyperdataset_search_2_dark.png new file mode 100644 index 00000000..0f332814 Binary files /dev/null and b/docs/img/hyperdatasets/hyperdataset_search_2_dark.png differ diff --git a/docs/img/hyperdatasets/multi_source_annotation.png b/docs/img/hyperdatasets/multi_source_annotation.png index 7f8d9e2e..f7e48b3d 100644 Binary files a/docs/img/hyperdatasets/multi_source_annotation.png and b/docs/img/hyperdatasets/multi_source_annotation.png differ diff --git a/docs/img/hyperdatasets/multi_source_annotation_dark.png b/docs/img/hyperdatasets/multi_source_annotation_dark.png new file mode 100644 index 00000000..c1d1c2d4 Binary files /dev/null and b/docs/img/hyperdatasets/multi_source_annotation_dark.png differ diff --git a/docs/img/hyperdatasets/multiple_filters.png b/docs/img/hyperdatasets/multiple_filters.png index bb116b2b..0d2f0749 100644 Binary files a/docs/img/hyperdatasets/multiple_filters.png and b/docs/img/hyperdatasets/multiple_filters.png differ diff --git a/docs/img/hyperdatasets/multiple_filters_dark.png b/docs/img/hyperdatasets/multiple_filters_dark.png new file mode 100644 index 00000000..5c4acf4d Binary files /dev/null and b/docs/img/hyperdatasets/multiple_filters_dark.png differ diff --git a/docs/img/hyperdatasets/multiple_rules.png b/docs/img/hyperdatasets/multiple_rules.png index 30be67ec..1b9855b4 100644 Binary files a/docs/img/hyperdatasets/multiple_rules.png and b/docs/img/hyperdatasets/multiple_rules.png differ diff --git a/docs/img/hyperdatasets/multiple_rules_dark.png b/docs/img/hyperdatasets/multiple_rules_dark.png new file mode 100644 index 00000000..111e5902 Binary files /dev/null and b/docs/img/hyperdatasets/multiple_rules_dark.png differ diff --git a/docs/img/hyperdatasets/preview_all_sources.png b/docs/img/hyperdatasets/preview_all_sources.png index c69fc400..d17672ac 100644 Binary files a/docs/img/hyperdatasets/preview_all_sources.png and b/docs/img/hyperdatasets/preview_all_sources.png differ diff --git a/docs/img/hyperdatasets/preview_all_sources_dark.png b/docs/img/hyperdatasets/preview_all_sources_dark.png new file mode 100644 index 00000000..e6461781 Binary files /dev/null and b/docs/img/hyperdatasets/preview_all_sources_dark.png differ diff --git a/docs/img/hyperdatasets/roi_match_query.png b/docs/img/hyperdatasets/roi_match_query.png index c46b96c6..df5adb4b 100644 Binary files a/docs/img/hyperdatasets/roi_match_query.png and b/docs/img/hyperdatasets/roi_match_query.png differ diff --git a/docs/img/hyperdatasets/roi_match_query_dark.png b/docs/img/hyperdatasets/roi_match_query_dark.png new file mode 100644 index 00000000..d72fedfd Binary files /dev/null and b/docs/img/hyperdatasets/roi_match_query_dark.png differ diff --git a/docs/img/hyperdatasets/sample_by_property_modal.png b/docs/img/hyperdatasets/sample_by_property_modal.png index ac29f92f..6358b21a 100644 Binary files a/docs/img/hyperdatasets/sample_by_property_modal.png and b/docs/img/hyperdatasets/sample_by_property_modal.png differ diff --git a/docs/img/hyperdatasets/sample_by_property_modal_dark.png b/docs/img/hyperdatasets/sample_by_property_modal_dark.png new file mode 100644 index 00000000..9634b950 Binary files /dev/null and b/docs/img/hyperdatasets/sample_by_property_modal_dark.png differ diff --git a/docs/img/hyperdatasets/video_preview.png b/docs/img/hyperdatasets/video_preview.png index 65f54655..b1b19b49 100644 Binary files a/docs/img/hyperdatasets/video_preview.png and b/docs/img/hyperdatasets/video_preview.png differ diff --git a/docs/img/hyperdatasets/video_preview_dark.png b/docs/img/hyperdatasets/video_preview_dark.png new file mode 100644 index 00000000..eea7458a Binary files /dev/null and b/docs/img/hyperdatasets/video_preview_dark.png differ diff --git a/docs/img/hyperdatasets/web-app/compare_dataviews.png b/docs/img/hyperdatasets/web-app/compare_dataviews.png deleted file mode 100644 index 5e25a560..00000000 Binary files a/docs/img/hyperdatasets/web-app/compare_dataviews.png and /dev/null differ diff --git a/docs/img/hyperdatasets/web-app/dataset_example_frame_editor.png b/docs/img/hyperdatasets/web-app/dataset_example_frame_editor.png deleted file mode 100644 index ae58c82f..00000000 Binary files a/docs/img/hyperdatasets/web-app/dataset_example_frame_editor.png and /dev/null differ diff --git a/docs/img/hyperdatasets/web-app/dataset_simple_adv_01.png b/docs/img/hyperdatasets/web-app/dataset_simple_adv_01.png deleted file mode 100644 index 56d8ad30..00000000 Binary files a/docs/img/hyperdatasets/web-app/dataset_simple_adv_01.png and /dev/null differ diff --git a/docs/img/hyperdatasets/web-app/dataset_simple_adv_02.png b/docs/img/hyperdatasets/web-app/dataset_simple_adv_02.png deleted file mode 100644 index 41719d7e..00000000 Binary files a/docs/img/hyperdatasets/web-app/dataset_simple_adv_02.png and /dev/null differ diff --git a/docs/img/hyperdatasets/web-app/dataset_versions.png b/docs/img/hyperdatasets/web-app/dataset_versions.png deleted file mode 100644 index 58aa918c..00000000 Binary files a/docs/img/hyperdatasets/web-app/dataset_versions.png and /dev/null differ diff --git a/docs/img/hyperdatasets/web-app/dataview_tab.png b/docs/img/hyperdatasets/web-app/dataview_tab.png deleted file mode 100644 index 0d0fcaad..00000000 Binary files a/docs/img/hyperdatasets/web-app/dataview_tab.png and /dev/null differ diff --git a/docs/img/hyperdatasets/webapp_dataview_new.png b/docs/img/hyperdatasets/webapp_dataview_new.png new file mode 100644 index 00000000..a9e7803e Binary files /dev/null and b/docs/img/hyperdatasets/webapp_dataview_new.png differ diff --git a/docs/img/hyperdatasets/webapp_dataview_new_dark.png b/docs/img/hyperdatasets/webapp_dataview_new_dark.png new file mode 100644 index 00000000..e3220ffe Binary files /dev/null and b/docs/img/hyperdatasets/webapp_dataview_new_dark.png differ diff --git a/docs/img/hyperdatasets/webapp_dataviews_context_menu.png b/docs/img/hyperdatasets/webapp_dataviews_context_menu.png index fa3d578d..79fa4306 100644 Binary files a/docs/img/hyperdatasets/webapp_dataviews_context_menu.png and b/docs/img/hyperdatasets/webapp_dataviews_context_menu.png differ diff --git a/docs/img/hyperdatasets/webapp_dataviews_context_menu_dark.png b/docs/img/hyperdatasets/webapp_dataviews_context_menu_dark.png new file mode 100644 index 00000000..41a83a07 Binary files /dev/null and b/docs/img/hyperdatasets/webapp_dataviews_context_menu_dark.png differ diff --git a/docs/img/hyperdatasets/webapp_dataviews_table.png b/docs/img/hyperdatasets/webapp_dataviews_table.png index c0031442..343ef0a4 100644 Binary files a/docs/img/hyperdatasets/webapp_dataviews_table.png and b/docs/img/hyperdatasets/webapp_dataviews_table.png differ diff --git a/docs/img/hyperdatasets/webapp_dataviews_table_dark.png b/docs/img/hyperdatasets/webapp_dataviews_table_dark.png new file mode 100644 index 00000000..03ec7455 Binary files /dev/null and b/docs/img/hyperdatasets/webapp_dataviews_table_dark.png differ diff --git a/docs/img/hyperdatasets/webapp_hyperdataset_card_context_menu.png b/docs/img/hyperdatasets/webapp_hyperdataset_card_context_menu.png new file mode 100644 index 00000000..46c08b79 Binary files /dev/null and b/docs/img/hyperdatasets/webapp_hyperdataset_card_context_menu.png differ diff --git a/docs/img/hyperdatasets/webapp_hyperdataset_card_context_menu_dark.png b/docs/img/hyperdatasets/webapp_hyperdataset_card_context_menu_dark.png new file mode 100644 index 00000000..fa98eac6 Binary files /dev/null and b/docs/img/hyperdatasets/webapp_hyperdataset_card_context_menu_dark.png differ diff --git a/docs/img/hyperdatasets/webapp_hyperdataset_creation.png b/docs/img/hyperdatasets/webapp_hyperdataset_creation.png new file mode 100644 index 00000000..8dbf55b4 Binary files /dev/null and b/docs/img/hyperdatasets/webapp_hyperdataset_creation.png differ diff --git a/docs/img/hyperdatasets/webapp_hyperdataset_creation_dark.png b/docs/img/hyperdatasets/webapp_hyperdataset_creation_dark.png new file mode 100644 index 00000000..4a8f5adc Binary files /dev/null and b/docs/img/hyperdatasets/webapp_hyperdataset_creation_dark.png differ diff --git a/docs/img/hyperparameters_sections.png b/docs/img/hyperparameters_sections.png index 283bf413..6b259831 100644 Binary files a/docs/img/hyperparameters_sections.png and b/docs/img/hyperparameters_sections.png differ diff --git a/docs/img/hyperparameters_sections_dark.png b/docs/img/hyperparameters_sections_dark.png new file mode 100644 index 00000000..3e5f8d93 Binary files /dev/null and b/docs/img/hyperparameters_sections_dark.png differ diff --git a/docs/img/integration_keras_tuner_01.png b/docs/img/integration_keras_tuner_01.png index 00d8b08a..d24a8bb6 100644 Binary files a/docs/img/integration_keras_tuner_01.png and b/docs/img/integration_keras_tuner_01.png differ diff --git a/docs/img/integration_keras_tuner_01_dark.png b/docs/img/integration_keras_tuner_01_dark.png new file mode 100644 index 00000000..5e350773 Binary files /dev/null and b/docs/img/integration_keras_tuner_01_dark.png differ diff --git a/docs/img/integration_keras_tuner_02.png b/docs/img/integration_keras_tuner_02.png index 61460e1d..8612930a 100644 Binary files a/docs/img/integration_keras_tuner_02.png and b/docs/img/integration_keras_tuner_02.png differ diff --git a/docs/img/integration_keras_tuner_02_dark.png b/docs/img/integration_keras_tuner_02_dark.png new file mode 100644 index 00000000..24c84e8e Binary files /dev/null and b/docs/img/integration_keras_tuner_02_dark.png differ diff --git a/docs/img/integration_keras_tuner_03.png b/docs/img/integration_keras_tuner_03.png index 14c50d1a..6de2758c 100644 Binary files a/docs/img/integration_keras_tuner_03.png and b/docs/img/integration_keras_tuner_03.png differ diff --git a/docs/img/integration_keras_tuner_03_dark.png b/docs/img/integration_keras_tuner_03_dark.png new file mode 100644 index 00000000..2612554d Binary files /dev/null and b/docs/img/integration_keras_tuner_03_dark.png differ diff --git a/docs/img/integration_keras_tuner_04.png b/docs/img/integration_keras_tuner_04.png index 5a9a62fa..17ec7566 100644 Binary files a/docs/img/integration_keras_tuner_04.png and b/docs/img/integration_keras_tuner_04.png differ diff --git a/docs/img/integration_keras_tuner_04_dark.png b/docs/img/integration_keras_tuner_04_dark.png new file mode 100644 index 00000000..62690ac1 Binary files /dev/null and b/docs/img/integration_keras_tuner_04_dark.png differ diff --git a/docs/img/integration_keras_tuner_05.png b/docs/img/integration_keras_tuner_05.png index d47e8aea..81dcf862 100644 Binary files a/docs/img/integration_keras_tuner_05.png and b/docs/img/integration_keras_tuner_05.png differ diff --git a/docs/img/integration_keras_tuner_05_dark.png b/docs/img/integration_keras_tuner_05_dark.png new file mode 100644 index 00000000..8b4bd61a Binary files /dev/null and b/docs/img/integration_keras_tuner_05_dark.png differ diff --git a/docs/img/integration_keras_tuner_06.png b/docs/img/integration_keras_tuner_06.png index 7e9bc8d0..c49bef1e 100644 Binary files a/docs/img/integration_keras_tuner_06.png and b/docs/img/integration_keras_tuner_06.png differ diff --git a/docs/img/integration_keras_tuner_06_dark.png b/docs/img/integration_keras_tuner_06_dark.png new file mode 100644 index 00000000..69ea91ab Binary files /dev/null and b/docs/img/integration_keras_tuner_06_dark.png differ diff --git a/docs/img/integration_keras_tuner_07.png b/docs/img/integration_keras_tuner_07.png index d84a838b..d3696b41 100644 Binary files a/docs/img/integration_keras_tuner_07.png and b/docs/img/integration_keras_tuner_07.png differ diff --git a/docs/img/integration_keras_tuner_07_dark.png b/docs/img/integration_keras_tuner_07_dark.png new file mode 100644 index 00000000..46aa01b8 Binary files /dev/null and b/docs/img/integration_keras_tuner_07_dark.png differ diff --git a/docs/img/integrations_click_configs.png b/docs/img/integrations_click_configs.png index 06e3e2de..db11bd9a 100644 Binary files a/docs/img/integrations_click_configs.png and b/docs/img/integrations_click_configs.png differ diff --git a/docs/img/integrations_click_configs_dark.png b/docs/img/integrations_click_configs_dark.png new file mode 100644 index 00000000..6f51ab21 Binary files /dev/null and b/docs/img/integrations_click_configs_dark.png differ diff --git a/docs/img/integrations_hydra_configs.png b/docs/img/integrations_hydra_configs.png index d60cd4ec..1e9d1761 100644 Binary files a/docs/img/integrations_hydra_configs.png and b/docs/img/integrations_hydra_configs.png differ diff --git a/docs/img/integrations_hydra_configs_dark.png b/docs/img/integrations_hydra_configs_dark.png new file mode 100644 index 00000000..cda231ae Binary files /dev/null and b/docs/img/integrations_hydra_configs_dark.png differ diff --git a/docs/img/integrations_transformers_scalars.png b/docs/img/integrations_transformers_scalars.png index 4ebc75a6..420d0d77 100644 Binary files a/docs/img/integrations_transformers_scalars.png and b/docs/img/integrations_transformers_scalars.png differ diff --git a/docs/img/integrations_transformers_scalars_dark.png b/docs/img/integrations_transformers_scalars_dark.png new file mode 100644 index 00000000..49fd6145 Binary files /dev/null and b/docs/img/integrations_transformers_scalars_dark.png differ diff --git a/docs/img/keras_colab_01.png b/docs/img/keras_colab_01.png index b0392287..09087091 100644 Binary files a/docs/img/keras_colab_01.png and b/docs/img/keras_colab_01.png differ diff --git a/docs/img/keras_colab_01_dark.png b/docs/img/keras_colab_01_dark.png new file mode 100644 index 00000000..304712c5 Binary files /dev/null and b/docs/img/keras_colab_01_dark.png differ diff --git a/docs/img/keras_colab_02.png b/docs/img/keras_colab_02.png index f0efa89e..9055afb1 100644 Binary files a/docs/img/keras_colab_02.png and b/docs/img/keras_colab_02.png differ diff --git a/docs/img/keras_colab_02_dark.png b/docs/img/keras_colab_02_dark.png new file mode 100644 index 00000000..8395f2e8 Binary files /dev/null and b/docs/img/keras_colab_02_dark.png differ diff --git a/docs/img/pipelines_DAG.png b/docs/img/pipelines_DAG.png deleted file mode 100644 index de3faf60..00000000 Binary files a/docs/img/pipelines_DAG.png and /dev/null differ diff --git a/docs/img/pipelines_comparison_plots.png b/docs/img/pipelines_comparison_plots.png index e543ccdc..1e2a01bf 100644 Binary files a/docs/img/pipelines_comparison_plots.png and b/docs/img/pipelines_comparison_plots.png differ diff --git a/docs/img/pipelines_comparison_plots_dark.png b/docs/img/pipelines_comparison_plots_dark.png new file mode 100644 index 00000000..c9baf651 Binary files /dev/null and b/docs/img/pipelines_comparison_plots_dark.png differ diff --git a/docs/img/pipelines_comparison_plots_merged.png b/docs/img/pipelines_comparison_plots_merged.png index 38bc31c3..40b2329c 100644 Binary files a/docs/img/pipelines_comparison_plots_merged.png and b/docs/img/pipelines_comparison_plots_merged.png differ diff --git a/docs/img/pipelines_comparison_plots_merged_dark.png b/docs/img/pipelines_comparison_plots_merged_dark.png new file mode 100644 index 00000000..0c3a5c07 Binary files /dev/null and b/docs/img/pipelines_comparison_plots_merged_dark.png differ diff --git a/docs/img/pipelines_comparison_scalars.png b/docs/img/pipelines_comparison_scalars.png index 63bc22c5..5fb5e774 100644 Binary files a/docs/img/pipelines_comparison_scalars.png and b/docs/img/pipelines_comparison_scalars.png differ diff --git a/docs/img/pipelines_comparison_scalars_dark.png b/docs/img/pipelines_comparison_scalars_dark.png new file mode 100644 index 00000000..f50b2623 Binary files /dev/null and b/docs/img/pipelines_comparison_scalars_dark.png differ diff --git a/docs/img/pipelines_comparison_single_scalar.png b/docs/img/pipelines_comparison_single_scalar.png index 10b13fc5..559f7463 100644 Binary files a/docs/img/pipelines_comparison_single_scalar.png and b/docs/img/pipelines_comparison_single_scalar.png differ diff --git a/docs/img/pipelines_comparison_single_scalar_dark.png b/docs/img/pipelines_comparison_single_scalar_dark.png new file mode 100644 index 00000000..9e28e074 Binary files /dev/null and b/docs/img/pipelines_comparison_single_scalar_dark.png differ diff --git a/docs/img/pipelines_new_run.png b/docs/img/pipelines_new_run.png index 67b40acf..4bcda63f 100644 Binary files a/docs/img/pipelines_new_run.png and b/docs/img/pipelines_new_run.png differ diff --git a/docs/img/pipelines_new_run_dark.png b/docs/img/pipelines_new_run_dark.png new file mode 100644 index 00000000..d517eef9 Binary files /dev/null and b/docs/img/pipelines_new_run_dark.png differ diff --git a/docs/img/report_plotly.png b/docs/img/report_plotly.png index 3cf6cb70..52651471 100644 Binary files a/docs/img/report_plotly.png and b/docs/img/report_plotly.png differ diff --git a/docs/img/report_plotly_dark.png b/docs/img/report_plotly_dark.png new file mode 100644 index 00000000..2d6bfc73 Binary files /dev/null and b/docs/img/report_plotly_dark.png differ diff --git a/docs/img/reports_blockquotes.png b/docs/img/reports_blockquotes.png index adf1df12..ac0576a3 100644 Binary files a/docs/img/reports_blockquotes.png and b/docs/img/reports_blockquotes.png differ diff --git a/docs/img/reports_blockquotes_dark.png b/docs/img/reports_blockquotes_dark.png new file mode 100644 index 00000000..a62c9c11 Binary files /dev/null and b/docs/img/reports_blockquotes_dark.png differ diff --git a/docs/img/reports_headings.png b/docs/img/reports_headings.png index 8e1dda95..fe953aa7 100644 Binary files a/docs/img/reports_headings.png and b/docs/img/reports_headings.png differ diff --git a/docs/img/reports_headings_dark.png b/docs/img/reports_headings_dark.png new file mode 100644 index 00000000..6f4cb78f Binary files /dev/null and b/docs/img/reports_headings_dark.png differ diff --git a/docs/img/reports_horizontal_rules.png b/docs/img/reports_horizontal_rules.png index 34c2647b..039a9cd4 100644 Binary files a/docs/img/reports_horizontal_rules.png and b/docs/img/reports_horizontal_rules.png differ diff --git a/docs/img/reports_horizontal_rules_dark.png b/docs/img/reports_horizontal_rules_dark.png new file mode 100644 index 00000000..0f241c54 Binary files /dev/null and b/docs/img/reports_horizontal_rules_dark.png differ diff --git a/docs/img/reports_ordered_list.png b/docs/img/reports_ordered_list.png index affd14cd..829bff5b 100644 Binary files a/docs/img/reports_ordered_list.png and b/docs/img/reports_ordered_list.png differ diff --git a/docs/img/reports_ordered_list_dark.png b/docs/img/reports_ordered_list_dark.png new file mode 100644 index 00000000..843b5ab1 Binary files /dev/null and b/docs/img/reports_ordered_list_dark.png differ diff --git a/docs/img/reports_step_2.png b/docs/img/reports_step_2.png index 66135d32..5fd6b618 100644 Binary files a/docs/img/reports_step_2.png and b/docs/img/reports_step_2.png differ diff --git a/docs/img/reports_step_2_dark.png b/docs/img/reports_step_2_dark.png new file mode 100644 index 00000000..004b8417 Binary files /dev/null and b/docs/img/reports_step_2_dark.png differ diff --git a/docs/img/reports_step_2a.png b/docs/img/reports_step_2a.png index 99ad198e..2f6639be 100644 Binary files a/docs/img/reports_step_2a.png and b/docs/img/reports_step_2a.png differ diff --git a/docs/img/reports_step_2a_dark.png b/docs/img/reports_step_2a_dark.png new file mode 100644 index 00000000..c1d13442 Binary files /dev/null and b/docs/img/reports_step_2a_dark.png differ diff --git a/docs/img/reports_step_3.png b/docs/img/reports_step_3.png index 7b56dec3..fd6a0d8d 100644 Binary files a/docs/img/reports_step_3.png and b/docs/img/reports_step_3.png differ diff --git a/docs/img/reports_step_3_dark.png b/docs/img/reports_step_3_dark.png new file mode 100644 index 00000000..d1648aed Binary files /dev/null and b/docs/img/reports_step_3_dark.png differ diff --git a/docs/img/reports_table.png b/docs/img/reports_table.png index dd0c5ee4..a8b4f85b 100644 Binary files a/docs/img/reports_table.png and b/docs/img/reports_table.png differ diff --git a/docs/img/reports_table_dark.png b/docs/img/reports_table_dark.png new file mode 100644 index 00000000..870f9ee6 Binary files /dev/null and b/docs/img/reports_table_dark.png differ diff --git a/docs/img/reports_unordered_list.png b/docs/img/reports_unordered_list.png index 82b830d2..3d1e8437 100644 Binary files a/docs/img/reports_unordered_list.png and b/docs/img/reports_unordered_list.png differ diff --git a/docs/img/reports_unordered_list_dark.png b/docs/img/reports_unordered_list_dark.png new file mode 100644 index 00000000..f552f654 Binary files /dev/null and b/docs/img/reports_unordered_list_dark.png differ diff --git a/docs/img/resource_configuration.png b/docs/img/resource_configuration.png index d968072e..1f81b2a6 100644 Binary files a/docs/img/resource_configuration.png and b/docs/img/resource_configuration.png differ diff --git a/docs/img/resource_configuration_dark.png b/docs/img/resource_configuration_dark.png new file mode 100644 index 00000000..261d5716 Binary files /dev/null and b/docs/img/resource_configuration_dark.png differ diff --git a/docs/img/resource_configuration_pool_card.png b/docs/img/resource_configuration_pool_card.png index 8d6e89ca..114bcc08 100644 Binary files a/docs/img/resource_configuration_pool_card.png and b/docs/img/resource_configuration_pool_card.png differ diff --git a/docs/img/resource_configuration_pool_card_dark.png b/docs/img/resource_configuration_pool_card_dark.png new file mode 100644 index 00000000..a531d67d Binary files /dev/null and b/docs/img/resource_configuration_pool_card_dark.png differ diff --git a/docs/img/resource_configuration_profile_card.png b/docs/img/resource_configuration_profile_card.png index 9e3a122e..841bdd93 100644 Binary files a/docs/img/resource_configuration_profile_card.png and b/docs/img/resource_configuration_profile_card.png differ diff --git a/docs/img/resource_configuration_profile_card_dark.png b/docs/img/resource_configuration_profile_card_dark.png new file mode 100644 index 00000000..c18d6375 Binary files /dev/null and b/docs/img/resource_configuration_profile_card_dark.png differ diff --git a/docs/img/resource_example_policy.png b/docs/img/resource_example_policy.png index 07ce56f2..8fd866bc 100644 Binary files a/docs/img/resource_example_policy.png and b/docs/img/resource_example_policy.png differ diff --git a/docs/img/resource_example_policy_dark.png b/docs/img/resource_example_policy_dark.png new file mode 100644 index 00000000..d18b3bcd Binary files /dev/null and b/docs/img/resource_example_policy_dark.png differ diff --git a/docs/img/resource_example_policy_priority.png b/docs/img/resource_example_policy_priority.png index 6e237d02..5618cb61 100644 Binary files a/docs/img/resource_example_policy_priority.png and b/docs/img/resource_example_policy_priority.png differ diff --git a/docs/img/resource_example_policy_priority_dark.png b/docs/img/resource_example_policy_priority_dark.png new file mode 100644 index 00000000..b4326a17 Binary files /dev/null and b/docs/img/resource_example_policy_priority_dark.png differ diff --git a/docs/img/resource_example_pool_card.png b/docs/img/resource_example_pool_card.png index 1051a1a3..b1e7e130 100644 Binary files a/docs/img/resource_example_pool_card.png and b/docs/img/resource_example_pool_card.png differ diff --git a/docs/img/resource_example_pool_card_dark.png b/docs/img/resource_example_pool_card_dark.png new file mode 100644 index 00000000..3699518b Binary files /dev/null and b/docs/img/resource_example_pool_card_dark.png differ diff --git a/docs/img/resource_example_pool_priority.png b/docs/img/resource_example_pool_priority.png index 7f8341dd..c20c474e 100644 Binary files a/docs/img/resource_example_pool_priority.png and b/docs/img/resource_example_pool_priority.png differ diff --git a/docs/img/resource_example_pool_priority_dark.png b/docs/img/resource_example_pool_priority_dark.png new file mode 100644 index 00000000..d343c910 Binary files /dev/null and b/docs/img/resource_example_pool_priority_dark.png differ diff --git a/docs/img/resource_example_pools.png b/docs/img/resource_example_pools.png index f1ddc396..f955bae9 100644 Binary files a/docs/img/resource_example_pools.png and b/docs/img/resource_example_pools.png differ diff --git a/docs/img/resource_example_pools_dark.png b/docs/img/resource_example_pools_dark.png new file mode 100644 index 00000000..658f4c65 Binary files /dev/null and b/docs/img/resource_example_pools_dark.png differ diff --git a/docs/img/resource_example_profile.png b/docs/img/resource_example_profile.png index 374fc4f9..687e5d76 100644 Binary files a/docs/img/resource_example_profile.png and b/docs/img/resource_example_profile.png differ diff --git a/docs/img/resource_example_profile_dark.png b/docs/img/resource_example_profile_dark.png new file mode 100644 index 00000000..e42e1da8 Binary files /dev/null and b/docs/img/resource_example_profile_dark.png differ diff --git a/docs/img/resource_example_profile_pool_links.png b/docs/img/resource_example_profile_pool_links.png index e2f13cf8..27808561 100644 Binary files a/docs/img/resource_example_profile_pool_links.png and b/docs/img/resource_example_profile_pool_links.png differ diff --git a/docs/img/resource_example_profile_pool_links_dark.png b/docs/img/resource_example_profile_pool_links_dark.png new file mode 100644 index 00000000..d1911c6e Binary files /dev/null and b/docs/img/resource_example_profile_pool_links_dark.png differ diff --git a/docs/img/resource_example_profile_priority.png b/docs/img/resource_example_profile_priority.png index 1c8ee3b6..caa20156 100644 Binary files a/docs/img/resource_example_profile_priority.png and b/docs/img/resource_example_profile_priority.png differ diff --git a/docs/img/resource_example_profile_priority_dark.png b/docs/img/resource_example_profile_priority_dark.png new file mode 100644 index 00000000..ee688d78 Binary files /dev/null and b/docs/img/resource_example_profile_priority_dark.png differ diff --git a/docs/img/resource_policies_dashboard.png b/docs/img/resource_policies_dashboard.png index 4168a2b6..00460129 100644 Binary files a/docs/img/resource_policies_dashboard.png and b/docs/img/resource_policies_dashboard.png differ diff --git a/docs/img/resource_policies_dashboard_dark.png b/docs/img/resource_policies_dashboard_dark.png new file mode 100644 index 00000000..d69c7c73 Binary files /dev/null and b/docs/img/resource_policies_dashboard_dark.png differ diff --git a/docs/img/resource_policies_policy_card.png b/docs/img/resource_policies_policy_card.png index 2fdd511e..48e46006 100644 Binary files a/docs/img/resource_policies_policy_card.png and b/docs/img/resource_policies_policy_card.png differ diff --git a/docs/img/resource_policies_policy_card_dark.png b/docs/img/resource_policies_policy_card_dark.png new file mode 100644 index 00000000..2c72696b Binary files /dev/null and b/docs/img/resource_policies_policy_card_dark.png differ diff --git a/docs/img/resource_policies_profile_card_admin.png b/docs/img/resource_policies_profile_card_admin.png index 0062778e..9fd2268b 100644 Binary files a/docs/img/resource_policies_profile_card_admin.png and b/docs/img/resource_policies_profile_card_admin.png differ diff --git a/docs/img/resource_policies_profile_card_admin_dark.png b/docs/img/resource_policies_profile_card_admin_dark.png new file mode 100644 index 00000000..21978bb2 Binary files /dev/null and b/docs/img/resource_policies_profile_card_admin_dark.png differ diff --git a/docs/img/resource_policies_profile_card_non_admin.png b/docs/img/resource_policies_profile_card_non_admin.png index e38a9d62..fe2cef99 100644 Binary files a/docs/img/resource_policies_profile_card_non_admin.png and b/docs/img/resource_policies_profile_card_non_admin.png differ diff --git a/docs/img/resource_policies_profile_card_non_admin_dark.png b/docs/img/resource_policies_profile_card_non_admin_dark.png new file mode 100644 index 00000000..8b508def Binary files /dev/null and b/docs/img/resource_policies_profile_card_non_admin_dark.png differ diff --git a/docs/img/resource_policies_remove_profile.png b/docs/img/resource_policies_remove_profile.png index e0ce43b2..672c245d 100644 Binary files a/docs/img/resource_policies_remove_profile.png and b/docs/img/resource_policies_remove_profile.png differ diff --git a/docs/img/resource_policies_remove_profile_dark.png b/docs/img/resource_policies_remove_profile_dark.png new file mode 100644 index 00000000..cb65d5a2 Binary files /dev/null and b/docs/img/resource_policies_remove_profile_dark.png differ diff --git a/docs/img/settings_access_rules.png b/docs/img/settings_access_rules.png index fcc1d72e..ab1e9292 100644 Binary files a/docs/img/settings_access_rules.png and b/docs/img/settings_access_rules.png differ diff --git a/docs/img/settings_access_rules_dark.png b/docs/img/settings_access_rules_dark.png new file mode 100644 index 00000000..9fcde90c Binary files /dev/null and b/docs/img/settings_access_rules_dark.png differ diff --git a/docs/img/settings_admin_vaults.png b/docs/img/settings_admin_vaults.png index 4449e255..49df3330 100644 Binary files a/docs/img/settings_admin_vaults.png and b/docs/img/settings_admin_vaults.png differ diff --git a/docs/img/settings_admin_vaults_dark.png b/docs/img/settings_admin_vaults_dark.png new file mode 100644 index 00000000..fff18883 Binary files /dev/null and b/docs/img/settings_admin_vaults_dark.png differ diff --git a/docs/img/settings_billing_usage.png b/docs/img/settings_billing_usage.png index da661619..0b045480 100644 Binary files a/docs/img/settings_billing_usage.png and b/docs/img/settings_billing_usage.png differ diff --git a/docs/img/settings_billing_usage_dark.png b/docs/img/settings_billing_usage_dark.png new file mode 100644 index 00000000..68457a83 Binary files /dev/null and b/docs/img/settings_billing_usage_dark.png differ diff --git a/docs/img/settings_billing_usage_free.png b/docs/img/settings_billing_usage_free.png index d3c21f94..5f8fe341 100644 Binary files a/docs/img/settings_billing_usage_free.png and b/docs/img/settings_billing_usage_free.png differ diff --git a/docs/img/settings_billing_usage_free_dark.png b/docs/img/settings_billing_usage_free_dark.png new file mode 100644 index 00000000..6566648e Binary files /dev/null and b/docs/img/settings_billing_usage_free_dark.png differ diff --git a/docs/img/settings_configuration_creation.png b/docs/img/settings_configuration_creation.png index dd28f006..a0c68e7b 100644 Binary files a/docs/img/settings_configuration_creation.png and b/docs/img/settings_configuration_creation.png differ diff --git a/docs/img/settings_configuration_creation_dark.png b/docs/img/settings_configuration_creation_dark.png new file mode 100644 index 00000000..95d63073 Binary files /dev/null and b/docs/img/settings_configuration_creation_dark.png differ diff --git a/docs/img/settings_configuration_vault.png b/docs/img/settings_configuration_vault.png index 7c85d304..71972502 100644 Binary files a/docs/img/settings_configuration_vault.png and b/docs/img/settings_configuration_vault.png differ diff --git a/docs/img/settings_configuration_vault_dark.png b/docs/img/settings_configuration_vault_dark.png new file mode 100644 index 00000000..64c202bd Binary files /dev/null and b/docs/img/settings_configuration_vault_dark.png differ diff --git a/docs/img/settings_hidden_projects.png b/docs/img/settings_hidden_projects.png index 0a7995eb..18e69eb8 100644 Binary files a/docs/img/settings_hidden_projects.png and b/docs/img/settings_hidden_projects.png differ diff --git a/docs/img/settings_hidden_projects_dark.png b/docs/img/settings_hidden_projects_dark.png new file mode 100644 index 00000000..bbfa2501 Binary files /dev/null and b/docs/img/settings_hidden_projects_dark.png differ diff --git a/docs/img/settings_identity_chart.png b/docs/img/settings_identity_chart.png index c76d0c12..d5743cfc 100644 Binary files a/docs/img/settings_identity_chart.png and b/docs/img/settings_identity_chart.png differ diff --git a/docs/img/settings_identity_chart_dark.png b/docs/img/settings_identity_chart_dark.png new file mode 100644 index 00000000..2aca3b63 Binary files /dev/null and b/docs/img/settings_identity_chart_dark.png differ diff --git a/docs/img/settings_service_account_config_vault.png b/docs/img/settings_service_account_config_vault.png index 59a19468..874facdd 100644 Binary files a/docs/img/settings_service_account_config_vault.png and b/docs/img/settings_service_account_config_vault.png differ diff --git a/docs/img/settings_service_account_config_vault_dark.png b/docs/img/settings_service_account_config_vault_dark.png new file mode 100644 index 00000000..dc454374 Binary files /dev/null and b/docs/img/settings_service_account_config_vault_dark.png differ diff --git a/docs/img/settings_service_accounts.png b/docs/img/settings_service_accounts.png index f1070291..f2f5be4e 100644 Binary files a/docs/img/settings_service_accounts.png and b/docs/img/settings_service_accounts.png differ diff --git a/docs/img/settings_service_accounts_dark.png b/docs/img/settings_service_accounts_dark.png new file mode 100644 index 00000000..51a32a5a Binary files /dev/null and b/docs/img/settings_service_accounts_dark.png differ diff --git a/docs/img/settings_user_group.png b/docs/img/settings_user_group.png index 59fbee32..9ab73e63 100644 Binary files a/docs/img/settings_user_group.png and b/docs/img/settings_user_group.png differ diff --git a/docs/img/settings_user_group_dark.png b/docs/img/settings_user_group_dark.png new file mode 100644 index 00000000..62c2c46c Binary files /dev/null and b/docs/img/settings_user_group_dark.png differ diff --git a/docs/img/settings_user_management_table.png b/docs/img/settings_user_management_table.png index 7e935d93..c064f480 100644 Binary files a/docs/img/settings_user_management_table.png and b/docs/img/settings_user_management_table.png differ diff --git a/docs/img/settings_user_management_table_dark.png b/docs/img/settings_user_management_table_dark.png new file mode 100644 index 00000000..dcd2e750 Binary files /dev/null and b/docs/img/settings_user_management_table_dark.png differ diff --git a/docs/img/settings_user_table.png b/docs/img/settings_user_table.png index 0f33e8bc..4e65cd6e 100644 Binary files a/docs/img/settings_user_table.png and b/docs/img/settings_user_table.png differ diff --git a/docs/img/settings_user_table_dark.png b/docs/img/settings_user_table_dark.png new file mode 100644 index 00000000..488998d2 Binary files /dev/null and b/docs/img/settings_user_table_dark.png differ diff --git a/docs/img/settings_workspace_configuration.png b/docs/img/settings_workspace_configuration.png index d2518611..2709e0cc 100644 Binary files a/docs/img/settings_workspace_configuration.png and b/docs/img/settings_workspace_configuration.png differ diff --git a/docs/img/settings_workspace_configuration_dark.png b/docs/img/settings_workspace_configuration_dark.png new file mode 100644 index 00000000..f9beb735 Binary files /dev/null and b/docs/img/settings_workspace_configuration_dark.png differ diff --git a/docs/img/webapp_clone.png b/docs/img/webapp_clone.png index 6fa4936b..caaabf6c 100644 Binary files a/docs/img/webapp_clone.png and b/docs/img/webapp_clone.png differ diff --git a/docs/img/webapp_clone_dark.png b/docs/img/webapp_clone_dark.png new file mode 100644 index 00000000..92ef3011 Binary files /dev/null and b/docs/img/webapp_clone_dark.png differ diff --git a/docs/img/webapp_compare_05.png b/docs/img/webapp_compare_05.png index d7406a0b..44e10e1e 100644 Binary files a/docs/img/webapp_compare_05.png and b/docs/img/webapp_compare_05.png differ diff --git a/docs/img/webapp_compare_05_dark.png b/docs/img/webapp_compare_05_dark.png new file mode 100644 index 00000000..ba8bdb68 Binary files /dev/null and b/docs/img/webapp_compare_05_dark.png differ diff --git a/docs/img/webapp_compare_07.png b/docs/img/webapp_compare_07.png index ab8cc837..3945f223 100644 Binary files a/docs/img/webapp_compare_07.png and b/docs/img/webapp_compare_07.png differ diff --git a/docs/img/webapp_compare_07_dark.png b/docs/img/webapp_compare_07_dark.png new file mode 100644 index 00000000..86d144fa Binary files /dev/null and b/docs/img/webapp_compare_07_dark.png differ diff --git a/docs/img/webapp_compare_08.png b/docs/img/webapp_compare_08.png index dd8ba6a6..6161824c 100644 Binary files a/docs/img/webapp_compare_08.png and b/docs/img/webapp_compare_08.png differ diff --git a/docs/img/webapp_compare_08_dark.png b/docs/img/webapp_compare_08_dark.png new file mode 100644 index 00000000..2fee4ddc Binary files /dev/null and b/docs/img/webapp_compare_08_dark.png differ diff --git a/docs/img/webapp_compare_11.png b/docs/img/webapp_compare_11.png index 2b1e0d8a..d96082ab 100644 Binary files a/docs/img/webapp_compare_11.png and b/docs/img/webapp_compare_11.png differ diff --git a/docs/img/webapp_compare_11_dark.png b/docs/img/webapp_compare_11_dark.png new file mode 100644 index 00000000..547baa3c Binary files /dev/null and b/docs/img/webapp_compare_11_dark.png differ diff --git a/docs/img/webapp_compare_30.png b/docs/img/webapp_compare_30.png index dc18a3ba..65f5f536 100644 Binary files a/docs/img/webapp_compare_30.png and b/docs/img/webapp_compare_30.png differ diff --git a/docs/img/webapp_compare_30_dark.png b/docs/img/webapp_compare_30_dark.png new file mode 100644 index 00000000..c16b7272 Binary files /dev/null and b/docs/img/webapp_compare_30_dark.png differ diff --git a/docs/img/webapp_compare_exp_plots.png b/docs/img/webapp_compare_exp_plots.png index 2e845bb6..a990349f 100644 Binary files a/docs/img/webapp_compare_exp_plots.png and b/docs/img/webapp_compare_exp_plots.png differ diff --git a/docs/img/webapp_compare_exp_plots_dark.png b/docs/img/webapp_compare_exp_plots_dark.png new file mode 100644 index 00000000..57392c96 Binary files /dev/null and b/docs/img/webapp_compare_exp_plots_dark.png differ diff --git a/docs/img/webapp_compare_exp_scalar_vals.png b/docs/img/webapp_compare_exp_scalar_vals.png index 0af45aa4..b23d8f1f 100644 Binary files a/docs/img/webapp_compare_exp_scalar_vals.png and b/docs/img/webapp_compare_exp_scalar_vals.png differ diff --git a/docs/img/webapp_compare_exp_scalar_vals_dark.png b/docs/img/webapp_compare_exp_scalar_vals_dark.png new file mode 100644 index 00000000..6e94cc92 Binary files /dev/null and b/docs/img/webapp_compare_exp_scalar_vals_dark.png differ diff --git a/docs/img/webapp_compare_exp_select_1.png b/docs/img/webapp_compare_exp_select_1.png index fa277a24..10f5dd18 100644 Binary files a/docs/img/webapp_compare_exp_select_1.png and b/docs/img/webapp_compare_exp_select_1.png differ diff --git a/docs/img/webapp_compare_exp_select_1_dark.png b/docs/img/webapp_compare_exp_select_1_dark.png new file mode 100644 index 00000000..e951f994 Binary files /dev/null and b/docs/img/webapp_compare_exp_select_1_dark.png differ diff --git a/docs/img/webapp_compare_exp_select_2.png b/docs/img/webapp_compare_exp_select_2.png index aae9e245..46fd6aae 100644 Binary files a/docs/img/webapp_compare_exp_select_2.png and b/docs/img/webapp_compare_exp_select_2.png differ diff --git a/docs/img/webapp_compare_exp_select_2_dark.png b/docs/img/webapp_compare_exp_select_2_dark.png new file mode 100644 index 00000000..e03940fe Binary files /dev/null and b/docs/img/webapp_compare_exp_select_2_dark.png differ diff --git a/docs/img/webapp_compare_exp_single_scalars.png b/docs/img/webapp_compare_exp_single_scalars.png index 18e50c12..c0c22291 100644 Binary files a/docs/img/webapp_compare_exp_single_scalars.png and b/docs/img/webapp_compare_exp_single_scalars.png differ diff --git a/docs/img/webapp_compare_exp_single_scalars_dark.png b/docs/img/webapp_compare_exp_single_scalars_dark.png new file mode 100644 index 00000000..93e4bc96 Binary files /dev/null and b/docs/img/webapp_compare_exp_single_scalars_dark.png differ diff --git a/docs/img/webapp_compare_model_select_1.png b/docs/img/webapp_compare_model_select_1.png index 0c88d7bf..692c1e7d 100644 Binary files a/docs/img/webapp_compare_model_select_1.png and b/docs/img/webapp_compare_model_select_1.png differ diff --git a/docs/img/webapp_compare_model_select_1_dark.png b/docs/img/webapp_compare_model_select_1_dark.png new file mode 100644 index 00000000..c6421bed Binary files /dev/null and b/docs/img/webapp_compare_model_select_1_dark.png differ diff --git a/docs/img/webapp_compare_model_select_2.png b/docs/img/webapp_compare_model_select_2.png index 28206694..0595ced4 100644 Binary files a/docs/img/webapp_compare_model_select_2.png and b/docs/img/webapp_compare_model_select_2.png differ diff --git a/docs/img/webapp_compare_model_select_2_dark.png b/docs/img/webapp_compare_model_select_2_dark.png new file mode 100644 index 00000000..29577fd3 Binary files /dev/null and b/docs/img/webapp_compare_model_select_2_dark.png differ diff --git a/docs/img/webapp_compare_model_single_scalars.png b/docs/img/webapp_compare_model_single_scalars.png index 4e909cd2..f959ba4f 100644 Binary files a/docs/img/webapp_compare_model_single_scalars.png and b/docs/img/webapp_compare_model_single_scalars.png differ diff --git a/docs/img/webapp_compare_model_single_scalars_dark.png b/docs/img/webapp_compare_model_single_scalars_dark.png new file mode 100644 index 00000000..a1e949ea Binary files /dev/null and b/docs/img/webapp_compare_model_single_scalars_dark.png differ diff --git a/docs/img/webapp_compare_models_merge_plots.png b/docs/img/webapp_compare_models_merge_plots.png index d40b5322..fafdbba9 100644 Binary files a/docs/img/webapp_compare_models_merge_plots.png and b/docs/img/webapp_compare_models_merge_plots.png differ diff --git a/docs/img/webapp_compare_models_merge_plots_dark.png b/docs/img/webapp_compare_models_merge_plots_dark.png new file mode 100644 index 00000000..bf70aa7c Binary files /dev/null and b/docs/img/webapp_compare_models_merge_plots_dark.png differ diff --git a/docs/img/webapp_compare_models_scalar_table.png b/docs/img/webapp_compare_models_scalar_table.png index a79b6ba8..462a863f 100644 Binary files a/docs/img/webapp_compare_models_scalar_table.png and b/docs/img/webapp_compare_models_scalar_table.png differ diff --git a/docs/img/webapp_compare_models_scalar_table_dark.png b/docs/img/webapp_compare_models_scalar_table_dark.png new file mode 100644 index 00000000..b1c9eb9a Binary files /dev/null and b/docs/img/webapp_compare_models_scalar_table_dark.png differ diff --git a/docs/img/webapp_compare_models_side_plots.png b/docs/img/webapp_compare_models_side_plots.png index 573b0329..413d767c 100644 Binary files a/docs/img/webapp_compare_models_side_plots.png and b/docs/img/webapp_compare_models_side_plots.png differ diff --git a/docs/img/webapp_compare_models_side_plots_dark.png b/docs/img/webapp_compare_models_side_plots_dark.png new file mode 100644 index 00000000..f119f681 Binary files /dev/null and b/docs/img/webapp_compare_models_side_plots_dark.png differ diff --git a/docs/img/webapp_compare_models_text.png b/docs/img/webapp_compare_models_text.png index e1ccf640..7aef0543 100644 Binary files a/docs/img/webapp_compare_models_text.png and b/docs/img/webapp_compare_models_text.png differ diff --git a/docs/img/webapp_compare_models_text_dark.png b/docs/img/webapp_compare_models_text_dark.png new file mode 100644 index 00000000..3dc919cb Binary files /dev/null and b/docs/img/webapp_compare_models_text_dark.png differ diff --git a/docs/img/webapp_compare_models_variant_plots.png b/docs/img/webapp_compare_models_variant_plots.png new file mode 100644 index 00000000..1cc03ba2 Binary files /dev/null and b/docs/img/webapp_compare_models_variant_plots.png differ diff --git a/docs/img/webapp_compare_models_variant_plots_dark.png b/docs/img/webapp_compare_models_variant_plots_dark.png new file mode 100644 index 00000000..6daa4de3 Binary files /dev/null and b/docs/img/webapp_compare_models_variant_plots_dark.png differ diff --git a/docs/img/webapp_compare_scatter.png b/docs/img/webapp_compare_scatter.png index 2c735b04..55a6cff0 100644 Binary files a/docs/img/webapp_compare_scatter.png and b/docs/img/webapp_compare_scatter.png differ diff --git a/docs/img/webapp_compare_scatter_dark.png b/docs/img/webapp_compare_scatter_dark.png new file mode 100644 index 00000000..14b84d4b Binary files /dev/null and b/docs/img/webapp_compare_scatter_dark.png differ diff --git a/docs/img/webapp_compare_view_1.png b/docs/img/webapp_compare_view_1.png index 7734a953..8938640b 100644 Binary files a/docs/img/webapp_compare_view_1.png and b/docs/img/webapp_compare_view_1.png differ diff --git a/docs/img/webapp_compare_view_1_dark.png b/docs/img/webapp_compare_view_1_dark.png new file mode 100644 index 00000000..ad949a98 Binary files /dev/null and b/docs/img/webapp_compare_view_1_dark.png differ diff --git a/docs/img/webapp_compare_view_2.png b/docs/img/webapp_compare_view_2.png index 7a740a0e..ece04ac7 100644 Binary files a/docs/img/webapp_compare_view_2.png and b/docs/img/webapp_compare_view_2.png differ diff --git a/docs/img/webapp_compare_view_2_dark.png b/docs/img/webapp_compare_view_2_dark.png new file mode 100644 index 00000000..f467cf94 Binary files /dev/null and b/docs/img/webapp_compare_view_2_dark.png differ diff --git a/docs/img/webapp_compare_view_3.png b/docs/img/webapp_compare_view_3.png index 987fe104..975e8534 100644 Binary files a/docs/img/webapp_compare_view_3.png and b/docs/img/webapp_compare_view_3.png differ diff --git a/docs/img/webapp_compare_view_3_dark.png b/docs/img/webapp_compare_view_3_dark.png new file mode 100644 index 00000000..17292e19 Binary files /dev/null and b/docs/img/webapp_compare_view_3_dark.png differ diff --git a/docs/img/webapp_compare_view_4.png b/docs/img/webapp_compare_view_4.png index dbeb4e22..370c330d 100644 Binary files a/docs/img/webapp_compare_view_4.png and b/docs/img/webapp_compare_view_4.png differ diff --git a/docs/img/webapp_compare_view_4_dark.png b/docs/img/webapp_compare_view_4_dark.png new file mode 100644 index 00000000..920b89a3 Binary files /dev/null and b/docs/img/webapp_compare_view_4_dark.png differ diff --git a/docs/img/webapp_dashboard.png b/docs/img/webapp_dashboard.png index ff4fbf69..eaab02d1 100644 Binary files a/docs/img/webapp_dashboard.png and b/docs/img/webapp_dashboard.png differ diff --git a/docs/img/webapp_dashboard_dark.png b/docs/img/webapp_dashboard_dark.png new file mode 100644 index 00000000..a260dae2 Binary files /dev/null and b/docs/img/webapp_dashboard_dark.png differ diff --git a/docs/img/webapp_dataset_actions.png b/docs/img/webapp_dataset_actions.png index 6457cb7d..b0f4e641 100644 Binary files a/docs/img/webapp_dataset_actions.png and b/docs/img/webapp_dataset_actions.png differ diff --git a/docs/img/webapp_dataset_actions_dark.png b/docs/img/webapp_dataset_actions_dark.png new file mode 100644 index 00000000..ae637202 Binary files /dev/null and b/docs/img/webapp_dataset_actions_dark.png differ diff --git a/docs/img/webapp_dataset_card.png b/docs/img/webapp_dataset_card.png index 5aadd2ec..84c5bb58 100644 Binary files a/docs/img/webapp_dataset_card.png and b/docs/img/webapp_dataset_card.png differ diff --git a/docs/img/webapp_dataset_card_context_menu.png b/docs/img/webapp_dataset_card_context_menu.png index 6d561f53..23039350 100644 Binary files a/docs/img/webapp_dataset_card_context_menu.png and b/docs/img/webapp_dataset_card_context_menu.png differ diff --git a/docs/img/webapp_dataset_card_context_menu_dark.png b/docs/img/webapp_dataset_card_context_menu_dark.png new file mode 100644 index 00000000..b4fffd3d Binary files /dev/null and b/docs/img/webapp_dataset_card_context_menu_dark.png differ diff --git a/docs/img/webapp_dataset_card_dark.png b/docs/img/webapp_dataset_card_dark.png new file mode 100644 index 00000000..7fa442a8 Binary files /dev/null and b/docs/img/webapp_dataset_card_dark.png differ diff --git a/docs/img/webapp_dataset_console.png b/docs/img/webapp_dataset_console.png index 473be7bc..bb47f1ca 100644 Binary files a/docs/img/webapp_dataset_console.png and b/docs/img/webapp_dataset_console.png differ diff --git a/docs/img/webapp_dataset_console_dark.png b/docs/img/webapp_dataset_console_dark.png new file mode 100644 index 00000000..2aad334c Binary files /dev/null and b/docs/img/webapp_dataset_console_dark.png differ diff --git a/docs/img/webapp_dataset_content.png b/docs/img/webapp_dataset_content.png index 002dac39..9c17ba49 100644 Binary files a/docs/img/webapp_dataset_content.png and b/docs/img/webapp_dataset_content.png differ diff --git a/docs/img/webapp_dataset_content_dark.png b/docs/img/webapp_dataset_content_dark.png new file mode 100644 index 00000000..a7c5b918 Binary files /dev/null and b/docs/img/webapp_dataset_content_dark.png differ diff --git a/docs/img/webapp_dataset_lineage.png b/docs/img/webapp_dataset_lineage.png index 0bc8aaa2..35649fd7 100644 Binary files a/docs/img/webapp_dataset_lineage.png and b/docs/img/webapp_dataset_lineage.png differ diff --git a/docs/img/webapp_dataset_lineage_dark.png b/docs/img/webapp_dataset_lineage_dark.png new file mode 100644 index 00000000..855f7aa5 Binary files /dev/null and b/docs/img/webapp_dataset_lineage_dark.png differ diff --git a/docs/img/webapp_dataset_lineage_preview.png b/docs/img/webapp_dataset_lineage_preview.png deleted file mode 100644 index d560dc05..00000000 Binary files a/docs/img/webapp_dataset_lineage_preview.png and /dev/null differ diff --git a/docs/img/webapp_dataset_node.png b/docs/img/webapp_dataset_node.png index d4fde890..922bede9 100644 Binary files a/docs/img/webapp_dataset_node.png and b/docs/img/webapp_dataset_node.png differ diff --git a/docs/img/webapp_dataset_node_dark.png b/docs/img/webapp_dataset_node_dark.png new file mode 100644 index 00000000..8d95f5c7 Binary files /dev/null and b/docs/img/webapp_dataset_node_dark.png differ diff --git a/docs/img/webapp_dataset_page.png b/docs/img/webapp_dataset_page.png index 8f981238..aad7cee5 100644 Binary files a/docs/img/webapp_dataset_page.png and b/docs/img/webapp_dataset_page.png differ diff --git a/docs/img/webapp_dataset_page_dark.png b/docs/img/webapp_dataset_page_dark.png new file mode 100644 index 00000000..d8687e1b Binary files /dev/null and b/docs/img/webapp_dataset_page_dark.png differ diff --git a/docs/img/webapp_dataset_preview.png b/docs/img/webapp_dataset_preview.png index 258f75c5..333a8ef0 100644 Binary files a/docs/img/webapp_dataset_preview.png and b/docs/img/webapp_dataset_preview.png differ diff --git a/docs/img/webapp_dataset_preview_dark.png b/docs/img/webapp_dataset_preview_dark.png new file mode 100644 index 00000000..9cf5cd1e Binary files /dev/null and b/docs/img/webapp_dataset_preview_dark.png differ diff --git a/docs/img/webapp_dataset_project_card.png b/docs/img/webapp_dataset_project_card.png index c40733d8..d6edbd18 100644 Binary files a/docs/img/webapp_dataset_project_card.png and b/docs/img/webapp_dataset_project_card.png differ diff --git a/docs/img/webapp_dataset_project_card_dark.png b/docs/img/webapp_dataset_project_card_dark.png new file mode 100644 index 00000000..eb0932a7 Binary files /dev/null and b/docs/img/webapp_dataset_project_card_dark.png differ diff --git a/docs/img/webapp_dataset_task_page.png b/docs/img/webapp_dataset_task_page.png index 2a7480c0..5842b0d8 100644 Binary files a/docs/img/webapp_dataset_task_page.png and b/docs/img/webapp_dataset_task_page.png differ diff --git a/docs/img/webapp_dataset_task_page_dark.png b/docs/img/webapp_dataset_task_page_dark.png new file mode 100644 index 00000000..810986a1 Binary files /dev/null and b/docs/img/webapp_dataset_task_page_dark.png differ diff --git a/docs/img/webapp_dataset_version_info.png b/docs/img/webapp_dataset_version_info.png index 25e8e67d..ecfdc09a 100644 Binary files a/docs/img/webapp_dataset_version_info.png and b/docs/img/webapp_dataset_version_info.png differ diff --git a/docs/img/webapp_dataset_version_info_dark.png b/docs/img/webapp_dataset_version_info_dark.png new file mode 100644 index 00000000..c4eb46bd Binary files /dev/null and b/docs/img/webapp_dataset_version_info_dark.png differ diff --git a/docs/img/webapp_dataview_new.png b/docs/img/webapp_dataview_new.png deleted file mode 100644 index 9b86e1cb..00000000 Binary files a/docs/img/webapp_dataview_new.png and /dev/null differ diff --git a/docs/img/webapp_exp_artifacts_01.png b/docs/img/webapp_exp_artifacts_01.png index 5452e06c..8dc55994 100644 Binary files a/docs/img/webapp_exp_artifacts_01.png and b/docs/img/webapp_exp_artifacts_01.png differ diff --git a/docs/img/webapp_exp_artifacts_01_dark.png b/docs/img/webapp_exp_artifacts_01_dark.png new file mode 100644 index 00000000..339ad216 Binary files /dev/null and b/docs/img/webapp_exp_artifacts_01_dark.png differ diff --git a/docs/img/webapp_exp_container.png b/docs/img/webapp_exp_container.png index de34d7cc..92c8b892 100644 Binary files a/docs/img/webapp_exp_container.png and b/docs/img/webapp_exp_container.png differ diff --git a/docs/img/webapp_exp_container_dark.png b/docs/img/webapp_exp_container_dark.png new file mode 100644 index 00000000..2fe71940 Binary files /dev/null and b/docs/img/webapp_exp_container_dark.png differ diff --git a/docs/img/webapp_exp_installed_packages.png b/docs/img/webapp_exp_installed_packages.png index 99942c7e..01338394 100644 Binary files a/docs/img/webapp_exp_installed_packages.png and b/docs/img/webapp_exp_installed_packages.png differ diff --git a/docs/img/webapp_exp_installed_packages_2.png b/docs/img/webapp_exp_installed_packages_2.png new file mode 100644 index 00000000..d1d700c4 Binary files /dev/null and b/docs/img/webapp_exp_installed_packages_2.png differ diff --git a/docs/img/webapp_exp_installed_packages_2.png.png b/docs/img/webapp_exp_installed_packages_2.png.png deleted file mode 100644 index ade1dc41..00000000 Binary files a/docs/img/webapp_exp_installed_packages_2.png.png and /dev/null differ diff --git a/docs/img/webapp_exp_installed_packages_2_dark.png b/docs/img/webapp_exp_installed_packages_2_dark.png new file mode 100644 index 00000000..1d6744c3 Binary files /dev/null and b/docs/img/webapp_exp_installed_packages_2_dark.png differ diff --git a/docs/img/webapp_exp_installed_packages_dark.png b/docs/img/webapp_exp_installed_packages_dark.png new file mode 100644 index 00000000..20e4490a Binary files /dev/null and b/docs/img/webapp_exp_installed_packages_dark.png differ diff --git a/docs/img/webapp_exp_output.png b/docs/img/webapp_exp_output.png index f250933b..bad23e3d 100644 Binary files a/docs/img/webapp_exp_output.png and b/docs/img/webapp_exp_output.png differ diff --git a/docs/img/webapp_exp_output_dark.png b/docs/img/webapp_exp_output_dark.png new file mode 100644 index 00000000..27d3eec0 Binary files /dev/null and b/docs/img/webapp_exp_output_dark.png differ diff --git a/docs/img/webapp_exp_source_code.png b/docs/img/webapp_exp_source_code.png index 96aaa3bb..90c8f7e5 100644 Binary files a/docs/img/webapp_exp_source_code.png and b/docs/img/webapp_exp_source_code.png differ diff --git a/docs/img/webapp_exp_source_code_dark.png b/docs/img/webapp_exp_source_code_dark.png new file mode 100644 index 00000000..9a56a4c0 Binary files /dev/null and b/docs/img/webapp_exp_source_code_dark.png differ diff --git a/docs/img/webapp_exp_table_sharing.png b/docs/img/webapp_exp_table_sharing.png index 497f7cd9..ae45b14f 100644 Binary files a/docs/img/webapp_exp_table_sharing.png and b/docs/img/webapp_exp_table_sharing.png differ diff --git a/docs/img/webapp_exp_table_sharing_dark.png b/docs/img/webapp_exp_table_sharing_dark.png new file mode 100644 index 00000000..7eb61353 Binary files /dev/null and b/docs/img/webapp_exp_table_sharing_dark.png differ diff --git a/docs/img/webapp_exp_uncommitted_changes.png b/docs/img/webapp_exp_uncommitted_changes.png index 965ef505..83c9d7ee 100644 Binary files a/docs/img/webapp_exp_uncommitted_changes.png and b/docs/img/webapp_exp_uncommitted_changes.png differ diff --git a/docs/img/webapp_exp_uncommitted_changes_dark.png b/docs/img/webapp_exp_uncommitted_changes_dark.png new file mode 100644 index 00000000..50fd8679 Binary files /dev/null and b/docs/img/webapp_exp_uncommitted_changes_dark.png differ diff --git a/docs/img/webapp_experiment_table.png b/docs/img/webapp_experiment_table.png index 2fb35a8d..7623f945 100644 Binary files a/docs/img/webapp_experiment_table.png and b/docs/img/webapp_experiment_table.png differ diff --git a/docs/img/webapp_experiment_table_context_menu.png b/docs/img/webapp_experiment_table_context_menu.png index 660a3b08..715f03b2 100644 Binary files a/docs/img/webapp_experiment_table_context_menu.png and b/docs/img/webapp_experiment_table_context_menu.png differ diff --git a/docs/img/webapp_experiment_table_context_menu_dark.png b/docs/img/webapp_experiment_table_context_menu_dark.png new file mode 100644 index 00000000..e0bd1c4e Binary files /dev/null and b/docs/img/webapp_experiment_table_context_menu_dark.png differ diff --git a/docs/img/webapp_experiment_table_dark.png b/docs/img/webapp_experiment_table_dark.png new file mode 100644 index 00000000..2b3544a7 Binary files /dev/null and b/docs/img/webapp_experiment_table_dark.png differ diff --git a/docs/img/webapp_hyperdataset_card_context_menu.png b/docs/img/webapp_hyperdataset_card_context_menu.png deleted file mode 100644 index 1dc411bc..00000000 Binary files a/docs/img/webapp_hyperdataset_card_context_menu.png and /dev/null differ diff --git a/docs/img/webapp_hyperdataset_creation.png b/docs/img/webapp_hyperdataset_creation.png deleted file mode 100644 index 9748aa59..00000000 Binary files a/docs/img/webapp_hyperdataset_creation.png and /dev/null differ diff --git a/docs/img/webapp_info_audit_log.png b/docs/img/webapp_info_audit_log.png index ab8df3a7..3016704b 100644 Binary files a/docs/img/webapp_info_audit_log.png and b/docs/img/webapp_info_audit_log.png differ diff --git a/docs/img/webapp_info_audit_log_dark.png b/docs/img/webapp_info_audit_log_dark.png new file mode 100644 index 00000000..b788fc2b Binary files /dev/null and b/docs/img/webapp_info_audit_log_dark.png differ diff --git a/docs/img/webapp_metric_snapshot_selection.png b/docs/img/webapp_metric_snapshot_selection.png index 2181136f..bd6ac4d5 100644 Binary files a/docs/img/webapp_metric_snapshot_selection.png and b/docs/img/webapp_metric_snapshot_selection.png differ diff --git a/docs/img/webapp_metric_snapshot_selection_dark.png b/docs/img/webapp_metric_snapshot_selection_dark.png new file mode 100644 index 00000000..699592d6 Binary files /dev/null and b/docs/img/webapp_metric_snapshot_selection_dark.png differ diff --git a/docs/img/webapp_model_config_actions.png b/docs/img/webapp_model_config_actions.png index 1ea67f11..1f5a4f47 100644 Binary files a/docs/img/webapp_model_config_actions.png and b/docs/img/webapp_model_config_actions.png differ diff --git a/docs/img/webapp_model_config_actions_dark.png b/docs/img/webapp_model_config_actions_dark.png new file mode 100644 index 00000000..d6a07dbc Binary files /dev/null and b/docs/img/webapp_model_config_actions_dark.png differ diff --git a/docs/img/webapp_model_endpoints_active_table.png b/docs/img/webapp_model_endpoints_active_table.png index 7afd4104..e1f702f2 100644 Binary files a/docs/img/webapp_model_endpoints_active_table.png and b/docs/img/webapp_model_endpoints_active_table.png differ diff --git a/docs/img/webapp_model_endpoints_active_table_dark.png b/docs/img/webapp_model_endpoints_active_table_dark.png new file mode 100644 index 00000000..584437fd Binary files /dev/null and b/docs/img/webapp_model_endpoints_active_table_dark.png differ diff --git a/docs/img/webapp_model_endpoints_details.png b/docs/img/webapp_model_endpoints_details.png index 46cdf3f0..2797c6f5 100644 Binary files a/docs/img/webapp_model_endpoints_details.png and b/docs/img/webapp_model_endpoints_details.png differ diff --git a/docs/img/webapp_model_endpoints_details_dark.png b/docs/img/webapp_model_endpoints_details_dark.png new file mode 100644 index 00000000..c8528f9d Binary files /dev/null and b/docs/img/webapp_model_endpoints_details_dark.png differ diff --git a/docs/img/webapp_model_endpoints_loading_table.png b/docs/img/webapp_model_endpoints_loading_table.png index cc933a97..daeed96c 100644 Binary files a/docs/img/webapp_model_endpoints_loading_table.png and b/docs/img/webapp_model_endpoints_loading_table.png differ diff --git a/docs/img/webapp_model_endpoints_loading_table_dark.png b/docs/img/webapp_model_endpoints_loading_table_dark.png new file mode 100644 index 00000000..5c628166 Binary files /dev/null and b/docs/img/webapp_model_endpoints_loading_table_dark.png differ diff --git a/docs/img/webapp_model_endpoints_monitor.png b/docs/img/webapp_model_endpoints_monitor.png index 6b00b713..d48135c5 100644 Binary files a/docs/img/webapp_model_endpoints_monitor.png and b/docs/img/webapp_model_endpoints_monitor.png differ diff --git a/docs/img/webapp_model_endpoints_monitor_dark.png b/docs/img/webapp_model_endpoints_monitor_dark.png new file mode 100644 index 00000000..9e382348 Binary files /dev/null and b/docs/img/webapp_model_endpoints_monitor_dark.png differ diff --git a/docs/img/webapp_model_general.png b/docs/img/webapp_model_general.png index 5d604c5c..2931f90f 100644 Binary files a/docs/img/webapp_model_general.png and b/docs/img/webapp_model_general.png differ diff --git a/docs/img/webapp_model_general_dark.png b/docs/img/webapp_model_general_dark.png new file mode 100644 index 00000000..37225ece Binary files /dev/null and b/docs/img/webapp_model_general_dark.png differ diff --git a/docs/img/webapp_model_labels.png b/docs/img/webapp_model_labels.png index 3eba3e7e..49eb5eca 100644 Binary files a/docs/img/webapp_model_labels.png and b/docs/img/webapp_model_labels.png differ diff --git a/docs/img/webapp_model_labels_dark.png b/docs/img/webapp_model_labels_dark.png new file mode 100644 index 00000000..9f08eac5 Binary files /dev/null and b/docs/img/webapp_model_labels_dark.png differ diff --git a/docs/img/webapp_model_labels_edit.png b/docs/img/webapp_model_labels_edit.png index 888f4d1f..14cea905 100644 Binary files a/docs/img/webapp_model_labels_edit.png and b/docs/img/webapp_model_labels_edit.png differ diff --git a/docs/img/webapp_model_labels_edit_dark.png b/docs/img/webapp_model_labels_edit_dark.png new file mode 100644 index 00000000..2fa0969c Binary files /dev/null and b/docs/img/webapp_model_labels_edit_dark.png differ diff --git a/docs/img/webapp_model_lineage.png b/docs/img/webapp_model_lineage.png index fd07c6e4..6f44bbbc 100644 Binary files a/docs/img/webapp_model_lineage.png and b/docs/img/webapp_model_lineage.png differ diff --git a/docs/img/webapp_model_lineage_dark.png b/docs/img/webapp_model_lineage_dark.png new file mode 100644 index 00000000..bcde9ed9 Binary files /dev/null and b/docs/img/webapp_model_lineage_dark.png differ diff --git a/docs/img/webapp_model_metadata.png b/docs/img/webapp_model_metadata.png index 63d220bf..0779c1a9 100644 Binary files a/docs/img/webapp_model_metadata.png and b/docs/img/webapp_model_metadata.png differ diff --git a/docs/img/webapp_model_metadata_dark.png b/docs/img/webapp_model_metadata_dark.png new file mode 100644 index 00000000..7fa3c038 Binary files /dev/null and b/docs/img/webapp_model_metadata_dark.png differ diff --git a/docs/img/webapp_model_metadata_edit.png b/docs/img/webapp_model_metadata_edit.png index bf14d387..838cacd3 100644 Binary files a/docs/img/webapp_model_metadata_edit.png and b/docs/img/webapp_model_metadata_edit.png differ diff --git a/docs/img/webapp_model_metadata_edit_dark.png b/docs/img/webapp_model_metadata_edit_dark.png new file mode 100644 index 00000000..b18fd060 Binary files /dev/null and b/docs/img/webapp_model_metadata_edit_dark.png differ diff --git a/docs/img/webapp_model_network.png b/docs/img/webapp_model_network.png index 8e3a8892..c93e3564 100644 Binary files a/docs/img/webapp_model_network.png and b/docs/img/webapp_model_network.png differ diff --git a/docs/img/webapp_model_network_dark.png b/docs/img/webapp_model_network_dark.png new file mode 100644 index 00000000..433f0a67 Binary files /dev/null and b/docs/img/webapp_model_network_dark.png differ diff --git a/docs/img/webapp_model_plots.png b/docs/img/webapp_model_plots.png index c773f47d..aa836d62 100644 Binary files a/docs/img/webapp_model_plots.png and b/docs/img/webapp_model_plots.png differ diff --git a/docs/img/webapp_model_plots_dark.png b/docs/img/webapp_model_plots_dark.png new file mode 100644 index 00000000..3b2b7f6b Binary files /dev/null and b/docs/img/webapp_model_plots_dark.png differ diff --git a/docs/img/webapp_model_scalars.png b/docs/img/webapp_model_scalars.png index 911380d1..7cb02d5a 100644 Binary files a/docs/img/webapp_model_scalars.png and b/docs/img/webapp_model_scalars.png differ diff --git a/docs/img/webapp_model_scalars_dark.png b/docs/img/webapp_model_scalars_dark.png new file mode 100644 index 00000000..21fc7fb5 Binary files /dev/null and b/docs/img/webapp_model_scalars_dark.png differ diff --git a/docs/img/webapp_models_01.png b/docs/img/webapp_models_01.png index 4275c006..e583646a 100644 Binary files a/docs/img/webapp_models_01.png and b/docs/img/webapp_models_01.png differ diff --git a/docs/img/webapp_models_01_dark.png b/docs/img/webapp_models_01_dark.png new file mode 100644 index 00000000..0015d16b Binary files /dev/null and b/docs/img/webapp_models_01_dark.png differ diff --git a/docs/img/webapp_models_table_batch_operations.png b/docs/img/webapp_models_table_batch_operations.png index 0102521a..eb578f5f 100644 Binary files a/docs/img/webapp_models_table_batch_operations.png and b/docs/img/webapp_models_table_batch_operations.png differ diff --git a/docs/img/webapp_models_table_batch_operations_dark.png b/docs/img/webapp_models_table_batch_operations_dark.png new file mode 100644 index 00000000..1b4581fe Binary files /dev/null and b/docs/img/webapp_models_table_batch_operations_dark.png differ diff --git a/docs/img/webapp_orch_dash_resource_group_info.png b/docs/img/webapp_orch_dash_resource_group_info.png index ef20cebb..805f89fd 100644 Binary files a/docs/img/webapp_orch_dash_resource_group_info.png and b/docs/img/webapp_orch_dash_resource_group_info.png differ diff --git a/docs/img/webapp_orch_dash_resource_group_info_dark.png b/docs/img/webapp_orch_dash_resource_group_info_dark.png new file mode 100644 index 00000000..6fa941ff Binary files /dev/null and b/docs/img/webapp_orch_dash_resource_group_info_dark.png differ diff --git a/docs/img/webapp_orch_dash_resource_groups.png b/docs/img/webapp_orch_dash_resource_groups.png index 8d6ecf6a..0b4933ba 100644 Binary files a/docs/img/webapp_orch_dash_resource_groups.png and b/docs/img/webapp_orch_dash_resource_groups.png differ diff --git a/docs/img/webapp_orch_dash_resource_groups_dark.png b/docs/img/webapp_orch_dash_resource_groups_dark.png new file mode 100644 index 00000000..b6a53bce Binary files /dev/null and b/docs/img/webapp_orch_dash_resource_groups_dark.png differ diff --git a/docs/img/webapp_orch_dash_threshold_modal.png b/docs/img/webapp_orch_dash_threshold_modal.png index 06577a0d..7a97d252 100644 Binary files a/docs/img/webapp_orch_dash_threshold_modal.png and b/docs/img/webapp_orch_dash_threshold_modal.png differ diff --git a/docs/img/webapp_orch_dash_threshold_modal_dark.png b/docs/img/webapp_orch_dash_threshold_modal_dark.png new file mode 100644 index 00000000..7c73cf0c Binary files /dev/null and b/docs/img/webapp_orch_dash_threshold_modal_dark.png differ diff --git a/docs/img/webapp_orchestration_autoscalers.png b/docs/img/webapp_orchestration_autoscalers.png index 051a092c..21de7dc0 100644 Binary files a/docs/img/webapp_orchestration_autoscalers.png and b/docs/img/webapp_orchestration_autoscalers.png differ diff --git a/docs/img/webapp_orchestration_autoscalers_dark.png b/docs/img/webapp_orchestration_autoscalers_dark.png new file mode 100644 index 00000000..1eafd5ac Binary files /dev/null and b/docs/img/webapp_orchestration_autoscalers_dark.png differ diff --git a/docs/img/webapp_orchestration_dash.png b/docs/img/webapp_orchestration_dash.png index 212b307d..331c16b8 100644 Binary files a/docs/img/webapp_orchestration_dash.png and b/docs/img/webapp_orchestration_dash.png differ diff --git a/docs/img/webapp_orchestration_dash_dark.png b/docs/img/webapp_orchestration_dash_dark.png new file mode 100644 index 00000000..f8d8c83d Binary files /dev/null and b/docs/img/webapp_orchestration_dash_dark.png differ diff --git a/docs/img/webapp_pipeline_DAG.png b/docs/img/webapp_pipeline_DAG.png index ec196a8c..c8f76777 100644 Binary files a/docs/img/webapp_pipeline_DAG.png and b/docs/img/webapp_pipeline_DAG.png differ diff --git a/docs/img/webapp_pipeline_DAG_collapsed.png b/docs/img/webapp_pipeline_DAG_collapsed.png new file mode 100644 index 00000000..cb122729 Binary files /dev/null and b/docs/img/webapp_pipeline_DAG_collapsed.png differ diff --git a/docs/img/webapp_pipeline_DAG_collapsed_dark.png b/docs/img/webapp_pipeline_DAG_collapsed_dark.png new file mode 100644 index 00000000..9830a8a9 Binary files /dev/null and b/docs/img/webapp_pipeline_DAG_collapsed_dark.png differ diff --git a/docs/img/webapp_pipeline_DAG_dark.png b/docs/img/webapp_pipeline_DAG_dark.png new file mode 100644 index 00000000..ceebb784 Binary files /dev/null and b/docs/img/webapp_pipeline_DAG_dark.png differ diff --git a/docs/img/webapp_pipeline_card.png b/docs/img/webapp_pipeline_card.png index 69a59aff..4708ce5f 100644 Binary files a/docs/img/webapp_pipeline_card.png and b/docs/img/webapp_pipeline_card.png differ diff --git a/docs/img/webapp_pipeline_card_dark.png b/docs/img/webapp_pipeline_card_dark.png new file mode 100644 index 00000000..6b1defc9 Binary files /dev/null and b/docs/img/webapp_pipeline_card_dark.png differ diff --git a/docs/img/webapp_pipeline_context_menu.png b/docs/img/webapp_pipeline_context_menu.png index 7cb7bf1d..1155dd68 100644 Binary files a/docs/img/webapp_pipeline_context_menu.png and b/docs/img/webapp_pipeline_context_menu.png differ diff --git a/docs/img/webapp_pipeline_context_menu_dark.png b/docs/img/webapp_pipeline_context_menu_dark.png new file mode 100644 index 00000000..c983ba25 Binary files /dev/null and b/docs/img/webapp_pipeline_context_menu_dark.png differ diff --git a/docs/img/webapp_pipeline_new_run.png b/docs/img/webapp_pipeline_new_run.png index c9514e88..dbcc4a5b 100644 Binary files a/docs/img/webapp_pipeline_new_run.png and b/docs/img/webapp_pipeline_new_run.png differ diff --git a/docs/img/webapp_pipeline_new_run_dark.png b/docs/img/webapp_pipeline_new_run_dark.png new file mode 100644 index 00000000..ae003711 Binary files /dev/null and b/docs/img/webapp_pipeline_new_run_dark.png differ diff --git a/docs/img/webapp_pipeline_node.png b/docs/img/webapp_pipeline_node.png index 5f8bc346..2806f2c0 100644 Binary files a/docs/img/webapp_pipeline_node.png and b/docs/img/webapp_pipeline_node.png differ diff --git a/docs/img/webapp_pipeline_node_dark.png b/docs/img/webapp_pipeline_node_dark.png new file mode 100644 index 00000000..9a5d1f85 Binary files /dev/null and b/docs/img/webapp_pipeline_node_dark.png differ diff --git a/docs/img/webapp_pipeline_project_card.png b/docs/img/webapp_pipeline_project_card.png index 77ae1d8a..545a2d78 100644 Binary files a/docs/img/webapp_pipeline_project_card.png and b/docs/img/webapp_pipeline_project_card.png differ diff --git a/docs/img/webapp_pipeline_project_card_dark.png b/docs/img/webapp_pipeline_project_card_dark.png new file mode 100644 index 00000000..a65da15e Binary files /dev/null and b/docs/img/webapp_pipeline_project_card_dark.png differ diff --git a/docs/img/webapp_pipeline_run_info.png b/docs/img/webapp_pipeline_run_info.png index 3f0e811d..f56ec188 100644 Binary files a/docs/img/webapp_pipeline_run_info.png and b/docs/img/webapp_pipeline_run_info.png differ diff --git a/docs/img/webapp_pipeline_run_info_dark.png b/docs/img/webapp_pipeline_run_info_dark.png new file mode 100644 index 00000000..e346e130 Binary files /dev/null and b/docs/img/webapp_pipeline_run_info_dark.png differ diff --git a/docs/img/webapp_pipeline_runs_table.png b/docs/img/webapp_pipeline_runs_table.png index e7a784a1..8c18e850 100644 Binary files a/docs/img/webapp_pipeline_runs_table.png and b/docs/img/webapp_pipeline_runs_table.png differ diff --git a/docs/img/webapp_pipeline_runs_table_dark.png b/docs/img/webapp_pipeline_runs_table_dark.png new file mode 100644 index 00000000..d3ab9102 Binary files /dev/null and b/docs/img/webapp_pipeline_runs_table_dark.png differ diff --git a/docs/img/webapp_pipeline_stage_card.png b/docs/img/webapp_pipeline_stage_card.png new file mode 100644 index 00000000..387a9889 Binary files /dev/null and b/docs/img/webapp_pipeline_stage_card.png differ diff --git a/docs/img/webapp_pipeline_stage_card_dark.png b/docs/img/webapp_pipeline_stage_card_dark.png new file mode 100644 index 00000000..f215fec3 Binary files /dev/null and b/docs/img/webapp_pipeline_stage_card_dark.png differ diff --git a/docs/img/webapp_pipeline_stage_info.png b/docs/img/webapp_pipeline_stage_info.png new file mode 100644 index 00000000..33124eaa Binary files /dev/null and b/docs/img/webapp_pipeline_stage_info.png differ diff --git a/docs/img/webapp_pipeline_stage_info_dark.png b/docs/img/webapp_pipeline_stage_info_dark.png new file mode 100644 index 00000000..14aba241 Binary files /dev/null and b/docs/img/webapp_pipeline_stage_info_dark.png differ diff --git a/docs/img/webapp_pipeline_step_code.png b/docs/img/webapp_pipeline_step_code.png index 6c386d3f..cb2ec190 100644 Binary files a/docs/img/webapp_pipeline_step_code.png and b/docs/img/webapp_pipeline_step_code.png differ diff --git a/docs/img/webapp_pipeline_step_code_dark.png b/docs/img/webapp_pipeline_step_code_dark.png new file mode 100644 index 00000000..57303490 Binary files /dev/null and b/docs/img/webapp_pipeline_step_code_dark.png differ diff --git a/docs/img/webapp_pipeline_step_console.png b/docs/img/webapp_pipeline_step_console.png index 23571a0c..e0a87c30 100644 Binary files a/docs/img/webapp_pipeline_step_console.png and b/docs/img/webapp_pipeline_step_console.png differ diff --git a/docs/img/webapp_pipeline_step_console_dark.png b/docs/img/webapp_pipeline_step_console_dark.png new file mode 100644 index 00000000..9c2ea138 Binary files /dev/null and b/docs/img/webapp_pipeline_step_console_dark.png differ diff --git a/docs/img/webapp_pipeline_step_debug.png b/docs/img/webapp_pipeline_step_debug.png index 13385004..9b0454d8 100644 Binary files a/docs/img/webapp_pipeline_step_debug.png and b/docs/img/webapp_pipeline_step_debug.png differ diff --git a/docs/img/webapp_pipeline_step_debug_dark.png b/docs/img/webapp_pipeline_step_debug_dark.png new file mode 100644 index 00000000..1d468924 Binary files /dev/null and b/docs/img/webapp_pipeline_step_debug_dark.png differ diff --git a/docs/img/webapp_pipeline_step_info.png b/docs/img/webapp_pipeline_step_info.png index ba7b0290..3677776f 100644 Binary files a/docs/img/webapp_pipeline_step_info.png and b/docs/img/webapp_pipeline_step_info.png differ diff --git a/docs/img/webapp_pipeline_step_info_dark.png b/docs/img/webapp_pipeline_step_info_dark.png new file mode 100644 index 00000000..92156e94 Binary files /dev/null and b/docs/img/webapp_pipeline_step_info_dark.png differ diff --git a/docs/img/webapp_pipeline_table.png b/docs/img/webapp_pipeline_table.png index ac7ffdf3..540362eb 100644 Binary files a/docs/img/webapp_pipeline_table.png and b/docs/img/webapp_pipeline_table.png differ diff --git a/docs/img/webapp_pipeline_table_dark.png b/docs/img/webapp_pipeline_table_dark.png new file mode 100644 index 00000000..8a481462 Binary files /dev/null and b/docs/img/webapp_pipeline_table_dark.png differ diff --git a/docs/img/webapp_pipeline_task_info.png b/docs/img/webapp_pipeline_task_info.png index 2fffa127..2f4e3f7d 100644 Binary files a/docs/img/webapp_pipeline_task_info.png and b/docs/img/webapp_pipeline_task_info.png differ diff --git a/docs/img/webapp_pipeline_task_info_dark.png b/docs/img/webapp_pipeline_task_info_dark.png new file mode 100644 index 00000000..9e5fec60 Binary files /dev/null and b/docs/img/webapp_pipeline_task_info_dark.png differ diff --git a/docs/img/webapp_pipelines_context_menu.png b/docs/img/webapp_pipelines_context_menu.png index 3276fde0..a7461d8f 100644 Binary files a/docs/img/webapp_pipelines_context_menu.png and b/docs/img/webapp_pipelines_context_menu.png differ diff --git a/docs/img/webapp_pipelines_context_menu_dark.png b/docs/img/webapp_pipelines_context_menu_dark.png new file mode 100644 index 00000000..be4ab057 Binary files /dev/null and b/docs/img/webapp_pipelines_context_menu_dark.png differ diff --git a/docs/img/webapp_project_card.png b/docs/img/webapp_project_card.png index 97c69804..58e710a1 100644 Binary files a/docs/img/webapp_project_card.png and b/docs/img/webapp_project_card.png differ diff --git a/docs/img/webapp_project_card_dark.png b/docs/img/webapp_project_card_dark.png new file mode 100644 index 00000000..cb063b1b Binary files /dev/null and b/docs/img/webapp_project_card_dark.png differ diff --git a/docs/img/webapp_project_overview.png b/docs/img/webapp_project_overview.png new file mode 100644 index 00000000..527ae41e Binary files /dev/null and b/docs/img/webapp_project_overview.png differ diff --git a/docs/img/webapp_project_overview_dark.png b/docs/img/webapp_project_overview_dark.png new file mode 100644 index 00000000..91b74499 Binary files /dev/null and b/docs/img/webapp_project_overview_dark.png differ diff --git a/docs/img/webapp_project_page.png b/docs/img/webapp_project_page.png index b70d0f0e..598fd857 100644 Binary files a/docs/img/webapp_project_page.png and b/docs/img/webapp_project_page.png differ diff --git a/docs/img/webapp_project_page_dark.png b/docs/img/webapp_project_page_dark.png new file mode 100644 index 00000000..9d597141 Binary files /dev/null and b/docs/img/webapp_project_page_dark.png differ diff --git a/docs/img/webapp_projects_context_menu.png b/docs/img/webapp_projects_context_menu.png index 8f24d301..7b04d2cc 100644 Binary files a/docs/img/webapp_projects_context_menu.png and b/docs/img/webapp_projects_context_menu.png differ diff --git a/docs/img/webapp_projects_context_menu_dark.png b/docs/img/webapp_projects_context_menu_dark.png new file mode 100644 index 00000000..2917f67b Binary files /dev/null and b/docs/img/webapp_projects_context_menu_dark.png differ diff --git a/docs/img/webapp_projects_new_project.png b/docs/img/webapp_projects_new_project.png index 5fa31dc8..169c04f1 100644 Binary files a/docs/img/webapp_projects_new_project.png and b/docs/img/webapp_projects_new_project.png differ diff --git a/docs/img/webapp_projects_new_project_dark.png b/docs/img/webapp_projects_new_project_dark.png new file mode 100644 index 00000000..b2905df7 Binary files /dev/null and b/docs/img/webapp_projects_new_project_dark.png differ diff --git a/docs/img/webapp_report.png b/docs/img/webapp_report.png index 68ee9bc8..1cbf02df 100644 Binary files a/docs/img/webapp_report.png and b/docs/img/webapp_report.png differ diff --git a/docs/img/webapp_report_card.png b/docs/img/webapp_report_card.png index a49c4843..7087d884 100644 Binary files a/docs/img/webapp_report_card.png and b/docs/img/webapp_report_card.png differ diff --git a/docs/img/webapp_report_card_context_menu.png b/docs/img/webapp_report_card_context_menu.png index 60d067d5..ca52dcbd 100644 Binary files a/docs/img/webapp_report_card_context_menu.png and b/docs/img/webapp_report_card_context_menu.png differ diff --git a/docs/img/webapp_report_card_context_menu_dark.png b/docs/img/webapp_report_card_context_menu_dark.png new file mode 100644 index 00000000..9b8ff511 Binary files /dev/null and b/docs/img/webapp_report_card_context_menu_dark.png differ diff --git a/docs/img/webapp_report_card_dark.png b/docs/img/webapp_report_card_dark.png new file mode 100644 index 00000000..45bd61ee Binary files /dev/null and b/docs/img/webapp_report_card_dark.png differ diff --git a/docs/img/webapp_report_dark.png b/docs/img/webapp_report_dark.png new file mode 100644 index 00000000..2e3ff5a7 Binary files /dev/null and b/docs/img/webapp_report_dark.png differ diff --git a/docs/img/webapp_report_new_report.png b/docs/img/webapp_report_new_report.png index 0cce0063..50188854 100644 Binary files a/docs/img/webapp_report_new_report.png and b/docs/img/webapp_report_new_report.png differ diff --git a/docs/img/webapp_report_new_report_dark.png b/docs/img/webapp_report_new_report_dark.png new file mode 100644 index 00000000..e9f72cea Binary files /dev/null and b/docs/img/webapp_report_new_report_dark.png differ diff --git a/docs/img/webapp_report_page.png b/docs/img/webapp_report_page.png index c6153a21..65e673d8 100644 Binary files a/docs/img/webapp_report_page.png and b/docs/img/webapp_report_page.png differ diff --git a/docs/img/webapp_report_page_dark.png b/docs/img/webapp_report_page_dark.png new file mode 100644 index 00000000..168f1959 Binary files /dev/null and b/docs/img/webapp_report_page_dark.png differ diff --git a/docs/img/webapp_report_project_card.png b/docs/img/webapp_report_project_card.png index 6e7cfe4e..eac46dee 100644 Binary files a/docs/img/webapp_report_project_card.png and b/docs/img/webapp_report_project_card.png differ diff --git a/docs/img/webapp_report_project_card_dark.png b/docs/img/webapp_report_project_card_dark.png new file mode 100644 index 00000000..c2fe88f6 Binary files /dev/null and b/docs/img/webapp_report_project_card_dark.png differ diff --git a/docs/img/webapp_reset.png b/docs/img/webapp_reset.png index bff84115..5a4df3a1 100644 Binary files a/docs/img/webapp_reset.png and b/docs/img/webapp_reset.png differ diff --git a/docs/img/webapp_reset_dark.png b/docs/img/webapp_reset_dark.png new file mode 100644 index 00000000..31bfe1cb Binary files /dev/null and b/docs/img/webapp_reset_dark.png differ diff --git a/docs/img/webapp_settings_storage_credentials.png b/docs/img/webapp_settings_storage_credentials.png index cacc99cc..f5cae25b 100644 Binary files a/docs/img/webapp_settings_storage_credentials.png and b/docs/img/webapp_settings_storage_credentials.png differ diff --git a/docs/img/webapp_settings_storage_credentials_dark.png b/docs/img/webapp_settings_storage_credentials_dark.png new file mode 100644 index 00000000..83396713 Binary files /dev/null and b/docs/img/webapp_settings_storage_credentials_dark.png differ diff --git a/docs/img/webapp_single_scalar_plot.png b/docs/img/webapp_single_scalar_plot.png index 4fdf65b0..77b1184f 100644 Binary files a/docs/img/webapp_single_scalar_plot.png and b/docs/img/webapp_single_scalar_plot.png differ diff --git a/docs/img/webapp_single_scalar_plot_dark.png b/docs/img/webapp_single_scalar_plot_dark.png new file mode 100644 index 00000000..4f4de26d Binary files /dev/null and b/docs/img/webapp_single_scalar_plot_dark.png differ diff --git a/docs/img/webapp_sub_project_card.png b/docs/img/webapp_sub_project_card.png index 7c348364..2335e0d8 100644 Binary files a/docs/img/webapp_sub_project_card.png and b/docs/img/webapp_sub_project_card.png differ diff --git a/docs/img/webapp_sub_project_card_dark.png b/docs/img/webapp_sub_project_card_dark.png new file mode 100644 index 00000000..95cb75ca Binary files /dev/null and b/docs/img/webapp_sub_project_card_dark.png differ diff --git a/docs/img/webapp_tracking_21.png b/docs/img/webapp_tracking_21.png index 9c3f191a..95aa48ff 100644 Binary files a/docs/img/webapp_tracking_21.png and b/docs/img/webapp_tracking_21.png differ diff --git a/docs/img/webapp_tracking_21_dark.png b/docs/img/webapp_tracking_21_dark.png new file mode 100644 index 00000000..69af678d Binary files /dev/null and b/docs/img/webapp_tracking_21_dark.png differ diff --git a/docs/img/webapp_tracking_22.png b/docs/img/webapp_tracking_22.png index 6793c8e3..b3773438 100644 Binary files a/docs/img/webapp_tracking_22.png and b/docs/img/webapp_tracking_22.png differ diff --git a/docs/img/webapp_tracking_22_dark.png b/docs/img/webapp_tracking_22_dark.png new file mode 100644 index 00000000..2eaed400 Binary files /dev/null and b/docs/img/webapp_tracking_22_dark.png differ diff --git a/docs/img/webapp_tracking_23.png b/docs/img/webapp_tracking_23.png index 47b7676d..10eb5452 100644 Binary files a/docs/img/webapp_tracking_23.png and b/docs/img/webapp_tracking_23.png differ diff --git a/docs/img/webapp_tracking_23_dark.png b/docs/img/webapp_tracking_23_dark.png new file mode 100644 index 00000000..b6a6962d Binary files /dev/null and b/docs/img/webapp_tracking_23_dark.png differ diff --git a/docs/img/webapp_tracking_24.png b/docs/img/webapp_tracking_24.png index f70f0e82..830ab1d4 100644 Binary files a/docs/img/webapp_tracking_24.png and b/docs/img/webapp_tracking_24.png differ diff --git a/docs/img/webapp_tracking_24_dark.png b/docs/img/webapp_tracking_24_dark.png new file mode 100644 index 00000000..7570e933 Binary files /dev/null and b/docs/img/webapp_tracking_24_dark.png differ diff --git a/docs/img/webapp_tracking_25.png b/docs/img/webapp_tracking_25.png index 593afcc6..862a0836 100644 Binary files a/docs/img/webapp_tracking_25.png and b/docs/img/webapp_tracking_25.png differ diff --git a/docs/img/webapp_tracking_25_dark.png b/docs/img/webapp_tracking_25_dark.png new file mode 100644 index 00000000..db3ac019 Binary files /dev/null and b/docs/img/webapp_tracking_25_dark.png differ diff --git a/docs/img/webapp_tracking_26.png b/docs/img/webapp_tracking_26.png index 3d0612a3..f1d6a7f4 100644 Binary files a/docs/img/webapp_tracking_26.png and b/docs/img/webapp_tracking_26.png differ diff --git a/docs/img/webapp_tracking_26_dark.png b/docs/img/webapp_tracking_26_dark.png new file mode 100644 index 00000000..5ac426ef Binary files /dev/null and b/docs/img/webapp_tracking_26_dark.png differ diff --git a/docs/img/webapp_tracking_28.png b/docs/img/webapp_tracking_28.png index 93394286..47b2c818 100644 Binary files a/docs/img/webapp_tracking_28.png and b/docs/img/webapp_tracking_28.png differ diff --git a/docs/img/webapp_tracking_28_dark.png b/docs/img/webapp_tracking_28_dark.png new file mode 100644 index 00000000..2e15875b Binary files /dev/null and b/docs/img/webapp_tracking_28_dark.png differ diff --git a/docs/img/webapp_tracking_30.png b/docs/img/webapp_tracking_30.png index 57d99a3c..efc1edb0 100644 Binary files a/docs/img/webapp_tracking_30.png and b/docs/img/webapp_tracking_30.png differ diff --git a/docs/img/webapp_tracking_30_dark.png b/docs/img/webapp_tracking_30_dark.png new file mode 100644 index 00000000..de3732b0 Binary files /dev/null and b/docs/img/webapp_tracking_30_dark.png differ diff --git a/docs/img/webapp_tracking_31.png b/docs/img/webapp_tracking_31.png index f333d8be..3cf9110b 100644 Binary files a/docs/img/webapp_tracking_31.png and b/docs/img/webapp_tracking_31.png differ diff --git a/docs/img/webapp_tracking_31_dark.png b/docs/img/webapp_tracking_31_dark.png new file mode 100644 index 00000000..6faabda2 Binary files /dev/null and b/docs/img/webapp_tracking_31_dark.png differ diff --git a/docs/img/webapp_tracking_32.png b/docs/img/webapp_tracking_32.png index 32f579e0..de2ae8a0 100644 Binary files a/docs/img/webapp_tracking_32.png and b/docs/img/webapp_tracking_32.png differ diff --git a/docs/img/webapp_tracking_32_dark.png b/docs/img/webapp_tracking_32_dark.png new file mode 100644 index 00000000..3b1c5b54 Binary files /dev/null and b/docs/img/webapp_tracking_32_dark.png differ diff --git a/docs/img/webapp_tracking_33_dark.png b/docs/img/webapp_tracking_33_dark.png new file mode 100644 index 00000000..37f1e416 Binary files /dev/null and b/docs/img/webapp_tracking_33_dark.png differ diff --git a/docs/img/webapp_tracking_34_dark.png b/docs/img/webapp_tracking_34_dark.png new file mode 100644 index 00000000..a5dfc91d Binary files /dev/null and b/docs/img/webapp_tracking_34_dark.png differ diff --git a/docs/img/webapp_tracking_34a.png b/docs/img/webapp_tracking_34a.png index 87f033f2..8847eed6 100644 Binary files a/docs/img/webapp_tracking_34a.png and b/docs/img/webapp_tracking_34a.png differ diff --git a/docs/img/webapp_tracking_34a_dark.png b/docs/img/webapp_tracking_34a_dark.png new file mode 100644 index 00000000..114f6c29 Binary files /dev/null and b/docs/img/webapp_tracking_34a_dark.png differ diff --git a/docs/img/webapp_tracking_34b_dark.png b/docs/img/webapp_tracking_34b_dark.png new file mode 100644 index 00000000..eaf78609 Binary files /dev/null and b/docs/img/webapp_tracking_34b_dark.png differ diff --git a/docs/img/webapp_tracking_35.png b/docs/img/webapp_tracking_35.png index ca4422a4..fe7ba420 100644 Binary files a/docs/img/webapp_tracking_35.png and b/docs/img/webapp_tracking_35.png differ diff --git a/docs/img/webapp_tracking_35_dark.png b/docs/img/webapp_tracking_35_dark.png new file mode 100644 index 00000000..eba4d1df Binary files /dev/null and b/docs/img/webapp_tracking_35_dark.png differ diff --git a/docs/img/webapp_tracking_35a.png b/docs/img/webapp_tracking_35a.png index d1ec5f5a..dec75406 100644 Binary files a/docs/img/webapp_tracking_35a.png and b/docs/img/webapp_tracking_35a.png differ diff --git a/docs/img/webapp_tracking_35a_dark.png b/docs/img/webapp_tracking_35a_dark.png new file mode 100644 index 00000000..b2eacdf1 Binary files /dev/null and b/docs/img/webapp_tracking_35a_dark.png differ diff --git a/docs/img/webapp_tracking_40.png b/docs/img/webapp_tracking_40.png index fc2ecf08..01472271 100644 Binary files a/docs/img/webapp_tracking_40.png and b/docs/img/webapp_tracking_40.png differ diff --git a/docs/img/webapp_tracking_40_dark.png b/docs/img/webapp_tracking_40_dark.png new file mode 100644 index 00000000..590922b8 Binary files /dev/null and b/docs/img/webapp_tracking_40_dark.png differ diff --git a/docs/img/webapp_tracking_41.png b/docs/img/webapp_tracking_41.png index efc4a28f..515cfa43 100644 Binary files a/docs/img/webapp_tracking_41.png and b/docs/img/webapp_tracking_41.png differ diff --git a/docs/img/webapp_tracking_41_dark.png b/docs/img/webapp_tracking_41_dark.png new file mode 100644 index 00000000..26829d00 Binary files /dev/null and b/docs/img/webapp_tracking_41_dark.png differ diff --git a/docs/img/webapp_tracking_43.png b/docs/img/webapp_tracking_43.png index fc3921f2..2289c384 100644 Binary files a/docs/img/webapp_tracking_43.png and b/docs/img/webapp_tracking_43.png differ diff --git a/docs/img/webapp_tracking_43_dark.png b/docs/img/webapp_tracking_43_dark.png new file mode 100644 index 00000000..d0b0097f Binary files /dev/null and b/docs/img/webapp_tracking_43_dark.png differ diff --git a/docs/img/webapp_tracking_44.png b/docs/img/webapp_tracking_44.png index f4f83a8a..ad579863 100644 Binary files a/docs/img/webapp_tracking_44.png and b/docs/img/webapp_tracking_44.png differ diff --git a/docs/img/webapp_tracking_44_dark.png b/docs/img/webapp_tracking_44_dark.png new file mode 100644 index 00000000..c770729c Binary files /dev/null and b/docs/img/webapp_tracking_44_dark.png differ diff --git a/docs/img/webapp_workers_queues_context.png b/docs/img/webapp_workers_queues_context.png index 4d5b1773..91340cb0 100644 Binary files a/docs/img/webapp_workers_queues_context.png and b/docs/img/webapp_workers_queues_context.png differ diff --git a/docs/img/webapp_workers_queues_context_dark.png b/docs/img/webapp_workers_queues_context_dark.png new file mode 100644 index 00000000..c5c56a45 Binary files /dev/null and b/docs/img/webapp_workers_queues_context_dark.png differ diff --git a/docs/img/workers_queues_experiment_actions.png b/docs/img/workers_queues_experiment_actions.png index de1db069..e050d87f 100644 Binary files a/docs/img/workers_queues_experiment_actions.png and b/docs/img/workers_queues_experiment_actions.png differ diff --git a/docs/img/workers_queues_experiment_actions_dark.png b/docs/img/workers_queues_experiment_actions_dark.png new file mode 100644 index 00000000..ceab4a81 Binary files /dev/null and b/docs/img/workers_queues_experiment_actions_dark.png differ diff --git a/docs/integrations/accelerate.md b/docs/integrations/accelerate.md index 4835cd7f..8d5d685e 100644 --- a/docs/integrations/accelerate.md +++ b/docs/integrations/accelerate.md @@ -3,13 +3,13 @@ title: Accelerate --- Hugging Face's [Accelerate](https://huggingface.co/docs/accelerate/main/en/index) library simplifies DL model training -and inference. ClearML is a supported tracker in Accelerate: It automatically logs experiment environment information, +and inference. ClearML is a supported tracker in Accelerate: It automatically logs task environment information, such as required packages and uncommitted changes, and supports reporting scalars, parameters, debug samples, and plots. ## Setup -To use Accelerate's ClearML tracker, make sure that `clearml` is [installed and set up](../getting_started/ds/ds_first_steps.md#install-clearml) +To use Accelerate's ClearML tracker, make sure that `clearml` is [installed and set up](../clearml_sdk/clearml_sdk_setup#install-clearml) in your environment, and use the `log_with` parameter when instantiating an `Accelerator`: ```python @@ -19,11 +19,11 @@ accelerator = Accelerator(log_with="all") # For all available trackers in the e accelerator = Accelerator(log_with="clearml") # For the ClearML tracker only ``` -Add `Accelerator.init_trackers()` in the beginning of your experiment. Specify the project where the ClearML task should -be saved in the `project_name` parameter, and add any experiment hyperparameters to be logged in the `config` parameter. +Add `Accelerator.init_trackers()` in the beginning of your task. Specify the project where the ClearML task should +be saved in the `project_name` parameter, and add any task hyperparameters to be logged in the `config` parameter. The following code initializes the ClearML Task, which will capture all environment details, such as required packages -and uncommitted code. The logged hyperparameters are displayed in the experiment's **Hyperparameters** tab: +and uncommitted code. The logged hyperparameters are displayed in the task's **Hyperparameters** tab: ```python @@ -64,21 +64,21 @@ If `step` is not specified, the scalar is reported as a single-value scalar. accelerator.log(values={"accuracy": accuracy}, step=epoch) ``` -The scalars are displayed in the experiment's **Scalars** tab. +The scalars are displayed in the task's **Scalars** tab. ### Images and Table Plots -To add images or table plots to your experiment, you can use the `ClearMLTracker.log_images()` and `ClearMLTracker.log_table()` +To add images or table plots to your task, you can use the `ClearMLTracker.log_images()` and `ClearMLTracker.log_table()` respectively. First instantiate the `ClearMLTracker`. If you have run `Accelerator.init_trackers()` in your script, that means a ClearML task has already been initialized, so anything logged through the tracker will be logged to the existing task. -Otherwise, just specify the experiment name under `run_name` and any kwargs to pass to +Otherwise, just specify the task name under `run_name` and any kwargs to pass to [`Task.init()`](../references/sdk/task.md#taskinit): ```python from accelerate.tracking import ClearMLTracker -clearml_tracker= ClearMLTracker(run_name="Example experiment") +clearml_tracker= ClearMLTracker(run_name="Example task") ``` #### Logging Images @@ -95,14 +95,14 @@ image in the name-image pair should be either a numpy array or a `PIL.Image` obj clearml_tracker.log_images(values={"test_cat_siamese":[image_obect]}) ``` -The images will be displayed in the experiment's **Debug Samples** +The images will be displayed in the task's **Debug Samples** #### Logging Plots To log plots, use `ClearMLTracker.log_table()`. Specify the data under the `dataframe` or `data` parameters. List the name of the columns under `columns`, otherwise the first entry in `data` will be used as the column names. -The plot will appear in the experiment's **Plots** tab. +The plot will appear in the task's **Plots** tab. ### Additional Logging Options @@ -111,7 +111,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) diff --git a/docs/integrations/autokeras.md b/docs/integrations/autokeras.md index b2290a68..86e9d7ed 100644 --- a/docs/integrations/autokeras.md +++ b/docs/integrations/autokeras.md @@ -3,7 +3,7 @@ title: AutoKeras --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup +If you are not already using ClearML, see [Getting Started](../clearml_sdk/clearml_sdk_setup) for setup instructions. ::: @@ -24,18 +24,18 @@ And that's it! This creates a [ClearML Task](../fundamentals/task.md) which capt * Scalars (loss, learning rates) * Console output * General details such as machine details, runtime, creation date etc. -* Hyperparameters created with standard python packages (such as argparse, click, Python Fire, etc.) +* Hyperparameters created with standard Python packages (such as argparse, click, Python Fire, etc.) * And more You can view all the task details in the [WebApp](../webapp/webapp_exp_track_visual.md). See an example of AutoKeras and ClearML in action [here](../guides/frameworks/autokeras/autokeras_imdb_example.md). -![Experiment scalars](../img/examples_keras_14.png) +![Task scalars](../img/examples_keras_14.png) ## Automatic Logging Control By default, when ClearML is integrated into your AutoKeras script, it captures AutoKeras models and scalars, as well as TensorFlow -definitions and TensorBoard outputs. But, you may want to have more control over what your experiment logs. +definitions and TensorBoard outputs. But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -70,17 +70,17 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) See [Explicit Reporting Tutorial](../guides/reporting/explicit_reporting.md). ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -93,14 +93,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task diff --git a/docs/integrations/catboost.md b/docs/integrations/catboost.md index cc3743c9..fe0cbb18 100644 --- a/docs/integrations/catboost.md +++ b/docs/integrations/catboost.md @@ -3,7 +3,7 @@ title: CatBoost --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup +If you are not already using ClearML, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup) for setup instructions. ::: @@ -24,18 +24,19 @@ And that's it! This creates a [ClearML Task](../fundamentals/task.md) which capt * Scalars (loss, learning rates) * Console output * General details such as machine details, runtime, creation date etc. -* Hyperparameters created with standard python packages (e.g. argparse, click, Python Fire, etc.) +* Hyperparameters created with standard Python packages (e.g. argparse, click, Python Fire, etc.) * And more You can view all the task details in the [WebApp](../webapp/webapp_overview.md). See an example of CatBoost and ClearML in action [here](../guides/frameworks/catboost/catboost.md). -![Experiment scalars](../img/examples_catboost_scalars.png) +![Task scalars](../img/examples_catboost_scalars.png#light-mode-only) +![Task scalars](../img/examples_catboost_scalars_dark.png#dark-mode-only) ## Automatic Logging Control By default, when ClearML is integrated into your CatBoost script, it captures models, and -scalars. But, you may want to have more control over what your experiment logs. +scalars. But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -68,17 +69,17 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) See [Explicit Reporting Tutorial](../guides/reporting/explicit_reporting.md). ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -91,14 +92,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task @@ -117,5 +119,5 @@ task.execute_remotely(queue_name='default', exit_process=True) ## Hyperparameter Optimization Use ClearML's [`HyperParameterOptimizer`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to find -the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../fundamentals/hpo.md) +the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../getting_started/hpo.md) for more information. diff --git a/docs/integrations/click.md b/docs/integrations/click.md index 3290e980..995fdd2c 100644 --- a/docs/integrations/click.md +++ b/docs/integrations/click.md @@ -3,11 +3,11 @@ title: Click --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup +If you are not already using ClearML, see [ClearML Setup](../clearml_sdk/clearml_sdk_setup) for setup instructions. ::: -[`click`](https://click.palletsprojects.com) is a python package for creating command-line interfaces. ClearML integrates +[`click`](https://click.palletsprojects.com) is a Python package for creating command-line interfaces. ClearML integrates seamlessly with `click` and automatically logs its command-line parameters. All you have to do is add two lines of code: @@ -40,12 +40,13 @@ if __name__ == '__main__': ``` When this code is executed, ClearML logs your command-line arguments, which you can view in the -[WebApp](../webapp/webapp_overview.md), in the experiment's **Configuration > Hyperparameters > Args** section. +[WebApp](../webapp/webapp_overview.md), in the task's **Configuration > Hyperparameters > Args** section. -![click configuration](../img/integrations_click_configs.png) +![click configuration](../img/integrations_click_configs.png#light-mode-only) +![click configuration](../img/integrations_click_configs_dark.png#dark-mode-only) In the UI, you can clone the task multiple times and set the clones' parameter values for execution by the [ClearML Agent](../clearml_agent.md). When the clone is executed, the executing agent will use the new parameter values as if set by the command-line. -See [code examples](https://github.com/allegroai/clearml/blob/master/examples/frameworks/click) demonstrating integrating +See [code examples](https://github.com/clearml/clearml/blob/master/examples/frameworks/click) demonstrating integrating ClearML with code that uses `click`. \ No newline at end of file diff --git a/docs/integrations/fastai.md b/docs/integrations/fastai.md index dc9a6d4d..332bf75e 100644 --- a/docs/integrations/fastai.md +++ b/docs/integrations/fastai.md @@ -3,8 +3,7 @@ title: Fast.ai --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: ClearML integrates seamlessly with [fast.ai](https://www.fast.ai/), automatically logging its models and scalars. @@ -24,18 +23,19 @@ And that's it! This creates a [ClearML Task](../fundamentals/task.md) which capt * Scalars (loss, learning rates) * Console output * General details such as machine details, runtime, creation date etc. -* Hyperparameters created with standard python packages (e.g. argparse, click, Python Fire, etc.) +* Hyperparameters created with standard Python packages (e.g. argparse, click, Python Fire, etc.) * And more You can view all the task details in the [WebApp](../webapp/webapp_overview.md). See an example of `fastai` and ClearML in action [here](../guides/frameworks/fastai/fastai_with_tensorboard.md). -![Experiment scalars](../img/examples_reporting_fastai_01.png) +![Task scalars](../img/examples_reporting_fastai_01.png#light-mode-only) +![Task scalars](../img/examples_reporting_fastai_01_dark.png#dark-mode-only) ## Automatic Logging Control By default, when ClearML is integrated into your `fastai` script, it captures models and -scalars. But, you may want to have more control over what your experiment logs. +scalars. But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -68,17 +68,17 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) See [Explicit Reporting Tutorial](../guides/reporting/explicit_reporting.md). ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -91,14 +91,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task diff --git a/docs/integrations/hydra.md b/docs/integrations/hydra.md index b38b9ac4..306698fd 100644 --- a/docs/integrations/hydra.md +++ b/docs/integrations/hydra.md @@ -3,12 +3,11 @@ title: Hydra --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: -[Hydra](https://github.com/facebookresearch/hydra) is a Python framework for managing experiment parameters. ClearML integrates seamlessly +[Hydra](https://github.com/facebookresearch/hydra) is a Python framework for managing task parameters. ClearML integrates seamlessly with Hydra and automatically logs the `OmegaConf` which holds all the configuration files, as well as values overridden during runtime. @@ -21,9 +20,10 @@ task = Task.init(task_name="", project_name="") ``` ClearML logs the OmegaConf as a blob and can be viewed in the -[WebApp](../webapp/webapp_overview.md), in the experiment's **CONFIGURATION > CONFIGURATION OBJECTS > OmegaConf** section. +[WebApp](../webapp/webapp_overview.md), in the task's **CONFIGURATION > CONFIGURATION OBJECTS > OmegaConf** section. -![Hydra configuration](../img/integrations_hydra_configs.png) +![Hydra configuration](../img/integrations_hydra_configs.png#light-mode-only) +![Hydra configuration](../img/integrations_hydra_configs_dark.png#dark-mode-only) ## Modifying Hydra Values @@ -40,12 +40,12 @@ See the [Hydra documentation](https://hydra.cc/docs/advanced/override_grammar/ba In the UI, you can clone a task multiple times and modify it for execution by the [ClearML Agent](../clearml_agent.md). The agent executes the code with the modifications you made in the UI, even overriding hardcoded values. -Clone your experiment, then modify your Hydra parameters via the UI in one of the following ways: +Clone your task, then modify your Hydra parameters via the UI in one of the following ways: * Modify the OmegaConf directly: - 1. In the experiment's **CONFIGURATION > HYPERPARAMETERS > HYDRA** section, set `_allow_omegaconf_edit_` to `True` - 1. In the experiment's **CONFIGURATION > CONFIGURATION OBJECTS > OmegaConf** section, modify the OmegaConf values -* Add an experiment hyperparameter: - 1. In the experiment's **CONFIGURATION > HYPERPARAMETERS > HYDRA** section, make sure `_allow_omegaconf_edit_` is set + 1. In the task's **CONFIGURATION > HYPERPARAMETERS > HYDRA** section, set `_allow_omegaconf_edit_` to `True` + 1. In the task's **CONFIGURATION > CONFIGURATION OBJECTS > OmegaConf** section, modify the OmegaConf values +* Add a task hyperparameter: + 1. In the task's **CONFIGURATION > HYPERPARAMETERS > HYDRA** section, make sure `_allow_omegaconf_edit_` is set to `False` 1. In the same section, click `Edit`, which gives you the option to add parameters. Input parameters from the OmegaConf that you want to modify using dot notation. For example, if your OmegaConf looks like this: @@ -61,10 +61,10 @@ Clone your experiment, then modify your Hydra parameters via the UI in one of th Specify the `number` parameter with `dataset.main.number`, then set its new value -Enqueue the customized experiment for execution. The task will use the new values during execution. If you use the +Enqueue the customized task for execution. The task will use the new values during execution. If you use the second option mentioned above, notice that the OmegaConf in **CONFIGURATION > CONFIGURATION OBJECTS > OmegaConf** changes according to your added parameters. ## Code Example -See example which demonstrates integrating ClearML into script that uses Hydra [here](https://github.com/allegroai/clearml/blob/master/examples/frameworks/hydra/hydra_example.py). +See example which demonstrates integrating ClearML into script that uses Hydra [here](https://github.com/clearml/clearml/blob/master/examples/frameworks/hydra/hydra_example.py). diff --git a/docs/integrations/ignite.md b/docs/integrations/ignite.md index 0beb1563..683292ab 100644 --- a/docs/integrations/ignite.md +++ b/docs/integrations/ignite.md @@ -3,8 +3,7 @@ title: PyTorch Ignite --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: [PyTorch Ignite](https://pytorch.org/ignite/index.html) is a library for training and evaluating neural networks in @@ -25,11 +24,11 @@ task = Task.init(task_name="", project_name="") ``` This will create a [ClearML Task](../fundamentals/task.md) that captures your script's information, including Git details, -uncommitted code, python environment, all information logged through `TensorboardLogger`, and more. +uncommitted code, Python environment, all information logged through `TensorboardLogger`, and more. -Visualize all the captured information in the experiment's page in ClearML's [WebApp](#webapp). +Visualize all the captured information in the task's page in ClearML's [WebApp](#webapp). -See a code example [here](https://github.com/allegroai/clearml/blob/master/examples/frameworks/ignite/cifar_ignite.py). +See a code example [here](https://github.com/clearml/clearml/blob/master/examples/frameworks/ignite/cifar_ignite.py). ## ClearMLLogger PyTorch Ignite supports a ClearML Logger to log metrics, text, model/optimizer parameters, plots, and model checkpoints @@ -45,10 +44,10 @@ Integrate ClearML with the following steps: ``` This creates a [ClearML Task](../fundamentals/task.md) called `ignite` in the `examples` project, which captures your - script's information, including Git details, uncommitted code, python environment. + script's information, including Git details, uncommitted code, Python environment. You can also pass the following parameters to the `ClearMLLogger` object: - * `task_type` – The type of experiment (see [task types](../fundamentals/task.md#task-types)). + * `task_type` – The type of task (see [task types](../fundamentals/task.md#task-types)). * `report_freq` – The histogram processing frequency (handles histogram values every X calls to the handler). Affects `GradsHistHandler` and `WeightsHistHandler` (default: 100). * `histogram_update_freq_multiplier` – The histogram report frequency (report first X histograms and once every X @@ -77,7 +76,7 @@ Integrate ClearML with the following steps: ) ``` -1. Attach the `ClearMLLogger` object to helper handlers to log experiment outputs. Ignite supports the following helper handlers for ClearML: +1. Attach the `ClearMLLogger` object to helper handlers to log task outputs. Ignite supports the following helper handlers for ClearML: * **ClearMLSaver** - Saves input snapshots as ClearML artifacts. * **GradsHistHandler** and **WeightsHistHandler** - Logs the model's gradients and weights respectively as histograms. * **GradsScalarHandler** and **WeightsScalarHandler** - Logs gradients and weights respectively as scalars. @@ -119,7 +118,7 @@ Integrate ClearML with the following steps: ) ``` -Visualize all the captured information in the experiment's page in ClearML's [WebApp](#webapp). +Visualize all the captured information in the task's page in ClearML's [WebApp](#webapp). For more information, see the [ignite documentation](https://pytorch.org/ignite/v0.5.0.post2/generated/ignite.handlers.clearml_logger.html). @@ -127,7 +126,7 @@ See code example [here](https://github.com/pytorch/ignite/blob/master/examples/m ## WebApp -All the experiment information that ClearML captures can be viewed in the [WebApp](../webapp/webapp_overview.md): +All the task information that ClearML captures can be viewed in the [WebApp](../webapp/webapp_overview.md): ### Models @@ -137,14 +136,14 @@ View saved model snapshots in the **ARTIFACTS** tab. ### Scalars -View the scalars in the experiment's **SCALARS** tab. +View the scalars in the task's **SCALARS** tab. ![Scalars](../img/examples_cifar_scalars.png) ### Debug Samples -ClearML automatically tracks images logged to `TensorboardLogger`. They appear in the experiment's **DEBUG SAMPLES**. +ClearML automatically tracks images logged to `TensorboardLogger`. They appear in the task's **DEBUG SAMPLES**. ![Debug Samples](../img/examples_integration_pytorch_ignite_debug.png) diff --git a/docs/integrations/integrations.md b/docs/integrations/integrations.md new file mode 100644 index 00000000..4b14b547 --- /dev/null +++ b/docs/integrations/integrations.md @@ -0,0 +1,41 @@ +# ClearML Integrations + +ClearML seamlessly integrates with a wide range of popular machine learning frameworks, tools, and platforms to enhance your ML development workflow. Our integrations enable automatic experiment tracking, model management, and pipeline orchestration across your preferred tools. + +### Deep Learning Frameworks +* [PyTorch](pytorch.md) +* [TensorFlow](tensorflow.md) +* [Keras](keras.md) +* [YOLO v5](yolov5.md) +* [YOLO v8](yolov8.md) +* [Hugging Face Transformers](transformers.md) +* [MMEngine](mmengine.md) +* [MMCV](mmcv.md) +* [MONAI](monai.md) +* [Nvidia TAO](tao.md) +* [MegEngine](megengine.md) +* [FastAI](fastai.md) + +### ML Frameworks +* [scikit-learn](scikit_learn.md) +* [XGBoost](xgboost.md) +* [LightGBM](lightgbm.md) +* [CatBoost](catboost.md) +* [Seaborn](seaborn.md) + +### Configuration and Optimization +* [AutoKeras](autokeras.md) +* [Keras Tuner](keras_tuner.md) +* [Optuna](optuna.md) +* [Hydra](hydra.md) +* [Click](click.md) +* [Python Fire](python_fire.md) +* [jsonargparse](jsonargparse.md) + +### MLOps and Visualization +* [TensorBoard](tensorboard.md) +* [TensorBoardX](tensorboardx.md) +* [Matplotlib](matplotlib.md) +* [LangChain](langchain.md) +* [Pytorch Ignite](ignite.md) +* [Pytorch Lightning](pytorch_lightning.md) diff --git a/docs/integrations/jsonargparse.md b/docs/integrations/jsonargparse.md index 3bc106d2..42cc2fa2 100644 --- a/docs/integrations/jsonargparse.md +++ b/docs/integrations/jsonargparse.md @@ -3,11 +3,11 @@ title: jsonargparse --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [jsonargparse](https://github.com/omni-us/jsonargparse) is a Python package for creating command-line interfaces. ClearML integrates seamlessly with `jsonargparse` and automatically logs its command-line parameters and connected configuration files. @@ -21,14 +21,14 @@ task = Task.init(task_name="", project_name="") ``` When the code runs, ClearML logs your command-line arguments, which you can view in the [WebApp](../webapp/webapp_overview.md), -in the experiment's **Configuration > Hyperparameters > Args** section. +in the task's **Configuration > Hyperparameters > Args** section. ![Jsonargparse integration](../img/integrations_jsonargparse.png) ### Automatic Logging Control By default, when ClearML is integrated into your script, it captures all of your `jsonargparse` parameters. -But, you may want to have more control over what your experiment logs. To control a task's logging of parameters from +But, you may want to have more control over what your task logs. To control a task's logging of parameters from argument parsers, use the `auto_connect_arg_parser` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. @@ -59,10 +59,10 @@ The agent executes the code with the modifications you made in the UI, even over In the case that you connected a jsonargparse configuration file (e.g. with LightningCLI), make sure to set the `_ignore_ui_overrides` to `False` in the **CONFIGURATION > HYPERPARAMETERS > ARGS** section. That way, after the customized -experiment is enqueued, the task will use the new values during execution. +task is enqueued, the task will use the new values during execution. ## Code Examples -See [code examples](https://github.com/allegroai/clearml/blob/master/examples/frameworks/jsonargparse) demonstrating integrating +See [code examples](https://github.com/clearml/clearml/blob/master/examples/frameworks/jsonargparse) demonstrating integrating ClearML with code that uses `jsonargparse`. diff --git a/docs/integrations/keras.md b/docs/integrations/keras.md index ca6e0bbe..c95a631c 100644 --- a/docs/integrations/keras.md +++ b/docs/integrations/keras.md @@ -3,10 +3,10 @@ title: Keras --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + ClearML integrates with [Keras](https://keras.io/) out-of-the-box, automatically logging its models, scalars, TensorFlow definitions, and TensorBoard outputs. @@ -35,7 +35,7 @@ You can view all the task details in the [WebApp](../webapp/webapp_exp_track_vis ## Automatic Logging Control By default, when ClearML is integrated into your Keras script, it captures Keras models and scalars, as well as TensorFlow -definitions and TensorBoard outputs. But, you may want to have more control over what your experiment logs. +definitions and TensorBoard outputs. But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -70,7 +70,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) @@ -87,10 +87,10 @@ and debug samples, plots, and scalars logged to TensorBoard ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -103,14 +103,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task @@ -129,5 +130,5 @@ task.execute_remotely(queue_name='default', exit_process=True) ## Hyperparameter Optimization Use ClearML's [`HyperParameterOptimizer`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to find -the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../fundamentals/hpo.md) +the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../getting_started/hpo.md) for more information. diff --git a/docs/integrations/keras_tuner.md b/docs/integrations/keras_tuner.md index 28a308e3..55960684 100644 --- a/docs/integrations/keras_tuner.md +++ b/docs/integrations/keras_tuner.md @@ -3,13 +3,13 @@ title: Keras Tuner --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [Keras Tuner](https://www.tensorflow.org/tutorials/keras/keras_tuner) is a library that helps you pick the optimal set of hyperparameters for training your models. ClearML integrates seamlessly with `kerastuner` and automatically logs -experiment scalars, the output model, and hyperparameter optimization summary. +task scalars, the output model, and hyperparameter optimization summary. Integrate ClearML into your Keras Tuner optimization script by doing the following: * Instantiate a ClearML Task: @@ -51,18 +51,21 @@ You can view all the task details in the [WebApp](../webapp/webapp_exp_track_vis ## WebApp -ClearML logs the scalars from training each network. They appear in the experiment's **SCALARS** tab in the Web UI. +ClearML logs the scalars from training each network. They appear in the task's **SCALARS** tab in the Web UI. -![Optimization scalars](../img/integration_keras_tuner_06.png) +![Optimization scalars](../img/integration_keras_tuner_06.png#light-mode-only) +![Optimization scalars](../img/integration_keras_tuner_06_dark.png#dark-mode-only) -ClearML automatically logs the parameters of each experiment run in the hyperparameter search. They appear in tabular -form in the experiment's **PLOTS**. +ClearML automatically logs the parameters of each task run in the hyperparameter search. They appear in tabular +form in the task's **PLOTS**. -![Optimization plot](../img/integration_keras_tuner_07.png) +![Optimization plot](../img/integration_keras_tuner_07.png#light-mode-only) +![Optimization plot](../img/integration_keras_tuner_07_dark.png#dark-mode-only) -ClearML automatically stores the output model. It appears in the experiment's **ARTIFACTS** **>** **Output Model**. +ClearML automatically stores the output model. It appears in the task's **ARTIFACTS** **>** **Output Model**. -![output model](../img/integration_keras_tuner_03.png) +![output model](../img/integration_keras_tuner_03.png#light-mode-only) +![output model](../img/integration_keras_tuner_03_dark.png#dark-mode-only) ## Example diff --git a/docs/integrations/langchain.md b/docs/integrations/langchain.md index 09276000..c85f7551 100644 --- a/docs/integrations/langchain.md +++ b/docs/integrations/langchain.md @@ -3,10 +3,10 @@ title: LangChain --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [LangChain](https://github.com/langchain-ai/langchain) is a popular framework for developing applications powered by language models. You can integrate ClearML into your LangChain code using the built-in `ClearMLCallbackHandler`. This class is used to create a ClearML Task to log LangChain assets and metrics. @@ -14,7 +14,7 @@ class is used to create a ClearML Task to log LangChain assets and metrics. Integrate ClearML with the following steps: 1. Set up the `ClearMLCallbackHandler`. The following code creates a [ClearML Task](../fundamentals/task.md) called `llm` in the `langchain_callback_demo` project, which captures your script's information, including Git details, - uncommitted code, and python environment: + uncommitted code, and Python environment: ```python from langchain.callbacks import ClearMLCallbackHandler from langchain_openai import OpenAI @@ -60,7 +60,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) diff --git a/docs/integrations/lightgbm.md b/docs/integrations/lightgbm.md index 8d8d76e9..bbb0f487 100644 --- a/docs/integrations/lightgbm.md +++ b/docs/integrations/lightgbm.md @@ -3,10 +3,10 @@ title: LightGBM --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + ClearML integrates seamlessly with [LightGBM](https://github.com/microsoft/LightGBM), automatically logging its models, metric plots, and parameters. @@ -32,11 +32,11 @@ You can view all the task details in the [WebApp](../webapp/webapp_exp_track_vis See LightGBM and ClearML in action in a [code example](../guides/frameworks/lightgbm/lightgbm_example.md). -![Experiment scalars](../img/examples_lightgbm_scalars.png) +![Task scalars](../img/examples_lightgbm_scalars.png) ## Automatic Logging Control By default, when ClearML is integrated into your LightGBM script, it captures models, metric plots, and configuration. -But, you may want to have more control over what your experiment logs. +But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -69,17 +69,17 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) See [Explicit Reporting Tutorial](../guides/reporting/explicit_reporting.md). ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -92,14 +92,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task @@ -118,5 +119,5 @@ task.execute_remotely(queue_name='default', exit_process=True) ## Hyperparameter Optimization Use ClearML's [`HyperParameterOptimizer`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to find -the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../fundamentals/hpo.md) +the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../getting_started/hpo.md) for more information. diff --git a/docs/integrations/matplotlib.md b/docs/integrations/matplotlib.md index ab7cf32b..dde8e0cd 100644 --- a/docs/integrations/matplotlib.md +++ b/docs/integrations/matplotlib.md @@ -3,10 +3,10 @@ title: Matplotlib --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [Matplotlib](https://matplotlib.org/) is a Python library for data visualization. ClearML automatically captures plots and images created with `matplotlib`. @@ -26,13 +26,13 @@ This will create a ClearML Task that captures: * And more View captured Matplotlib plots and images in the [WebApp](../webapp/webapp_exp_track_visual.md), -in the experiment's **Plots** and **Debug Samples** tabs respectively. +in the task's **Plots** and **Debug Samples** tabs respectively. -![Experiment plots](../img/examples_matplotlib_example_01.png) +![Task plots](../img/examples_matplotlib_example_01.png) ## Automatic Logging Control By default, when ClearML is integrated into your script, it captures all of your matplotlib visualizations. -But, you may want to have more control over what your experiment logs. +But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -65,14 +65,14 @@ logger.report_matplotlib_figure(title="My Plot Title", series="My Plot Series", plt.show() ``` -The logged figure is displayed in the experiment's **Plots** tab. +The logged figure is displayed in the task's **Plots** tab. -![Experiment Matplotlib plots](../img/manual_matplotlib_reporting_01.png) +![Task Matplotlib plots](../img/manual_matplotlib_reporting_01.png) Matplotlib figures can be logged as images by passing `report_image=True` to `Logger.report_matplotlib_figure()`. -View the images in the experiment's **DEBUG SAMPLES** tab. +View the images in the task's **DEBUG SAMPLES** tab. -![Experiment debug sample](../img/manual_matplotlib_reporting_03.png) +![Task debug sample](../img/manual_matplotlib_reporting_03.png) See [Manual Matplotlib Reporting](../guides/reporting/manual_matplotlib_reporting.md) example. diff --git a/docs/integrations/megengine.md b/docs/integrations/megengine.md index f394b968..ab0fd305 100644 --- a/docs/integrations/megengine.md +++ b/docs/integrations/megengine.md @@ -3,10 +3,10 @@ title: MegEngine --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + ClearML integrates seamlessly with [MegEngine](https://github.com/MegEngine/MegEngine), automatically logging its models. All you have to do is simply add two lines of code to your MegEngine script: @@ -21,7 +21,7 @@ And that's it! This creates a [ClearML Task](../fundamentals/task.md) which capt * Source code and uncommitted changes * Installed packages * MegEngine model files -* Hyperparameters created with standard python packages (e.g. argparse, click, Python Fire, etc.) +* Hyperparameters created with standard Python packages (e.g. argparse, click, Python Fire, etc.) * Scalars logged to popular frameworks like TensorBoard * Console output * General details such as machine details, runtime, creation date etc. @@ -33,7 +33,7 @@ See MegEngine and ClearML in action in a [code example](../guides/frameworks/meg ## Automatic Logging Control By default, when ClearML is integrated into your MegEngine script, it captures all its logged models. But, you may want to -have more control over what your experiment logs. +have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -65,17 +65,17 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) See [Explicit Reporting Tutorial](../guides/reporting/explicit_reporting.md). ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -88,14 +88,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task @@ -114,5 +115,5 @@ task.execute_remotely(queue_name='default', exit_process=True) ## Hyperparameter Optimization Use ClearML's [`HyperParameterOptimizer`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to find -the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../fundamentals/hpo.md) +the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../getting_started/hpo.md) for more information. diff --git a/docs/integrations/mmcv.md b/docs/integrations/mmcv.md index 520248bb..b9833820 100644 --- a/docs/integrations/mmcv.md +++ b/docs/integrations/mmcv.md @@ -7,10 +7,10 @@ title: MMCV v1.x ::: :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [MMCV](https://github.com/open-mmlab/mmcv/tree/1.x) is a computer vision framework developed by OpenMMLab. You can integrate ClearML into your code using the `mmcv` package's [`ClearMLLoggerHook`](https://mmcv.readthedocs.io/en/master/_modules/mmcv/runner/hooks/logger/clearml.html) class. This class is used to create a ClearML Task and to automatically log metrics. @@ -46,8 +46,8 @@ runner.register_training_hooks( The `init_kwargs` dictionary can include any parameter from [`Task.init()`](../references/sdk/task.md#taskinit). This creates a [ClearML Task](../fundamentals/task.md) `OpenMMLab cifar10` in the `examples` project. -You can view the captured metrics in the experiment's **Scalars** tab in the [WebApp](../webapp/webapp_overview.md). +You can view the captured metrics in the task's **Scalars** tab in the [WebApp](../webapp/webapp_overview.md). ![OpenMMLab scalars](../img/integration_openmmlab_scalars.png) -See MMCV code example [here](https://github.com/allegroai/clearml/blob/master/examples/frameworks/openmmlab/openmmlab_cifar10.py). \ No newline at end of file +See MMCV code example [here](https://github.com/clearml/clearml/blob/master/examples/frameworks/openmmlab/openmmlab_cifar10.py). \ No newline at end of file diff --git a/docs/integrations/mmengine.md b/docs/integrations/mmengine.md index 016a60f2..733625f6 100644 --- a/docs/integrations/mmengine.md +++ b/docs/integrations/mmengine.md @@ -3,17 +3,17 @@ title: MMEngine --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [MMEngine](https://github.com/open-mmlab/mmengine) is a library for training deep learning models based on PyTorch. -MMEngine supports ClearML through a builtin logger: It automatically logs experiment environment information, such as +MMEngine supports ClearML through a builtin logger: It automatically logs task environment information, such as required packages and uncommitted changes, and supports reporting scalars, parameters, and debug samples. Integrate ClearML with the following steps: 1. Instantiate a [`ClearMLVisBackend`](https://mmengine.readthedocs.io/en/latest/api/generated/mmengine.visualization.ClearMLVisBackend.html#mmengine.visualization.ClearMLVisBackend) - object. This creates a ClearML Task that logs the experiment’s environment information. + object. This creates a ClearML Task that logs the task’s environment information. ```python from mmengine.visualization import ClearMLVisBackend @@ -33,16 +33,16 @@ Integrate ClearML with the following steps: * `artifact_suffix` – At the end of training, artifacts with these suffixes will be uploaded to the task's `output_uri`. Defaults to (`.py`, `pth`). -2. Log experiment parameters using `ClearMLVisBackend.add_config()`. Under the `config` parameter, input a dictionary of parameter key-value pairs. +2. Log task parameters using `ClearMLVisBackend.add_config()`. Under the `config` parameter, input a dictionary of parameter key-value pairs. ```python cfg = Config(dict(a=1, b=dict(b1=[0, 1]))) vis_backend.add_config(config=cfg) ``` - The parameters will be displayed in the ClearML WebApp, under the experiment’s Hyperparameters + The parameters will be displayed in the ClearML WebApp, under the task’s Hyperparameters -3. Log your experiment’s scalars using either `ClearMLVisBackend.add_scalar()` for single values or `ClearMLVisBackend.add_scalars()` +3. Log your task’s scalars using either `ClearMLVisBackend.add_scalar()` for single values or `ClearMLVisBackend.add_scalars()` for multiple values: ```python @@ -50,20 +50,20 @@ Integrate ClearML with the following steps: vis_backend.add_scalars(scalar_dict={'loss': 0.1,'acc':0.8}, step=1) ``` - The scalars are displayed in the experiment's Scalars tab. + The scalars are displayed in the task's **Scalars** tab. -5. Report images to your experiment using `ClearMLVisBackend.add_image()`. Under the `image` parameter, input the image +5. Report images to your task using `ClearMLVisBackend.add_image()`. Under the `image` parameter, input the image to be reported as an `np.ndarray` in RGB format: ```python img = np.random.randint(0, 256, size=(10, 10, 3)) vis_backend.add_image(name='img.png', image=img, step=1) ``` - The images will be displayed in the experiment's Debug Samples + The images will be displayed in the task's **Debug Samples** tab. 5. Once you've finished training, make sure to run `ClearMLVisBackend.close()` so that ClearML can mark the task as completed. This will also scan the directory for relevant artifacts with the suffixes input when instantiating - `ClearMLVisBackend` and log the artifacts to your experiment. + `ClearMLVisBackend` and log the artifacts to your task. ```python vis_backend.close() diff --git a/docs/integrations/monai.md b/docs/integrations/monai.md index d215f23c..8b82e036 100644 --- a/docs/integrations/monai.md +++ b/docs/integrations/monai.md @@ -3,10 +3,10 @@ title: MONAI --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [MONAI](https://github.com/Project-MONAI/MONAI) is a PyTorch-based, open-source framework for deep learning in healthcare imaging. You can integrate ClearML into your code using MONAI's built-in handlers: [`ClearMLImageHandler`, `ClearMLStatsHandler`](#clearmlimagehandler-and-clearmlstatshandler), and [`ModelCheckpoint`](#modelcheckpoint). @@ -68,11 +68,11 @@ uncommitted changes, installed packages, console output, and more. You can see all the captured data in the task's page of the ClearML [WebApp](../webapp/webapp_exp_track_visual.md). -View the logged images in the WebApp, in the experiment's **Debug Samples** tab. +View the logged images in the WebApp, in the task's **Debug Samples** tab. ![Debug Samples](../img/monai_clearml_debug_samples.png) -View the logged metrics in the WebApp, in the experiment's **Scalars** tab. +View the logged metrics in the WebApp, in the task's **Scalars** tab. ![MONAI scalars](../img/monai_clearml_scalars.png) @@ -103,6 +103,6 @@ trainer.add_event_handler( ) ``` -View the captured models in the WebApp, in the experiment's **Artifacts** tab. +View the captured models in the WebApp, in the task's **Artifacts** tab. ![MONAI models](../img/monai_clearml_models.png) diff --git a/docs/integrations/optuna.md b/docs/integrations/optuna.md index 59ec7b39..2e4c821b 100644 --- a/docs/integrations/optuna.md +++ b/docs/integrations/optuna.md @@ -2,7 +2,7 @@ title: Optuna --- -[Optuna](https://optuna.readthedocs.io/en/latest) is a [hyperparameter optimization](../fundamentals/hpo.md) framework, +[Optuna](https://optuna.readthedocs.io/en/latest) is a [hyperparameter optimization](../getting_started/hpo.md) framework, which makes use of different samplers such as grid search, random, bayesian, and evolutionary algorithms. You can integrate Optuna into ClearML's automated hyperparameter optimization. @@ -23,7 +23,7 @@ from clearml.automation import ( from clearml.automation.optuna import OptimizerOptuna an_optimizer = HyperParameterOptimizer( - # This is the experiment we want to optimize + # This is the task we want to optimize base_task_id=args['template_task_id'], hyper_parameters=[ UniformIntegerParameterRange('layer_1', min_value=128, max_value=512, step_size=128), diff --git a/docs/integrations/python_fire.md b/docs/integrations/python_fire.md index 8aae12b6..88c30733 100644 --- a/docs/integrations/python_fire.md +++ b/docs/integrations/python_fire.md @@ -13,7 +13,7 @@ from clearml import Task task = Task.init(task_name="", project_name="") ``` -When the code runs, ClearML logs your command-line arguments, which you can view in the [WebApp](../webapp/webapp_overview.md), in the experiment's +When the code runs, ClearML logs your command-line arguments, which you can view in the [WebApp](../webapp/webapp_overview.md), in the task's **Configuration > Hyperparameters > Args** section. ![Fire integration](../img/integrations_fire_params.png) @@ -21,7 +21,7 @@ When the code runs, ClearML logs your command-line arguments, which you can view In the UI, you can clone the task multiple times and set the clones' parameter values for execution by the [ClearML Agent](../clearml_agent.md). When the clone is executed, the executing agent will use the new parameter values as if set by the command-line. -See [code examples](https://github.com/allegroai/clearml/blob/master/examples/frameworks/fire) demonstrating integrating +See [code examples](https://github.com/clearml/clearml/blob/master/examples/frameworks/fire) demonstrating integrating ClearML with code that uses `fire`. diff --git a/docs/integrations/pytorch.md b/docs/integrations/pytorch.md index 2712e025..24b227f3 100644 --- a/docs/integrations/pytorch.md +++ b/docs/integrations/pytorch.md @@ -3,10 +3,10 @@ title: PyTorch --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + ClearML integrates seamlessly with [PyTorch](https://pytorch.org/), automatically logging its models. All you have to do is simply add two lines of code to your PyTorch script: @@ -28,11 +28,12 @@ And that's it! This creates a [ClearML Task](../fundamentals/task.md) which capt You can view all the task details in the [WebApp](../webapp/webapp_overview.md). -![Pytorch webapp](../img/examples_pytorch_distributed_example_08.png) +![Pytorch webapp](../img/examples_pytorch_distributed_example_08.png#light-mode-only) +![Pytorch webapp](../img/examples_pytorch_distributed_example_08_dark.png#dark-mode-only) ## Automatic Logging Control By default, when ClearML is integrated into your PyTorch script, it captures PyTorch models. But, you may want to have -more control over what your experiment logs. +more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -65,7 +66,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) @@ -87,7 +88,7 @@ Take a look at ClearML's PyTorch examples. The examples use PyTorch and ClearML additional tools, like argparse, TensorBoard, and matplotlib: * [PyTorch MNIST](../guides/frameworks/pytorch/pytorch_mnist.md) - Demonstrates ClearML automatically logging models created with PyTorch, and `argparse` command line parameters -* [PyTorch with Matplotlib](../guides/frameworks/pytorch/pytorch_matplotlib.md) - Demonstrates ClearML's automatic logging PyTorch models and matplotlib images. The images are presented in the resulting ClearML experiment's **Debug Samples** +* [PyTorch with Matplotlib](../guides/frameworks/pytorch/pytorch_matplotlib.md) - Demonstrates ClearML's automatic logging PyTorch models and matplotlib images. The images are presented in the resulting ClearML task's **Debug Samples** * [PyTorch with TensorBoard](../guides/frameworks/pytorch/pytorch_tensorboard.md) - Demonstrates ClearML automatically logging PyTorch models, and scalars, debug samples, and text logged using TensorBoard's `SummaryWriter` * [PyTorch TensorBoard Toy](../guides/frameworks/pytorch/tensorboard_toy_pytorch.md) - Demonstrates ClearML automatically logging debug samples logged using TensorBoard's `SummaryWriter` * [PyTorch TensorBoardX](../guides/frameworks/pytorch/pytorch_tensorboardx.md) - Demonstrates ClearML automatically logging PyTorch models, and scalars, debug samples, and text logged using TensorBoardX's `SummaryWriter` @@ -96,10 +97,10 @@ additional tools, like argparse, TensorBoard, and matplotlib: * [PyTorch Distributed](../guides/frameworks/pytorch/pytorch_distributed_example.md) - Demonstrates using ClearML with the [PyTorch Distributed Communications Package (`torch.distributed`)](https://pytorch.org/tutorials/beginner/dist_overview.html) ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -112,14 +113,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task diff --git a/docs/integrations/pytorch_lightning.md b/docs/integrations/pytorch_lightning.md index b9cbbe4f..e91b33ec 100644 --- a/docs/integrations/pytorch_lightning.md +++ b/docs/integrations/pytorch_lightning.md @@ -3,10 +3,10 @@ title: PyTorch Lightning --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [PyTorch Lightning](https://github.com/Lightning-AI/lightning) is a framework that simplifies the process of training and deploying PyTorch models. ClearML seamlessly integrates with PyTorch Lightning, automatically logging PyTorch models, parameters supplied by [LightningCLI](https://lightning.ai/docs/pytorch/stable/cli/lightning_cli.html), and more. @@ -37,7 +37,7 @@ See an example of PyTorch Lightning and ClearML in action [here](../guides/frame ## Automatic Logging Control By default, when ClearML is integrated into your script, it automatically captures information from supported frameworks, -and parameters from supported argument parsers. But, you may want to have more control over what your experiment logs. +and parameters from supported argument parsers. But, you may want to have more control over what your task logs. ### Frameworks To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). @@ -95,17 +95,17 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) See [Explicit Reporting Tutorial](../guides/reporting/explicit_reporting.md). ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -118,14 +118,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md), to cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task @@ -144,6 +145,6 @@ task.execute_remotely(queue_name='default', exit_process=True) ## Hyperparameter Optimization Use ClearML's [`HyperParameterOptimizer`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to find -the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../fundamentals/hpo.md) +the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../getting_started/hpo.md) for more information. diff --git a/docs/integrations/scikit_learn.md b/docs/integrations/scikit_learn.md index 813932b0..86d6b663 100644 --- a/docs/integrations/scikit_learn.md +++ b/docs/integrations/scikit_learn.md @@ -3,10 +3,10 @@ title: scikit-learn --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + ClearML integrates seamlessly with [scikit-learn](https://scikit-learn.org/stable/), automatically logging models created with `joblib`. @@ -24,14 +24,14 @@ And that's it! This creates a [ClearML Task](../fundamentals/task.md) which capt * Joblib model files * Console output * General details such as machine details, runtime, creation date etc. -* Hyperparameters created with standard python packages (e.g. argparse, click, Python Fire, etc.) +* Hyperparameters created with standard Python packages (e.g. argparse, click, Python Fire, etc.) * And more You can view all the task details in the [WebApp](../webapp/webapp_exp_track_visual.md). ## Automatic Logging Control By default, when ClearML is integrated into your scikit-learn script, it captures models, and -scalars. But, you may want to have more control over what your experiment logs. +scalars. But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -63,7 +63,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) @@ -78,10 +78,10 @@ additional tools, like Matplotlib: ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -94,14 +94,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task diff --git a/docs/integrations/seaborn.md b/docs/integrations/seaborn.md index 6c6114ae..54b65583 100644 --- a/docs/integrations/seaborn.md +++ b/docs/integrations/seaborn.md @@ -3,10 +3,10 @@ title: Seaborn --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [seaborn](https://seaborn.pydata.org/) is a Python library for data visualization. ClearML automatically captures plots created using `seaborn`. All you have to do is add two lines of code to your script: @@ -18,9 +18,9 @@ task = Task.init(task_name="", project_name="") ``` This will create a [ClearML Task](../fundamentals/task.md) that captures your script's information, including Git details, -uncommitted code, python environment, your `seaborn` plots, and more. View the seaborn plots in the [WebApp](../webapp/webapp_overview.md), -in the experiment's **Plots** tab. +uncommitted code, Python environment, your `seaborn` plots, and more. View the seaborn plots in the [WebApp](../webapp/webapp_overview.md), +in the task's **Plots** tab. ![Seaborn plot](../img/integrations_seaborn_plots.png) -View code example [here](https://github.com/allegroai/clearml/blob/master/examples/frameworks/matplotlib/matplotlib_example.py). +View code example [here](https://github.com/clearml/clearml/blob/master/examples/frameworks/matplotlib/matplotlib_example.py). diff --git a/docs/integrations/splunk.md b/docs/integrations/splunk.md index 0cd18911..2955d404 100644 --- a/docs/integrations/splunk.md +++ b/docs/integrations/splunk.md @@ -137,7 +137,7 @@ Configure the ClearML server to send API logs to Splunk using [Docker Compose](# To exclude specific API calls from the Splunk logs, add an environment variable with the following format: `CLEARML__apiserver__endpoints______log_call` and set it to `false`. -For example, the configuration below for servers on K8s Helm exclude the [`POST /debug.ping`](../references/api/debug.md##post-debugping) +For example, the configuration below for servers on K8s Helm exclude the [`POST /debug.ping`](../references/api/debug.md#post-debugping) call from the Splunk logs: ``` diff --git a/docs/integrations/storage.md b/docs/integrations/storage.md index e7d44c81..43fb9d11 100644 --- a/docs/integrations/storage.md +++ b/docs/integrations/storage.md @@ -124,6 +124,18 @@ sdk { To force usage of a non-AWS endpoint, port declaration is *always* needed (e.g. `host: "my-minio-host:9000"`), even for standard ports like `433` for HTTPS (e.g. `host: "my-minio-host:433"`). +:::important +Port specification is mandatory whenever you specify non-AWS S3 endpoint access. Use the following URI +format: `s3://://path`. + +This applies when: +* Setting output URIs for tasks (via SDK or UI) +* Registering Hyper-Dataset frames +* All fields where endpoint access is specified. +::: + + +##### TLS To enable TLS, pass `secure: true`. For example: ``` sdk { diff --git a/docs/integrations/tao.md b/docs/integrations/tao.md index f5e49558..63af9a85 100644 --- a/docs/integrations/tao.md +++ b/docs/integrations/tao.md @@ -8,13 +8,13 @@ logging metrics, model files, plots, debug samples, and more, so you can gain mo ## Setup -1. Install the `clearml` python package: +1. Install the `clearml` Python package: ```commandline pip install clearml ``` -1. To keep track of your experiments and/or data, ClearML needs to communicate to a server. You have 2 server options: +1. To keep track of your tasks and/or data, ClearML needs to communicate to a server. You have 2 server options: * Sign up for free to the [ClearML Hosted Service](https://app.clear.ml/) * Set up your own server, see [here](../deploying_clearml/clearml_server.md) 1. Connect the ClearML SDK to the server by creating credentials (go to the top right in the UI to **Settings > Workspace > Create new credentials**), @@ -69,7 +69,7 @@ logging metrics, model files, plots, debug samples, and more, so you can gain mo 1. Customize the ClearML Task through TAO Toolkit. Under `visualizer.clearml_config` of your training configuration file, you can set the following: * `task` - Name of the ClearML Task. In order to maintain a unique name per run, TAO Toolkit appends to the name - string a timestamp of the experiment creation time. + string a timestamp of the task creation time. * `project` - Project where the task will be stored * `tags` - Tags to label the task. @@ -94,10 +94,10 @@ You can view all of this captured information in the [ClearML Web UI](../webapp/ ![TAO UI plots](../img/integrations_nvidia_tao_plots.png) ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -111,13 +111,14 @@ cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task diff --git a/docs/integrations/tensorboard.md b/docs/integrations/tensorboard.md index d7e2d946..d002c582 100644 --- a/docs/integrations/tensorboard.md +++ b/docs/integrations/tensorboard.md @@ -3,9 +3,10 @@ title: TensorBoard --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md). +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + [TensorBoard](https://www.tensorflow.org/tensorboard) is TensorFlow's data visualization toolkit. ClearML automatically captures all data logged to TensorBoard. All you have to do is add two lines of code to your script: @@ -17,17 +18,19 @@ task = Task.init(task_name="", project_name="") ``` This will create a [ClearML Task](../fundamentals/task.md) that captures your script's information, including Git details, -uncommitted code, python environment, your TensorBoard metrics, plots, images, and text. +uncommitted code, Python environment, your TensorBoard metrics, plots, images, and text. -View the TensorBoard outputs in the [WebApp](../webapp/webapp_overview.md), in the experiment's page. +View the TensorBoard outputs in the [WebApp](../webapp/webapp_overview.md), in the task's page. -![TensorBoard WebApp scalars](../img/examples_pytorch_tensorboard_07.png) +![TensorBoard WebApp scalars](../img/examples_pytorch_tensorboard_07.png#light-mode-only) +![TensorBoard WebApp scalars](../img/examples_pytorch_tensorboard_07_dark.png#dark-mode-only) -![Tensorboard WebApp debug samples](../img/examples_tensorboard_toy_pytorch_02.png) +![Tensorboard WebApp debug samples](../img/examples_tensorboard_toy_pytorch_02.png#light-mode-only) +![Tensorboard WebApp debug samples](../img/examples_tensorboard_toy_pytorch_02_dark.png#dark-mode-only) ## Automatic Logging Control By default, when ClearML is integrated into your script, it captures all of your TensorBoard plots, images, and metrics. -But, you may want to have more control over what your experiment logs. +But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -52,7 +55,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) diff --git a/docs/integrations/tensorboardx.md b/docs/integrations/tensorboardx.md index 28681520..0adc7557 100644 --- a/docs/integrations/tensorboardx.md +++ b/docs/integrations/tensorboardx.md @@ -3,7 +3,7 @@ title: TensorboardX --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md). +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: [TensorboardX](https://tensorboardx.readthedocs.io/en/latest/tutorial.html#what-is-tensorboard-x) is a data @@ -18,15 +18,16 @@ task = Task.init(task_name="", project_name="") ``` This will create a [ClearML Task](../fundamentals/task.md) that captures your script's information, including Git details, -uncommitted code, python environment, your TensorboardX metrics, plots, images, and text. +uncommitted code, Python environment, your TensorboardX metrics, plots, images, and text. -View the TensorboardX outputs in the [WebApp](../webapp/webapp_overview.md), in the experiment's page. +View the TensorboardX outputs in the [WebApp](../webapp/webapp_overview.md), in the task's page. -![TensorboardX WebApp scalars](../img/examples_pytorch_tensorboardx_03.png) +![TensorboardX WebApp scalars](../img/examples_pytorch_tensorboardx_03.png#light-mode-only) +![TensorboardX WebApp scalars](../img/examples_pytorch_tensorboardx_03_dark.png#dark-mode-only) ## Automatic Logging Control By default, when ClearML is integrated into your script, it captures all of your TensorboardX plots, images, metrics, videos, and text. -But, you may want to have more control over what your experiment logs. +But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -51,7 +52,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) diff --git a/docs/integrations/tensorflow.md b/docs/integrations/tensorflow.md index 20c04a7b..2613ff9a 100644 --- a/docs/integrations/tensorflow.md +++ b/docs/integrations/tensorflow.md @@ -3,10 +3,10 @@ title: TensorFlow --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: + ClearML integrates with [TensorFlow](https://www.tensorflow.org/) out-of-the-box, automatically logging its models, definitions, scalars, as well as TensorBoard outputs. @@ -35,7 +35,7 @@ You can view all the task details in the [WebApp](../webapp/webapp_overview.md). ## Automatic Logging Control By default, when ClearML is integrated into your TensorFlow script, it captures TensorFlow definitions, models, and -scalars. But, you may want to have more control over what your experiment logs. +scalars. But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -68,7 +68,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) @@ -85,14 +85,14 @@ model checkpoints, TensorFlow definitions, and scalars logged using TensorFlow m logging of TensorBoard output and TensorFlow definitions. * [TensorBoard Toy](../guides/frameworks/tensorflow/tensorboard_toy.md) - Demonstrates ClearML's automatic logging of TensorBoard scalars, histograms, images, and text, as well as all console output and TensorFlow Definitions. -* [Absl flags](https://github.com/allegroai/clearml/blob/master/examples/frameworks/tensorflow/absl_flags.py) - Demonstrates +* [Absl flags](https://github.com/clearml/clearml/blob/master/examples/frameworks/tensorflow/absl_flags.py) - Demonstrates ClearML's automatic logging of parameters defined using `absl.flags` ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -105,14 +105,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task @@ -131,5 +132,5 @@ task.execute_remotely(queue_name='default', exit_process=True) ## Hyperparameter Optimization Use ClearML's [`HyperParameterOptimizer`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to find -the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../fundamentals/hpo.md) +the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../getting_started/hpo.md) for more information. diff --git a/docs/integrations/transformers.md b/docs/integrations/transformers.md index b3d7ba75..9483eeaa 100644 --- a/docs/integrations/transformers.md +++ b/docs/integrations/transformers.md @@ -9,13 +9,13 @@ ClearML automatically logs Transformer's models, parameters, scalars, and more. All you have to do is install and set up ClearML: -1. Install the `clearml` python package: +1. Install the `clearml` Python package: ```commandline pip install clearml ``` -1. To keep track of your experiments and/or data, ClearML needs to communicate to a server. You have 2 server options: +1. To keep track of your tasks and/or data, ClearML needs to communicate to a server. You have 2 server options: * Sign up for free to the [ClearML Hosted Service](https://app.clear.ml/) * Set up your own server, see [here](../deploying_clearml/clearml_server.md). 1. Connect the ClearML SDK to the server by creating credentials (go to the top right in the UI to **Settings > Workspace > Create new credentials**), @@ -25,7 +25,7 @@ All you have to do is install and set up ClearML: clearml-init ``` -That's it! In every training run from now on, the ClearML experiment +That's it! In every training run from now on, the ClearML task manager will capture: * Source code and uncommitted changes * Hyperparameters - PyTorch trainer [parameters](https://huggingface.co/docs/transformers/v4.34.1/en/main_classes/trainer#transformers.TrainingArguments) @@ -50,19 +50,20 @@ To log the models created during training, set the `CLEARML_LOG_MODEL` environme You can see all the captured data in the task's page of the ClearML [WebApp](../webapp/webapp_exp_track_visual.md). -![transformers scalars](../img/integrations_transformers_scalars.png) +![transformers scalars](../img/integrations_transformers_scalars.png#light-mode-only) +![transformers scalars](../img/integrations_transformers_scalars_dark.png#dark-mode-only) -Additionally, you can view all of your Transformers runs tracked by ClearML in the [Experiments Table](../webapp/webapp_model_table.md). +Additionally, you can view all of your Transformers runs tracked by ClearML in the [Task Table](../webapp/webapp_model_table.md). Add custom columns to the table, such as mAP values, so you can easily sort and see what is the best performing model. -You can also select multiple experiments and directly [compare](../webapp/webapp_exp_comparing.md) them. +You can also select multiple tasks and directly [compare](../webapp/webapp_exp_comparing.md) them. See an example of Transformers and ClearML in action [here](../guides/frameworks/huggingface/transformers.md). ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -76,19 +77,33 @@ cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) -Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task -with the new configuration on a remote machine: -* Clone the experiment -* Edit the hyperparameters and/or other details -* Enqueue the task +Use ClearML's web interface to reproduce task runs and edit their details, like hyperparameters or input models, then execute the tasks +with the new configuration on a remote machine. + +When ClearML is integrated into a script, it captures and stores configurations, such as hyperparameters +and model settings. When executing a task, the ClearML Agent will, by default, override runtime configuration values +(such as hyperparameters and environment variables) with the values specified in the task. + +However, for tasks using Transformers, the default behavior is different. By default, Transformers tasks ignore UI +overrides and use execution-time parameters (such as environment variables). This is done to prevent potential issues +with environment-specific settings when running tasks on different machines. + +**To rerun a task with modified configuration:** +1. Clone the task +1. Edit the hyperparameters and/or other details. +1. In the **CONFIGURATION > HYPERPARAMETERS > Transformers** section, set both `_ignore_hparams_ui_overrides_` and `_ignore_model_config_ui_overrides_` + to `False` . This allows the task to use the new hyperparameter and model + configuration values respectively during execution. +1. Enqueue the task The ClearML Agent executing the task will use the new values to [override any hard coded values](../clearml_agent.md). ## Hyperparameter Optimization Use ClearML's [`HyperParameterOptimizer`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to find -the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../fundamentals/hpo.md) +the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../getting_started/hpo.md) for more information. diff --git a/docs/integrations/xgboost.md b/docs/integrations/xgboost.md index f8c10349..44dcbde0 100644 --- a/docs/integrations/xgboost.md +++ b/docs/integrations/xgboost.md @@ -3,8 +3,7 @@ title: XGBoost --- :::tip -If you are not already using ClearML, see [Getting Started](../getting_started/ds/ds_first_steps.md) for setup -instructions. +If you are not already using ClearML, see [ClearML Setup instructions](../clearml_sdk/clearml_sdk_setup). ::: ClearML integrates seamlessly with [XGBoost](https://xgboost.readthedocs.io/en/stable/), automatically logging its models, @@ -25,7 +24,7 @@ And that's it! This creates a [ClearML Task](../fundamentals/task.md) which capt * Scalars (loss, learning rates) * Console output * General details such as machine details, runtime, creation date etc. -* Hyperparameters created with standard python packages (e.g. argparse, click, Python Fire, etc.) +* Hyperparameters created with standard Python packages (e.g. argparse, click, Python Fire, etc.) * And more :::tip Logging Plots @@ -52,11 +51,12 @@ except ImportError: You can view all the task details in the [WebApp](../webapp/webapp_overview.md). -![Experiment scalars](../img/examples_xgboost_metric_scalars.png) +![Task scalars](../img/examples_xgboost_metric_scalars.png#light-mode-only) +![Task scalars](../img/examples_xgboost_metric_scalars_dark.png#dark-mode-only) ## Automatic Logging Control By default, when ClearML is integrated into your XGBoost script, it captures models, and -scalars. But, you may want to have more control over what your experiment logs. +scalars. But, you may want to have more control over what your task logs. To control a task's framework logging, use the `auto_connect_frameworks` parameter of [`Task.init()`](../references/sdk/task.md#taskinit). Completely disable all automatic logging by setting the parameter to `False`. For finer grained control of logged @@ -89,7 +89,7 @@ To augment its automatic logging, ClearML also provides an explicit logging inte See more information about explicitly logging information to a ClearML Task: * [Models](../clearml_sdk/model_sdk.md#manually-logging-models) * [Configuration](../clearml_sdk/task_sdk.md#configuration) (e.g. parameters, configuration files) -* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or python objects created by a task) +* [Artifacts](../clearml_sdk/task_sdk.md#artifacts) (e.g. output files or Python objects created by a task) * [Scalars](../clearml_sdk/task_sdk.md#scalars) * [Text/Plots/Debug Samples](../fundamentals/logger.md#manual-reporting) @@ -103,10 +103,10 @@ additional tools, like Matplotlib and scikit-learn: * [XGBoost and scikit-learn](../guides/frameworks/xgboost/xgboost_sample.md) - Demonstrates ClearML automatic logging of XGBoost scalars and models ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -119,14 +119,15 @@ Use the ClearML [Autoscalers](../cloud_autoscaling/autoscaling_overview.md) to h cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: the autoscaler automatically spins up and shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) Use ClearML's web interface to edit task details, like configuration parameters or input models, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task @@ -145,5 +146,5 @@ task.execute_remotely(queue_name='default', exit_process=True) ## Hyperparameter Optimization Use ClearML's [`HyperParameterOptimizer`](../references/sdk/hpo_optimization_hyperparameteroptimizer.md) class to find -the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../fundamentals/hpo.md) +the hyperparameter values that yield the best performing models. See [Hyperparameter Optimization](../getting_started/hpo.md) for more information. diff --git a/docs/integrations/yolov5.md b/docs/integrations/yolov5.md index 150afc26..d574a184 100644 --- a/docs/integrations/yolov5.md +++ b/docs/integrations/yolov5.md @@ -7,17 +7,17 @@ built in logger: * Track every YOLOv5 training run in ClearML * Version and easily access your custom training data with [ClearML Data](../clearml_data/clearml_data.md) * Remotely train and monitor your YOLOv5 training runs using [ClearML Agent](../clearml_agent.md) -* Get the very best mAP using ClearML [Hyperparameter Optimization](../fundamentals/hpo.md) +* Get the very best mAP using ClearML [Hyperparameter Optimization](../getting_started/hpo.md) * Turn your newly trained YOLOv5 model into an API with just a few commands using [ClearML Serving](../clearml_serving/clearml_serving.md) ## Setup -1. Install the clearml python package: +1. Install the clearml Python package: ```commandline pip install clearml ``` -1. To keep track of your experiments and/or data, ClearML needs to communicate to a server. You have 2 server options: +1. To keep track of your tasks and/or data, ClearML needs to communicate to a server. You have 2 server options: * Sign up for free to the [ClearML Hosted Service](https://app.clear.ml/) * Set up your own server, see [here](../deploying_clearml/clearml_server.md). 1. Connect the ClearML SDK to the server by creating credentials (go to the top right in the UI to **Settings > Workspace > Create new credentials**), @@ -32,13 +32,13 @@ code necessary. ## Training YOLOv5 with ClearML -To enable ClearML experiment tracking, simply install the `clearml` pip package in your execution environment. +To enable ClearML task tracking, simply install the `clearml` pip package in your execution environment. ```commandline pip install clearml>=1.2.0 ``` -This will enable integration with the YOLOv5 training script. In every training run from now on, the ClearML experiment +This will enable integration with the YOLOv5 training script. In every training run from now on, the ClearML task manager will capture: * Source code and uncommitted changes * Installed packages @@ -67,14 +67,14 @@ task within the `example` project. ::: You can see all the captured data in the task's page of the ClearML [WebApp](../webapp/webapp_exp_track_visual.md). -Additionally, you can view all of your YOLOv5 runs tracked by ClearML in the [Experiments Table](../webapp/webapp_model_table.md). +Additionally, you can view all of your YOLOv5 runs tracked by ClearML in the [Task Table](../webapp/webapp_model_table.md). Add custom columns to the table, such as mAP values, so you can easily sort and see what is the best performing model. -You can also select multiple experiments and directly [compare](../webapp/webapp_exp_comparing.md) them. +You can also select multiple tasks and directly [compare](../webapp/webapp_exp_comparing.md) them. ## Dataset Version Management Versioning your data separately from your code makes it easier to access the dataset version you need for your -experiments. [ClearML Data](../clearml_data/clearml_data.md) makes data easily accessible from every machine, and links -data and experiments for better traceability. +tasks. [ClearML Data](../clearml_data/clearml_data.md) makes data easily accessible from every machine, and links +data and tasks for better traceability. ### Prepare Your Dataset The [YOLOv5 repository](https://github.com/ultralytics/yolov5) supports a number of different datasets by using yaml @@ -150,10 +150,10 @@ python train.py --img 640 --batch 16 --epochs 3 --data clearml:// Workspace > Create new credentials**), @@ -43,13 +43,13 @@ code necessary. ## Training YOLOv8 with ClearML -To enable ClearML experiment tracking, simply install the `clearml` pip package in your execution environment. +To enable ClearML task tracking, simply install the `clearml` pip package in your execution environment. ```commandline pip install clearml>=1.2.0 ``` -This will enable integration with the YOLOv8 training script. In every training run from now on, the ClearML experiment +This will enable integration with the YOLOv8 training script. In every training run from now on, the ClearML task manager will capture: * Source code and uncommitted changes * Installed packages @@ -90,15 +90,15 @@ task within the `example` project. ::: You can see all the captured data in the task's page of the ClearML [WebApp](../webapp/webapp_exp_track_visual.md). -Additionally, you can view all of your YOLOv8 runs tracked by ClearML in the [Experiments Table](../webapp/webapp_model_table.md). +Additionally, you can view all of your YOLOv8 runs tracked by ClearML in the [Task Table](../webapp/webapp_model_table.md). Add custom columns to the table, such as mAP values, so you can easily sort and see what is the best performing model. -You can also select multiple experiments and directly [compare](../webapp/webapp_exp_comparing.md) them. +You can also select multiple tasks and directly [compare](../webapp/webapp_exp_comparing.md) them. ## Remote Execution -ClearML logs all the information required to reproduce an experiment on a different machine (installed packages, +ClearML logs all the information required to reproduce a task run on a different machine (installed packages, uncommitted changes etc.). The [ClearML Agent](../clearml_agent.md) listens to designated queues and when a task is enqueued, the agent pulls it, recreates its execution environment, and runs it, reporting its scalars, plots, etc. to the -experiment manager. +task manager. Deploy a ClearML Agent onto any machine (e.g. a cloud VM, a local GPU machine, your own laptop) by simply running the following command on it: @@ -112,10 +112,10 @@ cloud of your choice (AWS, GCP, Azure) and automatically deploy ClearML agents: shuts down instances as needed, according to a resource budget that you set. -### Cloning, Editing, and Enqueuing +### Reproducing Task Runs -ClearML logs all the information required to reproduce an experiment, but you may also want to change a few parameters -and task details when you re-run an experiment, which you can do through ClearML's UI. +ClearML logs all the information required to reproduce a task run, but you may also want to change a few parameters +and task details when you re-run it, which you can do through ClearML's UI. In order to be able to override parameters via the UI, you have to run your code to [create a ClearML Task](../clearml_sdk/task_sdk.md#task-creation), which will log all the @@ -160,10 +160,11 @@ any of them through the UI. Use the UI to edit task details, then execute the task with the new configuration on a remote machine: -* Clone the experiment +* Clone the task * Edit the hyperparameters and/or other details * Enqueue the task The ClearML Agent executing the task will use the new values to [override any hard coded values](../clearml_agent.md). -![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5.gif#light-mode-only) +![Cloning, editing, enqueuing gif](../img/gif/integrations_yolov5_dark.gif#dark-mode-only) diff --git a/docs/model_registry.md b/docs/model_registry.md index 66347370..2bb78762 100644 --- a/docs/model_registry.md +++ b/docs/model_registry.md @@ -23,7 +23,7 @@ You can use the model catalog to trigger CI/CD pipelines based on changes (e.g. publishing models). The ClearML SDK makes it easy for colleagues to access others' work and always fetch models based on the model catalog -or the experiment that created the model. +or the task that created the model. The ClearML web UI visualizes the model catalog for complete observability and lineage of the model lifecycle, providing governance at scale. @@ -77,7 +77,7 @@ See [Automatic Logging](clearml_sdk/task_sdk.md#automatic-logging) for more info ### Manual Logging -You can explicitly specify an experiment’s models using ClearML `InputModel` and `OutputModel` classes. +You can explicitly specify a task’s models using ClearML `InputModel` and `OutputModel` classes. #### InputModel @@ -101,8 +101,8 @@ input_model_2 = InputModel.import_model( ) ``` -After instantiating an InputModel instance, you can connect it to a task object, so the model can be traced to an -experiment. +After instantiating an InputModel instance, you can connect it to a task object, so the model can be traced to n +task. ```python # Connect the input model to the task @@ -111,10 +111,10 @@ task.connect(input_model) #### OutputModel -Use the [`OutputModel`](references/sdk/model_outputmodel.md) class to log your experiment outputs. An OutputModel object +Use the [`OutputModel`](references/sdk/model_outputmodel.md) class to log your task outputs. An OutputModel object is instantiated with a task object as an argument (see [`task`](references/sdk/model_outputmodel.md) parameter), so it's registered as the task's output model. Since OutputModel objects are connected to tasks, the models are traceable in -experiments. +tasks. ```python from clearml import OutputModel, Task @@ -159,9 +159,9 @@ ClearML models are independent entities facilitating their use in many use cases You can modify your models’ details via the UI: add metadata, change names, reconfigure, and add/edit label enumeration. Modified models can be used as input models in your ClearML Tasks. -You can modify the models that an experiment trains: -1. Clone an experiment -1. Go to the experiment's **Artifacts** tab +You can modify the models that a task trains: +1. Clone a task +1. Go to the task's **Artifacts** tab 1. Hover over an input model's `Model name` field and click **Edit**. Then click Edit Pencil. This will open up a window with a model table, where you can select any model from the model catalog. diff --git a/docs/overview.md b/docs/overview.md new file mode 100644 index 00000000..d6ddb186 --- /dev/null +++ b/docs/overview.md @@ -0,0 +1,82 @@ +--- +id: overview +title: What is ClearML? +slug: / +--- + +# ClearML Documentation + +## Overview +Welcome to the documentation for ClearML, the end-to-end platform for streamlining AI development and deployment. ClearML consists of three essential layers: +1. [**Infrastructure Control Plane**](#infrastructure-control-plane) (Cloud/On-Prem Agnostic) +2. [**AI Development Center**](#ai-development-center) +3. [**GenAI App Engine**](#genai-app-engine) + +Each layer provides distinct functionality to ensure an efficient and scalable AI workflow from development to deployment. + +![Webapp gif](img/gif/webapp_screenshots.gif#light-mode-only) +![Webapp gif](img/gif/webapp_screenshots_dark.gif#dark-mode-only) + +--- + +## Infrastructure Control Plane +The Infrastructure Control Plane serves as the foundation of the ClearML platform, offering compute resource provisioning and management, enabling administrators to make the compute available through GPUaaS capabilities and no-hassle configuration. +Utilizing the Infrastructure Control Plane, DevOps and IT teams can manage and optimize GPU resources to ensure high performance and cost efficiency. + +#### Features +- **Resource Management:** Automates the allocation and management of GPU resources. +- **Workload Autoscaling:** Seamlessly scale GPU resources based on workload demands. +- **Monitoring and Logging:** Provides comprehensive monitoring and logging for GPU utilization and performance. +- **Cost Optimization:** Consolidate cloud and on-prem compute into a seamless GPUaaS offering +- **Deployment Flexibility:** Easily run your workloads on both cloud and on-premises compute. + +![Infrastructure control plane](img/gif/infra_control_plane.gif#light-mode-only) +![Infrastructure control plane](img/gif/infra_control_plane_dark.gif#dark-mode-only) + +--- + +## AI Development Center +The AI Development Center offers a robust environment for developing, training, and testing AI models. It is designed to be cloud and on-premises agnostic, providing flexibility in deployment. + +#### Features +- **Integrated Development Environment:** A comprehensive IDE for training, testing, and debugging AI models. +- **Model Training:** Scalable and distributed model training and hyperparameter optimization. +- **Data Management:** Tools for data preprocessing, management, and versioning. +- **Experiment Tracking:** Track metrics, artifacts and log. manage versions, and compare results. +- **Workflow Automation:** Build pipelines to formalize your workflow + +![AI Dev center](img/gif/ai_dev_center.gif#light-mode-only) +![AI Dev center](img/gif/ai_dev_center_dark.gif#dark-mode-only) + +--- + +## GenAI App Engine +The GenAI App Engine is designed to deploy large language models (LLM) into GPU clusters and manage various AI workloads, including Retrieval-Augmented Generation (RAG) tasks. This layer also handles networking, authentication, and role-based access control (RBAC) for deployed services. + +#### Features +- **LLM Deployment:** Seamlessly deploy LLMs into GPU clusters. +- **RAG Workloads:** Efficiently manage and execute RAG workloads. +- **Networking and Authentication:** Deploy GenAI through secure, authenticated network endpoints +- **RBAC:** Implement RBAC to control access to deployed services. + +![GenAI engine](img/gif/genai_engine.gif#light-mode-only) +![GenAI engine](img/gif/genai_engine_dark.gif#dark-mode-only) + +--- + +## Getting Started +To begin using the ClearML, follow these steps: +1. **Set Up Infrastructure Control Plane:** Allocate and manage your GPU resources. +2. **Develop AI Models:** Use the AI Development Center to develop and train your models. +3. **Deploy AI Models:** Deploy your models using the GenAI App Engine. + +For detailed instructions on each step, refer to the respective sections in this documentation. + +--- + +## Support +For feature requests or bug reports, see ClearML on [GitHub](https://github.com/clearml/clearml/issues). + +If you have any questions, join the discussion on the **ClearML** [Slack channel](https://joinslack.clear.ml), or tag your questions on [stackoverflow](https://stackoverflow.com/questions/tagged/clearml) with the **clearml** tag. + +Lastly, you can always find us at [support@clearml.ai](mailto:support@clearml.ai?subject=ClearML). \ No newline at end of file diff --git a/docs/pipelines/pipelines.md b/docs/pipelines/pipelines.md index a1a9195a..0860087c 100644 --- a/docs/pipelines/pipelines.md +++ b/docs/pipelines/pipelines.md @@ -12,7 +12,8 @@ products such as artifacts and parameters. When run, the controller will sequentially launch the pipeline steps. The pipeline logic and steps can be executed locally, or on any machine using the [clearml-agent](../clearml_agent.md). -![Pipeline UI](../img/pipelines_DAG.png) +![Pipeline UI](../img/webapp_pipeline_DAG.png#light-mode-only) +![Pipeline UI](../img/webapp_pipeline_DAG_dark.png#dark-mode-only) The [Pipeline Run](../webapp/pipelines/webapp_pipeline_viewing.md) page in the web UI displays the pipeline's structure in terms of executed steps and their status, as well as the run's configuration parameters and output. See [pipeline UI](../webapp/pipelines/webapp_pipeline_page.md) @@ -20,7 +21,7 @@ for more details. ClearML pipelines are created from code using one of the following: * [PipelineController](pipelines_sdk_tasks.md) class - A pythonic interface for defining and configuring the pipeline - controller and its steps. The controller and steps can be functions in your python code, or existing [ClearML tasks](../fundamentals/task.md). + controller and its steps. The controller and steps can be functions in your Python code, or existing [ClearML tasks](../fundamentals/task.md). * [PipelineDecorator](pipelines_sdk_function_decorators.md) class - A set of Python decorators which transform your functions into the pipeline controller and steps @@ -35,7 +36,7 @@ example of a pipeline with concurrent steps. ClearML supports multiple modes for pipeline execution: * **Remote Mode** (default) - In this mode, the pipeline controller logic is executed through a designated queue, and all the pipeline steps are launched remotely through their respective queues. Since each task is executed independently, - it can have control over its git repository (if needed), required python packages, and the specific container to use. + it can have control over its git repository (if needed), required Python packages, and the specific container to use. * **Local Mode** - In this mode, the pipeline is executed locally, and the steps are executed as sub-processes. Each subprocess uses the exact same Python environment as the main pipeline logic. * **Debugging Mode** (for PipelineDecorator) - In this mode, the entire pipeline is executed locally, with the pipeline @@ -102,7 +103,12 @@ You can rerun the pipeline programmatically or via the ClearML Web UI: * To launch a new pipeline run in the UI, click **+ NEW RUN** in the [pipeline runs](../webapp/pipelines/webapp_pipeline_table.md) page. This opens a **NEW RUN** modal, where you can set the run's parameters and execution queue. - ![Pipeline params UI](../img/pipelines_new_run.png) +
+ + ![Pipeline params UI](../img/pipelines_new_run.png#light-mode-only) + ![Pipeline params UI](../img/pipelines_new_run_dark.png#dark-mode-only) + +
The new pipeline run will be executed through the execution queue by a ClearML agent. The agent will rebuild the pipeline according to the configuration and DAG that was captured in the original run, and override the original diff --git a/docs/pipelines/pipelines_sdk_function_decorators.md b/docs/pipelines/pipelines_sdk_function_decorators.md index 5c84626e..5345d116 100644 --- a/docs/pipelines/pipelines_sdk_function_decorators.md +++ b/docs/pipelines/pipelines_sdk_function_decorators.md @@ -4,14 +4,14 @@ title: PipelineDecorator ## Creating Pipelines Using Function Decorators -Use the [`PipelineDecorator`](../references/sdk/automation_controller_pipelinecontroller.md#class-automationcontrollerpipelinedecorator) -class to create pipelines from your existing functions. Use [`@PipelineDecorator.component`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorcomponent) -to denote functions that comprise the steps of your pipeline, and [`@PipelineDecorator.pipeline`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorpipeline) +Use the [`PipelineDecorator`](../references/sdk/automation_controller_pipelinedecorator.md#class-automationcontrollerpipelinedecorator) +class to create pipelines from your existing functions. Use [`@PipelineDecorator.component`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorcomponent) +to denote functions that comprise the steps of your pipeline, and [`@PipelineDecorator.pipeline`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorpipeline) for your main pipeline execution logic function. ## @PipelineDecorator.pipeline -Using the [`@PipelineDecorator.pipeline`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorpipeline) +Using the [`@PipelineDecorator.pipeline`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorpipeline) decorator transforms the function which implements your pipeline's execution logic to a ClearML pipeline controller, an independently executed task. @@ -45,7 +45,7 @@ def main(pickle_url, mock_parameter='mock'): the following format: `{'section_name':['param_name']]}`. For example, the pipeline in the code above will store the `pickle_url` parameter in the `General` section and `mock_parameter` in the `Mock` section. By default, arguments will be stored in the `Args` section. -* `pool_frequency` - The polling frequency (in minutes) for monitoring experiments / states. +* `pool_frequency` - The polling frequency (in minutes) for monitoring tasks / states. * `add_pipeline_tags` - If `True`, add `pipe: ` tag to all steps (Tasks) created by this pipeline (this is useful to create better visibility in projects with multiple pipelines, and for easy selection) (default: `False`). @@ -67,16 +67,21 @@ def main(pickle_url, mock_parameter='mock'): When the function is called, a corresponding ClearML Controller Task is created: its arguments are logged as the task's parameters. When launching a new pipeline run from the [UI](../webapp/pipelines/webapp_pipeline_page.md), you can modify their values for the new run. -![Pipeline new run](../img/pipelines_new_run.png) +
+ +![Pipeline new run](../img/pipelines_new_run.png#light-mode-only) +![Pipeline new run](../img/pipelines_new_run_dark.png#dark-mode-only) + +
## @PipelineDecorator.component -Using the [`@PipelineDecorator.component`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorcomponent) +Using the [`@PipelineDecorator.component`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorcomponent) decorator transforms a function into a ClearML pipeline step when called from a pipeline controller. When the pipeline controller calls a pipeline step, a corresponding ClearML task is created. :::tip Package Imports -In the case that the `skip_global_imports` parameter of [`@PipelineDecorator.pipeline`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorpipeline) +In the case that the `skip_global_imports` parameter of [`@PipelineDecorator.pipeline`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorpipeline) is set to `False`, all global imports will be automatically imported at the beginning of each step's execution. Otherwise, if set to `True`, make sure that each function which makes up a pipeline step contains package imports, which are automatically logged as required packages for the pipeline execution step. @@ -110,7 +115,7 @@ def step_one(pickle_data_url: str, extra: int = 43): * `packages` - A list of required packages or a local requirements.txt file. Example: `["tqdm>=2.1", "scikit-learn"]` or `"./requirements.txt"`. If not provided, packages are automatically added based on the imports used inside the function. * `execution_queue` (optional) - Queue in which to enqueue the specific step. This overrides the queue set with the - [`PipelineDecorator.set_default_execution_queue method`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorset_default_execution_queue) + [`PipelineDecorator.set_default_execution_queue method`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorset_default_execution_queue) method. * `continue_on_fail` - If `True`, a failed step does not cause the pipeline to stop (or marked as failed). Notice, that steps that are connected (or indirectly connected) to the failed step are skipped (default `False`) @@ -186,14 +191,14 @@ specify which frameworks to log. See `Task.init`'s [`auto_connect_framework` par * `auto_connect_arg_parser` - Control automatic logging of argparse objects. See `Task.init`'s [`auto_connect_arg_parser` parameter](../references/sdk/task.md#taskinit) You can also directly upload a model or an artifact from the step to the pipeline controller, using the -[`PipelineDecorator.upload_model`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorupload_model) -and [`PipelineDecorator.upload_artifact`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorupload_artifact) +[`PipelineDecorator.upload_model`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorupload_model) +and [`PipelineDecorator.upload_artifact`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorupload_artifact) methods respectively. ## Controlling Pipeline Execution ### Default Execution Queue -The [`PipelineDecorator.set_default_execution_queue`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorset_default_execution_queue) +The [`PipelineDecorator.set_default_execution_queue`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorset_default_execution_queue) method lets you set a default queue through which all pipeline steps will be executed. Once set, step-specific overrides can be specified through the `@PipelineDecorator.component` decorator. @@ -224,9 +229,9 @@ You can run the pipeline logic locally, while keeping the pipeline components ex ::: #### Debugging Mode -In debugging mode, the pipeline controller and all components are treated as regular python functions, with components +In debugging mode, the pipeline controller and all components are treated as regular Python functions, with components called synchronously. This mode is great to debug the components and design the pipeline as the entire pipeline is -executed on the developer machine with full ability to debug each function call. Call [`PipelineDecorator.debug_pipeline`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratordebug_pipeline) +executed on the developer machine with full ability to debug each function call. Call [`PipelineDecorator.debug_pipeline`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratordebug_pipeline) before the main pipeline logic function call. Example: @@ -241,8 +246,8 @@ if __name__ == '__main__': In local mode, the pipeline controller creates Tasks for each component, and component functions calls are translated into sub-processes running on the same machine. Notice that the data is passed between the components and the logic with the exact same mechanism as in the remote mode (i.e. hyperparameters / artifacts), with the exception that the execution -itself is local. Notice that each subprocess is using the exact same python environment as the main pipeline logic. Call -[`PipelineDecorator.run_locally`](../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorrun_locally) +itself is local. Notice that each subprocess is using the exact same Python environment as the main pipeline logic. Call +[`PipelineDecorator.run_locally`](../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorrun_locally) before the main pipeline logic function. Example: diff --git a/docs/pipelines/pipelines_sdk_tasks.md b/docs/pipelines/pipelines_sdk_tasks.md index 7f28668f..f1d03fd8 100644 --- a/docs/pipelines/pipelines_sdk_tasks.md +++ b/docs/pipelines/pipelines_sdk_tasks.md @@ -29,7 +29,7 @@ You can define parameters for controlling different pipeline runs: pipe.add_parameter( name='pickle_url', description='url to pickle file', - default='https://github.com/allegroai/events/raw/master/odsc20-east/generic/iris_dataset.pkl' + default='https://github.com/clearml/events/raw/master/odsc20-east/generic/iris_dataset.pkl' ) ``` @@ -42,7 +42,12 @@ These parameters can be programmatically injected into a step's configuration us When launching a new pipeline run from the [UI](../webapp/pipelines/webapp_pipeline_table.md), you can modify their values for the new run. -![Pipeline new run](../img/pipelines_new_run.png) +
+ +![Pipeline new run](../img/pipelines_new_run.png#light-mode-only) +![Pipeline new run](../img/pipelines_new_run_dark.png#dark-mode-only) + +
### Additional Configuration You can connect configuration dictionaries or files to a pipeline controller using diff --git a/docs/references/sdk/automation_controller_pipelinedecorator.md b/docs/references/sdk/automation_controller_pipelinedecorator.md new file mode 100644 index 00000000..0545db42 --- /dev/null +++ b/docs/references/sdk/automation_controller_pipelinedecorator.md @@ -0,0 +1,5 @@ +--- +title: PipelineDecorator +--- + +**AutoGenerated PlaceHolder** \ No newline at end of file diff --git a/docs/release_notes/clearml_agent/ver_0_12.md b/docs/release_notes/clearml_agent/ver_0_12.md index 1e0f5399..38e95cd3 100644 --- a/docs/release_notes/clearml_agent/ver_0_12.md +++ b/docs/release_notes/clearml_agent/ver_0_12.md @@ -22,8 +22,8 @@ title: Version 0.12 * Windows support! YES, you can now have Windows machines as part of your cluster (notice --docker is not supported on Windows). * Add initial Conda package manager support (still in beta). * Add --gpus and --cpu-only for easier GPU control when running multiple `trains-agent` instances on the same machine. -* [python_binary](https://github.com/allegroai/trains-agent/blob/master/docs/trains.conf#L35) can now be specified (the default is the same Python binary executing the `trains-agent`). -* Fix Issue ([GitHub Issue #2](https://github.com/allegroai/trains-agent/issues/2)). +* [python_binary](https://github.com/clearml/clearml-agent/blob/831b36c4246bb4dfe150407461e0d01166bc6e92/docs/trains.conf#L35) can now be specified (the default is the same Python binary executing the `trains-agent`). +* Fix Issue ([GitHub Issue #2](https://github.com/clearml/clearml-agent/issues/2)). ### Trains Agent 0.12.0 @@ -36,4 +36,4 @@ TRAINS Agent - Initial Release * Support for standalone scripts and Jupyter Notebooks. * TRAINS-server v0.12 and above. * TRAINS v0.11.3 and above. -* Sample configuration file available [here](https://github.com/allegroai/trains-agent/blob/master/docs/trains.conf). +* Sample configuration file available [here](https://github.com/clearml/clearml-agent/blob/master/docs/trains.conf). diff --git a/docs/release_notes/clearml_agent/ver_0_14.md b/docs/release_notes/clearml_agent/ver_0_14.md index bf2c4c7c..6d85214b 100644 --- a/docs/release_notes/clearml_agent/ver_0_14.md +++ b/docs/release_notes/clearml_agent/ver_0_14.md @@ -23,10 +23,10 @@ title: Version 0.14 **Features and Bug Fixes** * Add support for `trains-agent execute --id --docker` that allows executing a specific experiment inside a docker container. * Add support for `trains-agent execute --id --clone` that clones the provided experiment and executes the cloned experiment. -* Add support for `APIClient.models.delete` to allow programmatically deleting a model ([GitHub trains-server Issue #32](https://github.com/allegroai/trains-server/issues/32)). +* Add support for `APIClient.models.delete` to allow programmatically deleting a model ([GitHub trains-server Issue #32](https://github.com/clearml/clearml-server/issues/32)). * Add daemon support for passing storage-related OS environment variables to experiments executed inside a Docker container (supported by trains>=0.13.3): * AWS: `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` and `AWS_DEFAULT_REGION` * Azure: `AZURE_STORAGE_ACCOUNT` and `AZURE_STORAGE_KEY` * Google: `GOOGLE_APPLICATION_CREDENTIALS` -* Fix Git checkout with submodules ([GitHub Issue #112](https://github.com/allegroai/trains/issues/112)). +* Fix Git checkout with submodules ([GitHub Issue #112](https://github.com/clearml/clearml/issues/112)). * Docker image in command line takes precedence over the Docker image specified in an experiment. \ No newline at end of file diff --git a/docs/release_notes/clearml_agent/ver_0_15.md b/docs/release_notes/clearml_agent/ver_0_15.md index 87c6fc5d..60848b44 100644 --- a/docs/release_notes/clearml_agent/ver_0_15.md +++ b/docs/release_notes/clearml_agent/ver_0_15.md @@ -15,9 +15,9 @@ title: Version 0.15 **Bug Fixes** * Fix initialization wizard (allow at most two verification retries, then print error). -* Add warning on `--gpus` with no detected CUDA version ([GitHub trains-agent Issue 24](https://github.com/allegroai/trains-agent/issues/24)). -* Add `agent.force_git_ssh_protocol` configuration option to force all Git links to `ssh://` ([GitHub trains-agent Issue 16](https://github.com/allegroai/trains-agent/issues/16)). -* Add Git user / pass permission into pip package installation from Git repository ([GitHub trains-agent Issue 22](https://github.com/allegroai/trains-agent/issues/22)). +* Add warning on `--gpus` with no detected CUDA version ([GitHub trains-agent Issue 24](https://github.com/clearml/clearml-agent/issues/24)). +* Add `agent.force_git_ssh_protocol` configuration option to force all Git links to `ssh://` ([GitHub trains-agent Issue 16](https://github.com/clearml/clearml-agent/issues/16)). +* Add Git user / pass permission into pip package installation from Git repository ([GitHub trains-agent Issue 22](https://github.com/clearml/clearml-agent/issues/22)). ### Trains Agent 0.15.0 @@ -37,7 +37,7 @@ title: Version 0.15 **Bug Fixes** -* Fix init wizard, correctly display the input servers ([GitHub Issue #19](https://github.com/allegroai/trains-agent/issues/19)). +* Fix init wizard, correctly display the input servers ([GitHub Issue #19](https://github.com/clearml/clearml-agent/issues/19)). * Improve docker host-mount support, use `TRAINS_AGENT_DOCKER_HOST_MOUNT` environment variable. * Support pip v20.1 local/http package reference in pip freeze. * Fix detached mode to correctly use cache folder slots. diff --git a/docs/release_notes/clearml_agent/ver_0_16.md b/docs/release_notes/clearml_agent/ver_0_16.md index c5f5c412..c02e1890 100644 --- a/docs/release_notes/clearml_agent/ver_0_16.md +++ b/docs/release_notes/clearml_agent/ver_0_16.md @@ -6,7 +6,7 @@ title: Version 0.16 ::: -### Trains-Agent 0.16.2 +### Trains Agent 0.16.2 **Features** @@ -23,7 +23,7 @@ title: Version 0.16 - Allow selecting external `trains.conf` file for the pod itself. - Allow providing pod template, extra bash init script, alternate SSH server port, gateway address (k8s ingress / ELB). -- Allow specifying `cudatoolkit` version in the "installed packages" section when using conda as package manager (GitHub trains Issue 229). +- Allow specifying `cudatoolkit` version in the "installed packages" section when using conda as package manager (GitHub trains Issue 229). - Add `agent.package_manager.force_repo_requirements_txt`. If True, "Installed Packages" on Task are ignored, and only repository `requirements.txt` is used. - Pass `TRAINS_DOCKER_IMAGE` into docker for interactive sessions. - Add `torchcsprng` and `torchtext` to PyTorch resolving. @@ -64,7 +64,7 @@ title: Version 0.16 **Bug Fixes** * Fix pre-installed packages are ignored when installing a git package wheel. Reinstalling a `git+http` link is enough - to make sure all requirements are met / installed ([GitHub Issue #196](https://github.com/allegroai/trains/issues/196)). + to make sure all requirements are met / installed ([GitHub Issue #196](https://github.com/clearml/clearml/issues/196)). * Fix incorrect check for spaces in current execution folder. * Fix requirements detection: * Update torch version after using downloaded / system pre-installed version. @@ -84,7 +84,7 @@ title: Version 0.16 **Bug Fixes** -* Fix GPU Windows monitoring support ([GitHub Issue #177](https://github.com/allegroai/trains/issues/177)). +* Fix GPU Windows monitoring support ([GitHub Issue #177](https://github.com/clearml/clearml/issues/177)). * Fix `.git-credentials` and `.gitconfig` mapping into docker. * Fix non-root docker image usage. * Fix docker to use `UTF-8` encoding, so prints won't break it. diff --git a/docs/release_notes/clearml_agent/ver_0_17.md b/docs/release_notes/clearml_agent/ver_0_17.md index fb55b388..329ca47f 100644 --- a/docs/release_notes/clearml_agent/ver_0_17.md +++ b/docs/release_notes/clearml_agent/ver_0_17.md @@ -2,25 +2,25 @@ title: Version 0.17 --- -## ClearML Agent 0.17.2 +### ClearML Agent 0.17.2 **Features** - Add virtual environment caching: * Supports venv caching both in standard and docker mode. * Configurable using the `agent.venvs_cache` configuration section. - * Disabled by default, enable [here](https://github.com/allegroai/clearml-agent/blob/205f9dd81620fcec5aa155991afbbf711f3cd648/docs/clearml.conf#L101). + * Disabled by default, enable [here](https://github.com/clearml/clearml-agent/blob/205f9dd81620fcec5aa155991afbbf711f3cd648/docs/clearml.conf#L101). - Add support for `--services-mode` with venvs. -- Add `agent.force_git_ssh_user` configuration value (default `git`, see [here](https://github.com/allegroai/clearml-agent/blob/205f9dd81620fcec5aa155991afbbf711f3cd648/docs/clearml.conf#L29)) - ([clearml-agent GitHub Issue 42](https://github.com/allegroai/clearml-agent/issues/42)). +- Add `agent.force_git_ssh_user` configuration value (default `git`, see [here](https://github.com/clearml/clearml-agent/blob/205f9dd81620fcec5aa155991afbbf711f3cd648/docs/clearml.conf#L29)) + ([clearml-agent GitHub Issue 42](https://github.com/clearml/clearml-agent/issues/42)). - Add `agent.ignore_requested_python_version` configuration option for multi Python environments (default `false`). - Add `agent.enable_task_env` configuration option to set the OS environment based on the Environment section of the Task (default `false`, see - [here](https://github.com/allegroai/clearml-agent/blob/205f9dd81620fcec5aa155991afbbf711f3cd648/docs/clearml.conf#L151)). + [here](https://github.com/clearml/clearml-agent/blob/205f9dd81620fcec5aa155991afbbf711f3cd648/docs/clearml.conf#L151)). - K8s glue: * Add support for detecting and deleting k8s pods that fail to start. * Allow providing namespace in k8s glue and k8s glue example. * Add base-pod-number parameter to k8s glue and example. -- Change `agent.default_docker.image` to `nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04` (see [here](https://github.com/allegroai/clearml-agent/blob/8a46dc6b03860bc1cc022fd19e86bf4524986a0e/docs/clearml.conf#L144)). +- Change `agent.default_docker.image` to `nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04` (see [here](https://github.com/clearml/clearml-agent/blob/8a46dc6b03860bc1cc022fd19e86bf4524986a0e/docs/clearml.conf#L144)). - Use shared git cache for multiple agents on the same machine. - Upgrade pynvml add detect CUDA version from driver level. - Update agent and services docker files. @@ -43,4 +43,4 @@ title: Version 0.17 ### ClearML Agent 0.17.0 -* Renamed `trains-agent` as `clearml-agent` (see [clearml-agent](https://github.com/allegroai/clearml-agent) in GitHub). +* Renamed `trains-agent` as `clearml-agent` (see [clearml-agent](https://github.com/clearml/clearml-agent) in GitHub). diff --git a/docs/release_notes/clearml_agent/ver_1_0.md b/docs/release_notes/clearml_agent/ver_1_0.md index c6702440..769ae8df 100644 --- a/docs/release_notes/clearml_agent/ver_1_0.md +++ b/docs/release_notes/clearml_agent/ver_1_0.md @@ -17,7 +17,7 @@ title: Version 1.0 * Verify `docker` command exists when running in docker mode * Add support for terminating dockers on `sig_term` in dynamic mode * Add stopping message on Task process termination -* Add `agent.docker_install_opencv_libs` configuration option to enable automatic opencv libs install for faster docker spin-up (default: `true`, see [here](https://github.com/allegroai/clearml-agent/blob/4f18bb7ea0600db6ee63ecb5ad0ea8d048a272ca/docs/clearml.conf#L139)) +* Add `agent.docker_install_opencv_libs` configuration option to enable automatic opencv libs install for faster docker spin-up (default: `true`, see [here](https://github.com/clearml/clearml-agent/blob/4f18bb7ea0600db6ee63ecb5ad0ea8d048a272ca/docs/clearml.conf#L139)) * Add support for new container base setup script feature * Bump virtualenv dependency version (support `v>=16,<21`) * Add support for dynamic gpus opportunistic scheduling (with min/max gpus per queue) @@ -26,8 +26,8 @@ title: Version 1.0 **Bug Fixes** -* Fix agent can return non-zero error code and pods will end up restarting forever ([clearml-agent GitHub Issue 56](https://github.com/allegroai/clearml-agent/issues/56)) -* Fix poetry support ([clearml-agent GitHub Issue 57](https://github.com/allegroai/clearml-agent/issues/57)) +* Fix agent can return non-zero error code and pods will end up restarting forever ([clearml-agent GitHub Issue 56](https://github.com/clearml/clearml-agent/issues/56)) +* Fix poetry support ([clearml-agent GitHub Issue 57](https://github.com/clearml/clearml-agent/issues/57)) * Fix cuda version from driver does not return minor version * Fix requirements local path replace back when using cache * Fix k8s glue diff --git a/docs/release_notes/clearml_agent/ver_1_1.md b/docs/release_notes/clearml_agent/ver_1_1.md index e6ef706e..67c3a0c0 100644 --- a/docs/release_notes/clearml_agent/ver_1_1.md +++ b/docs/release_notes/clearml_agent/ver_1_1.md @@ -4,7 +4,7 @@ title: Version 1.1 ### ClearML Agent 1.1.2 -**Bug Fixes** +**Bug Fix** - Fix the `six` conflict with the new `pathlib2` version 2.3.7 and up. @@ -14,7 +14,7 @@ title: Version 1.1 - Add support for truncating task log file after reporting to server using `agent.truncate_task_output_files` configuration setting - Fix PyJWT resiliency support -- Fix `--stop` checking default queue tag ([ClearML Agent GitHub issue #80](https://github.com/allegroai/clearml-agent/issues/80)) +- Fix `--stop` checking default queue tag ([ClearML Agent GitHub issue #80](https://github.com/clearml/clearml-agent/issues/80)) - Fix queue tag `default` does not exist and `--queue` not specified (try queue named `"default"`) - Fix Python 3.5 compatibility - Fix PY2.7 support for PyTorch @@ -30,17 +30,17 @@ ClearML k8s glue default pod label was changed to `CLEARML=agent` (instead of `T **Features** -- Add poetry cache into docker mapping ([ClearML Agent GitHub issue #74](https://github.com/allegroai/clearml-agent/issues/74)) -- Allow rewriting SSH URLs (see [here](https://github.com/allegroai/clearml-agent/commit/9456e493ac6d6495310ee084db906f9cdca8218c)), refers to [ClearML Agent GitHub PR #72](https://github.com/allegroai/clearml-agent/pull/72) ([ClearML Agent GitHub issue #42](https://github.com/allegroai/clearml-agent/issues/42)) -- Add docker environment arguments log masking support, customizable using the `agent.hide_docker_command_env_vars` configuration value (see [here](https://github.com/allegroai/clearml-agent/blob/db57441c5dda43d8e38f01d7f52f047913e95ba5/docs/clearml.conf#L172)) ([ClearML Agent GitHub issue #67](https://github.com/allegroai/clearml-agent/issues/67)) -- Add support for naming docker containers using the `agent.docker_container_name_format` configuration option to set a name format (disabled by default) ([ClearML issue #412](https://github.com/allegroai/clearml/issues/412)) +- Add poetry cache into docker mapping ([ClearML Agent GitHub issue #74](https://github.com/clearml/clearml-agent/issues/74)) +- Allow rewriting SSH URLs (see [here](https://github.com/clearml/clearml-agent/commit/9456e493ac6d6495310ee084db906f9cdca8218c)), refers to [ClearML Agent GitHub PR #72](https://github.com/clearml/clearml-agent/pull/72) ([ClearML Agent GitHub issue #42](https://github.com/clearml/clearml-agent/issues/42)) +- Add docker environment arguments log masking support, customizable using the `agent.hide_docker_command_env_vars` configuration value (see [here](https://github.com/clearml/clearml-agent/blob/db57441c5dda43d8e38f01d7f52f047913e95ba5/docs/clearml.conf#L172)) ([ClearML Agent GitHub issue #67](https://github.com/clearml/clearml-agent/issues/67)) +- Add support for naming docker containers using the `agent.docker_container_name_format` configuration option to set a name format (disabled by default) ([ClearML issue #412](https://github.com/clearml/clearml/issues/412)) - k8s glue - - Remove queue name from pod name, add queue name and ID to pod labels ([ClearML Agent GitHub issue #64](https://github.com/allegroai/clearml-agent/issues/64)) + - Remove queue name from pod name, add queue name and ID to pod labels ([ClearML Agent GitHub issue #64](https://github.com/clearml/clearml-agent/issues/64)) - Update task `status_message` for non-responsive or hanging pods - Support the `agent.docker_force_pull` configuration option for scheduled pods - Add docker example for running the k8s glue as a pod in a k8s cluster -- Add `agent.ignore_requested_python_version` configuration option to ignore any requested python version (default false, see [here](https://github.com/allegroai/clearml-agent/blob/db57441c5dda43d8e38f01d7f52f047913e95ba5/docs/clearml.conf#L45)) -- Add `agent.docker_internal_mounts` configuration option to control containers internal mounts (non-root containers, see [here](https://github.com/allegroai/clearml-agent/blob/db57441c5dda43d8e38f01d7f52f047913e95ba5/docs/clearml.conf#L184)) +- Add `agent.ignore_requested_python_version` configuration option to ignore any requested Python version (default false, see [here](https://github.com/clearml/clearml-agent/blob/db57441c5dda43d8e38f01d7f52f047913e95ba5/docs/clearml.conf#L45)) +- Add `agent.docker_internal_mounts` configuration option to control containers internal mounts (non-root containers, see [here](https://github.com/clearml/clearml-agent/blob/db57441c5dda43d8e38f01d7f52f047913e95ba5/docs/clearml.conf#L184)) - Add support for `-r requirements.txt` in the Installed Packages section - Add support for `CLEARML_AGENT_INITIAL_CONNECT_RETRY_OVERRIDE` environment variable to override initial server connection behavior (defaults to true, allows boolean value or an explicit number specifying the number of connect retries) - Add support for `CLEARML_AGENT_DISABLE_SSH_MOUNT` environment variable allowing to disable the auto `.ssh` mount into the docker @@ -54,9 +54,9 @@ ClearML k8s glue default pod label was changed to `CLEARML=agent` (instead of `T **Bug Fixes** -- Fix auto mount `SSH_AUTH_SOCK` into docker ([ClearML Agent GitHub issue #45](https://github.com/allegroai/clearml-agent/issues/45)) -- Fix package manager configuration documentation ([ClearML Agent GitHub issue #78](https://github.com/allegroai/clearml-agent/issues/78)) -- Fix support for spaces in docker arguments ([ClearML GitHub issue #358](https://github.com/allegroai/clearml/issues/358)) +- Fix auto mount `SSH_AUTH_SOCK` into docker ([ClearML Agent GitHub issue #45](https://github.com/clearml/clearml-agent/issues/45)) +- Fix package manager configuration documentation ([ClearML Agent GitHub issue #78](https://github.com/clearml/clearml-agent/issues/78)) +- Fix support for spaces in docker arguments ([ClearML GitHub issue #358](https://github.com/clearml/clearml/issues/358)) - Fix standalone script with pre-exiting conda venv - Fix PyYAML v5.4, v5.4.1 versions not supported - Fix parsing VCS links starting with `git+git@` (notice `git+git://` was already supported) diff --git a/docs/release_notes/clearml_agent/ver_1_2.md b/docs/release_notes/clearml_agent/ver_1_2.md index 6c1bbfc4..75de3d48 100644 --- a/docs/release_notes/clearml_agent/ver_1_2.md +++ b/docs/release_notes/clearml_agent/ver_1_2.md @@ -15,21 +15,21 @@ title: Version 1.2 **Bug Fixes** -- Fix `CLEARML_AGENT_SKIP_PIP_VENV_INSTALL` fails to find python executable +- Fix `CLEARML_AGENT_SKIP_PIP_VENV_INSTALL` fails to find Python executable - Fix `apt-get update` failure causes `apt-get install` not to be executed ### ClearML Agent 1.2.1 **New Features and Improvements** -- Update S3 bucket verify option for minio ([ClearML Agent GitHub PR #83](https://github.com/allegroai/clearml-agent/pull/83)) -- Add environment variable for request method ([ClearML Agent GitHub PR #91](https://github.com/allegroai/clearml-agent/pull/91)) -- Add additional k8s-glue dockerfiles ([ClearML Agent GitHub PR #94](https://github.com/allegroai/clearml-agent/pull/94) ) +- Update S3 bucket verify option for minio ([ClearML Agent GitHub PR #83](https://github.com/clearml/clearml-agent/pull/83)) +- Add environment variable for request method ([ClearML Agent GitHub PR #91](https://github.com/clearml/clearml-agent/pull/91)) +- Add additional k8s-glue dockerfiles ([ClearML Agent GitHub PR #94](https://github.com/clearml/clearml-agent/pull/94) ) - Update default docker image to `nvidia/cuda:10.2-cudnn7-runtime-ubuntu18.04` -- Add support for custom docker image resolving using the `agent.default_docker.match_rules` configuration setting (see [here](https://github.com/allegroai/clearml-agent/blob/8712c5e636d9a02e939a9759348d29521a3939a9/docs/clearml.conf#L169)) +- Add support for custom docker image resolving using the `agent.default_docker.match_rules` configuration setting (see [here](https://github.com/clearml/clearml-agent/blob/8712c5e636d9a02e939a9759348d29521a3939a9/docs/clearml.conf#L169)) - Add `agent.force_git_root_python_path` configuration setting to force adding the git repository root folder to the `PYTHONPATH` (if set working directory is not added to the `PYHTONPATH`) - Add `build --force-docker` command line argument to the to allow ignoring task container data -- Add `agent.poetry_version` configuration setting to specify poetry version (and force installation of poetry if missing, see [here](https://github.com/allegroai/clearml-agent/blob/8712c5e636d9a02e939a9759348d29521a3939a9/docs/clearml.conf#L65)) +- Add `agent.poetry_version` configuration setting to specify poetry version (and force installation of poetry if missing, see [here](https://github.com/clearml/clearml-agent/blob/8712c5e636d9a02e939a9759348d29521a3939a9/docs/clearml.conf#L65)) - Add custom build script support - Add extra configurations when starting daemon - Add `agent.package_manager.force_original_requirements` configuration option, allowing to only use original requirements produced by local execution (note that using this configuration option prevents editing installed packages using the UI) @@ -38,10 +38,10 @@ title: Version 1.2 **Bug Fixes** -- Fix virtualenv python interpreter used ([ClearML Agent GitHub PR #98](https://github.com/allegroai/clearml-agent/pull/98)) -- Fix typing package incorrectly required for Python>3.5 ([ClearML Agent GitHub PR #103](https://github.com/allegroai/clearml-agent/pull/103)) -- Fix symbolic links not copied from cached VCS into working copy (windows platform will result with default copy content instead of original symbolic link) ([ClearML Agent GitHub PR #89](https://github.com/allegroai/clearml-agent/pull/89)) -- Fix agent fails to check out code from main branch when branch/commit is not explicitly specified ([ClearML GitHub issue #551](https://github.com/allegroai/clearml/issues/551)) +- Fix virtualenv Python interpreter used ([ClearML Agent GitHub PR #98](https://github.com/clearml/clearml-agent/pull/98)) +- Fix typing package incorrectly required for Python>3.5 ([ClearML Agent GitHub PR #103](https://github.com/clearml/clearml-agent/pull/103)) +- Fix symbolic links not copied from cached VCS into working copy (windows platform will result with default copy content instead of original symbolic link) ([ClearML Agent GitHub PR #89](https://github.com/clearml/clearml-agent/pull/89)) +- Fix agent fails to check out code from main branch when branch/commit is not explicitly specified ([ClearML GitHub issue #551](https://github.com/clearml/clearml/issues/551)) - Fix `git+git://` requirements - Fix `default_python` calculation (and verbosity) - Fix using deprecated `abc` support (Python 3.10 compatibility) diff --git a/docs/release_notes/clearml_agent/ver_1_3.md b/docs/release_notes/clearml_agent/ver_1_3.md index c1de4e0d..a8b2abf1 100644 --- a/docs/release_notes/clearml_agent/ver_1_3.md +++ b/docs/release_notes/clearml_agent/ver_1_3.md @@ -4,7 +4,7 @@ title: Version 1.3 ### ClearML Agent 1.3.0 **New Features and Improvements** -* Support private repos from `requirements.txt` file ([ClearML Agent GitHub PR #107](https://github.com/allegroai/clearml-agent/pull/107)) +* Support private repos from `requirements.txt` file ([ClearML Agent GitHub PR #107](https://github.com/clearml/clearml-agent/pull/107)) * Bump PyJWT version due to "*Key confusion through non-blocklisted public key formats*" vulnerability * Add support for additional command line arguments in k8s glue example * Add Python 3.10 support diff --git a/docs/release_notes/clearml_agent/ver_1_4.md b/docs/release_notes/clearml_agent/ver_1_4.md index f02d7027..66444063 100644 --- a/docs/release_notes/clearml_agent/ver_1_4.md +++ b/docs/release_notes/clearml_agent/ver_1_4.md @@ -42,4 +42,4 @@ title: Version 1.4 * Fix template namespace should override default namespace * Fix `extra_bash_init_cmd` location in initial bash script * Fix debug mode -* Fixed documentation ([ClearML Agent PR #117](https://github.com/allegroai/clearml-agent/pull/117)) +* Fixed documentation ([ClearML Agent PR #117](https://github.com/clearml/clearml-agent/pull/117)) diff --git a/docs/release_notes/clearml_agent/ver_1_5.md b/docs/release_notes/clearml_agent/ver_1_5.md index 911e985e..a771a1d4 100644 --- a/docs/release_notes/clearml_agent/ver_1_5.md +++ b/docs/release_notes/clearml_agent/ver_1_5.md @@ -5,14 +5,14 @@ title: Version 1.5 ### ClearML Agent 1.5.2 **New Features and Improvements** -* Switch services agent entrypoint shell from sh to bash ([ClearML Agent GitHub issue #140](https://github.com/allegroai/clearml-agent/issues/140)) +* Switch services agent entrypoint shell from sh to bash ([ClearML Agent GitHub issue #140](https://github.com/clearml/clearml-agent/issues/140)) * Improve poetry support -* Add poetry cwd support ([ClearML Agent GitHub issue #138](https://github.com/allegroai/clearml-agent/issues/138)) +* Add poetry cwd support ([ClearML Agent GitHub issue #138](https://github.com/clearml/clearml-agent/issues/138)) * Add `agent.package_manager.poetry_install_extra_args` configuration option * Do not allow request exceptions (keep retrying, throw error only on the initial login call) **Bug Fixes** -* Fix agent update version ([ClearML Agent GitHub PR #132](https://github.com/allegroai/clearml-agent/pull/132)) +* Fix agent update version ([ClearML Agent GitHub PR #132](https://github.com/clearml/clearml-agent/pull/132)) * Fix login uses `GET` with payload, which breaks when trying to connect a server running in GCP * Fix `clearml-agent build --docker` stuck on certain containers * Fix build fails when target is relative path @@ -25,7 +25,7 @@ title: Version 1.5 ### ClearML Agent 1.5.1 **New Features and Improvements** -* Upgrade requirements for `attrs`, `jsonschema`, `pyparsing`, `six`, and `pyjwt` ([ClearML Agent GitHub issue #129](https://github.com/allegroai/clearml-agent/issues/129)) +* Upgrade requirements for `attrs`, `jsonschema`, `pyparsing`, `six`, and `pyjwt` ([ClearML Agent GitHub issue #129](https://github.com/clearml/clearml-agent/issues/129)) * Add default output URI selection to `clearml-agent init` * Add `agent.disable_task_docker_override` configuration option to disable docker override specified in executing tasks * Add `CLEARML_AGENT_FORCE_SYSTEM_SITE_PACKAGES` env var (default `true`) to allow overriding default `system_site_packages: true` @@ -39,7 +39,7 @@ since 4.0.0) ### ClearML Agent 1.5.0 **New Features and Improvements** -* Add option to crash agent on exception using `agent.crash_on_exception` configuration setting ([ClearML Agent GitHub issue #122](https://github.com/allegroai/clearml-agent/issues/122)) +* Add option to crash agent on exception using `agent.crash_on_exception` configuration setting ([ClearML Agent GitHub issue #122](https://github.com/clearml/clearml-agent/issues/122)) * Improve venv cache disabled message * Upgrade packages for better Python 3.10 support * Remove future package dependency (Python 2 is not supported for `clearml-agent`) diff --git a/docs/release_notes/clearml_agent/ver_1_6.md b/docs/release_notes/clearml_agent/ver_1_6.md index e4854526..39b55014 100644 --- a/docs/release_notes/clearml_agent/ver_1_6.md +++ b/docs/release_notes/clearml_agent/ver_1_6.md @@ -10,10 +10,10 @@ title: Version 1.6 ### ClearML Agent 1.6.0 **New Features and Improvements** -* Upgrade `requests` library ([ClearML Agent GitHub issue #161](https://github.com/allegroai/clearml-agent/issues/161)) +* Upgrade `requests` library ([ClearML Agent GitHub issue #161](https://github.com/clearml/clearml-agent/issues/161)) * Add support for controlling PyTorch resolving mode using the `CLEARML_AGENT_PACKAGE_PYTORCH_RESOLVE` environment variable and `agent.package_manager.pytorch_resolve configuration` setting with `none` (no resolving), `pip` (sets extra -index based on cuda and lets pip resolve) or `direct` (the previous parsing algorithm that does the matching and downloading). Default is `pip` ([ClearML Agent GitHub issue #152](https://github.com/allegroai/clearml-agent/issues/152)) +index based on cuda and lets pip resolve) or `direct` (the previous parsing algorithm that does the matching and downloading). Default is `pip` ([ClearML Agent GitHub issue #152](https://github.com/clearml/clearml-agent/issues/152)) * Add backwards compatibility in standalone mode using the `CLEARML_AGENT_STANDALONE_CONFIG_BC` environment variable * Add `CLEARML_AGENT_DOCKER_AGENT_REPO` alias for the `FORCE_CLEARML_AGENT_REPO` environment variable * Show a better message for `agent init` when an existing `clearml.conf` is found diff --git a/docs/release_notes/clearml_agent/ver_1_7.md b/docs/release_notes/clearml_agent/ver_1_7.md index d93724eb..5ca1c5b5 100644 --- a/docs/release_notes/clearml_agent/ver_1_7.md +++ b/docs/release_notes/clearml_agent/ver_1_7.md @@ -22,7 +22,7 @@ log files (daemon and execution) * Set worker ID in k8s pod execution **Bug Fixes** -* Fix `agent.package_manager.poetry_install_extra_args` are used in all Poetry commands and not just in `install` ([ClearML Agent GitHub issue #173](https://github.com/allegroai/clearml-agent/issues/173)) +* Fix `agent.package_manager.poetry_install_extra_args` are used in all Poetry commands and not just in `install` ([ClearML Agent GitHub issue #173](https://github.com/clearml/clearml-agent/issues/173)) * Fix if process return code is SIGKILL (-9 or 137) and abort callback was called, do not mark as failed but as aborted * Fix `agent.git_host` setting will cause git@domain URLs to not be replaced by SSH URLs since furl cannot parse them to obtain host diff --git a/docs/release_notes/clearml_agent/ver_1_8.md b/docs/release_notes/clearml_agent/ver_1_8.md index a8603d90..158f0b06 100644 --- a/docs/release_notes/clearml_agent/ver_1_8.md +++ b/docs/release_notes/clearml_agent/ver_1_8.md @@ -5,7 +5,7 @@ title: Version 1.8 ### ClearML Agent 1.8.1 **New Features** -* Add option to set daemon polling interval ([ClearML Agent GitHub PR #197](https://github.com/allegroai/clearml-agent/pull/197)) +* Add option to set daemon polling interval ([ClearML Agent GitHub PR #197](https://github.com/clearml/clearml-agent/pull/197)) * Add Python 3.12 support **Bug Fixes** @@ -31,9 +31,9 @@ specified and the code is running a preinstalled docker * Improve GPU monitoring for MIGs **Bug Fixes** -* Use correct Python version in Poetry init ([ClearML Agent GitHub PR #179](https://github.com/allegroai/clearml-agent/pull/179)) -* Fix queue handling in `K8sIntegration` and `k8s_glue_example.py` ([ClearML Agent GitHub PR #183](https://github.com/allegroai/clearml-agent/pull/183)) -* Fix `FileNotFoundException` crash in `find_python_executable_for_version` ([ClearML Agent GitHub issue #164](https://github.com/allegroai/clearml-agent/issues/164)) +* Use correct Python version in Poetry init ([ClearML Agent GitHub PR #179](https://github.com/clearml/clearml-agent/pull/179)) +* Fix queue handling in `K8sIntegration` and `k8s_glue_example.py` ([ClearML Agent GitHub PR #183](https://github.com/clearml/clearml-agent/pull/183)) +* Fix `FileNotFoundException` crash in `find_python_executable_for_version` ([ClearML Agent GitHub issue #164](https://github.com/clearml/clearml-agent/issues/164)) * Fix delete temp console pipe log files after Task execution is completed (important for long-lasting services agents to avoid collecting temp files on host machine) * Fix `agent.enable_git_ask_pass` does not show in configuration dump * Fix `pip` is returned as a pip version if no value exists in `agent.package_manager.pip_version` diff --git a/docs/release_notes/clearml_agent/ver_1_9.md b/docs/release_notes/clearml_agent/ver_1_9.md index 5abf07a0..a4902a75 100644 --- a/docs/release_notes/clearml_agent/ver_1_9.md +++ b/docs/release_notes/clearml_agent/ver_1_9.md @@ -23,7 +23,7 @@ those matching these filters to be used when running containers ### ClearML Agent 1.9.2 **New Features and Bug Fixes** -* Handle OSError when checking for `is_file` ([ClearML GitHub issue #1337](https://github.com/allegroai/clearml/issues/1337)) +* Handle OSError when checking for `is_file` ([ClearML GitHub issue #1337](https://github.com/clearml/clearml/issues/1337)) * Add support for pip legacy resolver for versions specified using the `agent.package_manager.pip_legacy_resolver` configuration option * Add skip existing packages * Fix report index not advancing in resource monitoring causes more than one GPU not to be reported @@ -32,15 +32,15 @@ those matching these filters to be used when running containers ### ClearML Agent 1.9.1 -**New Features and Improvements** +**New Feature** * Add default pip version support for Python 3.12 ### ClearML Agent 1.9.0 **New Features and Improvements** -* Add `NO_DOCKER` flag to `clearml-agent-services` entrypoint ([ClearML Agent GitHub PR #206](https://github.com/allegroai/clearml-agent/pull/206)) +* Add `NO_DOCKER` flag to `clearml-agent-services` entrypoint ([ClearML Agent GitHub PR #206](https://github.com/clearml/clearml-agent/pull/206)) * Use `venv` module if `virtualenv` is not supported -* Find the correct python version when using a pre-installed python environment +* Find the correct Python version when using a pre-installed python environment * Add `/bin/bash` support in the task's `script.binary` property * Add support for `.ipynb` script entry files (install nbconvert in runtime, convert file to python and execute the python script). Includes `CLEARML_AGENT_FORCE_TASK_INIT` patching of `.ipynb` files (post-python conversion) @@ -56,7 +56,7 @@ by the `working_dir` setting in the `:` format (e.g. `:standal * Add support for skipping container apt installs using `CLEARML_AGENT_SKIP_CONTAINER_APT` env var in k8s **Bug Fixes** -* Fix git fetch did not update new tags ([ClearML Agent GitHub issue #209](https://github.com/allegroai/clearml-agent/issues/209)) +* Fix git fetch did not update new tags ([ClearML Agent GitHub issue #209](https://github.com/clearml/clearml-agent/issues/209)) * Fix file mode should be optional in configuration `files` section * Fix `-m module $env` to support parsing `$env` before launching * Fix setting tasks that were just marked as `aborted` to `started` - only force task to `started` after dequeueing it, diff --git a/docs/release_notes/clearml_server/enterprise/ver_3_20.md b/docs/release_notes/clearml_server/enterprise/ver_3_20.md index 58cd89f7..7ddc3bc1 100644 --- a/docs/release_notes/clearml_server/enterprise/ver_3_20.md +++ b/docs/release_notes/clearml_server/enterprise/ver_3_20.md @@ -23,7 +23,7 @@ title: Version 3.20 ### Enterprise Server 3.20.1 -**New Features and Improvements** +**New Feature** * Add support for serving UI from a subpath **Bug Fixes** @@ -36,7 +36,7 @@ title: Version 3.20 * Add Administrator identity provider management UI: administrators can add and manage multiple identity providers * New UI experiment table comparative view: compare plots and scalars of all selected experiments * Add UI project metric snapshot support for multiple metrics -* Add UI experiment display of original python requirements along with actual packages used. +* Add UI experiment display of original Python requirements along with actual packages used. * Add compressed UI experiment table info panel mode displaying only experiment name and status * Add "x unified" hover mode to UI plots * Add option to view metadata of published dataset versions in UI Hyper-Dataset list view diff --git a/docs/release_notes/clearml_server/enterprise/ver_3_23.md b/docs/release_notes/clearml_server/enterprise/ver_3_23.md index 3d6ef2b1..c3e42865 100644 --- a/docs/release_notes/clearml_server/enterprise/ver_3_23.md +++ b/docs/release_notes/clearml_server/enterprise/ver_3_23.md @@ -2,6 +2,25 @@ title: Version 3.23 --- + +### Enterprise Server 3.23.2 + +**New Features** +* Add "Block running user's scripts in the browser" UI setting option for added security +* Add configurable display names for UI Queues + +**Bug Fixes** +* Fix debug samples stored in S3 and GS not embedding in UI Reports +* Fix non-admin users can access disabled administrator vaults +* Fix UI administrator vault contents are deleted when vault is saved a second time +* Fix deleting models in UI does not delete them from the file server +* Fix UI Orchestration usage plots and queue metric data does not update in real time +* Fix UI scalar plots data does not refresh +* Fix UI dataset Preview tab does not display dataset contents +* Fix dataset list sometimes disappears in UI Annotation creation modal +* Fix ‘Failed to fetch history' error displayed unnecessarily in UI Orchestration Dashboard +* Add error message when launching multiple UI autoscaler instances with the same worker prefixes + ### Enterprise Server 3.23.1 **Bug Fixes** @@ -30,16 +49,16 @@ user access to these objects or their containing project. * Add UI edit of default Project default output destination **Bug Fixes** -* Fix broken download links to artifacts stored in Azure ([ClearML Server GitHub issue #247](https://github.com/allegroai/clearml-server/issues/247)) +* Fix broken download links to artifacts stored in Azure ([ClearML Server GitHub issue #247](https://github.com/clearml/clearml-server/issues/247)) * Fix Cross-site Scripting (XSS) vulnerability (CWE-79) -* Fix UI experiment textual comparison diff showing contextual diffs as different contents ([ClearML GitHub issue #646](https://github.com/allegroai/clearml/issues/646)) -* Fix Model API calls fail when its creating task has been deleted ([ClearML GitHub issue #1299](https://github.com/allegroai/clearml/issues/1299)) -* Fix UI plots display "Iteration 0" when it is the only reported iteration ([ClearML GitHub issue #1267](https://github.com/allegroai/clearml/issues/1267)) -* Fix scalar series starting with angle bracket (`<`) causes UI scalar plot legend to display raw html ([ClearML GitHub issue #1292](https://github.com/allegroai/clearml/issues/1292)) -* Fix auto-refresh modifies UI experiment debug sample view ([ClearML GitHub issue #1259](https://github.com/allegroai/clearml/issues/1259)) +* Fix UI experiment textual comparison diff showing contextual diffs as different contents ([ClearML GitHub issue #646](https://github.com/clearml/clearml/issues/646)) +* Fix Model API calls fail when its creating task has been deleted ([ClearML GitHub issue #1299](https://github.com/clearml/clearml/issues/1299)) +* Fix UI plots display "Iteration 0" when it is the only reported iteration ([ClearML GitHub issue #1267](https://github.com/clearml/clearml/issues/1267)) +* Fix scalar series starting with angle bracket (`<`) causes UI scalar plot legend to display raw html ([ClearML GitHub issue #1292](https://github.com/clearml/clearml/issues/1292)) +* Fix auto-refresh modifies UI experiment debug sample view ([ClearML GitHub issue #1259](https://github.com/clearml/clearml/issues/1259)) * Fix Hydra parameters not displaying correctly in UI experiment comparison parallel coordinates plot -* Fix UI pipeline DAG display to be "bottoms-up" so all final steps appear in the bottom of the diagram ([ClearML Web GitHub PR #86](https://github.com/allegroai/clearml-web/pull/86)) -* Fix UI experiment comparison does not overlay box plots and histograms ([ClearML GitHub issue #1298](https://github.com/allegroai/clearml/issues/1298)) +* Fix UI pipeline DAG display to be "bottoms-up" so all final steps appear in the bottom of the diagram ([ClearML Web GitHub PR #86](https://github.com/clearml/clearml-web/pull/86)) +* Fix UI experiment comparison does not overlay box plots and histograms ([ClearML GitHub issue #1298](https://github.com/clearml/clearml/issues/1298)) * Fix modifying UI experiment input models does not work * Fix UI Reports image upload not working * Fix active masks labels not displaying in UI annotation task frame viewer diff --git a/docs/release_notes/clearml_server/enterprise/ver_3_24.md b/docs/release_notes/clearml_server/enterprise/ver_3_24.md new file mode 100644 index 00000000..cdc0e40f --- /dev/null +++ b/docs/release_notes/clearml_server/enterprise/ver_3_24.md @@ -0,0 +1,77 @@ +--- +title: Version 3.24 +--- + + +### Enterprise Server 3.24.2 + +**New Features** +* Add support for additional billing event formats +* Improve login to multi-tenant service + +**Bug Fixes** +* Security fixes when exporting data to CSV +* Fix access permissions to UI Applications + +### Enterprise Server 3.24.1 + +**New Features** +* Add service for presigning AWS S3 URLs +* Add support for additional billing event formats +* Add support for user-customized UI themes +* Add configuration to disable adding users to the workspace via the UI +* Add on-demand refresh to UI applications +* Add grouped same-event view to UI "Latest Task Events" + +**Bug Fixes** +* Fix downloaded CSV file of UI “Latest Task Events” missing some events +* Fix access permissions to UI Reports +* Fix configuration modal of UI application instance displays incorrect values +* Fix UI Hyper-Dataset frame viewer navigation controls not displaying + + +### Enterprise Server 3.24.0 + +**Default Behavior Change: Access Rules Enabled** +* RBAC is now enabled by default on all ClearML server deployments. + For deployments which have not had RBAC enabled until this version, administrators should verify default access rules are set that provide all users with access to all objects to match previous default behaviour. + + +**New Features** +* New look and feel: Full light/dark themes ([ClearML GitHub issue #1297](https://github.com/clearml/clearml/issues/1297)) +* New UI task creation options + * Support bash as well as python scripts + * Support file upload +* Add UI Application "Relaunch" functionality to restart running app instances +* Add UI scalar plots presentation of plots in sections grouped by metrics. +* Add UI pipeline DAG presentation with pipeline steps grouped into stages +* Add Hyper-Dataset version sort by update time in ascending and descending order +* Add opacity control to Hyper-Dataset frame ROIs +* Add search bar for UI Settings's Users and Groups +* Add number of frames display to UI DataView preview +* Remove legacy "Augmentation" sections from UI Dataview pages +* Add control to collapse and expand UI Hyper-Dataset version list + +**Bug Fixes** +* Fix ctrl-f does not open a search bar in UI editor modals ([ClearML Web GitHub issue #99](https://github.com/clearml/clearml-web/issues/99)) +* Fix UI Incorrect project statistics in project page +* Fix UI Hyper-Dataset version's "Publish" function is sometimes unnecessarily disabled +* Fix UI Task manual refresh function does not work in full screen mode +* Fix links to tasks are broken in the Orchestration's Queues’ task lists +* Fix links to Hyper-Dataset versions in UI search results' DataView cards are broken +* Fix UI task scalar legend does not change colors when smoothing is enabled +* Fix Hyper-Dataset version not displaying in UI Dataview page +* Fix UI Hyper-Dataset frame mask color changes are not applied +* Fix UI Model Endpoint's Number of Requests plot sometimes displays incorrect data +* Fix deleting a parameter in the UI task creation modal incorrectly removes another parameter +* Fix UI Hyper-Dataset version's Frames tab in table view does not display custom metadata columns +* Fix UI Queues page queue list does not alphabetically sort by queue display name +* Fix UI task creation modal's queue list presents queue names instead of queue display names +* Fix queue name is not displayed in UI Resource Policies when queue display name is not provided +* Fix UI model comparison tag filter does not work in model selection modal +* Fix UI datasets page does not filter according to project when dataset is running +* Fix UI global search results display aborted tasks as completed +* Fix UI breadcrumbs sometimes don't display project name of newly cloned task +* Fix scroll sometimes doesn't work in UI global search results +* Fix Hyper-Dataset FrameGroup Details and FrameGroup Metadata sections are not expanding +* Fix unsaved content is not discarded in UI Hyper-Dataset frame viewer when moving to another frame source diff --git a/docs/release_notes/clearml_server/open_source/ver_0_10.md b/docs/release_notes/clearml_server/open_source/ver_0_10.md index 10fc0cc2..414ac03d 100644 --- a/docs/release_notes/clearml_server/open_source/ver_0_10.md +++ b/docs/release_notes/clearml_server/open_source/ver_0_10.md @@ -9,13 +9,13 @@ title: Version 0.10 ### Trains Server 0.10.1 -* Add simple username / password login scheme, see [GitHub trains-server Issue 3](https://github.com/allegroai/trains-server/issues/3) +* Add simple username / password login scheme, see [GitHub trains-server Issue 3](https://github.com/clearml/clearml-server/issues/3) * Fixed User/Password configuration (see [instructions](../../../deploying_clearml/clearml_server_config.md#web-login-authentication)). * Replace the Python web-server with NGINX. -* Improve sub-domain support ([GitHub trains-server Issue 9](https://github.com/allegroai/trains-server/issues/9)). +* Improve sub-domain support ([GitHub trains-server Issue 9](https://github.com/clearml/clearml-server/issues/9)). * Extend configuration options diff --git a/docs/release_notes/clearml_server/open_source/ver_0_12.md b/docs/release_notes/clearml_server/open_source/ver_0_12.md index d318b391..70063a9a 100644 --- a/docs/release_notes/clearml_server/open_source/ver_0_12.md +++ b/docs/release_notes/clearml_server/open_source/ver_0_12.md @@ -10,7 +10,7 @@ title: Version 0.12 Minor bug fixes and improvements * Add resource monitoring. -* Fix Web UI compare plots ([GitHub Issue #55](https://github.com/allegroai/clearml/issues/55)). +* Fix Web UI compare plots ([GitHub Issue #55](https://github.com/clearml/clearml/issues/55)). * Improve server upgrade checks/messages. ### Trains Server 0.12.0 diff --git a/docs/release_notes/clearml_server/open_source/ver_0_13.md b/docs/release_notes/clearml_server/open_source/ver_0_13.md index 7edbd8eb..134ce6f3 100644 --- a/docs/release_notes/clearml_server/open_source/ver_0_13.md +++ b/docs/release_notes/clearml_server/open_source/ver_0_13.md @@ -11,10 +11,10 @@ title: Version 0.13 **Features and Bug Fixes** * Add parallel coordinates hyperparameter comparison, available under **Compare Experiments** **>** **HYPERPARAMETERS** - **>** **Parallel Coordinates** (in the drop-down) ([GitHub Issue #53](https://github.com/allegroai/trains/issues/53)). + **>** **Parallel Coordinates** (in the drop-down) ([GitHub Issue #53](https://github.com/clearml/clearml/issues/53)). * Add encoding of experiment table view settings in URL to allow sharing, using browser URL copy / paste. -* Add loguru (ANSI color) support ([GitHub Issue #29](https://github.com/allegroai/trains/issues/29)). -* Add support for special characters in hyperparameter keys (white-spaces, `.` and `$`) ([GitHub Issue #69](https://github.com/allegroai/trains/issues/69)). +* Add loguru (ANSI color) support ([GitHub Issue #29](https://github.com/clearml/clearml/issues/29)). +* Add support for special characters in hyperparameter keys (white-spaces, `.` and `$`) ([GitHub Issue #69](https://github.com/clearml/clearml/issues/69)). * Add optional anonymous daily usage statistics (help us improve Trains Server): * Disabled by default. * Requires user opt-in. @@ -23,5 +23,5 @@ title: Version 0.13 * Reports average workload per day (amount and average duration of queues, agents and experiments). * Improve experiment table filtering indication. * Improve model view to allow navigating to its generating experiment. -* Fix experiment comparison to distinguish between experiments with the same name ([GitHub Issue #52](https://github.com/allegroai/trains/issues/52)). -* Fix Web UI compare plots bug ([GitHub Issue #55](https://github.com/allegroai/trains/issues/55) and [GitHub Issue #73](https://github.com/allegroai/trains/issues/73)). +* Fix experiment comparison to distinguish between experiments with the same name ([GitHub Issue #52](https://github.com/clearml/clearml/issues/52)). +* Fix Web UI compare plots bug ([GitHub Issue #55](https://github.com/clearml/clearml/issues/55) and [GitHub Issue #73](https://github.com/clearml/clearml/issues/73)). diff --git a/docs/release_notes/clearml_server/open_source/ver_0_14.md b/docs/release_notes/clearml_server/open_source/ver_0_14.md index 0685701c..ba3b9a52 100644 --- a/docs/release_notes/clearml_server/open_source/ver_0_14.md +++ b/docs/release_notes/clearml_server/open_source/ver_0_14.md @@ -17,14 +17,14 @@ title: Version 0.14 * Fix misaligned titles in experiment results, scalars, and plots (**RESULTS** tab, **SCALARS** and **PLOTS** sub-tabs). * Fix parallel coordinate comparison in comparing experiments. Adding dimension with no values removes all lines. * Fix resizing the experiments tables window. The preferences wheel jumped over the titles. -* Fix the browser zoom (**CTRL +**, **CTRL -**, and mouse wheel) in experiment **RESULTS** **>** **SCALARS** tab. It broke labels ([GitHub Issue #127](https://github.com/allegroai/trains/issues/127)). +* Fix the browser zoom (**CTRL +**, **CTRL -**, and mouse wheel) in experiment **RESULTS** **>** **SCALARS** tab. It broke labels ([GitHub Issue #127](https://github.com/clearml/clearml/issues/127)). ### Trains Server 0.14.1 **Features and Bug Fixes** * Support default **Trains Server** Kubernetes Helm ports in the **Trains Web-App (UI)**. -* Fix issue switching scalar plots between linear and logarithmic views ([GitHub Issue #75](https://github.com/allegroai/trains/issues/75)). +* Fix issue switching scalar plots between linear and logarithmic views ([GitHub Issue #75](https://github.com/clearml/clearml/issues/75)). * Do not reset view filtering when switching tabs in experiment view. ### Trains Server 0.14.0 @@ -32,8 +32,8 @@ title: Version 0.14 **Features and Bug Fixes** * Add debug image viewing for an unlimited number of iterations, filtering by metric, and comparing debug images for different iterations. -* Add debug image view zoom, fit to screen, resize, hover coordinates ([GitHub Issue #68](https://github.com/allegroai/trains/issues/68)). -* Add switching scalar plots between linear and logarithmic views ([GitHub Issue #75](https://github.com/allegroai/trains/issues/75)). +* Add debug image view zoom, fit to screen, resize, hover coordinates ([GitHub Issue #68](https://github.com/clearml/clearml/issues/68)). +* Add switching scalar plots between linear and logarithmic views ([GitHub Issue #75](https://github.com/clearml/clearml/issues/75)). * Add scalar minimums and maximums to comparing experiments. * Add opening HTML artifact files in the browser. * Add Web-App notification for version updates. @@ -44,8 +44,8 @@ title: Version 0.14 * Allow editing model description. * Allow editing experiment uncommitted changes and installed packages separately. * Allow deleting an input model from an experiment whose status is *Draft*. -* Fix dialog elements which are now accessible in non-100% screen scale. ([GitHub Issue #89](https://github.com/allegroai/trains/issues/89)). -* Fix custom columns in the experiments table not properly loaded from browser store ([GitHub Issue #106](https://github.com/allegroai/trains/issues/106)). -* Fix issue with showing 2D graphs containing sub-plots ([trains #slack](https://github.com/allegroai/trains/issues/106)) +* Fix dialog elements which are now accessible in non-100% screen scale. ([GitHub Issue #89](https://github.com/clearml/clearml/issues/89)). +* Fix custom columns in the experiments table not properly loaded from browser store ([GitHub Issue #106](https://github.com/clearml/clearml/issues/106)). +* Fix issue with showing 2D graphs containing sub-plots ([trains #slack](https://github.com/clearml/clearml/issues/106)) * Fix issues with vertical scrolling of experiment logs. * Fix issue with image plots sometimes not visible in experiments comparison. diff --git a/docs/release_notes/clearml_server/open_source/ver_0_15.md b/docs/release_notes/clearml_server/open_source/ver_0_15.md index 9846b0b2..cd0a43e6 100644 --- a/docs/release_notes/clearml_server/open_source/ver_0_15.md +++ b/docs/release_notes/clearml_server/open_source/ver_0_15.md @@ -10,8 +10,8 @@ title: Version 0.15 **Bug Fixes** -* Fix experiment clone dialog resets while typing ([GitHub trains-server Issue 44](https://github.com/allegroai/trains-server/issues/44)). -* Fix image-only plots are not displayed ([GitHub Issue #140](https://github.com/allegroai/trains/issues/140)). +* Fix experiment clone dialog resets while typing ([GitHub trains-server Issue 44](https://github.com/clearml/clearml-server/issues/44)). +* Fix image-only plots are not displayed ([GitHub Issue #140](https://github.com/clearml/clearml/issues/140)). * Fix last item in plots list is hidden. * Fix input model edit view contains a redundant save button. * Fix credentials popup shows incorrect URL for fileserver. @@ -30,12 +30,12 @@ title: Version 0.15 **Features** -* Add support for debug media (images, audio, video) ([GitHub Issue #120](https://github.com/allegroai/trains/issues/120)). +* Add support for debug media (images, audio, video) ([GitHub Issue #120](https://github.com/clearml/clearml/issues/120)). * Add support for previewing HTML debug samples. -* Add experiment and model tag management ([GitHub Issue #46](https://github.com/allegroai/trains/issues/46)). +* Add experiment and model tag management ([GitHub Issue #46](https://github.com/clearml/clearml/issues/46)). * Add support for more task types (see Trains v0.15.0 and Trains Agent v0.15.0 for related support and services mode). * Experiment comparison: - * Add Last / Max (maximal) / Min (minimal) scalar values to parallel coordinates in experiment comparison ([GitHub Issue #131](https://github.com/allegroai/trains/issues/131)). + * Add Last / Max (maximal) / Min (minimal) scalar values to parallel coordinates in experiment comparison ([GitHub Issue #131](https://github.com/clearml/clearml/issues/131)). * Add deep comparison support to experiment comparison, including uncommitted changes by file with line diff and search of all text. * Enhance table columns: * Add dynamic column ordering to the experiments and models tables. @@ -59,14 +59,14 @@ title: Version 0.15 **Bug Fixes** -* Fix init wizard, correctly display the input servers ([GitHub Issue #19](https://github.com/allegroai/trains-agent/issues/19)). +* Fix init wizard, correctly display the input servers ([GitHub Issue #19](https://github.com/clearml/clearml-agent/issues/19)). * Improve docker host-mount support, use `TRAINS_AGENT_DOCKER_HOST_MOUNT` environment variable. * Support pip v20.1 local / http package reference in pip freeze. * Fix detached mode to correctly use cache folder slots. * Fix `CUDA_VISIBLE_DEVICES` should never be set to "all". * Do not monitor GPU when running with `--cpu-only` * Fix experiment comparison issues: - * Scalar comparison type does not reflect displayed comparison ([GitHub Issue #40](https://github.com/allegroai/trains/issues/40)). + * Scalar comparison type does not reflect displayed comparison ([GitHub Issue #40](https://github.com/clearml/clearml/issues/40)). * Comparison animations overlapping other fields. * Cannot choose a metric after clearing it in experiment comparison parallel coordinates. * Adding a dimension without a value removes all lines in experiment comparison parallel coordinates. @@ -77,14 +77,14 @@ title: Version 0.15 * Changing experiment table / info panel split redraws scalars and plots. * Wrong download URL shown for S3 artifact links with special characters. * Fix experiment results view issues: - * Browser zoom breaks labels (Ctrl + / Ctrl - / mouse wheel) in experiment results **SCALARS** tab ([GitHub Issue #127](https://github.com/allegroai/trains/issues/127)). + * Browser zoom breaks labels (Ctrl + / Ctrl - / mouse wheel) in experiment results **SCALARS** tab ([GitHub Issue #127](https://github.com/clearml/clearml/issues/127)). * Debug image name not shown if file cannot be loaded. * minio images with spaces in the path not displaying correctly * Plots should use the full panel space. * Plot relative time displaying incorrectly in experiment results **SCALARS** tab. * Wall time display in local time in experiment results **SCALARS** tab. * Fix experiment table issues: - * Hyperparameters sorted as strings, not as numbers ([GitHub Issue #124](https://github.com/allegroai/trains/issues/124)). + * Hyperparameters sorted as strings, not as numbers ([GitHub Issue #124](https://github.com/clearml/clearml/issues/124)). * Prevent auto refresh reordering when the info panel is open. * Table resizing made the preferences wheel to jump over titles. * Fix experiment reset when both the input and output model are the same causes model deletion. diff --git a/docs/release_notes/clearml_server/open_source/ver_0_16.md b/docs/release_notes/clearml_server/open_source/ver_0_16.md index 0b397a6b..80e45dff 100644 --- a/docs/release_notes/clearml_server/open_source/ver_0_16.md +++ b/docs/release_notes/clearml_server/open_source/ver_0_16.md @@ -16,7 +16,7 @@ Upgrading to this version requires a manual [data migration](../../../deploying_ * Fix model page issue causing N/A to show after switching tabs (Trains Slack channel [thread)](https://clearml.slack.com/archives/CTK20V944/p1597672446125300). * Removed experiments comparison limit (only 10 were allowed). Limit is now 100, configurable using `services.tasks.multi_task_histogram_limit`. (Trains Slack channel [thread)](https://clearml.slack.com/archives/CTK20V944/p1597755746141500). * Fix scalar plots sometimes not calculated by the server in lower iteration values (Trains Slack channel [thread)](https://clearml.slack.com/archives/CTK20V944/p1597321653085900). -* Fix error while retrieving experiment log when only a few lines were reported ([GitHub trains-server Issue 59](https://github.com/allegroai/trains-server/issues/59)). +* Fix error while retrieving experiment log when only a few lines were reported ([GitHub trains-server Issue 59](https://github.com/clearml/clearml-server/issues/59)). * Update Fixed User full-name on restart (Trains Slack channel [thread)](https://clearml.slack.com/archives/CTK20V944/p1597906492003300). * Fix project ordering issue. * When loading plots, display a spinner and don't show "no data". @@ -41,13 +41,13 @@ Upgrading to this version requires a manual [data migration](../../../deploying_ * Model design is in the **ARTIFACTS** tab. * Experiment model description is in the **CONFIGURATION OBJECTS** section in the **CONFIGURATION** tab. * Improve experiment comparison: - * In hyperparameter parallel coordinate comparison, hover over an experiment name to highlight it on plot ([GitHub Issue #53](https://github.com/allegroai/trains/issues/53)). + * In hyperparameter parallel coordinate comparison, hover over an experiment name to highlight it on plot ([GitHub Issue #53](https://github.com/clearml/clearml/issues/53)). * Remove fields providing no additional information from comparison. * Improve the model framework filter. Filter contains only frameworks used by models in the project. * Add configurable **Trains** services examples. * Add support for text debug samples in the **DEBUG SAMPLES** section in the **RESULTS** tab. * Add legend on / off toggle control for every plot. -* Add clear button for text areas ([GitHub trains-server Issue #42](https://github.com/allegroai/trains-server/issues/42)). +* Add clear button for text areas ([GitHub trains-server Issue #42](https://github.com/clearml/clearml-server/issues/42)). * Reinstate the bottom bar **Archive** button. * Add **Trains** community links to left bar. * Add Hi-DPI display support. diff --git a/docs/release_notes/clearml_server/open_source/ver_0_17.md b/docs/release_notes/clearml_server/open_source/ver_0_17.md index 3ae0abe5..1de8d386 100644 --- a/docs/release_notes/clearml_server/open_source/ver_0_17.md +++ b/docs/release_notes/clearml_server/open_source/ver_0_17.md @@ -14,11 +14,11 @@ title: Version 0.17 * Add experiment active duration custom column to experiment table. * Improve comparison experiment consistency in plots for experiment name and color. * Improve project last update time; updated whenever an experiment or model in the project is updated. -* Improve table multi-select UX: shift+mouse-click ([clearml GitHub Issue 61](https://github.com/allegroai/trains/issues/61)). +* Improve table multi-select UX: shift+mouse-click ([clearml GitHub Issue 61](https://github.com/clearml/clearml/issues/61)). * Add experiment parent to experiment details INFO tab. * Improve UI experiment archiving; archiving queued experiments automatically dequeues them. * Improve experiment comparison; use available screen width. -* Add debug sample history tracking ([clearml GitHub Issue 81](https://github.com/allegroai/trains/issues/81)). +* Add debug sample history tracking ([clearml GitHub Issue 81](https://github.com/clearml/clearml/issues/81)). * Replace "Download" action with "Copy to Clipboard" for local files. * Add ClearML usage tips. * Add Task and Model, Clone and Move to allow creating new project on the fly. @@ -32,13 +32,13 @@ title: Version 0.17 **Bug Fixes** * Fix HiDPI table issues. -* Fix results / plots not scaling properly ([clearml GitHub Issue 247](https://github.com/allegroai/trains/issues/247)). +* Fix results / plots not scaling properly ([clearml GitHub Issue 247](https://github.com/clearml/clearml/issues/247)). * Fix experiment comparison: * Cannot compare regular Tasks to example Tasks. * Cannot unhide scalars. * Scalars wall time view and relative view will not auto-refresh. * Fix log scrolling in Chrome. -* Fix UI adds to plots legend labels unnecessary task ID string ([clearml GitHub Issue 247](https://github.com/allegroai/trains/issues/247)). +* Fix UI adds to plots legend labels unnecessary task ID string ([clearml GitHub Issue 247](https://github.com/clearml/clearml/issues/247)). * Fix parallel coordinates: dimensions are not sorted by value. * Fix scalar auto color selection provides too similar colors. * Fix reordering a custom column does not restore column location. diff --git a/docs/release_notes/clearml_server/open_source/ver_1_0.md b/docs/release_notes/clearml_server/open_source/ver_1_0.md index c5fdd291..17529965 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_0.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_0.md @@ -6,7 +6,7 @@ title: Version 1.0 **Bug Fixes** -- Fix Task container does not accept `null` values ([Slack Channel](https://clearml.slack.com/archives/CTK20V944/p1622119047293300) [ClearML GitHub issue 365](https://github.com/allegroai/clearml/issues/365)) +- Fix Task container does not accept `null` values ([Slack Channel](https://clearml.slack.com/archives/CTK20V944/p1622119047293300) [ClearML GitHub issue 365](https://github.com/clearml/clearml/issues/365)) - Fix debug images exception in Results page - Fix a typo in Worker Setup help popup @@ -15,7 +15,7 @@ title: Version 1.0 **Bug Fixes** - Fix clearing experiment requirements causes "empty" requirements (as opposed to "no requirements") -- Fix logout fails with `endpoint not found` error ([ClearML GitHub issue 349](https://github.com/allegroai/clearml/issues/349)) +- Fix logout fails with `endpoint not found` error ([ClearML GitHub issue 349](https://github.com/clearml/clearml/issues/349)) - Fix hamburger side menu `Manage Queues` does nothing and returns console error ([Slack Channel](https://clearml.slack.com/archives/CTK20V944/p1620308724418100)) - Fix broken config dir backwards compatibility (`/opt/trains/config` should also be supported) @@ -26,12 +26,12 @@ title: Version 1.0 * Add Multi-level project hierarchy - Projects can now contain sub-projects * Add markdown editor for project overview * Add support for multiple models per experiment -* Add Context menu batch operations ([ClearML GitHub issue 286](https://github.com/allegroai/clearml/issues/286)) -* Add global search regex support ([ClearML GitHub issue 81](https://github.com/allegroai/clearml/issues/81#issuecomment-735003956)) +* Add Context menu batch operations ([ClearML GitHub issue 286](https://github.com/clearml/clearml/issues/286)) +* Add global search regex support ([ClearML GitHub issue 81](https://github.com/clearml/clearml/issues/81#issuecomment-735003956)) * Add support for extended container (docker) configuration and init script * Add special character support ("." (dot) and "$") in Hyperparameters * Add new context menu icons -* Add deleting experiments and models through UI (ClearML GitHub issues [53](https://github.com/allegroai/clearml-server/issues/53), [61](https://github.com/allegroai/clearml-server/issues/61), and [81](https://github.com/allegroai/clearml/issues/81#issuecomment-706907718)) +* Add deleting experiments and models through UI (ClearML GitHub issues [53](https://github.com/clearml/clearml-server/issues/53), [61](https://github.com/clearml/clearml-server/issues/61), and [81](https://github.com/clearml/clearml/issues/81#issuecomment-706907718)) * Improve Project deletion: deletes project's experiments and models. * Add experiment description access from info title * Improve experiment table columns @@ -41,7 +41,7 @@ title: Version 1.0 * Add secondary nested sorting * Add `worker<->queue` clickable reference in workers and queues tables * Add presenting all metric debug samples concurrently -* Add Full project name display in project cards ([ClearML GitHub issue 81](https://github.com/allegroai/clearml/issues/81#issuecomment-823303842)) +* Add Full project name display in project cards ([ClearML GitHub issue 81](https://github.com/clearml/clearml/issues/81#issuecomment-823303842)) * Add option for continuing aborted tasks **Bug Fixes** @@ -54,15 +54,15 @@ title: Version 1.0 * Fix UI missing default selection of artifacts in full screen view * Fix UI variant name not shown in plots * Fix UI missing tooltip for truncated column headers -* Fix UI custom columns choice does not persist per project ([ClearML GitHub issue 314](https://github.com/allegroai/clearml/issues/314)) +* Fix UI custom columns choice does not persist per project ([ClearML GitHub issue 314](https://github.com/clearml/clearml/issues/314)) * Fix API plot_str not returned for compressed plots * Fix UI plots color picker consistency * Fix API ```Tasks.reset``` marking parent id as 'deleted' in its children * Fix UI missing queue selection on queue delete * Fix UI debug image history slider not shown when there's only a single iteration -* Fix UI X-axis labels are being cut in plots ([ClearML GitHub issue 264](https://github.com/allegroai/clearml/issues/264)) +* Fix UI X-axis labels are being cut in plots ([ClearML GitHub issue 264](https://github.com/clearml/clearml/issues/264)) * Fix UI scalar color choice dialog toggles between screen positions every time you open it -* Fix UI hovering on legend clears parallel coordinates graph filters ([ClearML GitHub issue 259](https://github.com/allegroai/clearml/issues/259)) +* Fix UI hovering on legend clears parallel coordinates graph filters ([ClearML GitHub issue 259](https://github.com/clearml/clearml/issues/259)) * Fix UI experiment comparison 'hide identical fields' button disable doesn't work * Fix UI auto refresh removes model ID in model panel * Fix UI debug samples download image opens new tab instead of downloading diff --git a/docs/release_notes/clearml_server/open_source/ver_1_1.md b/docs/release_notes/clearml_server/open_source/ver_1_1.md index 90637d7a..8048121f 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_1.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_1.md @@ -22,9 +22,9 @@ title: Version 1.1 **Bug Fixes** -- Fix experiment details UI failure opening hyperparameter sections beginning with `#` ([ClearML Server GitHub issue #79](https://github.com/allegroai/clearml-server/issues/79)) +- Fix experiment details UI failure opening hyperparameter sections beginning with `#` ([ClearML Server GitHub issue #79](https://github.com/clearml/clearml-server/issues/79)) - Fix performance issues with UI comparison of large experiments ([Slack Channel](https://clearml.slack.com/archives/CTK20V944/p1621698235159800)) -- Fix filtering on hyperparameters ([ClearML GitHub issue #385](https://github.com/allegroai/clearml/issues/385) [Slack Channel](https://clearml.slack.com/archives/CTK20V944/p1626600582284700)) +- Fix filtering on hyperparameters ([ClearML GitHub issue #385](https://github.com/clearml/clearml/issues/385) [Slack Channel](https://clearml.slack.com/archives/CTK20V944/p1626600582284700)) - Fix profile page user options toggle control area of effect - Fix browser resizing affecting plot zoom - Fix UI dataview filter resetting version on filter addition diff --git a/docs/release_notes/clearml_server/open_source/ver_1_10.md b/docs/release_notes/clearml_server/open_source/ver_1_10.md index 4367048c..394f6bc1 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_10.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_10.md @@ -5,19 +5,19 @@ title: Version 1.10 ### ClearML Server 1.10.1 **Bug Fix** -* Fix WebApp does not connect to the server when using non-default ports ([ClearML Server GitHub issue #191](https://github.com/allegroai/clearml-server/issues/191)) +* Fix WebApp does not connect to the server when using non-default ports ([ClearML Server GitHub issue #191](https://github.com/clearml/clearml-server/issues/191)) ### ClearML Server 1.10.0 **New Features and Improvements** * Additional model information - * Add Lineage tab to UI model page, which displays experiment that created model and lists experiments that use the model ([ClearML GitHub issue #810](https://github.com/allegroai/clearml/issues/810)) + * Add Lineage tab to UI model page, which displays experiment that created model and lists experiments that use the model ([ClearML GitHub issue #810](https://github.com/clearml/clearml/issues/810)) * Add Plots and Scalars tabs to UI Model page -* Add project hierarchy view for ClearML resources (pipelines, datasets, hyper-datasets, reports) ([ClearML GitHub issue #724](https://github.com/allegroai/clearml/issues/724)): +* Add project hierarchy view for ClearML resources (pipelines, datasets, hyper-datasets, reports) ([ClearML GitHub issue #724](https://github.com/clearml/clearml/issues/724)): * Flat view - all objects displayed side-by-side * Nested view - objects grouped by containing projects. -* Add archived experiment inclusion in UI experiment comparison ([ClearML GitHub issue #795](https://github.com/allegroai/clearml/issues/795)) -* Update ElasticSearch image to 7.17.7 ([ClearML Server GitHub issue #183](https://github.com/allegroai/clearml-server/issues/183)) +* Add archived experiment inclusion in UI experiment comparison ([ClearML GitHub issue #795](https://github.com/clearml/clearml/issues/795)) +* Update ElasticSearch image to 7.17.7 ([ClearML Server GitHub issue #183](https://github.com/clearml/clearml-server/issues/183)) * Add reported plot support for multiple color formats * Add running tasks to UI project overview metric snapshot * Improve UI Reports: @@ -27,7 +27,7 @@ title: Version 1.10 * Add Experiment comparison UI parallel coordinate plots full screen view **Bug Fixes** -* Fix UI scalar plot smoothing is biased towards initial value ([ClearML Server GitHub issue #180](https://github.com/allegroai/clearml-server/issues/180)) +* Fix UI scalar plot smoothing is biased towards initial value ([ClearML Server GitHub issue #180](https://github.com/clearml/clearml-server/issues/180)) * Fix UI experiment plot comparison not merging plots * Fix UI reports search bar doesn't search report descriptions * Fix UI reports search bar does not close after result is selected diff --git a/docs/release_notes/clearml_server/open_source/ver_1_11.md b/docs/release_notes/clearml_server/open_source/ver_1_11.md index f312d2e0..6c18ed44 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_11.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_11.md @@ -7,7 +7,7 @@ title: Version 1.11 **New Features and Improvements** * New model comparison UI: compare model configuration, metrics, and plots * Add Preview tab to UI pipeline for viewing debug samples and plots attached to a pipeline -* Add dynamic side panel width in UI experiment artifacts and configuration ([ClearML Server GitHub issue #160](https://github.com/allegroai/clearml-server/issues/160)) +* Add dynamic side panel width in UI experiment artifacts and configuration ([ClearML Server GitHub issue #160](https://github.com/clearml/clearml-server/issues/160)) * Add support for embedding following UI resources in reports: * Single-value-scalar table plots * Application dashboard graphs @@ -21,11 +21,11 @@ title: Version 1.11 **Bug Fixes** -* Fix UI experiment plot history navigation not working correctly ([ClearML GitHub issue #955](https://github.com/allegroai/clearml/issues/955)) -* Support browser native context menu (via right click) in UI experiment hyperparameters ([ClearML GitHub issue #990](https://github.com/allegroai/clearml/issues/990)) -* Fix `series` argument not in UI experiment debug samples when using `logger.report_media` ([ClearML GitHub issue #685](https://github.com/allegroai/clearml/issues/685)) -* Fix smoothing bar not displayed in UI experiment comparison scalars in full screen mode ([ClearML GitHub issue #996](https://github.com/allegroai/clearml/issues/996)) -* Fix uploading image in UI report raises error ([ClearML GitHub issue #1020](https://github.com/allegroai/clearml/issues/1020)) +* Fix UI experiment plot history navigation not working correctly ([ClearML GitHub issue #955](https://github.com/clearml/clearml/issues/955)) +* Support browser native context menu (via right click) in UI experiment hyperparameters ([ClearML GitHub issue #990](https://github.com/clearml/clearml/issues/990)) +* Fix `series` argument not in UI experiment debug samples when using `logger.report_media` ([ClearML GitHub issue #685](https://github.com/clearml/clearml/issues/685)) +* Fix smoothing bar not displayed in UI experiment comparison scalars in full screen mode ([ClearML GitHub issue #996](https://github.com/clearml/clearml/issues/996)) +* Fix uploading image in UI report raises error ([ClearML GitHub issue #1020](https://github.com/clearml/clearml/issues/1020)) * Add mobile device support for UI experiment tab selection * Fix deleting models doesn't remove their weight files from fileserver * Fix "Load More" button does not work in UI experiment comparison "Add Experiment" modal diff --git a/docs/release_notes/clearml_server/open_source/ver_1_12.md b/docs/release_notes/clearml_server/open_source/ver_1_12.md index 0bd5ad5d..e15b15fc 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_12.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_12.md @@ -5,7 +5,7 @@ title: Version 1.12 ### ClearML Server 1.12.1 **Bug Fixes** -* Fix UI experiment scalars and plots not updated on auto-refresh ([ClearML GitHub issue #1086](https://github.com/allegroai/clearml/issues/1086)) +* Fix UI experiment scalars and plots not updated on auto-refresh ([ClearML GitHub issue #1086](https://github.com/clearml/clearml/issues/1086)) * Fix pipeline parameters not displayed in UI pipeline "New Run" modal * Fix UI pipeline project cards display incorrect pipeline run counts @@ -13,14 +13,14 @@ title: Version 1.12 **New Features and Improvements** * Additional UI cloud storage access options: - * Support for AWS S3 temporary access tokens ([ClearML GitHub issue #200](https://github.com/allegroai/clearml-server/issues/200) and [ClearML Web GitHub issue #52](https://github.com/allegroai/clearml-web/issues/52)) + * Support for AWS S3 temporary access tokens ([ClearML GitHub issue #200](https://github.com/clearml/clearml-server/issues/200) and [ClearML Web GitHub issue #52](https://github.com/clearml/clearml-web/issues/52)) * Support credentials for private GCS buckets -* Add multiple smoothing algorithms to UI scalar plots ([ClearML GitHub issue #996](https://github.com/allegroai/clearml/issues/996)) +* Add multiple smoothing algorithms to UI scalar plots ([ClearML GitHub issue #996](https://github.com/clearml/clearml/issues/996)) * Running average * Exponential running average * Gaussian -* Add exporting UI object table data in CSV format ([ClearML GitHub issue #882](https://github.com/allegroai/clearml/issues/882)) -* Increase console log page size ([ClearML Web GitHub PR #58](https://github.com/allegroai/clearml-web/pull/58)) +* Add exporting UI object table data in CSV format ([ClearML GitHub issue #882](https://github.com/clearml/clearml/issues/882)) +* Increase console log page size ([ClearML Web GitHub PR #58](https://github.com/clearml/clearml-web/pull/58)) * Add Python executable to UI experiment execution tab * Improve naming scheme for UI plots download as PNG: files are saved with same name as plot object * Add keyboard arrow-key controls for UI "Add tag" menu @@ -30,9 +30,9 @@ title: Version 1.12 * Add iteration specification to plots in task comparison plots page **Bug Fixes** -* Fix handling of the subpaths with nginx templating ([ClearML Server GitHub PR #204](https://github.com/allegroai/clearml-server/pull/204)) -* Fix fullscreen single-iteration plot displays history slider ([ClearML GitHub issue #909](https://github.com/allegroai/clearml/issues/909)) -* Fix UI new project modal does not accept Azure URLs for default output destination field ([ClearML GitHub issue #1047](https://github.com/allegroai/clearml/issues/1047)) +* Fix handling of the subpaths with nginx templating ([ClearML Server GitHub PR #204](https://github.com/clearml/clearml-server/pull/204)) +* Fix fullscreen single-iteration plot displays history slider ([ClearML GitHub issue #909](https://github.com/clearml/clearml/issues/909)) +* Fix UI new project modal does not accept Azure URLs for default output destination field ([ClearML GitHub issue #1047](https://github.com/clearml/clearml/issues/1047)) * Fix missing "Description" column in UI dataset version table * Fix UI scalar plots notation for small and large scale values * Fix UI experiment comparison does not display experiments' last reported iterations diff --git a/docs/release_notes/clearml_server/open_source/ver_1_13.md b/docs/release_notes/clearml_server/open_source/ver_1_13.md index 8f5f67e7..281d29cb 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_13.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_13.md @@ -12,22 +12,22 @@ title: Version 1.13 **New Features and Improvements** * Improve UI comparison - * Add visual comparison of single value scalars ([ClearML Server GitHub issue #202](https://github.com/allegroai/clearml-server/issues/202)) - * Scalar value comparison: metrics are presented in a single table ([ClearML GitHub issue #760](https://github.com/allegroai/clearml/issues/760)) - * Add global experiment legend: Experiment name, tags and color ([ClearML GitHub issue #81](https://github.com/allegroai/clearml/issues/81)) - * Clickable URLs/object IDs in experiment details comparison ([ClearML GitHub issue #1073](https://github.com/allegroai/clearml/issues/1073)) + * Add visual comparison of single value scalars ([ClearML Server GitHub issue #202](https://github.com/clearml/clearml-server/issues/202)) + * Scalar value comparison: metrics are presented in a single table ([ClearML GitHub issue #760](https://github.com/clearml/clearml/issues/760)) + * Add global experiment legend: Experiment name, tags and color ([ClearML GitHub issue #81](https://github.com/clearml/clearml/issues/81)) + * Clickable URLs/object IDs in experiment details comparison ([ClearML GitHub issue #1073](https://github.com/clearml/clearml/issues/1073)) * UI Search improvements * Dashboard search results ordered by update time * Top bar search query saved in URL -* Improve UI experiment debug sample iteration fetching speed ([ClearML Server GitHub issue #170](https://github.com/allegroai/clearml-server/issues/170)) +* Improve UI experiment debug sample iteration fetching speed ([ClearML Server GitHub issue #170](https://github.com/clearml/clearml-server/issues/170)) * Add UI cloud credentials support for GCS signed URLs with HMAC authentication * Add Experiment plot UI support for displaying subplots **Bug Fixes** -* Fix UI single-value scalars table does not display all single-value scalars ([ClearML GitHub issue #1111](https://github.com/allegroai/clearml/issues/1111)) -* Fix UI pipeline step duration does not update during runtime ([ClearML GitHub issue #1090](https://github.com/allegroai/clearml/issues/1090)) -* Fix UI experiment comparison parallel coordinates plot crops the metric and parameter names ([ClearML GitHub issue #1111](https://github.com/allegroai/clearml/issues/1111)) -* Fix hidden experiments appear in UI All Experiments search results ([ClearML GitHub issue #1139](https://github.com/allegroai/clearml/issues/1139)) +* Fix UI single-value scalars table does not display all single-value scalars ([ClearML GitHub issue #1111](https://github.com/clearml/clearml/issues/1111)) +* Fix UI pipeline step duration does not update during runtime ([ClearML GitHub issue #1090](https://github.com/clearml/clearml/issues/1090)) +* Fix UI experiment comparison parallel coordinates plot crops the metric and parameter names ([ClearML GitHub issue #1111](https://github.com/clearml/clearml/issues/1111)) +* Fix hidden experiments appear in UI All Experiments search results ([ClearML GitHub issue #1139](https://github.com/clearml/clearml/issues/1139)) * Fix disabled graphs in UI scalars reappear in full-screen mode * Fix UI auto-refresh sometimes causes many error message to be raised * Fix "All" tag filter not working in UI object pages diff --git a/docs/release_notes/clearml_server/open_source/ver_1_14.md b/docs/release_notes/clearml_server/open_source/ver_1_14.md index 625e7198..9f49c089 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_14.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_14.md @@ -9,7 +9,7 @@ title: Version 1.14 * Change default cookie `SameSite` setting to `Lax` **Bug Fixes** -* Fix clicking on UI Metric Snapshot datapoint does not navigate to experiment ([ClearML Server GitHub issue #228](https://github.com/allegroai/clearml-server/issues/228)) +* Fix clicking on UI Metric Snapshot datapoint does not navigate to experiment ([ClearML Server GitHub issue #228](https://github.com/clearml/clearml-server/issues/228)) * Fix some APIs not sanitizing query parameters * Fix downloading UI experiment console log sometimes returns an older file * Fix UI experiment plot comparison displays duplicates of image plots @@ -20,7 +20,7 @@ title: Version 1.14 **New Features and Improvements** * New UI experiment table comparative view: compare plots and scalars of all selected experiments -* Add UI experiment display of original python requirements along with actual packages used ([ClearML GitHub issue #793](https://github.com/allegroai/clearml/issues/793)) +* Add UI experiment display of original Python requirements along with actual packages used ([ClearML GitHub issue #793](https://github.com/clearml/clearml/issues/793)) * Add UI project metric snapshot support for multiple metrics * Add compressed UI experiment table info panel mode displaying only experiment name and status * Add "x unified" hover mode to UI plots diff --git a/docs/release_notes/clearml_server/open_source/ver_1_15.md b/docs/release_notes/clearml_server/open_source/ver_1_15.md index 27b7f5df..a75fe2b0 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_15.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_15.md @@ -5,23 +5,23 @@ title: Version 1.15 ### ClearML Server 1.15.1 **Bug Fix** -* Fix restarting ClearML Server deletes app credentials ([ClearML Server GitHub issue #240](https://github.com/allegroai/clearml-server/issues/240) and ClearML GitHub issues [#1247](https://github.com/allegroai/clearml/issues/1257) & [#1262](https://github.com/allegroai/clearml/issues/1262)) +* Fix restarting ClearML Server deletes app credentials ([ClearML Server GitHub issue #240](https://github.com/clearml/clearml-server/issues/240) and ClearML GitHub issues [#1247](https://github.com/clearml/clearml/issues/1257) & [#1262](https://github.com/clearml/clearml/issues/1262)) ### ClearML Server 1.15.0 **New Features and Improvements** * UI experiment hyperparameter comparison * Add Parallel coordinate view support for multiple metrics - * Add scatter plot mode to UI experiment hyperparameter comparison ([ClearML GitHub issue #984](https://github.com/allegroai/clearml/issues/984)) + * Add scatter plot mode to UI experiment hyperparameter comparison ([ClearML GitHub issue #984](https://github.com/clearml/clearml/issues/984)) * Add model lineage to UI model comparison -* Update nginx version to Fix 1-Byte Memory Overwrite RCE vulnerability ([ClearML Server GitHub issue #230](https://github.com/allegroai/clearml-server/issues/230)) +* Update nginx version to Fix 1-Byte Memory Overwrite RCE vulnerability ([ClearML Server GitHub issue #230](https://github.com/clearml/clearml-server/issues/230)) **Bug Fixes** -* Fix Heap Buffer Overflow vulnerability (CVE-2023-38545) ([ClearML Server GitHub issue #234](https://github.com/allegroai/clearml-server/issues/234)) +* Fix Heap Buffer Overflow vulnerability (CVE-2023-38545) ([ClearML Server GitHub issue #234](https://github.com/clearml/clearml-server/issues/234)) * Fix insufficient session expiration vulnerability (CWE-613) * Fix XSS vulnerability (CWE-79) in UI markdown * Fix UI reports vulnerable to XSS attack -* Fix UI generating undefined credentials for Jupyter Notebook ([ClearML Web GitHub issue #67](https://github.com/allegroai/clearml-web/issues/67)) +* Fix UI generating undefined credentials for Jupyter Notebook ([ClearML Web GitHub issue #67](https://github.com/clearml/clearml-web/issues/67)) * Fix "No tags" filter raises an error * Fix slow loading speed for UI experiment comparison scalars * Fix some UI experiment sometimes missing plots diff --git a/docs/release_notes/clearml_server/open_source/ver_1_16.md b/docs/release_notes/clearml_server/open_source/ver_1_16.md index 2d81b2f7..c74b28ab 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_16.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_16.md @@ -10,7 +10,7 @@ title: Version 1.16 ### ClearML Server 1.16.1 **Bug Fix** -* Fix user credentials reset on API server restart ([ClearML Server GitHub issue #250](https://github.com/allegroai/clearml-server/issues/250)) +* Fix user credentials reset on API server restart ([ClearML Server GitHub issue #250](https://github.com/clearml/clearml-server/issues/250)) ### ClearML Server 1.16.0 @@ -26,8 +26,8 @@ configuration setting * Fix UI scalar “Export to CSV” button returns an empty CSV file * Fix large number of tags in UI tables' tag filter causes UI to crash * Fix searching in UI object tables' tag filter causes UI to crash -* Fix consistent plot colors not maintained when embedded in UI Reports ([ClearML GitHub issue #1239](https://github.com/allegroai/clearml/issues/1239)) -* Fix UI plot legends and tooltips wrapping ([ClearML Server GitHub issue #241](https://github.com/allegroai/clearml-server/issues/241)) +* Fix consistent plot colors not maintained when embedded in UI Reports ([ClearML GitHub issue #1239](https://github.com/clearml/clearml/issues/1239)) +* Fix UI plot legends and tooltips wrapping ([ClearML Server GitHub issue #241](https://github.com/clearml/clearml-server/issues/241)) * Fix multiple parameters can be selected for plot axes in scatter plot view in UI experiment comparison * Fix image names change in UI task debug sample comparison when a different metric is selected * Fix numeric range filters of UI table columns not working diff --git a/docs/release_notes/clearml_server/open_source/ver_1_17.md b/docs/release_notes/clearml_server/open_source/ver_1_17.md index e6c9873a..51917272 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_17.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_17.md @@ -5,7 +5,7 @@ title: Version 1.17 ### ClearML Server 1.17.1 **Bug Fixes** -* Fix invalid mongodb connection string if `CLEARML_MONGODB_SERVICE_CONNECTION_STRING` is specified ([ClearML Server GitHub issue #252](https://github.com/allegroai/clearml-server/issues/252)) +* Fix invalid mongodb connection string if `CLEARML_MONGODB_SERVICE_CONNECTION_STRING` is specified ([ClearML Server GitHub issue #252](https://github.com/clearml/clearml-server/issues/252)) * Fix UI dataset Preview tab does not display dataset contents * Fix resetting UI experiments sometimes does not clear scalar plots @@ -14,7 +14,7 @@ title: Version 1.17 **New Features** * New ClearML Model dashboard: View all live model endpoints in a single location, complete with real time metrics reporting. * New UI pipeline run table comparative view: compare plots and scalars of selected pipeline runs -* Improve services agent behavior: If no credentials are specified, agent uses default credentials ([ClearML Server GitHub issue #140](https://github.com/allegroai/clearml-server/issues/140)) +* Improve services agent behavior: If no credentials are specified, agent uses default credentials ([ClearML Server GitHub issue #140](https://github.com/clearml/clearml-server/issues/140)) * Add UI re-enqueue of failed tasks * Add UI experiment scalar results table view * Add "Block running user's scripts in the browser" UI setting option for added security @@ -22,18 +22,18 @@ title: Version 1.17 * Add UI edit of default Project default output destination **Bug Fixes** -* Fix broken download links to artifacts stored in Azure ([ClearML Server GitHub issue #247](https://github.com/allegroai/clearml-server/issues/247)) +* Fix broken download links to artifacts stored in Azure ([ClearML Server GitHub issue #247](https://github.com/clearml/clearml-server/issues/247)) * Fix Cross-site Scripting (XSS) vulnerability (CWE-79) -* Fix UI experiment textual comparison diff showing contextual diffs as different contents ([ClearML GitHub issue #646](https://github.com/allegroai/clearml/issues/646)) -* Fix UI experiment comparison does not overlay box plots and histograms ([ClearML GitHub issue #1298](https://github.com/allegroai/clearml/issues/1298)) -* Fix UI plots display “Iteration 0” when it is the only reported iteration ([ClearML GitHub issue #1267](https://github.com/allegroai/clearml/issues/1267)) -* Fix scalar series starting with angle bracket (`<`) causes UI scalar plot legend to display raw html ([ClearML GitHub issue #1292](https://github.com/allegroai/clearml/issues/1292)) +* Fix UI experiment textual comparison diff showing contextual diffs as different contents ([ClearML GitHub issue #646](https://github.com/clearml/clearml/issues/646)) +* Fix UI experiment comparison does not overlay box plots and histograms ([ClearML GitHub issue #1298](https://github.com/clearml/clearml/issues/1298)) +* Fix UI plots display “Iteration 0” when it is the only reported iteration ([ClearML GitHub issue #1267](https://github.com/clearml/clearml/issues/1267)) +* Fix scalar series starting with angle bracket (`<`) causes UI scalar plot legend to display raw html ([ClearML GitHub issue #1292](https://github.com/clearml/clearml/issues/1292)) * Fix UI scalar plot not displayed if metric name includes a slash surrounded by spaces (`/`) -* Fix Model API calls fail when its creating task has been deleted ([ClearML GitHub issue #1299](https://github.com/allegroai/clearml/issues/1299)) -* Fix UI pipeline DAG display to be "bottom-up" so all final steps appear in the bottom of the diagram ([ClearML Web GitHub PR #86](https://github.com/allegroai/clearml-web/pull/86)) -* Fix invalid mongodb connection string if `CLEARML_MONGODB_SERVICE_CONNECTION_STRING` is specified ([ClearML Server GitHub issue #252](https://github.com/allegroai/clearml-server/issues/252)) -* Fix auto-refresh modifies UI experiment debug sample view ([ClearML GitHub issue #1259](https://github.com/allegroai/clearml/issues/1259)) -* Fix UI image plot retrieval from fileserver missing authentication cookie ([ClearML GitHub issue #1331](https://github.com/allegroai/clearml/issues/1331)) +* Fix Model API calls fail when its creating task has been deleted ([ClearML GitHub issue #1299](https://github.com/clearml/clearml/issues/1299)) +* Fix UI pipeline DAG display to be "bottom-up" so all final steps appear in the bottom of the diagram ([ClearML Web GitHub PR #86](https://github.com/clearml/clearml-web/pull/86)) +* Fix invalid mongodb connection string if `CLEARML_MONGODB_SERVICE_CONNECTION_STRING` is specified ([ClearML Server GitHub issue #252](https://github.com/clearml/clearml-server/issues/252)) +* Fix auto-refresh modifies UI experiment debug sample view ([ClearML GitHub issue #1259](https://github.com/clearml/clearml/issues/1259)) +* Fix UI image plot retrieval from fileserver missing authentication cookie ([ClearML GitHub issue #1331](https://github.com/clearml/clearml/issues/1331)) * Fix pipeline run version not set when re-executed via the UI * Fix metric and hyperparameter group string not searchable in UI table * Fix UI model hidden plot selection does not persist upon refresh diff --git a/docs/release_notes/clearml_server/open_source/ver_1_2.md b/docs/release_notes/clearml_server/open_source/ver_1_2.md index d4756af9..8bf17841 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_2.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_2.md @@ -6,7 +6,7 @@ title: Version 1.2 **New Features and Improvements** * Add functionality to "Abort all children" UI action for controller and optimizer tasks -* Add parameter search to task configuration UI section ([ClearML GitHub issue #467](https://github.com/allegroai/clearml/issues/467)) +* Add parameter search to task configuration UI section ([ClearML GitHub issue #467](https://github.com/clearml/clearml/issues/467)) * Add tag exclusion filters in UI experiment and model tables * Add "Clear Filters" functionality button to UI table filters * Improve full screen scalar graph to display all data points @@ -29,12 +29,12 @@ title: Version 1.2 **Bug Fixes** -* Fix UI debug sample viewer ignoring metric filter on auto-refresh ([ClearML GitHub issue #512](https://github.com/allegroai/clearml/issues/512)) -* Fix "Wall time" x-axis option in UI plots slowing down web app ([ClearML GitHub issue #441](https://github.com/allegroai/clearml/issues/441)) -* Fix UI table plot titles don't display their iteration number ([ClearML GitHub issue #474](https://github.com/allegroai/clearml/issues/474)) -* Fix auto-refresh resets vertical scroll in UI debug samples ([ClearML GitHub issue #474](https://github.com/allegroai/clearml/issues/474)) -* Fix manually run experiments cannot be edited in UI after being reset ([ClearML GitHub issue #449](https://github.com/allegroai/clearml/issues/449)) -* Fix UI Workers & Queues and Experiment Table pages display mismatching experiment runtime values ([ClearML Server GitHub issue #100](https://github.com/allegroai/clearml-server/issues/100)) +* Fix UI debug sample viewer ignoring metric filter on auto-refresh ([ClearML GitHub issue #512](https://github.com/clearml/clearml/issues/512)) +* Fix "Wall time" x-axis option in UI plots slowing down web app ([ClearML GitHub issue #441](https://github.com/clearml/clearml/issues/441)) +* Fix UI table plot titles don't display their iteration number ([ClearML GitHub issue #474](https://github.com/clearml/clearml/issues/474)) +* Fix auto-refresh resets vertical scroll in UI debug samples ([ClearML GitHub issue #474](https://github.com/clearml/clearml/issues/474)) +* Fix manually run experiments cannot be edited in UI after being reset ([ClearML GitHub issue #449](https://github.com/clearml/clearml/issues/449)) +* Fix UI Workers & Queues and Experiment Table pages display mismatching experiment runtime values ([ClearML Server GitHub issue #100](https://github.com/clearml/clearml-server/issues/100)) * Fix UI plots sometimes disappear after task execution completion * Fix UI experiment plots don't display some plots on a http server * Fix failure to add Azure credentials through UI Settings page by new users diff --git a/docs/release_notes/clearml_server/open_source/ver_1_3.md b/docs/release_notes/clearml_server/open_source/ver_1_3.md index fafb7f55..afec85be 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_3.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_3.md @@ -5,7 +5,7 @@ title: Version 1.3 ### ClearML Server 1.3.1 **Bug Fixes** -* Fix scalar graph smoothing ([ClearML Server GitHub issue #127](https://github.com/allegroai/clearml-server/issues/127)) +* Fix scalar graph smoothing ([ClearML Server GitHub issue #127](https://github.com/clearml/clearml-server/issues/127)) ### ClearML Server 1.3.0 @@ -14,9 +14,9 @@ title: Version 1.3 * Pipelines statistics dashboard * Pipeline run history: View pipeline structure, run configuration and outputs * Pipeline control: Abort/Run pipelines from UI -* Add support for exporting UI table plots in CSV formats ([ClearML GitHub issue #400](https://github.com/allegroai/clearml/issues/400)) -* Improve UI breadcrumbs use of screen real-estate ([ClearML GitHub issue #529](https://github.com/allegroai/clearml/issues/529)) -* Add UI adherence to user specification of plot colors and labels ([ClearML GitHub issue #518](https://github.com/allegroai/clearml/issues/518)) +* Add support for exporting UI table plots in CSV formats ([ClearML GitHub issue #400](https://github.com/clearml/clearml/issues/400)) +* Improve UI breadcrumbs use of screen real-estate ([ClearML GitHub issue #529](https://github.com/clearml/clearml/issues/529)) +* Add UI adherence to user specification of plot colors and labels ([ClearML GitHub issue #518](https://github.com/clearml/clearml/issues/518)) * Add Model metadata to UI model information (Model table and details page) * Add multi-selection in UI experiment info-panel mode * Add labels to workspace credentials @@ -25,7 +25,7 @@ title: Version 1.3 * Add Previous/Next controls to UI text area search bars **Bug Fixes** -* Fix UI plots do not display Plotly `imshow texttemplate` ([ClearML GitHub issue #538](https://github.com/allegroai/clearml/issues/538)) +* Fix UI plots do not display Plotly `imshow texttemplate` ([ClearML GitHub issue #538](https://github.com/clearml/clearml/issues/538)) * Fix clicking F5 clears storage credentials from UI settings page * Fix UI plots "Wall time" horizontal axis option is not working * Fix disappearing UI full-screen scalar plot diff --git a/docs/release_notes/clearml_server/open_source/ver_1_4.md b/docs/release_notes/clearml_server/open_source/ver_1_4.md index bf3af082..62da14ca 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_4.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_4.md @@ -6,28 +6,28 @@ title: Version 1.4 **New Features and Improvements** -- Allow serving with a URL path prefix ([ClearML Server GitHub issue #119](https://github.com/allegroai/clearml-server/issues/119)) -- Allow overriding clearml web git url on build ([ClearML Server GitHub Pull Request #122](https://github.com/allegroai/clearml-server/pull/122)) -- Ensure agent-services waits for API server to be ready ([ClearML Server GitHub issue #113](https://github.com/allegroai/clearml-server/issues/113)) -- Add filter to UI experiment table "Project" column ([ClearML GitHub issue #529](https://github.com/allegroai/clearml/issues/529)) +- Allow serving with a URL path prefix ([ClearML Server GitHub issue #119](https://github.com/clearml/clearml-server/issues/119)) +- Allow overriding clearml web git url on build ([ClearML Server GitHub Pull Request #122](https://github.com/clearml/clearml-server/pull/122)) +- Ensure agent-services waits for API server to be ready ([ClearML Server GitHub issue #113](https://github.com/clearml/clearml-server/issues/113)) +- Add filter to UI experiment table "Project" column ([ClearML GitHub issue #529](https://github.com/clearml/clearml/issues/529)) - Add filters to UI model table custom metadata columns - Improve UI table object selection. Add buttons and context menu actions to switch between table and info panel mode -- Add task detail header to UI experiment comparison debug image section addressed in ([ClearML GitHub issue #81](https://github.com/allegroai/clearml/issues/81) ([comment](https://github.com/allegroai/clearml/issues/81#issuecomment-996841658))) -- Improve series name truncation behavior in UI scalar plots ([ClearML GitHub issue #562](https://github.com/allegroai/clearml/issues/562)) +- Add task detail header to UI experiment comparison debug image section addressed in ([ClearML GitHub issue #81](https://github.com/clearml/clearml/issues/81) ([comment](https://github.com/clearml/clearml/issues/81#issuecomment-996841658))) +- Improve series name truncation behavior in UI scalar plots ([ClearML GitHub issue #562](https://github.com/clearml/clearml/issues/562)) **Bug Fixes** -- Fix server limiting image and artifact upload size ([ClearML GitHub issue #606](https://github.com/allegroai/clearml/issues/606)) -- Fix server unnecessarily displays deletion error message ([ClearML Server GitHub issue #112](https://github.com/allegroai/clearml-server/issues/112)) -- Fix UI experiment comparison sections overly wide for many tag experiments ([ClearML GitHub issue #594](https://github.com/allegroai/clearml/issues/594)) +- Fix server limiting image and artifact upload size ([ClearML GitHub issue #606](https://github.com/clearml/clearml/issues/606)) +- Fix server unnecessarily displays deletion error message ([ClearML Server GitHub issue #112](https://github.com/clearml/clearml-server/issues/112)) +- Fix UI experiment comparison sections overly wide for many tag experiments ([ClearML GitHub issue #594](https://github.com/clearml/clearml/issues/594)) - Fix model name display in UI pipeline run info panel - Fix UI pipeline run info panel missing artifacts and models sections - Fix UI pipeline run info panel displays unneeded resource utilization metrics - Fix UI project cards missing task summary values - Fix pipeline tag colors can't be changed in UI pipeline page -- Fix pipeline run UI page not displaying pipeline steps ([ClearML GitHub issue #618](https://github.com/allegroai/clearml/issues/618)) +- Fix pipeline run UI page not displaying pipeline steps ([ClearML GitHub issue #618](https://github.com/clearml/clearml/issues/618)) - Fix breadcrumb links don't navigate anywhere - Fix horizontal scroll in UI experiment table causes column headers to jump - Fix removing UI table column creates a blank column -- Fix internal server error (500) on `events.get_scalar_metrics_and_variants` ([ClearML Server GitHub issue #120](https://github.com/allegroai/clearml-server/issues/120)) +- Fix internal server error (500) on `events.get_scalar_metrics_and_variants` ([ClearML Server GitHub issue #120](https://github.com/clearml/clearml-server/issues/120)) diff --git a/docs/release_notes/clearml_server/open_source/ver_1_5.md b/docs/release_notes/clearml_server/open_source/ver_1_5.md index 8183a714..12ff9728 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_5.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_5.md @@ -9,8 +9,8 @@ title: Version 1.5 * Redesign experiment status banner * Display all experiment tabs in single line * Move experiment action buttons to the top right -* Add UI adherence to user specified plot dimensions ([ClearML GitHub issue #587](https://github.com/allegroai/clearml/issues/587)) -* Add row highlight to experiment textual comparison UI ([ClearML GitHub issue #581](https://github.com/allegroai/clearml/issues/581)) +* Add UI adherence to user specified plot dimensions ([ClearML GitHub issue #587](https://github.com/clearml/clearml/issues/587)) +* Add row highlight to experiment textual comparison UI ([ClearML GitHub issue #581](https://github.com/clearml/clearml/issues/581)) * Add UI "Delete" action for Pipelines * Add UI indicator for task and pipeline progress * Add UI API credentials label "Edit" action @@ -19,8 +19,8 @@ title: Version 1.5 * Add pipeline results to UI dashboard search **Bug Fixes** -* Fix UI experiment debug samples disappearing after refresh ([ClearML Server GitHub issue #136](https://github.com/allegroai/clearml-server/issues/136)) -* Fix deleting tasks sometimes raises errors ([ClearML GitHub issue #632](https://github.com/allegroai/clearml/issues/632)) +* Fix UI experiment debug samples disappearing after refresh ([ClearML Server GitHub issue #136](https://github.com/clearml/clearml-server/issues/136)) +* Fix deleting tasks sometimes raises errors ([ClearML GitHub issue #632](https://github.com/clearml/clearml/issues/632)) * Fix only partial task log shown when running on ES with multiple shards * Fix move task to trash is not thread-safe * Fix UI Project overview metric snapshot not showing diff --git a/docs/release_notes/clearml_server/open_source/ver_1_6.md b/docs/release_notes/clearml_server/open_source/ver_1_6.md index 267dfeda..e0e779d2 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_6.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_6.md @@ -5,14 +5,14 @@ title: Version 1.6 ### ClearML Server 1.6.0 **New Features and Improvements** * New ClearML Datasets UI pages for tracking dataset versions and exploring version lineage and contents -* Add history navigation to experiments plots UI page ([ClearML GitHub issues #81](https://github.com/allegroai/clearml/issues/81) and [#255](https://github.com/allegroai/clearml/issues/255)): +* Add history navigation to experiments plots UI page ([ClearML GitHub issues #81](https://github.com/clearml/clearml/issues/81) and [#255](https://github.com/clearml/clearml/issues/255)): * Plots page shows last reported plot for each metric/variation combination * Single plot view provides history navigation slider * Add single value scalar reporting: Single value scalars are aggregated into a summary table in the experiment's scalars - UI page ([ClearML GitHub issue #400](https://github.com/allegroai/clearml/issues/400)) -* Add "show hidden projects" control ([ClearML GitHub issue #694](https://github.com/allegroai/clearml/issues/694)) + UI page ([ClearML GitHub issue #400](https://github.com/clearml/clearml/issues/400)) +* Add "show hidden projects" control ([ClearML GitHub issue #694](https://github.com/clearml/clearml/issues/694)) * Improve UI projects page setting persistence - User's last chosen settings for recent/name sorting and team/personal - filter is saved ([ClearML GitHub issue #353](https://github.com/allegroai/clearml/issues/353)) + filter is saved ([ClearML GitHub issue #353](https://github.com/clearml/clearml/issues/353)) * Improve UI presentation for object IDs: * Display shortened ID next to task name * Display full ID in tooltip @@ -26,9 +26,9 @@ title: Version 1.6 * Maintain UI viewing mode when restoring archived items **Bug Fixes** -* Fix experiment selection with 'Shift' key in UI experiment table not working ([ClearML Server GitHub issue #139](https://github.com/allegroai/clearml-server/issues/139)) -* Fix UI search error message interferes with inputting search query ([ClearML Server GitHub issue #138](https://github.com/allegroai/clearml-server/issues/138)) -* Fix refresh breaks UI breadcrumbs ClearML Server ([ClearML Server GitHub issue #142](https://github.com/allegroai/clearml-server/issues/142)) +* Fix experiment selection with 'Shift' key in UI experiment table not working ([ClearML Server GitHub issue #139](https://github.com/clearml/clearml-server/issues/139)) +* Fix UI search error message interferes with inputting search query ([ClearML Server GitHub issue #138](https://github.com/clearml/clearml-server/issues/138)) +* Fix refresh breaks UI breadcrumbs ClearML Server ([ClearML Server GitHub issue #142](https://github.com/clearml/clearml-server/issues/142)) * Fix UI Workers and Queues page displays incorrect queue metrics * Fix failure to publish models whose generating task was reset * Fix listed models in UI pipeline run info panel doesn't link to model diff --git a/docs/release_notes/clearml_server/open_source/ver_1_7.md b/docs/release_notes/clearml_server/open_source/ver_1_7.md index d376cd11..2af9535c 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_7.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_7.md @@ -4,10 +4,10 @@ title: Version 1.7 ### ClearML Server 1.7.0 **New Features and Improvements** -* Add “Sync comparison” to UI experiment debug samples comparison: Control metric/iteration for all compared experiments ([ClearML GitHub issue #691](https://github.com/allegroai/clearml/issues/691)) -* Support serving UI from a non-root path of the ClearML Server ([ClearML Helm Charts issue #101](https://github.com/allegroai/clearml-helm-charts/issues/101) and [ClearML Server issue #135](https://github.com/allegroai/clearml-server/issues/135)) -* Add UI option for hiding “secret” experiment container arguments ([ClearML Server GitHub issue #146](https://github.com/allegroai/clearml-server/issues/146)) -* Add UI tables switch to detail mode through double-click ([ClearML Server GitHub issue #134](https://github.com/allegroai/clearml-server/issues/134)) +* Add “Sync comparison” to UI experiment debug samples comparison: Control metric/iteration for all compared experiments ([ClearML GitHub issue #691](https://github.com/clearml/clearml/issues/691)) +* Support serving UI from a non-root path of the ClearML Server ([ClearML Helm Charts issue #101](https://github.com/clearml/clearml-helm-charts/issues/101) and [ClearML Server issue #135](https://github.com/clearml/clearml-server/issues/135)) +* Add UI option for hiding “secret” experiment container arguments ([ClearML Server GitHub issue #146](https://github.com/clearml/clearml-server/issues/146)) +* Add UI tables switch to detail mode through double-click ([ClearML Server GitHub issue #134](https://github.com/clearml/clearml-server/issues/134)) * Add customizable user activity timeout for UI logout * Add UI navigation from experiment comparison back to originating experiment table * Improve UI scalar comparison graph configuration - Persist user's choice for viewing graph data. @@ -15,8 +15,8 @@ title: Version 1.7 * Add dataset description to UI dataset information display **Bug Fixes** -* Fix UI experiment Hyperparameter tab's inefficient use of screen real estate ([ClearML GitHub issue #705](https://github.com/allegroai/clearml/issues/705)) -* Fix navigating to an archived experiment's configuration causes UI to return to non-archived view ([ClearML Server GitHub issue #148](https://github.com/allegroai/clearml-server/issues/148)) +* Fix UI experiment Hyperparameter tab's inefficient use of screen real estate ([ClearML GitHub issue #705](https://github.com/clearml/clearml/issues/705)) +* Fix navigating to an archived experiment's configuration causes UI to return to non-archived view ([ClearML Server GitHub issue #148](https://github.com/clearml/clearml-server/issues/148)) * Fix metric storage failure when large amount of metrics logged * Fix UI plots downloaded as PNGs don't contain legends * Fix UI plot colors can't be changed when colors are specified in code diff --git a/docs/release_notes/clearml_server/open_source/ver_1_8.md b/docs/release_notes/clearml_server/open_source/ver_1_8.md index 83b0194c..cf4db4ce 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_8.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_8.md @@ -5,18 +5,18 @@ title: Version 1.8 ### ClearML Server 1.8.0 **New Features and Improvements** -* Support `/` delimited project names for on-the-fly nested project creation in UI operations ([ClearML Server GitHub issue #151](https://github.com/allegroai/clearml-server/issues/151)) +* Support `/` delimited project names for on-the-fly nested project creation in UI operations ([ClearML Server GitHub issue #151](https://github.com/clearml/clearml-server/issues/151)) * Add keyboard shortcut iteration navigation in full screen view of debug samples and plots -* Add "Don't show again" option for UI notification when archiving tasks ([ClearML Server GitHub issue #149](https://github.com/allegroai/clearml-server/issues/149)) +* Add "Don't show again" option for UI notification when archiving tasks ([ClearML Server GitHub issue #149](https://github.com/clearml/clearml-server/issues/149)) * Add task reset/delete modal automatically closes when no additional information is provided * Add parent project name in UI dataset and pipeline cards * Move UI plot legends to bottom of plot **Bug Fixes** -* Fix task artifacts not deleted from file server when task deleted via UI ([ClearML GitHub issue #801](https://github.com/allegroai/clearml/issues/801)) -* Fix deleting pipeline projects via UI fails ([ClearML GitHub issue #798](https://github.com/allegroai/clearml/issues/798)) -* Fix multiple selection with `Shift` key in UI experiment table not working ([ClearML Server GitHub issue #139](https://github.com/allegroai/clearml-server/issues/139)) -* Fix disappearing user filter in UI "All Experiments" table ([ClearML Web GitHub issue #33](https://github.com/allegroai/clearml-web/issues/33)) +* Fix task artifacts not deleted from file server when task deleted via UI ([ClearML GitHub issue #801](https://github.com/clearml/clearml/issues/801)) +* Fix deleting pipeline projects via UI fails ([ClearML GitHub issue #798](https://github.com/clearml/clearml/issues/798)) +* Fix multiple selection with `Shift` key in UI experiment table not working ([ClearML Server GitHub issue #139](https://github.com/clearml/clearml-server/issues/139)) +* Fix disappearing user filter in UI "All Experiments" table ([ClearML Web GitHub issue #33](https://github.com/clearml/clearml-web/issues/33)) * Fix UI Dashboard missing My Work / Team Work filter * Fix navigating to Scalars and Plots tabs in UI experiment comparison freezes browser * Fix project stats do not exclude dataset and annotation tasks diff --git a/docs/release_notes/clearml_server/open_source/ver_1_9.md b/docs/release_notes/clearml_server/open_source/ver_1_9.md index 07bcb60d..b677d6dd 100644 --- a/docs/release_notes/clearml_server/open_source/ver_1_9.md +++ b/docs/release_notes/clearml_server/open_source/ver_1_9.md @@ -5,8 +5,8 @@ title: Version 1.9 ### ClearML Server 1.9.2 **Bug Fixes** -* Fix "Unable to load image" error in UI experiment debug samples after entering storage credentials ([ClearML Web GitHub issue #46](https://github.com/allegroai/clearml-web/issues/46)) -* Fix incorrect default project name displayed in UI "Clone Experiment" modal ([ClearML Server GitHub issue #171](https://github.com/allegroai/clearml-server/issues/171)) +* Fix "Unable to load image" error in UI experiment debug samples after entering storage credentials ([ClearML Web GitHub issue #46](https://github.com/clearml/clearml-web/issues/46)) +* Fix incorrect default project name displayed in UI "Clone Experiment" modal ([ClearML Server GitHub issue #171](https://github.com/clearml/clearml-server/issues/171)) * Fix UI experiment debug sample viewer iteration slider not working * Fix UI experiment console log jumps backwards unnecessarily on refresh * Fix UI published report is not expandable @@ -20,7 +20,7 @@ title: Version 1.9 * Add in-app markdown guide for UI reports **Bug Fixes** -* Fix can't generate new pipeline runs from UI ([ClearML Server GitHub issue #169](https://github.com/allegroai/clearml-server/issues/169)) +* Fix can't generate new pipeline runs from UI ([ClearML Server GitHub issue #169](https://github.com/clearml/clearml-server/issues/169)) * Fix plot legend texts overlap in UI reports * Fix UI embedded plot colors are sometimes obscure * Fix `ctrl z` doesn't undo codeblocks in UI reports @@ -29,14 +29,14 @@ title: Version 1.9 ### ClearML Server 1.9.0 **New Features and Improvements** -* New ClearML Reports UI: Create and share rich MarkDown documents supporting embeddable online content ([ClearML GitHub issue #839](https://github.com/allegroai/clearml/issues/839)) -* Add user option to not show example content in the UI ([ClearML GitHub issue #774](https://github.com/allegroai/clearml/issues/774)) +* New ClearML Reports UI: Create and share rich MarkDown documents supporting embeddable online content ([ClearML GitHub issue #839](https://github.com/clearml/clearml/issues/839)) +* Add user option to not show example content in the UI ([ClearML GitHub issue #774](https://github.com/clearml/clearml/issues/774)) * Add tag filter to UI Pipeline, Dataset, and Hyper-Dataset pages * Extend UI experiment comparison up to 100 experiments * Allow project default output destination S3 URLs to include dots (`.`) and hyphens (`-`) **Bug Fixes** -* Fix long experiment names break UI experiment comparison scalar plot display ([ClearML GitHub issue #166](https://github.com/allegroai/clearml-server/issues/166)) +* Fix long experiment names break UI experiment comparison scalar plot display ([ClearML GitHub issue #166](https://github.com/clearml/clearml-server/issues/166)) * Fix plot legend definitions set by SDK don't override UI default settings * Fix comparing experiments with read-only components causes error * Fix UI model link doesn't preserve double spaces, breaking the URI diff --git a/docs/release_notes/clearml_server/open_source/ver_2_0.md b/docs/release_notes/clearml_server/open_source/ver_2_0.md index 61cb4415..2ca3a97e 100644 --- a/docs/release_notes/clearml_server/open_source/ver_2_0.md +++ b/docs/release_notes/clearml_server/open_source/ver_2_0.md @@ -10,11 +10,11 @@ MongoDB major version was upgraded from `v5.x` to `6.x`. Please note that if you Upgrading to ClearML Server v1.17 from a previous version: * If using `docker-compose`, use the following files: - * [docker-compose file](https://github.com/allegroai/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose.yml) - * [docker-compose file for Windows](https://github.com/allegroai/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose-win10.yml) + * [docker-compose file](https://github.com/clearml/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose.yml) + * [docker-compose file for Windows](https://github.com/clearml/clearml-server/blob/2976ce69cc91550a3614996e8a8d8cd799af2efd/upgrade/1_17_to_2_0/docker-compose-win10.yml) **New Features** -* New look and feel: Full light/dark themes ([ClearML GitHub issue #1297](https://github.com/allegroai/clearml/issues/1297)) +* New look and feel: Full light/dark themes ([ClearML GitHub issue #1297](https://github.com/clearml/clearml/issues/1297)) * New UI task creation options * Support bash as well as Python scripts * Support file upload @@ -25,6 +25,7 @@ Upgrading to ClearML Server v1.17 from a previous version: **Bug Fixes** * Fix UI Model Endpoint's Number of Requests plot sometimes displays incorrect data +* Fix UI Incorrect project statistics in project page * Fix UI datasets page does not filter according to project when dataset is running * Fix UI task scalar legend does not change colors when smoothing is enabled * Fix queue list in UI Workers and Queues page does not alphabetically sort by queue display name diff --git a/docs/release_notes/clearml_serving/ver_1_1.md b/docs/release_notes/clearml_serving/ver_1_1.md index 77617284..6dd598d1 100644 --- a/docs/release_notes/clearml_serving/ver_1_1.md +++ b/docs/release_notes/clearml_serving/ver_1_1.md @@ -5,7 +5,7 @@ title: Version 1.1 ### ClearML Serving 1.1.0 :::warning Backwards Compatibility -This release is not backwards compatible - see notes below on upgrading +This release is not backwards compatible. See `Upgrading from v1.0` note below. ::: **Breaking Changes** @@ -17,4 +17,30 @@ This release is not backwards compatible - see notes below on upgrading * Triton engine support for variable request (matrix) sizes * Triton support, fix `--aux-config` to support more configurations elements * Hugging Face Transformer support -* `Preprocess` class as module \ No newline at end of file +* `Preprocess` class as module (see `Preprocess Class` note below) + +:::note Upgrading from v1.0 +1. Take down the serving containers (docker-compose or k8s) +1. Update the clearml-serving CLI: `pip3 install -U clearml-serving` +1. Re-add a single existing endpoint: `clearml-serving model add ...` (press `yes` when asked). This will upgrade the +clearml-serving session definitions +1. Pull latest serving containers (`docker-compose pull ...` or k8s) +1. Re-spin serving containers (docker-compose or k8s) +::: + +:::note Preprocess Class +You can now add a `Preprocess` class from a module. The entire module folder will be packaged. + +``` +preprocess_folder +├── __init__.py # from .sub.some_file import Preprocess +└── sub + └── some_file.py +``` + +Pass the top-level folder path using `--preprocess`. For example: + +``` +clearml-serving --id model add --preprocess /path/to/preprocess_folder ... +``` +::: \ No newline at end of file diff --git a/docs/release_notes/clearml_serving/ver_1_2.md b/docs/release_notes/clearml_serving/ver_1_2.md index 0601e69d..2390462d 100644 --- a/docs/release_notes/clearml_serving/ver_1_2.md +++ b/docs/release_notes/clearml_serving/ver_1_2.md @@ -8,7 +8,7 @@ title: Version 1.2 * Improve GPU Performance, 50%-300% improvement over vanilla Triton * Improve performance on CPU, optimize uvloop + multi-processing * Add Hugging Face Transformer example -* Add binary input support ([ClearML Serving PR #37](https://github.com/allegroai/clearml-serving/pull/37) ) +* Add binary input support ([ClearML Serving PR #37](https://github.com/clearml/clearml-serving/pull/37) ) **Bug Fix** * stdout/stderr in inference service not logging to dedicated Task diff --git a/docs/release_notes/clearml_serving/ver_1_3.md b/docs/release_notes/clearml_serving/ver_1_3.md index 5a70b818..5f915a38 100644 --- a/docs/release_notes/clearml_serving/ver_1_3.md +++ b/docs/release_notes/clearml_serving/ver_1_3.md @@ -4,9 +4,9 @@ title: Version 1.3 ### ClearML Serving 1.3.1 **New Features and Bug Fixes** -* Add missing `await` ([ClearML Serving GitHub PR #55](https://github.com/allegroai/clearml-serving/pull/55)) -* Add traceback for failing to load `preprocess` class ([ClearML Serving GitHub issue #57](https://github.com/allegroai/clearml-serving/issues/57)) -* Fix Triton `config.pbtxt` for missing values or colliding specifications ([ClearML Serving GitHub issue #62](https://github.com/allegroai/clearml-serving/issues/62)) +* Add missing `await` ([ClearML Serving GitHub PR #55](https://github.com/clearml/clearml-serving/pull/55)) +* Add traceback for failing to load `preprocess` class ([ClearML Serving GitHub issue #57](https://github.com/clearml/clearml-serving/issues/57)) +* Fix Triton `config.pbtxt` for missing values or colliding specifications ([ClearML Serving GitHub issue #62](https://github.com/clearml/clearml-serving/issues/62)) * Add safer code for pulling from Kafka * Add `str` type to Triton type conversion * Fix ignore auto-detected platform when passing `config.pbtxt` with platform entry @@ -18,10 +18,10 @@ title: Version 1.3 ### ClearML Serving 1.3.0 **New Features and Improvements** * 20% Overall performance increase -* gRPC channel configuration ([ClearML Serving GitHub issue #49](https://github.com/allegroai/clearml-serving/issues/49)) +* gRPC channel configuration ([ClearML Serving GitHub issue #49](https://github.com/clearml/clearml-serving/issues/49)) * Hugging Face Transformer example **Bug fixes** -* Fix NumPy compatibility ([ClearML Serving GitHub issue #47](https://github.com/allegroai/clearml-serving/issues/47) and [#46](https://github.com/allegroai/clearml-serving/issues/46)) -* Fix Triton examples ([ClearML Serving GitHub issue #48](https://github.com/allegroai/clearml-serving/issues/48)) -* Add storage environment variables ([ClearML Serving GitHub PR #45](https://github.com/allegroai/clearml-serving/pull/45)) \ No newline at end of file +* Fix NumPy compatibility ([ClearML Serving GitHub issue #47](https://github.com/clearml/clearml-serving/issues/47) and [#46](https://github.com/clearml/clearml-serving/issues/46)) +* Fix Triton examples ([ClearML Serving GitHub issue #48](https://github.com/clearml/clearml-serving/issues/48)) +* Add storage environment variables ([ClearML Serving GitHub PR #45](https://github.com/clearml/clearml-serving/pull/45)) \ No newline at end of file diff --git a/docs/release_notes/sdk/open_source/ver_0_10.md b/docs/release_notes/sdk/open_source/ver_0_10.md index 32809517..2f6662ce 100644 --- a/docs/release_notes/sdk/open_source/ver_0_10.md +++ b/docs/release_notes/sdk/open_source/ver_0_10.md @@ -65,12 +65,12 @@ title: Version 0.10 **Features and Bug Fixes** -* Add scikit-learn support (load/store using joblib) ([GitHub Issue #20](https://github.com/allegroai/trains/issues/20)). -* Add xgboost support ([GitHub Issue #10](https://github.com/allegroai/trains/issues/10)). -* Add loguru support ([GitHub Issue #29](https://github.com/allegroai/trains/issues/29)). -* Add sub-domain support [trains.conf](https://github.com/allegroai/trains/blob/master/docs/trains.conf#L3) ([GitHub Issue #27](https://github.com/allegroai/trains/issues/27)). +* Add scikit-learn support (load/store using joblib) ([GitHub Issue #20](https://github.com/clearml/clearml/issues/20)). +* Add xgboost support ([GitHub Issue #10](https://github.com/clearml/clearml/issues/10)). +* Add loguru support ([GitHub Issue #29](https://github.com/clearml/clearml/issues/29)). +* Add sub-domain support [trains.conf](https://github.com/clearml/clearml/blob/master/docs/trains.conf#L3) ([GitHub Issue #27](https://github.com/clearml/clearml/issues/27)). * Fix sub-process support. -* Fix multiple TensorBoard writers ([GitHub Issue #26](https://github.com/allegroai/trains/issues/26)). +* Fix multiple TensorBoard writers ([GitHub Issue #26](https://github.com/clearml/clearml/issues/26)). ### Trains 0.10.2 @@ -78,7 +78,7 @@ title: Version 0.10 * Add Matplotlib SVG support. * Add Seaborn support. -* Add `TRAINS_LOG_ENVIRONMENT` environment logging ([GitHub trains Issue 17](https://github.com/allegroai/trains/issues/17#issuecomment-507398767)). +* Add `TRAINS_LOG_ENVIRONMENT` environment logging ([GitHub trains Issue 17](https://github.com/clearml/clearml/issues/17#issuecomment-507398767)). * Add Microsoft Azure notebook support. * Add Google Colab support. * Fix TensorBoard RGB channel order. @@ -106,7 +106,7 @@ title: Version 0.10 ``` pip install gpustat ``` -* Automatically stop inactive experiments (default: 2 hours) +* Automatically stop inactive tasks (default: 2 hours) * Improve visibility * Finer status definitions: Identify successful completion vs. user aborted. * Experiment plot comparison: Ensure different colors for different experiments. diff --git a/docs/release_notes/sdk/open_source/ver_0_11.md b/docs/release_notes/sdk/open_source/ver_0_11.md index 648b9aa2..38934471 100644 --- a/docs/release_notes/sdk/open_source/ver_0_11.md +++ b/docs/release_notes/sdk/open_source/ver_0_11.md @@ -12,7 +12,7 @@ title: Version 0.11 **Features and Bug Fixes** * Resource-Monitor will only monitor active GPU devices based on environment variables: `NVIDIA_VISIBLE_DEVICES` or `CUDA_VISIBLE_DEVICES`. -* Fix issue ([GitHub Issue #48](https://github.com/allegroai/trains/issues/48)). +* Fix issue ([GitHub Issue #48](https://github.com/clearml/clearml/issues/48)). ### Trains 0.11.2 @@ -41,7 +41,7 @@ title: Version 0.11 **Features and Bug Fixes** * Full artifacts support (supported by trains-server >= 0.11.0). -* Artifacts include, Pandas.DataFrame, Numpy, PIL Image, local files, and local folder / wildcard ([example](https://github.com/allegroai/trains/blob/master/examples/reporting/artifacts.py)). +* Artifacts include, Pandas.DataFrame, Numpy, PIL Image, local files, and local folder / wildcard ([example](https://github.com/clearml/clearml/blob/master/examples/reporting/artifacts.py)). * Artifacts support for folder / wildcard, selected files will be zipped and uploaded. * Resource monitoring, remove sensor reading failure warnings. diff --git a/docs/release_notes/sdk/open_source/ver_0_12.md b/docs/release_notes/sdk/open_source/ver_0_12.md index 7dd0442b..4d8be1fa 100644 --- a/docs/release_notes/sdk/open_source/ver_0_12.md +++ b/docs/release_notes/sdk/open_source/ver_0_12.md @@ -10,11 +10,11 @@ title: Version 0.12 **Features and Bug Fixes** -* Add `default_output_uri` feature ([GitHub Issue #57](https://github.com/allegroai/trains/issues/57)). +* Add `default_output_uri` feature ([GitHub Issue #57](https://github.com/clearml/clearml/issues/57)). * Improve `trains-init` configuration wizard. * Improve argparser binding. -* Fix artifact support in data pipeline ([GitHub Issue #63](https://github.com/allegroai/trains/issues/63)). -* Fix threading issue while querying multiple experiments ([GitHub Issue #64](https://github.com/allegroai/trains/issues/64)). +* Fix artifact support in data pipeline ([GitHub Issue #63](https://github.com/clearml/clearml/issues/63)). +* Fix threading issue while querying multiple experiments ([GitHub Issue #64](https://github.com/clearml/clearml/issues/64)). * Fix uploading large files over slow HTTP connections. * Fix support for Git versions < 2. @@ -29,15 +29,15 @@ Do not reuse an experiment with artifacts. * Add `Task.connect_configuration`, connect configuration file (or configuration dictionary including nesting support). * Add `Task.connect_label_enumeration`, store model detection classes together with the model and experiment. -* Edit and override configuration file (or dictionary) content when executing with [trains-agent](https://github.com/allegroai/trains-agent). +* Edit and override configuration file (or dictionary) content when executing with [trains-agent](https://github.com/clearml/clearml-agent). * `Task.connect` automatically supports nested dictionaries (e.g. param / nested / key), including overriding values when - running with [trains-agent](https://github.com/allegroai/trains-agent). + running with [trains-agent](https://github.com/clearml/clearml-agent). * Add `Artifact.get`, download and load an artifact. * Add `Task.get_tasks`, retrieve previous experiments, get metrics, rename, and other uses. * Improve Windows support. * Improve Minio support. * Fix Python2 support. -* Fix Issue ([GitHub Issue #56](https://github.com/allegroai/trains/issues/56)). +* Fix Issue ([GitHub Issue #56](https://github.com/clearml/clearml/issues/56)). ### Trains 0.12.0 @@ -45,7 +45,7 @@ Do not reuse an experiment with artifacts. **Features and Bug Fixes** * TRAINS Agent support (Full DevOps support). -* Add automation and orchestration ([examples/automation](https://github.com/allegroai/trains/tree/master/examples/automation)). +* Add automation and orchestration ([examples/automation](https://github.com/clearml/clearml/tree/master/examples/automation)). Supports TRAINS-server v0.12 or above. * Add Logger x/y/z axis title for: report_surface / report_confusion_matrix / report_scatter3d / report_scatter2d / report_histogram. * Add support for TensorFlow 2.0. diff --git a/docs/release_notes/sdk/open_source/ver_0_13.md b/docs/release_notes/sdk/open_source/ver_0_13.md index e831be9d..88a00e35 100644 --- a/docs/release_notes/sdk/open_source/ver_0_13.md +++ b/docs/release_notes/sdk/open_source/ver_0_13.md @@ -47,7 +47,7 @@ title: Version 0.13 * Add support for SageMaker. * Improve configuration wizard. * Try to make sure TensorBoard is available when using torch. -* Do not store keras model network design if it cannot be serialized ([GitHub Issue #72](https://github.com/allegroai/trains/issues/72)). +* Do not store keras model network design if it cannot be serialized ([GitHub Issue #72](https://github.com/clearml/clearml/issues/72)). * Fix matplotlib binding support. @@ -55,21 +55,21 @@ title: Version 0.13 **Features and Bug Fixes** -* Add support for [trains-server](https://github.com/allegroai/trains-server) v0.13.0. +* Add support for [trains-server](https://github.com/clearml/clearml-server) v0.13.0. * Add support for nested (non-main) tasks. * Add warning when automatic argument parser binding cannot be turned off. * Add `Task.upload_artifact` support for external URLs (pre-uploaded). -* Add support for special characters in hyperparameter keys (white-spaces, `.` and `$`) ([GitHub Issue #69](https://github.com/allegroai/trains/issues/69)). +* Add support for special characters in hyperparameter keys (white-spaces, `.` and `$`) ([GitHub Issue #69](https://github.com/clearml/clearml/issues/69)). * Add support for PyTorch `.pt` model files. -* Calculate data-audit artifact uniqueness by user-criteria ([GitHub Issue #45](https://github.com/allegroai/trains/issues/45)). -* Use an environment variable for setting a default docker image ([GitHub Issue #58](https://github.com/allegroai/trains/issues/58)). +* Calculate data-audit artifact uniqueness by user-criteria ([GitHub Issue #45](https://github.com/clearml/clearml/issues/45)). +* Use an environment variable for setting a default docker image ([GitHub Issue #58](https://github.com/clearml/clearml/issues/58)). * Improve `trains-init` configuration wizard. * Update examples for new joblib versions. * Update jupyter example to TensorFlow 2. * Fix task clone to copy only input artifacts. * Fix matplotlib import binding when using `Agg` backend. -* Fix `ProxyDictPreWrite` and `ProxyDictPostWrite` so they can be pickled correctly ([GitHub Issue #72](https://github.com/allegroai/trains/issues/72)). +* Fix `ProxyDictPreWrite` and `ProxyDictPostWrite` so they can be pickled correctly ([GitHub Issue #72](https://github.com/clearml/clearml/issues/72)). * Fix requests issue in Python 2.7 that can cause a deadlock when importing netrc. -* Fix argparser binding sub-parser and type casting support ([GitHub Issue #74](https://github.com/allegroai/trains/issues/74)). +* Fix argparser binding sub-parser and type casting support ([GitHub Issue #74](https://github.com/clearml/clearml/issues/74)). * Fix argparser binding Python 2.7 unicode handling. * Fix unsynced connected hyperparameters overridden during remote execution. diff --git a/docs/release_notes/sdk/open_source/ver_0_14.md b/docs/release_notes/sdk/open_source/ver_0_14.md index 8ac6796c..e03f6916 100644 --- a/docs/release_notes/sdk/open_source/ver_0_14.md +++ b/docs/release_notes/sdk/open_source/ver_0_14.md @@ -15,7 +15,7 @@ title: Version 0.14 * Add the `Logger.report_histogram` method `mode` parameter. The values are `group` (the default), `stack`, and `relative`. * Add [PEP610](https://www.python.org/dev/peps/pep-0610/) support for the new `pip` version 20.1 and newer Git reference - feature (see [pypa/pip#609](https://github.com/pypa/pip/issues/609)) ([GitHub Issue #62](https://github.com/allegroai/trains/issues/62)). + feature (see [pypa/pip#609](https://github.com/pypa/pip/issues/609)) ([GitHub Issue #62](https://github.com/clearml/clearml/issues/62)). * Improve support for PyTorch Ignite integration. * Support `#` and `?` in uploaded image file names. @@ -29,8 +29,8 @@ title: Version 0.14 ### Trains 0.14.2 **Features** -* Add media (audio) support for both `Logger` and TensorBoard binding using `Logger.report_media` ([GitHub Issue #120](https://github.com/allegroai/trains/issues/120)). -* Add [autokeras example](https://github.com/allegroai/trains/blob/master/examples/frameworks/autokeras/autokeras_imdb_example.py) ([GitHub Issue #125](https://github.com/allegroai/trains/issues/125)). +* Add media (audio) support for both `Logger` and TensorBoard binding using `Logger.report_media` ([GitHub Issue #120](https://github.com/clearml/clearml/issues/120)). +* Add [autokeras example](https://github.com/clearml/clearml/blob/master/examples/frameworks/autokeras/autokeras_imdb_example.py) ([GitHub Issue #125](https://github.com/clearml/clearml/issues/125)). * Add caching of extracted zip artifacts. * Add `Task.get_tasks` filtering support. * Add `trains.storage.StorageManager`. @@ -50,7 +50,7 @@ title: Version 0.14 **Bug Fixes** -* Fix renaming / deleting model file right after saving will break asynchronous upload ([GitHub Issue #123](https://github.com/allegroai/trains/issues/123)). +* Fix renaming / deleting model file right after saving will break asynchronous upload ([GitHub Issue #123](https://github.com/clearml/clearml/issues/123)). * Fix shutdown behavior: * Logger flush delay and termination. * Repository / package detection termination. @@ -69,10 +69,10 @@ title: Version 0.14 * Add OpenMPI / Slurm support, support `TRAINS_FORCE_MASTER_NODE` environment variable to allow forcefully specifying a node is master (not based on the MPI Rank). * Add `Task.get_models` and `Task.models` for retrieving stored models for previously executed tasks -* Support multiple EventWriter in TensorFlow eager mode (TF 2.0+) ([GitHub Issue #26](https://github.com/allegroai/trains/issues/26)). +* Support multiple EventWriter in TensorFlow eager mode (TF 2.0+) ([GitHub Issue #26](https://github.com/clearml/clearml/issues/26)). * Support reusing models. * Fix TensorFlow not a number (`NaN`) and infinity (`Inf`) -values support ([GitHub Issue #118](https://github.com/allegroai/trains/issues/118)). +values support ([GitHub Issue #118](https://github.com/clearml/clearml/issues/118)). * Fix joblib binding. * Fix metrics / files / models upload on shutdown. * Fix support for Task init / close multiple times. @@ -86,8 +86,8 @@ values support ([GitHub Issue #118](https://github.com/allegroai/trains/issues/1 * Add support for reporting tables (pandas.DataFrame, CSV files, URL to CSV file) using the `Logger.report_table` method. * Add support for setting a Task's initial iteration to allow continuing previous runs using the `Task.set_initial_iteration` and `Task.get_initial_iteration` methods. -* Add multiprocess task support ([GitHub Issue #96](https://github.com/allegroai/trains/issues/96)). -* Add `trains-init` support for config file override using the `TRAINS_CONFIG_FILE` environment variable or `--file` command line argument ([GitHub Issue #105](https://github.com/allegroai/trains/issues/105)). +* Add multiprocess task support ([GitHub Issue #96](https://github.com/clearml/clearml/issues/96)). +* Add `trains-init` support for config file override using the `TRAINS_CONFIG_FILE` environment variable or `--file` command line argument ([GitHub Issue #105](https://github.com/clearml/clearml/issues/105)). * Add initial slurm support. * Allow disabling repository detection when calling `Task.init`. * Add Jupyter Notebook server execution example. diff --git a/docs/release_notes/sdk/open_source/ver_0_15.md b/docs/release_notes/sdk/open_source/ver_0_15.md index ade4a8f5..8e825506 100644 --- a/docs/release_notes/sdk/open_source/ver_0_15.md +++ b/docs/release_notes/sdk/open_source/ver_0_15.md @@ -11,10 +11,10 @@ title: Version 0.15 **Features** -* Add direct plotly figure reporting ([GitHub Issue #136](https://github.com/allegroai/trains/issues/136)). -* Improve matplotlib integration ([GitHub Issue #140](https://github.com/allegroai/trains/issues/140)). -* Add `Task.set_parent` ([GitHub Issue #144](https://github.com/allegroai/trains/issues/144)). -* Add `Task.wait_for_status` ([GitHub Issue #145](https://github.com/allegroai/trains/issues/145)). +* Add direct plotly figure reporting ([GitHub Issue #136](https://github.com/clearml/clearml/issues/136)). +* Improve matplotlib integration ([GitHub Issue #140](https://github.com/clearml/clearml/issues/140)). +* Add `Task.set_parent` ([GitHub Issue #144](https://github.com/clearml/clearml/issues/144)). +* Add `Task.wait_for_status` ([GitHub Issue #145](https://github.com/clearml/clearml/issues/145)). * Enhance framework `save` / `load` binding callbacks ([pytorch/ignite Issue #1056](https://github.com/pytorch/ignite/issues/1056)). * Add `TrainsJob.is_failed`. * Add APIClient support using `trains.backend_api.session.APIClient`. @@ -23,10 +23,10 @@ title: Version 0.15 **Bug Fixes** -* Fix `pytorch_tensorboard.py` example ([GitHub Issue #148](https://github.com/allegroai/trains/issues/148)). -* Fix `ssh://user@domain@server.com/` in Git repository ([GitHub Issue #149](https://github.com/allegroai/trains/issues/149)). +* Fix `pytorch_tensorboard.py` example ([GitHub Issue #148](https://github.com/clearml/clearml/issues/148)). +* Fix `ssh://user@domain@server.com/` in Git repository ([GitHub Issue #149](https://github.com/clearml/clearml/issues/149)). * Fix do not call `make_deterministic` on import. -* Fix initialization wizard (allow at most two verification retries, then print error) ([GitHub trains-agent Issue #16](https://github.com/allegroai/trains-agent/issues/16)). +* Fix initialization wizard (allow at most two verification retries, then print error) ([GitHub trains-agent Issue #16](https://github.com/clearml/clearml-agent/issues/16)). * Fix Google CoLab code / package detection. * Improve pytorch-ignite integration. * Fix TensorFlow version 2 and later histogram binding. @@ -39,17 +39,17 @@ title: Version 0.15 **Features** -* Add automation support including hyperparameter optimization (see example [here](https://github.com/allegroai/clearml/blob/master/examples/optimization/hyper-parameter-optimization/hyper_parameter_optimizer.py)) +* Add automation support including hyperparameter optimization (see example [here](https://github.com/clearml/clearml/blob/master/examples/optimization/hyper-parameter-optimization/hyper_parameter_optimizer.py)) * `Task.init` `auto_connect_arg_parser` argument can accept a dictionary disabling specific keys from the argparser (Trains Slack channel [thread](https://clearml.slack.com/archives/CTK20V944/p1589355878206700)) * Allow `worker_id` override using `TRAINS_WORKER_NAME` environment variable (Trains Slack channel [thread](https://clearml.slack.com/archives/CTK20V944/p1589920581251600?thread_ts=1589920220.250100&cid=CTK20V944)) -* Support layout configuration for plotly objects using `extra_layout` argument in all `Logger` reporting methods ([GitHub Issue #136](https://github.com/allegroai/trains/issues/136)). -* Add `Task.execute_remotely` to allow cloning and enqueuing a locally executed task (or stopping and re-enqueuing a remotely executed task) ([GitHub Issue #128](https://github.com/allegroai/trains/issues/128)). +* Support layout configuration for plotly objects using `extra_layout` argument in all `Logger` reporting methods ([GitHub Issue #136](https://github.com/clearml/clearml/issues/136)). +* Add `Task.execute_remotely` to allow cloning and enqueuing a locally executed task (or stopping and re-enqueuing a remotely executed task) ([GitHub Issue #128](https://github.com/clearml/clearml/issues/128)). * Add Parquet framework and model type. * Support recursive model folder packaging. * Add `Task.get_reported_console_output` and `Task.get_reported_scalars` to allow retrieval of reported output and scalar metrics. * Add `Task.add_requirements` to force requirement package into "installed packages." * Improve task reuse responsiveness. -* Add `raise_on_error` (default False) argument to `Model.get_local_copy` and `Artifact.get_local_copy` ([GitHub trains-agent Issue #17](https://github.com/allegroai/trains-agent/issues/17)). +* Add `raise_on_error` (default False) argument to `Model.get_local_copy` and `Artifact.get_local_copy` ([GitHub trains-agent Issue #17](https://github.com/clearml/clearml-agent/issues/17)). * Support `Task.get_task` without project name (i.e. all projects) * Support using the file calling `Task.init` as the task's script in case sys.argv doesn't point to a git repository * Support detecting and remotely executing code running from a module (i.e. `-m module`) @@ -60,8 +60,8 @@ title: Version 0.15 **Bug Fixes** -* Fix `exact_match_regex` in case of empty pattern ([GitHub Issue #138](https://github.com/allegroai/trains/issues/138)). -* Address deprecation warning and newer `attrs` versions in MetricsEventAdapter ([GitHub Issue #134](https://github.com/allegroai/trains/issues/134)). +* Fix `exact_match_regex` in case of empty pattern ([GitHub Issue #138](https://github.com/clearml/clearml/issues/138)). +* Address deprecation warning and newer `attrs` versions in MetricsEventAdapter ([GitHub Issue #134](https://github.com/clearml/clearml/issues/134)). * Fix issues with plotly support (Trains Slack channel [thread](https://clearml.slack.com/archives/CTK20V944/p1589871253243600) and [thread](https://clearml.slack.com/archives/CTK20V944/p1589279340195000)). * Fix default argument behavior to match argparse behavior. * Fix `OutputModel` with `task=None` should use current task, if exists. @@ -70,5 +70,5 @@ title: Version 0.15 * Fix `NaN`, `Inf` and `-Inf` values display in reported table (not supported by JSON). * Limit max requirement size to 0.5 MB. * Fix issues with repository analysis. -* Fix `StorageManager` so it should only try to extract .zip files, `Model` should not auto extract package ([GitHub trains-agent Issue #17](https://github.com/allegroai/trains-agent/issues/17)). +* Fix `StorageManager` so it should only try to extract .zip files, `Model` should not auto extract package ([GitHub trains-agent Issue #17](https://github.com/clearml/clearml-agent/issues/17)). diff --git a/docs/release_notes/sdk/open_source/ver_0_16.md b/docs/release_notes/sdk/open_source/ver_0_16.md index 18c0c34f..20a8a7e0 100644 --- a/docs/release_notes/sdk/open_source/ver_0_16.md +++ b/docs/release_notes/sdk/open_source/ver_0_16.md @@ -10,13 +10,13 @@ title: Version 0.16 **Features** -- Add Hydra support (GitHub trains Issue 219). -- Add cifar ignite example (GitHub trains Issue 237). -- Add auto extraction of `tar.gz` files when using `StorageManager` (GitHub trains Issue 237). -- Add `Task.init()` argument `auto_connect_streams` controlling stdout / stderr / logging capture (GitHub trains Issue 181). -- Add carriage return flush support using the `sdk.development.worker.console_cr_flush_period` configuration setting (GitHub trains Issue 181). -- Add `Task.create_function_task()` to allow creating a new task, using a function and arguments, to be executed remotely (GitHub trains Issue 230). -- Allow disabling SSL certificates verification using `Task.setup_upload()` argument `verify` or AWS S3 bucket configuration `verify` property (GitHub trains Issue 256). +- Add Hydra support (GitHub trains Issue 219). +- Add cifar ignite example (GitHub trains Issue 237). +- Add auto extraction of `tar.gz` files when using `StorageManager` (GitHub trains Issue 237). +- Add `Task.init()` argument `auto_connect_streams` controlling stdout / stderr / logging capture (GitHub trains Issue 181). +- Add carriage return flush support using the `sdk.development.worker.console_cr_flush_period` configuration setting (GitHub trains Issue 181). +- Add `Task.create_function_task()` to allow creating a new task, using a function and arguments, to be executed remotely (GitHub trains Issue 230). +- Allow disabling SSL certificates verification using `Task.setup_upload()` argument `verify` or AWS S3 bucket configuration `verify` property (GitHub trains Issue 256). - Add `StorageManager.get_files_server()`. - Add `Task.get_project_id()` using project name. - Add `project_name` argument to `Task.set_project()`. @@ -28,13 +28,13 @@ title: Version 0.16 **Bug Fixes** -- Fix Optuna HPO parameter serializing (GitHub trains Issue 254). -- Fix connect dictionary `''` cast to `None` (GitHub trains Issue 258). -- Fix lightgbm binding keyword argument issue (GitHub trains Issue 251). -- Fix artifact preview if artifact body is remote URI (GitHub trains Issue 239). -- Fix infinite recursion in `StorageManager` upload (GitHub trains Issue 253). -- Fix keras reusing model object only if the filename is the same (GitHub trains Issue 252). -- Fix running remotely with no configuration should not crash but output a warning (GitHub trains Issue 243). +- Fix Optuna HPO parameter serializing (GitHub trains Issue 254). +- Fix connect dictionary `''` cast to `None` (GitHub trains Issue 258). +- Fix lightgbm binding keyword argument issue (GitHub trains Issue 251). +- Fix artifact preview if artifact body is remote URI (GitHub trains Issue 239). +- Fix infinite recursion in `StorageManager` upload (GitHub trains Issue 253). +- Fix keras reusing model object only if the filename is the same (GitHub trains Issue 252). +- Fix running remotely with no configuration should not crash but output a warning (GitHub trains Issue 243). - Fix matplotlib 3.3.3 support: - Fix global figure enumeration. - Fix binding without a title reported a single plot (`untitled 00`) instead of increasing the counter. @@ -59,9 +59,9 @@ title: Version 0.16 **Features** * Add LightGBM support. -* Add initial Hydra support (GitHub trains Issue 219). -* Add synchronous support for `Task.upload_artifact()` (GitHub trains Issue 231). -* Add `sdk.development.store_code_diff_from_remote` (default `false`) to store diff from remote HEAD instead of local HEAD (GitHub trains Issue 222). +* Add initial Hydra support (GitHub trains Issue 219). +* Add synchronous support for `Task.upload_artifact()` (GitHub trains Issue 231). +* Add `sdk.development.store_code_diff_from_remote` (default `false`) to store diff from remote HEAD instead of local HEAD (GitHub trains Issue 222). * Add `sdk.development.detect_with_conda_freeze` (default `true`) for full conda freeze (requires trains-agent >= 16.2). * Add user properties support in Task object. * Add `Logger.report_table()` support for table as list of lists. @@ -78,7 +78,7 @@ title: Version 0.16 **Bug Fixes** -* Fix `Task.update_output_model()` wrong argument order (GitHub trains Issue 220). +* Fix `Task.update_output_model()` wrong argument order (GitHub trains Issue 220). * Fix initializing task on argparse parse in remote mode. Do not call `Task.init()` to avoid auto connect, use `Task.get_task()` instead. * Fix detected task cwd outside of repository root folder. * Fix `Task.connect(dict)` to place non-existing entries on the section name instead of General. @@ -99,24 +99,24 @@ title: Version 0.16 **Features** -* Add `Task.set_resource_monitor_iteration_timeout()` to set ResourceMonitor iteration wait duration timeout (GitHub trains Issue 208). -* Add PyTorch Lightning save/restore model binding (GitHub trains Issue 212). +* Add `Task.set_resource_monitor_iteration_timeout()` to set ResourceMonitor iteration wait duration timeout (GitHub trains Issue 208). +* Add PyTorch Lightning save/restore model binding (GitHub trains Issue 212). * Add `git diff` for repository submodule (requires git 2.14 or above). * Add `TrainsJob.is_completed()` and `TrainsJob.is_aborted()`. * Add `Task.logger` property. -* Add Pipeline Controller automation and example (see [here](https://github.com/allegroai/clearml/blob/master/examples/pipeline/pipeline_from_tasks.py)). +* Add Pipeline Controller automation and example (see [here](https://github.com/clearml/clearml/blob/master/examples/pipeline/pipeline_from_tasks.py)). * Add improved trace filtering capabilities in `trains.debugging.trace.trace_trains()`. * Add default help per argument (if not provided) in ArgParser binding. * Deprecate `Task.reporter`. * Update PyTorch example. -* Remove warning on skipped auto-magic model logging (GitHub trains Issue 206). +* Remove warning on skipped auto-magic model logging (GitHub trains Issue 206). * Support Keras restructuring for Network, Model and Sequential. * Update autokeras requirements according to [https://github.com/keras-team/autokeras#installation](https://github.com/keras-team/autokeras#installation). **Bug Fixes** -* Fix joblib auto logging models failing on compressed streams (GitHub trains Issue 203). -* Fix sending empty reports (GitHub trains Issue 205). +* Fix joblib auto logging models failing on compressed streams (GitHub trains Issue 203). +* Fix sending empty reports (GitHub trains Issue 205). * Fix scatter2d sub-sampling and rounding. * Fix plots reporting: * `NaN` representation (matplotlib conversion). @@ -142,12 +142,12 @@ title: Version 0.16 **Bug Fixes** -* Fix typing dependency for `Python<3.5` ([GitHub trains Issue 184](https://github.com/allegroai/trains/issues/184)). +* Fix typing dependency for `Python<3.5` ([GitHub trains Issue 184](https://github.com/clearml/clearml/issues/184)). * Fix git+https requirements handling, resolve top_level.txt package name (kerastuner from git was not detected). * Fix `Task.get_reported_console_output()` for new Trains Server API v2.9. * Fix cache handling for different partitions / drives / devices. * Disable offline mode when running remotely (i.e. executed by Trains Agent). -* Fix artifact upload to only use file stream when not uploading a locally stored file (multipart upload is not supported on stream upload) (GitHub trains Issue 189). +* Fix artifact upload to only use file stream when not uploading a locally stored file (multipart upload is not supported on stream upload) (GitHub trains Issue 189). * Fix double-escaped model design text when connecting OutputModel. @@ -155,12 +155,12 @@ title: Version 0.16 **Features** -* Add continuing of previously executed experiments. Add `Task.init()` argument `continue_last_task` to continue a previously used Task ([GitHub Issue #160](https://github.com/allegroai/trains/issues/160)). -* Allow Task editing / creation from code. `Task.export_task/import_task/update_task()` ([GitHub Issue #128](https://github.com/allegroai/trains/issues/128)). +* Add continuing of previously executed experiments. Add `Task.init()` argument `continue_last_task` to continue a previously used Task ([GitHub Issue #160](https://github.com/clearml/clearml/issues/160)). +* Allow Task editing / creation from code. `Task.export_task/import_task/update_task()` ([GitHub Issue #128](https://github.com/clearml/clearml/issues/128)). * Add offline mode. Use `Task.set_offline()` and `Task.import_offline_session()`: * Support setting offline mode via `TRAINS_OFFLINE_MODE=1` environment variable. * Support setting offline API version via `TRAINS_OFFLINE_MODE=2.9` environment variable. -* Automatically pickle all objects uploaded as artifacts, `task.upload_artifact()` argument `auto_pickle=True` ([GitHub Issue #153](https://github.com/allegroai/trains/issues/153)). +* Automatically pickle all objects uploaded as artifacts, `task.upload_artifact()` argument `auto_pickle=True` ([GitHub Issue #153](https://github.com/clearml/clearml/issues/153)). * Add multiple sections / groups support for Task hyperparameters, using `Task.connect()`. * Add multiple configurations (files) using `Task.connect_configuration()`. * Allow enabling OS environment logging using the `sdk.development.log_os_environments` configuration parameter (complements the `TRAINS_LOG_ENVIRONMENT` environment variable). @@ -168,25 +168,25 @@ title: Version 0.16 * Add initial Keras-Tuner support ([GitHub Issue keras-team/keras-tuner #334](https://github.com/keras-team/keras-tuner/issues/334)). * Add automatic FastAI logging. It is disabled if Tensorboard is loaded (assuming TensorBoardLogger will be used). * Support Tensorboard text logging (`add_text()`) as debug samples (`.txt` files), instead of as console output. -* Allow for more standard confusion matrix reporting. `Logger.report_confusion_matrix()` argument `yaxis_reversed` (flips the confusion matrix if `True`, default `False`) ([GitHub Issue #165](https://github.com/allegroai/trains/issues/165)). +* Allow for more standard confusion matrix reporting. `Logger.report_confusion_matrix()` argument `yaxis_reversed` (flips the confusion matrix if `True`, default `False`) ([GitHub Issue #165](https://github.com/clearml/clearml/issues/165)). * Add support for Trains Server 0.16.0 (API v2.9 support). -* Allow disabling Trains update message from the log using the `TRAINS_SUPPRESS_UPDATE_MESSAGE` environment variable ([GitHub Issue #157](https://github.com/allegroai/trains/issues/157)). +* Allow disabling Trains update message from the log using the `TRAINS_SUPPRESS_UPDATE_MESSAGE` environment variable ([GitHub Issue #157](https://github.com/clearml/clearml/issues/157)). * Add AWS EC2 Auto-Scaler service wizard and Service. * Improved and updated examples: * Add Keras Tuner CIFAR10 example. * Add FastAI example. - * Update PyTorch Jupyter notebook examples ([GitHub Issue #150](https://github.com/allegroai/trains/issues/150)). + * Update PyTorch Jupyter notebook examples ([GitHub Issue #150](https://github.com/clearml/clearml/issues/150)). * Support global requirements detection using `pip freeze` (set `sdk.development.detect_with_pip_freeze` configuration in `trains.conf`). * Add `Task.get_projects()` to get all projects in the system, sorted by last update time. **Bug Fixes** -* Fix UTC to time stamp in comment ([GitHub Issue #152](https://github.com/allegroai/trains/issues/152)). +* Fix UTC to time stamp in comment ([GitHub Issue #152](https://github.com/clearml/clearml/issues/152)). * Fix and enhance GPU monitoring: - * Fix GPU stats on Windows machines ([GitHub Issue #177](https://github.com/allegroai/trains/issues/177)). - * More robust GPU monitoring ([GitHub Issue #170](https://github.com/allegroai/trains/issues/170)). -* Fix filename too long bug ([GitHub trains-server Issue #49](https://github.com/allegroai/trains-server/issues/49)). -* Fix TensorFlow image logging to allow images with no width / height / color metadata ([GitHub Issue #182](https://github.com/allegroai/trains/issues/182)). + * Fix GPU stats on Windows machines ([GitHub Issue #177](https://github.com/clearml/clearml/issues/177)). + * More robust GPU monitoring ([GitHub Issue #170](https://github.com/clearml/clearml/issues/170)). +* Fix filename too long bug ([GitHub trains-server Issue #49](https://github.com/clearml/clearml-server/issues/49)). +* Fix TensorFlow image logging to allow images with no width / height / color metadata ([GitHub Issue #182](https://github.com/clearml/clearml/issues/182)). * Fix multiprocessing Pool throw exception in pool hangs execution. Call original signal handler and re-flush `stdout`. * Fix `plotly` support for `matplotlib` 3.3. * Add Python 2.7 support for `get_current_thread_id()`. diff --git a/docs/release_notes/sdk/open_source/ver_0_17.md b/docs/release_notes/sdk/open_source/ver_0_17.md index ec4c63c9..1f389bc2 100644 --- a/docs/release_notes/sdk/open_source/ver_0_17.md +++ b/docs/release_notes/sdk/open_source/ver_0_17.md @@ -2,11 +2,11 @@ title: Version 0.17 --- -## ClearML 0.17.5 +### ClearML 0.17.5 **Features** -- Add `force_download` argument to `Artifact.get()` and `Artifact.get_local_copy()` ([clearml GitHub Issue 319](https://github.com/allegroai/clearml/issues/319)). +- Add `force_download` argument to `Artifact.get()` and `Artifact.get_local_copy()` ([clearml GitHub Issue 319](https://github.com/clearml/clearml/issues/319)). - Support all reporting using subprocesses instead of threads (default `sdk.development.report_use_subprocess=True`). - Improve Datasets support: * Add `clearml-data publish` to allow publishing a dataset task. @@ -23,7 +23,7 @@ title: Version 0.17 - Add links to Tasks in optimization summary table (not just Task IDs). - Add support for datetime in scatter plots + matplotlib support. - Improve plotly value type conforming. -- Improve PyTorch `DataLoader` speed ([clearml GitHub Issue 207](https://github.com/allegroai/clearml/issues/207)). +- Improve PyTorch `DataLoader` speed ([clearml GitHub Issue 207](https://github.com/clearml/clearml/issues/207)). - Update Auto Scaler default values and configuration. - Examples: * Add Hydra example. @@ -32,24 +32,24 @@ title: Version 0.17 **Bug Fixes** -- Fix warning or error message if requirements parsing failed ([clearml GitHub Issue 291](https://github.com/allegroai/clearml/issues/291)). -- Fix pytorch-lighting multi node store ([clearml GitHub Issue 292](https://github.com/allegroai/clearml/issues/292)). -- Fix strip remote diff ([clearml GitHub Issue 295](https://github.com/allegroai/clearml/issues/295)). -- Fix Python package detection `sklearn` -> `scikit-learn` ([clearml GitHub Issue 296](https://github.com/allegroai/clearml/issues/296)). +- Fix warning or error message if requirements parsing failed ([clearml GitHub Issue 291](https://github.com/clearml/clearml/issues/291)). +- Fix pytorch-lighting multi node store ([clearml GitHub Issue 292](https://github.com/clearml/clearml/issues/292)). +- Fix strip remote diff ([clearml GitHub Issue 295](https://github.com/clearml/clearml/issues/295)). +- Fix Python package detection `sklearn` -> `scikit-learn` ([clearml GitHub Issue 296](https://github.com/clearml/clearml/issues/296)). - Fix argparse issues: - * Fix argparse with `[None]` in default parameter ([clearml GitHub Issue 297](https://github.com/allegroai/clearml/issues/297)). - * Fix parsing of arguments in scientific notation ([clearml GitHub Issue 313](https://github.com/allegroai/clearml/issues/313)). + * Fix argparse with `[None]` in default parameter ([clearml GitHub Issue 297](https://github.com/clearml/clearml/issues/297)). + * Fix parsing of arguments in scientific notation ([clearml GitHub Issue 313](https://github.com/clearml/clearml/issues/313)). * Fix argparser logging always captures defaults (Windows only, ignored cmd). * Fix argparse `nargs` passed in command line `--nargs 1 2` should be stored as `[1, 2]` not as `['1', '2']`. * Fix support for nonstandard argparse with default value that is not of defined type. * Fix server updated with the argparse in remote before Task.init() is called (respect skipped args). - Fix Dataset support: - * Fix `Dataset.remove_files()` can't find files when files are in dataset root ([clearml GitHub Issue 303](https://github.com/allegroai/clearml/issues/303)). + * Fix `Dataset.remove_files()` can't find files when files are in dataset root ([clearml GitHub Issue 303](https://github.com/clearml/clearml/issues/303)). * Fix closing a dataset with only files removed. * Fix Dataset generate removed / modified / added of summary table. -- Fix Hydra multi-run support ([clearml GitHub Issue 306](https://github.com/allegroai/clearml/issues/306)). +- Fix Hydra multi-run support ([clearml GitHub Issue 306](https://github.com/clearml/clearml/issues/306)). - Fix TF/TensorBoard support: - * Fix TensorBoard multiple `Task.init()` / `Task.close()` calls within the same process ([clearml GitHub Issue 312](https://github.com/allegroai/clearml/issues/312)). + * Fix TensorBoard multiple `Task.init()` / `Task.close()` calls within the same process ([clearml GitHub Issue 312](https://github.com/clearml/clearml/issues/312)). * Fix TensorBoard 2+ `pr_curve`. * Fix TF `pr_curve` should not be inverted. * Fix TF +2.3 mixed eager mode execution summary metrics not reported. @@ -85,7 +85,7 @@ title: Version 0.17 **Features** -- Add `HyperParameterOptimizer` parallel coordinates ([clearml GitHub Issue 279](https://github.com/allegroai/trains/issues/279)). +- Add `HyperParameterOptimizer` parallel coordinates ([clearml GitHub Issue 279](https://github.com/clearml/clearml/issues/279)). - Add `Task.init()` argument `tags`. - Change HPO parallel coordinates color scale, yellow is low. - Change `HyperParameterOptimizer` `spawn_task_project` to `spawn_project`. @@ -105,7 +105,7 @@ title: Version 0.17 * Add `Task.delete()` support. * Add `Task.debug_simulate_remote_task()` to simulate task execution by ClearML Agent. -* Add warning on archived Task in pipeline ([clearml GitHub Issue 274](https://github.com/allegroai/trains/issues/274)). +* Add warning on archived Task in pipeline ([clearml GitHub Issue 274](https://github.com/clearml/clearml/issues/274)). * Add `Task.init(..., output_uri=True)`, which will use the default files_server as output uri. * Make `clearml-data` CLI stateful, so it remembers last dataset ID as default dataset. * Added `HyperParameterOptimizer.get_optimizer_top_experiments()` for querying post execution optimization pipeline. @@ -116,9 +116,9 @@ title: Version 0.17 **Bug Fixes** -* Fix PipelineController running remotely without configuration does not execute the default code pipeline ([clearml GitHub Issue 273](https://github.com/allegroai/trains/issues/273)). -* Fix reusing task after its project was deleted ([clearml GitHub Issue 274](https://github.com/allegroai/trains/issues/274)). -* Fix `Task.archived_tag read-only` property does not work ([clearml GitHub Issue 274](https://github.com/allegroai/trains/issues/274)). +* Fix PipelineController running remotely without configuration does not execute the default code pipeline ([clearml GitHub Issue 273](https://github.com/clearml/clearml/issues/273)). +* Fix reusing task after its project was deleted ([clearml GitHub Issue 274](https://github.com/clearml/clearml/issues/274)). +* Fix `Task.archived_tag read-only` property does not work ([clearml GitHub Issue 274](https://github.com/clearml/clearml/issues/274)). * Fix argparse support to store consistent str representation of custom objects. Avoid changing default value if remote value matches. * Fix argparse type as function. * Fix Dataset add single and multiple file(s). @@ -135,14 +135,14 @@ title: Version 0.17 ### ClearML 0.17.2 -**Bug Fixes** +**Bug Fix** * Fix broken `clearml-task` CLI. ### ClearML 0.17.1 -**Bug Fixes** +**Bug Fix** * `clearml-task` CLI link fixed. @@ -151,12 +151,12 @@ title: Version 0.17 **Features** -* Renamed `trains` as `clearml` (see [clearml](https://github.com/allegroai/clearml) in GitHub). -* Add `clearml-data` CLI for Differential Dataset Management & Versioning (see details). -* Add `clearml-task` CLI for creating (importing) code into **ClearML** (see details). +* Renamed `trains` as `clearml` (see [clearml](https://github.com/clearml/clearml) in GitHub). +* Add `clearml-data` CLI for Differential Dataset Management & Versioning (see details). +* Add `clearml-task` CLI for creating (importing) code into **ClearML** (see details). * Add `Task.create`, which supports importing a code / repository into **ClearML**, including remote execution with `clearml-agent`. -**Bug Fixes** +**Bug Fix** * PyJWT v2.0 breaks the interface. diff --git a/docs/release_notes/sdk/open_source/ver_1_0.md b/docs/release_notes/sdk/open_source/ver_1_0.md index 75fca583..e2f9ef68 100644 --- a/docs/release_notes/sdk/open_source/ver_1_0.md +++ b/docs/release_notes/sdk/open_source/ver_1_0.md @@ -5,8 +5,8 @@ title: Version 1.0 **Features** -- Add Click support ([ClearML GitHub issue #386](https://github.com/allegroai/clearml/issues/386)) -- Add progress bar to SHA2 generation ([ClearML GitHub issue #396](https://github.com/allegroai/clearml/issues/396)) +- Add Click support ([ClearML GitHub issue #386](https://github.com/clearml/clearml/issues/386)) +- Add progress bar to SHA2 generation ([ClearML GitHub issue #396](https://github.com/clearml/clearml/issues/396)) - Add prefix to Task reported runtime info: `cpu_cores`, `gpu_driver_version` and `gpu_driver_cuda_version` - Add support for `Logger.report_text()` explicit log-level reporting - Add `return_full_path` argument to `StorageManager.list()` @@ -21,8 +21,8 @@ title: Version 1.0 **Bug Fixes** -- Fix Pandas with multi-index ([ClearML GitHub issue #399](https://github.com/allegroai/clearml/issues/399)) -- Fix check permissions fail in `HTTPDriver` ([ClearML GitHub issue #394](https://github.com/allegroai/clearml/issues/394)) +- Fix Pandas with multi-index ([ClearML GitHub issue #399](https://github.com/clearml/clearml/issues/399)) +- Fix check permissions fail in `HTTPDriver` ([ClearML GitHub issue #394](https://github.com/clearml/clearml/issues/394)) - Fix Dataset not setting system tag on existing `data_processing` Tasks - Fix disable redundant resource monitoring in pipeline controller - Fix `ClearMLJob` when both `project` and `target_project` are specified @@ -37,17 +37,17 @@ title: Version 1.0 **Features** -- Add Google Colab notebook tutorial ([ClearML GitHub PR 368](https://github.com/allegroai/clearml/issues/368) and [ClearML GitHub PR 374](https://github.com/allegroai/clearml/issues/374)) -- Add support for GIF images in Tensorboard ([ClearML GitHub issue 372](https://github.com/allegroai/clearml/issues/372)) -- Add a tensorboardX example for `add_video` (creates GIFs in tensorboard) ([ClearML GitHub PR 372](https://github.com/allegroai/clearml/issues/372)) +- Add Google Colab notebook tutorial ([ClearML GitHub PR 368](https://github.com/clearml/clearml/issues/368) and [ClearML GitHub PR 374](https://github.com/clearml/clearml/issues/374)) +- Add support for GIF images in Tensorboard ([ClearML GitHub issue 372](https://github.com/clearml/clearml/issues/372)) +- Add a tensorboardX example for `add_video` (creates GIFs in tensorboard) ([ClearML GitHub PR 372](https://github.com/clearml/clearml/issues/372)) - Add auto scaler customizable boot bash script - Add `Task.ignore_requirements` - Deprecate `Logger.tensorboard_single_series_per_graph()` as it is now controlled from the UI 🙂 **Bug Fixes** -- Fix `default_output_uri` for Dataset creation ([ClearML GitHub issue 371](https://github.com/allegroai/clearml/issues/371)) -- Fix `clearml-task` failing without a docker script ([ClearML GitHub issue 378](https://github.com/allegroai/clearml/issues/378)) +- Fix `default_output_uri` for Dataset creation ([ClearML GitHub issue 371](https://github.com/clearml/clearml/issues/371)) +- Fix `clearml-task` failing without a docker script ([ClearML GitHub issue 378](https://github.com/clearml/clearml/issues/378)) - Fix PyTorch DDP sub-process spawn multi-process - Fix `Task.execute_remotely()` on created Task (not initialized Task) - Fix auto scaler custom bash script should be called last before starting agent @@ -58,7 +58,7 @@ title: Version 1.0 **Features** -- Use default `boto` credential chain if no keys are provided in the configuration file or environment variables ([ClearML GitHub PR 342](https://github.com/allegroai/clearml/issues/342)) +- Use default `boto` credential chain if no keys are provided in the configuration file or environment variables ([ClearML GitHub PR 342](https://github.com/clearml/clearml/issues/342)) - Support `DummyModel` configuration ([Slack Channel](https://clearml.slack.com/archives/CTK20V944/p1621469235085400)) - Add `report_matplotlib_figure(..., report_interactive=False)` allowing to upload a matplotlib as a non-interactive (high quality png) plot - Add `Logger.matplotlib_force_report_non_interactive()` @@ -75,10 +75,10 @@ title: Version 1.0 **Bug Fixes** -- Fix Hydra should not store the full resolved OmegaConf ([ClearML GitHub issue 327](https://github.com/allegroai/clearml/issues/327)) -- Fix direct import of keras save/load model functions ([ClearML GitHub issue 355](https://github.com/allegroai/clearml/issues/355)) -- Fix run as module ([ClearML GitHub issue 359](https://github.com/allegroai/clearml/issues/359)) -- Fix Python 2.7 support ([ClearML GitHub issue 366](https://github.com/allegroai/clearml/issues/366)) +- Fix Hydra should not store the full resolved OmegaConf ([ClearML GitHub issue 327](https://github.com/clearml/clearml/issues/327)) +- Fix direct import of keras save/load model functions ([ClearML GitHub issue 355](https://github.com/clearml/clearml/issues/355)) +- Fix run as module ([ClearML GitHub issue 359](https://github.com/clearml/clearml/issues/359)) +- Fix Python 2.7 support ([ClearML GitHub issue 366](https://github.com/clearml/clearml/issues/366)) - Fix `Task.add_requirements()` passing `package_version` starting with `@`, `;` or `#` - Fix import keras from TF - Fix support for Hydra's `run_job()` change in parameter order by passing `config` and `task_function` as keyword arguments @@ -95,13 +95,13 @@ title: Version 1.0 ### ClearML 1.0.2 -**Bug Fixes** +**Bug Fix** - Fix in rare scenarios process stuck on exit, again :) ### ClearML 1.0.1 -**Bug Fixes** +**Bug Fix** - Fix in rare scenarios process stuck on exit @@ -113,10 +113,10 @@ Arguments order changed in `Logger.report_line_plot()`, `Logger.report_plotly()` **Features** -* Add OS environment variable `CLEARML_DEFAULT_OUTPUT_URI` to override default `output_uri` for automatic models upload ([ClearML GitHub issue 328](https://github.com/allegroai/clearml/issues/328)) -* Add `Task.force_requirements_env_freeze()` forcing `pip freeze` instead of package analysis ([ClearML GitHub issue 304](https://github.com/allegroai/clearml/issues/304)) +* Add OS environment variable `CLEARML_DEFAULT_OUTPUT_URI` to override default `output_uri` for automatic models upload ([ClearML GitHub issue 328](https://github.com/clearml/clearml/issues/328)) +* Add `Task.force_requirements_env_freeze()` forcing `pip freeze` instead of package analysis ([ClearML GitHub issue 304](https://github.com/clearml/clearml/issues/304)) * Improve pipeline support - * Add Task parameters override in `ClearmlJob` ([ClearML GitHub issue 214](https://github.com/allegroai/clearml/issues/214)) + * Add Task parameters override in `ClearmlJob` ([ClearML GitHub issue 214](https://github.com/clearml/clearml/issues/214)) * Add PipelineController node skip visualization and pre/post-execution callback * Allow enabling/disabling tensorboard auto-connect using `Task.init(auto_connect_frameworks={'tensorboard': True/False})` (default: `True`) * Allow to continue running from previous execution iteration @@ -146,9 +146,9 @@ Arguments order changed in `Logger.report_line_plot()`, `Logger.report_plotly()` **Bug Fixes** -* Fix `\r` and `\n` in debug samples title/series ([ClearML GitHub issue 323](https://github.com/allegroai/clearml/issues/323)) -* Fix Google API credentials without storage section raises exception on import ([ClearML GitHub issue 331](https://github.com/allegroai/clearml/issues/331)) -* Fix Matplotlib automagic export legend not showing series names ([ClearML GitHub issue 337](https://github.com/allegroai/clearml/issues/337)) +* Fix `\r` and `\n` in debug samples title/series ([ClearML GitHub issue 323](https://github.com/clearml/clearml/issues/323)) +* Fix Google API credentials without storage section raises exception on import ([ClearML GitHub issue 331](https://github.com/clearml/clearml/issues/331)) +* Fix Matplotlib automagic export legend not showing series names ([ClearML GitHub issue 337](https://github.com/clearml/clearml/issues/337)) * Fix `Task.set_comment/name()` passing `None` should be equivalent to `''` * Fix `Task.set_credentials()` uses incorrect config file when both `trains.conf` and `clearml.conf` are found * Fix `Task.set_credetnials()` should override settings from config file diff --git a/docs/release_notes/sdk/open_source/ver_1_1.md b/docs/release_notes/sdk/open_source/ver_1_1.md index 8c468bda..6deecd44 100644 --- a/docs/release_notes/sdk/open_source/ver_1_1.md +++ b/docs/release_notes/sdk/open_source/ver_1_1.md @@ -6,7 +6,7 @@ title: Version 1.1 **Features** -- Add `Task.force_store_standalone_script()` to force storing standalone script instead of a Git repository reference ([ClearML GitHub issue #340](https://github.com/allegroai/clearml/issues/340)) +- Add `Task.force_store_standalone_script()` to force storing standalone script instead of a Git repository reference ([ClearML GitHub issue #340](https://github.com/clearml/clearml/issues/340)) - Add `Logger.set_default_debug_sample_history()` and `Logger.get_default_debug_sample_history()` to allow controlling maximum debug samples programmatically - Add populate now stores function arg types as part of the hyperparameters @@ -15,8 +15,8 @@ title: Version 1.1 **Bug Fixes** -- Fix and upgrade the SlackMonitor ([ClearML GitHub issue #533](https://github.com/allegroai/clearml/issues/533)) -- Fix network issues causing Task to stop on status change when no status change has occurred ([ClearML GitHub issue #535](https://github.com/allegroai/clearml/issues/535)) +- Fix and upgrade the SlackMonitor ([ClearML GitHub issue #533](https://github.com/clearml/clearml/issues/533)) +- Fix network issues causing Task to stop on status change when no status change has occurred ([ClearML GitHub issue #535](https://github.com/clearml/clearml/issues/535)) - Fix Pipeline controller function support for dict as input argument - Fix uploading the same metric/variant from multiple processes in threading mode should create a unique file per process (since global counter is not passed between the subprocesses) - Fix resource monitoring should only run in the main process when using threaded logging mode @@ -32,15 +32,15 @@ title: Version 1.1 ### ClearML 1.1.5 **Features** -* Add support for `jsonargpraser` ([ClearML GitHub issue #403](https://github.com/allegroai/clearml/issues/403)) +* Add support for `jsonargpraser` ([ClearML GitHub issue #403](https://github.com/clearml/clearml/issues/403)) * Add `HyperParameterOptimizer.get_top_experiments_details()` returns the hparams and metrics of the top performing - experiments of an HPO ([ClearML GitHub issue #473](https://github.com/allegroai/clearml/issues/473)) + experiments of an HPO ([ClearML GitHub issue #473](https://github.com/clearml/clearml/issues/473)) * Allow overriding initial iteration offset using environment variable (`CLEARML_SET_ITERATION_OFFSET`) or `Task.init(continue_last_task==)` - ( [ClearML GitHub issue #496](https://github.com/allegroai/clearml/issues/496)) -* Add better input handling for `clearml-init` in colab ([ClearML GitHub issue #515](https://github.com/allegroai/clearml/issues/515)) -* Add environment variable for default request method ([ClearML GitHub issue #521](https://github.com/allegroai/clearml/issues/521)) -* Add `LocalClearmlJob` as possible option for HPO ([ClearML GitHub issue #525](https://github.com/allegroai/clearml/issues/525)) -* Add convenience functionality to `clearml-data` ([ClearML GitHub issue #526](https://github.com/allegroai/clearml/issues/526)) + ( [ClearML GitHub issue #496](https://github.com/clearml/clearml/issues/496)) +* Add better input handling for `clearml-init` in colab ([ClearML GitHub issue #515](https://github.com/clearml/clearml/issues/515)) +* Add environment variable for default request method ([ClearML GitHub issue #521](https://github.com/clearml/clearml/issues/521)) +* Add `LocalClearmlJob` as possible option for HPO ([ClearML GitHub issue #525](https://github.com/clearml/clearml/issues/525)) +* Add convenience functionality to `clearml-data` ([ClearML GitHub issue #526](https://github.com/clearml/clearml/issues/526)) * Add support for `vscode-jupyter` ([microsoft/vscode-jupyter#8531](https://github.com/microsoft/vscode-jupyter/pull/8531)) * Improve detection of running reporting subprocess (including zombie state) * Support controlling S3/Google Cloud Storage `_stream_download_pool_connections` using the `stream_connections` configuration @@ -59,21 +59,21 @@ title: Version 1.1 * Add `PipelineDecorator.multi_instance_support` * Add `PipelineDecorator` to `clearml` and `clearml.automation` namespaces * Documentation and examples - * Update docstrings ([ClearML GitHub issue #501](https://github.com/allegroai/clearml/issues/501)) - * Add Markdown in pipeline jupyter notebooks ([ClearML GitHub issue #502](https://github.com/allegroai/clearml/issues/502)) - * Update pipeline example ([ClearML GitHub issue #494](https://github.com/allegroai/clearml/issues/494)) - * Add abseil example ([ClearML GitHub issue #509](https://github.com/allegroai/clearml/issues/509)) - * Change README to dark theme ([ClearML GitHub issue #513](https://github.com/allegroai/clearml/issues/513)) - * Update XGBoost example ([ClearML GitHub issue #524](https://github.com/allegroai/clearml/issues/524)) - * Change example name ([ClearML GitHub issue #528](https://github.com/allegroai/clearml/issues/528)) + * Update docstrings ([ClearML GitHub issue #501](https://github.com/clearml/clearml/issues/501)) + * Add Markdown in pipeline jupyter notebooks ([ClearML GitHub issue #502](https://github.com/clearml/clearml/issues/502)) + * Update pipeline example ([ClearML GitHub issue #494](https://github.com/clearml/clearml/issues/494)) + * Add abseil example ([ClearML GitHub issue #509](https://github.com/clearml/clearml/issues/509)) + * Change README to dark theme ([ClearML GitHub issue #513](https://github.com/clearml/clearml/issues/513)) + * Update XGBoost example ([ClearML GitHub issue #524](https://github.com/clearml/clearml/issues/524)) + * Change example name ([ClearML GitHub issue #528](https://github.com/clearml/clearml/issues/528)) **Bug Fixes** -* Fix `TriggerScheduler` on Dataset change ([ClearML GitHub issue #491](https://github.com/allegroai/clearml/issues/491)) -* Fix links in Jupyter Notebooks ([ClearML GitHub issue #505](https://github.com/allegroai/clearml/issues/505)) -* Fix `pandas` delta datetime conversion ([ClearML GitHub issue #510](https://github.com/allegroai/clearml/issues/510)) -* Fix `matplotlib` auto-magic detect bar graph series name ([ClearML GitHub issue #518](https://github.com/allegroai/clearml/issues/518)) +* Fix `TriggerScheduler` on Dataset change ([ClearML GitHub issue #491](https://github.com/clearml/clearml/issues/491)) +* Fix links in Jupyter Notebooks ([ClearML GitHub issue #505](https://github.com/clearml/clearml/issues/505)) +* Fix `pandas` delta datetime conversion ([ClearML GitHub issue #510](https://github.com/clearml/clearml/issues/510)) +* Fix `matplotlib` auto-magic detect bar graph series name ([ClearML GitHub issue #518](https://github.com/clearml/clearml/issues/518)) * Fix path limitation on storage services (posix, object storage) when storing target artifacts by limiting length of - project name (full path) and task name used for object path ([ClearML GitHub issue #516](https://github.com/allegroai/clearml/issues/516)) + project name (full path) and task name used for object path ([ClearML GitHub issue #516](https://github.com/clearml/clearml/issues/516)) * Fix multi-processing context block catching exception * Fix Google Cloud Storage with no default project causes a crash * Fix main process's reporting subprocess lost, switch back to thread mode @@ -100,8 +100,8 @@ title: Version 1.1 **Bug Fixes** -- Fix duplicate keyword argument (affects `clearml-data`, `Dataset.get()`) ([ClearML GitHub issue #490](https://github.com/allegroai/clearml/issues/490)) -- Fix session raises missing host error when in offline mode ([ClearML GitHub issue #489](https://github.com/allegroai/clearml/issues/489)) +- Fix duplicate keyword argument (affects `clearml-data`, `Dataset.get()`) ([ClearML GitHub issue #490](https://github.com/clearml/clearml/issues/490)) +- Fix session raises missing host error when in offline mode ([ClearML GitHub issue #489](https://github.com/clearml/clearml/issues/489)) - Fix `Task.get_task()` does not load `output_uri` from stored Task - Fix `Task.get_models()['input']` returns string instead of `clearml.Model` - Fix `tf.saved_model.load()` binding for `TensorFlow>=2.0` @@ -111,11 +111,11 @@ title: Version 1.1 **Features** -- Add support for MegEngine with examples ([ClearML GitHub issue #455](https://github.com/allegroai/clearml/issues/455)) -- Add `TaskTypes` to main namespace ([ClearML GitHub issue #453](https://github.com/allegroai/clearml/issues/453)) -- Add `LogUnifomParameterRange` for hyperparameter optimization with Optuna ([ClearML GitHub issue #462](https://github.com/allegroai/clearml/issues/462)) +- Add support for MegEngine with examples ([ClearML GitHub issue #455](https://github.com/clearml/clearml/issues/455)) +- Add `TaskTypes` to main namespace ([ClearML GitHub issue #453](https://github.com/clearml/clearml/issues/453)) +- Add `LogUnifomParameterRange` for hyperparameter optimization with Optuna ([ClearML GitHub issue #462](https://github.com/clearml/clearml/issues/462)) - Add joblib (equivalent to scikit) to `Task.init(auto_connect_frameworks)` argument -- Log environment variables starting with `*` in `environ_bind.py` ([ClearML GitHub issue #459](https://github.com/allegroai/clearml/issues/459)) +- Log environment variables starting with `*` in `environ_bind.py` ([ClearML GitHub issue #459](https://github.com/clearml/clearml/issues/459)) - Pipeline - Add eager decorated pipeline execution - Support pipeline monitoring for scalars/models/artifacts @@ -142,13 +142,13 @@ title: Version 1.1 **Bug Fixes** - Fix PyJWT resiliency support -- Fix xgb train overload ([ClearML GitHub issue #456](https://github.com/allegroai/clearml/issues/456)) -- Fix `http://` throws `OSError` in Windows by using `pathlib2` instead of `os` ([ClearML GitHub issue #463](https://github.com/allegroai/clearml/issues/463)) -- Fix local diff should include staged commits, otherwise applying git diff fails ([ClearML GitHub issue #457](https://github.com/allegroai/clearml/issues/457)) -- Fix `task.upload_artifact` non-standard dictionary will now revert to `pickle` ([ClearML GitHub issue #452](https://github.com/allegroai/clearml/issues/452)) -- Fix `S3BucketConfig.is_valid()` for EC2 environments with `use_credentials_chain` ([ClearML GitHub issue #478](https://github.com/allegroai/clearml/issues/478)) -- Fix audio classifier example when training with a custom dataset ([ClearML GitHub issue #484](https://github.com/allegroai/clearml/issues/484)) -- Fix `clearml-task` diff was corrupted by Windows drive letter and separator ([ClearML GitHub issue #483](https://github.com/allegroai/clearml/issues/483)) +- Fix xgb train overload ([ClearML GitHub issue #456](https://github.com/clearml/clearml/issues/456)) +- Fix `http://` throws `OSError` in Windows by using `pathlib2` instead of `os` ([ClearML GitHub issue #463](https://github.com/clearml/clearml/issues/463)) +- Fix local diff should include staged commits, otherwise applying git diff fails ([ClearML GitHub issue #457](https://github.com/clearml/clearml/issues/457)) +- Fix `task.upload_artifact` non-standard dictionary will now revert to `pickle` ([ClearML GitHub issue #452](https://github.com/clearml/clearml/issues/452)) +- Fix `S3BucketConfig.is_valid()` for EC2 environments with `use_credentials_chain` ([ClearML GitHub issue #478](https://github.com/clearml/clearml/issues/478)) +- Fix audio classifier example when training with a custom dataset ([ClearML GitHub issue #484](https://github.com/clearml/clearml/issues/484)) +- Fix `clearml-task` diff was corrupted by Windows drive letter and separator ([ClearML GitHub issue #483](https://github.com/clearml/clearml/issues/483)) - Fix TQDM "line cleanup" not using `CR` but rather arrow-up escape sequence - Fix `task.connect(dict)` value casting - if `None` is the default value, use backend stored type - Fix Jupyter notebook should always set Task as completed/stopped, never failed (exceptions are caught in interactive session) @@ -196,9 +196,9 @@ title: Version 1.1 - Add Task Cron Scheduler - Add PipelineController from function - Add PipelineDecorator (`PipelineDecorator.pipeline` and `PipelineDecorator.component` decorators for full custom pipeline logic) -- Add xgboost auto metric logging ([ClearML GitHub issue #381](https://github.com/allegroai/clearml/issues/381)) -- Add `sdk.storage.log.report_upload_chunk_size_mb` and `sdk.storage.log.report_download_chunk_size_mb` configuration options to control upload/download log reporting ([ClearML GitHub issue #424](https://github.com/allegroai/clearml/issues/424)) -- Add new optional `auto_connect_frameworks` argument value to `Task.init()` (e.g. `auto_connect_frameworks={'tfdefines':False}`) to allow disabling TF defines ([ClearML GitHub issue #408](https://github.com/allegroai/clearml/issues/408)) +- Add xgboost auto metric logging ([ClearML GitHub issue #381](https://github.com/clearml/clearml/issues/381)) +- Add `sdk.storage.log.report_upload_chunk_size_mb` and `sdk.storage.log.report_download_chunk_size_mb` configuration options to control upload/download log reporting ([ClearML GitHub issue #424](https://github.com/clearml/clearml/issues/424)) +- Add new optional `auto_connect_frameworks` argument value to `Task.init()` (e.g. `auto_connect_frameworks={'tfdefines':False}`) to allow disabling TF defines ([ClearML GitHub issue #408](https://github.com/clearml/clearml/issues/408)) - Add support for `CLEARNL_CONFIG_VERBOSE` environment variable to allow external control over verbosity of the configuration loading process - Add support for uploading artifacts with a list of files using `Task.upload_artifcats(name, [Path(), Path()])` - Add missing *clearml-task* parameters `--docker_args`, `--docker_bash_setup_script` and `--output-uri` @@ -208,7 +208,7 @@ title: Version 1.1 - Add `Task.get_configuration_object_as_dict()` - Add `docker_image` argument to `Task.set_base_docker()` (deprecate `docker_cmd`) - Add `auto_version_bump` argument to `PipelineController` -- Add `sdk.development.detailed_import_report` configuration option to provide a detailed report of all python package imports +- Add `sdk.development.detailed_import_report` configuration option to provide a detailed report of all Python package imports - Set current Task as Dataset parent when creating dataset - Add support for deferred configuration - Examples @@ -219,18 +219,18 @@ title: Version 1.1 **Bug Fixes** -- Fix plotly plots converting `NaN` to `nan` instead of `null` ([ClearML GitHub issue #373](https://github.com/allegroai/clearml/issues/373)) -- Fix deprecation warning ([ClearML GitHub issue #376](https://github.com/allegroai/clearml/issues/376)) -- Fix plotly multi-index without index names ([ClearML GitHub issue #399](https://github.com/allegroai/clearml/issues/399)) -- Fix click support ([ClearML GitHub issue #437](https://github.com/allegroai/clearml/issues/437)) -- Fix docstring ([ClearML GitHub issue #438](https://github.com/allegroai/clearml/issues/438)) -- Fix passing `task-type` to *clearml-task* ([ClearML GitHub issue #422](https://github.com/allegroai/clearml/issues/422)) -- Fix `clearml-task --version` throws an error ([ClearML GitHub issue #422](https://github.com/allegroai/clearml/issues/422)) -- Fix *clearml-task* ssh repository links are not detected as remote repositories ([ClearML GitHub issue #423](https://github.com/allegroai/clearml/issues/423)) -- Fix `getattr` throws an exception ([ClearML GitHub issue #426](https://github.com/allegroai/clearml/issues/426)) -- Fix encoding while saving notebook preview ([ClearML GitHub issue #443](https://github.com/allegroai/clearml/issues/443)) -- Fix poetry toml file without requirements.txt ([ClearML GitHub issue #444](https://github.com/allegroai/clearml/issues/444)) -- Fix `PY3.x` fails calling `SemLock._after_fork` with forkserver context, forking while lock is acquired ([ClearML Agent GitHub issue #73](https://github.com/allegroai/clearml-agent/issues/73)) +- Fix plotly plots converting `NaN` to `nan` instead of `null` ([ClearML GitHub issue #373](https://github.com/clearml/clearml/issues/373)) +- Fix deprecation warning ([ClearML GitHub issue #376](https://github.com/clearml/clearml/issues/376)) +- Fix plotly multi-index without index names ([ClearML GitHub issue #399](https://github.com/clearml/clearml/issues/399)) +- Fix click support ([ClearML GitHub issue #437](https://github.com/clearml/clearml/issues/437)) +- Fix docstring ([ClearML GitHub issue #438](https://github.com/clearml/clearml/issues/438)) +- Fix passing `task-type` to *clearml-task* ([ClearML GitHub issue #422](https://github.com/clearml/clearml/issues/422)) +- Fix `clearml-task --version` throws an error ([ClearML GitHub issue #422](https://github.com/clearml/clearml/issues/422)) +- Fix *clearml-task* ssh repository links are not detected as remote repositories ([ClearML GitHub issue #423](https://github.com/clearml/clearml/issues/423)) +- Fix `getattr` throws an exception ([ClearML GitHub issue #426](https://github.com/clearml/clearml/issues/426)) +- Fix encoding while saving notebook preview ([ClearML GitHub issue #443](https://github.com/clearml/clearml/issues/443)) +- Fix poetry toml file without requirements.txt ([ClearML GitHub issue #444](https://github.com/clearml/clearml/issues/444)) +- Fix `PY3.x` fails calling `SemLock._after_fork` with forkserver context, forking while lock is acquired ([ClearML Agent GitHub issue #73](https://github.com/clearml/clearml-agent/issues/73)) - Fix wrong download path in `StorageManager.download_folder()` - Fix jupyter notebook `display(...)` convert to `print(...)` - Fix TensorFlow `add_image()` with `description='text'` diff --git a/docs/release_notes/sdk/open_source/ver_1_10.md b/docs/release_notes/sdk/open_source/ver_1_10.md index 9a8cc480..6a7690f6 100644 --- a/docs/release_notes/sdk/open_source/ver_1_10.md +++ b/docs/release_notes/sdk/open_source/ver_1_10.md @@ -5,12 +5,12 @@ title: Version 1.10 ### ClearML 1.10.4 **New Features and Improvements** -* Update references to `GetAllRequest` in Task docstrings ([ClearML GitHub issue #981](https://github.com/allegroai/clearml/issues/981)) +* Update references to `GetAllRequest` in Task docstrings ([ClearML GitHub issue #981](https://github.com/clearml/clearml/issues/981)) **Bug Fixes** -* Fix issue with JSON conversion when using `jsonargparse` during remote execution ([ClearML GitHub issue #1010](https://github.com/allegroai/clearml/issues/1010) -and [ClearML Agent GitHub issue #153](https://github.com/allegroai/clearml-agent/issues/153)) -* Fix `ProxyDictPostWrite.update()` not triggering a write-back to the backend ([ClearML GitHub issue #985](https://github.com/allegroai/clearml/issues/985)) +* Fix issue with JSON conversion when using `jsonargparse` during remote execution ([ClearML GitHub issue #1010](https://github.com/clearml/clearml/issues/1010) +and [ClearML Agent GitHub issue #153](https://github.com/clearml/clearml-agent/issues/153)) +* Fix `ProxyDictPostWrite.update()` not triggering a write-back to the backend ([ClearML GitHub issue #985](https://github.com/clearml/clearml/issues/985)) * Fix standard streams being patched in subtasks, which caused the streams to be reported to the wrong task * Fix TypeError when using `Task.query_tasks()` without specifying the `task_filter` parameter * Fix Tensorboard negative iterations, they are now zeroed @@ -25,14 +25,14 @@ and [ClearML Agent GitHub issue #153](https://github.com/allegroai/clearml-agent ### ClearML 1.10.2 **New Features and Improvements** -* Allow task filtering with `Task.query_tasks()` using `TaskTypes` ([ClearML GitHub issue #938](https://github.com/allegroai/clearml/issues/938)) +* Allow task filtering with `Task.query_tasks()` using `TaskTypes` ([ClearML GitHub issue #938](https://github.com/clearml/clearml/issues/938)) * Allow adding tags to individual pipeline steps and to the `PipelineController` * Restrict `Dataset.create()` usage for old server API versions * Improve docstrings **Bug Fixes** -* Fix `Task.get_tasks` docstring ([ClearML GitHub issue #937](https://github.com/allegroai/clearml/issues/937)) -* Fix `Task.get_reported_scalars()` docstring for `x_axis` parameter's `"timestamp"` value ([ClearML GitHub issue #963](https://github.com/allegroai/clearml/issues/963)) +* Fix `Task.get_tasks` docstring ([ClearML GitHub issue #937](https://github.com/clearml/clearml/issues/937)) +* Fix `Task.get_reported_scalars()` docstring for `x_axis` parameter's `"timestamp"` value ([ClearML GitHub issue #963](https://github.com/clearml/clearml/issues/963)) * Fix missing plots on models in Windows * Fix Pipeline version auto-bumping * Fix `APIClient.events.debug_images()` for latest server API version @@ -40,7 +40,7 @@ and [ClearML Agent GitHub issue #153](https://github.com/allegroai/clearml-agent ### ClearML 1.10.1 **New Features and Improvements** -* Add cast parameter to Task.get_parameter method ([ClearML GitHub issue #951](https://github.com/allegroai/clearml/issues/951)) +* Add cast parameter to Task.get_parameter method ([ClearML GitHub issue #951](https://github.com/clearml/clearml/issues/951)) **Bug Fixes** * Fix backward compatibility issue when using datetime filtering with `APIClient().models.get_all` and `APIClient().tasks.get_all` requests @@ -50,13 +50,13 @@ and [ClearML Agent GitHub issue #153](https://github.com/allegroai/clearml-agent **Breaking Changes** * `StorageManager.download_file()` and `StorageManager.download_folder()` from MinIO and Azure no longer include bucket name -in target local path ([ClearML GitHub issue #709](https://github.com/allegroai/clearml/issues/709)) +in target local path ([ClearML GitHub issue #709](https://github.com/clearml/clearml/issues/709)) **New Features and Improvements** * Add support for attaching plots and scalars to models -* Add `Task.get_debug_sample()` to retrieve task's debug samples ([ClearML GitHub issue #761](https://github.com/allegroai/clearml/issues/761)) -* Add custom artifact serialization for pipelines ([ClearML GitHub issue #689](https://github.com/allegroai/clearml/issues/689)) -* Add table layout configuration to `Logger.report_table()` through `extra_data` parameter ([ClearML GitHub issue #796](https://github.com/allegroai/clearml/issues/796)) +* Add `Task.get_debug_sample()` to retrieve task's debug samples ([ClearML GitHub issue #761](https://github.com/clearml/clearml/issues/761)) +* Add custom artifact serialization for pipelines ([ClearML GitHub issue #689](https://github.com/clearml/clearml/issues/689)) +* Add table layout configuration to `Logger.report_table()` through `extra_data` parameter ([ClearML GitHub issue #796](https://github.com/clearml/clearml/issues/796)) * Add `PipelineController.connect_configuration()` to add configuration dictionaries to a pipeline * Add `Dataset.delete()` configurable hosted contents deletion support: * Delete ClearML file server hosted files @@ -64,18 +64,18 @@ in target local path ([ClearML GitHub issue #709](https://github.com/allegroai/c * Add `force_download` argument to `Model.get_local_copy()` to force download a new copy of a model even if already in cache * Add `PipelineController.is_successful()` criteria customization * Add support for API v2.23 -* Add `Getting Started` Notebooks ([ClearML PR #948](https://github.com/allegroai/clearml/pull/948)) -* Improve `hyper_parameter` example ([ClearML PR #927](https://github.com/allegroai/clearml/pull/927)) -* Correct `Task.connect()` docstring ([ClearML Docs issue #473](https://github.com/allegroai/clearml-DOCS/issues/473)) -* Improve the `Task.mark_completed()` and `Task.close()` docstrings ([ClearML Docs issue #486](https://github.com/allegroai/clearml-docs/issues/486)) +* Add `Getting Started` Notebooks ([ClearML PR #948](https://github.com/clearml/clearml/pull/948)) +* Improve `hyper_parameter` example ([ClearML PR #927](https://github.com/clearml/clearml/pull/927)) +* Correct `Task.connect()` docstring ([ClearML Docs issue #473](https://github.com/clearml/clearml-DOCS/issues/473)) +* Improve the `Task.mark_completed()` and `Task.close()` docstrings ([ClearML Docs issue #486](https://github.com/clearml/clearml-docs/issues/486)) **Bug Fixes** -* Fix logging dependencies that use the subdirectory argument when pip installing from a git repo ([ClearML GitHub issue #946](https://github.com/allegroai/clearml/issues/946)) -* Fix `Task.import_offline_session()` does not import offline models ([ClearML GitHub issue #653](https://github.com/allegroai/clearml/issues/653)) -* Fix `clearml-init` incorrectly sets Web and API server ports ([ClearML Server GitHub issue #181](https://github.com/allegroai/clearml-server/issues/181) and [ClearML GitHub issue #910](https://github.com/allegroai/clearml/issues/910)) -* Fix multiple models trained by the same framework are not all automatically logged ([ClearML GitHub issue #767](https://github.com/allegroai/clearml/issues/767)) -* Fix parallel coordinates plot displays categorical variables unclearly ([ClearML GitHub issue #907](https://github.com/allegroai/clearml/issues/907)) +* Fix logging dependencies that use the subdirectory argument when pip installing from a git repo ([ClearML GitHub issue #946](https://github.com/clearml/clearml/issues/946)) +* Fix `Task.import_offline_session()` does not import offline models ([ClearML GitHub issue #653](https://github.com/clearml/clearml/issues/653)) +* Fix `clearml-init` incorrectly sets Web and API server ports ([ClearML Server GitHub issue #181](https://github.com/clearml/clearml-server/issues/181) and [ClearML GitHub issue #910](https://github.com/clearml/clearml/issues/910)) +* Fix multiple models trained by the same framework are not all automatically logged ([ClearML GitHub issue #767](https://github.com/clearml/clearml/issues/767)) +* Fix parallel coordinates plot displays categorical variables unclearly ([ClearML GitHub issue #907](https://github.com/clearml/clearml/issues/907)) * Fix runtime toggling task offline mode in the context of an open task * Fix information not being captured from Jupyter Notebook in Sagemaker studio * Fix `python-fire` support diff --git a/docs/release_notes/sdk/open_source/ver_1_11.md b/docs/release_notes/sdk/open_source/ver_1_11.md index 6d8a7044..7e1664f0 100644 --- a/docs/release_notes/sdk/open_source/ver_1_11.md +++ b/docs/release_notes/sdk/open_source/ver_1_11.md @@ -5,9 +5,9 @@ title: Version 1.11 ### ClearML 1.11.1 **New Features and Improvements** -* Support `lightning>=2.0` ([ClearML GitHub issue #1032](https://github.com/allegroai/clearml/issues/1032)) +* Support `lightning>=2.0` ([ClearML GitHub issue #1032](https://github.com/clearml/clearml/issues/1032)) * Add `clearml-init` support for standard HTTP and HTTPS ports in webapp in conjunction with non-default api/files server ports - ([ClearML Server GitHub issue #198](https://github.com/allegroai/clearml-server/issues/198)) + ([ClearML Server GitHub issue #198](https://github.com/clearml/clearml-server/issues/198)) * Improve docstrings **Bug Fixes** @@ -20,8 +20,8 @@ title: Version 1.11 ### ClearML 1.11.0 **New Features and Improvements** -* Add offline mode for ClearML Datasets ([ClearML GitHub issue #854](https://github.com/allegroai/clearml/issues/854)) -* Improve performance of `Dataset.add_external_files()` ([ClearML GitHub PR #962](https://github.com/allegroai/clearml/pull/962)) +* Add offline mode for ClearML Datasets ([ClearML GitHub issue #854](https://github.com/clearml/clearml/issues/854)) +* Improve performance of `Dataset.add_external_files()` ([ClearML GitHub PR #962](https://github.com/clearml/clearml/pull/962)) * Add `Task.launch_multi_node()` for distributed experiment execution * Add `Task.get_all_reported_scalars()` to fetch all available scalar data * Add `Task.remove_input_models()` to disassociate input models from a task @@ -30,10 +30,10 @@ title: Version 1.11 * Add support for automatic Dataset content preview for JSON files **Bug Fixes** -* Fix multiple local parallel experiments conflicting on storage access validation ([ClearML GitHub issue #897](https://github.com/allegroai/clearml/issues/897)) -* Fix code running with `joblib` hangs ([ClearML GitHub issue #1009](https://github.com/allegroai/clearml/issues/1009)) -* Fix comment for storage scheme `gs://` ([ClearML GitHub issue #986](https://github.com/allegroai/clearml/issues/986)) -* Fix typo "Categories per column" ([ClearML GitHub PR #1021](https://github.com/allegroai/clearml/pull/1021)) +* Fix multiple local parallel experiments conflicting on storage access validation ([ClearML GitHub issue #897](https://github.com/clearml/clearml/issues/897)) +* Fix code running with `joblib` hangs ([ClearML GitHub issue #1009](https://github.com/clearml/clearml/issues/1009)) +* Fix comment for storage scheme `gs://` ([ClearML GitHub issue #986](https://github.com/clearml/clearml/issues/986)) +* Fix typo "Categories per column" ([ClearML GitHub PR #1021](https://github.com/clearml/clearml/pull/1021)) * Fix downloading artifacts from GCP when the download URI includes unsafe characters * Fix pipeline step cache is not cleared when the only change to the step is that the docker image changed * Fix `Task.report_text()` sometimes reporting to an incorrect task when multiple tasks run simultaneously diff --git a/docs/release_notes/sdk/open_source/ver_1_12.md b/docs/release_notes/sdk/open_source/ver_1_12.md index 09351dee..0a425c91 100644 --- a/docs/release_notes/sdk/open_source/ver_1_12.md +++ b/docs/release_notes/sdk/open_source/ver_1_12.md @@ -9,7 +9,7 @@ title: Version 1.12 the Pipeline DAG at runtime (as opposed to adhering to the existing structure stored on the task when running locally) **Bug Fixes** -* Fix using `OutputModel` reporting and other methods fail if `OutputModel.update_weights()` is not called before that ([ClearML GitHub issue #1078](https://github.com/allegroai/clearml/issues/1078)) +* Fix using `OutputModel` reporting and other methods fail if `OutputModel.update_weights()` is not called before that ([ClearML GitHub issue #1078](https://github.com/clearml/clearml/issues/1078)) * Fix hash for Pandas objects artifacts * Fix Hydra/OmegaConf `--overrides` support * Fix Pipeline metrics not forwarded to pipeline controller at the end of a pipeline step @@ -17,32 +17,32 @@ the Pipeline DAG at runtime (as opposed to adhering to the existing structure st ### ClearML 1.12.1 **New Features and Improvements** -* Raise error if dataset name is empty ([ClearML GitHub PR #1083](https://github.com/allegroai/clearml/pull/1083)) +* Raise error if dataset name is empty ([ClearML GitHub PR #1083](https://github.com/clearml/clearml/pull/1083)) * Add support for `spawn` start method for Python `multiprocess`. This should help circumvent issues like [this](https://github.com/python/cpython/issues/84559). -**Bug Fixes** -* Fix S3 uploads fail with `LazyEvalWrapper` type error ([ClearML GitHub issue #1081](https://github.com/allegroai/clearml/issues/1081)) +**Bug Fix** +* Fix S3 uploads fail with `LazyEvalWrapper` type error ([ClearML GitHub issue #1081](https://github.com/clearml/clearml/issues/1081)) ### ClearML 1.12.0 :::info BREAKING CHANGES -As a result of fixing [issue #1051](https://github.com/allegroai/clearml/issues/1051) and similar issues with retrieving +As a result of fixing [issue #1051](https://github.com/clearml/clearml/issues/1051) and similar issues with retrieving task data/models/artifacts/samples stored in GCS, we introduced some breaking changes. To access resources registered to GCS from ClearML SDK versions 1.11.0 to 1.11.1, see -the instructions [here](https://github.com/allegroai/clearml/tree/master/docs/errata_breaking_change_gcs_sdk_1_11_x.md). +the instructions [here](https://github.com/clearml/clearml/tree/master/docs/errata_breaking_change_gcs_sdk_1_11_x.md). ::: **New Features and Improvements** -* Add `include_archive` parameter to `Dataset.list_datasets()`: include archived datasets in list ([ClearML GitHub issue #1067](https://github.com/allegroai/clearml/issues/1067)) +* Add `include_archive` parameter to `Dataset.list_datasets()`: include archived datasets in list ([ClearML GitHub issue #1067](https://github.com/clearml/clearml/issues/1067)) * Add support to specify the multipart chunk size and threshold using the `aws.boto3.multipart_chunksize` and -`aws.boto3.multipart_threshold` configuration options in the clearml.conf ([ClearML GitHub issue #1058](https://github.com/allegroai/clearml/issues/1058)) +`aws.boto3.multipart_threshold` configuration options in the clearml.conf ([ClearML GitHub issue #1058](https://github.com/clearml/clearml/issues/1058)) * Add `PipelineController.get_pipeline()` for retrieving previously run pipelines. **Bug Fixes** -* Fix AWS driver issues ([ClearML GitHub PR #1000](https://github.com/allegroai/clearml/pull/1000)): +* Fix AWS driver issues ([ClearML GitHub PR #1000](https://github.com/clearml/clearml/pull/1000)): * Fix credential authentication failure when attempting to use token * Fix instantiation within VPC without AvailabilityZones -* Fix `continue_last_task=0` is ignored in pipelines run with `retry_on_failure` ([ClearML GitHub issue #1054](https://github.com/allegroai/clearml/issues/1054)) +* Fix `continue_last_task=0` is ignored in pipelines run with `retry_on_failure` ([ClearML GitHub issue #1054](https://github.com/clearml/clearml/issues/1054)) * Fix `Task.connect_configuration()` doesn't handle dictionaries with special characters * Fix pipeline steps created with `PipelineDecorator` aren't cached * Fix `Task.get_by_name()` doesn't return the most recent task when multiple tasks have same name diff --git a/docs/release_notes/sdk/open_source/ver_1_13.md b/docs/release_notes/sdk/open_source/ver_1_13.md index 954d2c0b..0994ff93 100644 --- a/docs/release_notes/sdk/open_source/ver_1_13.md +++ b/docs/release_notes/sdk/open_source/ver_1_13.md @@ -6,27 +6,27 @@ title: Version 1.13 **New Features and Improvements** -* Support parallel dataset verification ([ClearML GitHub issue #1130](https://github.com/allegroai/clearml/issues/1130)) -* Support `lightgbm` model loading from a string ([ClearML GitHub issue #1135](https://github.com/allegroai/clearml/issues/1135)) +* Support parallel dataset verification ([ClearML GitHub issue #1130](https://github.com/clearml/clearml/issues/1130)) +* Support `lightgbm` model loading from a string ([ClearML GitHub issue #1135](https://github.com/clearml/clearml/issues/1135)) * Add support for Hydra command-line syntax for modifying `omegaconf` * Add support for setting `output_uri` in pipeline decorators and functions * Add more visibility when overriding `jsonargparse` arguments * Use `StorageManager` cache when downloading models * Support parsing GS credentials as a JSON string if they do not point to a JSON file * Support ignoring `default_output_uri` on remote runs when `Task.init(output_uri=False)` was specified and the backend task data has no `output_uri` specified -* Add configuration files logging [example](https://github.com/allegroai/clearml/blob/e6f1cc8a5c65f7007cf6452745d09795e776a548/examples/reporting/config_files.py) +* Add configuration files logging [example](https://github.com/clearml/clearml/blob/e6f1cc8a5c65f7007cf6452745d09795e776a548/examples/reporting/config_files.py) * Support raising `LoginError` when initializing -* Add Hugging Face Transformers example ([ClearML GitHub PR #1146](https://github.com/allegroai/clearml/pull/1146)) +* Add Hugging Face Transformers example ([ClearML GitHub PR #1146](https://github.com/clearml/clearml/pull/1146)) * Improve docstrings for tag filters -* Add a security policy file to the repository ([ClearML GitHub issue #1148](https://github.com/allegroai/clearml/issues/1148)) +* Add a security policy file to the repository ([ClearML GitHub issue #1148](https://github.com/clearml/clearml/issues/1148)) **Bug Fixes** -* Fix Google Storage subdir path in bucket URL breaks validation ([ClearML GitHub PR #1117](https://github.com/allegroai/clearml/pull/1117)) -* Fix jsonschema `DeprecationWarning` in newer versions ([ClearML GitHub PR #1128](https://github.com/allegroai/clearml/pull/1128)) -* Fix `task.set_script(diff="")` does not clear the uncommitted changes ([ClearML GitHub issue #1106](https://github.com/allegroai/clearml/issues/1106)) -* Fix parallel dataset verification fails on older Python versions ([ClearML GitHub issue #1144](https://github.com/allegroai/clearml/issues/1144)) -* Fix `attrs.__version__` deprecation warning ([ClearML GitHub issue #1145](https://github.com/allegroai/clearml/issues/1145)) +* Fix Google Storage subdir path in bucket URL breaks validation ([ClearML GitHub PR #1117](https://github.com/clearml/clearml/pull/1117)) +* Fix jsonschema `DeprecationWarning` in newer versions ([ClearML GitHub PR #1128](https://github.com/clearml/clearml/pull/1128)) +* Fix `task.set_script(diff="")` does not clear the uncommitted changes ([ClearML GitHub issue #1106](https://github.com/clearml/clearml/issues/1106)) +* Fix parallel dataset verification fails on older Python versions ([ClearML GitHub issue #1144](https://github.com/clearml/clearml/issues/1144)) +* Fix `attrs.__version__` deprecation warning ([ClearML GitHub issue #1145](https://github.com/clearml/clearml/issues/1145)) * Fix `Task.get_parameters_as_dict(cast=True)` raises a YAML parser error * Fix potential threading issues when setting `self.lock` to `None` * Fix pipeline version is not displayed in the table view and version list @@ -41,21 +41,21 @@ title: Version 1.13 ### ClearML 1.13.1 **Bug Fixes** -* Fix Hydra overrides integration ([ClearML GitHub issue #1120](https://github.com/allegroai/clearml/issues/1120)) +* Fix Hydra overrides integration ([ClearML GitHub issue #1120](https://github.com/clearml/clearml/issues/1120)) * Fix GPU memory used reports 0 when memory can not be queried per process (edge case) ### ClearML 1.13.0 **New Features** -* Add support for recursive list, dict, and tuple ref parsing for `PipelineController.add step()` parameter overrides ([ClearML GitHub issue #1089](https://github.com/allegroai/clearml/issues/1089)) +* Add support for recursive list, dict, and tuple ref parsing for `PipelineController.add step()` parameter overrides ([ClearML GitHub issue #1089](https://github.com/clearml/clearml/issues/1089)) * Update PyNVML to the latest NVIDIA version for better GPU monitoring * Add `force_single_script_file` argument to `Task.create()` to avoid git repository auto detection * Use `os.register_at_fork` instead of monkey patching fork for `python>3.6` * Add support to programmatically archive and unarchive models from the model registry using the `Model.archive()` and -`Model.unarchive()` methods ([ClearML GitHub issue #1096](https://github.com/allegroai/clearml/issues/1096)) +`Model.unarchive()` methods ([ClearML GitHub issue #1096](https://github.com/clearml/clearml/issues/1096)) **Bug Fixes** -* Fix model reporting in TensorFlow 2.13 does not work properly ([ClearML GitHub issue #1112](https://github.com/allegroai/clearml/issues/1112)) +* Fix model reporting in TensorFlow 2.13 does not work properly ([ClearML GitHub issue #1112](https://github.com/clearml/clearml/issues/1112)) * Fix GPU memory used reports 0 when memory can not be queried per process * Fix FastAI binding not reporting scalars if TensorBoard is installed * Fix JSON serialization error does not raise exception diff --git a/docs/release_notes/sdk/open_source/ver_1_14.md b/docs/release_notes/sdk/open_source/ver_1_14.md index e8460815..1d3d52be 100644 --- a/docs/release_notes/sdk/open_source/ver_1_14.md +++ b/docs/release_notes/sdk/open_source/ver_1_14.md @@ -5,7 +5,7 @@ title: Version 1.14 ### ClearML 1.14.4 **Bug Fixes** -* Fix AWS S3 configuration `secure` property not forwarded in `StorageHelper` ([ClearML GitHub PR #1205](https://github.com/allegroai/clearml/pull/1205)) +* Fix AWS S3 configuration `secure` property not forwarded in `StorageHelper` ([ClearML GitHub PR #1205](https://github.com/clearml/clearml/pull/1205)) * Fix `NVIDIA_VISIBLE_DEVICES=all` env var value will result in no GPU metrics being reported * Fix setting `output_uri` when an AWS S3 config section with `secure=false` exists raises an error * Fix `CacheManager` attempts to clear cache when file limit has not been reached resulting in slow unnecessary checks @@ -14,7 +14,7 @@ title: Version 1.14 **New Features and Bug Fixes** * Add hash check for pickle files (resolves [CVE-2024-24590](https://github.com/advisories/GHSA-cpcw-9h9m-wqw9)) -* Fix `clearml-task` relative paths calculation when `--cwd`, `--folder`, and `--script` are provided ([ClearML GitHub issue #1160](https://github.com/allegroai/clearml/issues/1160)) +* Fix `clearml-task` relative paths calculation when `--cwd`, `--folder`, and `--script` are provided ([ClearML GitHub issue #1160](https://github.com/clearml/clearml/issues/1160)) * Fix regression causing an error when `secure` is provided in AWS S3 bucket settings ### ClearML 1.14.2 @@ -27,10 +27,10 @@ title: Version 1.14 disable overriding values when running remotely * Add support for setting a custom certificate path using the `CLEARML_API_HOST_VERIFY_CERT` environment variable (instead of just allowing the user to disable verification) -* Add dataset reporting example ([ClearML GitHub PR #1180](https://github.com/allegroai/clearml/pull/1180)) +* Add dataset reporting example ([ClearML GitHub PR #1180](https://github.com/clearml/clearml/pull/1180)) **Bug Fixes** -* Fix missing component callbacks on multiple step calls ([ClearML GitHub PR #1195](https://github.com/allegroai/clearml/pull/1195)) +* Fix missing component callbacks on multiple step calls ([ClearML GitHub PR #1195](https://github.com/clearml/clearml/pull/1195)) * Fix unsafe usage of `tempfile.mktemp` * Fix potential path traversal on file download ([CVE-2024-24591](https://github.com/advisories/GHSA-m95h-p4gg-wfw3)) * Fix Python 3.12 support by not using `distutils` @@ -41,12 +41,12 @@ title: Version 1.14 ### ClearML 1.14.1 -**Bug Fixes** +**Bug Fix** * Fix created pipelines do not appear in the UI pipelines section ### ClearML 1.14.0 **New Features and Improvements** -* Add support for decorated pipeline steps ([ClearML GitHub issue #1154](https://github.com/allegroai/clearml/issues/1154)) +* Add support for decorated pipeline steps ([ClearML GitHub issue #1154](https://github.com/clearml/clearml/issues/1154)) * Improve `torch.distributed` behavior and auto-detect Huggingface accelerate distributed execution * Improve `jsonargparse` integration: `allow_config_file_override_from_ui` argument added for enabling/disabling overriding configuration file entries @@ -60,10 +60,10 @@ and can be imported globally instead * Add tabular data multi-stage pipeline process example **Bug Fixes** -* Fix `langchain` integration ([ClearML GitHub issues #1124](https://github.com/allegroai/clearml/issues/1124) and [ClearML GitHub issue #1126](https://github.com/allegroai/clearml/issues/1126)) -* Fix using `target_project` with `TaskScheduler.add_task()` corrupts project if used with pipelines ([ClearML GitHub issue #1137](https://github.com/allegroai/clearml/issues/1137)) -* Fix `PipelineController.add_function_step()` fails when adding custom decorated step ([ClearML GitHub issue #1154](https://github.com/allegroai/clearml/issues/1154)) -* Fix `jsonargparse` binding does not capture parameters before `Task.init()` is called ([ClearML GitHub issue #1164](https://github.com/allegroai/clearml/issues/1164)) +* Fix `langchain` integration ([ClearML GitHub issues #1124](https://github.com/clearml/clearml/issues/1124) and [ClearML GitHub issue #1126](https://github.com/clearml/clearml/issues/1126)) +* Fix using `target_project` with `TaskScheduler.add_task()` corrupts project if used with pipelines ([ClearML GitHub issue #1137](https://github.com/clearml/clearml/issues/1137)) +* Fix `PipelineController.add_function_step()` fails when adding custom decorated step ([ClearML GitHub issue #1154](https://github.com/clearml/clearml/issues/1154)) +* Fix `jsonargparse` binding does not capture parameters before `Task.init()` is called ([ClearML GitHub issue #1164](https://github.com/clearml/clearml/issues/1164)) * Fix invalid `jsonargparse` arguments should be deleted * Fix handling of appended parameters to Hydra defaults list * Fix `Task.set_repo()` and `Task.set_packages()` do not wait for automatic asynchronous repository detection diff --git a/docs/release_notes/sdk/open_source/ver_1_15.md b/docs/release_notes/sdk/open_source/ver_1_15.md index 5517cdd8..2527b5bf 100644 --- a/docs/release_notes/sdk/open_source/ver_1_15.md +++ b/docs/release_notes/sdk/open_source/ver_1_15.md @@ -5,26 +5,26 @@ title: Version 1.15 ### ClearML 1.15.1 **Bug Fixes** -* Fix autoscaler should recheck that the worker is still idle before shutting it down ([ClearML GitHub issue #1202](https://github.com/allegroai/clearml/issues/1202)) +* Fix autoscaler should recheck that the worker is still idle before shutting it down ([ClearML GitHub issue #1202](https://github.com/clearml/clearml/issues/1202)) * Fix resource monitor fails to get GPU stats in some edge cases ### ClearML 1.15.0 **New Features** -* Add draft option to pipeline steps ([ClearML GitHub PR #1226](https://github.com/allegroai/clearml/pull/1226)) -* Add support for custom working directory for pipelines ([ClearML GitHub issue #1194](https://github.com/allegroai/clearml/issues/1194)) +* Add draft option to pipeline steps ([ClearML GitHub PR #1226](https://github.com/clearml/clearml/pull/1226)) +* Add support for custom working directory for pipelines ([ClearML GitHub issue #1194](https://github.com/clearml/clearml/issues/1194)) * Add `Task.get_requirements()` method that returns the task's requirements * Allow controlling the number of threads used by `StorageManager.download_folder()` using the `max_workers` argument * Update examples dependencies * Improve auto populate in `Task.init()` **Bug Fixes** -* Fix UTF-8 script code encoding issue ([ClearML GitHub issue #1207](https://github.com/allegroai/clearml/issues/1207)) -* Fix Colab docs ([ClearML GitHub issue #1204](https://github.com/allegroai/clearml/issues/1204)) -* Fix metrics reporting with `OutputModel` while in offline mode results in an error ([ClearML GitHub issue #1172](https://github.com/allegroai/clearml/issues/1172)) -* Fix task running in Google Colab doesn't properly get the notebook diff ([ClearML GitHub issue #1204](https://github.com/allegroai/clearml/issues/1204)) -* Fix hydra binds break in offline mode ([ClearML GitHub issue #1215](https://github.com/allegroai/clearml/issues/1215)) -* Fix HPO crashes when optimizing for single value scalars ([ClearML GitHub issue #1221](https://github.com/allegroai/clearml/issues/1221)) +* Fix UTF-8 script code encoding issue ([ClearML GitHub issue #1207](https://github.com/clearml/clearml/issues/1207)) +* Fix Colab docs ([ClearML GitHub issue #1204](https://github.com/clearml/clearml/issues/1204)) +* Fix metrics reporting with `OutputModel` while in offline mode results in an error ([ClearML GitHub issue #1172](https://github.com/clearml/clearml/issues/1172)) +* Fix task running in Google Colab doesn't properly get the notebook diff ([ClearML GitHub issue #1204](https://github.com/clearml/clearml/issues/1204)) +* Fix hydra binds break in offline mode ([ClearML GitHub issue #1215](https://github.com/clearml/clearml/issues/1215)) +* Fix HPO crashes when optimizing for single value scalars ([ClearML GitHub issue #1221](https://github.com/clearml/clearml/issues/1221)) * Fix GPU info such as `gpu_memory` and `gpu_type` is not being collected in some cases * Fix `clearml-data` CLI tool moves non-dataset tasks to a `.dataset` project when the respective task is not a dataset * Fix pandas `DataFrame` artifacts with hierarchical indices get mangled by the CSV round-trip diff --git a/docs/release_notes/sdk/open_source/ver_1_16.md b/docs/release_notes/sdk/open_source/ver_1_16.md index 005d5c4d..577e23cc 100644 --- a/docs/release_notes/sdk/open_source/ver_1_16.md +++ b/docs/release_notes/sdk/open_source/ver_1_16.md @@ -12,7 +12,7 @@ uploading artifacts * Add `Task.request_external_endpoint()` to request external endpoints on supported backends **Bug Fixes** -* Fix `clearml-data search` CLI error if dataset version is `None` ([ClearML GitHub issue #1329](https://github.com/allegroai/clearml/issues/1321)) +* Fix `clearml-data search` CLI error if dataset version is `None` ([ClearML GitHub issue #1329](https://github.com/clearml/clearml/issues/1321)) * Fix `maxfile` attribute dropped in `psutil` v6.0.0 causing an error to be printed * Fix `api.auth.req_token_expiration_sec` configuration option to `api.auth.request_token_expiration_sec` (matches agent setting, keep backwards compatibility) * Bump six version due to Python 3.12 issue with `six.moves` @@ -32,8 +32,8 @@ configuration option) ### ClearML 1.16.3 **New Features and Improvements** -* Add `--tags` option to `clearml-task` ([ClearML GitHub issue #1284](https://github.com/allegroai/clearml/issues/1284)) -* Add `retries` parameter to `StorageManager.upload_folder()` ([ClearML GitHub issue #1305](https://github.com/allegroai/clearml/issues/1305)) +* Add `--tags` option to `clearml-task` ([ClearML GitHub issue #1284](https://github.com/clearml/clearml/issues/1284)) +* Add `retries` parameter to `StorageManager.upload_folder()` ([ClearML GitHub issue #1305](https://github.com/clearml/clearml/issues/1305)) * Add `clearml-task` and `CreateAndPopulate` support for bash scripts, ipynb, and python modules (requires `clearml-agent v1.9+`) * Add support for HTTP file upload progress reporting * Add `CLEARML_MULTI_NODE_SINGLE_TASK` (values -1, 0, 1, 2) for easier multi-node single Task workloads @@ -41,8 +41,8 @@ configuration option) * Change `Model.task` property to return connected task **Bug Fixes** -* Fix Kerastuner framework and examples ([ClearML GitHub issue #1279](https://github.com/allegroai/clearml/issues/1279)) -* Fix scalar logging bug with Fire ([ClearML GitHub issue #1300](https://github.com/allegroai/clearml/issues/1300)) +* Fix Kerastuner framework and examples ([ClearML GitHub issue #1279](https://github.com/clearml/clearml/issues/1279)) +* Fix scalar logging bug with Fire ([ClearML GitHub issue #1300](https://github.com/clearml/clearml/issues/1300)) * Fix support passing folder to `Task.get_script_info()` to get the git info * Fix `Task.launch_multi_node()` to enforce the parent of sub-tasks to be the master node 0 task * Fix tensorboard numpy 2.0 incompatibility breaks binding @@ -59,14 +59,14 @@ configuration option) ### ClearML 1.16.2 **New Features and Improvements** -* Make dataset preview optional ([ClearML GitHub issue #1227](https://github.com/allegroai/clearml/issues/1227)) +* Make dataset preview optional ([ClearML GitHub issue #1227](https://github.com/clearml/clearml/issues/1227)) * Add `api.public_ip_ping` (default: `8.8.8.8`) and `api.public_ip_service_urls` (default: `["api.ipify.org";, "ident.me";]`) configuration settings to detect public IP and network interface **Bug Fixes** -* Fix python-fire integration ([ClearML GitHub issue #1268](https://github.com/allegroai/clearml/issues/1268)) -* Fix path substitution for `file://` URIs (ClearML GitHub issues [#1217](https://github.com/allegroai/clearml/issues/1217) -and [#1233](https://github.com/allegroai/clearml/issues/1233)) +* Fix python-fire integration ([ClearML GitHub issue #1268](https://github.com/clearml/clearml/issues/1268)) +* Fix path substitution for `file://` URIs (ClearML GitHub issues [#1217](https://github.com/clearml/clearml/issues/1217) +and [#1233](https://github.com/clearml/clearml/issues/1233)) * Fix numpy 2.0 compatibility (`np.NINF` removed) * Fix no need to recreate reporter if forking and reporting in subprocess * Fix forked detection mechanism @@ -89,9 +89,9 @@ and `sdk.development.worker.max_wait_for_first_iteration_to_start_sec` configura * Add Python 3.12 support **Bug Fixes** -* Fix pytorch-lightning patches ([ClearML GitHub issue #1249](https://github.com/allegroai/clearml/issues/1249)) -* Fix parameter overrides are converted to string when using HPO ([ClearML GitHub issue #975](https://github.com/allegroai/clearml/issues/975)) -* Fix FastAI performance ([ClearML GitHub issue #1234](https://github.com/allegroai/clearml/issues/1234)) +* Fix pytorch-lightning patches ([ClearML GitHub issue #1249](https://github.com/clearml/clearml/issues/1249)) +* Fix parameter overrides are converted to string when using HPO ([ClearML GitHub issue #975](https://github.com/clearml/clearml/issues/975)) +* Fix FastAI performance ([ClearML GitHub issue #1234](https://github.com/clearml/clearml/issues/1234)) * Fix MIG GPU support * Fix AMD GPU metrics collection * Fix Jupyter password might not be used in some protected JupyterLab instances diff --git a/docs/release_notes/sdk/open_source/ver_1_17.md b/docs/release_notes/sdk/open_source/ver_1_17.md index f181a7fe..dd5a58df 100644 --- a/docs/release_notes/sdk/open_source/ver_1_17.md +++ b/docs/release_notes/sdk/open_source/ver_1_17.md @@ -15,7 +15,7 @@ title: Version 1.17 ### ClearML 1.17.0 **New Features** -* Add programmatic pipeline clone using `PipelineController.create()` and `PipelineController.clone()` ([ClearML GitHub issue #1353](https://github.com/allegroai/clearml/issues/1353)) +* Add programmatic pipeline clone using `PipelineController.create()` and `PipelineController.clone()` ([ClearML GitHub issue #1353](https://github.com/clearml/clearml/issues/1353)) * Add Python 3.13 support * Add support for local imports in pipeline steps * Add support for the ClearML HTTP router using `Task.get_http_router()` @@ -23,7 +23,7 @@ title: Version 1.17 * Update `pyjwt` version **Bug Fixes** -* Fix slow handling of cached files with large `cache_file_limit` ([ClearML GitHub issue #1352](https://github.com/allegroai/clearml/issues/1352)) +* Fix slow handling of cached files with large `cache_file_limit` ([ClearML GitHub issue #1352](https://github.com/clearml/clearml/issues/1352)) * Fix pipeline crash when repository is set to a directory * Fix token is not renewed when using an external token (`CLEARML_AUTH_TOKEN`) and no credentials * Fix external files don't download from parent datasets if they have been modified/removed in the child dataset \ No newline at end of file diff --git a/docs/release_notes/sdk/open_source/ver_1_18.md b/docs/release_notes/sdk/open_source/ver_1_18.md new file mode 100644 index 00000000..51b965bd --- /dev/null +++ b/docs/release_notes/sdk/open_source/ver_1_18.md @@ -0,0 +1,17 @@ +--- +title: Version 1.18 +--- + +### ClearML 1.18.0 + +**New Features** +* Add support for IP overriding with `CLEARML_AGENT_HOST_IP` environment variable +* Add port mapping support (requires `clearml-agent` v2.0 and up) + +**Bug Fixes** +* Fix syntax warnings with Python 3.12 ([ClearML GitHub issue #1318](https://github.com/clearml/clearml/issues/1318)) +* Fix adding dataset folder with modified files will upload all files instead of just the modified ones +* Fix detecting git branch in detached HEAD state +* Fix issue with A100 GPU monitoring +* Fix single series labels shown incorrectly in plotly histogram, + diff --git a/docs/release_notes/sdk/open_source/ver_1_2.md b/docs/release_notes/sdk/open_source/ver_1_2.md index 545e701a..3730182a 100644 --- a/docs/release_notes/sdk/open_source/ver_1_2.md +++ b/docs/release_notes/sdk/open_source/ver_1_2.md @@ -4,40 +4,40 @@ title: Version 1.2 ### ClearML 1.2.1 -**Bug Fixes** +**Bug Fix** -- Fix HTTP download fails constructing URL ([ClearML GitHub issue #593](https://github.com/allegroai/clearml/issues/593)) +- Fix HTTP download fails constructing URL ([ClearML GitHub issue #593](https://github.com/clearml/clearml/issues/593)) ### ClearML 1.2.0 **Features** -- Add fastai v2 support ([ClearML GitHub PR #571](https://github.com/allegroai/clearml/pull/571)) -- Add catboost support ([ClearML GitHub PR #542](https://github.com/allegroai/clearml/pull/542)) -- Add Python Fire support ([ClearML GitHub PR #550](https://github.com/allegroai/clearml/pull/550)) -- Add new Azure Storage driver support ([ClearML GitHub PR #548](https://github.com/allegroai/clearml/pull/548)) -- Add requirements file support in `Task.add_requirements` ([ClearML GitHub PR #575](https://github.com/allegroai/clearml/pull/575)) -- Allow overriding `auto_delete_file` in `Task.update_output_model()` ([ClearML GitHub issue #554](https://github.com/allegroai/clearml/issues/554)) +- Add fastai v2 support ([ClearML GitHub PR #571](https://github.com/clearml/clearml/pull/571)) +- Add catboost support ([ClearML GitHub PR #542](https://github.com/clearml/clearml/pull/542)) +- Add Python Fire support ([ClearML GitHub PR #550](https://github.com/clearml/clearml/pull/550)) +- Add new Azure Storage driver support ([ClearML GitHub PR #548](https://github.com/clearml/clearml/pull/548)) +- Add requirements file support in `Task.add_requirements` ([ClearML GitHub PR #575](https://github.com/clearml/clearml/pull/575)) +- Allow overriding `auto_delete_file` in `Task.update_output_model()` ([ClearML GitHub issue #554](https://github.com/clearml/clearml/issues/554)) - Support `artifact_object` empty string - Add `skip_zero_size_check` to `StorageManager.download_folder()` -- Add support for extra HTTP retry codes (see [here](https://github.com/allegroai/clearml/blob/2c916181b90c784fe0bd267cd67ea915e53e36e4/clearml/backend_api/config/default/api.conf#L29) or use `CLEARML_API_EXTRA_RETRY_CODES`) +- Add support for extra HTTP retry codes (see [here](https://github.com/clearml/clearml/blob/2c916181b90c784fe0bd267cd67ea915e53e36e4/clearml/backend_api/config/default/api.conf#L29) or use `CLEARML_API_EXTRA_RETRY_CODES`) - Add `Task.get_parameters()` cast back to original type - Add callback support to `Task.delete()` - Add autoscaler CPU-only support - Add AWS autoscaler IAM instance profile support - Update examples - - Edit HTML reporting examples ([ClearML GitHub PR #546](https://github.com/allegroai/clearml/pull/546)) - - Add model reporting examples ([ClearML GitHub PR #553](https://github.com/allegroai/clearml/pull/553)) + - Edit HTML reporting examples ([ClearML GitHub PR #546](https://github.com/clearml/clearml/pull/546)) + - Add model reporting examples ([ClearML GitHub PR #553](https://github.com/clearml/clearml/pull/553)) **Bug Fixes** -- Fix `nargs="?"` without type does not properly cast the default value ([ClearML GitHub issue #531](https://github.com/allegroai/clearml/issues/531)) -- Fix using invalid configurations ([ClearML GitHub issue #544](https://github.com/allegroai/clearml/issues/544)) -- Fix extra_layout not passed to report_matrix ([ClearML GitHub issue #559](https://github.com/allegroai/clearml/issues/559)) -- Fix group arguments in click ([ClearML GitHub PR #561](https://github.com/allegroai/clearml/pull/561)) -- Fix no warning when failing to patch argparse ([ClearML GitHub PR #576](https://github.com/allegroai/clearml/pull/576)) -- Fix crash in `Dataset.upload()` when there is nothing to upload ([ClearML GitHub PR #579](https://github.com/allegroai/clearml/pull/579)) -- Fix requirements, refactor and reformat examples ([ClearML GitHub PRs #567](https://github.com/allegroai/clearml/pull/567), [#573](https://github.com/allegroai/clearml/pull/573), [#582](https://github.com/allegroai/clearml/pull/582)) +- Fix `nargs="?"` without type does not properly cast the default value ([ClearML GitHub issue #531](https://github.com/clearml/clearml/issues/531)) +- Fix using invalid configurations ([ClearML GitHub issue #544](https://github.com/clearml/clearml/issues/544)) +- Fix extra_layout not passed to report_matrix ([ClearML GitHub issue #559](https://github.com/clearml/clearml/issues/559)) +- Fix group arguments in click ([ClearML GitHub PR #561](https://github.com/clearml/clearml/pull/561)) +- Fix no warning when failing to patch argparse ([ClearML GitHub PR #576](https://github.com/clearml/clearml/pull/576)) +- Fix crash in `Dataset.upload()` when there is nothing to upload ([ClearML GitHub PR #579](https://github.com/clearml/clearml/pull/579)) +- Fix requirements, refactor and reformat examples ([ClearML GitHub PRs #567](https://github.com/clearml/clearml/pull/567), [#573](https://github.com/clearml/clearml/pull/573), [#582](https://github.com/clearml/clearml/pull/582)) - Auto-scaler - Change confusing log message - Fix AWS tags support @@ -52,5 +52,5 @@ title: Version 1.2 - Fix `clearml-init` changing web host after pasting full credentials - Fix fileserver upload does not support path in URL - Fix crash on semaphore acquire error -- Fix docs and docstrings ([ClearML GitHub PRs #558](https://github.com/allegroai/clearml/pull/558), [#560](https://github.com/allegroai/clearml/pull/560)) +- Fix docs and docstrings ([ClearML GitHub PRs #558](https://github.com/clearml/clearml/pull/558), [#560](https://github.com/clearml/clearml/pull/560)) diff --git a/docs/release_notes/sdk/open_source/ver_1_3.md b/docs/release_notes/sdk/open_source/ver_1_3.md index 60377735..453a3eef 100644 --- a/docs/release_notes/sdk/open_source/ver_1_3.md +++ b/docs/release_notes/sdk/open_source/ver_1_3.md @@ -6,16 +6,16 @@ title: Version 1.3 **New Features and Improvements** -* Add support for setting reported values for `NaN` and `Inf` ([ClearML GitHub issue #604](https://github.com/allegroai/clearml/issues/604)) +* Add support for setting reported values for `NaN` and `Inf` ([ClearML GitHub issue #604](https://github.com/clearml/clearml/issues/604)) * Add reserved OS environments warning -* Add git credentials to colab example ([ClearML GitHub PR #621](https://github.com/allegroai/clearml/pull/621)) -* Add jsonargparse support ([ClearML GitHub issue #403](https://github.com/allegroai/clearml/issues/403)) +* Add git credentials to colab example ([ClearML GitHub PR #621](https://github.com/clearml/clearml/pull/621)) +* Add jsonargparse support ([ClearML GitHub issue #403](https://github.com/clearml/clearml/issues/403)) * Update autokeras example **Bug Fixes** -* Fix sub-project separators are incorrectly quoted in generated URLs ([ClearML GitHub PR #584](https://github.com/allegroai/clearml/pull/584)) -* Revert Optuna deprecation fix ([ClearML GitHub PR #613](https://github.com/allegroai/clearml/pull/613)) +* Fix sub-project separators are incorrectly quoted in generated URLs ([ClearML GitHub PR #584](https://github.com/clearml/clearml/pull/584)) +* Revert Optuna deprecation fix ([ClearML GitHub PR #613](https://github.com/clearml/clearml/pull/613)) * Fix HPO randomly aborts running tasks before the time limit * Fix cloud driver overwrites `agent.extra_docker_arguments` * Fix Pipeline Controller auto-magic framework connect @@ -29,9 +29,9 @@ title: Version 1.3 **Bug Fixes** -* Update Slack SDK requirement ([ClearML GitHub issue #597](https://github.com/allegroai/clearml/issues/597)) -* Fix fork after `task.close()` is called ([ClearML GitHub issue #605](https://github.com/allegroai/clearml/issues/605)) -* Fix Azure storage upload ([ClearML GitHub issue #598](https://github.com/allegroai/clearml/issues/598)) +* Update Slack SDK requirement ([ClearML GitHub issue #597](https://github.com/clearml/clearml/issues/597)) +* Fix fork after `task.close()` is called ([ClearML GitHub issue #605](https://github.com/clearml/clearml/issues/605)) +* Fix Azure storage upload ([ClearML GitHub issue #598](https://github.com/clearml/clearml/issues/598)) * Fix offline mode crash * Fix task delete response not checked * Fix pipeline controller kwargs with list @@ -55,6 +55,6 @@ title: Version 1.3 **Bug Fixes** -* Fix failed catboost bind on GPU ([ClearML GitHub issue #592](https://github.com/allegroai/clearml/issues/592)) +* Fix failed catboost bind on GPU ([ClearML GitHub issue #592](https://github.com/clearml/clearml/issues/592)) * Fix Optuna `n_jobs` deprecation warning * Fix invalid method called on `delete()` error diff --git a/docs/release_notes/sdk/open_source/ver_1_4.md b/docs/release_notes/sdk/open_source/ver_1_4.md index 674ed8dd..0df23ad0 100644 --- a/docs/release_notes/sdk/open_source/ver_1_4.md +++ b/docs/release_notes/sdk/open_source/ver_1_4.md @@ -4,17 +4,17 @@ title: Version 1.4 ### ClearML 1.4.1 -**Bug Fixes** -* Fix Process Pool hangs at exit ([ClearML GitHub issue #674](https://github.com/allegroai/clearml/issues/674)) +**Bug Fix** +* Fix Process Pool hangs at exit ([ClearML GitHub issue #674](https://github.com/clearml/clearml/issues/674)) ### ClearML 1.4.0 **New Features** -* Add OpenMMLab example ([ClearML GitHub issue #654](https://github.com/allegroai/clearml/issues/654)) -* Add support for saving artifacts with different formats ([ClearML GitHub issue #634](https://github.com/allegroai/clearml/issues/634)) -* Add support for setting reported values for `NaN` and `Inf` ([ClearML GitHub issue #604](https://github.com/allegroai/clearml/issues/604)) -* Support more than 500 results in `Task.get_tasks()` using the `fetch_only_first_page` argument ([ClearML GitHub issue #612](https://github.com/allegroai/clearml/issues/612)) -* Support links in `clearml-data` ([ClearML GitHub issue #585](https://github.com/allegroai/clearml/issues/585)) +* Add OpenMMLab example ([ClearML GitHub issue #654](https://github.com/clearml/clearml/issues/654)) +* Add support for saving artifacts with different formats ([ClearML GitHub issue #634](https://github.com/clearml/clearml/issues/634)) +* Add support for setting reported values for `NaN` and `Inf` ([ClearML GitHub issue #604](https://github.com/clearml/clearml/issues/604)) +* Support more than 500 results in `Task.get_tasks()` using the `fetch_only_first_page` argument ([ClearML GitHub issue #612](https://github.com/clearml/clearml/issues/612)) +* Support links in `clearml-data` ([ClearML GitHub issue #585](https://github.com/clearml/clearml/issues/585)) * Support deferred task initialization using `Task.init()` argument `deferred_init` (beta feature) * Support resuming experiments when importing an Offline session * Add `--import-offline-session` command line option to `clearml-task` @@ -28,15 +28,15 @@ title: Version 1.4 * Improve Dataset version table * Add warning to Dataset creation on current Task * Examples and documentation - * Add manual seaborn logging example ([ClearML GitHub PR #628](https://github.com/allegroai/clearml/pull/628)) + * Add manual seaborn logging example ([ClearML GitHub PR #628](https://github.com/clearml/clearml/pull/628)) * Change package author - * Change pipeline example to run locally ([ClearML GitHub PR #642](https://github.com/allegroai/clearml/pull/642)) - * Update PyTorch Lightning example for `pytorch-lightning>=v1.6.0` ([ClearML GitHub PR #650](https://github.com/allegroai/clearml/pull/650)) + * Change pipeline example to run locally ([ClearML GitHub PR #642](https://github.com/clearml/clearml/pull/642)) + * Update PyTorch Lightning example for `pytorch-lightning>=v1.6.0` ([ClearML GitHub PR #650](https://github.com/clearml/clearml/pull/650)) **Bug Fixes** -* Fix Keras model config serialization in `PatchKerasModelIO` ([ClearML GitHub issue #614](https://github.com/allegroai/clearml/issues/614)) -* Fix `task.get_parameters_as_dict(cast=True)` casts `False` to `True` ([ClearML GitHub PR #622](https://github.com/allegroai/clearml/pull/622)) -* Fix Fire integration is not compatible with typing library ([ClearML GitHub issue #610](https://github.com/allegroai/clearml/issues/610)) +* Fix Keras model config serialization in `PatchKerasModelIO` ([ClearML GitHub issue #614](https://github.com/clearml/clearml/issues/614)) +* Fix `task.get_parameters_as_dict(cast=True)` casts `False` to `True` ([ClearML GitHub PR #622](https://github.com/clearml/clearml/pull/622)) +* Fix Fire integration is not compatible with typing library ([ClearML GitHub issue #610](https://github.com/clearml/clearml/issues/610)) * Fix remote execution with `argparse` mutually exclusive groups raises "required" error even when no argument is required * Fix Hydra tasks never fail and are only set to completed (fix handling return code) * Fix `clearml-data` wildcard support diff --git a/docs/release_notes/sdk/open_source/ver_1_5.md b/docs/release_notes/sdk/open_source/ver_1_5.md index e336be8c..771589ad 100644 --- a/docs/release_notes/sdk/open_source/ver_1_5.md +++ b/docs/release_notes/sdk/open_source/ver_1_5.md @@ -5,19 +5,19 @@ title: Version 1.5 ### ClearML 1.5.0 **New Features and Improvements** -* Add support for single value metric reporting ClearML GitHub issue ([ClearML GitHub issue #400](https://github.com/allegroai/clearml/issues/400)) -* Add support for specifying parameter sections in `PipelineDecorator` ([ClearML GitHub issue #629](https://github.com/allegroai/clearml/issues/629)) +* Add support for single value metric reporting ClearML GitHub issue ([ClearML GitHub issue #400](https://github.com/clearml/clearml/issues/400)) +* Add support for specifying parameter sections in `PipelineDecorator` ([ClearML GitHub issue #629](https://github.com/clearml/clearml/issues/629)) * Add support for parallel uploads and downloads (upload / download and zip / unzip of artifacts) * Add support for specifying execution details (repository, branch, commit, packages, image) in `PipelineDecorator` * Bump PyJWT version due to "*Key confusion through non-blocklisted public key formats*" vulnerability * Add support for AWS Session Token (using boto3's `aws_session_token` argument) **Bug Fixes** -* Fix `Task.get_projects()` retrieves only the first 500 results ([ClearML GitHub issue #612](https://github.com/allegroai/clearml/issues/612)) -* Fix failure to delete artifacts stored in Azure ([ClearML GitHub issue #660](https://github.com/allegroai/clearml/issues/660)) -* Fix Process Pool hangs at exit ([ClearML GitHub issue #674](https://github.com/allegroai/clearml/issues/674)) -* Fix number of unpacked values when syncing a dataset ([ClearML GitHub issue #682](https://github.com/allegroai/clearml/issues/682)) -* Fix FastAI DeprecationWarning ([ClearML GitHub PR #683](https://github.com/allegroai/clearml/issues/683)) +* Fix `Task.get_projects()` retrieves only the first 500 results ([ClearML GitHub issue #612](https://github.com/clearml/clearml/issues/612)) +* Fix failure to delete artifacts stored in Azure ([ClearML GitHub issue #660](https://github.com/clearml/clearml/issues/660)) +* Fix Process Pool hangs at exit ([ClearML GitHub issue #674](https://github.com/clearml/clearml/issues/674)) +* Fix number of unpacked values when syncing a dataset ([ClearML GitHub issue #682](https://github.com/clearml/clearml/issues/682)) +* Fix FastAI DeprecationWarning ([ClearML GitHub PR #683](https://github.com/clearml/clearml/issues/683)) * Fix `StorageManager.download_folder()` crash * Fix pipelines can't handle `None` return value * Fix pre-existing pipeline raises an exception diff --git a/docs/release_notes/sdk/open_source/ver_1_6.md b/docs/release_notes/sdk/open_source/ver_1_6.md index 56c1e752..5c34baaf 100644 --- a/docs/release_notes/sdk/open_source/ver_1_6.md +++ b/docs/release_notes/sdk/open_source/ver_1_6.md @@ -10,7 +10,7 @@ title: Version 1.6 ### ClearML 1.6.3 **New Features and Improvements** -* Add option to specify an endpoint URL when creating S3 resource service ([ClearML GitHub issue #673](https://github.com/allegroai/clearml/issues/673)) +* Add option to specify an endpoint URL when creating S3 resource service ([ClearML GitHub issue #673](https://github.com/clearml/clearml/issues/673)) * Add support for providing `ExtraArgs` to boto3 when uploading files using the `sdk.aws.s3.extra_args` configuration option * Add support for Server API 2.20 * Add `Task.get_num_enqueued_tasks()` to get the number of tasks enqueued in a specific queue @@ -25,12 +25,12 @@ title: Version 1.6 * Add wild-card support in `clearml-data` **Bug Fixes** -* Fix dataset download ([ClearML GitHub issue #713](https://github.com/allegroai/clearml/issues/713)) -* Fix lock is not released after dataset cache is downloaded ([ClearML GitHub issue #671](https://github.com/allegroai/clearml/issues/671)) -* Fix deadlock might occur when using process pool large number processes ([ClearML GitHub issue #674](https://github.com/allegroai/clearml/issues/674)) -* Fix 'series' not appearing on UI when using `logger.report_table()` ([ClearML GitHub issue #684](https://github.com/allegroai/clearml/issues/684)) -* Fix `Task.init()` docstring to include behavior when executing remotely ([ClearML GitHub PR #737](https://github.com/allegroai/clearml/pull/737)) -* Fix `KeyError` when running remotely and no params were passed to click ([ClearML Agent GitHub issue #111](https://github.com/allegroai/clearml-agent/issues/111)) +* Fix dataset download ([ClearML GitHub issue #713](https://github.com/clearml/clearml/issues/713)) +* Fix lock is not released after dataset cache is downloaded ([ClearML GitHub issue #671](https://github.com/clearml/clearml/issues/671)) +* Fix deadlock might occur when using process pool large number processes ([ClearML GitHub issue #674](https://github.com/clearml/clearml/issues/674)) +* Fix 'series' not appearing on UI when using `logger.report_table()` ([ClearML GitHub issue #684](https://github.com/clearml/clearml/issues/684)) +* Fix `Task.init()` docstring to include behavior when executing remotely ([ClearML GitHub PR #737](https://github.com/clearml/clearml/pull/737)) +* Fix `KeyError` when running remotely and no params were passed to click ([ClearML Agent GitHub issue #111](https://github.com/clearml/clearml-agent/issues/111)) * Fix full path is stored when uploading a single artifact file * Fix passing non-alphanumeric filename in `sdk.development.detect_with_pip_freeze` * Fix Python 3.6 and 3.10 support @@ -51,7 +51,7 @@ title: Version 1.6 * Fix error when connecting an input model * Fix deadlocks, including: * Change thread Event/Lock to a process fork safe threading objects - * Use file lock instead of process lock to avoid future deadlocks since python process lock is not process safe + * Use file lock instead of process lock to avoid future deadlocks since Python process lock is not process safe (killing a process holding a lock will Not release the lock) * Fix `StorageManager.list()` on a local Windows path * Fix model not created in the current project @@ -61,7 +61,7 @@ title: Version 1.6 **Bug Fix** -* Fix format string construction sometimes causing delayed evaluation errors ([ClearML GitHub issue #706](https://github.com/allegroai/clearml/issues/706)) +* Fix format string construction sometimes causing delayed evaluation errors ([ClearML GitHub issue #706](https://github.com/clearml/clearml/issues/706)) ### ClearML 1.6.1 @@ -83,7 +83,7 @@ title: Version 1.6 **Bug Fixes** * Fix axis range settings when logging plots -* Fix `Task.get_project()` to return more than 500 entries ([ClearML GitHub issue #612](https://github.com/allegroai/clearml/issues/612)) +* Fix `Task.get_project()` to return more than 500 entries ([ClearML GitHub issue #612](https://github.com/clearml/clearml/issues/612)) * Fix pipeline progress calculation * Fix `StorageManager.upload_folder()` returns `None` for both successful and unsuccessful uploads * Fix script path capturing stores a relative path and not an absolute path diff --git a/docs/release_notes/sdk/open_source/ver_1_7.md b/docs/release_notes/sdk/open_source/ver_1_7.md index 51f8a5db..07cbe986 100644 --- a/docs/release_notes/sdk/open_source/ver_1_7.md +++ b/docs/release_notes/sdk/open_source/ver_1_7.md @@ -7,14 +7,14 @@ title: Version 1.7 * Support running Jupyter Notebook inside a git repository (repository will be referenced without uncommitted changes and Jupyter Notebook will be stored on plain code as uncommitted changes) * Add Jupyter Notebook fail warning -* Allow pipeline steps to return string paths without them being treated as a folder artifact and zipped ([ClearML GitHub issue #780](https://github.com/allegroai/clearml/issues/780)) +* Allow pipeline steps to return string paths without them being treated as a folder artifact and zipped ([ClearML GitHub issue #780](https://github.com/clearml/clearml/issues/780)) * Remove `future` from Python 3 requirements **Bug Fixes** -* Fix exception raised when using `ThreadPool` ([ClearML GitHub issue #790](https://github.com/allegroai/clearml/issues/790)) -* Fix Pyplot/Matplotlib binding reports incorrect line labels and colors ([ClearML GitHub issue #791](https://github.com/allegroai/clearml/issues/791)) +* Fix exception raised when using `ThreadPool` ([ClearML GitHub issue #790](https://github.com/clearml/clearml/issues/790)) +* Fix Pyplot/Matplotlib binding reports incorrect line labels and colors ([ClearML GitHub issue #791](https://github.com/clearml/clearml/issues/791)) * Pipelines - * Fix crash when running cloned pipeline that invokes a step twice ([ClearML GitHub issue #769](https://github.com/allegroai/clearml/issues/769)) + * Fix crash when running cloned pipeline that invokes a step twice ([ClearML GitHub issue #769](https://github.com/clearml/clearml/issues/769)) * Fix pipeline argument becomes `None` if default value is not set * Fix `retry_on_failure` callback does nothing when specified on `PipelineController.add_step()` * Fix pipeline clone logic @@ -23,11 +23,11 @@ title: Version 1.7 * Fix issue with old/new notebook packages installed * Fix local cache with access rules disabling partial local access * Fix `Task.upload_artifact()` fails uploading pandas `DataFrame` -* Fix relative paths in examples ([ClearML GitHub PR #787](https://github.com/allegroai/clearml/issues/787) +* Fix relative paths in examples ([ClearML GitHub PR #787](https://github.com/clearml/clearml/issues/787) ### ClearML 1.7.1 -**New Features and Improvements** +**New Feature** * Add callback option for pipeline step retry **Bug Fixes** @@ -43,7 +43,7 @@ title: Version 1.7 **New Features and Improvements** * ClearML Data: Support providing list of links -* Upload artifacts with a custom serializer ([ClearML GitHub issue #689](https://github.com/allegroai/clearml/issues/689)) +* Upload artifacts with a custom serializer ([ClearML GitHub issue #689](https://github.com/clearml/clearml/issues/689)) * Allow user to specify extension when using custom serializer functions (for artifacts) * Skip server URL verification in `clearml-init` wizard process * When calling `Dataset.get()` without "alias" field, tell user that he can use alias to log it in the UI @@ -54,18 +54,18 @@ title: Version 1.7 * Add `Task.register_abort_callback` **Bug Fixes** -* Allow getting datasets with non-semantic versioning ([ClearML GitHub issue #776](https://github.com/allegroai/clearml/issues/776)) +* Allow getting datasets with non-semantic versioning ([ClearML GitHub issue #776](https://github.com/clearml/clearml/issues/776)) * Fix interactive plots (instead of a generated png) * Fix Python 2.7 support * Fix clearml datasets `list` functionality * Fix `Dataset.init` to not modify task (to `Dataset.create`) * Fix failure with large files upload on HTTPS * Fix 3d plots with plt shows 2d plot on task results page -* Fix uploading files with project's `default_upload_destination` ([ClearML GitHub issue #734](https://github.com/allegroai/clearml/issues/734)) +* Fix uploading files with project's `default_upload_destination` ([ClearML GitHub issue #734](https://github.com/clearml/clearml/issues/734)) * Fix broken Matplotlib reporting - using logarithmic scale breaks reporting * Fix wildcard support in `clearml-data` CLI -* Fix `report_histogram` - does not show "horizontal" orientation ([ClearML GitHub issue 699](https://github.com/allegroai/clearml/issues/699)) -* Fix table reporting - when using `logger.report_table(title, series, iteration, etc)`, the `series` arg does not appear in UI ([ClearML GitHub issue 684](https://github.com/allegroai/clearml/issues/684)) +* Fix `report_histogram` - does not show "horizontal" orientation ([ClearML GitHub issue 699](https://github.com/clearml/clearml/issues/699)) +* Fix table reporting - when using `logger.report_table(title, series, iteration, etc)`, the `series` arg does not appear in UI ([ClearML GitHub issue 684](https://github.com/clearml/clearml/issues/684)) * Fix artifacts (and models) use task's original name and not new name * Fix very long filenames from S3 can't be downloaded (with `get_local_copy()`) -* Fix overwrite of existing output models on pipeline task with `monitor_models` ([ClearML GitHub issue #757](https://github.com/allegroai/clearml/issues/757)) \ No newline at end of file +* Fix overwrite of existing output models on pipeline task with `monitor_models` ([ClearML GitHub issue #757](https://github.com/clearml/clearml/issues/757)) \ No newline at end of file diff --git a/docs/release_notes/sdk/open_source/ver_1_8.md b/docs/release_notes/sdk/open_source/ver_1_8.md index 6fc5443a..d9320e62 100644 --- a/docs/release_notes/sdk/open_source/ver_1_8.md +++ b/docs/release_notes/sdk/open_source/ver_1_8.md @@ -5,7 +5,7 @@ title: Version 1.8 ### ClearML 1.8.3 **Bug Fixes** -* Set GCS credentials to `None` if invalid service account credentials are provided ([ClearML GitHub issue #840](https://github.com/allegroai/clearml/issues/840)) +* Set GCS credentials to `None` if invalid service account credentials are provided ([ClearML GitHub issue #840](https://github.com/clearml/clearml/issues/840)) * Fix a sync issue when loading deferred configuration ### ClearML 1.8.2 @@ -20,8 +20,8 @@ title: Version 1.8 ### ClearML 1.8.1 **New Features and Improvements** -* Raise error on failed uploads ([ClearML GitHub issue #810](https://github.com/allegroai/clearml/issues/819)) -* Add hyperdataset examples ([ClearML GitHub PR #823](https://github.com/allegroai/clearml/commit/f6b9efe54e1246adba4036c56bc6e8a0bdb99948)) +* Raise error on failed uploads ([ClearML GitHub issue #810](https://github.com/clearml/clearml/issues/819)) +* Add hyperdataset examples ([ClearML GitHub PR #823](https://github.com/clearml/clearml/commit/f6b9efe54e1246adba4036c56bc6e8a0bdb99948)) * Change `report_event_flush_threshold` default to 100 * Add `ModelInfo.weights_object()` to store callback access to the actual model object being stored (valid for both pre/post save calls, otherwise `None`) @@ -29,8 +29,8 @@ pre/post save calls, otherwise `None`) * Support max connections setting for Azure storage using the `sdk.azure.storage.max_connection` configuration option **Bug Fixes** -* Fix clearml logger default level cannot be changed ([ClearML GitHub issue #741](https://github.com/allegroai/clearml/issues/741)) -* Fix Hydra doesn't get overridden information from ClearML ([ClearML GitHub issue #751](https://github.com/allegroai/clearml/issues/751)) +* Fix clearml logger default level cannot be changed ([ClearML GitHub issue #741](https://github.com/clearml/clearml/issues/741)) +* Fix Hydra doesn't get overridden information from ClearML ([ClearML GitHub issue #751](https://github.com/clearml/clearml/issues/751)) * Fix `StorageManager.list(“s3://..”, with_metadata=True)` doesn't work * Fix `ModelsList.keys()` is missing * Fix `CLEARML_DEFERRED_TASK_INIT=1` doesn't work @@ -39,10 +39,10 @@ pre/post save calls, otherwise `None`) ### ClearML 1.8.0 **New Features and Improvements** -* Add tarfile member sanitization to `extractall()`([ClearML GitHub PR #803](https://github.com/allegroai/clearml/pull/803)) -* Add `Task.delete_artifacts()` with `raise_on_errors` argument ([ClearML GitHub issue #805](https://github.com/allegroai/clearml/issues/805)) -* Add CI/CD example ([ClearML GitHub PR #815](https://github.com/allegroai/clearml/pull/815)) -* Limit number of `_serialize` requests when adding list of links with `add_external_files()` ([ClearML GitHub issue #813](https://github.com/allegroai/clearml/issues/813)) +* Add tarfile member sanitization to `extractall()`([ClearML GitHub PR #803](https://github.com/clearml/clearml/pull/803)) +* Add `Task.delete_artifacts()` with `raise_on_errors` argument ([ClearML GitHub issue #805](https://github.com/clearml/clearml/issues/805)) +* Add CI/CD example ([ClearML GitHub PR #815](https://github.com/clearml/clearml/pull/815)) +* Limit number of `_serialize` requests when adding list of links with `add_external_files()` ([ClearML GitHub issue #813](https://github.com/clearml/clearml/issues/813)) * Add support for connecting Enum values as parameters * Improve Colab integration (store entire colab, not history) * Add `clearml.browser_login` to authenticate browser online sessions such as Colab, Jupyter Notebooks etc. @@ -54,7 +54,7 @@ pre/post save calls, otherwise `None`) **Bug Fixes** * Fix passing `compression=ZIP_STORED` (or 0) to `Dataset.upload()` uses `ZIP_DEFLATED` and overrides the user-supplied -argument ([ClearML GitHub PR #812](https://github.com/allegroai/clearml/pull/812)) +argument ([ClearML GitHub PR #812](https://github.com/clearml/clearml/pull/812)) * Fix `unique_selector` is not applied properly on batches after the first batch. Remove default selector value since it does not work for all event types (and we always specify it anyway) * Fix `clearml-init` colab detection diff --git a/docs/release_notes/sdk/open_source/ver_1_9.md b/docs/release_notes/sdk/open_source/ver_1_9.md index a16b4ac9..9683af6b 100644 --- a/docs/release_notes/sdk/open_source/ver_1_9.md +++ b/docs/release_notes/sdk/open_source/ver_1_9.md @@ -6,22 +6,22 @@ title: Version 1.9 **Bug Fixes** * Fix broken `Task._get_status()`, which was breaking `clearml-session` in the latest version -* Fix path substitution, making it possible to store unsubstituted URL for models ([ClearML GitHub PR #935](https://github.com/allegroai/clearml/pull/935)) +* Fix path substitution, making it possible to store unsubstituted URL for models ([ClearML GitHub PR #935](https://github.com/clearml/clearml/pull/935)) ### ClearML 1.9.2 **New Features and Improvements** -* Support parsing queue name when providing execution queue in pipelines code ([ClearML GitHub PR #857](https://github.com/allegroai/clearml/pull/857)) -* Ignore `None` values for keys in the `click` argument parser ([ClearML GitHub issue #902](https://github.com/allegroai/clearml/issues/902)) -* Improve docstrings for `Task.mark_completed()` and `Task.close()` (ClearML GitHub PRs [#920](https://github.com/allegroai/clearml/pull/920) and [#921](https://github.com/allegroai/clearml/pull/921)) +* Support parsing queue name when providing execution queue in pipelines code ([ClearML GitHub PR #857](https://github.com/clearml/clearml/pull/857)) +* Ignore `None` values for keys in the `click` argument parser ([ClearML GitHub issue #902](https://github.com/clearml/clearml/issues/902)) +* Improve docstrings for `Task.mark_completed()` and `Task.close()` (ClearML GitHub PRs [#920](https://github.com/clearml/clearml/pull/920) and [#921](https://github.com/clearml/clearml/pull/921)) * Add pre/post execution callbacks to pipeline steps through `@PipelineDecorator.component` * Add status-change callback to pipeline steps through `PipelineController.add_step()`, `PipelineController.add_function_step()`, and `@PipelineDecorator.component` **Bug Fixes** -* Fix missing debug samples when reporting using TensorBoard ([ClearML GitHub issue #923](https://github.com/allegroai/clearml/issues/923)) -* Fix wrong Jupyter API token during repository detection ([ClearML GitHub PR #904](https://github.com/allegroai/clearml/pull/904)) -* Fix typo in the warning for very large git diffs ([ClearML GitHub PR #932](https://github.com/allegroai/clearml/pull/932)) +* Fix missing debug samples when reporting using TensorBoard ([ClearML GitHub issue #923](https://github.com/clearml/clearml/issues/923)) +* Fix wrong Jupyter API token during repository detection ([ClearML GitHub PR #904](https://github.com/clearml/clearml/pull/904)) +* Fix typo in the warning for very large git diffs ([ClearML GitHub PR #932](https://github.com/clearml/clearml/pull/932)) * Fix pipelines from tasks don't propagate `parameter_override` values in `PipelineController.add_step()` * Fix folders and files uploaded to S3 and Azure with `StorageManager.upload_file()` receive wrong MIME types * Fix the CSV file preview in Datasets @@ -33,17 +33,17 @@ and `@PipelineDecorator.component` ### ClearML 1.9.1 **New Features and Improvements** -* Add signature version to `boto3` configuration ([ClearML GitHub issue #883](https://github.com/allegroai/clearml/issues/883)) +* Add signature version to `boto3` configuration ([ClearML GitHub issue #883](https://github.com/clearml/clearml/issues/883)) * Allow requesting custom token expiration using the `api.auth.req_token_expiration_sec` configuration setting * Add Python 3.11 support **Bug Fixes** -* Fix `UniformParameterRange.to_list` throws error when step size is not defined ([ClearML GitHub issue #858](https://github.com/allegroai/clearml/issues/858)) -* Fix `StorageManager.list()` does not return size metadata ([ClearML GitHub issue #865](https://github.com/allegroai/clearml/issues/865)) -* Fix storage with path substitutions ([ClearML GitHub issue #825](https://github.com/allegroai/clearml/issues/825)) -* Fix extras in ClearML installation prevents clearml from being included in requirements ([ClearML GitHub issue #867](https://github.com/allegroai/clearml/issues/867)) -* Fix metadata set on an uploaded model object is not accessible ([ClearML GitHub issue #890](https://github.com/allegroai/clearml/issues/890)) -* Fix Azure storage upload not working ([ClearML GitHub issue #868](https://github.com/allegroai/clearml/issues/868)) +* Fix `UniformParameterRange.to_list` throws error when step size is not defined ([ClearML GitHub issue #858](https://github.com/clearml/clearml/issues/858)) +* Fix `StorageManager.list()` does not return size metadata ([ClearML GitHub issue #865](https://github.com/clearml/clearml/issues/865)) +* Fix storage with path substitutions ([ClearML GitHub issue #825](https://github.com/clearml/clearml/issues/825)) +* Fix extras in ClearML installation prevents clearml from being included in requirements ([ClearML GitHub issue #867](https://github.com/clearml/clearml/issues/867)) +* Fix metadata set on an uploaded model object is not accessible ([ClearML GitHub issue #890](https://github.com/clearml/clearml/issues/890)) +* Fix Azure storage upload not working ([ClearML GitHub issue #868](https://github.com/clearml/clearml/issues/868)) * Fix `task.connect` list of dicts parsed incorrectly in remote * Fix casting `None` to `int` fails uploads and permission checks * Fix numpy 1.24 support @@ -51,15 +51,15 @@ and `@PipelineDecorator.component` * Fix connecting a dictionary to task sometimes raises an exception * Fix authentication headers are not set on substituted fileserver URLs * Fix `Task.get_project_id()` cannot find hidden projects -* Fix TriggerScheduler docstrings ([ClearML GitHub issue #881](https://github.com/allegroai/clearml/issues/881)) +* Fix TriggerScheduler docstrings ([ClearML GitHub issue #881](https://github.com/clearml/clearml/issues/881)) ### ClearML 1.9.0 **New Features and Improvements** -* Add `r` prefix to `re.match()` strings ([ClearML GitHub issue #834](https://github.com/allegroai/clearml/issues/834)) -* Add `path_substitution` to `clearml.conf` example file ([ClearML GitHub PR #842](https://github.com/allegroai/clearml/pull/842)) -* Clarify `deferred_init` usage in `Task.init()` ([ClearML GitHub issue #855](https://github.com/allegroai/clearml/issues/855)) -* Add pipeline decorator argument to control docker image ([ClearML GitHub issue #856](https://github.com/allegroai/clearml/issues/856)) +* Add `r` prefix to `re.match()` strings ([ClearML GitHub issue #834](https://github.com/clearml/clearml/issues/834)) +* Add `path_substitution` to `clearml.conf` example file ([ClearML GitHub PR #842](https://github.com/clearml/clearml/pull/842)) +* Clarify `deferred_init` usage in `Task.init()` ([ClearML GitHub issue #855](https://github.com/clearml/clearml/issues/855)) +* Add pipeline decorator argument to control docker image ([ClearML GitHub issue #856](https://github.com/clearml/clearml/issues/856)) * Add `StorageManager.set_report_upload_chunk_size()` and `StorageManager.set_report_download_chunk_size()` to set chunk size for upload and download * Add `allow_archived` argument in `Task.get_tasks()` @@ -68,10 +68,10 @@ size for upload and download * Add `delete_from_storage` (default `True`) to `Task.delete_artifacts()` **Bug Fixes** -* Fix jsonargparse and pytorch lightning integration broken for remote execution ([ClearML GitHub issue #403](https://github.com/allegroai/clearml/issues/403)) -* Fix error when using `TaskScheduler` with `limit_execution_time` ([ClearML GitHub issue #648](https://github.com/allegroai/clearml/issues/648)) -* Fix dataset not synced if the changes are only modified files ([ClearML GitHub issue #822](https://github.com/allegroai/clearml/issues/822)) -* Fix `StorageHelper.delete()` does not respect path substitutions ([ClearML GitHub issue #825](https://github.com/allegroai/clearml/issues/825)) +* Fix jsonargparse and pytorch lightning integration broken for remote execution ([ClearML GitHub issue #403](https://github.com/clearml/clearml/issues/403)) +* Fix error when using `TaskScheduler` with `limit_execution_time` ([ClearML GitHub issue #648](https://github.com/clearml/clearml/issues/648)) +* Fix dataset not synced if the changes are only modified files ([ClearML GitHub issue #822](https://github.com/clearml/clearml/issues/822)) +* Fix `StorageHelper.delete()` does not respect path substitutions ([ClearML GitHub issue #825](https://github.com/clearml/clearml/issues/825)) * Fix can't write more than 2 GB to a file * Fix `StorageManager.get_file_size_bytes()` returns `ClientError` instead of `None` for invalid S3 links * Fix Dataset lineage view is broken with multiple dataset dependencies diff --git a/docs/remote_session.md b/docs/remote_session.md index ea96f705..8d104534 100644 --- a/docs/remote_session.md +++ b/docs/remote_session.md @@ -15,8 +15,8 @@ ClearML provides tools that allow you to launch remote sessions and to execute c meets resource needs: * [Clearml Session CLI](apps/clearml_session.md) - Launch an interactive JupyterLab, VS Code, and SSH session on a remote machine: * Automatically store and sync your [interactive session workspace](apps/clearml_session.md#storing-and-synchronizing-workspace) - * Replicate a previously executed experiment's execution environment and [interactively execute and debug](apps/clearml_session.md#starting-a-debugging-session) it on a remote session - * Develop directly inside your Kubernetes pods ([see ClearML Agent](clearml_agent/clearml_agent_deployment.md#kubernetes)) + * Replicate a previously executed task's execution environment and [interactively execute and debug](apps/clearml_session.md#starting-a-debugging-session) it on a remote session + * Develop directly inside your Kubernetes pods ([see ClearML Agent](clearml_agent/clearml_agent_deployment_k8s.md)) * And more! * GUI Applications (available under ClearML Enterprise Plan) - These apps provide access to remote machines over a secure and encrypted SSH connection, allowing you to work in a remote environment using your preferred development diff --git a/docs/user_management/identity_providers.md b/docs/user_management/identity_providers.md index fd7ec5dc..ba01c982 100644 --- a/docs/user_management/identity_providers.md +++ b/docs/user_management/identity_providers.md @@ -3,7 +3,7 @@ title: Identity Providers --- :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Identity provider integration is available under the ClearML Enterprise plan. ::: Administrators can seamlessly connect ClearML with their identity service providers to easily implement single sign-on diff --git a/docs/webapp/applications/apps_aws_autoscaler.md b/docs/webapp/applications/apps_aws_autoscaler.md index 59bbaeb9..3068db42 100644 --- a/docs/webapp/applications/apps_aws_autoscaler.md +++ b/docs/webapp/applications/apps_aws_autoscaler.md @@ -111,7 +111,7 @@ to open the app's instance launch form. tasks run by the autoscaler. For more information, see [Configuration Vault](#configuration-vault) (available under ClearML Enterprise Plan). * **Init script** (optional) - A bash script to execute after launching the EC2 instance * **Additional ClearML Configuration** (optional) - A ClearML configuration file to use by the ClearML Agent when - executing your experiments + executing your tasks * **Custom Launch Spec** - Custom AWS EC2 launch specification in JSON format. This will be used as the basis for creating the instances launch spec. See [boto3 EC2.client.run_instances Request Syntax](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ec2/client/run_instances.html) and [AWS API Reference: RunInstances](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_RunInstances.html) (available under ClearML Enterprise Plan) @@ -132,7 +132,7 @@ You can utilize the [configuration vault](../settings/webapp_settings_profile.md * `aws_credentials_key_id` and `aws_secret_access_key` - AWS credentials for the autoscaler * `extra_vm_bash_script` - A bash script to execute after launching the EC2 instance. This script will be appended to the one set in the `Init script` field of the instance launch form -* `extra_clearml_conf` - ClearML configuration to use by the ClearML Agent when executing your experiments. This +* `extra_clearml_conf` - ClearML configuration to use by the ClearML Agent when executing your tasks. This configuration will be appended to that set in the `Additional ClearML Configuration` field of the instance launch form * `files` - Files to create at designated paths with predefined content inside the container running the autoscaler. For more information, see [Files Section](../../configs/clearml_conf.md#files-section) @@ -319,7 +319,10 @@ to an IAM user, and create credentials keys for that user to configure in the au "ssm:GetParameters", "ssm:GetParameter" ], - "Resource": "arn:aws:ssm:*::parameter/aws/service/marketplace/*" + "Resource": [ + "arn:aws:ssm:*::parameter/aws/service/marketplace/*", + "arn:aws:ssm:*::parameter/aws/service/deeplearning/*" + ] } ] } diff --git a/docs/webapp/applications/apps_dashboard.md b/docs/webapp/applications/apps_dashboard.md index abb7d05d..306b80ff 100644 --- a/docs/webapp/applications/apps_dashboard.md +++ b/docs/webapp/applications/apps_dashboard.md @@ -19,7 +19,7 @@ on completed/failed Tasks via Slack integration. * Entire workspace - Monitor all projects in your workspace :::warning - If your workspace or specified project contains a large number of experiments, the dashboard can take a while to update. + If your workspace or specified project contains a large number of tasks, the dashboard can take a while to update. ::: * **Monitored Metric** - Specify a metric for the app instance to monitor. The dashboard will present an aggregated view @@ -28,31 +28,36 @@ of the chosen metric over time. * Monitored Metric - Series - Metric series (variant) to track * Monitored Metric - Trend - Choose whether to track the monitored metric's highest or lowest values * **Slack Notification** (optional) - Set up Slack integration for notifications of task failure. Select the -`Alert on completed experiments` under `Additional options` to set up alerts for task completions. +`Alert on completed tasks` under `Additional options` to set up alerts for task completions. * API Token - Slack workspace access token * Channel Name - Slack channel to which task failure alerts will be posted * Alert Iteration Threshold - Minimum number of task iterations to trigger Slack alerts (tasks that fail prior to the threshold will be ignored) * **Additional options** - * Track manual (non agent-run) experiments as well - Select to include in the dashboard experiments that were not executed by an agent - * Alert on completed experiments - Select to include completed tasks in alerts: in the dashboard's Task Alerts section and in Slack Alerts. + * Track manual (non agent-run) tasks as well - Select to include in the dashboard tasks that were not executed by an agent + * Alert on completed tasks - Select to include completed tasks in alerts: in the dashboard's Task Alerts section and in Slack Alerts. * **Export Configuration** - Export the app instance configuration as a JSON file, which you can later import to create a new instance with the same configuration. -![Dashboard app instance launch form](../../img/apps_dashboard_wizard.png) +
+ +![Dashboard app instance launch form](../../img/apps_dashboard_wizard.png#light-mode-only) +![Dashboard app instance launch form](../../img/apps_dashboard_wizard_dark.png#dark-mode-only) + +
## Dashboard Once a project dashboard instance is launched, its dashboard displays the following information about a project: * Task Status Summary - Percentages of Tasks by status -* Task Type Summary - Percentages of local experiments vs. agent experiments -* Experiments Summary - Number of tasks by status over time +* Task Type Summary - Percentages of local tasks vs. agent tasks +* Task Summary - Number of tasks by status over time * Monitoring - GPU utilization and GPU memory usage * Metric Monitoring - An aggregated view of the values of a metric over time -* Project's Active Workers - Number of workers currently executing experiments in the monitored project +* Project's Active Workers - Number of workers currently executing tasks in the monitored project * Workers Table - List of active workers * Task Alerts - * Failed tasks - Failed experiments and their time of failure summary - * Completed tasks - Completed experiments and their time of completion summary + * Failed tasks - Failed tasks and their time of failure summary + * Completed tasks - Completed tasks and their time of completion summary :::tip EMBEDDING CLEARML VISUALIZATION @@ -62,4 +67,5 @@ external tools (e.g. Notion). Hover over the plot and click Embed code +to copy the embed code, and navigate to a report to paste the embed code. +::: ## Embedding Model Deployment Instance Configuration @@ -63,13 +72,13 @@ To configure a new app instance, click `Launch New` + +![Embedding Model Deployment form](../../img/apps_embedding_model_deployment_form.png#light-mode-only) +![Embedding Model Deployment form](../../img/apps_embedding_model_deployment_form_dark.png#dark-mode-only) + +
\ No newline at end of file diff --git a/docs/webapp/applications/apps_gcp_autoscaler.md b/docs/webapp/applications/apps_gcp_autoscaler.md index 358881c0..db9d9d7e 100644 --- a/docs/webapp/applications/apps_gcp_autoscaler.md +++ b/docs/webapp/applications/apps_gcp_autoscaler.md @@ -95,7 +95,7 @@ to open the app's instance launch form. on startup. This only applies to vaults loaded by the autoscaler itself, not to vaults loaded on cloud instances or by tasks run by the autoscaler. For more information, see [Configuration Vault note](#configuration_vault) (available under ClearML Enterprise Plan). * **Init Script** (optional) - A bash script to execute after launching the VM instance -* **Additional ClearML Configuration** (optional) - A ClearML configuration file to use by the ClearML Agent when executing your experiments +* **Additional ClearML Configuration** (optional) - A ClearML configuration file to use by the ClearML Agent when executing your tasks * **Run with Service Account** - Select to allow running the application under a [Service Account](../settings/webapp_settings_users.md#service-accounts) identity instead of under your own identity (available under ClearML Enterprise Plan) * **Export Configuration** - Export the app instance configuration as a JSON file, which you can later import to create a new instance with the same configuration diff --git a/docs/webapp/applications/apps_gradio.md b/docs/webapp/applications/apps_gradio.md index d1417108..31e48b92 100644 --- a/docs/webapp/applications/apps_gradio.md +++ b/docs/webapp/applications/apps_gradio.md @@ -20,6 +20,7 @@ The Gradio Launcher relies on the ClearML Traffic Router which implements user a to the IP/port served by the Gradio app. If the ClearML AI application Gateway is not available, the Gradio app might not be accessible. +For more information, see [AI Application Gateway](../../deploying_clearml/enterprise_deploy/appgw.md). ::: Once you start a Gradio launcher instance, you can view the following information in its dashboard: @@ -37,7 +38,9 @@ Once you start a Gradio launcher instance, you can view the following informatio * Live preview of the Gradio app * Console Log - The console log shows the launcher instance's activity, including server setup progress, server status changes - + +![Gradio Dashboard](../../img/apps_gradio.png#light-mode-only) +![Gradio Dashboard](../../img/apps_gradio_dark.png#dark-mode-only) ## Gradio Launcher Instance Configuration When configuring a new Gradio launcher instance, you can fill in the required parameters or reuse the configuration of diff --git a/docs/webapp/applications/apps_hpo.md b/docs/webapp/applications/apps_hpo.md index a026ad5d..e7b65f20 100644 --- a/docs/webapp/applications/apps_hpo.md +++ b/docs/webapp/applications/apps_hpo.md @@ -9,13 +9,13 @@ The ClearML HPO App is available under the ClearML Pro plan. The Hyperparameter Optimization Application finds the set of parameter values that optimize a specific metric(s) for your model. -It takes in a ClearML experiment and its parameters to optimize. The parameter search space can be specified +It takes in a ClearML task and its parameters to optimize. The parameter search space can be specified by specific (discrete) values and/or value ranges (uniform parameters). -The optimization app launches multiple copies of the original experiment, each time sampling different parameter sets, +The optimization app launches multiple copies of the original task, each time sampling different parameter sets, applying a user-selected optimization strategy (random search, Bayesian, etc.). -Control the optimization process with the advanced configuration options, which include time, iteration, and experiment +Control the optimization process with the advanced configuration options, which include time, iteration, and task limits. ## HPO Instance Configuration @@ -42,7 +42,7 @@ limits. * Values - Comma separated list of values to sample * Name - The original task's configuration parameter name (including section name e.g. `Args/lr`)
:::tip Hydra Parameters - For experiments using Hydra, input parameters from the OmegaConf in the following format: + For tasks using Hydra, input parameters from the OmegaConf in the following format: `Hydra/`. Specify `` using dot notation. For example, if your OmegaConf looks like this: ``` dataset: @@ -52,40 +52,46 @@ limits. ``` Specify the `number` parameter with `Hydra/dataset.main.number`. - Additionally, make sure that the initial experiment's `_allow_omegaconf_edit_` parameter is set to `False` (in experiment's + Additionally, make sure that the initial task's `_allow_omegaconf_edit_` parameter is set to `False` (in task's **CONFIGURATION > HYPERPARAMETERS > Hydra**). ::: * **Optimization Job Title** (optional) - Name for the HPO instance. This will appear in the instance list -* **Optimization Experiments Destination Project** (optional) - The project where optimization tasks will be saved. +* **Optimization Tasks Destination Project** (optional) - The project where optimization tasks will be saved. Leave empty to use the same project as the Initial task. -* **Maximum Concurrent Tasks** - The maximum number of simultaneously running optimization experiments +* **Maximum Concurrent Tasks** - The maximum number of simultaneously running optimization tasks * **Advanced Configuration** (optional) - * Limit Total HPO Experiments - Maximum total number of optimization experiments - * Number of Top Experiments to Save - Number of best performing experiments to save (the rest are archived) - * Limit Single Experiment Running Time (Minutes) - Time limit per optimization experiment. Experiments will be + * Limit Total HPO Tasks - Maximum total number of optimization tasks + * Number of Top Tasks to Save - Number of best performing tasks to save (the rest are archived) + * Limit Single Task Running Time (Minutes) - Time limit per optimization task. Tasks will be stopped after the specified time elapsed - * Minimal Number of Iterations Per Single Experiment - Some search methods, such as Optuna, prune underperforming - experiments. This is the minimum number of iterations per experiment before it can be stopped. Iterations are - based on the experiments' own reporting (for example, if experiments report every epoch, then iterations=epochs) - * Maximum Number of Iterations Per Single Experiment - Maximum iterations per experiment after which it will be - stopped. Iterations are based on the experiments' own reporting (for example, if experiments report every epoch, + * Minimal Number of Iterations Per Single Task - Some search methods, such as Optuna, prune underperforming + tasks. This is the minimum number of iterations per task before it can be stopped. Iterations are + based on the tasks' own reporting (for example, if tasks report every epoch, then iterations=epochs) + * Maximum Number of Iterations Per Single Task - Maximum iterations per task after which it will be + stopped. Iterations are based on the tasks' own reporting (for example, if tasks report every epoch, then iterations=epochs) * Limit Total Optimization Instance Time (Minutes) - Time limit for the whole optimization process (in minutes) * **Export Configuration** - Export the app instance configuration as a JSON file, which you can later import to create a new instance with the same configuration -![HPO app instance launch form](../../img/apps_hpo_wizard.png) +
+ +![HPO app instance launch form](../../img/apps_hpo_wizard.png#light-mode-only) +![HPO app instance launch form](../../img/apps_hpo_wizard_dark.png#dark-mode-only) +
+ ## Dashboard Once an HPO instance is launched, the dashboard displays a summary of the optimization process. -![HPO dashboard](../../img/apps_hpo.png) +![HPO Dashboard](../../img/apps_format_overview.png#light-mode-only) +![HPO Dashboard](../../img/apps_format_overview_dark.png#dark-mode-only) The HPO dashboard shows: * Optimization Metric - Last reported and maximum / minimum values of objective metric over time -* Optimization Objective - Objective metric values per experiment +* Optimization Objective - Objective metric values per task * Parallel coordinates - A visualization of parameter value impact on optimization objective -* Summary - Experiment summary table: experiment execution information, objective metric and parameter values. +* Summary - Task summary table: task execution information, objective metric and parameter values. * Budget - Available iterations and tasks budget (percentage, out of the values defined in the HPO instance's advanced configuration) * Resources - Number of workers servicing the HPO execution queue, and the number of currently running optimization tasks diff --git a/docs/webapp/applications/apps_jupyter_lab.md b/docs/webapp/applications/apps_jupyter_lab.md index 0f9c10e3..74dcd6a6 100644 --- a/docs/webapp/applications/apps_jupyter_lab.md +++ b/docs/webapp/applications/apps_jupyter_lab.md @@ -25,9 +25,10 @@ Once you have launched an app instance, you can view the following information i * Server's resources monitoring (CPU / GPU / vMem utilization) * Console - The console log shows the instance's activity, including server setup progress, server status changes -![Jupyter Lab Dashboard](../../img/apps_jupyter_lab.png) +![Jupyter Lab Dashboard](../../img/apps_jupyter_lab.png#light-mode-only) +![Jupyter Lab Dashboard](../../img/apps_jupyter_lab_dark.png#dark-mode-only) -## App Instance Configuration +## Jupyter Lab Instance Configuration When configuring a new Jupyter Lab instance, you can fill in the required parameters or reuse the configuration of a previously launched instance. @@ -50,8 +51,8 @@ to open the app's instance launch form. * Repository * Branch * Commit -* **Docker** - * Image - Docker image used to run the IDE in +* **Container** + * Image - Container image used to run the IDE in * Docker arguments - `docker run` arguments, as a single string * **Extra Packages** - Extra Python packages to be installed * **Queue** - The queue serviced by the ClearML Agent that will execute the Jupyter Lab session diff --git a/docs/webapp/applications/apps_llama_deployment.md b/docs/webapp/applications/apps_llama_deployment.md index 93e4f307..442640b9 100644 --- a/docs/webapp/applications/apps_llama_deployment.md +++ b/docs/webapp/applications/apps_llama_deployment.md @@ -16,6 +16,7 @@ The llama.cpp Model Deployment app makes use of the ClearML Traffic Router which network endpoint for the model. If the ClearML AI application Gateway is not available, the model endpoint might not be accessible. +For more information, see [AI Application Gateway](../../deploying_clearml/enterprise_deploy/appgw.md). ::: After starting a llama.cpp Model Deployment instance, you can view the following information in its dashboard: @@ -45,7 +46,14 @@ After starting a llama.cpp Model Deployment instance, you can view the following ![llama deployment dashboard](../../img/apps_llama_dashboard.png) -## Llama.cpp Model Deployment Instance Configuration +:::tip EMBEDDING CLEARML VISUALIZATION +You can embed plots from the app instance dashboard into [ClearML Reports](../webapp_reports.md). These visualizations +are updated live as the app instance(s) updates. The Enterprise Plan supports embedding resources in +external tools (e.g. Notion). Hover over the plot and click Embed code +to copy the embed code, and navigate to a report to paste the embed code. +::: + +### Llama.cpp Model Deployment Instance Configuration When configuring a new llama.cpp Model Deployment instance, you can fill in the required parameters or reuse the configuration of a previously launched instance. @@ -60,22 +68,27 @@ To configure a new app instance, click `Launch New` + +![llama deployment app form](../../img/apps_llama_form.png#light-mode-only) +![llama deployment app form](../../img/apps_llama_form_dark.png#dark-mode-only) + +
\ No newline at end of file diff --git a/docs/webapp/applications/apps_model_deployment.md b/docs/webapp/applications/apps_model_deployment.md index cf04f68c..eba05532 100644 --- a/docs/webapp/applications/apps_model_deployment.md +++ b/docs/webapp/applications/apps_model_deployment.md @@ -1,25 +1,26 @@ --- -title: Model Deployment +title: vLLM Model Deployment --- :::important Enterprise Feature -The Model Deployment App is available under the ClearML Enterprise plan. +The vLLM Model Deployment App is available under the ClearML Enterprise plan. ::: -The Model Deployment application enables users to quickly deploy LLM models as networking services over a secure +The vLLM Model Deployment application enables users to quickly deploy LLM models as networking services over a secure endpoint. This application supports various model configurations and customizations to optimize performance and resource -usage. The Model Deployment application serves your model on a machine of your choice. Once an app instance is running, +usage. The vLLM Model Deployment application serves your model on a machine of your choice. Once an app instance is running, it serves your model through a secure, publicly accessible network endpoint. The app monitors endpoint activity and shuts down if the model remains inactive for a specified maximum idle time. :::info AI Application Gateway -The Model Deployment app makes use of the ClearML Traffic Router which implements a secure, authenticated +The vLLM Model Deployment app makes use of the ClearML Traffic Router which implements a secure, authenticated network endpoint for the model. If the ClearML AI application Gateway is not available, the model endpoint might not be accessible. +For more information, see [AI Application Gateway](../../deploying_clearml/enterprise_deploy/appgw.md). ::: -Once you start a Model Deployment instance, you can view the following information in its dashboard: +Once you start a vLLM Model Deployment instance, you can view the following information in its dashboard: * Status indicator * Active instance - App instance is running and is actively in use * Loading instance - App instance is setting up @@ -45,11 +46,19 @@ Once you start a Model Deployment instance, you can view the following informati * Console log - The console log shows the app instance's console output: setup progress, status changes, error messages, etc. -![Model Deployment App](../../img/apps_model_deployment.png) +![vLLM Model Deployment App](../../img/apps_model_deployment.png#light-mode-only) +![vLLM Model Deployment App](../../img/apps_model_deployment_dark.png#dark-mode-only) -## Model Deployment Instance Configuration +:::tip EMBEDDING CLEARML VISUALIZATION +You can embed plots from the app instance dashboard into [ClearML Reports](../webapp_reports.md). These visualizations +are updated live as the app instance(s) updates. The Enterprise Plan supports embedding resources in +external tools (e.g. Notion). Hover over the plot and click Embed code +to copy the embed code, and navigate to a report to paste the embed code. +::: -When configuring a new Model Deployment instance, you can fill in the required parameters or reuse the +## vLLM Model Deployment Instance Configuration + +When configuring a new vLLM Model Deployment instance, you can fill in the required parameters or reuse the configuration of a previously launched instance. Launch an app instance with the configuration of a previously launched instance using one of the following options: @@ -64,14 +73,14 @@ To configure a new app instance, click `Launch New` + +![vLLM Model Deployment app form](../../img/apps_model_deployment_form.png#light-mode-only) +![vLLM Model Deployment app form](../../img/apps_model_deployment_form_dark.png#dark-mode-only) + + \ No newline at end of file diff --git a/docs/webapp/applications/apps_overview.md b/docs/webapp/applications/apps_overview.md index 2507a436..2ca31fca 100644 --- a/docs/webapp/applications/apps_overview.md +++ b/docs/webapp/applications/apps_overview.md @@ -8,7 +8,8 @@ ClearML Applications are available under the ClearML Pro plan. Use ClearML's GUI Applications to manage ML workloads and automatically run your recurring workflows without any coding. -![Apps page](../../img/apps_overview_page.png) +![Apps page](../../img/apps_overview_page.png#light-mode-only) +![Apps page](../../img/apps_overview_page_dark.png#dark-mode-only) Configure and launch app instances, then track their execution from the app dashboard. @@ -37,7 +38,7 @@ Applications for deploying user interfaces for models: ### Deploy Applications for deploying machine learning models as scalable, secure services: * [**Embedding Model Deployment**](apps_embed_model_deployment.md) - Deploy embedding models as networking services over a secure endpoint (available under ClearML Enterprise Plan) -* [**Model Deployment**](apps_model_deployment.md) - Deploy LLM models as networking services over a secure endpoint (available under ClearML Enterprise Plan) +* [**vLLM Model Deployment**](apps_model_deployment.md) - Deploy LLM models as networking services over a secure endpoint (available under ClearML Enterprise Plan) * [**llama.cpp**](apps_llama_deployment.md) - Deploy LLM models in GGUF format using [`llama.cpp`](https://github.com/ggerganov/llama.cpp) as networking services over a secure endpoint (available under ClearML Enterprise Plan) :::info Autoscalers @@ -54,7 +55,8 @@ Each application's page is split into two sections: Use the search bar Magnifying glass to quickly find an app instance by name. -![App format](../../img/apps_format_overview.png) +![App format](../../img/apps_format_overview.png#light-mode-only) +![App format](../../img/apps_format_overview_dark.png#dark-mode-only) ## Launching an App Instance @@ -76,7 +78,12 @@ The prefilled instance launch form can be edited before starting the new app ins ## App Instance Actions Access app instance actions, by right-clicking an instance, or through the menu button Dot menu (available on hover). -![App context menu](../../img/app_context_menu.png) +
+ +![App context menu](../../img/app_context_menu.png#light-mode-only) +![App context menu](../../img/app_context_menu_dark.png#dark-mode-only) + +
* **Rename** - Rename the instance * **Configuration** - View an instance's configuration @@ -91,7 +98,12 @@ Access app instance actions, by right-clicking an instance, or through the menu Access the instance list actions by clicking the action menu (Dot menu) on the instance list header: -![Instance list actions](../../img/apps_instance_list_actions.png) +
+ +![Instance list actions](../../img/apps_instance_list_actions.png#light-mode-only) +![Instance list actions](../../img/apps_instance_list_actions_dark.png#dark-mode-only) + +
* **Import Configuration** - Import an app instance's configuration file. This opens the app instance launch form prefilled according to the imported file. You can modify the configuration before launching the instance. diff --git a/docs/webapp/applications/apps_ssh_session.md b/docs/webapp/applications/apps_ssh_session.md index d7dae9fd..cf4ef5eb 100644 --- a/docs/webapp/applications/apps_ssh_session.md +++ b/docs/webapp/applications/apps_ssh_session.md @@ -41,7 +41,8 @@ Once you have launched an app instance, you can view the following information i * GPU memory usage * Console - The console log shows the instance's activity, including session setup progress and SSH server status changes -![SSH Session Dashboard](../../img/apps_ssh_session_dashboard.png) +![SSH Session Dashboard](../../img/apps_ssh_session_dashboard.png#light-mode-only) +![SSH Session Dashboard](../../img/apps_ssh_session_dashboard_dark.png#dark-mode-only) ## SSH Session Instance Configuration @@ -61,25 +62,25 @@ to open the app's instance launch form. ### Configuration Options -* Import Configuration - Import an app instance configuration file. This will fill the instance launch form with the +* **Import Configuration** - Import an app instance configuration file. This will fill the instance launch form with the values from the file, which can be modified before launching the app instance -* Git - The details for a git repository to optionally clone into your remote environment: +* **Git** - The details for a git repository to optionally clone into your remote environment: * Repository * Branch * Commit -* Docker - Input details to run the session in Docker container - * Image - Docker image to launch +* **Container** - Input details to run the session in Docker container + * Image - Container image to launch * Docker Arguments - Additional arguments for the Docker image * Init Script - Bash script that is executed upon container boot (comments are supported only at the beginning of the line) -* Extra Packages - Specify Python packages to install when setting up the remote environment -* Persistent Workspace Path - Specify your workspace root directory, it will be automatically stored when the session is +* **Extra Packages** - Specify Python packages to install when setting up the remote environment +* **Persistent Workspace Path** - Specify your workspace root directory, it will be automatically stored when the session is closed and restored into a new instance when the session app instance is cloned (example: `~/workspace`) -* Queue - The [ClearML Queue](../../fundamentals/agents_and_queues.md#what-is-a-queue) to which the SSH Session app +* **Queue** - The [ClearML Queue](../../fundamentals/agents_and_queues.md#what-is-a-queue) to which the SSH Session app instance task will be enqueued (make sure an agent is assigned to that queue) -* Maximum idle time (in hours) - Maximum idle time after which the app instance will shut down -* Interactive Session Name - Name your current interactive session -* Advanced Options +* **Maximum idle time** (in hours) - Maximum idle time after which the app instance will shut down +* **Interactive Session Name** - Name your current interactive session +* **Advanced Options** * Interactive Session Project - The project in which the interactive session is created. If left empty, the default project `Interactive Session` is used * Interactive Session Tags - Comma separated list of tags to add to your interactive session @@ -89,7 +90,12 @@ closed and restored into a new instance when the session app instance is cloned * Idle Network Threshold (MB) - Network throughput under which the session will be considered idle * Idle CPU Threshold (%) - CPU utilization under which the session will be considered idle * Idle GPU Threshold (%) - GPU utilization under which the session will be considered idle -* Export Configuration - Export the app instance configuration as a JSON file, which you can later import to create a +* **Export Configuration** - Export the app instance configuration as a JSON file, which you can later import to create a new instance with the same configuration -![SSH Session form](../../img/apps_ssh_session_wizard.png) \ No newline at end of file +
+ +![SSH Session form](../../img/apps_ssh_session_wizard.png#light-mode-only) +![SSH Session form](../../img/apps_ssh_session_wizard_dark.png#dark-mode-only) + +
\ No newline at end of file diff --git a/docs/webapp/applications/apps_streamlit.md b/docs/webapp/applications/apps_streamlit.md index 3aefbe21..4741a3e5 100644 --- a/docs/webapp/applications/apps_streamlit.md +++ b/docs/webapp/applications/apps_streamlit.md @@ -21,6 +21,7 @@ The Streamlit Launcher relies on the ClearML Traffic Router which implements use to the IP/port served by the Streamlit app. If the ClearML AI application Gateway is not available, the Streamlit app might not be accessible. +For more information, see [AI Application Gateway](../../deploying_clearml/enterprise_deploy/appgw.md). ::: Once you start a Streamlit launcher instance, you can view the following information in its dashboard: diff --git a/docs/webapp/applications/apps_task_scheduler.md b/docs/webapp/applications/apps_task_scheduler.md index 1eb6223a..7d623a02 100644 --- a/docs/webapp/applications/apps_task_scheduler.md +++ b/docs/webapp/applications/apps_task_scheduler.md @@ -33,14 +33,19 @@ times. * **Export Configuration** - Export the app instance configuration as a JSON file, which you can later import to create a new instance with the same configuration -![TaskScheduler instance launch form](../../img/apps_taskscheduler_wizard.png) +
+![TaskScheduler instance launch form](../../img/apps_taskscheduler_wizard.png#light-mode-only) +![TaskScheduler instance launch form](../../img/apps_taskscheduler_wizard_dark.png#dark-mode-only) + +
## Dashboard Once a Task Scheduler instance is launched, the dashboard displays a summary of the scheduled tasks. -![TaskScheduler dashboard](../../img/apps_taskscheduler_dashboard.png) +![TaskScheduler dashboard](../../img/apps_taskscheduler_dashboard.png#light-mode-only) +![TaskScheduler dashboard](../../img/apps_taskscheduler_dashboard_dark.png#dark-mode-only) The Task Scheduler dashboard shows: * Scheduled Tasks - Table of tasks scheduled for execution. The table displays the ID of the task scheduled for execution, @@ -49,12 +54,15 @@ The Task Scheduler dashboard shows: scheduled to be launched daily (`day=1`) at 06:20 UTC (`minute=20, hour=6`). The task in the third row is scheduled to be launched every month (`month=1`) on the 15th at 12:00 UTC (`day=15, hour=12`). - ![TaskScheduler scheduler tasks](../../img/apps_taskscheduler_scheduled_tasks.png) + ![TaskScheduler scheduler tasks](../../img/apps_taskscheduler_scheduled_tasks.png#light-mode-only) + ![TaskScheduler scheduler tasks](../../img/apps_taskscheduler_scheduled_tasks_dark.png#dark-mode-only) + * Executed Tasks - Table of tasks that have been executed. The table displays the `started` time, which is the time the task was enqueued, and its `finished` time, which is the time the task's execution was completed. If it says `None`, under the `finished` column, the task has not yet completed its execution. - ![TaskScheduler executed tasks](../../img/apps_taskscheduler_executed_tasks.png) + ![TaskScheduler executed tasks](../../img/apps_taskscheduler_executed_tasks.png#light-mode-only) + ![TaskScheduler executed tasks](../../img/apps_taskscheduler_executed_tasks_dark.png#dark-mode-only) * Scheduler Log - Application console log containing everything printed to stdout and stderr. The log includes when the scheduler syncs, and when it launches tasks for execution. diff --git a/docs/webapp/applications/apps_trigger_manager.md b/docs/webapp/applications/apps_trigger_manager.md index f4bdb4d1..5ee17eb6 100644 --- a/docs/webapp/applications/apps_trigger_manager.md +++ b/docs/webapp/applications/apps_trigger_manager.md @@ -52,11 +52,17 @@ The app monitors your workspace for trigger events and will launch copies of the * **Export Configuration** - Export the app instance configuration as a JSON file, which you can later import to create a new instance with the same configuration -![Trigger manager instance launch form](../../img/apps_trigger_manager_wizard.png) +
+ +![Trigger manager instance launch form](../../img/apps_trigger_manager_wizard.png#light-mode-only) +![Trigger manager instance launch form](../../img/apps_trigger_manager_wizard_dark.png#dark-mode-only) + +
## Dashboard The Trigger Manager app instance's dashboard displays its console log. The log shows the instance's activity: periodic polling, and events triggered -![Trigger dashboard](../../img/apps_trigger_manager_dashboard.png) \ No newline at end of file +![Trigger dashboard](../../img/apps_trigger_manager_dashboard.png#light-mode-only) +![Trigger dashboard](../../img/apps_trigger_manager_dashboard_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/webapp/applications/apps_vscode.md b/docs/webapp/applications/apps_vscode.md index 9ed9b573..3ad8b076 100644 --- a/docs/webapp/applications/apps_vscode.md +++ b/docs/webapp/applications/apps_vscode.md @@ -25,7 +25,8 @@ Once you have launched an app instance, you can view the following information i * Server's resources monitoring (CPU / GPU / vMem utilization) * Console - The console log shows the instance's activity, including server setup progress, server status changes -![VS Code Dashboard](../../img/apps_vs_code.png) +![VS Code Dashboard](../../img/apps_vs_code.png#light-mode-only) +![VS Code Dashboard](../../img/apps_vs_code_dark.png#dark-mode-only) ## VS Code App Instance Configuration When configuring a new VS Code instance, you can fill in the required parameters or reuse the configuration of @@ -50,8 +51,8 @@ to open the app's instance launch form. * Repository * Branch * Commit -* **Docker** - * Image - Docker image used to run the IDE in +* **Container** + * Image - container image used to run the IDE in * Docker arguments - `docker run` arguments, as a single string * **Queue** - The queue serviced by the ClearML Agent that will execute the VS Code session * **Maximum idle time** (hours) - Maximum time of inactivity, after which the session will shut down. Configure idleness diff --git a/docs/webapp/datasets/webapp_dataset_page.md b/docs/webapp/datasets/webapp_dataset_page.md index 7b5a5d20..4876a909 100644 --- a/docs/webapp/datasets/webapp_dataset_page.md +++ b/docs/webapp/datasets/webapp_dataset_page.md @@ -25,7 +25,8 @@ Filter the datasets to find the one you're looking for more easily. These filter respectively. These options appear on the top of the tag list. * Filter by the absence of a tag (logical "NOT") by clicking its checkbox twice. An X will appear in the tag's checkbox. -![Dataset page](../../img/webapp_dataset_page.png) +![Dataset page](../../img/webapp_dataset_page.png#light-mode-only) +![Dataset page](../../img/webapp_dataset_page_dark.png#dark-mode-only) ## Project Cards @@ -33,7 +34,8 @@ In Project view, project cards display a project's summarized dataset informatio
-![Project card](../../img/webapp_dataset_project_card.png) +![Project card](../../img/webapp_dataset_project_card.png#light-mode-only) +![Project card](../../img/webapp_dataset_project_card_dark.png#dark-mode-only)
@@ -51,7 +53,8 @@ In List view, the dataset cards display summarized dataset information:
-![Dataset card](../../img/webapp_dataset_card.png) +![Dataset card](../../img/webapp_dataset_card.png#light-mode-only) +![Dataset card](../../img/webapp_dataset_card_dark.png#dark-mode-only)
@@ -70,7 +73,8 @@ of a dataset card to open its context menu and access dataset actions.
-![Dataset context menu](../../img/webapp_dataset_card_context_menu.png) +![Dataset context menu](../../img/webapp_dataset_card_context_menu.png#light-mode-only) +![Dataset context menu](../../img/webapp_dataset_card_context_menu_dark.png#dark-mode-only)
diff --git a/docs/webapp/datasets/webapp_dataset_viewing.md b/docs/webapp/datasets/webapp_dataset_viewing.md index ada1a7ab..751ba740 100644 --- a/docs/webapp/datasets/webapp_dataset_viewing.md +++ b/docs/webapp/datasets/webapp_dataset_viewing.md @@ -10,13 +10,15 @@ Datasets created with earlier versions of `clearml` are available in their origi The dataset page lists the dataset's versions. For a selected version, the **Dataset Version Panel** shows its lineage in graph form. -![Dataset lineage](../../img/webapp_dataset_lineage.png) +![Dataset lineage](../../img/webapp_dataset_lineage.png#light-mode-only) +![Dataset lineage](../../img/webapp_dataset_lineage_dark.png#dark-mode-only) Each node in the graph represents a dataset version, and shows the following details:
-![Dataset node info](../../img/webapp_dataset_node.png) +![Dataset node info](../../img/webapp_dataset_node.png#light-mode-only) +![Dataset node info](../../img/webapp_dataset_node_dark.png#dark-mode-only)
@@ -61,13 +63,15 @@ On the right side of the dataset version panel, view the **VERSION INFO** which
-![Version info](../../img/webapp_dataset_version_info.png) +![Version info](../../img/webapp_dataset_version_info.png#light-mode-only) +![Version info](../../img/webapp_dataset_version_info_dark.png#dark-mode-only)
To view a version's detailed information, click **Full details**, which will open the dataset version's [task page](../webapp_exp_track_visual.md). -![Dataset task info](../../img/webapp_dataset_task_page.png) +![Dataset task info](../../img/webapp_dataset_task_page.png#light-mode-only) +![Dataset task info](../../img/webapp_dataset_task_page_dark.png#dark-mode-only) To view the information for any version in the lineage graph, click its node, and the **VERSION INFO** panel displays that version's details. @@ -78,15 +82,18 @@ Click on **DETAILS** on the top left of the info panel or hover over a version n to view the version's details panel. The panel includes three tabs: * **CONTENT** - Table summarizing version contents, including file names, file sizes, and hashes - ![content](../../img/webapp_dataset_content.png) + ![content](../../img/webapp_dataset_content.png#light-mode-only) + ![content](../../img/webapp_dataset_content_dark.png#dark-mode-only) * **PREVIEW** - A preview of the dataset version's contents. - ![preview](../../img/webapp_dataset_preview.png) + ![preview](../../img/webapp_dataset_preview.png#light-mode-only) + ![preview](../../img/webapp_dataset_preview_dark.png#dark-mode-only) * **CONSOLE** - The dataset version's console output - ![console](../../img/webapp_dataset_console.png) + ![console](../../img/webapp_dataset_console.png#light-mode-only) + ![console](../../img/webapp_dataset_console_dark.png#dark-mode-only) Click Expand on the content panel header to view the panel in full screen. @@ -100,10 +107,11 @@ Access these actions with the context menu by right-clicking a version on the da |-----|----| |Add Tag |User-defined labels added to versions for grouping and organization. | |Archive| Move dataset versions to the dataset's archive. | -|Restore|Action available in the archive. Restore a version to the active dataset versions table.| +|Restore|Action available in the archive. Restore a version to the active dataset version table.| |Delete| Delete an archived version and its artifacts. This action is available only from the dataset's archive. | -![Dataset actions](../../img/webapp_dataset_actions.png) +![Dataset actions](../../img/webapp_dataset_actions.png#light-mode-only) +![Dataset actions](../../img/webapp_dataset_actions_dark.png#dark-mode-only) The actions mentioned in the chart above can be performed on multiple versions at once. [Select multiple versions](#selecting-multiple-versions), then use either the context menu, or the bar that appears at the bottom of the page, to perform operations on the diff --git a/docs/webapp/pipelines/webapp_pipeline_page.md b/docs/webapp/pipelines/webapp_pipeline_page.md index 32480b15..300c65a5 100644 --- a/docs/webapp/pipelines/webapp_pipeline_page.md +++ b/docs/webapp/pipelines/webapp_pipeline_page.md @@ -21,14 +21,16 @@ Filter the pipelines to find the one you're looking for more easily. These filte * Filter by the absence of a tag (logical "NOT") by clicking its checkbox twice. An X will appear in the tag's checkbox. -![Pipelines page](../../img/webapp_pipeline_table.png) +![Pipelines page](../../img/webapp_pipeline_table.png#light-mode-only) +![Pipelines page](../../img/webapp_pipeline_table_dark.png#dark-mode-only) ## Project Cards In Project view, project cards display a project's summarized pipeline information:
-![Pipeline project card](../../img/webapp_pipeline_project_card.png) +![Pipeline project card](../../img/webapp_pipeline_project_card.png#light-mode-only) +![Pipeline project card](../../img/webapp_pipeline_project_card_dark.png#dark-mode-only)
@@ -41,7 +43,8 @@ In List view, the pipeline cards display summarized pipeline information:
-![Pipeline card](../../img/webapp_pipeline_card.png) +![Pipeline card](../../img/webapp_pipeline_card.png#light-mode-only) +![Pipeline card](../../img/webapp_pipeline_card_dark.png#dark-mode-only)
@@ -58,7 +61,8 @@ of a pipeline card to open its context menu and access pipeline actions.
-![Project context menu](../../img/webapp_pipeline_context_menu.png) +![Project context menu](../../img/webapp_pipeline_context_menu.png#light-mode-only) +![Project context menu](../../img/webapp_pipeline_context_menu_dark.png#dark-mode-only)
diff --git a/docs/webapp/pipelines/webapp_pipeline_table.md b/docs/webapp/pipelines/webapp_pipeline_table.md index 364e7bd4..114154f7 100644 --- a/docs/webapp/pipelines/webapp_pipeline_table.md +++ b/docs/webapp/pipelines/webapp_pipeline_table.md @@ -1,5 +1,5 @@ --- -title: The Pipeline Runs Table +title: The Pipeline Run Table --- The pipeline runs table is a [customizable](#customizing-the-runs-table) list of the pipeline's runs. Use it to @@ -26,16 +26,17 @@ and choosing one of these options: The downloaded data consists of the currently displayed table columns. -![Pipeline runs table](../../img/webapp_pipeline_runs_table.png) +![Pipeline runs table](../../img/webapp_pipeline_runs_table.png#light-mode-only) +![Pipeline runs table](../../img/webapp_pipeline_runs_table_dark.png#dark-mode-only) ## Run Table Columns -The models table contains the following columns: +The pipeline run table contains the following columns: | Column | Description | Type | |---|---|---| | **RUN** | Pipeline run identifier | String | -| **VERSION** | The pipeline version number. Corresponds to the [PipelineController](../../references/sdk/automation_controller_pipelinecontroller.md#class-pipelinecontroller)'s and [PipelineDecorator](../../references/sdk/automation_controller_pipelinecontroller.md#class-automationcontrollerpipelinedecorator)'s `version` parameter | Version string | +| **VERSION** | The pipeline version number. Corresponds to the [PipelineController](../../references/sdk/automation_controller_pipelinecontroller.md#class-pipelinecontroller)'s and [PipelineDecorator](../../references/sdk/automation_controller_pipelinedecorator.md#class-automationcontrollerpipelinedecorator)'s `version` parameter | Version string | | **TAGS** | Descriptive, user-defined, color-coded tags assigned to run. | Tag | | **STATUS** | Pipeline run's status. See a list of the [task states and state transitions](../../fundamentals/task.md#task-states). For Running, Failed, and Aborted runs, you will also see a progress indicator next to the status. See [here](../../pipelines/pipelines.md#tracking-pipeline-progress). | String | | **USER** | User who created the run. | String | @@ -98,7 +99,8 @@ you can set the run's parameters. By default, the fields are pre-filled with the Click **Advanced configurations** to change the run's execution queue. -![New run modal](../../img/webapp_pipeline_new_run.png) +![New run modal](../../img/webapp_pipeline_new_run.png#light-mode-only) +![New run modal](../../img/webapp_pipeline_new_run_dark.png#dark-mode-only) After clicking **RUN**, the new pipeline run is enqueued in the specified queue, and the run is added to the pipeline run table. @@ -125,7 +127,8 @@ Access these actions with the context menu in any of the following ways:
-![pipeline run context menu](../../img/webapp_pipelines_context_menu.png) +![pipeline run context menu](../../img/webapp_pipelines_context_menu.png#light-mode-only) +![pipeline run context menu](../../img/webapp_pipelines_context_menu_dark.png#dark-mode-only)
@@ -157,12 +160,14 @@ In the dropdown menu, select to view **Scalars** or **Plots**. **Scalars** shows pipeline run scalar results as time series line graphs. -![Scalar line graphs](../../img/pipelines_comparison_scalars.png) +![Scalar line graphs](../../img/pipelines_comparison_scalars.png#light-mode-only) +![Scalar line graphs](../../img/pipelines_comparison_scalars_dark.png#dark-mode-only) All single value scalars are plotted into a single clustered bar chart under the "Summary" title, where each cluster -represents a reported metric, and each bar in the cluster represents an experiment. +represents a reported metric, and each bar in the cluster represents a task. -![Single scalar comparison](../../img/pipelines_comparison_single_scalar.png) +![Single scalar comparison](../../img/pipelines_comparison_single_scalar.png#light-mode-only) +![Single scalar comparison](../../img/pipelines_comparison_single_scalar_dark.png#dark-mode-only) Click Setting Gear to customize which metrics to view. @@ -174,14 +179,16 @@ In the **Scalars** view, click T
 Line, scatter, box, and bar graphs are compared by overlaying each metric/variant from all compared runs' into a single 
 comparative plot.
 
-![Merged plots](../../img/pipelines_comparison_plots_merged.png)
+![Merged plots](../../img/pipelines_comparison_plots_merged.png#light-mode-only)
+![Merged plots](../../img/pipelines_comparison_plots_merged_dark.png#dark-mode-only)
 
 Other plot types are displayed separately for each run.
 
-![Side-by-side plots](../../img/pipelines_comparison_plots.png)
+![Side-by-side plots](../../img/pipelines_comparison_plots.png#light-mode-only)
+![Side-by-side plots](../../img/pipelines_comparison_plots_dark.png#dark-mode-only)
 
 
 ### Run Details Comparison
 For a more in depth comparison of pipeline runs, select the runs to compare and click **Compare** in the batch action 
 bar. In the run comparison pages, you can compare details, hyperparameters, scalars, plots, and debug samples. For more 
-information, see [Comparing Experiments](../webapp_exp_comparing.md).
+information, see [Comparing Tasks](../webapp_exp_comparing.md).
diff --git a/docs/webapp/pipelines/webapp_pipeline_viewing.md b/docs/webapp/pipelines/webapp_pipeline_viewing.md
index 65bf262c..6868c063 100644
--- a/docs/webapp/pipelines/webapp_pipeline_viewing.md
+++ b/docs/webapp/pipelines/webapp_pipeline_viewing.md
@@ -5,11 +5,13 @@ title: Pipeline Run Details
 The run details panel shows the pipeline's structure and the execution status of every step, as well as the run's 
 configuration parameters and output. 
 
-![Pipeline structure](../../img/webapp_pipeline_DAG.png)
+![Pipeline structure](../../img/webapp_pipeline_DAG.png#light-mode-only)
+![Pipeline structure](../../img/webapp_pipeline_DAG_dark.png#dark-mode-only)
 
 Each step shows: 
 
-![Pipeline step info](../../img/webapp_pipeline_node.png)
+![Pipeline step info](../../img/webapp_pipeline_node.png#light-mode-only)
+![Pipeline step info](../../img/webapp_pipeline_node_dark.png#dark-mode-only)
 
 * Step name
 * Step status
@@ -19,16 +21,58 @@ Each step shows:
 
 While the pipeline is running, the steps' details and colors are updated.
 
+## Run Stages
+Steps that were set into the same stage when created, are grouped into stages in the Run Details panel. 
+
+In stages view, click`Expand Stages` to view the complete pipeline DAG with all steps visible. 
+In the detailed view, click `Collapse Stages` to view the pipeline DAG outline with the same stage steps grouped into a single stage.
+
+![Pipeline structure in stages](../../img/webapp_pipeline_DAG_collapsed.png#light-mode-only)
+![Pipeline structure in stages](../../img/webapp_pipeline_DAG_collapsed_dark.png#dark-mode-only)
+
+In the collapsed view, each stage displays:
+
+<div class= + +![Pipeline stage card](../../img/webapp_pipeline_stage_card.png#light-mode-only) +![Pipeline stage card](../../img/webapp_pipeline_stage_card_dark.png#dark-mode-only) + + + +* Stage name +* Number of steps in stage + +Click Expand to view the +steps that comprise the stage. Select a step to view its [Step Info](#run-and-step-info). + +Click on a stage to view its **STAGE INFO**: + +
+ +![Pipeline stage info](../../img/webapp_pipeline_stage_info.png#light-mode-only) +![Pipeline stage info](../../img/webapp_pipeline_stage_info_dark.png#dark-mode-only) + +
+ +* Stage name +* Step count by status - The number of steps in each status category (e.g. completed, running, pending) + + ## Run and Step Details ### Run and Step Info -On the right side of the pipeline run panel, view the **RUN INFO** which shows: +On the pipeline run panel, view the **RUN INFO** which shows: * Run Parameters * Reported Metrics * Produced Artifacts * Output Models -![Run info](../../img/webapp_pipeline_run_info.png) +
+ +![Run info](../../img/webapp_pipeline_run_info.png#light-mode-only) +![Run info](../../img/webapp_pipeline_run_info_dark.png#dark-mode-only) + +
To view a run's complete information, click **Full details**, which will open the pipeline's controller [task page](../webapp_exp_track_visual.md). View each list's complete details in the pipeline task's corresponding tabs: @@ -36,12 +80,14 @@ View each list's complete details in the pipeline task's corresponding tabs: * **METRICS** list > **SCALARS** tab * **ARTIFACTS** and **MODELS** lists > **ARTIFACTS** tab -![Pipeline task info](../../img/webapp_pipeline_task_info.png) +![Pipeline task info](../../img/webapp_pipeline_task_info.png#light-mode-only) +![Pipeline task info](../../img/webapp_pipeline_task_info_dark.png#dark-mode-only) To view a specific step's information, click the step on the execution graph, and the info panel displays its **STEP INFO**. The panel displays the step's name, task type, and status, as well as its parameters, metrics, artifacts, and models. -![Step info](../../img/webapp_pipeline_step_info.png) +![Step info](../../img/webapp_pipeline_step_info.png#light-mode-only) +![Step info](../../img/webapp_pipeline_step_info_dark.png#dark-mode-only) To return to viewing the run's information, click the pipeline graph, outside any of the steps. @@ -53,16 +99,19 @@ details panel, click **DETAILS** and then click on a step node, or hover over a The details panel includes three tabs: * **Preview** - View debug samples and plots attached to the pipeline controller or step - ![preview](../../img/webapp_pipeline_step_debug.png) + ![preview](../../img/webapp_pipeline_step_debug.png#light-mode-only) + ![preview](../../img/webapp_pipeline_step_debug_dark.png#dark-mode-only) * **Console** - The console log for the pipeline controller or steps: contains everything printed to stdout and stderr. - ![console](../../img/webapp_pipeline_step_console.png) + ![console](../../img/webapp_pipeline_step_console.png#light-mode-only) + ![console](../../img/webapp_pipeline_step_console_dark.png#dark-mode-only) * **Code** - For pipeline steps generated from functions using either [`PipelineController.add_function_step`](../../references/sdk/automation_controller_pipelinecontroller.md#add_function_step) -or [`PipelineDecorator.component`](../../references/sdk/automation_controller_pipelinecontroller.md#pipelinedecoratorcomponent), +or [`PipelineDecorator.component`](../../references/sdk/automation_controller_pipelinedecorator.md#pipelinedecoratorcomponent), you can view the selected step's code. - ![code](../../img/webapp_pipeline_step_code.png) + ![code](../../img/webapp_pipeline_step_code.png#light-mode-only) + ![code](../../img/webapp_pipeline_step_code_dark.png#dark-mode-only) Click Expand on the details panel header to view the panel in full screen. diff --git a/docs/webapp/resource_policies.md b/docs/webapp/resource_policies.md index ddb09473..1a22a2bb 100644 --- a/docs/webapp/resource_policies.md +++ b/docs/webapp/resource_policies.md @@ -3,7 +3,7 @@ title: Resource Policies --- :::important ENTERPRISE FEATURE -This feature is available under the ClearML Enterprise plan. +Resource Policies are available under the ClearML Enterprise plan. ::: @@ -19,7 +19,8 @@ Set resource reservation and limits for user groups * Connect resource profiles to a policy, making them available to its user group via ClearML queues * Non-administrator users can see the resource policies currently applied to them. -![Resource Policy dashboard](../img/resource_policies_dashboard.png) +![Resource Policy dashboard](../img/resource_policies_dashboard.png#light-mode-only) +![Resource Policy dashboard](../img/resource_policies_dashboard_dark.png#dark-mode-only) ## Create a Policy @@ -70,7 +71,8 @@ The top card displays the policy information: * Resource limit * User group that the policy applies to - click to show list of users in the group -![Resource policy card](../img/resource_policies_policy_card.png) +![Resource policy card](../img/resource_policies_policy_card.png#light-mode-only) +![Resource policy card](../img/resource_policies_policy_card_dark.png#dark-mode-only) The cards below the policy card display the profiles that are connected to the policy: * Resource profile name @@ -79,11 +81,13 @@ of resources consumed by each job enqueued through this profile's queue * Queued jobs - Currently queued jobs * Running jobs - Currently running jobs -![Resource profile card non-admin view](../img/resource_policies_profile_card_non_admin.png) +![Resource profile card non-admin view](../img/resource_policies_profile_card_non_admin.png#light-mode-only) +![Resource profile card non-admin view](../img/resource_policies_profile_card_non_admin_dark.png#dark-mode-only) Administrators can also see each resource profile’s resource pool links listed in order of routing priority. -![Resource profile card admin view](../img/resource_policies_profile_card_admin.png) +![Resource profile card admin view](../img/resource_policies_profile_card_admin.png#light-mode-only) +![Resource profile card admin view](../img/resource_policies_profile_card_admin_dark.png#dark-mode-only) The arrow connecting the policy card with a profile card is labeled with the name of the queue the policy’s users should use to run tasks through that resource profile. @@ -112,7 +116,8 @@ and description **To remove a resource profile:** On the relevant resource profile box, click `X`. -![Remove resource profile](../img/resource_policies_remove_profile.png) +![Remove resource profile](../img/resource_policies_remove_profile.png#light-mode-only) +![Remove resource profile](../img/resource_policies_remove_profile_dark.png#dark-mode-only) Removing a profile from a policy will also delete the queue which made this profile available to the policy’s users. Any tasks enqueued on this queue will be set to `draft` status. diff --git a/docs/webapp/settings/webapp_settings_access_rules.md b/docs/webapp/settings/webapp_settings_access_rules.md index 869a1442..c2978c10 100644 --- a/docs/webapp/settings/webapp_settings_access_rules.md +++ b/docs/webapp/settings/webapp_settings_access_rules.md @@ -3,7 +3,7 @@ title: Access Rules --- :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Access rules are available under the ClearML Enterprise plan. ::: Workspace administrators can use the **Access Rules** page to manage workspace permissions, by specifying which users, @@ -26,7 +26,7 @@ Access privileges can be viewed, defined, and edited in the **Access Rules** tab specific project or task), click the input box, and select the object from the list that appears. Filter the list by typing part of the desired object name 1. Select the permission type - **Read Only** or **Read & Modify** -1. Assign users, [service accounts](webapp_settings_access_rules.md#service-accounts), and/or [user groups](webapp_settings_users.md#user-groups) +1. Assign users, [service accounts](webapp_settings_users.md#service-accounts), and/or [user groups](webapp_settings_users.md#user-groups) to be given access. Click the desired input box, and select the users / service accounts / groups from the list that appears. Filter the list by typing part of the desired object name. To revoke @@ -34,7 +34,12 @@ Access privileges can be viewed, defined, and edited in the **Access Rules** tab button 1. Click **SAVE** -![Access rule creation dialog](../../img/settings_access_rules.png) +
+ +![Access rule creation dialog](../../img/settings_access_rules.png#light-mode-only) +![Access rule creation dialog](../../img/settings_access_rules_dark.png#dark-mode-only) + +
Access is inherited according to resource hierarchy. For example, if a user is given access to a project, the user will also have access to the project's contents (tasks, models, etc.). A user who is granted access to a specific task will diff --git a/docs/webapp/settings/webapp_settings_admin_vaults.md b/docs/webapp/settings/webapp_settings_admin_vaults.md index e74a4315..9ead42a7 100644 --- a/docs/webapp/settings/webapp_settings_admin_vaults.md +++ b/docs/webapp/settings/webapp_settings_admin_vaults.md @@ -3,7 +3,7 @@ title: Administrator Vaults --- :::info Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Administrator vaults are available under the ClearML Enterprise plan. ::: Administrators can define multiple [configuration vaults](webapp_settings_profile.md#configuration-vault) which will each be applied to designated @@ -67,4 +67,5 @@ The **Administrator Vaults** table lists all currently defined vaults, and the f Hover over a vault in the table to **Download**, **Edit**, or **Delete** a vault. -![Admin vaults](../../img/settings_admin_vaults.png) \ No newline at end of file +![Admin vaults](../../img/settings_admin_vaults.png#light-mode-only) +![Admin vaults](../../img/settings_admin_vaults_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/webapp/settings/webapp_settings_id_providers.md b/docs/webapp/settings/webapp_settings_id_providers.md index 4c0f3980..6942c06c 100644 --- a/docs/webapp/settings/webapp_settings_id_providers.md +++ b/docs/webapp/settings/webapp_settings_id_providers.md @@ -3,7 +3,7 @@ title: Identity Providers --- :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Identity provider integration is available under the ClearML Enterprise plan. ::: Administrators can connect identity service providers to the server: configure an identity connection, which allows @@ -145,4 +145,5 @@ The **Provider Connections** table lists all currently defined connections, and Hover over a connection in the table to **Edit** or **Delete** it. -![Identity provider chart](../../img/settings_identity_chart.png) +![Identity provider chart](../../img/settings_identity_chart.png#light-mode-only) +![Identity provider chart](../../img/settings_identity_chart_dark.png#dark-mode-only) diff --git a/docs/webapp/settings/webapp_settings_overview.md b/docs/webapp/settings/webapp_settings_overview.md index d44fe05f..a2ea94ec 100644 --- a/docs/webapp/settings/webapp_settings_overview.md +++ b/docs/webapp/settings/webapp_settings_overview.md @@ -12,7 +12,7 @@ The Settings page consists of the following sections: * [Profile](webapp_settings_profile.md#profile) - You basic user information * [Configuration](webapp_settings_profile.md#configuration) - Control general system behavior settings and input storage access credentials * [Workspace](webapp_settings_profile.md#workspace) - * [ClearML credentials](webapp_settings_profile.md#clearml-credentials) - Create client credentials for ClearML and ClearML Agent to use + * [ClearML credentials](webapp_settings_profile.md#clearml-api-credentials) - Create client credentials for ClearML and ClearML Agent to use * [Configuration vault](webapp_settings_profile.md#configuration-vault) (ClearML Enterprise Server) - Define global ClearML client settings that are applied to all ClearML and ClearML Agent instances (which use the workspace's access credentials) @@ -24,6 +24,6 @@ The Settings page consists of the following sections: * [Identity Providers](webapp_settings_id_providers.md) (ClearML Enterprise Server) - Manage server identity providers * [Resource Configuration](webapp_settings_resource_configs.md) (ClearML Enterprise Server) - Define the available resources and the way in which they will be allocated to different workloads - * [Usage & Billing](webapp_settings_usage_billing.md) (ClearML Hosted Service) - View current usage information and billing details - * [Storage Credentials](webapp_settings_storage_credentials.md) (ClearML Enterprise Server) - Configure storage provider access credentials to + * [Billing & Usage](webapp_settings_usage_billing.md) (ClearML Hosted Service) - View current billing details and usage information + * [Storage Cleanup](webapp_settings_storage_credentials.md) (ClearML Enterprise Server) - Configure storage provider access credentials to enable ClearML to delete artifacts stored in cloud storage when tasks and models are deleted \ No newline at end of file diff --git a/docs/webapp/settings/webapp_settings_profile.md b/docs/webapp/settings/webapp_settings_profile.md index 721e12e3..e2cf4454 100644 --- a/docs/webapp/settings/webapp_settings_profile.md +++ b/docs/webapp/settings/webapp_settings_profile.md @@ -27,7 +27,7 @@ Disable for default desktop scale. * **Block running user's scripts in the browser** - Block any user and 3rd party scripts from running anywhere in the WebApp. Note that if enabled, the WebApp will not display debug samples, [Hyper-Dataset frame previews](../../hyperdatasets/previews.md), and embedded resources in [reports](../webapp_reports.md). -* **Hide specific container arguments** - Specify which Docker environment variable values should be hidden in logs. +* **Hide specific container arguments** - Specify which container environment variable values should be hidden in logs. When printed, the variable values are replaced with `********`. By default, `CLEARML_API_SECRET_KEY`, `CLEARML_AGENT_GIT_PASS`, `AWS_SECRET_ACCESS_KEY`, and `AZURE_STORAGE_KEY` values are redacted. To modify the hidden container argument list, click **Edit**. @@ -60,9 +60,10 @@ ClearML Hosted Service users can be members of multiple workspaces, which are li To switch to another workspace, click on the **SWITCH TO WORKSPACE** button next to the name of the workspace you want to switch to. -![Workspace configuration page](../../img/settings_workspace_configuration.png) +![Workspace configuration page](../../img/settings_workspace_configuration.png#light-mode-only) +![Workspace configuration page](../../img/settings_workspace_configuration_dark.png#dark-mode-only) -### ClearML App Credentials +### ClearML API Credentials Generate ClearML credentials, made up of an access and secret key pair, and insert them into your [configuration file](../../configs/clearml_conf.md) or Jupyter Notebook to grant the ClearML SDK and the ClearML Agent API access to the server. @@ -73,31 +74,37 @@ You can create credentials for any workspace that you are a member of. 1. In **WORKSPACE**, expand the desired workspace's panel (self-deployed ClearML Server users have one workspace) -1. In **App Credentials**, click **+ Create new credentials** +1. In **API Credentials**, click **+ Create new credentials** 1. In the dialog that pops up, you can input a label for the new credentials The dialog displays new credentials, formatted as a ready-to-copy configuration file section (including server configuration information). -![ClearML credentials](../../img/settings_configuration_creation.png) +
+ +![ClearML credentials](../../img/settings_configuration_creation.png#light-mode-only) +![ClearML credentials](../../img/settings_configuration_creation_dark.png#dark-mode-only) + +
You can edit the labels of credentials in your own workspace, or credentials that you created in other workspaces. -**To edit the credentials label:** hover over the desired credentials, and click Edit Pencil +**To edit the credentials label:** hover over the desired credentials, and click Edit Pencil . You can revoke any credentials in your own workspace, or credentials that you created in other workspaces. Once revoked, these credentials cannot be recovered. -**To revoke ClearML credentials:** hover over the desired credentials, and click Trash can +**To revoke ClearML credentials:** hover over the desired credentials, and click Trash can . ### AI Application Gateway Tokens :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +The AI Application Gateway is available under the ClearML Enterprise plan. ::: -The AI Application Gateway enables external access to ClearML tasks and applications. The gateway is configured with an +The [AI Application Gateway](../../deploying_clearml/enterprise_deploy/appgw.md) enables external access to ClearML +tasks and applications. The gateway is configured with an endpoint or external address (ingress), accessible from outside ClearML. Generate tokens providing API access to the AI Application Gateway endpoints: @@ -108,7 +115,7 @@ Generate tokens providing API access to the AI Application Gateway endpoints: ### Changing Your Workspace Name To change the name of your own workspace, click **Edit workspace name** Edit Pencil -(under App credentials) **>** modify the name **>** click Check Mark. +(under API credentials) **>** modify the name **>** click Check Mark. ### Adding Users to Your Workspace @@ -140,7 +147,7 @@ in that workspace. You can rejoin the workspace only if you are re-invited. ### Configuration Vault :::info Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Configuration vaults are available under the ClearML Enterprise plan. ::: Use the configuration vault to store global ClearML configuration entries that can extend the ClearML [configuration file](../../configs/clearml_conf.md) @@ -161,4 +168,5 @@ Fill in values using any of ClearML supported configuration formats: HOCON / JSO * Click the toggle atop the vault to enable / disable the configurations * Once enabled, the configurations will be merged to the configuration file during ClearML and ClearML Agent usage -![Configuration vault](../../img/settings_configuration_vault.png) +![Configuration vault](../../img/settings_configuration_vault.png#light-mode-only) +![Configuration vault](../../img/settings_configuration_vault_dark.png#dark-mode-only) diff --git a/docs/webapp/settings/webapp_settings_resource_configs.md b/docs/webapp/settings/webapp_settings_resource_configs.md index 08733199..165beae6 100644 --- a/docs/webapp/settings/webapp_settings_resource_configs.md +++ b/docs/webapp/settings/webapp_settings_resource_configs.md @@ -8,7 +8,8 @@ reservations for different user groups to prioritize workload usage across avail Under the **Resource Configuration** section, administrators define the available resources and the way in which they will be allocated to different workloads. -![Resource configuration page](../../img/resource_configuration.png) +![Resource configuration page](../../img/resource_configuration.png#light-mode-only) +![Resource configuration page](../../img/resource_configuration_dark.png#dark-mode-only) The Resource Configuration settings page shows the [currently provisioned](#applying-resource-configuration) configuration: the defined resource pools, resource profiles, and the resource allocation architecture. @@ -25,7 +26,12 @@ versa). The resource pool cards are displayed on the top of the Resource Configuration settings page. Each card displays the following information: -![Resource pool card](../../img/resource_configuration_pool_card.png) +
+ +![Resource pool card](../../img/resource_configuration_pool_card.png#light-mode-only) +![Resource pool card](../../img/resource_configuration_pool_card_dark.png#dark-mode-only) + +
* Pool name * Number of resources currently in use out of the total available resources @@ -45,7 +51,17 @@ R&D team and DevOps team both have pending jobs - run the R&D team's jobs first The resource profile cards are displayed on the bottom of the Resource Configuration settings page. Each card displays the following information: -![Resource profile card](../../img/resource_configuration_profile_card.png) +
+ +![Resource profile card](../../img/resource_configuration_profile_card.png#light-mode-only) + +
+ +
+ +![Resource profile card](../../img/resource_configuration_profile_card_dark.png#dark-mode-only) + +
* Profile name * Number of resources - Number @@ -61,18 +77,21 @@ You have GPUs spread across a local H100 and additional bare metal servers, as w by an autoscaler). Assume that currently most of your resources are already assigned to jobs, and only 16 resources are available: 8 in the H100 resource pool and 8 in the Bare Metal pool: -![Example resource pools](../../img/resource_example_pools.png) +![Example resource pools](../../img/resource_example_pools.png#light-mode-only) +![Example resource pools](../../img/resource_example_pools_dark.png#dark-mode-only) Teams' jobs have varying resource requirements of 0.5, 2, 4, and 8 GPUs. Resource profiles are defined to reflect these: -![Example resource profiles](../../img/resource_example_profile.png) +![Example resource profiles](../../img/resource_example_profile.png#light-mode-only) +![Example resource profiles](../../img/resource_example_profile_dark.png#dark-mode-only) The different jobs will be routed to different resource pools by connecting the profiles to the resource pools. Jobs enqueued through the profiles will be run in the pools where there are available resources in order of their priority. For example, the H100 pool will run jobs with the following precedence: 2 GPU jobs first, then 4 GPU ones, then 8 GPU, and lastly 0.5 GPU. -![Example profile priority](../../img/resource_example_profile_priority.png) +![Example profile priority](../../img/resource_example_profile_priority.png#light-mode-only) +![Example profile priority](../../img/resource_example_profile_priority_dark.png#dark-mode-only) Resource policies are implemented for two teams: * Dev team @@ -81,21 +100,33 @@ Resource policies are implemented for two teams: Each team has a resource policy configured with 8 reserved resources and a 16 resource limit. Both teams make use of the 4xGPU profile (i.e. each job running through this profile requires 4 resources). -![Example resource policy](../../img/resource_example_policy.png) +![Example resource policy](../../img/resource_example_policy.png#light-mode-only) +![Example resource policy](../../img/resource_example_policy_dark.png#dark-mode-only) The Dev team is prioritized over the Research team by placing it higher in the Resource Profile's Policies Priority list: -![Example resource policy priority](../../img/resource_example_policy_priority.png) +
+ +![Example resource policy priority](../../img/resource_example_policy_priority.png#light-mode-only) +![Example resource policy priority](../../img/resource_example_policy_priority_dark.png#dark-mode-only) + +
Both the Dev team and the Research team enqueue four 4-resource jobs each: Dev team jobs will be allocated resources first. The `4xGPU` resource profile is connected to two resource pools: `Bare Metal Low END GPUs` (with the `4 GPU Low End` link) and `H100 Half a Superpod` (with the `4 GPU H100 link`). -![Example resource profile-pool connections](../../img/resource_example_profile_pool_links.png) +![Example resource profile-pool connections](../../img/resource_example_profile_pool_links.png#light-mode-only) +![Example resource profile-pool connections](../../img/resource_example_profile_pool_links_dark.png#dark-mode-only) Resources are assigned from the `Bare Metal` pool first (precedence set on the resource profile card): -![Example resource pool precedence](../../img/resource_example_pool_priority.png) +
+ +![Example resource pool precedence](../../img/resource_example_pool_priority.png#light-mode-only) +![Example resource pool precedence](../../img/resource_example_pool_priority_dark.png#dark-mode-only) + +
If the first pool cannot currently satisfy the profile’s resource requirements, resources are assigned from the next listed pool. Let's look at the first pool in the image below. Notice that the pool has 8 available resources, therefore @@ -103,7 +134,8 @@ it can run two 4-resource jobs.
-![Example resource pool card](../../img/resource_example_pool_card.png) +![Example resource pool card](../../img/resource_example_pool_card.png#light-mode-only) +![Example resource pool card](../../img/resource_example_pool_card_dark.png#dark-mode-only)
diff --git a/docs/webapp/settings/webapp_settings_storage_credentials.md b/docs/webapp/settings/webapp_settings_storage_credentials.md index 1435c5d5..58c8603c 100644 --- a/docs/webapp/settings/webapp_settings_storage_credentials.md +++ b/docs/webapp/settings/webapp_settings_storage_credentials.md @@ -1,17 +1,14 @@ --- -title: Storage Credentials +title: Storage Cleanup --- -:::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. -::: - To enable ClearML to delete task artifacts stored in cloud storage when a task is deleted, configure access credentials for your storage provider: * [Google Cloud Storage](#google-cloud-storage) * [AWS S3 Storage](#aws-s3-storage) * [Azure](#azure) -![Storage Credentials page](../../img/webapp_settings_storage_credentials.png) +![Storage Cleanup page](../../img/webapp_settings_storage_credentials.png#light-mode-only) +![Storage Cleanup page](../../img/webapp_settings_storage_credentials_dark.png#dark-mode-only) ## Google Cloud Storage Set up credentials for Google Cloud buckets: diff --git a/docs/webapp/settings/webapp_settings_usage_billing.md b/docs/webapp/settings/webapp_settings_usage_billing.md index 17d0549b..7824d0e6 100644 --- a/docs/webapp/settings/webapp_settings_usage_billing.md +++ b/docs/webapp/settings/webapp_settings_usage_billing.md @@ -1,13 +1,14 @@ --- -title: Usage & Billing +title: Billing & Usage --- -The **USAGE & BILLING** section displays your ClearML workspace usage information including: +The **Billing & Usage** section displays your ClearML workspace usage information including: * Number of workspace users * Available storage * Number of monthly API calls -![Billing and Usage free](../../img/settings_billing_usage_free.png) +![Billing and Usage free](../../img/settings_billing_usage_free.png#light-mode-only) +![Billing and Usage free](../../img/settings_billing_usage_free_dark.png#dark-mode-only) To add users to your workspace, click **INVITE USERS** in the **USERS** section. This will redirect you to the **USER MANAGEMENT** page, where you can invite users (see details [here](webapp_settings_users.md#inviting-new-teammates)). @@ -17,10 +18,11 @@ To add users to your workspace, click **INVITE USERS** in the **USERS** section. If you use up your free resources, consider upgrading your account! See the [ClearML pricing page](https://clear.ml/pricing/) for additional plans information. -With the ClearML Pro plan, the **USAGE & BILLING** page additionally shows estimated charges for the current billing +With the ClearML Pro plan, the **Billing & Usage** page additionally shows estimated charges for the current billing period and provides access to billing information. -![Billing and Usage pro](../../img/settings_billing_usage.png) +![Billing and Usage pro](../../img/settings_billing_usage.png#light-mode-only) +![Billing and Usage pro](../../img/settings_billing_usage_dark.png#dark-mode-only) **To Upgrade your account to ClearML Pro**, click **UPGRADE** in the top right corner of the page. This will open a wizard where you will be able to read the terms and conditions and input your billing information. diff --git a/docs/webapp/settings/webapp_settings_users.md b/docs/webapp/settings/webapp_settings_users.md index 215d2eaa..22d07379 100644 --- a/docs/webapp/settings/webapp_settings_users.md +++ b/docs/webapp/settings/webapp_settings_users.md @@ -19,7 +19,11 @@ Each row of the table includes: * If the user's invitation is pending, the date the user was added * [User groups](#user-groups) (ClearML Enterprise feature) -![Users table](../../img/settings_user_table.png) +Use the search bar Magnifying glass +to find a specific user by their name, email, or user ID. + +![Users table](../../img/settings_user_table.png#light-mode-only) +![Users table](../../img/settings_user_table_dark.png#dark-mode-only) ### Inviting New Teammates @@ -38,7 +42,7 @@ user can only rejoin your workspace when you re-invite them. ## Service Accounts :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +Service accounts are available under the ClearML Enterprise plan. ::: Service accounts are ClearML users that provide services with access to the ClearML API, but not the @@ -67,9 +71,13 @@ Each row of the table includes: * Credentials - Number of credentials currently available to the account * Last active time +Use the search bar Magnifying glass +to find a specific service account by its name or ID. + Hover over a service account in the table to **Edit** or **Delete** it. -![Service accounts](../../img/settings_service_accounts.png) +![Service accounts](../../img/settings_service_accounts.png#light-mode-only) +![Service accounts](../../img/settings_service_accounts_dark.png#dark-mode-only) ### Creating a Service Account @@ -129,11 +137,12 @@ To apply vault contents: * Click the toggle atop the vault to enable / disable the configurations * Once enabled, the configurations will be merged to the configuration file during ClearML and ClearML Agent usage -In addition to the service account-specific configuration vault, [administrator vaults](#administrator-vaults) can also +In addition to the service account-specific configuration vault, [administrator vaults](webapp_settings_admin_vaults.md) can also be applied to service accounts. See all the vaults applied to the account in the **Applied administrator vaults** below the configuration vault. -![Service Account Config Vault](../../img/settings_service_account_config_vault.png) +![Service Account Config Vault](../../img/settings_service_account_config_vault.png#light-mode-only) +![Service Account Config Vault](../../img/settings_service_account_config_vault_dark.png#dark-mode-only) ### Deleting Service Account Deleting a service account will revoke its credentials, causing agents using the account's credentials to fail. @@ -146,7 +155,7 @@ To delete a service account: ## User Groups :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan, as part of the [Access Rules](webapp_settings_access_rules.md) +User groups are available under the ClearML Enterprise plan, as part of the [Access Rules](webapp_settings_access_rules.md) feature. ::: @@ -160,8 +169,11 @@ The system includes three pre-configured groups that can't be removed: * `Queue admins` - Can create / delete / rename queues The user group table lists all the active user groups. Each row includes a group's name, description, member list, and ID. +Use the search bar Magnifying glass +to find a specific user group by its name, description, or ID. -![User Management Page](../../img/settings_user_management_table.png) +![User Management Page](../../img/settings_user_management_table.png#light-mode-only) +![User Management Page](../../img/settings_user_management_table_dark.png#dark-mode-only) ### Creating a User Group @@ -169,11 +181,16 @@ The user group table lists all the active user groups. Each row includes a group 1. Click **+ ADD GROUP** 1. In the dialog, add a group name and description 1. Add members to the group. When clicking the input box, a list of workspace members appears, from which group members - can be selected. Filter the list by typing part of the username. To remove a member, Hover over a user's row and click + can be selected. Filter the list by typing part of the username. To remove a member, hover over a user's row and click the Trash can button 1. Click **SAVE** -![User group creation dialog](../../img/settings_user_group.png) +
+ +![User group creation dialog](../../img/settings_user_group.png#light-mode-only) +![User group creation dialog](../../img/settings_user_group_dark.png#dark-mode-only) + +
### Editing a User Group diff --git a/docs/webapp/webapp_exp_comparing.md b/docs/webapp/webapp_exp_comparing.md index 034e2ab9..eb2afff9 100644 --- a/docs/webapp/webapp_exp_comparing.md +++ b/docs/webapp/webapp_exp_comparing.md @@ -1,48 +1,52 @@ --- -title: Comparing Experiments +title: Comparing Tasks --- -The ClearML Web UI provides features for comparing experiments, allowing to locate, visualize, and analyze the -differences in experiments' results and their causes. You can view the differences in: -* [Details](#side-by-side-textual-comparison) - Compare experiment source code, package versions, models, configuration +The ClearML Web UI provides features for comparing tasks, allowing to locate, visualize, and analyze the +differences in task results and their causes. You can view the differences in: +* [Details](#side-by-side-textual-comparison) - Compare task source code, package versions, models, configuration objects, and other details. * Hyperparameters * [Values](#side-by-side-textual-comparison) - Compare parameters and their values * [Parallel coordinates](#parallel-coordinates-mode) - View the impact of hyperparameters on selected metrics * [Scatter plot](#scatter-plot) - View the correlation between a selected hyperparameter and metric -* Scalars - Compare experiment metrics: +* Scalars - Compare task metrics: * [Values](#tabular-scalar-comparison) - Compare minimal, maximal or last reported values in a concise comparison table - * [Graphs](#plot-comparison) - Overlay compared experiments in a single graph per metric -* [Plots](#plot-comparison) - Compare experiment plots + * [Graphs](#plot-comparison) - Overlay compared tasks in a single graph per metric +* [Plots](#plot-comparison) - Compare task plots * [Debug samples](#side-by-side-debug-sample-comparison) - Compare debug samples by iteration -With these comparisons, you can investigate the impact of different setups on your experiment results, and gain insight -for crafting future experiments. +With these comparisons, you can investigate the impact of different setups on your task results, and gain insight +for crafting future tasks. -## Selecting Experiments to Compare +## Selecting Tasks to Compare -To select experiments to compare: -1. Go to an experiments table that includes the experiments to be compared. -1. Select the experiments to compare. Once multiple experiments are selected, the batch action bar appears. +To select tasks to compare: +1. Go to a task table that includes the tasks to be compared. +1. Select the tasks to compare. Once multiple tasks are selected, the batch action bar appears. 1. In the batch action bar, click **COMPARE**. -The comparison page opens in the **DETAILS** tab with the experiments [compared side by side](#side-by-side-textual-comparison). +The comparison page opens in the **DETAILS** tab with the tasks [compared side by side](#side-by-side-textual-comparison). -### Modifying Experiment Selection +### Modifying Task Selection -Click the `EXPERIMENTS` button to view your currently compared experiments. Click `X` on a listed experiment to remove +Click the `TASKS` button to view your currently compared tasks. Click `X` on a listed task to remove it from the comparison. -![Experiments list](../img/webapp_compare_exp_select_2.png) +![Tasks list](../img/webapp_compare_exp_select_2.png#light-mode-only) +![Tasks list](../img/webapp_compare_exp_select_2_dark.png#dark-mode-only) -You can add/remove experiments to your comparison: -1. Click the `+` button in any of the comparison tabs. This opens up a window with an experiment table with the currently -compared experiments at the top. - ![Adding experiments](../img/webapp_compare_exp_select_1.png) -1. Find the experiments to add by sorting and [filtering](webapp_exp_table.md#filtering-columns) the experiments with the -appropriate column header controls. Alternatively, use the search bar to find experiments by name. -1. Select experiments to include in the comparison (and/or clear the selection of any experiments you wish to remove). +You can add/remove tasks to your comparison: +1. Click the `+` button in any of the comparison tabs. This opens up a window with a task table with the currently +compared tasks at the top. + + ![Adding tasks](../img/webapp_compare_exp_select_1.png#light-mode-only) + ![Adding tasks](../img/webapp_compare_exp_select_1_dark.png#dark-mode-only) + +1. Find the tasks to add by sorting and [filtering](webapp_exp_table.md#filtering-columns) the tasks with the +appropriate column header controls. Alternatively, use the search bar to find tasks by name. +1. Select tasks to include in the comparison (and/or clear the selection of any tasks you wish to remove). 1. Click **APPLY**. ## Sharing Comparison Page @@ -53,7 +57,7 @@ get the exact same page (including selected tabs etc.). To embed plots and debug samples from the comparison pages in your [Reports](webapp_reports.md), hover over the resource and click Embed code, which will copy to clipboard the embed code to put in your Reports. These visualizations are updated live as the -experiments update. The Enterprise Plan and Hosted Service support embedding resources in external tools (e.g. Notion). +tasks update. The Enterprise Plan and Hosted Service support embedding resources in external tools (e.g. Notion). ## Comparison Modes The comparison pages provide the following views: @@ -64,20 +68,20 @@ The comparison pages provide the following views: * [Overlaid plot comparison](#plot-comparison) * Side-by-side [debug sample](#side-by-side-debug-sample-comparison) and [plot](#plot-comparison) comparison -### Side-by-side Textual Comparison +### Side-by-side Textual Comparison -In the **Details** and **Hyperparameters** (Values view) tabs, you can view differences in the experiments' parameters' nominal -values. The **Details** tab displays the experiments' execution details (source code, uncommitted changes, python packages), +In the **Details** and **Hyperparameters** (Values view) tabs, you can view differences in the tasks' parameters' nominal +values. The **Details** tab displays the tasks' execution details (source code, uncommitted changes, Python packages), models, artifacts, configuration objects, and additional general information. **Hyperparameters** (Values view) displays the -experiments' hyperparameter and their values. +tasks' hyperparameter and their values. -The experiments are laid out in vertical cards, so each field is lined up side-by-side. The experiment on the -left is used as the base experiment, to which the other experiments are compared. You can set a new base experiment in +The tasks are laid out in vertical cards, so each field is lined up side-by-side. The task on the +left is used as the base task, to which the other tasks are compared. You can set a new base task in one of the following ways: -* Hover and click Switch base experiment on the experiment that will be the new base. -* Hover and click Pan on the new base experiment and drag it all the way to the left +* Hover and click Switch base task on the task that will be the new base. +* Hover and click Pan on the new base task and drag it all the way to the left -The differences between the experiments are highlighted. Easily locate +The differences between the tasks are highlighted. Easily locate value differences by clicking click Up arrow (previous diff) or Down arrow (next diff) in the tab header. Obscure identical fields by switching on the **Hide Identical Fields** toggle. @@ -85,29 +89,30 @@ in the tab header. Obscure identical fields by switching on the **Hide Identical Use the search bar to find any field names or values. Lines that match the search query are highlighted, and you can navigate between search results. -![Side-by-side textual comparison](../img/webapp_compare_05.png) +![Side-by-side textual comparison](../img/webapp_compare_05.png#light-mode-only) +![Side-by-side textual comparison](../img/webapp_compare_05_dark.png#dark-mode-only) - -### Tabular Scalar Comparison -The **Scalars** tab **Values** view lays out the experiments' metric values in a table: a row per metric/variant and a -column for each experiment. Select from the dropdown menu which metric values to display: -* Last Values: The last reported values for each experiment -* Min Values: The minimal value reported throughout the experiment execution -* Max Values: The maximal value reported throughout the experiment execution +### Tabular Scalar Comparison +The **Scalars** tab **Values** view lays out the tasks' metric values in a table: a row per metric/variant and a +column for each task. Select from the dropdown menu which metric values to display: +* Last Values: The last reported values for each task +* Min Values: The minimal value reported throughout the task execution +* Max Values: The maximal value reported throughout the task execution You can download the scalar comparison table as a CSV file by clicking Download. Switch on the **Show row extremes** toggle to highlight each variant's maximum and minimum values. -![side-by-side scalar comparison](../img/webapp_compare_exp_scalar_vals.png) +![side-by-side scalar comparison](../img/webapp_compare_exp_scalar_vals.png#light-mode-only) +![side-by-side scalar comparison](../img/webapp_compare_exp_scalar_vals_dark.png#dark-mode-only) ### Parallel Coordinates Mode -The **Hyperparameters** tab's **Parallel Coordinates** comparison shows experiments' hyperparameter impact on specified +The **Hyperparameters** tab's **Parallel Coordinates** comparison shows tasks' hyperparameter impact on specified metrics: 1. Under **Performance Metrics**, select metrics to compare for 1. Select the values to use for each metric in the plot (can select multiple): - * LAST - The final value, or the most recent value, for currently running experiments + * LAST - The final value, or the most recent value, for currently running tasks * MIN - Minimal value * MAX - Maximal value 1. In **Parameters**, select the hyperparameters to compare. @@ -116,60 +121,66 @@ metrics: For example, plot the metric/variant `accuracy`/`total` against the hyperparameters `base_lr`, `dropout`, and `number_of_epochs`. -![Parallel coordinates](../img/webapp_compare_11.png) +![Parallel coordinates](../img/webapp_compare_11.png#light-mode-only) +![Parallel coordinates](../img/webapp_compare_11_dark.png#dark-mode-only) -To focus on a specific experiment, hover over its name in the graph legend. +To focus on a specific task, hover over its name in the graph legend. -To hide an experiment, click its name in the graph legend (click again to bring back). +To hide a task, click its name in the graph legend (click again to bring back). -### Scatter Plot -The **Hyperparameters** tab's **Scatter Plot** comparison shows experiments' correlation between a selected +### Scatter Plot +The **Hyperparameters** tab's **Scatter Plot** comparison shows tasks' correlation between a selected hyperparameter and metric. To show the value distribution: * Select the **Plot Axes**: 1. Under Y-axis select the metric and the metric values to use in the plot: - * **LAST** - The final value, or the most recent value, for currently running experiments + * **LAST** - The final value, or the most recent value, for currently running tasks * **MIN** - Minimal value * **MAX** - Maximal value 1. Under X-axis select the hyperparameter. -Hovering over each datapoint in the resulting plot will show the experiment name and the metric and parameter value for that +Hovering over each datapoint in the resulting plot will show the task name and the metric and parameter value for that point. You can add additional metrics and hyperparameters values to the datapoint tooltip through **ADDITIONAL DATA POINT INFORMATION**. -![Comparison scatter plot](../img/webapp_compare_scatter.png) +![Comparison scatter plot](../img/webapp_compare_scatter.png#light-mode-only) +![Comparison scatter plot](../img/webapp_compare_scatter_dark.png#dark-mode-only) ### Plot Comparison -The **Scalars** (Graph view) and **Plots** tabs compare experiments' plots. +The **Scalars** (Graph view) and **Plots** tabs compare tasks' plots. The **Scalars** tab displays scalar values as time series line charts. The **Plots** tab compares the last reported -iteration sample of each metric/variant combination per compared experiment. +iteration sample of each metric/variant combination per compared task. -Line, scatter, box, and bar graphs are compared by overlaying each metric/variant from all compared experiments' into a single +Line, scatter, box, and bar graphs are compared by overlaying each metric/variant from all compared tasks' into a single comparative plot. For overlaid plots, use **Group by** to select how to group plots: * **Metric** - All variants for a metric appear on the same plot. - ![Scalar plot grouped by metric](../img/webapp_compare_07.png) + ![Scalar plot grouped by metric](../img/webapp_compare_07.png#light-mode-only) + ![Scalar plot grouped by metric](../img/webapp_compare_07_dark.png#dark-mode-only) * **Metric+Variant** (default) - Every variant appears on its own plot. - ![Scalar plot grouped by metric and variant](../img/webapp_compare_08.png) + ![Scalar plot grouped by metric and variant](../img/webapp_compare_08.png#light-mode-only) + ![Scalar plot grouped by metric and variant](../img/webapp_compare_08_dark.png#dark-mode-only) -Other plot types that are not overlaid are displayed separately for each experiment. +Other plot types that are not overlaid are displayed separately for each task: -![non-merged comparison](../img/webapp_compare_exp_plots.png) +![non-merged comparison](../img/webapp_compare_exp_plots.png#light-mode-only) +![non-merged comparison](../img/webapp_compare_exp_plots_dark.png#dark-mode-only) All single value scalars are plotted into a single clustered bar chart under the "Summary" title, where each cluster -represents a reported metric, and each bar in the cluster represents an experiment. +represents a reported metric, and each bar in the cluster represents a task. -![Single scalar comparison](../img/webapp_compare_exp_single_scalars.png) +![Single scalar comparison](../img/webapp_compare_exp_single_scalars.png#light-mode-only) +![Single scalar comparison](../img/webapp_compare_exp_single_scalars_dark.png#dark-mode-only) Hover over plots to access plot controls (see [Scalar Plot Tools](webapp_exp_track_visual.md#scalar-plot-tools)). ### Side-by-side Debug Sample Comparison -Compare debug samples at different iterations to examine how your experiments perform throughout their execution. +Compare debug samples at different iterations to examine how your tasks perform throughout their execution. You can view debug samples by metric in the reported iterations. Filter the samples by metric by selecting a metric from the dropdown menu above the samples. The most recent iteration appears first. To navigate @@ -178,15 +189,17 @@ between iterations, click (newest images). Click Sync selection in order -to synchronize iteration and metric selection across experiments. For example, if you select a metric for one -experiment's debug samples, the same metric will be automatically selected for the rest of the experiments in the +to synchronize iteration and metric selection across tasks. For example, if you select a metric for one +task's debug samples, the same metric will be automatically selected for the rest of the tasks in the comparison. -![Debug sample comparison](../img/webapp_compare_30.png) +![Debug sample comparison](../img/webapp_compare_30.png#light-mode-only) +![Debug sample comparison](../img/webapp_compare_30_dark.png#dark-mode-only) Open a debug sample (image, audio, or video) in the viewer or player, by clicking the thumbnail. -![Debug Sample viewer](../img/webapp_tracking_44.png) +![Debug Sample viewer](../img/webapp_tracking_44.png#light-mode-only) +![Debug Sample viewer](../img/webapp_tracking_44_dark.png#dark-mode-only) To move to the same sample in another iteration, click Left arrow (previous), Right arrow (next), or move the slider. diff --git a/docs/webapp/webapp_exp_reproducing.md b/docs/webapp/webapp_exp_reproducing.md index b644fecc..308a1e10 100644 --- a/docs/webapp/webapp_exp_reproducing.md +++ b/docs/webapp/webapp_exp_reproducing.md @@ -1,54 +1,56 @@ --- -title: Reproducing Experiments +title: Reproducing Task Runs --- -Reproduce experiments on local or remote machines in one of the following ways: -* Cloning any experiment - Make an exact copy, while maintaining the original experiment -* Resetting an experiment whose status is not *Published* - Delete the previous run's logs and output +Reproducing task runs on local or remote machines in one of the following ways: +* Cloning any task - Make an exact copy, while maintaining the original task +* Resetting a task whose status is not *Published* - Delete the previous run's logs and output -After cloning or resetting, enqueue the reset or newly cloned experiment for execution by a worker. +After cloning or resetting, enqueue the reset or newly cloned task for execution by a worker. -Experiments can also be modified and then executed remotely, see [Tuning Experiments](webapp_exp_tuning.md). +Tasks can also be modified and then executed remotely, see [Tuning Tasks](webapp_exp_tuning.md). ## Cloning -To clone an experiment: -1. In the experiments table, right-click the experiment to reproduce and click **Clone**. -1. In the `Clone Experiment` modal, set the following: - * Project - The project where the experiment will be saved +To clone a task: +1. In the task table, right-click the task to reproduce and click **Clone**. +1. In the `Clone Task` modal, set the following: + * Project - The project where the task will be saved * Description (optional) - * Set `` as parent - Select to set this experiment as the new experiments' parent task + * Set `` as parent - Select to set this task as the new task's parent 1. Click **Clone** :::note -By default, the new experiment's parent task is set to the original task's parent, unless the original task does not -have a parent, in which case the original task is set as the parent. Select `Set as parent` to force -the original experiment to become the clone's parent. +By default, the new task's parent task is set to the original task's parent, unless the original task does not +have a parent, in which case the original task is set as the parent. Select `Set as parent` to force +the original task to become the clone's parent. ::: -![Clone modal](../img/webapp_clone.png) +![Clone modal](../img/webapp_clone.png#light-mode-only) +![Clone modal](../img/webapp_clone_dark.png#dark-mode-only) ## Resetting -To reset an experiment: -1. In the experiments table, right-click the relevant experiment and click **Reset**. -1. In the `Reset Experiment` modal, if you want the experiment's artifacts and debug samples to be deleted from the +To reset a task: +1. In the task table, right-click the relevant task and click **Reset**. +1. In the `Reset Task` modal, if you want the task's artifacts and debug samples to be deleted from the ClearML file server, click the checkbox 1. Click **Reset** -![Reset modal](../img/webapp_reset.png) +![Reset modal](../img/webapp_reset.png#light-mode-only) +![Reset modal](../img/webapp_reset_dark.png#dark-mode-only) ## Final Steps -At the end of the process you are left with an experiment with draft status, meaning that it is editable. +At the end of the process you are left with `Draft` task, meaning that it is editable. -Re-execute the new experiment: -1. If desired, modify the experiment's configuration (see [Tuning Experiments](webapp_exp_tuning.md)). -1. Enqueue the experiment for execution. Right-click the experiment > Enqueue > Select a queue > **ENQUEUE**. +Re-execute the new task: +1. If desired, modify the task's configuration (see [Tuning Tasks](webapp_exp_tuning.md)). +1. Enqueue the task for execution. Right-click the task > Enqueue > Select a queue > **ENQUEUE**. :::note Make sure that a [ClearML Agent](../clearml_agent.md) has been assigned to the selected queue ::: -A ClearML Agent will fetch the experiment from the queue and execute it. The experiment can now be tracked and its +A ClearML Agent will fetch the task from the queue and execute it. The task can now be tracked and its results visualized. diff --git a/docs/webapp/webapp_exp_sharing.md b/docs/webapp/webapp_exp_sharing.md index 8474b723..0954e940 100644 --- a/docs/webapp/webapp_exp_sharing.md +++ b/docs/webapp/webapp_exp_sharing.md @@ -1,41 +1,41 @@ --- -title: Sharing Experiments and Models +title: Sharing Tasks and Models --- :::info Hosted Service Feature This is a ClearML Hosted Service feature only. ::: -**ClearML Hosted Service** users can share experiments with users in other workspaces. Sharing an experiment also shares +**ClearML Hosted Service** users can share tasks with users in other workspaces. Sharing a task also shares all its contents including models, artifacts, and results. -**To share an experiment and its model(s):** +**To share a task and its model(s):** 1. Click **Share** in one of these ways: - * In the [experiment table](webapp_exp_table.md), right-click the experiment **>** **Share** - * In the experiment info panel or full screen details view, click Menu + * In the [task table](webapp_exp_table.md), right-click the task **>** **Share** + * In the task info panel or full screen details view, click Menu (menu) **>** **Share**. 1. Click **Create link**. 1. Copy the hyperlink and send it to a **ClearML Hosted Service** user of another workspace. Any user with this link will have -read-only access to the experiment and all its contents. +read-only access to the task and all its contents. :::note -When a user opens the hyperlink for a shared experiment in their browser, only that experiment appears in the experiment table. +When a user opens the hyperlink for a shared task in their browser, only that task appears in the task table. ::: -## Making Shared Experiment Private +## Making a Shared Task Private -**To make a shared experiment private again:** +**To make a shared task private again:** 1. Click **Share** in one of these ways: - * In the [experiment table](webapp_exp_table.md), right-click the experiment **>** **Share** - * In the experiment info panel or full screen details view, click Menu + * In the [task table](webapp_exp_table.md), right-click the task **>** **Share** + * In the task info panel or full screen details view, click Menu (menu) **>** **Share**. 1. Click **Remove link**. -Another option is to archive the experiment, which makes the experiment private. \ No newline at end of file +Another option is to archive the task, which makes the task private. \ No newline at end of file diff --git a/docs/webapp/webapp_exp_table.md b/docs/webapp/webapp_exp_table.md index 0778fce9..d8206aff 100644 --- a/docs/webapp/webapp_exp_table.md +++ b/docs/webapp/webapp_exp_table.md @@ -28,7 +28,8 @@ and choosing one of these options: The downloaded data consists of the currently displayed table columns. -![Task table](../img/webapp_experiment_table.png) +![Task table](../img/webapp_experiment_table.png#light-mode-only) +![Task table](../img/webapp_experiment_table_dark.png#dark-mode-only) ## Creating Tasks @@ -36,7 +37,7 @@ You can create tasks by: * Running code instrumented with ClearML (see [Task Creation](../clearml_sdk/task_sdk.md#task-creation)) * [Cloning an existing task](webapp_exp_reproducing.md) * Via CLI using [`clearml-task`](../apps/clearml_task.md) -* Through the UI interface: Input the task's details, including its source code and python requirements, and then +* Through the UI interface: Input the task's details, including its source code and Python requirements, and then run it through a [ClearML Queue](../fundamentals/agents_and_queues.md#what-is-a-queue) or save it as a *draft*. To create a task through the UI interface: @@ -56,7 +57,7 @@ To create a task through the UI interface: * Binary - The binary executing the script (e.g. python3, bash etc). * Type – How the code is provided * Script - The name of the file to run using the above specified binary - * Module - The name of a python module to run (Python only, see [Python module specification](https://docs.python.org/3/using/cmdline.html#cmdoption-m)) + * Module - The name of a Python module to run (Python only, see [Python module specification](https://docs.python.org/3/using/cmdline.html#cmdoption-m)) * Custom code - Directly provide the code to run. Write code, or upload a file: * File name - The script in which your code is stored. Click `Upload` to upload an existing file. * Content - The actual code. Click `Edit` to modify the script’s contents. @@ -65,7 +66,7 @@ To create a task through the UI interface: * **Arguments** (*optional*) - Add [hyperparameter](../fundamentals/hyperparameters.md) values. * **Environment** (*optional*) - Set up the task’s execution environment * Python - Python environment settings - * Use Poetry - Force Poetry instead of pip package manager. Disables additional python settings. + * Use Poetry - Force Poetry instead of pip package manager. Disables additional Python settings. * Preinstalled venv - The name of a virtual environment available in the task’s execution environment to use when running the task. Additionally, specify how to use the virtual environment: * Skip - Try to automatically detect an available virtual environment, and use it as is. @@ -162,7 +163,8 @@ all the tasks in the project. The customizations of these two views are saved se ### Adding Metrics and/or Hyperparameters -![Task table customization gif](../img/gif/webapp_exp_table_cust.gif) +![Task table customization gif](../img/gif/webapp_exp_table_cust.gif#light-mode-only) +![Task table customization gif](../img/gif/webapp_exp_table_cust_dark.gif#dark-mode-only) Add metrics and/or hyperparameters columns to the task table. The metrics and hyperparameters depend upon the tasks in the table. @@ -184,7 +186,8 @@ tooltip that appears. To view all precise values in a column, hover over a float ### Filtering Columns -![Filtering table gif](../img/gif/filter_screenshots.gif) +![Filtering table gif](../img/gif/filter_screenshots.gif#light-mode-only) +![Filtering table gif](../img/gif/filter_screenshots_dark.gif#dark-mode-only) Filters can be applied by clicking Filter on a column, and the relevant filter appears. @@ -252,7 +255,8 @@ operations on the selected tasks. Actions can be performed only on the tasks tha of tasks that can be affected by each action. The same information can be found in the batch action bar, in a tooltip that appears when hovering over an action icon. -![Task table batch operations](../img/webapp_experiment_table_context_menu.png) +![Task table batch operations](../img/webapp_experiment_table_context_menu.png#light-mode-only) +![Task table batch operations](../img/webapp_experiment_table_context_menu_dark.png#dark-mode-only) ## Selecting Multiple Tasks @@ -269,7 +273,7 @@ selecting items beyond the items currently on-screen: ## Comparing Tasks -The comparison view compares task scalar and plot results (for a more in depth comparison, see [Comparing Experiments](webapp_exp_comparing.md)). +The comparison view compares task scalar and plot results (for a more in depth comparison, see [Comparing Tasks](webapp_exp_comparing.md)). When selected, the view presents a comparison of all [selected tasks](#selecting-multiple-tasks). If no tasks are selected, the first 100 visible tasks in the table are displayed in the comparison. @@ -277,12 +281,14 @@ In the dropdown menu, select to view **Scalars** or **Plots**. **Scalars** shows task scalar results as time series line graphs. -![Merged comparison plots](../img/webapp_compare_view_1.png) +![Merged comparison plots](../img/webapp_compare_view_1.png#light-mode-only) +![Merged comparison plots](../img/webapp_compare_view_1_dark.png#dark-mode-only) All single value scalars are plotted into a single clustered bar chart under the "Summary" title, where each cluster represents a reported metric, and each bar in the cluster represents a task. -![Single scalar comparison](../img/webapp_compare_view_3.png) +![Single scalar comparison](../img/webapp_compare_view_3.png#light-mode-only) +![Single scalar comparison](../img/webapp_compare_view_3_dark.png#dark-mode-only) Click Setting Gear to customize which metrics to view. @@ -296,11 +302,13 @@ task. Line, scatter, box, and bar graphs are compared by overlaying each metric/variant from all compared tasks' into a single comparative plot. -![Merged comparison plots](../img/webapp_compare_view_4.png) +![Merged comparison plots](../img/webapp_compare_view_4.png#light-mode-only) +![Merged comparison plots](../img/webapp_compare_view_4_dark.png#dark-mode-only) Other plot types are displayed separately for each task. -![Separate comparison plots](../img/webapp_compare_view_2.png) +![Separate comparison plots](../img/webapp_compare_view_2.png#light-mode-only) +![Separate comparison plots](../img/webapp_compare_view_2_dark.png#dark-mode-only) ## Creating a Task Leaderboard @@ -321,4 +329,5 @@ based on their name by using the search bar. The final dashboard can be shared by copying the URL from the address bar, this address will replicate the exact same dashboard on any browser. The dashboard can also be bookmarked for later use. -![Task table sharing](../img/webapp_exp_table_sharing.png) +![Task table sharing](../img/webapp_exp_table_sharing.png#light-mode-only) +![Task table sharing](../img/webapp_exp_table_sharing_dark.png#dark-mode-only) \ No newline at end of file diff --git a/docs/webapp/webapp_exp_track_visual.md b/docs/webapp/webapp_exp_track_visual.md index 9631ea5d..14f3fbe2 100644 --- a/docs/webapp/webapp_exp_track_visual.md +++ b/docs/webapp/webapp_exp_track_visual.md @@ -31,20 +31,22 @@ table / full screen**. The info panel keeps the task table in view so that [task actions](webapp_exp_table.md#task-actions) can be performed from the table (as well as the menu in the info panel). -![Info panel](../img/webapp_tracking_40.png) +![Info panel](../img/webapp_tracking_40.png#light-mode-only) +![Info panel](../img/webapp_tracking_40_dark.png#dark-mode-only) Click Compressed view to hide details in the task table, so only the task names and statuses are displayed -![Compressed info panel](../img/webapp_tracking_41.png) +![Compressed info panel](../img/webapp_tracking_41.png#light-mode-only) +![Compressed info panel](../img/webapp_tracking_41_dark.png#dark-mode-only) ### Full Screen Details View The full screen details view allows for easier viewing and working with task tracking and results. The task table is not visible when the full screen details view is open. Perform task actions from the menu. -![Full screen view](../img/webapp_tracking_33.png) - +![Full screen view](../img/webapp_tracking_33.png#light-mode-only) +![Full screen view](../img/webapp_tracking_33_dark.png#dark-mode-only) ## Execution A task's **EXECUTION** tab of lists the following: @@ -65,29 +67,33 @@ The Source Code section of a task's **EXECUTION** tab includes: * Working directory * Binary (Python executable) -![Source code section](../img/webapp_exp_source_code.png) +![Source code section](../img/webapp_exp_source_code.png#light-mode-only) +![Source code section](../img/webapp_exp_source_code_dark.png#dark-mode-only) ### Uncommitted Changes ClearML displays the git diff of the task in the Uncommitted Changes section. -![Uncommitted changes section](../img/webapp_exp_uncommitted_changes.png) +![Uncommitted changes section](../img/webapp_exp_uncommitted_changes.png#light-mode-only) +![Uncommitted changes section](../img/webapp_exp_uncommitted_changes_dark.png#dark-mode-only) ### Python Packages The Python Packages section lists the task's installed Python packages and their versions. -![Python packages section](../img/webapp_exp_installed_packages.png) +![Python packages section](../img/webapp_exp_installed_packages.png#light-mode-only) +![Python packages section](../img/webapp_exp_installed_packages_dark.png#dark-mode-only) When a ClearML agent executing a task ends up using a different set of Python packages than was originally specified, both the original specification (`original pip` or `original conda`), and the packages the agent ended up using to set up an environment (`pip` or `conda`) are available. Select which requirements to view in the dropdown menu. -![Packages used by agent](../img/webapp_exp_installed_packages_2.png.png) +![Packages used by agent](../img/webapp_exp_installed_packages_2.png#light-mode-only) +![Packages used by agent](../img/webapp_exp_installed_packages_2_dark.png#dark-mode-only) ### Container The Container section list the following information: -* Image - a pre-configured container that ClearML Agent will use to remotely execute this task (see [Building Docker containers](../clearml_agent/clearml_agent_docker.md)) +* Image - a pre-configured container that ClearML Agent will use to remotely execute this task (see [Building Task Execution Environments in a Container](../getting_started/clearml_agent_base_docker.md)) * Arguments - add container arguments * Setup shell script - a bash script to be executed inside the container before setting up the task's environment @@ -102,14 +108,16 @@ clearml-agent daemon --queue --docker [optional d For more information, see [Docker Mode](../clearml_agent/clearml_agent_execution_env.md#docker-mode). ::: -![Container section](../img/webapp_exp_container.png) +![Container section](../img/webapp_exp_container.png#light-mode-only) +![Container section](../img/webapp_exp_container_dark.png#dark-mode-only) ### Output The Output details include: * The output destination used for storing model checkpoints (snapshots) and artifacts (see also, [default_output_uri](../configs/clearml_conf.md#config_default_output_uri) in the configuration file, and `output_uri` in [`Task.init`](../references/sdk/task.md#taskinit) parameters). -![Execution details section](../img/webapp_exp_output.png) +![Execution details section](../img/webapp_exp_output.png#light-mode-only) +![Execution details section](../img/webapp_exp_output_dark.png#dark-mode-only) ## Configuration @@ -119,7 +127,7 @@ All parameters and configuration objects appear in the **CONFIGURATION** tab. ### Hyperparameters Hyperparameters are grouped by their type and appear in **CONFIGURATION** **>** **HYPERPARAMETERS**. Once a task -is run and stored in ClearML Server, any of these hyperparameters can be [modified](webapp_exp_tuning.md#modifying-experiments). +is run and stored in ClearML Server, any of these hyperparameters can be [modified](webapp_exp_tuning.md#modifying-tasks). #### Command Line Arguments @@ -127,7 +135,8 @@ The **Args** group shows automatically logged argument parser parameters (e.g. ` Hover over Description (menu) on a parameter's line, and the type, description, and default value appear, if they were provided. -![Command line arguments configuration group](../img/webapp_tracking_22.png) +![Command line arguments configuration group](../img/webapp_tracking_22.png#light-mode-only) +![Command line arguments configuration group](../img/webapp_tracking_22_dark.png#dark-mode-only) #### Environment Variables @@ -138,7 +147,8 @@ field of the `clearml.conf` file, the **Environment** group displays the listed The `CLEARML_LOG_ENVIRONMENT` variable always overrides the `clearml.conf` file. ::: -![Environment variables configuration group](../img/webapp_tracking_23.png) +![Environment variables configuration group](../img/webapp_tracking_23.png#light-mode-only) +![Environment variables configuration group](../img/webapp_tracking_23_dark.png#dark-mode-only) #### Custom Parameter Groups @@ -146,33 +156,37 @@ Custom parameter groups show parameter dictionaries if the parameters were conne [`Task.connect()`](../references/sdk/task.md#connect) with a `name` argument provided. `General` is the default section if a name is not provided. -![Custom parameters group](../img/webapp_tracking_25.png) +![Custom parameters group](../img/webapp_tracking_25.png#light-mode-only) +![Custom parameters group](../img/webapp_tracking_25_dark.png#dark-mode-only) #### TensorFlow Definitions The **TF_DEFINE** parameter group shows automatic TensorFlow logging. -![TF_DEFINE parameter group](../img/webapp_tracking_26.png) +![TF_DEFINE parameter group](../img/webapp_tracking_26.png#light-mode-only) +![TF_DEFINE parameter group](../img/webapp_tracking_26_dark.png#dark-mode-only) ### User Properties User properties allow to store any descriptive information in a key-value pair format. They are editable in any task, except *Published* ones (read-only). -![User properties section](../img/webapp_tracking_21.png) +![User properties section](../img/webapp_tracking_21.png#light-mode-only) +![User properties section](../img/webapp_tracking_21_dark.png#dark-mode-only) ### Configuration Objects ClearML tracks a task's model configuration objects, which appear in **Configuration Objects** **>** **General**. These objects include those that are automatically tracked, and those connected to a Task in code (see [`Task.connect_configuration`](../references/sdk/task.md#connect_configuration)). -![Configuration objects](../img/webapp_tracking_24.png) +![Configuration objects](../img/webapp_tracking_24.png#light-mode-only) +![Configuration objects](../img/webapp_tracking_24_dark.png#dark-mode-only) ClearML supports providing a name for a Task model configuration object (see the `name` parameter in [`Task.connect_configuration`](../references/sdk/task.md#connect_configuration)). -![Custom configuration objects](../img/webapp_tracking_28.png) - +![Custom configuration objects](../img/webapp_tracking_28.png#light-mode-only) +![Custom configuration objects](../img/webapp_tracking_28_dark.png#dark-mode-only) ## Artifacts @@ -190,7 +204,8 @@ to obtain the file path to facilitate local storage access since web application * **Remote Files** (e.g. network-hosted artifacts with `https://`, `s3://`, etc. URIs): Use the download action (Download) to retrieve the file. -![Other artifacts section](../img/webapp_tracking_30.png) +![Other artifacts section](../img/webapp_tracking_30.png#light-mode-only) +![Other artifacts section](../img/webapp_tracking_30_dark.png#dark-mode-only) ### Models @@ -201,7 +216,8 @@ The task's input and output models appear in the **ARTIFACTS** tab. Each model e Input models also display their creating task, which on-click navigates you to the task's page. -![Models in Artifacts tab](../img/webapp_exp_artifacts_01.png) +![Models in Artifacts tab](../img/webapp_exp_artifacts_01.png#light-mode-only) +![Models in Artifacts tab](../img/webapp_exp_artifacts_01_dark.png#dark-mode-only) To view more model details, including design, label enumeration, and general information, click the model name to navigate to its page in the **MODELS** tab (see [Model Details](webapp_model_viewing.md)). @@ -214,13 +230,13 @@ The **INFO** tab shows extended task information: * [Task description](#description) * [Task details](#task-details) -### Latest Events Log +### Latest Events Log -:::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +:::info Hosted Service and Enterprise Feature +The latest events log is available only on the ClearML Hosted Service and under the ClearML Enterprise plan. ::: -The Enterprise Server also displays a detailed history of task activity: +The **INFO** tab includes a detailed history of task activity: * Task action (e.g. status changes, project move, etc.) * Action time * Acting user @@ -229,13 +245,14 @@ The Enterprise Server also displays a detailed history of task activity: To download the task history as a CSV file, hover over the log and click Download. -![Task audit log](../img/webapp_info_audit_log.png) +![Task audit log](../img/webapp_info_audit_log.png#light-mode-only) +![Task audit log](../img/webapp_info_audit_log_dark.png#dark-mode-only) :::note Limited persistency ClearML maintains a system-wide, large but strict limit for task history items. Once the limit is reached, the oldest entries are purged to make room for fresh entries. ::: -### Description +### Description Add descriptive text to the task in the **Description** section. To modify the description, hover over the description box and click **Edit**. @@ -260,7 +277,8 @@ The **Task Details** section lists information describing the task: * Python version * Task Progress -![Info tab](../img/webapp_tracking_31.png) +![Info tab](../img/webapp_tracking_31.png#light-mode-only) +![Info tab](../img/webapp_tracking_31_dark.png#dark-mode-only) ## Task Results @@ -275,8 +293,8 @@ tools (e.g. Notion). See [Plot Controls](#plot-controls). The complete task log containing everything printed to stdout and stderr appears in the **CONSOLE** tab. The full log is downloadable. To view the end of the log, click **Jump to end**. -![Console tab](../img/webapp_tracking_32.png) - +![Console tab](../img/webapp_tracking_32.png#light-mode-only) +![Console tab](../img/webapp_tracking_32_dark.png#dark-mode-only) ### Scalars @@ -286,7 +304,7 @@ All scalars that ClearML automatically logs, as well as those explicitly reporte Scalar series can be displayed in [graph view](#graph-view) (default) or in [metric values view](#metric-values-view): -#### Graph View +#### Graph View Scalar graph view (Graph view) shows scalar series plotted as a time series line chart. By default, a single plot is shown for each scalar metric, with all variants overlaid within. @@ -302,7 +320,10 @@ to update the graph. Single value scalars (see [`Logger.report_single_value`](../references/sdk/logger.md#report_single_value)) are shown in a `Summary` table. -![Single value scalar plot](../img/webapp_single_scalar_plot.png) +![Single value scalar plot](../img/webapp_single_scalar_plot.png#light-mode-only) +![Single value scalar plot](../img/webapp_single_scalar_plot_dark.png#dark-mode-only) + +#### Scalar Plot Tools Use the scalar tools to improve analysis of scalar metrics. In the info panel, click Settings gear to use the tools. In the full screen details view, the tools are on the left side of the window. The tools include: @@ -313,13 +334,15 @@ are on the left side of the window. The tools include: * **Metric** - Displays all variants for a metric on the same plot. For example, if you have a "Test" metric with "loss" and "accuracy" variants, both variants will appear on the same plot that is titled "Test". - ![Plots grouped by metric](../img/webapp_tracking_33.png) + ![Plots grouped by metric](../img/webapp_tracking_33.png#light-mode-only) + ![Plots grouped by metric](../img/webapp_tracking_33_dark.png#dark-mode-only) * **None** - Displays individual plots for each metric-variant combination, grouped into sections by metric. For example, a "Test" metric with "loss" and "accuracy" variants will have a separate plot for each variant under the "Test" group. - ![Plots groups my metric and variant](../img/webapp_tracking_34.png) + ![Plots groups my metric and variant](../img/webapp_tracking_34.png#light-mode-only) + ![Plots groups my metric and variant](../img/webapp_tracking_34_dark.png#dark-mode-only) * Horizontal axis - Select the x-axis units: * Iterations @@ -336,7 +359,8 @@ which will copy to clipboard the embed code to put in your Reports. To quickly g specific metric, click Embed Embed code on the group section header (available when plots are [grouped by](#group_by) `None`). -![Embed metric group](../img/webapp_tracking_34b.png) +![Embed metric group](../img/webapp_tracking_34b.png#light-mode-only) +![Embed metric group](../img/webapp_tracking_34b_dark.png#dark-mode-only) In contrast to static screenshots, embedded resources are retrieved when the report is displayed allowing your reports to show the latest up-to-date data. @@ -356,7 +380,8 @@ shows a table summary of your metrics with a row per metric/variant: If all the values of a specific metric/variant are the same, the row will display a Same values sign. -![Plots tab](../img/webapp_tracking_34a.png) +![Plots tab](../img/webapp_tracking_34a.png#light-mode-only) +![Plots tab](../img/webapp_tracking_34a_dark.png#dark-mode-only) Choose which metrics to view using one of the following out the options: * Use the quick filter bar (Magnifying glass) @@ -371,7 +396,8 @@ Non-time-series plots appear in **PLOTS**. These include data generated by libra explicitly reported using the ClearML Logger. These may include 2D and 3D plots, tables (Pandas and CSV files), and Plotly plots. Individual plots can be shown / hidden or filtered by title. -![Plots tab](../img/webapp_tracking_35.png) +![Plots tab](../img/webapp_tracking_35.png#light-mode-only) +![Plots tab](../img/webapp_tracking_35_dark.png#dark-mode-only) Plots are grouped into sections by metric. To quickly get the embed codes for all plots of a specific metric, click Embed Embed code on the group section header. @@ -384,7 +410,8 @@ previous/next plot in the current iteration using the ** **AGENT CONFIGURATION** **>** **BASE DOCKER IMAGE** **>** hover **>** **EDIT** **>** - Enter the base Docker image. +* In **EXECUTION** **>** **CONTAINER** **>** hover **>** **EDIT** **>** + Enter the default container image. :::important For a ClearML Agent to execute the task in a container, the agent must be running in -Docker mode: +[Docker Mode](../clearml_agent/clearml_agent_execution_env.md#docker-mode): ```bash -clearml-agent daemon --queue --docker [optional default docker image to use] +clearml-agent daemon --queue --docker [optional default container image to use] ``` -For more information, see [Docker Mode](../clearml_agent/clearml_agent_execution_env.md#docker-mode). ::: #### Output Destination @@ -97,7 +96,7 @@ and formats for specifying locations include: * A shared folder: `/mnt/share/folder` * S3: `s3://bucket/folder` -* Non-AWS S3-like services (e.g. MinIO): `s3://host_addr:port/bucket` +* Non-AWS S3-like services (e.g. MinIO): `s3://host_addr:port/bucket`. **Note that port specification is required**. * Google Cloud Storage: `gs://bucket-name/folder` * Azure Storage: `azure://.blob.core.windows.net/path/to/file` @@ -110,7 +109,7 @@ and formats for specifying locations include: Also set the output destination for artifacts in code (see the `output_uri` parameter of the [`Task.init`](../references/sdk/task.md#taskinit) method), and in the ClearML configuration file -for all experiments (see [`default_output_uri`](../configs/clearml_conf.md#config_default_output_uri) +for all tasks (see [`default_output_uri`](../configs/clearml_conf.md#config_default_output_uri) on the ClearML Configuration Reference page). ::: @@ -142,8 +141,8 @@ or the [`sdk.development.log_os_environments`](../configs/clearml_conf.md#log_en #### User Properties -User properties allow storing any descriptive information in key-value pair format. They are editable in any experiment, -except experiments whose status is *Published* (read-only). +User properties allow storing any descriptive information in key-value pair format. They are editable in any task, +except those whose status is *Published* (read-only). **To add, change, or delete user properties:** @@ -167,14 +166,14 @@ Edit model configuration and label enumeration, choose a different initial input other project, or remove the model. :::note -The models are editable in the **MODELS** tab, not the **EXPERIMENTS** tab. Clicking the model name hyperlink shows the +The models are editable in the **MODELS** tab, not the **TASKS** tab. Clicking the model name hyperlink shows the model in the **MODELS** tab. ::: **To select a different model:** 1. In **ARTIFACTS** **>** **Input Model** **>** Hover and click **EDIT**. -1. If a model is associated with the experiment, click Edit Pencil. +1. If a model is associated with the task, click Edit Pencil. 1. In the **SELECT MODEL** dialog, select a model from the current project or any other project. **To edit a model's configuration or label enumeration:** @@ -191,6 +190,6 @@ model in the **MODELS** tab. * Label enumeration - In the **LABELS** tab **>** Hover and click **EDIT** **>** Add, change, or delete label enumeration key-value pairs. -**To remove a model from an experiment:** +**To remove a model from a task:** * Hover and click **EDIT** **>** Click Trash diff --git a/docs/webapp/webapp_home.md b/docs/webapp/webapp_home.md index c54c7b42..df54c7b7 100644 --- a/docs/webapp/webapp_home.md +++ b/docs/webapp/webapp_home.md @@ -9,7 +9,8 @@ The **Dashboard** provides the following options: * Open the [**Orchestration**](webapp_workers_queues.md) tab to autoscale, monitor, and manage your resource usage and worker queues. -![Dashboard](../img/webapp_dashboard.png) +![Dashboard](../img/webapp_dashboard.png#light-mode-only) +![Dashboard](../img/webapp_dashboard_dark.png#dark-mode-only) **To select a project, experiment, or model:** diff --git a/docs/webapp/webapp_model_comparing.md b/docs/webapp/webapp_model_comparing.md index 275b1eeb..ee98d6d9 100644 --- a/docs/webapp/webapp_model_comparing.md +++ b/docs/webapp/webapp_model_comparing.md @@ -7,7 +7,7 @@ You can view the differences in model details, configuration, scalar values, and ## Selecting Models to Compare To select models to compare: -1. Go to a models table that includes the models to be compared. +1. Go to a model table that includes the models to be compared. 1. Select the models to compare. Once multiple models are selected, the batch action bar appears. 1. In the batch action bar, click **COMPARE**. @@ -17,12 +17,16 @@ The comparison page opens in the **DETAILS** tab, with the models compared [side Click the `MODELS` button to view your currently compared models. Click `X` on a listed model to remove it from the comparison. -![Models list](../img/webapp_compare_model_select_1.png) +![Models list](../img/webapp_compare_model_select_1.png#light-mode-only) +![Models list](../img/webapp_compare_model_select_1_dark.png#dark-mode-only) You can add/remove models to your comparison: 1. Click the `+` button in any of the comparison tabs. This opens up a window with a model table with the currently compared models at the top. - ![Adding models](../img/webapp_compare_model_select_2.png) + + ![Adding models](../img/webapp_compare_model_select_2.png#light-mode-only) + ![Adding models](../img/webapp_compare_model_select_2_dark.png#dark-mode-only) + 1. Find the models to add by sorting and [filtering](webapp_model_table.md#filtering-columns) the models with the appropriate column header controls. Alternatively, use the search bar to find models by name. 1. Select models to include in the comparison (and/or clear the selection of any models you wish to remove). @@ -42,8 +46,7 @@ models update. The Enterprise Plan and Hosted Service support embedding resource The comparison tabs provides the following views: * [Side-by-side textual comparison](#side-by-side-textual-comparison) * [Tabular scalar comparison](#tabular-scalar-comparison) -* [Merged plot comparison](#graphic-comparison) -* [Side-by-side graphic comparison](#graphic-comparison) +* [Plot comparison](#plot-comparison) ### Side-by-side Textual Comparison @@ -55,14 +58,15 @@ information is displayed in a column, so each field is lined up side-by-side. The model on the left is used as the base model, to which the other models are compared. You can set a new base model in one of the following ways: -* Hover and click Switch base experiment +* Hover and click Switch base model on the model that will be the new base. -* Hover and click Pan icon on the new base model and drag it all the way to the left +* Hover and click Pan icon on the new base model and drag it all the way to the left The differences between the models are highlighted. You can obscure identical fields by switching on the **Hide Identical Fields** toggle. -![Text comparison](../img/webapp_compare_models_text.png) +![Text comparison](../img/webapp_compare_models_text.png#light-mode-only) +![Text comparison](../img/webapp_compare_models_text_dark.png#dark-mode-only) ### Tabular Scalar Comparison The **Scalars** tab (**Values** view) lays out the models' reported metric values in a table: a row per metric/variant and a @@ -75,26 +79,39 @@ You can download the scalar comparison table as a CSV file by clicking Filter, and sort endpoints by clicking Sort order on the relevant column. @@ -65,7 +67,8 @@ The **Details** tab displays the model endpoint information: * GPU Count * Latency - Average request latency in the last minute -![Endpoints details](../img/webapp_model_endpoints_details.png) +![Endpoints details](../img/webapp_model_endpoints_details.png#light-mode-only) +![Endpoints details](../img/webapp_model_endpoints_details_dark.png#dark-mode-only) ### Monitor The Monitor tab displays the endpoint's operational metrics and resource usage over time graphs: @@ -78,7 +81,8 @@ The Monitor tab displays the endpoint's operational metrics and resource usage o * Video Memory Usage * Network Usage -![Endpoints monitor](../img/webapp_model_endpoints_monitor.png) +![Endpoints monitor](../img/webapp_model_endpoints_monitor.png#light-mode-only) +![Endpoints monitor](../img/webapp_model_endpoints_monitor_dark.png#dark-mode-only) The graphs' time span can be controlled through the menu at its top right corner. Click Eye Show to control which diff --git a/docs/webapp/webapp_model_table.md b/docs/webapp/webapp_model_table.md index 8d93ea57..0f0c57cb 100644 --- a/docs/webapp/webapp_model_table.md +++ b/docs/webapp/webapp_model_table.md @@ -1,32 +1,33 @@ --- -title: The Models Table +title: The Model Table --- -The models table is a [customizable](#customizing-the-models-table) list of models associated with the experiments in a project. From the models table, +The model table is a [customizable](#customizing-the-model-table) list of models associated with the tasks in a project. From the model table, view model details, and modify, publish, archive, tag, and move models to other projects. -View the models table in table view Table view +View the model table in table view Table view or in details view Details view, using the buttons on the top left of the page. Use the table view for a comparative view of your models according to columns of interest. Use the details view to access a selected model's details, while keeping the model list in view. Details view can also be accessed by double-clicking a specific model in the table view to open its details view. -You can archive models so the models table doesn't get too cluttered. Click **OPEN ARCHIVE** on the top of the +You can archive models so the model table doesn't get too cluttered. Click **OPEN ARCHIVE** on the top of the table to open the archive and view all archived models. From the archive, you can restore models to remove them from the archive, and permanently delete models. -You can download the models table as a CSV file by clicking Download +You can download the model table as a CSV file by clicking Download and choosing one of these options: * **Download onscreen items** - Download the values for models currently visible on screen * **Download all items** - Download the values for all models in this project that match the current active filters The downloaded data consists of the currently displayed table columns. -![Models table](../img/webapp_models_01.png) +![Model table](../img/webapp_models_01.png#light-mode-only) +![Model table](../img/webapp_models_01_dark.png#dark-mode-only) -## Models Table Columns +## Model Table Columns -The models table contains the following columns: +The model table contains the following columns: | Column | Description | Type | |---|---|---| @@ -35,17 +36,17 @@ The models table contains the following columns: | **TAGS** | User-defined labels added to models for grouping and organization. | Tag | | **STATUS** | The status of the model, which can be *Draft* (editable) or *Published* (read-only). | String | | **PROJECT** | Name of the model's project | String | -| **USER** | The user who ran the experiment that created the model, or the user who imported the model.| String | -| **TASK** | The experiment (Task) name that created the model. | String | +| **USER** | The user who ran the task that created the model, or the user who imported the model.| String | +| **TASK** | The name of the task that created the model. | String | | **UPDATED** | Elapsed time since the model was updated. Hover over the elapsed time to view the date and time.| Date-time | | **DESCRIPTION** | The model description (not shown by default). | String | | *Metrics* |Add metrics column (last, minimum, and/or maximum values). Available options depend upon the models in the table. | Varies according to models in table | | *Metadata* | User defined metadata key column. Available options depend upon the models in the table. | String | -## Customizing the Models Table +## Customizing the Model Table -The models table is customizable. Changes are persistent (cached in the browser) and represented in the URL, so customized settings +The model table is customizable. Changes are persistent (cached in the browser) and represented in the URL, so customized settings can be saved in a browser bookmark and shared with other ClearML users to collaborate. Customize the table using any of the following: @@ -63,7 +64,7 @@ Customize the table using any of the following: * Sort columns - By metadata, metric, ML framework, description, and last update elapsed time. :::note -The following models-table customizations are saved on a **per-project** basis: +The following model-table customizations are saved on a **per-project** basis: * Columns order * Column width * Active sort order @@ -76,22 +77,22 @@ all the models in the project. The customizations of these two views are saved s ## Model Actions -The following table describes the actions that can be done from the models table, including the states that +The following table describes the actions that can be done from the model table, including the states that allow each feature. Model states are *Draft* (editable) and *Published* (read-only). Access these actions in any of the following ways: -* In the models table, right-click a model, or hover over a model and click Dot menu to +* In the model table, right-click a model, or hover over a model and click Dot menu to open the context menu * In a model's info panel, click the menu button Bar menu * Through the batch action bar, available at screen bottom when multiple models are selected | ClearML Action | Description | States Valid for the Action | |---|---|--| -| Details | View model details, which include general information, the model configuration, and label enumeration. Can also be accessed by double-clicking a model in the models table | Any state | -| Publish | Publish a model to prevent changes to it. *Published* models are read-only. If a model is Published, its experiment also becomes Published (read-only). | *Draft* | +| Details | View model details, which include general information, the model configuration, and label enumeration. Can also be accessed by double-clicking a model in the model table | Any state | +| Publish | Publish a model to prevent changes to it. *Published* models are read-only. If a model is Published, its task also becomes Published (read-only). | *Draft* | | Archive | Move model to the project's archive. | Any state | | Restore | Action available in the archive. Restore a model to the main model table. | Any state | -| Delete | Action available in the archive. Permanently delete the model. This will also remove the model weights file. Note that experiments using deleted models will no longer be able to run. | Any state | +| Delete | Action available in the archive. Permanently delete the model. This will also remove the model weights file. Note that tasks using deleted models will no longer be able to run. | Any state | | Add Tag | Tag models with color-coded labels to assist in organizing work. See [tagging models](#tagging-models). | Any state | | Download | Download a model. The file format depends upon the framework. | *Published* | | Move to Project | Move a model to another project. | Any state | @@ -108,16 +109,17 @@ Select multiple models, then use either the context menu, or the bar that appear operations on the selected models. The context menu shows the number of models that can be affected by each action. The same information can be found in the bottom menu, in a tooltip that appears when hovering over an action icon. -![Models table batch operations](../img/webapp_models_table_batch_operations.png) +![Model table batch operations](../img/webapp_models_table_batch_operations.png#light-mode-only) +![Model table batch operations](../img/webapp_models_table_batch_operations_dark.png#dark-mode-only) ## Tagging Models -Tags are user-defined, color-coded labels that can be added to models (and experiments), allowing to easily identify and -group of experiments. A tag can show any text, for any purpose. For example, add tags for the type of remote machine -experiments execute on, label versions of experiments, or apply team names to organize experimentation. +Tags are user-defined, color-coded labels that can be added to models (and tasks), allowing to easily identify and +group of tasks. A tag can show any text, for any purpose. For example, add tags for the type of remote machine +tasks execute on, label versions of tasks, or apply team names to organize experimentation. * To Add tags and to change tag colors: - 1. Click the experiment **>** Hover over the tag area **>** **+ADD TAG** or Bars menu + 1. Click the task **>** Hover over the tag area **>** **+ADD TAG** or Bars menu (menu) 1. Do one of the following: * Add a new tag - Type the new tag name **>** **(Create New)**. diff --git a/docs/webapp/webapp_model_viewing.md b/docs/webapp/webapp_model_viewing.md index ca3f8c90..88dee571 100644 --- a/docs/webapp/webapp_model_viewing.md +++ b/docs/webapp/webapp_model_viewing.md @@ -2,7 +2,7 @@ title: Model Details --- -In the models table, double-click on a model to view and/or modify the following: +In the model table, double-click on a model to view and/or modify the following: * General model information * Model configuration * Model label enumeration @@ -18,24 +18,27 @@ Models in *Draft* status are editable, so you can modify their configuration, la The **GENERAL** tab lists the model's General information including: * Model URL * ML Framework -* Creating experiment (ClearML experiment that generated the model) +* Creating task (ClearML task that generated the model) * Description (click to edit) If the model is stored in a network location, it can be downloaded by clicking the model URL. If the model was stored on the local machine you can copy its URL to manually access it. -![Model general information](../img/webapp_model_general.png) +![Model general information](../img/webapp_model_general.png#light-mode-only) +![Model general information](../img/webapp_model_general_dark.png#dark-mode-only) ## Model Configuration The **NETWORK** tab displays the model's configuration. -![Model network](../img/webapp_model_network.png) +![Model network](../img/webapp_model_network.png#light-mode-only) +![Model network](../img/webapp_model_network_dark.png#dark-mode-only) Hover over the model configuration area to access the following actions: -![Model config actions](../img/webapp_model_config_actions.png) +![Model config actions](../img/webapp_model_config_actions.png#light-mode-only) +![Model config actions](../img/webapp_model_config_actions_dark.png#dark-mode-only) * Magnifying glass Search * Copy Copy configuration @@ -46,36 +49,41 @@ Hover over the model configuration area to access the following actions: The **LABELS** tab displays for each class label (`Label`) its name and enumerated value (`ID`). -![Model label enumeration](../img/webapp_model_labels.png) +![Model label enumeration](../img/webapp_model_labels.png#light-mode-only) +![Model label enumeration](../img/webapp_model_labels_dark.png#dark-mode-only) To modify / add / delete class labels (for *Draft* models), hover over the label table and click **EDIT**. This opens the label editing window. -![Model label editing](../img/webapp_model_labels_edit.png) +![Model label editing](../img/webapp_model_labels_edit.png#light-mode-only) +![Model label editing](../img/webapp_model_labels_edit_dark.png#dark-mode-only) ## Metadata The **METADATA** tab lists the model's metadata entries, which consist of a key, type, and value. -![Model metadata](../img/webapp_model_metadata.png) +![Model metadata](../img/webapp_model_metadata.png#light-mode-only) +![Model metadata](../img/webapp_model_metadata_dark.png#dark-mode-only) To modify / add / delete model metadata items, hover over the metadata table and click **EDIT**. This opens the metadata editing window. -![Model metadata editing](../img/webapp_model_metadata_edit.png) +![Model metadata editing](../img/webapp_model_metadata_edit.png#light-mode-only) +![Model metadata editing](../img/webapp_model_metadata_edit_dark.png#dark-mode-only) ## Lineage -The **LINEAGE** tab displays the model's creating experiment (the ClearML experiment that generated the model) and lists -all the tasks where the model is used as an input model. Click an experiment to navigate to its page. +The **LINEAGE** tab displays the model's creating task (the ClearML task that generated the model) and lists +all the tasks where the model is used as an input model. Click a task to navigate to its page. You can filter the task list by tags and task status. -Use the search bar to look for experiments based on their name, ID, or description. +Use the search bar to look for tasks based on their name, ID, or description. -![Model lineage](../img/webapp_model_lineage.png) +![Model lineage](../img/webapp_model_lineage.png#light-mode-only) +![Model lineage](../img/webapp_model_lineage_dark.png#dark-mode-only) ## Scalars @@ -91,7 +99,8 @@ are retrieved when the report is displayed allowing your reports to show the lat For better plot analysis, see [Plot Controls](webapp_exp_track_visual.md#plot-controls). -![Model scalars](../img/webapp_model_scalars.png) +![Model scalars](../img/webapp_model_scalars.png#light-mode-only) +![Model scalars](../img/webapp_model_scalars_dark.png#dark-mode-only) ## Plots @@ -104,5 +113,6 @@ are retrieved when the report is displayed allowing your reports to show the lat For better plot analysis, see [Plot Controls](webapp_exp_track_visual.md#plot-controls). -![Model plots](../img/webapp_model_plots.png) +![Model plots](../img/webapp_model_plots.png#light-mode-only) +![Model plots](../img/webapp_model_plots_dark.png#dark-mode-only) diff --git a/docs/webapp/webapp_orchestration_dash.md b/docs/webapp/webapp_orchestration_dash.md index 1b705db6..4848cf18 100644 --- a/docs/webapp/webapp_orchestration_dash.md +++ b/docs/webapp/webapp_orchestration_dash.md @@ -3,7 +3,7 @@ title: Orchestration Dashboard --- :::important Enterprise Feature -This feature is available under the ClearML Enterprise plan. +The Orchestration Dashboard is available under the ClearML Enterprise plan. ::: Use the orchestration dashboard to monitor all of your available and in-use compute resources: @@ -12,7 +12,8 @@ Use the orchestration dashboard to monitor all of your available and in-use comp * Resource history event log * Detailed resource performance metrics -![Orchestration Dashboard](../img/webapp_orchestration_dash.png) +![Orchestration Dashboard](../img/webapp_orchestration_dash.png#light-mode-only) +![Orchestration Dashboard](../img/webapp_orchestration_dash_dark.png#dark-mode-only) ## Resource Categories and Groups The orchestration dashboard shows your workers by groups and categories, specified by the following naming @@ -82,7 +83,8 @@ to access the worker's information panel. The table highlights values that cross user configured thresholds. -![Resource groups](../img/webapp_orch_dash_resource_groups.png) +![Resource groups](../img/webapp_orch_dash_resource_groups.png#light-mode-only) +![Resource groups](../img/webapp_orch_dash_resource_groups_dark.png#dark-mode-only) Click Tune to define the threshold values. @@ -90,12 +92,18 @@ Click Tune + +![Threshold modal](../img/webapp_orch_dash_threshold_modal.png#light-mode-only) +![Threshold modal](../img/webapp_orch_dash_threshold_modal_dark.png#dark-mode-only) + + Clicking on a resource group opens the group's info panel and replace the **Overview** graph with that resource's usage history. -![Resource group info panel](../img/webapp_orch_dash_resource_group_info.png) +![Resource group info panel](../img/webapp_orch_dash_resource_group_info.png#light-mode-only) +![Resource group info panel](../img/webapp_orch_dash_resource_group_info_dark.png#dark-mode-only) The info panel displays the group's: * Total GPU count diff --git a/docs/webapp/webapp_overview.md b/docs/webapp/webapp_overview.md index 53da14dc..3b900a29 100644 --- a/docs/webapp/webapp_overview.md +++ b/docs/webapp/webapp_overview.md @@ -3,28 +3,29 @@ title: WebApp --- The **ClearML Web UI** is the graphical user interface for the ClearML platform, which includes: -* Experiment management +* Task management * Browsing * Resource utilization monitoring * Profile management * Direct access to the ClearML community (Slack channel, YouTube, and GitHub). -![WebApp screenshots gif](../img/gif/webapp_screenshots.gif) +![WebApp screenshots gif](../img/gif/webapp_screenshots.gif#light-mode-only) +![WebApp screenshots gif](../img/gif/webapp_screenshots_dark.gif#dark-mode-only) ## UI Modules The WebApp's sidebar provides access to the following modules: -* Homepage[Dashboard](webapp_home.md) - The dashboard for recent activity and quick access to experiments and projects. +* Homepage[Dashboard](webapp_home.md) - The dashboard for recent activity and quick access to tasks and projects. -* Projects[Projects](webapp_projects_page.md) - The main experimentation page. Access your experiments and models as they are organized into projects. The experiments and models are displayed in tables which let you: - * Track ongoing experiments and visualize their results - * Reproduce previously run experiments - * Tune experiments with no code change - * Compare experiments - * Share experiments and their models with other ClearML hosted service users +* Projects[Projects](webapp_projects_page.md) - The main experimentation page. Access your tasks and models as they are organized into projects. The tasks and models are displayed in tables which let you: + * Track ongoing tasks and visualize their results + * Reproduce previously run tasks + * Tune tasks with no code change + * Compare tasks + * Share tasks and their models with other ClearML hosted service users * Datasets[Datasets](datasets/webapp_dataset_page.md) - View and manage your datasets. * Pipelines[Pipelines](pipelines/webapp_pipeline_page.md) - View and manage your pipelines. -* Model endpoints[Model Endpoints](webapp_model_endpoints.md) - Monitor your live model endpoints (available in the ClearML Enterprise plan). +* Model endpoints[Model Endpoints](webapp_model_endpoints.md) - Monitor your live model endpoints. * Reports[Reports](webapp_reports.md) - View and manage your reports. * Workers and Queues[Orchestration](webapp_workers_queues.md) - Autoscale, monitor, and manage your resource usage and workers queues. * ClearML Apps[Applications](applications/apps_overview.md) - ClearML's GUI applications for no-code workflow execution (available in the ClearML Pro and Enterprise plans). @@ -36,7 +37,7 @@ Click the profile menu button Prof
 in the top right corner of the web UI screen to access the following:
 * **Settings** - Navigate to ClearML's user [Settings](settings/webapp_settings_profile.md) page:
   * Set [WebApp preferences](settings/webapp_settings_profile.md)
-  * Manage [workspace API credentials](settings/webapp_settings_profile.md#clearml-credentials)
+  * Manage [workspace API credentials](settings/webapp_settings_profile.md#clearml-api-credentials)
   * Configure [cloud storage access credentials](settings/webapp_settings_profile.md#browser-cloud-storage-access) for the ClearML Web UI
   * ClearML Hosted service specific options
     * Manage [users and workspaces](settings/webapp_settings_users.md)
@@ -45,7 +46,7 @@ in the top right corner of the web UI screen to access the following:
     * Manage [server identity providers](settings/webapp_settings_id_providers.md) (available in the ClearML Enterprise plan)
     * Define the [available resources](settings/webapp_settings_resource_configs.md) and the way in which they will be 
     allocated to different workloads (available in the ClearML Enterprise plan)
-    * View [usage and billing](settings/webapp_settings_usage_billing.md) information
+    * View [billing and usage](settings/webapp_settings_usage_billing.md) information
 * **Invite a User** to your workspace (supported in hosted service). Click **Invite a User** > input user's 
 email > click **ADD** > page redirects to the [Users & Groups](settings/webapp_settings_users.md#user-groups) section of 
   the **Settings** page 
@@ -60,10 +61,10 @@ to find your ClearML resources.
 To search using regex, click the `.*` icon on the search bar. 
 
 Search results are returned for the different ClearML objects:
-* Experiments - Searching an experiment table looks for matches in the experiments' name, ID, description and input and 
-output models. The enterprise version also includes experiment Dataviews' hyper-datasets and versions. 
+* Tasks - Searching a task table looks for matches in the tasks' name, ID, description and input and 
+output models. The enterprise version also includes task Dataviews' hyper-datasets and versions. 
 * Models - Searching a Model table looks for matches in the models' name, ID and description.
-* Dataviews (Enterprise only) - Searching a Dataviews table looks for matches in the Dataviews' name, ID, description, 
+* Dataviews (Enterprise only) - Searching a Dataview table looks for matches in the Dataviews' name, ID, description, 
 hyper-datasets, and versions.
 * Datasets - Searching the datasets page looks for matches in the datasets' name, ID, and description. In a dataset's
 version table, a search looks for matches in the versions' name, ID, and description. 
@@ -73,10 +74,10 @@ run's table, a search looks for matches in the runs' name and ID.
 report content.
 
 The search bar in the [Dashboard](webapp_home.md) page searches the whole WebApp for objects that match queries as 
-specified above and returns results divided by object type (projects, experiments, models, etc.). 
+specified above and returns results divided by object type (projects, tasks, models, etc.). 
 
 :::tip Additional filtering
-ClearML's object tables (e.g. [experiments](webapp_exp_table.md), [models](webapp_model_table.md), [pipelines](pipelines/webapp_pipeline_table.md), 
+ClearML's object tables (e.g. [tasks](webapp_exp_table.md), [models](webapp_model_table.md), [pipelines](pipelines/webapp_pipeline_table.md), 
 and [datasets](datasets/webapp_dataset_page.md)) provide column filters to easily focus your search by object properties
 (e.g status, creation/update time, metric values, etc.).
 :::
diff --git a/docs/webapp/webapp_project_overview.md b/docs/webapp/webapp_project_overview.md
index 470dd4c6..64e0caa2 100644
--- a/docs/webapp/webapp_project_overview.md
+++ b/docs/webapp/webapp_project_overview.md
@@ -3,16 +3,17 @@ title: Project Overview
 ---
 
 A project's **OVERVIEW** tab provides options to present a general picture of the project. The page consists of a graph 
-that can show a snapshot of specified metrics' values across the project's experiments, and a space to enter and edit a 
+that can show a snapshot of specified metrics' values across the project's tasks, and a space to enter and edit a 
 project's description. When either overview option is utilized, the **OVERVIEW** tab becomes the project's landing page, 
 meaning that it's the first thing that is seen when opening the project. 
 
-![Project overview tab gif](../img/gif/webapp_metric_snapshot.gif)
+![Project overview](../img/webapp_project_overview.png#light-mode-only)
+![Project overview](../img/webapp_project_overview_dark.png#dark-mode-only)
 
 ## Metric Snapshot
 
 On the top of the **OVERVIEW** tab, you can display a **metric snapshot**. Choose metric variants, and the plot area 
-will present an aggregated view of the values for those metrics and the time that each experiment scored those values. 
+will present an aggregated view of the values for those metrics and the time that each task scored those values. 
 This way, the project's progress can be quickly deduced.
 
 To add metric variants to the overview:
@@ -23,7 +24,8 @@ value to show
 
 <div class= -![Metric Snapshot selection](../img/webapp_metric_snapshot_selection.png) +![Metric Snapshot selection](../img/webapp_metric_snapshot_selection.png#light-mode-only) +![Metric Snapshot selection](../img/webapp_metric_snapshot_selection_dark.png#dark-mode-only) @@ -36,18 +38,22 @@ To remove metric variants: 1. Click **Apply** -When a single metric variant is selected, the plot color codes experiment status +When a single metric variant is selected, the plot color codes task status (`Completed`, `Aborted`, `Published`, or `Failed`). When multiple variants are selected, each color corresponds to a metric/variant combination. -Hover over a point in the snapshot, and a box will appear with the details of the experiment associated with the metric -value. Click the point to go to the experiment's details page. +Hover over a point in the snapshot, and a box will appear with the details of the task associated with the metric +value. Click the point to go to the task's details page. + +![Project overview tab gif](../img/gif/webapp_metric_snapshot.gif#light-mode-only) +![Project overview tab gif](../img/gif/webapp_metric_snapshot_dark.gif#dark-mode-only) ## Project Description -Every project has a `description` field. The UI provides a Markdown editor to edit this field. +Every project has a `description` field. The UI provides a Markdown editor to edit this field. For a quick reference for +the MarkDown syntax that can be used, see [Markdown Formatting Quick Guide](webapp_reports.md#markdown-formatting-quick-guide). -In the Markdown document, you can write and share reports and add links to ClearML experiments +In the Markdown document, you can write and share reports and add links to ClearML tasks or any network resource such as issue tracker, web repository, etc. ### Editing the Description diff --git a/docs/webapp/webapp_projects_page.md b/docs/webapp/webapp_projects_page.md index 0576f089..a38319b7 100644 --- a/docs/webapp/webapp_projects_page.md +++ b/docs/webapp/webapp_projects_page.md @@ -6,15 +6,16 @@ Use the Projects Page for project navigation and management. Your projects are displayed like folders: click a folder to access its contents. The Projects Page shows the top-level projects in your workspace. Projects that contain nested subprojects are identified by an extra nested project tab. -An exception is the **All Experiments** folder, which shows all projects' and subprojects' contents in a single, flat +An exception is the **All Tasks** folder, which shows all projects' and subprojects' contents in a single, flat list. -![Projects page](../img/webapp_project_page.png) +![Projects page](../img/webapp_project_page.png#light-mode-only) +![Projects page](../img/webapp_project_page_dark.png#dark-mode-only) If a project has any subprojects, clicking its folder will open its own project page. Access the projects' top-level -contents (i.e. experiments, models etc.) via the folder with the bracketed (`[ ]`) project name. +contents (i.e. tasks, models etc.) via the folder with the bracketed (`[ ]`) project name. -If a project does not contain any subprojects, clicking on its folder will open its experiment table (or [Project Overview](webapp_project_overview.md) +If a project does not contain any subprojects, clicking on its folder will open its task table (or [Project Overview](webapp_project_overview.md) page when relevant). ## Project Folders @@ -23,7 +24,8 @@ Project folders display summarized project information:
-![Project card](../img/webapp_project_card.png) +![Project card](../img/webapp_project_card.png#light-mode-only) +![Project card](../img/webapp_project_card_dark.png#dark-mode-only)
@@ -32,7 +34,8 @@ Project folders display summarized project information:
- ![Subproject tab](../img/webapp_sub_project_card.png) + ![Subproject tab](../img/webapp_sub_project_card.png#light-mode-only) + ![Subproject tab](../img/webapp_sub_project_card_dark.png#dark-mode-only)
@@ -47,7 +50,8 @@ are labeled with Hidden project
 
 <br/>
 
-![Hidden project configuration](../img/settings_hidden_projects.png)
+![Hidden project configuration](../img/settings_hidden_projects.png#light-mode-only)
+![Hidden project configuration](../img/settings_hidden_projects_dark.png#dark-mode-only)
 
 </Collapsible>
 
@@ -56,7 +60,12 @@ are labeled with <img src= on the top right of a project folder to open its context menu and access the following project actions: -![Project context menu](../img/webapp_projects_context_menu.png) +
+ +![Project context menu](../img/webapp_projects_context_menu.png#light-mode-only) +![Project context menu](../img/webapp_projects_context_menu_dark.png#dark-mode-only) + +
* **Edit** - Rename the project and/or modify its default output destination. * **New Project** - Create a new project (by default a subproject). @@ -75,7 +84,12 @@ action. For more information see [Custom UI Context Menu Actions](../deploying_c To create a project, click the **+ NEW PROJECT** button in the top right of the page or in a project's context menu, which will open a **New Project** modal. -![New project modal](../img/webapp_projects_new_project.png) +
+ +![New project modal](../img/webapp_projects_new_project.png#light-mode-only) +![New project modal](../img/webapp_projects_new_project_dark.png#dark-mode-only) + +
* Project name * Create in - Where the project should be created, either as a top-level project (create in `Projects root`) or as a diff --git a/docs/webapp/webapp_reports.md b/docs/webapp/webapp_reports.md index af764033..7e79eb6c 100644 --- a/docs/webapp/webapp_reports.md +++ b/docs/webapp/webapp_reports.md @@ -14,7 +14,7 @@ title: Reports
-With ClearML's Reports you can write up notes, experiment findings, or really anything you want. You can create reports +With ClearML's Reports you can write up notes, task findings, or really anything you want. You can create reports in any of your ClearML projects. In addition to its main document, a report also contains a description field, which will appear in the report's card in @@ -31,7 +31,8 @@ Reports are editable Markdown documents, supporting: * Embedded images uploaded from your computer * Embedded ClearML task, model, and [app](applications/apps_overview.md) content -![Report](../img/webapp_report.png) +![Report](../img/webapp_report.png#light-mode-only) +![Report](../img/webapp_report_dark.png#dark-mode-only) Publishing a report locks it for future editing, so you can preserve its contents. You can also share your reports, download a PDF copy, or simply copy the MarkDown content and reuse in your editor of choice. @@ -39,7 +40,7 @@ download a PDF copy, or simply copy the MarkDown content and reuse in your edito Access ClearML reports through the [Reports Page](#reports-page). ## Embedding ClearML Visualizations -You can embed plots and images from your ClearML objects (experiments, models, and apps) into your reports: scalar +You can embed plots and images from your ClearML objects (tasks, models, and apps) into your reports: scalar graphs and other plots, and debug samples from an individual object or from an object comparison page. These visualizations are updated live as the object(s) updates. @@ -49,18 +50,21 @@ To add a graphic resource: object comparison) 2. Hover over the resource and click Generate embed code. - ![Reports step 2](../img/reports_step_2.png) + ![Reports step 2](../img/reports_step_2.png#light-mode-only) + ![Reports step 2](../img/reports_step_2_dark.png#dark-mode-only) Click `Embed in ClearML report`. This generates the embed code for accessing the resource, and copies it to your clipboard. - ![Reports step 2a](../img/reports_step_2a.png) + ![Reports step 2a](../img/reports_step_2a.png#light-mode-only) + ![Reports step 2a](../img/reports_step_2a_dark.png#dark-mode-only) 3. Return to your report page and paste the code snippet - ![Reports step 3](../img/reports_step_3.png) + ![Reports step 3](../img/reports_step_3.png#light-mode-only) + ![Reports step 3](../img/reports_step_3_dark.png#dark-mode-only) -Once embedded in the report, you can return to the resource's original location (e.g. comparison page, experiment/model/app page) +Once embedded in the report, you can return to the resource's original location (e.g. comparison page, task/model/app page) by clicking Return to resource. ### Customizing Embed Code @@ -130,24 +134,24 @@ Delimit the fields with `&`s. The following are examples of dynamic queries. All the examples use `objectType=task`, but `objectType=model` can also be used. -* Request the scalars plot of a specific metric variant for the latest experiment in a project: +* Request the scalars plot of a specific metric variant for the latest task in a project: ``` src="/widgets/?objectType=task&xaxis=iter&type=scalar&metrics=&variants=&project=&page_size=1&page=0&order_by[]=-last_update ``` - Notice that the `project` parameter is specified. To get the most recent single experiment, + Notice that the `project` parameter is specified. To get the most recent single task, `page_size=1&page=0&order_by[]=-last_update` is added. `page_size` specifies how many results are returned in each page, and `page` specifies which page to return (in this case the first page)--this way you can specify how many - experiments you want in your graph. `order_by[]=-last_update` orders the results by update time in descending order + tasks you want in your graph. `order_by[]=-last_update` orders the results by update time in descending order (most recent first). -* Request the scalars plot of a specific metric variant for the experiments with a specific tag: +* Request the scalars plot of a specific metric variant for the tasks with a specific tag: ``` src="/widgets/?objectType=task&xaxis=iter&type=scalar&metrics=&variants=&tags[]=__$or, ``` - A list of tags that the experiment should contain is specified in the `tags` argument. You can also specify tags that - exclude experiments. See tag filter syntax examples [here](../clearml_sdk/task_sdk.md#tag-filters). -* Request the `training/accuracy` scalar plot of the 5 experiments with the best accuracy scores (see Metric/Variant IDs note [below](#event_id)): + A list of tags that the task should contain is specified in the `tags` argument. You can also specify tags that + exclude tasks. See tag filter syntax examples [here](../clearml_sdk/task_sdk.md#tag-filters). +* Request the `training/accuracy` scalar plot of the 5 tasks with the best accuracy scores (see Metric/Variant IDs note [below](#event_id)): ``` src="/widgets/?objectType=task&xaxis=iter&type=scalar&metrics=training&variants=accuracy&project=4043a1657f374e9298649c6ba72ad233&page_size=5&page=0&order_by[]=-last_metrics...value" @@ -171,14 +175,16 @@ or in List view List view -![Report project card](../img/webapp_report_project_card.png) +![Report project card](../img/webapp_report_project_card.png#light-mode-only) +![Report project card](../img/webapp_report_project_card_dark.png#dark-mode-only) @@ -190,7 +196,8 @@ In List view, the report cards display summarized report information:
-![report card](../img/webapp_report_card.png) +![report card](../img/webapp_report_card.png#light-mode-only) +![report card](../img/webapp_report_card_dark.png#dark-mode-only)
@@ -209,7 +216,8 @@ of a report card to open its context menu and access report actions:
-![Report card context menu](../img/webapp_report_card_context_menu.png) +![Report card context menu](../img/webapp_report_card_context_menu.png#light-mode-only) +![Report card context menu](../img/webapp_report_card_context_menu_dark.png#dark-mode-only)
@@ -225,7 +233,8 @@ of a report card to open its context menu and access report actions: To create a report, click the **+ NEW REPORT** button in the top right of the page, which will open a **New Report** modal. -![New project modal](../img/webapp_report_new_report.png) +![New project modal](../img/webapp_report_new_report.png#light-mode-only) +![New project modal](../img/webapp_report_new_report_dark.png#dark-mode-only) ## MarkDown Formatting Quick Guide @@ -236,9 +245,9 @@ The following is a quick reference for the MarkDown syntax that can be used in C To create headings, add `#` in front of the phrases that you want to turn into headings. The number of `#` signs correspond to the heading level (i.e. `#` for level-1 heading, `##` for level-2, etc.): -| MarkDown | Rendered Output | -|---|---| -| # H1
## H2
### H3
#### H4
##### H5
###### H6|![Report headings](../img/reports_headings.png)| +| MarkDown | Rendered Output | +|---|-------------------------------------------------------------------------------------------------------------------------------------| +| # H1
## H2
### H3
#### H4
##### H5
###### H6| ![Report headings](../img/reports_headings.png#light-mode-only) ![Report headings](../img/reports_headings_dark.png#dark-mode-only) | ### Text Emphasis @@ -256,9 +265,9 @@ The following table presents the text format options: To create a blockquote, add a `>` before each line of the quote. Nest blockquotes by adding additional `>` signs before each line of the nested blockquote. -| MarkDown | Rendered Output | -|---|---| -| \> Blockquote
\>\> Nested quote 1
\>\>\> Nested quote 2
|![Report Blockquotes](../img/reports_blockquotes.png)| +| MarkDown | Rendered Output | +|---|-------------------------------------------------------------------------------------------------------------------------------------------------| +| \> Blockquote
\>\> Nested quote 1
\>\>\> Nested quote 2
| ![Report Blockquotes](../img/reports_blockquotes.png#light-mode-only) ![Report Blockquotes](../img/reports_blockquotes_dark.png#dark-mode-only) | ### Lists @@ -267,9 +276,9 @@ To create a blockquote, add a `>` before each line of the quote. Nest blockquote Create an ordered list by numbering the list items with numbers followed by periods. The list items do not have to be numbered correctly, but the list will be rendered numerically starting with `1.`. -| MarkDown | Rendered Output | -|---|---| -| 1. Item 1
2. Item 2
1. Item 3
1. Item 4
|![Report ordered list](../img/reports_ordered_list.png)| +| MarkDown | Rendered Output | +|---|-----------------------------------------------------------------------------------------------------------------------------------------------------| +| 1. Item 1
2. Item 2
1. Item 3
1. Item 4
| ![Report ordered list](../img/reports_ordered_list.png#light-mode-only) ![Report ordered list](../img/reports_ordered_list_dark.png#dark-mode-only) | #### Unordered List @@ -280,9 +289,9 @@ You can also use checkmarks (`* [x]`), following any of the bullet signs. To nest lists, indent nested items 2 spaces more than their parent list item. -| MarkDown | Rendered Output | -|---|---| -| + Item 1
+ Item 2
  - Sub-item a:
    \* Sub-sub-item x
    + Sub-sub-item y
    - Sub-sub-item z
\* [x] A checkmark
|![Report unordered list](../img/reports_unordered_list.png)| +| MarkDown | Rendered Output | +|---|-------------------------------------------------------------------------------------------------------------------------------------------------------------| +| + Item 1
+ Item 2
  - Sub-item a:
    \* Sub-sub-item x
    + Sub-sub-item y
    - Sub-sub-item z
\* [x] A checkmark
| ![Report unordered list](../img/reports_unordered_list.png#light-mode-only) ![Report unordered list](../img/reports_unordered_list_dark.png#dark-mode-only) | ### Tables @@ -298,7 +307,8 @@ MarkDown code for a table looks like this: The rendered output should look like this: -![Reports table](../img/reports_table.png) +![Report table](../img/reports_table.png#light-mode-only) +![Report table](../img/reports_table_dark.png#dark-mode-only) Add the table column names in the first row; each name is preceded and followed by a pipe (`|`). In the second row, add sets of at least three hyphens (`---`) for each column, and add a pipe before and after each set @@ -403,9 +413,9 @@ It is rendered like this: Create horizontal lines using three hyphens (`---`), underscores (`___`), or asterisks (`***`): -| MarkDown | Rendered Output | -|---|---| -| ---

___

***
|![Reports horizontal rules](../img/reports_horizontal_rules.png)| +| MarkDown | Rendered Output | +|---|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| ---

___

***
| ![Reports horizontal rules](../img/reports_horizontal_rules.png#light-mode-only) ![Reports horizontal rules](../img/reports_horizontal_rules_dark.png#dark-mode-only) | ### Images @@ -414,22 +424,28 @@ To add an image, add an exclamation point, followed by the alt text enclosed by image enclosed in parentheses: ``` -![Logo](https://raw.githubusercontent.com/allegroai/clearml/master/docs/clearml-logo.svg) +![Logo](https://raw.githubusercontent.com/clearml/clearml/master/docs/clearml-logo.svg) ``` The rendered output should look like this: -![Logo](https://raw.githubusercontent.com/allegroai/clearml/master/docs/clearml-logo.svg) +Logo + +Logo + +
To add a title to the image, which you can see in a tooltip when hovering over the image, add the title after the image's link: ``` -![With title](https://raw.githubusercontent.com/allegroai/clearml/master/docs/clearml-logo.svg "ClearML logo") +![With title](https://raw.githubusercontent.com/clearml/clearml/master/docs/clearml-logo.svg "ClearML logo") ``` The rendered output should look like this: -Logo with Title + + + Hover over the image to see its title. diff --git a/docs/webapp/webapp_workers_queues.md b/docs/webapp/webapp_workers_queues.md index da7db73e..a4022367 100644 --- a/docs/webapp/webapp_workers_queues.md +++ b/docs/webapp/webapp_workers_queues.md @@ -6,14 +6,14 @@ With the **Orchestration** page, you can: * Use Cloud autoscaling apps to define your compute resource budget, and have the apps automatically manage your resource consumption as needed–-with no code (available under the ClearML Pro plan) -* Monitor resources (CPU and GPU, memory, video memory, and network usage) used by the experiments / Tasks that workers +* Monitor resources (CPU and GPU, memory, video memory, and network usage) used by the tasks that workers execute * View workers and the queues they listen to * Manage worker queues * Create and rename queues * Delete empty queues * Monitor queue utilization - * Reorder, move, and remove experiments from queues + * Reorder, move, and remove tasks from queues * Monitor all of your available and in-use compute resources (available in the ClearML Enterprise plan. See [Orchestration Dashboard](webapp_orchestration_dash.md)) * Set user group resource quotas and reservations to enable workload prioritization across available resources (available in the ClearML Enterprise plan. See [Resource Policies](resource_policies.md)) @@ -42,7 +42,8 @@ For more information about how autoscalers work, see the [Cloud Autoscaling Over For more information about a specific autoscaler, see [AWS Autoscaler](applications/apps_aws_autoscaler.md) and/or [GCP Autoscaler](applications/apps_gcp_autoscaler.md). -![Cloud autoscalers](../img/webapp_orchestration_autoscalers.png) +![Cloud autoscalers](../img/webapp_orchestration_autoscalers.png#light-mode-only) +![Cloud autoscalers](../img/webapp_orchestration_autoscalers_dark.png#dark-mode-only) ## Workers @@ -52,7 +53,7 @@ at its top right corner. Hover over any plot point to see its data. By default, number of active and total workers over time. The worker table shows the currently available workers and their current execution information: -* Current running experiment +* Current running task * Current execution time * Training iteration. @@ -68,42 +69,45 @@ The worker's details panel includes the following two tabs: * **INFO** - worker information: * Worker Name * Update time - The last time the worker reported data - * Current Experiment - The experiment currently being executed by the worker - * Experiment Runtime - How long the currently executing experiment has been running - * Experiment iteration - The last reported training iteration for the experiment + * Current Task - The task currently being executed by the worker + * Task Runtime - How long the currently executing task has been running + * Task iteration - The last reported training iteration for the task * **QUEUES** - Information about the queues that the worker is assigned to: * Queue - The name of the Queue - * Next experiment - The next experiment available in this queue - * In Queue - The number of experiments currently enqueued + * Next task - The next task available in this queue + * In Queue - The number of tasks currently enqueued -![Worker management](../img/agents_queues_resource_management.png) +![Worker management](../img/agents_queues_resource_management.png#light-mode-only) +![Worker management](../img/agents_queues_resource_management_dark.png#dark-mode-only) ## Queues -Use the **QUEUES** tab to manage queues and monitor their statistics. The page shows graphs of the average experiment -wait time and the number of queued experiments, and a queue details table. Hover over any plot point to view its data. +Use the **QUEUES** tab to manage queues and monitor their statistics. The page shows graphs of the average task +wait time and the number of queued tasks, and a queue details table. Hover over any plot point to view its data. By default, the graphs display the overall information of all queues. The queue table shows the following queue information: * Queue - Queue name * Workers - Number of workers servicing the queue -* Next Experiment - The next experiment available in this queue +* Next Task - The next task available in this queue * Last Updated - The last time queue contents were modified -* In Queue - Number of experiments currently enqueued in the queue +* In Queue - Number of tasks currently enqueued in the queue To create a new queue - Click **+ NEW QUEUE** (top left). Hover over a queue and click Copy to copy the queue's ID. -![image](../img/4100.png) +![Queues](../img/4100.png#light-mode-only) +![Queues](../img/4100_dark.png#dark-mode-only) Right-click on a queue or hover and click its action button Dot menu to access queue actions: -![Queue context menu](../img/webapp_workers_queues_context.png) +![Queue context menu](../img/webapp_workers_queues_context.png#light-mode-only) +![Queue context menu](../img/webapp_workers_queues_context_dark.png#dark-mode-only) * Delete - Delete the queue. Any pending tasks will be dequeued. * Rename - Change the queue's name @@ -118,22 +122,23 @@ action. For more information see [Custom UI Context Menu Actions](../deploying_c Clicking on a queue will open the queue's details panel and replace the graphs with that queue's statistics. The queue's details panel includes the following two tabs: -* **EXPERIMENTS** - A list of experiments in the queue. You can reorder and remove enqueued experiments. See +* **TASKS** - A list of tasks in the queue. You can reorder and remove enqueued tasks. See [Controlling Queue Contents](#controlling-queue-contents). * **WORKERS** - Information about the workers assigned to the queue: * Name - Worker name * IP - Worker's IP - * Currently Executing - The experiment currently being executed by the worker + * Currently Executing - The task currently being executed by the worker ### Controlling Queue Contents -Click on an experiment's menu button Dot menu -in the **EXPERIMENTS** tab to reorganize your queue: +Click on a task's menu button Dot menu +in the **TASKS** tab to reorganize your queue: -![Queue experiment's menu](../img/workers_queues_experiment_actions.png) +![Queue task's menu](../img/workers_queues_experiment_actions.png#light-mode-only) +![Queue task's menu](../img/workers_queues_experiment_actions_dark.png#dark-mode-only) * Move a task to the top or bottom of the queue * Move the task to a different queue * Dequeue the task -You can also reorder experiments in a queue by dragging an experiment to a new position in the queue. +You can also reorder tasks in a queue by dragging a task to a new position in the queue. diff --git a/docusaurus.config.js b/docusaurus.config.js index d78ff414..da24b73b 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -68,7 +68,7 @@ module.exports = { }, announcementBar: { id: 'supportus', - content: 'If you ❤️ ️ClearML, ⭐️ us on GitHub!', + content: 'If you ❤️ ️ClearML, ⭐️ us on GitHub!', isCloseable: true, }, navbar: { @@ -82,54 +82,72 @@ module.exports = { }, items: [ { - to: '/docs', - label: 'Docs', + to: '/docs/', + label: 'Overview', position: 'left', + activeBaseRegex: '^/docs/latest/docs/(fundamentals/agents_and_queues|hyper_datasets|clearml_agent(/(clearml_agent_dynamic_gpus|clearml_agent_fractional_gpus)?|)?|cloud_autoscaling/autoscaling_overview|remote_session|model_registry|deploying_clearml/enterprise_deploy/appgw|build_interactive_models|deploying_models|custom_apps)?$', }, { - to:'/docs/hyperdatasets/overview', - label: 'Hyper-Datasets', + to: '/docs/clearml_sdk/clearml_sdk_setup', + label: 'Setup', position: 'left', + activeBaseRegex: '^/docs/latest/docs/(deploying_clearml(?!/enterprise_deploy/appgw(/.*)?$)(/.*)?$|clearml_sdk/clearml_sdk_setup|user_management(/.*)?|clearml_agent/(clearml_agent_setup|clearml_agent_deployment_bare_metal|clearml_agent_deployment_k8s|clearml_agent_deployment_slurm|clearml_agent_execution_env|clearml_agent_env_caching|clearml_agent_services_mode)|integrations/storage)/?$', }, - // {to: 'tutorials', label: 'Tutorials', position: 'left'}, - // Please keep GitHub link to the right for consistency. - {to: '/docs/guides', label: 'Examples', position: 'left'}, - //{to: '/docs/references', label: 'API', position: 'left'}, { - label: 'References', + to: '/docs/getting_started/auto_log_exp', + label: 'Using ClearML', + position: 'left', + activeBaseRegex: '^/docs/latest/docs/(getting_started(?!/video_tutorials(/.*)?)|clearml_serving|apps/clearml_session)(/.*)?$', + }, + { + label: 'Developer Center', position: 'left', // or 'right' + to: '/docs/fundamentals/projects', + activeBaseRegex: '^/docs/latest/docs/(fundamentals(?!/agents_and_queues)(/.*)?|configs/configuring_clearml|getting_started/video_tutorials(/.*)?|clearml_sdk(?!/clearml_sdk_setup)(/.*)?|pipelines(/.*)?|hyperdatasets(/.*)?|clearml_data(/.*)?|hyperdatasets(/webapp)(/.*)?|references(/.*)?|webapp(/.*)?|clearml_agent/(clearml_agent_ref|clearml_agent_env_var)(/.*)?|configs/(clearml_conf|env_vars)(/.*)?|apps/(clearml_task|clearml_param_search)(/.*)?|best_practices(/.*)?|guides(/.*)?|integrations(/.*)?|faq|release_notes(/.*)?)$', + activeClassName: 'navbar__link--active', items: [ { - label: 'SDK', + label: 'ClearML Basics', + to: '/docs/fundamentals/projects', + activeBaseRegex: '^/docs/latest/docs/(fundamentals|getting_started/video_tutorials|clearml_sdk(/(?!clearml_sdk_setup).*|(?=/))?|pipelines|clearml_data|hyperdatasets/(?!webapp/).*)(/.*)?$', + }, + { + label: 'References', to: '/docs/references/sdk/task', + activeBaseRegex: '^/docs/latest/docs/(references/.*|webapp/.*|hyperdatasets/webapp/.*|clearml_agent/(clearml_agent_ref|clearml_agent_env_var)|configs/(clearml_conf|env_vars)|apps/(clearml_task|clearml_param_search))(/.*)?$', }, { - label: 'ClearML Agent', - to: '/docs/clearml_agent/clearml_agent_ref', + label: 'Best Practices', + to: 'docs/best_practices/data_scientist_best_practices', + activeBaseRegex: '^/docs/latest/docs/best_practices/' }, { - label: 'Server API', - to: '/docs/references/api', + label: 'Tutorials', + to: '/docs/guides', + activeBaseRegex: '^/docs/latest/docs/guides', }, { - label: 'Hyper-Datasets', - to: '/docs/references/hyperdataset', + label: 'Code Integrations', + to: '/docs/integrations', + activeBaseRegex: '^/docs/latest/docs/integrations(?!/storage)', + }, + { + label: 'FAQ', + to: '/docs/faq', + activeBaseRegex: '^/docs/latest/docs/faq$', }, - { label: 'Release Notes', to: '/docs/release_notes/clearml_server/open_source/ver_2_0', + activeBaseRegex: '^/docs/latest/docs/release_notes/', }, - { - label: 'Community Resources', - to: '/docs/community', - } + ], }, { - label: 'FAQ', + label: 'Community Resources', position: 'left', // or 'right' - to: '/docs/faq' + to: '/docs/latest/docs/community', }, { href: 'https://joinslack.clear.ml', @@ -150,7 +168,7 @@ module.exports = { 'aria-label': 'Twitter', }, { - href: 'https://github.com/allegroai/clearml', + href: 'https://github.com/clearml/clearml', position: 'right', className: 'header-ico header-ico--github', 'aria-label': 'GitHub repository', @@ -197,7 +215,7 @@ module.exports = { }, { label: 'GitHub', - href: 'https://github.com/allegroai/clearml', + href: 'https://github.com/clearml/clearml', }, ], }, @@ -215,13 +233,13 @@ module.exports = { // Please change this to your repo. breadcrumbs: false, editUrl: - 'https://github.com/allegroai/clearml-docs/edit/main/', + 'https://github.com/clearml/clearml-docs/edit/main/', }, // API: { // sidebarPath: require.resolve('./sidebars.js'), // // Please change this to your repo. // editUrl: - // 'https://github.com/allegroai/clearml-docs/edit/main/', + // 'https://github.com/clearml/clearml-docs/edit/main/', // }, blog: { blogTitle: 'ClearML Tutorials', @@ -231,7 +249,7 @@ module.exports = { showReadingTime: true, // Please change this to your repo. editUrl: - 'https://github.com/allegroai/clearml-docs/edit/main/tutorials/', + 'https://github.com/clearml/clearml-docs/edit/main/tutorials/', }, theme: { customCss: require.resolve('./src/css/custom.css'), diff --git a/package-lock.json b/package-lock.json index e28f84fc..0788e644 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "@docusaurus/plugin-google-analytics": "^3.6.1", "@docusaurus/plugin-google-gtag": "^3.6.1", "@docusaurus/preset-classic": "^3.6.1", - "@easyops-cn/docusaurus-search-local": "^0.23.3", + "@easyops-cn/docusaurus-search-local": "^0.48.5", "@mdx-js/react": "^3.0.0", "clsx": "^1.1.1", "joi": "^17.4.0", @@ -41,24 +41,20 @@ } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", - "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", + "version": "1.18.1", "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7" + "@algolia/autocomplete-plugin-algolia-insights": "1.18.1", + "@algolia/autocomplete-shared": "1.18.1" } }, "node_modules/@algolia/autocomplete-js": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-js/-/autocomplete-js-1.17.7.tgz", - "integrity": "sha512-4rCCg2B5x6GYzLfDZ3QipWydznbaMjoIwNSEbjpJ9cd/0+4nDpRWuBPxgOSsGmE4BFEor2iwQw4uCY6RrBdpjA==", + "version": "1.18.1", "license": "MIT", "dependencies": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7", + "@algolia/autocomplete-core": "1.18.1", + "@algolia/autocomplete-preset-algolia": "1.18.1", + "@algolia/autocomplete-shared": "1.18.1", "htm": "^3.1.1", "preact": "^10.13.2" }, @@ -68,24 +64,20 @@ } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", - "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", + "version": "1.18.1", "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" + "@algolia/autocomplete-shared": "1.18.1" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", - "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", + "version": "1.18.1", "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" + "@algolia/autocomplete-shared": "1.18.1" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -93,9 +85,7 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", - "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", + "version": "1.18.1", "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -103,15 +93,11 @@ } }, "node_modules/@algolia/autocomplete-theme-classic": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-theme-classic/-/autocomplete-theme-classic-1.17.7.tgz", - "integrity": "sha512-8sxnzRCPxyKZJxbG7EUpV/3AssQOjn+Zq/nvzks+BwbkAcpiLRBsXjvlIIsV4l36bZ+/Ri++ttAflGDPrRfn1A==", + "version": "1.18.1", "license": "MIT" }, "node_modules/@algolia/cache-browser-local-storage": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz", - "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==", "license": "MIT", "dependencies": { "@algolia/cache-common": "4.24.0" @@ -119,62 +105,50 @@ }, "node_modules/@algolia/cache-common": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz", - "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==", "license": "MIT" }, "node_modules/@algolia/cache-in-memory": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz", - "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==", "license": "MIT", "dependencies": { "@algolia/cache-common": "4.24.0" } }, "node_modules/@algolia/client-abtesting": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.13.0.tgz", - "integrity": "sha512-6CoQjlMi1pmQYMQO8tXfuGxSPf6iKX5FP9MuMe6IWmvC81wwTvOehnwchyBl2wuPVhcw2Ar53K53mQ60DAC64g==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/client-common": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.13.0.tgz", - "integrity": "sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==", + "version": "5.20.2", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-browser-xhr": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.13.0.tgz", - "integrity": "sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-node-http": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.13.0.tgz", - "integrity": "sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" @@ -182,8 +156,6 @@ }, "node_modules/@algolia/client-account": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz", - "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==", "license": "MIT", "dependencies": { "@algolia/client-common": "4.24.0", @@ -193,8 +165,6 @@ }, "node_modules/@algolia/client-analytics": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz", - "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==", "license": "MIT", "dependencies": { "@algolia/client-common": "4.24.0", @@ -205,8 +175,6 @@ }, "node_modules/@algolia/client-common": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz", - "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==", "license": "MIT", "dependencies": { "@algolia/requester-common": "4.24.0", @@ -214,48 +182,40 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.13.0.tgz", - "integrity": "sha512-ldHTe+LVgC6L4Wr6doAQQ7Ku0jAdhaaPg1T+IHzmmiRZb2Uq5OsjW2yC65JifOmzPCiMkIZE2mGRpWgkn5ktlw==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights/node_modules/@algolia/client-common": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.13.0.tgz", - "integrity": "sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==", + "version": "5.20.2", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights/node_modules/@algolia/requester-browser-xhr": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.13.0.tgz", - "integrity": "sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights/node_modules/@algolia/requester-node-http": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.13.0.tgz", - "integrity": "sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" @@ -263,8 +223,6 @@ }, "node_modules/@algolia/client-personalization": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz", - "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==", "license": "MIT", "dependencies": { "@algolia/client-common": "4.24.0", @@ -273,48 +231,40 @@ } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.13.0.tgz", - "integrity": "sha512-pYo0jbLUtPDN1r341UHTaF2fgN5rbaZfDZqjPRKPM+FRlRmxFxqFQm1UUfpkSUWYGn7lECwDpbKYiKUf81MTwA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/client-common": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.13.0.tgz", - "integrity": "sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==", + "version": "5.20.2", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-browser-xhr": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.13.0.tgz", - "integrity": "sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-node-http": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.13.0.tgz", - "integrity": "sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" @@ -322,8 +272,6 @@ }, "node_modules/@algolia/client-search": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz", - "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==", "license": "MIT", "dependencies": { "@algolia/client-common": "4.24.0", @@ -333,53 +281,43 @@ }, "node_modules/@algolia/events": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.13.0.tgz", - "integrity": "sha512-fm5LEOe4FPDOc1D+M9stEs8hfcdmbdD+pt9og5shql6ueTZJANDbFoQhDOpiPJizR/ps1GwmjkWfUEywx3sV+Q==", + "version": "1.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion/node_modules/@algolia/client-common": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.13.0.tgz", - "integrity": "sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==", + "version": "5.20.2", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion/node_modules/@algolia/requester-browser-xhr": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.13.0.tgz", - "integrity": "sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion/node_modules/@algolia/requester-node-http": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.13.0.tgz", - "integrity": "sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" @@ -387,62 +325,50 @@ }, "node_modules/@algolia/logger-common": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz", - "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==", "license": "MIT" }, "node_modules/@algolia/logger-console": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz", - "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==", "license": "MIT", "dependencies": { "@algolia/logger-common": "4.24.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.13.0.tgz", - "integrity": "sha512-e8Hshlnm2G5fapyUgWTBwhJ22yXcnLtPC4LWZKx7KOvv35GcdoHtlUBX94I/sWCJLraUr65JvR8qOo3LXC43dg==", + "version": "1.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring/node_modules/@algolia/client-common": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.13.0.tgz", - "integrity": "sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==", + "version": "5.20.2", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring/node_modules/@algolia/requester-browser-xhr": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.13.0.tgz", - "integrity": "sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring/node_modules/@algolia/requester-node-http": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.13.0.tgz", - "integrity": "sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" @@ -450,8 +376,6 @@ }, "node_modules/@algolia/recommend": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz", - "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==", "license": "MIT", "dependencies": { "@algolia/cache-browser-local-storage": "4.24.0", @@ -469,8 +393,6 @@ }, "node_modules/@algolia/requester-browser-xhr": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz", - "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==", "license": "MIT", "dependencies": { "@algolia/requester-common": "4.24.0" @@ -478,26 +400,20 @@ }, "node_modules/@algolia/requester-common": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz", - "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==", "license": "MIT" }, "node_modules/@algolia/requester-fetch": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.13.0.tgz", - "integrity": "sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch/node_modules/@algolia/client-common": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.13.0.tgz", - "integrity": "sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==", + "version": "5.20.2", "license": "MIT", "engines": { "node": ">= 14.0.0" @@ -505,8 +421,6 @@ }, "node_modules/@algolia/requester-node-http": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz", - "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==", "license": "MIT", "dependencies": { "@algolia/requester-common": "4.24.0" @@ -514,8 +428,6 @@ }, "node_modules/@algolia/transporter": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz", - "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==", "license": "MIT", "dependencies": { "@algolia/cache-common": "4.24.0", @@ -525,8 +437,6 @@ }, "node_modules/@ampproject/remapping": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", - "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -538,8 +448,6 @@ }, "node_modules/@babel/code-frame": { "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", @@ -551,30 +459,27 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "version": "7.26.8", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", - "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", + "version": "7.26.8", "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", + "@babel/helpers": "^7.26.7", + "@babel/parser": "^7.26.8", + "@babel/template": "^7.26.8", + "@babel/traverse": "^7.26.8", + "@babel/types": "^7.26.8", + "@types/gensync": "^1.0.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -591,21 +496,17 @@ }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.26.8", "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.8", + "@babel/types": "^7.26.8", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -616,8 +517,6 @@ }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz", - "integrity": "sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==", "license": "MIT", "dependencies": { "@babel/types": "^7.25.9" @@ -626,26 +525,11 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz", - "integrity": "sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", - "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", + "version": "7.26.5", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.25.9", + "@babel/compat-data": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", @@ -657,8 +541,6 @@ }, "node_modules/@babel/helper-compilation-targets/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -666,8 +548,6 @@ }, "node_modules/@babel/helper-create-class-features-plugin": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", - "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -687,21 +567,17 @@ }, "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz", - "integrity": "sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==", + "version": "7.26.3", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.1.1", + "regexpu-core": "^6.2.0", "semver": "^6.3.1" }, "engines": { @@ -713,17 +589,13 @@ }, "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz", - "integrity": "sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==", + "version": "0.6.3", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -738,8 +610,6 @@ }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", - "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", @@ -751,8 +621,6 @@ }, "node_modules/@babel/helper-module-imports": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", - "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", @@ -764,8 +632,6 @@ }, "node_modules/@babel/helper-module-transforms": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", - "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", @@ -781,8 +647,6 @@ }, "node_modules/@babel/helper-optimise-call-expression": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", - "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "license": "MIT", "dependencies": { "@babel/types": "^7.25.9" @@ -792,9 +656,7 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", - "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", + "version": "7.26.5", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -802,8 +664,6 @@ }, "node_modules/@babel/helper-remap-async-to-generator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz", - "integrity": "sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -818,14 +678,12 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", - "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", + "version": "7.26.5", "license": "MIT", "dependencies": { "@babel/helper-member-expression-to-functions": "^7.25.9", "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -834,23 +692,8 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz", - "integrity": "sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", - "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.9", @@ -862,8 +705,6 @@ }, "node_modules/@babel/helper-string-parser": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -871,8 +712,6 @@ }, "node_modules/@babel/helper-validator-identifier": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -880,8 +719,6 @@ }, "node_modules/@babel/helper-validator-option": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", - "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -889,8 +726,6 @@ }, "node_modules/@babel/helper-wrap-function": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz", - "integrity": "sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==", "license": "MIT", "dependencies": { "@babel/template": "^7.25.9", @@ -902,13 +737,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", - "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz", + "integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==", "license": "MIT", "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.0" + "@babel/template": "^7.26.9", + "@babel/types": "^7.26.10" }, "engines": { "node": ">=6.9.0" @@ -916,8 +751,6 @@ }, "node_modules/@babel/highlight": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.9.tgz", - "integrity": "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -932,8 +765,6 @@ }, "node_modules/@babel/highlight/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "devOptional": true, "license": "MIT", "dependencies": { @@ -945,8 +776,6 @@ }, "node_modules/@babel/highlight/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -960,8 +789,6 @@ }, "node_modules/@babel/highlight/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -970,15 +797,11 @@ }, "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "devOptional": true, "license": "MIT" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "devOptional": true, "license": "MIT", "engines": { @@ -987,8 +810,6 @@ }, "node_modules/@babel/highlight/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "devOptional": true, "license": "MIT", "engines": { @@ -997,8 +818,6 @@ }, "node_modules/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "devOptional": true, "license": "MIT", "dependencies": { @@ -1009,12 +828,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz", + "integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.10" }, "bin": { "parser": "bin/babel-parser.js" @@ -1025,8 +844,6 @@ }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz", - "integrity": "sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1041,8 +858,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz", - "integrity": "sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1056,8 +871,6 @@ }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz", - "integrity": "sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1071,8 +884,6 @@ }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1088,8 +899,6 @@ }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz", - "integrity": "sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1104,8 +913,6 @@ }, "node_modules/@babel/plugin-proposal-private-property-in-object": { "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1116,8 +923,6 @@ }, "node_modules/@babel/plugin-syntax-dynamic-import": { "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" @@ -1128,8 +933,6 @@ }, "node_modules/@babel/plugin-syntax-import-assertions": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz", - "integrity": "sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1143,8 +946,6 @@ }, "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz", - "integrity": "sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1158,8 +959,6 @@ }, "node_modules/@babel/plugin-syntax-jsx": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz", - "integrity": "sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1173,8 +972,6 @@ }, "node_modules/@babel/plugin-syntax-typescript": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", - "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1188,8 +985,6 @@ }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", @@ -1204,8 +999,6 @@ }, "node_modules/@babel/plugin-transform-arrow-functions": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz", - "integrity": "sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1218,14 +1011,12 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz", - "integrity": "sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==", + "version": "7.26.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" + "@babel/traverse": "^7.26.8" }, "engines": { "node": ">=6.9.0" @@ -1236,8 +1027,6 @@ }, "node_modules/@babel/plugin-transform-async-to-generator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz", - "integrity": "sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", @@ -1252,12 +1041,10 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz", - "integrity": "sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==", + "version": "7.26.5", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1268,8 +1055,6 @@ }, "node_modules/@babel/plugin-transform-block-scoping": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz", - "integrity": "sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1283,8 +1068,6 @@ }, "node_modules/@babel/plugin-transform-class-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz", - "integrity": "sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", @@ -1299,8 +1082,6 @@ }, "node_modules/@babel/plugin-transform-class-static-block": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz", - "integrity": "sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", @@ -1315,8 +1096,6 @@ }, "node_modules/@babel/plugin-transform-classes": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz", - "integrity": "sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -1335,8 +1114,6 @@ }, "node_modules/@babel/plugin-transform-computed-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz", - "integrity": "sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1351,8 +1128,6 @@ }, "node_modules/@babel/plugin-transform-destructuring": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz", - "integrity": "sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1366,8 +1141,6 @@ }, "node_modules/@babel/plugin-transform-dotall-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz", - "integrity": "sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", @@ -1382,8 +1155,6 @@ }, "node_modules/@babel/plugin-transform-duplicate-keys": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz", - "integrity": "sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1397,8 +1168,6 @@ }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", @@ -1413,8 +1182,6 @@ }, "node_modules/@babel/plugin-transform-dynamic-import": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz", - "integrity": "sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1427,12 +1194,9 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz", - "integrity": "sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==", + "version": "7.26.3", "license": "MIT", "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.9", "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { @@ -1444,8 +1208,6 @@ }, "node_modules/@babel/plugin-transform-export-namespace-from": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz", - "integrity": "sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1459,8 +1221,6 @@ }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz", - "integrity": "sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1475,8 +1235,6 @@ }, "node_modules/@babel/plugin-transform-function-name": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz", - "integrity": "sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.25.9", @@ -1492,8 +1250,6 @@ }, "node_modules/@babel/plugin-transform-json-strings": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz", - "integrity": "sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1507,8 +1263,6 @@ }, "node_modules/@babel/plugin-transform-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz", - "integrity": "sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1522,8 +1276,6 @@ }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz", - "integrity": "sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1537,8 +1289,6 @@ }, "node_modules/@babel/plugin-transform-member-expression-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz", - "integrity": "sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1552,8 +1302,6 @@ }, "node_modules/@babel/plugin-transform-modules-amd": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz", - "integrity": "sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.25.9", @@ -1567,14 +1315,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz", - "integrity": "sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==", + "version": "7.26.3", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-simple-access": "^7.25.9" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1585,8 +1330,6 @@ }, "node_modules/@babel/plugin-transform-modules-systemjs": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz", - "integrity": "sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.25.9", @@ -1603,8 +1346,6 @@ }, "node_modules/@babel/plugin-transform-modules-umd": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz", - "integrity": "sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==", "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.25.9", @@ -1619,8 +1360,6 @@ }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz", - "integrity": "sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", @@ -1635,8 +1374,6 @@ }, "node_modules/@babel/plugin-transform-new-target": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz", - "integrity": "sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1649,12 +1386,10 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz", - "integrity": "sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==", + "version": "7.26.6", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -1665,8 +1400,6 @@ }, "node_modules/@babel/plugin-transform-numeric-separator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz", - "integrity": "sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1680,8 +1413,6 @@ }, "node_modules/@babel/plugin-transform-object-rest-spread": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz", - "integrity": "sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==", "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.25.9", @@ -1697,8 +1428,6 @@ }, "node_modules/@babel/plugin-transform-object-super": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz", - "integrity": "sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1713,8 +1442,6 @@ }, "node_modules/@babel/plugin-transform-optional-catch-binding": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz", - "integrity": "sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1728,8 +1455,6 @@ }, "node_modules/@babel/plugin-transform-optional-chaining": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz", - "integrity": "sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1744,8 +1469,6 @@ }, "node_modules/@babel/plugin-transform-parameters": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz", - "integrity": "sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1759,8 +1482,6 @@ }, "node_modules/@babel/plugin-transform-private-methods": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz", - "integrity": "sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==", "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.25.9", @@ -1775,8 +1496,6 @@ }, "node_modules/@babel/plugin-transform-private-property-in-object": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz", - "integrity": "sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -1792,8 +1511,6 @@ }, "node_modules/@babel/plugin-transform-property-literals": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz", - "integrity": "sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1807,8 +1524,6 @@ }, "node_modules/@babel/plugin-transform-react-constant-elements": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.25.9.tgz", - "integrity": "sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1822,8 +1537,6 @@ }, "node_modules/@babel/plugin-transform-react-display-name": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz", - "integrity": "sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1837,8 +1550,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz", - "integrity": "sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -1856,8 +1567,6 @@ }, "node_modules/@babel/plugin-transform-react-jsx-development": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz", - "integrity": "sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==", "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.25.9" @@ -1871,8 +1580,6 @@ }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz", - "integrity": "sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", @@ -1887,8 +1594,6 @@ }, "node_modules/@babel/plugin-transform-regenerator": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz", - "integrity": "sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1903,8 +1608,6 @@ }, "node_modules/@babel/plugin-transform-regexp-modifiers": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz", - "integrity": "sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", @@ -1919,8 +1622,6 @@ }, "node_modules/@babel/plugin-transform-reserved-words": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz", - "integrity": "sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1933,13 +1634,11 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz", - "integrity": "sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==", + "version": "7.26.8", "license": "MIT", "dependencies": { "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", @@ -1954,8 +1653,6 @@ }, "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -1963,8 +1660,6 @@ }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz", - "integrity": "sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -1978,8 +1673,6 @@ }, "node_modules/@babel/plugin-transform-spread": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz", - "integrity": "sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -1994,8 +1687,6 @@ }, "node_modules/@babel/plugin-transform-sticky-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz", - "integrity": "sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -2008,12 +1699,10 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz", - "integrity": "sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==", + "version": "7.26.8", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -2023,12 +1712,10 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz", - "integrity": "sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==", + "version": "7.26.7", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" + "@babel/helper-plugin-utils": "^7.26.5" }, "engines": { "node": ">=6.9.0" @@ -2038,14 +1725,12 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz", - "integrity": "sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==", + "version": "7.26.8", "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.25.9", "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", "@babel/plugin-syntax-typescript": "^7.25.9" }, @@ -2058,8 +1743,6 @@ }, "node_modules/@babel/plugin-transform-unicode-escapes": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz", - "integrity": "sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9" @@ -2073,8 +1756,6 @@ }, "node_modules/@babel/plugin-transform-unicode-property-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz", - "integrity": "sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", @@ -2089,8 +1770,6 @@ }, "node_modules/@babel/plugin-transform-unicode-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz", - "integrity": "sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", @@ -2105,8 +1784,6 @@ }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz", - "integrity": "sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==", "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.25.9", @@ -2120,14 +1797,12 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz", - "integrity": "sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==", + "version": "7.26.8", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", + "@babel/compat-data": "^7.26.8", + "@babel/helper-compilation-targets": "^7.26.5", + "@babel/helper-plugin-utils": "^7.26.5", "@babel/helper-validator-option": "^7.25.9", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", @@ -2139,9 +1814,9 @@ "@babel/plugin-syntax-import-attributes": "^7.26.0", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", + "@babel/plugin-transform-async-generator-functions": "^7.26.8", "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", + "@babel/plugin-transform-block-scoped-functions": "^7.26.5", "@babel/plugin-transform-block-scoping": "^7.25.9", "@babel/plugin-transform-class-properties": "^7.25.9", "@babel/plugin-transform-class-static-block": "^7.26.0", @@ -2152,7 +1827,7 @@ "@babel/plugin-transform-duplicate-keys": "^7.25.9", "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", + "@babel/plugin-transform-exponentiation-operator": "^7.26.3", "@babel/plugin-transform-export-namespace-from": "^7.25.9", "@babel/plugin-transform-for-of": "^7.25.9", "@babel/plugin-transform-function-name": "^7.25.9", @@ -2161,12 +1836,12 @@ "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", "@babel/plugin-transform-member-expression-literals": "^7.25.9", "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/plugin-transform-modules-systemjs": "^7.25.9", "@babel/plugin-transform-modules-umd": "^7.25.9", "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.26.6", "@babel/plugin-transform-numeric-separator": "^7.25.9", "@babel/plugin-transform-object-rest-spread": "^7.25.9", "@babel/plugin-transform-object-super": "^7.25.9", @@ -2182,17 +1857,17 @@ "@babel/plugin-transform-shorthand-properties": "^7.25.9", "@babel/plugin-transform-spread": "^7.25.9", "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typeof-symbol": "^7.26.7", "@babel/plugin-transform-unicode-escapes": "^7.25.9", "@babel/plugin-transform-unicode-property-regex": "^7.25.9", "@babel/plugin-transform-unicode-regex": "^7.25.9", "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", + "babel-plugin-polyfill-corejs3": "^0.11.0", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", + "core-js-compat": "^3.40.0", "semver": "^6.3.1" }, "engines": { @@ -2202,10 +1877,19 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.11.1", + "license": "MIT", + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.6.3", + "core-js-compat": "^3.40.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, "node_modules/@babel/preset-env/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2213,8 +1897,6 @@ }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", @@ -2226,9 +1908,7 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz", - "integrity": "sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==", + "version": "7.26.3", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -2247,8 +1927,6 @@ }, "node_modules/@babel/preset-typescript": { "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", - "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.25.9", @@ -2265,9 +1943,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", - "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", + "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" @@ -2277,9 +1955,7 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.0.tgz", - "integrity": "sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==", + "version": "7.26.7", "license": "MIT", "dependencies": { "core-js-pure": "^3.30.2", @@ -2290,30 +1966,28 @@ } }, "node_modules/@babel/template": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", - "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", + "version": "7.26.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz", + "integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" + "@babel/code-frame": "^7.26.2", + "@babel/parser": "^7.26.9", + "@babel/types": "^7.26.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.8", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.8", + "@babel/parser": "^7.26.8", + "@babel/template": "^7.26.8", + "@babel/types": "^7.26.8", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2322,9 +1996,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.10", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz", + "integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.25.9", @@ -2336,8 +2010,6 @@ }, "node_modules/@cmfcmf/docusaurus-search-local": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@cmfcmf/docusaurus-search-local/-/docusaurus-search-local-1.2.0.tgz", - "integrity": "sha512-Tc0GhRBsfZAiB+f6BoPB8YCQap6JzzcDyJ0dLSCSzWQ6wdWvDlTBrHc1YqR8q8AZ+STRszL5eZpZFi5dbTCdYg==", "license": "MIT", "dependencies": { "@algolia/autocomplete-js": "^1.8.2", @@ -2362,19 +2034,14 @@ }, "node_modules/@colors/colors": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" } }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", - "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", - "dev": true, + "node_modules/@csstools/cascade-layer-name-parser": { + "version": "2.0.4", "funding": [ { "type": "github", @@ -2387,17 +2054,98 @@ ], "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.4.1" + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.1", + "@csstools/css-calc": "^2.1.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", - "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", - "dev": true, + "version": "3.0.3", "funding": [ { "type": "github", @@ -2410,14 +2158,11 @@ ], "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", - "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", - "dev": true, + "version": "4.0.2", "funding": [ { "type": "github", @@ -2430,17 +2175,864 @@ ], "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.7.1", - "@csstools/css-tokenizer": "^2.4.1" + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "5.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "4.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-color-mix-function": { + "version": "3.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-content-alt-text": { + "version": "2.0.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-exponential-functions": { + "version": "2.0.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "4.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gamut-mapping": { + "version": "2.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-gradients-interpolation-method": { + "version": "5.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "4.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "4.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-initial": { + "version": "2.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "5.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-light-dark-function": { + "version": "2.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-float-and-clear": { + "version": "3.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overflow": { + "version": "2.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-overscroll-behavior": { + "version": "2.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-resize": { + "version": "3.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-logical-viewport-units": { + "version": "3.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-minmax": { + "version": "2.0.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": { + "version": "3.0.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "4.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "4.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "4.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "4.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-random-function": { + "version": "1.0.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-relative-color-syntax": { + "version": "3.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class": { + "version": "4.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@csstools/postcss-sign-functions": { + "version": "1.1.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "4.0.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "4.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/color-helpers": "^5.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "4.0.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-calc": "^2.1.1", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "4.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" } }, "node_modules/@csstools/selector-specificity": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", - "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", "dev": true, "funding": [ { @@ -2460,31 +3052,45 @@ "postcss-selector-parser": "^6.0.13" } }, + "node_modules/@csstools/utilities": { + "version": "2.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/@docsearch/css": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.7.0.tgz", - "integrity": "sha512-1OorbTwi1eeDmr0v5t+ckSRlt1zM5GHjm92iIl3kUu7im3GHuP+csf6E0WBg8pdXQczTWP9J9+o9n+Vg6DH5cQ==", + "version": "3.8.3", "license": "MIT" }, "node_modules/@docsearch/react": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.7.0.tgz", - "integrity": "sha512-8e6tdDfkYoxafEEPuX5eE1h9cTkLvhe4KgoFkO5JCddXSQONnN1FHcDZRI4r8894eMpbYq6rdJF0dVYh8ikwNQ==", + "version": "3.8.3", "license": "MIT", "dependencies": { - "@algolia/autocomplete-core": "1.17.6", - "@algolia/autocomplete-preset-algolia": "1.17.6", - "@docsearch/css": "3.7.0", - "algoliasearch": "^5.12.0" + "@algolia/autocomplete-core": "1.17.9", + "@algolia/autocomplete-preset-algolia": "1.17.9", + "@docsearch/css": "3.8.3", + "algoliasearch": "^5.14.2" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", @@ -2508,34 +3114,28 @@ } }, "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-core": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.6.tgz", - "integrity": "sha512-lkDoW4I7h2kKlIgf3pUt1LqvxyYKkVyiypoGLlUnhPSnCpmeOwudM6rNq6YYsCmdQtnDQoW5lUNNuj6ASg3qeg==", + "version": "1.17.9", "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.6", - "@algolia/autocomplete-shared": "1.17.6" + "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", + "@algolia/autocomplete-shared": "1.17.9" } }, "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.6.tgz", - "integrity": "sha512-17NnaacuFzSWVuZu4NKzVeaFIe9Abpw8w+/gjc7xhZFtqj+GadufzodIdchwiB2eM2cDdiR3icW7gbNTB3K2YA==", + "version": "1.17.9", "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.17.6" + "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.6.tgz", - "integrity": "sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA==", + "version": "1.17.9", "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.17.6" + "@algolia/autocomplete-shared": "1.17.9" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -2543,9 +3143,7 @@ } }, "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-shared": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.6.tgz", - "integrity": "sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw==", + "version": "1.17.9", "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -2553,126 +3151,108 @@ } }, "node_modules/@docsearch/react/node_modules/@algolia/client-analytics": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.13.0.tgz", - "integrity": "sha512-pS3qyXiWTwKnrt/jE79fqkNqZp7kjsFNlJDcBGkSWid74DNc6DmArlkvPqyLxnoaYGjUGACT6g56n7E3mVV2TA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/client-common": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.13.0.tgz", - "integrity": "sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==", + "version": "5.20.2", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/client-personalization": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.13.0.tgz", - "integrity": "sha512-RnCfOSN4OUJDuMNHFca2M8lY64Tmw0kQOZikge4TknTqHmlbKJb8IbJE7Rol79Z80W2Y+B1ydcjV7DPje4GMRA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/client-search": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.13.0.tgz", - "integrity": "sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/recommend": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.13.0.tgz", - "integrity": "sha512-53/wW96oaj1FKMzGdFcZ/epygfTppLDUvgI1thLkd475EtVZCH3ZZVUNCEvf1AtnNyH1RnItkFzX8ayWCpx2PQ==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/requester-browser-xhr": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.13.0.tgz", - "integrity": "sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/requester-node-http": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.13.0.tgz", - "integrity": "sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.13.0" + "@algolia/client-common": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/algoliasearch": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.13.0.tgz", - "integrity": "sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==", + "version": "5.20.2", "license": "MIT", "dependencies": { - "@algolia/client-abtesting": "5.13.0", - "@algolia/client-analytics": "5.13.0", - "@algolia/client-common": "5.13.0", - "@algolia/client-insights": "5.13.0", - "@algolia/client-personalization": "5.13.0", - "@algolia/client-query-suggestions": "5.13.0", - "@algolia/client-search": "5.13.0", - "@algolia/ingestion": "1.13.0", - "@algolia/monitoring": "1.13.0", - "@algolia/recommend": "5.13.0", - "@algolia/requester-browser-xhr": "5.13.0", - "@algolia/requester-fetch": "5.13.0", - "@algolia/requester-node-http": "5.13.0" + "@algolia/client-abtesting": "5.20.2", + "@algolia/client-analytics": "5.20.2", + "@algolia/client-common": "5.20.2", + "@algolia/client-insights": "5.20.2", + "@algolia/client-personalization": "5.20.2", + "@algolia/client-query-suggestions": "5.20.2", + "@algolia/client-search": "5.20.2", + "@algolia/ingestion": "1.20.2", + "@algolia/monitoring": "1.20.2", + "@algolia/recommend": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/babel": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.6.1.tgz", - "integrity": "sha512-JcKaunW8Ml2nTnfnvFc55T00Y+aCpNWnf1KY/gG+wWxHYDH0IdXOOz+k6NAlEAerW8+VYLfUqRIqHZ7N/DVXvQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", @@ -2685,8 +3265,8 @@ "@babel/runtime": "^7.25.9", "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.6.1", - "@docusaurus/utils": "3.6.1", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -2696,18 +3276,15 @@ } }, "node_modules/@docusaurus/bundler": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.6.1.tgz", - "integrity": "sha512-vHSEx8Ku9x/gfIC6k4xb8J2nTxagLia0KvZkPZhxfkD1+n8i+Dj4BZPWTmv+kCA17RbgAvECG0XRZ0/ZEspQBQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.6.1", - "@docusaurus/cssnano-preset": "3.6.1", - "@docusaurus/logger": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils": "3.6.1", - "autoprefixer": "^10.4.14", + "@docusaurus/babel": "3.7.0", + "@docusaurus/cssnano-preset": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", "babel-loader": "^9.2.1", "clean-css": "^5.3.2", "copy-webpack-plugin": "^11.0.0", @@ -2720,6 +3297,7 @@ "null-loader": "^4.0.1", "postcss": "^8.4.26", "postcss-loader": "^7.3.3", + "postcss-preset-env": "^10.1.0", "react-dev-utils": "^12.0.1", "terser-webpack-plugin": "^5.3.9", "tslib": "^2.6.0", @@ -2740,18 +3318,16 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.6.1.tgz", - "integrity": "sha512-cDKxPihiM2z7G+4QtpTczS7uxNfNG6naSqM65OmAJET0CFRHbc9mDlLFtQF0lsVES91SHqfcGaaLZmi2FjdwWA==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/babel": "3.6.1", - "@docusaurus/bundler": "3.6.1", - "@docusaurus/logger": "3.6.1", - "@docusaurus/mdx-loader": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-common": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/babel": "3.7.0", + "@docusaurus/bundler": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -2772,13 +3348,12 @@ "p-map": "^4.0.0", "prompts": "^2.4.2", "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", "react-router": "^5.3.4", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.4", - "rtl-detect": "^1.0.4", "semver": "^7.5.4", "serve-handler": "^6.1.6", "shelljs": "^0.8.5", @@ -2797,14 +3372,12 @@ }, "peerDependencies": { "@mdx-js/react": "^3.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.6.1.tgz", - "integrity": "sha512-ZxYUmNeyQHW2w4/PJ7d07jQDuxzmKr9uPAQ6IVe5dTkeIeV0mDBB3jOLeJkNoI42Ru9JKEqQ9aVDtM9ct6QHnw==", + "version": "3.7.0", "license": "MIT", "dependencies": { "cssnano-preset-advanced": "^6.1.2", @@ -2817,13 +3390,11 @@ } }, "node_modules/@docusaurus/faster": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/faster/-/faster-3.6.1.tgz", - "integrity": "sha512-W3a9m7Q/fEeOpOw9/XktLCHRtp1sV2AdZWMCjH3kP1jY1TDyLFFiHJ0+1uwVpOw4/oPJqZSTRKP+IdW4+65NgQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.6.1", - "@rspack/core": "^1.0.14", + "@docusaurus/types": "3.7.0", + "@rspack/core": "1.2.0-alpha.0", "@swc/core": "^1.7.39", "@swc/html": "^1.7.39", "browserslist": "^4.24.2", @@ -2834,12 +3405,60 @@ }, "engines": { "node": ">=18.0" + }, + "peerDependencies": { + "@docusaurus/types": "*" + } + }, + "node_modules/@docusaurus/faster/node_modules/@rspack/binding": { + "version": "1.2.0-alpha.0", + "license": "MIT", + "optionalDependencies": { + "@rspack/binding-darwin-arm64": "1.2.0-alpha.0", + "@rspack/binding-darwin-x64": "1.2.0-alpha.0", + "@rspack/binding-linux-arm64-gnu": "1.2.0-alpha.0", + "@rspack/binding-linux-arm64-musl": "1.2.0-alpha.0", + "@rspack/binding-linux-x64-gnu": "1.2.0-alpha.0", + "@rspack/binding-linux-x64-musl": "1.2.0-alpha.0", + "@rspack/binding-win32-arm64-msvc": "1.2.0-alpha.0", + "@rspack/binding-win32-ia32-msvc": "1.2.0-alpha.0", + "@rspack/binding-win32-x64-msvc": "1.2.0-alpha.0" + } + }, + "node_modules/@docusaurus/faster/node_modules/@rspack/binding-win32-x64-msvc": { + "version": "1.2.0-alpha.0", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@docusaurus/faster/node_modules/@rspack/core": { + "version": "1.2.0-alpha.0", + "license": "MIT", + "dependencies": { + "@module-federation/runtime-tools": "0.8.4", + "@rspack/binding": "1.2.0-alpha.0", + "@rspack/lite-tapable": "1.0.1", + "caniuse-lite": "^1.0.30001616" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.1" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } } }, "node_modules/@docusaurus/logger": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.6.1.tgz", - "integrity": "sha512-OvetI/nnOMBSqCkUzKAQhnIjhxduECK4qTu3tq/8/h/qqvLsvKURojm04WPE54L+Uy+UXMas0hnbBJd8zDlEOw==", + "version": "3.7.0", "license": "MIT", "dependencies": { "chalk": "^4.1.2", @@ -2850,14 +3469,12 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.6.1.tgz", - "integrity": "sha512-KPIsYi0S3X3/rNrW3V1fgOu5t6ahYWc31zTHHod8pacFxdmk9Uf6uuw+Jd6Cly1ilgal+41Ku+s0gmMuqKqiqg==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -2884,22 +3501,20 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.6.1.tgz", - "integrity": "sha512-J+q1jgm7TnEfVIUZImSFeLA1rghb6nwtoB9siHdcgKpDqFJ9/S7xhQL2aEKE7iZMZYzpu+2F390E9A7GkdEJNA==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.6.1", + "@docusaurus/types": "3.7.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "*", + "react-helmet-async": "npm:@slorber/react-helmet-async@*", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, "peerDependencies": { @@ -2908,19 +3523,17 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.6.1.tgz", - "integrity": "sha512-FUmsn3xg/XD/K/4FQd8XHrs92aQdZO5LUtpHnRvO1/6DY87SMz6B6ERAN9IGQQld//M2/LVTHkZy8oVhQZQHIQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/logger": "3.6.1", - "@docusaurus/mdx-loader": "3.6.1", - "@docusaurus/theme-common": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-common": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "cheerio": "1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", @@ -2937,65 +3550,23 @@ }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/@docusaurus/plugin-content-blog/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.6.1.tgz", - "integrity": "sha512-Uq8kyn5DYCDmkUlB9sWChhWghS4lUFNiQU+RXcAXJ3qCVXsBpPsh6RF+npQG1N+j4wAbjydM1iLLJJzp+x3eMQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/logger": "3.6.1", - "@docusaurus/mdx-loader": "3.6.1", - "@docusaurus/module-type-aliases": "3.6.1", - "@docusaurus/theme-common": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-common": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -3009,21 +3580,19 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.6.1.tgz", - "integrity": "sha512-TZtL+2zq20gqGalzoIT2rEF1T4YCZ26jTvlCJXs78+incIajfdHtmdOq7rQW0oV7oqTjpGllbp788nY/vY9jgw==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/mdx-loader": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -3032,19 +3601,17 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.6.1.tgz", - "integrity": "sha512-DeKPZtoVExDSYCbzoz7y5Dhc6+YPqRWfVGwEEUyKopSyQYefp0OV8hvASmbJCn2WyThRgspOUhog3FSEhz+agw==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", "fs-extra": "^11.1.1", "react-json-view-lite": "^1.2.0", "tslib": "^2.6.0" @@ -3053,38 +3620,34 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.6.1.tgz", - "integrity": "sha512-ZEoERiDHxSfhaEeT35ukQ892NzGHWiUvfxUsnPiRuGEhMoQlxMSp60shBuSZ1sUKuZlndoEl5qAXJg09Wls/Sg==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "tslib": "^2.6.0" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.6.1.tgz", - "integrity": "sha512-u/E9vXUsZxYaV6Brvfee8NiH/iR0cMml9P/ifz4EpH/Jfxdbw8rbCT0Nm/h7EFgEY48Uqkl5huSbIvFB9n8aTQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -3092,41 +3655,37 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.6.1.tgz", - "integrity": "sha512-By+NKkGYV8tSo8/RyS1OXikOtqsko5jJZ/uioJfBjsBGgSbiMJ+Y/HogFBke0mgSvf7NPGKZTbYm5+FJ8YUtPQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "tslib": "^2.6.0" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.6.1.tgz", - "integrity": "sha512-i8R/GTKew4Cufb+7YQTwfPcNOhKTJzZ1VZ5OqQwI9c3pZK2TltQyhqKDVN94KCTbSSKvOYYytYfRAB2uPnH1/A==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/logger": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-common": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -3135,57 +3694,75 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.6.1.tgz", - "integrity": "sha512-b90Y1XRH9e+oa/E3NmiFEFOwgYUd+knFcZUy81nM3FJs038WbEA0T55NQsuPW0s7nOsCShQ7dVFyKxV+Wp31Nw==", + "node_modules/@docusaurus/plugin-svgr": { + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/plugin-content-blog": "3.6.1", - "@docusaurus/plugin-content-docs": "3.6.1", - "@docusaurus/plugin-content-pages": "3.6.1", - "@docusaurus/plugin-debug": "3.6.1", - "@docusaurus/plugin-google-analytics": "3.6.1", - "@docusaurus/plugin-google-gtag": "3.6.1", - "@docusaurus/plugin-google-tag-manager": "3.6.1", - "@docusaurus/plugin-sitemap": "3.6.1", - "@docusaurus/theme-classic": "3.6.1", - "@docusaurus/theme-common": "3.6.1", - "@docusaurus/theme-search-algolia": "3.6.1", - "@docusaurus/types": "3.6.1" + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "@svgr/core": "8.1.0", + "@svgr/webpack": "^8.1.0", + "tslib": "^2.6.0", + "webpack": "^5.88.1" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "3.7.0", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/plugin-content-blog": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/plugin-content-pages": "3.7.0", + "@docusaurus/plugin-debug": "3.7.0", + "@docusaurus/plugin-google-analytics": "3.7.0", + "@docusaurus/plugin-google-gtag": "3.7.0", + "@docusaurus/plugin-google-tag-manager": "3.7.0", + "@docusaurus/plugin-sitemap": "3.7.0", + "@docusaurus/plugin-svgr": "3.7.0", + "@docusaurus/theme-classic": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-search-algolia": "3.7.0", + "@docusaurus/types": "3.7.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.6.1.tgz", - "integrity": "sha512-5lVUmIXk7zp+n9Ki2lYWrmhbd6mssOlKCnnDJvY4QDi3EgjRisIu5g4yKXoWTIbiqE7m7q/dS9cbeShEtfkKng==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.1", - "@docusaurus/logger": "3.6.1", - "@docusaurus/mdx-loader": "3.6.1", - "@docusaurus/module-type-aliases": "3.6.1", - "@docusaurus/plugin-content-blog": "3.6.1", - "@docusaurus/plugin-content-docs": "3.6.1", - "@docusaurus/plugin-content-pages": "3.6.1", - "@docusaurus/theme-common": "3.6.1", - "@docusaurus/theme-translations": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-common": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/plugin-content-blog": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/plugin-content-pages": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-translations": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -3204,29 +3781,25 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-classic/node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@docusaurus/theme-common": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.6.1.tgz", - "integrity": "sha512-18iEYNpMvarGfq9gVRpGowSZD24vZ39Iz4acqaj64180i54V9el8tVnhNr/wRvrUm1FY30A1NHLqnMnDz4rYEQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/mdx-loader": "3.6.1", - "@docusaurus/module-type-aliases": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-common": "3.6.1", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3241,35 +3814,31 @@ }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-common/node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.6.1.tgz", - "integrity": "sha512-BjmuiFRpQP1WEm8Mzu1Bb0Wdas6G65VHXDDNr7XTKgbstxalE6vuxt0ioXTDFS2YVep5748aVhKvnxR9gm2Liw==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.6.1", - "@docusaurus/logger": "3.6.1", - "@docusaurus/plugin-content-docs": "3.6.1", - "@docusaurus/theme-common": "3.6.1", - "@docusaurus/theme-translations": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-validation": "3.6.1", - "algoliasearch": "^4.18.0", - "algoliasearch-helper": "^3.13.3", + "@docsearch/react": "^3.8.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-translations": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "algoliasearch": "^5.17.1", + "algoliasearch-helper": "^3.22.6", "clsx": "^2.0.0", "eta": "^2.2.0", "fs-extra": "^11.1.1", @@ -3281,23 +3850,120 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-analytics": { + "version": "5.20.2", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-common": { + "version": "5.20.2", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-personalization": { + "version": "5.20.2", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-search": { + "version": "5.20.2", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/recommend": { + "version": "5.20.2", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/requester-browser-xhr": { + "version": "5.20.2", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.20.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/requester-node-http": { + "version": "5.20.2", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.20.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/algoliasearch": { + "version": "5.20.2", + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.20.2", + "@algolia/client-analytics": "5.20.2", + "@algolia/client-common": "5.20.2", + "@algolia/client-insights": "5.20.2", + "@algolia/client-personalization": "5.20.2", + "@algolia/client-query-suggestions": "5.20.2", + "@algolia/client-search": "5.20.2", + "@algolia/ingestion": "1.20.2", + "@algolia/monitoring": "1.20.2", + "@algolia/recommend": "5.20.2", + "@algolia/requester-browser-xhr": "5.20.2", + "@algolia/requester-fetch": "5.20.2", + "@algolia/requester-node-http": "5.20.2" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@docusaurus/theme-search-algolia/node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.6.1.tgz", - "integrity": "sha512-bNm5G6sueUezvyhsBegA1wwM38yW0BnqpZTE9KHO2yKnkERNMaV5x/yPJ/DNCOHjJtCcJ5Uz55g2AS75Go31xA==", + "version": "3.7.0", "license": "MIT", "dependencies": { "fs-extra": "^11.1.1", @@ -3308,9 +3974,7 @@ } }, "node_modules/@docusaurus/types": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.6.1.tgz", - "integrity": "sha512-hCB1hj9DYutVYBisnPNobz9SzEmCcf1EetJv09O49Cov3BqOkm+vnnjB3d957YJMtpLGQoKBeN/FF1DZ830JwQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -3318,20 +3982,18 @@ "@types/react": "*", "commander": "^5.1.0", "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "utility-types": "^3.10.0", "webpack": "^5.95.0", "webpack-merge": "^5.9.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/types/node_modules/webpack-merge": { "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", @@ -3343,15 +4005,12 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.6.1.tgz", - "integrity": "sha512-nS3WCvepwrnBEgSG5vQu40XG95lC9Jeh/odV5u5IhU1eQFEGDst9xBi6IK5yZdsGvbuaXBZLZtOqWYtuuFa/rQ==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.6.1", - "@docusaurus/types": "3.6.1", - "@docusaurus/utils-common": "3.6.1", - "@svgr/webpack": "^8.1.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", @@ -3375,12 +4034,10 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.6.1.tgz", - "integrity": "sha512-LX1qiTiC0aS8c92uZ+Wj2iNCNJyYZJIKY8/nZDKNMBfo759VYVS3RX3fKP3DznB+16sYp7++MyCz/T6fOGaRfw==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.6.1", + "@docusaurus/types": "3.7.0", "tslib": "^2.6.0" }, "engines": { @@ -3388,14 +4045,12 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.6.1.tgz", - "integrity": "sha512-+iMd6zRl5cJQm7nUP+7pSO/oAXsN79eHO34ME7l2YJt4GEAr70l5kkD58u2jEPpp+wSXT70c7x2A2lzJI1E8jw==", + "version": "3.7.0", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.6.1", - "@docusaurus/utils": "3.6.1", - "@docusaurus/utils-common": "3.6.1", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -3408,8 +4063,6 @@ }, "node_modules/@easyops-cn/autocomplete.js": { "version": "0.38.1", - "resolved": "https://registry.npmjs.org/@easyops-cn/autocomplete.js/-/autocomplete.js-0.38.1.tgz", - "integrity": "sha512-drg76jS6syilOUmVNkyo1c7ZEBPcPuK+aJA7AksM5ZIIbV57DMHCywiCr+uHyv8BE5jUTU98j/H7gVrkHrWW3Q==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -3417,536 +4070,97 @@ } }, "node_modules/@easyops-cn/docusaurus-search-local": { - "version": "0.23.3", - "resolved": "https://registry.npmjs.org/@easyops-cn/docusaurus-search-local/-/docusaurus-search-local-0.23.3.tgz", - "integrity": "sha512-eJgtDtTtOWa3XJirDCGQh2Bcai04UG+5ISe5XhTFv2f80fxHsmQDE2YDj62xLem6Md8hI3VjKuJXOTlUgQKKtw==", + "version": "0.48.5", "license": "MIT", "dependencies": { - "@docusaurus/utils": "^2.0.0-beta.4", - "@docusaurus/utils-validation": "^2.0.0-beta.4", + "@docusaurus/plugin-content-docs": "^2 || ^3", + "@docusaurus/theme-translations": "^2 || ^3", + "@docusaurus/utils": "^2 || ^3", + "@docusaurus/utils-common": "^2 || ^3", + "@docusaurus/utils-validation": "^2 || ^3", "@easyops-cn/autocomplete.js": "^0.38.1", "@node-rs/jieba": "^1.6.0", - "cheerio": "^1.0.0-rc.3", - "clsx": "^1.1.1", + "cheerio": "^1.0.0", + "clsx": "^2.1.1", + "comlink": "^4.4.2", "debug": "^4.2.0", - "fs-extra": "^9.0.1", + "fs-extra": "^10.0.0", "klaw-sync": "^6.0.0", "lunr": "^2.3.9", "lunr-languages": "^1.4.0", "mark.js": "^8.11.1", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@docusaurus/logger": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.4.3.tgz", - "integrity": "sha512-Zxws7r3yLufk9xM1zq9ged0YHs65mlRmtsobnFkdZTxWXdTYlWWLWdKyNKAsVC+D7zg+pv2fGbyabdOnyZOM3w==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", "tslib": "^2.4.0" }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@docusaurus/utils": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.4.3.tgz", - "integrity": "sha512-fKcXsjrD86Smxv8Pt0TBFqYieZZCPh4cbf9oszUq/AMhZn3ujwpKaVYZACPX8mmjtYx0JOgNx52CREBfiGQB4A==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "2.4.3", - "@svgr/webpack": "^6.2.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@docusaurus/utils-validation": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.4.3.tgz", - "integrity": "sha512-G2+Vt3WR5E/9drAobP+hhZQMaswRwDlp6qOMi7o7ZypB+VO7N//DZWhZEwhcRGepMDJGQEwtPv7UxtYwPL9PBw==", - "license": "MIT", - "dependencies": { - "@docusaurus/logger": "2.4.3", - "@docusaurus/utils": "2.4.3", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@docusaurus/utils/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "license": "MIT", "engines": { "node": ">=12" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@docusaurus/theme-common": "^2 || ^3", + "react": "^16.14.0 || ^17 || ^18 || ^19", + "react-dom": "^16.14.0 || 17 || ^18 || ^19" } }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "node_modules/@easyops-cn/docusaurus-search-local/node_modules/cheerio": { + "version": "1.0.0", "license": "MIT", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "encoding-sniffer": "^0.2.0", + "htmlparser2": "^9.1.0", + "parse5": "^7.1.2", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^6.19.5", + "whatwg-mimetype": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=18.17" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" } }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "node_modules/@easyops-cn/docusaurus-search-local/node_modules/clsx": { + "version": "2.1.1", "license": "MIT", "engines": { - "node": ">= 10" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "license": "MIT", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "node": ">=6" } }, "node_modules/@easyops-cn/docusaurus-search-local/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.1.0", "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "license": "CC0-1.0" - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@easyops-cn/docusaurus-search-local/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "node_modules/@easyops-cn/docusaurus-search-local/node_modules/htmlparser2": { + "version": "9.1.0", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], "license": "MIT", "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@emnapi/core": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", - "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.0.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", - "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", - "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" } }, "node_modules/@eslint/eslintrc": { "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3966,8 +4180,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3976,8 +4188,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -3992,8 +4202,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "devOptional": true, "license": "MIT", "dependencies": { @@ -4006,8 +4214,6 @@ }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "devOptional": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -4019,14 +4225,10 @@ }, "node_modules/@hapi/hoek": { "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", "license": "BSD-3-Clause" }, "node_modules/@hapi/topo": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -4034,9 +4236,6 @@ }, "node_modules/@humanwhocodes/config-array": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "deprecated": "Use @eslint/config-array instead", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -4050,16 +4249,11 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "deprecated": "Use @eslint/object-schema instead", "devOptional": true, "license": "BSD-3-Clause" }, "node_modules/@jest/schemas": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "license": "MIT", "dependencies": { "@sinclair/typebox": "^0.27.8" @@ -4070,8 +4264,6 @@ }, "node_modules/@jest/types": { "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", - "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", @@ -4086,9 +4278,7 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -4101,8 +4291,6 @@ }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -4110,8 +4298,6 @@ }, "node_modules/@jridgewell/set-array": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -4119,8 +4305,6 @@ }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -4129,14 +4313,10 @@ }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -4145,14 +4325,10 @@ }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", - "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "license": "MIT" }, "node_modules/@mdx-js/mdx": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", - "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -4187,8 +4363,6 @@ }, "node_modules/@mdx-js/react": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", - "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", "license": "MIT", "dependencies": { "@types/mdx": "^2.0.0" @@ -4202,57 +4376,43 @@ "react": ">=16" } }, + "node_modules/@module-federation/error-codes": { + "version": "0.8.4", + "license": "MIT" + }, "node_modules/@module-federation/runtime": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.5.1.tgz", - "integrity": "sha512-xgiMUWwGLWDrvZc9JibuEbXIbhXg6z2oUkemogSvQ4LKvrl/n0kbqP1Blk669mXzyWbqtSp6PpvNdwaE1aN5xQ==", + "version": "0.8.4", "license": "MIT", "dependencies": { - "@module-federation/sdk": "0.5.1" + "@module-federation/error-codes": "0.8.4", + "@module-federation/sdk": "0.8.4" } }, "node_modules/@module-federation/runtime-tools": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.5.1.tgz", - "integrity": "sha512-nfBedkoZ3/SWyO0hnmaxuz0R0iGPSikHZOAZ0N/dVSQaIzlffUo35B5nlC2wgWIc0JdMZfkwkjZRrnuuDIJbzg==", + "version": "0.8.4", "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.5.1", - "@module-federation/webpack-bundler-runtime": "0.5.1" + "@module-federation/runtime": "0.8.4", + "@module-federation/webpack-bundler-runtime": "0.8.4" } }, "node_modules/@module-federation/sdk": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.5.1.tgz", - "integrity": "sha512-exvchtjNURJJkpqjQ3/opdbfeT2wPKvrbnGnyRkrwW5o3FH1LaST1tkiNviT6OXTexGaVc2DahbdniQHVtQ7pA==", - "license": "MIT" - }, - "node_modules/@module-federation/webpack-bundler-runtime": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.5.1.tgz", - "integrity": "sha512-mMhRFH0k2VjwHt3Jol9JkUsmI/4XlrAoBG3E0o7HoyoPYv1UFOWyqAflfANcUPgbYpvqmyLzDcO+3IT36LXnrA==", + "version": "0.8.4", "license": "MIT", "dependencies": { - "@module-federation/runtime": "0.5.1", - "@module-federation/sdk": "0.5.1" + "isomorphic-rslog": "0.0.6" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.5.tgz", - "integrity": "sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==", + "node_modules/@module-federation/webpack-bundler-runtime": { + "version": "0.8.4", "license": "MIT", - "optional": true, "dependencies": { - "@emnapi/core": "^1.1.0", - "@emnapi/runtime": "^1.1.0", - "@tybys/wasm-util": "^0.9.0" + "@module-federation/runtime": "0.8.4", + "@module-federation/sdk": "0.8.4" } }, "node_modules/@node-rs/jieba": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba/-/jieba-1.10.4.tgz", - "integrity": "sha512-GvDgi8MnBiyWd6tksojej8anIx18244NmIOc1ovEw8WKNUejcccLfyu8vj66LWSuoZuKILVtNsOy4jvg3aoxIw==", "license": "MIT", "engines": { "node": ">= 10" @@ -4278,218 +4438,8 @@ "@node-rs/jieba-win32-x64-msvc": "1.10.4" } }, - "node_modules/@node-rs/jieba-android-arm-eabi": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm-eabi/-/jieba-android-arm-eabi-1.10.4.tgz", - "integrity": "sha512-MhyvW5N3Fwcp385d0rxbCWH42kqDBatQTyP8XbnYbju2+0BO/eTeCCLYj7Agws4pwxn2LtdldXRSKavT7WdzNA==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-android-arm64": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-android-arm64/-/jieba-android-arm64-1.10.4.tgz", - "integrity": "sha512-XyDwq5+rQ+Tk55A+FGi6PtJbzf974oqnpyCcCPzwU3QVXJCa2Rr4Lci+fx8oOpU4plT3GuD+chXMYLsXipMgJA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-darwin-arm64": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-arm64/-/jieba-darwin-arm64-1.10.4.tgz", - "integrity": "sha512-G++RYEJ2jo0rxF9626KUy90wp06TRUjAsvY/BrIzEOX/ingQYV/HjwQzNPRR1P1o32a6/U8RGo7zEBhfdybL6w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-darwin-x64": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-darwin-x64/-/jieba-darwin-x64-1.10.4.tgz", - "integrity": "sha512-MmDNeOb2TXIZCPyWCi2upQnZpPjAxw5ZGEj6R8kNsPXVFALHIKMa6ZZ15LCOkSTsKXVC17j2t4h+hSuyYb6qfQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-freebsd-x64": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-freebsd-x64/-/jieba-freebsd-x64-1.10.4.tgz", - "integrity": "sha512-/x7aVQ8nqUWhpXU92RZqd333cq639i/olNpd9Z5hdlyyV5/B65LLy+Je2B2bfs62PVVm5QXRpeBcZqaHelp/bg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-linux-arm-gnueabihf": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm-gnueabihf/-/jieba-linux-arm-gnueabihf-1.10.4.tgz", - "integrity": "sha512-crd2M35oJBRLkoESs0O6QO3BBbhpv+tqXuKsqhIG94B1d02RVxtRIvSDwO33QurxqSdvN9IeSnVpHbDGkuXm3g==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-linux-arm64-gnu": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-gnu/-/jieba-linux-arm64-gnu-1.10.4.tgz", - "integrity": "sha512-omIzNX1psUzPcsdnUhGU6oHeOaTCuCjUgOA/v/DGkvWC1jLcnfXe4vdYbtXMh4XOCuIgS1UCcvZEc8vQLXFbXQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-linux-arm64-musl": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-arm64-musl/-/jieba-linux-arm64-musl-1.10.4.tgz", - "integrity": "sha512-Y/tiJ1+HeS5nnmLbZOE+66LbsPOHZ/PUckAYVeLlQfpygLEpLYdlh0aPpS5uiaWMjAXYZYdFkpZHhxDmSLpwpw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-linux-x64-gnu": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-gnu/-/jieba-linux-x64-gnu-1.10.4.tgz", - "integrity": "sha512-WZO8ykRJpWGE9MHuZpy1lu3nJluPoeB+fIJJn5CWZ9YTVhNDWoCF4i/7nxz1ntulINYGQ8VVuCU9LD86Mek97g==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-linux-x64-musl": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-linux-x64-musl/-/jieba-linux-x64-musl-1.10.4.tgz", - "integrity": "sha512-uBBD4S1rGKcgCyAk6VCKatEVQb6EDD5I40v/DxODi5CuZVCANi9m5oee/MQbAoaX7RydA2f0OSCE9/tcwXEwUg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-wasm32-wasi": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-wasm32-wasi/-/jieba-wasm32-wasi-1.10.4.tgz", - "integrity": "sha512-Y2umiKHjuIJy0uulNDz9SDYHdfq5Hmy7jY5nORO99B4pySKkcrMjpeVrmWXJLIsEKLJwcCXHxz8tjwU5/uhz0A==", - "cpu": [ - "wasm32" - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@napi-rs/wasm-runtime": "^0.2.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@node-rs/jieba-win32-arm64-msvc": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-arm64-msvc/-/jieba-win32-arm64-msvc-1.10.4.tgz", - "integrity": "sha512-nwMtViFm4hjqhz1it/juQnxpXgqlGltCuWJ02bw70YUDMDlbyTy3grCJPpQQpueeETcALUnTxda8pZuVrLRcBA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@node-rs/jieba-win32-ia32-msvc": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-ia32-msvc/-/jieba-win32-ia32-msvc-1.10.4.tgz", - "integrity": "sha512-DCAvLx7Z+W4z5oKS+7vUowAJr0uw9JBw8x1Y23Xs/xMA4Em+OOSiaF5/tCJqZUCJ8uC4QeImmgDFiBqGNwxlyA==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, "node_modules/@node-rs/jieba-win32-x64-msvc": { "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@node-rs/jieba-win32-x64-msvc/-/jieba-win32-x64-msvc-1.10.4.tgz", - "integrity": "sha512-+sqemSfS1jjb+Tt7InNbNzrRh1Ua3vProVvC4BZRPg010/leCbGFFiQHpzcPRfpxAXZrzG5Y0YBTsPzN/I4yHQ==", "cpu": [ "x64" ], @@ -4504,8 +4454,6 @@ }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", @@ -4517,8 +4465,6 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "license": "MIT", "engines": { "node": ">= 8" @@ -4526,8 +4472,6 @@ }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", @@ -4539,8 +4483,6 @@ }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", - "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", "license": "MIT", "engines": { "node": ">=12.22.0" @@ -4548,8 +4490,6 @@ }, "node_modules/@pnpm/network.ca-file": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", - "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", "license": "MIT", "dependencies": { "graceful-fs": "4.2.10" @@ -4560,14 +4500,10 @@ }, "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "license": "ISC" }, "node_modules/@pnpm/npm-conf": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", @@ -4580,135 +4516,27 @@ }, "node_modules/@polka/url": { "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", "license": "MIT" }, "node_modules/@rspack/binding": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.1.0.tgz", - "integrity": "sha512-zLduWacrw/bBYiFvhjN70f+AJxXnTzevywXp54vso8d0Nz7z4KIycdz/Ua5AGRUkG2ZuQw6waypN5pXf48EBcA==", + "version": "1.2.3", "license": "MIT", + "optional": true, + "peer": true, "optionalDependencies": { - "@rspack/binding-darwin-arm64": "1.1.0", - "@rspack/binding-darwin-x64": "1.1.0", - "@rspack/binding-linux-arm64-gnu": "1.1.0", - "@rspack/binding-linux-arm64-musl": "1.1.0", - "@rspack/binding-linux-x64-gnu": "1.1.0", - "@rspack/binding-linux-x64-musl": "1.1.0", - "@rspack/binding-win32-arm64-msvc": "1.1.0", - "@rspack/binding-win32-ia32-msvc": "1.1.0", - "@rspack/binding-win32-x64-msvc": "1.1.0" + "@rspack/binding-darwin-arm64": "1.2.3", + "@rspack/binding-darwin-x64": "1.2.3", + "@rspack/binding-linux-arm64-gnu": "1.2.3", + "@rspack/binding-linux-arm64-musl": "1.2.3", + "@rspack/binding-linux-x64-gnu": "1.2.3", + "@rspack/binding-linux-x64-musl": "1.2.3", + "@rspack/binding-win32-arm64-msvc": "1.2.3", + "@rspack/binding-win32-ia32-msvc": "1.2.3", + "@rspack/binding-win32-x64-msvc": "1.2.3" } }, - "node_modules/@rspack/binding-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-02YmzmtKMNHCSMzVT5sgbJuPDn+HunkrtWq0D95Fh9sGKYap9cs0JOpzTfyAL3KXJ9JzVfOAZA3VgVQOBaQNWQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rspack/binding-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.1.0.tgz", - "integrity": "sha512-HtBh8p6hml7BWNtZaqWFtGbOFP/tvFDn1uPWmA3R32WTILUXNRWXIsLDY95U3Z2U1Gt3SL58SOpJjXlFIb6wZg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rspack/binding-linux-arm64-gnu": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.0.tgz", - "integrity": "sha512-Q/i50Pieii3akdv5Q6my6QelV5Dpc8O/Ir4udpjYl0pbSdKamdI8M85fxrMxGAGcoNSD+X52fDvxJujXWMcP0w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rspack/binding-linux-arm64-musl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.0.tgz", - "integrity": "sha512-H7Eu3xC7LWPpxrI47n8X361eEGGpQOjZIWTz8tLdn4oNS2D9kqsBYES7LsuuLTTH4ueHTDuEtDdfZpBsE+qesw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rspack/binding-linux-x64-gnu": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.0.tgz", - "integrity": "sha512-dIZSutPo2z/OaO2f6SVlcYA6lGBH+4TrRtWmMyPshpTNPrkCGGfDhC43fZ4jCiUj2PO/Hcn8jyKhci4leBsVBA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rspack/binding-linux-x64-musl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.0.tgz", - "integrity": "sha512-f6L2JWgbG9PKWnVw2YNZdntjzia1V2w2Xq458HkCQUDwhnEipWXaZ2zhfD9jcb4UYoMP8/2uD3B96sSFFNTdrQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rspack/binding-win32-arm64-msvc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.0.tgz", - "integrity": "sha512-opo6XR4iXh/QkHiauVQBlU2xR2JyjDmSwgkION27oszu81nr+IajTSXQX96x5I6Bq48GQLU4rItHse/doctQDA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rspack/binding-win32-ia32-msvc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.1.0.tgz", - "integrity": "sha512-FBcG+OPJokSE3nPi1+ZamLK2V4IWdNC+GMr0z7LUrBiKc5lO70y5VkldfyPV1Z+doSuroVINlhK+lRHdQgGwYg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, "node_modules/@rspack/binding-win32-x64-msvc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.0.tgz", - "integrity": "sha512-H/6Glp1nZvxWAD5+2hRrp1kBs9f+pLb/un2TdFSUNd2tyXq5GyHCe70+N9psbe/jjGxD8e1vPNQtN/VvkuR0Zg==", + "version": "1.2.3", "cpu": [ "x64" ], @@ -4716,16 +4544,17 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rspack/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.1.0.tgz", - "integrity": "sha512-+IYWSe9D3wB97VVBfaojuWLv3wGIBe9pfJkxNObkorN60Nj3UHYzBLuACrHn4hW2mZjAWrv06ReHXJUEGzQqaQ==", + "version": "1.2.3", "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "@module-federation/runtime-tools": "0.5.1", - "@rspack/binding": "1.1.0", + "@module-federation/runtime-tools": "0.8.4", + "@rspack/binding": "1.2.3", "@rspack/lite-tapable": "1.0.1", "caniuse-lite": "^1.0.30001616" }, @@ -4733,9 +4562,13 @@ "node": ">=16.0.0" }, "peerDependencies": { + "@rspack/tracing": "^1.x", "@swc/helpers": ">=0.5.1" }, "peerDependenciesMeta": { + "@rspack/tracing": { + "optional": true + }, "@swc/helpers": { "optional": true } @@ -4743,8 +4576,6 @@ }, "node_modules/@rspack/lite-tapable": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.0.1.tgz", - "integrity": "sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==", "license": "MIT", "engines": { "node": ">=16.0.0" @@ -4752,15 +4583,11 @@ }, "node_modules/@rtsao/scc": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", "dev": true, "license": "MIT" }, "node_modules/@sideway/address": { "version": "4.1.5", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz", - "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" @@ -4768,26 +4595,18 @@ }, "node_modules/@sideway/formula": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", "license": "BSD-3-Clause" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "license": "MIT", "engines": { "node": ">=10" @@ -4798,8 +4617,6 @@ }, "node_modules/@slorber/remark-comment": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", - "integrity": "sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==", "license": "MIT", "dependencies": { "micromark-factory-space": "^1.0.0", @@ -4809,8 +4626,6 @@ }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", "license": "MIT", "engines": { "node": ">=14" @@ -4825,8 +4640,6 @@ }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", - "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", "license": "MIT", "engines": { "node": ">=14" @@ -4841,8 +4654,6 @@ }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", - "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", "license": "MIT", "engines": { "node": ">=14" @@ -4857,8 +4668,6 @@ }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", - "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", "license": "MIT", "engines": { "node": ">=14" @@ -4873,8 +4682,6 @@ }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", - "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", "license": "MIT", "engines": { "node": ">=14" @@ -4889,8 +4696,6 @@ }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", - "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", "license": "MIT", "engines": { "node": ">=14" @@ -4905,8 +4710,6 @@ }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", - "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", "license": "MIT", "engines": { "node": ">=14" @@ -4921,8 +4724,6 @@ }, "node_modules/@svgr/babel-plugin-transform-svg-component": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", - "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", "license": "MIT", "engines": { "node": ">=12" @@ -4937,8 +4738,6 @@ }, "node_modules/@svgr/babel-preset": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", - "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", "license": "MIT", "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", @@ -4963,8 +4762,6 @@ }, "node_modules/@svgr/core": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", - "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", @@ -4983,8 +4780,6 @@ }, "node_modules/@svgr/hast-util-to-babel-ast": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", - "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", "license": "MIT", "dependencies": { "@babel/types": "^7.21.3", @@ -5000,8 +4795,6 @@ }, "node_modules/@svgr/plugin-jsx": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", - "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", @@ -5022,8 +4815,6 @@ }, "node_modules/@svgr/plugin-svgo": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-8.1.0.tgz", - "integrity": "sha512-Ywtl837OGO9pTLIN/onoWLmDQ4zFUycI1g76vuKGEz6evR/ZTJlJuz3G/fIkb6OVBJ2g0o6CGJzaEjfmEo3AHA==", "license": "MIT", "dependencies": { "cosmiconfig": "^8.1.3", @@ -5043,8 +4834,6 @@ }, "node_modules/@svgr/webpack": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-8.1.0.tgz", - "integrity": "sha512-LnhVjMWyMQV9ZmeEy26maJk+8HTIbd59cH4F2MJ439k9DqejRisfFNGAPvRYlKETuh9LrImlS8aKsBgKjMA8WA==", "license": "MIT", "dependencies": { "@babel/core": "^7.21.3", @@ -5065,14 +4854,12 @@ } }, "node_modules/@swc/core": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.9.1.tgz", - "integrity": "sha512-OnPc+Kt5oy3xTvr/KCUOqE9ptJcWbyQgAUr1ydh9EmbBcmJTaO1kfQCxm/axzJi6sKeDTxL9rX5zvLOhoYIaQw==", + "version": "1.10.15", "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.14" + "@swc/types": "^0.1.17" }, "engines": { "node": ">=10" @@ -5082,16 +4869,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.9.1", - "@swc/core-darwin-x64": "1.9.1", - "@swc/core-linux-arm-gnueabihf": "1.9.1", - "@swc/core-linux-arm64-gnu": "1.9.1", - "@swc/core-linux-arm64-musl": "1.9.1", - "@swc/core-linux-x64-gnu": "1.9.1", - "@swc/core-linux-x64-musl": "1.9.1", - "@swc/core-win32-arm64-msvc": "1.9.1", - "@swc/core-win32-ia32-msvc": "1.9.1", - "@swc/core-win32-x64-msvc": "1.9.1" + "@swc/core-darwin-arm64": "1.10.15", + "@swc/core-darwin-x64": "1.10.15", + "@swc/core-linux-arm-gnueabihf": "1.10.15", + "@swc/core-linux-arm64-gnu": "1.10.15", + "@swc/core-linux-arm64-musl": "1.10.15", + "@swc/core-linux-x64-gnu": "1.10.15", + "@swc/core-linux-x64-musl": "1.10.15", + "@swc/core-win32-arm64-msvc": "1.10.15", + "@swc/core-win32-ia32-msvc": "1.10.15", + "@swc/core-win32-x64-msvc": "1.10.15" }, "peerDependencies": { "@swc/helpers": "*" @@ -5102,154 +4889,8 @@ } } }, - "node_modules/@swc/core-darwin-arm64": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.1.tgz", - "integrity": "sha512-2/ncHSCdAh5OHem1fMITrWEzzl97OdMK1PHc9CkxSJnphLjRubfxB5sbc5tDhcO68a5tVy+DxwaBgDec3PXnOg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-darwin-x64": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.9.1.tgz", - "integrity": "sha512-4MDOFC5zmNqRJ9RGFOH95oYf27J9HniLVpB1pYm2gGeNHdl2QvDMtx2QTuMHQ6+OTn/3y1BHYuhBGp7d405oLA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.9.1.tgz", - "integrity": "sha512-eVW/BjRW8/HpLe3+1jRU7w7PdRLBgnEEYTkHJISU8805/EKT03xNZn6CfaBpKfeAloY4043hbGzE/NP9IahdpQ==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.9.1.tgz", - "integrity": "sha512-8m3u1v8R8NgI/9+cHMkzk14w87blSy3OsQPWPfhOL+XPwhyLPvat+ahQJb2nZmltjTgkB4IbzKFSfbuA34LmNA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.9.1.tgz", - "integrity": "sha512-hpT0sQAZnW8l02I289yeyFfT9llGO9PzKDxUq8pocKtioEHiElRqR53juCWoSmzuWi+6KX7zUJ0NKCBrc8pmDg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.1.tgz", - "integrity": "sha512-sGFdpdAYusk/ropHiwtXom2JrdaKPxl8MqemRv6dvxZq1Gm/GdmOowxdXIPjCgBGMgoXVcgNviH6CgiO5q+UtA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-linux-x64-musl": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.1.tgz", - "integrity": "sha512-YtNLNwIWs0Z2+XgBs6+LrCIGtfCDtNr4S4b6Q5HDOreEIGzSvhkef8eyBI5L+fJ2eGov4b7iEo61C4izDJS5RA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.9.1.tgz", - "integrity": "sha512-qSxD3uZW2vSiHqUt30vUi0PB92zDh9bjqh5YKpfhhVa7h1vt/xXhlid8yMvSNToTfzhRrTEffOAPUr7WVoyQUA==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.9.1.tgz", - "integrity": "sha512-C3fPEwyX/WRPlX6zIToNykJuz1JkZX0sk8H1QH2vpnKuySUkt/Ur5K2FzLgSWzJdbfxstpgS151/es0VGAD+ZA==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.9.1.tgz", - "integrity": "sha512-2XZ+U1AyVsOAXeH6WK1syDm7+gwTjA8fShs93WcbxnK7HV+NigDlvr4124CeJLTHyh3fMh1o7+CnQnaBJhlysQ==", + "version": "1.10.15", "cpu": [ "x64" ], @@ -5264,14 +4905,10 @@ }, "node_modules/@swc/counter": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", "license": "Apache-2.0" }, "node_modules/@swc/html": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html/-/html-1.9.1.tgz", - "integrity": "sha512-b/5GqsI6xF55/GU95FrItW1+EdvBs4uojPJcBSkmbFcetdmHPZyprA45VpPUYyJeRWebu4lesZrTOU2GGSIsow==", + "version": "1.10.15", "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" @@ -5280,166 +4917,20 @@ "node": ">=14" }, "optionalDependencies": { - "@swc/html-darwin-arm64": "1.9.1", - "@swc/html-darwin-x64": "1.9.1", - "@swc/html-linux-arm-gnueabihf": "1.9.1", - "@swc/html-linux-arm64-gnu": "1.9.1", - "@swc/html-linux-arm64-musl": "1.9.1", - "@swc/html-linux-x64-gnu": "1.9.1", - "@swc/html-linux-x64-musl": "1.9.1", - "@swc/html-win32-arm64-msvc": "1.9.1", - "@swc/html-win32-ia32-msvc": "1.9.1", - "@swc/html-win32-x64-msvc": "1.9.1" - } - }, - "node_modules/@swc/html-darwin-arm64": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-darwin-arm64/-/html-darwin-arm64-1.9.1.tgz", - "integrity": "sha512-RBMLup2je+6yUlnbXy1iZDo8H8tXkVwsXBCqj1Iac6RVNhSg/prG+facSLZQMpmyerILE3A02kGpTXUjpi/a6A==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/html-darwin-x64": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-darwin-x64/-/html-darwin-x64-1.9.1.tgz", - "integrity": "sha512-VUa4itQHWCteFdFoAZP+dEWsfaVtgt54btV1miSjVvHAdyjAOO9S5RkjdW45Oz0C5XDzR7EIz2+oLZlYtEnpAw==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/html-linux-arm-gnueabihf": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm-gnueabihf/-/html-linux-arm-gnueabihf-1.9.1.tgz", - "integrity": "sha512-DAGJbgf0Fl6VcOcYvdiP+NOg2WITe7SlX+gE/o3ROEW1m5wAFB8kWbqQHDPJ3hNEjZyIx+rE+gEj9u7Ebuzblg==", - "cpu": [ - "arm" - ], - "license": "Apache-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/html-linux-arm64-gnu": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-gnu/-/html-linux-arm64-gnu-1.9.1.tgz", - "integrity": "sha512-4YnV9SJYC/goH7Y1xAmUj39KcpU6/tMrThbLE+MisiA0xJGwZBa+uc1FczMknzNm91ga5aQMUmy7LPKS2OwJzg==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/html-linux-arm64-musl": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-linux-arm64-musl/-/html-linux-arm64-musl-1.9.1.tgz", - "integrity": "sha512-y36k7DiFghomJhlzhWhSeskxxFwb0xiAumjMzLgqFbrCa4krCpwW/LPnImT2sw2joJFOSpuFG1CrtMekGNTjvw==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/html-linux-x64-gnu": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-gnu/-/html-linux-x64-gnu-1.9.1.tgz", - "integrity": "sha512-AvyWPZK1uhixFS5fDPTBK349/oklZJOs9dWvb6WCIB82wybLytofmHqZMJkhD5yS69FfjIljrC8QYzx2ARjUzQ==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/html-linux-x64-musl": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-linux-x64-musl/-/html-linux-x64-musl-1.9.1.tgz", - "integrity": "sha512-X2LA/0tCkpuRBAH8mF4w20z2yAnwc8TrH4GAZ0kJkJB+6KHN5BwN9grEydMTKOzBT3zBAlQvkohq4Vxb4uO0OA==", - "cpu": [ - "x64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/html-win32-arm64-msvc": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-win32-arm64-msvc/-/html-win32-arm64-msvc-1.9.1.tgz", - "integrity": "sha512-eLLP/MJQc6GY9JsOaDKR4TduFQ4mKs50MRsMHetaqnwMhS5TPTn6yhQldbe7ivouYwnCpWhs+62W89wa7AGQYw==", - "cpu": [ - "arm64" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" - } - }, - "node_modules/@swc/html-win32-ia32-msvc": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-win32-ia32-msvc/-/html-win32-ia32-msvc-1.9.1.tgz", - "integrity": "sha512-yZDtJTxok7drMZFUL7d5PfLmVXDZ6XFS/DnpOU0PWZAMxXkp38ep5YP7Z+2O/SAtGJAJediUbNc0QFnaQ+DgxA==", - "cpu": [ - "ia32" - ], - "license": "Apache-2.0 AND MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=10" + "@swc/html-darwin-arm64": "1.10.15", + "@swc/html-darwin-x64": "1.10.15", + "@swc/html-linux-arm-gnueabihf": "1.10.15", + "@swc/html-linux-arm64-gnu": "1.10.15", + "@swc/html-linux-arm64-musl": "1.10.15", + "@swc/html-linux-x64-gnu": "1.10.15", + "@swc/html-linux-x64-musl": "1.10.15", + "@swc/html-win32-arm64-msvc": "1.10.15", + "@swc/html-win32-ia32-msvc": "1.10.15", + "@swc/html-win32-x64-msvc": "1.10.15" } }, "node_modules/@swc/html-win32-x64-msvc": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@swc/html-win32-x64-msvc/-/html-win32-x64-msvc-1.9.1.tgz", - "integrity": "sha512-khcL6xk2j5YceJgrDLuSQqfjj/6JB81yOFQT6r2Vt4+6qeNNKCvqf5l9DMrK2KtQ+L0n50yVW6sjCBUULltbRQ==", + "version": "1.10.15", "cpu": [ "x64" ], @@ -5453,9 +4944,7 @@ } }, "node_modules/@swc/types": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.14.tgz", - "integrity": "sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==", + "version": "0.1.17", "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3" @@ -5463,8 +4952,6 @@ }, "node_modules/@szmarczak/http-timer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", - "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" @@ -5475,27 +4962,13 @@ }, "node_modules/@trysound/sax": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "license": "ISC", "engines": { "node": ">=10.13.0" } }, - "node_modules/@tybys/wasm-util": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", - "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/@types/acorn": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", "license": "MIT", "dependencies": { "@types/estree": "*" @@ -5503,8 +4976,6 @@ }, "node_modules/@types/body-parser": { "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "license": "MIT", "dependencies": { "@types/connect": "*", @@ -5513,8 +4984,6 @@ }, "node_modules/@types/bonjour": { "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", - "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5522,8 +4991,6 @@ }, "node_modules/@types/connect": { "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5531,8 +4998,6 @@ }, "node_modules/@types/connect-history-api-fallback": { "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", - "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "license": "MIT", "dependencies": { "@types/express-serve-static-core": "*", @@ -5541,8 +5006,6 @@ }, "node_modules/@types/debug": { "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "license": "MIT", "dependencies": { "@types/ms": "*" @@ -5550,8 +5013,6 @@ }, "node_modules/@types/eslint": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "license": "MIT", "dependencies": { "@types/estree": "*", @@ -5560,8 +5021,6 @@ }, "node_modules/@types/eslint-scope": { "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "license": "MIT", "dependencies": { "@types/eslint": "*", @@ -5570,14 +5029,10 @@ }, "node_modules/@types/estree": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", "license": "MIT" }, "node_modules/@types/estree-jsx": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", - "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", "license": "MIT", "dependencies": { "@types/estree": "*" @@ -5585,8 +5040,6 @@ }, "node_modules/@types/express": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "license": "MIT", "dependencies": { "@types/body-parser": "*", @@ -5596,9 +5049,7 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.0.1.tgz", - "integrity": "sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==", + "version": "5.0.6", "license": "MIT", "dependencies": { "@types/node": "*", @@ -5609,8 +5060,6 @@ }, "node_modules/@types/express/node_modules/@types/express-serve-static-core": { "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -5619,16 +5068,16 @@ "@types/send": "*" } }, + "node_modules/@types/gensync": { + "version": "1.0.4", + "license": "MIT" + }, "node_modules/@types/gtag.js": { "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", "license": "MIT" }, "node_modules/@types/hast": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -5636,32 +5085,22 @@ }, "node_modules/@types/history": { "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", "license": "MIT" }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", "license": "MIT" }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.15", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", - "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "version": "1.17.16", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5669,14 +5108,10 @@ }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" @@ -5684,8 +5119,6 @@ }, "node_modules/@types/istanbul-reports": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" @@ -5693,21 +5126,15 @@ }, "node_modules/@types/json-schema": { "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, "node_modules/@types/json5": { "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true, "license": "MIT" }, "node_modules/@types/mdast": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -5715,42 +5142,30 @@ }, "node_modules/@types/mdx": { "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "version": "2.1.0", "license": "MIT" }, "node_modules/@types/node": { - "version": "22.9.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.0.tgz", - "integrity": "sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==", + "version": "22.13.1", "license": "MIT", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~6.20.0" } }, "node_modules/@types/node-forge": { "version": "1.3.11", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", - "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5758,45 +5173,31 @@ }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/parse-json": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", "license": "MIT" }, "node_modules/@types/prismjs": { "version": "1.26.5", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", - "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", "license": "MIT" }, "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "version": "15.7.14", "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.9.17", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.17.tgz", - "integrity": "sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==", + "version": "6.9.18", "license": "MIT" }, "node_modules/@types/range-parser": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "18.3.18", "license": "MIT", "dependencies": { "@types/prop-types": "*", @@ -5805,8 +5206,6 @@ }, "node_modules/@types/react-router": { "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", "license": "MIT", "dependencies": { "@types/history": "^4.7.11", @@ -5815,8 +5214,6 @@ }, "node_modules/@types/react-router-config": { "version": "5.0.11", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", - "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", "license": "MIT", "dependencies": { "@types/history": "^4.7.11", @@ -5826,8 +5223,6 @@ }, "node_modules/@types/react-router-dom": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", "license": "MIT", "dependencies": { "@types/history": "^4.7.11", @@ -5837,14 +5232,10 @@ }, "node_modules/@types/retry": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", "license": "MIT" }, "node_modules/@types/sax": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.7.tgz", - "integrity": "sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5852,8 +5243,6 @@ }, "node_modules/@types/send": { "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "license": "MIT", "dependencies": { "@types/mime": "^1", @@ -5862,8 +5251,6 @@ }, "node_modules/@types/serve-index": { "version": "1.9.4", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", - "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "license": "MIT", "dependencies": { "@types/express": "*" @@ -5871,8 +5258,6 @@ }, "node_modules/@types/serve-static": { "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", "license": "MIT", "dependencies": { "@types/http-errors": "*", @@ -5882,8 +5267,6 @@ }, "node_modules/@types/sockjs": { "version": "0.3.36", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", - "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5891,14 +5274,10 @@ }, "node_modules/@types/unist": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.13", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", - "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", + "version": "8.5.14", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5906,8 +5285,6 @@ }, "node_modules/@types/yargs": { "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "license": "MIT", "dependencies": { "@types/yargs-parser": "*" @@ -5915,20 +5292,14 @@ }, "node_modules/@types/yargs-parser": { "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "license": "MIT" }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "version": "1.3.0", "license": "ISC" }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.13.2", @@ -5937,26 +5308,18 @@ }, "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.13.2", @@ -5966,14 +5329,10 @@ }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -5984,8 +5343,6 @@ }, "node_modules/@webassemblyjs/ieee754": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" @@ -5993,8 +5350,6 @@ }, "node_modules/@webassemblyjs/leb128": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" @@ -6002,14 +5357,10 @@ }, "node_modules/@webassemblyjs/utf8": { "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -6024,8 +5375,6 @@ }, "node_modules/@webassemblyjs/wasm-gen": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -6037,8 +5386,6 @@ }, "node_modules/@webassemblyjs/wasm-opt": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -6049,8 +5396,6 @@ }, "node_modules/@webassemblyjs/wasm-parser": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -6063,8 +5408,6 @@ }, "node_modules/@webassemblyjs/wast-printer": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.14.1", @@ -6073,20 +5416,14 @@ }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "license": "Apache-2.0" }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "license": "MIT", "dependencies": { "mime-types": "~2.1.34", @@ -6098,8 +5435,6 @@ }, "node_modules/accepts/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6107,8 +5442,6 @@ }, "node_modules/accepts/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -6119,8 +5452,6 @@ }, "node_modules/accepts/node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -6128,8 +5459,6 @@ }, "node_modules/acorn": { "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6140,8 +5469,6 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -6149,8 +5476,6 @@ }, "node_modules/acorn-walk": { "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -6161,8 +5486,6 @@ }, "node_modules/acorn-walk/node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6173,8 +5496,6 @@ }, "node_modules/address": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -6182,8 +5503,6 @@ }, "node_modules/aggregate-error": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", @@ -6195,8 +5514,6 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -6211,8 +5528,6 @@ }, "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "license": "MIT", "dependencies": { "ajv": "^8.0.0" @@ -6228,8 +5543,6 @@ }, "node_modules/ajv-formats/node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6244,14 +5557,10 @@ }, "node_modules/ajv-formats/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/ajv-keywords": { "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" @@ -6259,8 +5568,6 @@ }, "node_modules/algoliasearch": { "version": "4.24.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz", - "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==", "license": "MIT", "dependencies": { "@algolia/cache-browser-local-storage": "4.24.0", @@ -6281,9 +5588,7 @@ } }, "node_modules/algoliasearch-helper": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.5.tgz", - "integrity": "sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==", + "version": "3.24.1", "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" @@ -6294,8 +5599,6 @@ }, "node_modules/ansi-align": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", "license": "ISC", "dependencies": { "string-width": "^4.1.0" @@ -6303,14 +5606,10 @@ }, "node_modules/ansi-align/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/ansi-align/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -6323,8 +5622,6 @@ }, "node_modules/ansi-colors": { "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "devOptional": true, "license": "MIT", "engines": { @@ -6333,8 +5630,6 @@ }, "node_modules/ansi-escapes": { "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "license": "MIT", "dependencies": { "type-fest": "^0.21.3" @@ -6348,8 +5643,6 @@ }, "node_modules/ansi-escapes/node_modules/type-fest": { "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -6360,8 +5653,6 @@ }, "node_modules/ansi-html-community": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "engines": [ "node >= 0.8.0" ], @@ -6372,8 +5663,6 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "license": "MIT", "engines": { "node": ">=8" @@ -6381,8 +5670,6 @@ }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -6396,8 +5683,6 @@ }, "node_modules/anymatch": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", @@ -6409,20 +5694,14 @@ }, "node_modules/arg": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", - "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6430,14 +5709,12 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -6448,14 +5725,10 @@ }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", "license": "MIT" }, "node_modules/array-includes": { "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6475,8 +5748,6 @@ }, "node_modules/array-union": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "license": "MIT", "engines": { "node": ">=8" @@ -6484,8 +5755,6 @@ }, "node_modules/array.prototype.findlast": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", - "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6505,8 +5774,6 @@ }, "node_modules/array.prototype.findlastindex": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6525,16 +5792,14 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6544,16 +5809,14 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -6564,8 +5827,6 @@ }, "node_modules/array.prototype.tosorted": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", - "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "license": "MIT", "dependencies": { @@ -6580,20 +5841,17 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -6604,8 +5862,6 @@ }, "node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { @@ -6614,15 +5870,11 @@ }, "node_modules/ast-types-flow": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", - "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", "dev": true, "license": "MIT" }, "node_modules/astral-regex": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "devOptional": true, "license": "MIT", "engines": { @@ -6631,17 +5883,21 @@ }, "node_modules/astring": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", - "integrity": "sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==", "license": "MIT", "bin": { "astring": "bin/astring" } }, + "node_modules/async-function": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/at-least-node": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "license": "ISC", "engines": { "node": ">= 4.0.0" @@ -6649,8 +5905,6 @@ }, "node_modules/autoprefixer": { "version": "10.4.20", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", - "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", "funding": [ { "type": "opencollective", @@ -6686,8 +5940,6 @@ }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6702,8 +5954,6 @@ }, "node_modules/axe-core": { "version": "4.10.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", - "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", "dev": true, "license": "MPL-2.0", "engines": { @@ -6712,8 +5962,6 @@ }, "node_modules/axobject-query": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", - "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -6722,9 +5970,6 @@ }, "node_modules/babel-eslint": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", - "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", - "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", "dev": true, "license": "MIT", "dependencies": { @@ -6744,8 +5989,6 @@ }, "node_modules/babel-loader": { "version": "9.2.1", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.2.1.tgz", - "integrity": "sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==", "license": "MIT", "dependencies": { "find-cache-dir": "^4.0.0", @@ -6761,21 +6004,17 @@ }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "license": "MIT", "dependencies": { "object.assign": "^4.1.0" } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.11", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz", - "integrity": "sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==", + "version": "0.4.12", "license": "MIT", "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.2", + "@babel/helper-define-polyfill-provider": "^0.6.3", "semver": "^6.3.1" }, "peerDependencies": { @@ -6784,8 +6023,6 @@ }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -6793,8 +6030,6 @@ }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.10.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz", - "integrity": "sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==", "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.6.2", @@ -6805,12 +6040,10 @@ } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz", - "integrity": "sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==", + "version": "0.6.3", "license": "MIT", "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2" + "@babel/helper-define-polyfill-provider": "^0.6.3" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6818,8 +6051,6 @@ }, "node_modules/bail": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "license": "MIT", "funding": { "type": "github", @@ -6828,20 +6059,14 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, "node_modules/batch": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", "license": "MIT" }, "node_modules/big.js": { "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "license": "MIT", "engines": { "node": "*" @@ -6849,8 +6074,6 @@ }, "node_modules/binary-extensions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "license": "MIT", "engines": { "node": ">=8" @@ -6861,8 +6084,6 @@ }, "node_modules/body-parser": { "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -6885,8 +6106,6 @@ }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -6894,35 +6113,17 @@ }, "node_modules/body-parser/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" } }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/body-parser/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "version": "1.3.0", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6931,14 +6132,10 @@ }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "license": "ISC" }, "node_modules/boxen": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", @@ -6959,8 +6156,6 @@ }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -6969,8 +6164,6 @@ }, "node_modules/braces": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "license": "MIT", "dependencies": { "fill-range": "^7.1.1" @@ -6980,9 +6173,7 @@ } }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.4", "funding": [ { "type": "opencollective", @@ -6999,9 +6190,9 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { @@ -7013,14 +6204,10 @@ }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, "node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -7028,8 +6215,6 @@ }, "node_modules/cacheable-lookup": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", - "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", "license": "MIT", "engines": { "node": ">=14.16" @@ -7037,8 +6222,6 @@ }, "node_modules/cacheable-request": { "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", @@ -7054,16 +6237,38 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7074,8 +6279,6 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "license": "MIT", "engines": { "node": ">=6" @@ -7083,8 +6286,6 @@ }, "node_modules/camel-case": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", @@ -7093,8 +6294,6 @@ }, "node_modules/camelcase": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "license": "MIT", "engines": { "node": ">=10" @@ -7105,8 +6304,6 @@ }, "node_modules/camelcase-keys": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, "license": "MIT", "dependencies": { @@ -7124,8 +6321,6 @@ }, "node_modules/camelcase-keys/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -7137,8 +6332,6 @@ }, "node_modules/caniuse-api": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "license": "MIT", "dependencies": { "browserslist": "^4.0.0", @@ -7148,9 +6341,7 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001679", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001679.tgz", - "integrity": "sha512-j2YqID/YwpLnKzCmBOS4tlZdWprXm3ZmQLBH9ZBXFOhoxLA46fwyBvx6toCBWBmnuwUY/qB3kEU6gFx8qgCroA==", + "version": "1.0.30001699", "funding": [ { "type": "opencollective", @@ -7169,8 +6360,6 @@ }, "node_modules/ccount": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", "license": "MIT", "funding": { "type": "github", @@ -7179,8 +6368,6 @@ }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", @@ -7195,8 +6382,6 @@ }, "node_modules/char-regex": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", "license": "MIT", "engines": { "node": ">=10" @@ -7204,8 +6389,6 @@ }, "node_modules/character-entities": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", - "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", "license": "MIT", "funding": { "type": "github", @@ -7214,8 +6397,6 @@ }, "node_modules/character-entities-html4": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", "license": "MIT", "funding": { "type": "github", @@ -7224,8 +6405,6 @@ }, "node_modules/character-entities-legacy": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", "license": "MIT", "funding": { "type": "github", @@ -7234,8 +6413,6 @@ }, "node_modules/character-reference-invalid": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", - "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", "license": "MIT", "funding": { "type": "github", @@ -7243,25 +6420,19 @@ } }, "node_modules/cheerio": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", - "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", + "version": "1.0.0-rc.12", "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "encoding-sniffer": "^0.2.0", - "htmlparser2": "^9.1.0", - "parse5": "^7.1.2", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^6.19.5", - "whatwg-mimetype": "^4.0.0" + "domutils": "^3.0.1", + "htmlparser2": "^8.0.1", + "parse5": "^7.0.0", + "parse5-htmlparser2-tree-adapter": "^7.0.0" }, "engines": { - "node": ">=18.17" + "node": ">= 6" }, "funding": { "url": "https://github.com/cheeriojs/cheerio?sponsor=1" @@ -7269,8 +6440,6 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", @@ -7286,8 +6455,6 @@ }, "node_modules/chokidar": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -7310,8 +6477,6 @@ }, "node_modules/chrome-trace-event": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "license": "MIT", "engines": { "node": ">=6.0" @@ -7319,8 +6484,6 @@ }, "node_modules/ci-info": { "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", "funding": [ { "type": "github", @@ -7334,8 +6497,6 @@ }, "node_modules/clean-css": { "version": "5.3.3", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", - "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", "license": "MIT", "dependencies": { "source-map": "~0.6.0" @@ -7346,8 +6507,6 @@ }, "node_modules/clean-css/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -7355,8 +6514,6 @@ }, "node_modules/clean-stack": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "license": "MIT", "engines": { "node": ">=6" @@ -7364,8 +6521,6 @@ }, "node_modules/cli-boxes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", "license": "MIT", "engines": { "node": ">=10" @@ -7376,8 +6531,6 @@ }, "node_modules/cli-table3": { "version": "0.6.5", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", - "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", "license": "MIT", "dependencies": { "string-width": "^4.2.0" @@ -7391,14 +6544,10 @@ }, "node_modules/cli-table3/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/cli-table3/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -7411,8 +6560,6 @@ }, "node_modules/clone-deep": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", @@ -7425,8 +6572,6 @@ }, "node_modules/clone-deep/node_modules/is-plain-object": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "license": "MIT", "dependencies": { "isobject": "^3.0.1" @@ -7437,8 +6582,6 @@ }, "node_modules/clsx": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", "license": "MIT", "engines": { "node": ">=6" @@ -7446,8 +6589,6 @@ }, "node_modules/collapse-white-space": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", - "integrity": "sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==", "license": "MIT", "funding": { "type": "github", @@ -7456,8 +6597,6 @@ }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -7468,35 +6607,29 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "license": "MIT" }, "node_modules/combine-promises": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", - "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", "license": "MIT", "engines": { "node": ">=10" } }, + "node_modules/comlink": { + "version": "4.4.2", + "license": "Apache-2.0" + }, "node_modules/comma-separated-tokens": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", "license": "MIT", "funding": { "type": "github", @@ -7505,8 +6638,6 @@ }, "node_modules/commander": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "license": "MIT", "engines": { "node": ">= 6" @@ -7514,14 +6645,10 @@ }, "node_modules/common-path-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz", - "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==", "license": "ISC" }, "node_modules/compressible": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" @@ -7532,17 +6659,13 @@ }, "node_modules/compressible/node_modules/mime-db": { "version": "1.53.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", - "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/compression": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.5.tgz", - "integrity": "sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==", + "version": "1.8.0", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -7559,8 +6682,6 @@ }, "node_modules/compression/node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -7568,8 +6689,6 @@ }, "node_modules/compression/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -7577,20 +6696,14 @@ }, "node_modules/compression/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/config-chain": { "version": "1.1.13", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", - "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", "license": "MIT", "dependencies": { "ini": "^1.3.4", @@ -7599,8 +6712,6 @@ }, "node_modules/configstore": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", - "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^6.0.1", @@ -7618,8 +6729,6 @@ }, "node_modules/configstore/node_modules/write-file-atomic": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", @@ -7630,24 +6739,18 @@ }, "node_modules/confusing-browser-globals": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", - "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", "dev": true, "license": "MIT" }, "node_modules/connect-history-api-fallback": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", "license": "MIT", "engines": { "node": ">=0.8" } }, "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "version": "3.4.0", "license": "MIT", "engines": { "node": "^14.18.0 || >=16.10.0" @@ -7655,8 +6758,6 @@ }, "node_modules/content-disposition": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7664,8 +6765,6 @@ }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7673,14 +6772,10 @@ }, "node_modules/convert-source-map": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "license": "MIT" }, "node_modules/cookie": { "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -7688,14 +6783,10 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "license": "MIT" }, "node_modules/copy-text-to-clipboard": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz", - "integrity": "sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q==", "license": "MIT", "engines": { "node": ">=12" @@ -7706,8 +6797,6 @@ }, "node_modules/copy-webpack-plugin": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", @@ -7730,8 +6819,6 @@ }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "license": "ISC", "dependencies": { "is-glob": "^4.0.3" @@ -7742,8 +6829,6 @@ }, "node_modules/copy-webpack-plugin/node_modules/globby": { "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", "license": "MIT", "dependencies": { "dir-glob": "^3.0.1", @@ -7761,8 +6846,6 @@ }, "node_modules/copy-webpack-plugin/node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { "node": ">= 4" @@ -7770,8 +6853,6 @@ }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "license": "MIT", "engines": { "node": ">=12" @@ -7781,9 +6862,7 @@ } }, "node_modules/core-js": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.39.0.tgz", - "integrity": "sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==", + "version": "3.40.0", "hasInstallScript": true, "license": "MIT", "funding": { @@ -7792,12 +6871,10 @@ } }, "node_modules/core-js-compat": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", - "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "version": "3.40.0", "license": "MIT", "dependencies": { - "browserslist": "^4.24.2" + "browserslist": "^4.24.3" }, "funding": { "type": "opencollective", @@ -7805,9 +6882,7 @@ } }, "node_modules/core-js-pure": { - "version": "3.39.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", - "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", + "version": "3.40.0", "hasInstallScript": true, "license": "MIT", "funding": { @@ -7817,14 +6892,10 @@ }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "license": "MIT" }, "node_modules/cosmiconfig": { "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "license": "MIT", "dependencies": { "import-fresh": "^3.3.0", @@ -7848,9 +6919,7 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", - "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "version": "7.0.6", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -7863,8 +6932,6 @@ }, "node_modules/crypto-random-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", "license": "MIT", "dependencies": { "type-fest": "^1.0.1" @@ -7878,8 +6945,6 @@ }, "node_modules/crypto-random-string/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" @@ -7888,10 +6953,42 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/css-blank-pseudo": { + "version": "7.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/css-declaration-sorter": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz", - "integrity": "sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==", "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" @@ -7902,18 +6999,70 @@ }, "node_modules/css-functions-list": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", - "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", "dev": true, "license": "MIT", "engines": { "node": ">=12 || >=16" } }, + "node_modules/css-has-pseudo": { + "version": "7.0.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-has-pseudo/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/css-loader": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", - "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "license": "MIT", "dependencies": { "icss-utils": "^5.1.0", @@ -7947,8 +7096,6 @@ }, "node_modules/css-minimizer-webpack-plugin": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-5.0.1.tgz", - "integrity": "sha512-3caImjKFQkS+ws1TGcFn0V1HyDJFq1Euy589JlD6/3rV2kj+w7r5G9WDMgSHvpvXHNZ2calVypZWuEDQd9wfLg==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", @@ -7989,10 +7136,28 @@ } } }, + "node_modules/css-prefers-color-scheme": { + "version": "10.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/css-select": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", @@ -8007,8 +7172,6 @@ }, "node_modules/css-tree": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "license": "MIT", "dependencies": { "mdn-data": "2.0.30", @@ -8020,8 +7183,6 @@ }, "node_modules/css-what": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "license": "BSD-2-Clause", "engines": { "node": ">= 6" @@ -8030,10 +7191,22 @@ "url": "https://github.com/sponsors/fb55" } }, + "node_modules/cssdb": { + "version": "8.2.3", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ], + "license": "MIT-0" + }, "node_modules/cssesc": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "license": "MIT", "bin": { "cssesc": "bin/cssesc" @@ -8044,8 +7217,6 @@ }, "node_modules/cssnano": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.1.2.tgz", - "integrity": "sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==", "license": "MIT", "dependencies": { "cssnano-preset-default": "^6.1.2", @@ -8064,8 +7235,6 @@ }, "node_modules/cssnano-preset-advanced": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-6.1.2.tgz", - "integrity": "sha512-Nhao7eD8ph2DoHolEzQs5CfRpiEP0xa1HBdnFZ82kvqdmbwVBUr2r1QuQ4t1pi+D1ZpqpcO4T+wy/7RxzJ/WPQ==", "license": "MIT", "dependencies": { "autoprefixer": "^10.4.19", @@ -8085,8 +7254,6 @@ }, "node_modules/cssnano-preset-default": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz", - "integrity": "sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==", "license": "MIT", "dependencies": { "browserslist": "^4.23.0", @@ -8129,8 +7296,6 @@ }, "node_modules/cssnano-utils": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz", - "integrity": "sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==", "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" @@ -8141,8 +7306,6 @@ }, "node_modules/csso": { "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "license": "MIT", "dependencies": { "css-tree": "~2.2.0" @@ -8154,8 +7317,6 @@ }, "node_modules/csso/node_modules/css-tree": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "license": "MIT", "dependencies": { "mdn-data": "2.0.28", @@ -8168,33 +7329,25 @@ }, "node_modules/csso/node_modules/mdn-data": { "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "license": "CC0-1.0" }, "node_modules/csstype": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "license": "MIT" }, "node_modules/damerau-levenshtein": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", "dev": true, "license": "BSD-2-Clause" }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8204,31 +7357,27 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -8241,14 +7390,10 @@ }, "node_modules/debounce": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", "license": "MIT" }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -8264,8 +7409,6 @@ }, "node_modules/decamelize": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true, "license": "MIT", "engines": { @@ -8277,8 +7420,6 @@ }, "node_modules/decamelize-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -8294,8 +7435,6 @@ }, "node_modules/decamelize-keys/node_modules/decamelize": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -8304,8 +7443,6 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { @@ -8314,8 +7451,6 @@ }, "node_modules/decode-named-character-reference": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", "license": "MIT", "dependencies": { "character-entities": "^2.0.0" @@ -8327,8 +7462,6 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -8342,8 +7475,6 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "license": "MIT", "engines": { "node": ">=10" @@ -8354,8 +7485,6 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "license": "MIT", "engines": { "node": ">=4.0.0" @@ -8363,15 +7492,11 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "devOptional": true, "license": "MIT" }, "node_modules/deepmerge": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -8379,8 +7504,6 @@ }, "node_modules/default-gateway": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "license": "BSD-2-Clause", "dependencies": { "execa": "^5.0.0" @@ -8391,8 +7514,6 @@ }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "license": "MIT", "engines": { "node": ">=10" @@ -8400,8 +7521,6 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", @@ -8417,8 +7536,6 @@ }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "license": "MIT", "engines": { "node": ">=8" @@ -8426,8 +7543,6 @@ }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", @@ -8443,8 +7558,6 @@ }, "node_modules/del": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "license": "MIT", "dependencies": { "globby": "^11.0.1", @@ -8465,8 +7578,6 @@ }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8474,8 +7585,6 @@ }, "node_modules/dequal": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", "license": "MIT", "engines": { "node": ">=6" @@ -8483,8 +7592,6 @@ }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "license": "MIT", "engines": { "node": ">= 0.8", @@ -8493,8 +7600,6 @@ }, "node_modules/detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "license": "Apache-2.0", "bin": { "detect-libc": "bin/detect-libc.js" @@ -8505,14 +7610,10 @@ }, "node_modules/detect-node": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "license": "MIT" }, "node_modules/detect-port": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", "license": "MIT", "dependencies": { "address": "^1.0.1", @@ -8528,8 +7629,6 @@ }, "node_modules/detect-port-alt": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "license": "MIT", "dependencies": { "address": "^1.0.1", @@ -8545,8 +7644,6 @@ }, "node_modules/detect-port-alt/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -8554,14 +7651,10 @@ }, "node_modules/detect-port-alt/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/devlop": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "license": "MIT", "dependencies": { "dequal": "^2.0.0" @@ -8573,8 +7666,6 @@ }, "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "license": "MIT", "dependencies": { "path-type": "^4.0.0" @@ -8585,8 +7676,6 @@ }, "node_modules/dns-packet": { "version": "5.6.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", - "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "license": "MIT", "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -8597,8 +7686,6 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "devOptional": true, "license": "Apache-2.0", "dependencies": { @@ -8610,8 +7697,6 @@ }, "node_modules/dom-converter": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "license": "MIT", "dependencies": { "utila": "~0.4" @@ -8619,8 +7704,6 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", @@ -8633,8 +7716,6 @@ }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", @@ -8645,8 +7726,6 @@ }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" @@ -8659,9 +7738,7 @@ } }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "3.2.2", "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", @@ -8674,8 +7751,6 @@ }, "node_modules/dot-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "license": "MIT", "dependencies": { "no-case": "^3.0.4", @@ -8684,8 +7759,6 @@ }, "node_modules/dot-prop": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", - "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "license": "MIT", "dependencies": { "is-obj": "^2.0.0" @@ -8699,53 +7772,49 @@ }, "node_modules/dot-prop/node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexer": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.55", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.55.tgz", - "integrity": "sha512-6maZ2ASDOTBtjt9FhqYPRnbvKU5tjG0IN9SztUOWYw2AzNDNpKJYLJmlK0/En4Hs/aiWnB+JZ+gW19PIGszgKg==", + "version": "1.5.97", "license": "ISC" }, "node_modules/emoji-regex": { "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, "node_modules/emojilib": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/emojilib/-/emojilib-2.4.0.tgz", - "integrity": "sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==", "license": "MIT" }, "node_modules/emojis-list": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", "license": "MIT", "engines": { "node": ">= 4" @@ -8753,8 +7822,6 @@ }, "node_modules/emoticon": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz", - "integrity": "sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==", "license": "MIT", "funding": { "type": "github", @@ -8763,8 +7830,6 @@ }, "node_modules/encodeurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -8772,8 +7837,6 @@ }, "node_modules/encoding-sniffer": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", - "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", "license": "MIT", "dependencies": { "iconv-lite": "^0.6.3", @@ -8783,10 +7846,18 @@ "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" } }, + "node_modules/encoding-sniffer/node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.18.1", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", @@ -8798,8 +7869,6 @@ }, "node_modules/enquirer": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", - "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -8812,8 +7881,6 @@ }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -8824,66 +7891,67 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.9", "dev": true, "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" }, "engines": { "node": ">= 0.4" @@ -8893,64 +7961,51 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", - "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", + "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.3", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "version": "1.6.0", "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "dev": true, + "version": "1.1.1", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -8960,15 +8015,14 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -8976,8 +8030,6 @@ }, "node_modules/es-shim-unscopables": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", "dev": true, "license": "MIT", "dependencies": { @@ -8985,15 +8037,13 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -9004,8 +8054,6 @@ }, "node_modules/esast-util-from-estree": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", - "integrity": "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -9020,8 +8068,6 @@ }, "node_modules/esast-util-from-js": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz", - "integrity": "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -9036,8 +8082,6 @@ }, "node_modules/esast-util-from-js/node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -9048,8 +8092,6 @@ }, "node_modules/escalade": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "license": "MIT", "engines": { "node": ">=6" @@ -9057,8 +8099,6 @@ }, "node_modules/escape-goat": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", - "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", "license": "MIT", "engines": { "node": ">=12" @@ -9069,14 +8109,10 @@ }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", "engines": { "node": ">=10" @@ -9087,9 +8123,6 @@ }, "node_modules/eslint": { "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "devOptional": true, "license": "MIT", "dependencies": { @@ -9146,8 +8179,6 @@ }, "node_modules/eslint-config-airbnb": { "version": "18.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz", - "integrity": "sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==", "dev": true, "license": "MIT", "dependencies": { @@ -9168,8 +8199,6 @@ }, "node_modules/eslint-config-airbnb-base": { "version": "14.2.1", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz", - "integrity": "sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==", "dev": true, "license": "MIT", "dependencies": { @@ -9187,8 +8216,6 @@ }, "node_modules/eslint-config-prettier": { "version": "6.15.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.15.0.tgz", - "integrity": "sha512-a1+kOYLR8wMGustcgAjdydMsQ2A/2ipRPwRKUmfYaSxc9ZPcrku080Ctl6zrZzZNs/U82MjSv+qKREkoq3bJaw==", "dev": true, "license": "MIT", "dependencies": { @@ -9203,8 +8230,6 @@ }, "node_modules/eslint-import-resolver-node": { "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { @@ -9215,8 +8240,6 @@ }, "node_modules/eslint-import-resolver-node/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9225,8 +8248,6 @@ }, "node_modules/eslint-module-utils": { "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "license": "MIT", "dependencies": { @@ -9243,8 +8264,6 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9253,8 +8272,6 @@ }, "node_modules/eslint-plugin-header": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-header/-/eslint-plugin-header-3.1.1.tgz", - "integrity": "sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -9263,8 +8280,6 @@ }, "node_modules/eslint-plugin-import": { "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "license": "MIT", "dependencies": { @@ -9297,8 +8312,6 @@ }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9307,8 +8320,6 @@ }, "node_modules/eslint-plugin-import/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9320,8 +8331,6 @@ }, "node_modules/eslint-plugin-import/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -9330,8 +8339,6 @@ }, "node_modules/eslint-plugin-jsx-a11y": { "version": "6.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", - "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9359,29 +8366,27 @@ } }, "node_modules/eslint-plugin-react": { - "version": "7.37.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", - "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "version": "7.37.4", "dev": true, "license": "MIT", "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.2", + "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.1.0", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.8", "object.fromentries": "^2.0.8", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.11", + "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "engines": { @@ -9393,8 +8398,6 @@ }, "node_modules/eslint-plugin-react-hooks": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", "dev": true, "license": "MIT", "engines": { @@ -9406,8 +8409,6 @@ }, "node_modules/eslint-plugin-react/node_modules/doctrine": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -9419,8 +8420,6 @@ }, "node_modules/eslint-plugin-react/node_modules/resolve": { "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "license": "MIT", "dependencies": { @@ -9437,8 +8436,6 @@ }, "node_modules/eslint-plugin-react/node_modules/semver": { "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { @@ -9447,8 +8444,6 @@ }, "node_modules/eslint-scope": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", @@ -9460,8 +8455,6 @@ }, "node_modules/eslint-scope/node_modules/estraverse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -9469,8 +8462,6 @@ }, "node_modules/eslint-utils": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -9485,8 +8476,6 @@ }, "node_modules/eslint-visitor-keys": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", "devOptional": true, "license": "Apache-2.0", "engines": { @@ -9495,8 +8484,6 @@ }, "node_modules/eslint/node_modules/@babel/code-frame": { "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -9505,8 +8492,6 @@ }, "node_modules/eslint/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -9515,8 +8500,6 @@ }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", "devOptional": true, "license": "Apache-2.0", "engines": { @@ -9525,8 +8508,6 @@ }, "node_modules/eslint/node_modules/globals": { "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -9541,8 +8522,6 @@ }, "node_modules/eslint/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "devOptional": true, "license": "MIT", "dependencies": { @@ -9555,8 +8534,6 @@ }, "node_modules/eslint/node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "devOptional": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9568,8 +8545,6 @@ }, "node_modules/espree": { "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", "devOptional": true, "license": "BSD-2-Clause", "dependencies": { @@ -9583,8 +8558,6 @@ }, "node_modules/esprima": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", @@ -9596,8 +8569,6 @@ }, "node_modules/esquery": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "devOptional": true, "license": "BSD-3-Clause", "dependencies": { @@ -9609,8 +8580,6 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" @@ -9621,8 +8590,6 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -9630,8 +8597,6 @@ }, "node_modules/estree-util-attach-comments": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-attach-comments/-/estree-util-attach-comments-3.0.0.tgz", - "integrity": "sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -9643,8 +8608,6 @@ }, "node_modules/estree-util-build-jsx": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/estree-util-build-jsx/-/estree-util-build-jsx-3.0.1.tgz", - "integrity": "sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -9659,8 +8622,6 @@ }, "node_modules/estree-util-is-identifier-name": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", - "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", "license": "MIT", "funding": { "type": "opencollective", @@ -9669,8 +8630,6 @@ }, "node_modules/estree-util-scope": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz", - "integrity": "sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -9683,8 +8642,6 @@ }, "node_modules/estree-util-to-js": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz", - "integrity": "sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -9697,9 +8654,7 @@ } }, "node_modules/estree-util-value-to-estree": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.2.1.tgz", - "integrity": "sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==", + "version": "3.3.2", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -9710,8 +8665,6 @@ }, "node_modules/estree-util-visit": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/estree-util-visit/-/estree-util-visit-2.0.0.tgz", - "integrity": "sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -9724,8 +8677,6 @@ }, "node_modules/estree-walker": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" @@ -9733,8 +8684,6 @@ }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -9742,8 +8691,6 @@ }, "node_modules/eta": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", - "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", "license": "MIT", "engines": { "node": ">=6.0.0" @@ -9754,8 +8701,6 @@ }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9763,8 +8708,6 @@ }, "node_modules/eval": { "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dependencies": { "@types/node": "*", "require-like": ">= 0.1.1" @@ -9775,14 +8718,10 @@ }, "node_modules/eventemitter3": { "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", "license": "MIT" }, "node_modules/events": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "license": "MIT", "engines": { "node": ">=0.8.x" @@ -9790,8 +8729,6 @@ }, "node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", @@ -9813,8 +8750,7 @@ }, "node_modules/express": { "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -9858,8 +8794,6 @@ }, "node_modules/express/node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" @@ -9870,8 +8804,6 @@ }, "node_modules/express/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -9879,19 +8811,14 @@ }, "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/express/node_modules/path-to-regexp": { "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==" + "license": "MIT" }, "node_modules/express/node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -9899,14 +8826,10 @@ }, "node_modules/extend": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "license": "MIT" }, "node_modules/extend-shallow": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "license": "MIT", "dependencies": { "is-extendable": "^0.1.0" @@ -9917,21 +8840,17 @@ }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -9939,27 +8858,29 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "devOptional": true, "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", - "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "version": "3.0.6", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, "license": "MIT", "engines": { @@ -9967,9 +8888,7 @@ } }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.19.0", "license": "ISC", "dependencies": { "reusify": "^1.0.4" @@ -9977,8 +8896,6 @@ }, "node_modules/fault": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fault/-/fault-2.0.1.tgz", - "integrity": "sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==", "license": "MIT", "dependencies": { "format": "^0.2.0" @@ -9990,8 +8907,6 @@ }, "node_modules/faye-websocket": { "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "license": "Apache-2.0", "dependencies": { "websocket-driver": ">=0.5.1" @@ -10002,8 +8917,6 @@ }, "node_modules/feed": { "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "license": "MIT", "dependencies": { "xml-js": "^1.6.11" @@ -10014,8 +8927,6 @@ }, "node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" @@ -10029,8 +8940,6 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "license": "MIT", "engines": { "node": ">=0.8.0" @@ -10038,8 +8947,6 @@ }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "devOptional": true, "license": "MIT", "dependencies": { @@ -10051,8 +8958,6 @@ }, "node_modules/file-loader": { "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", @@ -10071,8 +8976,6 @@ }, "node_modules/file-loader/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", @@ -10089,8 +8992,6 @@ }, "node_modules/filesize": { "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", "license": "BSD-3-Clause", "engines": { "node": ">= 0.4.0" @@ -10098,8 +8999,6 @@ }, "node_modules/fill-range": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" @@ -10110,8 +9009,6 @@ }, "node_modules/finalhandler": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -10128,8 +9025,6 @@ }, "node_modules/finalhandler/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -10137,14 +9032,10 @@ }, "node_modules/finalhandler/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/find-cache-dir": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", - "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", "license": "MIT", "dependencies": { "common-path-prefix": "^3.0.0", @@ -10159,8 +9050,6 @@ }, "node_modules/find-up": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", - "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", "license": "MIT", "dependencies": { "locate-path": "^7.1.0", @@ -10175,8 +9064,6 @@ }, "node_modules/flat": { "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "license": "BSD-3-Clause", "bin": { "flat": "cli.js" @@ -10184,8 +9071,6 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "devOptional": true, "license": "MIT", "dependencies": { @@ -10198,16 +9083,12 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", "devOptional": true, "license": "ISC" }, "node_modules/follow-redirects": { "version": "1.15.9", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", - "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", @@ -10225,19 +9106,21 @@ } }, "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "version": "0.3.5", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/fork-ts-checker-webpack-plugin": { "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.8.3", @@ -10275,8 +9158,6 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", @@ -10291,8 +9172,6 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", @@ -10306,8 +9185,6 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.4", @@ -10324,8 +9201,6 @@ }, "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "license": "MIT", "engines": { "node": ">=6" @@ -10333,8 +9208,6 @@ }, "node_modules/form-data-encoder": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", "license": "MIT", "engines": { "node": ">= 14.17" @@ -10342,16 +9215,12 @@ }, "node_modules/format": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", - "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==", "engines": { "node": ">=0.4.x" } }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -10359,8 +9228,6 @@ }, "node_modules/fraction.js": { "version": "4.3.7", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", "license": "MIT", "engines": { "node": "*" @@ -10372,17 +9239,13 @@ }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.3.0", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -10395,50 +9258,30 @@ }, "node_modules/fs-monkey": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", - "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", "license": "Unlicense" }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.8", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -10449,15 +9292,11 @@ }, "node_modules/functional-red-black-tree": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", "devOptional": true, "license": "MIT" }, "node_modules/functions-have-names": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", "funding": { @@ -10466,24 +9305,25 @@ }, "node_modules/gensync": { "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -10494,14 +9334,21 @@ }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", "license": "ISC" }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stdin": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", "dev": true, "license": "MIT", "engines": { @@ -10510,8 +9357,6 @@ }, "node_modules/get-stream": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "license": "MIT", "engines": { "node": ">=10" @@ -10521,15 +9366,13 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -10540,15 +9383,10 @@ }, "node_modules/github-slugger": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", "license": "ISC" }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -10567,8 +9405,6 @@ }, "node_modules/glob-parent": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "license": "ISC", "dependencies": { "is-glob": "^4.0.1" @@ -10579,14 +9415,10 @@ }, "node_modules/glob-to-regexp": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "license": "BSD-2-Clause" }, "node_modules/global-dirs": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", "license": "MIT", "dependencies": { "ini": "2.0.0" @@ -10600,8 +9432,6 @@ }, "node_modules/global-dirs/node_modules/ini": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", "license": "ISC", "engines": { "node": ">=10" @@ -10609,8 +9439,6 @@ }, "node_modules/global-modules": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" @@ -10621,8 +9449,6 @@ }, "node_modules/global-prefix": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "license": "MIT", "dependencies": { "ini": "^1.3.5", @@ -10635,8 +9461,6 @@ }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -10647,8 +9471,6 @@ }, "node_modules/globals": { "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "license": "MIT", "engines": { "node": ">=4" @@ -10656,8 +9478,6 @@ }, "node_modules/globalthis": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10673,8 +9493,6 @@ }, "node_modules/globby": { "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "license": "MIT", "dependencies": { "array-union": "^2.1.0", @@ -10693,8 +9511,6 @@ }, "node_modules/globby/node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", "engines": { "node": ">= 4" @@ -10702,18 +9518,14 @@ }, "node_modules/globjoin": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true, "license": "MIT" }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -10721,8 +9533,6 @@ }, "node_modules/got": { "version": "12.6.1", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", - "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "license": "MIT", "dependencies": { "@sindresorhus/is": "^5.2.0", @@ -10746,8 +9556,6 @@ }, "node_modules/got/node_modules/@sindresorhus/is": { "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", "license": "MIT", "engines": { "node": ">=14.16" @@ -10758,14 +9566,10 @@ }, "node_modules/graceful-fs": { "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, "node_modules/gray-matter": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", "license": "MIT", "dependencies": { "js-yaml": "^3.13.1", @@ -10779,8 +9583,6 @@ }, "node_modules/gray-matter/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" @@ -10788,8 +9590,6 @@ }, "node_modules/gray-matter/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "license": "MIT", "dependencies": { "argparse": "^1.0.7", @@ -10801,8 +9601,6 @@ }, "node_modules/gzip-size": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "license": "MIT", "dependencies": { "duplexer": "^0.1.2" @@ -10816,14 +9614,10 @@ }, "node_modules/handle-thing": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "license": "MIT" }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { @@ -10831,19 +9625,18 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -10851,8 +9644,6 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" @@ -10862,10 +9653,12 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "dev": true, "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -10874,9 +9667,7 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", "license": "MIT", "engines": { "node": ">= 0.4" @@ -10887,8 +9678,6 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { @@ -10903,8 +9692,6 @@ }, "node_modules/has-yarn": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", - "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -10915,8 +9702,6 @@ }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -10926,15 +9711,13 @@ } }, "node_modules/hast-util-from-parse5": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz", - "integrity": "sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==", + "version": "8.0.2", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", - "hastscript": "^8.0.0", + "hastscript": "^9.0.0", "property-information": "^6.0.0", "vfile": "^6.0.0", "vfile-location": "^5.0.0", @@ -10947,8 +9730,6 @@ }, "node_modules/hast-util-parse-selector": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", - "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0" @@ -10959,9 +9740,7 @@ } }, "node_modules/hast-util-raw": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.4.tgz", - "integrity": "sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==", + "version": "9.1.0", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -10984,9 +9763,7 @@ } }, "node_modules/hast-util-to-estree": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz", - "integrity": "sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==", + "version": "3.1.1", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -11002,7 +9779,7 @@ "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^6.0.0", "space-separated-tokens": "^2.0.0", - "style-to-object": "^0.4.0", + "style-to-object": "^1.0.0", "unist-util-position": "^5.0.0", "zwitch": "^2.0.0" }, @@ -11011,25 +9788,8 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/hast-util-to-estree/node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "license": "MIT" - }, - "node_modules/hast-util-to-estree/node_modules/style-to-object": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz", - "integrity": "sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, "node_modules/hast-util-to-jsx-runtime": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", - "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -11055,8 +9815,6 @@ }, "node_modules/hast-util-to-parse5": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-8.0.0.tgz", - "integrity": "sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -11074,8 +9832,6 @@ }, "node_modules/hast-util-whitespace": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0" @@ -11086,9 +9842,7 @@ } }, "node_modules/hastscript": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz", - "integrity": "sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==", + "version": "9.0.0", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -11104,8 +9858,6 @@ }, "node_modules/he": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "license": "MIT", "bin": { "he": "bin/he" @@ -11113,8 +9865,6 @@ }, "node_modules/history": { "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2", @@ -11127,8 +9877,6 @@ }, "node_modules/hoist-non-react-statics": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "license": "BSD-3-Clause", "dependencies": { "react-is": "^16.7.0" @@ -11136,8 +9884,6 @@ }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "license": "ISC", "dependencies": { @@ -11149,8 +9895,6 @@ }, "node_modules/hosted-git-info/node_modules/lru-cache": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "license": "ISC", "dependencies": { @@ -11162,15 +9906,11 @@ }, "node_modules/hosted-git-info/node_modules/yallist": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, "node_modules/hpack.js": { "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", "license": "MIT", "dependencies": { "inherits": "^2.0.1", @@ -11181,14 +9921,10 @@ }, "node_modules/hpack.js/node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -11202,14 +9938,10 @@ }, "node_modules/hpack.js/node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, "node_modules/hpack.js/node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" @@ -11217,14 +9949,10 @@ }, "node_modules/htm": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/htm/-/htm-3.1.1.tgz", - "integrity": "sha512-983Vyg8NwUE7JkZ6NmOqpCZ+sh1bKv2iYTlUkzlWmA5JD2acKoxd4KVxbMmxX/85mtfdnDmTFoNKcg5DGAvxNQ==", "license": "Apache-2.0" }, "node_modules/html-entities": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", - "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", "funding": [ { "type": "github", @@ -11239,14 +9967,10 @@ }, "node_modules/html-escaper": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "license": "MIT" }, "node_modules/html-minifier-terser": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", - "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", "license": "MIT", "dependencies": { "camel-case": "^4.1.2", @@ -11266,8 +9990,6 @@ }, "node_modules/html-minifier-terser/node_modules/commander": { "version": "10.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", - "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "license": "MIT", "engines": { "node": ">=14" @@ -11275,8 +9997,6 @@ }, "node_modules/html-tags": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "license": "MIT", "engines": { "node": ">=8" @@ -11287,8 +10007,6 @@ }, "node_modules/html-void-elements": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", "license": "MIT", "funding": { "type": "github", @@ -11297,8 +10015,6 @@ }, "node_modules/html-webpack-plugin": { "version": "5.6.3", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", - "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", @@ -11329,8 +10045,6 @@ }, "node_modules/html-webpack-plugin/node_modules/commander": { "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "license": "MIT", "engines": { "node": ">= 12" @@ -11338,8 +10052,6 @@ }, "node_modules/html-webpack-plugin/node_modules/html-minifier-terser": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "license": "MIT", "dependencies": { "camel-case": "^4.1.2", @@ -11358,9 +10070,7 @@ } }, "node_modules/htmlparser2": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "version": "8.0.2", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -11372,26 +10082,20 @@ "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", "license": "BSD-2-Clause" }, "node_modules/http-deceiver": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", "license": "MIT" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { "depd": "2.0.0", @@ -11405,15 +10109,11 @@ } }, "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "version": "0.5.9", "license": "MIT" }, "node_modules/http-proxy": { "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "license": "MIT", "dependencies": { "eventemitter3": "^4.0.0", @@ -11426,8 +10126,6 @@ }, "node_modules/http-proxy-middleware": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", - "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", @@ -11450,8 +10148,6 @@ }, "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "license": "MIT", "engines": { "node": ">=10" @@ -11462,8 +10158,6 @@ }, "node_modules/http2-wrapper": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", - "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", @@ -11475,20 +10169,16 @@ }, "node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.4.24", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { "node": ">=0.10.0" @@ -11496,8 +10186,6 @@ }, "node_modules/icss-utils": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" @@ -11508,8 +10196,6 @@ }, "node_modules/ignore": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "devOptional": true, "license": "MIT", "engines": { @@ -11517,9 +10203,7 @@ } }, "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "version": "1.2.0", "license": "MIT", "dependencies": { "queue": "6.0.2" @@ -11533,14 +10217,10 @@ }, "node_modules/immediate": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", "license": "MIT" }, "node_modules/immer": { "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", "license": "MIT", "funding": { "type": "opencollective", @@ -11548,9 +10228,7 @@ } }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", "license": "MIT", "dependencies": { "parent-module": "^1.0.0", @@ -11565,8 +10243,6 @@ }, "node_modules/import-lazy": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "license": "MIT", "engines": { "node": ">=8" @@ -11574,8 +10250,6 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", "engines": { "node": ">=0.8.19" @@ -11583,8 +10257,6 @@ }, "node_modules/indent-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "license": "MIT", "engines": { "node": ">=8" @@ -11592,8 +10264,6 @@ }, "node_modules/infima": { "version": "0.2.0-alpha.45", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.45.tgz", - "integrity": "sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==", "license": "MIT", "engines": { "node": ">=12" @@ -11601,9 +10271,6 @@ }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "license": "ISC", "dependencies": { "once": "^1.3.0", @@ -11612,32 +10279,24 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "license": "ISC" }, "node_modules/inline-style-parser": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", "license": "MIT" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11645,8 +10304,6 @@ }, "node_modules/interpret": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -11654,8 +10311,6 @@ }, "node_modules/invariant": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" @@ -11663,8 +10318,6 @@ }, "node_modules/ipaddr.js": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", "license": "MIT", "engines": { "node": ">= 10" @@ -11672,8 +10325,6 @@ }, "node_modules/is-alphabetical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", - "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", "license": "MIT", "funding": { "type": "github", @@ -11682,8 +10333,6 @@ }, "node_modules/is-alphanumerical": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", - "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "license": "MIT", "dependencies": { "is-alphabetical": "^2.0.0", @@ -11695,14 +10344,13 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -11713,18 +10361,18 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "license": "MIT" }, "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11734,13 +10382,14 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11748,8 +10397,6 @@ }, "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" @@ -11759,14 +10406,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11777,8 +10422,6 @@ }, "node_modules/is-callable": { "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "license": "MIT", "engines": { @@ -11790,8 +10433,6 @@ }, "node_modules/is-ci": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "license": "MIT", "dependencies": { "ci-info": "^3.2.0" @@ -11801,9 +10442,7 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", "license": "MIT", "dependencies": { "hasown": "^2.0.2" @@ -11816,12 +10455,12 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -11832,13 +10471,12 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -11849,8 +10487,6 @@ }, "node_modules/is-decimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", - "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", "license": "MIT", "funding": { "type": "github", @@ -11859,8 +10495,6 @@ }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "license": "MIT", "bin": { "is-docker": "cli.js" @@ -11874,8 +10508,6 @@ }, "node_modules/is-extendable": { "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -11883,21 +10515,20 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11905,21 +10536,20 @@ }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -11930,8 +10560,6 @@ }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" @@ -11942,8 +10570,6 @@ }, "node_modules/is-hexadecimal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", - "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "license": "MIT", "funding": { "type": "github", @@ -11952,8 +10578,6 @@ }, "node_modules/is-installed-globally": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", "license": "MIT", "dependencies": { "global-dirs": "^3.0.0", @@ -11968,21 +10592,6 @@ }, "node_modules/is-map": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "license": "MIT", "engines": { @@ -11994,8 +10603,6 @@ }, "node_modules/is-npm": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -12006,21 +10613,18 @@ }, "node_modules/is-number": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "license": "MIT", "engines": { "node": ">=0.12.0" } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12031,8 +10635,6 @@ }, "node_modules/is-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12040,8 +10642,6 @@ }, "node_modules/is-path-cwd": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "license": "MIT", "engines": { "node": ">=6" @@ -12049,8 +10649,6 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "license": "MIT", "engines": { "node": ">=8" @@ -12058,8 +10656,6 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -12068,8 +10664,6 @@ }, "node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, "license": "MIT", "engines": { @@ -12077,14 +10671,14 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -12095,8 +10689,6 @@ }, "node_modules/is-regexp": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12104,8 +10696,6 @@ }, "node_modules/is-root": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", "license": "MIT", "engines": { "node": ">=6" @@ -12113,8 +10703,6 @@ }, "node_modules/is-set": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", "dev": true, "license": "MIT", "engines": { @@ -12125,13 +10713,11 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -12142,8 +10728,6 @@ }, "node_modules/is-stream": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "license": "MIT", "engines": { "node": ">=8" @@ -12153,13 +10737,12 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -12169,13 +10752,13 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -12185,13 +10768,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", "dev": true, "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -12202,14 +10783,10 @@ }, "node_modules/is-typedarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", "license": "MIT" }, "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, "license": "MIT", "engines": { @@ -12220,27 +10797,26 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.4", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -12251,8 +10827,6 @@ }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "license": "MIT", "dependencies": { "is-docker": "^2.0.0" @@ -12263,8 +10837,6 @@ }, "node_modules/is-yarn-global": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", - "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", "license": "MIT", "engines": { "node": ">=12" @@ -12272,37 +10844,37 @@ }, "node_modules/isarray": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/isomorphic-rslog": { + "version": "0.0.6", + "license": "MIT", + "engines": { + "node": ">=14.17.6" + } + }, "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.5", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -12310,8 +10882,6 @@ }, "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", - "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", "license": "MIT", "dependencies": { "@jest/types": "^29.6.3", @@ -12327,8 +10897,6 @@ }, "node_modules/jest-worker": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", - "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -12342,8 +10910,6 @@ }, "node_modules/jest-worker/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -12356,9 +10922,7 @@ } }, "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "version": "1.21.7", "license": "MIT", "bin": { "jiti": "bin/jiti.js" @@ -12366,8 +10930,6 @@ }, "node_modules/joi": { "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", @@ -12379,14 +10941,10 @@ }, "node_modules/js-tokens": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -12396,9 +10954,7 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", "license": "MIT", "bin": { "jsesc": "bin/jsesc" @@ -12409,33 +10965,23 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "devOptional": true, "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "license": "MIT", "bin": { "json5": "lib/cli.js" @@ -12446,8 +10992,6 @@ }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "license": "MIT", "dependencies": { "universalify": "^2.0.0" @@ -12458,8 +11002,6 @@ }, "node_modules/jsx-ast-utils": { "version": "3.3.5", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", - "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", "dev": true, "license": "MIT", "dependencies": { @@ -12474,8 +11016,6 @@ }, "node_modules/keyv": { "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "license": "MIT", "dependencies": { "json-buffer": "3.0.1" @@ -12483,8 +11023,6 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -12492,8 +11030,6 @@ }, "node_modules/klaw-sync": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", - "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", "license": "MIT", "dependencies": { "graceful-fs": "^4.1.11" @@ -12501,8 +11037,6 @@ }, "node_modules/kleur": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "license": "MIT", "engines": { "node": ">=6" @@ -12510,22 +11044,16 @@ }, "node_modules/known-css-properties": { "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true, "license": "MIT" }, "node_modules/language-subtag-registry": { "version": "0.3.23", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", - "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", "dev": true, "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", - "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, "license": "MIT", "dependencies": { @@ -12537,8 +11065,6 @@ }, "node_modules/latest-version": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", - "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", "license": "MIT", "dependencies": { "package-json": "^8.1.0" @@ -12552,8 +11078,6 @@ }, "node_modules/launch-editor": { "version": "2.9.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.9.1.tgz", - "integrity": "sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==", "license": "MIT", "dependencies": { "picocolors": "^1.0.0", @@ -12562,8 +11086,6 @@ }, "node_modules/leven": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "license": "MIT", "engines": { "node": ">=6" @@ -12571,8 +11093,6 @@ }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -12584,9 +11104,7 @@ } }, "node_modules/lightningcss": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.28.1.tgz", - "integrity": "sha512-KRDkHlLlNj3DWh79CDt93fPlRJh2W1AuHV0ZSZAMMuN7lqlsZTV5842idfS1urWG8q9tc17velp1gCXhY7sLnQ==", + "version": "1.29.1", "license": "MPL-2.0", "dependencies": { "detect-libc": "^1.0.3" @@ -12599,202 +11117,20 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.28.1", - "lightningcss-darwin-x64": "1.28.1", - "lightningcss-freebsd-x64": "1.28.1", - "lightningcss-linux-arm-gnueabihf": "1.28.1", - "lightningcss-linux-arm64-gnu": "1.28.1", - "lightningcss-linux-arm64-musl": "1.28.1", - "lightningcss-linux-x64-gnu": "1.28.1", - "lightningcss-linux-x64-musl": "1.28.1", - "lightningcss-win32-arm64-msvc": "1.28.1", - "lightningcss-win32-x64-msvc": "1.28.1" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.28.1.tgz", - "integrity": "sha512-VG3vvzM0m/rguCdm76DdobNeNJnHK+jWcdkNLFWHLh9YCotRvbRIt45JxwcHlIF8TDqWStVLTdghq5NaigVCBQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.28.1.tgz", - "integrity": "sha512-O7ORdislvKfMohFl4Iq7fxKqdJOuuxArcglVI3amuFO5DJ0wfV3Gxgi1JRo49slfr7OVzJQEHLG4muTWYM5cTQ==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.28.1.tgz", - "integrity": "sha512-b7sF89B31kYYijxVcFO7l5u6UNA862YstNu+3YbLl/IQKzveL4a5cwR5cdpG+OOhErg/c2u9WCmzZoX2I5GBvw==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.28.1.tgz", - "integrity": "sha512-p61kXwvhUDLLzkWHjzSFfUBW/F0iy3jr3CWi3k8SKULtJEsJXTI9DqRm9EixxMSe2AMBQBt4auTYiQL4B1N51A==", - "cpu": [ - "arm" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.28.1.tgz", - "integrity": "sha512-iO+fN9hOMmzfwqcG2/BgUtMKD48H2JO/SXU44fyIwpY2veb65QF5xiRrQ9l1FwIxbGK3231KBYCtAqv+xf+NsQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.28.1.tgz", - "integrity": "sha512-dnMHeXEmCUzHHZjaDpQBYuBKcN9nPC3nPFKl70bcj5Bkn5EmkcgEqm5p035LKOgvAwk1XwLpQCML6pXmCwz0NQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.28.1.tgz", - "integrity": "sha512-7vWDISaMUn+oo2TwRdf2hl/BLdPxvywv9JKEqNZB/0K7bXwV4XE9wN/C2sAp1gGuh6QBA8lpjF4JIPt3HNlCHA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.28.1.tgz", - "integrity": "sha512-IHCu9tVGP+x5BCpA2rF3D04DBokcBza/a8AuHQU+1AiMKubuMegPwcL7RatBgK4ztFHeYnnD5NdhwhRfYMAtNA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.28.1.tgz", - "integrity": "sha512-Erm72kHmMg/3h350PTseskz+eEGBM17Fuu79WW2Qqt0BfWSF1jHHc12lkJCWMYl5jcBHPs5yZdgNHtJ7IJS3Uw==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "lightningcss-darwin-arm64": "1.29.1", + "lightningcss-darwin-x64": "1.29.1", + "lightningcss-freebsd-x64": "1.29.1", + "lightningcss-linux-arm-gnueabihf": "1.29.1", + "lightningcss-linux-arm64-gnu": "1.29.1", + "lightningcss-linux-arm64-musl": "1.29.1", + "lightningcss-linux-x64-gnu": "1.29.1", + "lightningcss-linux-x64-musl": "1.29.1", + "lightningcss-win32-arm64-msvc": "1.29.1", + "lightningcss-win32-x64-msvc": "1.29.1" } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.28.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.28.1.tgz", - "integrity": "sha512-ZPQtvx+uQBzrSdHH8p4H3M9Alue+x369TPZAA3b4K3d92FPhpZCuBG04+HQzspam9sVeID9mI6f3VRAs2ezaEA==", + "version": "1.29.1", "cpu": [ "x64" ], @@ -12812,9 +11148,7 @@ } }, "node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "version": "3.1.3", "license": "MIT", "engines": { "node": ">=14" @@ -12825,14 +11159,10 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, "node_modules/loader-runner": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "license": "MIT", "engines": { "node": ">=6.11.5" @@ -12840,8 +11170,6 @@ }, "node_modules/loader-utils": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", "license": "MIT", "dependencies": { "big.js": "^5.2.2", @@ -12854,8 +11182,6 @@ }, "node_modules/locate-path": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", - "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", "license": "MIT", "dependencies": { "p-locate": "^6.0.0" @@ -12869,46 +11195,32 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, "node_modules/lodash.debounce": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "devOptional": true, "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "devOptional": true, "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "license": "MIT" }, "node_modules/longest-streak": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", - "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", "license": "MIT", "funding": { "type": "github", @@ -12917,8 +11229,6 @@ }, "node_modules/loose-envify": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" @@ -12929,8 +11239,6 @@ }, "node_modules/lower-case": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", "license": "MIT", "dependencies": { "tslib": "^2.0.3" @@ -12938,8 +11246,6 @@ }, "node_modules/lowercase-keys": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", - "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -12950,8 +11256,6 @@ }, "node_modules/lru-cache": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "license": "ISC", "dependencies": { "yallist": "^3.0.2" @@ -12959,20 +11263,14 @@ }, "node_modules/lunr": { "version": "2.3.9", - "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", - "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", "license": "MIT" }, "node_modules/lunr-languages": { "version": "1.14.0", - "resolved": "https://registry.npmjs.org/lunr-languages/-/lunr-languages-1.14.0.tgz", - "integrity": "sha512-hWUAb2KqM3L7J5bcrngszzISY4BxrXn/Xhbb9TTCJYEGqlR1nG67/M14sp09+PTIRklobrn57IAxcdcO/ZFyNA==", "license": "MPL-1.1" }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -12984,14 +11282,10 @@ }, "node_modules/mark.js": { "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", "license": "MIT" }, "node_modules/markdown-extensions": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", - "integrity": "sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==", "license": "MIT", "engines": { "node": ">=16" @@ -13002,18 +11296,21 @@ }, "node_modules/markdown-table": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", - "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mathml-tag-names": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, "license": "MIT", "funding": { @@ -13022,13 +11319,12 @@ } }, "node_modules/mdast-util-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz", - "integrity": "sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==", + "version": "3.1.0", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", "@types/unist": "^3.0.0", + "ccount": "^2.0.0", "devlop": "^1.0.0", "mdast-util-from-markdown": "^2.0.0", "mdast-util-to-markdown": "^2.0.0", @@ -13042,9 +11338,7 @@ } }, "node_modules/mdast-util-find-and-replace": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", - "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "version": "3.0.2", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13059,8 +11353,6 @@ }, "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "license": "MIT", "engines": { "node": ">=12" @@ -13071,8 +11363,6 @@ }, "node_modules/mdast-util-from-markdown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13094,9 +11384,7 @@ } }, "node_modules/mdast-util-from-markdown/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13111,8 +11399,6 @@ }, "node_modules/mdast-util-frontmatter": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-frontmatter/-/mdast-util-frontmatter-2.0.1.tgz", - "integrity": "sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13129,8 +11415,6 @@ }, "node_modules/mdast-util-frontmatter/node_modules/escape-string-regexp": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", "license": "MIT", "engines": { "node": ">=12" @@ -13140,9 +11424,7 @@ } }, "node_modules/mdast-util-gfm": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", - "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "version": "3.1.0", "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", @@ -13160,8 +11442,6 @@ }, "node_modules/mdast-util-gfm-autolink-literal": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", - "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13176,9 +11456,7 @@ } }, "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -13196,9 +11474,7 @@ } }, "node_modules/mdast-util-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13212,9 +11488,7 @@ "license": "MIT" }, "node_modules/mdast-util-gfm-footnote": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", - "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "version": "2.1.0", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13230,8 +11504,6 @@ }, "node_modules/mdast-util-gfm-strikethrough": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", - "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13245,8 +11517,6 @@ }, "node_modules/mdast-util-gfm-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", - "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13262,8 +11532,6 @@ }, "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", - "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13278,8 +11546,6 @@ }, "node_modules/mdast-util-mdx": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-mdx/-/mdast-util-mdx-3.0.0.tgz", - "integrity": "sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==", "license": "MIT", "dependencies": { "mdast-util-from-markdown": "^2.0.0", @@ -13295,8 +11561,6 @@ }, "node_modules/mdast-util-mdx-expression": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", - "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -13312,9 +11576,7 @@ } }, "node_modules/mdast-util-mdx-jsx": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", - "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "version": "3.2.0", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -13337,8 +11599,6 @@ }, "node_modules/mdast-util-mdxjs-esm": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", - "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", "license": "MIT", "dependencies": { "@types/estree-jsx": "^1.0.0", @@ -13355,8 +11615,6 @@ }, "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", - "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13369,8 +11627,6 @@ }, "node_modules/mdast-util-to-hast": { "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -13390,8 +11646,6 @@ }, "node_modules/mdast-util-to-markdown": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", - "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -13411,8 +11665,6 @@ }, "node_modules/mdast-util-to-string": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", - "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0" @@ -13424,14 +11676,10 @@ }, "node_modules/mdn-data": { "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "license": "CC0-1.0" }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -13439,14 +11687,10 @@ }, "node_modules/medium-zoom": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.1.0.tgz", - "integrity": "sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==", "license": "MIT" }, "node_modules/memfs": { "version": "3.5.3", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", - "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", "license": "Unlicense", "dependencies": { "fs-monkey": "^1.0.4" @@ -13457,8 +11701,6 @@ }, "node_modules/meow": { "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, "license": "MIT", "dependencies": { @@ -13484,8 +11726,6 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -13497,8 +11737,6 @@ }, "node_modules/merge-descriptors": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -13506,14 +11744,10 @@ }, "node_modules/merge-stream": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "license": "MIT", "engines": { "node": ">= 8" @@ -13521,17 +11755,13 @@ }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/micromark": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz", - "integrity": "sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==", + "version": "4.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13564,9 +11794,7 @@ } }, "node_modules/micromark-core-commonmark": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.1.tgz", - "integrity": "sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==", + "version": "2.0.2", "funding": [ { "type": "GitHub Sponsors", @@ -13598,9 +11826,7 @@ } }, "node_modules/micromark-core-commonmark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13618,9 +11844,7 @@ } }, "node_modules/micromark-core-commonmark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -13638,9 +11862,7 @@ } }, "node_modules/micromark-core-commonmark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13655,8 +11877,6 @@ }, "node_modules/micromark-extension-directive": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", - "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -13673,9 +11893,7 @@ } }, "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13693,9 +11911,7 @@ } }, "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -13713,9 +11929,7 @@ } }, "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13730,8 +11944,6 @@ }, "node_modules/micromark-extension-frontmatter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", - "integrity": "sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==", "license": "MIT", "dependencies": { "fault": "^2.0.0", @@ -13745,9 +11957,7 @@ } }, "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -13765,9 +11975,7 @@ } }, "node_modules/micromark-extension-frontmatter/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13782,8 +11990,6 @@ }, "node_modules/micromark-extension-gfm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", - "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", "license": "MIT", "dependencies": { "micromark-extension-gfm-autolink-literal": "^2.0.0", @@ -13802,8 +12008,6 @@ }, "node_modules/micromark-extension-gfm-autolink-literal": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", - "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", "license": "MIT", "dependencies": { "micromark-util-character": "^2.0.0", @@ -13817,9 +12021,7 @@ } }, "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -13837,9 +12039,7 @@ } }, "node_modules/micromark-extension-gfm-autolink-literal/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13854,8 +12054,6 @@ }, "node_modules/micromark-extension-gfm-footnote": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", - "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -13873,9 +12071,7 @@ } }, "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13893,9 +12089,7 @@ } }, "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -13913,9 +12107,7 @@ } }, "node_modules/micromark-extension-gfm-footnote/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13930,8 +12122,6 @@ }, "node_modules/micromark-extension-gfm-strikethrough": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", - "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -13947,9 +12137,7 @@ } }, "node_modules/micromark-extension-gfm-strikethrough/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -13963,9 +12151,7 @@ "license": "MIT" }, "node_modules/micromark-extension-gfm-table": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", - "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "version": "2.1.1", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -13980,9 +12166,7 @@ } }, "node_modules/micromark-extension-gfm-table/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14000,9 +12184,7 @@ } }, "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14020,9 +12202,7 @@ } }, "node_modules/micromark-extension-gfm-table/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14037,8 +12217,6 @@ }, "node_modules/micromark-extension-gfm-tagfilter": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", - "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" @@ -14050,8 +12228,6 @@ }, "node_modules/micromark-extension-gfm-task-list-item": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", - "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", "license": "MIT", "dependencies": { "devlop": "^1.0.0", @@ -14066,9 +12242,7 @@ } }, "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14086,9 +12260,7 @@ } }, "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14106,9 +12278,7 @@ } }, "node_modules/micromark-extension-gfm-task-list-item/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14123,8 +12293,6 @@ }, "node_modules/micromark-extension-mdx-expression": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", "funding": [ { "type": "GitHub Sponsors", @@ -14148,9 +12316,7 @@ } }, "node_modules/micromark-extension-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14168,9 +12334,7 @@ } }, "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14188,9 +12352,7 @@ } }, "node_modules/micromark-extension-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14205,8 +12367,6 @@ }, "node_modules/micromark-extension-mdx-jsx": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", - "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", "license": "MIT", "dependencies": { "@types/acorn": "^4.0.0", @@ -14227,9 +12387,7 @@ } }, "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14247,9 +12405,7 @@ } }, "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14267,9 +12423,7 @@ } }, "node_modules/micromark-extension-mdx-jsx/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14284,8 +12438,6 @@ }, "node_modules/micromark-extension-mdx-md": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-md/-/micromark-extension-mdx-md-2.0.0.tgz", - "integrity": "sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==", "license": "MIT", "dependencies": { "micromark-util-types": "^2.0.0" @@ -14297,8 +12449,6 @@ }, "node_modules/micromark-extension-mdxjs": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs/-/micromark-extension-mdxjs-3.0.0.tgz", - "integrity": "sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==", "license": "MIT", "dependencies": { "acorn": "^8.0.0", @@ -14317,8 +12467,6 @@ }, "node_modules/micromark-extension-mdxjs-esm": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdxjs-esm/-/micromark-extension-mdxjs-esm-3.0.0.tgz", - "integrity": "sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -14337,9 +12485,7 @@ } }, "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14357,9 +12503,7 @@ } }, "node_modules/micromark-extension-mdxjs-esm/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14374,8 +12518,6 @@ }, "node_modules/micromark-extension-mdxjs/node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -14385,9 +12527,7 @@ } }, "node_modules/micromark-factory-destination": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz", - "integrity": "sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14406,9 +12546,7 @@ } }, "node_modules/micromark-factory-destination/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14426,9 +12564,7 @@ } }, "node_modules/micromark-factory-destination/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14442,9 +12578,7 @@ "license": "MIT" }, "node_modules/micromark-factory-label": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz", - "integrity": "sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14464,9 +12598,7 @@ } }, "node_modules/micromark-factory-label/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14484,9 +12616,7 @@ } }, "node_modules/micromark-factory-label/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14501,8 +12631,6 @@ }, "node_modules/micromark-factory-mdx-expression": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", - "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", "funding": [ { "type": "GitHub Sponsors", @@ -14527,9 +12655,7 @@ } }, "node_modules/micromark-factory-mdx-expression/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14547,9 +12673,7 @@ } }, "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14567,9 +12691,7 @@ } }, "node_modules/micromark-factory-mdx-expression/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14584,8 +12706,6 @@ }, "node_modules/micromark-factory-space": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz", - "integrity": "sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==", "funding": [ { "type": "GitHub Sponsors", @@ -14604,8 +12724,6 @@ }, "node_modules/micromark-factory-space/node_modules/micromark-util-types": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", "funding": [ { "type": "GitHub Sponsors", @@ -14619,9 +12737,7 @@ "license": "MIT" }, "node_modules/micromark-factory-title": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz", - "integrity": "sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14641,9 +12757,7 @@ } }, "node_modules/micromark-factory-title/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14661,9 +12775,7 @@ } }, "node_modules/micromark-factory-title/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14681,9 +12793,7 @@ } }, "node_modules/micromark-factory-title/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14697,9 +12807,7 @@ "license": "MIT" }, "node_modules/micromark-factory-whitespace": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz", - "integrity": "sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14719,9 +12827,7 @@ } }, "node_modules/micromark-factory-whitespace/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14739,9 +12845,7 @@ } }, "node_modules/micromark-factory-whitespace/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14759,9 +12863,7 @@ } }, "node_modules/micromark-factory-whitespace/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14776,8 +12878,6 @@ }, "node_modules/micromark-util-character": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-1.2.0.tgz", - "integrity": "sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==", "funding": [ { "type": "GitHub Sponsors", @@ -14796,8 +12896,6 @@ }, "node_modules/micromark-util-character/node_modules/micromark-util-types": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-1.1.0.tgz", - "integrity": "sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==", "funding": [ { "type": "GitHub Sponsors", @@ -14811,9 +12909,7 @@ "license": "MIT" }, "node_modules/micromark-util-chunked": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz", - "integrity": "sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14830,9 +12926,7 @@ } }, "node_modules/micromark-util-chunked/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14846,9 +12940,7 @@ "license": "MIT" }, "node_modules/micromark-util-classify-character": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz", - "integrity": "sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14867,9 +12959,7 @@ } }, "node_modules/micromark-util-classify-character/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -14887,9 +12977,7 @@ } }, "node_modules/micromark-util-classify-character/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14903,9 +12991,7 @@ "license": "MIT" }, "node_modules/micromark-util-combine-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz", - "integrity": "sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14923,9 +13009,7 @@ } }, "node_modules/micromark-util-decode-numeric-character-reference": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz", - "integrity": "sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==", + "version": "2.0.2", "funding": [ { "type": "GitHub Sponsors", @@ -14942,9 +13026,7 @@ } }, "node_modules/micromark-util-decode-numeric-character-reference/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14958,9 +13040,7 @@ "license": "MIT" }, "node_modules/micromark-util-decode-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz", - "integrity": "sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -14980,9 +13060,7 @@ } }, "node_modules/micromark-util-decode-string/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -15000,9 +13078,7 @@ } }, "node_modules/micromark-util-decode-string/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15016,9 +13092,7 @@ "license": "MIT" }, "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15033,8 +13107,6 @@ }, "node_modules/micromark-util-events-to-acorn": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", "funding": [ { "type": "GitHub Sponsors", @@ -15058,9 +13130,7 @@ } }, "node_modules/micromark-util-events-to-acorn/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15074,9 +13144,7 @@ "license": "MIT" }, "node_modules/micromark-util-html-tag-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz", - "integrity": "sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15090,9 +13158,7 @@ "license": "MIT" }, "node_modules/micromark-util-normalize-identifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz", - "integrity": "sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15109,9 +13175,7 @@ } }, "node_modules/micromark-util-normalize-identifier/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15125,9 +13189,7 @@ "license": "MIT" }, "node_modules/micromark-util-resolve-all": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz", - "integrity": "sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15144,9 +13206,7 @@ } }, "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15165,9 +13225,7 @@ } }, "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -15185,9 +13243,7 @@ } }, "node_modules/micromark-util-sanitize-uri/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15201,9 +13257,7 @@ "license": "MIT" }, "node_modules/micromark-util-subtokenize": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.1.tgz", - "integrity": "sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==", + "version": "2.0.4", "funding": [ { "type": "GitHub Sponsors", @@ -15223,9 +13277,7 @@ } }, "node_modules/micromark-util-subtokenize/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15240,8 +13292,6 @@ }, "node_modules/micromark-util-symbol": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz", - "integrity": "sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==", "funding": [ { "type": "GitHub Sponsors", @@ -15255,9 +13305,7 @@ "license": "MIT" }, "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15271,9 +13319,7 @@ "license": "MIT" }, "node_modules/micromark/node_modules/micromark-factory-space": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz", - "integrity": "sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15291,9 +13337,7 @@ } }, "node_modules/micromark/node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "version": "2.1.1", "funding": [ { "type": "GitHub Sponsors", @@ -15311,9 +13355,7 @@ } }, "node_modules/micromark/node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "version": "2.0.1", "funding": [ { "type": "GitHub Sponsors", @@ -15328,8 +13370,6 @@ }, "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "license": "MIT", "dependencies": { "braces": "^3.0.3", @@ -15341,8 +13381,6 @@ }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -15353,8 +13391,6 @@ }, "node_modules/mime-db": { "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -15362,8 +13398,6 @@ }, "node_modules/mime-types": { "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "license": "MIT", "dependencies": { "mime-db": "~1.33.0" @@ -15374,8 +13408,6 @@ }, "node_modules/mimic-fn": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "license": "MIT", "engines": { "node": ">=6" @@ -15383,8 +13415,6 @@ }, "node_modules/mimic-response": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", - "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -15395,8 +13425,6 @@ }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -15405,8 +13433,6 @@ }, "node_modules/mini-css-extract-plugin": { "version": "2.9.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", - "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", "license": "MIT", "dependencies": { "schema-utils": "^4.0.0", @@ -15425,14 +13451,10 @@ }, "node_modules/minimalistic-assert": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", "license": "ISC" }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" @@ -15443,8 +13465,6 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" @@ -15452,8 +13472,6 @@ }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -15467,8 +13485,6 @@ }, "node_modules/mrmime": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "license": "MIT", "engines": { "node": ">=10" @@ -15476,14 +13492,10 @@ }, "node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/multicast-dns": { "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", "license": "MIT", "dependencies": { "dns-packet": "^5.2.2", @@ -15494,9 +13506,7 @@ } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", "funding": [ { "type": "github", @@ -15513,15 +13523,11 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "devOptional": true, "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -15529,14 +13535,10 @@ }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "license": "MIT" }, "node_modules/no-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", "license": "MIT", "dependencies": { "lower-case": "^2.0.2", @@ -15544,9 +13546,7 @@ } }, "node_modules/node-emoji": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz", - "integrity": "sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==", + "version": "2.2.0", "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.6.0", @@ -15560,23 +13560,17 @@ }, "node_modules/node-forge": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "license": "(BSD-3-Clause OR GPL-2.0)", "engines": { "node": ">= 6.13.0" } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", "license": "MIT" }, "node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -15591,8 +13585,6 @@ }, "node_modules/normalize-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15600,8 +13592,6 @@ }, "node_modules/normalize-range": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -15609,8 +13599,6 @@ }, "node_modules/normalize-url": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", "license": "MIT", "engines": { "node": ">=14.16" @@ -15621,8 +13609,6 @@ }, "node_modules/npm-run-path": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "license": "MIT", "dependencies": { "path-key": "^3.0.0" @@ -15633,14 +13619,10 @@ }, "node_modules/nprogress": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", "license": "MIT" }, "node_modules/nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" @@ -15651,8 +13633,6 @@ }, "node_modules/null-loader": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-4.0.1.tgz", - "integrity": "sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==", "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", @@ -15671,8 +13651,6 @@ }, "node_modules/null-loader/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", @@ -15689,17 +13667,13 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "version": "1.13.4", "license": "MIT", "engines": { "node": ">= 0.4" @@ -15710,22 +13684,20 @@ }, "node_modules/object-keys": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -15737,8 +13709,6 @@ }, "node_modules/object.entries": { "version": "1.1.8", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", - "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15752,8 +13722,6 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15771,8 +13739,6 @@ }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -15785,13 +13751,12 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -15804,14 +13769,10 @@ }, "node_modules/obuf": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "license": "MIT", "dependencies": { "ee-first": "1.1.1" @@ -15822,8 +13783,6 @@ }, "node_modules/on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -15831,8 +13790,6 @@ }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "license": "ISC", "dependencies": { "wrappy": "1" @@ -15840,8 +13797,6 @@ }, "node_modules/onetime": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" @@ -15855,8 +13810,6 @@ }, "node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", @@ -15872,8 +13825,6 @@ }, "node_modules/opener": { "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" @@ -15881,8 +13832,6 @@ }, "node_modules/optionator": { "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "devOptional": true, "license": "MIT", "dependencies": { @@ -15897,10 +13846,24 @@ "node": ">= 0.8.0" } }, + "node_modules/own-keys": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-cancelable": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", "license": "MIT", "engines": { "node": ">=12.20" @@ -15908,8 +13871,6 @@ }, "node_modules/p-limit": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", "license": "MIT", "dependencies": { "yocto-queue": "^1.0.0" @@ -15923,8 +13884,6 @@ }, "node_modules/p-locate": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", - "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", "license": "MIT", "dependencies": { "p-limit": "^4.0.0" @@ -15938,8 +13897,6 @@ }, "node_modules/p-map": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" @@ -15953,8 +13910,6 @@ }, "node_modules/p-retry": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", "license": "MIT", "dependencies": { "@types/retry": "0.12.0", @@ -15966,8 +13921,6 @@ }, "node_modules/p-try": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "license": "MIT", "engines": { "node": ">=6" @@ -15975,8 +13928,6 @@ }, "node_modules/package-json": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", - "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", "license": "MIT", "dependencies": { "got": "^12.1.0", @@ -15993,8 +13944,6 @@ }, "node_modules/param-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", "license": "MIT", "dependencies": { "dot-case": "^3.0.4", @@ -16003,8 +13952,6 @@ }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", "dependencies": { "callsites": "^3.0.0" @@ -16014,13 +13961,10 @@ } }, "node_modules/parse-entities": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", - "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "version": "4.0.2", "license": "MIT", "dependencies": { "@types/unist": "^2.0.0", - "character-entities": "^2.0.0", "character-entities-legacy": "^3.0.0", "character-reference-invalid": "^2.0.0", "decode-named-character-reference": "^1.0.0", @@ -16035,14 +13979,10 @@ }, "node_modules/parse-entities/node_modules/@types/unist": { "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", "license": "MIT" }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", @@ -16059,14 +13999,10 @@ }, "node_modules/parse-numeric-range": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", "license": "ISC" }, "node_modules/parse5": { "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", "license": "MIT", "dependencies": { "entities": "^4.5.0" @@ -16077,8 +14013,6 @@ }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", "license": "MIT", "dependencies": { "domhandler": "^5.0.3", @@ -16090,8 +14024,6 @@ }, "node_modules/parse5-parser-stream": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", "license": "MIT", "dependencies": { "parse5": "^7.0.0" @@ -16102,8 +14034,6 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -16111,8 +14041,6 @@ }, "node_modules/pascal-case": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", "license": "MIT", "dependencies": { "no-case": "^3.0.4", @@ -16121,8 +14049,6 @@ }, "node_modules/path-exists": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", - "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -16130,8 +14056,6 @@ }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -16139,14 +14063,10 @@ }, "node_modules/path-is-inside": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", "license": "(WTFPL OR MIT)" }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", "engines": { "node": ">=8" @@ -16154,14 +14074,10 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "license": "MIT" }, "node_modules/path-to-regexp": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", - "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", "license": "MIT", "dependencies": { "isarray": "0.0.1" @@ -16169,8 +14085,6 @@ }, "node_modules/path-type": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "license": "MIT", "engines": { "node": ">=8" @@ -16178,14 +14092,10 @@ }, "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -16196,8 +14106,6 @@ }, "node_modules/pkg-dir": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", - "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", "license": "MIT", "dependencies": { "find-up": "^6.3.0" @@ -16211,8 +14119,6 @@ }, "node_modules/pkg-up": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "license": "MIT", "dependencies": { "find-up": "^3.0.0" @@ -16223,8 +14129,6 @@ }, "node_modules/pkg-up/node_modules/find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "license": "MIT", "dependencies": { "locate-path": "^3.0.0" @@ -16235,8 +14139,6 @@ }, "node_modules/pkg-up/node_modules/locate-path": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "license": "MIT", "dependencies": { "p-locate": "^3.0.0", @@ -16248,8 +14150,6 @@ }, "node_modules/pkg-up/node_modules/p-limit": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "license": "MIT", "dependencies": { "p-try": "^2.0.0" @@ -16263,8 +14163,6 @@ }, "node_modules/pkg-up/node_modules/p-locate": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "license": "MIT", "dependencies": { "p-limit": "^2.0.0" @@ -16275,8 +14173,6 @@ }, "node_modules/pkg-up/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "license": "MIT", "engines": { "node": ">=4" @@ -16291,9 +14187,7 @@ } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", "dev": true, "license": "MIT", "engines": { @@ -16301,9 +14195,7 @@ } }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.5.2", "funding": [ { "type": "opencollective", @@ -16320,18 +14212,50 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "7.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-calc": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz", - "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==", "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.11", @@ -16344,10 +14268,96 @@ "postcss": "^8.2.2" } }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "7.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "10.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "10.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/postcss-colormin": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.1.0.tgz", - "integrity": "sha512-x9yX7DOxeMAR+BgGVnNSAxmAj98NX/YxEMNFP+SDCEeNLb2r3i6Hh1ksMsnW8Ub5SLCpbescQqn9YEbE9554Sw==", "license": "MIT", "dependencies": { "browserslist": "^4.23.0", @@ -16364,8 +14374,6 @@ }, "node_modules/postcss-convert-values": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.1.0.tgz", - "integrity": "sha512-zx8IwP/ts9WvUM6NkVSkiU902QZL1bwPhaVaLynPtCsOTqp+ZKbNi+s6XJg3rfqpKGA/oc7Oxk5t8pOQJcwl/w==", "license": "MIT", "dependencies": { "browserslist": "^4.23.0", @@ -16378,10 +14386,132 @@ "postcss": "^8.4.31" } }, + "node_modules/postcss-custom-media": { + "version": "11.0.5", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-properties": { + "version": "14.0.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "8.0.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/cascade-layer-name-parser": "^2.0.4", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "9.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-discard-comments": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.2.tgz", - "integrity": "sha512-65w/uIqhSBBfQmYnG92FO1mWZjJ4GL5b8atm5Yw2UgrwD7HiNiSSNwJor1eCFGzUgYnN/iIknhNRVqjrrpuglw==", "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" @@ -16392,8 +14522,6 @@ }, "node_modules/postcss-discard-duplicates": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.3.tgz", - "integrity": "sha512-+JA0DCvc5XvFAxwx6f/e68gQu/7Z9ud584VLmcgto28eB8FqSFZwtrLwB5Kcp70eIoWP/HXqz4wpo8rD8gpsTw==", "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" @@ -16404,8 +14532,6 @@ }, "node_modules/postcss-discard-empty": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.3.tgz", - "integrity": "sha512-znyno9cHKQsK6PtxL5D19Fj9uwSzC2mB74cpT66fhgOadEUPyXFkbgwm5tvc3bt3NAy8ltE5MrghxovZRVnOjQ==", "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" @@ -16416,8 +14542,6 @@ }, "node_modules/postcss-discard-overridden": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.2.tgz", - "integrity": "sha512-j87xzI4LUggC5zND7KdjsI25APtyMuynXZSujByMaav2roV6OZX+8AaCUcZSWqckZpjAjRyFDdpqybgjFO0HJQ==", "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" @@ -16428,8 +14552,6 @@ }, "node_modules/postcss-discard-unused": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-6.0.5.tgz", - "integrity": "sha512-wHalBlRHkaNnNwfC8z+ppX57VhvS+HWgjW508esjdaEYr3Mx7Gnn2xA4R/CKf5+Z9S5qsqC+Uzh4ueENWwCVUA==", "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" @@ -16441,10 +14563,179 @@ "postcss": "^8.4.31" } }, + "node_modules/postcss-double-position-gradients": { + "version": "6.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "10.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-focus-within": { + "version": "9.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "6.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-image-set-function": { + "version": "7.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/utilities": "^2.0.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-lab-function": { + "version": "7.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/css-color-parser": "^3.0.7", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/utilities": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/postcss-loader": { "version": "7.3.4", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.4.tgz", - "integrity": "sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==", "license": "MIT", "dependencies": { "cosmiconfig": "^8.3.5", @@ -16463,10 +14754,31 @@ "webpack": "^5.0.0" } }, + "node_modules/postcss-logical": { + "version": "8.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/postcss-merge-idents": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-6.0.3.tgz", - "integrity": "sha512-1oIoAsODUs6IHQZkLQGO15uGEbK3EAl5wi9SS8hs45VgsxQfMnxvt+L+zIr7ifZFIH14cfAeVe2uCTa+SPRa3g==", "license": "MIT", "dependencies": { "cssnano-utils": "^4.0.2", @@ -16481,8 +14793,6 @@ }, "node_modules/postcss-merge-longhand": { "version": "6.0.5", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.5.tgz", - "integrity": "sha512-5LOiordeTfi64QhICp07nzzuTDjNSO8g5Ksdibt44d+uvIIAE1oZdRn8y/W5ZtYgRH/lnLDlvi9F8btZcVzu3w==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", @@ -16497,8 +14807,6 @@ }, "node_modules/postcss-merge-rules": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.1.1.tgz", - "integrity": "sha512-KOdWF0gju31AQPZiD+2Ar9Qjowz1LTChSjFFbS+e2sFgc4uHOp3ZvVX4sNeTlk0w2O31ecFGgrFzhO0RSWbWwQ==", "license": "MIT", "dependencies": { "browserslist": "^4.23.0", @@ -16515,8 +14823,6 @@ }, "node_modules/postcss-minify-font-values": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.1.0.tgz", - "integrity": "sha512-gklfI/n+9rTh8nYaSJXlCo3nOKqMNkxuGpTn/Qm0gstL3ywTr9/WRKznE+oy6fvfolH6dF+QM4nCo8yPLdvGJg==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16530,8 +14836,6 @@ }, "node_modules/postcss-minify-gradients": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.3.tgz", - "integrity": "sha512-4KXAHrYlzF0Rr7uc4VrfwDJ2ajrtNEpNEuLxFgwkhFZ56/7gaE4Nr49nLsQDZyUe+ds+kEhf+YAUolJiYXF8+Q==", "license": "MIT", "dependencies": { "colord": "^2.9.3", @@ -16547,8 +14851,6 @@ }, "node_modules/postcss-minify-params": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.1.0.tgz", - "integrity": "sha512-bmSKnDtyyE8ujHQK0RQJDIKhQ20Jq1LYiez54WiaOoBtcSuflfK3Nm596LvbtlFcpipMjgClQGyGr7GAs+H1uA==", "license": "MIT", "dependencies": { "browserslist": "^4.23.0", @@ -16564,8 +14866,6 @@ }, "node_modules/postcss-minify-selectors": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.4.tgz", - "integrity": "sha512-L8dZSwNLgK7pjTto9PzWRoMbnLq5vsZSTu8+j1P/2GB8qdtGQfn+K1uSvFgYvgh83cbyxT5m43ZZhUMTJDSClQ==", "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" @@ -16579,8 +14879,6 @@ }, "node_modules/postcss-modules-extract-imports": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", - "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "license": "ISC", "engines": { "node": "^10 || ^12 || >= 14" @@ -16590,13 +14888,11 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", - "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "version": "4.2.0", "license": "MIT", "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -16606,13 +14902,22 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-modules-scope": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", - "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "version": "3.2.1", "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -16621,10 +14926,19 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-modules-values": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "license": "ISC", "dependencies": { "icss-utils": "^5.0.0" @@ -16636,10 +14950,84 @@ "postcss": "^8.1.0" } }, + "node_modules/postcss-nesting": { + "version": "13.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/selector-resolve-nested": "^3.0.0", + "@csstools/selector-specificity": "^5.0.0", + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-resolve-nested": { + "version": "3.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-normalize-charset": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.2.tgz", - "integrity": "sha512-a8N9czmdnrjPHa3DeFlwqst5eaL5W8jYu3EBbTTkI5FHkfMhFZh1EGbku6jhHhIzTA6tquI2P42NtZ59M/H/kQ==", "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" @@ -16650,8 +15038,6 @@ }, "node_modules/postcss-normalize-display-values": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.2.tgz", - "integrity": "sha512-8H04Mxsb82ON/aAkPeq8kcBbAtI5Q2a64X/mnRRfPXBq7XeogoQvReqxEfc0B4WPq1KimjezNC8flUtC3Qz6jg==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16665,8 +15051,6 @@ }, "node_modules/postcss-normalize-positions": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.2.tgz", - "integrity": "sha512-/JFzI441OAB9O7VnLA+RtSNZvQ0NCFZDOtp6QPFo1iIyawyXg0YI3CYM9HBy1WvwCRHnPep/BvI1+dGPKoXx/Q==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16680,8 +15064,6 @@ }, "node_modules/postcss-normalize-repeat-style": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.2.tgz", - "integrity": "sha512-YdCgsfHkJ2jEXwR4RR3Tm/iOxSfdRt7jplS6XRh9Js9PyCR/aka/FCb6TuHT2U8gQubbm/mPmF6L7FY9d79VwQ==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16695,8 +15077,6 @@ }, "node_modules/postcss-normalize-string": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.2.tgz", - "integrity": "sha512-vQZIivlxlfqqMp4L9PZsFE4YUkWniziKjQWUtsxUiVsSSPelQydwS8Wwcuw0+83ZjPWNTl02oxlIvXsmmG+CiQ==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16710,8 +15090,6 @@ }, "node_modules/postcss-normalize-timing-functions": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.2.tgz", - "integrity": "sha512-a+YrtMox4TBtId/AEwbA03VcJgtyW4dGBizPl7e88cTFULYsprgHWTbfyjSLyHeBcK/Q9JhXkt2ZXiwaVHoMzA==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16725,8 +15103,6 @@ }, "node_modules/postcss-normalize-unicode": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.1.0.tgz", - "integrity": "sha512-QVC5TQHsVj33otj8/JD869Ndr5Xcc/+fwRh4HAsFsAeygQQXm+0PySrKbr/8tkDKzW+EVT3QkqZMfFrGiossDg==", "license": "MIT", "dependencies": { "browserslist": "^4.23.0", @@ -16741,8 +15117,6 @@ }, "node_modules/postcss-normalize-url": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.2.tgz", - "integrity": "sha512-kVNcWhCeKAzZ8B4pv/DnrU1wNh458zBNp8dh4y5hhxih5RZQ12QWMuQrDgPRw3LRl8mN9vOVfHl7uhvHYMoXsQ==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16756,8 +15130,6 @@ }, "node_modules/postcss-normalize-whitespace": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.2.tgz", - "integrity": "sha512-sXZ2Nj1icbJOKmdjXVT9pnyHQKiSAyuNQHSgRCUgThn2388Y9cGVDR+E9J9iAYbSbLHI+UUwLVl1Wzco/zgv0Q==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16769,10 +15141,28 @@ "postcss": "^8.4.31" } }, + "node_modules/postcss-opacity-percentage": { + "version": "3.0.0", + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, "node_modules/postcss-ordered-values": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.2.tgz", - "integrity": "sha512-VRZSOB+JU32RsEAQrO94QPkClGPKJEL/Z9PCBImXMhIeK5KAYo6slP/hBYlLgrCjFxyqvn5VC81tycFEDBLG1Q==", "license": "MIT", "dependencies": { "cssnano-utils": "^4.0.2", @@ -16785,10 +15175,180 @@ "postcss": "^8.4.31" } }, + "node_modules/postcss-overflow-shorthand": { + "version": "6.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "license": "MIT", + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "10.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-preset-env": { + "version": "10.1.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "@csstools/postcss-cascade-layers": "^5.0.1", + "@csstools/postcss-color-function": "^4.0.7", + "@csstools/postcss-color-mix-function": "^3.0.7", + "@csstools/postcss-content-alt-text": "^2.0.4", + "@csstools/postcss-exponential-functions": "^2.0.6", + "@csstools/postcss-font-format-keywords": "^4.0.0", + "@csstools/postcss-gamut-mapping": "^2.0.7", + "@csstools/postcss-gradients-interpolation-method": "^5.0.7", + "@csstools/postcss-hwb-function": "^4.0.7", + "@csstools/postcss-ic-unit": "^4.0.0", + "@csstools/postcss-initial": "^2.0.0", + "@csstools/postcss-is-pseudo-class": "^5.0.1", + "@csstools/postcss-light-dark-function": "^2.0.7", + "@csstools/postcss-logical-float-and-clear": "^3.0.0", + "@csstools/postcss-logical-overflow": "^2.0.0", + "@csstools/postcss-logical-overscroll-behavior": "^2.0.0", + "@csstools/postcss-logical-resize": "^3.0.0", + "@csstools/postcss-logical-viewport-units": "^3.0.3", + "@csstools/postcss-media-minmax": "^2.0.6", + "@csstools/postcss-media-queries-aspect-ratio-number-values": "^3.0.4", + "@csstools/postcss-nested-calc": "^4.0.0", + "@csstools/postcss-normalize-display-values": "^4.0.0", + "@csstools/postcss-oklab-function": "^4.0.7", + "@csstools/postcss-progressive-custom-properties": "^4.0.0", + "@csstools/postcss-random-function": "^1.0.2", + "@csstools/postcss-relative-color-syntax": "^3.0.7", + "@csstools/postcss-scope-pseudo-class": "^4.0.1", + "@csstools/postcss-sign-functions": "^1.1.1", + "@csstools/postcss-stepped-value-functions": "^4.0.6", + "@csstools/postcss-text-decoration-shorthand": "^4.0.1", + "@csstools/postcss-trigonometric-functions": "^4.0.6", + "@csstools/postcss-unset-value": "^4.0.0", + "autoprefixer": "^10.4.19", + "browserslist": "^4.23.1", + "css-blank-pseudo": "^7.0.1", + "css-has-pseudo": "^7.0.2", + "css-prefers-color-scheme": "^10.0.0", + "cssdb": "^8.2.3", + "postcss-attribute-case-insensitive": "^7.0.1", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^7.0.7", + "postcss-color-hex-alpha": "^10.0.0", + "postcss-color-rebeccapurple": "^10.0.0", + "postcss-custom-media": "^11.0.5", + "postcss-custom-properties": "^14.0.4", + "postcss-custom-selectors": "^8.0.4", + "postcss-dir-pseudo-class": "^9.0.1", + "postcss-double-position-gradients": "^6.0.0", + "postcss-focus-visible": "^10.0.1", + "postcss-focus-within": "^9.0.1", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^6.0.0", + "postcss-image-set-function": "^7.0.0", + "postcss-lab-function": "^7.0.7", + "postcss-logical": "^8.0.0", + "postcss-nesting": "^13.0.1", + "postcss-opacity-percentage": "^3.0.0", + "postcss-overflow-shorthand": "^6.0.0", + "postcss-page-break": "^3.0.4", + "postcss-place": "^10.0.0", + "postcss-pseudo-class-any-link": "^10.0.1", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^8.0.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "10.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-reduce-idents": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-6.0.3.tgz", - "integrity": "sha512-G3yCqZDpsNPoQgbDUy3T0E6hqOQ5xigUtBQyrmq3tn2GxlyiL0yyl7H+T8ulQR6kOcHJ9t7/9H4/R2tv8tJbMA==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16802,8 +15362,6 @@ }, "node_modules/postcss-reduce-initial": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.1.0.tgz", - "integrity": "sha512-RarLgBK/CrL1qZags04oKbVbrrVK2wcxhvta3GCxrZO4zveibqbRPmm2VI8sSgCXwoUHEliRSbOfpR0b/VIoiw==", "license": "MIT", "dependencies": { "browserslist": "^4.23.0", @@ -16818,8 +15376,6 @@ }, "node_modules/postcss-reduce-transforms": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.2.tgz", - "integrity": "sha512-sB+Ya++3Xj1WaT9+5LOOdirAxP7dJZms3GRcYheSPi1PiTMigsxHAdkrbItHxwYHr4kt1zL7mmcHstgMYT+aiA==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0" @@ -16831,17 +15387,20 @@ "postcss": "^8.4.31" } }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "license": "MIT", + "peerDependencies": { + "postcss": "^8.0.3" + } + }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", "dev": true, "license": "MIT" }, "node_modules/postcss-safe-parser": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "dev": true, "license": "MIT", "engines": { @@ -16855,10 +15414,42 @@ "postcss": "^8.3.3" } }, + "node_modules/postcss-selector-not": { + "version": "8.0.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/postcss-selector-parser": { "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16870,8 +15461,6 @@ }, "node_modules/postcss-sort-media-queries": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-5.2.0.tgz", - "integrity": "sha512-AZ5fDMLD8SldlAYlvi8NIqo0+Z8xnXU2ia0jxmuhxAU+Lqt9K+AlmLNJ/zWEnE9x+Zx3qL3+1K20ATgNOr3fAA==", "license": "MIT", "dependencies": { "sort-css-media-queries": "2.2.0" @@ -16885,8 +15474,6 @@ }, "node_modules/postcss-svgo": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.3.tgz", - "integrity": "sha512-dlrahRmxP22bX6iKEjOM+c8/1p+81asjKT+V5lrgOH944ryx/OHpclnIbGsKVd3uWOXFLYJwCVf0eEkJGvO96g==", "license": "MIT", "dependencies": { "postcss-value-parser": "^4.2.0", @@ -16901,8 +15488,6 @@ }, "node_modules/postcss-unique-selectors": { "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.4.tgz", - "integrity": "sha512-K38OCaIrO8+PzpArzkLKB42dSARtC2tmG6PvD4b1o1Q2E9Os8jzfWFfSy/rixsHwohtsDdFtAWGjFVFUdwYaMg==", "license": "MIT", "dependencies": { "postcss-selector-parser": "^6.0.16" @@ -16916,14 +15501,10 @@ }, "node_modules/postcss-value-parser": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "license": "MIT" }, "node_modules/postcss-zindex": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-6.0.2.tgz", - "integrity": "sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg==", "license": "MIT", "engines": { "node": "^14 || ^16 || >=18.0" @@ -16933,9 +15514,7 @@ } }, "node_modules/preact": { - "version": "10.24.3", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.24.3.tgz", - "integrity": "sha512-Z2dPnBnMUfyQfSQ+GBdsGa16hz35YmLmtTLhM169uW944hYL6xzTYkJjC07j+Wosz733pMWx0fgON3JNw1jJQA==", + "version": "10.25.4", "license": "MIT", "funding": { "type": "opencollective", @@ -16944,8 +15523,6 @@ }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "devOptional": true, "license": "MIT", "engines": { @@ -16954,8 +15531,6 @@ }, "node_modules/prettier": { "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true, "license": "MIT", "bin": { @@ -16970,8 +15545,6 @@ }, "node_modules/pretty-error": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "license": "MIT", "dependencies": { "lodash": "^4.17.20", @@ -16980,17 +15553,13 @@ }, "node_modules/pretty-time": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/prism-react-renderer": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz", - "integrity": "sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==", + "version": "2.4.1", "license": "MIT", "dependencies": { "@types/prismjs": "^1.26.0", @@ -17002,17 +15571,15 @@ }, "node_modules/prism-react-renderer/node_modules/clsx": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", + "integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==", "license": "MIT", "engines": { "node": ">=6" @@ -17020,14 +15587,10 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "license": "MIT" }, "node_modules/progress": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "devOptional": true, "license": "MIT", "engines": { @@ -17036,8 +15599,6 @@ }, "node_modules/prompts": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", "license": "MIT", "dependencies": { "kleur": "^3.0.3", @@ -17049,8 +15610,6 @@ }, "node_modules/prop-types": { "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", @@ -17060,8 +15619,6 @@ }, "node_modules/property-information": { "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", "license": "MIT", "funding": { "type": "github", @@ -17070,14 +15627,10 @@ }, "node_modules/proto-list": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", "license": "ISC" }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -17089,8 +15642,6 @@ }, "node_modules/proxy-addr/node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "license": "MIT", "engines": { "node": ">= 0.10" @@ -17098,8 +15649,6 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", "engines": { "node": ">=6" @@ -17107,8 +15656,6 @@ }, "node_modules/pupa": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", "license": "MIT", "dependencies": { "escape-goat": "^4.0.0" @@ -17122,8 +15669,6 @@ }, "node_modules/qs": { "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.6" @@ -17137,8 +15682,6 @@ }, "node_modules/queue": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "license": "MIT", "dependencies": { "inherits": "~2.0.3" @@ -17146,8 +15689,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "funding": [ { "type": "github", @@ -17166,8 +15707,6 @@ }, "node_modules/quick-lru": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "license": "MIT", "engines": { "node": ">=10" @@ -17178,8 +15717,6 @@ }, "node_modules/randombytes": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" @@ -17187,8 +15724,6 @@ }, "node_modules/range-parser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -17196,8 +15731,6 @@ }, "node_modules/raw-body": { "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "license": "MIT", "dependencies": { "bytes": "3.1.2", @@ -17211,29 +15744,13 @@ }, "node_modules/raw-body/node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", @@ -17247,8 +15764,6 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -17256,8 +15771,6 @@ }, "node_modules/react": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" @@ -17268,8 +15781,6 @@ }, "node_modules/react-dev-utils": { "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.16.0", @@ -17303,8 +15814,6 @@ }, "node_modules/react-dev-utils/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "license": "MIT", "dependencies": { "locate-path": "^6.0.0", @@ -17319,8 +15828,6 @@ }, "node_modules/react-dev-utils/node_modules/loader-utils": { "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", "license": "MIT", "engines": { "node": ">= 12.13.0" @@ -17328,8 +15835,6 @@ }, "node_modules/react-dev-utils/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "license": "MIT", "dependencies": { "p-locate": "^5.0.0" @@ -17343,8 +15848,6 @@ }, "node_modules/react-dev-utils/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" @@ -17358,8 +15861,6 @@ }, "node_modules/react-dev-utils/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "license": "MIT", "dependencies": { "p-limit": "^3.0.2" @@ -17373,8 +15874,6 @@ }, "node_modules/react-dev-utils/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "license": "MIT", "engines": { "node": ">=8" @@ -17382,8 +15881,6 @@ }, "node_modules/react-dev-utils/node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "license": "MIT", "engines": { "node": ">=10" @@ -17394,8 +15891,6 @@ }, "node_modules/react-dom": { "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", @@ -17407,20 +15902,15 @@ }, "node_modules/react-error-overlay": { "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", "license": "MIT" }, "node_modules/react-fast-compare": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", "license": "MIT" }, "node_modules/react-helmet-async": { + "name": "@slorber/react-helmet-async", "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.12.5", @@ -17430,20 +15920,16 @@ "shallowequal": "^1.1.0" }, "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/react-is": { "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "license": "MIT" }, "node_modules/react-json-view-lite": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", "license": "MIT", "engines": { "node": ">=14" @@ -17455,8 +15941,6 @@ "node_modules/react-loadable": { "name": "@docusaurus/react-loadable", "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", - "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "license": "MIT", "dependencies": { "@types/react": "*" @@ -17467,8 +15951,6 @@ }, "node_modules/react-loadable-ssr-addon-v5-slorber": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.3" @@ -17483,8 +15965,6 @@ }, "node_modules/react-router": { "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13", @@ -17503,8 +15983,6 @@ }, "node_modules/react-router-config": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2" @@ -17516,8 +15994,6 @@ }, "node_modules/react-router-dom": { "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13", @@ -17534,8 +16010,6 @@ }, "node_modules/read-pkg": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -17553,8 +16027,6 @@ }, "node_modules/read-pkg-up": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17571,8 +16043,6 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { @@ -17588,8 +16058,6 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "license": "MIT", "dependencies": { @@ -17604,8 +16072,6 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -17620,8 +16086,6 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "license": "MIT", "dependencies": { @@ -17636,8 +16100,6 @@ }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { @@ -17646,8 +16108,6 @@ }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -17659,8 +16119,6 @@ }, "node_modules/read-pkg-up/node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "license": "MIT", "engines": { @@ -17672,8 +16130,6 @@ }, "node_modules/read-pkg/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -17685,8 +16141,6 @@ }, "node_modules/readable-stream": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "license": "MIT", "dependencies": { "inherits": "^2.0.3", @@ -17699,8 +16153,6 @@ }, "node_modules/readdirp": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "license": "MIT", "dependencies": { "picomatch": "^2.2.1" @@ -17711,14 +16163,10 @@ }, "node_modules/reading-time": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", "license": "MIT" }, "node_modules/rechoir": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", "dependencies": { "resolve": "^1.1.6" }, @@ -17728,8 +16176,6 @@ }, "node_modules/recma-build-jsx": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", - "integrity": "sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -17743,8 +16189,6 @@ }, "node_modules/recma-jsx": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", - "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", "license": "MIT", "dependencies": { "acorn-jsx": "^5.0.0", @@ -17760,8 +16204,6 @@ }, "node_modules/recma-parse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz", - "integrity": "sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -17776,8 +16218,6 @@ }, "node_modules/recma-stringify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", - "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -17792,8 +16232,6 @@ }, "node_modules/recursive-readdir": { "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", "license": "MIT", "dependencies": { "minimatch": "^3.0.5" @@ -17804,8 +16242,6 @@ }, "node_modules/redent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, "license": "MIT", "dependencies": { @@ -17821,8 +16257,6 @@ }, "node_modules/redent/node_modules/indent-string": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, "license": "MIT", "engines": { @@ -17833,19 +16267,18 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.10", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "es-abstract": "^1.23.9", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -17856,14 +16289,10 @@ }, "node_modules/regenerate": { "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "license": "MIT" }, "node_modules/regenerate-unicode-properties": { "version": "10.2.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", - "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", "license": "MIT", "dependencies": { "regenerate": "^1.4.2" @@ -17874,29 +16303,25 @@ }, "node_modules/regenerator-runtime": { "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", "license": "MIT" }, "node_modules/regenerator-transform": { "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.8.4" } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "version": "1.5.4", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "set-function-name": "^2.0.2" }, "engines": { @@ -17908,8 +16333,6 @@ }, "node_modules/regexpp": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "devOptional": true, "license": "MIT", "engines": { @@ -17920,15 +16343,13 @@ } }, "node_modules/regexpu-core": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", - "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", + "version": "6.2.0", "license": "MIT", "dependencies": { "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.2.0", "regjsgen": "^0.8.0", - "regjsparser": "^0.11.0", + "regjsparser": "^0.12.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -17937,9 +16358,7 @@ } }, "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "version": "5.1.0", "license": "MIT", "dependencies": { "@pnpm/npm-conf": "^2.1.0" @@ -17950,8 +16369,6 @@ }, "node_modules/registry-url": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", - "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", "license": "MIT", "dependencies": { "rc": "1.2.8" @@ -17965,14 +16382,10 @@ }, "node_modules/regjsgen": { "version": "0.8.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz", - "integrity": "sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==", + "version": "0.12.0", "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.0.2" @@ -17981,10 +16394,18 @@ "regjsparser": "bin/parser" } }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "3.0.2", + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/rehype-raw": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/rehype-raw/-/rehype-raw-7.0.0.tgz", - "integrity": "sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -17998,8 +16419,6 @@ }, "node_modules/rehype-recma": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", - "integrity": "sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -18013,17 +16432,13 @@ }, "node_modules/relateurl": { "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/remark-directive": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz", - "integrity": "sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==", + "version": "3.0.1", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -18038,8 +16453,6 @@ }, "node_modules/remark-emoji": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-4.0.1.tgz", - "integrity": "sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.2", @@ -18054,8 +16467,6 @@ }, "node_modules/remark-frontmatter": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-5.0.0.tgz", - "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -18069,9 +16480,7 @@ } }, "node_modules/remark-gfm": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", - "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "version": "4.0.1", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -18088,8 +16497,6 @@ }, "node_modules/remark-mdx": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", - "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", "license": "MIT", "dependencies": { "mdast-util-mdx": "^3.0.0", @@ -18102,8 +16509,6 @@ }, "node_modules/remark-parse": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", - "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -18118,8 +16523,6 @@ }, "node_modules/remark-rehype": { "version": "11.1.1", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", - "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -18135,8 +16538,6 @@ }, "node_modules/remark-stringify": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", - "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -18150,8 +16551,6 @@ }, "node_modules/renderkid": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "license": "MIT", "dependencies": { "css-select": "^4.1.3", @@ -18163,8 +16562,6 @@ }, "node_modules/renderkid/node_modules/css-select": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", @@ -18179,8 +16576,6 @@ }, "node_modules/renderkid/node_modules/dom-serializer": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", @@ -18193,8 +16588,6 @@ }, "node_modules/renderkid/node_modules/domhandler": { "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" @@ -18208,8 +16601,6 @@ }, "node_modules/renderkid/node_modules/domutils": { "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", @@ -18222,8 +16613,6 @@ }, "node_modules/renderkid/node_modules/entities": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" @@ -18231,8 +16620,6 @@ }, "node_modules/renderkid/node_modules/htmlparser2": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -18250,8 +16637,6 @@ }, "node_modules/repeat-string": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", "license": "MIT", "engines": { "node": ">=0.10" @@ -18259,8 +16644,6 @@ }, "node_modules/require-from-string": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -18268,45 +16651,38 @@ }, "node_modules/require-like": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", "engines": { "node": "*" } }, "node_modules/requires-port": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.10", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-alpn": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "license": "MIT", "engines": { "node": ">=4" @@ -18314,14 +16690,10 @@ }, "node_modules/resolve-pathname": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", "license": "MIT" }, "node_modules/responselike": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", - "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" @@ -18335,8 +16707,6 @@ }, "node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "license": "MIT", "engines": { "node": ">= 4" @@ -18344,8 +16714,6 @@ }, "node_modules/reusify": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "license": "MIT", "engines": { "iojs": ">=1.0.0", @@ -18354,9 +16722,6 @@ }, "node_modules/rimraf": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", "license": "ISC", "dependencies": { "glob": "^7.1.3" @@ -18368,16 +16733,8 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rtl-detect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", - "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==", - "license": "BSD-3-Clause" - }, "node_modules/rtlcss": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", - "integrity": "sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==", "license": "MIT", "dependencies": { "escalade": "^3.1.1", @@ -18394,8 +16751,6 @@ }, "node_modules/run-parallel": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "funding": [ { "type": "github", @@ -18416,15 +16771,14 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -18436,15 +16790,11 @@ }, "node_modules/safe-array-concat/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -18461,16 +16811,34 @@ ], "license": "MIT" }, - "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "node_modules/safe-push-apply": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -18481,29 +16849,21 @@ }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, "node_modules/sax": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", "license": "ISC" }, "node_modules/scheduler": { "version": "0.23.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", - "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } }, "node_modules/schema-utils": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", - "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "version": "4.3.0", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -18512,7 +16872,7 @@ "ajv-keywords": "^5.1.0" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 10.13.0" }, "funding": { "type": "opencollective", @@ -18521,8 +16881,6 @@ }, "node_modules/schema-utils/node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -18537,8 +16895,6 @@ }, "node_modules/schema-utils/node_modules/ajv-keywords": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" @@ -18549,21 +16905,15 @@ }, "node_modules/schema-utils/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "license": "MIT" }, "node_modules/search-insights": { - "version": "2.17.2", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.2.tgz", - "integrity": "sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==", + "version": "2.17.3", "license": "MIT", "peer": true }, "node_modules/section-matter": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", "license": "MIT", "dependencies": { "extend-shallow": "^2.0.1", @@ -18575,14 +16925,10 @@ }, "node_modules/select-hose": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", "license": "MIT" }, "node_modules/selfsigned": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "license": "MIT", "dependencies": { "@types/node-forge": "^1.3.0", @@ -18593,9 +16939,7 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -18606,8 +16950,6 @@ }, "node_modules/semver-diff": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", - "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -18621,8 +16963,6 @@ }, "node_modules/send": { "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", @@ -18645,8 +16985,6 @@ }, "node_modules/send/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -18654,14 +16992,10 @@ }, "node_modules/send/node_modules/debug/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/send/node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -18669,8 +17003,6 @@ }, "node_modules/send/node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -18678,8 +17010,6 @@ }, "node_modules/serialize-javascript": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" @@ -18687,8 +17017,6 @@ }, "node_modules/serve-handler": { "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", "license": "MIT", "dependencies": { "bytes": "3.0.0", @@ -18702,14 +17030,10 @@ }, "node_modules/serve-handler/node_modules/path-to-regexp": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", - "integrity": "sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==", "license": "MIT" }, "node_modules/serve-index": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", "license": "MIT", "dependencies": { "accepts": "~1.3.4", @@ -18726,8 +17050,6 @@ }, "node_modules/serve-index/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { "ms": "2.0.0" @@ -18735,8 +17057,6 @@ }, "node_modules/serve-index/node_modules/depd": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -18744,8 +17064,6 @@ }, "node_modules/serve-index/node_modules/http-errors": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "license": "MIT", "dependencies": { "depd": "~1.1.2", @@ -18759,26 +17077,18 @@ }, "node_modules/serve-index/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", "license": "ISC" }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", "license": "ISC" }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -18786,8 +17096,6 @@ }, "node_modules/serve-static": { "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", @@ -18801,8 +17109,6 @@ }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", @@ -18818,8 +17124,6 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "license": "MIT", "dependencies": { @@ -18832,16 +17136,25 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, "node_modules/shallow-clone": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "license": "MIT", "dependencies": { "kind-of": "^6.0.2" @@ -18852,14 +17165,10 @@ }, "node_modules/shallowequal": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" @@ -18870,26 +17179,23 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/shell-quote": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", - "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "version": "1.8.2", "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/shelljs": { "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", "license": "BSD-3-Clause", "dependencies": { "glob": "^7.0.0", @@ -18904,15 +17210,61 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -18923,14 +17275,10 @@ }, "node_modules/signal-exit": { "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "license": "ISC" }, "node_modules/sirv": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", - "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", @@ -18943,14 +17291,10 @@ }, "node_modules/sisteransi": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", "license": "MIT" }, "node_modules/sitemap": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz", - "integrity": "sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==", "license": "MIT", "dependencies": { "@types/node": "^17.0.5", @@ -18968,14 +17312,10 @@ }, "node_modules/sitemap/node_modules/@types/node": { "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", "license": "MIT" }, "node_modules/skin-tone": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/skin-tone/-/skin-tone-2.0.0.tgz", - "integrity": "sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==", "license": "MIT", "dependencies": { "unicode-emoji-modifier-base": "^1.0.0" @@ -18986,8 +17326,6 @@ }, "node_modules/slash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "license": "MIT", "engines": { "node": ">=8" @@ -18995,8 +17333,6 @@ }, "node_modules/slice-ansi": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "devOptional": true, "license": "MIT", "dependencies": { @@ -19013,8 +17349,6 @@ }, "node_modules/snake-case": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", - "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", "license": "MIT", "dependencies": { "dot-case": "^3.0.4", @@ -19023,8 +17357,6 @@ }, "node_modules/sockjs": { "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "license": "MIT", "dependencies": { "faye-websocket": "^0.11.3", @@ -19034,8 +17366,6 @@ }, "node_modules/sort-css-media-queries": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", - "integrity": "sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==", "license": "MIT", "engines": { "node": ">= 6.3.0" @@ -19043,8 +17373,6 @@ }, "node_modules/source-map": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "license": "BSD-3-Clause", "engines": { "node": ">= 8" @@ -19052,8 +17380,6 @@ }, "node_modules/source-map-js": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -19061,8 +17387,6 @@ }, "node_modules/source-map-support": { "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", @@ -19071,8 +17395,6 @@ }, "node_modules/source-map-support/node_modules/source-map": { "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -19080,8 +17402,6 @@ }, "node_modules/space-separated-tokens": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", "license": "MIT", "funding": { "type": "github", @@ -19090,8 +17410,6 @@ }, "node_modules/spdx-correct": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -19101,15 +17419,11 @@ }, "node_modules/spdx-exceptions": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -19118,16 +17432,12 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.20", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", - "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "version": "3.0.21", "dev": true, "license": "CC0-1.0" }, "node_modules/spdy": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "license": "MIT", "dependencies": { "debug": "^4.1.0", @@ -19142,8 +17452,6 @@ }, "node_modules/spdy-transport": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "license": "MIT", "dependencies": { "debug": "^4.1.0", @@ -19156,14 +17464,10 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "license": "BSD-3-Clause" }, "node_modules/srcset": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", - "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", "license": "MIT", "engines": { "node": ">=12" @@ -19172,17 +17476,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "license": "MIT" - }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -19190,14 +17485,10 @@ }, "node_modules/std-env": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", - "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", "license": "MIT" }, "node_modules/string_decoder": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" @@ -19205,8 +17496,6 @@ }, "node_modules/string-width": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -19222,8 +17511,6 @@ }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { "node": ">=12" @@ -19234,8 +17521,6 @@ }, "node_modules/string-width/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -19249,8 +17534,6 @@ }, "node_modules/string.prototype.includes": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", - "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", "dev": true, "license": "MIT", "dependencies": { @@ -19263,24 +17546,23 @@ } }, "node_modules/string.prototype.matchall": { - "version": "4.0.11", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", - "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "version": "4.0.12", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "regexp.prototype.flags": "^1.5.2", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", - "side-channel": "^1.0.6" + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -19291,8 +17573,6 @@ }, "node_modules/string.prototype.repeat": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", - "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", "dev": true, "license": "MIT", "dependencies": { @@ -19301,16 +17581,17 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -19320,24 +17601,24 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, "license": "MIT", "dependencies": { @@ -19354,8 +17635,6 @@ }, "node_modules/stringify-entities": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", "license": "MIT", "dependencies": { "character-entities-html4": "^2.0.0", @@ -19368,8 +17647,6 @@ }, "node_modules/stringify-object": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "license": "BSD-2-Clause", "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", @@ -19382,8 +17659,6 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -19394,8 +17669,6 @@ }, "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", "engines": { @@ -19404,8 +17677,6 @@ }, "node_modules/strip-bom-string": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", "license": "MIT", "engines": { "node": ">=0.10.0" @@ -19413,8 +17684,6 @@ }, "node_modules/strip-final-newline": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "license": "MIT", "engines": { "node": ">=6" @@ -19422,8 +17691,6 @@ }, "node_modules/strip-indent": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, "license": "MIT", "dependencies": { @@ -19438,8 +17705,6 @@ }, "node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "license": "MIT", "engines": { "node": ">=8" @@ -19450,15 +17715,11 @@ }, "node_modules/style-search": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true, "license": "ISC" }, "node_modules/style-to-object": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", "license": "MIT", "dependencies": { "inline-style-parser": "0.2.4" @@ -19466,8 +17727,6 @@ }, "node_modules/stylehacks": { "version": "6.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.1.1.tgz", - "integrity": "sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==", "license": "MIT", "dependencies": { "browserslist": "^4.23.0", @@ -19482,8 +17741,6 @@ }, "node_modules/stylelint": { "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, "license": "MIT", "dependencies": { @@ -19539,24 +17796,79 @@ "url": "https://opencollective.com/stylelint" } }, + "node_modules/stylelint/node_modules/@csstools/css-parser-algorithms": { + "version": "2.7.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.4.1" + } + }, + "node_modules/stylelint/node_modules/@csstools/css-tokenizer": { + "version": "2.4.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/stylelint/node_modules/@csstools/media-query-list-parser": { + "version": "2.1.13", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + } + }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true, "license": "MIT" }, "node_modules/stylelint/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, "node_modules/stylelint/node_modules/file-entry-cache": { "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", "dev": true, "license": "MIT", "dependencies": { @@ -19568,8 +17880,6 @@ }, "node_modules/stylelint/node_modules/ignore": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "license": "MIT", "engines": { @@ -19578,8 +17888,6 @@ }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { @@ -19588,8 +17896,6 @@ }, "node_modules/stylelint/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { @@ -19603,8 +17909,6 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -19614,9 +17918,7 @@ } }, "node_modules/supports-hyperlinks": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", - "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { @@ -19627,13 +17929,11 @@ "node": ">=14.18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -19644,20 +17944,14 @@ }, "node_modules/svg-parser": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", "license": "MIT" }, "node_modules/svg-tags": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", "dev": true }, "node_modules/svgo": { "version": "3.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", - "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", @@ -19681,8 +17975,6 @@ }, "node_modules/svgo/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "license": "MIT", "engines": { "node": ">= 10" @@ -19690,8 +17982,6 @@ }, "node_modules/swc-loader": { "version": "0.2.6", - "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.6.tgz", - "integrity": "sha512-9Zi9UP2YmDpgmQVbyOPJClY0dwf58JDyDMQ7uRc4krmc72twNI2fvlBWHLqVekBpPc7h5NJkGVT1zNDxFrqhvg==", "license": "MIT", "dependencies": { "@swc/counter": "^0.1.3" @@ -19702,9 +17992,7 @@ } }, "node_modules/table": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", - "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "version": "6.9.0", "devOptional": true, "license": "BSD-3-Clause", "dependencies": { @@ -19720,8 +18008,6 @@ }, "node_modules/table/node_modules/ajv": { "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "devOptional": true, "license": "MIT", "dependencies": { @@ -19737,22 +18023,16 @@ }, "node_modules/table/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "devOptional": true, "license": "MIT" }, "node_modules/table/node_modules/json-schema-traverse": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "devOptional": true, "license": "MIT" }, "node_modules/table/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "devOptional": true, "license": "MIT", "dependencies": { @@ -19766,17 +18046,13 @@ }, "node_modules/tapable": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/terser": { - "version": "5.36.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", - "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", + "version": "5.38.2", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -19792,16 +18068,14 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.11", "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -19827,8 +18101,6 @@ }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -19839,28 +18111,8 @@ "node": ">= 10.13.0" } }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -19874,8 +18126,6 @@ }, "node_modules/terser/node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -19886,38 +18136,26 @@ }, "node_modules/terser/node_modules/commander": { "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "license": "MIT" }, "node_modules/thunky": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "license": "MIT" }, "node_modules/tiny-invariant": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", "license": "MIT" }, "node_modules/tiny-warning": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "license": "MIT" }, "node_modules/to-regex-range": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "license": "MIT", "dependencies": { "is-number": "^7.0.0" @@ -19928,8 +18166,6 @@ }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "license": "MIT", "engines": { "node": ">=0.6" @@ -19937,8 +18173,6 @@ }, "node_modules/totalist": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "license": "MIT", "engines": { "node": ">=6" @@ -19946,8 +18180,6 @@ }, "node_modules/trim-lines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", "license": "MIT", "funding": { "type": "github", @@ -19956,8 +18188,6 @@ }, "node_modules/trim-newlines": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, "license": "MIT", "engines": { @@ -19969,8 +18199,6 @@ }, "node_modules/trough": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", - "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", "license": "MIT", "funding": { "type": "github", @@ -19979,8 +18207,6 @@ }, "node_modules/tsconfig-paths": { "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "license": "MIT", "dependencies": { @@ -19992,8 +18218,6 @@ }, "node_modules/tsconfig-paths/node_modules/json5": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "license": "MIT", "dependencies": { @@ -20005,14 +18229,10 @@ }, "node_modules/tslib": { "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "devOptional": true, "license": "MIT", "dependencies": { @@ -20024,8 +18244,6 @@ }, "node_modules/type-fest": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" @@ -20036,8 +18254,6 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", "license": "MIT", "dependencies": { "media-typer": "0.3.0", @@ -20049,8 +18265,6 @@ }, "node_modules/type-is/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -20058,8 +18272,6 @@ }, "node_modules/type-is/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -20069,32 +18281,28 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -20104,18 +18312,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -20125,18 +18332,16 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -20147,17 +18352,13 @@ }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.3", "license": "Apache-2.0", "peer": true, "bin": { @@ -20169,16 +18370,17 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -20186,23 +18388,17 @@ }, "node_modules/undici": { "version": "6.21.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.1.tgz", - "integrity": "sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==", "license": "MIT", "engines": { "node": ">=18.17" } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.20.0", "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", - "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", "license": "MIT", "engines": { "node": ">=4" @@ -20210,8 +18406,6 @@ }, "node_modules/unicode-emoji-modifier-base": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", "license": "MIT", "engines": { "node": ">=4" @@ -20219,8 +18413,6 @@ }, "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "license": "MIT", "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", @@ -20232,8 +18424,6 @@ }, "node_modules/unicode-match-property-value-ecmascript": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", - "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", "license": "MIT", "engines": { "node": ">=4" @@ -20241,8 +18431,6 @@ }, "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "license": "MIT", "engines": { "node": ">=4" @@ -20250,8 +18438,6 @@ }, "node_modules/unified": { "version": "11.0.5", - "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", - "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -20269,8 +18455,6 @@ }, "node_modules/unified/node_modules/is-plain-obj": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "license": "MIT", "engines": { "node": ">=12" @@ -20281,8 +18465,6 @@ }, "node_modules/unique-string": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", "license": "MIT", "dependencies": { "crypto-random-string": "^4.0.0" @@ -20296,8 +18478,6 @@ }, "node_modules/unist-util-is": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -20309,8 +18489,6 @@ }, "node_modules/unist-util-position": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -20322,8 +18500,6 @@ }, "node_modules/unist-util-position-from-estree": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position-from-estree/-/unist-util-position-from-estree-2.0.0.tgz", - "integrity": "sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -20335,8 +18511,6 @@ }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -20348,8 +18522,6 @@ }, "node_modules/unist-util-visit": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -20363,8 +18535,6 @@ }, "node_modules/unist-util-visit-parents": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -20377,8 +18547,6 @@ }, "node_modules/universalify": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "license": "MIT", "engines": { "node": ">= 10.0.0" @@ -20386,17 +18554,13 @@ }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "version": "1.1.2", "funding": [ { "type": "opencollective", @@ -20414,7 +18578,7 @@ "license": "MIT", "dependencies": { "escalade": "^3.2.0", - "picocolors": "^1.1.0" + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -20425,8 +18589,6 @@ }, "node_modules/update-notifier": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", - "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", "license": "BSD-2-Clause", "dependencies": { "boxen": "^7.0.0", @@ -20453,8 +18615,6 @@ }, "node_modules/update-notifier/node_modules/boxen": { "version": "7.1.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", - "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", @@ -20475,8 +18635,6 @@ }, "node_modules/update-notifier/node_modules/camelcase": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", - "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", "license": "MIT", "engines": { "node": ">=14.16" @@ -20486,9 +18644,7 @@ } }, "node_modules/update-notifier/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" @@ -20499,8 +18655,6 @@ }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" @@ -20508,8 +18662,6 @@ }, "node_modules/url-loader": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", "license": "MIT", "dependencies": { "loader-utils": "^2.0.0", @@ -20535,8 +18687,6 @@ }, "node_modules/url-loader/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -20544,8 +18694,6 @@ }, "node_modules/url-loader/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -20556,8 +18704,6 @@ }, "node_modules/url-loader/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", @@ -20574,20 +18720,14 @@ }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "license": "MIT" }, "node_modules/utila": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", "license": "MIT" }, "node_modules/utility-types": { "version": "3.11.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz", - "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==", "license": "MIT", "engines": { "node": ">= 4" @@ -20595,8 +18735,6 @@ }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "license": "MIT", "engines": { "node": ">= 0.4.0" @@ -20604,8 +18742,6 @@ }, "node_modules/uuid": { "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "license": "MIT", "bin": { "uuid": "dist/bin/uuid" @@ -20613,15 +18749,11 @@ }, "node_modules/v8-compile-cache": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz", - "integrity": "sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==", "devOptional": true, "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -20631,14 +18763,10 @@ }, "node_modules/value-equal": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -20646,8 +18774,6 @@ }, "node_modules/vfile": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -20660,8 +18786,6 @@ }, "node_modules/vfile-location": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", - "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -20674,8 +18798,6 @@ }, "node_modules/vfile-message": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -20688,8 +18810,6 @@ }, "node_modules/watchpack": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", @@ -20701,8 +18821,6 @@ }, "node_modules/wbuf": { "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "license": "MIT", "dependencies": { "minimalistic-assert": "^1.0.0" @@ -20710,8 +18828,6 @@ }, "node_modules/web-namespaces": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", - "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", "license": "MIT", "funding": { "type": "github", @@ -20719,16 +18835,14 @@ } }, "node_modules/webpack": { - "version": "5.96.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", - "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "version": "5.97.1", "license": "MIT", "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", "acorn": "^8.14.0", "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", @@ -20766,8 +18880,6 @@ }, "node_modules/webpack-bundle-analyzer": { "version": "4.10.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", - "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "0.5.7", @@ -20792,8 +18904,6 @@ }, "node_modules/webpack-bundle-analyzer/node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -20804,8 +18914,6 @@ }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "license": "MIT", "engines": { "node": ">= 10" @@ -20813,8 +18921,6 @@ }, "node_modules/webpack-dev-middleware": { "version": "5.3.4", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", - "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", "license": "MIT", "dependencies": { "colorette": "^2.0.10", @@ -20836,8 +18942,6 @@ }, "node_modules/webpack-dev-middleware/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -20845,8 +18949,6 @@ }, "node_modules/webpack-dev-middleware/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -20857,8 +18959,6 @@ }, "node_modules/webpack-dev-middleware/node_modules/range-parser": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -20866,8 +18966,6 @@ }, "node_modules/webpack-dev-server": { "version": "4.15.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", - "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.9", @@ -20925,8 +19023,6 @@ }, "node_modules/webpack-dev-server/node_modules/ws": { "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -20946,8 +19042,6 @@ }, "node_modules/webpack-merge": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", - "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", @@ -20960,8 +19054,6 @@ }, "node_modules/webpack-sources": { "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "license": "MIT", "engines": { "node": ">=10.13.0" @@ -20969,8 +19061,6 @@ }, "node_modules/webpack/node_modules/acorn": { "version": "8.14.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", - "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -20981,8 +19071,6 @@ }, "node_modules/webpack/node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "license": "MIT", "engines": { "node": ">= 0.6" @@ -20990,8 +19078,6 @@ }, "node_modules/webpack/node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -21002,8 +19088,6 @@ }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", @@ -21020,8 +19104,6 @@ }, "node_modules/webpackbar": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.2", @@ -21042,14 +19124,10 @@ }, "node_modules/webpackbar/node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "license": "MIT" }, "node_modules/webpackbar/node_modules/markdown-table": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", "license": "MIT", "dependencies": { "repeat-string": "^1.0.0" @@ -21061,8 +19139,6 @@ }, "node_modules/webpackbar/node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -21075,8 +19151,6 @@ }, "node_modules/webpackbar/node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -21092,8 +19166,6 @@ }, "node_modules/websocket-driver": { "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", @@ -21106,8 +19178,6 @@ }, "node_modules/websocket-extensions": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "license": "Apache-2.0", "engines": { "node": ">=0.8.0" @@ -21115,8 +19185,6 @@ }, "node_modules/whatwg-encoding": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" @@ -21125,10 +19193,18 @@ "node": ">=18" } }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/whatwg-mimetype": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "license": "MIT", "engines": { "node": ">=18" @@ -21136,8 +19212,6 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", "dependencies": { "isexe": "^2.0.0" @@ -21150,41 +19224,41 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -21195,15 +19269,11 @@ }, "node_modules/which-builtin-type/node_modules/isarray": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true, "license": "MIT" }, "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "license": "MIT", "dependencies": { @@ -21220,16 +19290,15 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -21241,8 +19310,6 @@ }, "node_modules/widest-line": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", "license": "MIT", "dependencies": { "string-width": "^5.0.1" @@ -21256,14 +19323,10 @@ }, "node_modules/wildcard": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", - "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "license": "MIT" }, "node_modules/word-wrap": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "devOptional": true, "license": "MIT", "engines": { @@ -21272,8 +19335,6 @@ }, "node_modules/wrap-ansi": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -21289,8 +19350,6 @@ }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "license": "MIT", "engines": { "node": ">=12" @@ -21301,8 +19360,6 @@ }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", "license": "MIT", "engines": { "node": ">=12" @@ -21313,8 +19370,6 @@ }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -21328,14 +19383,10 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "dependencies": { @@ -21348,8 +19399,6 @@ }, "node_modules/write-file-atomic/node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", "engines": { @@ -21361,8 +19410,6 @@ }, "node_modules/ws": { "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "license": "MIT", "engines": { "node": ">=8.3.0" @@ -21382,8 +19429,6 @@ }, "node_modules/xdg-basedir": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", - "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", "license": "MIT", "engines": { "node": ">=12" @@ -21394,8 +19439,6 @@ }, "node_modules/xml-js": { "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", "license": "MIT", "dependencies": { "sax": "^1.2.4" @@ -21406,14 +19449,10 @@ }, "node_modules/yallist": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, "node_modules/yaml": { "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "license": "ISC", "engines": { "node": ">= 6" @@ -21421,8 +19460,6 @@ }, "node_modules/yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "license": "ISC", "engines": { @@ -21431,8 +19468,6 @@ }, "node_modules/yocto-queue": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "license": "MIT", "engines": { "node": ">=12.20" @@ -21443,8 +19478,6 @@ }, "node_modules/zwitch": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", "license": "MIT", "funding": { "type": "github", diff --git a/package.json b/package.json index ff2f7387..27874081 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "@docusaurus/plugin-google-analytics": "^3.6.1", "@docusaurus/plugin-google-gtag": "^3.6.1", "@docusaurus/preset-classic": "^3.6.1", - "@easyops-cn/docusaurus-search-local": "^0.23.3", + "@easyops-cn/docusaurus-search-local": "^0.48.5", "@mdx-js/react": "^3.0.0", "clsx": "^1.1.1", "medium-zoom": "^1.0.6", @@ -35,7 +35,8 @@ }, "overrides": { "@cmfcmf/docusaurus-search-local": { - "@docusaurus/core": "^3.5.2" + "@docusaurus/core": "^3.5.2", + "cheerio": "1.0.0-rc.12" } }, "devDependencies": { diff --git a/sidebars.js b/sidebars.js index a4f8c0a0..d467048b 100644 --- a/sidebars.js +++ b/sidebars.js @@ -9,293 +9,120 @@ module.exports = { mainSidebar: [ - {'Getting Started': ['getting_started/main', { - 'Where do I start?': [{'Data Scientists': ['getting_started/ds/ds_first_steps', 'getting_started/ds/ds_second_steps', 'getting_started/ds/best_practices']}, - {'MLOps and LLMOps': ['getting_started/mlops/mlops_first_steps','getting_started/mlops/mlops_second_steps','getting_started/mlops/mlops_best_practices']}] - }, 'getting_started/architecture', {'Video Tutorials': - [ - 'getting_started/video_tutorials/quick_introduction', - 'getting_started/video_tutorials/core_component_overview', - 'getting_started/video_tutorials/experiment_manager_hands-on', - 'getting_started/video_tutorials/experiment_management_best_practices', - 'getting_started/video_tutorials/agent_remote_execution_and_automation', - 'getting_started/video_tutorials/hyperparameter_optimization', - 'getting_started/video_tutorials/pipelines_from_code', - 'getting_started/video_tutorials/pipelines_from_tasks', - 'getting_started/video_tutorials/clearml-data', - 'getting_started/video_tutorials/the_clearml_autoscaler', - 'getting_started/video_tutorials/hyperdatasets_data_versioning', + { + type: 'doc', + id: 'overview', + label: 'ClearML at a Glance', + }, + { + type: 'category', + collapsible: true, + label: 'Infrastructure Control Plane (GPUaaS)', + items: [ + 'fundamentals/agents_and_queues', + 'clearml_agent', + 'clearml_agent/clearml_agent_dynamic_gpus', + 'clearml_agent/clearml_agent_fractional_gpus', + 'cloud_autoscaling/autoscaling_overview', + 'remote_session' + ] + }, + { + type: 'category', + collapsible: true, + label: 'AI Development Center', + items: [ + 'clearml_sdk/clearml_sdk', + 'pipelines/pipelines', + 'clearml_data/clearml_data', + 'hyper_datasets', + 'model_registry', + ] + }, + { + type: 'category', + collapsible: true, + label: 'GenAI App Engine', + items: [ + 'deploying_clearml/enterprise_deploy/appgw', + 'build_interactive_models', + 'deploying_models', + 'custom_apps' + ] + }, + ], + usecaseSidebar: [ + /*'getting_started/main',*/ + 'getting_started/auto_log_exp', + 'getting_started/track_tasks', + 'getting_started/reproduce_tasks', + 'getting_started/logging_using_artifacts', + 'getting_started/data_management', + 'getting_started/remote_execution', + 'getting_started/building_pipelines', + 'getting_started/hpo', + 'getting_started/clearml_agent_docker_exec', + 'getting_started/clearml_agent_base_docker', + 'getting_started/clearml_agent_scheduling', + {"Deploying Model Endpoints": [ { - 'Hands-on MLOps Tutorials':[ - 'getting_started/video_tutorials/hands-on_mlops_tutorials/how_clearml_is_used_by_a_data_scientist', - 'getting_started/video_tutorials/hands-on_mlops_tutorials/how_clearml_is_used_by_an_mlops_engineer', - 'getting_started/video_tutorials/hands-on_mlops_tutorials/ml_ci_cd_using_github_actions_and_clearml' + type: 'category', + collapsible: true, + collapsed: true, + label: 'ClearML Serving', + link: {type: 'doc', id: 'clearml_serving/clearml_serving'}, + items: ['clearml_serving/clearml_serving_setup', 'clearml_serving/clearml_serving_cli', 'clearml_serving/clearml_serving_tutorial'] + }, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Model Launchers', + items: [ + 'webapp/applications/apps_embed_model_deployment', + 'webapp/applications/apps_model_deployment', + 'webapp/applications/apps_llama_deployment' ] - } - ]}]}, - {'ClearML Fundamentals': [ - 'fundamentals/projects', 'fundamentals/task', 'fundamentals/hyperparameters', - 'fundamentals/artifacts', 'fundamentals/models', 'fundamentals/logger', 'fundamentals/agents_and_queues', - 'fundamentals/hpo' - ] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'ClearML SDK', - link: {type: 'doc', id: 'clearml_sdk/clearml_sdk'}, - items: ['clearml_sdk/task_sdk', 'clearml_sdk/model_sdk', 'clearml_sdk/apiclient_sdk'] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'ClearML Agent', - link: {type: 'doc', id: 'clearml_agent'}, - items: ['clearml_agent/clearml_agent_setup', 'clearml_agent/clearml_agent_deployment', - 'clearml_agent/clearml_agent_execution_env', 'clearml_agent/clearml_agent_env_caching', - 'clearml_agent/clearml_agent_dynamic_gpus', 'clearml_agent/clearml_agent_fractional_gpus', - 'clearml_agent/clearml_agent_services_mode', 'clearml_agent/clearml_agent_docker', - 'clearml_agent/clearml_agent_scheduling'] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'Cloud Autoscaling', - link: {type: 'doc', id: 'cloud_autoscaling/autoscaling_overview'}, - items: [ - {'Autoscaler Apps': [ - 'webapp/applications/apps_aws_autoscaler', - 'webapp/applications/apps_gcp_autoscaler', - ] - } - ] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'ClearML Pipelines', - link: {type: 'doc', id: 'pipelines/pipelines'}, - items: [{"Building Pipelines": - ['pipelines/pipelines_sdk_tasks', 'pipelines/pipelines_sdk_function_decorators'] - } - ] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'ClearML Data', - link: {type: 'doc', id: 'clearml_data/clearml_data'}, - items: ['clearml_data/clearml_data_cli', 'clearml_data/clearml_data_sdk', 'clearml_data/best_practices', - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'Workflows', - link: {type: 'doc', id: 'clearml_data/data_management_examples/workflows'}, - items: [ - 'clearml_data/data_management_examples/data_man_simple', - 'clearml_data/data_management_examples/data_man_folder_sync', - 'clearml_data/data_management_examples/data_man_cifar_classification', - 'clearml_data/data_management_examples/data_man_python' - ] - }, - ] - }, - 'hyper_datasets', - 'model_registry', - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'Remote IDE', - link: {type: 'doc', id: 'remote_session'}, - items: [ - 'apps/clearml_session', - {type: 'ref', id: 'webapp/applications/apps_ssh_session'}, - {type: 'ref', id: 'webapp/applications/apps_jupyter_lab'}, - {type: 'ref', id: 'webapp/applications/apps_vscode'} - ] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'ClearML Serving', - link: {type: 'doc', id: 'clearml_serving/clearml_serving'}, - items: ['clearml_serving/clearml_serving_setup', 'clearml_serving/clearml_serving_cli', 'clearml_serving/clearml_serving_tutorial'] - }, - {'CLI Tools': [ - 'apps/clearml_task', - {type: 'ref', id: 'clearml_agent/clearml_agent_ref'}, - {type: 'ref', id: 'clearml_data/clearml_data_cli'}, - 'apps/clearml_param_search', - {type: 'ref', id: 'apps/clearml_session'}, - {type: 'ref', id: 'clearml_serving/clearml_serving_cli'}, - ] - }, - {'Integrations': [ - 'integrations/autokeras', - 'integrations/catboost', - 'integrations/click', - 'integrations/fastai', - {"Hugging Face": ['integrations/transformers', 'integrations/accelerate']}, - 'integrations/hydra', 'integrations/jsonargparse', - 'integrations/keras', 'integrations/keras_tuner', - 'integrations/langchain', - 'integrations/lightgbm', 'integrations/matplotlib', - 'integrations/megengine', 'integrations/monai', 'integrations/tao', - {"OpenMMLab":['integrations/mmcv', 'integrations/mmengine']}, - 'integrations/optuna', - 'integrations/python_fire', 'integrations/pytorch', - 'integrations/ignite', - 'integrations/pytorch_lightning', - 'integrations/scikit_learn', 'integrations/seaborn', - 'integrations/splunk', - 'integrations/tensorboard', 'integrations/tensorboardx', 'integrations/tensorflow', - 'integrations/xgboost', 'integrations/yolov5', 'integrations/yolov8' - ] - }, - 'integrations/storage', - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'WebApp', - link: {type: 'doc', id: 'webapp/webapp_overview'}, - items: [ - 'webapp/webapp_home', - { - 'Projects': [ - 'webapp/webapp_projects_page', - 'webapp/webapp_project_overview', - { - 'Experiments': ['webapp/webapp_exp_table', 'webapp/webapp_exp_track_visual', 'webapp/webapp_exp_reproducing', 'webapp/webapp_exp_tuning', - 'webapp/webapp_exp_comparing'] - }, - { - 'Models': ['webapp/webapp_model_table', 'webapp/webapp_model_viewing', 'webapp/webapp_model_comparing'] - }, - 'webapp/webapp_exp_sharing' - ] - }, - { - 'Datasets':[ - 'webapp/datasets/webapp_dataset_page', 'webapp/datasets/webapp_dataset_viewing' - ] - }, - { - 'Pipelines':[ - 'webapp/pipelines/webapp_pipeline_page', 'webapp/pipelines/webapp_pipeline_table', 'webapp/pipelines/webapp_pipeline_viewing' - ] - }, - 'webapp/webapp_model_endpoints', - 'webapp/webapp_reports', - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'Orchestration', - link: {type: 'doc', id: 'webapp/webapp_workers_queues'}, - items: ['webapp/webapp_orchestration_dash', 'webapp/resource_policies'] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'ClearML Applications', - link: {type: 'doc', id: 'webapp/applications/apps_overview'}, - items: [ - { - "General": [ - 'webapp/applications/apps_hpo', - 'webapp/applications/apps_dashboard', - 'webapp/applications/apps_task_scheduler', - 'webapp/applications/apps_trigger_manager', - ] - }, - { - "AI Dev": [ - 'webapp/applications/apps_ssh_session', - 'webapp/applications/apps_jupyter_lab', - 'webapp/applications/apps_vscode', - ] - }, - { - "UI Dev": [ - 'webapp/applications/apps_gradio', - 'webapp/applications/apps_streamlit' - ] - }, - { - "Deploy": [ - 'webapp/applications/apps_embed_model_deployment', - 'webapp/applications/apps_model_deployment', - 'webapp/applications/apps_llama_deployment' - ] - }, - ] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'Settings', - link: {type: 'doc', id: 'webapp/settings/webapp_settings_overview'}, - items: ['webapp/settings/webapp_settings_profile', - 'webapp/settings/webapp_settings_admin_vaults', 'webapp/settings/webapp_settings_users', - 'webapp/settings/webapp_settings_access_rules', 'webapp/settings/webapp_settings_id_providers', - 'webapp/settings/webapp_settings_resource_configs', 'webapp/settings/webapp_settings_usage_billing', - 'webapp/settings/webapp_settings_storage_credentials' - ] - }, - ] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'Configuring ClearML', - link: {type: 'doc', id: 'configs/configuring_clearml'}, - items: ['configs/clearml_conf', 'configs/env_vars'] - }, - {'User Management': [ - 'user_management/user_groups', - 'user_management/access_rules', - 'user_management/admin_vaults', - 'user_management/identity_providers' - ] - }, - { - type: 'category', - collapsible: true, - collapsed: true, - label: 'ClearML Server', - link: {type: 'doc', id: 'deploying_clearml/clearml_server'}, - items: [ - {'Deploying ClearML Server': - ['deploying_clearml/clearml_server_aws_ec2_ami', 'deploying_clearml/clearml_server_gcp', - 'deploying_clearml/clearml_server_linux_mac', 'deploying_clearml/clearml_server_win', - 'deploying_clearml/clearml_server_kubernetes_helm'] - }, - {'Upgrading ClearML Server': - ['deploying_clearml/upgrade_server_aws_ec2_ami','deploying_clearml/upgrade_server_gcp', - 'deploying_clearml/upgrade_server_linux_mac', 'deploying_clearml/upgrade_server_win', - 'deploying_clearml/upgrade_server_kubernetes_helm', - 'deploying_clearml/clearml_server_es7_migration', 'deploying_clearml/clearml_server_mongo44_migration'] - }, - 'deploying_clearml/clearml_server_config', 'deploying_clearml/clearml_server_security' - ] - }, - - //'Comments': ['Notes'], - - - + } + ]}, + {"Launching a Remote IDE": [ + 'apps/clearml_session', + {type: 'ref', id: 'webapp/applications/apps_ssh_session'}, + {type: 'ref', id: 'webapp/applications/apps_jupyter_lab'}, + {type: 'ref', id: 'webapp/applications/apps_vscode'} + ]}, + {"Building Interactive Model Demos": [ + {type: 'ref', id: 'webapp/applications/apps_gradio'}, + {type: 'ref', id: 'webapp/applications/apps_streamlit'}, + ]}, + 'getting_started/task_trigger_schedule', + 'getting_started/project_progress', + ], + integrationsSidebar: [ + { + type: 'doc', + label: 'Overview', + id: 'integrations/integrations', + }, + 'integrations/autokeras', + 'integrations/catboost', + 'integrations/click', + 'integrations/fastai', + {"Hugging Face": ['integrations/transformers', 'integrations/accelerate']}, + 'integrations/hydra', 'integrations/jsonargparse', + 'integrations/keras', 'integrations/keras_tuner', + 'integrations/langchain', + 'integrations/lightgbm', 'integrations/matplotlib', + 'integrations/megengine', 'integrations/monai', 'integrations/tao', + {"OpenMMLab":['integrations/mmcv', 'integrations/mmengine']}, + 'integrations/optuna', + 'integrations/python_fire', 'integrations/pytorch', + 'integrations/ignite', + 'integrations/pytorch_lightning', + 'integrations/scikit_learn', 'integrations/seaborn', + 'integrations/splunk', + 'integrations/tensorboard', 'integrations/tensorboardx', 'integrations/tensorflow', + 'integrations/xgboost', 'integrations/yolov5', 'integrations/yolov8' ], guidesSidebar: [ 'guides/guidemain', @@ -304,6 +131,7 @@ module.exports = { {'ClearML Task': ['guides/clearml-task/clearml_task_tutorial']}, {'ClearML Agent': ['guides/clearml_agent/executable_exp_containers', 'guides/clearml_agent/exp_environment_containers', 'guides/clearml_agent/reproduce_exp']}, {'Datasets': ['clearml_data/data_management_examples/data_man_cifar_classification', 'clearml_data/data_management_examples/data_man_python']}, + {id: 'hyperdatasets/code_examples', type: 'doc', label: 'Hyper-Datasets'}, {'Distributed': ['guides/distributed/distributed_pytorch_example', 'guides/distributed/subprocess_example']}, {'Docker': ['guides/docker/extra_docker_shell_script']}, {'Frameworks': [ @@ -342,7 +170,6 @@ module.exports = { {'Offline Mode':['guides/set_offline']}, {'Optimization': ['guides/optimization/hyper-parameter-optimization/examples_hyperparam_opt']}, {'Pipelines': ['guides/pipeline/pipeline_controller', 'guides/pipeline/pipeline_decorator', 'guides/pipeline/pipeline_functions']}, - {'Reporting': ['guides/reporting/explicit_reporting','guides/reporting/3d_plots_reporting', 'guides/reporting/artifacts', 'guides/reporting/using_artifacts', 'guides/reporting/clearml_logging_example', 'guides/reporting/html_reporting', 'guides/reporting/hyper_parameters', 'guides/reporting/image_reporting', 'guides/reporting/manual_matplotlib_reporting', 'guides/reporting/media_reporting', 'guides/reporting/model_config', 'guides/reporting/pandas_reporting', 'guides/reporting/plotly_reporting', @@ -352,6 +179,112 @@ module.exports = { {'Web UI': ['guides/ui/building_leader_board','guides/ui/tuning_exp']} ], + knowledgeSidebar: [ + {'Fundamentals': [ + 'fundamentals/projects', + 'fundamentals/task', + 'fundamentals/hyperparameters', + 'fundamentals/artifacts', + 'fundamentals/models', + 'fundamentals/logger', + ]}, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'ClearML SDK', + link: {type: 'doc', id: 'clearml_sdk/clearml_sdk'}, + items: [ + 'clearml_sdk/task_sdk', + 'clearml_sdk/model_sdk', + 'hyperdatasets/task', + 'clearml_sdk/hpo_sdk', + 'clearml_sdk/apiclient_sdk' + ] + }, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'ClearML Pipelines', + link: {type: 'doc', id: 'pipelines/pipelines'}, + items: [{ + "Building Pipelines": [ + 'pipelines/pipelines_sdk_tasks', + 'pipelines/pipelines_sdk_function_decorators' + ] + }] + }, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'ClearML Data', + link: {type: 'doc', id: 'clearml_data/clearml_data'}, + items: [ + 'clearml_data/clearml_data_cli', + 'clearml_data/clearml_data_sdk', + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Workflows', + link: {type: 'doc', id: 'clearml_data/data_management_examples/workflows'}, + items: [ + 'clearml_data/data_management_examples/data_man_simple', + 'clearml_data/data_management_examples/data_man_folder_sync', + 'clearml_data/data_management_examples/data_man_cifar_classification', + 'clearml_data/data_management_examples/data_man_python' + ] + }, + ] + }, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Hyper-Datasets', + link: {type: 'doc', id: 'hyperdatasets/overview'}, + items: [ + 'hyperdatasets/dataset', + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Frames', + link: {type: 'doc', id: 'hyperdatasets/frames'}, + items: [ + 'hyperdatasets/single_frames', + 'hyperdatasets/frame_groups', + 'hyperdatasets/sources', + 'hyperdatasets/annotations', + 'hyperdatasets/masks', + 'hyperdatasets/previews', + 'hyperdatasets/custom_metadata' + ] + }, + 'hyperdatasets/dataviews', + ] + }, + {'Video Tutorials': [ + 'getting_started/video_tutorials/quick_introduction', + 'getting_started/video_tutorials/core_component_overview', + 'getting_started/video_tutorials/experiment_manager_hands-on', + 'getting_started/video_tutorials/experiment_management_best_practices', + 'getting_started/video_tutorials/agent_remote_execution_and_automation', + 'getting_started/video_tutorials/hyperparameter_optimization', + 'getting_started/video_tutorials/pipelines_from_code', + 'getting_started/video_tutorials/pipelines_from_tasks', + 'getting_started/video_tutorials/clearml-data', + 'getting_started/video_tutorials/the_clearml_autoscaler', + 'getting_started/video_tutorials/hyperdatasets_data_versioning', + {'Hands-on MLOps Tutorials': [ + 'getting_started/video_tutorials/hands-on_mlops_tutorials/how_clearml_is_used_by_a_data_scientist', + 'getting_started/video_tutorials/hands-on_mlops_tutorials/how_clearml_is_used_by_an_mlops_engineer', + 'getting_started/video_tutorials/hands-on_mlops_tutorials/ml_ci_cd_using_github_actions_and_clearml' + ]} + ]}, + ], rnSidebar: [ {'Server': [ { @@ -380,10 +313,10 @@ module.exports = { { 'Enterprise': [ - 'release_notes/clearml_server/enterprise/ver_3_23', + 'release_notes/clearml_server/enterprise/ver_3_24', { 'Older Versions': [ - 'release_notes/clearml_server/enterprise/ver_3_22', + 'release_notes/clearml_server/enterprise/ver_3_23', 'release_notes/clearml_server/enterprise/ver_3_22', 'release_notes/clearml_server/enterprise/ver_3_21', 'release_notes/clearml_server/enterprise/ver_3_20' ] } @@ -394,9 +327,10 @@ module.exports = { { 'Open Source': [ - 'release_notes/sdk/open_source/ver_1_17', + 'release_notes/sdk/open_source/ver_1_18', { 'Older Versions': [ + 'release_notes/sdk/open_source/ver_1_17', 'release_notes/sdk/open_source/ver_1_16', 'release_notes/sdk/open_source/ver_1_15', 'release_notes/sdk/open_source/ver_1_14', 'release_notes/sdk/open_source/ver_1_13', 'release_notes/sdk/open_source/ver_1_12', 'release_notes/sdk/open_source/ver_1_11', @@ -456,15 +390,20 @@ module.exports = { ] } ], - sdkSidebar: [ + referenceSidebar: [ + {'SDK': [ 'references/sdk/task', 'references/sdk/logger', {'Model': ['references/sdk/model_model', 'references/sdk/model_inputmodel', 'references/sdk/model_outputmodel',]}, 'references/sdk/storage', 'references/sdk/dataset', - {'Pipeline': ['references/sdk/automation_controller_pipelinecontroller', - 'references/sdk/automation_job_clearmljob']}, + {'Pipeline': [ + 'references/sdk/automation_controller_pipelinecontroller', + 'references/sdk/automation_controller_pipelinedecorator', + 'references/sdk/automation_job_clearmljob' + ] + }, 'references/sdk/scheduler', 'references/sdk/trigger', {'HyperParameter Optimization': [ @@ -477,59 +416,298 @@ module.exports = { 'references/sdk/hpo_parameters_uniformintegerparameterrange', 'references/sdk/hpo_parameters_uniformparameterrange', 'references/sdk/hpo_parameters_parameterset', - ]}, - ], - clearmlAgentSidebar: [ - 'clearml_agent/clearml_agent_ref', 'clearml_agent/clearml_agent_env_var' - ], - hyperdatasetsSidebar: [ - 'hyperdatasets/overview', - {'Frames': [ - 'hyperdatasets/frames', - 'hyperdatasets/single_frames', - 'hyperdatasets/frame_groups', - 'hyperdatasets/sources', - 'hyperdatasets/annotations', - 'hyperdatasets/masks', - 'hyperdatasets/previews', - 'hyperdatasets/custom_metadata' ]}, - 'hyperdatasets/dataset', - 'hyperdatasets/dataviews', - 'hyperdatasets/task', - {'WebApp': [ - {'Projects': [ - 'hyperdatasets/webapp/webapp_dataviews', 'hyperdatasets/webapp/webapp_exp_track_visual', - 'hyperdatasets/webapp/webapp_exp_modifying', 'hyperdatasets/webapp/webapp_exp_comparing', - ] - }, - {'Datasets': [ - 'hyperdatasets/webapp/webapp_datasets', - 'hyperdatasets/webapp/webapp_datasets_versioning', - 'hyperdatasets/webapp/webapp_datasets_frames' - ] - }, - 'hyperdatasets/webapp/webapp_annotator' + {'Enterprise Hyper-Datasets': [ + {'Hyper-Dataset': [ + 'references/hyperdataset/hyperdataset', + 'references/hyperdataset/hyperdatasetversion' + ]}, + {'DataFrame': [ + 'references/hyperdataset/singleframe', + 'references/hyperdataset/framegroup', + 'references/hyperdataset/annotation', + ]}, + 'references/hyperdataset/dataview', + ]}, + ]}, + {'CLI Tools': [ + 'apps/clearml_task', + {type: 'ref', id: 'clearml_data/clearml_data_cli'}, + 'apps/clearml_param_search', + {type: 'ref', id: 'apps/clearml_session'}, + {type: 'ref', id: 'clearml_serving/clearml_serving_cli'}, + ] }, + {'ClearML Agent': [ + 'clearml_agent/clearml_agent_ref', 'clearml_agent/clearml_agent_env_var' + ]}, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Client Configuration', + link: {type: 'doc', id: 'configs/configuring_clearml'}, + items: [ + 'configs/clearml_conf', + 'configs/env_vars' + ] + }, + {'Server API': [ + 'references/api/index', + 'references/api/definitions', + 'references/api/login', + 'references/api/debug', + 'references/api/projects', + 'references/api/queues', + 'references/api/workers', + 'references/api/events', + 'references/api/models', + 'references/api/tasks', + ]}, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'WebApp', + link: {type: 'doc', id: 'webapp/webapp_overview'}, + items: [ + 'webapp/webapp_home', + {'Projects': [ + 'webapp/webapp_projects_page', + 'webapp/webapp_project_overview', + {'Tasks': [ + 'webapp/webapp_exp_table', + 'webapp/webapp_exp_track_visual', + 'webapp/webapp_exp_reproducing', + 'webapp/webapp_exp_tuning', + 'webapp/webapp_exp_comparing' + ]}, + {'Models': [ + 'webapp/webapp_model_table', + 'webapp/webapp_model_viewing', + 'webapp/webapp_model_comparing' + ]}, + {'Dataviews': [ + 'hyperdatasets/webapp/webapp_dataviews', + 'hyperdatasets/webapp/webapp_exp_track_visual', + 'hyperdatasets/webapp/webapp_exp_modifying', + 'hyperdatasets/webapp/webapp_exp_comparing' + ]}, + 'webapp/webapp_exp_sharing' + ]}, + {'Datasets': [ + 'webapp/datasets/webapp_dataset_page', + 'webapp/datasets/webapp_dataset_viewing' + ]}, + {'Hyper-Datasets': [ + 'hyperdatasets/webapp/webapp_datasets', + 'hyperdatasets/webapp/webapp_datasets_versioning', + 'hyperdatasets/webapp/webapp_datasets_frames', + 'hyperdatasets/webapp/webapp_annotator' + ]}, + {'Pipelines': [ + 'webapp/pipelines/webapp_pipeline_page', + 'webapp/pipelines/webapp_pipeline_table', + 'webapp/pipelines/webapp_pipeline_viewing' + ]}, + 'webapp/webapp_model_endpoints', + 'webapp/webapp_reports', + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Orchestration', + link: {type: 'doc', id: 'webapp/webapp_workers_queues'}, + items: [ + 'webapp/webapp_orchestration_dash', + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Autoscalers', + items: [ + 'webapp/applications/apps_aws_autoscaler', + 'webapp/applications/apps_gcp_autoscaler', + ] + }, + 'webapp/resource_policies' + ] + }, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'ClearML Applications', + link: {type: 'doc', id: 'webapp/applications/apps_overview'}, + items: [ + {"General": [ + 'webapp/applications/apps_hpo', + 'webapp/applications/apps_dashboard', + 'webapp/applications/apps_task_scheduler', + 'webapp/applications/apps_trigger_manager', + ]}, + {"AI Dev": [ + 'webapp/applications/apps_ssh_session', + 'webapp/applications/apps_jupyter_lab', + 'webapp/applications/apps_vscode', + ]}, + {"UI Dev": [ + 'webapp/applications/apps_gradio', + 'webapp/applications/apps_streamlit' + ]}, + {"Deploy": [ + 'webapp/applications/apps_embed_model_deployment', + 'webapp/applications/apps_model_deployment', + 'webapp/applications/apps_llama_deployment' + ]}, + ] + }, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Settings', + link: {type: 'doc', id: 'webapp/settings/webapp_settings_overview'}, + items: [ + 'webapp/settings/webapp_settings_profile', + 'webapp/settings/webapp_settings_admin_vaults', + 'webapp/settings/webapp_settings_users', + 'webapp/settings/webapp_settings_access_rules', + 'webapp/settings/webapp_settings_id_providers', + 'webapp/settings/webapp_settings_resource_configs', + 'webapp/settings/webapp_settings_usage_billing', + 'webapp/settings/webapp_settings_storage_credentials' + ] + }, ] }, - 'hyperdatasets/code_examples' ], - sdkHyperDataset: [ - {'Hyper-Dataset': ['references/hyperdataset/hyperdataset', 'references/hyperdataset/hyperdatasetversion']}, - {'DataFrame': ['references/hyperdataset/singleframe', - 'references/hyperdataset/framegroup', 'references/hyperdataset/annotation',]}, - 'references/hyperdataset/dataview', + installationSidebar: [ + 'clearml_sdk/clearml_sdk_setup', + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'ClearML Agent', + items: [ + 'clearml_agent/clearml_agent_setup', + { + 'Deployment': [ + 'clearml_agent/clearml_agent_deployment_bare_metal', + 'clearml_agent/clearml_agent_deployment_k8s', + 'clearml_agent/clearml_agent_deployment_slurm', + ] + }, + 'clearml_agent/clearml_agent_execution_env', + 'clearml_agent/clearml_agent_env_caching', + 'clearml_agent/clearml_agent_services_mode', + ] + }, + { + type: 'doc', + label: 'Configuring Client Storage Access', + id: 'integrations/storage', + }, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Open Source Server', + link: {type: 'doc', id: 'deploying_clearml/clearml_server'}, + items: [ + {'Deployment Options': [ + 'deploying_clearml/clearml_server_aws_ec2_ami', + 'deploying_clearml/clearml_server_gcp', + 'deploying_clearml/clearml_server_linux_mac', + 'deploying_clearml/clearml_server_win', + 'deploying_clearml/clearml_server_kubernetes_helm' + ]}, + 'deploying_clearml/clearml_server_config', + 'deploying_clearml/clearml_server_security', + {'Server Upgrade Procedures': [ + 'deploying_clearml/upgrade_server_aws_ec2_ami', + 'deploying_clearml/upgrade_server_gcp', + 'deploying_clearml/upgrade_server_linux_mac', + 'deploying_clearml/upgrade_server_win', + 'deploying_clearml/upgrade_server_kubernetes_helm', + 'deploying_clearml/clearml_server_es7_migration', + 'deploying_clearml/clearml_server_mongo44_migration' + ]}, + ] + }, + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Enterprise Server', + items: [ + {'Deployment Options': [ + 'deploying_clearml/enterprise_deploy/multi_tenant_k8s', + 'deploying_clearml/enterprise_deploy/vpc_aws', + 'deploying_clearml/enterprise_deploy/on_prem_ubuntu', + ] + }, + {'Maintenance and Migration': [ + 'deploying_clearml/enterprise_deploy/import_projects', + 'deploying_clearml/enterprise_deploy/change_artifact_links', + 'deploying_clearml/enterprise_deploy/delete_tenant', + ] + }, + {'ClearML Application Gateway': [ + 'deploying_clearml/enterprise_deploy/appgw_install_compose', + 'deploying_clearml/enterprise_deploy/appgw_install_k8s', + ] + }, + 'deploying_clearml/enterprise_deploy/custom_billing', + {'UI Applications': [ + 'deploying_clearml/enterprise_deploy/app_install_ubuntu_on_prem', + 'deploying_clearml/enterprise_deploy/app_install_ex_server', + 'deploying_clearml/enterprise_deploy/app_custom', + ] + }, + {'User Management': [ + 'user_management/user_groups', + 'user_management/access_rules', + 'user_management/admin_vaults', + { + type: 'category', + collapsible: true, + collapsed: true, + label: 'Identity Provider Integration', + link: {type: 'doc', id: 'user_management/identity_providers'}, + items: [ + 'deploying_clearml/enterprise_deploy/sso_multi_tenant_login', + 'deploying_clearml/enterprise_deploy/sso_saml_k8s', + 'deploying_clearml/enterprise_deploy/sso_keycloak', + 'deploying_clearml/enterprise_deploy/sso_active_directory' + ] + }, + ] + }, + ] + }, ], - apiSidebar: [ - 'references/api/index', - 'references/api/definitions', - 'references/api/login', - 'references/api/debug', - 'references/api/projects', - 'references/api/queues', - 'references/api/workers', - 'references/api/events', - 'references/api/models', - 'references/api/tasks', + bestPracticesSidebar: [ + { + type: 'category', + collapsible: true, + label: 'Best Practices', + items: [ + { + type: 'doc', + label: 'Data Scientists', + id: 'best_practices/data_scientist_best_practices' + }, + { + type: 'doc', + label: 'MLOps and LLMOps', + id: 'best_practices/mlops_best_practices' + }, + { + type: 'doc', + label: 'Data Management', + id: 'best_practices/data_best_practices' + }, + ], + }, ] }; diff --git a/src/css/custom.css b/src/css/custom.css index ec5f77ed..27581a8c 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -29,7 +29,7 @@ html { --ifm-color-primary-light: #17c5a2; --ifm-color-primary-lighter: #2edfbb; - --ifm-color-primary-lightest: #51f1d1; + --ifm-color-primary-lightest: #AEFDED; --ifm-toc-background-color: #141722; --ifm-code-font-size: 95%; @@ -46,16 +46,24 @@ html { --ifm-code-padding-vertical: 0.2rem; } -html[data-theme="dark"] { - --ifm-background-color: #1a1e2c; - --ifm-footer-background-color: #1a1e2c; - --ifm-footer-link-color: #a4a5aa; - --ifm-footer-link-hover-color: #14aa8c; - --ifm-dropdown-background-color: #2c3246; - --ifm-table-stripe-background: #141722; - --ifm-link-color: var(--ifm-color-primary-light); +[data-theme=dark]:root { + --ifm-background-color: #040506; /* body bg */ + --ifm-header-background-color: #101418; /* section 1 */ + --ifm-footer-background-color: #101418; /* section 1 */ + --ifm-footer-link-color: #D8FFF0; /* specific footer link color */ + --ifm-footer-link-hover-color: #ffffff; /* specific footer link hover color */ + --ifm-dropdown-background-color: #242D37; /* section 2 */ + --ifm-table-stripe-background: #101418; /* section 1 */ + --ifm-link-color: #6AD6C0; /* specific link color */ + --ifm-link-hover-color: #AEFDED; /* specific link hover color */ + --ifm-font-color-base: #E5E5E5; /* body text */ + --ifm-hr-background-color: #242D37; /* section 1 */ + --ifm-toc-link-color: #E5E5E5; /* body text */ + --ifm-toc-background-color: #242D37; /* section 2 */ + --ifm-code-background: #242D37; /* section 2 */ } + @media (min-width: 1400px) { /* Expand sidebar width above 1400px */ html[data-theme="light"], @@ -70,7 +78,7 @@ a { } html[data-theme="dark"] a:hover { - color: var(--ifm-color-primary-lightest); + color: var(--ifm-color-primary-lightest); } .align-center { @@ -82,6 +90,10 @@ html[data-theme="dark"] a:hover { max-width: 75%; } +.max-w-65 { + max-width: 65%; +} + .max-w-50 { max-width: 50%; } @@ -147,12 +159,16 @@ html[data-theme="dark"] div[role="banner"] { background-color: #09173C; } html[data-theme="dark"] .navbar--dark { - background-color: #151722; + background-color: var(--ifm-header-background-color); } .navbar--dark.navbar .navbar__toggle { color: white; /* opener icon color */ } +html[data-theme="dark"] .navbar__link:hover, +html[data-theme="dark"] .navbar__link--active { + color: var(--ifm-link-color); +} /* ===HEADER=== */ @@ -370,7 +386,7 @@ html[data-theme="light"] [class^="sidebarLogo"] > img { html[data-theme="dark"] .menu__link--active { - color: var(--ifm-color-primary-lighter); + color: var(--ifm-link-color); } html[data-theme="light"] .menu__link:not(.menu__link--active) { color: #606a78; @@ -456,11 +472,13 @@ html[data-theme="light"] .table-of-contents { box-shadow: 0 0 0 2px rgba(0,0,0,0.1) inset; } html[data-theme="dark"] .table-of-contents { - background-color: var(--ifm-toc-background-color); box-shadow: 0 0 0 2px rgba(0,0,0,0.4) inset; } html[data-theme="dark"] a.table-of-contents__link--active { - color: var(--ifm-color-primary-light); + color: var(--ifm-link-color); +} +html[data-theme="dark"] .table-of-contents a:hover { + color: var(--ifm-color-primary-lightest); } .table-of-contents__left-border { border:none; @@ -477,9 +495,6 @@ a.table-of-contents__link--active:before { border-left: 6px solid var(--ifm-color-primary); transform: translateY(5px); } -html[data-theme="light"] .table-of-contents__link:not(.table-of-contents__link--active) { - color: rgba(0,0,0,0.9); -} /* toc: show "..." inside code tag */ .table-of-contents code { @@ -521,6 +536,10 @@ html[data-theme="dark"] .footer__copyright { background-image: url('data:image/svg+xml;utf8,') } +.navbar .DocSearch-Button { + border: 1px solid var(--ifm-color-emphasis-200); +} + /* GLOBAL SEARCH PAGE */ html[data-theme="dark"] input[class^="searchQueryInput"] { color: #fff; @@ -560,7 +579,7 @@ html[data-theme="light"] .footer__link-item[href*="stackoverflow"] { html[data-theme="dark"] .footer__link-item:hover { - color: var(--ifm-color-primary-lighter); + color: var(--ifm-footer-link-hover-color); } @@ -601,6 +620,19 @@ html[data-theme=dark] .medium-zoom-image.medium-zoom-image--opened {border-radiu .medium-zoom--opened .medium-zoom-overlay {z-index: 1000;} .medium-zoom-image.medium-zoom-image--opened {z-index: 1001;} +[data-theme='light'] img[src$='#dark-mode-only'], +[data-theme='dark'] img[src$='#light-mode-only'] { + display: none; +} + +[data-theme='dark'] .light-mode-only { + display: none; +} + +[data-theme='light'] .dark-mode-only { + display: none; +} + /* table */ .markdown table { border-spacing: 0; @@ -711,15 +743,37 @@ html[data-theme="light"] .icon { /* md heading style */ +/*

*/ +html[data-theme="light"] h2 { + color: #0b2471; +} +html[data-theme="light"] h2 a.hash-link { + color: #0b2471; +} + +html[data-theme="dark"] h2 { + color: #A8C5E6; +} +html[data-theme="dark"] h2 a.hash-link { + color: #A8C5E6; +} + /*

*/ .markdown h3 { font-size: 1.6rem; } html[data-theme="light"] h3 { - color: var(--ifm-color-primary-darker); + color: #a335d5; } +html[data-theme="light"] h3 a.hash-link { + color: #a335d5; +} + html[data-theme="dark"] h3 { - color: var(--ifm-color-primary-lightest); + color: #DAA5BF; +} +html[data-theme="dark"] h3 a.hash-link { + color: #DAA5BF; } /*

*/ @@ -728,22 +782,25 @@ html[data-theme="dark"] h3 { margin-bottom: 8px; margin-top: 42px; } + html[data-theme="light"] h4 { - color: #62b00d; + color: #242D37; } +html[data-theme="light"] h4 a.hash-link { + color: #242D37; +} + html[data-theme="dark"] h4 { - color: #83de1f; + color: #c7cdd2; +} +html[data-theme="dark"] h4 a.hash-link { + color: #c7cdd2; } - -/*
*/ -.markdown hr { - border-bottom: none; +/*

*/ +.markdown h5 { + --ifm-h5-font-size: 1.1rem; } -html[data-theme="dark"] .markdown hr { - border-color: rgba(255,255,255,0.1); -} - /* admonition */ .admonition { diff --git a/static/icons/ico-arrow-from-right.svg b/static/icons/ico-arrow-from-right.svg new file mode 100644 index 00000000..58cf2c3a --- /dev/null +++ b/static/icons/ico-arrow-from-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/ico-drag.svg b/static/icons/ico-drag.svg new file mode 100644 index 00000000..ec867c5b --- /dev/null +++ b/static/icons/ico-drag.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/icons/ico-zoom-to-fit.svg b/static/icons/ico-zoom-to-fit.svg new file mode 100644 index 00000000..e30efb48 --- /dev/null +++ b/static/icons/ico-zoom-to-fit.svg @@ -0,0 +1,3 @@ + + +
Step 1 - Experiment Management + Step 1 - Experiment Management Open In Colab
Step 2 - Remote Execution Agent Setup + Step 2 - Remote Execution Agent Setup Open In Colab
Step 3 - Remotely Execute Tasks + Step 3 - Remotely Execute Tasks Open In Colab