Aller au contenu
ZarexDocs

Budget de jetons

Donnez à chaque visiteur un budget qui se recharge avec le temps, et consommez-le selon le coût réel de chaque requête.

Le budget de jetons convient quand toutes les requêtes ne se valent pas : un appel à un modèle d'IA, par exemple, coûte plus cher qu'une simple lecture. Chaque visiteur dispose d'un seau de jetons qui se remplit régulièrement ; chaque requête en consomme un certain nombre. Quand le seau est vide, la requête est refusée avec une réponse 429.

Le problème

Une limite de débit traite toutes les requêtes pareil. Mais un appel à un modèle d'IA, une génération de document ou un envoi de SMS coûte bien plus que l'affichage d'une page : un utilisateur peut rester sous la limite de requêtes tout en vous coûtant très cher.

Ce qu'elle arrête

  • la surconsommation d'une ressource coûteuse : jetons d'IA, SMS, calcul ;
  • l'abus d'une offre gratuite ou d'un essai ;
  • les pics qui dépassent votre budget, tout en laissant passer des rafales raisonnables.

Quand l'utiliser

Chatbots et fonctions d'IA, exports, envois de messages : partout où vous voulez un budget par utilisateur et par période, plutôt qu'un simple nombre de requêtes.

Configuration

import { tokenBucket } from "@zarex/express"; // ou le paquet de votre framework

rules: [tokenBucket({ capacity: 100, refillRate: 10, interval: "1m" })],

Ici, chaque visiteur dispose de 100 jetons au maximum, et en récupère 10 chaque minute.

Consommer plusieurs jetons

Par défaut, une requête consomme 1 jeton. Indiquez le coût réel avec tokensRequested :

server.ts
app.use(
  "/api/chat",
  zarex({
    key: process.env.ZAREX_KEY!,
    rules: [
      tokenBucket({
        capacity: 5000,
        refillRate: 500,
        interval: "1h",
        characteristics: ["userId"],
      }),
    ],
    call: (req) => ({
      characteristics: { userId: req.user?.id },
      tokensRequested: estimerLeCout(req.body),
    }),
  })
);

Options

OptionValeursRôle
capacityde 1 à 1 000 000Obligatoire. Nombre maximal de jetons dans le seau.
refillRatede 1 à 1 000 000Obligatoire. Jetons rendus à chaque intervalle.
interval"30s", "1m", "1h", "1d"…Obligatoire. Fréquence de recharge.
characteristicsliste de nomsCe qui identifie un visiteur. Défaut : son adresse IP.
mode"LIVE" · "DRY_RUN" · "OFF"Défaut "LIVE".

Sur cette page