Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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.
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:
- Interceptando solicitações de API openai: monitora solicitações POST para URLs configuradas que contêm corpos de solicitação compatíveis com OpenAI
-
Acompanhamento do consumo de token: analisa as respostas a serem extraídas
prompt_tokensecompletion_tokensprovenientes da seção de uso - Enforcing limits: Maintains running totals of consumed tokens within the configured time window
- 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
promptproperty -
Solicitações de conclusão de chat: solicitações com uma
messagespropriedade
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-aftercabeçalho com segundos até que os limites de token sejam redefinidos - Cabeçalhos CORS quando a solicitação original inclui um
Origincabeç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.