Ugrás a tartalomhoz
Vissza a Nymbothoz

Tudásbázis Fejlesztők

Chat, válaszok és üzenetek

Három módja annak, hogy kérjen valamit egy modelltől, a három formátumban az ügyfelek már beszélnek, mind ugyanazon a modellen futnak, és ugyanúgy számlázzák.

Chat befejezés

Az OpenAI chat formátum, és szinte minden eszköz támogatja. Küldje el a beszélgetést eddig, és kapja meg a következő üzenetet.

POST https://nymbot.ai/api/v1/chat/completions Szüksége van egy API kulcsra.

Csak model és messages A kiválasztott modell nem veszi a mintavételi paramétert hiba nélkül, így az egyik kérés test működik a modellek között. supported_parametersAmit elutasítanak, ahelyett, hogy eldobnának, az egyáltalán nem lehet: képek egy modellről, aki nem látja, eszközök egy modell számára, aki nem hívhatja őket.

mezőtípusSzükségleírás
modelStringIgennymbot/auto (vagy auto) a Nymbot szabványos mérlegre történő útválasztásához, vagy egy katalógusmodell-id-hez, például anthropic/claude-sonnet-5 a Pro-egyensúlyon. Az alkalmazás rövid nevei és aliasai is elfogadhatók. elegendő.
messagesArrairaIgenA beszélgetés, a szerepek system, developer (a rendszert úgy kell kezelni, user, assistant és toolA tartalom egy sor vagy egy lista a text és image_url részek; képek csak a felhasználói üzenetekben. input_audio A fájlokat elutasítják.
streamBooleánnemA válaszokat úgy küldje el, ahogy meg van írva. lásd Streamálás.
stream_optionsObjektumnem{"include_usage": true} hozzáadja a végső darabot a token számokkal és a költségekkel.
max_tokens
max_completion_tokens
IntegrálnemA legtöbb token, amit le kell írni. Alacsonyabb a modell maximumára, ha magasabb. Azt is meghatározza, hogy mennyi marad a mérlegből, így egy kisebb számnak kevesebb hitelre van szüksége a kezdéshez.
temperature
top_p
számnemA mintavétel ellenőrzése: temperature 0 és 2 között, top_p 0 és 1 között.
stopString vagy arraynemA válasz befejező szövege: egy sor vagy legfeljebb 4 sor, mindegyik legfeljebb 256 karakter. nymbot/auto.
seedIntegrálnemAz ismétlődő mintavételhez, ahol a modell támogatja.
presence_penalty
frequency_penalty
számnemIsmétlődő ellenőrzések, mindegyik -2 és 2 között.
response_formatObjektumnem{"type": "json_object"} vagy {"type": "json_schema", "json_schema": {…}}, ahol a modell támogatja. nem használják nymbot/auto.
tools
tool_choice
parallel_tool_calls
array, string vagy objektum, booleannemHívás funkció: lásd Eszköz hívásAz A web_search A szerszám a Web keresésLegfeljebb 128 eszköz és 512 KB definíció, legfeljebb 64 szinten mélyen; több 400.
reasoning_effort
reasoning
Szálak, tárgyaknem"minimal", "low", "medium" vagy "high"vagy {"effort": "high"}. "none" vagy {"enabled": false} Távolítsa el. lásd érvelés.
pluginsArrairanem[{"id": "web", "max_results": 5}] Mindig keresi az internetet először. legfeljebb 10 eredményt.
nIntegrálnem1. Minden más visszatér 400.
logit_bias
user
metadata
Szöveg, Szöveg, ObjektumnemElfogadták és nem küldték tovább. logit_bias térképek legfeljebb 300 token azonosítóval a -100 és 100 közötti számokra; user Legfeljebb 256 karakter. metadata Legfeljebb 16 karakterlánc értéket, legfeljebb 64 karaktert és legfeljebb 512 értéket tartalmaz.

A válasz egy hétköznapi chat.completionA költségek mellett a usage.cost dollárban) és a nymbot Az objektum. model a megoldott modell id, így egy rövid név a teljes névként jön vissza. Ha a modell a válaszadás előtt érvel, az érvelése a message.reasoning_contentA választól elválaszolva.

