Traductions communautaires par veiseule.ai — Help improve them on Crowdin
Aller au contenu principal

File de commandes (2026-01-16)¶

Nous sĂ©rialisons les exĂ©cutions d’auto-rĂ©ponse entrantes (tous les canaux) via une minuscule file en mĂ©moire du processus afin d’éviter les collisions entre plusieurs exĂ©cutions d’agents, tout en permettant un parallĂ©lisme sĂ»r entre les sessions.

Pourquoi¶

  • Les exĂ©cutions d’auto-rĂ©ponse peuvent ĂȘtre coĂ»teuses (appels LLM) et entrer en collision lorsque plusieurs messages entrants arrivent Ă  peu d’intervalle.
  • La sĂ©rialisation Ă©vite la concurrence pour des ressources partagĂ©es (fichiers de session, journaux, stdin du CLI) et rĂ©duit le risque de limites de dĂ©bit en amont.

Fonctionnement¶

  • Une file FIFO consciente des lanes draine chaque lane avec un plafond de concurrence configurable (par dĂ©faut 1 pour les lanes non configurĂ©es ; la lane principale est Ă  4 par dĂ©faut, la lane subagent Ă  8).
  • runEmbeddedPiAgent met en file par clĂ© de session (lane session:<key>) afin de garantir une seule exĂ©cution active par session.
  • Chaque exĂ©cution de session est ensuite mise en file dans une lane globale (main par dĂ©faut) afin que le parallĂ©lisme global soit plafonnĂ© par agents.defaults.maxConcurrent.
  • Lorsque la journalisation verbeuse est activĂ©e, les exĂ©cutions en file Ă©mettent un bref avis si elles ont attendu plus d’environ ~2 s avant de dĂ©marrer.
  • Les indicateurs de saisie se dĂ©clenchent toujours immĂ©diatement lors de la mise en file (lorsque le canal le prend en charge), de sorte que l’expĂ©rience utilisateur reste inchangĂ©e pendant l’attente.

Modes de file (par canal)¶

Les messages entrants peuvent orienter l’exĂ©cution en cours, attendre un tour de suivi, ou faire les deux :

  • steer : injecte immĂ©diatement dans l’exĂ©cution en cours (annule les appels d’outil en attente aprĂšs la prochaine frontiĂšre d’outil). En l’absence de streaming, revient au suivi.
  • followup : met en file pour le prochain tour de l’agent aprĂšs la fin de l’exĂ©cution en cours.
  • collect : fusionne tous les messages en file en un seul tour de suivi (par dĂ©faut). Si les messages ciblent des canaux/fils diffĂ©rents, ils sont drainĂ©s individuellement pour prĂ©server le routage.
  • steer-backlog (alias steer+backlog) : oriente maintenant et conserve le message pour un tour de suivi.
  • interrupt (hĂ©ritĂ©) : abandonne l’exĂ©cution active pour cette session, puis exĂ©cute le message le plus rĂ©cent.
  • queue (alias hĂ©ritĂ©) : identique Ă  steer.

Steer-backlog signifie que vous pouvez obtenir une rĂ©ponse de suivi aprĂšs l’exĂ©cution orientĂ©e ; ainsi, les surfaces en streaming peuvent sembler produire des doublons. PrĂ©fĂ©rez collect/steer si vous souhaitez une rĂ©ponse par message entrant. Envoyez /queue collect comme commande autonome (par session) ou dĂ©finissez messages.queue.byChannel.discord: "collect".

Valeurs par dĂ©faut (lorsqu’elles ne sont pas dĂ©finies dans la configuration) :

  • Toutes les surfaces → collect

Configurez globalement ou par canal via messages.queue :

{
  messages: {
    queue: {
      mode: "collect",
      debounceMs: 1000,
      cap: 20,
      drop: "summarize",
      byChannel: { discord: "collect" },
    },
  },
}

Options de la file d'attente¶

Les options s’appliquent à followup, collect et steer-backlog (ainsi qu’à steer lorsqu’il revient au suivi) :

  • debounceMs : attendre une pĂ©riode de calme avant de dĂ©marrer un tour de suivi (empĂȘche « continuer, continuer »).
  • cap : nombre maximal de messages en file par session.
  • drop : politique de dĂ©passement (old, new, summarize).

Le mode « summarize » conserve une courte liste Ă  puces des messages supprimĂ©s et l’injecte comme une invite de suivi synthĂ©tique. Valeurs par dĂ©faut : debounceMs: 1000, cap: 20, drop: summarize.

Remplacements par session¶

  • Envoyez /queue <mode> comme commande autonome pour enregistrer le mode pour la session en cours.
  • Les options peuvent ĂȘtre combinĂ©es : /queue collect debounce:2s cap:25 drop:summarize
  • /queue default ou /queue reset efface le remplacement de session.

Portée et garanties¶

  • S’applique aux exĂ©cutions d’agents en auto-rĂ©ponse sur tous les canaux entrants qui utilisent le pipeline de rĂ©ponse de la Gateway (passerelle) (WhatsApp web, Telegram, Slack, Discord, Signal, iMessage, webchat, etc.).
  • La lane par dĂ©faut (main) est Ă  l’échelle du processus pour les entrants + battements de cƓur principaux ; dĂ©finissez agents.defaults.maxConcurrent pour autoriser plusieurs sessions en parallĂšle.
  • Des lanes supplĂ©mentaires peuvent exister (par ex. cron, subagent) afin que les tĂąches en arriĂšre-plan puissent s’exĂ©cuter en parallĂšle sans bloquer les rĂ©ponses entrantes.
  • Les lanes par session garantissent qu’une seule exĂ©cution d’agent touche une session donnĂ©e Ă  la fois.
  • Aucune dĂ©pendance externe ni threads de workers en arriĂšre-plan ; TypeScript pur + promesses.

Problemes courants¶

  • Si des commandes semblent bloquĂ©es, activez les journaux verbeux et recherchez les lignes « queued for 
ms » pour confirmer que la file se vide.
  • Si vous avez besoin de la profondeur de file, activez les journaux verbeux et surveillez les lignes de temporisation de la file.