Tài liệu tham chiếu API

unbleep nói ngôn ngữ của OpenAI Chat Completions API. Nếu bạn đã từng gọi OpenAI, bạn đã biết API này — trỏ client của bạn tới https://unbleep.ai/v1 và đổi khóa.

Bắt đầu nhanh

Cài OpenAI SDK, đặt base URL và khóa của bạn, rồi thực hiện một lời gọi.

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)

Xác thực

Mọi yêu cầu cần một Bearer token trong header Authorization. Khóa mang tiền tố để các công cụ quét bí mật nhận ra ngay khi bị rò rỉ:

header
Authorization: Bearer ub_live_9f2c…

Giữ khóa ở phía máy chủ. Không bao giờ đưa khóa live vào mã chạy trên trình duyệt hay ứng dụng di động.

Mô hình

Truyền một trong các ID này làm model. Bí danh không có ngày luôn trỏ tới bản dựng mới nhất; các ID snapshot có ngày cũng được chấp nhận và hiện phân giải về cùng bản dựng đó. Dù bạn gửi dạng nào, phản hồi luôn báo ID không có ngày — yêu cầu unbleep-250811 trả về "model": "unbleep".

Mô hìnhBí danh trỏ tớiNgữ cảnhPhù hợp nhất cho
unbleepunbleep-250811256KSử dụng chung — lựa chọn mặc định
unbleep-highunbleep-high-2508111MTác vụ lớn nhất — tài liệu dài & toàn bộ codebase
unbleep-miniunbleep-mini-25081132KLời gọi rẻ, nhanh, khối lượng lớn

Chat completions

POST /v1/chat/completions — endpoint cốt lõi. Phần thân yêu cầu và phản hồi khớp với schema của OpenAI.

curl · yêu cầu
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 · phản hồi
{
  "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 }
}

Streaming

Đặt "stream": true để nhận Server-Sent Events. Mỗi sự kiện là một chat.completion.chunk với một delta; luồng kết thúc bằng chuỗi nguyên văn data: [DONE].

luồng sự kiện
data: {"choices":[{"delta":{"content":"Ab"}}]}
data: {"choices":[{"delta":{"content":"literation"}}]}
data: {"choices":[{"delta":{},"finish_reason":"stop"}]}
data: [DONE]

Suy luận (reasoning)

Các mô hình suy luận sẽ nghĩ trước khi trả lời. Dấu vết suy luận trả về dưới dạng reasoning_content bên cạnh content thông thường — trên message với lời gọi bình thường, và trên delta khi streaming. Trường này chỉ xuất hiện khi mô hình thực sự tạo ra dấu vết, nên hãy coi nó là tùy chọn và đọc content để lấy câu trả lời.

json · đoạn phản hồi
{
  "index": 0,
  "message": {
    "role": "assistant",
    "reasoning_content": "The question asks for one line, so…",
    "content": "…"
  },
  "finish_reason": "stop"
}

Token suy luận được tính phí. Dấu vết là đầu ra được sinh ra và được tính theo mức giá đầu ra thông thường của mô hình, dù mã của bạn có đọc trường đó hay không. Một chuỗi suy luận dài cho một câu hỏi ngắn là một dòng thật trên hóa đơn của bạn.

Gửi "thinking": false để tắt suy luận, để ngân sách completion dồn cho câu trả lời thay vì dấu vết:

json · đoạn yêu cầu
{
  "model": "unbleep",
  "messages": […],
  "thinking": false
}

Núm chính sách

Điểm khác biệt của unbleep. Tham số tùy chọn policy đặt mức quản trị áp dụng lên một yêu cầu. Mặc định là off.

json · đoạn yêu cầu
{
  "model": "unbleep",
  "messages": […],
  "policy": "research"
}

Lỗi

Lỗi dùng envelope của OpenAI, nên mã xử lý lỗi hiện có hoạt động không cần thay đổi.

json · 401
{
  "error": {
    "type": "invalid_request_error",
    "code": "invalid_api_key",
    "message": "Incorrect API key provided."
  }
}
Mã trạng tháiÝ nghĩa
401Thiếu khóa hoặc khóa không hợp lệ
402Hết tín dụng — nạp thêm để tiếp tục
422Bị chặn bởi policy: strict
429Vượt giới hạn tần suất — lùi lại rồi thử lại
5xxLỗi upstream — có thể thử lại an toàn với backoff

Giới hạn tần suất

Hai giới hạn độc lập được áp dụng, đều theo tài khoản: tần suất yêu cầu và mức trần đồng thời.

Tần suất yêu cầu

60 yêu cầu mỗi phút cho mỗi tài khoản, đo trên cửa sổ trượt 60 giây. Giới hạn nằm ở tài khoản, không phải ở khóa — tạo thêm khóa không mua thêm thông lượng, và mọi khóa bạn sở hữu đều dùng chung 60 lượt đó. Khóa test có mức trần theo khóa thấp hơn là 15 yêu cầu mỗi phút; nó vẫn được tính vào cùng cửa sổ của tài khoản.

Mọi phản hồi đều mang các header tiêu chuẩn để bạn điều tiết yêu cầu mà không phải đoán. Chúng báo cáo cửa sổ nào đang gần chặn bạn nhất:

header phản hồi
x-ratelimit-limit-requests: 60
x-ratelimit-remaining-requests: 58
x-ratelimit-reset-requests: 43

x-ratelimit-reset-requests là một số nguyên trần — số giây nguyên cho tới khi cửa sổ giải phóng một chỗ, không có hậu tố đơn vị. Phân tích nó như một con số, không phải chuỗi thời lượng.

Đồng thời

Tối đa 8 yêu cầu đang xử lý cùng lúc cho mỗi tài khoản. Yêu cầu đồng thời thứ chín bị từ chối ngay lập tức với 429 và mã too_many_concurrent_requests; phản hồi mang retry-after: 1. Yêu cầu bị từ chối không bị tính phí. Một lời gọi streaming giữ chỗ của nó cho tới khi luồng kết thúc, nên các luồng dài thường là thứ đẩy bạn chạm trần.

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

Cả hai mức trần đều cố định cho tài khoản tiêu chuẩn — chúng không tăng theo số dư trả trước của bạn. Cần thêm dư địa? Enterprise nâng chúng lên.