База на знаење Развивачи
Чет, одговори и пораки
Три начини да побарате модел нешто, во трите формати клиентите веќе зборуваат, сите работат на истите модели и се наплаќаат на ист начин.
Оваа страница е машински преведена за погодност. Англискиот оригинал е верзијата што се применува.
Чет Завршување
OpenAI форматот за разговор, и оној кој речиси секоја алатка го поддржува. Испратете го разговорот досега и добијте ја следната порака назад.
POST https://nymbot.ai/api/v1/chat/completions Потребен ви е API клуч.
само model и messages параметар за земање примероци избраниот модел не е фрлен без грешка, така што едно барање тело работи на модели. supported_parametersОна што е одбиено наместо да се фрли е нешто што моделот воопшто не може да го направи: слики за модел кој не може да види, алатки за модел кој не може да ги повика.
| Полето | Тип | Потребни | Опис на |
|---|---|---|---|
model | Стринг | Да | nymbot/auto (или на auto) за рутирање на Nymbot на стандардниот баланс, или каталог модел id како што се anthropic/claude-sonnet-5 Прифатени се и кратките имиња и псевдоними на апликацијата. Доволно. |
messages | Арсенал | Да | Разговор, улоги system, developer (третираат како систем) user, assistant и toolСодржината е низа или листа на 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 | Структура или арсенал | не | Текстот кој го завршува одговорот: еден синџир или најмногу 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 | матрица, струка или објект, boolean | не | Функција на повик. види Алатки за повикА web_search алатката се претвора во Веб пребарувањеНа најмногу 128 алатки и 512 KB на дефиниции, вградени на најмногу 64 нивоа длабоко; повеќе е 400. |
reasoning_effortreasoning | Ѕид, објект | не | "minimal", "low", "medium" или "high"или {"effort": "high"}. "none" или {"enabled": false} Избегнувајте го.Види Разумирање. |
plugins | Арсенал | не | [{"id": "web", "max_results": 5}] Секогаш прво пребарува на интернет. до 10 резултати. |
n | интегритет | не | 1.Сè останато се враќа 400. |
logit_biasusermetadata | Објект, Структура, Објект | не | Прифатено и не испратено. logit_bias мапи на најмногу 300 токен идентификатори на броеви од -100 до 100; user има максимум 256 карактери; metadata Содржи најмногу 16 знаци на низа, клучеви до 64 знаци и вредности до 512. |
Одговорот е обичен. chat.completionСо трошоците во usage.cost
(во долари) и во nymbot на објектот. model е решениот модел id, така што краткото име се враќа како целосно име. message.reasoning_contentОдделно од одговорот.
Одговор
{
"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
Инаку 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]Разумот доаѓа во
delta.reasoning_contentОдговорот во delta.content.
Стреам нешто што може да потрае повеќе од околу 100 секунди, како што е долг одговор, голем
max_tokens Барање кое не е пренесувано не испраќа ништо додека одговорот не е комплетен, а мрежата помеѓу вас и Nymbot може да затвори празно поврзување по околу 100 секунди; моделот сè уште завршува и она што го напишал е наплатено, но одговорот е изгубен.
Поток
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]
- Линии кои започнуваат со
:Постојат коментари кои се испраќаат на секои 15 секунди додека моделот размислува. - Прашајте за
"stream_options": {"include_usage": true}за да го добиете последниот дел погоре, со празенchoices, токенот брои, цената иnymbotна објектот. - Ако ја затворите врската порано, моделот не се запира: Nymbot го чита остатокот од протокот на провајдерот, до 25 секунди, за да го добие својот број на токени, и плаќате што го известува провајдерот.
- Грешка пред првиот дел, како што е
401или402, се враќа како обичен JSON со својот статус код, а не како поток.data: {"error": {…}}настанот, а потокот завршува без[DONE]. - Барања со алатки, и модели на OpenAI одговори транспорт, не се протокот од провајдерот. Тие се уште одговори со валиден тек, испратени откако одговорот е комплетен.
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_idNymbot никогаш не ги извршува вашите функции; тој ја пренесува барањето на моделот назад кон вас.
tool_choice Земи "auto", "none",
"required" или {"type": "function", "function": {"name": "…"}}Листата на модели означува кои модели можат да се нарекуваат алатки (capabilities.toolsИнструментите се одбиваат со 400 unsupported_tool е nymbot/auto и на неколку каталог модели кои работат на OpenAI Responses транспорт, на кои Nymbot не може да ги пренесе алатките.
со "stream": true, барање со алатки се изведува во еден дел и потоа се испраќа како нормална секвенца: улогата, еден дел носејќи секој повик за алатка со својот индекс, id, име и аргументи, и завршниот дел.
Одговорот, делумно
"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 Можете да ги прочитате сликите.Додадете image_url
дел до порака на корисникот, или со јавност https:// Линк или А
data:image/…;base64, URL. До 20 слики по барање. SVG слики се одбиваат, па така е линк од повеќе од 4.096 знаци или еден со корисничко име или лозинка во него (400 invalid_image_url• Опционална detail е
auto, low или high.
со nymbot/auto, барањето со слика во него е насочено кон стандарден модел кој може да се види. capabilities.vision Одбивање на слики со
400 unsupported_contentСликите можат да бидат само во пораките на корисниците.Линкот мора да укаже на јавен домаќин; Nymbot ја пренесува сликата на провајдерот на моделот и не ја чува.
Сликата се наплаќа како влезните токени што провајдерот ги брои за неа, како и остатокот од барањето.
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);
Разумирање
Модели со capabilities.reasoning може да размислува пред да одговори. побара повеќе или помалку од тоа со 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 присилува алатка, и кога барањето продолжува алатка лак (нејзината последна порака е резултат на алатка), бидејќи Anthropic треба претходно потпишано размислување за да го продолжи.
Размислувањето се враќа во 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);
Модел на суфиксии
Суфикс на името на моделот го менува начинот на кој се обработува барањето, без друго поле. anthropic/claude-sonnet-5:online.
| Доволно | Ефектот |
|---|---|
:online | Пребарајте ја веб-страницата прво, како plugins: [{"id": "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);
Веб пребарување
Нимбот бара последна порака од корисникот (првите 2.000 знаци), ги чита најдобрите страници и ги дава на моделот со прашање, означен како надворешна содржина од која моделот не треба да зема инструкции.
- Секогаш во потрага:
"plugins": [{"id": "web", "max_results": 5}]или а:onlineДоволно е за моделот. - Пребарајте кога помага:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Исто така, прифатени какоweb_search_previewилиopenrouter:web_searchNymbot пребарува само кога прашањето изгледа дека има потреба од тековни информации, истиот тест го користи апликацијата.
max_results е 5 по претпоставка и најмногу 10. изворите се враќаат во
nymbot.web_search.sourcesСекој со а title, snippet и
urlИ како url_citation Анотација на пораката.
Секое пребарување кое работи чини $ 0,008, конвертирано во sats, на врвот на токените, и тоа е дел од држењето. Страниците што ги читаат се и влезни токени, така што одговорот од веб-страницата чини повеќе од истото прашање прашано ладно, понекогаш неколку пати повеќе.
Одговорот, делумно
"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);
Одговор на огнот
Поновиот формат на OpenAI, кој се користи од страна на OpenAI Agents SDK и од страна на Codex. Тоа работи на истите модели, фактурирање и функции како Chat Completions.
POST https://nymbot.ai/api/v1/responses Потребен ви е API клуч.
| Полето | Тип | Потребни | Опис на |
|---|---|---|---|
model | Стринг | Да | Како за Чет ЗавршувањеДополнителни додатоци вклучени. |
input | Структура или арсенал | Да | Структура, или листа на елементи: пораки (роли user, assistant, system, developer) со input_text, input_image и output_text делови и function_call и function_call_output Предмети за алатки. input_image Земете еден image_url линк или URL на податоци, а не идентификатор на датотека. reasoning и web_search_call предметите се прескокнуваат; item_reference е одбиен |
instructions | Стринг | не | Инструкции за системот. |
max_output_tokens | интегритет | не | Најголем број токени за пишување. |
temperaturetop_p | Број | не | Контрола на примероци, каде што моделот ги зема. |
toolstool_choiceparallel_tool_calls | матрица, струка или објект, boolean | не | Функционални алатки, во форма на Одговори ({"type": "function", "name": …, "parameters": …}) а web_search или web_search_preview алатката се претвора во Веб пребарување кога тоа помага. Други вградени алатки се одбиваат. |
reasoning | објектот | не | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh и max Значи high; none Свртете го тоа. |
text.formatresponse_format | објектот | не | Структуриран излез, како JSON шема или json_object. |
metadata | објектот | не | Вратено непроменето во одговорот. На најмногу 16 вредности на низа, клучеви до 64 знаци и вредности до 512. |
stream | Боулијан | не | Стреам настани како што е опишано подолу. |
store | Боулијан | не | Ништо не е зачувано, а одговорот секогаш вели "store": false. |
previous_response_idconversationbackground | Структура, објект, булан | не | Не се поддржани: 400 unsupported_parameterОдговорите не се чуваат, па испратете го целиот разговор во input Секој пат |
Одговор
{
"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Испратете го резултатот како a
function_call_output Поентата со истата call_idРазмислување, кога моделот го враќа, е reasoning точка со reasoning_text Содржина, прво на листата. status е incomplete Кога одговорот ќе дојде
max_output_tokens или да се одбие, со
incomplete_details.reason Поставете го max_output_tokens или
content_filterОдговорот, исто така, ги одразува поставките на барањето (температура, алатки, избор на алатки и така натаму) како што го прави OpenAI, и ги носи nymbot Цената на објектот
Стреамед, секој настан е event: Линија и А data: Линија со А
sequence_numberВо овој редослед: 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 и .doneИнструментот повици доаѓаат по пораката, секој како елемент со response.function_call_arguments.delta
и .done.
| Статус | Кога |
|---|---|
400 | не model или input; previous_response_id, conversation, background или на 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);
Антрополошки пораки
Формат на Anthropic, за Anthropic SDKs и Claude Code. Тоа работи со секој модел во каталогот, не само Claude: барањето е преведено, работи низ иста цевка, и преведена назад.
POST https://nymbot.ai/api/v1/messages - потребен е API клуч, како x-api-key или Authorization: Bearer.
на anthropic-version и anthropic-beta Имињата на антрополошките модели се споредуваат со каталогот, така што Claude Code и SDKs работат со имињата што веќе ги користат:
- име кое го знае каталогот, како што е
claude-sonnet-5илиanthropic/claude-opus-5Се користи како што е. - Датум на пристигнување (
-20260514),-latest, верзија таг како-v1На пример, еден браузер како[1m]и еднаanthropic/илиanthropic.Префиксот е отстранет, а точките и тапите во верзијата се испробани на двата начина (claude-haiku-4-5Пронајдетеclaude-haiku-4.5). - Ако тоа сè уште не одговара, се користи семејството (Opus, Sonnet или Haiku), се додека верзијата на каталогот е иста или понова од онаа за која се бара.
- Името кое не одговара ништо не се враќа
404not_found_error.
| Полето | Тип | Потребни | Опис на |
|---|---|---|---|
model | Стринг | Да | Идентификатор на каталог модел или име на антрополошки модел. |
max_tokens | интегритет | Да | Најголем број токени за пишување. |
messages | Арсенал | Да | user и assistant Повторно, со text, image (base64 или извор на URL), tool_use и tool_result на блокови. thinking Блокови од претходните вртења се прифаќаат и фрлаат. |
system | Структура или арсенал | не | Системски повик, како низа или текстови блокови. |
temperaturetop_p | Број | не | Контрола на примероци, каде што моделот ги зема. top_k Прифатено е и отфрлено. |
stop_sequences | Распоред на Strings | не | Текстот кој го завршува одговорот. Најмногу 4 низи, секој со најмногу 256 знаци. |
toolstool_choice | Арсенал, Објект | не | Алатки со name, description и input_schemaА web_search Сервер алатка се претвора во Веб пребарувањеДругите вградени алатки на Anthropic (bash, текстуален уредник, компјутерска употреба) се одбиваат со 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 | објектот | не | Прифатени и игнорирани. |
Одговор
{
"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 е празна stop_reason е
end_turn, max_tokens, tool_use или refusalРаботеше на ист начин како finish_reason е
Чет Завршување; stop_sequence Секогаш е
null, дури и кога спирачката завршува со одговорот. input_tokens брои само свежо влез; кеш влез е во двете кеш полиња.
nymbot Објектот и X-Nymbot-Cost-Sats Хејдер
Стреамирани, настаните се на Anthropic: 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.
Грешките на оваа крајна точка го користат формата на Anthropic:
{"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 Потребен ви е API клуч.
Телото е исто како и ПоракиБез max_tokens; името на моделот мора да се реши. броењето е проценка: ликовите на системскиот повик, пораките, повиците на алатките и дефинициите на алатките поделени со четири, плус 1,600 за секоја слика. Тоа не е сопствениот токенизатор на провајдерот, па вистинскиот број може да се разликува.
Одговор
{ "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);
Листа на модели
Секој модел и генератор го прифаќа API, со она што го чини.Листата се чита од истиот директен каталог како и селекторот на апликацијата, така што секогаш тоа е она што серверот ќе работи.
GET https://nymbot.ai/api/v1/models - нема потреба од клуч. Скриен за пет минути.
GET /api/v1/models/{id} Враќање на еден влез
| Полето | Тип | Потребни | Опис на |
|---|---|---|---|
type | Структура на прашање (query) | не | chat на дефектот, image, video, audio, embedding или allНеколку може да се дадат, како image,video. |
Цените се она што го плаќате, со надоместокот и маргината веќе во, во долари и во sats на тековната цена на Bitcoin. balance Кажува на кој баланс троши моделот.
nymbot_key е краткото име на моделот во апликацијата. created секогаш е 0, бидејќи каталогот не запишува кога е додаден модел. per_request наместо тоа.
nymbot/auto секогаш е прв, ценета како variableСо а
routes Листа која ги дава стапките на секој стандарден пат. Тој ги набројува визијата и размислувањето, но не и алатките.
GET /api/v1/models/{id} ги прифаќа истите имиња и псевдоними како барање и го враќа влезот за моделот за кој се одлучуваат.
Одговор
{
"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_secondза секоја одлука. - Аудио Влезот има
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);