Skip to content

Commit 34aeb41

Browse files
committed
Merge branch 'develop' into feature/dynamic-pipelines
2 parents e217f58 + df07e1d commit 34aeb41

File tree

154 files changed

+10402
-1820
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

154 files changed

+10402
-1820
lines changed

AGENTS.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ Use filesystem navigation tools to explore the codebase structure as needed.
6262
- It resolves dependencies more quickly and reliably than pip
6363
- It can resolve dependency conflicts that pip sometimes struggles with or takes a long time to resolve
6464

65+
### Documentation Access via MCP
66+
ZenML documentation is available via a built-in GitBook MCP server: https://docs.zenml.io/~gitbook/mcp. IDE agents like Cursor and Claude Code can add this as an HTTP MCP server named 'ZenML Docs' to answer questions directly from the docs while you code. This enables live, source-of-truth lookups with fewer hallucinations and faster feature discovery. Note that the MCP server indexes the latest released docs, not the develop branch. For full setup details and examples, see docs/book/reference/llms-txt.md.
67+
6568
### Environment Variables
6669
- Several environment variables are useful during ZenML development:
6770
- `ZENML_DEBUG=true`: Enables verbose debug logging

CLAUDE.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,16 @@ This document provides guidance for Claude Code when working with the ZenML code
1212

1313
Use filesystem navigation tools to explore the codebase structure as needed.
1414

15+
## Use ZenML Docs via MCP
16+
Claude Code can query ZenML documentation via the built-in GitBook MCP server: https://docs.zenml.io/~gitbook/mcp. This enables real-time, source-of-truth lookups from the docs while you code, reducing hallucinations and speeding up feature discovery.
17+
18+
Quick setup (CLI):
19+
```bash
20+
claude mcp add zenmldocs --transport http https://docs.zenml.io/~gitbook/mcp
21+
```
22+
23+
Note: The MCP server indexes the latest released docs, not the develop branch. For full setup details and editor alternatives, see docs/book/reference/llms-txt.md.
24+
1525
## Code Style & Quality Standards
1626

1727
### Formatting and Linting

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ The MCP (Model Context Protocol) integration transforms your ZenML metadata into
127127

128128
The best way to learn about ZenML is through our comprehensive documentation and tutorials:
129129

