Événements du Pipeline de Prompt
SynapsePrePromptEvent est déprécié
Depuis mars 2026, SynapsePrePromptEvent est déprécié. Il est remplacé par 5 events de phase explicites dans ArnaudMoncondhuy\SynapseCore\Event\Prompt\. Migrez dès que possible.
Nouveau système : 5 phases explicites
Le pipeline de prompt s'exécute en 5 phases séquentielles, chacune disposant de son propre event :
| Phase | Event | Subscribers actifs | Rôle |
|---|---|---|---|
| 1. BUILD | PromptBuildEvent |
ContextBuilderSubscriber |
Construction du prompt de base (system + history + tools) |
| 2. ENRICH | PromptEnrichEvent |
MemoryContextSubscriber, RagContextSubscriber |
Enrichissement (mémoire vectorielle, RAG) |
| 3. OPTIMIZE | PromptOptimizeEvent |
ContextTruncationSubscriber |
Troncature du contexte selon la context window |
| 4. FINALIZE | PromptFinalizeEvent |
MasterPromptSubscriber |
Injection du master prompt global |
| 5. CAPTURE | PromptCaptureEvent |
DebugLogSubscriber |
Capture debug (lecture seule, ne modifie pas le prompt) |
Tous ces events étendent AbstractPromptEvent et partagent la même interface :
// Méthodes disponibles sur tous les events de phase
$event->getMessage(): string // Message brut de l'utilisateur
$event->getOptions(): array // Options passées à ChatService::ask()
$event->getPrompt(): array // Prompt courant (mutable)
$event->setPrompt(array $prompt) // Modifier le prompt
$event->getConfig(): ?SynapseRuntimeConfig // Config runtime courante (mutable)
$event->setConfig(SynapseRuntimeConfig) // Modifier la config
$event->getAttachments(): array // Fichiers attachés
$event->setAttachments(array) // Modifier les pièces jointes
Migration depuis SynapsePrePromptEvent
// AVANT (déprécié)
use ArnaudMoncondhuy\SynapseCore\Event\SynapsePrePromptEvent;
#[AsEventListener(event: SynapsePrePromptEvent::class, priority: 40)]
public function onPrePrompt(SynapsePrePromptEvent $event): void
{
$prompt = $event->getPrompt();
// ... modifier le prompt
}
// APRÈS — choisir la phase correspondant à votre usage :
// Pour enrichir avec du contexte (priorité 40 ≈ ENRICH)
use ArnaudMoncondhuy\SynapseCore\Event\Prompt\PromptEnrichEvent;
#[AsEventListener(event: PromptEnrichEvent::class)]
public function onEnrich(PromptEnrichEvent $event): void
{
$prompt = $event->getPrompt();
// Ajouter au prompt système (premiers éléments du tableau contents)
$contents = $prompt['contents'] ?? [];
// ... enrichir $contents
$event->setPrompt(['contents' => $contents]);
}
Exemple : Injecter une instruction dynamique en phase ENRICH
namespace App\EventSubscriber;
use ArnaudMoncondhuy\SynapseCore\Event\Prompt\PromptEnrichEvent;
use Symfony\Bundle\SecurityBundle\Security;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class UserContextEnricher implements EventSubscriberInterface
{
public function __construct(private Security $security) {}
public static function getSubscribedEvents(): array
{
return [PromptEnrichEvent::class => 'onEnrich'];
}
public function onEnrich(PromptEnrichEvent $event): void
{
$user = $this->security->getUser();
if ($user === null) {
return;
}
$prompt = $event->getPrompt();
$contents = $prompt['contents'] ?? [];
// Trouver le message système existant et l'enrichir
foreach ($contents as &$message) {
if ($message['role'] === 'system') {
$message['content'] .= sprintf(
"\n\nContexte utilisateur : %s",
$user->getUserIdentifier()
);
break;
}
}
unset($message);
$event->setPrompt(array_merge($prompt, ['contents' => $contents]));
}
}
SynapsePrePromptEvent (déprécié)
Namespace : ArnaudMoncondhuy\SynapseCore\Event\SynapsePrePromptEvent
Cet event est conservé pour compatibilité ascendante mais ne sera plus dispatché dans une prochaine version majeure. Son API est identique à AbstractPromptEvent.
// API disponible (même interface que les nouveaux events)
$event->getMessage(): string
$event->getOptions(): array
$event->getPrompt(): array
$event->setPrompt(array $prompt)
$event->getConfig(): ?SynapseRuntimeConfig
$event->setConfig(SynapseRuntimeConfig $config)
$event->getAttachments(): array
$event->setAttachments(array $attachments)
Suppression future
SynapsePrePromptEvent sera supprimé dans une prochaine version majeure. Migrez vers les events de phase dès maintenant.