Branchement de flux de travail
Queuety peut créer une copie entièrement indépendante d’un flux de travail en cours. Le flux de travail créé démarre à la même étape et avec le même état que l’original, mais les deux évoluent indépendamment à partir de ce point. Les changements apportés à l’un n’affectent pas l’autre.
Créer une branche du flux de travail
PHP API
Appelez Queuety::fork_workflow() avec l’identifiant du flux de travail. La méthode renvoie l’identifiant du nouveau flux :
use Queuety\Queuety;
$forked_id = Queuety::fork_workflow( $workflow_id );
CLI
wp queuety workflow fork <id>
| Option | Description |
|---|---|
<id> |
ID du workflow à dériver (obligatoire) |
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.
Fonctionnement
Lorsque vous créez une branche du flux de travail :
- La ligne du flux de travail d’origine est verrouillée et lue
- Une nouvelle ligne de flux de travail est insérée avec le même état, les mêmes définitions d’étape et l’étape actuelle
- Le nouveau flux de travail est nommé
{original_name}_fork_{timestamp} - L’étape actuelle est mise en file d’attente pour le flux créé
- Un événement de journal
workflow_forkedest enregistré sur les deux flux de travail - Le flux de travail d’origine poursuit son traitement normalement
Le flux de travail créé est entièrement indépendant. Il possède son propre identifiant, sa propre copie de l’état et ses propres tâches en file d’attente. À partir du point de branchement, chaque flux peut évoluer librement.
Cas d’utilisation
Tester des gestionnaires d’étape en A/B
Créez une branche d’un flux de travail pour tester deux implémentations différentes d’une étape à venir :
// Original workflow will use the existing CallLLMHandler (GPT-4).
// Fork it to test with a different handler.
$forked_id = Queuety::fork_workflow( $workflow_id );
// Modify the forked workflow's state to use a different model.
// (Update the state via a custom step or direct DB update.)
Analyse hypothétique
Créez une branche à un point de décision pour explorer différentes branches :
// Workflow is at step 3, about to process data.
// Fork it so we can try two different processing strategies.
$fork_a = Queuety::fork_workflow( $workflow_id );
$fork_b = Queuety::fork_workflow( $workflow_id );
Chaque branche conserve le même état d’entrée, mais peut être modifiée pour suivre un chemin différent.
Expérimentation parallèle
Lorsqu’un flux de travail atteint un point où vous souhaitez essayer plusieurs approches en parallèle, créez une branche pour chacune et comparez les résultats une fois toutes les branches terminées.
Suivre les branches
L’événement de journal de chaque flux de travail contient une référence à l’autre :
- Sur l’original :
context.forked_workflow_idpointe vers le nouveau flux de travail - Sur la branche :
context.forked_from_workflow_idpointe vers l’original
Interrogez les journaux pour trouver toutes les branches d’un flux de travail :
$logs = Queuety::logger()->for_workflow( $workflow_id );
foreach ( $logs as $entry ) {
if ( 'workflow_forked' === $entry['event'] ) {
$context = json_decode( $entry['context'] ?? '{}', true );
// $context['forked_workflow_id'] is the new workflow
}
}
Limites
- Le flux de travail créé n’hérite pas de l’historique du journal d’événements de l’original. Son journal d’événements est vide au départ.
- Les relations entre les exécutions de flux de travail ne sont pas dupliquées. Si l’original avait une exécution de flux de travail en cours, la branche n’en reçoit pas de copie.
- La branche est un instantané de l’état actuel. Les tâches en cours du flux de travail d’origine ne sont pas dupliquées.