Мазмунга өтүү
Nymbot'ко кайтуу

Билим базасы Розработчикдер

Чат, Жооптор жана Билдирүүлөр

Модельден бир нерсе суроонун үч жолу, кардарлардын сүйлөгөн үч форматында, баары бирдей моделдерде иштейт жана бирдей эле төлөмдөр менен эсептелет.

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_tokens
max_completion_tokens
бүтүн санЖокЖазуу үчүн эң көп токендер. Эгерде жогору болсо, модельдин максималдуу чегине чейин төмөндөтүлөт. Ошондой эле балансыңыздан канча сумма кармала турганын белгилейт, ошондуктан кичинекей сан баштоо үчүн аз кредит талап кылат.
temperature
top_p
санЖокТандап алуу контролдору: temperature 0дан 2ге чейин, top_p 0дан 1ге чейин.
stopсап же массивЖокЖоопту бүтүрүүчү текст: бир сап же эң көп дегенде 4 сап, ар бири эң көп дегенде 256 белги. Колдонулбайт nymbot/auto.
seedбүтүн санЖокМодел колдоого мүмкүнчүлүк берген учурларда, кайталанма тандап алуу үчүн.
presence_penalty
frequency_penalty
санЖокКайталоо контролдору, ар бири -2ден 2ге чейин.
response_formatобъектЖок{"type": "json_object"} же {"type": "json_schema", "json_schema": {…}}, модель колдогон учурда. Колдонулбайт nymbot/auto.
tools
tool_choice
parallel_tool_calls
массив, сап же объект, логикалык типЖокФункцияларды чакыруу. Көрүңүз куралдарды чакыруулар. А web_search курал күйөт интернет издөөЭң көп дегенде 128 курал жана 512 КБ аныктамалар, тереңдиги эң көп дегенде 64 деңгээл; көбүрөөк болсо 400.
reasoning_effort
reasoning
сап, объектЖок"minimal", "low", "medium" же "high", же {"effort": "high"}. "none" же {"enabled": false} өчүрөт. Көрүңүз ой жүгүртүү.
pluginsмассивЖок[{"id": "web", "max_results": 5}] ар дайым алгач интернеттен издөйт. 10ге чейинки жыйынтыктар.
nбүтүн санЖокБолгону 1. Башка нерсе кайтарылат 400.
logit_bias
user
metadata
объект, 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бүтүн санЖокЖазуу үчүн эң көп токендер.
temperature
top_p
санЖокҮлгүлөө контролдору, модель аларды кайда алганы.
tools
tool_choice
parallel_tool_calls
массив, сап же объект, логикалык типЖокФункциялык куралдар, Responses формасында ({"type": "function", "name": …, "parameters": …}). А web_search же web_search_preview курал күйөт интернет издөө көбүнчө жардам бергенде. Башка орнотулган куралдар четке кагылат.
reasoningобъектЖок{"effort": "minimal" | "low" | "medium" | "high"}. xhigh жана max Маани берүү, жаман, орточо. high; none аны өчүрөт.
text.format
response_format
объектЖокСтруктураланган чыгаруу, JSON схемасы катары же json_object.
metadataобъектЖокЖоопто өзгөртүүсүз кайтарылды. Эң көп дегенде 16 саптык маани, ачкычтар 64 белгиге чейин жана маанилер 512 белгиге чейин.
streamлогикалык типЖокТөмөндөгүдөй сүрөттөлгөн окуяларды агынттаңыз.
storeлогикалык типЖокТүгүнүттү. Эч нерсе сакталбайт жана жооп ар дайым төмөнкүдөй болот "store": false.
previous_response_id
conversation
background
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, 503Chat 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) колдонулат.
  • Эч нерсеге дал келбеген ат кайтып келет 404 not_found_error.
АйланатТүрүКеректелүүчүСүрөттөмө
modelсапОобаКаталогдук моделдин ID-си же Anthropic моделинин аталышы.
max_tokensбүтүн санОобаЖазуу үчүн эң көп токендер.
messagesмассивОобаuser жана assistant айлануулар, менен text, image (base64 же URL булагы), tool_use жана tool_result блоктор. thinking мурунку кадамдардагы блоктор кабыл алынат жана ташталат.
systemсап же массивЖокСистемалык промпт, сап же текст блоктору катары.
temperature
top_p
санЖокҮлгүлөө контролдору, модель аларды кайда алганы. top_k кабыл алынды жана четке кагылды.
stop_sequencesсаптардын массивиЖокЖоопту аяктоочу текст. Эң көп дегенде 4 сап, ар бири 256 белгиден ашпоосу керек.
tools
tool_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_type speech же 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);