Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Simule la limitation du débit basé sur les jetons pour les API du modèle de langage en suivant l’invite et la consommation de jetons d’achèvement dans les fenêtres de temps configurables.
Définition de l’instance de plug-in
{
"name": "LanguageModelRateLimitingPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "languageModelRateLimitingPlugin",
"urlsToWatch": [
"https://api.openai.com/*",
"http://localhost:11434/*"
]
}
Configuration example
{
"languageModelRateLimitingPlugin": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/languagemodelratelimitingplugin.schema.json",
"promptTokenLimit": 5000,
"completionTokenLimit": 5000,
"resetTimeWindowSeconds": 60,
"whenLimitExceeded": "Throttle",
"headerRetryAfter": "retry-after"
}
}
Configuration properties
| Property | Description | Default |
|---|---|---|
promptTokenLimit |
Nombre maximal de jetons d’invite autorisés dans la fenêtre de temps. | 5000 |
completionTokenLimit |
Nombre maximal de jetons d’achèvement autorisés dans la fenêtre de temps. | 5000 |
resetTimeWindowSeconds |
Fenêtre de temps en secondes après laquelle les limites de jeton sont réinitialisées. | 60 |
whenLimitExceeded |
Comportement de réponse lorsque les limites de jeton sont dépassées. Peut être Throttle ou Custom. |
Throttle |
headerRetryAfter |
Nom de l’en-tête HTTP à inclure les informations de nouvelle tentative après tentative. | retry-after |
customResponseFile |
Chemin d’accès au fichier contenant une réponse personnalisée lorsqu’il whenLimitExceeded est défini sur Custom. |
token-limit-response.json |
Configuration de la réponse personnalisée
Quand whenLimitExceeded la valeur est définie Custom, vous pouvez définir une réponse personnalisée dans un fichier JSON distinct :
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/languagemodelratelimitingplugin.customresponsefile.schema.json",
"statusCode": 429,
"headers": [
{
"name": "retry-after",
"value": "@dynamic"
},
{
"name": "content-type",
"value": "application/json"
}
],
"body": {
"error": {
"message": "You have exceeded your token quota. Please wait before making additional requests.",
"type": "insufficient_quota",
"code": "token_quota_exceeded"
}
}
}
Propriétés de réponse personnalisées
| Property | Description |
|---|---|
statusCode |
Code d’état HTTP à retourner lorsque la limite de jeton est dépassée. |
headers |
Tableau d’en-têtes HTTP à inclure dans la réponse. Utilisez cette option @dynamic pour effectuer une nouvelle tentative pour calculer automatiquement les secondes jusqu’à la réinitialisation. |
body |
Objet corps de réponse sérialisé en JSON. |
Fonctionnement
LanguageModelRateLimitingPlugin fonctionne par :
- Interception des demandes d’API OpenAI : surveille les requêtes POST aux URL configurées qui contiennent des corps de requête compatibles OpenAI
-
Suivi de la consommation de jetons : analyse les réponses à extraire
prompt_tokensetcompletion_tokensà partir de la section Utilisation - Enforcing limits: Maintains running totals of consumed tokens within the configured time window
- Fourniture de réponses de limitation : lorsque les limites sont dépassées, retourne des réponses de limitation standard ou des réponses personnalisées
Types de requêtes pris en charge
Le plug-in prend en charge les demandes de saisie semi-automatique OpenAI et de saisie semi-automatique :
-
Completion requests: Requests with a
promptproperty - Demandes de saisie semi-automatique de conversation : demandes avec une
messagespropriété
Token tracking
La consommation de jetons est suivie séparément pour :
- Prompt tokens: Input tokens consumed by the request
- Completion tokens: Output tokens generated by the response
Lorsque l’une ou l’autre limite est dépassée, les requêtes suivantes sont limitées jusqu’à ce que la fenêtre de temps soit réinitialisée.
Comportement de la fenêtre de temps
- Réinitialisation des limites de jeton après la configuration
resetTimeWindowSeconds - Le minuteur de réinitialisation démarre lorsque la première requête est traitée
- Lorsqu’une fenêtre de temps expire, les compteurs de jetons d’invite et d’achèvement sont réinitialisés à leurs limites configurées
Réponse de limitation par défaut
Lorsqu’il whenLimitExceeded est défini Throttlesur , le plug-in retourne une réponse d’erreur compatible OpenAI standard :
{
"error": {
"message": "You exceeded your current quota, please check your plan and billing details.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_quota"
}
}
La réponse inclut :
- Code d’état HTTP :
429 Too Many Requests -
retry-afteren-tête avec secondes jusqu’à la réinitialisation des limites de jeton - En-têtes CORS lorsque la requête d’origine inclut un
Originen-tête
Use cases
LanguageModelRateLimitingPlugin est utile pour :
- Test de la limitation du débit basé sur les jetons : simuler le comportement de votre application lorsque les fournisseurs de modèles de langage appliquent des quotas de jetons
- Simulation des coûts de développement : Comprendre les modèles de consommation de jetons pendant le développement avant d’atteindre des limites d’API réelles
- Resilience testing: Verify that your application properly handles token limit errors and implements appropriate retry logic
- Test LLM local : tester des scénarios de limitation des jetons avec des modèles de langage local (comme Ollama) qui n’appliquent pas leurs propres limites
Example scenarios
Scénario 1 : Limitation des jetons de base
{
"languageModelRateLimitingPlugin": {
"promptTokenLimit": 1000,
"completionTokenLimit": 500,
"resetTimeWindowSeconds": 300
}
}
Cette configuration permet jusqu’à 1 000 jetons d’invite et 500 jetons d’achèvement dans une fenêtre de 5 minutes.
Scénario 2 : Réponses d’erreur personnalisées
{
"languageModelRateLimitingPlugin": {
"promptTokenLimit": 2000,
"completionTokenLimit": 1000,
"resetTimeWindowSeconds": 60,
"whenLimitExceeded": "Custom",
"customResponseFile": "custom-token-error.json"
}
}
Cette configuration utilise un fichier de réponse personnalisé pour fournir des messages d’erreur spécialisés lorsque les limites de jeton sont dépassées.