# Rate limit

Le nœud **Rate Limit** protège les étapes coûteuses ou sensibles en limitant leur nombre d'exécutions pendant une période donnée. Le compteur est enregistré par clé calculée : la limite peut donc être globale ou séparée par utilisateur, adresse IP, entreprise ou autre identifiant.

## Configuration

| Champ | Description |
| --- | --- |
| **Limit** | Nombre maximal d'exécutions autorisées pendant la fenêtre. |
| **Window (s)** | Durée de la fenêtre du compteur en secondes. Par exemple, `60` correspond à une minute. |
| **Key** | Valeur qui identifie un compteur, comme `{input.user_id}` ou `global`. |
| **Namespace** | Sépare les compteurs de fonctionnalités différentes. Utilisez une valeur stable comme `image-generation`. |
| **Redis failure** | Définit uniquement le comportement lorsque le stockage des compteurs est indisponible : bloquer (**closed**) ou autoriser (**open**). |

Lorsqu'une requête est autorisée, le payload original continue sans être modifié. Lorsque le quota est dépassé, le nœud arrête ce chemin d'exécution avec une erreur Rate Limit ; il n'attend pas qu'une place se libère.

## Exemple complet : trois générations d'images par utilisateur et par minute

Protégez un agent de génération d'images avec ce workflow :

```text
Start → Rate Limit → Agent avec Image Generation → End
```

Configurez **Rate Limit** ainsi :

```text
Label : Limite génération image
Limit : 3
Window (s) : 60
Key : {input.user_id}
Namespace : image-generation
Redis failure : Block when unavailable
```

Exemple d'entrée du workflow :

```json
{
  "user_id": "user-123",
  "prompt": "Génère une image d'un chat"
}
```

### Fonctionnement détaillé

1. Le nœud calcule la clé `user-123` et utilise le namespace `image-generation`.
2. Les trois premières exécutions associées à cette clé pendant la fenêtre de 60 secondes sont autorisées. L'Agent reçoit l'entrée originale et peut générer l'image.
3. Une quatrième exécution de `user-123` pendant la même fenêtre est arrêtée avec l'erreur `Rate Limit Error: limit 3 per 60s exceeded.`
4. Après l'expiration de la fenêtre du compteur, cet utilisateur peut envoyer de nouvelles demandes.
5. Une autre clé, par exemple `user-456`, possède son propre compteur et n'est pas affectée par les demandes de `user-123`.

La combinaison de la clé et du namespace définit le compteur logique. Un même utilisateur peut ainsi avoir des quotas indépendants pour la génération d'images, l'analyse de documents et d'autres fonctionnalités coûteuses.

## Choisir la clé

| Clé | Effet |
| --- | --- |
| `{input.user_id}` | Quota séparé pour chaque utilisateur. Recommandé si l'appelant est authentifié. |
| `{input.ip}` | Quota séparé par adresse IP. Utile pour le trafic anonyme, mais plusieurs utilisateurs peuvent partager une IP. |
| `{input.company_id}` | Quota commun à tous les utilisateurs d'une entreprise. |
| `global` | Un seul quota partagé par toutes les exécutions du workflow. |

Le template doit produire une valeur non vide. Si `{input.user_id}` est absent, le nœud échoue au lieu de regrouper silencieusement plusieurs utilisateurs dans le même compteur. Validez ou authentifiez cet identifiant avant le Rate Limit.

## Mode d'échec Redis

Cette option ne configure **pas** le comportement en cas de dépassement du quota. Elle est utilisée uniquement si Redis, le stockage des compteurs, est inaccessible :

- **Block when unavailable (closed) :** choix le plus sûr pour les opérations coûteuses, financières ou sensibles.
- **Allow when unavailable (open) :** privilégie la disponibilité, mais certaines demandes peuvent temporairement contourner le quota.

## Données disponibles pendant l'exécution

Pour une exécution autorisée, le `last_output` original continue vers les nœuds suivants. Les métadonnées sont disponibles dans `rate_limit.allowed`, `rate_limit.limit` et `rate_limit.window_seconds`.

Utilisez la carte interactive ci-dessous pour copier cet exemple dans l'éditeur. Configurez un credential de modèle valide avant de tester l'agent de génération d'images.

---

*Source: https://agentbuilder.systalink.sn/docs/node-rate-limit — human documentation.*
*Other language: [/docs-md/en/node-rate-limit.md](/docs-md/en/node-rate-limit.md).*
*Machine-readable index: [/llms.txt](/llms.txt).*
