База знања Развијачи
Чат, одговори и поруке
Три начина да питате модел нешто, у три формата клијенти већ говоре, сви раде на истим моделима и рачунају на исти начин.
Ова страница је машински преведена ради практичности. Енглески оригинал је верзија која се примењује.
Цхат завршетак
ОпенАИ цхат формат, и онај који скоро сваки алат подржава. Пошаљите разговор до сада и вратите следећу поруку.
POST https://nymbot.ai/api/v1/chat/completions Potreban vam je API ključ.
samo model и messages Параметар узорковања који изабрани модел не узима пада без грешке, тако да једно тело захтева ради преко модела. supported_parametersОно што је одбијено уместо бачено је оно што модел уопште не може да уради: слике за модел који не може да види, алате за модел који их не може позвати.
| Поље | Тип | Потребна | Опис |
|---|---|---|---|
model | String | Да | nymbot/auto (или auto) for Nymbot's routing on the standard balance, or a catalog model id such as anthropic/claude-sonnet-5 на Про балансу. Прихватају се и кратка имена и надимци апликације. Довољно. |
messages | Ареј | Да | Разговор - улоге system, developer (третира се као систем), user, assistant и toolSadržaj je niz ili lista text и image_url делови; слике само у порукама корисника. input_audio и делови датотека су одбијени. |
stream | Боулијан | Не | Пошаљите одговор као што је написано. погледајте Стриминг. |
stream_options | објекта | Не | {"include_usage": true} додаје коначни део са бројевима токена и трошковима. |
max_tokensmax_completion_tokens | интегритет | Не | Највише токена за писање. Смањен на максимум модела ако је већи. Такође поставља колико се држи из вашег биланса, тако да мањи број треба мање кредита да би започео. |
temperaturetop_p | Број | Не | Контрола узорака: temperature од 0 до 2, top_p од 0 до 1. |
stop | String или Array | Не | Текст који завршава одговор: низ или највише 4 низа, од којих сваки има највише 256 карактера. nymbot/auto. |
seed | интегритет | Не | За понављајуће узорковање, где га модел подржава. |
presence_penaltyfrequency_penalty | Број | Не | Контроле понављања, свака од -2 до 2. |
response_format | објекта | Не | {"type": "json_object"} или {"type": "json_schema", "json_schema": {…}}, где га модел подржава. Не користи nymbot/auto. |
toolstool_choiceparallel_tool_calls | мапа, струка или објекат, боолеан | Не | функција позива. види Алат позива• А web_search алат се претвара WEB претраживањеНајвише 128 алата и 512 КБ дефиниција, уграђених на највише 64 нивоа дубине; више је 400. |
reasoning_effortreasoning | Стринг, објекат | Не | "minimal", "low", "medium" или "high", или {"effort": "high"}. "none" или {"enabled": false} Искључи га. види Разумевање. |
plugins | Ареј | Не | [{"id": "web", "max_results": 5}] увек претражује веб први. до 10 резултата. |
n | интегритет | Не | Samo 1. sve ostalo se vraća 400. |
logit_biasusermetadata | Објект, Структура, Објект | Не | Прихваћено и не послато. logit_bias мапе са највише 300 токен идентификатора на бројеве од -100 до 100; user највише 256 карактера; metadata ima najviše 16 vrednosti niza, ključeve do 64 karaktera i vrednosti do 512. |
Odgovor je običan chat.completion, са трошковима у usage.cost
(у доларима) и у nymbot Objekat je . model је решени модел id, тако да се кратко име враћа као пуно. ако је модел размишљао пре него што је одговорио, његово размишљање је у 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 је израђен из онога што се вратило, пошто провајдери извештавају другачије: tool_calls Када је модел тражио алате, length када је одговор користио сваки дозвољени токен (или их је модел потрошио на размишљање и написао ниједан одговор), content_filter када је понуђач одбио, и stop
inače usage.completion_tokens_details.reasoning_tokens увек је 0: скривени размишљачки токени се рачунају и наплаћују, у completion_tokens.
| статус | Када |
|---|---|
400 | Не model или messages (missing_required_parameter); аудио или фајл део, или слике за модел који их не може видети (unsupported_content); више од 20 фотографија (too_many_images); параметар узорковања погрешног типа или ван опсега (invalid_value); линк на слику који није јавни (invalid_image_url); алати на моделу који их не може назвати (unsupported_tool); n осим 1; а :thinking супфикс на моделу који не може да размишља (model_not_found); или провајдер је одбио захтев (upstream_rejected). |
402 | Биланс који модел троши не може покрити држање. |
403 | Најгори случај није у складу са кључном капицом (key_limit_reached) нижи max_tokens Или подигните главу. |
404 | Не постоји модел са овим именом (model_not_found). |
429 | ограничење стопе кључа, или провајдера (upstream_rate_limited). |
502, 503 | Понуђач није успео (upstream_error) или је преоптерећен (upstream_overloaded, са Retry-AfterНишта се не наплаћује осим ако провајдер није наплатио за покушај. |
Кодови статуса сваке акције у крајњој тачки су наведени испод Грешке.
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);
Стриминг
са "stream": true Одговор долази као догађај који је послао сервер док га модел пише. chat.completion.chunk је а data: линија, а ток се завршава са data: [DONE]Razum dolazi u
delta.reasoning_contentOdgovor u delta.content.
Стреам било шта што може трајати више од око 100 секунди, као што је дуг одговор, велики
max_tokens or a reasoning model. A request that is not streamed sends nothing until
the answer is complete, and the network between you and Nymbot may close an idle connection
after about 100 seconds; the model still finishes and what it wrote is charged, but the answer
is lost. A stream sends keep-alives, so it stays open for as long as the model writes.
Stream
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"content":"A Lightning invoice"},"finish_reason":null}]}
: keep-alive
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[],"usage":{"prompt_tokens":1240,"completion_tokens":380,"total_tokens":1620,"cost":0.01895},"nymbot":{"balance":"pro","charged_credits":0.162,"charged_sats":16.2,"balance_credits":412.425,"balance_sats":41242.5}}
data: [DONE]
- Линије које почињу са
:Komentari se šalju svakih 15 sekundi dok model razmišlja.SSE klijenti ih preskaču. - Pitajte za
"stream_options": {"include_usage": true}да бисте добили последњи комад изнад, са празнимchoices, токен рачуна, трошкови иnymbotObjekat je . - The charge settles after the stream ends. If you close the connection early, the model is not stopped: Nymbot reads the rest of the provider's stream, for up to 25 seconds, to get its token count, and you pay what the provider reports. Without that count the charge is estimated from your input and what was written, plus the whole output allowance for a model that reasons.
- Грешка пре првог комада, као што је
401или402, се враћа као обичан ЈСОН са својим кодом стања, а не као ток.data: {"error": {…}}догађај, а ток се завршава без[DONE]. - Захтеви са алатима и моделима на Транспорту Одговора ОпенАИ-а, не преносе се од провајдера.
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);
}
Алат позива
Опишите функције у tools и модел може да затражи да се неко позове уместо да одговори. Покрените функцију, додајте њен резултат као tool Порука са истим
tool_call_id, and send the conversation again. Nymbot never runs your functions;
it passes the model's request back to you.
tool_choice узети "auto", "none",
"required" или {"type": "function", "function": {"name": "…"}}Листа модела означује које моделе могу позвати алате (capabilities.tools) Алати се одбијају са 400 unsupported_tool је nymbot/auto and on
the few catalog models that run on OpenAI's Responses transport, which Nymbot cannot pass tools
to.
са "stream": true, захтев са алатима ради у једном комаду и затим се шаље као нормална секвенца: улога, један комад који носи сваки позив за алат са својим индексом, идентификатором, именом и аргументима и завршним комадом.
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);
Слике у захтеву
Модели са capabilities.vision Možeš da čitaš slike.Dodaj image_url
део у корисничку поруку, са било којом публиком https:// линк или а
data:image/…;base64, URL. До 20 слика по захтеву. СВГ слике су одбијене, а тако је линк преко 4.096 карактера или један са корисничким именом или лозинком у њему (400 invalid_image_url) је опционо detail је
auto, low или high.
са nymbot/auto, захтев са сликом у њему се усмерава на стандардни модел који може да види. capabilities.vision Одбијање фотографија са
400 unsupported_content. Pictures can only be in user messages. A
link must point to a public host; Nymbot passes the picture to the model's provider and does
not keep it.
Слика се наплаћује као улазни токен који провајдер рачуна за њега, као и остатак захтева.
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
Модели са capabilities.reasoning Možete da razmislite pre nego što odgovorite.Zatražite više ili manje od toga reasoning_effort ("minimal", "low",
"medium" или "high") или "reasoning": {"effort": "high"}или додати :thinking на име модела, што значи висок напор. На моделу без размишљања подешавање се игнорише. nymbot/auto, :thinking шаље захтев на стандардни пут размишљања.
На антрополошким моделима напор постаје буџет за размишљање од око 1.000, 2.000, 8.000 или 16.000 токена, никада више од max_tokens дозвољава. размишљање је напуштено када
tool_choice присиљава алат, а када захтјев настави алат лук (његова последња порука је алат резултат), јер Антхропиц треба раније потписано размишљање да га настави.
Razum se vraća u message.reasoning_content, или
delta.reasoning_content када стреаминг, никада не мешају у одговор. Разлог је излаз и наплаћује се као такав, унутар completion_tokensНеки провајдери уопште не враћају текст размишљања, а и даље се наплаћује.
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);
Модел suffixes
Суфикс на имену модела мења начин на који се поступа са захтевом, без другог поља. anthropic/claude-sonnet-5:online.
| Довољно | Uticaj |
|---|---|
:online | Претражујете веб прво, као plugins: [{"id": "web"}]Овде WEB претраживање. |
:thinking | Висок расуђивање напор; на nymbot/auto, пут размишљања.На моделу који не може разумети, 400 model_not_found са “no endpoints found”. |
:nitro, :floor, :exacto, :extended | Сваки модел каталога има један пут, тако да нема бржег, јефтинијег или дужег за одабир; суфикси су дозвољени тако да имена модела копирана из других услуга и даље раде. |
Сваки други суфикс се игнорише. Цело име се испроба прво, тако да модел чији идентификатор заиста садржи колону и даље ради; у супротном, суфикси се узимају од краја један по један док се модел не поклапа. 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 претраживање
Nymbot traži poslednju korisničku poruku (njihovih prvih 2.000 karaktera), čita najbolje stranice i daje ih modelu sa pitanjem, označenim kao spoljni sadržaj iz koga model ne treba da uzima uputstva.
- Uvek tražite:
"plugins": [{"id": "web", "max_results": 5}], или а:onlineДовољно је на моделу. - Pronađite kada pomaže:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Такође је прихваћен каоweb_search_previewилиopenrouter:web_search. Nymbot searches only when the question looks like it needs current information, the same test the app uses.
max_results је 5 подразумевано и највише 10. извори се враћају у
nymbot.web_search.sources, сваки са а title, snippet и
urlИ као url_citation Анотације на поруку.
Свака претрага која ради кошта 0,008 долара, конвертована у sats, на врху токена, и то је део држања.Странице које читају су и улазни токени, тако да одговор са веба кошта више од истог питања постављеног хладно, понекад неколико пута више.
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
Новији формат ОпенАИ-а, који користи ОпенАИ Агентс СДК и Кодекс. Ради на истим моделима, фактурисању и функцијама као и Цхат Цомплетионс.
POST https://nymbot.ai/api/v1/responses Potreban vam je API ključ.
| Поље | Тип | Потребна | Опис |
|---|---|---|---|
model | String | Да | као за Цхат завршетакУкључују се и суфикси. |
input | String или Array | Да | String, ili lista stavki: poruke (rolovi user, assistant, system, developer) са input_text, input_image и output_text деловима и function_call и function_call_output Предмети за алате. input_image Uzmi jedan image_url линк или URL података, а не идентификатор датотеке. reasoning и web_search_call објекти су прескочени; item_reference je odbijen. |
instructions | String | Не | Упутства за систем. |
max_output_tokens | интегритет | Не | Највише токена за писање. |
temperaturetop_p | Број | Не | Узорак контроле, где их модел узима. |
toolstool_choiceparallel_tool_calls | мапа, струка или објекат, боолеан | Не | Функционални алати, у облику Одговори ({"type": "function", "name": …, "parameters": …}) а web_search или web_search_preview алат се претвара WEB претраживање када помаже. Други уграђени алати су одбијени. |
reasoning | објекта | Не | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh и max znači high; none Okrenite ga. |
text.formatresponse_format | објекта | Не | Структурирани излаз, као ЈСОН шема или json_object. |
metadata | објекта | Не | Vratio se nepromenjen u odgovoru. na najviše 16 vrednosti niza, ključeve do 64 karaktera i vrednosti do 512. |
stream | Боулијан | Не | Стреам догађаји као што је описано испод. |
store | Боулијан | Не | Ignorisano.Ništa se ne čuva, a odgovor uvek kaže "store": false. |
previous_response_idconversationbackground | String, Object и Boolean | Не | Није подржана: 400 unsupported_parameterОдговори се не чувају, тако да пошаљите цео разговор у 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 }
}
Захтев за алат се појављује у output као а function_call Точка са
call_id, name и argumentsПошаљите резултат као а
function_call_output Ставка са истим call_idRazumevanje, kada ga model vrati, je reasoning Точка са reasoning_text садржај, први је наведен. status је incomplete Kada odgovor udari
max_output_tokens или да одбије, са
incomplete_details.reason Поставите max_output_tokens или
content_filterОдговор такође одјекује подешавања захтјева (температура, алати, избор алата и тако даље) као што то чини ОпенАИ, и носи nymbot Трошкови објекта
Стреамед, сваки догађај је event: линија и а data: Линија са а
sequence_numberU ovom redosledu: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedСваки број од response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneИ на крају response.completed са употребом и трошковима. Одговор с кратким крајевима response.incomplete уместо тога, и неуспех након што је ток почео са response.failedРазумијевање токова као свој предмет са response.reasoning_text.delta и .donePozivi na alatke dolaze posle poruke, svaka kao stavka sa response.function_call_arguments.delta
и .done.
| статус | Када |
|---|---|
400 | Не model или input; previous_response_id, conversation, background ili jedan item_reference (unsupported_parameter); неподржан алат или тип садржаја. |
402, 403, 404, 429, 502, 503 | Што се тиче цхат завршетака. |
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);
Антрополошке поруке
Антхропиц'с формат, за Антхропиц СДКс и Клод Цоде. Ради са сваким моделом у каталогу, не само Клод: захтев се преводи, покреће кроз исту цев и преводи назад.
POST https://nymbot.ai/api/v1/messages - потребан је API кључ, као x-api-key или Authorization: Bearer.
Тхе anthropic-version и anthropic-beta Антропска имена модела су усклађена са каталогом, тако да Клод Цоде и СДК раде са именима које већ користе:
- Име које каталог зна, као што је
claude-sonnet-5илиanthropic/claude-opus-5Користи се као што јесте. - У овом случају, датум (
-20260514),-latest, верзија таг као што је-v1, бракетирани дан као што је[1m]i jedananthropic/илиanthropic.префикс су уклоњени, а тачке и тачке у верзији су испробане на оба начина (claude-haiku-4-5Пронађиclaude-haiku-4.5). - Ако се то и даље не поклапа, користи се породица (Опус, Сонет или Хаику), све док је верзија каталога иста или новија од оне за коју је затражено.
- Име које се не подудара ништа враћа
404not_found_error.
| Поље | Тип | Потребна | Опис |
|---|---|---|---|
model | String | Да | Каталогски идентификатор модела или антрополошки назив модела. |
max_tokens | интегритет | Да | Највише токена за писање. |
messages | Ареј | Да | user и assistant Повратак, са text, image (base64 или изворни URL) tool_use и tool_result Блоковић thinking Блокови из претходних кругова су прихваћени и спуштени. |
system | String или Array | Не | Системски позив, као низа или текстуални блокови. |
temperaturetop_p | Број | Не | Узорак контроле, где их модел узима. top_k Прихваћен је и одбачен. |
stop_sequences | Арсенал Стрингс | Не | Текст који завршава одговор. Највише 4 низа, сваки највише 256 карактера. |
toolstool_choice | Арсенал, Објект | Не | Алати са name, description и input_schema• А web_search Сервер алат се претвара на WEB претраживањеДруги уграђени алати Антхропиц-а (баш, текстуални уредник, употреба рачунара) су одбијени са unsupported_tool. tool_choice узети auto, any, tool или none, и disable_parallel_tool_use. |
thinking | објекта | Не | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} или {"type": "disabled"}Буџет бира ниво напора: испод 2.048 минимално, од 2.048 ниско, од 8.192 средње, од 16.384 високо. output_config.effortИли је високо. |
stream | Боулијан | Не | Стреам у формату догађаја Anthropic. |
metadata | објекта | Не | Прихваћен и игнорисан. |
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 Такође можете држати tool_use Блокови и а thinking
Блоцк, чији signature je prazna. stop_reason је
end_turn, max_tokens, tool_use или refusalРадили су на исти начин као finish_reason је
Цхат завршетак; stop_sequence uvek je
null, чак и када је секвенца заустављања завршила одговор. input_tokens рачуна само свеже уносе; кеширани унос је у два поља кеша.
nymbot Објект и X-Nymbot-Cost-Sats хејдер
Стреамиран, догађаји су антрополошки: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta или thinking_delta),
content_block_stop, message_delta уз разлог заустављања, употребе и nymbot Цена објекта, и message_stop• А ping такође се шаље сваких 15 секунди док модел ради. позиви алата долазе након текста, сваки као
tool_use блок са свим својим уносом у једној input_json_delta.
Greške na ovoj krajnjoj tački koriste Anthropic format:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}Кратка равнотежа је 402 billing_errorПреоптерећени провајдер
503 overloaded_errorНеуспех након што је ток почео шаље се као error догађаја .
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);
Бројање токена
Процена колико улазних токена би захтев за поруке користио, тако да клијент може да провери пре него што пошаље.
POST https://nymbot.ai/api/v1/messages/count_tokens Potreban vam je API ključ.
Тело је исто као и Порукеbez max_tokens; име модела мора да се реши. Бројање је процена: знакови системског позива, порука, позива алата и дефиниције алата подељени су са четири, плус 1,600 за сваку слику. То није сопствени токенизер провајдера, тако да се прави број може разликовати.
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);
Листа модела
Сваки модел и генератор који АПИ прихвата, са оним што кошта.Списак се чита из истог директног каталога као и апликациони пикер, тако да је увек оно што ће сервер покренути.
GET https://nymbot.ai/api/v1/models — није потребан кључ. Скривено пет минута.
GET /api/v1/models/{id} Враћа се један улаз.
| Поље | Тип | Потребна | Опис |
|---|---|---|---|
type | String (потражња) | Не | chat (Одлука о дефолту image, video, audio, embedding или allНеколико се може дати, као image,video. |
Цене су оно што плаћате, са накнадом и маргином већ у, у доларима и у стопама по тренутној цени Битцоин-а. balance каже који баланс модел троши.
nymbot_key је кратко име модела у апликацији. created uvek je 0, jer katalog ne beleži kada je model dodan. per_request уместо тога.
nymbot/auto Увек је прво, цена као variable, са а
routes Листа која даје стопе сваког стандардног путања.Напише визију и размишљање, али не и алате.
GET /api/v1/models/{id} прихвата иста имена и надимке као захтев, и враћа унос за модел на који се одлуче.
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"
}
]
}
Остали типови :
- слике Улаз има
capabilities(accepts_image_url,requires_image_url,edit) и ценаper_generation. - Видео Улаз има
max_duration_secondsиresolutionsИ једна ценаper_secondza svaku rezoluciju. - Аудио Улаз има
audio_typespeechилиtranscriptionценаper_1k_charsилиper_minute. - Уграђивање Улаз има
dimensions,context_length,max_inputsи цена по милиону улазних токена.
Цене означене "estimated": true је процена апликације за генератор чија цена није објављена. type Враћање 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);