Responses API
POST https://api.uberllm.dev/v1/responses menyediakan OpenAI's Responses API pada setiap model chat dalam katalog. Gunakan dari OpenAI SDK (client.responses.create), Codex CLI, atau aplikasi apa pun dengan mode "Responses". Permintaan melewati routing, retries, key limits, dan billing yang sama seperti /v1/chat/completions, dan setiap panggilan tercatat di Dashboard → Activity dengan biayanya.
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)
Tidak ada status tersimpan
UberLLM tidak menyimpan respons agar Anda dapat melanjutkannya nanti. Setiap balasan memiliki
"store": false, dan Anda mengirimkan seluruh percakapan dalam input pada setiap panggilan: pesan pengguna sebelumnya, item keluaran model, dan hasil alat Anda. Codex CLI sudah berfungsi dengan cara ini.
Ini ditolak dengan 400 (code: unsupported_parameter) yang menyebutkan bidangnya:
previous_response_iddanconversationbackground: true- input items bertipe
item_reference - stored prompt templates (
prompt)
GET /v1/responses/{id} dan rute respons tersimpan lainnya tidak ada.
Permintaan
| Kolom | Apa yang terjadi |
|---|---|
model |
ID model chat apa pun, alias, atau :floor / :nitro akhiran, seperti pada chat completions. |
input |
Sebuah string, atau daftar item (di bawah). |
instructions |
Dikirim ke model sebagai system message. |
stream |
true untuk server-sent events. |
max_output_tokens |
Batas output. |
temperature, top_p, seed, stop |
Diteruskan ke model. |
tools, tool_choice, parallel_tool_calls |
Lihat Tools di bawah. |
reasoning.effort |
Diteruskan sebagai upaya penalaran model (model yang berpikir). |
text.format |
text, json_object, atau json_schema (output terstruktur). |
metadata |
Tag Anda sendiri, ditampilkan di baris Aktivitas, seperti pada chat completions. |
provider, models |
Opsi routing UberLLM, seperti pada chat completions (Model & routing). |
store, include, prompt_cache_key, service_tier, truncation |
Diterima dan tidak digunakan. Penalaran terenkripsi selalu dikembalikan. |
Item input
| Item | Menjadi |
|---|---|
message dengan peran user, assistant, system atau developer |
Sebuah pesan chat. developer dikirim sebagai system. Bagian konten input_text, output_text, input_image (image_url: URL https atau data:) dan input_file (file_data atau file_url). |
function_call |
Panggilan tool asisten, dijaga urutannya. |
function_call_output |
Hasil tool. Gambar dalam output dikirim pada giliran pengguna berikutnya. |
custom_tool_call, custom_tool_call_output |
Panggilan ke tool kustom (bebas), dan hasilnya. |
reasoning |
Penalaran model sebelumnya, diberikan kembali ke model pada giliran berikutnya. |
web_search_call dan catatan hosted-tool lainnya |
Dilewati. |
Item id diterima dan diabaikan. file_id (file yang diunggah) tidak didukung di
input_image / input_file: kirim file secara inline atau melalui URL.
Alat
function:{"type": "function", "name", "description", "parameters", "strict"}. Panggilan model kembali sebagai itemfunction_calldengancall_id,name, danarguments(string JSON). Jawab dengan itemfunction_call_outputdengancall_idyang sama.custom(input bebas, sepertiapply_patchmilik Codex): model diberikan alat tersebut dengan satu input string, dan tata bahasa diformat.definitionsebagai deskripsinya. Panggilan kembali sebagai itemcustom_tool_calldenganinputmentah.namespace(alat MCP milik Codex): setiap alat di dalamnya ditawarkan kepada model di bawah namespace dan nama yang digabungkan (mcp__github__get_issue); panggilan kembali dengannamedannamespacedipisah lagi.- Alat yang dihosting (
web_search,file_search,code_interpreter,image_generation,computer_use,mcp) berjalan di server milik OpenAI sendiri. Mereka tidak disertakan dalam permintaan dan model menjawab tanpa mereka.
tool_choice menerima "auto", "none", "required", atau
{"type": "function", "name": "…"}.
Respons
{
"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
}
- Item
reasoningmuncul saat model mengembalikan penalarannya. Kirimkan kembali diinputberikutnya apa adanya:encrypted_contentmembawa penalaran agar model yang membutuhkannya pada giliran berikutnya mendapatkannya. statusadalahincompletesaat jawaban mencapaimax_output_tokens(incomplete_details.reason: "max_output_tokens") atau filter konten ("content_filter").usage.cost_usdadalah apa yang ditagihkan untuk panggilan tersebut. Balasan non-streaming juga membawanya di headerX-UberLLM-Cost-USD, dan setiap balasan memilikiX-Request-Id, ID baris Activity-nya.- Pengaturan yang Anda kirim (
instructions,tools,temperature,max_output_tokens…) dikembalikan seperti yang dilakukan OpenAI.
Streaming
Dengan "stream": true balasannya adalah server-sent events, masing-masing dengan type dan sequence_number dimulai pada 0:
response.created,response.in_progress- Untuk setiap item keluaran:
response.output_item.added, lalu delta-nya, laluresponse.output_item.donedengan item yang sudah selesai:- teks:
response.content_part.added,response.output_text.delta…,response.output_text.done,response.content_part.done - penalaran:
response.reasoning_text.delta…,response.reasoning_text.done - function call:
response.function_call_arguments.delta…,response.function_call_arguments.done - custom tool call:
response.custom_tool_call_input.done
- teks:
response.completed(atauresponse.incomplete) dengan seluruh respons danusage-nya, termasukcost_usd.
Saat model yang lambat sedang memulai, : ping baris komentar menjaga koneksi tetap terbuka. Setiap klien SSE melewatinya.
Kesalahan
Permintaan yang ditolak sebelum stream dimulai mendapatkan status HTTP dan error envelope OpenAI, sama seperti chat completions (401, 402 kehabisan kredit, 404 model tidak dikenal, 429; lihat Kesalahan). Jika ada yang gagal setelah stream dimulai, itu berakhir dengan response.failed, yang response.error-nya memiliki code dan message. Stream yang berhenti sebelum model selesai juga berakhir dengan response.failed, tidak pernah dengan response.completed, sehingga klien mencoba lagi alih-alih menyimpan setengah jawaban.