nAIxus Docs

Référence des node executors

Documentation de chaque type de node executor, sa configuration, ses entrées/sorties et son comportement.

Chaque type de node dans un flow a un executor correspondant dans services/core/src/application/services/executors/. Ce document détaille chacun d'eux.

AgentNodeExecutor

Fichier : agent_node_executor.py

Envoie un prompt à un LLM et retourne la réponse. Supporte le streaming, le tool calling et plusieurs modes d'exécution.

Configuration

ParamètreTypeDescription
providerstringFournisseur LLM (openai, azure, bedrock, watsonx, ollama, vllm)
modelstringIdentifiant du modèle (gpt-4o, claude-3-5-sonnet, etc.)
system_promptstringInstructions système de l'agent
temperaturefloat0.0–1.0 (0 = déterministe, 1 = créatif)
max_tokensintLongueur max de la réponse
toolslistOutils que l'agent peut appeler (function calling)
streamingboolActiver le streaming token par token

Modes d'exécution

ModeComportement
SimpleUn seul appel LLM, retourne la réponse
Tool callingL'agent appelle des outils, reçoit les résultats, puis formule sa réponse
ReActBoucle raisonnement → action → observation jusqu'à résolution
Parallel toolsPlusieurs outils appelés en parallèle

Entrée/Sortie

  • Entrée : {{ trigger.message }} ou contexte des nodes précédents
  • Sortie : Texte de la réponse LLM (accessible via {{ agent_node.output }})
  • Métadonnées : Token usage (prompt tokens, completion tokens), durée, modèle utilisé

ConditionExecutor

Fichier : condition_executor.py

Évalue une expression et dirige le flow vers la branche true ou false.

Configuration

ParamètreTypeDescription
expressionstringExpression à évaluer (ex: {{ score }} > 0.8)
operatorstringOpérateur de comparaison

Opérateurs supportés

OpérateurDescription
==, !=Égalité / différence
>, >=, <, <=Comparaisons numériques
containsContient une sous-chaîne
not_containsNe contient pas
is_empty, is_not_emptyVide / non vide
starts_with, ends_withCommence/finit par

Le registre complet des opérateurs est dans operator_registry.py.


LoopContainerExecutor

Fichier : loop_container_executor.py

Itère sur une liste et exécute les nodes enfants pour chaque élément.

Configuration

ParamètreTypeDescription
items_expressionstringExpression retournant un tableau (ex: {{ documents }})
item_variablestringNom de la variable pour l'élément courant
index_variablestringNom de la variable pour l'index courant

Comportement

  1. Évalue items_expression pour obtenir la liste.
  2. Pour chaque élément, définit item_variable et index_variable.
  3. Exécute les nodes enfants du conteneur.
  4. Passe à l'élément suivant.

HTTPRequestExecutor

Fichier : http_request_executor.py

Exécute un appel HTTP vers une API externe.

Configuration

ParamètreTypeDescription
methodstringGET, POST, PUT, DELETE, PATCH
urlstringURL cible (supporte les expressions {{ }})
headersobjectHeaders HTTP (supporte les expressions)
bodystring/objectCorps de la requête
timeoutintTimeout en secondes
auth_typestringnone, bearer, basic, api_key

Sortie

{
  "status_code": 200,
  "headers": { "content-type": "application/json" },
  "body": { ... }
}

Sécurité

  • Validation SSRF : les URL privées sont bloquées par défaut (127.0.0.1, 10.x.x.x, etc.).
  • Les credentials sont résolus depuis le store de secrets, jamais en clair dans la config du node.

CodeExecutor

Fichier : code_executor.py

Exécute du code Python dans un environnement sandboxé.

Configuration

ParamètreTypeDescription
codestringCode Python à exécuter
timeoutintTimeout d'exécution en secondes

Environnement sandbox

  • Imports restreints : pas d'accès fichier, réseau ou OS.
  • Variables d'entrée disponibles via le contexte d'exécution.
  • Le résultat doit être assigné à la variable result.
# Exemple de code dans le node
data = inputs["agent_output"]
result = {"summary": data[:200], "word_count": len(data.split())}

HumanInputExecutor

Fichier : human_input_executor.py

Met l'exécution en pause et attend une saisie humaine.

Configuration

ParamètreTypeDescription
promptstringMessage affiché à l'opérateur
fieldslistChamps du formulaire (si applicable)

Comportement

  1. L'exécution passe en état waiting_for_input.
  2. Un événement SSE human_input_required est émis.
  3. L'opérateur voit la demande dans l'interface.
  4. Quand l'opérateur répond, l'exécution reprend avec la réponse comme sortie du node.

ParseDocExecutor

Fichier : parse_doc_executor.py

Extrait le texte d'un document (PDF, DOCX, PPTX, HTML).

Configuration

ParamètreTypeDescription
sourcestringChemin ou URL du document

Formats supportés

FormatBibliothèque
PDFPyMuPDF
DOCXpython-docx
PPTXpython-pptx
HTMLBeautifulSoup4

Sortie

Texte brut extrait du document. La mise en page et les images sont perdues.


MergeDocsExecutor

Fichier : merge_docs_executor.py

Fusionne les sorties texte de plusieurs documents en un seul contenu.


SetVariableExecutor

Fichier : set_variable_executor.py

Définit ou met à jour une variable dans le contexte d'exécution.

Configuration

ParamètreTypeDescription
variable_namestringNom de la variable à définir
valuestringValeur (supporte les expressions {{ }})

DirectMessageExecutor

Fichier : direct_message_executor.py

Envoie un message direct à l'utilisateur sans passer par un agent LLM. Utile pour les messages fixes (accueil, erreur, redirection).


Triggers

ManualTriggerExecutor

Fichier : trigger_manual_executor.py

Point d'entrée pour les exécutions manuelles (test, démo). L'utilisateur fournit un message via l'interface.

TriggerFromChannelExecutor

Fichier : trigger_from_channel_executor.py

Point d'entrée pour les exécutions déclenchées depuis un channel (SDK, Webchat, Slack, etc.). Le message provient du canal externe.


Registre des executors

Le NodeExecutorRegistry (application/services/node_executor_registry.py) maintient le mapping node_type → executor_class. Quand le moteur d'exécution rencontre un node, il consulte ce registre pour obtenir l'executor approprié.

Ajouter un nouveau node executor

  1. Créer la classe executor dans application/services/executors/.
  2. Implémenter la méthode execute() avec la signature standard.
  3. Enregistrer le nouveau type dans le NodeExecutorRegistry.
  4. Ajouter des tests unitaires et d'intégration.
  5. Lancer pnpm generate pour mettre à jour le registre TypeScript côté frontend.

Pour aller plus loin

On this page