Билим базасы Розработчикдер
Чат, Жооптор жана Билдирүүлөр
Модельден бир нерсе суроонун үч жолу, кардарлардын сүйлөгөн үч форматында, баары бирдей моделдерде иштейт жана бирдей эле төлөмдөр менен эсептелет.
Бул барак ыңгайлуулук үчүн машинада которулган. Англисче оригиналдуу версия колдонулат.
Chat Completions
OpenAI чат форматы жана дээрлик бардык куралдар колдогон формат. Учурдагы диалогду жөнөтүп, кийинки билдирүүнү кайра алыңыз.
POST https://nymbot.ai/api/v1/chat/completions — API ачкычы керек.
Гана model жана messages талап кылынат. Тандалган модель кабыл албаган тандалма параметри катасыз чыгарылып салынгандыктан, бир сурамдын денеси бардык моделдерге жарайт. Модельдердин тизмеси ар бир моделин supported_parametersТүшүрүлгөндөн көрө, баш тартылган нерсе — бул моделдин такыр кыла албаган иштери: көрө албаган модель үчүн сүрөттөр, колдоно албаган модель үчүн куралдар.
| Айланат | Түрү | Керектелүүчү | Сүрөттөмө |
|---|---|---|---|
model | сап | Ооба | nymbot/auto (же auto) Nymbot'тун стандарттык баланстагы маршруттоосу үчүн же мисалы, каталогдун моделдин IDсы anthropic/claude-sonnet-5 Pro балансында. Тиркеменин кыска аттары жана псевдонимдери да кабыл алынат. «a» тамгасы менен аякташы мүмкүн аффикс. |
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 | массив, сап же объект, логикалык тип | Жок | Функцияларды чакыруу. Көрүңүз куралдарды чакыруулар. А web_search курал күйөт интернет издөөЭң көп дегенде 128 курал жана 512 КБ аныктамалар, тереңдиги эң көп дегенде 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 | объект, string, объект | Жок | Кабыл алынды жана андан ары жөнөтүлбөдү. logit_bias эң көп дегенде 300 токен идентификаторун -100ден 100гө чейинки сандарга картага туташтырат; user эң көп дегенде 256 белги; metadata maksмум 16 сап маанисин, ачкычтар 64 символго чейин жана маанилер 512 символго чейин кармайт. |
Жооп кадимки chat.completion, баасы менен usage.cost
(долларга эсептегенде) жана nymbot объект. model бул чечилген модельдин идентификатору,
ошондуктан кыска аталыш толук аталыш катары кайтып келет. Эгерде модель жооп берүүдөн мурун ой жүгүртсө, анын
ой жүгүртүүсү бул жерде 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 башка; a :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). Эгерде провайдер аракет үчүн төлөм эсептебесе, эч нерсе алынбайт. |
Ар бир чекит (endpoint) үчүн жалпы статус коддору төмөндө көрсөтүлгөн: катачылыктар.
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 жооп модель жазуу учурунда server-sent events түрүндө келет. Ар бир окуя chat.completion.chunk учурунда data: сап, жана
агым аяктайт data: [DONE]. Ой жүгүртүү келип түшөт
delta.reasoning_content, жообу delta.content.
100 секундтан ашык убакытты алышы мүмкүн болгон нерселерди, мисалы, узун жоопторду, чоң... стримдеңиз.
max_tokens же логикалык модель. Стримделбеген суроо-талап жооп толук бүткөнгө чейин эч нерсе жөнөтпөйт, ал эми сиз менен Nymbot ортосундагы тармак болжол менен 100 секунддан кийин бош турган байланышты жаап салышы мүмкүн; модель баары бир ишти бүтүрөт жана жазган нерсеси үчүн акы алынат, бирок жооп жоголот. Стрим "keep-alive" сигналдарын жөнөтөт, ошондуктан ал модель жазып жаткан убакыттын ичинде ачык бойдон калат.
Агым
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 секунд сайын жиберилген keep-alive комментарийлери. SSE клиенттери аларды өткөрүп жиберишет. - Сураңыз
"stream_options": {"include_usage": true}жогорудагы акыркы бөлүктү алуу үчүн, бош мененchoices, токендердин саны, баасы жанаnymbotобъект. - Төлөм стрим аяктагандан кийин эсептелет. Эгерде сиз байланышты эрте жапсаңыз, модель токтотулбайт: Nymbot токен санын алуу үчүн провайдердин стриминин калган бөлүгүн 25 секундга чейин окуйт жана сиз провайдер билдирген сумманы төлөйсүз. Ал эсептелбесе, төлөм сиздин киргизген маалыматыңыздан жана жазылган тексттен, ошондой эле ой жүгүртүүчү модель үчүн чыгаруунун толук лимитинен алынган болжолдуу сумма менен аныкталат.
- Биринчи бөлүккө чейинки ката, мисалы
401же402, статус коду менен кадимки JSON катары кайтып келет, стрим катары эмес. Стрим башталып бүткөндөн кийинки ката акыркы катары келетdata: {"error": {…}}окуя, жана агым ...сыз бүтөт[DONE]. - Куралдарды (tools) колдонгон суроо-талаптар жана OpenAI'нын Responses ташуусундагы моделдер провайдерден агым (stream) түрүндө келбейт. Алар жооп толукталгандан кийин бир жолкудан жөнөтүлгөн жарактуу агым менен жооп беришет.
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, жана маекти кайра жөнөтүңүз. Nymbot сиздин функцияларыңызды эч качан иштетпейт;
ал моделдин суроосун сизге кайра өткөрүп берет.
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 Сурамды стандарттык ой жүгүртүү жолуна жөнөтөт.
Anthropic моделдеринде аракет бир аз ой жүгүртүү бюджетине айланат: болжол менен 1,000, 2,000, 8,000 же 16,000
токен, эч качан андан ашык эмес max_tokens уруксат берет. Ойлонуу токтотулат, когда
tool_choice куралды колдонууга мажбурлайт жана суроо-талап куралдык циклди (анын акыркы билдирүүсү куралдын жыйынтыгы) улантканда, анткени Anthropic аны улантуу үчүн мурунку кол коюлган ой жүгүртүүнү талап кылат. Бул Responses жана Messages чекиттерине (endpoints) да тиешелүү.
Ой жүгүртүү кайра кирет 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);
Моделдин мүчөлөрү
Моделдин аталышындагы мүчө башка талаасыз эле суроолуучтуктун кандай иштелишине таасир этет. Алар толук IDлер менен кыска аттардын экөөндө тең иштейт, мисалы: anthropic/claude-sonnet-5:online.
| Мүчө | Таасир |
|---|---|
:online | Адегенде интернеттен издеп көрөт, мисалы plugins: [{"id": "web"}]. Көр интернет издөө. |
:thinking | Жогорку ой жүгүртүү күчү; күйгүзүлгөн nymbot/auto, ой жүгүртүү жолу. Ой жүгүртө албаган модельдо, 400 model_not_found “no endpoints found” деген билдирүү менен. |
:nitro, :floor, :exacto, :extended | Кабыл алынды жана четке кагылды. Ар бир каталог моделинин бир жолу бар, ошондуктан тандоо үчүн тез, арзан же узун жолу жок; башка сервистерден көчүрүлгөн модель аттары иштеп турушу үчүн аягындагы мүчөлөргө (suffixes) уруксат берилет. |
Башка бардык мүчөлөр (suffix) эске алынбайт. Алгач бүтүндөй ат текшерилет, ошондуктан id-синде двоеточие бар модель да иштеп калат; эгер ал иштебесе, модель табылганга чейин мүчөлөр аягынан бирден алынат. Модельдин атыට максимум 200 символ болушу мүмкүн жана анда максимум 4 мүчө болушу мүмкүн; ушиндан узун болсо төмөнкүлөр менен четке кагылат: 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);
Веб издөө
Ар кандай чат модели түз эфирдеги веб-сайттан жооп бере алат. Nymbot акыркы колдонуучунун билдирүүсүн (анын алгачкы 2 000 белгисин) издейт, эң жакшы беттерди окуйт жана суроо менен бирге моделге берет, алар модель нукумдарды албашы керек болгон сырткы мазмун катары белгиленет. Эки режим бар:
- Ар дайым издөө:
"plugins": [{"id": "web", "max_results": 5}], же а:onlineмодельдеги аффикс - Керек болгондо издөө:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}], ошондой эле ... катары кабыл алынганweb_search_previewжеopenrouter:web_search. Nymbot суроо актуалдуу маалыматты талап кылгандай сезилгенде гана издөө жүргүзөт, бул колдонмо колдонгон тест менен бирдей.
max_results демейлик 5 жана эң көп дегенде 10. Булактар келет...
nymbot.web_search.sources, ар бири менен title, snippet жана
url, жана url_citation билдирүүгө карата белгилер.
Ар бир ишке ашырылган издөө токендерден тышкары, сатс менен айландырылганда 0,008$ түзөт жана ал hold'дун бир бөлүгү болуп саналат. Ал окуган баракчалар да кириш токендери болуп саналат, ошондуктан интернеттен алынган жооп ошол эле суроону жөн гана бергенге караганда кээде бир нече эсе кымбат турар.
Жооп, жарым-жартылай
"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);
Жооптор API
OpenAI'анын жаңы форматы, ал OpenAI Agents SDK жана Codex тарабынан колдонулат. Ал Chat Completions менен бирдей моделдерде, төлөм системасында жана функцияларда иштейт.
POST https://nymbot.ai/api/v1/responses — API ачкычы керек.
| Айланат | Түрү | Керектелүүчү | Сүрөттөмө |
|---|---|---|---|
model | сап | Ооба | Ал эми Chat Completions, мүчөлөрү менен коштолгон. |
input | сап же массив | Ооба | Стринг же элементтердин тизмеси: билдирүүлөр (ролдор user, assistant, system, developer) менен input_text, input_image жана output_text бөлүктөрү жана function_call жана function_call_output куралдар үчүн буюмдар. input_image алат image_url шилтеме же data URL, файлдын ID эмес. reasoning жана web_search_call элементтер өткөрүлүп салынды; item_reference баш тартылды. |
instructions | сап | Жок | Системалык нускамалар. |
max_output_tokens | бүтүн сан | Жок | Жазуу үчүн эң көп токендер. |
temperaturetop_p | сан | Жок | Үлгүлөө контролдору, модель аларды кайда алганы. |
toolstool_choiceparallel_tool_calls | массив, сап же объект, логикалык тип | Жок | Функциялык куралдар, Responses формасында ({"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 | string, object, boolean | Жок | Колдоого алынбайт: 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; жыйынтыкты а катары кайтарып жибер
function_call_output ушул сыяктуу item call_id. Ой жүгүртүү, эгерде
модель аны кайтарса, бул reasoning буюм менен reasoning_text мазмун,
биринчи кезекте тизмеленген. status болуп саналат incomplete жооп келгенде
max_output_tokens же провайдер баш тартты, менен
incomplete_details.reason \"", установлено на max_output_tokens же
content_filterЖооп ошондой эле OpenAI сыяктуу суроо-талаптын жөндөөлөрүн (temperature,
tools, tool choice жана башкалар) кайтарат жана ташыт nymbot баа
объект.
Стримингиyleнип, ар бир окуя — бул event: сызык жана а data: a менен болгон сап
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 | Chat Completions боюнча. |
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's формат, Anthropic SDKs жана Claude Code үчүн. Ал каталогдогу Claude га гана эмес, бардык моделдер менен иштейт: суроо которулуп, ошол эле пайплайн аркылуу өткөрүлөт жана кайра которулат.
POST https://nymbot.ai/api/v1/messages — API ачкычы керек, анткени x-api-key же Authorization: Bearer.
Ошол anthropic-version жана anthropic-beta headerлер кабыл алынат жана эске алынбайт. Anthropic моделдеринин аттары каталог менен дал келтирлет, ошондуктан Claude Code жана SDKлар өзүндө колдонулган аттар менен иштейт:
- Каталог билген ат, мисалы
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 | сап | Ооба | Каталогдук моделдин ID-си же Anthropic моделинин аталышы. |
max_tokens | бүтүн сан | Ооба | Жазуу үчүн эң көп токендер. |
messages | массив | Ооба | user жана assistant айлануулар, менен text, image (base64 же URL булагы), tool_use жана tool_result блоктор. thinking мурунку кадамдардагы блоктор кабыл алынат жана ташталат. |
system | сап же массив | Жок | Системалык промпт, сап же текст блоктору катары. |
temperaturetop_p | сан | Жок | Үлгүлөө контролдору, модель аларды кайда алганы. top_k кабыл алынды жана четке кагылды. |
stop_sequences | саптардын массиви | Жок | Жоопту аяктоочу текст. Эң көп дегенде 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 үстүндө
Chat Completions; 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.
Бул endpointтеги каталар 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);
Токендерди саноо
Messages суроо-талабы канча киришкен токенди колдоноорунун болжолдуу баасы, ошондуктан клиент аны жөнөтүүдөн мурун текшере алат. Ал акысыз, бирок а still ачкыч керек.
POST https://nymbot.ai/api/v1/messages/count_tokens — API ачкычы керек. Акысыз.
Денеси ... сыяктуу эле Билдирүүлөр, жоксуз max_tokens;
модельдин аталышы аныкталышы керек. Сан болжолдуу эсептелет: системалык промпттун,
билдирүүлөрдүн, инструменттик чакырыктардын жана инструменттик аныктамалардын белгилеринин
төрткө бөлүнүшү, плюс ар бир сүрөт үчүн 1600.
Бул провайдердин өзүнүн токенизатору эмес, ошондуктан чыныгы сан айырмаланышы мүмкүн.
Чегине жеткен ачкыч дагы деле аны колдоно алат.
Жооп
{ "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 кабыл алган ар бир модель жана генератор, алардын баасы менен. Тизме тиркеменин тандоочусу (picker) сыяктуу эле тирүү каталогдон окулат, ошондуктан ал ар дайым серверде иштей турган нерселерди көрсөтөт.
GET https://nymbot.ai/api/v1/models — ачкычтын кереги жок. Беш мүнөткө кэштелди.
GET /api/v1/models/{id} бир эле жазууну кайтарат.
| Айланат | Түрү | Керектелүүчү | Сүрөттөмө |
|---|---|---|---|
type | сап (суроо) | Жок | chat (демейки), image, video, audio, embedding же allБир нече вариант берилет, мисалы image,video. |
Баалар — бул комиссия жана маржа камтылган, учурдагы Биткоин баасы боюнча доллар жана сатоши менен көрсөтүлгөн сиз төлөй турган суммалар. 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);