Skip to content

Commit 74eca8b

Browse files
zhoward-1claude
andauthored
fix: normalize Uniflow capitalization (#1099)
## Summary - Replaces all instances of `UniFlow` (incorrect) with `Uniflow` (correct) across docs and README - Files changed: `docs/user-guides/ml-pipelines/reference-system.md`, `docs/user-guides/ml-pipelines/type-system.md`, `python/README.md` - Left untouched: `python/michelangelo/cli/mactl/plugins/entity/pipeline/create.py` line 452 — `UniFlowConf` is a protobuf type URL identifier, not prose ## Test plan - [ ] Verify no remaining `UniFlow` in prose (only `UniFlowConf` in protobuf type URL is acceptable) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 7411dd4 commit 74eca8b

3 files changed

Lines changed: 24 additions & 24 deletions

File tree

docs/user-guides/ml-pipelines/reference-system.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
# Data Passing and References in UniFlow
1+
# Data Passing and References in Uniflow
22

33
## What you'll learn
44

5-
* How data flows between tasks in UniFlow
5+
* How data flows between tasks in Uniflow
66
* What References are and why they're needed
77
* How to work with task outputs and inputs
88
* Automatic serialization and deserialization
@@ -12,7 +12,7 @@
1212

1313
## The Problem: Data Between Tasks
1414

15-
When tasks run on distributed clusters, you can't just pass Python objects directly between them. UniFlow solves this with **References** - a smart system that handles data serialization, storage, and retrieval automatically.
15+
When tasks run on distributed clusters, you can't just pass Python objects directly between them. Uniflow solves this with **References** - a smart system that handles data serialization, storage, and retrieval automatically.
1616

1717
```python
1818
# What you write:
@@ -34,7 +34,7 @@ def my_pipeline(file_path: str):
3434
return result
3535
```
3636

37-
**Behind the scenes**, UniFlow:
37+
**Behind the scenes**, Uniflow:
3838
1. Serializes the DataFrame returned by `load_data`
3939
2. Stores it in your configured storage (S3, GCS, etc.)
4040
3. Passes a Reference (a URL + metadata) to `process_data`
@@ -45,7 +45,7 @@ def my_pipeline(file_path: str):
4545

4646
## Understanding References
4747

48-
A **Reference** is UniFlow's internal representation of data that's been stored between tasks. It contains:
48+
A **Reference** is Uniflow's internal representation of data that's been stored between tasks. It contains:
4949

5050
| Component | What It Is | Example |
5151
|-----------|-----------|---------|
@@ -69,7 +69,7 @@ from michelangelo.uniflow.plugins.ray import RayTask
6969
def load_data(file_path: str):
7070
"""
7171
Returns: pandas DataFrame
72-
UniFlow converts to: Reference pointing to stored DataFrame
72+
Uniflow converts to: Reference pointing to stored DataFrame
7373
"""
7474
import pandas as pd
7575
df = pd.read_csv(file_path)
@@ -80,7 +80,7 @@ def clean_data(data):
8080
"""
8181
Receives: Reference (automatically deserialized to DataFrame)
8282
Returns: Cleaned DataFrame
83-
UniFlow converts to: Reference pointing to stored cleaned data
83+
Uniflow converts to: Reference pointing to stored cleaned data
8484
"""
8585
# data is a real DataFrame, not a Reference object
8686
cleaned = data.dropna()
@@ -109,7 +109,7 @@ def training_pipeline(file_path: str):
109109
return model
110110
```
111111

112-
**Key insight:** Each task receives a Reference but works with the original Python object. UniFlow handles all serialization/deserialization.
112+
**Key insight:** Each task receives a Reference but works with the original Python object. Uniflow handles all serialization/deserialization.
113113

114114
---
115115

@@ -125,7 +125,7 @@ from michelangelo.uniflow.plugins.ray import RayTask
125125
def split_data(data):
126126
"""
127127
Returns: Tuple of (train_data, validation_data)
128-
UniFlow creates: Reference for each element
128+
Uniflow creates: Reference for each element
129129
"""
130130
from sklearn.model_selection import train_test_split
131131
train, val = train_test_split(data)
@@ -158,7 +158,7 @@ def training_pipeline(data):
158158

159159
## Cross-Framework Data Passing (Ray to Spark)
160160

161-
One of UniFlow's powerful features: **seamlessly pass data between Ray and Spark tasks**.
161+
One of Uniflow's powerful features: **seamlessly pass data between Ray and Spark tasks**.
162162

163163
```python
164164
from michelangelo.uniflow.core import task, workflow
@@ -170,7 +170,7 @@ def load_with_ray(file_path: str):
170170
"""
171171
Task 1: Load with Ray
172172
Returns: Ray dataset
173-
UniFlow creates: Reference
173+
Uniflow creates: Reference
174174
"""
175175
import ray.data
176176
dataset = ray.data.read_csv(file_path)
@@ -180,7 +180,7 @@ def load_with_ray(file_path: str):
180180
def process_with_spark(data):
181181
"""
182182
Task 2: Receives Reference from Ray task
183-
UniFlow automatically: Converts Ray dataset to Spark dataframe
183+
Uniflow automatically: Converts Ray dataset to Spark dataframe
184184
Returns: Spark dataframe
185185
"""
186186
# data is now a Spark DataFrame (automatic conversion!)
@@ -191,7 +191,7 @@ def process_with_spark(data):
191191
def analyze_with_ray(data):
192192
"""
193193
Task 3: Receives Reference from Spark task
194-
UniFlow automatically: Converts Spark dataframe to Ray dataset
194+
Uniflow automatically: Converts Spark dataframe to Ray dataset
195195
"""
196196
# data is now a Ray dataset (automatic conversion!)
197197
summary = data.groupby("category").mean()
@@ -215,7 +215,7 @@ def multi_framework_pipeline(file_path: str):
215215

216216
## Supported Data Types
217217

218-
UniFlow's type system (covered in detail in [Type System Guide](./type-system.md)) supports automatic serialization for:
218+
Uniflow's type system (covered in detail in [Type System Guide](./type-system.md)) supports automatic serialization for:
219219

220220
**Basic types:**
221221
- Integers, floats, strings, booleans
@@ -289,7 +289,7 @@ def process_data(data):
289289
result = some_computation(data)
290290
return json.dumps(result) # Don't do this!
291291

292-
# ✅ DO - Let UniFlow handle it
292+
# ✅ DO - Let Uniflow handle it
293293
@task(config=RayTask(...))
294294
def process_data(data):
295295
result = some_computation(data)
@@ -386,7 +386,7 @@ def expensive_task(input_data):
386386

387387
### Issue: "Data type not supported"
388388

389-
**Cause:** You're trying to pass a type that isn't registered with UniFlow
389+
**Cause:** You're trying to pass a type that isn't registered with Uniflow
390390

391391
**Solution:** See [Type System Guide](./type-system.md) for supported types and how to add custom types
392392

docs/user-guides/ml-pipelines/type-system.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,17 @@
22

33
## What you'll learn
44

5-
* What types UniFlow supports natively
5+
* What types Uniflow supports natively
66
* The 5 codec types and when to use each
77
* How to serialize custom data types
88
* Best practices for type safety in workflows
99
* How to add custom codecs for your types
1010

1111
---
1212

13-
## Overview: UniFlow's Type System
13+
## Overview: Uniflow's Type System
1414

15-
When data flows between tasks, UniFlow automatically **serializes** your Python objects for storage and **deserializes** them when the next task runs. This is powered by a flexible type system supporting 5 built-in codecs.
15+
When data flows between tasks, Uniflow automatically **serializes** your Python objects for storage and **deserializes** them when the next task runs. This is powered by a flexible type system supporting 5 built-in codecs.
1616

1717
### The 5 Built-In Codecs
1818

@@ -141,7 +141,7 @@ class ModelMetrics:
141141
def compute_metrics(predictions, ground_truth) -> ModelMetrics:
142142
"""
143143
Computes metrics and returns dataclass instance
144-
UniFlow automatically serializes the entire object
144+
Uniflow automatically serializes the entire object
145145
"""
146146
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
147147

@@ -342,7 +342,7 @@ import pickle
342342
def save_model_binary(model) -> bytes:
343343
"""
344344
Serialize model to bytes using pickle
345-
UniFlow stores and serializes the bytes
345+
Uniflow stores and serializes the bytes
346346
"""
347347
return pickle.dumps(model)
348348

@@ -461,7 +461,7 @@ def compute_quality(data: pd.DataFrame) -> DataQualityMetrics:
461461

462462
### Issue: "Type not serializable"
463463

464-
**Cause:** Trying to return a type UniFlow doesn't know about
464+
**Cause:** Trying to return a type Uniflow doesn't know about
465465

466466
**Solution:** Use one of the 5 codecs:
467467
1. Wrap in dataclass

python/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Michelangelo gives ML engineers and data scientists a unified Python SDK for the
99

1010
## Key Features
1111

12-
- **UniFlow Pipeline Framework** — Define ML workflows with `@task` and `@workflow` decorators. Write plain Python functions and Michelangelo handles distributed execution, data passing between tasks, and result caching.
12+
- **Uniflow Pipeline Framework** — Define ML workflows with `@task` and `@workflow` decorators. Write plain Python functions and Michelangelo handles distributed execution, data passing between tasks, and result caching.
1313

1414
- **Distributed Execution** — Scale tasks across Ray or Spark clusters with a single config change. Specify CPU, memory, GPU, and worker resources per task — no changes to your business logic required.
1515

@@ -137,7 +137,7 @@ export MICHELANGELO_API_SERVER="localhost:12345"
137137
Full documentation is available at **[michelangelo-ai.github.io/michelangelo/docs](https://michelangelo-ai.github.io/michelangelo/docs)**.
138138

139139
- [User Guides](https://michelangelo-ai.github.io/michelangelo/docs/user-guides) — Step-by-step guides for data preparation, training, and deployment
140-
- [ML Pipelines](https://michelangelo-ai.github.io/michelangelo/docs/user-guides/ml-pipelines) — Deep dive into the UniFlow pipeline framework
140+
- [ML Pipelines](https://michelangelo-ai.github.io/michelangelo/docs/user-guides/ml-pipelines) — Deep dive into the Uniflow pipeline framework
141141
- [Set Up Triggers](https://michelangelo-ai.github.io/michelangelo/docs/user-guides/set-up-triggers) — Automate pipeline execution with cron and backfill triggers
142142
- [CLI Reference](https://michelangelo-ai.github.io/michelangelo/docs/user-guides/cli) — Full command-line interface documentation
143143

0 commit comments

Comments
 (0)