GenericRandomErrorPlugin

Échec des requêtes avec une erreur sélectionnée aléatoire à partir d’un fichier contenant des erreurs factices.

Capture d’écran d’une invite de commandes avec le proxy de développement simulant l’une des erreurs d’une requête d’API OpenAI telle que définie dans le fichier de configuration.

Exemple de configuration

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "GenericRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "genericRandomErrorPlugin"
    }
  ],
  "urlsToWatch": [
    "https://api.openai.com/*"
  ],
  "genericRandomErrorPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/genericrandomerrorplugin.schema.json",
    "errorsFile": "errors.json"
  }
}

Propriétés de configuration

Propriété Descriptif Faire défaut
errorsFile Chemin d’accès au fichier qui contient des réponses d’erreur. errors.json
rate Pourcentage de demandes à échouer avec une erreur aléatoire. Valeur comprise entre 0 et 100. 50
retryAfterInSeconds Nombre de secondes à attendre avant de réessayer la requête. Inclus dans l’en-tête de réponse Retry-After pour la limitation dynamique. 5

Options de ligne de commande

Nom Descriptif Faire défaut
-f, --failure-rate <failure rate> Pourcentage de demandes à échouer avec une erreur aléatoire. Valeur comprise entre 0 et 100. 50

Remarques

Corps de réponse

Si vous définissez la body propriété d’une réponse d’erreur sur un objet ou un tableau JSON, le proxy de développement le sérialise au format JSON. Si vous la définissez sur une chaîne, le proxy de développement envoie la chaîne as-is, sans guillemets environnants. Une chaîne qui commence par @ est traitée comme un chemin d’accès à un fichier, par rapport au fichier d’erreurs, avec le corps de la réponse. Étant donné que le proxy de développement définit par défaut l’en-tête Content-Typeapplication/jsonsur , définissez l’en-tête Content-Type pour qu’il corresponde à votre contenu lorsque vous retournez du contenu non JSON, par exemple text/plain.

Valeurs par réponse Retry-After

Le proxy de développement se @dynamic résout dans l’en-tête Retry-After pour n’importe quel code d’état, tel que 429, 503ou 529. Il correspond au nom de l’en-tête, quel que soit le cas. Lorsqu’il est résolu, il inscrit également la requête auprès de RetryAfterPlugin, qui signale les demandes envoyées @dynamicpar votre application avant le Retry-After délai d’attente.

Par défaut, l’en-tête Retry-After utilise la valeur globale retryAfterInSeconds . Vous pouvez remplacer cette valeur par réponse à l’aide de la syntaxe dans le @dynamic=N fichier de réponses d’erreur, où N est le nombre de secondes à attendre avant de réessayer.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/genericrandomerrorplugin.errorsfile.schema.json",
  "errors": [
    {
      "request": {
        "url": "https://api.openai.com/*"
      },
      "responses": [
        {
          "statusCode": 429,
          "headers": [
            {
              "name": "Retry-After",
              "value": "@dynamic=17"
            }
          ],
          "body": {
            "error": {
              "message": "Rate limit exceeded. Wait 17 seconds."
            }
          }
        }
      ]
    }
  ]
}

Dans cet exemple, l’en-tête Retry-After utilise 17 des secondes pour cette réponse, quel que soit le paramètre global retryAfterInSeconds . La valeur incrémente chaque requête limitée suivante, comme avec le jeton brut @dynamic .

En-tête par défaut Content-Type

Si une réponse d’erreur a un body en-tête et ne définit pas d’en-tête Content-Type , le proxy de développement retourne la réponse avec l’en-tête Content-Type: application/json . Pour retourner un autre type de contenu, ajoutez l’en-tête Content-Type à la réponse dans le fichier d’erreurs. Le proxy de développement utilise la valeur que vous spécifiez.

Étape suivante