Pereiti prie turinio
Grįžti į Nymbot

Žinių bazė kūrėjai

Pokalbiai, atsakymai ir žinutės

Trys būdai, kaip paprašyti modelio kažko, trijų formatų klientai jau kalba, visi veikia tų pačių modelių ir sąskaitomis tuo pačiu būdu.

Pokalbių užbaigimas

OpenAI pokalbių formatas ir beveik kiekvienas įrankis palaiko. siųsti pokalbį iki šiol ir gauti kitą pranešimą atgal.

POST https://nymbot.ai/api/v1/chat/completions Reikalingas API raktas.

tik model ir messages pasirinkto modelio imties parametras nėra nuleistas be klaidos, todėl vienas užklausos kūnas veikia įvairiuose modeliuose. supported_parametersTai, kas atmesta, o ne išmesta, yra tai, ko modelis negali padaryti: modelio, kuris negali matyti, nuotraukos, modelio, kuris negali juos skambinti, įrankiai.

LaukoTipasReikalingasAprašymas
modelStringųTaipnymbot/auto (arba auto) "Nymbot" maršrutizavimui į standartinį balansą arba katalogo modelio ID, pvz., anthropic/claude-sonnet-5 ant Pro balanso. Taip pat priimami programos trumpi pavadinimai ir slapyvardžiai. gali baigtis Pakanka.
messagesartritasTaipPokalbis - vaidmenys system, developer (taikoma kaip sistema) user, assistant ir toolTurinys yra eilutė arba sąrašas text ir image_url dalys; vaizdai tik naudotojo pranešimuose. input_audio ir failų dalys atmetamos.
streamBoolėneAtsakymą siųskite taip, kaip parašyta. Streikuoti.
stream_optionsObjektasne{"include_usage": true} prideda galutinį gabalėlį su žetonų skaičiavimais ir kaina.
max_tokens
max_completion_tokens
IntegracijosneDauguma žetonų, kuriuos reikia parašyti. Sumažintas iki modelio maksimumo, jei jis yra didesnis. Taip pat nustato, kiek laikoma iš jūsų balanso, todėl mažesniam skaičiui reikia mažiau kredito pradėti.
temperature
top_p
NumerisneKontrolės pavyzdžiai: temperature nuo 0 iki 2, top_p nuo 0 iki 1.
stopString arba arrayneAtsakymą užbaigiantis tekstas: eilutė arba ne daugiau kaip 4 eilutės, kurių kiekviena turi ne daugiau kaip 256 simbolius. nymbot/auto.
seedIntegracijosnePakartotiniam mėginių ėmimui, kai modelis jį palaiko.
presence_penalty
frequency_penalty
NumerisnePakartotinės kontrolės, kiekviena nuo -2 iki 2.
response_formatObjektasne{"type": "json_object"} arba {"type": "json_schema", "json_schema": {…}}, kur modelis jį palaiko. nenaudojamas nymbot/auto.
tools
tool_choice
parallel_tool_calls
Array, stringa arba objektas, BooleanneSkambučio funkcija. žiūrėti Įrankių skambučiai• A web_search Įrankis virsta Internetinė paieškaNe daugiau kaip 128 įrankių ir 512 KB apibrėžimų, įterptų ne daugiau kaip 64 lygių gylis; daugiau yra 400.
reasoning_effort
reasoning
Šarūnas, objektasne"minimal", "low", "medium" arba "high"arba {"effort": "high"}. "none" arba {"enabled": false} Išjunkite jį. žiūrėti Argumentavimas.
pluginsartritasne[{"id": "web", "max_results": 5}] Visada ieškokite internete pirmiausia. iki 10 rezultatų.
nIntegracijosneVienintelis būdas: viskas grįžta 400.
logit_bias
user
metadata
objektas, stringa, objektasnePriimtas ir neišsiųstas. logit_bias žemėlapiai ne daugiau kaip 300 žetonų ID skaičiais nuo -100 iki 100; user turi ne daugiau kaip 256 simbolius; metadata gali turėti ne daugiau kaip 16 eilutės reikšmių, raktų iki 64 simbolių ir reikšmių iki 512.