Válasz

{
  "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 a visszajövetelből kiindulva, mivel a szolgáltatók másképp számolnak be: tool_calls Amikor a modell eszközöket kért, length amikor a válasz minden megengedett tokent használt (vagy a modell mindegyiket érveléssel töltötte, és nem írt semmilyen választ), content_filter ha a szolgáltató elutasítja, és stop Ellenkező esetben usage.completion_tokens_details.reasoning_tokens mindig 0: a rejtett érvelési tokeneket számolják, és completion_tokens.

státuszMikor
400nem model vagy messages (missing_required_parameter); egy audió vagy fájl részét, vagy egy modell képét, amely nem láthatja őket (unsupported_content(több mint 20 kép)too_many_images); egy mintavételi paraméter a rossz típusú vagy a tartományon kívül (invalid_value); egy kép linkje, amely nem nyilvános (invalid_image_url); eszközök egy modell, amely nem hívja őket (unsupported_tool); n a) az 1; a :thinking egy olyan modellre vonatkozó suffix, amely nem indokolható (model_not_found(vagy a szolgáltató elutasította a kérelmet)upstream_rejected).
402A modell által elköltött egyenleg nem fedezi a tartást.
403A legrosszabb esetben nem illeszkedik a kulcs kapu (key_limit_reached• Alacsonyabb max_tokens Vagy emelje fel a fejét.
404Nincs olyan modell, amelynek neve (model_not_found).
429A kulcsszint korlátozása, vagy a szolgáltató (upstream_rate_limited).
502, 503A szolgáltató sikertelen (upstream_error) vagy túlterhelt (upstream_overloadedAzokkal a Retry-AfterSemmi sem kerül felszámításra, hacsak a szolgáltató nem számlázta meg a kísérletet.

Az egyes végpontrészvények állapotkódjait a hibák.

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álás

Azokkal "stream": true A válasz a kiszolgáló által küldött eseményként érkezik, miközben a modell írja. chat.completion.chunk Az a data: vonal, és a folyó véget ér a data: [DONE]Az érvelés megérkezik delta.reasoning_contentA válasz a delta.content.

Töltsön le bármit, ami több mint 100 másodpercet vesz igénybe, például egy hosszú választ, egy nagy max_tokens Egy nem streamelt kérés addig nem küld semmit, amíg a válasz be nem fejeződik, és az Ön és a Nymbot közötti hálózat kb. 100 másodperc után bezárhat egy üres kapcsolatot; a modell még mindig befejeződik, és amit írt, feltöltődik, de a válasz elveszett.

áramlás

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]
  • vonalak kezdve a : Ezeket a megjegyzéseket minden 15 másodpercben elküldik, miközben a modell gondolkodik.
  • Kérdezd meg "stream_options": {"include_usage": true} hogy az utolsó darabot a tetején, egy üres choices, a token számít, a költség és a nymbot Az objektum.
  • Ha korán bezárja a kapcsolatot, a modell nem áll meg: A Nymbot legfeljebb 25 másodpercig elolvassa a szolgáltató áramának többi részét, hogy megkapja a token számát, és kifizeti, amit a szolgáltató jelent.
  • A hiba az első csomó előtt, például 401 vagy 402, visszatér a szokásos JSON-ként az állapotkódjával, nem pedig áramként. data: {"error": {…}} esemény, és a stream véget ér anélkül, hogy [DONE].
  • Az eszközökkel és modellekkel kapcsolatos kérelmek az OpenAI Válaszok szállításánál nem a szolgáltatótól származnak, továbbra is érvényes áramlással válaszolnak, miután a válasz elkészült.

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);
}

Eszköz hívás

Funkciók leírása a tools és a modell megkérheti, hogy hívjanak, ahelyett, hogy válaszolna. Ön futtatja a funkciót, adja hozzá az eredményét tool Üzenet ugyanazzal a tool_call_idA Nymbot soha nem futtatja a funkciókat; a modell kérését továbbítja Önnek.

