Documentation Index
Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt
Use this file to discover all available pages before exploring further.
CometAPI のエラーは、リクエストを修正すべきか、リトライすべきかを判断して対応します。429、タイムアウト系の障害、一時的なサーバー障害はバックオフを使ってリトライし、不正なリクエストや認証失敗はリトライしないでください。
リトライ可能な障害のみリトライする
| ステータスまたはシグナル | リトライ可否 | 対応 |
|---|
400 | いいえ | リクエストボディまたはパラメータを修正します。 |
401 | いいえ | API キーと Authorization ヘッダーを修正します。 |
403 | 通常はいいえ | サポートされていないフィールドを削除し、model へのアクセスを確認します。 |
429 | はい | 指数バックオフとジッターを使ってリトライします。 |
500 with invalid_request | いいえ | リクエスト形式を修正します。 |
500, 503, 504, 524 | はい | バックオフを使ってリトライし、request ID を保持します。 |
バックオフを追加する
以下の Python の例では、リトライ可能な障害のみをリトライします。
import os
import random
import time
from openai import APIError, OpenAI, RateLimitError
client = OpenAI(
api_key=os.environ["COMETAPI_KEY"],
base_url="https://api.cometapi.com/v1",
)
for attempt in range(5):
try:
response = client.chat.completions.create(
model="your-model-id",
messages=[{"role": "user", "content": "Say hello."}],
)
print(response.choices[0].message.content)
break
except RateLimitError:
delay = min(30, 2**attempt) + random.random()
time.sleep(delay)
except APIError as error:
status_code = getattr(error, "status_code", None)
if status_code in {500, 503, 504, 524}:
delay = min(30, 2**attempt) + random.random()
time.sleep(delay)
continue
raise
else:
raise RuntimeError("The request failed after retries.")
成功したレスポンスには、model の出力が含まれます。
{
"choices": [
{
"message": {
"role": "assistant",
"content": "Hello."
}
}
],
"usage": {
"total_tokens": 9
}
}
役立つコンテキストをログに残す
以下の JSON 形式は、ユーザーの秘密情報と大きなファイルを削除した後であれば安全に保存できます。
{
"method": "POST",
"path": "/v1/chat/completions",
"model": "your-model-id",
"status": 429,
"request_id": "request_id_from_error_message",
"retryable": true
}
よくあるエラー
| エラー | 修正方法 |
|---|
401 をリトライする | リトライを停止し、API キーをローテーションまたは再読み込みします。 |
| 無効な JSON をリトライする | 別のリクエストを送る前に、リクエストボディを検証します。 |
| ログに request ID がない | SDK がラップする前の正確なエラーボディを取得します。 |
429 の直後にリトライする | ジッターを追加し、同時実行数を減らします。 |
関連リンク