Documentation

AI API エラーレスポンス

LLMPool の OpenAI 互換 API と Anthropic 互換 API は、それぞれのプロトコルに対応したエラー形式を使用します。アプリケーションは最初に HTTP ステータスを確認し、次に構造化されたエラーフィールドを読み取ってください。

エラーメッセージは人が読むためのもので、安定した解析契約ではありません。message の文字列を照合して再試行や処理分岐を決めないでください。

OpenAI 互換形式

{
  "error": {
    "message": "The requested model was not found.",
    "type": "invalid_request_error",
    "param": "model",
    "code": "model_not_found"
  }
}
フィールド説明
error.messagestring開発者向けの安全な説明
error.typestringOpenAI 互換エラー分類
error.paramstring または null関連するリクエストフィールド
error.codestring または nullプログラムで判定できるエラーコード

HTTP ステータスと error.code を優先して処理してください。

Anthropic 互換形式

{
  "type": "error",
  "error": {
    "type": "not_found_error",
    "message": "The requested model was not found."
  }
}
フィールド説明
typestring常に error
error.typestringAnthropic 互換エラー分類
error.messagestring開発者向けの安全な説明
error.codestring または省略ip_not_allowed など一部のエラーのみ

Anthropic クライアントは HTTP ステータスと error.type を主に使用してください。

フィールドの定義元

内容主な定義元クライアントでの扱い
HTTP ステータスLLMPool が障害分類に基づき標準化。一部の透過レスポンスは上流値を保持下表の分類に従う
OpenAI error.codeLLMPool が定義する一般的なコードHTTP ステータスと組み合わせて判定可能
OpenAI error.type / Anthropic error.typeLLMPool が互換形式へ変換。透過レスポンスでは上流由来の場合あり文書化された型のみを使用
error.message安全な標準文、または透過された上流文表示、ログ、手動調査にのみ使用

非 2xx の正常な業務レスポンス

一部の互換上流は、構造が正しい業務レスポンスに非 2xx ステータスを付けることがあります。LLMPool は内容が対象エンドポイントと一致すると確認できた場合、ステータスを保持したまま業務オブジェクトを返すことがあります。

  • Chat Completions と Responses の有効な OpenAI オブジェクト
  • Anthropic の非ストリーミング Messages、Files、Message Batches オブジェクト
  • status: "failed" と使用量を含む Responses オブジェクト

2xx を受けたクライアントは、エラー envelope を読む前に対象エンドポイントの業務オブジェクトか確認してください。

主な HTTP ステータス

ステータス意味推奨対応
400リクエスト、パラメーター、モデル機能、コンテキスト長が不正修正して再送信
401API キーが無効キーと認証 Header を確認。自動再試行しない
402アカウント残高不足入金後に再送信
403送信元 IP が許可されていないIP 許可リストを確認
404モデル、レスポンス、リソースが存在しないID とパスを確認
405HTTP メソッドが未対応文書化されたメソッドを使用
413リクエストが大きすぎる本文または添付を縮小
422JSON は有効だがパラメーターの組み合わせが不正修正して再送信
429プラットフォームまたは上流のレート制限Retry-After に従いバックオフ
500LLMPool 内部エラー。Anthropic では上流設定エラーの場合あり構造化された型で判断
502上流設定エラーまたは上流が利用不能error.code で再試行可否を判断
503OpenAI 互換モデルの容量なしバックオフまたはモデル変更
504上流タイムアウトバックオフし、必要なら入力を短縮
529Anthropic 互換上流またはモデルの過負荷バックオフまたはモデル変更

詳しくはトラブルシューティングを参照してください。

ストリーミングエラー

HTTP 200 とレスポンス Header の送信後にストリームが失敗する場合があります。クライアントは最初の HTTP ステータスだけでなく SSE イベントを最後まで解析する必要があります。

Chat Completions

{
  "error": {
    "message": "Upstream stream interrupted.",
    "type": "server_error",
    "param": null,
    "code": "stream_error"
  }
}

Responses API

{
  "type": "error",
  "code": "stream_error",
  "message": "Upstream stream interrupted.",
  "param": null,
  "sequence_number": 7
}

Responses API は正規の response.failed 終端イベントを返すこともあります。

{
  "type": "response.failed",
  "sequence_number": 7,
  "response": {
    "id": "resp_123",
    "object": "response",
    "status": "failed",
    "error": {
      "code": "server_error",
      "message": "The response failed."
    }
  }
}

response.failed は Responses プロトコルの業務終端です。LLMPool はこのイベントを転送してストリームを終了し、合成エラーを追加しません。type: "error"type: "response.failed" の両方を処理してください。

Anthropic Messages

Anthropic Messages は SSE event: error を使用します。

{
  "type": "error",
  "error": {
    "type": "api_error",
    "message": "Upstream stream interrupted."
  }
}

ストリームエラーや失敗終端を受信したらストリームを終了し、受信済み断片を完全なレスポンスとして扱わないでください。

再試行の原則

  • 400401402403404405413422 は、通常リクエストやアカウント状態の修正が必要です。
  • 429 rate_limit_exceeded429 rate_limited502 upstream_unavailable503 service_unavailable504 upstream_timeout529 overloaded_error はジッター付き指数バックオフを使用できます。
  • 502 upstream_configuration_error400/500 meter_price_rules_error はプラットフォーム設定の問題で、同じ内容の再試行は通常無効です。
  • 500 internal_error または Anthropic 500 api_error は少数回のみ再試行し、継続する場合はサポートへ連絡してください。
  • Retry-After Header を優先してください。
  • リソース作成や Batch など非冪等操作は、最初のリクエストが成功していないことを確認してから再試行してください。
  • 最大回数と総タイムアウトを必ず設定してください。

LLMPool は標準エラーに上流の生レスポンス、認証情報、内部モデル名、API Base、プロキシ URL を含めません。サポートへ連絡する際も API キー、リクエスト本文、ファイル内容を送信しないでください。