Kalo te përmbajtja
Kthehu në Nymbot

Baza e njohurive Zhvilluesit

Chat, Përgjigjet dhe Mesazhet

Tre mënyra për të pyetur një model diçka, në tre formatet që klientët tashmë flasin, të gjitha të drejtuara në të njëjtat modele dhe faturuar në të njëjtën mënyrë.

Chat Përfundim

OpenAI chat format, dhe një që pothuajse çdo mjet mbështet. dërgoni bisedën deri tani dhe merrni mesazhin e ardhshëm prapa.

POST https://nymbot.ai/api/v1/chat/completions Ju duhet një çelës API.

Vetëm model dhe messages Parametri i marrjes së mostrave që modeli i zgjedhur nuk merr bie pa një gabim, kështu që një trup kërkese punon në të gjithë modelet. supported_parametersAjo që refuzohet në vend që të hiqet është diçka që modeli nuk mund të bëjë fare: fotografi për një model që nuk mund të shohë, mjete për një model që nuk mund t’i thërrasë.

fushëLlojiTë nevojshmePërshkrimi
modelStringëponymbot/auto ose auto) për drejtimin e Nymbot në bilancin standarde, ose një id modelit katalog si: anthropic/claude-sonnet-5 në bilancin Pro. Emrat e shkurtër dhe pseudonimet e aplikacionit pranohen gjithashtu. Mund të përfundojë në një mjaftueshëm.
messagesAradëpoBisedë - Role system, developer (Të trajtohen si sistem) user, assistant dhe toolPërmbajtja është një varg ose një listë e text dhe image_url pjesë; imazhe vetëm në mesazhet e përdoruesit. input_audio dhe pjesët e dosjeve janë refuzuar.
streambooleanëjoDërgo përgjigjen ashtu siç është shkruar. shih Streamë.
stream_optionsObjektijo{"include_usage": true} shton një copë përfundimtare me numrat token dhe koston.
max_tokens
max_completion_tokens
IntegralejoShumica e tokenëve për të shkruar. Zvogëlohet në maksimum të modelit nëse është më i lartë. Gjithashtu përcakton se sa mbahet nga bilanci juaj, kështu që një numër më i vogël ka nevojë për më pak kredi për të filluar.
temperature
top_p
NumërjoKontrolli i mostrave: temperature Nga 0 në 2, top_p Nga 0 në 1.
stopString ose arrayjoTeksti që përfundon përgjigjen: një zinxhir ose jo më shumë se 4 zinxhirë, secili jo më shumë se 256 karaktere. nymbot/auto.
seedIntegralejoPër marrjen e mostrave të përsëritura, ku modeli e mbështet atë.
presence_penalty
frequency_penalty
NumërjoKontrollet e përsëritura, secila nga -2 në 2.
response_formatObjektijo{"type": "json_object"} ose {"type": "json_schema", "json_schema": {…}}, ku modeli mbështet atë.Nuk përdoret nga nymbot/auto.
tools
tool_choice
parallel_tool_calls
array, string ose objekt, booleanjoFunksioni i thirrjes. shih Mjetet e thirrjesa web_search Tool kthehet në Kërkimi WEBNë sa më shumë 128 mjete dhe 512 KB të përkufizimeve, të ngulitura në sa më shumë 64 nivele të thella; më shumë është një 400.
reasoning_effort
reasoning
Gërshërë, Objektjo"minimal", "low", "medium" ose "high"ose {"effort": "high"}. "none" ose {"enabled": false} Përdoreni atë. shih arsyetimin.
pluginsAradëjo[{"id": "web", "max_results": 5}] Gjithmonë kërkoni në internet së pari.Deri në 10 rezultate.
nIntegralejo1.Çdo gjë tjetër kthehet 400.
logit_bias
user
metadata
Objekt, String dhe Objektjopranuar dhe nuk u dërgua. logit_bias hartat në më shumë se 300 id token për numra nga -100 në 100; user Deri në 256 karaktere; metadata mbajnë deri në 16 vlera string, çelësat deri në 64 karaktere dhe vlera deri në 512.