tool_choice Vegyük "auto", "none", "required" vagy {"type": "function", "function": {"name": "…"}}A modellek listája jelöli, hogy mely modellek hívhatják az eszközöket (capabilities.toolsAz eszközöket elutasítják 400 unsupported_tool Azon nymbot/auto és az OpenAI Responses szállításán futó néhány katalógusmodellre, amelyekre a Nymbot nem tud eszközöket átadni.

Azokkal "stream": true, az eszközökkel ellátott kérés egy darabban fut, majd normál darabsorozatként kerül elküldésre: a szerep, egy darab, amely minden eszközhívást indexével, azonosítójával, nevével és argumentumaival hordoz, és a befejező darab.

A válasz részben

"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);

Képek egy kérésben

Modellek a capabilities.vision Képek megtekinthetők. hozzáadása image_url egy felhasználói üzenethez, vagy egy közönséghez https:// link vagy a data:image/…;base64, URL. Legfeljebb 20 kép kérésre. SVG képek elutasítják, és így van egy link több mint 4096 karakter, vagy egy felhasználói névvel vagy jelszóval (400 invalid_image_urlEgy opcionális detail az auto, low vagy high.

Azokkal nymbot/auto, egy képpel ellátott kérést egy olyan szabványos modellre irányítanak, amely láthatja. capabilities.vision Elutasítja a képeket 400 unsupported_contentA képek csak a felhasználói üzenetekben lehetnek.A linknek egy nyilvános hostra kell mutatnia; a Nymbot továbbítja a képet a modell szolgáltatójának, és nem tartja meg.

A képet a szolgáltató belépési tokenként számítja fel, mint a kérés többi részét.

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);

érvelés

Modellek a capabilities.reasoning tudnak gondolkodni, mielőtt válaszolnak. kérjen többé-kevésbé reasoning_effort ("minimal", "low", "medium" vagy "high") vagy "reasoning": {"effort": "high"}vagy adjunk hozzá :thinking a modell nevéhez, ami nagy erőfeszítést jelent. Az indokolás nélküli modellben a beállítást figyelmen kívül hagyják. nymbot/auto, :thinking a kérést a standard érvelési útvonalra küldi.

Az Anthropic modelleken az erőfeszítés mintegy 1000, 2 000, 8 000 vagy 16 000 token gondolkodási költségvetéssé válik, soha nem több, mint max_tokens A gondolkodás elmarad, amikor tool_choice erővel egy eszközt, és amikor a kérés folytatódik egy eszköztár (utolsó üzenete egy eszköz eredménye), mert az Anthropicnak szüksége van a korábban aláírt gondolkodásra, hogy újraindítsa.

Az érvelés visszatér message.reasoning_contentvagy delta.reasoning_content amikor streaming, soha nem keveredik a válaszba. Az érvelés kimenet, és mint ilyen, belsejében completion_tokensNéhány szolgáltató egyáltalán nem adja vissza az érvelési szöveget, és még mindig díjat fizet.

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);

Elérhető modell

A modellnéven lévő szófizet megváltoztatja a kérés feldolgozásának módját, egy másik mező nélkül. A teljes azonosítók és a rövid nevek egyaránt működnek, mint a anthropic/claude-sonnet-5:online.

Eléghatása
:onlineElőször a weboldalt keresi, mint plugins: [{"id": "web"}]Ez Web keresés.
:thinkingAz érvelő erőfeszítés; a nymbot/autoaz érvelési útvonalon, egy olyan modellben, amely nem érvelhet, 400 model_not_found “ nincs találat ”
:nitro, :floor, :exacto, :extendedMinden katalógusmodellnek van egy útvonala, így nincs gyorsabb, olcsóbb vagy hosszabb választani; az utónevek megengedettek, így a más szolgáltatásokból másolt modellnevek még mindig működnek.

