メインコンテンツまでスキップ

エラーコード

Lykuro は透過プロキシのため、上流(OpenAI/Anthropic 互換)が返したエラー本文・ステータスはそのまま透過されます。 一方で、Lykuro 自身が判定するエラー(認証・残高・ルーティング・サーキットブレーカー)は次の形式で返します。

{
"error": {
"code": "model_not_found",
"message": "no upstream route for ..."
}
}

Lykuro が返すエラー

コードHTTP説明対処
invalid_api_key401APIキーが無効または未指定Authorization: Bearerx-api-key を確認・再発行
api_key_revoked401APIキーが無効化済み新しいキーを発行
api_key_expired401APIキーの有効期限切れ新しいキーを発行
ip_not_allowed403許可IP以外からのアクセスキーの許可IP設定を確認
insufficient_balance402残高不足ダッシュボードでチャージ
model_not_found404/{プロバイダ}/パス に対応する上流ルートが無いbase_url のプロバイダ・パスを確認
invalid_request400リクエスト本文が読めない等リクエストを確認
circuit_open503上流障害が続きフェイルファスト中しばらく待ってリトライ
upstream_error502上流への接続・応答エラーしばらく待ってリトライ
upstream_timeout502上流APIタイムアウトリトライ
注記

上流自身が返す 401(モデル/権限不正)、400(パラメータ不正)、429(上流レート制限)、5xx などは、 上流のエラー本文のまま透過されます。SDK のエラーハンドリングはそのまま利用できます。 上流へ到達できない場合(接続失敗・タイムアウト)のみ Lykuro が 502 を生成し、その message には実際のエラー内容が入ります(汎用文言ではありません)。

課金との関係

  • 上流の 429(レート制限)・5xx(サーバーエラー)は課金されません(顧客有利)。
  • 正常応答・クライアント起因の 4xx は実消費トークンで課金されます。

リトライ推奨のエラー

429502 / 503 系はバックオフ付きリトライで解消する場合があります。

import time

def chat_with_retry(client, **kwargs):
for attempt in range(3):
try:
return client.chat.completions.create(**kwargs)
except Exception:
if attempt == 2:
raise
time.sleep(2 ** attempt) # 1秒, 2秒, ...