Home/API संदर्भ
Uncensored API संदर्भ, फ़ील्ड-दर-फ़ील्ड व्याख्या
यह पृष्ठ Uncensored API को भेजे जाने वाले या प्राप्त होने वाले प्रत्येक क्षेत्र को दस्तावेज़ करता है: चैट पूर्णता अनुरोध बॉडी, प्रतिक्रिया ऑब्जेक्ट, finish_reason मान, उपयोग ब्लॉक, स्ट्रीमिंग चंक और मॉडल सूची। प्रत्येक अनुभाग एक संक्षिप्त विनिर्देश को एक एनोटेटेड उदाहरण के साथ जोड़ता है जिसे आप टर्मिनल में पेस्ट करके चला सकते हैं।
द्वारा अपडेट किया गया
मुख्य बिंदु
- दो एंडपॉइंट मौजूद हैं: POST /v1/chat/completions और GET /v1/models। दोनों Bearer कुंजी के साथ प्रमाणीकरण करते हैं।
- प्रतिक्रिया परिचित चैट पूर्णता आकार का अनुसरण करती है: id, choices[].message, finish_reason और usage।
- स्ट्रीमिंग सर्वर-सेंट इवेंट्स का उपयोग करती है; एक अंतिम चंक उपयोग को स्वचालित रूप से ले जाता है और स्ट्रीम data: [DONE] के साथ समाप्त होती है।
- अनुरोधों को आकार देने वाली सीमाएँ: 100,000-टोकन कॉन्टेक्स्ट विंडो, 2048 डिफ़ॉल्ट और 32,000 अधिकतम max_tokens, 8 MB बॉडी।
रूढ़ि और ट्रांसपोर्ट
बेस URL है https://api.uncensoredapis.com/v1। सभी बॉडी JSON और UTF-8 हैं। प्रत्येक अनुरोध Authorization: Bearer <key> ले जाता है; एक अनुपस्थित या गलत कुंजी 401 लौटाती है। केवल दो रास्ते मौजूद हैं, और कोई भी अन्य पथ 404 लौटाता है।
| विधि | पथ | उद्देश्य |
|---|---|---|
| POST | /v1/chat/completions | एक सहायक संदेश जनरेट करें, वैकल्पिक रूप से स्ट्रीम किया गया |
| GET | /v1/models | मॉडल id सूचीबद्ध करें जिसे आप अनुरोध कर सकते हैं |
API केवल पाठ के लिए है। इसमें एम्बेडिंग, छवि, ऑडियो या वीडियो के लिए कोई एंडपॉइंट नहीं है, न ही फाइन-ट्यूनिंग की सुविधा है, और केवल एक ही मॉडल उपलब्ध है, जिसे uncensored के रूप में संदर्भित किया जाता है। चूँकि वायर फॉरमेट चैट कंप्लीशन कन्वेंशन के साथ संगत है, आप जब base_url को ओवरराइड करते हैं तो आधिकारिक Python और Node SDK काम करते हैं। docs में फर्स्ट-रन सेटअप की जानकारी है; यह पेज फ़ील्ड-लेवल कंपैनियन है।
अनुरोध बॉडी फ़ील्ड्स
टेबल उन फ़ील्ड्स की सूची बनाती है जिनका एंडपॉइंट समझता है। सैम्पलिंग फ़ील्ड्स जनरेशन के लिए बिना बदलाव पारित किए जाते हैं, इसलिए आप जो मान चुनते हैं वे किसी भी चैट-पूर्णता-शैली API में की तरह व्यवहार करते हैं।
| फ़ील्ड | प्रकार | नोट्स |
|---|---|---|
model | स्ट्रिंग | हमेशा "uncensored"। |
messages | एरे | role (system, user, assistant, tool) और content वाले ऑर्डर्ड ऑब्जेक्ट्स। |
max_tokens | पूर्णांक | पूर्णता कैप। डिफ़ॉल्ट 2048, अधिकतम 32,000। |
temperature | संख्या | यादृच्छिकता। कम अधिक निर्धारक है। |
top_p | संख्या | न्यूक्लियस सैम्पलिंग कटऑफ। |
stop | स्ट्रिंग या एरे | जनरेशन समाप्त करने वाले अनुक्रम। |
stream | बूलियन | true से प्रतिक्रिया को सर्वर-सेंट इवेंट्स पर स्विच किया जाता है। |
tools | array | मानक JSON-स्कीमा प्रारूप में फ़ंक्शन परिभाषाएँ। |
यहाँ एक पूर्ण एनोटेटेड रिक्वेस्ट है। सिस्टम मैसेज व्यवहार सेट करता है, यूजर मैसेज टास्क ले जाता है, और stop पहले खाली लाइन पर जनरेशन समाप्त करता है।
curl https://api.uncensoredapis.com/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You are a terse release-notes writer."},
{"role": "user", "content": "Summarize: fixed login bug, added dark mode."}
],
"max_tokens": 120,
"temperature": 0.4,
"stop": ["\n\n"]
}'दो बजट नियम महत्वपूर्ण हैं। पहला, प्रॉम्प्ट और कम्प्लीशन को 100,000 टोकन में फिट होना चाहिए, इसलिए एक अनुरोध जिसके प्रॉम्प्ट टोकन plus max_tokens उस सीमा से अधिक हैं, उसे 400 के साथ अस्वीकार कर दिया जाता है। दूसरा, serialized बॉडी 8 MB से अधिक नहीं हो सकती। यदि आप लंबी इतिहास भेजते हैं, तो अपनी ओर से पुराने टर्न्स को काट दें जब वे किसी भी सीमा के करीब पहुंचें।
प्रतिक्रिया ऑब्जेक्ट
एक नॉन-स्ट्रीमिंग कॉल एक JSON ऑब्जेक्ट लौटाता है। इसे ऊपर से नीचे तक पढ़ें।
{
"id": "chatcmpl-example123",
"object": "chat.completion",
"created": 1767225600,
"model": "uncensored",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "v1.4: Login bug fixed. Dark mode added."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 38,
"completion_tokens": 14,
"total_tokens": 52
}
}- id: कंप्लीशन के लिए एक अद्वितीय पहचानकर्ता। जब आपको इवेंट्स को सहसंबंधित करने की आवश्यकता हो तो इसे अपने अनुरोध id के बगल में लॉग करें।
- object: स्थिर
chat.completion। - created: सेकंड में यूनिक्स टाइमस्टैम्प।
- model:
uncensoredको echo करता है। - choices: एक array। आपको एक entry मिलती है, इसलिए
choices[0]उत्तर है।indexइसकी स्थिति है। - choices[].message:
roleassistantहै;contentटेक्स्ट रखता है, या मॉडल ने टूल कॉल्स लौटाए तोnullहोता है। - choices[].finish_reason: जनरेशन क्यों रुका, अगले सेक्शन में देखें।
- usage: बिलिंग के लिए टोकन अकाउंटिंग, नीचे कवर किया गया है।
finish_reason मान
कंटेंट पर भरोसा करने से पहले finish_reason पर ब्रांच करें। एक ट्रंकेटेड उत्तर और एक पूर्ण उत्तर तब तक एक जैसे दिखते हैं जब तक आप इसे चेक न करें।
| मान | अर्थ | आपके कोड को क्या करना चाहिए |
|---|---|---|
stop | मॉडल ने एक प्राकृतिक अंत तक पहुँच लिया या आपके stop सीक्वेंस में से किसी एक पर हिट किया। | सामग्री को उसी तरह उपयोग करें। |
length | max_tokens कैप (या कॉन्टेक्स्ट विंडो) उत्तर के बीच में पहुँच गया। | max_tokens को बढ़ाएं, प्रॉम्प्ट को छोटा करें, या मॉडल से जारी रखने के लिए कहें। |
tool_calls | मॉडल एक या अधिक फ़ंक्शन्स चलाना चाहता है। | उन्हें निष्पादित करें और परिणामों को tool संदेशों के रूप में वापस भेजें। |
जब वैल्यू tool_calls है, तो मैसेज इस तरह दिखता है, जिसमें आर्गुमेंट्स एक JSON string के रूप में डिलीवर किए जाते हैं जिसे आपको खुद पार्स करना होता है:
{
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_abc1",
"type": "function",
"function": {"name": "get_order", "arguments": "{\"order_id\": 8841}"}
}]
},
"finish_reason": "tool_calls"
}]
}json.loads या JSON.parse को arguments पर एरर हैंडलिंग में हमेशा लपेटें, क्योंकि जनरेटेड JSON कभी-कभी खराब हो सकता है।
यूसेज ब्लॉक और इसकी लागत
usage prompt_tokens, completion_tokens और total_tokens रिपोर्ट करता है। ये वे नंबर हैं जिनके खिलाफ आपका बैलेंस चार्ज होता है: इनपुट $0.25 प्रति मिलियन टोकन और आउटपुट $1.00 प्रति मिलियन। प्रीपेड बैलेंस रिक्वेस्ट के आधार पर कटता है, कोई सब्सक्रिप्शन नहीं।
निर्दिष्ट मान्यताओं के तहत एक वर्कड उदाहरण: मान लीजिए एक रिक्वेस्ट में 2,000 प्रॉम्प्ट टोकन और 500 कंप्लीशन टोकन हैं। इनपुट लागत 2,000 / 1,000,000 x $0.25 = $0.0005। आउटपुट लागत 500 / 1,000,000 x $1.00 = $0.0005। रिक्वेस्ट की कुल लागत $0.0010 है। ये टोकन काउंट्स अंकगणित के लिए मान्यताएँ हैं, किसी भी रियल वर्कलोड का माप नहीं। pricing page पर सभी रेट्स एक जगह हैं।
चूँकि आउटपुट टोकन इनपुट टोकन से चार गुना महंगे हैं, एक टाइट max_tokens आपका सबसे सीधा कॉस्ट कंट्रोल है।
स्ट्रीमिंग चंक प्रारूप
"stream": true सेट करें और प्रतिक्रिया text/event-stream बन जाती है। प्रत्येक इवेंट एक पंक्ति से शुरू होती है data: के साथ JSON के बाद, एक खाली पंक्ति द्वारा अलग की गई। ऑब्जेक्ट प्रकार chat.completion.chunk में बदल जाता है और message को delta से बदल दिया जाता है।
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"v1.4: "},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Login bug fixed."},"finish_reason":null}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-example123","object":"chat.completion.chunk","choices":[],"usage":{"prompt_tokens":38,"completion_tokens":14,"total_tokens":52}}
data: [DONE]- पहला चंक आमतौर पर
delta.roleकोassistantके साथ खाली सामग्री के साथ सेट करता है। - सामग्री चंक
delta.contentमें एक खंड वहन करते हैं। उन्हें आगमन क्रम में संयोजित करें। - समापन सामग्री चंक में एक खाली
deltaऔर एक गैर-शून्यfinish_reasonहोता है। - एक अंतिम चंक जिसमें खाली
choicesarray है,usagecontains करता है। आप इसकी मांग नहीं करते; यह स्वचालित रूप से जोड़ा जाता है। - लिटरल
data: [DONE]स्ट्रीम को समाप्त करता है।
उस खाली choices array के खिलाफ सावधान रहें: यूसेज चंक पर choices[0] इंडेक्सिंग एक साधारण लूप में त्रुटि पैदा करती है। नीचे दिया गया SDK उदाहरण इसे संभालता है।
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.uncensoredapis.com/v1", api_key=os.environ["API_KEY"])
reason, usage = None, None
for chunk in client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Name three uses of a rubber duck in debugging."}],
stream=True,
):
if chunk.choices:
piece = chunk.choices[0].delta.content
if piece:
print(piece, end="", flush=True)
if chunk.choices[0].finish_reason:
reason = chunk.choices[0].finish_reason
if getattr(chunk, "usage", None):
usage = chunk.usage
print("\nfinish:", reason, "| tokens:", usage.total_tokens if usage else "n/a")स्ट्रीम किए गए टूल कॉल्स के लिए, delta.tool_calls टुकड़ों में आता है; प्रत्येक कॉल इंडेक्स के लिए arguments स्ट्रिंग को एक्क्यूम्युलेट करें और finish_reason tool_calls होने पर एक बार पार्स करें।
मॉडल्स एंडपॉइंट
GET /v1/models केवल Bearer हेडर की आवश्यकता है और एक सूची ऑब्जेक्ट लौटाता है। चूंकि एक ही मॉडल है, data एक एंट्री, uncensored, रखता है। इस मार्ग से एक मॉडल ड्रॉपडाउन भरे क्लाइंट इसलिए एकल विकल्प दिखाएंगे।
curl https://api.uncensoredapis.com/v1/models -H "Authorization: Bearer $API_KEY"
{
"object": "list",
"data": [
{"id": "uncensored", "object": "model"}
]
}यह एक कुंजी की सत्यापन का सबसे सस्ता तरीका भी है: एक 200 का मतलब है कि कुंजी मान्य है, एक 401 का मतलब है कि यह गलत है या पुनः जनरेट की गई है। इस मार्ग को कॉल करने से टोकन जनरेट नहीं होते हैं। स्थिति हैंडलिंग और रीट्राइल नियमों के लिए, errors and rate limits playbook देखें।
क्लाइंट लेखकों के लिए संदर्भ चेकलिस्ट
यदि आप एक क्लाइंट लाइब्रेरी लिख रहे हैं या एंडपॉइंट को एक गेटवे में लपेट रहे हैं, तो शिप करने से पहले ऊपर दिए गए विनिर्देश के खिलाफ इन व्यवहारों की जांच करें।
- हेडर स्वच्छता। कुंजी को केवल Authorization हेडर में भेजें, क्वेरी स्ट्रिंग में कभी नहीं, और हेडर मान को कभी लॉग नहीं करें।
- सावधानीपूर्वक parse करें। प्रतिक्रियाओं में अज्ञात अतिरिक्त फ़ील्ड्स को नजरअंदाज करने योग्य मानें। अपने parser को यहाँ दस्तावेज़ित फ़ील्ड्स से बांधें, न कि सटीक JSON कुंजी क्रम से।
- हर उत्तर पर finish_reason जांचें। जब यह
lengthके बराबर हो, तो एक दृश्यमान संकेतक दिखाएं, क्योंकि अन्यथा उपयोगकर्ता कट-ऑफ टेक्स्ट को पूर्ण उत्तर के रूप में पढ़ते हैं। - भेजने से पहले बजट। प्रॉम्प्ट टोकन का अनुमान लगाएं, अपने
max_tokensजोड़ें, और योग की तुलना 100,000 से करें। स्थानीय रूप से अस्वीकार करना 400 का इंतजार करने से तेज़ है। - स्ट्रीम के अंत को संभालें। एक खाली
choicesसूची और एकusageऑब्जेक्ट वाले चंक की उम्मीद करें, फिर[DONE]। सेन्टिनल के बाद कनेक्शन बंद करें। - यूसेज रिकॉर्ड करें। प्रत्येक अनुरोध के लिए
total_tokensस्टोर करें ताकि आप बाद में अपने मीटरिंग को प्रीपेड बैलेंस के साथ मिला सकें। - छत का सम्मान करें। खाता प्रति कुंजी प्रति मिनट 300 अनुरोध की अनुमति देता है, इसलिए एक गेटवे जो कई उपयोगकर्ताओं को फैलाता है, उसे अपनी कतार की आवश्यकता होगी।
इनमें से कोई भी चरण किसी वेंडर SDK पर निर्भर नहीं करता है। एक साधारण HTTP क्लाइंट जो Bearer हेडर सेट करता है और JSON डिकोड करता है, पर्याप्त है, और इस पेज पर SDK उदाहरण सुविधा हैं, आवश्यकता नहीं। इस चेकलिस्ट को प्लेबुक में त्रुटि तालिका के साथ जोड़ें और आप पूरे अनुरोध जीवनचक्र को कवर करते हैं: बनाएं, भेजें, स्ट्रीम करें, पार्स करें, खाता और पुनर्प्राप्त करें।
प्रश्न और उत्तर
क्या मुझे प्रति अनुरोध एक से अधिक विकल्प मिल सकते हैं?
choices में एक ही प्रविधि की अपेक्षा करें और choices[0] पढ़ें। यदि आप वैकल्पिक चाहते हैं, तो अलग-अलग अनुरोध जारी करें।
message.content null क्यों है?
मॉडल ने पाठ के बजाय tool_calls लौटाया। finish_reason जांचें, फ़ंक्शन्स चलाएं और परिणाम वापस भेजें।
यदि prompt plus max_tokens 100,000 से अधिक हो जाता है तो क्या होता है?
अनुरोध 400 Bad Request त्रुटि के साथ अस्वीकार कर दिया जाता है। प्रॉम्प्ट को कम करें या max_tokens कम करें।
क्या स्ट्रीमिंग कीमत बदलती है?
नहीं। बिलिंग समान प्रॉम्प्ट और पूर्णता टोकन गणना का उपयोग करती है, और अंतिम यूसेज चंक उन्हें रिपोर्ट करता है।
आपकी कुंजी बस एक फ़ॉर्म दूर है
एक खाता बनाएं, कुंजी कॉपी करें, बेस URL बदलें। यही सेटअप है।