Bármely más melléknevét figyelmen kívül hagyják. Az egész nevet először megpróbálják kipróbálni, így egy modell, amelynek azonosítója valóban tartalmaz egy vastagbélrákot, még mindig működik; ennek hiányában a mellékneveket egyszerre veszik le a végén, amíg egy modell nem egyezik meg. 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);

Bármely csevegőmodell válaszolhat az élő webről.Nymbot keres az utolsó felhasználói üzenetet (az első 2000 karakterét), elolvassa a legjobb oldalakat, és megadja őket a modellnek a kérdéssel, amelyet külső tartalomként jelöltek meg, a modell nem vehet utasításokat.Két mód van:

  • Mindig keresés: "plugins": [{"id": "web", "max_results": 5}]Vagy a :online elegendő a modellhez.
  • Keresse meg, ha segít: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Azt is elfogadták, mint web_search_preview vagy openrouter:web_searchA Nymbot csak akkor keres, ha a kérdés úgy tűnik, hogy az aktuális információkat igényli, ugyanazt a tesztet használja az alkalmazás.

max_results 5 alapértelmezés szerint és legfeljebb 10. A források visszatérnek a nymbot.web_search.sourcesMindegyik a title, snippet és urlÉs mint url_citation Megjegyzések az üzenetben.

Minden keresés, hogy fut költsége $ 0,008, átalakítva Sats, a tokenek tetején, és ez része a tartás. az oldalak olvasott beviteli tokenek is, így a válasz az interneten kerül több, mint ugyanaz a kérdés kérte hideg, néha többször többet.

A válasz részben

"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);

Válasz Tűz

Az OpenAI legújabb formátumát az OpenAI Agents SDK és a Codex használja. ugyanazokon a modelleken, számlázási és funkciókon fut, mint a Chat Completions.

POST https://nymbot.ai/api/v1/responses Szüksége van egy API kulcsra.

mezőtípusSzükségleírás
modelStringIgenAhogy a Chat befejezésBeleértve a suffixeket is.
inputString vagy arrayIgenEgy sor, vagy az elemek listája: üzenetek (szerepek user, assistant, system, developer) a input_text, input_image és output_text Részek és function_call és function_call_output Elemek az eszközökhöz. input_image Vegyünk egy image_url link vagy adat URL, nem fájl-id. reasoning és web_search_call a tárgyak elhalványulnak; item_reference Az elutasított.
instructionsStringnemA rendszer utasításai.
max_output_tokensIntegrálnemA legtöbb token írni.
temperature
top_p
számnemSzemléltető vezérlők, ahol a modell veszi őket.
tools
tool_choice
parallel_tool_calls
array, string vagy objektum, booleannemA funkció eszközök, a Válaszok formájában ({"type": "function", "name": …, "parameters": …}) a web_search vagy web_search_preview A szerszám a Web keresés Amikor ez segít, más beépített eszközöket elutasítanak.
reasoningObjektumnem{"effort": "minimal" | "low" | "medium" | "high"}. xhigh és max jelentése high; none Fordítsa le azt.
text.format
response_format
Objektumnemstrukturált kimenet, mint egy JSON-sémát vagy json_object.
metadataObjektumnemVálaszban változatlanul. legfeljebb 16 karakterlánc-értéket, legfeljebb 64 karaktert és legfeljebb 512 értéket tartalmazó kulcsot.
streamBooleánnemStream események az alábbiakban leírtak szerint.
storeBooleánnemSemmi sem tárolódik, és a válasz mindig azt mondja "store": false.
previous_response_id
conversation
background
String, Objektum és BooleannemNem támogatott : 400 unsupported_parameterA válaszok nem kerülnek tárolásra, így az egész beszélgetést a input Minden alkalommal

Válasz

{
  "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 }
}

