Baza e njohurive Zhvilluesit
Chat, Përgjigjet dhe Mesazhet
Tre mënyra për të pyetur një model diçka, në tre formatet që klientët tashmë flasin, të gjitha të drejtuara në të njëjtat modele dhe faturuar në të njëjtën mënyrë.
Kjo faqe është përkthyer me makinë për lehtësi. Origjinali në anglisht është versioni që zbatohet.
Chat Përfundim
OpenAI chat format, dhe një që pothuajse çdo mjet mbështet. dërgoni bisedën deri tani dhe merrni mesazhin e ardhshëm prapa.
POST https://nymbot.ai/api/v1/chat/completions Ju duhet një çelës API.
Vetëm model dhe messages Parametri i marrjes së mostrave që modeli i zgjedhur nuk merr bie pa një gabim, kështu që një trup kërkese punon në të gjithë modelet. supported_parametersAjo që refuzohet në vend që të hiqet është diçka që modeli nuk mund të bëjë fare: fotografi për një model që nuk mund të shohë, mjete për një model që nuk mund t’i thërrasë.
| fushë | Lloji | Të nevojshme | Përshkrimi |
|---|---|---|---|
model | Stringë | po | nymbot/auto ose auto) për drejtimin e Nymbot në bilancin standarde, ose një id modelit katalog si: anthropic/claude-sonnet-5 në bilancin Pro. Emrat e shkurtër dhe pseudonimet e aplikacionit pranohen gjithashtu. Mund të përfundojë në një mjaftueshëm. |
messages | Aradë | po | Bisedë - Role system, developer (Të trajtohen si sistem) user, assistant dhe toolPërmbajtja është një varg ose një listë e text dhe image_url pjesë; imazhe vetëm në mesazhet e përdoruesit. input_audio dhe pjesët e dosjeve janë refuzuar. |
stream | booleanë | jo | Dërgo përgjigjen ashtu siç është shkruar. shih Streamë. |
stream_options | Objekti | jo | {"include_usage": true} shton një copë përfundimtare me numrat token dhe koston. |
max_tokensmax_completion_tokens | Integrale | jo | Shumica e tokenëve për të shkruar. Zvogëlohet në maksimum të modelit nëse është më i lartë. Gjithashtu përcakton se sa mbahet nga bilanci juaj, kështu që një numër më i vogël ka nevojë për më pak kredi për të filluar. |
temperaturetop_p | Numër | jo | Kontrolli i mostrave: temperature Nga 0 në 2, top_p Nga 0 në 1. |
stop | String ose array | jo | Teksti që përfundon përgjigjen: një zinxhir ose jo më shumë se 4 zinxhirë, secili jo më shumë se 256 karaktere. nymbot/auto. |
seed | Integrale | jo | Për marrjen e mostrave të përsëritura, ku modeli e mbështet atë. |
presence_penaltyfrequency_penalty | Numër | jo | Kontrollet e përsëritura, secila nga -2 në 2. |
response_format | Objekti | jo | {"type": "json_object"} ose {"type": "json_schema", "json_schema": {…}}, ku modeli mbështet atë.Nuk përdoret nga nymbot/auto. |
toolstool_choiceparallel_tool_calls | array, string ose objekt, boolean | jo | Funksioni i thirrjes. shih Mjetet e thirrjesa web_search Tool kthehet në Kërkimi WEBNë sa më shumë 128 mjete dhe 512 KB të përkufizimeve, të ngulitura në sa më shumë 64 nivele të thella; më shumë është një 400. |
reasoning_effortreasoning | Gërshërë, Objekt | jo | "minimal", "low", "medium" ose "high"ose {"effort": "high"}. "none" ose {"enabled": false} Përdoreni atë. shih arsyetimin. |
plugins | Aradë | jo | [{"id": "web", "max_results": 5}] Gjithmonë kërkoni në internet së pari.Deri në 10 rezultate. |
n | Integrale | jo | 1.Çdo gjë tjetër kthehet 400. |
logit_biasusermetadata | Objekt, String dhe Objekt | jo | pranuar dhe nuk u dërgua. logit_bias hartat në më shumë se 300 id token për numra nga -100 në 100; user Deri në 256 karaktere; metadata mbajnë deri në 16 vlera string, çelësat deri në 64 karaktere dhe vlera deri në 512. |
Përgjigja është e zakonshme chat.completionMe kosto në usage.cost
(në dollarë) dhe në nymbot Objekti i model është id modeli i zgjidhur, kështu që një emër i shkurtër kthehet si i plotë. message.reasoning_contenttë ndara nga përgjigja.
Përgjigje
{
"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 është përpunuar nga ajo që u kthye, pasi ofruesit raportojnë ndryshe: tool_calls Kur dikush kërkon mjete, length kur përgjigja përdori çdo token të lejuar (ose modeli i kaloi të gjitha arsyetimin dhe nuk shkroi asnjë përgjigje), content_filter Në qoftë se furnizuesi refuzon dhe stop
Përndryshe usage.completion_tokens_details.reasoning_tokens është gjithmonë 0: tokenët e fshehur të arsyetimit llogariten, dhe ngarkohen, në completion_tokens.
| Statusit | Kur |
|---|---|
400 | jo model ose messages (missing_required_parameter(Pjesë audio ose fotografi për një model që nuk mund t'i shohë ato)unsupported_content); më shumë se 20 fotografi (too_many_images(Për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, përinvalid_value); një link që nuk është publik (invalid_image_url); mjetet në një model që nuk mund t'i quajë ato (unsupported_tool); n më shumë se 1; a :thinking Për shembull, një model që nuk mund të justifikohet (model_not_found(Përdorimi i një aplikacioni për të refuzuar kërkesën)upstream_rejected). |
402 | Bilanci që shpenzon modeli nuk mund të mbulojë mbajtjen. |
403 | Në rastin më të keq nuk përputhet me kapakun e çelësit (key_limit_reachedmë poshtë max_tokens Ose ngre kapakun. |
404 | Asnjë model me këtë emër (model_not_found). |
429 | Shërbimi i Shërbimit të Shërbimit (upstream_rate_limited). |
502, 503 | Furnizuesi ka dështuar (upstream_errora) është i mbingarkuar (upstream_overloadedMe të Retry-AfterAsgjë nuk ngarkohet përveç nëse ofruesi ka faturuar për përpjekjen. |
Kodet e statusit për çdo aksion endpoint janë të listuara nën Gabimet.
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
me "stream": true përgjigja vjen si ngjarje të dërguara nga serveri ndërsa modeli e shkruan atë. chat.completion.chunk është a data: linjë, dhe rrjedha përfundon me data: [DONE]Arsyetimi vjen në
delta.reasoning_contentPërgjigja në delta.content.
Stream çdo gjë që mund të marrë më shumë se rreth 100 sekonda, të tilla si një përgjigje e gjatë, një përgjigje e madhe
max_tokens Një kërkesë që nuk është transmetuar nuk dërgon asgjë derisa përgjigja është e plotë, dhe rrjeti midis jush dhe Nymbot mund të mbyllë një lidhje të zbrazët pas rreth 100 sekondave; modeli ende përfundon dhe ajo që ka shkruar është ngarkuar, por përgjigja është e humbur.
rrymë
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]
- Linjat që fillojnë me
:janë komente të gjalla, të dërguara çdo 15 sekonda ndërsa modeli është duke menduar. - Pyesni për
"stream_options": {"include_usage": true}për të marrë pjesën e fundit lart, me një boshchoices, token numëron, kostoja dhenymbotObjekti i - Nymbot lexon pjesën tjetër të rrjedhës së ofruesit, për deri në 25 sekonda, për të marrë numrin e saj token, dhe ju paguani atë që ofruesi raporton.
- Një gabim para pjesës së parë, si
401ose402, kthehet si JSON i zakonshëm me kodin e tij të statusit, jo si një rrymë.data: {"error": {…}}ngjarje, dhe rrjedha përfundon pa[DONE]. - Kërkesat me mjete dhe modelet në transportin e përgjigjeve të OpenAI, nuk rrjedhin nga ofruesi.Ata ende përgjigjen me një rrjedhë të vlefshme, të dërguar pasi përgjigja është e plotë.
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);
}
Mjetet e thirrjes
Përshkruani funksionet në tools dhe modeli mund të kërkojë që dikush të thirret në vend të përgjigjes.Ju ekzekutoni funksionin, shtoni rezultatin e tij si një tool Mesazhi me të njëjtën
tool_call_idNymbot kurrë nuk ekzekuton funksionet tuaja; ai kalon kërkesën e modelit përsëri tek ju.
tool_choice merr "auto", "none",
"required" ose {"type": "function", "function": {"name": "…"}}Lista e modeleve shënon cilat modele mund të thërrasin mjete (capabilities.toolsMjetet janë refuzuar me 400 unsupported_tool është nymbot/auto dhe në modelet e pakta të katalogut që drejtohen në transportin e Responses të OpenAI, të cilat Nymbot nuk mund t'i kalojë mjetet.
me "stream": true, një kërkesë me mjete shkon në një copë dhe pastaj dërgohet si një sekuencë normale: roli, një copë që mban çdo thirrje mjet me indeksin e saj, id, emrin dhe argumentet, dhe copa e përfunduar.
Përgjigja, pjesërisht
"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);
Fotografi në kërkesë
Modelet me capabilities.vision mund të lexoni imazhe. shtoni një image_url
pjesë në një mesazh të përdoruesit, ose me një publik https:// Lidhje ose a
data:image/…;base64, Deri në 20 fotografi për kërkesë. imazhet SVG refuzohen, dhe kështu është një lidhje mbi 4096 karaktere ose një me një emër përdoruesi ose fjalëkalim në të (400 invalid_image_urlNjë opsion detail është
auto, low ose high.
me nymbot/auto, një kërkesë me një imazh në të drejtohet në një model standard që mund të shihet. capabilities.vision Refuzoni fotot me
400 unsupported_contentImazhet mund të jenë vetëm në mesazhet e përdoruesit.Një lidhje duhet të tregojë në një host publik; Nymbot kalon imazhin tek ofruesi i modelit dhe nuk e ruan atë.
Një imazh ngarkohet si tokenët e hyrjes që ofruesi numëron për të, si pjesa tjetër e kërkesës.
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);
arsyetimin
Modelet me capabilities.reasoning mund të mendojnë para se të përgjigjen. kërkoni më shumë ose më pak nga ajo me reasoning_effort ("minimal", "low",
"medium" ose "high") ose "reasoning": {"effort": "high"}ose të shtoni :thinking në emrin e modelit, që do të thotë përpjekje të lartë. Në një model pa arsyetim, cilësimi injorohet. nymbot/auto, :thinking dërgon kërkesën në rrugën standarde të arsyetimit.
Në modelet antropike përpjekja bëhet një buxhet mendimi prej rreth 1,000, 2,000, 8,000 ose 16,000 tokens, kurrë më shumë se max_tokens lejohet. mendimi është i braktisur kur
tool_choice Forcon një mjet, dhe kur kërkesa vazhdon një zinxhir mjetesh (mesazhi i tij i fundit është një rezultat mjetesh), sepse Anthropic ka nevojë për mendimin e nënshkruar më parë për ta rifilluar atë.
Arsyetimi kthehet në message.reasoning_contentose
delta.reasoning_content kur transmetohet, kurrë nuk përzihet në përgjigje. arsyetimi është output dhe ngarkohet si i tillë, brenda completion_tokensDisa ofrues nuk e kthejnë tekstin e arsyetimit në të gjitha, dhe ajo ende është e ngarkuar.
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);
Modele të mjaftueshme
Një shtojcë në emrin e modelit ndryshon mënyrën se si trajtohet kërkesa, pa një fushë tjetër.Ata punojnë në id të plotë dhe emra të shkurtër njësoj, si në anthropic/claude-sonnet-5:online.
| mjaftueshëm | Efektet |
|---|---|
:online | Kërkoni në internet së pari, si plugins: [{"id": "web"}]shihni Kërkimi WEB. |
:thinking | përpjekje të lartë arsyetimi; në nymbot/autoRruga e arsyetimit: Në një model që nuk mund të arsyetojë, 400 model_not_found me “no endpoints found”. |
:nitro, :floor, :exacto, :extended | Çdo model katalog ka një rrugë, kështu që nuk ka rrugë më të shpejtë, më të lirë ose më të gjatë për të zgjedhur; vazhdimet janë të lejuara kështu që emrat e modeleve të kopjuara nga shërbimet e tjera ende punojnë. |
Çdo shufër tjetër injorohet. Emri i tërë është provuar së pari, kështu që një model id i të cilit me të vërtetë përmban një kolon ende punon; në mungesë të kësaj, shufrat merren nga fundi një në një kohë derisa një model përputhet. 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);
Kërkim Web
Nymbot kërkon mesazhin e fundit të përdoruesit (2000 karaktere të para), lexon faqet më të mira dhe i jep ato modelit me pyetje, të shënuara si përmbajtje të jashtme nga e cila modeli nuk duhet të marrë udhëzime.
- Gjithmonë në kërkim:
"plugins": [{"id": "web", "max_results": 5}]ose a:onlinemjaftueshëm për modelin. - Kërkoni kur ndihmon:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Gjithashtu pranohet siweb_search_previewoseopenrouter:web_searchNymbot kërkon vetëm kur pyetja duket se ka nevojë për informacion aktual, i njëjti test që përdor aplikacioni.
max_results është 5 nga default dhe në maksimum 10. burimet kthehen në
nymbot.web_search.sourcesSecili me një title, snippet dhe
urldhe si url_citation shënime në mesazh.
Çdo kërkim që shkon kushton $ 0.008, konvertuar në sats, në krye të tokenëve, dhe kjo është pjesë e mbajtjes. faqet që lexon janë tokenë hyrëse gjithashtu, kështu që një përgjigje nga interneti kushton më shumë se e njëjta pyetje e pyetur ftohtë, nganjëherë disa herë më shumë.
Përgjigja, pjesërisht
"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);
Përgjigje zjarri
Formati më i ri i OpenAI, i përdorur nga OpenAI Agents SDK dhe nga Codex. Ajo funksionon në të njëjtat modele, faturim dhe karakteristika si Chat Completions.
POST https://nymbot.ai/api/v1/responses Ju duhet një çelës API.
| fushë | Lloji | Të nevojshme | Përshkrimi |
|---|---|---|---|
model | Stringë | po | Si për Chat PërfundimPërfshirë edhe suffixet. |
input | String ose array | po | Një rresht, ose një listë e artikujve: mesazhe (rolet user, assistant, system, developer) me input_text, input_image dhe output_text pjesë, dhe function_call dhe function_call_output artikuj për mjetet. input_image merr një image_url Lidhja ose URL e të dhënave, jo një id i skedarit. reasoning dhe web_search_call artikujt janë shkarkuar; item_reference është refuzuar. |
instructions | Stringë | jo | Udhëzimet e sistemit. |
max_output_tokens | Integrale | jo | më të shumta për të shkruar. |
temperaturetop_p | Numër | jo | Sampling kontrollet, ku modeli i merr ato. |
toolstool_choiceparallel_tool_calls | array, string ose objekt, boolean | jo | Përgjigjet në formën e përgjigjeve ({"type": "function", "name": …, "parameters": …}a) të web_search ose web_search_preview Tool kthehet në Kërkimi WEB kur ndihmon. mjetet e tjera të integruara janë refuzuar. |
reasoning | Objekti | jo | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh dhe max do të thotë high; none Ktheje atë jashtë. |
text.formatresponse_format | Objekti | jo | Si një skemë JSON ose json_object. |
metadata | Objekti | jo | Kthehet e pandryshuar në përgjigje.Në më shumë se 16 vlera të rreshtave, çelësat deri në 64 karaktere dhe vlera deri në 512. |
stream | booleanë | jo | Stream ngjarjet siç përshkruhet më poshtë. |
store | booleanë | jo | Asgjë nuk është ruajtur, dhe përgjigja gjithmonë thotë "store": false. |
previous_response_idconversationbackground | String, Objekt dhe Boolean | jo | Jo të mbështetur: 400 unsupported_parameterPërgjigjet nuk ruhen, kështu që dërgoni të gjithë bisedën në input Çdo herë |
Përgjigje
{
"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 }
}
Një kërkesë mjet shfaqet në output Si një function_call Pika me
call_id, name dhe argumentsdërgoni rezultatin prapa si një
function_call_output Pika me të njëjtën call_idArsyetimi, kur modeli e kthen atë, është një reasoning Pika me reasoning_text Përmbajtja, e listuar së pari. status është incomplete Kur përgjigjja goditi
max_output_tokens ose të refuzojë, me
incomplete_details.reason Vendosni të max_output_tokens ose
content_filterPërgjigja gjithashtu i përgjigjet cilësimeve të kërkesës (temperatura, mjetet, zgjedhja e mjeteve dhe kështu me radhë) siç bën OpenAI-ja, dhe mbart nymbot Çmimi i objektit
Çdo ngjarje, çdo ngjarje është një event: linjë dhe a data: linjë me a
sequence_numberNë këtë mënyrë: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedÇdo numër i response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneDhe më në fund response.completed me përdorimin dhe koston.Një përgjigje e shkurtër përfundon me response.incomplete në vend të kësaj, dhe një dështim pasi rrjedha filloi me response.failedArgumentoni rrymat si objektin e vet me response.reasoning_text.delta dhe .doneThirrjet e mjeteve vijnë pas mesazhit, secili si një element me response.function_call_arguments.delta
dhe .done.
| Statusit | Kur |
|---|---|
400 | jo model ose input; previous_response_id, conversation, background ose një item_reference (unsupported_parameter); një mjet ose lloj përmbajtjeje që nuk mbështetet. |
402, 403, 404, 429, 502, 503 | Për sa i përket përfundimit të chat. |
cURL
curl https://nymbot.ai/api/v1/responses \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"instructions": "Answer in one short paragraph.",
"input": "What is a Lightning invoice?"
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
response = client.responses.create(
model="anthropic/claude-sonnet-5",
instructions="Answer in one short paragraph.",
input="What is a Lightning invoice?",
)
print(response.output_text)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const response = await client.responses.create({
model: "anthropic/claude-sonnet-5",
instructions: "Answer in one short paragraph.",
input: "What is a Lightning invoice?",
});
console.log(response.output_text);
Mesazhet antropike
Formati i Anthropic, për SDK-të Anthropic dhe Claude Code. Funksionon me çdo model në katalog, jo vetëm Claude: kërkesa përkthehet, shkon nëpër të njëjtin tubacion dhe përkthehet prapa.
POST https://nymbot.ai/api/v1/messages - nevojë për një çelës API, si x-api-key ose Authorization: Bearer.
të anthropic-version dhe anthropic-beta Emrat e modeleve antropike përputhen me katalogun, kështu që Claude Code dhe SDK-të punojnë me emrat që ata tashmë përdorin:
- Një emër që katalogu e di, si
claude-sonnet-5oseanthropic/claude-opus-5përdoret ashtu siç është. - Një datë e caktuar (
-20260514),-latestNjë version i tillë si-v1Një ditë e braktisur si[1m]dhe njëanthropic/oseanthropic.Për shembull, të dyja palët duhet të përpiqen të përfshijnë të dyja palët dhe të përfshijnë të dyja palët (claude-haiku-4-5Gjejmëclaude-haiku-4.5). - Nëse kjo ende nuk përputhet asgjë, familja (Opus, Sonnet ose Haiku) përdoret, për aq kohë sa versioni i katalogut është i njëjtë ose më i ri se ai i kërkuar.
- Një emër që nuk përputhet me asgjë kthehet
404not_found_error.
| fushë | Lloji | Të nevojshme | Përshkrimi |
|---|---|---|---|
model | Stringë | po | Një katalog ID model, ose një emër model antropike. |
max_tokens | Integrale | po | më të shumta për të shkruar. |
messages | Aradë | po | user dhe assistant kthehet, me text, image (base64 ose burimi i URL), tool_use dhe tool_result të bllokuara. thinking blloqet nga kthimet e mëparshme pranohen dhe hiqen. |
system | String ose array | jo | sistemit, si një string ose blloqe të tekstit. |
temperaturetop_p | Numër | jo | Sampling kontrollet, ku modeli i merr ato. top_k është pranuar dhe hequr. |
stop_sequences | Përshkrimi i Strings | jo | Teksti që përfundon përgjigjen. Në maksimum 4 rreshta, secila me maksimum 256 karaktere. |
toolstool_choice | Lëvizje, Objekt | jo | Mjetet me name, description dhe input_schemaa web_search Server Tool kthehet në Kërkimi WEBMjetet e tjera të ndërtuara të Anthropic (bash, editor teksti, përdorimi i kompjuterit) janë refuzuar me unsupported_tool. tool_choice merr auto, any, tool ose nonedhe disable_parallel_tool_use. |
thinking | Objekti | jo | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} ose {"type": "disabled"}Buxheti zgjedh një nivel përpjekje: nën 2,048 minimum, nga 2,048 të ulët, nga 8,192 të mesëm, nga 16,384 të lartë. output_config.effortose të lartë. |
stream | booleanë | jo | Stream në formatin e ngjarjeve të Anthropic. |
metadata | Objekti | jo | pranuar dhe injoruar. |
Përgjigje
{
"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 Mund të mbajë gjithashtu tool_use Blocks dhe a thinking
Blloku i të cilit signature Është bosh stop_reason është
end_turn, max_tokens, tool_use ose refusalpunuar në të njëjtën mënyrë si finish_reason është
Chat Përfundim; stop_sequence Gjithmonë është
null, edhe kur një sekuencë e ndalimit përfundoi përgjigjen. input_tokens Numërohet vetëm hyrja e freskët; hyrja e cache është në dy fushat e cache.
nymbot Objekti dhe X-Nymbot-Cost-Sats në header.
Streamed, ngjarjet janë Anthropic's: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta ose thinking_delta),
content_block_stop, message_delta me arsyen e ndalimit, përdorimin dhe nymbot Çmimi i objektit dhe message_stopa ping gjithashtu dërgohet çdo 15 sekonda ndërsa modeli është duke punuar. thirrjet e mjeteve vijnë pas tekstit, secili si një
tool_use bllok me të gjithë hyrjen e saj në një input_json_delta.
Gabimet në këtë pikë përfundimtare përdorin formatin e Anthropic:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}Një ekuilibër i shkurtër është 402 billing_errorNjë ofrues i mbingarkuar
503 overloaded_errorNjë dështim pas fillimit të rrymës dërgohet si një error Ngjarje të
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);
Numërimi i tokenëve
Një vlerësim i numrit të tokenëve të hyrjes që një kërkesë Messages do të përdorë, kështu që një klient mund të kontrollojë para se të dërgojë.
POST https://nymbot.ai/api/v1/messages/count_tokens Ju duhet një çelës API. falas.
Trupi është i njëjtë me MesazhetPa asnjë max_tokensNumri është një vlerësim: karaktere të sistemit, mesazhet, thirrjet e mjeteve dhe përkufizimet e mjeteve të ndara nga katër, plus 1,600 për çdo imazh. Nuk është tokenizeri i vet i ofruesit, kështu që numri i vërtetë mund të ndryshojë.
Përgjigje
{ "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);
Lista e modeleve
Çdo model dhe gjenerator që API pranon, me atë që kushton.Lista lexohet nga i njëjti katalog live si pickeri i aplikacionit, kështu që është gjithmonë ajo që serveri do të drejtojë.
GET https://nymbot.ai/api/v1/models - nuk ka nevojë për çelës. fshehur për pesë minuta.
GET /api/v1/models/{id} Kthehet një hyrje
| fushë | Lloji | Të nevojshme | Përshkrimi |
|---|---|---|---|
type | Kërkesë (Query) | jo | chat (Për shkak të defektit) image, video, audio, embedding ose allDisa mund të përdoren, si image,video. |
Çmimet janë ajo që ju paguani, me tarifën dhe marzhin tashmë në, në dollarë dhe në sats në çmimin aktual të Bitcoin. balance Tregon se çfarë bilance shpenzon modeli.
nymbot_key është emri i shkurtër i modelit në aplikacion. created është gjithmonë 0, pasi katalogu nuk regjistron kur është shtuar një model. per_request në vend të kësaj.
nymbot/auto është gjithmonë i pari, çmimi si variableMe një
routes Lista që jep normat e çdo rruge standarde.Liston vizionin dhe arsyetimin, por jo mjetet.
GET /api/v1/models/{id} pranon të njëjtat emra dhe pseudonime si një kërkesë, dhe kthen hyrjen për modelin që ata vendosin.
Përgjigje
{
"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"
}
]
}
Llojet e tjera:
- Imazhi Hyrjet kanë
capabilities(accepts_image_url,requires_image_url,editdhe një çmimper_generation. - Video të Hyrjet kanë
max_duration_secondsdheresolutionsdhe një çmimper_secondpër çdo rezolutë. - audio të Hyrjet kanë
audio_typespeechosetranscriptionÇmimiper_1k_charsoseper_minute. - Përmbajtja Hyrjet kanë
dimensions,context_length,max_inputsdhe një çmim për një milion token input.
Çmimet e shënuara "estimated": true është vlerësimi i aplikacionit për një gjenerator çmimi i të cilit nuk është publikuar. type Kthim 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);