Aller au contenu principal

Run.timeTravelStream()

La méthode .timeTravelStream() réexécute un Workflow à partir de n’importe quelle étape donnée et en diffuse les événements. Vous pouvez recevoir des mises à jour en temps réel pendant l’exécution Time Travel, tout en conservant une visibilité complète sur la progression de chaque étape.

Exemple d’utilisation
Lien direct vers Exemple d’utilisation

const run = await workflow.createRun()

const output = run.timeTravelStream({
step: 'step2',
inputData: { value: 10 },
})

// Process events as they arrive
for await (const event of output.fullStream) {
console.log(event.type, event.payload)
}

// Get the final result
const result = await output.result

Paramètres
Lien direct vers Paramètres

Tous les paramètres sont identiques à ceux de Run.timeTravel(). Consultez la référence de timeTravel pour obtenir la documentation détaillée des paramètres.

Valeur renvoyée
Lien direct vers Valeur renvoyée

output:

WorkflowRunOutput<WorkflowResult<TState, TInput, TOutput, TSteps>>
Objet contenant à la fois le flux et la Promise du résultat

output.fullStream:

ReadableStream<WorkflowStreamEvent>
Flux lisible qui émet les événements du Workflow à mesure que l’exécution progresse

output.result:

Promise<WorkflowResult<TState, TInput, TOutput, TSteps>>
Promise résolue avec le résultat final de l’exécution du Workflow

output.traceId?:

string
ID de Trace associé à cette exécution lorsque le Tracing est activé

Événements du flux
Lien direct vers Événements du flux

Le flux émet des événements de Workflow pendant l’exécution :

  • workflow-step-start : émis lorsqu’une étape commence son exécution
  • workflow-step-finish : émis lorsqu’une étape se termine avec succès
  • workflow-step-error : émis lorsqu’une étape rencontre une erreur
  • workflow-step-suspended : émis lorsqu’une étape est suspendue
  • Événements supplémentaires selon le type d’étape (Agents, Tools, etc.)

Exemples d’utilisation avancée
Lien direct vers Exemples d’utilisation avancée

Traiter les événements pendant le Time Travel
Lien direct vers Traiter les événements pendant le Time Travel

const run = await workflow.createRun()

const output = run.timeTravelStream({
step: 'step2',
inputData: { value: 10 },
})

for await (const event of output.fullStream) {
switch (event.type) {
case 'workflow-step-start':
console.log(`Starting step: ${event.payload.stepName}`)
break
case 'workflow-step-finish':
console.log(`Completed step: ${event.payload.stepName}`)
break
case 'workflow-step-error':
console.error(`Error in step: ${event.payload.stepName}`, event.payload.error)
break
}
}

const result = await output.result
console.log('Time travel completed:', result)

Flux Time Travel avec contexte
Lien direct vers Flux Time Travel avec contexte

const output = run.timeTravelStream({
step: 'step2',
context: {
step1: {
status: 'success',
payload: { value: 0 },
output: { step1Result: 2 },
startedAt: Date.now(),
endedAt: Date.now(),
},
},
})

for await (const event of output.fullStream) {
// Handle events
console.log(event)
}

const result = await output.result

Flux Time Travel avec des Workflows imbriqués
Lien direct vers Flux Time Travel avec des Workflows imbriqués

const output = run.timeTravelStream({
step: ['nestedWorkflow', 'step3'],
inputData: { value: 10 },
nestedStepsContext: {
nestedWorkflow: {
step2: {
status: 'success',
payload: { step1Result: 2 },
output: { step2Result: 3 },
startedAt: Date.now(),
endedAt: Date.now(),
},
},
},
})

for await (const event of output.fullStream) {
console.log(event.type, event.payload)
}

const result = await output.result

Remarques
Lien direct vers Remarques

  • Le flux se ferme automatiquement lorsque l’exécution Time Travel se termine ou rencontre une erreur
  • Vous pouvez traiter les événements du flux pendant que le Workflow est encore en cours d’exécution
  • La Promise result n’est résolue qu’une fois toutes les étapes terminées
  • Les événements du flux suivent le même format que lors du streaming habituel d’un Workflow
  • Le streaming Time Travel nécessite la configuration d’un stockage, car il repose sur des snapshots de Workflow persistants