.branchParallel() sur WorkflowBuilder permet d’ouvrir plusieurs séquences (chacune avec ses propres then, while, conditions, etc.) tout en conservant un workflow linéaire. Elle crée un ParallelWorkflowStep synthétique qui pilote les branches, agrège leurs sorties, puis enchaîne avec l’étape suivante.
Surface API
.branchParallel(id, configure, options?)ajoute un bloc parallèle.optionsacceptedescription,inputSchemaetoutputSchemapour l’étape synthétique.configurereçoit unParallelWorkflowBuilder:.branch(nom, build => build.then(step).then(...))définit chaque séquence. Les branches partagent l’entrée courante et voientctxen lecture seule..aggregate(fn)transforme le résultat final. Par défaut, la sortie est un objet{ [nomDeBranche]: résultat }..onError("fail-fast" | "wait-all")choisit la stratégie d’erreur. En fail-fast, les branches s’annulent mutuellement dès qu’une échoue ; en wait-all, toutes les branches se terminent et unWorkflowExecutionErrorunique exposeparallelErrors.
Contraintes & comportement
- L’imbrication de
.branchParallel()est refusée dans cette version pour garder le graphe explicite. - Les étapes humaines ne sont pas autorisées dans les branches. Orchestrer l’automatique dans le bloc, puis ajouter une étape humaine ensuite si nécessaire.
- Les branches ne peuvent pas modifier le contexte d’exécution (
stepRuntime.updateCtx()lève une erreur). Utilisez les sorties oustepRuntime.emit()pour partager des informations. - Chaque branche publie les événements
step:*et les snapshots avecparallelGroupId/parallelBranchId, facilitant le suivi viarun.watch()ou la télémétrie.
Observabilité
- Les watchers reçoivent les événements
step:start,step:success,step:erroretstep:branchenrichis des identifiants parallèles pour tracer les durées. - Les spans OpenTelemetry exposent également
ai_kit.workflow.step.parallel_group_idetai_kit.workflow.step.parallel_branch_id. - Avec
"wait-all", inspectezparallelErrorsdans l’erreur renvoyée pour lister précisément les branches défaillantes et enrichir vos rapports.
Différence avec createParallelStep
createParallelStepconstruit un step unique composé de sous-steps partageant le même input — idéal dans uncreateForEachStepou pour exécuter quelques tâches analytiques ensemble..branchParallel()agit au niveau du builder : chaque branche peut contenir plusieurs steps (y compriswhile,conditions, etc.) et le bloc renvoie une valeur agrégée au workflow principal.- Combinez-les selon le besoin : gardez
createParallelSteppour la concurrence locale et utilisez.branchParallel()pour déployer des pans entiers de workflow en parallèle.