Az eszköz kérése megjelenik a output mint a function_call Cikkek a call_id, name és argumentsAz eredményt küldje vissza a function_call_output Ugyanazokkal a pontokkal call_idAz érvelés, amikor a modell visszaadja azt, egy reasoning Cikkek a reasoning_text A tartalom, az első felsorolás. status az incomplete Amikor a válasz megérkezik max_output_tokens A szolgáltató megtagadta a incomplete_details.reason Állítsa be max_output_tokens vagy content_filterA válasz a kérés beállításait (hőmérséklet, eszközök, eszközválasztás stb.) is visszhangozza, ahogy az OpenAI teszi, és átveszi a nymbot Az objektum költsége.

Szórakozás > Minden esemény egy event: A vonal és a data: A vonal a sequence_numberEbben a sorrendben: response.created, response.in_progress, response.output_item.added, response.content_part.addedBármely számú response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.doneÉs végül response.completed a felhasználás és a költség. egy válasz rövid véget ér response.incomplete helyett, és egy kudarc, miután a stream kezdődött a response.failedAz áramlást mint saját tárgyat a response.reasoning_text.delta és .doneAz eszközhívások az üzenet után jönnek, mindegyikük egy elemként response.function_call_arguments.delta és .done.

státuszMikor
400nem model vagy input; previous_response_id, conversation, background Vagy egy item_reference (unsupported_parameter); nem támogatott eszköz vagy tartalomtípus.
402, 403, 404, 429, 502, 503A chat befejezéséhez.

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);

Antropológiai üzenetek

Az Anthropic SDK és a Claude Code esetében az Anthropic formátum működik a katalógus minden modelljével, nem csak Claude-val: a kérelmet lefordítják, ugyanazon a csővezetéken futtatják, és visszafordítják.

POST https://nymbot.ai/api/v1/messages - szükség van egy API kulcsra, mint x-api-key vagy Authorization: Bearer.

A anthropic-version és anthropic-beta Az antropikus modellnevek a katalógushoz illeszkednek, így a Claude Code és az SDK-k a már használt nevekkel működnek:

  • Egy olyan név, amelyet a katalógus ismer, mint például claude-sonnet-5 vagy anthropic/claude-opus-5Úgy használják, ahogy van.
  • Egy másik dátum (-20260514), -latestEgy olyan verzió, mint -v1Egy olyan fárasztó nap, mint [1m] és egy anthropic/ vagy anthropic. az előtagok eltávolításra kerülnek, és a pontok és a csúszdák a változatban mindkét irányban kipróbálhatók (claude-haiku-4-5 Találatok claude-haiku-4.5).
  • Ha ez még mindig nem egyezik meg, akkor a családot (Opus, Sonnet vagy Haiku) használják, mindaddig, amíg a katalógus verziója ugyanaz vagy újabb, mint a kért verzió.
  • Egy név, ami nem egyezik meg, visszatér 404 not_found_error.
mezőtípusSzükségleírás
modelStringIgenKatalógusos modellazonosító vagy antropikus modellazonosító.
max_tokensIntegrálIgenA legtöbb token írni.
messagesArrairaIgenuser és assistant A fordulat, a text, image (base64 vagy URL forrás) tool_use és tool_result A blokkok. thinking A korábbi fordulókból származó blokkokat elfogadják és eldobják.
systemString vagy arraynemRendszer prompt, mint egy sor vagy szöveges blokkok.
temperature
top_p
számnemSzemléltető vezérlők, ahol a modell veszi őket. top_k Elfogadták és elengedték.
stop_sequencesA szálak arraynemLegfeljebb 4 sor, mindegyik legfeljebb 256 karakter.
tools
tool_choice
tárgya, objektumnemEszközök a name, description és input_schemaAz A web_search A szerver szerszám beállítva Web keresésAz Anthropic egyéb beépített eszközei (bash, szövegszerkesztő, számítógépes használat) nem használhatók unsupported_tool. tool_choice Vegyük auto, any, tool vagy noneés disable_parallel_tool_use.
thinkingObjektumnem{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} vagy {"type": "disabled"}A költségvetés erőfeszítés szintjét választja: 2048 minimális alatt, 2048 alacsonyról, 8192 közepesről, 16384 magasról. output_config.effortVagy akár magas.
streamBooleánnemStream az Anthropic esemény formátumában.
metadataObjektumnemElfogadják és figyelmen kívül hagyják.

