MớiTrỏ bất kỳ agent nào về UberLLM — một key, mọi model, bằng giá niêm yết hoặc rẻ hơn.
UberLLM

Responses API

POST https://api.uberllm.dev/v1/responses cung cấp Responses API của OpenAI trên mọi chat model trong danh mục. Sử dụng nó từ OpenAI SDK (client.responses.create), Codex CLI, hoặc bất kỳ ứng dụng nào có chế độ "Responses". Các yêu cầu được xử lý qua cùng một quy trình routing, retries, key limits và billing như /v1/chat/completions, và mỗi cuộc gọi được liệt kê trong Dashboard → Activity cùng với chi phí của nó.

curl https://api.uberllm.dev/v1/responses \
  -H "Authorization: Bearer $UBERLLM_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek/deepseek-v4.1-flash",
    "instructions": "Answer in one short sentence.",
    "input": "What is the capital of France?"
  }'
from openai import OpenAI

client = OpenAI(base_url="https://api.uberllm.dev/v1", api_key="ull_...")
r = client.responses.create(model="deepseek/deepseek-v4.1-flash", input="Say hi")
print(r.output_text)

Không lưu trữ trạng thái

UberLLM không lưu trữ các phản hồi để bạn tiếp tục từ đó sau này. Mỗi phản hồi có "store": false, và bạn gửi toàn bộ cuộc hội thoại trong input ở mỗi lần gọi: các tin nhắn người dùng trước đó, các mục đầu ra của mô hình, và kết quả công cụ của bạn. Codex CLI đã hoạt động theo cách này.

Những điều này sẽ bị từ chối với một 400 (code: unsupported_parameter) nêu tên trường:

  • previous_response_id và conversation
  • background: true
  • các mục đầu vào thuộc loại item_reference
  • các mẫu prompt đã lưu trữ (prompt)

GET /v1/responses/{id} và các tuyến phản hồi đã lưu trữ khác không tồn tại.

Yêu cầu

Trường Điều gì xảy ra
model Bất kỳ ID mô hình trò chuyện, biệt danh hoặc hậu tố :floor / :nitro nào, như trong các lần hoàn thành trò chuyện.
input Một chuỗi, hoặc một danh sách các mục (xem bên dưới).
instructions Được gửi đến mô hình dưới dạng tin nhắn hệ thống.
stream true cho các sự kiện do máy chủ gửi.
max_output_tokens Giới hạn đầu ra.
temperature, top_p, seed, stop Được chuyển đến mô hình.
tools, tool_choice, parallel_tool_calls Xem Công cụ bên dưới.
reasoning.effort Được chuyển tiếp dưới dạng nỗ lực suy luận của mô hình (các mô hình có khả năng tư duy).
text.format text, json_object, hoặc json_schema (đầu ra có cấu trúc).
metadata Các thẻ của riêng bạn, hiển thị trên hàng Hoạt động, như trong các lần hoàn thành trò chuyện.
provider, models Các tùy chọn định tuyến của UberLLM, như trong các lần hoàn thành trò chuyện (Mô hình & định tuyến).
store, include, prompt_cache_key, service_tier, truncation Được chấp nhận và không sử dụng. Suy luận được mã hóa luôn được trả về.

Các mục đầu vào

Mục Trở thành
message với vai trò user, assistant, system hoặc developer Một tin nhắn trò chuyện. developer được gửi dưới dạng system. Các phần nội dung input_text, output_text, input_image (image_url: một URL https hoặc data:) và input_file (file_data hoặc file_url).
function_call Lời gọi công cụ của trợ lý, được giữ theo thứ tự.
function_call_output Kết quả của công cụ. Hình ảnh trong đầu ra được gửi trong lượt người dùng tiếp theo.
custom_tool_call, custom_tool_call_output Một lời gọi đến một công cụ tùy chỉnh (dạng tự do), và kết quả của nó.
reasoning Suy luận trước đó của mô hình, được trả lại cho mô hình trong lượt tiếp theo.
web_search_call và các bản ghi công cụ được lưu trữ khác Bỏ qua.

Các mục id được chấp nhận và bỏ qua. file_id (các tệp đã tải lên) không được hỗ trợ trong input_image / input_file: hãy gửi tệp nội tuyến hoặc bằng URL.