Atsakymas yra įprastas chat.completionBe to, su sąnaudomis usage.cost JAV doleriais) ir nymbot Objektų model yra išspręstas modelio id, todėl trumpas vardas grįžta kaip pilnas. message.reasoning_contentAtskirai nuo atsakymo.

Atsakymas

{
  "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 yra parengta iš to, kas sugrįžo, nes teikėjai praneša kitaip: tool_calls Kai modelis prašo įrankių, length kai atsakymas naudojo kiekvieną leistiną žetoną (arba modelis praleido juos visus mąstydamas ir nenurodė jokio atsakymo), content_filter kai paslaugų teikėjas atsisako, ir stop ir kitaip. usage.completion_tokens_details.reasoning_tokens visada yra 0: paslėpti argumentų žetonai skaičiuojami ir apmokestinami completion_tokens.

statusąKada
400ne model arba messages (missing_required_parameter); garso ar failų dalis, arba modelio vaizdai, kurie negali juos matyti (unsupported_contentdaugiau nei 20 nuotraukų (too_many_images); mėginių ėmimo parametras neteisingo tipo arba nepakankamo diapazono (invalid_value); vaizdo nuoroda, kuri nėra vieša (invalid_image_url); įrankiai ant modelio, kuris negali juos vadinti (unsupported_tool); n ne daugiau kaip 1; a :thinking Pavyzdys, dėl kurio negalima pagrįsti (model_not_found(arba paslaugų teikėjas atsisakė pateikti prašymą)upstream_rejected).
402Modelio išleistas balansas negali padengti turto.
403Blogiausias atvejis neatitinka rakto dangtelio (key_limit_reached• žemesnė max_tokens Arba pakelkite galvą.
404Nėra tokio pavadinimo (model_not_found).
429Paslaugų teikėjas arba paslaugų teikėjas (upstream_rate_limited).
502, 503Paslaugų teikėjas nesugebėjo (upstream_error) arba yra perkrautas (upstream_overloadedsu Retry-AfterNėra nieko apmokestinama, nebent teikėjas sąskaitą už bandymą.

Statuso kodai kiekvienos galinės akcijos yra išvardytos klaidų.

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

Streikuoti

su "stream": true atsakymas atvyksta kaip serverio siunčiami įvykiai, o modelis jį rašo. chat.completion.chunk Yra a data: linija, o srautas baigiasi su data: [DONE]Priežastys ateina į delta.reasoning_contentAtsakymas į delta.content.

Siųskite bet ką, kas gali užtrukti ilgiau nei apie 100 sekundžių, pvz., ilgą atsakymą, didelį max_tokens arba motyvavimo modelis. Prašymas, kuris nėra transliuojamas, nesiunčia nieko, kol atsakymas yra baigtas, o tinklas tarp jūsų ir Nymbot gali uždaryti tuščią ryšį po maždaug 100 sekundžių; modelis vis dar baigiasi ir tai, ką jis parašė, įkraunamas, bet atsakymas prarandamas.

srautas

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]
  • Linijos prasideda nuo : yra nuolatiniai komentarai, siunčiami kas 15 sekundžių, kol modelis galvoja.
  • Paklauskite "stream_options": {"include_usage": true} gauti paskutinį gabalėlį aukščiau, su tuščia choices, žetonai skaičiuoja, kaina ir nymbot Objektų
  • Jei uždarysite ryšį anksti, modelis nebus sustabdytas: "Nymbot" perskaito likusį teikėjo srautą iki 25 sekundžių, kad gautų savo žetonų skaičių, ir jūs mokate tai, ką teikia teikėjas.
  • klaidą prieš pirmąjį gabalėlį, pavyzdžiui, 401 arba 402, grįžta kaip įprastas JSON su savo būsenos kodu, o ne kaip srautas. data: {"error": {…}} įvykis, ir srautas baigiasi be [DONE].
  • Užklausos su įrankiais ir modeliais "OpenAI" Atsakymų transportu nešviečia iš teikėjo.

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

Įrankių skambučiai

Apibūdina funkcijas tools ir modelis gali paprašyti skambinti, o ne atsakyti. Jūs paleidžiate funkciją, pridėkite jos rezultatą kaip tool Žinutė su tuo pačiu tool_call_idNymbot niekada nevykdo jūsų funkcijų; jis perduoda modelio prašymą atgal jums.

tool_choice Turiu "auto", "none", "required" arba {"type": "function", "function": {"name": "…"}}Modelių sąrašas pažymi, kurie modeliai gali skambinti įrankiais (capabilities.toolsĮrankiai yra atmesti 400 unsupported_tool yra nymbot/auto ir dėl nedaugelio katalogų modelių, kurie veikia "OpenAI" atsakymų transportu, kuriam "Nymbot" negali perduoti įrankių.

su "stream": true, užklausa su įrankiais veikia viename gabale ir tada siunčiama kaip įprasta gabalėlių seka: vaidmuo, vienas gabalėlis, kuriame kiekvienas įrankio skambutis yra su jo indeksu, id, pavadinimu ir argumentais, ir galutinis gabalėlis.

Atsakymas iš dalies

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

Nuotraukos pagal prašymą

Modeliai su capabilities.vision Galima perskaityti nuotraukas. pridėti image_url dalį naudotojo pranešimui, su bet kuria auditorija https:// LINK arba A data:image/…;base64, URL. Iki 20 nuotraukų už prašymą. SVG nuotraukos yra atmestos, todėl nuoroda yra daugiau nei 4 096 simbolių arba viena su vartotojo vardu ar slaptažodžiu (400 invalid_image_url• Pasirinktinai detail yra auto, low arba high.

su nymbot/auto, užklausa su paveikslėliu nukreipiama į standartinį modelį, kurį galima matyti. capabilities.vision Atsisakyti nuotraukų su 400 unsupported_contentNuotraukos gali būti tik naudotojo pranešimuose. nuoroda turi nurodyti į viešą hostą; Nymbot perduoda vaizdą modelio teikėjui ir jo nesilaiko.

Vaizdas yra apmokestinamas kaip teikėjo skaičiuojami įvesties žetonai, kaip ir likusi užklausa.

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

Priežastys

Modeliai su capabilities.reasoning Galite pagalvoti prieš atsakydami, paprašykite daugiau ar mažiau. reasoning_effort ("minimal", "low", "medium" arba "high") arba "reasoning": {"effort": "high"}arba pridėti :thinking į modelio pavadinimą, o tai reiškia didelę pastangą. Modelyje be motyvacijos nustatymas ignoruojamas. nymbot/auto, :thinking siunčia prašymą į standartinį motyvavimo maršrutą.

Antropiniuose modeliuose pastangos tampa mąstymo biudžetu apie 1000, 2 000, 8 000 ar 16 000 žetonų, niekada daugiau nei max_tokens Mąstymas yra paliktas, kai tool_choice priverčia įrankį, o kai užklausa tęsiasi įrankio grandinę (paskutinis pranešimas yra įrankio rezultatas), nes Anthropic reikia anksčiau pasirašytos minties, kad ją atnaujintų.

Priežastys grįžta į message.reasoning_contentarba delta.reasoning_content kai transliuojama, niekada nesumaišoma į atsakymą. Priežastys yra išvestis ir yra apmokestinamos kaip tokios, viduje completion_tokensKai kurie teikėjai negrąžina argumentų teksto, ir jis vis dar apmokestinamas.

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

Modelių suffiksai

Modelio vardo priedėlis keičia prašymo tvarkymą, be kito lauko. anthropic/claude-sonnet-5:online.

PakankaEfektas
:onlineIeškoti internete pirmiausia, kaip plugins: [{"id": "web"}]Štai Internetinė paieška.
:thinkingAukštos racionalios pastangos; ant nymbot/autoPagal modelį, kuris negali pagrįsti, 400 model_not_found su “jokių galutinių taškų rasti”.
:nitro, :floor, :exacto, :extendedKiekvienas katalogo modelis turi vieną maršrutą, todėl nėra greitesnio, pigesnio ar ilgesnio pasirinkimo; priedai leidžiami, todėl modelio pavadinimai, nukopijuoti iš kitų paslaugų, vis dar veikia.

Bet kuris kitas priedėlis yra ignoruojamas. Visas vardas išbandomas pirmiausia, todėl modelis, kurio ID iš tikrųjų yra kolonėlis, vis dar veikia; jei to nepadarys, priedai pašalinami iš pabaigos vieną po kito, kol modelis atitiks. 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 ieško paskutinio vartotojo pranešimo (pirmųjų 2000 simbolių), skaito geriausius puslapius ir perduoda juos modeliui su klausimu, pažymėtu kaip išorinis turinys, iš kurio modelis neturėtų imtis instrukcijų.

  • Visada ieškokite: "plugins": [{"id": "web", "max_results": 5}]arba a :online Pakanka įvesti modelį.
  • Ieškoti, kai tai padeda: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Taip pat priimtas kaip web_search_preview arba openrouter:web_searchNymbot ieško tik tada, kai atrodo, kad klausimui reikia dabartinės informacijos, tas pats testas, kurį naudoja programa.

max_results yra 5 pagal numatytuosius nustatymus ir ne daugiau kaip 10. šaltiniai grįžta į nymbot.web_search.sourcesKiekvienas su a title, snippet ir urlir kaip url_citation Užrašai ant žinutės.

Kiekviena paieška, kuri veikia, kainuoja $ 0,008, konvertuojama į sats, virš žetonų, ir tai yra laikymo dalis.Slaptai, kuriuos ji skaito, taip pat yra įvesties žetonai, todėl atsakymas iš žiniatinklio kainuoja daugiau nei tas pats klausimas, kurį paklausė šaltis, kartais kelis kartus daugiau.

Atsakymas iš dalies

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

Atsakymas į ugnį

„OpenAI“ naujesnis formatas, naudojamas „OpenAI Agents SDK“ ir „Codex“. „OpenAI“ veikia pagal tuos pačius modelius, sąskaitas ir funkcijas kaip ir „Chat Completions“.

POST https://nymbot.ai/api/v1/responses Reikalingas API raktas.

LaukoTipasReikalingasAprašymas
modelStringųTaipKaip už Pokalbių užbaigimasĮtraukti ir suffiksai.
inputString arba arrayTaipeilutė arba elementų sąrašas: žinutės (rolės user, assistant, system, developer) su input_text, input_image ir output_text dalys ir function_call ir function_call_output Prekės pagal įrankius. input_image Paimkite vieną image_url nuoroda arba duomenų URL, o ne failų ID. reasoning ir web_search_call daiktai yra nuplauti; item_reference Jis buvo atmestas.
instructionsStringųneSistemos instrukcijos .
max_output_tokensIntegracijosneDaugiausia žetonų rašyti.
temperature
top_p
NumerisnePavyzdžių ėmimo kontrolės, kur modelis juos paima.
tools
tool_choice
parallel_tool_calls
Array, stringa arba objektas, BooleanneFunkcijos įrankiai, formos Atsakymai ({"type": "function", "name": …, "parameters": …}) a web_search arba web_search_preview Įrankis virsta Internetinė paieška kai tai padeda. Kiti įmontuoti įrankiai yra atmesti.
reasoningObjektasne{"effort": "minimal" | "low" | "medium" | "high"}. xhigh ir max reiškia high; none Išjunkite jį išjungti.
text.format
response_format
ObjektasneStruktūrizuota išvestis, kaip JSON schema arba json_object.
metadataObjektasneGrąžinama nekeičiant atsakymo. ne daugiau kaip 16 eilutės reikšmių, raktų iki 64 simbolių ir reikšmių iki 512.
streamBoolėneStream įvykius, kaip aprašyta žemiau.
storeBoolėneNiekas nėra saugomas, o atsakymas visada sako "store": false.
previous_response_id
conversation
background
String, Objektas ir BooleanneNepalaikoma : 400 unsupported_parameterAtsakymai nėra saugomi, todėl siųskite visą pokalbį į input Kiekvieną kartą

Atsakymas

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

Įrankio užklausos rodomos output Kaip a function_call Taškas su call_id, name ir argumentsSiųsti rezultatą atgal kaip a function_call_output Taškas su tuo pačiu call_idPriežastis, kai modelis ją grąžina, yra reasoning Taškas su reasoning_text Turinys, išvardytas pirmiausia status yra incomplete Kai atsakymas pasiekia max_output_tokens Pirkėjas atsisakė, su incomplete_details.reason Įdėti 2 max_output_tokens arba content_filterAtsakymas taip pat atspindi užklausos nustatymus (temperatūrą, įrankius, įrankių pasirinkimą ir tt), kaip tai daro OpenAI, ir atlieka nymbot Kainuoja objektas

Žaidimas, kiekvienas įvykis yra event: Linijos ir a data: Linijos su a sequence_numberPagal šią tvarką: response.created, response.in_progress, response.output_item.added, response.content_part.addedBet koks skaičius response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.doneIr pagaliau response.completed su naudojimu ir kaina. atsakymas supjaustyti trumpas galus su response.incomplete vietoj, ir nesėkmė po to, kai srautas prasidėjo su response.failedPagrįsti srautus kaip savo objektą su response.reasoning_text.delta ir .doneĮrankių skambučiai ateina po pranešimo, kiekvienas kaip elementas su response.function_call_arguments.delta ir .done.

statusąKada
400ne model arba input; previous_response_id, conversation, background Arba vieną item_reference (unsupported_parameter• Nepalaikomas įrankis arba turinio tipas.
402, 403, 404, 429, 502, 503Dėl pokalbių užbaigimo.

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

Antropinės žinutės

Jis veikia su visais katalogo modeliais, ne tik Claude: užklausa išverčiama, paleidžiama per tą patį vamzdį ir išverčiama atgal.

POST https://nymbot.ai/api/v1/messages - reikia API raktą, kaip x-api-key arba Authorization: Bearer.

Tų anthropic-version ir anthropic-beta Antropiniai modelio pavadinimai atitinka katalogą, todėl Claude Code ir SDK dirba su jau naudojamais pavadinimais:

  • Vardas, kurį žino katalogas, pavyzdžiui, claude-sonnet-5 arba anthropic/claude-opus-5Jis naudojamas taip, kaip yra.
  • Atsižvelgiant į datą (-20260514), -latestVersijos, tokios kaip -v1Pavyzdžiui, tokį brangų laikrodį, kaip [1m] ir an anthropic/ arba anthropic. Pavyzdžiui, įprastai naudojamos abiejų tipų plokštės, o įprastai naudojamos abiem tipams (claude-haiku-4-5 Rado claude-haiku-4.5).
  • Jei tai vis dar nesutampa, naudojama šeima (Opus, Sonnet arba Haiku), jei katalogo versija yra tokia pati arba naujesnė nei prašoma.
  • Vardas, kuris neatitinka nieko grįžta 404 not_found_error.
LaukoTipasReikalingasAprašymas
modelStringųTaipKatalogo modelio ID arba Antropinio modelio pavadinimas.
max_tokensIntegracijosTaipDaugiausia žetonų rašyti.
messagesartritasTaipuser ir assistant Vėliau, su text, image (base64 arba URL šaltinis) tool_use ir tool_result Blokų thinking Blokai iš ankstesnių posūkių yra priimami ir išmesti.
systemString arba arrayneSistemos žingsnis, kaip eilutė ar teksto blokai.
temperature
top_p
NumerisnePavyzdžių ėmimo kontrolės, kur modelis juos paima. top_k Jis priimtas ir nuleistas.
stop_sequencesStringų rinkinysneTekstas, kuris baigiasi atsakymu. Ne daugiau kaip 4 eilutės, kurių kiekvienas turi ne daugiau kaip 256 simbolių.
tools
tool_choice
Objektas, objektasneĮrankiai su name, description ir input_schema• A web_search Serverio įrankis įjungtas Internetinė paieškaKitų „Anthropic“ įdiegtų įrankių (bash, teksto redagavimo, kompiuterio naudojimo) naudojimas yra atsisakyta unsupported_tool. tool_choice Turiu auto, any, tool arba noneir disable_parallel_tool_use.
thinkingObjektasne{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} arba {"type": "disabled"}Biudžetas pasirenka pastangų lygį: žemiau 2 048 minimalaus, nuo 2 048 mažo, nuo 8 192 vidutinio, nuo 16 384 aukšto. output_config.effortArba ir aukštai.
streamBoolėneSrautas Anthropic renginių formatu.
metadataObjektasnePriimtas ir ignoruojamas.

Atsakymas

{
  "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 Taip pat galima laikyti tool_use Blokai ir a thinking Blokai, kurių signature Jis tuščias stop_reason yra end_turn, max_tokens, tool_use arba refusalDirbo taip pat, kaip finish_reason yra Pokalbių užbaigimas; stop_sequence Visada yra null, net kai sustojimo seka baigė atsakymą. input_tokens skaičiuojamas tik šviežias įvestis; talpyklos įvestis yra dviejuose talpyklos laukuose. nymbot Objektas ir X-Nymbot-Cost-Sats ir header.

Streamed, įvykiai yra Anthropic's message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta arba thinking_delta), content_block_stop, message_delta Dėl priežasties, naudojimo ir nymbot Kainų objektas ir message_stop• A ping taip pat siunčiamas kas 15 sekundžių, kol modelis veikia. Įrankių skambučiai atvyksta po teksto, kiekvienas kaip tool_use blokas su visais jo įrašais viename input_json_delta.

Klaidos šiame galiniame taške naudoja Anthropic formatą: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Trumpas balansas yra 402 billing_errorPerpildytas tiekėjas 503 overloaded_errorNesėkmė po to, kai prasidėjo srautas, siunčiama kaip error Įvykiai .

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ų skaičiavimas

Apskaičiuota, kiek įvesties žetonų naudotų pranešimų užklausą, kad klientas galėtų patikrinti prieš siunčiant.

POST https://nymbot.ai/api/v1/messages/count_tokens - Reikia API raktą. nemokamai

Kūnas yra toks pat kaip ir Žinutėsir be max_tokens; modelio pavadinimas turi būti išspręstas. Skaičiavimas yra apskaičiavimas: sistemos skambučio, pranešimų, įrankių skambučių ir įrankių apibrėžimų simboliai yra padalinti keturiais, plius 1,600 kiekvienam paveikslėliui. Tai nėra paties teikėjo tokenizatorius, todėl tikrasis skaičius gali skirtis. raktas, kuris pasiekė savo ribą, vis dar gali jį naudoti.

Atsakymas

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

Modelių sąrašas

Kiekvienas modelis ir generatorius, kurį priima API, su tuo, ką jis kainuoja.

GET https://nymbot.ai/api/v1/models — nereikia rakto. Paslėptas penkias minutes.

GET /api/v1/models/{id} Grąžina vieną įėjimą.

LaukoTipasReikalingasAprašymas
typeŽymės: String Querynechat (Tai yra nesėkmė) image, video, audio, embedding arba allKai kurie iš jų gali būti naudojami, kaip image,video.

Kainos yra tai, ką mokate, o mokestis ir marža jau yra doleriais ir kainuoja dabartine Bitcoin kaina. balance Tai rodo, kokį balansą modelis išleidžia. nymbot_key yra modelio trumpas pavadinimas programoje. created visada yra 0, nes katalogas neįrašo, kada buvo įtrauktas modelis. per_request vietoj to.

nymbot/auto visada yra pirmas, kainuoja kaip variableTačiau su a routes sąrašas, kuriame pateikiami kiekvieno standartinio maršruto tarifai.Jame išvardijama vizija ir samprotavimai, bet ne įrankiai.

GET /api/v1/models/{id} priima tuos pačius pavadinimus ir slapyvardžius kaip užklausą ir grąžina modelio įrašą, kuriam jie nusprendžia.

Atsakymas

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

Kiti tipai :

  • Vaizdas Įėjimai turi capabilities (accepts_image_url, requires_image_url, edit) ir kaina per_generation.
  • Vaizdo Įėjimai turi max_duration_seconds ir resolutionsir kaina per_second Dėl kiekvieno sprendimo.
  • AUDIO Įėjimai turi audio_type speech arba transcriptionKainos per_1k_chars arba per_minute.
  • Įterpimas Įėjimai turi dimensions, context_length, max_inputs Kaina už milijoną žetonų.

Kainos pažymėtos "estimated": true yra programos apskaičiuotas generatorius, kurio kaina nėra skelbiama. type Sugrįžta 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);