API ও SDKগাইড
OpenAI Python SDK টাইমআউট এবং রিট্রাই: CheapTokens-এর জন্য সেগুলো সেট করুন
OpenAI Python SDK-তে timeout, max_retries এবং max_tokens সেট করুন, সঠিক ত্রুটিগুলো ধরুন, এবং একটি আটকে থাকা রিকোয়েস্টকে ১০ মিনিট ধরে চলা থেকে বিরত রাখুন।

এই পৃষ্ঠায়
আপনার স্ক্রিপ্ট মডেলকে কল করেছে, কিছুই ফেরত আসেনি, এবং দশ মিনিট পরেও এটি অপেক্ষা করছে। এটি OpenAI Python SDK-এর ডিফল্ট: ১০ মিনিটের টাইমআউট এবং ২টি রিট্রাই। এটি পরিবর্তন করতে, timeout=30.0 এবং max_retries=2 OpenAI(...)-এ পাস করুন, প্রতি কলে client. দিয়ে সেগুলো ওভাররাইড করুন, এবং max_tokens দিয়ে উত্তর সীমাবদ্ধ করুন।
SDK-এর README (২৭ অক্টোবর ২০২৬-এ যাচাই করা) এই সবকিছু ডকুমেন্ট করে। নিচে এটি CheapTokens এন্ডপয়েন্টে প্রয়োগ করা হয়েছে, https:/, যা OpenAI Chat Completions ফরম্যাটে কথা বলে। সেই সেটআপের বিস্তারিত Your first API request with CheapTokens এবং docs-এ আছে।
আপনি কিছু সেট না করলে SDK কী করে#
দুটি ডিফল্ট গুরুত্বপূর্ণ। টাইমআউট ১০ মিনিট। রিট্রাই ২টি, একটি সংক্ষিপ্ত এক্সপোনেনশিয়াল ব্যাকঅফ সহ, কানেকশন ত্রুটি এবং 408, 409, 429 এবং 5xx রেসপন্সের জন্য, এবং শুধুমাত্র যখন রিকোয়েস্ট বডি নিরাপদে পুনরায় পাঠানো যায়। যে রিকোয়েস্ট টাইমআউট হয় সেটিও রিট্রাই করা হয়।
তাই প্রতিটি প্রচেষ্টা তার নিজস্ব টাইমআউট পায়, এবং সবচেয়ে খারাপ ক্ষেত্রে মোটামুটি টাইমআউট গুণিতক প্রচেষ্টার সংখ্যা, প্লাস তাদের মধ্যে বিরতি:
- ডিফল্ট: 600 × 3 = 1800 সেকেন্ড, আধা ঘণ্টা
timeout=30.0,max_retries=2: 30 × 3 = 90 সেকেন্ড
ধরুন একটি ওয়েব এন্ডপয়েন্টকে ৩০ সেকেন্ডের মধ্যে উত্তর দিতে হবে। ডিফল্ট সহ এটি আপনার কোড ত্রুটি দেখার আগে আধা ঘণ্টা ঝুলে থাকতে পারে। পড়া চালিয়ে যাওয়ার আগে অন্য সেটিংয়ে চেষ্টা করুন।
সংখ্যা অনুমান করুন
একটি ক্লায়েন্টে timeout=45.0 এবং max_retries=3 আছে। ব্যতিক্রমের আগে সবচেয়ে খারাপ ক্ষেত্রে অপেক্ষা কত সেকেন্ড, প্রচেষ্টার মধ্যে বিরতি গণনা না করে?
আপনার অনুমান
০৪০০
উত্তর দেখান
উত্তর: ১৮০
45 × (3 রিট্রাই + 1 প্রথম প্রচেষ্টা) = 180 সেকেন্ড; প্রচেষ্টার মধ্যে বিরতি উপরে একটু যোগ করে।
ক্লায়েন্টে timeout এবং max_retries সেট করুন#
সবচেয়ে সহজ সমাধান হল উভয়ই একবার সেট করা, যখন আপনি ক্লায়েন্ট তৈরি করেন:
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.cheaptokens.dev/v1",
api_key=os.environ["CHEAPTOKENS_API_KEY"],
timeout=30.0, # seconds per attempt
max_retries=2, # 0 turns retries off
)
resp = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[{"role": "user", "content": "Summarize this ticket in two sentences: ..."}],
max_tokens=800,
)
print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)max_retries একটি অ-ঋণাত্মক পূর্ণসংখ্যা হতে হবে। timeout একটি float নেয়, অথবা একটি httpx Timeout অবজেক্ট যদি আপনি সংযোগ এবং পড়ার জন্য আলাদা সীমা চান। বর্তমান main ব্রাঞ্চের README সেজন্য httpx2 ইমপোর্ট করে, পুরোনো সংস্করণ httpx ব্যবহার করত, তাই pip show openai চালান এবং আপনার ইনস্টল কোনটি ব্যবহার করে তা দেখুন। একটি সাধারণ float কোনো ইমপোর্ট ছাড়াই কাজ করে এবং যেকোনোভাবে কাজ করে।

