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);