長い会話が 400 になる問題を修正しました
Codex / OpenCode / pi / Claude Code などのコーディングエージェントから使っていると、会話が長くなった時点から API Error: 400 Invalid request が続く問題がありました。新しいセッションを始めると直りますが、元のセッションは何を送っても失敗する状態でした。2026 年 9 月 8 日に修正済みです。ご不便をおかけし申し訳ありません。
調査の過程で、同じモデルの長い入力が間欠的に失敗する原因が別に 2 件見つかりました。こちらも同日に修正しています。
症状
恒久的に失敗するもの(主症状)
- 長いセッションの途中から、すべてのリクエストが 400 で失敗する
- 再送しても待っても解消しない
- 新規セッションでは問題なく応答が返る
{
"error": {
"type": "invalid_request_error",
"message": "Invalid request"
}
}
間欠的に失敗するもの(副症状)
- ツール定義(
tools)を多く載せた長い入力が、当たった GPU によって 400 になる - 長い入力が、当たった GPU によって 500 になる
いずれも入力が短いうちは発生しません。
影響範囲
全てのモデル
原因
1. 公開していたコンテキスト長に余白がなかった(主因)
このモデルの入力に使えるトークン数は 245,760 です。一方、公開していたコンテキスト長は 262,144(入力 + 出力の合計)でした。
コーディングエージェントは「コンテキスト長 − 出力上限」を目安に会話履歴を自動で圧縮します。このモデルでは 262,144 − 16,384 = 245,760 となり、圧縮を始める目安と、入力を受け付ける締め切りが同じ値でした。
締め切りをわずかに超えた 1 リクエストが 400 になると、エージェントには使用量が返らないため圧縮が始まりません。その後は会話が 1 往復ごとに数トークンずつ伸び続け、セッションが恒久的に失敗する形になっていました。
2. 出力上限の超過をそのまま受け付けていた
このモデルの出力上限は 16,384 トークンです。一部のクライアントは既定で max_tokens: 32000 を送りますが、これをそのまま受け付けていました。
入力が短いうちは合計がコンテキスト長に収まるため問題になりません。入力が 230,000 トークンを超えたあたりで合計が 262,144 を超え、400 になっていました。
3. ツール定義のトークンが入力量の見積りから漏れていた
このモデルは複数の GPU に処理を分散しており、GPU ごとに受け付けられる入力の長さが異なります。長い入力を受け付けられる GPU に振り分けるため、リクエストごとに入力のトークン数を事前に見積っています。
この見積りが会話本文だけを数え、ツール定義(tools)を数えていませんでした。
ツール定義が大きいリクエストは実際より短く見積られ、受け付けられない GPU に振られて 400 になっていました。どの GPU に振られるかは実行のたびに変わるため、「たまに失敗する」形で現れていました。
4. 一部の GPU でメモリの余白が不足していた
分散先の GPU の 1 台で、長い入力を処理する際にメモリが不足し 500 を返すことがありました。起動時に確保するメモリの比率が高く、処理中に必要な一時領域の余白が約 2 GB しかない状態でした。
対応
| 項目 | 変更前 | 変更後 |
|---|---|---|
| 公開コンテキスト長 | 262,144 tok | 245,760 tok |
| 出力上限(16,384)を超える指定 | 400 エラー | 16,384 として扱う |
| 入力が長すぎる場合のエラー | Invalid request のみ |
code: context_length_exceeded を付与 |
| 入力量の見積り | 会話本文のみ | ツール定義も含める |
| GPU のメモリ余白 | 約 2 GB | 約 5 GB |
公開コンテキスト長を 245,760 に改めたことで、エージェントの圧縮の目安は 229,376 になり、締め切りまで 16,384 トークンの余白ができます。実際に受け付ける入力の上限(245,760)は変わっていません。使える範囲が狭くなったわけではなく、表記を実態に合わせたものです。
エラーに付けた code: context_length_exceeded は OpenAI API 互換の値です。対応しているクライアントは、これを受け取ると自動で会話履歴を圧縮します。
入力量の見積りは、ツール定義を含めたリクエストで実際に確認しています。見積りが実態に近づいたことで、長い入力は最初から受け付けられる GPU に振られます。
課金への影響
失敗したリクエストは課金されていません。 400 / 500 いずれもモデルが応答を生成する前に発生しているため、トークンは消費されていません。
お客様側の対応
クライアント設定 から設定ファイルを生成している場合は、再生成して差し替えてください。コンテキスト長の値(Codex の model_context_window、OpenCode の limit.context、pi の contextWindow)が新しい値になります。
設定を手書きしている場合は設定ファイル生成ページより再作成して下さい。
現在 400 が続いているセッションは、新しいセッションを始めれば解消します。