200 OK
{
"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
}
}チャンク: 1最初のバイト: 20 msチャンク間: 25 ms
機能の説明
Mock LLM Responder は、クライアントのテスト用に決定論的なモック LLM API レスポンスを生成します。シナリオ - echo、canned answer、streamed poem-ish lorem、HTTP 429 rate limit、HTTP 500 server error、slow chunks - を選ぶと、OpenAI 形式の chat completion JSON、SSE イベントストリーム([DONE] ターミネーターとチャンクタイミングマーカー付きの data: 行)、ローカルスタブに対してリクエストを再生する curl コマンドを生成します。API キーも、アカウントも、ネットワークも不要です:すべては固定シードからブラウザー内で計算されるため、同じ設定は常にバイト同一の出力を生成します - 再現可能なクライアントテストスイートにまさに必要なものです。
使い方
- ドロップダウンからシナリオを選びます(例:チャンクストリームには
Streamed lorem、バックオフのテストにはError 429)。 - クライアントが送る Model 名と Max tokens 上限を設定します。
- User prompt を入力します -
echoシナリオはそれを assistant メッセージとしてそのまま返します。 - Output タブを Completion JSON / SSE stream / curl の間で切り替え、必要なものをコピーします。
- タイミング表示(
first byte/inter-chunk)を使ってスタブを本物のモデルらしくスリープさせたり、Copy share link で正確な設定をチームメイトに送ったりできます。
例
Echo シナリオ(デフォルト設定) - 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 - SSE ストリーム(抜粋)。先頭の : コメントはチャンクタイミングマーカーです:
: 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"
}
}
curl タブ - ポート 8080 のローカルスタブに対してリクエストを再生します:
# ローカルスタブ: JSON タブに表示されたボディで 200 を返します。
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}'
補足事項
- 設計上決定論的: id、lorem テキスト、タイムスタンプは、シナリオ・モデル・トークン上限から導出されるシードに由来します - 時刻や
Math.random()は使いません。同じ設定を入れれば同じバイトが出ます。createdフィールドは固定エポック1735689600(2025-01-01)です。 - チャンクは正確に再結合します: すべての SSE デルタの content を連結すると completion のメッセージ content と一致します - JSON タブに対してストリームパースをアサートできます。
- トークン計算: トークンあたり約 4 文字、下限 1。
Max tokens上限に達するとfinish_reasonが"length"に切り替わります。 - プライベート: 100% クライアントサイドで動作します - リクエストがブラウザーの外に出ることはありません。
- 関連ツール: LLM Cost Calculator、Token Estimator、HTTP Methods Tester。