From 0782a2c797692e7a77c6d4c9549b91dafb01c62c Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Mon, 29 Dec 2025 13:31:59 -0800 Subject: [PATCH 01/12] [DOCS-1927] Update Registry role permission table for protected aliases --- models/registry/configure_registry.mdx | 57 +++++++++++++------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/models/registry/configure_registry.mdx b/models/registry/configure_registry.mdx index eb7ba1ade8..08b5bc2c08 100644 --- a/models/registry/configure_registry.mdx +++ b/models/registry/configure_registry.mdx @@ -87,34 +87,35 @@ See [Configure user roles in a registry](/models/registry/configure_registry/#co ### Role permissions The following table lists each Registry role, along with the permissions provided by each role: -| Permission | Permission Group | Restricted Viewer
(Multi-tenant Cloud, by invitation) | Viewer | Member | Admin | -|-------------------------------------------------------------|------------------|-------------------------------------------------------------|--------|--------|-------| -| View a collection's details | Read | ✓ | ✓ | ✓ | ✓ | -| View a linked artifact's details | Read | ✓ | ✓ | ✓ | ✓ | -| Usage: Consume an artifact in a registry with use_artifact | Read | | ✓ | ✓ | ✓ | -| Download a linked artifact | Read | | ✓ | ✓ | ✓ | -| Download files from an artifact's file viewer | Read | | ✓ | ✓ | ✓ | -| Search a registry | Read | ✓ | ✓ | ✓ | ✓ | -| View a registry's settings and user list | Read | ✓ | ✓ | ✓ | ✓ | -| Create a new automation for a collection | Create | | | ✓ | ✓ | -| Turn on Slack notifications for new version being added | Create | | | ✓ | ✓ | -| Create a new collection | Create | | | ✓ | ✓ | -| Create a new registry | Create | | | ✓ | ✓ | -| Edit collection card (description) | Update | | | ✓ | ✓ | -| Edit linked artifact description | Update | | | ✓ | ✓ | -| Add or delete a collection's tag | Update | | | ✓ | ✓ | -| Add or delete an alias from a linked artifact | Update | | | ✓ | ✓ | -| Link a new artifact | Update | | | ✓ | ✓ | -| Edit allowed types list for a registry | Update | | | ✓ | ✓ | -| Edit registry name | Update | | | ✓ | ✓ | -| Delete a collection | Delete | | | ✓ | ✓ | -| Delete an automation | Delete | | | ✓ | ✓ | -| Unlink an artifact from a registry | Delete | | | ✓ | ✓ | -| Edit accepted artifact types for a registry | Admin | | | | ✓ | -| Change registry visibility (Organization or Restricted) | Admin | | | | ✓ | -| Add users to a registry | Admin | | | | ✓ | -| Assign or change a user's role in a registry | Admin | | | | ✓ | - +| Permission | Permission Group | Restricted Viewer
(Multi-tenant Cloud, by invitation) | Viewer | Member | Admin | +|-----------------------------------------------------------------------------------------------------------------------|------------------|------------------------------------------------------------|:------:|:------:|:-----:| +| View a collection's details | Read | ✓ | ✓ | ✓ | ✓ | +| View a linked artifact's details | Read | ✓ | ✓ | ✓ | ✓ | +| Usage: Consume an artifact in a registry with use_artifact | Read | | ✓ | ✓ | ✓ | +| Download a linked artifact | Read | | ✓ | ✓ | ✓ | +| Download files from an artifact's file viewer | Read | | ✓ | ✓ | ✓ | +| Search a registry | Read | ✓ | ✓ | ✓ | ✓ | +| View a registry's settings and user list | Read | ✓ | ✓ | ✓ | ✓ | +| Create a new automation for a collection | Create | | | ✓ | ✓ | +| Turn on Slack notifications for new version being added | Create | | | ✓ | ✓ | +| Create a new collection | Create | | | ✓ | ✓ | +| Create a new registry | Create | | | ✓ | ✓ | +| Edit collection card (description) | Update | | | ✓ | ✓ | +| Edit linked artifact description | Update | | | ✓ | ✓ | +| Add or delete a collection's tag | Update | | | ✓ | ✓ | +| Add or delete an alias from a linked artifact | Update | | | ✓ | ✓ | +| Add or delete a [protected alias](/models/registry/aliases#protected-aliases) from a linked artifact | Update | | | | ✓ | +| Create or delete a [protected alias](/models/registry/aliases#protected-aliases) | Update | | | | ✓ | +| Link a new artifact | Update | | | ✓ | ✓ | +| Edit allowed types list for a registry | Update | | | ✓ | ✓ | +| Edit registry name | Update | | | ✓ | ✓ | +| Delete a collection | Delete | | | ✓ | ✓ | +| Delete an automation | Delete | | | ✓ | ✓ | +| Unlink an artifact from a registry | Delete | | | ✓ | ✓ | +| Edit accepted artifact types for a registry | Admin | | | | ✓ | +| Change registry visibility (Organization or Restricted) | Admin | | | | ✓ | +| Add users to a registry | Admin | | | | ✓ | +| Assign or change a user's role in a registry | Admin | | | | ✓ | ### Inherited Registry role The registry's membership list shows each user's inherited (effective) registry role (in light gray) next to the role dropdown in their row. From d65bd5fc760da632dfbfa9a2999eb2828a542708 Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Fri, 6 Mar 2026 15:25:17 -0800 Subject: [PATCH 02/12] Automations doc revamp - Update the structure - Add API instructions - Incorporate Nina's tutorial draft to create a new tutorial page split into Project and Registry views - Add a Python notebook - Split out shared content into snippets - Add a Mermaid diagram to the overview Fixes: - DOCS-1917 - DOCS-1126 --- docs.json | 4 +- models/automations.mdx | 70 ++++--- models/automations/api.mdx | 136 +++++++++++++ models/automations/create-automations.mdx | 18 +- .../automations/create-automations/slack.mdx | 6 +- .../create-automations/webhook.mdx | 16 +- models/automations/tutorial.mdx | 144 ++++++++++++++ notebooks/automations-tutorial.ipynb | 180 ++++++++++++++++++ .../en/_includes/automations/actions-list.mdx | 2 + .../_includes/automations/best-practices.mdx | 3 + .../en/_includes/automations/mental-model.mdx | 1 + .../automations/where-to-find-automations.mdx | 2 + 12 files changed, 534 insertions(+), 48 deletions(-) create mode 100644 models/automations/api.mdx create mode 100644 models/automations/tutorial.mdx create mode 100644 notebooks/automations-tutorial.ipynb create mode 100644 snippets/en/_includes/automations/actions-list.mdx create mode 100644 snippets/en/_includes/automations/best-practices.mdx create mode 100644 snippets/en/_includes/automations/mental-model.mdx create mode 100644 snippets/en/_includes/automations/where-to-find-automations.mdx diff --git a/docs.json b/docs.json index a76ab82e56..978078026c 100644 --- a/docs.json +++ b/docs.json @@ -332,6 +332,7 @@ "group": "Automations", "pages": [ "models/automations", + "models/automations/tutorial", { "group": "Create an automation", "pages": [ @@ -341,7 +342,8 @@ ] }, "models/automations/view-automation-history", - "models/automations/automation-events" + "models/automations/automation-events", + "models/automations/api" ] }, { diff --git a/models/automations.mdx b/models/automations.mdx index 17d3516845..012de80079 100644 --- a/models/automations.mdx +++ b/models/automations.mdx @@ -3,60 +3,74 @@ title: Automations overview description: Use W&B Automations for triggering workflows based on events in W&B --- import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; +import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; +import AutomationsActionsList from "/snippets/en/_includes/automations/actions-list.mdx"; +import AutomationsBestPractices from "/snippets/en/_includes/automations/best-practices.mdx"; +import AutomationsWhereToFind from "/snippets/en/_includes/automations/where-to-find-automations.mdx"; -This page describes _automations_ in W&B. [Create an automation](/models/automations/create-automations/) to trigger workflow steps, such as automated model testing and deployment, based on an event in W&B. +Automations exist for both **projects** and **registries**. Where you create an automation, which events you can use, and how scope works all differ. For event types by scope, see [Automation events and scopes](/models/automations/automation-events). -For example, an automation can notify a Slack channel when a new version is created, trigger an automated testing webhook when the `production` alias is added to an artifact, or start a validation job only when a run's `loss` is within acceptable bounds. + - -Looking for companion tutorials for automations? -- [Learn to automatically trigger a Github Action for model evaluation and deployment](https://wandb.ai/wandb/wandb-model-cicd/reports/Model-CI-CD-with-W-B--Vmlldzo0OTcwNDQw). -- [Watch a video demonstrating automatically deploying a model to a Sagemaker endpoint](https://www.youtube.com/watch?v=s5CMj_w3DaQ). -- [Watch a video series introducing automations](https://youtube.com/playlist?list=PLD80i8An1OEGECFPgY-HPCNjXgGu-qGO6&feature=shared). - +```mermaid +flowchart LR + Event[Event] --> Condition[Condition] + Condition --> Action[Action] +``` + +**Example:** Run fails (event) and optional run name filter (condition) then Slack notification (action). Or: alias `production` added (event) then webhook (action). -## Automation events +## Where to create automations -Automations can be triggered by events related to runs or artifacts in a collection, project, or registry. An automation can start: + -- When a run metric meets a defined absolute or relative threshold. For example, trigger when a run's `loss` is less than 0.01 or when a run's `accuracy` improves by 5%. -- When a run's z-score (standard score) deviates from the mean by a given amount. A z-score of 0 indicates that the result aligns with the mean. A z-score of +2 means that the result is two standard deviations higher than the mean, and a z-score of -2 means that the result is two standard deviations lower than the mean. -- When an event occurs in a project or registry. For example, trigger when a new version of a model artifact is created or when the `production` alias is added to a model artifact. +## Use cases -For more details, see [Automation events and scopes](/models/automations/automation-events/). +- **Run monitoring and alerting**: Notify the team when a run fails or when a metric crosses a threshold (for example, loss goes to NaN or accuracy drops). +- **Registry CI/CD**: When a new model version is linked or an alias (such as `staging` or `production`) is added, trigger a webhook to run tests or deploy. +- **Project artifact workflows**: When a new artifact version is created or an alias is added in a project, run a downstream job or post to Slack. + +For full event and scope details, see [Automation events and scopes](/models/automations/automation-events). ## Automation actions When an event triggers an automation, it can perform one of these actions: -### Slack notification -Send a message to a Slack channel with details about the triggering event. The message summarizes the event, with a link to view more details in W&B. - -### Webhook -Call a webhook URL with a JSON payload containing information about the triggering event. This enables integration with external systems like CI/CD pipelines, model deployment services, or custom workflows. The body of the webhook request may be any JSON-serializable payload. + -For implementation details, see: -- [Create a Slack automation](/models/automations/create-automations/slack/) -- [Create a webhook automation](/models/automations/create-automations/webhook/) +For implementation details, see [Create a Slack automation](/models/automations/create-automations/slack) and [Create a webhook automation](/models/automations/create-automations/webhook). ## How automations work -To [create an automation](/models/automations/create-automations/), you: +To [create an automation](/models/automations/create-automations), you: -1. If required, configure [secrets](/platform/secrets/) for sensitive strings the automation requires, such as access tokens, passwords, or sensitive configuration details. Secrets are defined in your **Team Settings**. Secrets are most commonly used in webhook automations to securely pass credentials or tokens to the webhook's external service without exposing it in plain text or hard-coding it in the webhook's payload. +1. If required, configure [secrets](/platform/secrets) for sensitive strings the automation requires, such as access tokens, passwords, or sensitive configuration details. Secrets are defined in your **Team Settings**. Secrets are most commonly used in webhook automations to securely pass credentials or tokens to the webhook's external service without exposing it in plain text or hard-coding it in the webhook's payload. 1. Configure team-level webhook or Slack integrations to authorize W&B to post to Slack or run the webhook on your behalf. A single automation action (webhook or Slack notification) can be used by multiple automations. These actions are defined in your **Team Settings**. 1. In the project or registry, create the automation: - 1. Define the [event](#automation-events) to watch for, such as when a new artifact version is added. + 1. Define the [event](/models/automations/automation-events) to watch for, such as when a new artifact version is added. 1. Define the action to take when the event occurs (posting to a Slack channel or running a webhook). For a webhook, specify a secret to use for the access token and/or a secret to send with the payload, if required. +## Recommendations + + + ## Limitations [Run metric automations](/models/automations/automation-events/#run-metrics-events) and [run metrics z-score change automations](/models/automations/automation-events/#run-metrics-z-score-change-automations) are currently supported only in [W&B Multi-tenant Cloud](/platform/hosting/#wb-multi-tenant-cloud). ## Next steps -- [Create an automation](/models/automations/create-automations/). -- Learn about [Automation events and scopes](/models/automations/automation-events/). -- [Create a secret](/platform/secrets/). +- [Automations tutorial](/models/automations/tutorial): Guides you to create a project automation to alert on run failures and a Registry automation to run a webhoook when an alias is added. The tutorial provides both UI and API instructions. +- [Create an automation](/models/automations/create-automations). +- [Manage automations with the API](/models/automations/api). +- [Automation events and scopes](/models/automations/automation-events). +- [Create a secret](/platform/secrets). + + +Looking for companion tutorials for automations? +- [Learn to automatically trigger a Github Action for model evaluation and deployment](https://wandb.ai/wandb/wandb-model-cicd/reports/Model-CI-CD-with-W-B--Vmlldzo0OTcwNDQw). +- [Watch a video demonstrating automatically deploying a model to a Sagemaker endpoint](https://www.youtube.com/watch?v=s5CMj_w3DaQ). +- [Watch a video series introducing automations](https://youtube.com/playlist?list=PLD80i8An1OEGECFPgY-HPCNjXgGu-qGO6&feature=shared). + diff --git a/models/automations/api.mdx b/models/automations/api.mdx new file mode 100644 index 0000000000..1693446f92 --- /dev/null +++ b/models/automations/api.mdx @@ -0,0 +1,136 @@ +--- +title: Manage automations with the API +description: Create, list, get, update, and delete W&B automations using the Python API +--- +import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; + + + + + +You can manage W&B [automations](/models/automations) programmatically with the public Python API. This page summarizes the main operations. For full method signatures and parameters, see the [Automations API reference](/models/ref/python/public-api/automations) and the [Api reference](/models/ref/python/public-api/api). + +## List automations + +Use `api.automations()` to iterate over automations. You can filter by entity and optionally by name. + +```python +import wandb + +api = wandb.Api() + +# All automations for an entity (team or user) +for automation in api.automations(entity="my-team"): + print(automation.name, automation.scope) + +# Filter by name (returns matching automations) +for automation in api.automations(entity="my-team", name="my-automation"): + print(automation.name) +``` + +Automations can be scoped to a [project](/models/automations/automation-events/#project) or a [registry](/models/automations/automation-events/#registry). The returned `Automation` objects include scope information. + +## Get one automation + +Use `api.automation()` when you know the automation name. The call returns the only automation matching the name (and entity, if provided). + +```python +import wandb + +api = wandb.Api() + +automation = api.automation(name="my-automation") +print(automation.description, automation.enabled) + +# From a specific entity +automation = api.automation(name="my-automation", entity="my-team") +``` + +If zero or multiple automations match, the API raises `ValueError`. + +## Create an automation + +Create an automation by defining an **event** (what triggers it) and an **action** (what runs when it triggers), then calling `api.create_automation()`. Events and actions are built from classes in `wandb.automations`; the scope (project or registry/collection) determines which event types you can use. + +**Example: project automation (run state to Slack)** + +This example creates a project-scoped automation that sends a Slack notification when a run in the project finishes in a **Failed** state. + +```python +import wandb +from wandb.automations import OnRunState, RunEvent, SendNotification + +api = wandb.Api() + +project = api.project("my-project", entity="my-team") +slack_integration = next(api.slack_integrations(entity="my-team")) + +event = OnRunState( + scope=project, + filter=RunEvent.state.in_(["failed"]), +) +action = SendNotification.from_integration(slack_integration) + +automation = api.create_automation( + event >> action, + name="run-failure-alert", + description="Notify the team when a run fails.", +) +``` + +**Example: run metric threshold to Slack (project)** + +The [Api reference](/models/ref/python/public-api/api/#api-create_automation) shows creating an automation that triggers when a run metric exceeds a threshold. You can combine other event types (for example, [OnAddArtifactAlias](/models/ref/python/automations/onaddartifactalias) or [OnCreateArtifact](/models/ref/python/automations/oncreateartifact)) with [SendNotification](/models/ref/python/automations/sendnotification) or [SendWebhook](/models/ref/python/automations/sendwebhook) in the same way: build the event and action, then pass `event >> action` to `api.create_automation()`. + +## Update an automation + +Fetch the automation, change its attributes, then call `api.update_automation()`. You can pass keyword arguments to update in place without mutating the object. + +```python +import wandb + +api = wandb.Api() + +automation = api.automation(name="my-automation") +automation.enabled = False +automation.description = "Temporarily disabled for maintenance." +api.update_automation(automation) +``` + +Or pass updates as keyword arguments: + +```python +updated = api.update_automation( + automation, + enabled=False, + description="Temporarily disabled for maintenance.", +) +``` + +## Delete an automation + +Pass the automation object or its ID to `api.delete_automation()`. + +```python +import wandb + +api = wandb.Api() + +automation = api.automation(name="my-automation") +api.delete_automation(automation) +``` + +Or delete by ID: + +```python +api.delete_automation(automation.id) +``` + +For a runnable walkthrough that includes these operations and the two tutorial automations (project run failure alert and registry alias to webhook), see the [Automations tutorial notebook](https://github.com/wandb/docs/blob/main/notebooks/automations-tutorial.ipynb) on GitHub. + +## Next steps + +- [Automations overview](/models/automations) +- [Automation events and scopes](/models/automations/automation-events) (project vs registry events) +- [Create a Slack automation](/models/automations/create-automations/slack) or [Create a webhook automation](/models/automations/create-automations/webhook) (UI) +- [Automations API reference](/models/ref/python/public-api/automations) diff --git a/models/automations/create-automations.mdx b/models/automations/create-automations.mdx index d44a56cac8..95868938cf 100644 --- a/models/automations/create-automations.mdx +++ b/models/automations/create-automations.mdx @@ -8,24 +8,24 @@ import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.md -This page gives an overview of creating and managing W&B [automations](/models/automations/). For more detailed instructions, refer to [Create a Slack automation](/models/automations/create-automations/slack/) or [Create a webhook automation](/models/automations/create-automations/webhook/). +This page gives an overview of creating and managing W&B [automations](/models/automations). For more detailed instructions, refer to [Create a Slack automation](/models/automations/create-automations/slack) or [Create a webhook automation](/models/automations/create-automations/webhook). Looking for companion tutorials for automations? -- [Learn to automatically triggers a Github Action for model evaluation and deployment](https://wandb.ai/wandb/wandb-model-cicd/reports/Model-CI-CD-with-W-B--Vmlldzo0OTcwNDQw). +- [Learn to automatically trigger a Github Action for model evaluation and deployment](https://wandb.ai/wandb/wandb-model-cicd/reports/Model-CI-CD-with-W-B--Vmlldzo0OTcwNDQw). - [Watch a video demonstrating automatically deploying a model to a Sagemaker endpoint](https://www.youtube.com/watch?v=s5CMj_w3DaQ). - [Watch a video series introducing automations](https://youtube.com/playlist?list=PLD80i8An1OEGECFPgY-HPCNjXgGu-qGO6&feature=shared). ## Requirements -- A team admin can create and manage automations for the team's projects, as well as components of their automations, such as webhooks, secrets, and Slack integrations. Refer to [Team settings](/platform/app/settings-page/teams/). +- A team admin can create and manage automations for the team's projects, as well as components of their automations, such as webhooks, secrets, and Slack integrations. Refer to [Team settings](/platform/app/settings-page/teams). - To create a registry automation, you must have access to the registry. Refer to [Configure Registry access](/models/registry/configure_registry/#registry-roles). - To create a Slack automation, you must have permission to post to the Slack instance and channel you select. ## Create an automation Create an automation from the project or registry's **Automations** tab. At a high level, to create an automation, follow these steps: -1. If necessary, [create a W&B secret](/platform/secrets/) for each sensitive string required by the automation, such as an access token, password, or SSH key. Secrets are defined in your **Team Settings**. Secrets are most commonly used in webhook automations. +1. If necessary, [create a W&B secret](/platform/secrets) for each sensitive string required by the automation, such as an access token, password, or SSH key. Secrets are defined in your **Team Settings**. Secrets are most commonly used in webhook automations. 1. Configure team-level webhook or Slack integrations to authorize W&B to post to Slack or run the webhook on your behalf. A single webhook or Slack integration can be used by multiple automations. These actions are defined in your **Team Settings**. 1. In the project or registry, create the automation, which specifies the event to watch for and the action to take (such as posting to Slack or running a webhook). When you create a webhook automation, you configure the payload it sends. @@ -52,7 +52,9 @@ View and manage automations from a project or registry's **Automations** tab. - To delete an automation, click its action `...` menu, then click **Delete automation**. ## Next steps -- Learn more about [automation events and scopes](/models/automations/automation-events/) -- [Create a Slack automation](/models/automations/create-automations/slack/). -- [Create a webhook automation](/models/automations/create-automations/webhook/). -- [Create a secret](/platform/secrets/). +- [Automations tutorial](/models/automations/tutorial): Build a project run failure alert and a registry alias-to-webhook automation (UI or API). +- [Manage automations with the API](/models/automations/api). +- [Automation events and scopes](/models/automations/automation-events). +- [Create a Slack automation](/models/automations/create-automations/slack). +- [Create a webhook automation](/models/automations/create-automations/webhook). +- [Create a secret](/platform/secrets). diff --git a/models/automations/create-automations/slack.mdx b/models/automations/create-automations/slack.mdx index aa67c0b103..195c446f02 100644 --- a/models/automations/create-automations/slack.mdx +++ b/models/automations/create-automations/slack.mdx @@ -7,11 +7,11 @@ import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.md -This page shows how to create a Slack [automation](/models/automations/). To create a webhook automation, refer to [Create a webhook automation](/models/automations/create-automations/webhook/) instead. +This page shows how to create a Slack [automation](/models/automations). To create a webhook automation, refer to [Create a webhook automation](/models/automations/create-automations/webhook) instead. At a high level, to create a Slack automation, you take these steps: 1. [Add a Slack integration](#add-a-slack-integration), which authorizes W&B to post to the Slack instance and channel. -1. [Create the automation](#create-an-automation), which defines the [event](/models/automations/automation-events/) to watch for and the channel to notify. +1. [Create the automation](#create-an-automation), which defines the [event](/models/automations/automation-events) to watch for and the channel to notify. ## Add a Slack integration A team admin can add a Slack integration to the team. @@ -33,7 +33,7 @@ A team admin can view and manage the team's Slack instances and channels. 1. Delete a destination by clicking its trash icon. ## Create an automation -After you [add a Slack integration](#add-a-slack-integreation), select **Registry** or **Project**, then follow these steps to create an automation that notifies the Slack channel. +After you [add a Slack integration](#add-a-slack-integration), select **Registry** or **Project**, then follow these steps to create an automation that notifies the Slack channel. diff --git a/models/automations/create-automations/webhook.mdx b/models/automations/create-automations/webhook.mdx index 8ab2aaff25..cd9eee4e4f 100644 --- a/models/automations/create-automations/webhook.mdx +++ b/models/automations/create-automations/webhook.mdx @@ -7,12 +7,12 @@ import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.md -This page shows how to create a webhook [automation](/models/automations/). To create a Slack automation, refer to [Create a Slack automation](/models/automations/create-automations/slack/) instead. +This page shows how to create a webhook [automation](/models/automations). To create a Slack automation, refer to [Create a Slack automation](/models/automations/create-automations/slack) instead. At a high level, to create a webhook automation, you take these steps: -1. If necessary, [create a W&B secret](/platform/secrets/) for each sensitive string required by the automation, such as an access token, password, or SSH key. Secrets are defined in your **Team Settings**. +1. If necessary, [create a W&B secret](/platform/secrets) for each sensitive string required by the automation, such as an access token, password, or SSH key. Secrets are defined in your **Team Settings**. 1. [Create a webhook](#create-a-webhook) to define the endpoint and authorization details and grant the integration access to any secrets it needs. -1. [Create the automation](#create-an-automation) to define the [event](/models/automations/automation-events/) to watch for and the payload W&B will send. Grant the automation access to any secrets it needs for the payload. +1. [Create the automation](#create-an-automation) to define the [event](/models/automations/automation-events) to watch for and the payload W&B will send. Grant the automation access to any secrets it needs for the payload. ## Create a webhook A team admin can add a webhook for the team. @@ -25,7 +25,7 @@ If the webhook requires a Bearer token or its payload requires a sensitive strin 1. In the **Webhooks** section, click **New webhook**. 1. Provide a name for the webhook. 1. Provide the endpoint URL for the webhook. -1. If the webhook requires a Bearer token, set **Access token** to the [secret](/platform/secrets/) that contains it. When using the webhook automation, W&B sets the `Authorization: Bearer` HTTP header to the access token, and you can access the token in the `${ACCESS_TOKEN}` [payload variable](#payload-variables). Learn more about the structure of the `POST` request W&B sends to the webhook service in [Troubleshoot your webhook](#troubleshoot-your-webhook). +1. If the webhook requires a Bearer token, set **Access token** to the [secret](/platform/secrets) that contains it. When using the webhook automation, W&B sets the `Authorization: Bearer` HTTP header to the access token, and you can access the token in the `${ACCESS_TOKEN}` [payload variable](#payload-variables). Learn more about the structure of the `POST` request W&B sends to the webhook service in [Troubleshoot your webhook](#troubleshoot-your-webhook). 1. If the webhook requires a password or other sensitive string in its payload, set **Secret** to the secret that contains it. When you configure the automation that uses the webhook, you can access the secret as a [payload variable](#payload-variables) by prefixing its name with `$`. If the webhook's access token is stored in a secret, you must _also_ complete the next step to specify the secret as the access token. @@ -58,7 +58,7 @@ A Registry admin can create automations in that registry. Registry automations a Click **Next step**. 1. Select the team that owns the [webhook](#create-a-webhook). -1. Set **Action type** to **Webhooks**. then select the [webhook](#create-a-webhook) to use. +1. Set **Action type** to **Webhooks**. Then select the [webhook](#create-a-webhook) to use. 1. If you configured an access token for the webhook, you can access the token in the `${ACCESS_TOKEN}` [payload variable](#payload-variables). If you configured a secret for the webhook, you can access it in the payload by prefixing its name with `$`. Your webhook's requirements are determined by the webhook's service. 1. Click **Next step**. 1. Provide a name for the automation. Optionally, provide a description. Click **Create automation**. @@ -85,7 +85,7 @@ A W&B admin can create automations in a project. The automation is applied to all collections in the project, including those added in the future. 1. Click **Next step**. 1. Select the team that owns the [webhook](#create-a-webhook). -1. Set **Action type** to **Webhooks**. then select the [webhook](#create-a-webhook) to use. +1. Set **Action type** to **Webhooks**. Then select the [webhook](#create-a-webhook) to use. 1. If your webhook requires a payload, construct it and paste it into the **Payload** field. If you configured an access token for the webhook, you can access the token in the `${ACCESS_TOKEN}` [payload variable](#payload-variables). If you configured a secret for the webhook, you can access it in the payload by prefixing its name with `$`. Your webhook's requirements are determined by the webhook's service. 1. Click **Next step**. 1. Provide a name for the automation. Optionally, provide a description. Click **Create automation**. @@ -126,7 +126,7 @@ This section describes the variables you can use to construct your webhook's pay | `${tag}` | Contains an artifact's tags if the automation is triggered by the **An artifact tag is added** event. For other automations, this variable is blank. | | `${artifact_collection_name}` | The name of the artifact collection that the artifact version is linked to. | | `${artifact_metadata.}` | The value of an arbitrary top-level metadata key from the artifact version that triggered the action. Replace `` with the name of a top-level metadata key. Only top-level metadata keys are available in the webhook's payload. | -| `${artifact_version}` | The [`Wandb.Artifact`](/models/ref/python/experiments/artifact.md/) representation of the artifact version that triggered the action. | +| `${artifact_version}` | The [`Wandb.Artifact`](/models/ref/python/experiments/artifact.md) representation of the artifact version that triggered the action. | | `${artifact_version_string}` | The `string` representation of the artifact version that triggered the action. | | `${ACCESS_TOKEN}` | The value of the access token configured in the [webhook](#create-a-webhook), if an access token is configured. The access token is automatically passed in the `Authorization: Bearer` HTTP header. | | `${SECRET_NAME}` | If configured, the value of a secret configured in the [webhook](#create-a-webhook). Replace `SECRET_NAME` with the name of the secret. | @@ -181,7 +181,7 @@ ${project_name} --> "model-registry" ${entity_name} --> "" ``` -Use template strings to dynamically pass context from W&B to GitHub Actions and other tools. If those tools can call Python scripts, they can consume the registered model artifacts through the [W&B API](/models/artifacts/download-and-use-an-artifact/). +Use template strings to dynamically pass context from W&B to GitHub Actions and other tools. If those tools can call Python scripts, they can consume the registered model artifacts through the [W&B API](/models/artifacts/download-and-use-an-artifact). - For more information about repository dispatch, see the [official documentation on the GitHub Marketplace](https://github.com/marketplace/actions/repository-dispatch). diff --git a/models/automations/tutorial.mdx b/models/automations/tutorial.mdx new file mode 100644 index 0000000000..858acd7511 --- /dev/null +++ b/models/automations/tutorial.mdx @@ -0,0 +1,144 @@ +--- +title: Automations tutorial +description: Build a project run-failure alert or a registry alias-to-webhook automation using the UI or the API +--- +import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; +import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; + + + + + +This tutorial walks you through building an automation. Choose **Project** or **Registry** in the dropdown above to see the steps for that scope. A **project** automation alerts when a run fails (Slack). A **registry** automation triggers a webhook when an alias (for example, `production`) is added to an artifact. + + + +```mermaid +flowchart LR + ProjAlert[Project: run failure alert] + RegWebhook[Registry: alias to webhook] + Test[Test and verify] + ProjAlert --> RegWebhook --> Test +``` + + +## Prerequisites + +- A W&B project. +- A [Slack integration](/models/automations/create-automations/slack#add-a-slack-integration) configured in **Team Settings**. + +## Project automation: run failure alert + +This automation is scoped to a **project**. When a run in that project transitions to **Failed**, W&B sends a Slack notification. + + + +1. Open the project and click the **Automations** tab in the sidebar, then click **Create automation**. +1. Choose the event **Run state change**. Set the state to **Failed**. Optionally add a run name or user filter to limit which runs trigger the automation. +1. Click **Next step**. Set **Action type** to **Slack notification** and select the Slack channel. +1. Click **Next step**. Give the automation a name (for example, "Run failure alert") and an optional description, then click **Create automation**. + +For more detail, see [Create a Slack automation](/models/automations/create-automations/slack#create-an-automation) (Project tab). + + +Use the public API to create the same automation with a project scope and run-state filter: + +```python +import wandb +from wandb.automations import OnRunState, RunEvent, SendNotification + +api = wandb.Api() + +project = api.project("my-project", entity="my-team") +slack_integration = next(api.slack_integrations(entity="my-team")) + +event = OnRunState( + scope=project, + filter=RunEvent.state.in_(["failed"]), +) +action = SendNotification.from_integration(slack_integration) + +automation = api.create_automation( + event >> action, + name="run-failure-alert", + description="Notify the team when a run fails.", +) +``` + + + +## Test the automation + +Start a run in the project and mark it failed (for example, `run.finish(exit_code=1)`). Within a short time you should see a Slack message with the run link and status. + + + +## Prerequisites + +- A [webhook](/models/automations/create-automations/webhook#create-a-webhook) configured in **Team Settings**. +- A [registry](/models/registry/create_registry) with at least one collection, or reuse an existing registry. + +## Registry automation: alias added to webhook + +This automation is scoped to a **registry**. When an artifact in any collection in that registry gets a specific alias (for example, `production`), W&B sends a POST request to your webhook. + + + +1. Open the registry and click the **Automations** tab, then click **Create automation**. +1. Choose the event **An artifact alias is added**. Enter an **Alias regex** that matches the alias you care about (for example, `production` or `staging`). +1. Click **Next step**. Set **Action type** to **Webhooks** and select your webhook. If the webhook expects a payload, paste a JSON body and use [payload variables](/models/automations/create-automations/webhook#payload-variables) such as `${artifact_collection_name}` and `${artifact_version_string}`. +1. Click **Next step**. Give the automation a name and optional description, then click **Create automation**. + +For more detail, see [Create a webhook automation](/models/automations/create-automations/webhook#create-an-automation) (Registry tab). + + +Use the public API to create a registry-scoped automation that fires when an alias matching a pattern is added. You need the registry (or a collection in it) for scope and a webhook integration. + +```python +import wandb +from wandb.automations import OnAddArtifactAlias, ArtifactEvent, SendWebhook + +api = wandb.Api() + +# Scope to a collection in the registry (or use registry scope if supported by the API) +collection = api.artifact_collection(name="my-model", type_name="model") +webhook_integration = next(api.webhook_integrations(entity="my-team")) + +event = OnAddArtifactAlias( + scope=collection, + filter=ArtifactEvent.alias.eq("production"), +) +action = SendWebhook.from_integration(webhook_integration, payload={"event": "${event_type}", "model": "${artifact_collection_name}", "version": "${artifact_version_string}"}) + +automation = api.create_automation( + event >> action, + name="production-alias-webhook", + description="Trigger webhook when production alias is added.", +) +``` + + + +## Test the automation + +Add the alias (for example, `production`) to an artifact version in the registry (UI or API). Your webhook endpoint should receive a POST with the payload you configured. + + +You can scope the event to a collection (as above) or to a registry when the API supports it. Check the [Automations API reference](/models/ref/python/public-api/automations) and [OnAddArtifactAlias](/models/ref/python/automations/onaddartifactalias) for the current signatures. + + + +## Run the full tutorial in a notebook + +You can run the API steps for both automations, plus list/get/update/delete examples, in a single notebook: + +- [Automations tutorial notebook (GitHub)](https://github.com/wandb/docs/blob/main/notebooks/automations-tutorial.ipynb) + +Download or clone the repo and open the notebook in Jupyter or your preferred environment. You can also open it in Google Colab from the GitHub link. + +## Go further + +- [Automation events and scopes](/models/automations/automation-events) for all project and registry event types. +- [Create a Slack automation](/models/automations/create-automations/slack) and [Create a webhook automation](/models/automations/create-automations/webhook) for full UI and payload details. +- [Manage automations with the API](/models/automations/api) for list, get, update, and delete examples. +- [Automations API reference](/models/ref/python/public-api/automations) for all event and action classes. diff --git a/notebooks/automations-tutorial.ipynb b/notebooks/automations-tutorial.ipynb new file mode 100644 index 0000000000..904f674186 --- /dev/null +++ b/notebooks/automations-tutorial.ipynb @@ -0,0 +1,180 @@ +{ + "nbformat": 4, + "nbformat_minor": 5, + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "python", + "version": "3.10.0" + } + }, + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# W&B Automations tutorial (API)\n", + "\n", + "This notebook walks through managing W&B Automations with the Python API: list, get, create, update, and delete. It creates two example automations:\n", + "\n", + "1. **Project automation**: Run failure alert (Slack notification when a run fails).\n", + "2. **Registry automation**: Alias added to webhook (when `production` alias is added to an artifact in a collection, trigger a webhook).\n", + "\n", + "**Prerequisites:** A W&B project, a Slack integration and a webhook configured in Team Settings, and (for the registry example) an artifact collection. Replace `my-team`, `my-project`, and `my-model` with your entity, project, and collection names." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## List automations" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "import wandb\n", + "\n", + "api = wandb.Api()\n", + "\n", + "for automation in api.automations(entity=\"my-team\"):\n", + " print(automation.name, \"|\", getattr(automation, \"scope\", \"\"), \"|\", getattr(automation, \"enabled\", True))" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Get one automation" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "automation = api.automation(name=\"run-failure-alert\", entity=\"my-team\")\n", + "print(automation.name, automation.description, automation.enabled)" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create: Project automation (run failure to Slack)" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from wandb.automations import OnRunState, RunEvent, SendNotification\n", + "\n", + "project = api.project(\"my-project\", entity=\"my-team\")\n", + "slack_integration = next(api.slack_integrations(entity=\"my-team\"))\n", + "\n", + "event = OnRunState(\n", + " scope=project,\n", + " filter=RunEvent.state.in_([\"failed\"]),\n", + ")\n", + "action = SendNotification.from_integration(slack_integration)\n", + "\n", + "automation = api.create_automation(\n", + " event >> action,\n", + " name=\"run-failure-alert\",\n", + " description=\"Notify the team when a run fails.\",\n", + ")\n", + "print(\"Created:\", automation.name)" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Create: Registry automation (alias added to webhook)" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "from wandb.automations import OnAddArtifactAlias, ArtifactEvent, SendWebhook\n", + "\n", + "collection = api.artifact_collection(name=\"my-model\", type_name=\"model\")\n", + "webhook_integration = next(api.webhook_integrations(entity=\"my-team\"))\n", + "\n", + "event = OnAddArtifactAlias(\n", + " scope=collection,\n", + " filter=ArtifactEvent.alias.eq(\"production\"),\n", + ")\n", + "action = SendWebhook.from_integration(\n", + " webhook_integration,\n", + " payload={\n", + " \"event\": \"${event_type}\",\n", + " \"model\": \"${artifact_collection_name}\",\n", + " \"version\": \"${artifact_version_string}\",\n", + " },\n", + ")\n", + "\n", + "automation = api.create_automation(\n", + " event >> action,\n", + " name=\"production-alias-webhook\",\n", + " description=\"Trigger webhook when production alias is added.\",\n", + ")\n", + "print(\"Created:\", automation.name)" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Update an automation" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "automation = api.automation(name=\"run-failure-alert\", entity=\"my-team\")\n", + "updated = api.update_automation(\n", + " automation,\n", + " enabled=False,\n", + " description=\"Temporarily disabled.\",\n", + ")\n", + "print(\"Updated:\", updated.name, updated.enabled, updated.description)" + ], + "outputs": [], + "execution_count": null + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Delete an automation" + ] + }, + { + "cell_type": "code", + "metadata": {}, + "source": [ + "# Uncomment to delete. Replace with your automation name.\n", + "# api.delete_automation(api.automation(name=\"run-failure-alert\", entity=\"my-team\"))\n", + "# Or by ID: api.delete_automation(automation.id)" + ], + "outputs": [], + "execution_count": null + } + ] +} diff --git a/snippets/en/_includes/automations/actions-list.mdx b/snippets/en/_includes/automations/actions-list.mdx new file mode 100644 index 0000000000..341a0ca9a4 --- /dev/null +++ b/snippets/en/_includes/automations/actions-list.mdx @@ -0,0 +1,2 @@ +- **Slack notification**: Send a message to a Slack channel with details about the triggering event. The message summarizes the event, with a link to view more details in W&B. +- **Webhook**: Call a webhook URL with a JSON payload containing information about the triggering event. This enables integration with external systems like CI/CD pipelines, model deployment services, or custom workflows. diff --git a/snippets/en/_includes/automations/best-practices.mdx b/snippets/en/_includes/automations/best-practices.mdx new file mode 100644 index 0000000000..51096dbfce --- /dev/null +++ b/snippets/en/_includes/automations/best-practices.mdx @@ -0,0 +1,3 @@ +- **Start small**: Begin with one or two automations for high-value events (for example, run failures or production alias changes). Validate that they work as expected before adding more. +- **Test before production**: Create automations in a test project or with a test webhook or Slack channel first. Manually trigger the event and confirm the action runs and the payload or message looks correct. +- **Avoid alert fatigue**: Use run filters, metric thresholds, or alias patterns to limit how often an automation fires. Route different severities to different channels if needed. diff --git a/snippets/en/_includes/automations/mental-model.mdx b/snippets/en/_includes/automations/mental-model.mdx new file mode 100644 index 0000000000..e3ca07e2d1 --- /dev/null +++ b/snippets/en/_includes/automations/mental-model.mdx @@ -0,0 +1 @@ +W&B Automations follow a simple pattern: when an **event** occurs and optional **conditions** are met, an **action** runs automatically. For example, when a run fails (event), notify a Slack channel (action). Or when the `production` alias is added to an artifact (event), call a webhook to trigger deployment (action). Events and available conditions depend on whether the automation is scoped to a [project](/models/automations/automation-events#project) or a [registry](/models/automations/automation-events#registry). diff --git a/snippets/en/_includes/automations/where-to-find-automations.mdx b/snippets/en/_includes/automations/where-to-find-automations.mdx new file mode 100644 index 0000000000..e8bb61f9d6 --- /dev/null +++ b/snippets/en/_includes/automations/where-to-find-automations.mdx @@ -0,0 +1,2 @@ +- **In a project**: Open the project, then click the **Automations** tab in the project sidebar. +- **In a registry**: Open the registry, then click the **Automations** tab. From 7a12b22f71d6175b129c9a232bd354d4b1ee3453 Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Tue, 10 Mar 2026 14:25:07 -0700 Subject: [PATCH 03/12] Apply suggestions from code review --- models/automations/api.mdx | 2 +- models/automations/create-automations/webhook.mdx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/models/automations/api.mdx b/models/automations/api.mdx index 1693446f92..d38252ec5a 100644 --- a/models/automations/api.mdx +++ b/models/automations/api.mdx @@ -8,7 +8,7 @@ import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.md -You can manage W&B [automations](/models/automations) programmatically with the public Python API. This page summarizes the main operations. For full method signatures and parameters, see the [Automations API reference](/models/ref/python/public-api/automations) and the [Api reference](/models/ref/python/public-api/api). +You can manage W&B [automations](/models/automations) programmatically with the public Python API. This page summarizes the main operations. For full method signatures and parameters, see the [Automations API reference](/models/ref/python/public-api/automations). ## List automations diff --git a/models/automations/create-automations/webhook.mdx b/models/automations/create-automations/webhook.mdx index cd9eee4e4f..807940d60e 100644 --- a/models/automations/create-automations/webhook.mdx +++ b/models/automations/create-automations/webhook.mdx @@ -126,7 +126,7 @@ This section describes the variables you can use to construct your webhook's pay | `${tag}` | Contains an artifact's tags if the automation is triggered by the **An artifact tag is added** event. For other automations, this variable is blank. | | `${artifact_collection_name}` | The name of the artifact collection that the artifact version is linked to. | | `${artifact_metadata.}` | The value of an arbitrary top-level metadata key from the artifact version that triggered the action. Replace `` with the name of a top-level metadata key. Only top-level metadata keys are available in the webhook's payload. | -| `${artifact_version}` | The [`Wandb.Artifact`](/models/ref/python/experiments/artifact.md) representation of the artifact version that triggered the action. | +| `${artifact_version}` | The [`Wandb.Artifact`](/models/ref/python/experiments/artifact) representation of the artifact version that triggered the action. | | `${artifact_version_string}` | The `string` representation of the artifact version that triggered the action. | | `${ACCESS_TOKEN}` | The value of the access token configured in the [webhook](#create-a-webhook), if an access token is configured. The access token is automatically passed in the `Authorization: Bearer` HTTP header. | | `${SECRET_NAME}` | If configured, the value of a secret configured in the [webhook](#create-a-webhook). Replace `SECRET_NAME` with the name of the secret. | From ec3d4adbb0687a8adfdd891abab5238ec2ab0786 Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Tue, 10 Mar 2026 14:58:12 -0700 Subject: [PATCH 04/12] Drop notebook in favor of wandb/examples PR --- models/automations/api.mdx | 3 +- models/automations/tutorial.mdx | 3 +- notebooks/automations-tutorial.ipynb | 180 --------------------------- 3 files changed, 4 insertions(+), 182 deletions(-) delete mode 100644 notebooks/automations-tutorial.ipynb diff --git a/models/automations/api.mdx b/models/automations/api.mdx index d38252ec5a..9f7ea396a1 100644 --- a/models/automations/api.mdx +++ b/models/automations/api.mdx @@ -126,7 +126,8 @@ Or delete by ID: api.delete_automation(automation.id) ``` -For a runnable walkthrough that includes these operations and the two tutorial automations (project run failure alert and registry alias to webhook), see the [Automations tutorial notebook](https://github.com/wandb/docs/blob/main/notebooks/automations-tutorial.ipynb) on GitHub. +{/* TODO: Fix when https://github.com/wandb/examples/pull/618 merges */} +For a runnable walkthrough that includes these operations and the two tutorial automations (project run failure alert and registry alias to webhook), see the [Automations tutorial notebook](https://raw.githubusercontent.com/mdlinville/examples/a43b31213c8e0642a30a202f82e174772eb687f6/colabs/automations/automations-tutorial.ipynb) on GitHub. ## Next steps diff --git a/models/automations/tutorial.mdx b/models/automations/tutorial.mdx index 858acd7511..b6d7cb2b0c 100644 --- a/models/automations/tutorial.mdx +++ b/models/automations/tutorial.mdx @@ -132,7 +132,8 @@ You can scope the event to a collection (as above) or to a registry when the API You can run the API steps for both automations, plus list/get/update/delete examples, in a single notebook: -- [Automations tutorial notebook (GitHub)](https://github.com/wandb/docs/blob/main/notebooks/automations-tutorial.ipynb) +{/* TODO: Fix when https://github.com/wandb/examples/pull/618 merges */} +- [Automations tutorial notebook (GitHub)](https://raw.githubusercontent.com/mdlinville/examples/a43b31213c8e0642a30a202f82e174772eb687f6/colabs/automations/automations-tutorial.ipynb) Download or clone the repo and open the notebook in Jupyter or your preferred environment. You can also open it in Google Colab from the GitHub link. diff --git a/notebooks/automations-tutorial.ipynb b/notebooks/automations-tutorial.ipynb deleted file mode 100644 index 904f674186..0000000000 --- a/notebooks/automations-tutorial.ipynb +++ /dev/null @@ -1,180 +0,0 @@ -{ - "nbformat": 4, - "nbformat_minor": 5, - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "name": "python", - "version": "3.10.0" - } - }, - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# W&B Automations tutorial (API)\n", - "\n", - "This notebook walks through managing W&B Automations with the Python API: list, get, create, update, and delete. It creates two example automations:\n", - "\n", - "1. **Project automation**: Run failure alert (Slack notification when a run fails).\n", - "2. **Registry automation**: Alias added to webhook (when `production` alias is added to an artifact in a collection, trigger a webhook).\n", - "\n", - "**Prerequisites:** A W&B project, a Slack integration and a webhook configured in Team Settings, and (for the registry example) an artifact collection. Replace `my-team`, `my-project`, and `my-model` with your entity, project, and collection names." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## List automations" - ] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "import wandb\n", - "\n", - "api = wandb.Api()\n", - "\n", - "for automation in api.automations(entity=\"my-team\"):\n", - " print(automation.name, \"|\", getattr(automation, \"scope\", \"\"), \"|\", getattr(automation, \"enabled\", True))" - ], - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Get one automation" - ] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "automation = api.automation(name=\"run-failure-alert\", entity=\"my-team\")\n", - "print(automation.name, automation.description, automation.enabled)" - ], - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create: Project automation (run failure to Slack)" - ] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from wandb.automations import OnRunState, RunEvent, SendNotification\n", - "\n", - "project = api.project(\"my-project\", entity=\"my-team\")\n", - "slack_integration = next(api.slack_integrations(entity=\"my-team\"))\n", - "\n", - "event = OnRunState(\n", - " scope=project,\n", - " filter=RunEvent.state.in_([\"failed\"]),\n", - ")\n", - "action = SendNotification.from_integration(slack_integration)\n", - "\n", - "automation = api.create_automation(\n", - " event >> action,\n", - " name=\"run-failure-alert\",\n", - " description=\"Notify the team when a run fails.\",\n", - ")\n", - "print(\"Created:\", automation.name)" - ], - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Create: Registry automation (alias added to webhook)" - ] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "from wandb.automations import OnAddArtifactAlias, ArtifactEvent, SendWebhook\n", - "\n", - "collection = api.artifact_collection(name=\"my-model\", type_name=\"model\")\n", - "webhook_integration = next(api.webhook_integrations(entity=\"my-team\"))\n", - "\n", - "event = OnAddArtifactAlias(\n", - " scope=collection,\n", - " filter=ArtifactEvent.alias.eq(\"production\"),\n", - ")\n", - "action = SendWebhook.from_integration(\n", - " webhook_integration,\n", - " payload={\n", - " \"event\": \"${event_type}\",\n", - " \"model\": \"${artifact_collection_name}\",\n", - " \"version\": \"${artifact_version_string}\",\n", - " },\n", - ")\n", - "\n", - "automation = api.create_automation(\n", - " event >> action,\n", - " name=\"production-alias-webhook\",\n", - " description=\"Trigger webhook when production alias is added.\",\n", - ")\n", - "print(\"Created:\", automation.name)" - ], - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Update an automation" - ] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "automation = api.automation(name=\"run-failure-alert\", entity=\"my-team\")\n", - "updated = api.update_automation(\n", - " automation,\n", - " enabled=False,\n", - " description=\"Temporarily disabled.\",\n", - ")\n", - "print(\"Updated:\", updated.name, updated.enabled, updated.description)" - ], - "outputs": [], - "execution_count": null - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Delete an automation" - ] - }, - { - "cell_type": "code", - "metadata": {}, - "source": [ - "# Uncomment to delete. Replace with your automation name.\n", - "# api.delete_automation(api.automation(name=\"run-failure-alert\", entity=\"my-team\"))\n", - "# Or by ID: api.delete_automation(automation.id)" - ], - "outputs": [], - "execution_count": null - } - ] -} From c0ae8cdbdc087553f4ac33d25dfcb8f211c330b2 Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Mon, 16 Mar 2026 13:48:37 -0700 Subject: [PATCH 05/12] Split tutorial into two to avoid and nested components --- docs.json | 2 + models/automations/create-automations.mdx | 2 +- .../project-automation-tutorial.mdx | 71 ++++++++++ .../registry-automation-tutorial.mdx | 76 ++++++++++ models/automations/tutorial.mdx | 132 +----------------- .../automations/tutorial-go-further.mdx | 6 + .../automations/tutorial-notebook.mdx | 8 ++ 7 files changed, 170 insertions(+), 127 deletions(-) create mode 100644 models/automations/project-automation-tutorial.mdx create mode 100644 models/automations/registry-automation-tutorial.mdx create mode 100644 snippets/en/_includes/automations/tutorial-go-further.mdx create mode 100644 snippets/en/_includes/automations/tutorial-notebook.mdx diff --git a/docs.json b/docs.json index 194771e87e..8bfbb70b4a 100644 --- a/docs.json +++ b/docs.json @@ -341,6 +341,8 @@ "pages": [ "models/automations", "models/automations/tutorial", + "models/automations/project-automation-tutorial", + "models/automations/registry-automation-tutorial", { "group": "Create an automation", "pages": [ diff --git a/models/automations/create-automations.mdx b/models/automations/create-automations.mdx index 95868938cf..549ccb74d5 100644 --- a/models/automations/create-automations.mdx +++ b/models/automations/create-automations.mdx @@ -52,7 +52,7 @@ View and manage automations from a project or registry's **Automations** tab. - To delete an automation, click its action `...` menu, then click **Delete automation**. ## Next steps -- [Automations tutorial](/models/automations/tutorial): Build a project run failure alert and a registry alias-to-webhook automation (UI or API). +- [Automations tutorials](/models/automations/tutorial): Build a [project run failure alert](/models/automations/project-automation-tutorial) or a [registry alias-to-webhook automation](/models/automations/registry-automation-tutorial) (UI or API). - [Manage automations with the API](/models/automations/api). - [Automation events and scopes](/models/automations/automation-events). - [Create a Slack automation](/models/automations/create-automations/slack). diff --git a/models/automations/project-automation-tutorial.mdx b/models/automations/project-automation-tutorial.mdx new file mode 100644 index 0000000000..80c1431ded --- /dev/null +++ b/models/automations/project-automation-tutorial.mdx @@ -0,0 +1,71 @@ +--- +title: "Tutorial: Project run-failure alert automation" +description: Build a run-failure alert that sends a Slack notification when a run in your project fails. +--- +import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; +import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; +import TutorialNotebook from "/snippets/en/_includes/automations/tutorial-notebook.mdx"; +import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-further.mdx"; + + + + + +This tutorial walks you through building a **project** automation triggered by run status: when a run in your project transitions to **Failed**, W&B sends a Slack notification. + +For guidance creating a Registry automation, see [Tutorial: Registry artifact alias automation](/models/automations/registry-automation-tutorial). + + + +## Prerequisites + +- A W&B project. +- A [Slack integration](/models/automations/create-automations/slack#add-a-slack-integration) configured in **Team Settings**. + +## Project automation: run failure alert + +This automation is scoped to a **project**. When a run in that project transitions to **Failed**, W&B sends a Slack notification. + + + +1. Open the project and click the **Automations** tab in the sidebar, then click **Create automation**. +1. Choose the event **Run state change**. Set the state to **Failed**. Optionally add a run name or user filter to limit which runs trigger the automation. +1. Click **Next step**. Set **Action type** to **Slack notification** and select the Slack channel. +1. Click **Next step**. Give the automation a name (for example, "Run failure alert") and an optional description, then click **Create automation**. + +For more detail, see [Create a Slack automation](/models/automations/create-automations/slack#create-an-automation) (Project tab). + + +Use the public API to create the same automation with a project scope and run-state filter: + +```python +import wandb +from wandb.automations import OnRunState, RunEvent, SendNotification + +api = wandb.Api() + +project = api.project("my-project", entity="my-team") +slack_integration = next(api.slack_integrations(entity="my-team")) + +event = OnRunState( + scope=project, + filter=RunEvent.state.in_(["failed"]), +) +action = SendNotification.from_integration(slack_integration) + +automation = api.create_automation( + event >> action, + name="run-failure-alert", + description="Notify the team when a run fails.", +) +``` + + + +## Test the automation + +Start a run in the project and mark it failed (for example, `run.finish(exit_code=1)`). Within a short time you should see a Slack message with the run link and status. + + + + diff --git a/models/automations/registry-automation-tutorial.mdx b/models/automations/registry-automation-tutorial.mdx new file mode 100644 index 0000000000..ee34bf4ead --- /dev/null +++ b/models/automations/registry-automation-tutorial.mdx @@ -0,0 +1,76 @@ +--- +title: "Tutorial: Registry artifact alias automation" +description: Build an automation that runs a webhook when a Registry artifact gets a specific alias like "production". +--- +import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; +import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; +import TutorialNotebook from "/snippets/en/_includes/automations/tutorial-notebook.mdx"; +import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-further.mdx"; + + + + + +This tutorial walks you through building a **registry** automation triggered by artifact metadata: when an artifact in your registry gets a specific alias (for example, `production`), W&B sends a `POST` request to your webhook. + +For guidance creating a project automation, see [Tutorial: Project run-failure alert automation](/models/automations/project-automation-tutorial). + + + +## Prerequisites + +- A [webhook](/models/automations/create-automations/webhook#create-a-webhook) configured in **Team Settings**. +- A [registry](/models/registry/create_registry) with at least one collection, or reuse an existing registry. + +## Registry automation: alias added to webhook + +This automation is scoped to a **registry**. When an artifact in any collection in that registry gets a specific alias (for example, `production`), W&B sends a POST request to your webhook. + + + +1. Open the registry and click the **Automations** tab, then click **Create automation**. +1. Choose the event **An artifact alias is added**. Enter an **Alias regex** that matches the alias you care about (for example, `production` or `staging`). +1. Click **Next step**. Set **Action type** to **Webhooks** and select your webhook. If the webhook expects a payload, paste a JSON body and use [payload variables](/models/automations/create-automations/webhook#payload-variables) such as `${artifact_collection_name}` and `${artifact_version_string}`. +1. Click **Next step**. Give the automation a name and optional description, then click **Create automation**. + +For more detail, see [Create a webhook automation](/models/automations/create-automations/webhook#create-an-automation) (Registry tab). + + +Use the public API to create a registry-scoped automation that fires when an alias matching a pattern is added. You need the registry (or a collection in it) for scope and a webhook integration. + +```python +import wandb +from wandb.automations import OnAddArtifactAlias, ArtifactEvent, SendWebhook + +api = wandb.Api() + +# Scope to a collection in the registry (or use registry scope if supported by the API) +collection = api.artifact_collection(name="my-model", type_name="model") +webhook_integration = next(api.webhook_integrations(entity="my-team")) + +event = OnAddArtifactAlias( + scope=collection, + filter=ArtifactEvent.alias.eq("production"), +) +action = SendWebhook.from_integration(webhook_integration, payload={"event": "${event_type}", "model": "${artifact_collection_name}", "version": "${artifact_version_string}"}) + +automation = api.create_automation( + event >> action, + name="production-alias-webhook", + description="Trigger webhook when production alias is added.", +) +``` + + + +## Test the automation + +Add the alias (for example, `production`) to an artifact version in the registry (UI or API). Your webhook endpoint should receive a POST with the payload you configured. + + +You can scope the event to a collection (as above) or to a registry when the API supports it. Check the [Automations API reference](/models/ref/python/public-api/automations) and [OnAddArtifactAlias](/models/ref/python/automations/onaddartifactalias) for the current signatures. + + + + + diff --git a/models/automations/tutorial.mdx b/models/automations/tutorial.mdx index b6d7cb2b0c..5656c8f776 100644 --- a/models/automations/tutorial.mdx +++ b/models/automations/tutorial.mdx @@ -1,6 +1,6 @@ --- -title: Automations tutorial -description: Build a project run-failure alert or a registry alias-to-webhook automation using the UI or the API +title: Automations tutorials +description: Choose a tutorial to build a project run-failure alert or a registry alias-to-webhook automation --- import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; @@ -9,7 +9,10 @@ import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-mo -This tutorial walks you through building an automation. Choose **Project** or **Registry** in the dropdown above to see the steps for that scope. A **project** automation alerts when a run fails (Slack). A **registry** automation triggers a webhook when an alias (for example, `production`) is added to an artifact. +These tutorials walk you through building an automation using the UI or the API. Choose one: + +- **[Project automation tutorial](/models/automations/project-automation-tutorial)**: Alert when a run fails (Slack notification). +- **[Registry automation tutorial](/models/automations/registry-automation-tutorial)**: Trigger a webhook when an alias (for example, `production`) is added to an artifact. @@ -20,126 +23,3 @@ flowchart LR Test[Test and verify] ProjAlert --> RegWebhook --> Test ``` - - -## Prerequisites - -- A W&B project. -- A [Slack integration](/models/automations/create-automations/slack#add-a-slack-integration) configured in **Team Settings**. - -## Project automation: run failure alert - -This automation is scoped to a **project**. When a run in that project transitions to **Failed**, W&B sends a Slack notification. - - - -1. Open the project and click the **Automations** tab in the sidebar, then click **Create automation**. -1. Choose the event **Run state change**. Set the state to **Failed**. Optionally add a run name or user filter to limit which runs trigger the automation. -1. Click **Next step**. Set **Action type** to **Slack notification** and select the Slack channel. -1. Click **Next step**. Give the automation a name (for example, "Run failure alert") and an optional description, then click **Create automation**. - -For more detail, see [Create a Slack automation](/models/automations/create-automations/slack#create-an-automation) (Project tab). - - -Use the public API to create the same automation with a project scope and run-state filter: - -```python -import wandb -from wandb.automations import OnRunState, RunEvent, SendNotification - -api = wandb.Api() - -project = api.project("my-project", entity="my-team") -slack_integration = next(api.slack_integrations(entity="my-team")) - -event = OnRunState( - scope=project, - filter=RunEvent.state.in_(["failed"]), -) -action = SendNotification.from_integration(slack_integration) - -automation = api.create_automation( - event >> action, - name="run-failure-alert", - description="Notify the team when a run fails.", -) -``` - - - -## Test the automation - -Start a run in the project and mark it failed (for example, `run.finish(exit_code=1)`). Within a short time you should see a Slack message with the run link and status. - - - -## Prerequisites - -- A [webhook](/models/automations/create-automations/webhook#create-a-webhook) configured in **Team Settings**. -- A [registry](/models/registry/create_registry) with at least one collection, or reuse an existing registry. - -## Registry automation: alias added to webhook - -This automation is scoped to a **registry**. When an artifact in any collection in that registry gets a specific alias (for example, `production`), W&B sends a POST request to your webhook. - - - -1. Open the registry and click the **Automations** tab, then click **Create automation**. -1. Choose the event **An artifact alias is added**. Enter an **Alias regex** that matches the alias you care about (for example, `production` or `staging`). -1. Click **Next step**. Set **Action type** to **Webhooks** and select your webhook. If the webhook expects a payload, paste a JSON body and use [payload variables](/models/automations/create-automations/webhook#payload-variables) such as `${artifact_collection_name}` and `${artifact_version_string}`. -1. Click **Next step**. Give the automation a name and optional description, then click **Create automation**. - -For more detail, see [Create a webhook automation](/models/automations/create-automations/webhook#create-an-automation) (Registry tab). - - -Use the public API to create a registry-scoped automation that fires when an alias matching a pattern is added. You need the registry (or a collection in it) for scope and a webhook integration. - -```python -import wandb -from wandb.automations import OnAddArtifactAlias, ArtifactEvent, SendWebhook - -api = wandb.Api() - -# Scope to a collection in the registry (or use registry scope if supported by the API) -collection = api.artifact_collection(name="my-model", type_name="model") -webhook_integration = next(api.webhook_integrations(entity="my-team")) - -event = OnAddArtifactAlias( - scope=collection, - filter=ArtifactEvent.alias.eq("production"), -) -action = SendWebhook.from_integration(webhook_integration, payload={"event": "${event_type}", "model": "${artifact_collection_name}", "version": "${artifact_version_string}"}) - -automation = api.create_automation( - event >> action, - name="production-alias-webhook", - description="Trigger webhook when production alias is added.", -) -``` - - - -## Test the automation - -Add the alias (for example, `production`) to an artifact version in the registry (UI or API). Your webhook endpoint should receive a POST with the payload you configured. - - -You can scope the event to a collection (as above) or to a registry when the API supports it. Check the [Automations API reference](/models/ref/python/public-api/automations) and [OnAddArtifactAlias](/models/ref/python/automations/onaddartifactalias) for the current signatures. - - - -## Run the full tutorial in a notebook - -You can run the API steps for both automations, plus list/get/update/delete examples, in a single notebook: - -{/* TODO: Fix when https://github.com/wandb/examples/pull/618 merges */} -- [Automations tutorial notebook (GitHub)](https://raw.githubusercontent.com/mdlinville/examples/a43b31213c8e0642a30a202f82e174772eb687f6/colabs/automations/automations-tutorial.ipynb) - -Download or clone the repo and open the notebook in Jupyter or your preferred environment. You can also open it in Google Colab from the GitHub link. - -## Go further - -- [Automation events and scopes](/models/automations/automation-events) for all project and registry event types. -- [Create a Slack automation](/models/automations/create-automations/slack) and [Create a webhook automation](/models/automations/create-automations/webhook) for full UI and payload details. -- [Manage automations with the API](/models/automations/api) for list, get, update, and delete examples. -- [Automations API reference](/models/ref/python/public-api/automations) for all event and action classes. diff --git a/snippets/en/_includes/automations/tutorial-go-further.mdx b/snippets/en/_includes/automations/tutorial-go-further.mdx new file mode 100644 index 0000000000..b35b6d63f3 --- /dev/null +++ b/snippets/en/_includes/automations/tutorial-go-further.mdx @@ -0,0 +1,6 @@ +## Go further + +- [Automation events and scopes](/models/automations/automation-events) for all project and registry event types. +- [Create a Slack automation](/models/automations/create-automations/slack) and [Create a webhook automation](/models/automations/create-automations/webhook) for full UI and payload details. +- [Manage automations with the API](/models/automations/api) for list, get, update, and delete examples. +- [Automations API reference](/models/ref/python/public-api/automations) for all event and action classes. diff --git a/snippets/en/_includes/automations/tutorial-notebook.mdx b/snippets/en/_includes/automations/tutorial-notebook.mdx new file mode 100644 index 0000000000..905ee5f548 --- /dev/null +++ b/snippets/en/_includes/automations/tutorial-notebook.mdx @@ -0,0 +1,8 @@ +## Run the full tutorial in a notebook + +You can run the API steps for both automations, plus list/get/update/delete examples, in a single notebook: + +{/* TODO: Fix when https://github.com/wandb/examples/pull/618 merges */} +- [Automations tutorial notebook (GitHub)](https://raw.githubusercontent.com/mdlinville/examples/a43b31213c8e0642a30a202f82e174772eb687f6/colabs/automations/automations-tutorial.ipynb) + +Download or clone the repo and open the notebook in Jupyter or your preferred environment. You can also open it in Google Colab from the GitHub link. From 958c2e8467bbd8a8e2a9040477fb0cdcdc944bf0 Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Mon, 16 Mar 2026 14:49:07 -0700 Subject: [PATCH 06/12] Split Mermaid diagram into two snippets, include in tutorial landing page and individual tutorials --- docs.json | 2 +- models/automations/tutorial.mdx | 16 +++++++++------- .../automations/tutorial-diagram-project.mdx | 6 ++++++ .../automations/tutorial-diagram-registry.mdx | 6 ++++++ 4 files changed, 22 insertions(+), 8 deletions(-) create mode 100644 snippets/en/_includes/automations/tutorial-diagram-project.mdx create mode 100644 snippets/en/_includes/automations/tutorial-diagram-registry.mdx diff --git a/docs.json b/docs.json index 8bfbb70b4a..e3187c150a 100644 --- a/docs.json +++ b/docs.json @@ -4128,4 +4128,4 @@ } ], "baseUrl": "https://docs.wandb.ai" -} \ No newline at end of file +} diff --git a/models/automations/tutorial.mdx b/models/automations/tutorial.mdx index 5656c8f776..7a42eba363 100644 --- a/models/automations/tutorial.mdx +++ b/models/automations/tutorial.mdx @@ -4,6 +4,8 @@ description: Choose a tutorial to build a project run-failure alert or a registr --- import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; +import TutorialDiagramProject from "/snippets/en/_includes/automations/tutorial-diagram-project.mdx"; +import TutorialDiagramRegistry from "/snippets/en/_includes/automations/tutorial-diagram-registry.mdx"; @@ -16,10 +18,10 @@ These tutorials walk you through building an automation using the UI or the API. -```mermaid -flowchart LR - ProjAlert[Project: run failure alert] - RegWebhook[Registry: alias to webhook] - Test[Test and verify] - ProjAlert --> RegWebhook --> Test -``` +**Project automation: run failure alert** + + + +**Registry automation: alias added to webhook** + + diff --git a/snippets/en/_includes/automations/tutorial-diagram-project.mdx b/snippets/en/_includes/automations/tutorial-diagram-project.mdx new file mode 100644 index 0000000000..61114eb6de --- /dev/null +++ b/snippets/en/_includes/automations/tutorial-diagram-project.mdx @@ -0,0 +1,6 @@ +```mermaid +flowchart LR + Event[Run state change to Failed] + Action[Slack notification] + Event --> Action +``` diff --git a/snippets/en/_includes/automations/tutorial-diagram-registry.mdx b/snippets/en/_includes/automations/tutorial-diagram-registry.mdx new file mode 100644 index 0000000000..d819be1259 --- /dev/null +++ b/snippets/en/_includes/automations/tutorial-diagram-registry.mdx @@ -0,0 +1,6 @@ +```mermaid +flowchart LR + Event[Artifact alias added] + Action[Webhook] + Event --> Action +``` From 551d9936cd8e98da926a913136a7a217b30558e7 Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Mon, 16 Mar 2026 15:14:37 -0700 Subject: [PATCH 07/12] Update TOC structure, adjust mental model and Mermaid diagram includes --- docs.json | 11 +++++++--- models/automations/create-automations.mdx | 4 ++-- .../project-automation-tutorial.mdx | 10 ++++----- .../registry-automation-tutorial.mdx | 10 ++++----- models/automations/tutorial.mdx | 21 +++++++------------ .../en/_includes/automations/mental-model.mdx | 6 +++++- 6 files changed, 33 insertions(+), 29 deletions(-) diff --git a/docs.json b/docs.json index e3187c150a..69dd567d2a 100644 --- a/docs.json +++ b/docs.json @@ -340,9 +340,6 @@ "group": "Automations", "pages": [ "models/automations", - "models/automations/tutorial", - "models/automations/project-automation-tutorial", - "models/automations/registry-automation-tutorial", { "group": "Create an automation", "pages": [ @@ -351,6 +348,14 @@ "models/automations/create-automations/webhook" ] }, + { + "group": "Tutorials", + "pages": [ + "models/automations/tutorial", + "models/automations/project-automation-tutorial", + "models/automations/registry-automation-tutorial" + ] + }, "models/automations/view-automation-history", "models/automations/automation-events", "models/automations/api" diff --git a/models/automations/create-automations.mdx b/models/automations/create-automations.mdx index 549ccb74d5..8c56c5b4e2 100644 --- a/models/automations/create-automations.mdx +++ b/models/automations/create-automations.mdx @@ -40,8 +40,8 @@ Or, from a line plot in the workspace, you can quickly create a [run metric auto For details, refer to: -- [Create a Slack automation](/models/automations/create-automations/slack/) -- [Create a webhook automation](/models/automations/create-automations/webhook/) +- [Create a Slack automation](/models/automations/create-automations/slack) +- [Create a webhook automation](/models/automations/create-automations/webhook) ## View and manage automations View and manage automations from a project or registry's **Automations** tab. diff --git a/models/automations/project-automation-tutorial.mdx b/models/automations/project-automation-tutorial.mdx index 80c1431ded..1e9af0e5f6 100644 --- a/models/automations/project-automation-tutorial.mdx +++ b/models/automations/project-automation-tutorial.mdx @@ -13,21 +13,21 @@ import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-fu This tutorial walks you through building a **project** automation triggered by run status: when a run in your project transitions to **Failed**, W&B sends a Slack notification. -For guidance creating a Registry automation, see [Tutorial: Registry artifact alias automation](/models/automations/registry-automation-tutorial). + - +For guidance creating a Registry automation, see [Tutorial: Registry artifact alias automation](/models/automations/registry-automation-tutorial). ## Prerequisites - A W&B project. - A [Slack integration](/models/automations/create-automations/slack#add-a-slack-integration) configured in **Team Settings**. -## Project automation: run failure alert +## Create a project automation This automation is scoped to a **project**. When a run in that project transitions to **Failed**, W&B sends a Slack notification. - + 1. Open the project and click the **Automations** tab in the sidebar, then click **Create automation**. 1. Choose the event **Run state change**. Set the state to **Failed**. Optionally add a run name or user filter to limit which runs trigger the automation. 1. Click **Next step**. Set **Action type** to **Slack notification** and select the Slack channel. @@ -35,7 +35,7 @@ This automation is scoped to a **project**. When a run in that project transitio For more detail, see [Create a Slack automation](/models/automations/create-automations/slack#create-an-automation) (Project tab). - + Use the public API to create the same automation with a project scope and run-state filter: ```python diff --git a/models/automations/registry-automation-tutorial.mdx b/models/automations/registry-automation-tutorial.mdx index ee34bf4ead..e89136527b 100644 --- a/models/automations/registry-automation-tutorial.mdx +++ b/models/automations/registry-automation-tutorial.mdx @@ -13,21 +13,21 @@ import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-fu This tutorial walks you through building a **registry** automation triggered by artifact metadata: when an artifact in your registry gets a specific alias (for example, `production`), W&B sends a `POST` request to your webhook. -For guidance creating a project automation, see [Tutorial: Project run-failure alert automation](/models/automations/project-automation-tutorial). + - +For guidance creating a project automation, see [Tutorial: Project run-failure alert automation](/models/automations/project-automation-tutorial). ## Prerequisites - A [webhook](/models/automations/create-automations/webhook#create-a-webhook) configured in **Team Settings**. - A [registry](/models/registry/create_registry) with at least one collection, or reuse an existing registry. -## Registry automation: alias added to webhook +## Create a registry automation This automation is scoped to a **registry**. When an artifact in any collection in that registry gets a specific alias (for example, `production`), W&B sends a POST request to your webhook. - + 1. Open the registry and click the **Automations** tab, then click **Create automation**. 1. Choose the event **An artifact alias is added**. Enter an **Alias regex** that matches the alias you care about (for example, `production` or `staging`). 1. Click **Next step**. Set **Action type** to **Webhooks** and select your webhook. If the webhook expects a payload, paste a JSON body and use [payload variables](/models/automations/create-automations/webhook#payload-variables) such as `${artifact_collection_name}` and `${artifact_version_string}`. @@ -35,7 +35,7 @@ This automation is scoped to a **registry**. When an artifact in any collection For more detail, see [Create a webhook automation](/models/automations/create-automations/webhook#create-an-automation) (Registry tab). - + Use the public API to create a registry-scoped automation that fires when an alias matching a pattern is added. You need the registry (or a collection in it) for scope and a webhook integration. ```python diff --git a/models/automations/tutorial.mdx b/models/automations/tutorial.mdx index 7a42eba363..691666d796 100644 --- a/models/automations/tutorial.mdx +++ b/models/automations/tutorial.mdx @@ -1,6 +1,7 @@ --- -title: Automations tutorials -description: Choose a tutorial to build a project run-failure alert or a registry alias-to-webhook automation +title: Automation tutorial overview +sidebarTitle: Overview +description: Learn to build a project run-failure alert or a registry alias automation. --- import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; @@ -11,17 +12,11 @@ import TutorialDiagramRegistry from "/snippets/en/_includes/automations/tutorial -These tutorials walk you through building an automation using the UI or the API. Choose one: - -- **[Project automation tutorial](/models/automations/project-automation-tutorial)**: Alert when a run fails (Slack notification). -- **[Registry automation tutorial](/models/automations/registry-automation-tutorial)**: Trigger a webhook when an alias (for example, `production`) is added to an artifact. - -**Project automation: run failure alert** +These tutorials walk you through building an automation using the UI or the API. - - -**Registry automation: alias added to webhook** - - +- **[Project automation tutorial](/models/automations/project-automation-tutorial)**: Alert when a run fails (Slack notification). + +- **[Registry automation tutorial](/models/automations/registry-automation-tutorial)**: Trigger a webhook when an alias (for example, `production`) is added to an artifact. + diff --git a/snippets/en/_includes/automations/mental-model.mdx b/snippets/en/_includes/automations/mental-model.mdx index e3ca07e2d1..6203bdffa2 100644 --- a/snippets/en/_includes/automations/mental-model.mdx +++ b/snippets/en/_includes/automations/mental-model.mdx @@ -1 +1,5 @@ -W&B Automations follow a simple pattern: when an **event** occurs and optional **conditions** are met, an **action** runs automatically. For example, when a run fails (event), notify a Slack channel (action). Or when the `production` alias is added to an artifact (event), call a webhook to trigger deployment (action). Events and available conditions depend on whether the automation is scoped to a [project](/models/automations/automation-events#project) or a [registry](/models/automations/automation-events#registry). +W&B Automations follow a simple pattern: when an **event** occurs and optional **conditions** are met, an **action** runs automatically. For example: +- When a run fails (event), notify a Slack channel (action). +- When the `production` alias is added to an artifact (event), call a webhook to trigger deployment (action). + +Events and available conditions differ for an automation scoped to a [project](/models/automations/automation-events#project) or a [registry](/models/automations/automation-events#registry). See [Automation events and scopes](/models/automations/automation-events). From c23779f8dd6cc23a56f15f5ac059433b1d6da344 Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Mon, 16 Mar 2026 16:24:25 -0700 Subject: [PATCH 08/12] More adjustments --- models/automations.mdx | 1 + models/automations/project-automation-tutorial.mdx | 2 +- models/automations/registry-automation-tutorial.mdx | 2 +- models/automations/tutorial.mdx | 4 +--- snippets/en/_includes/automations/mental-model.mdx | 4 +++- 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/models/automations.mdx b/models/automations.mdx index 012de80079..d7f68e15f1 100644 --- a/models/automations.mdx +++ b/models/automations.mdx @@ -1,5 +1,6 @@ --- title: Automations overview +sidebarTitle: Overview description: Use W&B Automations for triggering workflows based on events in W&B --- import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; diff --git a/models/automations/project-automation-tutorial.mdx b/models/automations/project-automation-tutorial.mdx index 1e9af0e5f6..5140f41f44 100644 --- a/models/automations/project-automation-tutorial.mdx +++ b/models/automations/project-automation-tutorial.mdx @@ -3,7 +3,7 @@ title: "Tutorial: Project run-failure alert automation" description: Build a run-failure alert that sends a Slack notification when a run in your project fails. --- import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; -import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; +import TutorialDiagramProject from "/snippets/en/_includes/automations/tutorial-diagram-project.mdx"; import TutorialNotebook from "/snippets/en/_includes/automations/tutorial-notebook.mdx"; import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-further.mdx"; diff --git a/models/automations/registry-automation-tutorial.mdx b/models/automations/registry-automation-tutorial.mdx index e89136527b..8011dcb594 100644 --- a/models/automations/registry-automation-tutorial.mdx +++ b/models/automations/registry-automation-tutorial.mdx @@ -3,7 +3,7 @@ title: "Tutorial: Registry artifact alias automation" description: Build an automation that runs a webhook when a Registry artifact gets a specific alias like "production". --- import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; -import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; +import TutorialDiagramRegistry from "/snippets/en/_includes/automations/tutorial-diagram-registry.mdx"; import TutorialNotebook from "/snippets/en/_includes/automations/tutorial-notebook.mdx"; import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-further.mdx"; diff --git a/models/automations/tutorial.mdx b/models/automations/tutorial.mdx index 691666d796..1ea7ca489f 100644 --- a/models/automations/tutorial.mdx +++ b/models/automations/tutorial.mdx @@ -14,9 +14,7 @@ import TutorialDiagramRegistry from "/snippets/en/_includes/automations/tutorial -These tutorials walk you through building an automation using the UI or the API. +Select a tutorial for detailed guidance. - **[Project automation tutorial](/models/automations/project-automation-tutorial)**: Alert when a run fails (Slack notification). - - **[Registry automation tutorial](/models/automations/registry-automation-tutorial)**: Trigger a webhook when an alias (for example, `production`) is added to an artifact. - diff --git a/snippets/en/_includes/automations/mental-model.mdx b/snippets/en/_includes/automations/mental-model.mdx index 6203bdffa2..a2f747639d 100644 --- a/snippets/en/_includes/automations/mental-model.mdx +++ b/snippets/en/_includes/automations/mental-model.mdx @@ -1,5 +1,7 @@ W&B Automations follow a simple pattern: when an **event** occurs and optional **conditions** are met, an **action** runs automatically. For example: - When a run fails (event), notify a Slack channel (action). + - When the `production` alias is added to an artifact (event), call a webhook to trigger deployment (action). + -Events and available conditions differ for an automation scoped to a [project](/models/automations/automation-events#project) or a [registry](/models/automations/automation-events#registry). See [Automation events and scopes](/models/automations/automation-events). +Events and available conditions differ for automations scoped to a [project](/models/automations/automation-events#project) or a [registry](/models/automations/automation-events#registry). See [Automation events and scopes](/models/automations/automation-events). From aa9eff49699fbaf45cd72334363b8a3b7999fd8b Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Thu, 19 Mar 2026 13:13:55 -0700 Subject: [PATCH 09/12] Noah's feedback --- .../project-automation-tutorial.mdx | 13 +++++- .../registry-automation-tutorial.mdx | 46 ++++++++++++++----- .../automations/tutorial-notebook.mdx | 7 +-- 3 files changed, 48 insertions(+), 18 deletions(-) diff --git a/models/automations/project-automation-tutorial.mdx b/models/automations/project-automation-tutorial.mdx index 5140f41f44..b31f2edc4d 100644 --- a/models/automations/project-automation-tutorial.mdx +++ b/models/automations/project-automation-tutorial.mdx @@ -24,7 +24,7 @@ This tutorial walks you through building a **project** automation triggered by r ## Create a project automation -This automation is scoped to a **project**. When a run in that project transitions to **Failed**, W&B sends a Slack notification. +Follow these instructions to set up a project-scoped automation: When a run in the project transitions to **Failed**, W&B sends a Slack notification. @@ -63,8 +63,17 @@ automation = api.create_automation( ## Test the automation +Create a run and log it to the project, explicitly marking it as failed: -Start a run in the project and mark it failed (for example, `run.finish(exit_code=1)`). Within a short time you should see a Slack message with the run link and status. +```python +import wandb + +with wandb.init(project="my-project") as run: + run.log({"loss": 1.23}) + run.finish(exit_code=1) +``` + +Within a short time you should see a Slack message with the run link and status. diff --git a/models/automations/registry-automation-tutorial.mdx b/models/automations/registry-automation-tutorial.mdx index 8011dcb594..4377303997 100644 --- a/models/automations/registry-automation-tutorial.mdx +++ b/models/automations/registry-automation-tutorial.mdx @@ -11,7 +11,7 @@ import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-fu -This tutorial walks you through building a **registry** automation triggered by artifact metadata: when an artifact in your registry gets a specific alias (for example, `production`), W&B sends a `POST` request to your webhook. +This tutorial walks you through building a **registry** automation triggered by artifact metadata: when an artifact in your registry gets a specific alias (for example, **production**), W&B sends a POST request to your webhook. @@ -20,23 +20,23 @@ This tutorial walks you through building a **registry** automation triggered by ## Prerequisites - A [webhook](/models/automations/create-automations/webhook#create-a-webhook) configured in **Team Settings**. -- A [registry](/models/registry/create_registry) with at least one collection, or reuse an existing registry. +- A W&B [registry](/models/registry/create_registry) with at least one collection, or reuse an existing registry. ## Create a registry automation -This automation is scoped to a **registry**. When an artifact in any collection in that registry gets a specific alias (for example, `production`), W&B sends a POST request to your webhook. +Follow these instructions to set up a registry-scoped automation: When an artifact in any collection in that registry gets a specific alias (for example, **production**), W&B sends a POST request to your webhook. 1. Open the registry and click the **Automations** tab, then click **Create automation**. -1. Choose the event **An artifact alias is added**. Enter an **Alias regex** that matches the alias you care about (for example, `production` or `staging`). +1. Choose the event **An artifact alias is added**. Enter an **Alias regex** that matches the alias you care about (for example, **production** or **staging**). 1. Click **Next step**. Set **Action type** to **Webhooks** and select your webhook. If the webhook expects a payload, paste a JSON body and use [payload variables](/models/automations/create-automations/webhook#payload-variables) such as `${artifact_collection_name}` and `${artifact_version_string}`. 1. Click **Next step**. Give the automation a name and optional description, then click **Create automation**. For more detail, see [Create a webhook automation](/models/automations/create-automations/webhook#create-an-automation) (Registry tab). -Use the public API to create a registry-scoped automation that fires when an alias matching a pattern is added. You need the registry (or a collection in it) for scope and a webhook integration. +Use the public API to create the same automation with a collection scope and alias filter: ```python import wandb @@ -44,7 +44,6 @@ from wandb.automations import OnAddArtifactAlias, ArtifactEvent, SendWebhook api = wandb.Api() -# Scope to a collection in the registry (or use registry scope if supported by the API) collection = api.artifact_collection(name="my-model", type_name="model") webhook_integration = next(api.webhook_integrations(entity="my-team")) @@ -52,7 +51,14 @@ event = OnAddArtifactAlias( scope=collection, filter=ArtifactEvent.alias.eq("production"), ) -action = SendWebhook.from_integration(webhook_integration, payload={"event": "${event_type}", "model": "${artifact_collection_name}", "version": "${artifact_version_string}"}) +action = SendWebhook.from_integration( + webhook_integration, + payload={ + "event": "${event_type}", + "model": "${artifact_collection_name}", + "version": "${artifact_version_string}", + }, +) automation = api.create_automation( event >> action, @@ -65,11 +71,29 @@ automation = api.create_automation( ## Test the automation -Add the alias (for example, `production`) to an artifact version in the registry (UI or API). Your webhook endpoint should receive a POST with the payload you configured. +Add the alias (for example, **production**) to an artifact version in the registry, using the W&B App or the public API. For example: + +```python +import wandb + +with wandb.init(project="my-project") as run: + artifact = wandb.Artifact("my-model", type="model") + # ... log files or metadata to artifact as needed ... + run.log_artifact(artifact) + run.wait() # Ensure the artifact is logged before proceeding + +# Add an alias to the latest version in the collection +api = wandb.Api() +collection = api.artifact_collection(name="my-model", type_name="model") +version = next(collection.versions()) # Get the latest version + +version.aliases.append("production") +version.save() +print("Added alias 'production' to", version.name) + +``` - -You can scope the event to a collection (as above) or to a registry when the API supports it. Check the [Automations API reference](/models/ref/python/public-api/automations) and [OnAddArtifactAlias](/models/ref/python/automations/onaddartifactalias) for the current signatures. - +Within a short time your webhook endpoint should receive a POST with the payload you configured. diff --git a/snippets/en/_includes/automations/tutorial-notebook.mdx b/snippets/en/_includes/automations/tutorial-notebook.mdx index 905ee5f548..2e9c797e56 100644 --- a/snippets/en/_includes/automations/tutorial-notebook.mdx +++ b/snippets/en/_includes/automations/tutorial-notebook.mdx @@ -1,8 +1,5 @@ ## Run the full tutorial in a notebook -You can run the API steps for both automations, plus list/get/update/delete examples, in a single notebook: +Run the [Automations tutorial notebook](https://raw.githubusercontent.com/mdlinville/examples/a43b31213c8e0642a30a202f82e174772eb687f6/colabs/automations/automations-tutorial.ipynb) to create and test project-scoped and registry-scoped automations. -{/* TODO: Fix when https://github.com/wandb/examples/pull/618 merges */} -- [Automations tutorial notebook (GitHub)](https://raw.githubusercontent.com/mdlinville/examples/a43b31213c8e0642a30a202f82e174772eb687f6/colabs/automations/automations-tutorial.ipynb) - -Download or clone the repo and open the notebook in Jupyter or your preferred environment. You can also open it in Google Colab from the GitHub link. +Download or clone the repo and open the notebook in Jupyter, Google Colab, or your preferred notebook environment. From 0f263294c42c8dc2d3254161cc620ac7f526281d Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Thu, 19 Mar 2026 13:22:06 -0700 Subject: [PATCH 10/12] Automations are no longer limited to Enterprise Cloud-only --- ja/models/automations.mdx | 5 ----- ja/models/automations/automation-events.mdx | 5 ----- ja/models/automations/create-automations.mdx | 5 ----- ja/models/automations/create-automations/slack.mdx | 5 ----- ja/models/automations/create-automations/webhook.mdx | 6 ------ ja/models/automations/view-automation-history.mdx | 7 ------- ja/models/core/automations.mdx | 6 ------ ja/models/core/automations/automation-events.mdx | 6 ------ ja/models/core/automations/create-automations.mdx | 6 ------ ja/models/core/automations/create-automations/slack.mdx | 6 ------ ja/models/core/automations/create-automations/webhook.mdx | 6 ------ ko/models/automations.mdx | 5 ----- ko/models/automations/automation-events.mdx | 6 ------ ko/models/automations/create-automations.mdx | 5 ----- ko/models/automations/create-automations/slack.mdx | 5 ----- ko/models/automations/create-automations/webhook.mdx | 6 ------ ko/models/automations/view-automation-history.mdx | 7 ------- ko/models/core/automations.mdx | 6 ------ ko/models/core/automations/automation-events.mdx | 6 ------ ko/models/core/automations/create-automations.mdx | 6 ------ ko/models/core/automations/create-automations/slack.mdx | 6 ------ ko/models/core/automations/create-automations/webhook.mdx | 6 ------ models/automations.mdx | 5 ----- models/automations/api.mdx | 5 ----- models/automations/automation-events.mdx | 6 ------ models/automations/create-automations.mdx | 5 ----- models/automations/create-automations/slack.mdx | 5 ----- models/automations/create-automations/webhook.mdx | 6 ------ models/automations/project-automation-tutorial.mdx | 5 ----- models/automations/registry-automation-tutorial.mdx | 5 ----- models/automations/tutorial.mdx | 5 ----- models/automations/view-automation-history.mdx | 7 ------- 32 files changed, 181 deletions(-) diff --git a/ja/models/automations.mdx b/ja/models/automations.mdx index 6d6eae71ee..f7ed57c5a7 100644 --- a/ja/models/automations.mdx +++ b/ja/models/automations.mdx @@ -2,11 +2,6 @@ title: オートメーション の概要 description: W&B 内のイベントに基づいて ワークフロー をトリガーするには、W&B オートメーション を使用します。 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - このページでは、W&B における オートメーション について説明します。 [オートメーションを作成](/models/automations/create-automations/) することで、W&B 内のイベントをトリガーとして、モデルの自動テストやデプロイメントなどのワークフローのステップを実行できます。 diff --git a/ja/models/automations/automation-events.mdx b/ja/models/automations/automation-events.mdx index 3d8c99ae5f..5a069f359f 100644 --- a/ja/models/automations/automation-events.mdx +++ b/ja/models/automations/automation-events.mdx @@ -1,13 +1,8 @@ --- title: オートメーションのイベントとスコープ --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import MultiTenantCloudOnly from "/snippets/en/_includes/multi-tenant-cloud-only.mdx"; - - - - オートメーションは、Project または Registry 内で特定のイベントが発生したときに開始できます。このページでは、各スコープ内でオートメーションのトリガーとなるイベントについて説明します。オートメーションの詳細については、[Automations overview](/models/automations/) または [Create an automation](/models/automations/create-automations/) をご覧ください。 ## Registry diff --git a/ja/models/automations/create-automations.mdx b/ja/models/automations/create-automations.mdx index 75358488ea..5f9c0977fd 100644 --- a/ja/models/automations/create-automations.mdx +++ b/ja/models/automations/create-automations.mdx @@ -2,11 +2,6 @@ title: 概要 description: ML ワークフローを効率化するための W&B オートメーション の作成と管理 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - このページでは、 W&B [オートメーション](/models/automations/) の作成と管理の概要について説明します。詳細な手順については、 [Slack オートメーションの作成](/models/automations/create-automations/slack/) または [Webhook オートメーションの作成](/models/automations/create-automations/webhook/) を参照してください。 diff --git a/ja/models/automations/create-automations/slack.mdx b/ja/models/automations/create-automations/slack.mdx index 8d5cce188e..3b7f773d90 100644 --- a/ja/models/automations/create-automations/slack.mdx +++ b/ja/models/automations/create-automations/slack.mdx @@ -1,11 +1,6 @@ --- title: Slack 自動化を作成する --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - このページでは、Slack [オートメーション](/models/automations/) を作成する方法について説明します。Webhook オートメーションを作成する場合は、代わりに [Create a webhook automation](/models/automations/create-automations/webhook/) を参照してください。 diff --git a/ja/models/automations/create-automations/webhook.mdx b/ja/models/automations/create-automations/webhook.mdx index 89b8775321..58be1e55bc 100644 --- a/ja/models/automations/create-automations/webhook.mdx +++ b/ja/models/automations/create-automations/webhook.mdx @@ -1,11 +1,6 @@ --- title: Webhook オートメーションの作成 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - このページでは、webhook [automation](/models/automations/) の作成方法について説明します。Slack のオートメーションを作成する場合は、代わりに [Create a Slack automation](/models/automations/create-automations/slack/) を参照してください。 @@ -296,7 +291,6 @@ W&B が `POST` リクエストに使用する形式の詳細については、** * `PAYLOAD` * `API_ENDPOINT` - ```bash webhook_test.sh #!/bin/bash diff --git a/ja/models/automations/view-automation-history.mdx b/ja/models/automations/view-automation-history.mdx index 32372d336c..44a06bf65f 100644 --- a/ja/models/automations/view-automation-history.mdx +++ b/ja/models/automations/view-automation-history.mdx @@ -2,13 +2,6 @@ title: オートメーションの履歴を表示する --- - -この機能には Enterprise ライセンスが必要です。以下の環境で利用可能です: -- W&B Multi-tenant Cloud -- W&B 専用クラウド -- W&B Self-Managed v0.75.0 以降 - - このページでは、W&B [Automations](/models/automations) の実行履歴を表示し、内容を理解する方法について説明します。これには、何がオートメーションをトリガーしたか、どのようなアクションが実行されたか、そしてそれらが成功したか失敗したかが含まれます。 実行された各オートメーションは、以下の内容を含むレコードを生成します: diff --git a/ja/models/core/automations.mdx b/ja/models/core/automations.mdx index eb220c0a31..85b67ae50d 100644 --- a/ja/models/core/automations.mdx +++ b/ja/models/core/automations.mdx @@ -2,12 +2,6 @@ title: オートメーション --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - このページでは、W&B の _オートメーション_ について説明します。ワークフローステップをトリガーする [オートメーションの作成](/ja/models/core/automations/create-automations/) は、W&B 内のイベント(例えば、アーティファクトバージョンが作成されたとき)に基づいて、自動モデルテストやデプロイメントなどを行います。 例えば、新しいバージョンが作成されたときに Slack のチャンネルに投稿したり、アーティファクトに `production` エイリアスが追加されたときに自動テストをトリガーするためにウェブフックを実行することができます。 diff --git a/ja/models/core/automations/automation-events.mdx b/ja/models/core/automations/automation-events.mdx index 5b9c8c073f..5d8a129540 100644 --- a/ja/models/core/automations/automation-events.mdx +++ b/ja/models/core/automations/automation-events.mdx @@ -2,12 +2,6 @@ title: 自動化イベントと範囲 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - あるオートメーションは、プロジェクトやレジストリのスコープ内で特定のイベントが発生したときに開始されます。プロジェクトの*スコープ*は[スコープの技術的定義を挿入]を参照してください。このページでは、それぞれのスコープ内でオートメーションをトリガーするイベントについて説明します。 オートメーションの詳細は、[オートメーション概要](/ja/models/core/automations/)または[オートメーションの作成](/ja/models/core/automations/create-automations/)を参照してください。 diff --git a/ja/models/core/automations/create-automations.mdx b/ja/models/core/automations/create-automations.mdx index e128f28323..cc37bc8057 100644 --- a/ja/models/core/automations/create-automations.mdx +++ b/ja/models/core/automations/create-automations.mdx @@ -2,12 +2,6 @@ title: 自動化の作成 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - このページでは、W&B の [オートメーション](/ja/models/core/automations/) を作成および管理する概要を示します。詳細な手順については [Slack オートメーションを作成する](/ja/models/core/automations/create-automations/slack) または [Webhook オートメーションを作成する](/ja/models/core/automations/create-automations/webhook) を参照してください。 diff --git a/ja/models/core/automations/create-automations/slack.mdx b/ja/models/core/automations/create-automations/slack.mdx index 01b4d07728..e26864511a 100644 --- a/ja/models/core/automations/create-automations/slack.mdx +++ b/ja/models/core/automations/create-automations/slack.mdx @@ -2,12 +2,6 @@ title: Slack 自動化の作成 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - このページでは、Slack [オートメーション](/ja/models/core/automations/)を作成する方法を示します。ウェブフックオートメーションを作成するには、[ウェブフックオートメーションの作成](/ja/models/core/automations/create-automations/webhook)を参照してください。 高レベルでは、Slackオートメーションを作成するには、以下の手順を行います: diff --git a/ja/models/core/automations/create-automations/webhook.mdx b/ja/models/core/automations/create-automations/webhook.mdx index ee4774157a..faafa4e1d0 100644 --- a/ja/models/core/automations/create-automations/webhook.mdx +++ b/ja/models/core/automations/create-automations/webhook.mdx @@ -2,12 +2,6 @@ title: Webhook オートメーションを作成する --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - このページでは、webhook のオートメーションを作成する方法を示します。Slack オートメーションを作成するには、代わりに [Slack オートメーションの作成](/ja/models/core/automations/create-automations/slack)を参照してください。 webhook オートメーションを作成するための大まかな手順は以下の通りです。 diff --git a/ko/models/automations.mdx b/ko/models/automations.mdx index 3e7ced4fa4..d79d6e6304 100644 --- a/ko/models/automations.mdx +++ b/ko/models/automations.mdx @@ -2,11 +2,6 @@ title: Automations 개요 description: thoughtful_thought W&B 내의 이벤트를 기반으로 워크플로우를 트리거하려면 W&B Automations를 사용하세요. --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - 이 페이지는 W&B의 _automations_ (자동화)에 대해 설명합니다. W&B에서 발생한 이벤트를 기반으로 자동화된 모델 테스트 및 배포와 같은 워크플로우 단계를 트리거하려면 [automation 생성하기](/models/automations/create-automations/)를 참조하세요. diff --git a/ko/models/automations/automation-events.mdx b/ko/models/automations/automation-events.mdx index e90da77ab5..c7ca96051e 100644 --- a/ko/models/automations/automation-events.mdx +++ b/ko/models/automations/automation-events.mdx @@ -1,13 +1,8 @@ --- title: 자동화 이벤트 및 스코프 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import MultiTenantCloudOnly from "/snippets/en/_includes/multi-tenant-cloud-only.mdx"; - - - - 특정 이벤트가 Projects 또는 registry 내에서 발생할 때 자동화를 시작할 수 있습니다. 이 페이지에서는 각 범위 내에서 자동화를 트리거할 수 있는 이벤트에 대해 설명합니다. 자동화에 대한 자세한 내용은 [Automations 개요](/models/automations/) 또는 [자동화 만들기](/models/automations/create-automations/)에서 확인할 수 있습니다. ## Registry @@ -134,7 +129,6 @@ z-score 자동화를 생성하려면 다음을 구성합니다: - z-score가 -2.0이면 메트릭이 평균보다 2 표준 편차 낮음을 의미합니다. - ±2를 벗어나는 값은 종종 통계적으로 유의미한 이상치(outlier)로 간주됩니다. - #### Run 필터 이 섹션에서는 자동화가 평가할 run을 선택하는 방법에 대해 설명합니다. diff --git a/ko/models/automations/create-automations.mdx b/ko/models/automations/create-automations.mdx index 341849f59e..8aeea0f955 100644 --- a/ko/models/automations/create-automations.mdx +++ b/ko/models/automations/create-automations.mdx @@ -2,11 +2,6 @@ title: 개요 description: ML 워크플로우 를 간소화하기 위한 W&B 자동화 기능을 생성하고 관리하세요 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - 이 페이지는 W&B [automations](/models/automations/)를 생성하고 관리하는 방법에 대한 개요를 제공합니다. 더 자세한 지침은 [Slack automation 생성하기](/models/automations/create-automations/slack/) 또는 [Webhook automation 생성하기](/models/automations/create-automations/webhook/)를 참조하세요. diff --git a/ko/models/automations/create-automations/slack.mdx b/ko/models/automations/create-automations/slack.mdx index 8f97005771..0727752a84 100644 --- a/ko/models/automations/create-automations/slack.mdx +++ b/ko/models/automations/create-automations/slack.mdx @@ -1,11 +1,6 @@ --- title: Slack 자동화 만들기 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - 이 페이지는 Slack [automation](/models/automations/)을 생성하는 방법을 설명합니다. Webhook automation을 생성하려면 대신 [Create a webhook automation](/models/automations/create-automations/webhook/)을 참조하세요. diff --git a/ko/models/automations/create-automations/webhook.mdx b/ko/models/automations/create-automations/webhook.mdx index f45ab8c02d..6e6db2282f 100644 --- a/ko/models/automations/create-automations/webhook.mdx +++ b/ko/models/automations/create-automations/webhook.mdx @@ -1,11 +1,6 @@ --- title: Webhook 자동화 생성하기 --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - 이 페이지는 webhook [automation](/models/automations/)을 생성하는 방법을 보여줍니다. Slack 자동화를 생성하려면 [Create a Slack automation](/models/automations/create-automations/slack/)을 대신 참조하세요. @@ -296,7 +291,6 @@ webhook 문제를 해결하려면 아래 코드를 쉘 스크립트에 복사하 * `PAYLOAD` * `API_ENDPOINT` - ```bash webhook_test.sh #!/bin/bash diff --git a/ko/models/automations/view-automation-history.mdx b/ko/models/automations/view-automation-history.mdx index 8f85a38a6a..988c9982df 100644 --- a/ko/models/automations/view-automation-history.mdx +++ b/ko/models/automations/view-automation-history.mdx @@ -2,13 +2,6 @@ title: 자동화 히스토리 보기 --- - -이 기능은 Enterprise 라이선스가 필요합니다. 다음 환경에서만 사용할 수 있습니다: -- W&B Multi-tenant Cloud -- W&B 전용 클라우드 -- W&B Self-Managed v0.75.0 이상 - - 이 페이지에서는 W&B [automations](/models/automations)의 실행 기록을 확인하고 이해하는 방법을 설명합니다. 여기에는 무엇이 자동화를 트리거했는지, 어떤 액션이 취해졌는지, 그리고 실행의 성공 또는 실패 여부가 포함됩니다. 각 실행된 자동화는 다음을 포함하는 레코드를 생성합니다: diff --git a/ko/models/core/automations.mdx b/ko/models/core/automations.mdx index e4d54c7715..114d430d66 100644 --- a/ko/models/core/automations.mdx +++ b/ko/models/core/automations.mdx @@ -2,12 +2,6 @@ title: Automations --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - 이 페이지는 W&B의 _자동화_ 에 대해 설명합니다. [자동화 생성](/ko/models/core/automations/create-automations/)을 통해, [artifact](/ko/models/artifacts/) 아티팩트 버전이 생성될 때와 같이 W&B의 이벤트에 따라 자동 모델 테스트 및 배포와 같은 워크플로우 단계를 트리거할 수 있습니다. 예를 들어, 새로운 버전이 생성될 때 Slack 채널에 게시하거나, `production` 에일리어스가 아티팩트에 추가될 때 자동 테스트를 트리거하는 훅을 실행하는 자동화를 설정할 수 있습니다. diff --git a/ko/models/core/automations/automation-events.mdx b/ko/models/core/automations/automation-events.mdx index 8411258e4e..ad4617296e 100644 --- a/ko/models/core/automations/automation-events.mdx +++ b/ko/models/core/automations/automation-events.mdx @@ -2,12 +2,6 @@ title: Automation events and scopes --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - 자동화는 특정 이벤트가 프로젝트 또는 레지스트리의 범위 내에서 발생할 때 시작될 수 있습니다. 프로젝트의 *범위*는 [범위에 대한 기술적 정의 삽입]을 의미합니다. 이 페이지에서는 각 범위 내에서 자동화를 트리거할 수 있는 이벤트에 대해 설명합니다. 자동화에 대해 자세히 알아보려면 [자동화 개요](/ko/models/core/automations/) 또는 [자동화 생성](/ko/models/core/automations/create-automations/)을 참조하세요. diff --git a/ko/models/core/automations/create-automations.mdx b/ko/models/core/automations/create-automations.mdx index f6408198c7..d4c1197bdf 100644 --- a/ko/models/core/automations/create-automations.mdx +++ b/ko/models/core/automations/create-automations.mdx @@ -2,12 +2,6 @@ title: Create an automation --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - 이 페이지에서는 W&B [자동화](/ko/models/core/automations/) 생성 및 관리에 대한 개요를 제공합니다. 자세한 내용은 [Slack 자동화 생성](/ko/models/core/automations/create-automations/slack) 또는 [Webhook 자동화 생성](/ko/models/core/automations/create-automations/webhook)을 참조하세요. diff --git a/ko/models/core/automations/create-automations/slack.mdx b/ko/models/core/automations/create-automations/slack.mdx index bdc43d61c1..9794fef083 100644 --- a/ko/models/core/automations/create-automations/slack.mdx +++ b/ko/models/core/automations/create-automations/slack.mdx @@ -2,12 +2,6 @@ title: Create a Slack automation --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - 이 페이지에서는 Slack [자동화](/ko/models/core/automations/)를 만드는 방법을 보여줍니다. 웹훅 자동화를 만들려면 [웹훅 자동화 생성](/ko/models/core/automations/create-automations/webhook)를 대신 참조하세요. Slack 자동화를 생성하려면 다음과 같은 단계를 수행합니다. diff --git a/ko/models/core/automations/create-automations/webhook.mdx b/ko/models/core/automations/create-automations/webhook.mdx index 1bae1cd911..5f3cb2ca3c 100644 --- a/ko/models/core/automations/create-automations/webhook.mdx +++ b/ko/models/core/automations/create-automations/webhook.mdx @@ -2,12 +2,6 @@ title: Create a webhook automation --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - - 이 페이지에서는 webhook [자동화](/ko/models/core/automations/)를 만드는 방법을 보여줍니다. Slack 자동화를 만들려면 [Slack 자동화 만들기](/ko/models/core/automations/create-automations/slack)를 참조하세요. 개략적으로 webhook 자동화를 만들려면 다음 단계를 수행합니다. diff --git a/models/automations.mdx b/models/automations.mdx index d7f68e15f1..96add7dbe8 100644 --- a/models/automations.mdx +++ b/models/automations.mdx @@ -3,16 +3,11 @@ title: Automations overview sidebarTitle: Overview description: Use W&B Automations for triggering workflows based on events in W&B --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; import AutomationsActionsList from "/snippets/en/_includes/automations/actions-list.mdx"; import AutomationsBestPractices from "/snippets/en/_includes/automations/best-practices.mdx"; import AutomationsWhereToFind from "/snippets/en/_includes/automations/where-to-find-automations.mdx"; - - - - Automations exist for both **projects** and **registries**. Where you create an automation, which events you can use, and how scope works all differ. For event types by scope, see [Automation events and scopes](/models/automations/automation-events). diff --git a/models/automations/api.mdx b/models/automations/api.mdx index 9f7ea396a1..59a4c1abfb 100644 --- a/models/automations/api.mdx +++ b/models/automations/api.mdx @@ -2,11 +2,6 @@ title: Manage automations with the API description: Create, list, get, update, and delete W&B automations using the Python API --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - You can manage W&B [automations](/models/automations) programmatically with the public Python API. This page summarizes the main operations. For full method signatures and parameters, see the [Automations API reference](/models/ref/python/public-api/automations). diff --git a/models/automations/automation-events.mdx b/models/automations/automation-events.mdx index b4e9d62376..25a4e4a50f 100644 --- a/models/automations/automation-events.mdx +++ b/models/automations/automation-events.mdx @@ -2,13 +2,8 @@ title: Automation events and scopes description: "Learn about events and scopes that trigger W&B Automations, including artifact changes, run status, and metric conditions." --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import MultiTenantCloudOnly from "/snippets/en/_includes/multi-tenant-cloud-only.mdx"; - - - - An automation can start when a specific event occurs within a project or registry. This page describes the events that can trigger an automation within each scope. Learn more about automations in the [Automations overview](/models/automations) or [Create an automation](/models/automations/create-automations). ## Registry @@ -135,7 +130,6 @@ For example, trigger an automation when `accuracy` has a z-score above 2, which - A z-score of -2.0 means the metric is 2 standard deviations below average. - Values beyond ±2 are often considered statistically significant outliers. - #### Run filters This section describes how the automation selects runs to evaluate. diff --git a/models/automations/create-automations.mdx b/models/automations/create-automations.mdx index 8c56c5b4e2..3be172fbb5 100644 --- a/models/automations/create-automations.mdx +++ b/models/automations/create-automations.mdx @@ -2,11 +2,6 @@ title: Overview description: Create and manage W&B automations to streamline your ML workflows --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - This page gives an overview of creating and managing W&B [automations](/models/automations). For more detailed instructions, refer to [Create a Slack automation](/models/automations/create-automations/slack) or [Create a webhook automation](/models/automations/create-automations/webhook). diff --git a/models/automations/create-automations/slack.mdx b/models/automations/create-automations/slack.mdx index 9e0754e7eb..aa3428abae 100644 --- a/models/automations/create-automations/slack.mdx +++ b/models/automations/create-automations/slack.mdx @@ -2,11 +2,6 @@ title: Create a Slack automation description: "Set up a Slack integration and create a W&B Automation that sends notifications to a Slack channel on specific events." --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - This page shows how to create a Slack [automation](/models/automations). To create a webhook automation, refer to [Create a webhook automation](/models/automations/create-automations/webhook) instead. diff --git a/models/automations/create-automations/webhook.mdx b/models/automations/create-automations/webhook.mdx index 5f4326b91f..0d14776deb 100644 --- a/models/automations/create-automations/webhook.mdx +++ b/models/automations/create-automations/webhook.mdx @@ -2,11 +2,6 @@ title: Create a webhook automation description: "Create a webhook automation in W&B to send HTTP requests to external services when specific events occur." --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; - - - - This page shows how to create a webhook [automation](/models/automations). To create a Slack automation, refer to [Create a Slack automation](/models/automations/create-automations/slack) instead. @@ -297,7 +292,6 @@ Copy and paste the code below into a shell script to troubleshoot your webhook. * `PAYLOAD` * `API_ENDPOINT` - ```bash webhook_test.sh #!/bin/bash diff --git a/models/automations/project-automation-tutorial.mdx b/models/automations/project-automation-tutorial.mdx index b31f2edc4d..517aba8cdf 100644 --- a/models/automations/project-automation-tutorial.mdx +++ b/models/automations/project-automation-tutorial.mdx @@ -2,15 +2,10 @@ title: "Tutorial: Project run-failure alert automation" description: Build a run-failure alert that sends a Slack notification when a run in your project fails. --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import TutorialDiagramProject from "/snippets/en/_includes/automations/tutorial-diagram-project.mdx"; import TutorialNotebook from "/snippets/en/_includes/automations/tutorial-notebook.mdx"; import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-further.mdx"; - - - - This tutorial walks you through building a **project** automation triggered by run status: when a run in your project transitions to **Failed**, W&B sends a Slack notification. diff --git a/models/automations/registry-automation-tutorial.mdx b/models/automations/registry-automation-tutorial.mdx index 4377303997..2741d3d67b 100644 --- a/models/automations/registry-automation-tutorial.mdx +++ b/models/automations/registry-automation-tutorial.mdx @@ -2,15 +2,10 @@ title: "Tutorial: Registry artifact alias automation" description: Build an automation that runs a webhook when a Registry artifact gets a specific alias like "production". --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import TutorialDiagramRegistry from "/snippets/en/_includes/automations/tutorial-diagram-registry.mdx"; import TutorialNotebook from "/snippets/en/_includes/automations/tutorial-notebook.mdx"; import TutorialGoFurther from "/snippets/en/_includes/automations/tutorial-go-further.mdx"; - - - - This tutorial walks you through building a **registry** automation triggered by artifact metadata: when an artifact in your registry gets a specific alias (for example, **production**), W&B sends a POST request to your webhook. diff --git a/models/automations/tutorial.mdx b/models/automations/tutorial.mdx index 1ea7ca489f..b477e126fd 100644 --- a/models/automations/tutorial.mdx +++ b/models/automations/tutorial.mdx @@ -3,15 +3,10 @@ title: Automation tutorial overview sidebarTitle: Overview description: Learn to build a project run-failure alert or a registry alias automation. --- -import EnterpriseCloudOnly from "/snippets/en/_includes/enterprise-cloud-only.mdx"; import AutomationsMentalModel from "/snippets/en/_includes/automations/mental-model.mdx"; import TutorialDiagramProject from "/snippets/en/_includes/automations/tutorial-diagram-project.mdx"; import TutorialDiagramRegistry from "/snippets/en/_includes/automations/tutorial-diagram-registry.mdx"; - - - - Select a tutorial for detailed guidance. diff --git a/models/automations/view-automation-history.mdx b/models/automations/view-automation-history.mdx index 24dd70e021..a15e2d3ee8 100644 --- a/models/automations/view-automation-history.mdx +++ b/models/automations/view-automation-history.mdx @@ -3,13 +3,6 @@ title: View an automation's history description: "View the execution history of your W&B Automations to check status, triggering events, and action results." --- - -This feature requires an Enterprise license. It is available only for: -- W&B Multi-tenant Cloud -- W&B Dedicated Cloud -- W&B Self-Managed v0.75.0+ - - This page describes how to view and understand the execution history of your W&B [automations](/models/automations), including what triggered an automation, what actions were taken, and whether they succeeded or failed. Each executed automation generates a record that includes: From 25a0ab78faad736f4620c2538afd366cbdec390c Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Thu, 26 Mar 2026 16:21:07 -0700 Subject: [PATCH 11/12] Trying to add more space around mermaid --- snippets/en/_includes/automations/tutorial-diagram-project.mdx | 1 + snippets/en/_includes/automations/tutorial-diagram-registry.mdx | 2 ++ 2 files changed, 3 insertions(+) diff --git a/snippets/en/_includes/automations/tutorial-diagram-project.mdx b/snippets/en/_includes/automations/tutorial-diagram-project.mdx index 61114eb6de..be0f87235b 100644 --- a/snippets/en/_includes/automations/tutorial-diagram-project.mdx +++ b/snippets/en/_includes/automations/tutorial-diagram-project.mdx @@ -1,4 +1,5 @@ ```mermaid +%%{init: {'flowchart': {'rankSpacing': 200;}}}%% flowchart LR Event[Run state change to Failed] Action[Slack notification] diff --git a/snippets/en/_includes/automations/tutorial-diagram-registry.mdx b/snippets/en/_includes/automations/tutorial-diagram-registry.mdx index d819be1259..54fd588bf1 100644 --- a/snippets/en/_includes/automations/tutorial-diagram-registry.mdx +++ b/snippets/en/_includes/automations/tutorial-diagram-registry.mdx @@ -1,6 +1,8 @@ ```mermaid + flowchart LR Event[Artifact alias added] Action[Webhook] Event --> Action + ``` From 67bf99dc549c30a293fe98f24899d62ef6e01e56 Mon Sep 17 00:00:00 2001 From: Matt Linville Date: Fri, 27 Mar 2026 15:36:24 -0700 Subject: [PATCH 12/12] Add vertical space around Mermaid diagrams --- .../en/_includes/automations/tutorial-diagram-project.mdx | 2 ++ .../en/_includes/automations/tutorial-diagram-registry.mdx | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/snippets/en/_includes/automations/tutorial-diagram-project.mdx b/snippets/en/_includes/automations/tutorial-diagram-project.mdx index be0f87235b..1e3d0cc1c4 100644 --- a/snippets/en/_includes/automations/tutorial-diagram-project.mdx +++ b/snippets/en/_includes/automations/tutorial-diagram-project.mdx @@ -1,3 +1,4 @@ +

```mermaid %%{init: {'flowchart': {'rankSpacing': 200;}}}%% flowchart LR @@ -5,3 +6,4 @@ flowchart LR Action[Slack notification] Event --> Action ``` +
diff --git a/snippets/en/_includes/automations/tutorial-diagram-registry.mdx b/snippets/en/_includes/automations/tutorial-diagram-registry.mdx index 54fd588bf1..eaf18b5ff8 100644 --- a/snippets/en/_includes/automations/tutorial-diagram-registry.mdx +++ b/snippets/en/_includes/automations/tutorial-diagram-registry.mdx @@ -1,8 +1,8 @@ +

```mermaid - flowchart LR Event[Artifact alias added] Action[Webhook] Event --> Action - ``` +