Znalostná báza Vývojári
Chat, odpovede a správy
Tri spôsoby, ako sa opýtať modelu niečo, v troch formátoch klienti už hovoria, všetky bežia na rovnakých modeloch a účtované rovnakým spôsobom.
Táto stránka je pre pohodlie preložená strojovo. Platí anglický originál.
Chat dokončenie
OpenAI chat formát, a ten, ktorý takmer každý nástroj podporuje. Odoslať konverzáciu doteraz a získať ďalšiu správu späť.
POST https://nymbot.ai/api/v1/chat/completions Potrebujete API kľúč.
iba model a messages Vzorkovací parameter, ktorý vybraný model neberie, sa spúšťa bez chyby, takže telo jednej požiadavky pracuje cez modely. supported_parametersTo, čo sa odmieta namiesto toho, aby sa stratilo, je niečo, čo model nemôže urobiť vôbec: obrázky pre model, ktorý nemôže vidieť, nástroje pre model, ktorý ich nemôže zavolať.
| Poľné | typ | Potrebné | Popis |
|---|---|---|---|
model | Stringová | áno | nymbot/auto (alebo auto) pre smerovanie Nymbotu na štandardnej bilancii alebo katalógový model id, ako je napríklad anthropic/claude-sonnet-5 na Pro zostatku. Akceptujú sa aj krátke mená a prezývky aplikácie. Stačí. |
messages | Array | áno | Rozhovor - úlohy system, developer (zobrazuje sa ako systém) user, assistant a toolObsah je reťazec alebo zoznam text a image_url časti; obrázky iba v používateľských správach. input_audio Súbory sú odmietnuté. |
stream | boľavý | nie | Pošlite odpoveď tak, ako je napísaná. pozri Streamovanie. |
stream_options | Objekty | nie | {"include_usage": true} pridáva konečnú časť s počtom tokenov a nákladmi. |
max_tokensmax_completion_tokens | integer | nie | Najviac žetónov na písanie. Znížená na maximum modelu, ak je vyššia. Tiež určuje, koľko je držané z vášho zostatku, takže menšie číslo potrebuje menej úveru na začiatok. |
temperaturetop_p | Číslo | nie | Samplingové kontroly : temperature od 0 do 2, top_p od 0 do 1. |
stop | String alebo array | nie | Text na konci odpovede: reťazec alebo maximálne 4 reťazce, z ktorých každý má maximálne 256 znakov. nymbot/auto. |
seed | integer | nie | Pre opakované vzorkovanie, kde ho model podporuje. |
presence_penaltyfrequency_penalty | Číslo | nie | Opakované kontroly, každé od -2 do 2. |
response_format | Objekty | nie | {"type": "json_object"} alebo {"type": "json_schema", "json_schema": {…}}, kde model podporuje.Nepoužíva sa nymbot/auto. |
toolstool_choiceparallel_tool_calls | Array, String alebo Object, Boolean | nie | Funkcia volania. pozri Nástrojové hovory. a web_search Nástroj sa otáča web vyhľadávanieNa maximálne 128 nástrojov a 512 KB definícií, vložených na maximálne 64 úrovniach hĺbky; viac je 400. |
reasoning_effortreasoning | Stretnutie, objekt | nie | "minimal", "low", "medium" alebo "high"alebo {"effort": "high"}. "none" alebo {"enabled": false} Odstráňte ho. pozri Rozumenie. |
plugins | Array | nie | [{"id": "web", "max_results": 5}] vždy najprv vyhľadáva web. Až 10 výsledkov. |
n | integer | nie | 1. všetko ostatné sa vracia 400. |
logit_biasusermetadata | Objekt, String alebo Objekt | nie | Prijaté a neodosielané. logit_bias mapy s maximálne 300 identifikátormi tokenov na čísla od -100 do 100; user maximálne 256 znakov; metadata uchováva maximálne 16 hodnôt reťazcov, kľúče až do 64 znakov a hodnoty až do 512. |
Odpoveď je obyčajná chat.completionV prípade, že náklady v usage.cost
(v dolároch) a v nymbot Na objekty. model je vyriešený model id, takže krátky názov sa vráti ako celý. Ak model uvažoval pred odpoveďou, jeho uvažovanie je v message.reasoning_contentoddelené od odpovede.
odpoveď
{
"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 vypracovaný z toho, čo sa vrátilo, pretože poskytovatelia to hlásia inak: tool_calls Keď sa modely pýtajú nástroje, length keď odpoveď použila každý povolený token (alebo model ich strávil všetkými uvažovaním a nenapísal žiadnu odpoveď), content_filter keď poskytovateľ odmietol, a stop
V opačnom prípade usage.completion_tokens_details.reasoning_tokens je vždy 0: skryté tokeny sú spočítané a účtované v completion_tokens.
| statusu | Kedy |
|---|---|
400 | nie model alebo messages (missing_required_parameter); zvuková alebo súborová časť alebo obrázky pre model, ktorý ich nemôže vidieť (unsupported_content); viac ako 20 obrázkov (too_many_images); vzorkový parameter nesprávneho typu alebo mimo rozsahu (invalid_value); odkaz na obrázok, ktorý nie je verejný (invalid_image_url); nástroje na modeli, ktorý ich nemôže nazvať (unsupported_tool); n Iné ako 1; a :thinking Príkladom je príklad, ktorý sa nedá vysvetliť (model_not_found(alebo poskytovateľ požiadavku zamietol)upstream_rejected). |
402 | Zostatok, ktorý model vynakladá, nemôže pokrývať držbu. |
403 | Najhorší prípad nezodpovedá krytu kľúča (key_limit_reached) nižšie max_tokens Alebo zdvihnúť hlavu. |
404 | Žiadny model s týmto názvom (model_not_found). |
429 | V prípade, že je kľúčová čiastková hranica alebo poskytovateľ (upstream_rate_limited). |
502, 503 | Poskytovateľ zlyhal (upstream_error) alebo je preťažený (upstream_overloaded, s Retry-AfterNič nie je účtované, pokiaľ poskytovateľ neúčtuje za pokus. |
Stavové kódy každej koncovej akcie sú uvedené pod Chyby.
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);
Streamovanie
s "stream": true odpoveď prichádza ako udalosť odoslaná serverom, zatiaľ čo model ju píše. chat.completion.chunk je a data: line, a prúd končí s data: [DONE]Rozum prichádza do
delta.reasoning_contentOdpoveď v delta.content.
Streamujte čokoľvek, čo môže trvať viac ako približne 100 sekúnd, napríklad dlhú odpoveď, veľkú
max_tokens Žiadosť, ktorá nie je streamovaná, neodosiela nič, kým odpoveď nie je kompletná, a sieť medzi vami a Nymbotom môže uzavrieť prázdne spojenie po približne 100 sekundách; model stále končí a to, čo napísal, je načítané, ale odpoveď je stratená.
Streamovanie
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]
- Línia začínajúca s
:sú pripomienky naživo, odoslané každých 15 sekúnd, zatiaľ čo model premýšľa. - Opýtajte sa
"stream_options": {"include_usage": true}dostať posledný kúsok hore, s prázdnymchoices, token počíta, náklady anymbotNa objekty. - Ak zatvoríte pripojenie skôr, model sa nezastaví: Nymbot číta zvyšok prúdu poskytovateľa, až do 25 sekúnd, aby získal jeho počet tokenov, a platíte to, čo poskytovateľ hlásí.
- Chyba pred prvým chunkom, ako napríklad
401alebo402, sa vracia ako obyčajný JSON so svojím stavovým kódom, nie ako prúd.data: {"error": {…}}udalosť, a prúd končí bez[DONE]. - Žiadosti s nástrojmi a modely na OpenAI odpovede dopravy, nie prúdi z poskytovateľa. stále odpovedajú s platným prúdom, odoslaný po odpovedi je kompletný.
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);
}
Nástroj volania
Popíšte funkcie v tools a model môže požiadať o volanie namiesto odpovedania. spustíte funkciu, pridáte jej výsledok ako tool Správa s rovnakým
tool_call_idNymbot nikdy nespustí vaše funkcie; odovzdá požiadavku modelu späť vám.
tool_choice berie "auto", "none",
"required" alebo {"type": "function", "function": {"name": "…"}}Zoznam modelov označuje, ktoré modely môžu volať nástroje (capabilities.toolsNástroje sú odmietnuté 400 unsupported_tool je nymbot/auto a na niekoľkých katalógových modeloch, ktoré bežia na doprave OpenAI Responses, na ktoré Nymbot nemôže preniesť nástroje.
s "stream": true, žiadosť s nástrojmi beží v jednom kúsku a potom sa odošle ako normálna sekvencia kusov: úloha, jeden kus, ktorý nesie každý výzva nástroja s jeho indexom, id, názov a argumenty a konečný kus.
Odpoveď, čiastočne
"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);
Obrázky v žiadosti
Modely s capabilities.vision môžete čítať obrázky. pridať image_url
časť na používateľskú správu, buď s publikom https:// Link alebo A
data:image/…;base64, URL. Až 20 obrázkov na žiadosť. SVG obrázky sú zamietnuté, a tak je odkaz viac ako 4 096 znakov alebo jeden s užívateľským menom alebo heslom v ňom (400 invalid_image_url) je voliteľný detail je
auto, low alebo high.
s nymbot/auto, žiadosť s obrázkom v ňom sa presmeruje na štandardný model, ktorý môže vidieť. capabilities.vision Odmietnuť obrázky s
400 unsupported_contentObrázky môžu byť len v používateľských správach. Odkaz musí poukázať na verejný hostiteľ; Nymbot odovzdá obrázok poskytovateľovi modelu a nezachováva ho.
Obrázok je účtovaný ako vstupné tokeny, ktoré pre neho poskytovateľ počíta, rovnako ako zvyšok žiadosti.
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);
odôvodnenie
Modely s capabilities.reasoning môžete premýšľať predtým, než odpovedia. požiadajte o viac alebo menej z toho s reasoning_effort ("minimal", "low",
"medium" alebo "high") alebo "reasoning": {"effort": "high"}alebo pridať :thinking na názov modelu, čo znamená vysoké úsilie. Na modeli bez odôvodnenia je nastavenie ignorované. nymbot/auto, :thinking odošle žiadosť na štandardnú trasu odôvodnenia.
Na antropických modeloch sa úsilie stáva rozpočtom na myslenie približne 1 000, 2 000, 8 000 alebo 16 000 žetónov, nikdy viac ako max_tokens myšlienok, keď je to ponechané
tool_choice vynúti nástroj a keď požiadavka pokračuje v obvode nástrojov (jeho posledná správa je výsledkom nástroja), pretože Anthropic potrebuje predtým podpísané myslenie, aby ju obnovil.
Rozum sa vracia späť do message.reasoning_contentalebo
delta.reasoning_content pri streamovaní, nikdy nezmiešané do odpovede. Rozum je výstup a je účtovaný ako taký, vo vnútri completion_tokensNiektorí poskytovatelia nevrátia zdôvodňujúci text vôbec a stále sa účtuje.
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);
Modelové suffixy
Prispôsobenie názvu modelu mení spôsob, akým sa žiadosť spracováva, bez ďalšieho poľa. Pracujú na plných id a krátkych menách rovnako, ako v anthropic/claude-sonnet-5:online.
| Dostatok | účinok |
|---|---|
:online | Vyhľadávanie na webe ako prvé plugins: [{"id": "web"}]- vidieť web vyhľadávanie. |
:thinking | Vysoká úroveň úsilia; na nymbot/autona model, ktorý nemôže rozumieť, 400 model_not_found s “ žiadny koncový bod nájdený” |
:nitro, :floor, :exacto, :extended | Každý model katalógu má jednu trasu, takže nie je rýchlejšia, lacnejšia alebo dlhšia na výber; prívesky sú povolené, takže názvy modelov skopírované z iných služieb stále fungujú. |
Akýkoľvek iný prídavok je ignorovaný. Celý názov sa najprv vyskúšal, takže model, ktorého id skutočne obsahuje hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý hrubý 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 vyhľadávanie
Nymbot vyhľadá poslednú používateľskú správu (jeho prvých 2000 znakov), číta najlepšie stránky a dáva ich modelu s otázkou, označenú ako vonkajší obsah, z ktorého by model nemal brať pokyny.
- Vždy hľadať:
"plugins": [{"id": "web", "max_results": 5}]alebo a:onlineStačí na model. - Hľadať, keď to pomáha:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Taktiež bol prijatý akoweb_search_previewaleboopenrouter:web_searchNymbot vyhľadáva len vtedy, keď sa zdá, že otázka potrebuje aktuálne informácie, rovnaký test, ktorý aplikácia používa.
max_results je 5 v predvolenom nastavení a maximálne 10. zdroje sa vrátia do
nymbot.web_search.sourcesKaždý s a title, snippet a
urla ako url_citation Poznámky k posolstvu.
Každé vyhľadávanie, ktoré beží, stojí $ 0,008, prevedené na sats, na vrchole žetónov, a je to súčasť držby.Stránky, ktoré číta, sú tiež vstupné žetóny, takže odpoveď z webu stojí viac ako rovnaká otázka položená chladne, niekedy niekoľkonásobne viac.
Odpoveď, čiastočne
"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);
Odpoveď API
Novší formát OpenAI, ktorý používa OpenAI Agents SDK a Codex. Beží na rovnakých modeloch, fakturácii a funkciách ako Chat Completions.
POST https://nymbot.ai/api/v1/responses Potrebujete API kľúč.
| Poľné | typ | Potrebné | Popis |
|---|---|---|---|
model | Stringová | áno | Ako pre Chat dokončenieSúčasťou sú aj suffixy. |
input | String alebo array | áno | Reťazec alebo zoznam položiek: správy (roly user, assistant, system, developer) s input_text, input_image a output_text časti a function_call a function_call_output Položky pre nástroje. input_image Vezmite si image_url odkaz alebo dátovú adresu URL, nie súbor id. reasoning a web_search_call predmety sú vynechané; item_reference Je to odmietnuté. |
instructions | Stringová | nie | Pokyny pre systém. |
max_output_tokens | integer | nie | Najviac tokenov na písanie. |
temperaturetop_p | Číslo | nie | Sampling ovládacie prvky, kde ich model berie. |
toolstool_choiceparallel_tool_calls | Array, String alebo Object, Boolean | nie | Funkčné nástroje, vo forme odpovedí ({"type": "function", "name": …, "parameters": …}) a web_search alebo web_search_preview Nástroj sa otáča web vyhľadávanie Iné vstavané nástroje sú odmietnuté. |
reasoning | Objekty | nie | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh a max znamená high; none Odstráňte to. |
text.formatresponse_format | Objekty | nie | Štruktúrovaný výstup, ako schéma JSON alebo json_object. |
metadata | Objekty | nie | Vrátené nezmenené v odpovedi Pri maximálne 16 hodnotách reťazca, kľúče až 64 znakov a hodnoty až 512. |
stream | boľavý | nie | Stream udalosti ako je popísané nižšie. |
store | boľavý | nie | Nič nie je uložené, a odpoveď vždy hovorí "store": false. |
previous_response_idconversationbackground | String, objekt a bool | nie | Nie sú podporované: 400 unsupported_parameterOdpovede nie sú uložené, takže odošlite celú konverzáciu do input Každú chvíľu |
odpoveď
{
"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 }
}
Žiadosť o nástroj sa zobrazí v output ako a function_call Položka s
call_id, name a argumentsOdoslať výsledok späť ako a
function_call_output Položka s rovnakým call_idRozumenie, keď ho model vráti, je reasoning Položka s reasoning_text obsah, ktorý je uvedený ako prvý. status je incomplete Keď odpoveď zasiahne
max_output_tokens alebo poskytovateľ odmietol, s
incomplete_details.reason Nastaviť 2 max_output_tokens alebo
content_filterOdpoveď tiež odzrkadľuje nastavenia požiadavky (teplota, nástroje, výber nástrojov atď.), ako to robí OpenAI, a prenáša nymbot Náklady na objekt.
Streamované, každá udalosť je event: Linka a A data: Linka s A
sequence_numberv tomto poradí: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedAkýkoľvek počet response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.donea nakoniec response.completed s použitím a nákladmi. odpoveď skracovať krátke konce s response.incomplete miesto, a zlyhanie po tom, čo prúd začal s response.failedRozumenie prúdov ako vlastného predmetu s response.reasoning_text.delta a .doneNástrojové hovory prichádzajú po správe, každá ako položka s response.function_call_arguments.delta
a .done.
| statusu | Kedy |
|---|---|
400 | nie model alebo input; previous_response_id, conversation, background alebo jeden item_reference (unsupported_parameter); nepodporovaný nástroj alebo typ obsahu. |
402, 403, 404, 429, 502, 503 | Pokiaľ ide o chatové dokončenia. |
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);
Antropické posolstvá
Funguje s každým modelom v katalógu, nielen s Claude: žiadosť sa preloží, spustí sa cez ten istý potrubie a preloží sa späť.
POST https://nymbot.ai/api/v1/messages - potrebuje kľúč API, ako x-api-key alebo Authorization: Bearer.
na anthropic-version a anthropic-beta Antropické názvy modelov sa zhodujú s katalógom, takže Claude Code a SDK pracujú s názvami, ktoré už používajú:
- Názov, ktorý katalóg pozná, ako napríklad
claude-sonnet-5aleboanthropic/claude-opus-5Používa sa tak, ako je. - V opačnom prípade dátum (
-20260514),-latest, verzia tag ako-v1, bracketed tag ako[1m]a jedenanthropic/aleboanthropic.Predpony sú odstránené a bodky a dosky vo verzii sa skúšajú oboma spôsobmi (claude-haiku-4-5nájsťclaude-haiku-4.5). - Ak sa to stále nezhoduje, použije sa rodina (Opus, Sonnet alebo Haiku), pokiaľ je verzia katalógu rovnaká alebo novšia ako tá požadovaná.
- Meno, ktoré sa nezhoduje s ničím, sa vráti
404not_found_error.
| Poľné | typ | Potrebné | Popis |
|---|---|---|---|
model | Stringová | áno | Názov katalógového modelu alebo názov antropického modelu. |
max_tokens | integer | áno | Najviac tokenov na písanie. |
messages | Array | áno | user a assistant Vráťme sa, s text, image (base64 alebo zdroj URL), tool_use a tool_result a blokov. thinking Bloky z predchádzajúcich kol sa prijímajú a klesajú. |
system | String alebo array | nie | System prompt, ako reťazec alebo textové bloky. |
temperaturetop_p | Číslo | nie | Sampling ovládacie prvky, kde ich model berie. top_k bol prijatý a zrušený. |
stop_sequences | Nastavenie stringov | nie | Text, ktorý končí odpoveďou. Maximálne 4 reťazce, z ktorých každý má maximálne 256 znakov. |
toolstool_choice | Objekty, objekty | nie | Nástroje s name, description a input_schema. a web_search Serverové nástroje sa otáčajú web vyhľadávanieOstatné vstavané nástroje spoločnosti Anthropic (bash, textový editor, používanie počítača) sú odmietnuté unsupported_tool. tool_choice berie auto, any, tool alebo none, a disable_parallel_tool_use. |
thinking | Objekty | nie | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} alebo {"type": "disabled"}Rozpočet si vyberá úroveň úsilia: pod 2 048 minimálne, z 2 048 nízke, z 8 192 stredné, z 16 384 vysoké. output_config.effortAlebo aj vysoko. |
stream | boľavý | nie | Stream v formáte podujatia spoločnosti Anthropic. |
metadata | Objekty | nie | Prijaté a ignorované. |
odpoveď
{
"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 Môže tiež držať tool_use Blokovanie a thinking
Blok, ktorý signature je prázdny stop_reason je
end_turn, max_tokens, tool_use alebo refusalpracoval rovnakým spôsobom ako finish_reason je
Chat dokončenie; stop_sequence Vždy je
null, aj keď stopová sekvencia ukončila odpoveď. input_tokens počíta iba čerstvé vstupy; vstupy vo vyrovnávacej pamäti sa nachádzajú v dvoch poliach vyrovnávacej pamäte.
nymbot Objekt a jeho X-Nymbot-Cost-Sats a header
Streamované, udalosti sú Anthropic's: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta alebo thinking_delta),
content_block_stop, message_delta s dôvodom zastavenia, použitie a nymbot náklady na objekt, a message_stop. a ping sa tiež odosiela každých 15 sekúnd, kým model pracuje. Výzvy nástrojov prichádzajú po texte, každý ako
tool_use blok s celým jeho vstupom v jednom input_json_delta.
Chyby na tomto koncovom bode používajú formát Anthropic:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}Krátka rovnováha je 402 billing_errorPreťažený poskytovateľ
503 overloaded_errorZlyhanie po spustení prúdu sa odošle ako error udalosťou .
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);
Počítanie tokenov
Odhad toho, koľko vstupných tokenov by požiadavka na správy použila, takže klient môže skontrolovať pred odoslaním.
POST https://nymbot.ai/api/v1/messages/count_tokens - potrebuje API kľúč. zadarmo
Telo je rovnaké ako Posolstvábez max_tokens; názov modelu sa musí vyriešiť. Počítanie je odhad: znaky systémovej výzvy, správy, volania nástrojov a definície nástrojov rozdelené štyrmi, plus 1600 pre každý obrázok. Nie je to vlastný tokenizér poskytovateľa, takže skutočný počet sa môže líšiť. Kľúč, ktorý dosiahol svoj limit, ho stále môže používať.
odpoveď
{ "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);
Zoznam modelov
Každý model a generátor API akceptuje, s tým, čo to stojí.Zoznam je čítaný z rovnakého živého katalógu ako vyberateľ aplikácie, takže je to vždy to, čo server bude bežať.
GET https://nymbot.ai/api/v1/models - žiadny kľúč potrebný. skryté na päť minút.
GET /api/v1/models/{id} Vráti sa 1 vstup.
| Poľné | typ | Potrebné | Popis |
|---|---|---|---|
type | String (požiadavka) | nie | chat (z dôvodu nedodržania podmienok), image, video, audio, embedding alebo allNiektoré môžu byť použité, ako image,video. |
Ceny sú to, čo platíte, s poplatkom a maržou už v dolároch a v sadzbách za aktuálnu cenu Bitcoinu. balance Hovorí o tom, akú bilanciu model vynakladá.
nymbot_key je krátky názov modelu v aplikácii. created je vždy 0, pretože katalóg nezaznamenáva, kedy bol model pridaný. per_request namiesto toho.
nymbot/auto je vždy prvý, cena ako variable, s a
routes Zoznam, ktorý uvádza sadzby každej štandardnej trasy.Zoznamuje víziu a uvažovanie, ale nie nástroje.
GET /api/v1/models/{id} prijíma rovnaké mená a prezývky ako žiadosť a vráti záznam pre model, na ktorý sa rozhodnú.
odpoveď
{
"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"
}
]
}
Ostatné typy :
- Obrázok Vstupy majú
capabilities(accepts_image_url,requires_image_url,edit) a cenaper_generation. - Videá Vstupy majú
max_duration_secondsaresolutionsa cenouper_secondpre každé rozhodnutie. - audiokniha Vstupy majú
audio_typespeechalebotranscription- cenaper_1k_charsaleboper_minute. - Vložiť Vstupy majú
dimensions,context_length,max_inputsCena za milión vstupných tokenov.
Ceny označené "estimated": true je odhad aplikácie pre generátor, ktorého cena nie je zverejnená. type Vrátenie 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);