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’utilisationLien direct vers Exemple d’utilisation
const run = await workflow.createRun()
const result = await run.timeTravel({
step: 'step2',
inputData: { value: 10 },
})
ParamètresLien 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éesLien 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ésLien 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 initialLien 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ésLien 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(),
},
},
},
})
RemarquesLien 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.