0
0

OpenAI API Timeout処理の方法(2024/8/10現在)

Last updated at Posted at 2024-08-10

概要

OpenAIでAPIリクエストを送っても,responseが得られずに固まってしまう現象に困っている方へ.

Timeout時間を設定し,一定時間返答がなければリクエストをやり直すことで回避できます.

環境

python=3.8
openai=1.38.0

ChatCompletionのキホン

PythonでGPTを使いたければ次の型がキホンですね.
openaiライブラリのバージョンによって変わってくるので環境に注意です.

from openai import OpenAI

client = OpenAI() #必要に応じてapi_keyなど設定

messages = [
                {"role": "system", "content": "You are helpful assistant."},
                {"role": "user", "content": "Hey ChatGPT, how are you?"}
]

response = self.client.chat.completions.create(
                        model = "gpt-4o",
                        messages=messages
                    )

response_text = response.choices[0].message.content

タイムアウト処理の設定

タイムアウトは最初のクラスのインスタンスを定義するところで設定します.
エラー処理は,openai.APITimeoutErrorを用いるのに注意です.

from openai import OpenAI
import httpx

client = OpenAI(api_key=api_key, timeout=httpx.Timeout(15.0, read=5.0, write=10.0, connect=3.0))

try:
    response = self.client.chat.completions.create(
        model = "gpt-4o",
        messages=messages
    )
    
except openai.APITimeoutError as e: #普通のTimeoutErrorではないことに注意
    print(e, flush=True)

httpx.Timeout の read, write, connect という引数は,HTTPリクエストの特定の段階におけるタイムアウトの制限時間を設定するものです.それぞれの数字は秒数を表しています.

  • read (読み込みタイムアウト): サーバーからのレスポンスデータを受け取る際の最大待機時間を秒単位で指定します.例えば,read=5.0 と設定すると,サーバーが5秒以内にレスポンスを送信しない場合,タイムアウトとしてリクエストが失敗します.
  • write (書き込みタイムアウト): クライアントからサーバーへデータを送信する際の最大待機時間を秒単位で指定します.例えば,write=10.0 と設定すると,データが10秒以内に送信されない場合,タイムアウトとしてリクエストが失敗します.
  • connect (接続タイムアウト): サーバーへの接続が確立されるまでの最大待機時間を秒単位で指定します.例えば,connect=3.0 と設定すると,サーバーへの接続が3秒以内に確立されない場合,タイムアウトとしてリクエストが失敗します.
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0