مرجع API

unbleep با OpenAI Chat Completions API صحبت می‌کند. اگر قبلاً OpenAI را فراخوانی کرده‌اید، این API را از قبل بلدید — کلاینت خود را به 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 نیاز دارد. کلیدها پیشوند دارند تا نشت آن‌ها برای اسکنرهای secret آشکار باشد:

هدر
Authorization: Bearer ub_live_9f2c…

کلیدها را سمت سرور نگه دارید. هرگز کلید live را در کد مرورگر یا موبایل منتشر نکنید.

مدل‌ها

یکی از این شناسه‌ها را به‌عنوان model بفرستید. نام مستعار ساده همیشه به آخرین build اشاره می‌کند؛ شناسه‌های snapshot تاریخ‌دار هم پذیرفته می‌شوند و در حال حاضر به همان build می‌رسند. هر شکلی که بفرستید، پاسخ شناسهٔ ساده را گزارش می‌کند — درخواست برای unbleep-250811 به‌صورت "model": "unbleep" برمی‌گردد.

مدلنام مستعار اشاره می‌کند بهکانتکستمناسب برای
unbleepunbleep-250811256Kاستفادهٔ عمومی — پیش‌فرض
unbleep-highunbleep-high-2508111Mبزرگ‌ترین کارها — اسناد طولانی & کل کدبیس‌ها
unbleep-miniunbleep-mini-25081132Kفراخوانی‌های ارزان، سریع و پرحجم

Chat Completions

POST /v1/chat/completions — endpoint اصلی. بدنهٔ درخواست و پاسخ با اسکیمای 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"
}

خطاها

خطاها از پوشش (envelope) خطای OpenAI استفاده می‌کنند، پس مدیریت خطای فعلی شما بدون تغییر کار می‌کند.

json · 401
{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_api_key",
    "message": "Incorrect API key provided."
  }
}
وضعیتمعنا
401کلید وجود ندارد یا نامعتبر است
402اعتبار تمام شده — برای ادامه شارژ کنید
422مسدودشده توسط policy: strict
429محدودیت نرخ — کمی صبر کنید و دوباره تلاش کنید
5xxخطای بالادستی — تلاش مجدد با backoff امن است

محدودیت نرخ

دو محدودیت مستقل، هر دو به‌ازای هر حساب، اعمال می‌شوند: نرخ درخواست و سقف هم‌زمانی.

نرخ درخواست

60 درخواست در دقیقه به‌ازای هر حساب، اندازه‌گیری‌شده در یک پنجرهٔ لغزان 60 ثانیه‌ای. محدودیت روی حساب است، نه کلید — ساختن کلیدهای اضافه توان عملیاتی بیشتری به شما نمی‌دهد و همهٔ کلیدهای شما از همان 60 تا استفاده می‌کنند. کلید test سقف پایین‌تری به‌ازای هر کلید دارد، 15 درخواست در دقیقه؛ اما همچنان در همان پنجرهٔ حساب شمرده می‌شود.

هر پاسخ هدرهای استاندارد را دارد تا بتوانید بدون حدس زدن، درخواست‌ها را زمان‌بندی کنید. این هدرها هر پنجره‌ای را که به متوقف کردن شما نزدیک‌تر است گزارش می‌کنند:

هدرهای پاسخ
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 43

x-ratelimit-reset-requests یک عدد صحیح ساده است — ثانیه‌های کامل تا وقتی پنجره یک جای خالی آزاد کند، بدون پسوند واحد. آن را به‌عنوان عدد parse کنید، نه رشتهٔ مدت‌زمان.

هم‌زمانی

حداکثر 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 آن‌ها را بالا می‌برد.