Ga naar de inhoud

Workflow aftakken

Queuety kan een actieve workflow aftakken naar een volledig onafhankelijke kopie. De afgetakte workflow begint bij dezelfde stap en met dezelfde status als het origineel, maar vanaf dat moment verlopen de twee workflows onafhankelijk. Wijzigingen in de ene hebben geen invloed op de andere.

Een workflow aftakken

PHP API

Roep Queuety::fork_workflow() aan met de workflow-ID. Dit retourneert de nieuwe workflow-ID:

PHP
use Queuety\Queuety;

$forked_id = Queuety::fork_workflow( $workflow_id );

CLI

Shell
wp queuety workflow fork <id>
Optie Beschrijving
<id> Workflow-ID om af te splitsen (vereist)
Shell
wp queuety workflow fork 42
# Success: Workflow #42 forked. New workflow ID: 43.

Werking

Wanneer je een workflow aftakt:

  1. De oorspronkelijke workflowrij wordt vergrendeld en gelezen
  2. Er wordt een nieuwe workflowrij ingevoegd met dezelfde status, stapdefinities en huidige stap
  3. De naam van de nieuwe workflow is {original_name}_fork_{timestamp}
  4. De huidige stap wordt in de wachtrij geplaatst voor de afgetakte workflow
  5. Er wordt een gebeurtenis in het workflow_forked-log vastgelegd voor zowel de oorspronkelijke als de afgetakte workflow
  6. De oorspronkelijke workflow wordt normaal verder verwerkt

De afgetakte workflow is volledig onafhankelijk. Deze heeft een eigen workflow-ID, een eigen statuskopie en eigen taakrijen in de wachtrij. Vanaf het aftakpunt kan elke workflow een eigen verloop krijgen.

Toepassingen

A/B-tests van staphandlers

Tak een workflow af om twee verschillende implementaties van een komende stap te testen:

PHP
// 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.)

Wat-alsanalyse

Tak een workflow af bij een beslispunt om verschillende vertakkingen te verkennen:

PHP
// 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 );

Elke aftakking begint met dezelfde invoerstatus, maar kan worden aangepast om een ander pad te volgen.

Parallel experimenteren

Wanneer een workflow een punt bereikt waarop je meerdere benaderingen parallel wilt proberen, tak je de workflow voor elke benadering af en vergelijk je de resultaten zodra alle aftakkingen zijn voltooid.

Aftakkingen volgen

De gebeurtenis in het log van elke workflow bevat een verwijzing naar de andere:

  • Bij het origineel verwijst context.forked_workflow_id naar de nieuwe workflow
  • Bij de aftakking verwijst context.forked_from_workflow_id naar het origineel

Zoek in de logs om alle aftakkingen van een workflow te vinden:

PHP
$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
    }
}

Beperkingen

  • De afgetakte workflow erft de gebeurtenisloggeschiedenis van het origineel niet. De workflow begint met een lege gebeurtenislog.
  • Relaties met run-workflows worden niet gekopieerd. Als de oorspronkelijke workflow een actieve run-workflow had, krijgt de aftakking daarvan geen kopie.
  • De aftakking is een momentopname van de huidige status. Taken voor het origineel die al worden uitgevoerd, worden niet gekopieerd.