База знања Развијачи
Чат, одговори и поруке
Три начина да питате модел нешто, у три формата клијенти већ говоре, сви раде на истим моделима и рачунају на исти начин.
Ова страница је машински преведена ради практичности. Енглески оригинал је верзија која се примењује.
Цхат завршетак
ОпенАИ цхат формат, и онај који скоро сваки алат подржава. Пошаљите разговор до сада и вратите следећу поруку.
POST https://nymbot.ai/api/v1/chat/completions Potreban vam je API ključ.
samo model и messages Параметар узорковања који изабрани модел не узима пада без грешке, тако да једно тело захтева ради преко модела. supported_parametersОно што је одбијено уместо бачено је оно што модел уопште не може да уради: слике за модел који не може да види, алате за модел који их не може позвати.
| Поље | Тип | Потребна | Опис |
|---|---|---|---|
model | String | Да | nymbot/auto (или auto) за Нимбот рутирање на стандардној равнотежи, или каталог модел идентификатор као што су 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 Захтев који се не емитује не шаље ништа док одговор није комплетан, а мрежа између вас и Нимбота може затворити празну везу након око 100 секунди; модел и даље завршава и оно што је написао се наплаћује, али одговор је изгубљен.
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 . - Набавка се исплати након што се ток заврши.Ако рано затворите везу, модел се не зауставља: Нимбот чита остатак провајдерског тока, до 25 секунди, да би добио свој број токена, а ви плаћате оно што провајдер извештава.
- Грешка пре првог комада, као што је
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Нимбот никада не покреће ваше функције; он преноси захтев модела назад вама.
tool_choice узети "auto", "none",
"required" или {"type": "function", "function": {"name": "…"}}Листа модела означује које моделе могу позвати алате (capabilities.tools) Алати се одбијају са 400 unsupported_tool је nymbot/auto и на неколико каталогских модела који се покрећу на Транспорту Отговора ОпенАИ-а, на које Нимбот не може проћи алате.
са "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Слике могу бити само у корисничким порукама. Линк мора указати на јавни хост; Нимбот преноси слику провајдеру модела и не чува је.
Слика се наплаћује као улазни токен који провајдер рачуна за њега, као и остатак захтева.
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Нимбот претражује само када се чини да питање треба тренутне информације, исти тест који апликација користи.
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);