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_idvàconversationbackground: 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ụcfunction_callvớicall_id,namevàarguments(một chuỗi JSON). Trả lời bằng một mụcfunction_call_outputmang cùngcall_id.custom(đầu vào tự do, ví dụ nhưapply_patchcủ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 trongformat.definitionlàm mô tả của nó. Lời gọi trả về dưới dạng một mụccustom_tool_callvớiinputthô.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ớinamevà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
reasoningxuất hiện khi mô hình trả về lý do của nó. Hãy gửi lại nó tronginputtiếp theo nguyên trạng:encrypted_contentmang theo lý do để các mô hình cần nó trong lượt tiếp theo có thể nhận được. statuslàincompletekhi câu trả lời chạmmax_output_tokens(incomplete_details.reason: "max_output_tokens") hoặc bộ lọc nội dung ("content_filter").usage.cost_usdlà 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 headerX-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:
response.created,response.in_progress- Đối với mỗi mục đầu ra:
response.output_item.added, sau đó là các delta của nó, rồiresponse.output_item.donevớ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
- văn bản:
response.completed(hoặcresponse.incomplete) với toàn bộ phản hồi vàusagecủa nó, bao gồmcost_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.