CheapTokens docs থেকে সম্পূর্ণ মডেল আইডি ব্যবহার করুন, এখানে deepseek-: আইডি প্রদানকারীদের মধ্যে ভিন্ন। এই মডেল প্রতি উত্তরে 32,768 আউটপুট টোকেন পর্যন্ত নেয় এবং 380K কনটেক্সট আছে, সেজন্যই উপরের max_tokens লাইনটি ইচ্ছাকৃতভাবে আছে। এটি সম্পর্কে আরও নিচে, এবং মডেল সম্পর্কে cheap DeepSeek-এ।
একটি রিকোয়েস্টের জন্য এটি ওভাররাইড করুন#
এক ক্লায়েন্ট, ভিন্ন কাজ। একটি চ্যাট উত্তর দ্রুত ছেড়ে দেওয়া উচিত, একটি রাতের সারাংশ অপেক্ষা করতে পারে। দ্বিতীয় ক্লায়েন্ট তৈরি করার পরিবর্তে, কলের জন্য একটি ডেরাইভ করুন:
quick = client.with_options(timeout=5.0, max_retries=0)
resp = quick.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[{"role": "user", "content": "Reply with one word: ok"}],
max_tokens=5,
)with_options নতুন মান সহ একটি কপি ফেরত দেয় এবং client একা ছেড়ে দেয়। max_retries=0 সেট করা সঠিক কল যখন আপনার নিজের কোড ইতিমধ্যে রিট্রাই করে, উদাহরণস্বরূপ একটি জব কিউ যা টাস্ক পুনরায় এনকিউ করে। অন্যথায় দুটি স্তর গুণিত হয়: 3টি কিউ প্রচেষ্টার ভিতরে 3টি SDK প্রচেষ্টা একটি টাস্কের জন্য 9টি রিকোয়েস্ট।
গুরুত্বপূর্ণ ত্রুটিগুলো ধরুন#
রিট্রাই শেষ হওয়ার পরে, SDK একটি ব্যতিক্রম উত্থাপন করে। প্রতিটি ত্রুটি ক্লাস openai.APIError থেকে উত্তরাধিকারসূত্রে পায়, এবং ব্যর্থ রিকোয়েস্ট request_id বহন করে, যা আপনি লগ করেন:
import openai
def ask(prompt: str) -> str | None:
try:
r = client.chat.completions.create(
model="deepseek-ai/DeepSeek-V4-Flash-0731",
messages=[{"role": "user", "content": prompt}],
max_tokens=800,
)
return r.choices[0].message.content
except openai.APITimeoutError:
print("timed out after retries")
except openai.RateLimitError as e:
print("429, slow down:", e.request_id)
except openai.APIConnectionError:
print("cannot reach the API")
except openai.APIStatusError as e:
print("HTTP", e.status_code, e.request_id)
return Noneক্রমটি সংকীর্ণ থেকে প্রশস্ত। APIStatusError যেকোনো 4xx বা 5xx রেসপন্স কভার করে, তাই যদি এটি প্রথমে আসে তবে এটি RateLimitError গ্রাস করবে। টাইমআউটের জন্যও একই ধারণা: এটি সাধারণ কানেকশন ত্রুটির উপরে বসে। একটি ব্যাচ স্ক্রিপ্টে, return None পুরো বিষয়: প্রম্পট লগ করুন, পরেরটিতে যান, এবং শেষে ব্যর্থতাগুলো পুনরায় চালান।
যখন টাইমআউট ফায়ার করে এবং রিট্রাই ব্যবহার হয়ে যায়, ব্যতিক্রমটি এরকম দেখায়:

