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

OpenAI SDK

UberLLM mengimplementasikan OpenAI Chat Completions API. Kode apa pun yang menggunakan SDK resmi openai (atau klien yang kompatibel) berfungsi dengan mengatur dua hal:

  • base_url / baseURL → https://api.uberllm.dev/v1
  • api_key / apiKey → kunci ull_ Anda

Semua hal lainnya — messages, tools, response_format, stream, max_tokens, temperature — tidak berubah.


Python

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.uberllm.dev/v1",
    api_key=os.environ["UBERLLM_API_KEY"],
)

# Non-streaming
resp = client.chat.completions.create(
    model="deepseek/deepseek-v4-flash",
    messages=[{"role": "user", "content": "Explain rope embeddings briefly."}],
)
print(resp.choices[0].message.content)
print(resp.usage)  # prompt_tokens / completion_tokens are returned per request

# Streaming
stream = client.chat.completions.create(
    model="deepseek/deepseek-v4-flash",
    messages=[{"role": "user", "content": "Count to five."}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)

TypeScript / JavaScript

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.uberllm.dev/v1",
  apiKey: process.env.UBERLLM_API_KEY,
});

const resp = await client.chat.completions.create({
  model: "deepseek/deepseek-v4-flash",
  messages: [{ role: "user", content: "Explain rope embeddings briefly." }],
});
console.log(resp.choices[0].message.content);

Pemanggilan Tool

Pemanggilan tool/fungsi diteruskan tanpa perubahan. Gunakan model yang mengiklankan dukungan tool (lihat Model & routing; katalog menandai supports_tools).

resp = client.chat.completions.create(
    model="deepseek/deepseek-v4-flash",
    messages=[{"role": "user", "content": "What is the weather in Paris?"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather for a city",
            "parameters": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    }],
)
print(resp.choices[0].message.tool_calls)

Balasan yang memanggil tool selalu diakhiri dengan finish_reason: "tool_calls" (stop_reason: "tool_use" pada /v1/messages), baik secara streaming maupun tidak, penyedia mana pun yang melayaninya. Kirim kembali setiap pemanggilan tool seperti yang Anda terima: beberapa membawa field extra_content (tanda tangan pemikiran Gemini) yang dibutuhkan model pada giliran berikutnya.

Bentuk Balasan

Setiap balasan memiliki bidang yang sama, tidak peduli penyedia mana yang melayaninya: bidang penyelesaian obrolan OpenAI (id, object, created, model, choices, usage) dan usage.cost_usd kami. Bidang yang ditambahkan oleh penyedia sendiri (x_groq, service_tier, system_fingerprint, usage.queue_time dan sejenisnya) akan dihapus.

Model penalaran mengirimkan penalaran mereka di reasoning dan reasoning_content, dengan teks yang sama, di message (atau delta saat streaming), sehingga klien yang membaca salah satunya akan mendapatkannya. Ketika penyedia mengirimkan reasoning_details gaya OpenRouter, itu akan diteruskan tanpa perubahan. Balasan tanpa penalaran tidak memiliki kedua bidang tersebut.

Bidang permintaan yang ditolak oleh penyedia tetapi hanya untuk menyetel jawaban (reasoning, thinking, verbosity, top_k dan sejenisnya) akan diabaikan untuk penyedia tersebut, dan reasoning: {"effort": "low"} dikirim sebagai reasoning_effort jika itu yang diperlukan. Konten pesan yang dikirim sebagai daftar bagian teks akan menjadi satu string ke penyedia yang hanya menerima string. Gambar, audio, atau file yang dikirim ke model yang hanya membaca teks akan ditolak dengan 400 biasa yang menyatakan demikian: periksa input_modalities di GET /v1/models terlebih dahulu.

Daftar model

curl https://api.uberllm.dev/v1/models \
  -H "Authorization: Bearer $UBERLLM_API_KEY"

Mengembalikan format daftar OpenAI ({"object":"list","data":[{"id": "...", ...}]}) dengan model chat yang bisa Anda panggil sekarang; ?type=all menambahkan model gambar, video, musik, dan suara. Setiap model chat memiliki context_length, max_output_tokens, input_modalities, supports_tools, supports_reasoning, supports_vision, dan supported_parameters (lihat Model & routing). Katalog publik (tanpa autentikasi) juga tersedia di GET /api/v1/public/models dengan harga per-endpoint.

Penggunaan Streaming

Untuk permintaan streaming, UberLLM secara otomatis meminta penggunaan token (stream_options.include_usage), sehingga potongan data terakhir membawa objek usage dengan cost_usd, yaitu biaya panggilan dalam dolar AS. Balasan yang tidak di-streaming juga memiliki usage.cost_usd, dan header X-UberLLM-Cost-USD (kecuali yang lambat yang sudah dimulai dengan spasi keepalive: maka hanya bidang body). Tagihan Anda adalah biaya yang dilaporkan oleh marketplace untuk panggilan tersebut. Balasan tidak menunggu laporan tersebut: jika belum tersedia, cost_usd adalah perkiraan kami, dan saldo Anda serta Dashboard → Activity akan menunjukkan biaya yang tepat sesaat kemudian. Jika penggunaan pernah hilang, UberLLM akan kembali ke perkiraan tokenizer — baris-baris tersebut ditandai di Dashboard → Activity.

Responses API

client.responses.create dan client.responses.stream juga berfungsi, pada setiap model chat: teks, tool calls (function_call → function_call_output), structured output dan streaming. UberLLM tidak menyimpan apa pun, jadi kirimkan seluruh percakapan dalam input setiap panggilan alih-alih previous_response_id. Detail: Responses API.

r = client.responses.create(
    model="deepseek/deepseek-v4.1-flash",
    instructions="Answer in one short sentence.",
    input="What is the capital of France?",
)
print(r.output_text)

Catatan

  • Angka /v1 di akhir wajib ada di base URL.
  • Setiap permintaan dikirim ke penyedia pihak ketiga yang tersedia untuk model tersebut dan ditagih sesuai dengan biaya yang dikenakan oleh penyedia, tanpa biaya UberLLM. Lihat Harga.
  • Untuk percobaan ulang otomatis dan opsi routing yang diterima UberLLM, lihat Model & routing.