130-
- **[Your First AI Pipeline](https://docs.zenml.io/your-first-ai-pipeline)** - Build and evaluate an AI service in minutes
130+
- **[Your First AI Pipeline](https://docs.zenml.io/getting-started/your-first-ai-pipeline)** - Build and evaluate an AI service in minutes
131131
- **[Starter Guide](https://docs.zenml.io/user-guides/starter-guide)** - From zero to production in 30 minutes
132132
- **[LLMOps Guide](https://docs.zenml.io/user-guides/llmops-guide)** - Specific patterns for LLM applications
133133
- **[SDK Reference](https://sdkdocs.zenml.io/)** - Complete SDK reference

RELEASE_NOTES.md

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,81 @@
11
<!-- markdown-link-check-disable -->
22

3+
# 0.91.0
4+
5+
This release brings major deployment enhancements (Local Deployer, fully customizable deployment server, and deployment visualizations), powerful caching controls (file/object-based cache invalidation, cache expiration, and custom cache functions), Python 3.13 support, an MLX array materializer, and a new option to customize image tags during builds. It also deprecates legacy model deployers and drops Python 3.9 support.
6+
7+
## ⚠️ Breaking Changes
8+
9+
- Drop Python 3.9 support
10+
11+
## Deprecations
12+
13+
- Model deployers are deprecated; use deployers to deploy entire pipelines instead
14+
15+
## New Features
16+
17+
### Deployment
18+
- Local Deployer for deploying pipelines locally
19+
- Deployment server is fully customizable via settings
20+
- Attach custom visualizations to deployments
21+
22+
### Caching
23+
- Specify files or Python objects that invalidate a step's cache
24+
- Cache expiration to bound cache lifetime
25+
- Custom cache function for advanced invalidation logic
26+
27+
### Other
28+
- MLX array materializer
29+
- Python 3.13 support
30+
- Customize the image tag of built Docker images
31+
32+
## Bug Fixes
33+
34+
- Fix incompatibility of print capturing when using `numba`
35+
- Fix the mount point configuration in the Hashicorp Vault secrets store
36+
37+
## What's Changed
38+
* Add version 0.85.0 to legacy docs by @github-actions[bot] in https://github.com/zenml-io/zenml/pull/4029
39+
* Add 0.90.0 to the migration tests by @github-actions[bot] in https://github.com/zenml-io/zenml/pull/4031
40+
* Document pipeline deployments and deployers by @stefannica in https://github.com/zenml-io/zenml/pull/4017
41+
* Snapshot docs by @schustmi in https://github.com/zenml-io/zenml/pull/4023
42+
* Update examples for deployed pipelines by @safoinme in https://github.com/zenml-io/zenml/pull/3960
43+
* Quote helm chart description by @schustmi in https://github.com/zenml-io/zenml/pull/4032
44+
* Add MLX array materializer by @nicholasjng in https://github.com/zenml-io/zenml/pull/4027
45+
* Better CLI error messages by @schustmi in https://github.com/zenml-io/zenml/pull/4035
46+
* Prevent MLX integration install on Intel Macs by @strickvl in https://github.com/zenml-io/zenml/pull/4039
47+
* Fixes for timestamps in logs by @bcdurak in https://github.com/zenml-io/zenml/pull/4052
48+
* Fix breaking `mypy` checks by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/4051
49+
* Extend list pipeline filters by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/3990
50+
* Add image tag docker setting by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/4025
51+
* Small docs improvements by @schustmi in https://github.com/zenml-io/zenml/pull/4041
52+
* Fix secret tags and logs for the AWS deployer by @stefannica in https://github.com/zenml-io/zenml/pull/4056
53+
* Fix snapshot exclusive tagging by @schustmi in https://github.com/zenml-io/zenml/pull/4034
54+
* Removing 3.9 & Adding 3.13 by @bcdurak in https://github.com/zenml-io/zenml/pull/4053
55+
* Fix for inconsistencies between numba and the wrapped print by @bcdurak in https://github.com/zenml-io/zenml/pull/4060
56+
* Fix the user avatar URL field length by @stefannica in https://github.com/zenml-io/zenml/pull/4065
57+
* Additional sorting options for snapshots and deployments by @schustmi in https://github.com/zenml-io/zenml/pull/4033
58+
* Document how to use Pro API keys to access the Pro workspace API by @stefannica in https://github.com/zenml-io/zenml/pull/4066
59+
* Upgrading mypy by @bcdurak in https://github.com/zenml-io/zenml/pull/4062
60+
* Update link for Your First AI Pipeline in README.md by @htahir1 in https://github.com/zenml-io/zenml/pull/4069
61+
* Add snapshot delete command to CLI by @strickvl in https://github.com/zenml-io/zenml/pull/4059
62+
* Deprecate model deployer in docs by @htahir1 in https://github.com/zenml-io/zenml/pull/4076
63+
* Additional caching configurations by @schustmi in https://github.com/zenml-io/zenml/pull/4040
64+
* Log metadata changes by @Json-Andriopoulos in https://github.com/zenml-io/zenml/pull/4049
65+
* Customizable Deployment server settings by @stefannica in https://github.com/zenml-io/zenml/pull/4064
66+
* Add GitBook MCP server documentation by @strickvl in https://github.com/zenml-io/zenml/pull/4080
67+
* Make sure image and user parameters are propagated by @zavidnyi in https://github.com/zenml-io/zenml/pull/4081
68+
* Fix image building bug introduced by deployment requirements by @stefannica in https://github.com/zenml-io/zenml/pull/4082
69+
* Local Deployer implementation by @stefannica in https://github.com/zenml-io/zenml/pull/4085
70+
* Fix the mount point configuration in the Hashicorp Vault secrets store and add it to helm chart by @stefannica in https://github.com/zenml-io/zenml/pull/4088
71+
* Deployment custom visualizations by @safoinme in https://github.com/zenml-io/zenml/pull/4016
72+
73+
## New Contributors
74+
* @zavidnyi made their first contribution in https://github.com/zenml-io/zenml/pull/4081
75+
76+
**Full Changelog**: https://github.com/zenml-io/zenml/compare/0.90.0...0.91.0
77+
78+
379
# 0.90.0
480

581
This release introduces pipeline snapshots and pipeline deployments, refactors the base package dependencies, and adds runtime environment variable support.

docker/zenml-server-hf-spaces.Dockerfile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ ENV ZENML_SERVER_SECURE_HEADERS_CSP="frame-ancestors *;"
5959
# ENV ZENML_SECRETS_STORE_VAULT_ADDR=""
6060
# ENV ZENML_SECRETS_STORE_VAULT_TOKEN=""
6161
# ENV ZENML_SECRETS_STORE_VAULT_NAMESPACE=""
62+
# ENV ZENML_SECRETS_STORE_MOUNT_POINT=""
6263
# ENV ZENML_SECRETS_STORE_MAX_VERSIONS=""
6364

6465
ENTRYPOINT ["uvicorn", "zenml.zen_server.zen_server_api:app", "--log-level", "debug", "--no-server-header"]

docs/book/component-guide/deployers/README.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,11 @@ Use deployers when you need request-response patterns, and orchestrators for sch
2525

2626
### Deployer Flavors
2727

28-
ZenML provides deployer implementations for different deployment environments:
28+
Out of the box, ZenML comes with a `local` deployer already part of the default stack that deploys pipelines on your local machine in the form of background processes. Additional Deployers are provided by integrations:
2929

3030
| Deployer | Flavor | Integration | Notes |
3131
|------------------------------------|-----------|---------------|------------------------------------------------------------------------------|
32+
| [Local](local.md) | `local` | _built-in_ | This is the default Deployer. It deploys pipelines on your local machine in the form of background processes. Should be used only for running ZenML locally. |
3233
| [Docker](docker.md) | `docker` | Built-in | Deploys pipelines as locally running Docker containers |
3334
| [GCP Cloud Run](gcp-cloud-run.md) | `gcp` | `gcp` | Deploys pipelines to Google Cloud Run for serverless execution |
3435
| [AWS App Runner](aws-app-runner.md) | `aws` | `aws` | Deploys pipelines to AWS App Runner for serverless execution |
@@ -43,9 +44,15 @@ zenml deployer flavor list
4344

4445
You don't need to directly interact with the ZenML deployer stack component in your code. As long as the deployer that you want to use is part of your active [ZenML stack](../../user-guide/production-guide/understand-stacks.md), you can simply deploy a pipeline or snapshot using the ZenML CLI or the ZenML SDK. The resulting deployment can be managed using the ZenML CLI or the ZenML SDK.
4546

46-
Example:
47+
Examples:
4748

48-
* set up a stack with a deployer:
49+
* just use the default stack - it has a default local deployer that will deploy the pipeline on your local machine in the form of a background process:
50+
51+
```bash
52+
zenml stack set default
53+
```
54+
55+
* or set up a new stack with a deployer in it:
4956

5057
```bash
5158
zenml deployer register docker --flavor=local
@@ -129,7 +136,7 @@ def weather_pipeline(city: str = "Paris", temperature: float = 20.0) -> str:
129136
return analysis
130137
```
131138

132-
For more information, see the [Deployable Pipeline Requirements](../../how-to/deployment/deployment.md#deployable-pipeline-requirements) section of the tutorial.
139+
For more information, see the [Deployable Pipeline Requirements](https://docs.zenml.io/concepts/deployment#deployable-pipeline-requirements) section of the tutorial.
133140

134141
#### Deployment Lifecycle Management
135142

docs/book/component-guide/deployers/aws-app-runner.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ ZenML will build a Docker image called `<CONTAINER_REGISTRY_URI>/zenml:<PIPELINE
138138
You can now [deploy any ZenML pipeline](https://docs.zenml.io/concepts/deployment) using the AWS App Runner deployer:
139139

140140
```shell
141-
zenml pipeline deploy my_module.my_pipeline
141+
zenml pipeline deploy --name my_deployment my_module.my_pipeline
142142
```
143143

144144
### Additional configuration

docs/book/component-guide/deployers/docker.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,22 @@ To use the Docker deployer, you can register it and use it in your active stack:
2525
```shell
2626
zenml deployer register docker --flavor=docker
2727

28-
# Register and activate a stack with the new orchestrator
28+
# Register and activate a stack with the new deployer
2929
zenml stack register docker-deployer -D docker -o default -a default --set
3030
```
3131
{% hint style="info" %}
3232
ZenML will build a local Docker image called `zenml:<PIPELINE_NAME>` and use it to deploy your pipeline as a Docker container. Check out [this page](https://docs.zenml.io/how-to/customize-docker-builds/) if you want to learn more about how ZenML builds these images and how you can customize them.
3333
{% endhint %}
3434

35-
You can now deploy your ZenML pipeline using the Docker deployer:
35+
You can now [deploy any ZenML pipeline](https://docs.zenml.io/concepts/deployment) using the Docker deployer:
3636

3737
```shell
3838
zenml pipeline deploy my_module.my_pipeline
3939
```
4040

4141
### Additional configuration
4242

43-
For additional configuration of the Local Docker orchestrator, you can pass the following `DockerDeployerSettings` attributes defined in the `zenml.deployers.docker.docker_deployer` module when configuring the deployer or defining or deploying your pipeline:
43+
For additional configuration of the Docker deployer, you can pass the following `DockerDeployerSettings` attributes defined in the `zenml.deployers.docker.docker_deployer` module when configuring the deployer or defining or deploying your pipeline:
4444

4545
* Basic settings common to all Deployers:
4646

@@ -71,7 +71,7 @@ def greet(name: str) -> str:
7171

7272
settings = {
7373
"deployer": DockerDeployerSettings(
74-
run_args={"port": 8000}
74+
port=8000
7575
)
7676
}
7777

docs/book/component-guide/deployers/gcp-cloud-run.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ ZenML will build a Docker image called `<CONTAINER_REGISTRY_URI>/zenml:<PIPELINE
114114
You can now [deploy any ZenML pipeline](https://docs.zenml.io/concepts/deployment) using the GCP Cloud Run deployer:
115115

116116
```shell
117-
zenml pipeline deploy my_module.my_pipeline
117+
zenml pipeline deploy --name my_deployment my_module.my_pipeline
118118
```
119119

120120
### Additional configuration
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
---
2+
description: Deploying pipelines on your local machine as background processes.
3+
---
4+
5+
# Local Deployer
6+
7+
The local deployer is a [deployer](./) flavor that comes built-in with ZenML and deploys pipelines on your local machine as background processes.
8+
9+
### When to use it
10+
11+
The local deployer is part of your default stack when you're first getting started with ZenML. Due to it running locally on your machine, it requires no additional setup and is easy to use and debug.
12+
13+
You should use the local deployer if:
14+
15+
* you're just getting started with ZenML and want to deploy pipelines without setting up any cloud infrastructure.
16+
* you're writing a new pipeline and want to experiment and debug quickly
17+
18+
### How to deploy it
19+
20+
The local deployer comes with ZenML and works without any additional setup.
21+
22+
### How to use it
23+
24+
To use the local deployer, you can register it and use it in your active stack:
25+
26+
```shell
27+
zenml deployer register <DEPLOYER_NAME> --flavor=local
28+
29+
# Register and activate a stack with the new deployer
30+
zenml stack register <STACK_NAME> -D <DEPLOYER_NAME> ... --set
31+
```
32+
33+
You can now [deploy any ZenML pipeline](https://docs.zenml.io/concepts/deployment) using the local deployer:
34+
35+
```shell
36+
zenml pipeline deploy --name my_deployment my_module.my_pipeline
37+
```
38+
### Additional configuration
39+
40+
For additional configuration of the Local deployer, you can pass the following `LocalDeployerSettings` attributes defined in the `zenml.deployers.local.local_deployer` module when configuring the deployer or defining or deploying your pipeline:
41+
42+
* Basic settings common to all Deployers:
43+
44+
* `auth_key`: A user-defined authentication key to use to authenticate with deployment API calls.
45+
* `generate_auth_key`: Whether to generate and use a random authentication key instead of the user-defined one.
46+
* `lcm_timeout`: The maximum time in seconds to wait for the deployment lifecycle management to complete.
47+
48+
* Settings specific to the Local deployer:
49+
50+
* `port`: A custom port that the deployment server will listen on. Not set by default.
51+
* `allocate_port_if_busy`: If True, allocate a free port if the configured `port` is busy or not set. Defaults to True.
52+
* `port_range`: The range of ports to search for a free port. Defaults to `(8000, 65535)`.
53+
* `address`: The address that the deployment server will listen on. Defaults to `127.0.0.1`.
54+
* `blocking`: Whether to run the deployment in the current process instead of running it as a daemon process. Defaults to False. Use this if you want to debug issues with the deployment ASGI application itself.
55+
56+
Check out [this docs page](https://docs.zenml.io/concepts/steps_and_pipelines/configuration) for more information on how to specify settings.
57+
58+
For example, if you wanted to specify the port to use for the deployment, you would configure settings as follows:
59+
60+
```python
61+
from zenml import step, pipeline
62+
from zenml.deployers.local.local_deployer import LocalDeployerSettings
63+
64+
65+
@step
66+
def greet(name: str) -> str:
67+
return f"Hello {name}!"
68+
69+
70+
settings = {
71+
"deployer": LocalDeployerSettings(
72+
port=8000
73+
)
74+
}
75+
76+
@pipeline(settings=settings)
77+
def greet_pipeline(name: str = "John"):
78+
greet(name=name)
79+
```

0 commit comments

Comments
 (0)