@@ -16,7 +16,7 @@ Broadcasting sends identical data to multiple destinations simultaneously:
1616``` python {title="basic_broadcast.py"}
1717from dataclasses import dataclass
1818
19- from pydantic_graph.beta import GraphBuilder, ListReducer , StepContext
19+ from pydantic_graph.beta import GraphBuilder, ListAppendReducer , StepContext
2020
2121
2222@dataclass
@@ -43,7 +43,7 @@ async def main():
4343 async def add_three (ctx : StepContext[SimpleState, None , int ]) -> int :
4444 return ctx.inputs + 3
4545
46- collect = g.join(ListReducer [int ])
46+ collect = g.join(ListAppendReducer [int ])
4747
4848 # Broadcasting: send the value from source to all three steps
4949 g.add(
@@ -70,7 +70,7 @@ Spreading fans out elements from an iterable, processing each element in paralle
7070``` python {title="basic_map.py"}
7171from dataclasses import dataclass
7272
73- from pydantic_graph.beta import GraphBuilder, ListReducer , StepContext
73+ from pydantic_graph.beta import GraphBuilder, ListAppendReducer , StepContext
7474
7575
7676@dataclass
@@ -89,7 +89,7 @@ async def main():
8989 async def square (ctx : StepContext[SimpleState, None , int ]) -> int :
9090 return ctx.inputs * ctx.inputs
9191
92- collect = g.join(ListReducer [int ])
92+ collect = g.join(ListAppendReducer [int ])
9393
9494 # Spreading: each item in the list gets its own parallel execution
9595 g.add(
@@ -114,7 +114,7 @@ The convenience method [`add_mapping_edge()`][pydantic_graph.beta.graph_builder.
114114``` python {title="mapping_convenience.py"}
115115from dataclasses import dataclass
116116
117- from pydantic_graph.beta import GraphBuilder, ListReducer , StepContext, Reducer
117+ from pydantic_graph.beta import GraphBuilder, ListAppendReducer , StepContext
118118
119119
120120@dataclass
@@ -133,7 +133,7 @@ async def main():
133133 async def stringify (ctx : StepContext[SimpleState, None , int ]) -> str :
134134 return f ' Value: { ctx.inputs} '
135135
136- collect = g.join(ListReducer [str ])
136+ collect = g.join(ListAppendReducer [str ])
137137
138138 g.add(g.edge_from(g.start_node).to(generate_numbers))
139139 g.add_mapping_edge(generate_numbers, stringify)
@@ -157,7 +157,7 @@ When mapping an empty iterable, you can specify a `downstream_join_id` to ensure
157157``` python {title="empty_map.py"}
158158from dataclasses import dataclass
159159
160- from pydantic_graph.beta import GraphBuilder, ListReducer , StepContext
160+ from pydantic_graph.beta import GraphBuilder, ListAppendReducer , StepContext
161161
162162
163163@dataclass
@@ -176,7 +176,7 @@ async def main():
176176 async def double (ctx : StepContext[SimpleState, None , int ]) -> int :
177177 return ctx.inputs * 2
178178
179- collect = g.join(ListReducer [int ])
179+ collect = g.join(ListAppendReducer [int ])
180180
181181 g.add(g.edge_from(g.start_node).to(generate_empty))
182182 g.add_mapping_edge(generate_empty, double, downstream_join_id = collect.id)
@@ -202,7 +202,7 @@ You can nest broadcasts and maps for complex parallel patterns:
202202``` python {title="map_then_broadcast.py"}
203203from dataclasses import dataclass
204204
205- from pydantic_graph.beta import GraphBuilder, ListReducer , StepContext
205+ from pydantic_graph.beta import GraphBuilder, ListAppendReducer , StepContext
206206
207207
208208@dataclass
@@ -225,7 +225,7 @@ async def main():
225225 async def add_two (ctx : StepContext[SimpleState, None , int ]) -> int :
226226 return ctx.inputs + 2
227227
228- collect = g.join(ListReducer [int ])
228+ collect = g.join(ListAppendReducer [int ])
229229
230230 g.add(
231231 g.edge_from(g.start_node).to(generate_list),
@@ -252,7 +252,7 @@ The result contains:
252252``` python {title="sequential_maps.py"}
253253from dataclasses import dataclass
254254
255- from pydantic_graph.beta import GraphBuilder, ListReducer , StepContext
255+ from pydantic_graph.beta import GraphBuilder, ListAppendReducer , StepContext
256256
257257
258258@dataclass
@@ -275,7 +275,7 @@ async def main():
275275 async def stringify (ctx : StepContext[SimpleState, None , int ]) -> str :
276276 return f ' num: { ctx.inputs} '
277277
278- collect = g.join(ListReducer [str ])
278+ collect = g.join(ListAppendReducer [str ])
279279
280280 g.add(
281281 g.edge_from(g.start_node).to(generate_pairs),
@@ -302,7 +302,7 @@ Add labels to parallel edges for better documentation:
302302``` python {title="labeled_parallel.py"}
303303from dataclasses import dataclass
304304
305- from pydantic_graph.beta import GraphBuilder, ListReducer , StepContext
305+ from pydantic_graph.beta import GraphBuilder, ListAppendReducer , StepContext
306306
307307
308308@dataclass
@@ -321,7 +321,7 @@ async def main():
321321 async def process (ctx : StepContext[SimpleState, None , int ]) -> str :
322322 return f ' item- { ctx.inputs} '
323323
324- collect = g.join(ListReducer [str ])
324+ collect = g.join(ListAppendReducer [str ])
325325
326326 g.add(g.edge_from(g.start_node).to(generate))
327327 g.add_mapping_edge(
@@ -350,7 +350,7 @@ All parallel tasks share the same graph state. Be careful with mutations:
350350``` python {title="parallel_state.py"}
351351from dataclasses import dataclass, field
352352
353- from pydantic_graph.beta import GraphBuilder, ListReducer , StepContext
353+ from pydantic_graph.beta import GraphBuilder, ListAppendReducer , StepContext
354354
355355
356356@dataclass
@@ -371,7 +371,7 @@ async def main():
371371 ctx.state.values.append(ctx.inputs)
372372 return ctx.inputs * ctx.inputs
373373
374- collect = g.join(ListReducer [int ])
374+ collect = g.join(ListAppendReducer [int ])
375375
376376 g.add(
377377 g.edge_from(g.start_node).to(generate),
0 commit comments