انتقل إلى المحتوى
العودة إلى Nymbot

قاعدة المعرفة المطورين

الصوت والردود والرسائل

ثلاثة طرق لتسأل عن شيء ما، في ثلاثة أنواع العملاء يتحدثون بالفعل، كل شيء يعمل على نفس النماذج وتتلقى نفس الطريقة.

Chat التكامل

إنتاج OpenAI، و الذي يدعم تقريبا كل أدوات. إرسال المحادثة حتى الآن والحصول على الرسالة التالية.

POST https://nymbot.ai/api/v1/chat/completions تحتاج إلى مفتاح API.

فقط model و messages يتم تخفيض مزيج من النماذج المختارة التي لا تتخذ دون خطأ ، لذلك يتم تشغيل جسم طلب واحد في جميع النماذج. supported_parametersما يتم رفضه بدلاً من رفضه هو ما لا يمكن القيام به من قبل النماذج: صور للنماذج التي لا يمكن رؤيتها، أدوات للنماذج التي لا يمكن سماعها.

الفضاءنوعالمطلوبوصف
modelStringنعمnymbot/auto (أو auto) لتوجيه Nymbot على التوازن القياسي ، أو ID نموذج الكاتالون مثل anthropic/claude-sonnet-5 على توازن Pro. يتم قبول الأسماء القصيرة والمسميات الخاصة من التطبيق أيضًا. قد تنتهي في ما يكفي.
messagesArrayنعمالكلمات الدلالية: Roles system, developer (تصنيفها كوسيلة) user, assistant و toolالمحتوى هو سلسلة أو قائمة من text و image_url أجزاء: الصور فقط في رسائل المستخدم. input_audio يتم رفض جزء من الملفات.
streamبولينلاإرسال الإجابة كما هو مكتوب. 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
الكتلة أو الكتلة أو الكتلة ، Booleanلاالوظيفة الالكترونية: See أداة الدعوة. a web_search أداة تتحول إلى البحث WEBفي ما يزيد على 128 أدوات و 512 كيلو بايت من تعريفات، في ما يزيد على 64 مستويًا عميقًا. 400.
reasoning_effort
reasoning
الذاكرة ، المحاكاةلا"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 ؛ A :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لا يتم تكلفة أي شيء ما لم يتم تكلفة المورد لحاجته.

يتم تقييم الكودات المستمرة لكل حصة نقطة النهار تحت أخطاء.

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 ثانية، ويمكن أن تنتهي النموذج أيضًا وأيضًا يتم تحميل ما كتبه، ولكن يتم فقد الإجابة.

Stream

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 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يتم تشغيل طلب مع الأدوات في قطعة واحدة ثم يتم إرسالها كجزء عادي: الدور، وقطعة واحدة تحمل كل مكالمة الأدوات مع مؤشرها، والقياس، والسمع والقبول، والقطعة النهائية.

الإجابة، جزئياً

"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 إرسال الطلب إلى الطريق القياسي القياسي.

على النماذج الإثيوبية، يصبح الجهد ميزانية تفكيرية تتراوح ما بين 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);

نموذج التكلفة

تغير إضافي على اسم النماذج كيفية معالجة الطلب، دون أي مساحة أخرى. anthropic/claude-sonnet-5:online.

ما يكفيتأثير
:onlineالبحث عن الموقع أولاً ، مثل plugins: [{"id": "web"}]نعم البحث WEB.
:thinkingأسلوب التفكير العميق؛ على nymbot/autoعلى نموذج لا يمكن التفكير فيه، 400 model_not_found مع &ldquo؛ لا نقطة انطلاق العثور&rdquo؛.
:nitro, :floor, :exacto, :extendedكل نموذج الكاتالون لديه طريق واحد ، لذلك لا يوجد أسرع أو أقل تكلفة أو أطول من اختيارها ؛ يتم السماح بتعطيل أسماء النماذج التي تم نسخها من خدمات أخرى لا تزال تعمل.

