{
"id": "chatcmpl-mock-821bae6b",
"object": "chat.completion",
"created": 1735689600,
"model": "mock-gpt-4o-mini",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello, mock model!"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 5,
"completion_tokens": 5,
"total_tokens": 10
}
}O que faz
O Mock LLM Responder gera respostas mock determinísticas de APIs de LLM para testar clientes. Escolha um cenário - echo, resposta fixa, lorem transmitido em stream, HTTP 429 rate limit, HTTP 500 de erro de servidor, ou chunks lentos - e ele produz o JSON de chat completion no estilo OpenAI, o stream de eventos SSE (linhas data: com um terminador [DONE] e marcadores de timing dos chunks) e um comando curl que reproduz a requisição contra um stub local. Sem chave de API, sem conta, sem rede: tudo é computado no seu navegador a partir de uma seed fixa, então a mesma configuração sempre produz saída idêntica byte a byte - exatamente o que uma suíte de testes de cliente reproduzível precisa.
Como usar
- Escolha um Scenario no dropdown (ex.
Streamed lorempara um stream em chunks,Error 429para testar backoff). - Defina o nome do Model e o limite de Max tokens que seu cliente enviará.
- Digite o User prompt - o cenário
echoo devolve verbatim como mensagem do assistente. - Alterne as abas de Output entre Completion JSON, SSE stream e curl, e copie a que precisar.
- Use a leitura de timing (
first byte/inter-chunk) para fazer seu stub esperar como um modelo real, ou Copy share link para enviar a configuração exata a um colega.
Exemplos
Cenário echo (configurações padrão) - completion JSON:
{
"id": "chatcmpl-mock-821bae6b",
"object": "chat.completion",
"created": 1735689600,
"model": "mock-gpt-4o-mini",
"choices": [
{
"index": 0,
"message": { "role": "assistant", "content": "Hello, mock model!" },
"finish_reason": "stop"
}
],
"usage": { "prompt_tokens": 5, "completion_tokens": 5, "total_tokens": 10 }
}
Streamed lorem - stream SSE (resumido). O comentário inicial : é o marcador de timing dos chunks:
: mock scenario=streamed-lorem first-byte=60ms inter-chunk=40ms
data: {"id":"chatcmpl-mock-36156cc1","object":"chat.completion.chunk","created":1735689600,"model":"mock-gpt-4o-mini","choices":[{"index":0,"delta":{"role":"assistant","content":"comet nebula prism comet "},"finish_reason":null}]}
data: {"id":"chatcmpl-mock-36156cc1","object":"chat.completion.chunk","created":1735689600,"model":"mock-gpt-4o-mini","choices":[{"index":0,"delta":{"content":"vector prism lumen\nvector "},"finish_reason":null}]}
...
data: {"id":"chatcmpl-mock-36156cc1","object":"chat.completion.chunk","created":1735689600,"model":"mock-gpt-4o-mini","choices":[{"index":0,"delta":{},"finish_reason":"stop"}],"usage":{"prompt_tokens":5,"completion_tokens":63,"total_tokens":68}}
data: [DONE]
Error 429 - completion JSON:
{
"error": {
"message": "Rate limit reached for the mock model. Please retry after 1 second.",
"type": "rate_limit_error",
"code": "rate_limit_exceeded"
}
}
Aba curl - reproduza a requisição contra um stub local na porta 8080:
# Local stub: reply 200 with the body shown in the JSON tab.
curl -s http://localhost:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"mock-gpt-4o-mini","messages":[{"role":"user","content":"Hello, mock model!"}],"max_tokens":64}'
Bom saber
- Determinístico por design: ids, texto lorem e timestamps vêm de uma seed derivada do seu cenário, modelo e limite de tokens - nunca do relógio nem de
Math.random(). Mesmas configurações entram, mesmos bytes saem. O campocreatedé o epoch fixo1735689600(2025-01-01). - Os chunks remontam exatamente: o conteúdo de todos os deltas SSE, concatenado, é igual ao conteúdo da mensagem do completion - então você pode verificar o parsing do stream contra a aba JSON.
- Matemática de tokens: ~4 caracteres por token, mínimo de 1; atingir o limite de
Max tokensmudafinish_reasonpara"length". - Privado: roda 100% client-side - nenhuma requisição sai do seu navegador.
- Ferramentas relacionadas: LLM Cost Calculator, Token Estimator, HTTP Methods Tester.