zenml-nightly 0.74.0.dev20250225__py3-none-any.whl → 0.74.0.dev20250226__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- zenml/VERSION +1 -1
- zenml/logging/step_logging.py +22 -0
- {zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/METADATA +90 -37
- {zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/RECORD +7 -7
- {zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/LICENSE +0 -0
- {zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/WHEEL +0 -0
- {zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/entry_points.txt +0 -0
zenml/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.74.0.
|
1
|
+
0.74.0.dev20250226
|
zenml/logging/step_logging.py
CHANGED
@@ -285,6 +285,28 @@ class StepLogsStorage:
|
|
285
285
|
Args:
|
286
286
|
force: whether to force a save even if the write conditions not met.
|
287
287
|
"""
|
288
|
+
import asyncio
|
289
|
+
import threading
|
290
|
+
|
291
|
+
# Most artifact stores are based on fsspec, which converts between
|
292
|
+
# sync and async operations by using a separate AIO thread.
|
293
|
+
# It may happen that the fsspec call itself will log something,
|
294
|
+
# which will trigger this method, which may then use fsspec again,
|
295
|
+
# causing a "Calling sync() from within a running loop" error, because
|
296
|
+
# the fsspec library does not expect sync calls being made as a result
|
297
|
+
# of a logging call made by itself.
|
298
|
+
# To avoid this, we simply check if we're running in the fsspec AIO
|
299
|
+
# thread and skip the save if that's the case.
|
300
|
+
try:
|
301
|
+
if (
|
302
|
+
asyncio.events.get_running_loop() is not None
|
303
|
+
and threading.current_thread().name == "fsspecIO"
|
304
|
+
):
|
305
|
+
return
|
306
|
+
except RuntimeError:
|
307
|
+
# No running loop
|
308
|
+
pass
|
309
|
+
|
288
310
|
if not self.disabled and (self._is_write_needed or force):
|
289
311
|
# IMPORTANT: keep this as the first code line in this method! The
|
290
312
|
# code that follows might still emit logging messages, which will
|
{zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/METADATA
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.3
|
2
2
|
Name: zenml-nightly
|
3
|
-
Version: 0.74.0.
|
3
|
+
Version: 0.74.0.dev20250226
|
4
4
|
Summary: ZenML: Write production-ready ML code.
|
5
5
|
License: Apache-2.0
|
6
6
|
Keywords: machine learning,production,pipeline,mlops,devops
|
@@ -79,10 +79,12 @@ Requires-Dist: kfp (>=2.6.0) ; extra == "vertex"
|
|
79
79
|
Requires-Dist: kubernetes (>=18.20.0) ; extra == "connectors-kubernetes" or extra == "connectors-aws" or extra == "connectors-gcp" or extra == "connectors-azure"
|
80
80
|
Requires-Dist: maison (<2.0) ; extra == "dev"
|
81
81
|
Requires-Dist: mike (>=1.1.2,<2.0.0) ; extra == "dev"
|
82
|
-
Requires-Dist: mkdocs (>=1.
|
82
|
+
Requires-Dist: mkdocs (>=1.4.0,<2.0.0) ; extra == "dev"
|
83
|
+
Requires-Dist: mkdocs-autorefs (>=0.4.1,<1.0.0) ; extra == "dev"
|
83
84
|
Requires-Dist: mkdocs-awesome-pages-plugin (>=2.6.1,<3.0.0) ; extra == "dev"
|
84
|
-
Requires-Dist: mkdocs-material (>=
|
85
|
-
Requires-Dist: mkdocstrings (>=0.
|
85
|
+
Requires-Dist: mkdocs-material (>=9.0.0,<10.0.0) ; extra == "dev"
|
86
|
+
Requires-Dist: mkdocstrings (>=0.20.0,<1.0.0) ; extra == "dev"
|
87
|
+
Requires-Dist: mkdocstrings-python (>=1.1.0,<2.0.0) ; extra == "dev"
|
86
88
|
Requires-Dist: mypy (==1.7.1) ; extra == "dev"
|
87
89
|
Requires-Dist: orjson (>=3.10.0,<3.11.0) ; extra == "server"
|
88
90
|
Requires-Dist: packaging (>=24.1)
|
@@ -144,8 +146,8 @@ Description-Content-Type: text/markdown
|
|
144
146
|
|
145
147
|
<div align="center">
|
146
148
|
<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=0fcbab94-8fbe-4a38-93e8-c2348450a42e" />
|
147
|
-
<h1 align="center">
|
148
|
-
</
|
149
|
+
<h1 align="center">Beyond The Demo: Production-Grade AI Systems</h1>
|
150
|
+
<h3 align="center">ZenML brings battle-tested MLOps practices to your AI applications, handling evaluation, monitoring, and deployment at scale</h3>
|
149
151
|
</div>
|
150
152
|
|
151
153
|
<!-- PROJECT SHIELDS -->
|
@@ -244,40 +246,44 @@ Take a tour with the guided quickstart by running:
|
|
244
246
|
zenml go
|
245
247
|
```
|
246
248
|
|
247
|
-
## 🪄
|
249
|
+
## 🪄 From Prototype to Production: AI Made Simple
|
248
250
|
|
249
|
-
### Create
|
251
|
+
### Create AI pipelines with minimal code changes
|
250
252
|
|
251
|
-
ZenML is
|
253
|
+
ZenML is an open-source framework that handles MLOps and LLMOps for engineers scaling AI beyond prototypes. Automate evaluation loops, track performance, and deploy updates across 100s of pipelines—all while your RAG apps run like clockwork.
|
252
254
|
|
253
255
|
```python
|
254
256
|
from zenml import pipeline, step
|
255
257
|
|
256
|
-
@step
|
257
|
-
def
|
258
|
-
|
259
|
-
|
260
|
-
return {
|
258
|
+
@step
|
259
|
+
def load_rag_documents() -> dict:
|
260
|
+
# Load and chunk documents for RAG pipeline
|
261
|
+
documents = extract_web_content(url="https://www.zenml.io/")
|
262
|
+
return {"chunks": chunk_documents(documents)}
|
261
263
|
|
262
264
|
@step
|
263
|
-
def
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
print(f"Trained model using {len(data['features'])} data points. "
|
268
|
-
f"Feature sum is {total_features}, label sum is {total_labels}")
|
265
|
+
def generate_embeddings(data: dict) -> None:
|
266
|
+
# Generate embeddings for RAG pipeline
|
267
|
+
embeddings = embed_documents(data['chunks'])
|
268
|
+
return {"embeddings": embeddings}
|
269
269
|
|
270
|
-
@
|
271
|
-
def
|
272
|
-
|
273
|
-
|
270
|
+
@step
|
271
|
+
def index_generator(
|
272
|
+
embeddings: dict,
|
273
|
+
) -> str:
|
274
|
+
# Generate index for RAG pipeline
|
275
|
+
index = create_index(embeddings)
|
276
|
+
return index.id
|
277
|
+
|
274
278
|
|
275
|
-
|
276
|
-
|
277
|
-
|
279
|
+
@pipeline
|
280
|
+
def rag_pipeline() -> str:
|
281
|
+
documents = load_rag_documents()
|
282
|
+
embeddings = generate_embeddings(documents)
|
283
|
+
index = index_generator(embeddings)
|
284
|
+
return index
|
278
285
|
```
|
279
|
-
|
280
|
-

|
286
|
+

|
281
287
|
|
282
288
|
### Easily provision an MLOps stack or reuse your existing infrastructure
|
283
289
|
|
@@ -329,18 +335,47 @@ def training(...):
|
|
329
335
|
|
330
336
|
Create a complete lineage of who, where, and what data and models are produced.
|
331
337
|
|
332
|
-
You
|
338
|
+
You'll be able to find out who produced which model, at what time, with which data, and on which version of the code. This guarantees full reproducibility and auditability.
|
333
339
|
|
334
340
|
```python
|
335
341
|
from zenml import Model
|
336
342
|
|
337
|
-
@step(model=Model(name="
|
338
|
-
def
|
339
|
-
|
343
|
+
@step(model=Model(name="rag_llm", tags=["staging"]))
|
344
|
+
def deploy_rag(index_id: str) -> str:
|
345
|
+
deployment_id = deploy_to_endpoint(index_id)
|
346
|
+
return deployment_id
|
340
347
|
```
|
341
348
|
|
342
349
|

|
343
350
|
|
351
|
+
## 🚀 Key LLMOps Capabilities
|
352
|
+
|
353
|
+
### Continual RAG Improvement
|
354
|
+
**Build production-ready retrieval systems**
|
355
|
+
|
356
|
+
<div align="center">
|
357
|
+
<img src="/docs/book/.gitbook/assets/rag_zenml_home.png" width="800" alt="RAG Pipeline">
|
358
|
+
</div>
|
359
|
+
|
360
|
+
ZenML tracks document ingestion, embedding versions, and query patterns. Implement feedback loops and:
|
361
|
+
- Fix your RAG logic based on production logs
|
362
|
+
- Automatically re-ingest updated documents
|
363
|
+
- A/B test different embedding models
|
364
|
+
- Monitor retrieval quality metrics
|
365
|
+
|
366
|
+
### Reproducible Model Fine-Tuning
|
367
|
+
**Confidence in model updates**
|
368
|
+
|
369
|
+
<div align="center">
|
370
|
+
<img src="/docs/book/.gitbook/assets/finetune_zenml_home.png" width="800" alt="Finetuning Pipeline">
|
371
|
+
</div>
|
372
|
+
|
373
|
+
Maintain full lineage of SLM/LLM training runs:
|
374
|
+
- Version training data and hyperparameters
|
375
|
+
- Track performance across iterations
|
376
|
+
- Automatically promote validated models
|
377
|
+
- Roll back to previous versions if needed
|
378
|
+
|
344
379
|
### Purpose built for machine learning with integrations to your favorite tools
|
345
380
|
|
346
381
|
While ZenML brings a lot of value out of the box, it also integrates into your existing tooling and infrastructure without you having to be locked in.
|
@@ -357,6 +392,14 @@ def train_and_deploy(training_df: pd.DataFrame) -> bento.Bento
|
|
357
392
|
|
358
393
|

|
359
394
|
|
395
|
+
## 🔄 Your LLM Framework Isn't Enough for Production
|
396
|
+
|
397
|
+
While tools like LangChain and LlamaIndex help you **build** LLM workflows, ZenML helps you **productionize** them by adding:
|
398
|
+
|
399
|
+
✅ **Artifact Tracking** - Every vector store index, fine-tuned model, and evaluation result versioned automatically
|
400
|
+
✅ **Pipeline History** - See exactly what code/data produced each version of your RAG system
|
401
|
+
✅ **Stage Promotion** - Move validated pipelines from staging → production with one click
|
402
|
+
|
360
403
|
## 🖼️ Learning
|
361
404
|
|
362
405
|
The best way to learn about ZenML is the [docs](https://docs.zenml.io/). We recommend beginning with the [Starter Guide](https://docs.zenml.io/user-guide/starter-guide) to get up and running quickly.
|
@@ -441,13 +484,23 @@ Or, if you
|
|
441
484
|
prefer, [open an issue](https://github.com/zenml-io/zenml/issues/new/choose) on
|
442
485
|
our GitHub repo.
|
443
486
|
|
444
|
-
##
|
487
|
+
## 📚 LLM-focused Learning Resources
|
445
488
|
|
446
|
-
|
489
|
+
1. [LL Complete Guide - Full RAG Pipeline](https://github.com/zenml-io/zenml-projects/tree/main/llm-complete-guide) - Document ingestion, embedding management, and query serving
|
490
|
+
2. [LLM Fine-Tuning Pipeline](https://github.com/zenml-io/zenml-projects/tree/main/llm-finetuning) - From data prep to deployed model
|
491
|
+
3. [LLM Agents Example](https://github.com/zenml-io/zenml-projects/tree/main/llm-agents) - Track conversation quality and tool usage
|
447
492
|
|
448
|
-
|
493
|
+
## 🤖 AI-Friendly Documentation with llms.txt
|
449
494
|
|
450
|
-
|
495
|
+
ZenML implements the llms.txt standard to make our documentation more accessible to AI assistants and LLMs. Our implementation includes:
|
496
|
+
|
497
|
+
- Base documentation at [zenml.io/llms.txt](https://zenml.io/llms.txt) with core user guides
|
498
|
+
- Specialized files for different documentation aspects:
|
499
|
+
- [Component guides](https://zenml.io/component-guide.txt) for integration details
|
500
|
+
- [How-to guides](https://zenml.io/how-to-guides.txt) for practical implementations
|
501
|
+
- [Complete documentation corpus](https://zenml.io/llms-full.txt) for comprehensive access
|
502
|
+
|
503
|
+
This structured approach helps AI tools better understand and utilize ZenML's documentation, enabling more accurate code suggestions and improved documentation search.
|
451
504
|
|
452
505
|
## 📜 License
|
453
506
|
|
{zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/RECORD
RENAMED
@@ -1,5 +1,5 @@
|
|
1
1
|
zenml/README.md,sha256=827dekbOWAs1BpW7VF1a4d7EbwPbjwccX-2zdXBENZo,1777
|
2
|
-
zenml/VERSION,sha256=
|
2
|
+
zenml/VERSION,sha256=n_IJGeb0RH66CmOQbcKEAS5voks_xBKYRaXKI1Qb0m0,19
|
3
3
|
zenml/__init__.py,sha256=SkMObQA41ajqdZqGErN00S1Vf3KAxpLvbZ-OBy5uYoo,2130
|
4
4
|
zenml/actions/__init__.py,sha256=mrt6wPo73iKRxK754_NqsGyJ3buW7RnVeIGXr1xEw8Y,681
|
5
5
|
zenml/actions/base_action.py,sha256=UcaHev6BTuLDwuswnyaPjdA8AgUqB5xPZ-lRtuvf2FU,25553
|
@@ -576,7 +576,7 @@ zenml/io/filesystem_registry.py,sha256=stujDg4a5k983WMwp3rj4Z4puiUco4REyVoIoMIpI
|
|
576
576
|
zenml/io/local_filesystem.py,sha256=xQTZPT5cpooptUV8KiifxZojS6pWCv1-6UUxitUYb_E,7386
|
577
577
|
zenml/logger.py,sha256=LMV2sMFQ-6JK9xEn6kEt1C9vAoQ0lwuHVM5XHIeKubE,6966
|
578
578
|
zenml/logging/__init__.py,sha256=lnqbOa31wAHwPP5f8vZazOrUwnP2QviLiIVwxoAefD8,975
|
579
|
-
zenml/logging/step_logging.py,sha256=
|
579
|
+
zenml/logging/step_logging.py,sha256=6QDfn4oN4h7D_M3RxkVre0NBYRou8IeVtk1vyO89tqQ,18551
|
580
580
|
zenml/login/__init__.py,sha256=Evi7hq8tpUn57IM3iX3hYP0r8oIeEWUhS471TAOyVGs,644
|
581
581
|
zenml/login/credentials.py,sha256=dl7qB0Xh-RY9mJsB1bQWCx_xwHisrv6mT5YddZvn0Ko,12707
|
582
582
|
zenml/login/credentials_store.py,sha256=Hrkk8xzoLwK50Z0dZpjr-aCudUADQFMfzb-2r_vyJRo,23619
|
@@ -1280,8 +1280,8 @@ zenml/zen_stores/secrets_stores/sql_secrets_store.py,sha256=nEO0bAPlULBLxLVk-UTR
|
|
1280
1280
|
zenml/zen_stores/sql_zen_store.py,sha256=L3PtBT-VULJVh4udD4eY4TbU_o1iEC23VyUh26uBo5Y,415902
|
1281
1281
|
zenml/zen_stores/template_utils.py,sha256=EKYBgmDLTS_PSMWaIO5yvHPLiQvMqHcsAe6NUCrv-i4,9068
|
1282
1282
|
zenml/zen_stores/zen_store_interface.py,sha256=vf2gKBWfUUPtcGZC35oQB6pPNVzWVyQC8nWxVLjfrxM,92692
|
1283
|
-
zenml_nightly-0.74.0.
|
1284
|
-
zenml_nightly-0.74.0.
|
1285
|
-
zenml_nightly-0.74.0.
|
1286
|
-
zenml_nightly-0.74.0.
|
1287
|
-
zenml_nightly-0.74.0.
|
1283
|
+
zenml_nightly-0.74.0.dev20250226.dist-info/LICENSE,sha256=wbnfEnXnafPbqwANHkV6LUsPKOtdpsd-SNw37rogLtc,11359
|
1284
|
+
zenml_nightly-0.74.0.dev20250226.dist-info/METADATA,sha256=Kt71h9uwFZZLAkdOEla7Snde0AoZGAEj-eZtZn7tWYY,24274
|
1285
|
+
zenml_nightly-0.74.0.dev20250226.dist-info/WHEEL,sha256=XbeZDeTWKc1w7CSIyre5aMDU_-PohRwTQceYnisIYYY,88
|
1286
|
+
zenml_nightly-0.74.0.dev20250226.dist-info/entry_points.txt,sha256=QK3ETQE0YswAM2mWypNMOv8TLtr7EjnqAFq1br_jEFE,43
|
1287
|
+
zenml_nightly-0.74.0.dev20250226.dist-info/RECORD,,
|
{zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/LICENSE
RENAMED
File without changes
|
{zenml_nightly-0.74.0.dev20250225.dist-info → zenml_nightly-0.74.0.dev20250226.dist-info}/WHEEL
RENAMED
File without changes
|
File without changes
|