Mô hình & định tuyến
UberLLM gửi mỗi yêu cầu đến một nhà cung cấp bên thứ ba có sẵn cho mô hình bạn đã yêu cầu. Nếu nhà cung cấp gặp lỗi trước khi bắt đầu trả lời, yêu cầu sẽ được thử lại, và một yêu cầu vẫn thất bại sẽ không bị tính phí. Mỗi yêu cầu được tính phí theo mức nhà cung cấp đã tính, không thêm phí UberLLM nào, và được liệt kê cùng với chi phí của nó trong Dashboard → Activity. Bạn chọn một mô hình, không phải một nhà cung cấp.
Mã mô hình
Sử dụng mã mô hình từ danh mục, ví dụ deepseek/deepseek-v4-flash,
anthropic/claude-sonnet-5 hoặc z-ai/glm-5.3. Liệt kê những gì bạn có thể gọi ngay bây giờ:
GET https://api.uberllm.dev/v1/models: các mô hình trò chuyện mà một yêu cầu có thể được gửi đến ngay bây giờ, để một công cụ điền menu mô hình của nó từ danh sách này (SillyTavern, LibreChat, n8n, Cline) chỉ hiển thị các mô hình mà nó có thể trò chuyện cùng. Thêm?type=video(hoặcimage,music,speech,transcription,audiocho cả hai loại đó,chat, nhiều loại được nối bằng dấu phẩy) cho các loại khác, hoặc?type=allcho mọi mô hình, ưu tiên trò chuyện, sau đó là hình ảnh, video, âm nhạc, giọng nói và phiên âm. Mỗi mục cótype(chat,image,video,music,speech,transcription),endpoints(các đường dẫn phục vụ nó) vàpricing.- Mỗi mô hình trò chuyện cũng cho biết nó có thể làm gì:
context_length,max_output_tokens,input_modalities(image= nó đọc hình ảnh),supports_tools,supports_reasoning,supports_visionvàsupported_parameters(các trường yêu cầu nó chấp nhận). Các thông tin tương tự cũng có dưới tên của OpenRouter (architecture.input_modalities,top_provider.context_length,top_provider.max_completion_tokens, vàpricing.prompt/pricing.completiontính bằng đô la mỗi token), vì vậy các công cụ được xây dựng cho danh sách của OpenRouter đọc danh sách của chúng tôi nguyên trạng. GET https://api.uberllm.dev/v1/models/<model id>: một mô hình, với giá của nó, ngữ cảnh của nó (trò chuyện) và, đối với mô hình phương tiện,parameters: một JSON Schema của phần thân yêu cầu (xem Tạo video hoặc hình ảnh).- Mỗi mục, trong cả hai câu trả lời, cũng có:
available:truekhi một yêu cầu cho nó có thể được phục vụ ngay bây giờ.falsecó nghĩa là không ai đang phục vụ nó vào lúc này, vì vậy một yêu cầu sẽ bị từ chối vớino_available_provider. Chọn một mô hình khác hoặc thử lại sau.input_modalities: những gì mô hình chấp nhận. Một mô hình cần hình ảnh (hình ảnh sang video, tham chiếu sang video, chỉnh sửa hình ảnh) liệt kê"image"bên cạnh"text"; một mô hình chấp nhận video (upscaling) liệt kê"video".nsfw:truecho một mô hình được tạo ra cho nội dung người lớn hoặc không bị kiểm duyệt (Lustify, các mô hình "uncensored" và tương tự). Bỏ qua những mô hình này nếu sản phẩm của bạn phải an toàn cho môi trường làm việc.
- Công khai, không cần key:
GET https://api.uberllm.dev/api/v1/public/models(với giá cả, và các trườngavailable,input_modalitiesvànsfwtương tự) - Web: uberllm.dev/#models, và một trang cho mỗi mô hình tại
uberllm.dev/models/<model id>
Điều gì xảy ra với mỗi yêu cầu
- UberLLM kiểm tra xem mô hình có tồn tại không, rằng lời nhắc của bạn phù hợp với cửa sổ ngữ cảnh của nó và rằng nó hỗ trợ các công cụ nếu yêu cầu của bạn sử dụng chúng.
- Nó đặt trước chi phí ước tính từ số dư của bạn và chuyển tiếp yêu cầu.
- Yêu cầu được gửi đến một nhà cung cấp có sẵn cho mô hình đó. Nhà cung cấp được chọn lại cho mỗi lần gọi: nhà cung cấp rẻ nhất bắt đầu trả lời đủ nhanh cho kích thước lời nhắc của bạn (trong vòng 2x so với tốc độ nhanh nhất được đo, hoặc dưới 1 giây). Một lời nhắc dài dạng streaming cũng được gửi đến nhà cung cấp nhanh thứ hai khi nhà cung cấp đầu tiên khởi động chậm; bạn nhận và trả tiền cho một câu trả lời. Việc đặt tên nhà cung cấp trong
provider.only,ignorehoặcorder, hoặc cài đặtsort, sẽ thay thế lựa chọn này. Cách thức hoạt động: định tuyến thông minh. - Khi câu trả lời hoàn tất, UberLLM thanh toán theo giá mà thị trường báo cáo cho cuộc gọi đó và giải phóng phần còn lại của khoản đặt trước.
Tự động thử lại
Nếu một cuộc gọi thất bại trước khi bất kỳ nội dung nào đến được với bạn, UberLLM sẽ tự động thử lại cho bạn. Thị trường sẽ tìm lại người bán phù hợp trong mỗi lần thử, và không tính phí cho một cuộc gọi thất bại trước khi được định tuyến, vì vậy việc thử lại chỉ tốn thời gian của bạn.
- Được thử lại: không có người bán cho mô hình này vào lúc này (
no_sellers_for_model,no_healthy_sellers), thị trường hết thời gian định tuyến (route_deadline_exceeded), một429yêu cầu chờ 5 giây trở xuống, bất kỳ5xxnào, lỗi kết nối, người bán có khóa hoặc tài khoản nhà cung cấp riêng bị lỗi, hoặc không nhận được byte đầu tiên kịp thời. - Không được thử lại: mô hình không tồn tại, yêu cầu không hợp lệ, hoặc vấn đề về thanh toán hoặc xác thực. Những lỗi này sẽ trả về ngay lập tức.
- Lịch trình: tối đa 4 lần thử, chờ 0.3 giây, 0.9 giây, sau đó 2.7 giây giữa các lần thử (hoặc
Retry-Aftermà thị trường gửi, nếu nó là 5 giây trở xuống). Khi không có ai bán mô hình, câu trả lời sẽ được trả về trong vòng vài giây. - Chờ byte đầu tiên: một stream nhận được 10 giây (nhiều hơn cho một prompt dài, và nhiều hơn cho một mô hình thường chậm); một phản hồi không có
"stream": truenhận được 85 giây, vì không có gì đến cho đến khi nó hoàn tất. Một lần thử hết toàn bộ 85 giây sẽ không được chờ đợi lần thứ hai. Không có lần thử lại nào bắt đầu sau 150 giây.
Khi streaming đã bắt đầu, không có gì được thử lại: một lỗi giữa chừng stream sẽ kết thúc stream và bạn chỉ bị tính phí cho những gì đã được tạo ra.
Nếu mọi lần thử đều thất bại, bạn sẽ nhận được lỗi thay vì phản hồi, và đặt chỗ được giải phóng hoàn toàn. Những lỗi phổ biến:
| HTTP | code |
Khi nào |
|---|---|---|
| 503 | no_available_provider |
Không ai có thể phục vụ mô hình đó vào lúc này, ngay cả sau khi thử lại: không có người bán, mọi người bán đều thất bại hoặc quá chậm để bắt đầu, hoặc các tùy chọn provider của bạn không còn gì để định tuyến đến. Thông báo sẽ nêu tên mô hình. Thử lại sau một thời gian ngắn hoặc chọn một mô hình khác. |
| 503 | service_unavailable |
Một vấn đề tạm thời từ phía UberLLM. Thử lại sau vài phút. |
| 404 | model_not_found |
ID mô hình không khả dụng. |
Xem Lỗi để biết danh sách đầy đủ.
Mô hình dự phòng
Gửi models kèm theo danh sách các model id khác để thử, theo thứ tự, khi model đầu tiên không thể được phục vụ:
{ "model": "deepseek/deepseek-v4-flash",
"models": ["z-ai/glm-5.3", "qwen/qwen3.6-plus"],
"messages": [{ "role": "user", "content": "hi" }] }
Model tiếp theo chỉ được thử khi không ai có thể phục vụ model trước đó ngay lúc này (no_available_provider), hoặc không ai bán nó trong provider.max_price của bạn.
Lỗi yêu cầu (body không hợp lệ, model id không xác định trong bất kỳ trường nào) và từ chối thanh toán (số dư, giới hạn key) sẽ được trả lời ngay lập tức và không bao giờ được chuyển xuống danh sách. Tối đa 5 model trong model và models cộng lại. Trường model của phản hồi và hàng Activity sẽ nêu tên model đã trả lời. models hoạt động trên /v1/chat/completions và trên các yêu cầu hình ảnh, video, âm nhạc và giọng nói; /v1/messages và /v1/audio/transcriptions không đọc nó.
Bí danh mô hình
Thay vì một ID mô hình, bạn có thể đặt tên cho thứ mình cần, và UberLLM sẽ chọn mô hình trên mỗi yêu cầu:
best-price:<job>: mô hình có sẵn với giá thấp nhất cho một yêu cầu thông thường. Một mô hình trò chuyện được so sánh bằng giá mỗi triệu token với đầu ra được tính ba lần; một mô hình hình ảnh bằng một hình ảnh (một hình ảnh 1024×1024 khi nó được tính giá theo megapixel); một mô hình video bằng đoạn clip ngắn nhất của nó; một mô hình âm nhạc bằng một bản nhạc; một mô hình giọng nói bằng 1K ký tự; một mô hình chuyển đổi giọng nói thành văn bản bằng một phút.fastest:<job>: mô hình có thời gian trung vị thấp nhất trên các yêu cầu thành công của nó trên UberLLM trong 7 ngày qua (thời gian đến token đầu tiên cho trò chuyện, thời gian đến tệp hoàn chỉnh cho phương tiện), chỉ tính các mô hình có ít nhất 5 yêu cầu như vậy. Khi không có mô hình nào đủ, yêu cầu bị từ chối với503 no_timing_data, vàbest-price:vẫn hoạt động.
Cả hai chỉ chọn trong số các mô hình có sẵn ngay bây giờ: thị trường trực tiếp cho thấy
một người bán khỏe mạnh cho nó, và yêu cầu cuối cùng của UberLLM đến nó trong 10 phút qua
không thấy mọi người bán đều bận hoặc ngừng hoạt động (quy tắc tương tự như available trên
/v1/models). Trên một tuyến phương tiện, khi mô hình mà một bí danh đã chọn trả lời rằng
không ai có thể thực hiện yêu cầu, thì cùng một yêu cầu sẽ chuyển sang mô hình tiếp theo
mà bí danh đó đại diện (tối đa 3 mô hình), và model của phản hồi sẽ đặt tên cho mô hình
đã trả lời. Khi không có mô hình nào cho công việc có sẵn, câu trả lời là
503 no_available_provider và không có gì được tính phí.
<job> là một trong các chat, image, image-edit, text-to-video,
image-to-video, music, speech, transcription. Gửi một bí danh trò chuyện đến /v1/chat/completions hoặc
/v1/messages, và một bí danh phương tiện đến tuyến phương tiện của nó. Trường model của phản hồi
sẽ đặt tên cho mô hình mà nó đã phân giải thành. GET /v1/models/aliases liệt kê mọi bí danh
đang phân giải ngay bây giờ và mô hình của nó; GET /v1/models/best-price:chat mô tả
mô hình mà nó đại diện, với alias được đặt.
Tùy chọn định tuyến
Đối tượng provider được đọc trên /v1/chat/completions. Một tùy chọn mà UberLLM không thể áp dụng sẽ bị từ chối với 400 unsupported_routing_option và không có phí nào được tính, vì vậy một yêu cầu sẽ không bao giờ chạy với một cài đặt bị bỏ qua một cách âm thầm.
| Tùy chọn | Chức năng |
|---|---|
only / allow |
Chỉ các tuyến đường hoặc nhà cung cấp này. uberllm (tuyến đường thị trường của UberLLM) và seller (các ưu đãi riêng của người bán) chọn giữa các tuyến đường của chúng tôi. Bất kỳ tên nào khác, chẳng hạn như openai hoặc api.venice.ai, là một nhà cung cấp trên thị trường: yêu cầu sau đó đi qua tuyến đường uberllm, chỉ sử dụng các ưu đãi từ các nhà cung cấp đó. |
ignore / deny |
Không bao giờ các tuyến đường hoặc nhà cung cấp này. Tên tuyến đường như trên. Tên nhà cung cấp (tối đa 32) bị từ chối trên thị trường, và yêu cầu sau đó đi qua tuyến đường uberllm. |
order |
Thứ tự ưu tiên. Tên tuyến đường sắp xếp các tuyến đường của chúng tôi; tên nhà cung cấp đặt thứ tự thử nghiệm của thị trường. Nó không bao giờ làm cho một nhà cung cấp đủ điều kiện hoặc không đủ điều kiện. |
sort |
price (mặc định), latency (nhanh nhất được quan sát trước, trong một dải giá) hoặc uptime (đáng tin cậy nhất trước, trong cùng dải). throughput chỉ sắp xếp các tuyến đường của riêng chúng tôi. |
max_price |
Số tiền tối đa bạn trả cho mỗi triệu token, bằng đô la Mỹ: { "prompt": 1.0, "completion": 3.0 }. Các tuyến đường có giá cao hơn sẽ bị bỏ qua; tuyến đường thị trường được giữ cho người bán ít nhất thấp hơn giá niêm yết của mô hình theo mức trần của bạn. Nếu không còn gì, yêu cầu sẽ bị từ chối với 400 max_price_exceeded và không có phí nào được tính. Khi bạn đặt cả prompt và completion, một yêu cầu sẽ không bao giờ bị tính phí cao hơn chúng cho các token đã sử dụng. |
allow_fallbacks |
false tắt các lần thử lại tự động ở trên; lỗi đầu tiên sẽ được trả về cho bạn. |
data_collection |
Chỉ "allow" (mặc định) được chấp nhận. |
zdr, require_parameters |
Chỉ false được chấp nhận. |
Các hậu tố mô hình :floor và :nitro được chấp nhận và loại bỏ khỏi ID mô hình; :floor sắp xếp theo giá và :nitro theo thông lượng.
Đối với hình ảnh, video, âm nhạc và giọng nói, mỗi yêu cầu được gửi đến một nhà cung cấp bên thứ ba có sẵn cho mô hình. provider.max_price là chi phí tối đa một đơn vị (hình ảnh, giây, megapixel, phút, 1K ký tự hoặc yêu cầu) có thể có, dưới dạng một số: { "max_price": 0.05 }; nó cũng giới hạn hóa đơn. Mọi tùy chọn provider khác đều bị từ chối đối với phương tiện.
Thẻ
Gửi metadata, một đối tượng chứa tối đa 16 giá trị văn bản (khóa tối đa 64 ký tự không có dấu hai chấm, giá trị tối đa 512), trong bất kỳ yêu cầu nào:
{ "model": "deepseek/deepseek-v4-flash", "messages": [...],
"metadata": { "project": "spring-ads", "run": "42" } }
Các thẻ được lưu trữ cùng với yêu cầu và không bao giờ được gửi đến nhà cung cấp. Chúng hiển thị trên yêu cầu trong Bảng điều khiển → Hoạt động, trên trạng thái của một công việc video hoặc âm nhạc, và trong xuất CSV (cột metadata). Lọc Hoạt động theo thẻ với GET /api/v1/usage/activity?tag=project:spring-ads (lặp lại tag để yêu cầu nhiều thẻ); liên kết CSV cũng áp dụng bộ lọc tương tự. Trên /v1/messages, metadata ({"user_id": "…"}) của riêng Anthropic được lưu trữ theo cách tương tự.