Aller au contenu principal

Run.timeTravel()

La méthode .timeTravel() réexécute un Workflow à partir de n’importe quelle étape spécifique, en utilisant les données d’un instantané stocké ou le contexte personnalisé que vous fournissez. Utilisez-la pour déboguer des Workflows ayant échoué et tester des étapes individuelles avec différentes entrées. Elle peut aussi permettre de récupérer après des erreurs sans réexécuter l’ensemble du Workflow.

Exemple d’utilisation
Lien direct vers Exemple d’utilisation

const run = await workflow.createRun()

const result = await run.timeTravel({
step: 'step2',
inputData: { value: 10 },
})

Paramètres
Lien direct vers Paramètres

step:

Step<string, any, TInputSchema, any, any, any, TEngineType> | [...Step<string, any, any, any, any, any, TEngineType>[], Step<string, any, TInputSchema, any, any, any, TEngineType>] | string | string[]
Étape cible à partir de laquelle démarrer l’exécution. Elle peut être une instance Step, un tableau de Steps (pour des Workflows imbriqués), une chaîne d’ID d’étape ou un tableau de chaînes d’ID d’étape. Utilisez la notation par points ou des tableaux pour les étapes de Workflows imbriqués (par exemple, 'nestedWorkflow.step3' ou ['nestedWorkflow', 'step3'])

inputData?:

z.infer<TInputSchema>
Données d’entrée de l’étape cible. Elles doivent correspondre au schéma d’entrée de l’étape. Si elles ne sont pas fournies, les données de l’instantané du Workflow sont utilisées

resumeData?:

any
Données de reprise à fournir si le Workflow a été suspendu précédemment

initialState?:

z.infer<TState>
État initial à définir pour l’exécution du Workflow. Sert à définir l’état au niveau du Workflow avant l’exécution

context?:

TimeTravelContext<any, any, any, any>
Contexte d’exécution contenant les résultats des étapes antérieures à l’étape cible. Chaque clé est un ID d’étape associé à un objet StepResult contenant status, payload, output, startedAt, endedAt, suspendPayload et resumePayload

nestedStepsContext?:

Record<string, TimeTravelContext<any, any, any, any>>
Contexte des étapes de Workflows imbriqués. Indexé par ID de Workflow imbriqué, chaque élément contenant les résultats des étapes de ce Workflow imbriqué

requestContext?:

RequestContext
Données de Request Context à utiliser pendant l’exécution du time travel

outputWriter?:

(chunk: TOutput) => Promise<void>
Fonction asynchrone facultative permettant de traiter les fragments de sortie à mesure qu’ils sont produits

tracingContext?:

TracingContext
Contexte de traçage pour créer des spans enfants et ajouter des métadonnées. Injecté automatiquement lors de l’utilisation du système de traçage de Mastra.

currentSpan?:

Span
Span actuel pour créer des spans enfants et ajouter des métadonnées. Utilisez-le pour créer des spans enfants personnalisés ou mettre à jour les attributs du span pendant l’exécution.

tracingOptions?:

TracingOptions
Options de configuration de Tracing.

metadata?:

Record<string, any>
Métadonnées à ajouter au span racine de la trace. Utile pour ajouter des attributs personnalisés, tels que des ID utilisateur, des ID de session ou des feature flags.

requestContextKeys?:

string[]
Clés RequestContext supplémentaires à extraire comme métadonnées pour cette trace. Prend en charge la notation par points pour les valeurs imbriquées (par exemple, 'user.id').

traceId?:

string
ID de trace à utiliser pour cette exécution (1 à 32 caractères hexadécimaux). S’il est fourni, cette trace fera partie de la trace spécifiée.

parentSpanId?:

string
ID du span parent à utiliser pour cette exécution (1 à 16 caractères hexadécimaux). S’il est fourni, le span racine sera créé comme enfant de ce span.

tags?:

string[]
Tags à appliquer à cette trace. Étiquettes de chaîne pour catégoriser et filtrer les traces.

outputOptions?:

OutputOptions
Options de configuration de la sortie.

includeState?:

boolean
Indique si l’état de l’exécution du Workflow doit être inclus dans le résultat.

includeResumeLabels?:

boolean
Indique si les libellés de reprise doivent être inclus dans le résultat.

Valeurs renvoyées
Lien direct vers Valeurs renvoyées

result:

Promise<WorkflowResult<TState, TInput, TOutput, TSteps>>
Promise qui se résout avec le résultat de l’exécution du Workflow, contenant les sorties des étapes et l’état

traceId?:

string
ID de trace associé à cette exécution lorsque Tracing est activé. Utilisez-le pour corréler les journaux et déboguer le flux d’exécution.

spanId?:

string
ID du span racine associé à cette exécution lorsque Tracing est activé. Utilisez-le pour la recherche et la corrélation au niveau du span.

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

Time travel avec un contexte personnalisé
Lien direct vers Time travel avec un contexte personnalisé

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

Time travel vers une étape de Workflow imbriqué
Lien direct vers Time travel vers une étape de Workflow imbriqué

// Using dot notation
const result = await run.timeTravel({
step: 'nestedWorkflow.step3',
inputData: { value: 10 },
})

// Using array of step IDs
const result = await run.timeTravel({
step: ['nestedWorkflow', 'step3'],
inputData: { value: 10 },
})

Time travel avec un état initial
Lien direct vers Time travel avec un état initial

const result = await run.timeTravel({
step: 'step2',
inputData: { value: 10 },
initialState: {
counter: 5,
metadata: { source: 'time-travel' },
},
})

Time travel avec le contexte de Workflows imbriqués
Lien direct vers Time travel avec le contexte de Workflows imbriqués

const result = await run.timeTravel({
step: 'nestedWorkflow.step3',
context: {
step1: {
status: 'success',
payload: { value: 0 },
output: { step1Result: 2 },
startedAt: Date.now(),
endedAt: Date.now(),
},
nestedWorkflow: {
status: 'running',
payload: { step1Result: 2 },
startedAt: Date.now(),
},
},
nestedStepsContext: {
nestedWorkflow: {
step2: {
status: 'success',
payload: { step1Result: 2 },
output: { step2Result: 3 },
startedAt: Date.now(),
endedAt: Date.now(),
},
},
},
})

Remarques
Lien direct vers Remarques

  • Le time travel exige qu’un stockage soit configuré, car il s’appuie sur des instantanés persistants de Workflow
  • Lors de la réexécution d’un Workflow, le Workflow charge l’instantané existant depuis le stockage, s’il est disponible
  • Les résultats des étapes antérieures à l’étape cible sont reconstruits à partir de l’instantané ou du contexte fourni
  • L’exécution commence à l’étape spécifiée avec les données d’entrée fournies ou reconstruites
  • Le Workflow se poursuit jusqu’à son terme à partir de ce point
  • Le time travel peut être utilisé sur des Workflows qui n’ont pas encore été exécutés en fournissant un contexte personnalisé ou des données d’entrée pour l’étape de départ.