Baza znanja Razvijači
Chat, odgovori i poruke
Tri načina da se nešto zatraži od modela, u tri formata klijenti već govore, svi rade na istim modelima i obračunavaju na isti način.
Ova stranica je strojno prevedena radi praktičnosti. Engleski original je verzija koja se primjenjuje.
Chat kompleti
OpenAI chat format, i onaj koji podržava gotovo svaki alat. Pošaljite razgovor do sada i dobijte sledeću poruku natrag.
POST https://nymbot.ai/api/v1/chat/completions Potreban vam je API ključ.
samo model i messages su potrebni. parametar uzorkovanja koji odabranog modela ne uzima pada bez greške, tako da jedno tijelo zahteva radi preko modela. supported_parametersOno što se odbija umjesto da se odbaci je nešto što model uopšte ne može učiniti: slike za model koji ne može vidjeti, alate za model koji ih ne može nazvati.
| Polje | Vrste | Potrebno | Opis |
|---|---|---|---|
model | Struktura | Da | nymbot/auto ili auto) za usmjeravanje Nymbota na standardnu ravnotežu, ili ID modela kataloga kao što je anthropic/claude-sonnet-5 na Pro ravnoteži. Kratka imena i nadimci aplikacije su takođe prihvaćeni. Može završiti u Dovoljno. |
messages | Arhiva | Da | Razgovori, uloge system, developer (tretiran kao sistem) user, assistant i toolSadržaj je niz ili lista text i image_url dijelovi; slike samo u korisničkim porukama. input_audio i dijelovi datoteke su odbijeni. |
stream | Bošnjaci | Ne | Pošaljite odgovor kao što je napisano.Vidi Streamiranje. |
stream_options | objekata | Ne | {"include_usage": true} dodaje konačni komad s brojevima žetona i troškovima. |
max_tokensmax_completion_tokens | Integracija | Ne | Najviše žetona za pisanje. Smanjeno na maksimum modela ako je viši. Takođe određuje koliko se drži iz vaše bilance, tako da manji broj treba manje kredita za početak. |
temperaturetop_p | Broj | Ne | Sampling kontrole : temperature od 0 do 2, top_p Od 0 do 1. |
stop | String ili array | Ne | Tekst koji završava odgovor: niz ili najviše 4 niza, od kojih svaki ima najviše 256 znakova. nymbot/auto. |
seed | Integracija | Ne | Za ponavljanje uzorkovanja, gde ga model podržava. |
presence_penaltyfrequency_penalty | Broj | Ne | Kontrole ponavljanja, svaka od -2 do 2. |
response_format | objekata | Ne | {"type": "json_object"} ili {"type": "json_schema", "json_schema": {…}}, gde model podržava. ne koristi nymbot/auto. |
toolstool_choiceparallel_tool_calls | array, string ili objekt, boolean | Ne | Funkcija poziva. vidi alat za pozivanje• A web_search Oprema se pretvara u Web pretraživanjeNajviše 128 alata i 512 KB definicija, ugrađenih na najviše 64 nivoa dubine; više je 400. |
reasoning_effortreasoning | Struktura, objekat | Ne | "minimal", "low", "medium" ili "high"ili {"effort": "high"}. "none" ili {"enabled": false} Uklonite ga.Vidi Razumevanje. |
plugins | Arhiva | Ne | [{"id": "web", "max_results": 5}] uvek pretraži web prvo. Do 10 rezultata. |
n | Integracija | Ne | Samo 1. sve ostalo se vraća 400. |
logit_biasusermetadata | String, String i objekat | Ne | Prihvatio i nije poslao. logit_bias karte na najviše 300 token ids za brojeve od -100 do 100; user Najviše 256 karaktera metadata sadrži najviše 16 vrednosti niza, ključeve do 64 karaktera i vrednosti do 512. |
Odgovor je običan chat.completionUz troškove u usage.cost
(u dolarima) i u nymbot objekta je model je rešen model id, tako da kratko ime dolazi nazad kao pun. Ako je model obrazložen prije odgovaranja, njegov obrazloženje je u message.reasoning_contentodvojeno 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 je izrađen od onoga što se vratilo, budući da pružatelji izvještavaju drugačije: tool_calls Kada je model zatražio alate, length kada je odgovor koristio svaki dozvoljeni token (ili ih je model potrošio na rasuđivanje i nije napisao odgovor), content_filter kada je pružatelj odbio, i stop
U suprotnom usage.completion_tokens_details.reasoning_tokens je uvek 0: sakriveni razmatranje žetoni se računaju, i naplaćuje, u completion_tokens.
| Status | Kada |
|---|---|
400 | Ne model ili messages (missing_required_parameter); audio ili datotečni deo, ili slike za model koji ih ne može vidjeti (unsupported_content); više od 20 slika (too_many_images); uzorak parametar pogrešnog tipa ili van opsega (invalid_value); slika link koji nije javni (invalid_image_url); alate na modelu koji ih ne mogu nazvati (unsupported_tool); n osim 1; a :thinking suffiks na modelu koji ne može razumjeti (model_not_found); ili je pružatelj odbio zahtjev (upstream_rejected). |
402 | Bilanca koju model troši ne može pokriti držanje. |
403 | Najgori slučaj ne odgovara ključevoj kapi (key_limit_reachedNiže max_tokens Ili podignite kap. |
404 | Nema modela s tim imenom (model_not_found). |
429 | Ograničenje stope ključa ili pružatelja usluga (upstream_rate_limited). |
502, 503 | Proizvođač nije uspeo (upstream_error) ili je preopterećena (upstream_overloaded, sa Retry-AfterNišta se ne naplaćuje osim ako pružatelj ne naplaćuje za pokušaj. |
Statusni kodi za svaku akciju u krajnjoj tački navedeni su ispod greške.
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);
Streamiranje
sa "stream": true odgovor stiže kao događaj poslat od strane servera dok ga model piše. chat.completion.chunk U pitanju je data: linija, a tok završava s data: [DONE]Razum dolazi u
delta.reasoning_contentOdgovor u delta.content.
Stream bilo šta što može potrajati duže od oko 100 sekundi, kao što je dug odgovor, veliki odgovor.
max_tokens ili model razmatranja. Zahtjev koji se ne prenosi ne šalje ništa dok odgovor nije završen, a mreža između vas i Nymbota može zatvoriti praznu vezu nakon otprilike 100 sekundi; model još uvijek završava i ono što je napisao je napunjeno, ali odgovor je izgubljen.
struja
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 koje počinju sa
:su komentari koji se šalju svakih 15 sekundi dok model razmišlja. - Pitajte za
"stream_options": {"include_usage": true}da biste dobili poslednji komad iznad, sa praznimchoices, token broji, trošak inymbotobjekta je - Nymbot čita ostatak pružateljevog toka, do 25 sekundi, da bi dobio svoj broj tokena, a vi plaćate ono što pružatelj izvještava. Bez tog broja, naknada se procjenjuje na osnovu vašeg unosa i onoga što je napisano, plus čitava dozvola za izlazak za model iz tih razloga.
- Greška prije prvog čunja, kao što je
401ili402, se vraća kao običan JSON sa svojim statusnim kodom, a ne kao tok.data: {"error": {…}}događaj, a tok završava bez[DONE]. - Zahtjevi sa alatima i modelima na OpenAI-ovom transportu odgovora, ne protječu od pružatelja. Oni i dalje odgovaraju valjanim tokom, poslanim kada je odgovor potpun.
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 za pozivanje
Opis funkcija u tools i model može zatražiti da se neko pozove umesto da odgovara. Pokrećete funkciju, dodajte njen rezultat kao tool Poruka s istim
tool_call_idNymbot nikada ne pokreće vaše funkcije; on prenosi molbu modela natrag na vas.
tool_choice uzeti "auto", "none",
"required" ili {"type": "function", "function": {"name": "…"}}Model lista označava koje modele možete pozvati alate (capabilities.tools). alat je odbijen sa 400 unsupported_tool je nymbot/auto i na nekoliko modela kataloga koji se pokreću na transportu OpenAI Responses, na koje Nymbot ne može prenijeti alate.
sa "stream": true, upit sa alatima radi u jednom komadu i zatim se šalje kao normalna sekvenca: uloga, jedan komad koji nosi svaki alat poziv sa svojim indeksom, id, ime i argumenti, i krajnji komad.
Odgovor, delimično
"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 u zahtjevu
Modeli sa capabilities.vision može čitati slike. Dodaj image_url
dio korisničke poruke, sa ili s javnošću https:// Link ili A
data:image/…;base64, URL. Do 20 slika po zahtjevu. SVG slike su odbijene, a tako je poveznica preko 4096 znakova ili jedna s korisničkim imenom ili lozinkom u njoj (400 invalid_image_url• Opcionalno detail je
auto, low ili high.
sa nymbot/auto, zahteva sa slikom u njoj je usmjerena na standardni model koji može da vidi. capabilities.vision Odbijanje slika sa
400 unsupported_contentSlike mogu biti samo u korisničkim porukama. Poveznica mora ukazati na javni host; Nymbot prenosi sliku davatelju modela i ne čuva je.
Slika se naplaćuje kao ulazni žetoni koje pružatelj računa za nju, kao i ostatak zahteva.
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 sa capabilities.reasoning mogu razmišljati prije nego što odgovore. zatražiti više ili manje od toga sa reasoning_effort ("minimal", "low",
"medium" ili "high") ili "reasoning": {"effort": "high"}ili dodati :thinking na ime modela, što znači veliki napor. Na modelu bez razmatranja postavka se ignorira. nymbot/auto, :thinking šalje zahtjev na standardni put razmatranja.
Na Anthropic modelima napor postaje proračun za razmišljanje od oko 1.000, 2.000, 8.000 ili 16.000 žetona, nikada više od max_tokens dozvoljava. razmišljanje je ostavljeno kada
tool_choice prisiljava alat, a kada zahtjev nastavlja alatnu struju (njegova posljednja poruka je rezultat alata), jer Anthropic treba ranije potpisano razmišljanje da bi ga nastavio.
Razum se vraća u message.reasoning_contentili
delta.reasoning_content kada je streaming, nikada se ne miješa u odgovor. Razumevanje je izlaz i naplaćuje se kao takav, unutar completion_tokensNeki pružatelji usluga ne vraćaju tekst obrazloženja, a on se još uvek naplaćuje.
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);
Modeli suffixes
Sufix na imenu modela menja način na koji se obrađuje zahtjev, bez drugog polja. Oni rade na punim idima i kratkim imenima jednako, kao u anthropic/claude-sonnet-5:online.
| Dovoljno | Uticaj |
|---|---|
:online | Pretraži web prvo, kao plugins: [{"id": "web"}]ovo Web pretraživanje. |
:thinking | Visoki razmatranje napora; na nymbot/auto, put rasuđivanja. Na modelu koji ne može razumeti, 400 model_not_found sa “ nema pronađenih krajnjih tačaka”. |
:nitro, :floor, :exacto, :extended | Svaki model kataloga ima jedan put, tako da nema bržeg, jeftinijeg ili dužeg puta za odabir; sufiksi su dozvoljeni tako da imena modela kopirana iz drugih usluga i dalje rade. |
Svaki drugi dodatak se ignorira. Cijelo ime se prvo pokuša, tako da model čiji ID stvarno sadrži kolon još uvijek radi; u suprotnom, dodatak se uzima s kraja jedan po jedan dok se model ne podudara. 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);
Web pretraživanje
Nymbot traži zadnju korisničku poruku (njihovih prvih 2000 znakova), čita najbolje stranice i daje ih modelu sa pitanjem, označenim kao spoljni sadržaj iz kojeg model ne bi trebao uzimati upute.
- Uvek u potrazi:
"plugins": [{"id": "web", "max_results": 5}]ili a:onlinesuffix na modelu. - Pronađite kada pomaže:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Takođe prihvaćen kaoweb_search_previewiliopenrouter:web_searchNymbot pretražuje samo kada pitanje izgleda kao da mu je potrebna trenutna informacija, isti test koji aplikacija koristi.
max_results je 5 podrazumevano i na najviše 10. izvori se vraćaju u
nymbot.web_search.sourcesSvaki od njih sa a title, snippet i
urli kao url_citation Napomene na poruku.
Svaka pretraga koja radi košta 0,008 dolara, pretvorena u sats, na vrhu žetona, a to je deo držanja. stranice koje čita su i ulazni žetoni, tako da odgovor s interneta košta više od istog pitanja postavljenog hladno, ponekad nekoliko puta više.
Odgovor, delimično
"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 API
Noviji format OpenAI-a, koji koristi OpenAI Agents SDK i Codex. Radi na istim modelima, obračunavanju i funkcijama kao i Chat Completions.
POST https://nymbot.ai/api/v1/responses Potreban vam je API ključ.
| Polje | Vrste | Potrebno | Opis |
|---|---|---|---|
model | Struktura | Da | Kao za Chat kompletiSufiše su uključene. |
input | String ili array | Da | Red ili lista stavki: poruke (rolovi user, assistant, system, developer) sa input_text, input_image i output_text dijelova i function_call i function_call_output Predmeti za alate. input_image Uzmi jedan image_url link ili URL podataka, a ne id datoteke. reasoning i web_search_call predmeti su preskočeni; item_reference je odbijen. |
instructions | Struktura | Ne | Upute za sistem. |
max_output_tokens | Integracija | Ne | Najviše tokena za pisanje. |
temperaturetop_p | Broj | Ne | Sampling kontrole, gde ih model uzima. |
toolstool_choiceparallel_tool_calls | array, string ili objekt, boolean | Ne | Funkcije alata, u obliku odgovora ({"type": "function", "name": …, "parameters": …}) a web_search ili web_search_preview Oprema se pretvara u Web pretraživanje kada pomaže. Ostali ugrađeni alati su odbijeni. |
reasoning | objekata | Ne | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh i max Značenje high; none Okrenite ga. |
text.formatresponse_format | objekata | Ne | Strukturirani izlaz, kao JSON shema ili json_object. |
metadata | objekata | Ne | Vrati nepromijenjeno u odgovoru Na najviše 16 vrednosti niza, ključeve do 64 karaktera i vrednosti do 512. |
stream | Bošnjaci | Ne | Stream događanja kao što je opisano ispod. |
store | Bošnjaci | Ne | Ništa se ne čuva, a odgovor uvijek kaže "store": false. |
previous_response_idconversationbackground | String, Objekt i Boolean | Ne | Nije podržan: 400 unsupported_parameterOdgovori se ne pohranjuju, pa pošaljite ceo razgovor u input Svaki put |
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 }
}
Zahtjev za alat se pojavljuje u output kao a function_call Odlomak sa
call_id, name i argumentspošaljite rezultat nazad kao a
function_call_output Predmet sa istim call_idRazumevanje, kada ga model vrati, je reasoning Odlomak sa reasoning_text Sadržaj, prvi na listi. status je incomplete Kada odgovor udari
max_output_tokens ili pružatelj usluga odbio, sa
incomplete_details.reason Postavite max_output_tokens ili
content_filterOdgovor takođe odjekuje postavke zahtjeva (temperatura, alat, izbor alata i tako dalje) kao što to čini OpenAI, i prenosi nymbot Cijena objekta
Streaming, svaki događaj je event: linija i a data: linija sa a
sequence_numberU ovom redoslijedu: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedBilo koji broj response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.donei konačno response.completed uz upotrebu i troškove. odgovor skraćuje kratke završetke sa response.incomplete umjesto toga, i neuspjeh nakon što je potok počeo s response.failedRazumevanje tokova kao vlastite stavke sa response.reasoning_text.delta i .donePozivi alata dolaze nakon poruke, svaki kao stavka sa response.function_call_arguments.delta
i .done.
| Status | Kada |
|---|---|
400 | Ne model ili input; previous_response_id, conversation, background ili jedan item_reference (unsupported_parameter); alat ili tip sadržaja koji nije podržan. |
402, 403, 404, 429, 502, 503 | Što se tiče chat kompleta. |
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);
Antropske poruke
Anthropic je format, za Anthropic SDK i Claude Code. Radi sa svakim modelom u katalogu, ne samo Claude: zahtjev se prevodi, radi kroz istu cijev i prevodi nazad.
POST https://nymbot.ai/api/v1/messages – potreban je API ključ, kao što je x-api-key ili Authorization: Bearer.
Naši anthropic-version i anthropic-beta Antropična imena modela podudaraju se sa katalogom, tako da Claude Code i SDK-ovi rade sa imenima koja već koriste:
- Ime koje katalog zna, kao što je
claude-sonnet-5ilianthropic/claude-opus-5Koristi se onako kako je. - U svakom slučaju, datum (
-20260514),-latest, verziju tag kao što je-v1, bracketed tag kao što su[1m]i jedananthropic/ilianthropic.Prefiks se uklanja, a točke i točke u verziji se pokušavaju na oba načina (claude-haiku-4-5Pronađiteclaude-haiku-4.5). - Ako to još uvek ne odgovara, koristi se porodica (Opus, Sonnet ili Haiku), pod uvjetom da je verzija kataloga ista ili novija od one za koju je zatražena.
- Ime koje se ne podudara sa ničim vraća se
404not_found_error.
| Polje | Vrste | Potrebno | Opis |
|---|---|---|---|
model | Struktura | Da | Katalog ID modela ili Anthropic ime modela. |
max_tokens | Integracija | Da | Najviše tokena za pisanje. |
messages | Arhiva | Da | user i assistant Kretanje, sa text, image (base64 ili izvorni URL), tool_use i tool_result Blokovi thinking Blokovi iz ranijih krugova su prihvaćeni i odbačeni. |
system | String ili array | Ne | Sistemski prompt, kao niz ili tekstualni blokovi. |
temperaturetop_p | Broj | Ne | Sampling kontrole, gde ih model uzima. top_k Prihvaćen je i odbačen. |
stop_sequences | Uslovi korišćenja stringova | Ne | Tekst koji završava odgovor. Najviše 4 niza, od kojih svaki ima najviše 256 znakova. |
toolstool_choice | objekat, objekat | Ne | Oprema sa name, description i input_schema• A web_search Server alat se pretvara u Web pretraživanjeAnthropic druge ugrađene alate (bash, tekst urednik, računalo korišćenje) su odbijeni sa unsupported_tool. tool_choice uzeti auto, any, tool ili nonei disable_parallel_tool_use. |
thinking | objekata | Ne | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} ili {"type": "disabled"}Proračun odabire nivo napora: ispod 2.048 minimalno, od 2.048 nisko, od 8.192 srednje, od 16.384 visoko. output_config.effortili visoka. |
stream | Bošnjaci | Ne | Stream u Anthropic-ovom formatu događaja. |
metadata | objekata | Ne | Prihvaćeno i ignorisano. |
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 Takođe možete držati tool_use Blokovi i A thinking
Blok, koji je signature On je prazan. stop_reason je
end_turn, max_tokens, tool_use ili refusalRadili su na isti način kao i finish_reason je
Chat kompleti; stop_sequence Uvek je
null, čak i kada je stop sekvenca završila odgovor. input_tokens Broji se samo svježi unos; cached input je u dva polja za cache.
nymbot Objekti i X-Nymbot-Cost-Sats Šta je header?
Streamed, događaji su Anthropic's: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta ili thinking_delta),
content_block_stop, message_delta uz razlog za zaustavljanje, upotrebu i nymbot Trošak objekta i message_stop• A ping takođe se šalje svakih 15 sekundi dok model radi. Pozivi alata stižu nakon teksta, svaki kao
tool_use blok sa svojim celokupnim ulazom u jednom input_json_delta.
Greške na ovoj krajnjoj tački koriste Anthropic format:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}Kratka ravnoteža je 402 billing_errorPreopterećeni dobavljač
503 overloaded_errorNeuspjeh nakon što je stream počeo šalje se kao error događaja .
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);
Brojanje tokena
Procjena broja ulaznih žetona koje bi upit za poruke koristio, tako da klijent može proveriti pre nego što pošalje.
POST https://nymbot.ai/api/v1/messages/count_tokens Potreban vam je API ključ.
Tijelo je isto kao i PorukeBez max_tokens; ime modela mora da se riješi. Broj je procjena: znakovi sistemskog uputstva, poruka, poziva alata i definicija alata podijeljeni sa četiri, plus 1,600 za svaku sliku. To nije sam tokenizer pružatelja, tako da se pravi broj može razlikovati.
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);
Popis modela
Svaki model i generator koji API prihvata, sa onim što košta.Lista se čita iz istog kataloga uživo kao i aplikacijski picker, tako da je to uvek ono što će server pokrenuti.
GET https://nymbot.ai/api/v1/models — nije potreban ključ. Sakriveno pet minuta.
GET /api/v1/models/{id} Vraća jedan ulaz.
| Polje | Vrste | Potrebno | Opis |
|---|---|---|---|
type | String (preuzimanje pitanja) | Ne | chat (u slučaju neispunjavanja obaveza), image, video, audio, embedding ili allNekoliko se može dati, kao image,video. |
Cijene su ono što plaćate, uz naknadu i maržu već u, u dolarima i u ratama po trenutnoj ceni Bitcoina. balance kaže koji balans model troši.
nymbot_key je kratko ime modela u aplikaciji. created uvek je 0, jer katalog ne bilježi kada je model dodan. per_request umjesto toga.
nymbot/auto Uvek je prvi, cijena kao variableUz a
routes lista koja daje stopu svakog standardnog putovanja. Ona navodi viziju i razmatranje, ali ne i alate.
GET /api/v1/models/{id} prihvaća ista imena i nadimke kao zahtjev i vraća unos za model na koji se odlučuju.
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"
}
]
}
Ostali tipovi :
- Slike Ulaznice imaju
capabilities(accepts_image_url,requires_image_url,edit) i cenaper_generation. - Videozapis Ulaznice imaju
max_duration_secondsiresolutionsi jedna cenaper_secondza svaku rezoluciju. - Audije Ulaznice imaju
audio_typespeechilitranscriptionCeneper_1k_charsiliper_minute. - Ugradnja Ulaznice imaju
dimensions,context_length,max_inputsi cenu po milion ulaznih tokena.
Cijene označene "estimated": true je procjena aplikacije za generator čija cena nije objavljena. type Povratak 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);