Válasz

{
  "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 Azt is tarthatjuk tool_use Blokkok és a thinking A blokk, amelynek signature Az üres. stop_reason az end_turn, max_tokens, tool_use vagy refusalUgyanúgy dolgozott, mint finish_reason Azon Chat befejezés; stop_sequence Mindig az null, még akkor is, ha egy stop szekvencia befejezte a választ. input_tokens csak friss bemenetek számítanak; a gyorsítótámasztott bemenetek a két gyorsítótámasztó mezőben vannak. nymbot Az objektum és a X-Nymbot-Cost-Sats A header.

Az események az Anthropic: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta vagy thinking_delta), content_block_stop, message_delta Az okok, a használat és a nymbot objektum költsége, és message_stopAz A ping 15 másodpercenként is elküldik, miközben a modell működik.Eszközhívások érkeznek a szöveg után, mindegyik tool_use blokkolja az egész bemenetét egy input_json_delta.

Ebben a végpontban a hibák az Anthropic formátumát használják: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}A rövid egyensúly 402 billing_errorTúlterhelt szolgáltató 503 overloaded_errorAz áramlás megkezdése után bekövetkezett hiba egy error Az esemény.

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);

Token számlálás

Becslés arról, hogy hány bemeneti tokent használ egy Üzenetek kérés, így az ügyfél ellenőrizheti, mielőtt elküldi.

POST https://nymbot.ai/api/v1/messages/count_tokens Szüksége van egy API kulcsra.

A test ugyanaz, mint a ÜzenetekAnélkül max_tokensA szám egy becslés: a karakterek a rendszer prompt, üzenetek, eszköz hívások és eszköz definíciók osztva négy, plusz 1600 minden képet. Ez nem a szolgáltató saját tokenizer, így a tényleges szám eltérhet. A kulcs, amely elérte a határt is használhatja.

Válasz

{ "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);

Modellek listázása

Minden modell és generátor elfogadja az API-t, amennyibe kerül.A listát ugyanabból az élő katalógusból olvassa el, mint az alkalmazás pickere, így mindig ez az, amit a szerver fut.

GET https://nymbot.ai/api/v1/models - nincs szükség kulcsra. elrejtve öt percig

GET /api/v1/models/{id} Visszatér egy bejárat.

mezőtípusSzükségleírás
typeA kérés (query)nemchat (A meghibásodás image, video, audio, embedding vagy allTöbbféle lehet, mint például image,video.

Az árak az, amit fizetsz, a díj és a margin már befizetett, dollárban és az aktuális Bitcoin áron. balance Azt mondja meg, hogy a modell milyen egyensúlyt költ. nymbot_key a modell rövid neve az alkalmazásban. created mindig 0, mivel a katalógus nem rögzíti, amikor egy modellt hozzáadtak. per_request helyette.

nymbot/auto Mindig az első, mint az ár variableAz A routes A lista az egyes szabványos útvonalak árait tartalmazza. felsorolja a látást és az érvelést, de nem az eszközöket.

GET /api/v1/models/{id} ugyanazokat a neveket és álnéveket fogadja el kérésként, és visszaküldi a modellre vonatkozó bejegyzést.

Válasz

{
  "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"
    }
  ]
}

A többi típus:

  • kép A bejáratok capabilities (accepts_image_url, requires_image_url, edit(és egy árat per_generation.
  • videó A bejáratok max_duration_seconds és resolutionsÉs egy árat per_second minden egyes határozatot.
  • Audió A bejáratok audio_type speech vagy transcriptionAz ár per_1k_chars vagy per_minute.
  • Beágyazás A bejáratok dimensions, context_length, max_inputs És egy millió token belépő ára.

Megjelölt árak "estimated": true az alkalmazás becslése egy olyan generátorra vonatkozóan, amelynek árát nem hozták nyilvánosságra. type Visszatérés 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);