Compartilhar via


LanguageModelRateLimitingPlugin

Simula a limitação de taxa baseada em token para APIs de modelo de idioma, acompanhando o consumo de token de prompt e de conclusão em janelas de tempo configuráveis.

Captura de tela de um prompt de comando com o Proxy de Desenvolvimento simulando uma resposta de limitação de taxa de modelo de idioma para uma solicitação de API LLM.

Definição de instância do 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 Número máximo de tokens de prompt permitidos na janela de tempo. 5000
completionTokenLimit Número máximo de tokens de conclusão permitidos na janela de tempo. 5000
resetTimeWindowSeconds Janela de tempo em segundos após a qual o token limita a redefinição. 60
whenLimitExceeded Comportamento de resposta quando os limites de token são excedidos. Pode ser Throttle ou Custom. Throttle
headerRetryAfter Nome do cabeçalho HTTP para incluir informações de repetição após. retry-after
customResponseFile Caminho para o arquivo que contém a resposta personalizada quando whenLimitExceeded é definido como Custom. token-limit-response.json

Configuração de resposta personalizada

Quando whenLimitExceeded for definido como Custom, você pode definir uma resposta personalizada em um arquivo JSON separado:

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

Propriedades de resposta personalizadas

Property Description
statusCode Código de status HTTP a ser retornado quando o limite de token for excedido.
headers Matriz de cabeçalhos HTTP a serem incluídos na resposta. Use @dynamic para tentar novamente para calcular automaticamente segundos até a redefinição.
body Objeto do corpo da resposta serializado para JSON.

Como funciona

O LanguageModelRateLimitingPlugin funciona por:

  1. Interceptando solicitações de API openai: monitora solicitações POST para URLs configuradas que contêm corpos de solicitação compatíveis com OpenAI
  2. Acompanhamento do consumo de token: analisa as respostas a serem extraídas prompt_tokens e completion_tokens provenientes da seção de uso
  3. Enforcing limits: Maintains running totals of consumed tokens within the configured time window
  4. Fornecendo respostas de limitação: quando os limites são excedidos, retorna respostas de limitação padrão ou respostas personalizadas

Tipos de solicitação com suporte

O plug-in dá suporte a solicitações de conclusão do OpenAI e de conclusão de chat:

  • Completion requests: Requests with a prompt property
  • Solicitações de conclusão de chat: solicitações com uma messages propriedade

Token tracking

O consumo de token é acompanhado separadamente para:

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

Quando um dos limites é excedido, as solicitações subsequentes são limitadas até que a janela de tempo seja redefinida.

Comportamento da janela de tempo

  • Redefinição de limites de token após a configuração resetTimeWindowSeconds
  • O temporizador de redefinição é iniciado quando a primeira solicitação é processada
  • Quando uma janela de tempo expira, os contadores de token de prompt e de conclusão são redefinidos para seus limites configurados

Resposta de limitação padrão

Quando whenLimitExceeded definido como Throttle, o plug-in retorna uma resposta de erro compatível com OpenAI padrão:

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

A resposta inclui:

  • Código de status HTTP: 429 Too Many Requests
  • retry-after cabeçalho com segundos até que os limites de token sejam redefinidos
  • Cabeçalhos CORS quando a solicitação original inclui um Origin cabeçalho

Use cases

O LanguageModelRateLimitingPlugin é útil para:

  • Testando a limitação de taxa baseada em token: simule como seu aplicativo se comporta quando provedores de modelo de idioma impõem cotas de token
  • Simulação de custo de desenvolvimento: entenda os padrões de consumo de token durante o desenvolvimento antes de atingir limites reais de API
  • Resilience testing: Verify that your application properly handles token limit errors and implements appropriate retry logic
  • Teste de LLM local: testar cenários de limitação de token com modelos de linguagem locais (como o Ollama) que não impõem seus próprios limites

Example scenarios

Cenário 1: limitação básica de token

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

Essa configuração permite até 1.000 tokens de prompt e 500 tokens de conclusão em uma janela de 5 minutos.

Cenário 2: respostas de erro personalizadas

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

Essa configuração usa um arquivo de resposta personalizado para fornecer mensagens de erro especializadas quando os limites de token são excedidos.

Next step