आपको जिन तीन मानों की आवश्यकता है
प्रत्येक OpenAI-संगत क्लाइंट समान तीन चीज़ें माँगता है। यहाँ इस सेवा के लिए वे दिए गए हैं।
| सेटिंग | मान |
|---|---|
| बेस URL | https://api.getcodexapi.com/v1 |
| API कुंजी | अपनी कुंजी API कुंजी पृष्ठ से प्राप्त करें |
| मॉडल | uncensored |
कुंजी को Authorization: Bearer YOUR_KEY के रूप में भेजा जाता है। आप दो एंडपॉइंट्स कॉल कर सकते हैं: POST /v1/chat/completions और GET /v1/models। यह एक स्वतंत्र सेवा है जो एक ओपन-वेट मॉडल चलाती है, OpenAI का Codex नहीं, इसलिए उसी सेटिंग में OpenAI का एंडपॉइंट या OpenAI की कुंजी पेस्ट न करें।
curl के साथ कनेक्शन जाँचें
किसी भी ऐप कॉन्फ़िगरेशन को संपादित करने से पहले, टर्मिनल से कुंजी और URL काम कर रहे हैं, इसकी पुष्टि करें। मॉडल सूचीबद्ध करना सबसे सस्ता परीक्षण है, क्योंकि इसके लिए किसी प्रॉम्प्ट की आवश्यकता नहीं है:
curl https://api.getcodexapi.com/v1/models \
-H "Authorization: Bearer YOUR_API_KEY"
आपको एक JSON सूची मिलनी चाहिए जिसमें मॉडल uncensored शामिल हो। फिर एक वास्तविक पूर्णता भेजें:
curl https://api.getcodexapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Say hello in five words."}]
}'
यदि दोनों कॉल काम करती हैं, तो बाद की किसी भी विफलता की समस्या आपकी क्लाइंट कॉन्फ़िगरेशन में है, न कि सेवा में। रिस्पॉन्स हेडर में X-Request-Id शामिल है, जिसे यदि आपको किसी विशिष्ट कॉल को ट्रैक करने की आवश्यकता हो तो रखना उपयोगी है, और X-Balance-USD, जो आपका शेष क्रेडिट दिखाता है।
OpenAI SDK के साथ Python
आधिकारिक openai पैकेज क्लाइंट कंस्ट्रक्टर में बेस URL लेता है। आपके कोड के बारे में कुछ भी नहीं बदलता है।
from openai import OpenAI
client = OpenAI(
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
resp = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a concise assistant."},
{"role": "user", "content": "Explain what a base URL is in two sentences."},
],
)
print(resp.choices[0].message.content)
यदि आप कोड से कॉन्फ़िगरेशन बाहर रखना चाहते हैं, तो SDK OPENAI_BASE_URL और OPENAI_API_KEY को एन्वायरनमेंट से भी पढ़ता है:
export OPENAI_BASE_URL="https://api.getcodexapi.com/v1"
export OPENAI_API_KEY="YOUR_API_KEY"
इन्हें सेट करने पर, OpenAI() बिना किसी आर्गुमेंट के उन्हें पकड़ लेता है। यह उपयोगी है क्योंकि SDK पर बने कई थर्ड-पार्टी टूल्स बिना कोड बदले उसी वेरिएबल्स को इनहेरिट करते हैं।
Node.js
जावास्क्रिप्ट SDK उसी ऑप्शन नाम का उपयोग करता है, जिसे baseURL लिखा जाता है।
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.getcodexapi.com/v1",
apiKey: process.env.API_KEY,
});
const stream = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Write a haiku about version control." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
स्ट्रीमिंग stream: true के साथ सर्वर-सेंट इवेंट्स के रूप में वापस आती है, और उपयोग अंत में शामिल होता है। ध्यान रखें कि एक स्ट्रीम किए गए अनुरोध में आपकी कन्करेंसी स्लॉट में से एक होता है जब तक कि स्ट्रीम खत्म नहीं हो जाती, इसलिए एक स्ट्रीम जिसे आप बिना बंद किए छोड़ देते हैं, वह लिमिट के खिलाफ गिनती में बनी रहती है।
ऐप्स जिनमें सेटिंग्स स्क्रीन है
डेस्कटॉप टूल्स और एडिटर आमतौर पर फ़ील्ड को तीन तरीकों से लेबल करते हैं: "Base URL", "API Base" या "OpenAI-compatible endpoint"। सभी को एक ही स्ट्रिंग चाहिए। समय बचाने वाले कुछ नोट्स:
- ओपनएआई या "कस्टम ओपनएआई-कम्पैटिबल" प्रोवाइडर टाइप चुनें, न कि वेंडर-स्पेसिफिक।
- यदि ऐप में एक फ्री-टेक्स्ट बॉक्स है, तो मॉडल नाम को हाथ से टाइप करें।
uncensoredसटीक ID है। - यदि ऐप में "कनेक्शन परीक्षण" बटन है, तो यह आमतौर पर मॉडल सूची को कॉल करता है, जिसे यह API समर्थित करता है।
- कुछ एप्स पिछले प्रदाता से मॉडल सूची को कैश कर लेते हैं। पुराने एंट्री को हटाएँ और यदि ड्रॉपडाउन गलत दिख रहा हो तो नई एंट्री जोड़ें।
किसी विशिष्ट एडिटर में एक वर्कड उदाहरण के लिए, Cursor को कनेक्ट करने के गाइड या coding API पेज पर कुल तस्वीर देखें। पूर्ण पैरामीटर संदर्भ API दस्तावेज़ में है।
जैसे ही कनेक्शन काम करे, URL, मॉडल का नाम और आपने कुंजी बनाई थी उस तारीख सहित सटीक मान किसी ऐसी जगह सेव कर लें जहाँ आप उन्हें फिर से ढूँढ सकें। टीमें अक्सर बाद में एक घंटा खो देती हैं उस कॉन्फ़िगरेशन की एक कॉपी के साथ जो अभी भी एक पुराना मान धारण करती है। रिपॉजिटरी में एक अकेला साझा उदाहरण फ़ाइल, असली कुंजी के बजाय एक प्लेसहोल्डर के साथ, इससे बचाती है।
सामान्य गलतियाँ और समाधान
URL /v1/v1 बन जाता है
कुछ क्लाइंट अपने आप /v1 जोड़ देते हैं। यदि आपके अनुरोध विफल हो जाते हैं और क्लाइंट लॉग में /v1/v1/chat/completions वाला पथ दिखाता है, तो आपके द्वारा दर्ज बेस URL से /v1 हटा दें। विपरीत भी होता है: एक क्लाइंट जो इसे नहीं जोड़ता है, उसे आपकी सेटिंग में चाहिए। अनुरोध पथ का लॉग सवाल को जल्दी समाप्त कर देता है।
आपने पूरा एंडपॉइंट बेस URL में डाल दिया
बेस URL /v1 पर ही रुकता है। वहाँ /chat/completions न दर्ज करें। SDK प्रत्येक कॉल के लिए पथ जोड़ता है।
ट्रेलिंग स्लैश या होस्ट में टाइपो
अधिकतर SDK ट्रेलिंग स्लैश सहन कर लेते हैं, लेकिन कुछ पुराने टूल्स पाथ को साधारण संयोजन से बनाते हैं और डबल स्लैश पर पहुँच जाते हैं। यदि आप अजीब 404 रिस्पॉन्स देखते हैं, तो उसे हटा दें।
गलत कुंजी, या किसी अन्य सेवा की कुंजी
एक OpenAI कुंजी यहाँ काम नहीं करेगी, और हमारी कुंजी वहाँ काम नहीं करेगी। API कुंजी त्रुटियाँ लगभग हमेशा कॉपी-पेस्ट की समस्या को दर्शाती हैं, जैसे कोई अक्षर छूट जाना या अंत में स्पेस होना।
curl में काम करता है लेकिन आपके एप्लिकेशन में नहीं
यदि curl सफल होता है और एप्लिकेशन समान URL और कुंजी के साथ विफल हो जाता है, तो अंतर वातावरण में है। जांचें कि क्या एप्लिकेशन किसी प्रॉक्सी के पीछे चल रहा है या किसी कंटेनर के अंदर चल रहा है जिसमें आउटबाउंड एक्सेस नहीं है, क्या यह एक पुराने वातावरण वेरिएबल को पढ़ रहा है जैसे कि एक अन्य प्रोजेक्ट से बचा हुआ OPENAI_BASE_URL, और क्या एक कॉन्फ़िगरेशन फ़ाइल कोड में आपके द्वारा सेट किए गए मान को ओवरराइड कर रही है। अंतिम URL को प्रिंट करना जो क्लाइंट कॉल करेगा, अनुरोध से ठीक पहले, इनमें से अधिकांश मामलों को एक मिनट के भीतर समाप्त कर देता है।
HTTP 429
इसका मतलब है कि एक सीमा टकरा गई है। त्रुटि कोड rate_limited प्रति मिनट अनुरोध है, और concurrency एक साथ बहुत सारे अनुरोध हैं। एक पूर्ण कुंजी 8 कन्करेंट अनुरोधों और प्रति मिनट 300 की अनुमति देती है; एक ट्रायल कुंजी 2 और 60 की अनुमति देती है। अस्थायी ओवरलोड पर आपको एक 429 भी मिलता है Retry-After: 5 हेडर के साथ, इसलिए पांच सेकंड प्रतीक्षा करें और पुनः प्रयास करें।
LangChain और URL को एक जगह रखना
OpenAI क्लाइंट पर बने फ्रेमवर्क समान मान लेते हैं। LangChain के OpenAI इंटीग्रेशन में तर्कों के नाम इस प्रकार हैं:
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model="uncensored",
base_url="https://api.getcodexapi.com/v1",
api_key="YOUR_API_KEY",
)
print(llm.invoke("Name three uses of a base URL.").content)
चाहे कोई भी फ्रेमवर्क हो, URL को अपने कोड में बिखेरें नहीं। इसे एक एनवायरनमेंट वेरिएबल या एक सेटिंग्स फ़ाइल में रखें और वहाँ से पढ़ें। इस तरह, टेस्ट कुंजी और प्रोडक्शन कुंजी के बीच या मशीनों के बीच जाना, केवल एक पंक्ति बदलने का अर्थ है। यह कुंजियों को आपके रिपॉजिटरी से बाहर रखता है: कुंजी को एनवायरनमेंट वेरिएबल या सिक्रेट्स मैनेजर में स्टोर करें, कभी भी कमिट की गई फ़ाइल में नहीं।
यदि आप OpenAI के अपने Codex उत्पादों के लिए एंडपॉइंट की तलाश में थे, तो यह वह नहीं है। उनका बेस URL और API कुंजी OpenAI द्वारा दस्तावेज़ित है, इसलिए इसके लिए उनके वर्तमान दस्तावेज़ देखें। इस पेज का पता एक स्वतंत्र सेवा का है और केवल यहाँ जारी की गई कुंजियों को स्वीकार करता है।
कनेक्ट होने के बाद आप क्या भेज सकते हैं
एंडपॉइंट स्ट्रीमिंग, टूल कॉलिंग (tools, tool_choice, परिणामों को role: "tool" संदेशों के रूप में लौटाया जाता है), और JSON मोड response_format: {"type": "json_object"} के माध्यम से सपोर्ट करता है। पैरामीटर temperature, top_p, stop, seed और पेनल्टी पास किए जाते हैं। कॉन्टेक्स्ट विंडो प्रॉम्प्ट प्लस कंप्लीशन के लिए 100,000 टोकन है, और अधिकतम अनुरोध बॉडी 8 MB है।
यह केवल टेक्स्ट है। कोई इमेज या ऑडियो जनरेशन नहीं है, कोई एम्बेडिंग नहीं है और कोई फाइन-ट्यूनिंग नहीं है, इसलिए एक क्लाइंट फीचर जो उन पर निर्भर करता है, इस बेस URL के साथ काम नहीं करेगा। उपयोग प्रति टोकन के लिए बिल किया जाता है, $0.15 प्रति 1M इनपुट और $0.50 प्रति 1M आउटपुट के लिए; मूल्य निर्धारण पृष्ठ पर कार्य उदाहरण हैं।
