Skip to content

Branching

Branching in Workflows is the concept of one handler emitting multiple possible event types.

In the most simple form, you might have a workflow that has different handlers for different input types.

import {
createWorkflow,
workflowEvent,
} from "@llamaindex/workflow-core";
const workflow = createWorkflow();
const inputEvent = workflowEvent<string | number>();
const processStringEvent = workflowEvent<string>();
const processNumberEvent = workflowEvent<number>();
const successEvent = workflowEvent<string>();
workflow.handle([inputEvent], async (context, event) => {
if (typeof event.data === "string") {
return processStringEvent.with(event.data);
} else {
return processNumberEvent.with(event.data);
}
});
workflow.handle([processStringEvent], async (context, event) => {
return successEvent.with(`Processed string ${event.data}`);
});
workflow.handle([processNumberEvent], async (context, event) => {
return successEvent.with(`Processed number ${event.data}`);
});
let context1 = workflow.createContext();
context1.sendEvent(inputEvent.with("I am some data"));
const result = await context1.stream.until(successEvent).toArray();
console.log(result.at(-1)!.data);
let context2 = workflow.createContext();
context2.sendEvent(inputEvent.with(1));
const result2 = await context2.stream.until(successEvent).toArray();
console.log(result2.at(-1)!.data);