Công cụ

  • function: {"type": "function", "name", "description", "parameters", "strict"}. Lời gọi của mô hình trả về dưới dạng một mục function_call với call_id, name và arguments (một chuỗi JSON). Trả lời bằng một mục function_call_output mang cùng call_id.
  • custom (đầu vào tự do, ví dụ như apply_patch của Codex): mô hình được cung cấp công cụ với một đầu vào chuỗi, và ngữ pháp trong format.definition làm mô tả của nó. Lời gọi trả về dưới dạng một mục custom_tool_call với input thô.
  • namespace (công cụ MCP của Codex): mỗi công cụ bên trong được cung cấp cho mô hình dưới dạng namespace và tên của nó được nối lại (mcp__github__get_issue); lời gọi trả về với name và namespace được tách ra lại.
  • Công cụ được lưu trữ (web_search, file_search, code_interpreter, image_generation, computer_use, mcp) chạy trên máy chủ của OpenAI. Chúng bị loại bỏ khỏi yêu cầu và mô hình trả lời mà không cần chúng.

tool_choice chấp nhận "auto", "none", "required", hoặc {"type": "function", "name": "…"}.

Phản hồi

{
  "id": "resp_…",
  "object": "response",
  "created_at": 1793333237,
  "status": "completed",
  "model": "deepseek/deepseek-v4.1-flash",
  "output": [
    {"type": "reasoning", "id": "rs_…", "summary": [],
     "content": [{"type": "reasoning_text", "text": "…"}], "encrypted_content": "ull1:…"},
    {"type": "message", "id": "msg_…", "status": "completed", "role": "assistant",
     "content": [{"type": "output_text", "text": "Paris.", "annotations": []}]},
    {"type": "function_call", "id": "fc_…", "status": "completed",
     "call_id": "call_…", "name": "get_weather", "arguments": "{\"city\":\"Paris\"}"}
  ],
  "usage": {
    "input_tokens": 43, "input_tokens_details": {"cached_tokens": 0},
    "output_tokens": 23, "output_tokens_details": {"reasoning_tokens": 0},
    "total_tokens": 66, "cost_usd": 0.0000184
  },
  "store": false
}
  • Một mục reasoning xuất hiện khi mô hình trả về lý do của nó. Hãy gửi lại nó trong input tiếp theo nguyên trạng: encrypted_content mang theo lý do để các mô hình cần nó trong lượt tiếp theo có thể nhận được.
  • status là incomplete khi câu trả lời chạm max_output_tokens (incomplete_details.reason: "max_output_tokens") hoặc bộ lọc nội dung ("content_filter").
  • usage.cost_usd là số tiền cuộc gọi đã được tính phí. Các phản hồi không streaming cũng mang nó trong header X-UberLLM-Cost-USD, và mỗi phản hồi đều có X-Request-Id, là ID của hàng Activity của nó.
  • Các cài đặt bạn đã gửi (instructions, tools, temperature, max_output_tokens…) được phản hồi lại giống như OpenAI làm.

Streaming

Với "stream": true, phản hồi là các sự kiện được gửi từ máy chủ, mỗi sự kiện có type và một sequence_number bắt đầu từ 0:

  1. response.created, response.in_progress
  2. Đối với mỗi mục đầu ra: response.output_item.added, sau đó là các delta của nó, rồi response.output_item.done với mục đã hoàn thành:
    • văn bản: response.content_part.added, response.output_text.delta…, response.output_text.done, response.content_part.done
    • lý luận: response.reasoning_text.delta…, response.reasoning_text.done
    • lời gọi hàm: response.function_call_arguments.delta…, response.function_call_arguments.done
    • lời gọi công cụ tùy chỉnh: response.custom_tool_call_input.done
  3. response.completed (hoặc response.incomplete) với toàn bộ phản hồi và usage của nó, bao gồm cost_usd.

Trong khi một mô hình chậm đang khởi động, : ping dòng bình luận giữ kết nối mở. Mọi máy khách SSE đều bỏ qua chúng.

Lỗi

Một yêu cầu bị từ chối trước khi luồng (stream) bắt đầu sẽ nhận được trạng thái HTTP và gói lỗi của OpenAI, tương tự như các hoàn thành trò chuyện (chat completions) (401, 402 hết tín dụng, 404 mô hình không xác định, 429; xem Errors). Nếu có lỗi xảy ra sau khi luồng (stream) đã bắt đầu, nó kết thúc bằng response.failed, mà response.error của nó có code và message. Một luồng (stream) dừng lại trước khi mô hình hoàn tất cũng kết thúc bằng response.failed, không bao giờ bằng response.completed, để các client thử lại thay vì giữ một nửa câu trả lời.