Dela via


LanguageModelRateLimitingPlugin

Simulerar tokenbaserad hastighetsbegränsning för språkmodell-API:er genom att spåra förbrukning av prompt- och slutförandetoken inom konfigurerbara tidsfönster.

Skärmbild av en kommandotolk med Dev Proxy som simulerar ett svar med hastighetsbegränsning för språkmodeller för en LLM API-begäran.

Definition av plugin-instans

{
  "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 Maximalt antal tillåtna prompttoken inom tidsfönstret. 5000
completionTokenLimit Maximalt antal slutförandetoken som tillåts inom tidsfönstret. 5000
resetTimeWindowSeconds Tidsfönster i sekunder varefter token begränsar återställningen. 60
whenLimitExceeded Svarsbeteende när tokengränserna överskrids. Det kan vara Throttle eller Custom. Throttle
headerRetryAfter Namnet på HTTP-huvudet för att inkludera återförsöksinformation. retry-after
customResponseFile Sökväg till en fil som innehåller anpassat svar när whenLimitExceeded är inställt på Custom. token-limit-response.json

Anpassad svarskonfiguration

När whenLimitExceeded är inställt på Customkan du definiera ett anpassat svar i en separat JSON-fil:

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

Anpassade svarsegenskaper

Property Description
statusCode HTTP-statuskod som returneras när tokengränsen överskrids.
headers Matris med HTTP-huvuden som ska inkluderas i svaret. Använd @dynamic för återförsök efter för att automatiskt beräkna sekunder tills återställningen har återställts.
body Svarstextobjekt som serialiseras till JSON.

Så här fungerar det

LanguageModelRateLimitingPlugin fungerar genom att:

  1. Fånga upp OpenAI API-begäranden: Övervakar POST-begäranden till konfigurerade URL:er som innehåller OpenAI-kompatibla begärandeorgan
  2. Förbrukning av spårningstoken: Parsar svar för att extrahera prompt_tokens och completion_tokens från användningsavsnittet
  3. Enforcing limits: Maintains running totals of consumed tokens within the configured time window
  4. Tillhandahålla begränsningssvar: När gränserna överskrids returnerar antingen standardbegränsningssvar eller anpassade svar

Typer av begäranden som stöds

Plugin-programmet stöder både begäranden om slutförande av OpenAI och chatt:

  • Completion requests: Requests with a prompt property
  • Förfrågningar om chattens slutförande: Begäranden med en messages egenskap

Token tracking

Tokenförbrukning spåras separat för:

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

När någon av gränserna överskrids begränsas efterföljande begäranden tills tidsfönstret återställs.

Beteende för tidsfönster

  • Återställning av tokengränser efter den konfigurerade resetTimeWindowSeconds
  • Återställningstimern startar när den första begäran bearbetas
  • När ett tidsfönster upphör att gälla återställs räknare för både prompt- och slutförandetoken till sina konfigurerade gränser

Standardbegränsningssvar

När whenLimitExceeded är inställt på Throttlereturnerar plugin-programmet ett Standard OpenAI-kompatibelt felsvar:

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

Svaret innehåller:

  • HTTP-statuskod: 429 Too Many Requests
  • retry-after sidhuvud med sekunder tills tokenbegränsningar återställs
  • CORS-huvuden när den ursprungliga begäran innehåller ett Origin huvud

Use cases

LanguageModelRateLimitingPlugin är användbart för:

  • Testa tokenbaserad hastighetsbegränsning: Simulera hur ditt program beter sig när språkmodellprovidrar tillämpar tokenkvoter
  • Utvecklingskostnadssimulering: Förstå mönster för tokenförbrukning under utveckling innan du når verkliga API-gränser
  • Resilience testing: Verify that your application properly handles token limit errors and implements appropriate retry logic
  • Lokal LLM-testning: Testa tokenbegränsningsscenarier med lokala språkmodeller (till exempel Ollama) som inte tillämpar sina egna gränser

Example scenarios

Scenario 1: Grundläggande tokenbegränsning

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

Den här konfigurationen tillåter upp till 1 000 prompttoken och 500 slutförandetoken inom ett 5-minutersfönster.

Scenario 2: Anpassade felsvar

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

Den här konfigurationen använder en anpassad svarsfil för att tillhandahålla specialiserade felmeddelanden när tokengränserna överskrids.

Next step