429 কেসের বিস্তারিত, প্রচেষ্টার মধ্যে অপেক্ষা সহ, 429 Too Many Requests from an AI API-এ দেখুন।
max_tokens সীমাবদ্ধ করুন যাতে একটি দীর্ঘ উত্তর পালাতে না পারে#
একটি টাইমআউট অপেক্ষা বন্ধ করে। এটি মডেলকে কম লিখতে বাধ্য করে না। max_tokens ছাড়া, 32,768-টোকেন উত্তর সীমা সহ একটি মডেল একটি খুব দীর্ঘ উত্তর লিখতে স্বাধীন, এবং একটি দীর্ঘ উত্তর ধীর। কাজের সাথে মানানসই একটি সীমা সেট করুন: একটি টিকিট সারাংশের জন্য 800, একটি হ্যাঁ/না-এর জন্য 5।
খরচ হল একটি উত্তর কেটে যেতে পারে। resp. পরীক্ষা করুন: length মানে মডেল শেষ হওয়ার আগে সীমা হিট করেছে। Why does an AI answer stop mid-sentence? এটি কভার করে। যদি আপনি পরিবর্তে উত্তর স্ট্রিম করেন, প্রথম শব্দগুলো তাড়াতাড়ি আসে এবং অপেক্ষা ছোট মনে হয়, Streaming responses in Python দেখুন।
রিট্রাই বিলে কী করে#
একটি রিট্রাই একটি নতুন রিকোয়েস্ট। যদি একটি প্রচেষ্টা প্রক্রিয়া করা হয়, এটি তার নিজস্ব টোকেন সহ একটি পৃথক রিকোয়েস্ট। ধরুন একটি টিকিট সারাংশ 1,500 টোকেন ইন এবং 400 আউট: একটি রিকোয়েস্ট আজকের দামে $0.000063 খরচ করে, এবং সম্পূর্ণ pricing table-এ অন্যান্য মডেল আছে। দাম প্রতি মডেলে স্থির, পিক আওয়ার ছাড়া, তাই রাত 3টায় একটি রিট্রাই দুপুরের একটির মতোই খরচ করে।
স্লাইডারগুলো আপনার নিজের ব্যাচে সরান:
খরচ ক্যালকুলেটর
1,000 টিকিট সারাংশের একটি ব্যাচ
প্রতি অনুরোধে ইনপুট টোকেন: ১,৫০০ · প্রতি অনুরোধে আউটপুট টোকেন: ৪০০ · প্রতিদিন অনুরোধ: ১,০০০
| মডেল | প্রতিদিন | প্রতি মাসে |
|---|---|---|
| GLM-5.3-Flash$0.02$0.04 | $0.046 | $1.38 |
| DeepSeek-V4-Flash$0.015$0.10 | $0.0625 | $1.88 |
| MiniMax-M2.7$0.05$0.15 | $0.135 | $4.05 |
টেবিলটি একটি পাস দেখায়। যদি ব্যাচের এক-দশমাংশের একটি দ্বিতীয় প্রচেষ্টা প্রয়োজন হয়, এক-দশমাংশ যোগ করুন। রিট্রাই সস্তা বীমা যখন ব্যর্থতা বিরল, এবং একটি ব্যয়বহুল অভ্যাস যখন আপনি max_retries=10 একটি এন্ডপয়েন্টের বিরুদ্ধে সেট করেন যা ব্যর্থ হতে থাকে।
শিপ করার আগে#
চেকলিস্ট
টাইমআউট এবং রিট্রাই, প্রোডাকশনের জন্য প্রস্তুত



