مرجع API

يتحدث unbleep بواجهة OpenAI Chat Completions API. إن كنت قد استدعيت OpenAI من قبل فأنت تعرف هذه الواجهة بالفعل — وجّه عميلك إلى https://unbleep.ai/v1 وغيّر المفتاح.

البداية السريعة

ثبّت حزمة OpenAI SDK، واضبط عنوان الأساس ومفتاحك، ثم نفّذ استدعاءً.

python
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. تحمل المفاتيح بادئة حتى يكون تسريبها واضحًا لماسحات الأسرار:

الترويسة
Authorization: Bearer ub_live_9f2c…

أبقِ المفاتيح على جانب الخادم. لا تضع مفتاحًا فعليًا أبدًا في شيفرة المتصفح أو الجوال.

النماذج

مرّر أحد هذه المعرّفات في model. الاسم المستعار المجرد يشير دائمًا إلى أحدث بناء؛ ومعرّفات اللقطات المؤرَّخة مقبولة أيضًا وتُحلّ حاليًا إلى البناء نفسه. وأيًا كانت الصيغة التي ترسلها، تُبلّغ الاستجابة عن المعرّف المجرد — فطلبٌ لـ unbleep-250811 يعود على هيئة "model": "unbleep".

النموذجالاسم المستعار يشير إلىالسياقالأنسب لـ
unbleepunbleep-250811256Kالاستخدام العام — الخيار الافتراضي
unbleep-highunbleep-high-2508111Mأكبر المهام — المستندات الطويلة & قواعد الشيفرة الكاملة
unbleep-miniunbleep-mini-25081132Kاستدعاءات رخيصة وسريعة وعالية الحجم

إكمالات المحادثة

POST /v1/chat/completions — نقطة النهاية الأساسية. تطابق أجسام الطلب والاستجابة مخطط OpenAI.

curl · الطلب
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
  }'
json · الاستجابة
{
  "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 للحصول على الإجابة نفسها.

json · جزء من الاستجابة
{
  "index": 0,
  "message": {
    "role": "assistant",
    "reasoning_content": "The question asks for one line, so…",
    "content": "…"
  },
  "finish_reason": "stop"
}

توكنات التفكير تُحتسب. الأثر مخرجات مولَّدة ويُحتسب بسعر الإخراج المعتاد للنموذج، سواء قرأت شيفرتك الحقل أم لا. تفكير مطوّل في سؤال قصير هو بند حقيقي في فاتورتك.

أرسل "thinking": false لإيقاف التفكير، فتذهب ميزانية الإكمال إلى الإجابة بدلًا من الأثر:

json · جزء من الطلب
{
  "model": "unbleep",
  "messages": […],
  "thinking": false
}

إعداد السياسة

ما يميّز unbleep. المعامل الاختياري policy يحدد مقدار الحوكمة التي تُطبَّق على الطلب. قيمته الافتراضية off.

json · جزء من الطلب
{
  "model": "unbleep",
  "messages": […],
  "policy": "research"
}

الأخطاء

تستخدم الأخطاء غلاف OpenAI، فتعمل معالجة الأخطاء الحالية لديك دون تغيير.

json · 401
{
  "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. لا يُحتسب شيء على طلب مرفوض. يحتفظ استدعاء البث بفتحته حتى ينتهي البث، لذا فإن عمليات البث الطويلة هي ما يوصلك إلى السقف عادةً.

json · 429
{
  "error": {
    "type": "rate_limit_error",
    "code": "too_many_concurrent_requests",
    "message": "Too many concurrent requests for this account (limit 8)."
  }
}

كلا السقفين ثابت للحسابات القياسية — ولا يتوسّع مع رصيدك المدفوع مسبقًا. تحتاج إلى مساحة أكبر؟ خطة Enterprise ترفعهما.