پایگاه دانش توسعه دهندگان
چت، پاسخ ها و پیام ها
سه راه برای پرسیدن چیزی به یک مدل، در سه فرمت مشتریان در حال حاضر صحبت می کنند، همه بر روی همان مدل ها اجرا می شوند و به همان روش محاسبه می شوند.
این صفحه برای سهولت به صورت ماشینی ترجمه شده است. نسخه اصلی انگلیسی نسخه ای است که اعمال می شود.
مکمل های چت
فرمت چت OpenAI، و یکی که تقریبا هر ابزار پشتیبانی می کند. ارسال مکالمه تا به حال و دریافت پیام بعدی.
POST https://nymbot.ai/api/v1/chat/completions نیاز به کلید API دارد.
تنها model و messages یک پارامتر نمونه گیری که مدل انتخاب نشده است بدون خطا سقوط می شود، بنابراین یک بدن درخواست در میان مدل ها کار می کند. supported_parametersآنچه را که از دست داده می شود، چیزی است که مدل نمی تواند انجام دهد: تصاویر برای یک مدل که نمی تواند ببینند، ابزار برای یک مدل که نمی تواند آنها را بخواند.
| میدان | نوع | مورد نیاز | توضیحات |
|---|---|---|---|
model | String | بله | nymbot/auto (یا auto) برای راه اندازی Nymbot بر روی توازن استاندارد، یا یک ID مدل کاتالوگ مانند anthropic/claude-sonnet-5 نام های کوتاه و نام های غیرمستقیم برنامه نیز پذیرفته می شوند. ممکن است در یک کافی. |
messages | آریا | بله | نقش ها، نقش ها system, developer (به عنوان یک سیستم، user, assistant و toolمحتوای یک string یا یک لیست از text و image_url قسمت ها: تصاویر فقط در پیام های کاربر input_audio بخشی از فایل ها رد می شوند. |
stream | boolean | نه | پاسخ را همانطور که نوشته شده ارسال کنید. streaming. |
stream_options | موضوع | نه | {"include_usage": true} اضافه کردن یک قطعه نهایی با شمارش تیکن و هزینه. |
max_tokensmax_completion_tokens | Integral | نه | بیشتر تیکن ها برای نوشتن. کاهش به حداکثر مدل اگر بالاتر است. همچنین تعیین می کند که چقدر از توازن شما نگه می دارد، بنابراین تعداد کوچکتر نیاز به اعتبار کمتر برای شروع است. |
temperaturetop_p | شماره | نه | نمونه های کنترل: temperature از 0 تا 2 top_p از 0 به 1 |
stop | String یا Array | نه | متن که پاسخ را پایان می دهد: یک string یا حداکثر 4 string، هر یک حداکثر 256 شخصیت. nymbot/auto. |
seed | Integral | نه | برای نمونه سازی تکراری، جایی که مدل آن را پشتیبانی می کند. |
presence_penaltyfrequency_penalty | شماره | نه | کنترل های تکراری، هر یک از -2 تا 2. |
response_format | موضوع | نه | {"type": "json_object"} یا {"type": "json_schema", "json_schema": {…}}در صورتی که مدل آن را پشتیبانی می کند، استفاده نمی شود nymbot/auto. |
toolstool_choiceparallel_tool_calls | Array، String یا Object، Boolean | نه | کارآفرینی: ببینید ابزار تماس• A web_search ابزار تبدیل می شود WEB جستجوحداکثر 128 ابزار و 512 KB تعریف، در حداکثر 64 سطح عمیق است؛ بیشتر یک 400. |
reasoning_effortreasoning | نقاشی، object | نه | "minimal", "low", "medium" یا "high"یا {"effort": "high"}. "none" یا {"enabled": false} آن را خاموش کنید. ببینید دلایل. |
plugins | آریا | نه | [{"id": "web", "max_results": 5}] همیشه ابتدا سایت را جستجو می کند تا 10 نتیجه. |
n | Integral | نه | ۱- همه چیز دیگر برمی گردد 400. |
logit_biasusermetadata | برچسب ها: String, Object | نه | پذیرفته و ارسال نشده است. logit_bias نقشه های با حداکثر 300 رمز عبور به اعداد از -100 تا 100؛ user حداکثر 256 شخصیت metadata دارای حداکثر 16 ارزش زنجیره، کلید ها تا 64 شخصیت و ارزش ها تا 512. |
پاسخ عادی است chat.completionبا هزینه در usage.cost
(در دلار) و در nymbot اشیاء model یک نام کوتاه به عنوان یک نام کامل برمی گردد.اگر مدل قبل از پاسخ به جواب است، دلیل آن در message.reasoning_contentجدا از پاسخ.
پاسخ
{
"id": "chatcmpl-5f1c0a9e27d84b3c",
"object": "chat.completion",
"created": 1790726400,
"model": "anthropic/claude-sonnet-5",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "A Lightning invoice is a one-time payment request..."
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 1240,
"completion_tokens": 380,
"total_tokens": 1620,
"prompt_tokens_details": { "cached_tokens": 0 },
"completion_tokens_details": { "reasoning_tokens": 0 },
"cost": 0.01895
},
"nymbot": {
"balance": "pro",
"charged_credits": 0.162,
"charged_sats": 16.2,
"balance_credits": 412.425,
"balance_sats": 41242.5
}
}
finish_reason از آنچه برگردانده شده، ساخته شده است، زیرا ارائه دهندگان آن را متفاوت گزارش می کنند: tool_calls هنگامی که ما از ابزارها درخواست می کنیم، length هنگامی که پاسخ از هر تیک اجازه داده شده استفاده می کند (یا مدل همه آنها را به تفکیک و نوشتن هیچ پاسخ) content_filter هنگامی که مشتری آن را رد می کند و stop
در غیر این usage.completion_tokens_details.reasoning_tokens همیشه 0 است: تکه های دلایل پنهان محاسبه می شوند و در completion_tokens.
| وضعیت | وقتی |
|---|---|
400 | نه model یا messages (missing_required_parameter)؛ یک بخش صوتی یا فایل، یا تصاویر برای یک مدل که نمی تواند آنها را ببینید (unsupported_content)؛ بیش از 20 عکس (too_many_images)؛ یک پارامتر نمونه از نوع غلط یا خارج از محدوده (invalid_value)؛ یک لینک تصویر که عمومی نیست (invalid_image_url)؛ ابزار در یک مدل که آنها را نمی توان نامید (unsupported_tool); n غیر از 1؛ A :thinking به عنوان مثال در یک مدل که نمی تواند دلیل (model_not_found)؛ یا ارائه دهنده درخواست را رد کرده است (upstream_rejected). |
402 | توازن که مدل صرف نمی کند نمی تواند ذخیره را پوشش دهد. |
403 | در بدترین مورد، دکمه کلید را نمی پذیرد (key_limit_reached) پایین تر max_tokens یا Cap را بالا ببرید. |
404 | هیچ مدل با این نام (model_not_found). |
429 | نرخ محدودیت کلید، یا ارائه دهنده (upstream_rate_limited). |
502, 503 | کارآفرینی که شکست خورده (upstream_error) یا بیش از حد (upstream_overloadedبا Retry-Afterهیچ چیز محاسبه می شود، مگر اینکه ارائه دهنده برای این تلاش محاسبه شده است. |
کد های وضعیت هر سهام Endpoint در زیر لیست می باشد. اشتباهات.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [
{"role": "system", "content": "Answer in one short paragraph."},
{"role": "user", "content": "What is a Lightning invoice?"}
],
"max_tokens": 400
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[
{"role": "system", "content": "Answer in one short paragraph."},
{"role": "user", "content": "What is a Lightning invoice?"},
],
max_tokens=400,
)
print(reply.choices[0].message.content)
print(reply.usage.cost)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [
{ role: "system", content: "Answer in one short paragraph." },
{ role: "user", content: "What is a Lightning invoice?" },
],
max_tokens: 400,
});
console.log(reply.choices[0].message.content);
console.log(reply.usage.cost);
Streaming
با "stream": true پاسخ به عنوان اتفاقات فرستاده شده توسط سرور می آید در حالی که مدل آن را می نویسد. chat.completion.chunk در A data: خط، و جریان پایان می یابد با data: [DONE]منطق می آید در
delta.reasoning_contentپاسخ در delta.content.
هر چیزی را که ممکن است بیش از حدود 100 ثانیه طول بکشد، مانند یک پاسخ طولانی، یک پاسخ بزرگ، پخش کنید.
max_tokens یک درخواست که پخش نمی شود، چیزی نمی فرستد تا زمانی که پاسخ کامل باشد، و شبکه بین شما و Nymbot ممکن است بعد از حدود 100 ثانیه یک اتصال غیر فعال را ببندد؛ مدل هنوز هم تمام می شود و آنچه نوشته است شارژ می شود، اما پاسخ از دست رفته است.
جریان
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}]}
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{"content":"A Lightning invoice"},"finish_reason":null}]}
: keep-alive
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: {"id":"chatcmpl-5f1c0a9e27d84b3c","object":"chat.completion.chunk","created":1790726400,"model":"anthropic/claude-sonnet-5","choices":[],"usage":{"prompt_tokens":1240,"completion_tokens":380,"total_tokens":1620,"cost":0.01895},"nymbot":{"balance":"pro","charged_credits":0.162,"charged_sats":16.2,"balance_credits":412.425,"balance_sats":41242.5}}
data: [DONE]
- خطوط آغاز شده با
:هر 15 ثانیه در حالی که مدل فکر می کند، نظرات زنده نگه می دارد. - بپرسید
"stream_options": {"include_usage": true}برای رسیدن به آخرین قطعه بالا، با یک خالیchoicesقیمت ها، هزینه ها، هزینه ها وnymbotاشیاء - اگر اتصال را زودتر خاموش کنید، مدل را متوقف نمی کنید: Nymbot بقیه جریان ارائه دهنده را تا 25 ثانیه می خواند تا تعداد تیکن خود را دریافت کند و شما آنچه ارائه دهنده گزارش می دهد را پرداخت می کنید.
- یک اشتباه قبل از اولین قطعه، مانند
401یا402, به عنوان JSON معمولی با کد وضعیت خود برمی گردد، نه به عنوان یک جریان.data: {"error": {…}}اتفاق می افتد و جریان بدون[DONE]. - درخواست ها با ابزارها و مدل ها در حمل و نقل پاسخ های OpenAI، از ارائه دهنده فرود نمی آیند.
cURL
curl -N https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nymbot/auto",
"stream": true,
"stream_options": {"include_usage": true},
"messages": [{"role": "user", "content": "Write a haiku about sats."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
stream = client.chat.completions.create(
model="nymbot/auto",
stream=True,
stream_options={"include_usage": True},
messages=[{"role": "user", "content": "Write a haiku about sats."}],
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)
elif chunk.usage:
print("\ncost:", chunk.usage.cost)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const stream = await client.chat.completions.create({
model: "nymbot/auto",
stream: true,
stream_options: { include_usage: true },
messages: [{ role: "user", content: "Write a haiku about sats." }],
});
for await (const chunk of stream) {
if (chunk.choices.length) process.stdout.write(chunk.choices[0].delta.content || "");
else if (chunk.usage) console.log("\ncost:", chunk.usage.cost);
}
ابزار تماس
توصیف وظایف در tools و مدل می تواند بخواهد یکی را دعوت کند به جای پاسخ دادن. شما عملکرد را اجرا می کنید، نتایج آن را به عنوان یک tool پیام با همان
tool_call_idNymbot هرگز فعالیت های شما را اجرا نمی کند؛ درخواست مدل را به شما باز می گرداند.
tool_choice می گیرد "auto", "none",
"required" یا {"type": "function", "function": {"name": "…"}}در لیست مدل نشان می دهد که کدام مدل ها می توانند ابزارها را بخوانند (capabilities.tools) ابزار ها را با 400 unsupported_tool ای nymbot/auto و بر روی چندین مدل کاتالوگ که بر روی حمل و نقل Responses OpenAI اجرا می شود، که Nymbot نمی تواند ابزار را به آن انتقال دهد.
با "stream": trueیک درخواست با ابزارها در یک قطعه اجرا می شود و سپس به عنوان یک قطعه معمولی ارسال می شود: نقش، یک قطعه که هر تماس ابزار با index، id، نام و ادعاهای خود را حمل می کند، و قطعه پایان.
پاسخ بخشی از
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_7d2e",
"type": "function",
"function": { "name": "get_invoice_status", "arguments": "{\"invoice_id\":\"a41f\"}" }
}
]
},
"finish_reason": "tool_calls"
}
]
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{"role": "user", "content": "Has invoice a41f been paid?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_invoice_status",
"description": "Look up whether an invoice is paid.",
"parameters": {
"type": "object",
"properties": {"invoice_id": {"type": "string"}},
"required": ["invoice_id"]
}
}
}]
}'
Python
import json, os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_invoice_status",
"description": "Look up whether an invoice is paid.",
"parameters": {
"type": "object",
"properties": {"invoice_id": {"type": "string"}},
"required": ["invoice_id"],
},
},
}]
messages = [{"role": "user", "content": "Has invoice a41f been paid?"}]
reply = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
call = reply.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
messages.append(reply.choices[0].message)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps({"paid": True})})
final = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
print(final.choices[0].message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const tools = [{
type: "function",
function: {
name: "get_invoice_status",
description: "Look up whether an invoice is paid.",
parameters: {
type: "object",
properties: { invoice_id: { type: "string" } },
required: ["invoice_id"],
},
},
}];
const messages = [{ role: "user", content: "Has invoice a41f been paid?" }];
const reply = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
const call = reply.choices[0].message.tool_calls[0];
const args = JSON.parse(call.function.arguments);
messages.push(reply.choices[0].message);
messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify({ paid: true }) });
const final = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
console.log(final.choices[0].message.content);
تصاویر در درخواست
مدل های با capabilities.vision می توانید عکس ها را مشاهده کنید اضافه کنید image_url
بخشی به یک پیام کاربر، با هر یک از یک عموم https:// لینک یا A
data:image/…;base64, صفحه اصلی / اخبار / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس / عکس400 invalid_image_url) انتخابی detail است
auto, low یا high.
با nymbot/autoیک درخواست با یک تصویر در آن به یک مدل استاندارد که می تواند ببینید هدایت می شود. capabilities.vision عکس ها را با
400 unsupported_contentیک لینک باید به یک میزبان عمومی نشان دهد؛ Nymbot تصویر را به ارائه دهنده مدل منتقل می کند و آن را نگهداری نمی کند.
یک تصویر به عنوان تکیه های وارداتی که ارائه دهنده برای آن محاسبه می کند، مانند بقیه درخواست محاسبه می شود.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": "https://example.com/receipt.jpg"}}
]
}]
}'
Python
import base64, os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
with open("receipt.jpg", "rb") as f:
data_url = "data:image/jpeg;base64," + base64.b64encode(f.read()).decode()
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "What is in this picture?"},
{"type": "image_url", "image_url": {"url": data_url}},
],
}],
)
print(reply.choices[0].message.content)
JavaScript
import { readFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const dataUrl = "data:image/jpeg;base64," + (await readFile("receipt.jpg")).toString("base64");
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [{
role: "user",
content: [
{ type: "text", text: "What is in this picture?" },
{ type: "image_url", image_url: { url: dataUrl } },
],
}],
});
console.log(reply.choices[0].message.content);
دلایل
مدل های با capabilities.reasoning شما می توانید قبل از پاسخ به آنها فکر کنید، از آنها بیشتر یا کمتر بپرسید. reasoning_effort ("minimal", "low",
"medium" یا "high") یا "reasoning": {"effort": "high"}یا اضافه کنید :thinking به نام مدل، که به معنای تلاش بالا است. بر روی یک مدل بدون دلیل تنظیم نظر نمی گیرد. با nymbot/auto, :thinking درخواست را به مسیر استراتژیک هدایت می کند.
در مدل های Anthropic، تلاش یک بودجه تفکر از حدود 1000، 2000، 8،000 یا 16،000 تیکن تبدیل می شود، هرگز بیش از max_tokens به نظر می رسد که فکر کردن در زمانی که
tool_choice یک ابزار را مجبور می کند، و هنگامی که درخواست ادامه می دهد یک حلقه ابزار ( آخرین پیام آن یک نتیجه ابزار است)، زیرا Anthropic نیاز به تفکر قبلی امضا شده برای ادامه آن دارد.
منطق برمی گردد در message.reasoning_contentیا
delta.reasoning_content هنگامی که پخش می شود، هرگز در پاسخ مخلوط نمی شود. منطق، نتیجه است و به عنوان چنین، داخل completion_tokensبرخی از ارائه دهندگان به طور کلی متن دلیل را باز نمی کنند و هنوز هزینه می شود.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"reasoning_effort": "high",
"messages": [{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
reasoning_effort="high",
messages=[{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}],
)
message = reply.choices[0].message
print(getattr(message, "reasoning_content", None))
print(message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
reasoning_effort: "high",
messages: [{ role: "user", content: "Is 2^61 - 1 prime? Show why." }],
});
console.log(reply.choices[0].message.reasoning_content);
console.log(reply.choices[0].message.content);
مدل suffixes
یک اضافه بر روی نام مدل تغییر می کند که چگونه درخواست پردازش می شود، بدون زمینه دیگری. آنها بر روی ID های کامل و نام های کوتاه به طور یکسان، مانند در anthropic/claude-sonnet-5:online.
| کافی | اثر |
|---|---|
:online | ابتدا سایت را جستجو کنید، مانند: plugins: [{"id": "web"}]این WEB جستجو. |
:thinking | تلاش های سختی؛ در nymbot/autoدر یک مدل که نمی تواند منطق کند، 400 model_not_found با &ldquo؛ هیچ نقطه پایانی یافت&rdquo؛. |
:nitro, :floor, :exacto, :extended | هر مدل کاتالوگ یک مسیر دارد، بنابراین هیچ راهی سریع تر، ارزان تر یا طولانی تر برای انتخاب وجود ندارد؛ پیوسته ها اجازه داده می شود تا نام های مدل کپی شده از خدمات دیگر هنوز هم کار می کنند. |
هر نام دیگر نادیده گرفته می شود.همه نام ابتدا امتحان می شود، بنابراین یک مدل که شناسه ای که واقعا شامل یک کلون وجود دارد هنوز هم کار می کند؛ در غیر این صورت، اضافه ها از پایان یکی در یک زمان گرفته می شود تا زمانی که یک مدل مطابقت دارد. 400 invalid_value.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5:thinking",
"messages": [{"role": "user", "content": "Plan a three-day trip to Lisbon."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5:thinking",
messages=[{"role": "user", "content": "Plan a three-day trip to Lisbon."}],
)
print(reply.choices[0].message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5:thinking",
messages: [{ role: "user", content: "Plan a three-day trip to Lisbon." }],
});
console.log(reply.choices[0].message.content);
WEB جستجو
هر مدل چت می تواند از وب زنده پاسخ دهد. nymbot به دنبال آخرین پیام کاربر ( اولین 2000 شخصیت خود) است، بهترین صفحه ها را می خواند و آنها را به مدل با سوال می دهد، به عنوان محتوای خارجی نشان داده شده است که مدل نباید از دستورالعمل ها استفاده کند.
- همیشه جستجو:
"plugins": [{"id": "web", "max_results": 5}]یا A:onlinesuffix در مدل - جستجو هنگامی که کمک می کند:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]همچنین پذیرفته به عنوانweb_search_previewیاopenrouter:web_searchNymbot فقط زمانی جستجو می کند که سوال به نظر می رسد نیاز به اطلاعات فعلی دارد، همان تست که برنامه استفاده می کند.
max_results 5 به طور پیش فرض و در حداکثر 10. منابع برمی گردند در
nymbot.web_search.sourcesهر یک با یک title, snippet و
urlو به عنوان url_citation برچسب ها در پیام
هر جستجوی که اجرا می شود هزینه $0.008, تبدیل به sats, بر روی تیکن, و آن را بخشی از نگه داشتن.
پاسخ بخشی از
"nymbot": {
"balance": "pro",
"charged_credits": 0.431,
"charged_sats": 43.1,
"balance_credits": 411.994,
"balance_sats": 41199.4,
"web_search": {
"sources": [
{ "title": "Lightning Network - Wikipedia", "snippet": "The Lightning Network is a payment protocol...", "url": "https://en.wikipedia.org/wiki/Lightning_Network" }
]
}
}
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"plugins": [{"id": "web", "max_results": 5}],
"messages": [{"role": "user", "content": "What changed in the latest Bitcoin Core release?"}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
messages=[{"role": "user", "content": "What changed in the latest Bitcoin Core release?"}],
extra_body={"plugins": [{"id": "web", "max_results": 5}]},
)
print(reply.choices[0].message.content)
for source in reply.model_extra["nymbot"]["web_search"]["sources"]:
print(source["url"])
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
plugins: [{ id: "web", max_results: 5 }],
messages: [{ role: "user", content: "What changed in the latest Bitcoin Core release?" }],
});
console.log(reply.choices[0].message.content);
for (const source of reply.nymbot.web_search.sources) console.log(source.url);
پاسخ API
فرمت جدید OpenAI، که توسط OpenAI Agents SDK و توسط Codex استفاده می شود، بر روی همان مدل ها، حسابداری و ویژگی های Chat Completions اجرا می شود.
POST https://nymbot.ai/api/v1/responses نیاز به کلید API دارد.
| میدان | نوع | مورد نیاز | توضیحات |
|---|---|---|---|
model | String | بله | برای مکمل های چتاضافه شده است. |
input | String یا Array | بله | یک رده، یا یک لیست از عناصر: پیام ها (دوره ها) user, assistant, system, developer) با input_text, input_image و output_text قطعات، و function_call و function_call_output عناصر برای ابزار input_image گرفتن یک image_url لینک یا URL داده، نه یک فایل ID. reasoning و web_search_call نکات زیر را حذف کنید؛ item_reference رد شده است. |
instructions | String | نه | دستورالعمل های سیستم |
max_output_tokens | Integral | نه | بیشترین کلمات برای نوشتن |
temperaturetop_p | شماره | نه | کنترل نمونه، جایی که مدل آنها را می گیرد. |
toolstool_choiceparallel_tool_calls | Array، String یا Object، Boolean | نه | به عنوان مثال، در صورت استفاده از این ابزار ({"type": "function", "name": …, "parameters": …}) A web_search یا web_search_preview ابزار تبدیل می شود WEB جستجو زمانی که کمک می کند، ابزار های دیگر ساخته شده را رد می کنند. |
reasoning | موضوع | نه | {"effort": "minimal" | "low" | "medium" | "high"}. xhigh و max معنی high; none آن را خاموش کنید. |
text.formatresponse_format | موضوع | نه | به عنوان یک طرح JSON یا json_object. |
metadata | موضوع | نه | بدون تغییر در پاسخ، در حداکثر 16 ارزش زنجیره، کلید ها تا 64 شخصیت و ارزش ها تا 512 است. |
stream | boolean | نه | در حال حاضر، برنامه هایی که در زیر توصیف شده است را پخش کنید. |
store | boolean | نه | هیچ چیز ذخیره نمی شود و پاسخ همیشه می گوید "store": false. |
previous_response_idconversationbackground | String، Object، Boolean | نه | پشتیبانی نمی شود: 400 unsupported_parameterپاسخ ها ذخیره نمی شوند، بنابراین تمام مکالمه را به input هر بار |
پاسخ
{
"id": "resp_8c1e4b0f9a2d4e61",
"object": "response",
"created_at": 1790726400,
"status": "completed",
"model": "anthropic/claude-sonnet-5",
"output": [
{
"type": "message",
"id": "msg_2b7f",
"role": "assistant",
"status": "completed",
"content": [{ "type": "output_text", "text": "A Lightning invoice is...", "annotations": [] }]
}
],
"output_text": "A Lightning invoice is...",
"usage": {
"input_tokens": 1240,
"input_tokens_details": { "cached_tokens": 0 },
"output_tokens": 380,
"output_tokens_details": { "reasoning_tokens": 0 },
"total_tokens": 1620
},
"incomplete_details": null,
"error": null,
"instructions": null,
"store": false,
"previous_response_id": null,
"metadata": {},
"nymbot": { "balance": "pro", "charged_credits": 0.162, "charged_sats": 16.2, "balance_credits": 412.425, "balance_sats": 41242.5 }
}
یک درخواست ابزار ظاهر می شود در output به عنوان A function_call موضوع با
call_id, name و arguments* نتایج را به عنوان A ارسال کنید
function_call_output موضوع با همان call_idمنطق، هنگامی که مدل آن را باز می گرداند، یک reasoning موضوع با reasoning_text برچسب ها: اول نوشته شده status است incomplete هنگامی که پاسخ به
max_output_tokens یا آن را رد می کند.
incomplete_details.reason نصب 2 max_output_tokens یا
content_filterپاسخ همچنین تنظیمات درخواست را (در درجه حرارت، ابزار، انتخاب ابزار و غیره) مانند OpenAI را تکرار می کند و از آن استفاده می کند. nymbot هزینه اشیاء
دانلود هر رویداد یک رویداد event: خط و A data: خط با A
sequence_numberدر این ترتیب: response.created,
response.in_progress, response.output_item.added,
response.content_part.addedهر تعداد از response.output_text.delta,
response.output_text.done, response.content_part.done,
response.output_item.doneو در نهایت response.completed با استفاده و هزینه. پاسخ کوتاه پایان با response.incomplete در عوض، و یک شکست پس از جریان آغاز شده با response.failedبه عنوان موضوع خود را به عنوان موضوع خود با response.reasoning_text.delta و .doneتماس ابزار بعد از پیام می آید، هر یک به عنوان یک عنصر با response.function_call_arguments.delta
و .done.
| وضعیت | وقتی |
|---|---|
400 | نه model یا input; previous_response_id, conversation, background یا یک item_reference (unsupported_parameter)؛ یک ابزار یا نوع محتوا که پشتیبانی نمی شود. |
402, 403, 404, 429, 502, 503 | در مورد مکمل های چت |
cURL
curl https://nymbot.ai/api/v1/responses \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"instructions": "Answer in one short paragraph.",
"input": "What is a Lightning invoice?"
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
response = client.responses.create(
model="anthropic/claude-sonnet-5",
instructions="Answer in one short paragraph.",
input="What is a Lightning invoice?",
)
print(response.output_text)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const response = await client.responses.create({
model: "anthropic/claude-sonnet-5",
instructions: "Answer in one short paragraph.",
input: "What is a Lightning invoice?",
});
console.log(response.output_text);
پیام های Anthropic
فرمت Anthropic، برای Anthropic SDKs و Claude Code. این کار با هر مدل در کاتالوگ، نه فقط Claude: درخواست ترجمه می شود، از طریق همان لوله اجرا می شود، و ترجمه به عقب.
POST https://nymbot.ai/api/v1/messages - نیاز به کلید API، به عنوان x-api-key یا Authorization: Bearer.
این anthropic-version و anthropic-beta نام های مدل Anthropic با کاتالوگ مطابقت دارند، بنابراین Claude Code و SDK ها با نام هایی که در حال حاضر استفاده می کنند کار می کنند:
- یک نام که کاتالوگ می داند، مانند:
claude-sonnet-5یاanthropic/claude-opus-5استفاده می شود همانطور که است. - به عنوان مثال، یک تاریخ (
-20260514),-latestیک نسخه مانند-v1به عنوان مثال، یک روزه مانند[1m]و یکanthropic/یاanthropic.در این مقاله به بررسی و بررسی این موضوع اشاره می کنیم و به بررسی و بررسی این موضوع اشاره می کنیم. (claude-haiku-4-5یافتنclaude-haiku-4.5). - اگر این هنوز هم چیزی نیست، خانواده (Opus، Sonnet یا Haiku) استفاده می شود، تا زمانی که نسخه کاتالوگ همان یا جدید تر از آن است که درخواست شده است.
- نامی که با هیچ چیز مطابقت ندارد باز می گردد
404not_found_error.
| میدان | نوع | مورد نیاز | توضیحات |
|---|---|---|---|
model | String | بله | یک نام مدل کاتالوگ یا نام مدل Anthropic. |
max_tokens | Integral | بله | بیشترین کلمات برای نوشتن |
messages | آریا | بله | user و assistant چرخش، با text, image (base64 یا منبع URL) tool_use و tool_result بلوک ها thinking بلوک های قبلی پذیرفته و رها می شوند. |
system | String یا Array | نه | سیستم به عنوان یک زنجیره یا بلوک متن. |
temperaturetop_p | شماره | نه | کنترل نمونه، جایی که مدل آنها را می گیرد. top_k پذیرفته و رها شده است. |
stop_sequences | مجموعه Strings | نه | متن که پاسخ را پایان می دهد: حداکثر 4 string، هر یک حداکثر 256 character. |
toolstool_choice | آریا، object | نه | ابزارهای با name, description و input_schema• A web_search سیستم عامل Server Tools WEB جستجوسایر ابزارهای ساخته شده Anthropic (بش، پردازنده متن، استفاده از کامپیوتر) با unsupported_tool. tool_choice می گیرد auto, any, tool یا noneو disable_parallel_tool_use. |
thinking | موضوع | نه | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} یا {"type": "disabled"}بودجه یک سطح تلاش را انتخاب می کند: زیر 2.048 حداقل، از 2.048 پایین، از 8.192 متوسط، از 16.384 بالا. output_config.effortیا بالا. |
stream | boolean | نه | پخش در فرمت های Anthropic |
metadata | موضوع | نه | پذیرفته و نادیده گرفته شده |
پاسخ
{
"id": "msg_01c7a2f93e5b4d08",
"type": "message",
"role": "assistant",
"model": "anthropic/claude-sonnet-5",
"content": [{ "type": "text", "text": "A Lightning invoice is..." }],
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 1240,
"output_tokens": 380,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0
},
"nymbot": { "balance": "pro", "charged_credits": 0.162, "charged_sats": 16.2, "balance_credits": 412.425, "balance_sats": 41242.5 }
}
content همچنین می توانید نگه دارید tool_use بلوک ها و A thinking
بلاک، چه کسی signature خالی است stop_reason است
end_turn, max_tokens, tool_use یا refusalبه همان شکل که کار می کرد finish_reason ای
مکمل های چت; stop_sequence همیشه
nullحتی هنگامی که یک قطعه پایانی پاسخ را پایان داد. input_tokens فقط واردات تازه محاسبه می شود؛ واردات کیش در دو زمینه کیش است.
nymbot object و آن X-Nymbot-Cost-Sats هارد
در این قسمت، رویدادهای Anthropic است: message_start,
content_block_start, ping, content_block_delta
(text_delta, input_json_delta یا thinking_delta),
content_block_stop, message_delta با توجه به علت، استفاده و nymbot هزینه اجاره و message_stop• A ping همچنین هر 15 ثانیه در حالی که مدل کار می کند ارسال می شود. تماس ابزار پس از متن، هر یک به عنوان یک
tool_use بلوک با تمام واردات خود را در یک input_json_delta.
اشتباهات در این نقطه آخر از فرمت Anthropic استفاده می کنند:
{"type": "error", "error": {"type": "not_found_error", "message": "…"}}یک توازن کوتاه 402 billing_errorیک ارائه دهنده بیش از حد
503 overloaded_errorیک شکست پس از شروع جریان به عنوان یک error رویداد
cURL
curl https://nymbot.ai/api/v1/messages \
-H "x-api-key: $NYMBOT_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
}'
Python
import os
import anthropic
client = anthropic.Anthropic(base_url="https://nymbot.ai/api", api_key=os.environ["NYMBOT_API_KEY"])
message = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(message.content[0].text)
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ baseURL: "https://nymbot.ai/api", apiKey: process.env.NYMBOT_API_KEY });
const message = await client.messages.create({
model: "claude-sonnet-5",
max_tokens: 1024,
messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(message.content[0].text);
محاسبه تیکن
یک ارزیابی از تعداد تیک های وارداتی که درخواست پیام ها می تواند از آن استفاده کند، به طوری که یک مشتری می تواند قبل از ارسال آن چک کند.
POST https://nymbot.ai/api/v1/messages/count_tokens - نیاز به کلید API.
بدن شما همان است که برای پیام هابدون max_tokens; نام مدل باید حل شود. محاسبه یک محاسبه است: شخصیت های دستورالعمل سیستم، پیام ها، تماس ابزار و تعریف ابزار به چهار تقسیم شده است، علاوه بر 1,600 برای هر تصویر. این tokenizer خود ارائه دهنده نیست، بنابراین محاسبه واقعی می تواند متفاوت باشد. یک کلید که حداکثر آن را به دست آورده است هنوز می تواند از آن استفاده کند.
پاسخ
{ "input_tokens": 318 }
cURL
curl https://nymbot.ai/api/v1/messages/count_tokens \
-H "x-api-key: $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
}'
Python
import os
import anthropic
client = anthropic.Anthropic(base_url="https://nymbot.ai/api", api_key=os.environ["NYMBOT_API_KEY"])
count = client.messages.count_tokens(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(count.input_tokens)
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ baseURL: "https://nymbot.ai/api", apiKey: process.env.NYMBOT_API_KEY });
const count = await client.messages.countTokens({
model: "claude-sonnet-5",
messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(count.input_tokens);
لیست مدل ها
هر مدل و ژنراتور API را می پذیرد، با چه هزینه ای است. لیست از همان کاتالوگ زنده به عنوان انتخاب برنامه خوانده می شود، بنابراین همیشه این است که سرور اجرا می شود.
GET https://nymbot.ai/api/v1/models - هیچ کلید لازم نیست. پنهان شده برای پنج دقیقه.
GET /api/v1/models/{id} 1 ورود را بازگردانید
| میدان | نوع | مورد نیاز | توضیحات |
|---|---|---|---|
type | آرشیو ( Query ) | نه | chat (در صورت عدم وجود) image, video, audio, embedding یا allبرخی از آنها می توانند به عنوان image,video. |
قیمت ها چیزی هستند که شما پرداخت می کنید، با هزینه و مرزی که در حال حاضر در، در دلار و در نرخ در قیمت فعلی بیت کوین است. balance نشان می دهد که مدل چه هزینه هایی را صرف می کند.
nymbot_key نام کوتاه مدل در برنامه است. created همیشه 0 است، زیرا کاتالوگ ثبت نمی کند زمانی که یک مدل اضافه شد. per_request در عوض
nymbot/auto همیشه اول است، قیمت به عنوان variableبا A
routes این لیست قیمت های هر مسیر استاندارد را ارائه می دهد.این لیست چشم انداز و استدلال، اما ابزار نیست.
GET /api/v1/models/{id} همان نام ها و نام عمده ها را به عنوان یک درخواست می پذیرد و واردات برای مدل را که آنها تصمیم می گیرند، باز می گرداند.
پاسخ
{
"object": "list",
"data": [
{
"id": "anthropic/claude-sonnet-5",
"object": "model",
"type": "chat",
"owned_by": "anthropic",
"name": "Claude Sonnet 5",
"created": 0,
"context_length": 1000000,
"max_output_tokens": 64000,
"architecture": { "input_modalities": ["text", "image"], "output_modalities": ["text"] },
"supported_parameters": ["max_tokens", "temperature", "tools", "tool_choice", "reasoning", "response_format", "stop"],
"capabilities": { "vision": true, "video": false, "tools": true, "reasoning": true, "web_search": true },
"balance": "pro",
"pricing": {
"type": "per_token",
"currency": "USD",
"input_per_1M_tokens": 4.725,
"output_per_1M_tokens": 23.625,
"cache_read_per_1M_tokens": 0.4725,
"sats_input_per_1M_tokens": 4038,
"sats_output_per_1M_tokens": 20192
},
"description": "...",
"nymbot_key": "claude-sonnet"
}
]
}
سایر انواع :
- تصویر ورود ها
capabilities(accepts_image_url,requires_image_url,edit) و یک قیمتper_generation. - ویدیو ورود ها
max_duration_secondsوresolutionsو یک قیمتper_secondبرای هر قراردادی - آڈیو ورود ها
audio_typespeechیاtranscriptionقیمتper_1k_charsیاper_minute. - Embedded ورود ها
dimensions,context_length,max_inputsو یک قیمت در هر میلیون تکه واردات.
قیمت برچسب "estimated": true این برنامه برای یک ژنراتور است که قیمت آن منتشر نشده است. type بازگشت 400.
cURL
curl "https://nymbot.ai/api/v1/models?type=chat"
Python
import requests
models = requests.get("https://nymbot.ai/api/v1/models", params={"type": "chat"}).json()["data"]
for m in models:
print(m["id"], m["balance"], m["pricing"].get("input_per_1M_tokens"))
JavaScript
const res = await fetch("https://nymbot.ai/api/v1/models?type=chat");
const { data } = await res.json();
for (const m of data) console.log(m.id, m.balance, m.pricing.input_per_1M_tokens);