Basis pengetahuan pengembang
Chat, Jawaban dan Pesan
Tiga cara untuk meminta sesuatu kepada model, dalam tiga format klien sudah berbicara, semuanya berjalan pada model yang sama dan dihitung dengan cara yang sama.
Halaman ini diterjemahkan dengan mesin untuk kenyamanan. Versi asli bahasa Inggris adalah versi yang berlaku.
Chatting yang lengkap
OpenAI chat format, dan yang hampir semua alat mendukung. kirim percakapan sejauh ini dan dapatkan pesan berikutnya kembali.
POST https://nymbot.ai/api/v1/chat/completions Anda membutuhkan kunci api.
Hanya model Dan messages Parameter sampling yang tidak diambil oleh model yang dipilih diturunkan tanpa kesalahan, sehingga satu request body bekerja di seluruh model. supported_parametersApa yang ditolak daripada ditinggalkan adalah apa yang model tidak bisa lakukan sama sekali: gambar untuk model yang tidak dapat melihat, alat untuk model yang tidak dapat memanggil mereka.
| Bidang | Jenis | Diperlukan | deskripsi |
|---|---|---|---|
model | Stringnya | Ya | nymbot/auto ( atau auto) untuk routing Nymbot pada saldo standar, atau id model katalog seperti anthropic/claude-sonnet-5 pada saldo Pro. nama pendek dan alias aplikasi juga diterima. Cukup. |
messages | array | Ya | Percakapan dan Peran system, developer (Dilakukan dengan cara sistem) user, assistant Dan toolKonten adalah string atau daftar text Dan image_url bagian; gambar hanya dalam pesan pengguna. input_audio dan bagian file ditolak. |
stream | Boolean | Tidak | Kirimkan jawaban seperti yang tertulis. lihat streamingnya. |
stream_options | obyek | Tidak | {"include_usage": true} menambahkan potongan terakhir dengan jumlah token dan biaya. |
max_tokensmax_completion_tokens | Integrasi | Tidak | Sebagian besar token yang harus ditulis.Dimendong ke maksimum model jika lebih tinggi.Juga menetapkan berapa banyak yang dipegang dari saldo Anda, sehingga jumlah yang lebih kecil membutuhkan lebih sedikit kredit untuk memulai. |
temperaturetop_p | Jumlah | Tidak | Pengendalian sampel : temperature dari 0 sampai 2, top_p dari 0 sampai 1. |
stop | string atau array | Tidak | Teks yang mengakhiri jawaban: string atau paling banyak 4 string, masing-masing paling banyak 256 karakter. nymbot/auto. |
seed | Integrasi | Tidak | Untuk pengambilan sampel berulang, di mana model mendukungnya. |
presence_penaltyfrequency_penalty | Jumlah | Tidak | Kontrol pengulangan, masing-masing dari -2 hingga 2. |
response_format | obyek | Tidak | {"type": "json_object"} atau {"type": "json_schema", "json_schema": {…}}, di mana model mendukung. tidak digunakan oleh nymbot/auto. |
toolstool_choiceparallel_tool_calls | array, string atau object, boolean | Tidak | Panggilan kerja. lihat Alat Panggilan. a web_search Alat ini beralih pencarian webMaksimal 128 alat dan 512 KB definisi, tertanam di paling banyak 64 tingkat mendalam; lebih 400. |
reasoning_effortreasoning | String dan Object | Tidak | "minimal", "low", "medium" atau "high"atau {"effort": "high"}. "none" atau {"enabled": false} Lakukan hal ini. lihat Argumentasi. |
plugins | array | Tidak | [{"id": "web", "max_results": 5}] selalu mencari web pertama.Hingga 10 hasil. |
n | Integrasi | Tidak | 1.Segala sesuatu yang lain kembali 400. |
logit_biasusermetadata | Pengertian String, Object | Tidak | diterima dan tidak dikirimkan. logit_bias peta dengan maksimal 300 token id ke angka dari -100 hingga 100; user Maksimalnya 256 karakter. metadata memegang hingga 16 nilai string, kunci hingga 64 karakter dan nilai hingga 512. |
Jawabannya adalah biasa chat.completionDengan biaya di usage.cost
(dalam dolar) dan dalam nymbot dengan objek. model adalah id model yang diselesaikan, sehingga nama pendek kembali sebagai nama lengkap. message.reasoning_contentterpisah dari jawaban.
Jawaban
{
"id": "chatcmpl-5f1c0a9e27d84b3c",
"object": "chat.completion",
"created": 1790726400,
"model": "anthropic/claude-sonnet-5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "A Lightning invoice is a one-time payment request..."
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1240,
"completion_tokens": 380,
"total_tokens": 1620,
"prompt_tokens_details": { "cached_tokens": 0 },
"completion_tokens_details": { "reasoning_tokens": 0 },
"cost": 0.01895
},
"nymbot": {
"balance": "pro",
"charged_credits": 0.162,
"charged_sats": 16.2,
"balance_credits": 412.425,
"balance_sats": 41242.5
}
}
finish_reason ini dikembangkan dari apa yang datang kembali, karena penyedia melaporkan secara berbeda: tool_calls Ketika Anda meminta alat, length ketika jawaban menggunakan setiap token yang diizinkan (atau model menghabiskan mereka semua berpendapat dan tidak menulis jawaban), content_filter Jika pembeli menolak, dan stop
Kalau tidak usage.completion_tokens_details.reasoning_tokens selalu 0: token argumen tersembunyi dihitung, dan dihitung, dalam completion_tokens.
| Statusnya | Kapan |
|---|---|
400 | Tidak model atau messages (missing_required_parameter); bagian audio atau file, atau gambar untuk model yang tidak dapat melihatnya (unsupported_content); lebih dari 20 gambar (too_many_images(Baca juga: Cara Menghilangkan Jerawat dengan Cepat atau Tidak Cepat)invalid_value); link gambar yang tidak umum (invalid_image_url); alat pada model yang tidak dapat menyebutnya (unsupported_tool); n Tidak lebih dari 1; a :thinking Sesuai dengan definisi yang tidak dapat disimpulkan (model_not_found(Jika pemohon menolak permohonan tersebut)upstream_rejected). |
402 | Saldo yang dihabiskan oleh model tidak dapat menutupi kepemilikan. |
403 | yang paling buruk tidak sesuai dengan cap kunci (key_limit_reached) yang lebih rendah max_tokens atau mengangkat kepala. |
404 | Tidak ada model dengan nama itu (model_not_found). |
429 | Pembatasan tarif kunci, atau dari penyedia (upstream_rate_limited). |
502, 503 | Penyedia tidak dapat (upstream_error(Jika ada yang berlebihan)upstream_overloaded, dengan Retry-AfterTidak ada yang dikenakan biaya kecuali penyedia menghitung untuk percobaan. |
Kode status setiap saham endpoint tercantum di bawah kesalahan.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [
{"role": "system", "content": "Answer in one short paragraph."},
{"role": "user", "content": "What is a Lightning invoice?"}
],
"max_tokens": 400
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[
{"role": "system", "content": "Answer in one short paragraph."},
{"role": "user", "content": "What is a Lightning invoice?"},
],
max_tokens=400,
)
print(reply.choices[0].message.content)
print(reply.usage.cost)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [
{ role: "system", content: "Answer in one short paragraph." },
{ role: "user", content: "What is a Lightning invoice?" },
],
max_tokens: 400,
});
console.log(reply.choices[0].message.content);
console.log(reply.usage.cost);
Streamingnya
dengan "stream": true jawaban datang sebagai peristiwa yang dikirim oleh server sementara model menuliskannya. chat.completion.chunk adalah a data: garis, dan aliran berakhir dengan data: [DONE]Alasan masuk ke dalam
delta.reasoning_contentJawabannya dalam delta.content.
Stream apa pun yang mungkin memakan waktu lebih dari sekitar 100 detik, seperti jawaban panjang,
max_tokens Sebuah permintaan yang tidak ditransmisikan tidak mengirimkan apa-apa sampai jawaban selesai, dan jaringan antara Anda dan Nymbot dapat menutup koneksi kosong setelah sekitar 100 detik; model masih selesai dan apa yang ditulisnya diisi, tetapi jawaban hilang.
Streamnya
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"content":"A Lightning invoice"},"finish_reason":null}]}
: keep-alive
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[],"usage":{"prompt_tokens":1240,"completion_tokens":380,"total_tokens":1620,"cost":0.01895},"nymbot":{"balance":"pro","charged_credits":0.162,"charged_sats":16.2,"balance_credits":412.425,"balance_sats":41242.5}}
data: [DONE]
- Garis yang dimulai dengan
:komentar tetap hidup, dikirim setiap 15 detik sementara model sedang berpikir. klien SSE melewatkannya. - Minta untuk
"stream_options": {"include_usage": true}untuk mendapatkan potongan terakhir di atas, dengan satu kosongchoices, token menghitung, biaya dannymbotdengan objek. - Biaya diselesaikan setelah aliran berakhir.Jika Anda menutup koneksi lebih awal, model tidak dihentikan: Nymbot membaca sisa aliran penyedia, hingga 25 detik, untuk mendapatkan jumlah token, dan Anda membayar apa yang dilaporkan penyedia.
- Kesalahan yang terjadi pada bagian pertama, seperti
401atau402, kembali sebagai JSON biasa dengan kode statusnya, bukan sebagai aliran.data: {"error": {…}}peristiwa, dan aliran berakhir tanpa[DONE]. - Permintaan dengan alat, dan model pada transportasi Responses OpenAI, tidak mengalir dari penyedia. mereka masih menjawab dengan aliran yang valid, dikirim setelah jawaban selesai.
cURL
curl -N https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nymbot/auto",
"stream": true,
"stream_options": {"include_usage": true},
"messages": [{"role": "user", "content": "Write a haiku about sats."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
stream = client.chat.completions.create(
model="nymbot/auto",
stream=True,
stream_options={"include_usage": True},
messages=[{"role": "user", "content": "Write a haiku about sats."}],
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)
elif chunk.usage:
print("\ncost:", chunk.usage.cost)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const stream = await client.chat.completions.create({
model: "nymbot/auto",
stream: true,
stream_options: { include_usage: true },
messages: [{ role: "user", content: "Write a haiku about sats." }],
});
for await (const chunk of stream) {
if (chunk.choices.length) process.stdout.write(chunk.choices[0].delta.content || "");
else if (chunk.usage) console.log("\ncost:", chunk.usage.cost);
}
Alat Panggilan
Mengidentifikasi fungsi dalam tools dan model dapat meminta seseorang untuk dipanggil alih-alih menjawab. Anda menjalankan fungsi, menambahkan hasilnya sebagai tool Pesan yang sama dengan
tool_call_idNymbot tidak pernah menjalankan fungsi Anda; itu mengirimkan permintaan model kembali kepada Anda.
tool_choice Mengambil "auto", "none",
"required" atau {"type": "function", "function": {"name": "…"}}Daftar model menandai model mana yang dapat disebut alat (capabilities.toolsAlat tersebut ditolak dengan 400 unsupported_tool adalah nymbot/auto dan pada beberapa model katalog yang berjalan pada transportasi Responses OpenAI, yang tidak dapat ditransfer oleh Nymbot.
dengan "stream": true, permintaan dengan alat berjalan dalam satu potongan dan kemudian dikirim sebagai urutan potongan normal: peran, satu potongan membawa setiap panggilan alat dengan indeks, id, nama dan argumen, dan potongan akhir.
Jawabannya, sebagian
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_7d2e",
"type": "function",
"function": { "name": "get_invoice_status", "arguments": "{\"invoice_id\":\"a41f\"}" }
}
]
},
"finish_reason": "tool_calls"
}
]
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{"role": "user", "content": "Has invoice a41f been paid?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_invoice_status",
"description": "Look up whether an invoice is paid.",
"parameters": {
"type": "object",
"properties": {"invoice_id": {"type": "string"}},
"required": ["invoice_id"]
}
}
}]
}'
Python
import json, os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_invoice_status",
"description": "Look up whether an invoice is paid.",
"parameters": {
"type": "object",
"properties": {"invoice_id": {"type": "string"}},
"required": ["invoice_id"],
},
},
}]
messages = [{"role": "user", "content": "Has invoice a41f been paid?"}]
reply = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
call = reply.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
messages.append(reply.choices[0].message)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps({"paid": True})})
final = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
print(final.choices[0].message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const tools = [{
type: "function",
function: {
name: "get_invoice_status",
description: "Look up whether an invoice is paid.",
parameters: {
type: "object",
properties: { invoice_id: { type: "string" } },
required: ["invoice_id"],
},
},
}];
const messages = [{ role: "user", content: "Has invoice a41f been paid?" }];
const reply = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
const call = reply.choices[0].message.tool_calls[0];
const args = JSON.parse(call.function.arguments);
messages.push(reply.choices[0].message);
messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify({ paid: true }) });
const final = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
console.log(final.choices[0].message.content);
Gambar dalam permintaan
Model dengan capabilities.vision dapat membaca gambar. tambahkan image_url
bagian ke pesan pengguna, dengan publik https:// Link atau a
data:image/…;base64, WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB WEB400 invalid_image_url1) Opsi yang detail adalah
auto, low atau high.
dengan nymbot/auto, permintaan dengan gambar di dalamnya diarahkan ke model standar yang dapat dilihat. capabilities.vision Menolak gambar dengan
400 unsupported_contentGambar hanya dapat berada dalam pesan pengguna. link harus menunjuk ke host publik; Nymbot mengirimkan gambar ke penyedia model dan tidak menyimpannya.
Sebuah gambar dikenakan biaya sebagai token input yang dihitung oleh penyedia untuk itu, seperti sisanya dari permintaan.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": "https://example.com/receipt.jpg"}}
]
}]
}'
Python
import base64, os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
with open("receipt.jpg", "rb") as f:
data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": data_url}},
],
}],
)
print(reply.choices[0].message.content)
JavaScript
import { readFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const dataUrl = "data:image/jpeg;base64," + (await readFile("receipt.jpg")).toString("base64");
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [{
role: "user",
content: [
{ type: "text", text: "What is in this picture?" },
{ type: "image_url", image_url: { url: dataUrl } },
],
}],
});
console.log(reply.choices[0].message.content);
Argumentasi
Model dengan capabilities.reasoning dapat berpikir sebelum mereka menjawab. meminta lebih atau kurang dari itu dengan reasoning_effort ("minimal", "low",
"medium" atau "high") atau "reasoning": {"effort": "high"}atau menambahkan :thinking untuk nama model, yang berarti usaha tinggi. Pada model tanpa alasan pengaturan diabaikan. dengan nymbot/auto, :thinking Mengirimkan permintaan ke rute pertimbangan standar.
Pada model Anthropic upaya menjadi anggaran pemikiran sekitar 1.000, 2.000, 8.000 atau 16.000 token, tidak lebih dari max_tokens memungkinkan, maka pemikiran akan terhenti ketika
tool_choice memaksa sebuah alat, dan ketika permintaan melanjutkan lingkaran alat (pesan terakhirnya adalah hasil alat), karena Anthropic membutuhkan pemikiran yang ditandatangani sebelumnya untuk melanjutkan.
Argumen itu kembali ke dalam message.reasoning_contentatau
delta.reasoning_content ketika streaming, tidak pernah dicampur ke dalam jawaban. Reasoning adalah output dan dibebankan sebagai demikian, dalam completion_tokensBeberapa penyedia tidak mengembalikan teks argumen sama sekali, dan itu masih dikenakan biaya.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"reasoning_effort": "high",
"messages": [{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
reasoning_effort="high",
messages=[{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}],
)
message = reply.choices[0].message
print(getattr(message, "reasoning_content", None))
print(message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
reasoning_effort: "high",
messages: [{ role: "user", content: "Is 2^61 - 1 prime? Show why." }],
});
console.log(reply.choices[0].message.reasoning_content);
console.log(reply.choices[0].message.content);
Model yang cukup
Sufi pada nama model mengubah cara permintaan diproses, tanpa bidang lain. mereka bekerja pada ID lengkap dan nama pendek sama, seperti dalam anthropic/claude-sonnet-5:online.
| Cukup | Efeknya |
|---|---|
:online | Mencari situs web pertama, seperti plugins: [{"id": "web"}]Yaitu pencarian web. |
:thinking | Penilaian yang tinggi; pada nymbot/autopada suatu model yang tidak dapat berakal, 400 model_not_found dengan “ tidak ada titik akhir yang ditemukan”. |
:nitro, :floor, :exacto, :extended | Setiap model katalog memiliki satu rute, jadi tidak ada rute yang lebih cepat, lebih murah atau lebih lama untuk dipilih; suffix diperbolehkan sehingga nama model yang disalin dari layanan lain masih berfungsi. |
Semua suffix lainnya diabaikan. Nama keseluruhan dicoba terlebih dahulu, sehingga model yang idnya benar-benar berisi kolon masih berfungsi; jika tidak, suffix diambil dari ujung satu per satu sampai model cocok. Nama model mungkin tidak lebih dari 200 karakter panjang dengan tidak lebih dari 4 suffix; yang lebih panjang ditolak dengan 400 invalid_value.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5:thinking",
"messages": [{"role": "user", "content": "Plan a three-day trip to Lisbon."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5:thinking",
messages=[{"role": "user", "content": "Plan a three-day trip to Lisbon."}],
)
print(reply.choices[0].message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5:thinking",
messages: [{ role: "user", content: "Plan a three-day trip to Lisbon." }],
});
console.log(reply.choices[0].message.content);
pencarian web
Nymbot mencari pesan pengguna terakhir (seribu karakter pertama), membaca halaman terbaik dan memberikannya ke model dengan pertanyaan, ditandai sebagai konten eksternal model tidak boleh mengambil instruksi dari.
- Selalu Mencari:
"plugins": [{"id": "web", "max_results": 5}]atau a:onlinecukup pada modelnya. - Mencari Ketika Membantu:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Juga diterima sebagaiweb_search_previewatauopenrouter:web_searchNymbot hanya mencari ketika pertanyaan tampaknya membutuhkan informasi saat ini, tes yang sama yang digunakan oleh aplikasi.
max_results adalah 5 secara default dan pada maksimum 10. sumber kembali ke
nymbot.web_search.sourcesMasing-masing dengan a title, snippet Dan
urlDan sebagai url_citation Catatan pada pesan.
Setiap pencarian yang berjalan biaya $ 0,008, dikonversi ke sats, di atas token, dan itu adalah bagian dari hold. halaman yang dibaca adalah token input juga, jadi jawaban dari web biaya lebih dari pertanyaan yang sama diminta dingin, kadang-kadang beberapa kali lebih.
Jawabannya, sebagian
"nymbot": {
"balance": "pro",
"charged_credits": 0.431,
"charged_sats": 43.1,
"balance_credits": 411.994,
"balance_sats": 41199.4,
"web_search": {
"sources": [
{ "title": "Lightning Network - Wikipedia", "snippet": "The Lightning Network is a payment protocol...", "url": "https://en.wikipedia.org/wiki/Lightning_Network" }
]
}
}
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"plugins": [{"id": "web", "max_results": 5}],
"messages": [{"role": "user", "content": "What changed in the latest Bitcoin Core release?"}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "What changed in the latest Bitcoin Core release?"}],
extra_body={"plugins": [{"id": "web", "max_results": 5}]},
)
print(reply.choices[0].message.content)
for source in reply.model_extra["nymbot"]["web_search"]["sources"]:
print(source["url"])
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
plugins: [{ id: "web", max_results: 5 }],
messages: [{ role: "user", content: "What changed in the latest Bitcoin Core release?" }],
});
console.log(reply.choices[0].message.content);
for (const source of reply.nymbot.web_search.sources) console.log(source.url);
Jawaban API
OpenAI adalah format yang lebih baru, yang digunakan oleh OpenAI Agents SDK dan oleh Codex.
POST https://nymbot.ai/api/v1/responses Anda membutuhkan kunci api.
| Bidang | Jenis | Diperlukan | deskripsi |
|---|---|---|---|
model | Stringnya | Ya | sebagai untuk Chatting yang lengkapTermasuk juga dengan suffix. |
input | string atau array | Ya | Sebuah string, atau daftar item: pesan (peran user, assistant, system, developer) dengan input_text, input_image Dan output_text bagian, dan function_call Dan function_call_output Barang untuk alat. input_image mengambil sebuah image_url link atau data URL, bukan file id. reasoning Dan web_search_call Barang-barang yang ditinggalkan item_reference yang ditolak. |
instructions | Stringnya | Tidak | dengan instruksi sistem. |
max_output_tokens | Integrasi | Tidak | yang paling banyak ditulis. |
temperaturetop_p | Jumlah | Tidak | Sampling controls, di mana model mengambilnya. |
toolstool_choiceparallel_tool_calls | array, string atau object, boolean | Tidak | Fungsi-fungsi yang digunakan dalam formulir respon ({"type": "function", "name": …, "parameters": …}) a web_search atau web_search_preview Alat ini beralih pencarian web Ketika itu membantu. alat-alat built-in lainnya ditolak. |
reasoning | obyek | Tidak | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh Dan max berarti high; none Beralih dari itu. |
text.formatresponse_format | obyek | Tidak | Hasil yang terstruktur, seperti skema JSON atau json_object. |
metadata | obyek | Tidak | Mengembalikan tidak berubah dalam tanggapan. pada paling banyak 16 nilai string, kunci hingga 64 karakter dan nilai hingga 512. |
stream | Boolean | Tidak | Stream acara seperti yang dijelaskan di bawah ini. |
store | Boolean | Tidak | Tidak ada yang disimpan, dan jawaban selalu mengatakan "store": false. |
previous_response_idconversationbackground | String, Object dan Boolean | Tidak | Tidak didukung : 400 unsupported_parameterJawaban tidak disimpan, jadi kirimkan seluruh percakapan ke input Setiap kali |
Jawaban
{
"id": "resp_8c1e4b0f9a2d4e61",
"object": "response",
"created_at": 1790726400,
"status": "completed",
"model": "anthropic/claude-sonnet-5",
"output": [
{
"type": "message",
"id": "msg_2b7f",
"role": "assistant",
"status": "completed",
"content": [{ "type": "output_text", "text": "A Lightning invoice is...", "annotations": [] }]
}
],
"output_text": "A Lightning invoice is...",
"usage": {
"input_tokens": 1240,
"input_tokens_details": { "cached_tokens": 0 },
"output_tokens": 380,
"output_tokens_details": { "reasoning_tokens": 0 },
"total_tokens": 1620
},
"incomplete_details": null,
"error": null,
"instructions": null,
"store": false,
"previous_response_id": null,
"metadata": {},
"nymbot": { "balance": "pro", "charged_credits": 0.162, "charged_sats": 16.2, "balance_credits": 412.425, "balance_sats": 41242.5 }
}
Sebuah tool request muncul di output sebagai a function_call Item dengan
call_id, name Dan argumentsMengembalikan hasilnya sebagai a
function_call_output Item dengan sama call_idReasoning, ketika model mengembalikannya, adalah reasoning Item dengan reasoning_text yang terdaftar terlebih dahulu. status adalah incomplete Ketika jawabannya memukul
max_output_tokens atau penyerang yang menolak, dengan
incomplete_details.reason Mengatur 2 max_output_tokens atau
content_filterTanggapan juga mencerminkan pengaturan permintaan (temperatur, alat, pilihan alat dan sebagainya) seperti yang dilakukan OpenAI, dan membawa nymbot Biaya untuk objek.
Setiap event, setiap event adalah sebuah event: garis dan a data: garis dengan a
sequence_numberDalam urutan ini: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedSetiap bilangan dari response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneDan akhirnya response.completed dengan penggunaan dan biaya. sebuah jawaban memotong akhir pendek dengan response.incomplete sebaliknya, dan kegagalan setelah aliran dimulai dengan response.failedMenggambarkan aliran-aliran sebagai item sendiri dengan response.reasoning_text.delta Dan .doneAlat panggilan datang setelah pesan, masing-masing sebagai item dengan response.function_call_arguments.delta
Dan .done.
| Statusnya | Kapan |
|---|---|
400 | Tidak model atau input; previous_response_id, conversation, background atau sebuah item_reference (unsupported_parameter); alat atau jenis konten yang tidak didukung. |
402, 403, 404, 429, 502, 503 | Untuk menyelesaikan chat. |
cURL
curl https://nymbot.ai/api/v1/responses \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"instructions": "Answer in one short paragraph.",
"input": "What is a Lightning invoice?"
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
response = client.responses.create(
model="anthropic/claude-sonnet-5",
instructions="Answer in one short paragraph.",
input="What is a Lightning invoice?",
)
print(response.output_text)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const response = await client.responses.create({
model: "anthropic/claude-sonnet-5",
instructions: "Answer in one short paragraph.",
input: "What is a Lightning invoice?",
});
console.log(response.output_text);
Pesan antropologis
Format Anthropic, untuk Anthropic SDK dan Claude Code. berfungsi dengan setiap model dalam katalog, tidak hanya Claude: permintaan diterjemahkan, berjalan melalui pipa yang sama, dan diterjemahkan kembali.
POST https://nymbot.ai/api/v1/messages - membutuhkan kunci API, seperti x-api-key atau Authorization: Bearer.
yang anthropic-version Dan anthropic-beta Nama-nama model antropik disesuaikan dengan katalog, sehingga Claude Code dan SDK bekerja dengan nama-nama yang sudah mereka gunakan:
- Sebuah nama yang dikenal sebagai katalog, seperti
claude-sonnet-5atauanthropic/claude-opus-5yang digunakan sebagaimana adanya. - Jika ada tanggal (
-20260514),-latest, versi tag seperti-v1Dengan kata lain, sebuah tag seperti[1m]dan sebuahanthropic/atauanthropic.Penelitian ini bertujuan untuk mengidentifikasi faktor-faktor yang mempengaruhi dan mengidentifikasi faktor-faktor yang mempengaruhi dan mengidentifikasi faktor-faktor yang mempengaruhi (claude-haiku-4-5Temukanclaude-haiku-4.5). - Jika itu masih tidak cocok, keluarga (Opus, Sonnet atau Haiku) digunakan, asalkan versi katalog sama atau lebih baru dari yang diminta.
- Nama yang tidak cocok kembali
404not_found_error.
| Bidang | Jenis | Diperlukan | deskripsi |
|---|---|---|---|
model | Stringnya | Ya | Sebuah ID model katalog, atau nama model antropologis. |
max_tokens | Integrasi | Ya | yang paling banyak ditulis. |
messages | array | Ya | user Dan assistant berbalik, dengan text, image (base64 atau sumber URL) tool_use Dan tool_result dengan blok. thinking blok dari putaran sebelumnya diterima dan ditinggalkan. |
system | string atau array | Tidak | Sistem prompt, seperti string atau blok teks. |
temperaturetop_p | Jumlah | Tidak | Sampling controls, di mana model mengambilnya. top_k diterima dan ditinggalkan. |
stop_sequences | Menggunakan Strings | Tidak | Teks yang mengakhiri jawaban. maksimal 4 string, masing-masing maksimal 256 karakter. |
toolstool_choice | Array dan Object | Tidak | Alat dengan name, description Dan input_schema. a web_search Server Tool beralih ke pencarian webAlat-alat built-in Anthropic lainnya (bash, editor teks, penggunaan komputer) ditolak dengan unsupported_tool. tool_choice Mengambil auto, any, tool atau nonedan disable_parallel_tool_use. |
thinking | obyek | Tidak | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} atau {"type": "disabled"}Anggaran memilih tingkat upaya: di bawah 2.048 minimum, dari 2.048 rendah, dari 8.192 sedang, dari 16.384 tinggi. output_config.effortatau yang tinggi. |
stream | Boolean | Tidak | Stream dalam format acara Anthropic. |
metadata | obyek | Tidak | diterima dan diabaikan. |
Jawaban
{
"id": "msg_01c7a2f93e5b4d08",
"type": "message",
"role": "assistant",
"model": "anthropic/claude-sonnet-5",
"content": [{ "type": "text", "text": "A Lightning invoice is..." }],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 1240,
"output_tokens": 380,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0
},
"nymbot": { "balance": "pro", "charged_credits": 0.162, "charged_sats": 16.2, "balance_credits": 412.425, "balance_sats": 41242.5 }
}
content Bisa juga memegang tool_use blok dan a thinking
Blok yang mana signature adalah kosong stop_reason adalah
end_turn, max_tokens, tool_use atau refusalbekerja dengan cara yang sama seperti finish_reason adalah
Chatting yang lengkap; stop_sequence Selalu ada
null, bahkan ketika urutan stop mengakhiri jawaban. input_tokens hanya menghitung input segar; input cache berada di dua bidang cache.
nymbot objek dan yang X-Nymbot-Cost-Sats dengan header.
Streamed, acara ini adalah Anthropic's: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta atau thinking_delta),
content_block_stop, message_delta dengan alasan berhenti, penggunaan dan nymbot Biaya objek, dan message_stop. a ping juga dikirim setiap 15 detik saat model bekerja. panggilan alat tiba setelah teks, masing-masing sebagai
tool_use blok dengan seluruh inputnya dalam satu input_json_delta.
Kesalahan pada titik akhir ini menggunakan format Anthropic:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}Keseimbangan yang pendek adalah 402 billing_errorPenyedia yang Overloaded
503 overloaded_errorKegagalan setelah aliran telah dimulai dikirim sebagai error peristiwa yang
cURL
curl https://nymbot.ai/api/v1/messages \
-H "x-api-key: $NYMBOT_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
}'
Python
import os
import anthropic
client = anthropic.Anthropic(base_url="https://nymbot.ai/api", api_key=os.environ["NYMBOT_API_KEY"])
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(message.content[0].text)
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ baseURL: "https://nymbot.ai/api", apiKey: process.env.NYMBOT_API_KEY });
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(message.content[0].text);
Menghitung Token
Perkiraan berapa banyak token input yang akan digunakan oleh permintaan Pesan, sehingga klien dapat memeriksa sebelum mengirimkannya.
POST https://nymbot.ai/api/v1/messages/count_tokens Anda membutuhkan kunci API gratis.
Tubuh adalah sama dengan Pesandan tanpa max_tokensJumlah adalah perkiraan: karakter dari sistem prompt, pesan, panggilan alat dan definisi alat dibagi oleh empat, ditambah 1.600 untuk setiap gambar. Ini bukan tokenizer penyedia sendiri, sehingga jumlah sebenarnya dapat berbeda. Kunci yang telah mencapai capnya masih dapat menggunakannya.
Jawaban
{ "input_tokens": 318 }
cURL
curl https://nymbot.ai/api/v1/messages/count_tokens \
-H "x-api-key: $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
}'
Python
import os
import anthropic
client = anthropic.Anthropic(base_url="https://nymbot.ai/api", api_key=os.environ["NYMBOT_API_KEY"])
count = client.messages.count_tokens(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(count.input_tokens)
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ baseURL: "https://nymbot.ai/api", apiKey: process.env.NYMBOT_API_KEY });
const count = await client.messages.countTokens({
model: "claude-sonnet-5",
messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(count.input_tokens);
Daftar Model
Setiap model dan generator yang diterima API, dengan biaya apa pun. daftar dibaca dari katalog langsung yang sama dengan picker aplikasi, sehingga selalu apa yang akan berjalan server.
GET https://nymbot.ai/api/v1/models - Tidak diperlukan kunci. disembunyikan selama lima menit.
GET /api/v1/models/{id} Mengembalikan satu entri.
| Bidang | Jenis | Diperlukan | deskripsi |
|---|---|---|---|
type | Menggunakan string (query) | Tidak | chat (Dalam hal yang demikian, image, video, audio, embedding atau allBeberapa dapat diberikan, seperti image,video. |
Harga adalah apa yang Anda bayar, dengan biaya dan margin yang sudah ada, dalam dolar dan dalam sats pada harga Bitcoin saat ini. balance Mengidentifikasi model mana yang dihabiskan.
nymbot_key adalah nama model pendek dalam aplikasi. created selalu 0 karena katalog tidak mencatat kapan model ditambahkan. per_request alih-alih.
nymbot/auto selalu diutamakan, dengan harga yang variableDengan a
routes Daftar yang memberikan tarif dari setiap rute standar. daftar visi dan argumen, tetapi tidak alat.
GET /api/v1/models/{id} menerima nama dan alias yang sama sebagai permintaan, dan mengembalikan entri untuk model yang mereka tentukan.
Jawaban
{
"object": "list",
"data": [
{
"id": "anthropic/claude-sonnet-5",
"object": "model",
"type": "chat",
"owned_by": "anthropic",
"name": "Claude Sonnet 5",
"created": 0,
"context_length": 1000000,
"max_output_tokens": 64000,
"architecture": { "input_modalities": ["text", "image"], "output_modalities": ["text"] },
"supported_parameters": ["max_tokens", "temperature", "tools", "tool_choice", "reasoning", "response_format", "stop"],
"capabilities": { "vision": true, "video": false, "tools": true, "reasoning": true, "web_search": true },
"balance": "pro",
"pricing": {
"type": "per_token",
"currency": "USD",
"input_per_1M_tokens": 4.725,
"output_per_1M_tokens": 23.625,
"cache_read_per_1M_tokens": 0.4725,
"sats_input_per_1M_tokens": 4038,
"sats_output_per_1M_tokens": 20192
},
"description": "...",
"nymbot_key": "claude-sonnet"
}
]
}
Jenis lainnya :
- gambar Masuknya ada
capabilities(accepts_image_url,requires_image_url,edit) dan hargaper_generation. - Video yang Masuknya ada
max_duration_secondsDanresolutionsDan harga yangper_seconduntuk setiap resolusi. - Audio yang Masuknya ada
audio_typespeechatautranscriptionHarga yangper_1k_charsatauper_minute. - Embedded Masuknya ada
dimensions,context_length,max_inputsdan harga per juta input token.
Harga yang ditandai "estimated": true adalah perkiraan aplikasi untuk generator yang harganya tidak dipublikasikan. type Kembali 400.
cURL
curl "https://nymbot.ai/api/v1/models?type=chat"
Python
import requests
models = requests.get("https://nymbot.ai/api/v1/models", params={"type": "chat"}).json()["data"]
for m in models:
print(m["id"], m["balance"], m["pricing"].get("input_per_1M_tokens"))
JavaScript
const res = await fetch("https://nymbot.ai/api/v1/models?type=chat");
const { data } = await res.json();
for (const m of data) console.log(m.id, m.balance, m.pricing.input_per_1M_tokens);