Прескокнете до содржината
Враќање на Nymbot

База на знаење Развивачи

Чет, одговори и пораки

Три начини да побарате модел нешто, во трите формати клиентите веќе зборуваат, сите работат на истите модели и се наплаќаат на ист начин.

Чет Завршување

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_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
матрица, струка или објект, booleanнеФункција на повик. види Алатки за повикА web_search алатката се претвора во Веб пребарувањеНа најмногу 128 алатки и 512 KB на дефиниции, вградени на најмногу 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
Објект, Структура, ОбјектнеПрифатено и не испратено. 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интегритетнеНајголем број токени за пишување.
temperature
top_p
БројнеКонтрола на примероци, каде што моделот ги зема.
tools
tool_choice
parallel_tool_calls
матрица, струка или објект, booleanнеФункционални алатки, во форма на Одговори ({"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
Структура, објект, буланнеНе се поддржани: 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), се додека верзијата на каталогот е иста или понова од онаа за која се бара.
  • Името кое не одговара ништо не се враќа 404 not_found_error.
ПолетоТипПотребниОпис на
modelСтрингДаИдентификатор на каталог модел или име на антрополошки модел.
max_tokensинтегритетДаНајголем број токени за пишување.
messagesАрсеналДаuser и assistant Повторно, со text, image (base64 или извор на URL), tool_use и tool_result на блокови. thinking Блокови од претходните вртења се прифаќаат и фрлаат.
systemСтруктура или арсеналнеСистемски повик, како низа или текстови блокови.
temperature
top_p
БројнеКонтрола на примероци, каде што моделот ги зема. top_k Прифатено е и отфрлено.
stop_sequencesРаспоред на StringsнеТекстот кој го завршува одговорот. Најмногу 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 е Чет Завршување; 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_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);