Përgjigja është e zakonshme chat.completionMe kosto në usage.cost (në dollarë) dhe në nymbot Objekti i model është id modeli i zgjidhur, kështu që një emër i shkurtër kthehet si i plotë. message.reasoning_contenttë ndara nga përgjigja.

Përgjigje

{
  "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 është përpunuar nga ajo që u kthye, pasi ofruesit raportojnë ndryshe: tool_calls Kur dikush kërkon mjete, length kur përgjigja përdori çdo token të lejuar (ose modeli i kaloi të gjitha arsyetimin dhe nuk shkroi asnjë përgjigje), content_filter Në qoftë se furnizuesi refuzon dhe stop Përndryshe usage.completion_tokens_details.reasoning_tokens është gjithmonë 0: tokenët e fshehur të arsyetimit llogariten, dhe ngarkohen, në completion_tokens.

StatusitKur
400jo model ose messages (missing_required_parameter(Pjesë audio ose fotografi për një model që nuk mund t'i shohë ato)unsupported_content); më shumë se 20 fotografi (too_many_images(Për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, për shembull, përinvalid_value); një link që nuk është publik (invalid_image_url); mjetet në një model që nuk mund t'i quajë ato (unsupported_tool); n më shumë se 1; a :thinking Për shembull, një model që nuk mund të justifikohet (model_not_found(Përdorimi i një aplikacioni për të refuzuar kërkesën)upstream_rejected).
402Bilanci që shpenzon modeli nuk mund të mbulojë mbajtjen.
403Në rastin më të keq nuk përputhet me kapakun e çelësit (key_limit_reachedmë poshtë max_tokens Ose ngre kapakun.
404Asnjë model me këtë emër (model_not_found).
429Shërbimi i Shërbimit të Shërbimit (upstream_rate_limited).
502, 503Furnizuesi ka dështuar (upstream_errora) është i mbingarkuar (upstream_overloadedMe të Retry-AfterAsgjë nuk ngarkohet përveç nëse ofruesi ka faturuar për përpjekjen.

Kodet e statusit për çdo aksion endpoint janë të listuara nën Gabimet.

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

Streaming

me "stream": true përgjigja vjen si ngjarje të dërguara nga serveri ndërsa modeli e shkruan atë. chat.completion.chunk është a data: linjë, dhe rrjedha përfundon me data: [DONE]Arsyetimi vjen në delta.reasoning_contentPërgjigja në delta.content.

Stream çdo gjë që mund të marrë më shumë se rreth 100 sekonda, të tilla si një përgjigje e gjatë, një përgjigje e madhe max_tokens Një kërkesë që nuk është transmetuar nuk dërgon asgjë derisa përgjigja është e plotë, dhe rrjeti midis jush dhe Nymbot mund të mbyllë një lidhje të zbrazët pas rreth 100 sekondave; modeli ende përfundon dhe ajo që ka shkruar është ngarkuar, por përgjigja është e humbur.

rrymë

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]
  • Linjat që fillojnë me : janë komente të gjalla, të dërguara çdo 15 sekonda ndërsa modeli është duke menduar.
  • Pyesni për "stream_options": {"include_usage": true} për të marrë pjesën e fundit lart, me një bosh choices, token numëron, kostoja dhe nymbot Objekti i
  • Nymbot lexon pjesën tjetër të rrjedhës së ofruesit, për deri në 25 sekonda, për të marrë numrin e saj token, dhe ju paguani atë që ofruesi raporton.
  • Një gabim para pjesës së parë, si 401 ose 402, kthehet si JSON i zakonshëm me kodin e tij të statusit, jo si një rrymë. data: {"error": {…}} ngjarje, dhe rrjedha përfundon pa [DONE].
  • Kërkesat me mjete dhe modelet në transportin e përgjigjeve të OpenAI, nuk rrjedhin nga ofruesi.Ata ende përgjigjen me një rrjedhë të vlefshme, të dërguar pasi përgjigja është e plotë.

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

Mjetet e thirrjes

Përshkruani funksionet në tools dhe modeli mund të kërkojë që dikush të thirret në vend të përgjigjes.Ju ekzekutoni funksionin, shtoni rezultatin e tij si një tool Mesazhi me të njëjtën tool_call_idNymbot kurrë nuk ekzekuton funksionet tuaja; ai kalon kërkesën e modelit përsëri tek ju.

tool_choice merr "auto", "none", "required" ose {"type": "function", "function": {"name": "…"}}Lista e modeleve shënon cilat modele mund të thërrasin mjete (capabilities.toolsMjetet janë refuzuar me 400 unsupported_tool është nymbot/auto dhe në modelet e pakta të katalogut që drejtohen në transportin e Responses të OpenAI, të cilat Nymbot nuk mund t'i kalojë mjetet.

me "stream": true, një kërkesë me mjete shkon në një copë dhe pastaj dërgohet si një sekuencë normale: roli, një copë që mban çdo thirrje mjet me indeksin e saj, id, emrin dhe argumentet, dhe copa e përfunduar.

Përgjigja, pjesërisht

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

Fotografi në kërkesë

Modelet me capabilities.vision mund të lexoni imazhe. shtoni një image_url pjesë në një mesazh të përdoruesit, ose me një publik https:// Lidhje ose a data:image/…;base64, Deri në 20 fotografi për kërkesë. imazhet SVG refuzohen, dhe kështu është një lidhje mbi 4096 karaktere ose një me një emër përdoruesi ose fjalëkalim në të (400 invalid_image_urlNjë opsion detail është auto, low ose high.

me nymbot/auto, një kërkesë me një imazh në të drejtohet në një model standard që mund të shihet. capabilities.vision Refuzoni fotot me 400 unsupported_contentImazhet mund të jenë vetëm në mesazhet e përdoruesit.Një lidhje duhet të tregojë në një host publik; Nymbot kalon imazhin tek ofruesi i modelit dhe nuk e ruan atë.

Një imazh ngarkohet si tokenët e hyrjes që ofruesi numëron për të, si pjesa tjetër e kërkesës.

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

arsyetimin

Modelet me capabilities.reasoning mund të mendojnë para se të përgjigjen. kërkoni më shumë ose më pak nga ajo me reasoning_effort ("minimal", "low", "medium" ose "high") ose "reasoning": {"effort": "high"}ose të shtoni :thinking në emrin e modelit, që do të thotë përpjekje të lartë. Në një model pa arsyetim, cilësimi injorohet. nymbot/auto, :thinking dërgon kërkesën në rrugën standarde të arsyetimit.

Në modelet antropike përpjekja bëhet një buxhet mendimi prej rreth 1,000, 2,000, 8,000 ose 16,000 tokens, kurrë më shumë se max_tokens lejohet. mendimi është i braktisur kur tool_choice Forcon një mjet, dhe kur kërkesa vazhdon një zinxhir mjetesh (mesazhi i tij i fundit është një rezultat mjetesh), sepse Anthropic ka nevojë për mendimin e nënshkruar më parë për ta rifilluar atë.

Arsyetimi kthehet në message.reasoning_contentose delta.reasoning_content kur transmetohet, kurrë nuk përzihet në përgjigje. arsyetimi është output dhe ngarkohet si i tillë, brenda completion_tokensDisa ofrues nuk e kthejnë tekstin e arsyetimit në të gjitha, dhe ajo ende është e ngarkuar.

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

Modele të mjaftueshme

Një shtojcë në emrin e modelit ndryshon mënyrën se si trajtohet kërkesa, pa një fushë tjetër.Ata punojnë në id të plotë dhe emra të shkurtër njësoj, si në anthropic/claude-sonnet-5:online.

mjaftueshëmEfektet
:onlineKërkoni në internet së pari, si plugins: [{"id": "web"}]shihni Kërkimi WEB.
:thinkingpërpjekje të lartë arsyetimi; në nymbot/autoRruga e arsyetimit: Në një model që nuk mund të arsyetojë, 400 model_not_found me “no endpoints found”.
:nitro, :floor, :exacto, :extendedÇdo model katalog ka një rrugë, kështu që nuk ka rrugë më të shpejtë, më të lirë ose më të gjatë për të zgjedhur; vazhdimet janë të lejuara kështu që emrat e modeleve të kopjuara nga shërbimet e tjera ende punojnë.

Çdo shufër tjetër injorohet. Emri i tërë është provuar së pari, kështu që një model id i të cilit me të vërtetë përmban një kolon ende punon; në mungesë të kësaj, shufrat merren nga fundi një në një kohë derisa një model përputhet. 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 kërkon mesazhin e fundit të përdoruesit (2000 karaktere të para), lexon faqet më të mira dhe i jep ato modelit me pyetje, të shënuara si përmbajtje të jashtme nga e cila modeli nuk duhet të marrë udhëzime.

  • Gjithmonë në kërkim: "plugins": [{"id": "web", "max_results": 5}]ose a :online mjaftueshëm për modelin.
  • Kërkoni kur ndihmon: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Gjithashtu pranohet si web_search_preview ose openrouter:web_searchNymbot kërkon vetëm kur pyetja duket se ka nevojë për informacion aktual, i njëjti test që përdor aplikacioni.

max_results është 5 nga default dhe në maksimum 10. burimet kthehen në nymbot.web_search.sourcesSecili me një title, snippet dhe urldhe si url_citation shënime në mesazh.

Çdo kërkim që shkon kushton $ 0.008, konvertuar në sats, në krye të tokenëve, dhe kjo është pjesë e mbajtjes. faqet që lexon janë tokenë hyrëse gjithashtu, kështu që një përgjigje nga interneti kushton më shumë se e njëjta pyetje e pyetur ftohtë, nganjëherë disa herë më shumë.

Përgjigja, pjesërisht

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

Përgjigje zjarri

Formati më i ri i OpenAI, i përdorur nga OpenAI Agents SDK dhe nga Codex. Ajo funksionon në të njëjtat modele, faturim dhe karakteristika si Chat Completions.

POST https://nymbot.ai/api/v1/responses Ju duhet një çelës API.

fushëLlojiTë nevojshmePërshkrimi
modelStringëpoSi për Chat PërfundimPërfshirë edhe suffixet.
inputString ose arraypoNjë rresht, ose një listë e artikujve: mesazhe (rolet user, assistant, system, developer) me input_text, input_image dhe output_text pjesë, dhe function_call dhe function_call_output artikuj për mjetet. input_image merr një image_url Lidhja ose URL e të dhënave, jo një id i skedarit. reasoning dhe web_search_call artikujt janë shkarkuar; item_reference është refuzuar.
instructionsStringëjoUdhëzimet e sistemit.
max_output_tokensIntegralejomë të shumta për të shkruar.
temperature
top_p
NumërjoSampling kontrollet, ku modeli i merr ato.
tools
tool_choice
parallel_tool_calls
array, string ose objekt, booleanjoPërgjigjet në formën e përgjigjeve ({"type": "function", "name": …, "parameters": …}a) të web_search ose web_search_preview Tool kthehet në Kërkimi WEB kur ndihmon. mjetet e tjera të integruara janë refuzuar.
reasoningObjektijo{"effort": "minimal" | "low" | "medium" | "high"}. xhigh dhe max do të thotë high; none Ktheje atë jashtë.
text.format
response_format
ObjektijoSi një skemë JSON ose json_object.
metadataObjektijoKthehet e pandryshuar në përgjigje.Në më shumë se 16 vlera të rreshtave, çelësat deri në 64 karaktere dhe vlera deri në 512.
streambooleanëjoStream ngjarjet siç përshkruhet më poshtë.
storebooleanëjoAsgjë nuk është ruajtur, dhe përgjigja gjithmonë thotë "store": false.
previous_response_id
conversation
background
String, Objekt dhe BooleanjoJo të mbështetur: 400 unsupported_parameterPërgjigjet nuk ruhen, kështu që dërgoni të gjithë bisedën në input Çdo herë

Përgjigje

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

Një kërkesë mjet shfaqet në output Si një function_call Pika me call_id, name dhe argumentsdërgoni rezultatin prapa si një function_call_output Pika me të njëjtën call_idArsyetimi, kur modeli e kthen atë, është një reasoning Pika me reasoning_text Përmbajtja, e listuar së pari. status është incomplete Kur përgjigjja goditi max_output_tokens ose të refuzojë, me incomplete_details.reason Vendosni të max_output_tokens ose content_filterPërgjigja gjithashtu i përgjigjet cilësimeve të kërkesës (temperatura, mjetet, zgjedhja e mjeteve dhe kështu me radhë) siç bën OpenAI-ja, dhe mbart nymbot Çmimi i objektit

Çdo ngjarje, çdo ngjarje është një event: linjë dhe a data: linjë me a sequence_numberNë këtë mënyrë: response.created, response.in_progress, response.output_item.added, response.content_part.addedÇdo numër i response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.doneDhe më në fund response.completed me përdorimin dhe koston.Një përgjigje e shkurtër përfundon me response.incomplete në vend të kësaj, dhe një dështim pasi rrjedha filloi me response.failedArgumentoni rrymat si objektin e vet me response.reasoning_text.delta dhe .doneThirrjet e mjeteve vijnë pas mesazhit, secili si një element me response.function_call_arguments.delta dhe .done.

StatusitKur
400jo model ose input; previous_response_id, conversation, background ose një item_reference (unsupported_parameter); një mjet ose lloj përmbajtjeje që nuk mbështetet.
402, 403, 404, 429, 502, 503Për sa i përket përfundimit të chat.

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

Mesazhet antropike

Formati i Anthropic, për SDK-të Anthropic dhe Claude Code. Funksionon me çdo model në katalog, jo vetëm Claude: kërkesa përkthehet, shkon nëpër të njëjtin tubacion dhe përkthehet prapa.

POST https://nymbot.ai/api/v1/messages - nevojë për një çelës API, si x-api-key ose Authorization: Bearer.

të anthropic-version dhe anthropic-beta Emrat e modeleve antropike përputhen me katalogun, kështu që Claude Code dhe SDK-të punojnë me emrat që ata tashmë përdorin:

  • Një emër që katalogu e di, si claude-sonnet-5 ose anthropic/claude-opus-5përdoret ashtu siç është.
  • Një datë e caktuar (-20260514), -latestNjë version i tillë si -v1Një ditë e braktisur si [1m] dhe një anthropic/ ose anthropic. Për shembull, të dyja palët duhet të përpiqen të përfshijnë të dyja palët dhe të përfshijnë të dyja palët (claude-haiku-4-5 Gjejmë claude-haiku-4.5).
  • Nëse kjo ende nuk përputhet asgjë, familja (Opus, Sonnet ose Haiku) përdoret, për aq kohë sa versioni i katalogut është i njëjtë ose më i ri se ai i kërkuar.
  • Një emër që nuk përputhet me asgjë kthehet 404 not_found_error.
fushëLlojiTë nevojshmePërshkrimi
modelStringëpoNjë katalog ID model, ose një emër model antropike.
max_tokensIntegralepomë të shumta për të shkruar.
messagesAradëpouser dhe assistant kthehet, me text, image (base64 ose burimi i URL), tool_use dhe tool_result të bllokuara. thinking blloqet nga kthimet e mëparshme pranohen dhe hiqen.
systemString ose arrayjosistemit, si një string ose blloqe të tekstit.
temperature
top_p
NumërjoSampling kontrollet, ku modeli i merr ato. top_k është pranuar dhe hequr.
stop_sequencesPërshkrimi i StringsjoTeksti që përfundon përgjigjen. Në maksimum 4 rreshta, secila me maksimum 256 karaktere.
tools
tool_choice
Lëvizje, ObjektjoMjetet me name, description dhe input_schemaa web_search Server Tool kthehet në Kërkimi WEBMjetet e tjera të ndërtuara të Anthropic (bash, editor teksti, përdorimi i kompjuterit) janë refuzuar me unsupported_tool. tool_choice merr auto, any, tool ose nonedhe disable_parallel_tool_use.
thinkingObjektijo{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} ose {"type": "disabled"}Buxheti zgjedh një nivel përpjekje: nën 2,048 minimum, nga 2,048 të ulët, nga 8,192 të mesëm, nga 16,384 të lartë. output_config.effortose të lartë.
streambooleanëjoStream në formatin e ngjarjeve të Anthropic.
metadataObjektijopranuar dhe injoruar.

Përgjigje

{
  "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 Mund të mbajë gjithashtu tool_use Blocks dhe a thinking Blloku i të cilit signature Është bosh stop_reason është end_turn, max_tokens, tool_use ose refusalpunuar në të njëjtën mënyrë si finish_reason është Chat Përfundim; stop_sequence Gjithmonë është null, edhe kur një sekuencë e ndalimit përfundoi përgjigjen. input_tokens Numërohet vetëm hyrja e freskët; hyrja e cache është në dy fushat e cache. nymbot Objekti dhe X-Nymbot-Cost-Sats në header.

Streamed, ngjarjet janë Anthropic's: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta ose thinking_delta), content_block_stop, message_delta me arsyen e ndalimit, përdorimin dhe nymbot Çmimi i objektit dhe message_stopa ping gjithashtu dërgohet çdo 15 sekonda ndërsa modeli është duke punuar. thirrjet e mjeteve vijnë pas tekstit, secili si një tool_use bllok me të gjithë hyrjen e saj në një input_json_delta.

Gabimet në këtë pikë përfundimtare përdorin formatin e Anthropic: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Një ekuilibër i shkurtër është 402 billing_errorNjë ofrues i mbingarkuar 503 overloaded_errorNjë dështim pas fillimit të rrymës dërgohet si një error Ngjarje të

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

Numërimi i tokenëve

Një vlerësim i numrit të tokenëve të hyrjes që një kërkesë Messages do të përdorë, kështu që një klient mund të kontrollojë para se të dërgojë.

POST https://nymbot.ai/api/v1/messages/count_tokens Ju duhet një çelës API. falas.

Trupi është i njëjtë me MesazhetPa asnjë max_tokensNumri është një vlerësim: karaktere të sistemit, mesazhet, thirrjet e mjeteve dhe përkufizimet e mjeteve të ndara nga katër, plus 1,600 për çdo imazh. Nuk është tokenizeri i vet i ofruesit, kështu që numri i vërtetë mund të ndryshojë.

Përgjigje

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

Lista e modeleve

Çdo model dhe gjenerator që API pranon, me atë që kushton.Lista lexohet nga i njëjti katalog live si pickeri i aplikacionit, kështu që është gjithmonë ajo që serveri do të drejtojë.

GET https://nymbot.ai/api/v1/models - nuk ka nevojë për çelës. fshehur për pesë minuta.

GET /api/v1/models/{id} Kthehet një hyrje

fushëLlojiTë nevojshmePërshkrimi
typeKërkesë (Query)jochat (Për shkak të defektit) image, video, audio, embedding ose allDisa mund të përdoren, si image,video.

Çmimet janë ajo që ju paguani, me tarifën dhe marzhin tashmë në, në dollarë dhe në sats në çmimin aktual të Bitcoin. balance Tregon se çfarë bilance shpenzon modeli. nymbot_key është emri i shkurtër i modelit në aplikacion. created është gjithmonë 0, pasi katalogu nuk regjistron kur është shtuar një model. per_request në vend të kësaj.

nymbot/auto është gjithmonë i pari, çmimi si variableMe një routes Lista që jep normat e çdo rruge standarde.Liston vizionin dhe arsyetimin, por jo mjetet.

GET /api/v1/models/{id} pranon të njëjtat emra dhe pseudonime si një kërkesë, dhe kthen hyrjen për modelin që ata vendosin.

Përgjigje

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

Llojet e tjera:

  • Imazhi Hyrjet kanë capabilities (accepts_image_url, requires_image_url, editdhe një çmim per_generation.
  • Video të Hyrjet kanë max_duration_seconds dhe resolutionsdhe një çmim per_second për çdo rezolutë.
  • audio të Hyrjet kanë audio_type speech ose transcriptionÇmimi per_1k_chars ose per_minute.
  • Përmbajtja Hyrjet kanë dimensions, context_length, max_inputs dhe një çmim për një milion token input.

Çmimet e shënuara "estimated": true është vlerësimi i aplikacionit për një gjenerator çmimi i të cilit nuk është publikuar. type Kthim 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);