BaruArahkan agen apa pun ke UberLLM — satu key, semua model, harga resmi atau lebih murah.
UberLLM

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_id dan conversation
  • background: 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 item function_call dengan call_id, name, dan arguments (string JSON). Jawab dengan item function_call_output dengan call_id yang sama.
  • custom (input bebas, seperti apply_patch milik Codex): model diberikan alat tersebut dengan satu input string, dan tata bahasa di format.definition sebagai deskripsinya. Panggilan kembali sebagai item custom_tool_call dengan input mentah.
  • 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 dengan name dan namespace dipisah 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 reasoning muncul saat model mengembalikan penalarannya. Kirimkan kembali di input berikutnya apa adanya: encrypted_content membawa penalaran agar model yang membutuhkannya pada giliran berikutnya mendapatkannya.
  • status adalah incomplete saat jawaban mencapai max_output_tokens (incomplete_details.reason: "max_output_tokens") atau filter konten ("content_filter").
  • usage.cost_usd adalah apa yang ditagihkan untuk panggilan tersebut. Balasan non-streaming juga membawanya di header X-UberLLM-Cost-USD, dan setiap balasan memiliki X-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:

  1. response.created, response.in_progress
  2. Untuk setiap item keluaran: response.output_item.added, lalu delta-nya, lalu response.output_item.done dengan 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
  3. response.completed (atau response.incomplete) dengan seluruh respons dan usage-nya, termasuk cost_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.