Delen via


LanguageModelRateLimitingPlugin

Simuleert snelheidsbeperking op basis van tokens voor taalmodel-API's door het bijhouden van prompt- en voltooiingstokenverbruik binnen configureerbare tijdvensters.

Schermopname van een opdrachtprompt met de Dev Proxy die een taalmodelsnelheidsbeperkingsreactie simuleert voor een LLM-API-aanvraag.

Definitie van invoegtoepassingexemplaren

{
  "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 Maximum aantal prompttokens dat is toegestaan binnen het tijdvenster. 5000
completionTokenLimit Maximum aantal voltooiingstokens dat is toegestaan binnen het tijdvenster. 5000
resetTimeWindowSeconds Tijdvenster in seconden waarna tokenlimieten opnieuw worden ingesteld. 60
whenLimitExceeded Reactiegedrag wanneer tokenlimieten worden overschreden. Deze waarde kan Throttle of Custom zijn. Throttle
headerRetryAfter De naam van de HTTP-header voor het opnieuw proberen van gegevens. retry-after
customResponseFile Pad naar bestand met aangepaste respons wanneer whenLimitExceeded deze is ingesteld op Custom. token-limit-response.json

Aangepaste antwoordconfiguratie

Wanneer whenLimitExceeded dit is ingesteld Custom, kunt u een aangepast antwoord definiƫren in een afzonderlijk JSON-bestand:

{
  "$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"
    }
  }
}

Aangepaste antwoordeigenschappen

Property Description
statusCode HTTP-statuscode die moet worden geretourneerd wanneer de tokenlimiet wordt overschreden.
headers Matrix van HTTP-headers die moeten worden opgenomen in het antwoord. Gebruik @dynamic deze functie voor opnieuw proberen na het automatisch berekenen van seconden totdat deze opnieuw is ingesteld.
body Antwoordtekstobject dat is geserialiseerd naar JSON.

Hoe het werkt

LanguageModelRateLimitingPlugin werkt door:

  1. OpenAI API-aanvragen onderscheppen: POST-aanvragen controleren op geconfigureerde URL's die openAI-compatibele aanvraagbody's bevatten
  2. Tokenverbruik bijhouden: parseert antwoorden om te extraheren prompt_tokens en completion_tokens uit de gebruikssectie
  3. Enforcing limits: Maintains running totals of consumed tokens within the configured time window
  4. Beperkingsreacties verleent: Wanneer limieten worden overschreden, retourneert u standaardbeperkingsreacties of aangepaste antwoorden

Ondersteunde aanvraagtypen

De invoegtoepassing ondersteunt zowel OpenAI-voltooiings- als chat-voltooiingsaanvragen:

  • Completion requests: Requests with a prompt property
  • Aanvragen voor chatvoltooiing: aanvragen met een messages eigenschap

Token tracking

Tokenverbruik wordt afzonderlijk bijgehouden voor:

  • Prompt tokens: Input tokens consumed by the request
  • Completion tokens: Output tokens generated by the response

Wanneer een van beide limieten wordt overschreden, worden de volgende aanvragen beperkt totdat het tijdvenster opnieuw wordt ingesteld.

Gedrag van tijdvensters

  • Tokenlimieten opnieuw instellen na de geconfigureerde resetTimeWindowSeconds
  • De timer voor opnieuw instellen wordt gestart wanneer de eerste aanvraag wordt verwerkt
  • Wanneer een tijdvenster verloopt, worden prompt- en voltooiingstokentellers opnieuw ingesteld op de geconfigureerde limieten

Standaardbeperkingsreactie

Wanneer whenLimitExceeded deze is ingesteld Throttleop, retourneert de invoegtoepassing een standaard openAI-compatibel foutantwoord:

{
  "error": {
    "message": "You exceeded your current quota, please check your plan and billing details.",
    "type": "insufficient_quota",
    "param": null,
    "code": "insufficient_quota"
  }
}

Het antwoord bevat:

  • HTTP-statuscode: 429 Too Many Requests
  • retry-after header met seconden totdat tokenlimieten opnieuw worden ingesteld
  • CORS-headers wanneer de oorspronkelijke aanvraag een Origin header bevat

Use cases

LanguageModelRateLimitingPlugin is handig voor:

  • Snelheidsbeperking op basis van tokens testen: Simuleren hoe uw toepassing zich gedraagt wanneer taalmodelproviders tokenquota afdwingen
  • Simulatie van ontwikkelingskosten: Inzicht in gebruikspatronen voor tokens tijdens de ontwikkeling voordat u echte API-limieten bereikt
  • Resilience testing: Verify that your application properly handles token limit errors and implements appropriate retry logic
  • Lokale LLM-tests: Token beperken van scenario's met lokale taalmodellen (zoals Ollama) die hun eigen limieten niet afdwingen

Example scenarios

Scenario 1: Beperking van basistoken

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 1000,
    "completionTokenLimit": 500,
    "resetTimeWindowSeconds": 300
  }
}

Met deze configuratie kunnen maximaal 1000 prompttokens en 500 voltooiingstokens binnen een venster van 5 minuten worden voltooid.

Scenario 2: Aangepaste foutreacties

{
  "languageModelRateLimitingPlugin": {
    "promptTokenLimit": 2000,
    "completionTokenLimit": 1000,
    "resetTimeWindowSeconds": 60,
    "whenLimitExceeded": "Custom",
    "customResponseFile": "custom-token-error.json"
  }
}

Deze configuratie maakt gebruik van een aangepast antwoordbestand om gespecialiseerde foutberichten te bieden wanneer tokenlimieten worden overschreden.

Next step