يتم تجاهل أي إشارة أخرى. يتم اختبار الاسم الكامل أولا ، لذلك لا تزال النماذج التي تحتوي على إشارة الكلى في الواقع على إشارة الكلى تعمل ؛ وإذا لم يتم ذلك ، يتم إلغاء الإشارات في نهاية واحدة في وقت واحد حتى يتطابق النماذج. يمكن أن يكون اسم النماذج أطول من 200 شخصًا مع أطول من 4 إشارات. 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 يبحث عن آخر رسالة المستخدم (الأول 2000 شخصية)، يقرأ أفضل الصفحات ويقدمها إلى نموذج مع السؤال، والتي تم تحديدها على أنها محتوى خارج النموذج لا ينبغي اتخاذ الإرشادات من.

  • دائما البحث: "plugins": [{"id": "web", "max_results": 5}]أو أو a :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 دولار، يتم تحويلها إلى تذاكر، أعلاه، و هو جزء من الحد الأدنى.

الإجابة، جزئياً

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

ردود الفعل

إنتاج أحدث من OpenAI ، يستخدمه OpenAI Agents SDK و Codex ، ويعمل على نفس النماذج والرقابة والخصائص مثل Chat Completions.

POST https://nymbot.ai/api/v1/responses تحتاج إلى مفتاح API.

الفضاءنوعالمطلوبوصف
modelStringنعموكما Chat التكاملويشمل المكونات.
inputString أو 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 يرفضها
instructionsStringلاإرشادات النظام
max_output_tokensالنسيجلاالأكثر شيوعًا للكتب.
temperature
top_p
رقملاالتحكم في النماذج ، حيث يتخذ النماذج لهم.
tools
tool_choice
parallel_tool_calls
الكتلة أو الكتلة أو الكتلة ، Booleanلاأدوات العمل، في شكل الاستجابة ({"type": "function", "name": …, "parameters": …}( ) A 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.
streamبولينلاإرسال الأحداث كما هو موضح أدناه.
storeبولينلالا شيء يتم تخزينه، والرد دائما يقول "store": false.
previous_response_id
conversation
background
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);

رسائل إنسانية

يعمل مع كل نموذج في القائمة، وليس فقط Claude: يتم ترجمة الطلب، يتم تشغيلها من خلال نفس الطائرة، ويترجمها مرة أخرى.

POST https://nymbot.ai/api/v1/messages - تحتاج إلى مفتاح API ، كما x-api-key أو Authorization: Bearer.

ذاك anthropic-version و anthropic-beta يتم التعامل مع أسماء النماذج البشرية مع القائمة، لذلك تعمل كودو كود و 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) ، طالما أن النسخة من الكاتالونات هي نفسها أو أحدث من النسخة المطلوبة.
  • الاسم الذي لا يتوافق مع أي شيء يعود 404 not_found_error.
الفضاءنوعالمطلوبوصف
modelStringنعماسم نموذج الكاتالوني أو اسم نموذج إنساني.
max_tokensالنسيجنعمالأكثر شيوعًا للكتب.
messagesArrayنعمuser و assistant يتحرك، مع text, image (base64 أو مصدر URL) tool_use و tool_result البلوتوث thinking يتم قبول البلوك من الخطوات السابقة وتخفيضها.
systemString أو Arrayلاإرسال نظام، مثل سلسلة أو بلاطات النص.
temperature
top_p
رقملاالتحكم في النماذج ، حيث يتخذ النماذج لهم. top_k يتم قبولها وإخفاؤها.
stop_sequencesمجموعة من Stringsلاالكلمة التي تنتهي بالرد، بـ 4 أقراص، كل منها بـ 256 علامة.
tools
tool_choice
أندرويد ، Objectلاأدوات مع name, description و input_schema. a web_search أداة الحاسوب تتحول إلى البحث 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بولينلاإرسال في شكل حدث 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 ذاك Chat التكامل; 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);

تقييم Tokens

تقييم عدد الارتباطات التي ستستخدمها طلب الرسائل ، بحيث يمكن للعميل التحقق قبل إرسالها.

POST https://nymbot.ai/api/v1/messages/count_tokens - تحتاج إلى مفتاح API.

الجسد هو نفس الشيء رسائلبدون max_tokens· اسم النماذج يجب أن يحدد. التقييم هو تقدير: العلامات من إرسال النظام، والرسائل، والردود الأدوات، والحديث عن أدوات تقسيمها إلى أربعة، بالإضافة إلى 1600 لكل صورة. إنه ليس توقيع الشركة الخاصة، لذلك يمكن أن يختلف التقييم الحقيقي.

الإجابة

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

قائمة النماذج

يتم قراءة القائمة من نفس الكاتالوني المباشر مثل اختيار التطبيق ، لذلك هو دائما ما سوف يتم تشغيل المورد.

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.
  • إدخال الدخول لديه 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);