בסיס ידע מפתחים
צ'אט, תשובות והודעות
שלוש דרכים לשאול מודל משהו, בשלושת הפורמטים הלקוחות כבר מדברים, כולם פועלים על אותם מודלים ומחויבים באותו אופן.
דף זה תורגם במכונה לנוחיותך. המקור האנגלי הוא הגרסה החלה.
צ'אט סיום
OpenAI צ'אט פורמט, אחד כמעט כל כלי תומך.שלח את השיחה עד כה ולקבל את ההודעה הבאה בחזרה.
POST https://nymbot.ai/api/v1/chat/completions אתה צריך מפתח API.
רק model ו messages פרמטר דגימה המודל שנבחר לא לוקח נופל ללא שגיאה, כך גוף בקשה אחד עובד בין מודלים. supported_parametersמה שנמנע במקום להיכשל הוא כל מה שהמודל אינו יכול לעשות בכלל: תמונות למודל שאינו יכול לראות, כלים למודל שאינו יכול להתקשר אליהם.
| שדה | סוג | דרושה | תיאור |
|---|---|---|---|
model | String | כֵּן | nymbot/auto (או auto) עבור הנחיתה של Nymbot על האיזון הסטנדרטי, או מזהה מודל קטלוג כגון anthropic/claude-sonnet-5 שמות קצרים של האפליקציה וסימנים קצרים של האפליקציה מתקבלים גם כן. מספיק. |
messages | Array | כֵּן | שיחה - תפקידים system, developer (התייחסו לזה כאל מערכת) user, assistant ו toolתוכן הוא שורה או רשימה של text ו image_url חלקים; תמונות רק בהודעות המשתמשים. input_audio חלק מהקבצים נדחו. |
stream | boolean | לא | שלח את התשובה כפי שהיא כתובה. Streaming. |
stream_options | אובייקט | לא | {"include_usage": true} מוסיפים חתיכה אחרונה עם חשבונות טוקן ואת העלות. |
max_tokensmax_completion_tokens | אינטגר | לא | הורידו למקסימום של המודל אם גבוה יותר.הוא גם מגדיר כמה נשמר מהמשקל שלך, כך מספר קטן יותר צריך פחות אשראי כדי להתחיל. |
temperaturetop_p | מספר | לא | בדיקת דגימות: temperature 0 עד 2, top_p 0 עד 1 |
stop | String או Array | לא | טקסט שמסתיים בתשובה: שורה אחת או 4 שורות מקסימום, כל אחת עם מקסימום 256 תווים. nymbot/auto. |
seed | אינטגר | לא | עבור דגימה חוזרת, שבו המודל תומך בו. |
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 | לא | תגית: תגית: See כלי שיחות• A web_search המכשיר הופך חיפוש WEBמקסימום 128 כלים ו- 512 ק"ב של הגדרות, המונחים ב- מקסימום 64 רמות עמוקות; 400. |
reasoning_effortreasoning | אובייקטים , Object | לא | "minimal", "low", "medium" או "high"או {"effort": "high"}. "none" או {"enabled": false} פותחים את זה - ראה סיבה. |
plugins | Array | לא | [{"id": "web", "max_results": 5}] תמיד מחפש את האינטרנט הראשון.עד 10 תוצאות. |
n | אינטגר | לא | רק 1 – כל דבר אחר חוזר 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; א :thinking דוגמה נוספת היא דוגמה שאינה יכולה להצביע (model_not_foundאו שהמועמד סירב להגיש בקשה (ל"תupstream_rejected). |
402 | הסכום שהמודל מוציא לא יכול לכסות את החסימה. |
403 | במקרה הגרוע ביותר לא מתאים קופסת המפתח (key_limit_reached• נמוך יותר max_tokens או להרים את הקופסא. |
404 | אין מודל עם שם זה (model_not_found). |
429 | הגבלת הריבית של המפתח, או של הספק (upstream_rate_limited). |
502, 503 | המשתמש לא הצליח (upstream_error) או מוגזמת (upstream_overloadedעם Retry-Afterשום דבר לא מחויב אלא אם כן הספק חיוב על הניסיון. |
קוד המצב של כל מניות 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's Responses תחבורה, לא זורמים מהספק.
cURL
curl -N https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "nymbot/auto",
"stream": true,
"stream_options": {"include_usage": true},
"messages": [{"role": "user", "content": "Write a haiku about sats."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
stream = client.chat.completions.create(
model="nymbot/auto",
stream=True,
stream_options={"include_usage": True},
messages=[{"role": "user", "content": "Write a haiku about sats."}],
)
for chunk in stream:
if chunk.choices:
print(chunk.choices[0].delta.content or "", end="", flush=True)
elif chunk.usage:
print("\ncost:", chunk.usage.cost)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const stream = await client.chat.completions.create({
model: "nymbot/auto",
stream: true,
stream_options: { include_usage: true },
messages: [{ role: "user", content: "Write a haiku about sats." }],
});
for await (const chunk of stream) {
if (chunk.choices.length) process.stdout.write(chunk.choices[0].delta.content || "");
else if (chunk.usage) console.log("\ncost:", chunk.usage.cost);
}
כלי שיחות
לתאר את התפקידים ב tools והמודל יכול לבקש ממך להתקשר במקום לענות.אתה מפעיל את הפונקציה, מוסיף את התוצאה בתור תוצאה. tool מסר עם אותו
tool_call_idNymbot לעולם לא פועל את הפונקציות שלך; זה מעביר את הבקשה של המודל בחזרה אליך.
tool_choice לוקח "auto", "none",
"required" או {"type": "function", "function": {"name": "…"}}הרשימה של המודלים מציינת אילו מודלים יכולים להתקשר כלים (capabilities.tools) כלים מסרבים עם 400 unsupported_tool הוא nymbot/auto ועל הדגמים הקטנים של קטלוגים המופעלים על תחבורה של OpenAI Responses, אשר Nymbot לא יכול להעביר כלים.
עם "stream": true, בקשה עם כלים פועלת בחתיכה אחת ולאחר מכן נשלחת בתור רצף חתיכות רגילות: התפקיד, חתיכה אחת נושאת כל שיחת כלים עם האינדקס שלה, id, שם וארגומנטים, ואת החתיכה הסופית.
התשובה, באופן חלקי
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_7d2e",
"type": "function",
"function": { "name": "get_invoice_status", "arguments": "{\"invoice_id\":\"a41f\"}" }
}
]
},
"finish_reason": "tool_calls"
}
]
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{"role": "user", "content": "Has invoice a41f been paid?"}],
"tools": [{
"type": "function",
"function": {
"name": "get_invoice_status",
"description": "Look up whether an invoice is paid.",
"parameters": {
"type": "object",
"properties": {"invoice_id": {"type": "string"}},
"required": ["invoice_id"]
}
}
}]
}'
Python
import json, os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
tools = [{
"type": "function",
"function": {
"name": "get_invoice_status",
"description": "Look up whether an invoice is paid.",
"parameters": {
"type": "object",
"properties": {"invoice_id": {"type": "string"}},
"required": ["invoice_id"],
},
},
}]
messages = [{"role": "user", "content": "Has invoice a41f been paid?"}]
reply = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
call = reply.choices[0].message.tool_calls[0]
args = json.loads(call.function.arguments)
messages.append(reply.choices[0].message)
messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps({"paid": True})})
final = client.chat.completions.create(model="anthropic/claude-sonnet-5", messages=messages, tools=tools)
print(final.choices[0].message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const tools = [{
type: "function",
function: {
name: "get_invoice_status",
description: "Look up whether an invoice is paid.",
parameters: {
type: "object",
properties: { invoice_id: { type: "string" } },
required: ["invoice_id"],
},
},
}];
const messages = [{ role: "user", content: "Has invoice a41f been paid?" }];
const reply = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
const call = reply.choices[0].message.tool_calls[0];
const args = JSON.parse(call.function.arguments);
messages.push(reply.choices[0].message);
messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify({ paid: true }) });
const final = await client.chat.completions.create({ model: "anthropic/claude-sonnet-5", messages, tools });
console.log(final.choices[0].message.content);
תמונות בהזמנה
מודלים עם capabilities.vision אפשר להוסיף תמונה, אפשר להוסיף image_url
חלקים של הודעה למשתמש, עם קהל https:// קישור או 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 שלח את הבקשה למסלול הגיון הסטנדרטי.
על מודלים אנתרופיים המאמץ הופך תקציב חשיבה של כ 1,000, 2,000, 8,000 או 16,000 טוקינים, לעולם לא יותר מ max_tokens מותר לחשוב, מותר לחשוב כאשר
tool_choice כוח כלי, וכאשר הבקשה ממשיכה מעגל כלי (ההודעה האחרונה שלה היא תוצאה של כלי), כי Anthropic צריך את החשיבה החתומה הקודמת כדי להמשיך אותו.
ההיגיון חוזר לתוך message.reasoning_contentאו
delta.reasoning_content כאשר סטרימינג, לעולם לא מעורב בתשובה. סיבה היא היציאה והוא מחויב ככזה, בתוך completion_tokensחלק מהספקים לא מחזירים את טקסט ההסבר בכלל, והוא עדיין מחויב.
cURL
curl https://nymbot.ai/api/v1/chat/completions \
-H "Authorization: Bearer $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"reasoning_effort": "high",
"messages": [{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}]
}'
Python
import os
from openai import OpenAI
client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])
reply = client.chat.completions.create(
model="anthropic/claude-sonnet-5",
reasoning_effort="high",
messages=[{"role": "user", "content": "Is 2^61 - 1 prime? Show why."}],
)
message = reply.choices[0].message
print(getattr(message, "reasoning_content", None))
print(message.content)
JavaScript
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });
const reply = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
reasoning_effort: "high",
messages: [{ role: "user", content: "Is 2^61 - 1 prime? Show why." }],
});
console.log(reply.choices[0].message.reasoning_content);
console.log(reply.choices[0].message.content);
דגם suffixes
תוספת על שם המודל משנה את האופן שבו מתייחסת הבקשה, ללא שדה אחר. anthropic/claude-sonnet-5:online.
| מספיק | השפעה |
|---|---|
:online | מחפש את האינטרנט תחילה, כמו plugins: [{"id": "web"}]זהו חיפוש WEB. |
:thinking | מאמץ רציני; על nymbot/autoעל מודל שאינו מסוגל להגיב, 400 model_not_found עם “no endpoints found” |
:nitro, :floor, :exacto, :extended | כל מודל קטלוג יש נתיב אחד, כך שאין מהיר יותר, זול יותר או ארוך יותר לבחור אחד; השלכות מותרות כך שמות מודל עותקים משירותים אחרים עדיין עובדים. |
כל ספיקס אחר מתעלם.השם כולו נבדק תחילה, כך שמודל ש-IDו שלו באמת מכיל קולון עדיין עובד; אם לא, ספיקסים נלקחים מהסוף אחד בכל פעם עד שמודל תואם. 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 מחפש את ההודעה האחרונה של המשתמש (אלפי הדמויות הראשונות שלה), קורא את הדפים הטובים ביותר ומעביר אותם למודל עם שאלה, מסומנת בתוכן חיצוני שהמודל לא צריך לקחת הוראות מ.
- תמיד מחפשים:
"plugins": [{"id": "web", "max_results": 5}]או א:onlineמספיק על המודל. - חפש מתי זה עוזר:
"tools": [{"type": "web_search", "parameters": {"max_results": 5}}]כמו כן התקבלו כweb_search_previewאוopenrouter:web_searchNymbot מחפש רק כאשר השאלה נראית כאילו היא זקוקה למידע הנוכחי, אותו מבחן שהאפליקציה משתמשת בו.
max_results הוא 5 כברירת מחדל ומקסימום 10.
nymbot.web_search.sourcesכל אחד עם A 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 של נתונים, לא מזהה קובץ. reasoning ו web_search_call חפצים נשלפים; item_reference הוא סירב |
instructions | String | לא | הוראות מערכת |
max_output_tokens | אינטגר | לא | הכי הרבה טיפים לכתוב. |
temperaturetop_p | מספר | לא | דגימה של שליטה, איפה המודל לוקח אותם. |
toolstool_choiceparallel_tool_calls | Array, String או Object, Boolean | לא | תגיות קשורות תגיות קשורות תגיות קשורות תגיות קשורות ({"type": "function", "name": …, "parameters": …}) א 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, 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 SDKs ו- Claude Code. זה עובד עם כל המודל בקטלוג, לא רק Claude: הבקשה מתורגמת, פועלת דרך אותו צינור, ומתורגמת בחזרה.
POST https://nymbot.ai/api/v1/messages - צריך מפתח API, כמו x-api-key או Authorization: Bearer.
The anthropic-version ו anthropic-beta שמות מודל אנתרופיים מתאימים לקטלוג, כך ש-Claude Code ו-SDKs עובדים עם השמות שהם כבר משתמשים בהם:
- שמו של קטלוג ידוע, כגון
claude-sonnet-5אוanthropic/claude-opus-5משתמשים בו כפי שהוא. - אם יש תאריך (
-20260514),-latest, גרסה תגית כמו-v1מונח של מונח כגון[1m]ואחדanthropic/אוanthropic.המשתתפים יוכלו להתחיל את התהליך ולהתמודד עם התופעה בשתי דרכים (claude-haiku-4-5מוצאיםclaude-haiku-4.5). - אם זה עדיין לא מתאים, המשפחה (Opus, Sonnet או Haiku) משמשת, כל עוד הגרסה של הקטלוג היא זהה או חדשה יותר מאשר זו שביקשת.
- שם שלא מתאים לשום דבר חוזר
404not_found_error.
| שדה | סוג | דרושה | תיאור |
|---|---|---|---|
model | String | כֵּן | שם מודל קטלוג, או שם מודל אנתרופי. |
max_tokens | אינטגר | כֵּן | הכי הרבה טיפים לכתוב. |
messages | Array | כֵּן | user ו assistant הפוך, עם text, image (בסיס 64 או מקור ה-URL) tool_use ו tool_result בלוקים thinking הבלוקים מהסיבובים הקודמים מתקבלים ויורדים. |
system | String או Array | לא | פקודת המערכת, כמו חוט או בלוקי טקסט. |
temperaturetop_p | מספר | לא | דגימה של שליטה, איפה המודל לוקח אותם. top_k הוא התקבל וננטש. |
stop_sequences | תגית: array of strings | לא | טקסט שמסתיים בתשובה: עד 4 חוטים, כל אחד מהם עד 256 תווים. |
toolstool_choice | תגית: Object | לא | כלים עם name, description ו input_schema• A web_search כלי השרת פועל חיפוש WEBכלים מובנים אחרים של Anthropic (bash, עורך טקסט, שימוש במחשב) נדחו עם unsupported_tool. tool_choice לוקח auto, any, tool או none, ו disable_parallel_tool_use. |
thinking | אובייקט | לא | {"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} או {"type": "disabled"}התקציב בוחר רמה של מאמץ: מתחת 2,048 מינימום, מ 2,048 נמוך, מ 8,192 בינוני, מ 16,384 גבוה. output_config.effortאו גבוה יותר. |
stream | 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 האובייקט וה 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 עבור כל תמונה.
תשובות
{ "input_tokens": 318 }
cURL
curl https://nymbot.ai/api/v1/messages/count_tokens \
-H "x-api-key: $NYMBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "What is a Lightning invoice?"}]
}'
Python
import os
import anthropic
client = anthropic.Anthropic(base_url="https://nymbot.ai/api", api_key=os.environ["NYMBOT_API_KEY"])
count = client.messages.count_tokens(
model="claude-sonnet-5",
messages=[{"role": "user", "content": "What is a Lightning invoice?"}],
)
print(count.input_tokens)
JavaScript
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({ baseURL: "https://nymbot.ai/api", apiKey: process.env.NYMBOT_API_KEY });
const count = await client.messages.countTokens({
model: "claude-sonnet-5",
messages: [{ role: "user", content: "What is a Lightning invoice?" }],
});
console.log(count.input_tokens);
רשימת מודלים
כל מודל וגנרטור מקבל את ה- API, עם מה שזה עולה.הרשימה נקראת מאותו קטלוג חי כמו בוחר האפליקציה, כך שזה תמיד מה שהשרת יפעיל.
GET https://nymbot.ai/api/v1/models אין צורך במפתח, נסגר למשך חמש דקות.
GET /api/v1/models/{id} מחזירים כניסה אחת
| שדה | סוג | דרושה | תיאור |
|---|---|---|---|
type | תגית: Query | לא | chat (ההתנצלות היא image, video, audio, embedding או allניתן לתת כמה, כגון image,video. |
המחירים הם מה שאתה משלם, עם התשלום והמגבלה כבר בפנים, בדולרים ובסיס במחיר הנוכחי של ביטקוין. 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המחיר הוא 1 מיליון טוקי כניסה.
מחירים מסומנים "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);