مرجع API
يتحدث unbleep بواجهة OpenAI Chat Completions API. إن كنت قد استدعيت OpenAI من قبل فأنت تعرف هذه الواجهة بالفعل — وجّه عميلك إلى https://unbleep.ai/v1 وغيّر المفتاح.
البداية السريعة
ثبّت حزمة OpenAI SDK، واضبط عنوان الأساس ومفتاحك، ثم نفّذ استدعاءً.
from openai import OpenAI
client = OpenAI(
base_url="https://unbleep.ai/v1",
api_key="ub_live_9f2c…",
)
resp = client.chat.completions.create(
model="unbleep",
messages=[{"role": "user", "content": "Say hello."}],
)
print(resp.choices[0].message.content)
المصادقة
يحتاج كل طلب إلى رمز Bearer في ترويسة Authorization. تحمل المفاتيح بادئة حتى يكون تسريبها واضحًا لماسحات الأسرار:
ub_live_…— للإنتاج، يُحتسب من رصيدك المدفوع مسبقًا.ub_test_…— للتطوير المحلي. يُحتسب تمامًا مثل المفتاح الفعلي، بالسعر نفسه لكل توكن، ومن الرصيد المدفوع مسبقًا نفسه؛ الفرق الوحيد هو حد معدل أقل لكل مفتاح (انظر حدود المعدل). مفتاح الاختبار بيانات اعتماد منفصلة قابلة للإبطال — وليس فئة مجانية.
Authorization: Bearer ub_live_9f2c…
أبقِ المفاتيح على جانب الخادم. لا تضع مفتاحًا فعليًا أبدًا في شيفرة المتصفح أو الجوال.
النماذج
مرّر أحد هذه المعرّفات في model. الاسم المستعار المجرد يشير دائمًا إلى أحدث بناء؛ ومعرّفات اللقطات المؤرَّخة مقبولة أيضًا وتُحلّ حاليًا إلى البناء نفسه. وأيًا كانت الصيغة التي ترسلها، تُبلّغ الاستجابة عن المعرّف المجرد — فطلبٌ لـ unbleep-250811 يعود على هيئة "model": "unbleep".
| النموذج | الاسم المستعار يشير إلى | السياق | الأنسب لـ |
|---|---|---|---|
| unbleep | unbleep-250811 | 256K | الاستخدام العام — الخيار الافتراضي |
| unbleep-high | unbleep-high-250811 | 1M | أكبر المهام — المستندات الطويلة & قواعد الشيفرة الكاملة |
| unbleep-mini | unbleep-mini-250811 | 32K | استدعاءات رخيصة وسريعة وعالية الحجم |
إكمالات المحادثة
POST /v1/chat/completions — نقطة النهاية الأساسية. تطابق أجسام الطلب والاستجابة مخطط OpenAI.
curl https://unbleep.ai/v1/chat/completions \
-H "Authorization: Bearer ub_live_9f2c…" \
-H "Content-Type: application/json" \
-d '{
"model": "unbleep",
"messages": [
{"role": "system", "content": "You are terse."},
{"role": "user", "content": "Explain abliteration in one line."}
],
"temperature": 0.7,
"max_tokens": 256
}'
{
"id": "chatcmpl_a1b2c3",
"object": "chat.completion",
"model": "unbleep",
"choices": [{
"index": 0,
"message": { "role": "assistant", "content": "…" },
"finish_reason": "stop"
}],
"usage": { "prompt_tokens": 24, "completion_tokens": 18, "total_tokens": 42 }
}
البث
اضبط "stream": true لتلقي أحداث Server-Sent Events. كل حدث هو chat.completion.chunk يحمل delta؛ وينتهي البث بالقيمة الحرفية data: [DONE].
data: {"choices":[{"delta":{"content":"Ab"}}]}
data: {"choices":[{"delta":{"content":"literation"}}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
data: [DONE]
التفكير
نماذج التفكير تفكر قبل أن تجيب. يعود أثر التفكير في reasoning_content إلى جانب content المعتاد — داخل message في الاستدعاء العادي، وداخل delta أثناء البث. الحقل موجود فقط حين ينتج النموذج أثرًا فعلًا، فتعامل معه كحقل اختياري واقرأ content للحصول على الإجابة نفسها.
{
"index": 0,
"message": {
"role": "assistant",
"reasoning_content": "The question asks for one line, so…",
"content": "…"
},
"finish_reason": "stop"
}
توكنات التفكير تُحتسب. الأثر مخرجات مولَّدة ويُحتسب بسعر الإخراج المعتاد للنموذج، سواء قرأت شيفرتك الحقل أم لا. تفكير مطوّل في سؤال قصير هو بند حقيقي في فاتورتك.
أرسل "thinking": false لإيقاف التفكير، فتذهب ميزانية الإكمال إلى الإجابة بدلًا من الأثر:
{
"model": "unbleep",
"messages": […],
"thinking": false
}
إعداد السياسة
ما يميّز unbleep. المعامل الاختياري policy يحدد مقدار الحوكمة التي تُطبَّق على الطلب. قيمته الافتراضية off.
off— خط أساس غير مفلتر (الافتراضي). لا يُحقن أي رفض.research— يجيب تمامًا مثلoff. تُسجَّل القيمة في صف الاستخدام لأغراض تقاريرك الخاصة؛ ولا تطبّق أي فحص إضافي.strict— يفحص نص الرسالة مقابل قائمة حظر الخدمة ويعيد خطأ سياسة عند وجود تطابق. يتولى المشغّل صيانة قائمة الحظر وتنطبق على كل من يختار تفعيلها؛ ولا توجد قائمة حظر لكل حساب يمكن ضبطها.
{
"model": "unbleep",
"messages": […],
"policy": "research"
}
الأخطاء
تستخدم الأخطاء غلاف OpenAI، فتعمل معالجة الأخطاء الحالية لديك دون تغيير.
{
"error": {
"type": "invalid_request_error",
"code": "invalid_api_key",
"message": "Incorrect API key provided."
}
}
| الحالة | المعنى |
|---|---|
| 401 | مفتاح مفقود أو غير صالح |
| 402 | نفد الرصيد — اشحن للمتابعة |
| 422 | محظور بواسطة policy: strict |
| 429 | حد المعدل — تراجع ثم أعد المحاولة |
| 5xx | خطأ من المزوّد الخارجي — يمكن إعادة المحاولة بأمان مع تراجع تدريجي |
حدود المعدل
ينطبق حدّان مستقلان، كلاهما على مستوى الحساب: معدل الطلبات وسقف التزامن.
معدل الطلبات
60 طلبًا في الدقيقة لكل حساب، تُقاس على نافذة منزلقة مدتها 60 ثانية. الحد على الحساب لا على المفتاح — إنشاء مفاتيح إضافية لا يشتري إنتاجية إضافية، وكل مفتاح تملكه يسحب من حصة الـ 60 نفسها. يحمل مفتاح الاختبار سقفًا أقل لكل مفتاح قدره 15 طلبًا في الدقيقة؛ ويظل محسوبًا ضمن نافذة الحساب نفسها.
تحمل كل استجابة الترويسات القياسية حتى تضبط وتيرة طلباتك دون تخمين. وهي تبلّغ عن النافذة الأقرب إلى إيقافك أيًا كانت:
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 43
x-ratelimit-reset-requests عدد صحيح مجرد — ثوانٍ كاملة حتى تحرّر النافذة فتحة، دون لاحقة وحدة. حلّله كرقم، لا كسلسلة مدة.
التزامن
8 طلبات قيد التنفيذ في آن واحد كحد أقصى لكل حساب. الطلب المتزامن التاسع يُرفض فورًا بالحالة 429 والرمز too_many_concurrent_requests؛ وتحمل الاستجابة retry-after: 1. لا يُحتسب شيء على طلب مرفوض. يحتفظ استدعاء البث بفتحته حتى ينتهي البث، لذا فإن عمليات البث الطويلة هي ما يوصلك إلى السقف عادةً.
{
"error": {
"type": "rate_limit_error",
"code": "too_many_concurrent_requests",
"message": "Too many concurrent requests for this account (limit 8)."
}
}
كلا السقفين ثابت للحسابات القياسية — ولا يتوسّع مع رصيدك المدفوع مسبقًا. تحتاج إلى مساحة أكبر؟ خطة Enterprise ترفعهما.