त्रुटियाँ, रेट लिमिट और विश्वसनीयता
प्रोडक्शन कोड एक नेटवर्क सेवा से बात करता है, इसलिए इसे विफलता की अपेक्षा करनी चाहिए। यहाँ थोड़ी-सी संरचना एक अस्थिर इंटीग्रेशन और एक भरोसेमंद इंटीग्रेशन के बीच का अंतर है।
त्रुटि मानचित्र
सामान्य HTTP स्टेटस जिन्हें आप संभालेंगे:
| स्टेटस | अर्थ | क्या करें |
|---|---|---|
| 400 | अमान्य अनुरोध | पेलोड ठीक करें; उसी रूप में रीट्राई न करें |
| 401 | ग़लत/अनुपस्थित API कुंजी | क्रेडेंशियल जाँचें |
| 403 | अनुमति नहीं | एक्सेस/अनुमतियाँ जाँचें |
| 429 | रेट लिमिटेड | बैक ऑफ़ करें और रीट्राई करें (retry-after का सम्मान करें) |
| 500/529 | सर्वर त्रुटि / ओवरलोड | बैकऑफ़ के साथ रीट्राई करें |
SDK इन्हें टाइप्ड एक्सेप्शन के रूप में सामने लाते हैं, ताकि आप स्ट्रिंग पार्स करने के बजाय स्पष्ट रूप से शाखाएँ बना सकें।
बैकऑफ़ के साथ रीट्राई
अस्थायी त्रुटियों (429, 5xx) के लिए, एक्सपोनेंशियल बैकऑफ़ + जिटर के साथ रीट्राई करें, सीमित रूप में:
import time, random
for attempt in range(5):
try:
return client.messages.create(...)
except (RateLimitError, APIStatusError) as e:
if attempt == 4 or not should_retry(e):
raise
time.sleep(min(2 ** attempt + random.random(), 30))
(कई SDK अस्थायी त्रुटियों को स्वचालित रूप से रीट्राई करते हैं — अपनी ख़ुद की रीट्राई जोड़ने से पहले अपने क्लाइंट के डिफ़ॉल्ट को जानें।)
रेट लिमिट
सीमाएँ प्रति-अकाउंट/टियर लागू होती हैं (अनुरोध और प्रति मिनट टोकन)। जब आप किसी सीमा से टकराते हैं तो आपको समय संकेतों के साथ 429 मिलता है। रणनीतियाँ: retry-after का सम्मान करें, बर्स्ट को सहज बनाएँ, ऑफ़लाइन काम को बैच करें, और अधिक-मात्रा वाले चरणों के लिए एक सस्ता मॉडल (एक मॉडल चुनना) इस्तेमाल करें।
मॉडल माइग्रेशन
मॉडल ID दिनांकित/संस्करणित होते हैं और बंद कर दिए जाते हैं। ख़ुद को सुरक्षित रखें:
- मॉडल ID को कॉन्फ़िग से पढ़ें, बिखरे हुए लिटरल्स से नहीं।
- डेप्रिकेशन पर नज़र रखें — देखें डेप्रिकेशन और माइग्रेशन वॉच और मॉडल तालिका।
- मॉडल बदलते समय अपने evals फिर से चलाएँ।