Baza znanja razvijalci
Chat, odgovori in sporočila
Trije načini, kako vprašati model nekaj, v treh oblikah stranke že govorijo, vsi tečejo na istih modelih in zaračunajo na enak način.
Ta stran je zaradi priročnosti strojno prevedena. Velja angleški izvirnik.
Chat dopolnitev
OpenAI chat format, in tisti, ki ga skoraj vsako orodje podpira. Pošljite pogovor do sedaj in dobite naslednje sporočilo nazaj.
POST https://nymbot.ai/api/v1/chat/completions Potrebujete API ključ.
samo model in messages Parameter vzorčenja, ki ga izbrani model ne sprejme, se spusti brez napake, tako da eno telo zahteve deluje v različnih modelih. supported_parametersKar se zavrne, namesto da bi ga spustili, je nekaj, česar model sploh ne more storiti: slike za model, ki ne more videti, orodja za model, ki jih ne more poklicati.
| polje | Vrsta | Potrebno | Opis |
|---|---|---|---|
model | String | ja | nymbot/auto (ali pa auto) za usmerjanje Nymbota na standardnem ravnovesju ali ID modela kataloga, kot je anthropic/claude-sonnet-5 na ravnovesju Pro. Sprejemajo se tudi kratka imena in vzdevki aplikacije. zadostuje. |
messages | Array | ja | Pogovor - vloge system, developer (ki se uporablja kot sistem), user, assistant in toolVsebina je niz ali seznam text in image_url dele; slike samo v uporabniških sporočilih. input_audio in datotečni deli so zavrnjeni. |
stream | booljan | ne | Odgovor pošljite tako, kot je napisan. Streamiranje. |
stream_options | predmetov | ne | {"include_usage": true} doda končni kos s števili žetonov in stroški. |
max_tokensmax_completion_tokens | integer | ne | Največ žetonov, ki jih je treba napisati. znižano na največjo vrednost modela, če je višja. Prav tako določa, koliko se drži iz vašega stanja, tako da manjše število potrebuje manj kredita za začetek. |
temperaturetop_p | število | ne | Kontrolni vzorci: temperature od 0 do 2, top_p od 0 do 1. |
stop | String ali array | ne | Besedilo, ki se konča z odgovorom: niz ali največ 4 nizov, vsak največ 256 znakov. nymbot/auto. |
seed | integer | ne | Za ponavljajoče se vzorčenje, kjer ga model podpira. |
presence_penaltyfrequency_penalty | število | ne | Ponavljajoči se kontrolniki, vsak od -2 do 2. |
response_format | predmetov | ne | {"type": "json_object"} ali {"type": "json_schema", "json_schema": {…}}, kjer ga model podpira. ne uporablja nymbot/auto. |
toolstool_choiceparallel_tool_calls | Array, String ali Object, Boolean | ne | Funkcija klicanja. glej Orodja za klice• A web_search Orodje se spremeni spletno iskanjeNajveč 128 orodij in 512 KB definicij, vgrajenih na največ 64 ravneh globoko; več je 400. |
reasoning_effortreasoning | String, predmeti | ne | "minimal", "low", "medium" ali "high"ali {"effort": "high"}. "none" ali {"enabled": false} Odstranite ga. glej Razumevanje. |
plugins | Array | ne | [{"id": "web", "max_results": 5}] vedno najprej išče spletno stran. do 10 rezultatov. |
n | integer | ne | 1. vse ostalo se vrne 400. |
logit_biasusermetadata | String, String in predmet | ne | Sprejeto in ne poslano naprej. logit_bias zemljevidi z največ 300 ID-ji žetonov do številk od -100 do 100; user Največ 256 znakov metadata ima največ 16 vrednosti nizov, ključe do 64 znakov in vrednosti do 512. |
Odgovor je navaden chat.completionS stroški v usage.cost
(v dolarjih) in v nymbot Objekt je . model je rešeno ime modela, tako da se kratko ime vrne kot polno ime. message.reasoning_contentločeno od odgovora.
Odgovor
{
"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 iz tega, kar se je vrnilo, saj ponudniki poročajo drugače: tool_calls Ko je model zahteval orodja, length ko je odgovor uporabil vsak žeton, ki je bil dovoljen (ali jih je model porabil vse razmišljanje in ni napisal nobenega odgovora), content_filter če ponudnik zavrne, in stop
Drugače pa usage.completion_tokens_details.reasoning_tokens je vedno 0: skriti tokeni razlage se štejejo in zaračunajo v completion_tokens.
| statusa | Kdaj |
|---|---|
400 | ne model ali messages (missing_required_parameter); avdio ali datotečni del ali slike za model, ki jih ne more videti (unsupported_content); več kot 20 slik (too_many_images); vzorčni parameter napačnega tipa ali izven razpona (invalid_value); povezava na sliko, ki ni javna (invalid_image_url); orodja na modelu, ki jih ne more imenovati (unsupported_tool); n drugače kot 1; a :thinking inštrukcije, ki je ni mogoče razumeti (model_not_found); ali ponudnik zavrne zahtevo (upstream_rejected). |
402 | Bilanca, ki jo model porabi, ne more pokriti posesti. |
403 | Najslabši primer ne ustreza ključavnici (key_limit_reached• nižje max_tokens Ali pa dvignite glavo. |
404 | Ne obstaja model s tem imenom (model_not_found). |
429 | Omejitev stopnje ključa ali ponudnika (upstream_rate_limited). |
502, 503 | Proizvajalec ni uspel (upstream_error) ali je preobremenjen (upstream_overloaded, z Retry-AfterNič se ne zaračuna, razen če je ponudnik zaračunal za poskus. |
Statusne kode vsakega končnega deleža so navedene pod Napake.
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);
Streaming
z "stream": true Odgovor pride kot dogodek, ki ga pošlje strežnik, medtem ko ga model piše. chat.completion.chunk je a data: line, in tok se konča z data: [DONE]Razumevanje prihaja v
delta.reasoning_contentOdgovor v delta.content.
Pretakajte vse, kar lahko traja več kot približno 100 sekund, na primer dolg odgovor, velik
max_tokens Zahteva, ki se ne pretaka, ne pošlje ničesar, dokler odgovor ni končan, in omrežje med vami in Nymbotom lahko zapre prazno povezavo po približno 100 sekundah; model še vedno konča in tisto, kar je napisal, se naloži, vendar je odgovor izgubljen.
Stream
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]
- Linije, ki se začnejo z
:so komentarji, ki se pošiljajo vsakih 15 sekund, medtem ko model razmišlja. - Vprašajte za
"stream_options": {"include_usage": true}da bi dobili zadnji kos zgoraj, s praznimchoices, token šteje, stroški innymbotObjekt je . - Če zaprete povezavo zgodaj, se model ne ustavi: Nymbot bere preostanek ponudnikovega toka, do 25 sekund, da dobi svoj število žetonov, in plačate, kar ponudnik poroča.
- Napaka pred prvim delom, kot je
401ali402, se vrne kot običajen JSON s svojo kodo stanja, ne kot tok. Napaka po začetku toka pride kot zadnjidata: {"error": {…}}dogodek, in tok se konča brez[DONE]. - Zahteve z orodji in modeli na transportu Odgovori OpenAI ne pretakajo od ponudnika. Še vedno odgovarjajo z veljavnim tokom, poslanim, ko je odgovor končan.
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);
}
Orodja za klice
Opis funkcij v tools in model lahko zahteva, da se nekdo pokliče namesto odgovora. Zaženete funkcijo in jo dodate kot rezultat tool Sporočilo z istim
tool_call_idNymbot nikoli ne izvaja vaših funkcij; modelovo zahtevo vam pošlje nazaj.
tool_choice vzame "auto", "none",
"required" ali {"type": "function", "function": {"name": "…"}}Seznam modelov označuje, kateri modeli lahko kličejo orodja (capabilities.toolsOrodja so zavrnjena z 400 unsupported_tool je nymbot/auto in na nekaj kataloških modelih, ki se izvajajo na transportu OpenAI's Responses, na katere Nymbot ne more prenesti orodij.
z "stream": true, zahteva z orodji teče v enem kosu in se nato pošlje kot normalna sekvenca: vloga, en kos, ki nosi vsak klic orodja s svojim indeksom, id, ime in argumenti ter končni del.
Odgovor je delno
"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);
Fotografije v zahtevku
Modeli z capabilities.vision lahko preberete slike. dodaj image_url
del uporabniškega sporočila, bodisi z občinstvom https:// povezava ali a
data:image/…;base64, URL. Do 20 slik na zahtevo. SVG slike so zavrnjene, tako da je povezava več kot 4096 znakov ali ena z uporabniškim imenom ali geslom v njej (400 invalid_image_url• Opcijsko detail je
auto, low ali high.
z nymbot/auto, je zahteva s sliko v njej usmerjena na standardni model, ki ga lahko vidi. capabilities.vision zavrača slike z
400 unsupported_contentSlike so lahko le v uporabniških sporočilih.Povezava mora kazati na javni gostitelj; Nymbot posreduje sliko ponudniku modela in je ne shrani.
Slika se zaračuna kot vhodni žetoni, ki jih ponudnik šteje za to, tako kot preostanek zahteve.
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);
Razumevanje
Modeli z capabilities.reasoning lahko razmislijo, preden odgovorijo. prosite za več ali manj reasoning_effort ("minimal", "low",
"medium" ali "high") ali "reasoning": {"effort": "high"}ali pa dodaj :thinking ime modela, kar pomeni velik napor. Na modelu brez obrazložitve je nastavitev prezrta. nymbot/auto, :thinking zahtevo pošlje na standardno pot obrazložitve.
Na Anthropic modelih prizadevanje postane proračun za razmišljanje približno 1.000, 2.000, 8.000 ali 16.000 žetonov, nikoli več kot max_tokens Razmišljanje je prepuščeno, ko
tool_choice naredi orodje, in ko zahteva nadaljuje z orodjem (njeno zadnje sporočilo je rezultat orodja), ker Anthropic potrebuje prej podpisano razmišljanje, da ga nadaljuje.
Razlogi se vračajo v message.reasoning_contentali
delta.reasoning_content ko pretakanje, nikoli ne mešamo v odgovor. Razumevanje je izhod in se zaračuna kot tak, znotraj completion_tokensNekateri ponudniki sploh ne vrnejo besedila obrazložitve in se še vedno zaračuna.
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);
Vzorčni suffixes
Dodatek na ime modela spremeni način obdelave zahteve, brez drugega polja. Delajo na polnih ID-jih in kratkih imenih enako, kot v anthropic/claude-sonnet-5:online.
| zadostuje | Učinek |
|---|---|
:online | Najprej poiščite spletno stran, kot plugins: [{"id": "web"}]to je spletno iskanje. |
:thinking | Visoko racionalno delo; na nymbot/autoNa modelu, ki ne more razumeti, 400 model_not_found z “ nobenih končnih točk najdenih”. |
:nitro, :floor, :exacto, :extended | Vsak model kataloga ima eno pot, tako da ni hitrejše, cenejše ali daljše, da izberejo; priponke so dovoljene, tako da imena modelov, kopirane iz drugih storitev še vedno delujejo. |
Vsak drugi dodatek je ignoriran. Celotno ime je preizkušeno najprej, tako da model, katerega ID dejansko vsebuje kolon, še vedno deluje; v nasprotnem primeru se dodatki vzamejo iz konca enkrat naenkrat, dokler se model ne ujema. 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);
spletno iskanje
Nymbot išče zadnje uporabniško sporočilo (njihovih prvih 2000 znakov), bere najboljše strani in jih daje modelu z vprašanjem, označenim kot zunanja vsebina, iz katere model ne sme sprejeti navodil.
- Vedno iskanje:
"plugins": [{"id": "web", "max_results": 5}]ali pa a:onlineDovolj za model. - Poiščite, kdaj pomaga:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Sprejeto tudi kotweb_search_previewaliopenrouter:web_searchNymbot išče le, ko se zdi, da vprašanje potrebuje trenutne informacije, isti test, ki ga uporablja aplikacija.
max_results je privzeto 5 in največ 10. viri se vrnejo v
nymbot.web_search.sourcesVsak z a title, snippet in
urlin kot url_citation Opozorila na sporočilo.
Vsako iskanje, ki teče, stane $ 0,008, pretvorjeno v sats, na vrhu žetonov, in je del zadrževanja.Strani, ki jih berejo, so tudi vhodni žetoni, zato je odgovor iz spleta stane več kot isto vprašanje, ki je bilo hladno, včasih večkrat več.
Odgovor je delno
"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);
Odgovori na API
Novejša oblika OpenAI, ki jo uporabljajo OpenAI Agents SDK in Codex. Teče na istih modelih, obračunavanju in funkcijah kot Chat Completions.
POST https://nymbot.ai/api/v1/responses Potrebujete API ključ.
| polje | Vrsta | Potrebno | Opis |
|---|---|---|---|
model | String | ja | kot za Chat dopolnitevDodatki so vključeni. |
input | String ali array | ja | niz ali seznam elementov: sporočila (vloge user, assistant, system, developer) z input_text, input_image in output_text delih in function_call in function_call_output Predmeti za orodja. input_image vzemite eno image_url povezavo ali podatkovni URL, ne ID datoteke. reasoning in web_search_call predmeti so izpuščeni; item_reference je zavrnjeno |
instructions | String | ne | Navodila za sistem. |
max_output_tokens | integer | ne | Največ žetonov za pisanje. |
temperaturetop_p | število | ne | Sampling kontrolniki, kjer jih model vzame. |
toolstool_choiceparallel_tool_calls | Array, String ali Object, Boolean | ne | Funkcije orodja, v obliki Odgovori ({"type": "function", "name": …, "parameters": …}) a web_search ali web_search_preview Orodje se spremeni spletno iskanje ko pomaga. Druga vgrajena orodja so zavrnjena. |
reasoning | predmetov | ne | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh in max pomeni high; none Odklopite ga |
text.formatresponse_format | predmetov | ne | strukturiranega izhoda, kot je shema JSON ali json_object. |
metadata | predmetov | ne | Vrne nespremenjeno v odgovoru. pri največ 16 vrednostih nizov, ključi do 64 znakov in vrednosti do 512. |
stream | booljan | ne | Stream dogodke, kot je opisano spodaj. |
store | booljan | ne | Nič ni shranjeno, in odgovor vedno pravi "store": false. |
previous_response_idconversationbackground | String, Objekt in Boolean | ne | Ni podprto : 400 unsupported_parameterOdgovori niso shranjeni, zato pošljite celoten pogovor v input Vsakič pa |
Odgovor
{
"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 }
}
Zahteva za orodje se prikaže v output kot a function_call Točka z
call_id, name in arguments, pošljite rezultat nazaj kot a
function_call_output Točka z enakim call_idRazumevanje, ko ga model vrne, je reasoning Točka z reasoning_text vsebino, ki je navedena najprej. status je incomplete Ko je odgovor zadel
max_output_tokens ali pa je ponudnik zavrnil,
incomplete_details.reason nastavite na max_output_tokens ali
content_filterOdgovor odmeva tudi nastavitve zahteve (temperatura, orodja, izbira orodja in tako naprej), kot to počne OpenAI, in prenaša nymbot stroški predmeta.
Streamed, vsak dogodek je event: Linija in a data: Linija z a
sequence_numberV tem vrstnem redu: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedVsako število response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneIn končno response.completed z uporabo in stroški. odgovor skrajša kratke konce z response.incomplete namesto, in neuspeh, ko se je tok začel z response.failedRazumevanje tokov kot lastnega predmeta z response.reasoning_text.delta in .doneKlic orodja pride po sporočilu, vsak kot element z response.function_call_arguments.delta
in .done.
| statusa | Kdaj |
|---|---|
400 | ne model ali input; previous_response_id, conversation, background ali enega item_reference (unsupported_parameter); nepodprto orodje ali vrsta vsebine. |
402, 403, 404, 429, 502, 503 | Kar se tiče chat končnic. |
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);
Antropična sporočila
Format Anthropic, za Anthropic SDK in Claude Code. Deluje z vsakim modelom v katalogu, ne samo Claude: zahteva je prevedena, teče skozi isto cevovodo in prevedena nazaj.
POST https://nymbot.ai/api/v1/messages — potrebuje ključ API, kot x-api-key ali Authorization: Bearer.
za anthropic-version in anthropic-beta Antropična imena modelov se ujemajo s katalogom, zato Claude Code in SDK delujejo z imeni, ki jih že uporabljajo:
- Ime, ki ga katalog pozna, kot je
claude-sonnet-5alianthropic/claude-opus-5Uporablja se kot je. - V nasprotnem primeru datum (
-20260514),-latest, različica tag kot-v1V takšnem zapuščenem dnevu, kot[1m]in enegaanthropic/alianthropic.Predpona se odstrani in točke in podobe v različici se preizkusijo na oba načina (claude-haiku-4-5najdeclaude-haiku-4.5). - Če se to še vedno ne ujema, se uporabi družina (Opus, Sonnet ali Haiku), če je različica kataloga enaka ali novejša od tiste, ki jo je zahtevala.
- Ime, ki se ne ujema z ničemer, se vrne
404not_found_error.
| polje | Vrsta | Potrebno | Opis |
|---|---|---|---|
model | String | ja | Katalog ID modela ali Anthropic ime modela. |
max_tokens | integer | ja | Največ žetonov za pisanje. |
messages | Array | ja | user in assistant Vrti se, z text, image (base64 ali vir URL) tool_use in tool_result Blokiraj thinking Bloki iz prejšnjih vrtljajev so sprejeti in spuščeni. |
system | String ali array | ne | Sistemski priročnik, kot niz ali besedilne bloke. |
temperaturetop_p | število | ne | Sampling kontrolniki, kjer jih model vzame. top_k je sprejet in padel. |
stop_sequences | Število stringov | ne | Besedilo, ki se konča z odgovorom. Največ 4 nizov, vsak največ 256 znakov. |
toolstool_choice | Array, predmeti | ne | Orodja z name, description in input_schema• A web_search Server orodje se obrne na spletno iskanjeDruga vgrajena orodja Anthropica (bash, urejevalnik besedila, uporaba računalnika) so zavrnjena unsupported_tool. tool_choice vzame auto, any, tool ali none, in disable_parallel_tool_use. |
thinking | predmetov | ne | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} ali {"type": "disabled"}Proračun izbere raven napora: pod 2.048 minimalno, od 2.048 nizko, od 8.192 srednje, od 16.384 visoko. output_config.effortAli pa visoko. |
stream | booljan | ne | Stream v obliki dogodka Anthropic. |
metadata | predmetov | ne | Sprejeto in prezrto. |
Odgovor
{
"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 Lahko tudi držijo tool_use Bloki in a thinking
Blok, ki ga signature Je pa prazna. stop_reason je
end_turn, max_tokens, tool_use ali refusalDelal je na enak način kot finish_reason je
Chat dopolnitev; stop_sequence Vedno je
null, tudi ko stop zaporedje končal odgovor. input_tokens šteje samo sveže vnose; vnos v predpomnilniku je v dveh predpomnilniških poljih.
nymbot Objekt in X-Nymbot-Cost-Sats še header
Streamed, dogodki so Anthropic's: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta ali thinking_delta),
content_block_stop, message_delta z razlogom za ustavitev, uporabo in nymbot stroški objekta in message_stop• A ping pošlje tudi vsakih 15 sekund, medtem ko model deluje. Klic orodja pride po besedilu, vsak kot
tool_use blok s celotnim vhodom v eno input_json_delta.
Napake na tej končni točki uporabljajo obliko zapisa Anthropic:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}Kratko ravnovesje je 402 billing_errorPreobremenjeni ponudnik
503 overloaded_errorNeuspeh po začetku toka se pošlje kot error dogodek .
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);
Štetje tokenov
Ocenjevanje, koliko vhodnih žetonov bi zahteva za sporočila uporabila, tako da lahko odjemalec preveri, preden pošlje.
POST https://nymbot.ai/api/v1/messages/count_tokens — potrebujete API ključ. brezplačno.
Telo je enako kot sporočilBrez max_tokens; ime modela mora rešiti. Štetje je ocena: znaki sistemskega obvestila, sporočila, klice orodij in opredelitve orodij so razdeljeni na štiri, plus 1600 za vsako sliko. To ni lastni tokenizer ponudnika, zato se lahko dejansko štetje razlikuje. Ključ, ki je dosegel svojo mejo, ga lahko še vedno uporablja.
Odgovor
{ "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);
Seznam modelov
Vsak model in generator, ki ga sprejme API, s tem, kar stane.Seznam se bere iz istega kataloga v živo kot izbira aplikacije, zato bo strežnik vedno deloval.
GET https://nymbot.ai/api/v1/models — ni potreben ključ. Skrit za pet minut.
GET /api/v1/models/{id} vrne eno vstopnico.
| polje | Vrsta | Potrebno | Opis |
|---|---|---|---|
type | String (poizvedba) | ne | chat (v primeru nepravilnosti) image, video, audio, embedding ali allNekaj jih je mogoče dati, kot image,video. |
Cene so tisto, kar plačate, s pristojbino in maržo že v, v dolarjih in v stopnjah po trenutni ceni Bitcoin. balance določa, kateri model porabi.
nymbot_key je kratko ime modela v aplikaciji. created je vedno 0, ker katalog ne beleži, kdaj je bil model dodan. per_request namesto tega.
nymbot/auto je vedno najprej, cena kot variable, z a
routes seznam, ki prikazuje stopnje vsake standardne poti. navaja vizijo in razmišljanje, ne pa orodij.
GET /api/v1/models/{id} sprejmejo enaka imena in vzdevke kot zahtevo in vrnejo vnos za model, za katerega se odločijo.
Odgovor
{
"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"
}
]
}
Za druge vrste:
- sliko Vstopnice imajo
capabilities(accepts_image_url,requires_image_url,edit) in cenaper_generation. - Video posnetki Vstopnice imajo
max_duration_secondsinresolutionsIn tudi cenaper_secondza vsako resolucijo. - Audija Vstopnice imajo
audio_typespeechalitranscriptionCena jeper_1k_charsaliper_minute. - Vstavljanje Vstopnice imajo
dimensions,context_length,max_inputsin cena na milijon vhodnih žetonov.
Označene cene "estimated": true je ocena aplikacije za generator, katerega cena ni objavljena. type Vrnitev 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);