ステータスコードが実際の原因と異なる
ステータスコードではなく error.code を読む
モデル名の誤りは 503、messages フィールドの欠落は 500 で返ってきます。どちらもリクエスト自体の誤りで、何度再試行しても結果は変わりません。ところが openai-python、openai-node、Anthropic の各 SDK はいずれも 408・409・429 と 5xx 全般を既定で 2 回、指数バックオフ付きで再試行します。つまり 1 か所のタイプミスが 3 往復と数十秒の待ち時間に変わり、そのあとで最初から確定していた原因がようやく表示されます。本当の原因は最初からレスポンスボディの error.code にあり、嘘をついているのはステータスコードの側です。