דלג לתוכן
בחזרה לNymbot

בסיס ידע מפתחים

צ'אט, תשובות והודעות

שלוש דרכים לשאול מודל משהו, בשלושת הפורמטים הלקוחות כבר מדברים, כולם פועלים על אותם מודלים ומחויבים באותו אופן.

צ'אט סיום

OpenAI צ'אט פורמט, אחד כמעט כל כלי תומך.שלח את השיחה עד כה ולקבל את ההודעה הבאה בחזרה.

POST https://nymbot.ai/api/v1/chat/completions אתה צריך מפתח API.

רק model ו messages פרמטר דגימה המודל שנבחר לא לוקח נופל ללא שגיאה, כך גוף בקשה אחד עובד בין מודלים. supported_parametersמה שנמנע במקום להיכשל הוא כל מה שהמודל אינו יכול לעשות בכלל: תמונות למודל שאינו יכול לראות, כלים למודל שאינו יכול להתקשר אליהם.

שדהסוגדרושהתיאור
modelStringכֵּןnymbot/auto (או auto) עבור הנחיתה של Nymbot על האיזון הסטנדרטי, או מזהה מודל קטלוג כגון anthropic/claude-sonnet-5 שמות קצרים של האפליקציה וסימנים קצרים של האפליקציה מתקבלים גם כן. מספיק.
messagesArrayכֵּןשיחה - תפקידים system, developer (התייחסו לזה כאל מערכת) user, assistant ו toolתוכן הוא שורה או רשימה של text ו image_url חלקים; תמונות רק בהודעות המשתמשים. input_audio חלק מהקבצים נדחו.
streambooleanלאשלח את התשובה כפי שהיא כתובה. Streaming.
stream_optionsאובייקטלא{"include_usage": true} מוסיפים חתיכה אחרונה עם חשבונות טוקן ואת העלות.
max_tokens
max_completion_tokens
אינטגרלאהורידו למקסימום של המודל אם גבוה יותר.הוא גם מגדיר כמה נשמר מהמשקל שלך, כך מספר קטן יותר צריך פחות אשראי כדי להתחיל.
temperature
top_p
מספרלאבדיקת דגימות: temperature 0 עד 2, top_p 0 עד 1
stopString או Arrayלאטקסט שמסתיים בתשובה: שורה אחת או 4 שורות מקסימום, כל אחת עם מקסימום 256 תווים. nymbot/auto.
seedאינטגרלאעבור דגימה חוזרת, שבו המודל תומך בו.
presence_penalty
frequency_penalty
מספרלאמבחנים חוזרים, כל אחד מ -2 עד 2.
response_formatאובייקטלא{"type": "json_object"} או {"type": "json_schema", "json_schema": {…}}שם המודל תומך בו.לא נעשה שימוש nymbot/auto.
tools
tool_choice
parallel_tool_calls
Array, String או Object, Booleanלאתגית: תגית: See כלי שיחות• A web_search המכשיר הופך חיפוש WEBמקסימום 128 כלים ו- 512 ק"ב של הגדרות, המונחים ב- מקסימום 64 רמות עמוקות; 400.
reasoning_effort
reasoning
אובייקטים , Objectלא"minimal", "low", "medium" או "high"או {"effort": "high"}. "none" או {"enabled": false} פותחים את זה - ראה סיבה.
pluginsArrayלא[{"id": "web", "max_results": 5}] תמיד מחפש את האינטרנט הראשון.עד 10 תוצאות.
nאינטגרלארק 1 – כל דבר אחר חוזר 400.
logit_bias
user
metadata
אובייקט , 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);

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.

שדהסוגדרושהתיאור
modelStringכֵּןכמו עבור צ'אט סיוםתוספים כלולים
inputString או 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 הוא סירב
instructionsStringלאהוראות מערכת
max_output_tokensאינטגרלאהכי הרבה טיפים לכתוב.
temperature
top_p
מספרלאדגימה של שליטה, איפה המודל לוקח אותם.
tools
tool_choice
parallel_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.format
response_format
אובייקטלאתוצאת מובנית, ככלי JSON או json_object.
metadataאובייקטלאבחזרה ללא שינוי בתגובה: עד 16 ערכים, מפתחות עד 64 תווים וערכים עד 512.
streambooleanלאשימו לב לאירועים המתוארים למטה.
storebooleanלאדבר לא מאוחסן, והתשובה תמיד אומרת "store": false.
previous_response_id
conversation
background
אובייקט, 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) משמשת, כל עוד הגרסה של הקטלוג היא זהה או חדשה יותר מאשר זו שביקשת.
  • שם שלא מתאים לשום דבר חוזר 404 not_found_error.
שדהסוגדרושהתיאור
modelStringכֵּןשם מודל קטלוג, או שם מודל אנתרופי.
max_tokensאינטגרכֵּןהכי הרבה טיפים לכתוב.
messagesArrayכֵּןuser ו assistant הפוך, עם text, image (בסיס 64 או מקור ה-URL) tool_use ו tool_result בלוקים thinking הבלוקים מהסיבובים הקודמים מתקבלים ויורדים.
systemString או Arrayלאפקודת המערכת, כמו חוט או בלוקי טקסט.
temperature
top_p
מספרלאדגימה של שליטה, איפה המודל לוקח אותם. top_k הוא התקבל וננטש.
stop_sequencesתגית: array of stringsלאטקסט שמסתיים בתשובה: עד 4 חוטים, כל אחד מהם עד 256 תווים.
tools
tool_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או גבוה יותר.
streambooleanלאזרימה בפורמט אירוע של 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_type speech או 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);