Chuyển đến nội dung
Trở lại Nymbot

Cơ sở tri thức Nhà phát triển

Chat, phản hồi và tin nhắn

Ba cách để hỏi một mô hình một cái gì đó, trong ba định dạng khách hàng đã nói, tất cả chạy trên cùng một mô hình và thanh toán theo cùng một cách.

Chat hoàn thành

Định dạng trò chuyện OpenAI, và hầu hết các công cụ hỗ trợ. Gửi cuộc trò chuyện cho đến nay và nhận lại tin nhắn tiếp theo.

POST https://nymbot.ai/api/v1/chat/completions - Cần có API key

Chỉ model Và messages Một tham số lấy mẫu mà mô hình đã chọn không được giảm mà không có lỗi, vì vậy một yêu cầu cơ thể hoạt động trên các mô hình. supported_parametersNhững gì bị từ chối thay vì bị bỏ rơi là bất cứ điều gì mà mô hình không thể làm: hình ảnh cho một mô hình không thể nhìn thấy, công cụ cho một mô hình không thể gọi chúng.

trườngLoạiCầnMô tả
modelStringĐúngnymbot/auto (hoặc auto) cho định tuyến của Nymbot trên số dư tiêu chuẩn, hoặc một id mô hình danh mục như: anthropic/claude-sonnet-5 trên số dư Pro. Tên ngắn và biệt danh của ứng dụng cũng được chấp nhận. Có thể kết thúc trong một đủ.
messagesArrayĐúngTrò chuyện, vai trò system, developer (được xử lý như hệ thống), user, assistant Và toolNội dung là một chuỗi hoặc danh sách các text Và image_url phần; hình ảnh chỉ trong tin nhắn của người dùng. input_audio Các phần file bị từ chối.
streamBooleanKhôngGửi câu trả lời như đã viết. xem Streaming.
stream_optionsđối tượngKhông{"include_usage": true} thêm một phần cuối cùng với số lượng token và chi phí.
max_tokens
max_completion_tokens
integerKhôngHầu hết các token để viết. Giảm xuống mức tối đa của mô hình nếu cao hơn. cũng đặt ra bao nhiêu được giữ từ số dư của bạn, vì vậy một số nhỏ hơn cần ít tín dụng hơn để bắt đầu.
temperature
top_p
SốKhôngKiểm soát mẫu: temperature Từ 0 đến 2, top_p Từ 0 đến 1.
stopstring hoặc arrayKhôngVăn bản kết thúc câu trả lời: một chuỗi hoặc tối đa 4 chuỗi, mỗi chuỗi tối đa 256 ký tự. nymbot/auto.
seedintegerKhôngĐể lấy mẫu lặp đi lặp lại, nơi mô hình hỗ trợ nó.
presence_penalty
frequency_penalty
SốKhôngKiểm soát lặp đi lặp lại, mỗi từ -2 đến 2.
response_formatđối tượngKhông{"type": "json_object"} hoặc {"type": "json_schema", "json_schema": {…}}, nơi mô hình hỗ trợ nó. Không được sử dụng bởi nymbot/auto.
tools
tool_choice
parallel_tool_calls
Array, string hoặc object, booleanKhôngChức năng gọi: See Công cụ Calla a web_search Công cụ Turn On web tìm kiếmTối đa 128 công cụ và 512 KB định nghĩa, được niêm phong ở tối đa 64 cấp độ sâu; nhiều hơn là một 400.
reasoning_effort
reasoning
String, đối tượngKhông"minimal", "low", "medium" hoặc "high"hoặc {"effort": "high"}. "none" hoặc {"enabled": false} Tắt nó đi. xem lý luận.
pluginsArrayKhông[{"id": "web", "max_results": 5}] luôn tìm kiếm web đầu tiên. lên đến 10 kết quả.
nintegerKhôngLời bài hát: Everything Other Returns 400.
logit_bias
user
metadata
Object, String và ObjectKhôngChấp nhận và không gửi đi. logit_bias Bản đồ với tối đa 300 token id đến số từ -100 đến 100; user Có tối đa 256 ký tự; metadata chứa tối đa 16 giá trị chuỗi, khóa lên đến 64 ký tự và giá trị lên đến 512.

Câu trả lời là bình thường chat.completionVới chi phí trong usage.cost (Trong đô la) và trong nymbot đối tượng model is the resolved model id, so a short name comes back as the full one. If the model reasoned before answering, its reasoning is in message.reasoning_contenttách biệt với câu trả lời.

Trả lời

{
  "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 được thực hiện từ những gì đã trở lại, vì các nhà cung cấp báo cáo nó khác nhau: tool_calls Khi người mẫu yêu cầu các công cụ, length khi câu trả lời sử dụng mọi token cho phép (hoặc mô hình đã dành tất cả lý luận và không viết câu trả lời), content_filter Khi nhà cung cấp từ chối, và stop Ngược lại usage.completion_tokens_details.reasoning_tokens luôn là 0: token lý luận ẩn được đếm và tính phí, trong completion_tokens.

StatusKhi nào
400Không model hoặc messages (missing_required_parameter); một phần âm thanh hoặc tệp, hoặc hình ảnh cho một mô hình không thể nhìn thấy chúng (unsupported_content); hơn 20 hình ảnh (too_many_images(Thuyết điểm: Tác dụng của các loại thuốc không đúng cách hoặc không đúng cách)invalid_value); một liên kết hình ảnh không phải là công khai (invalid_image_url); công cụ trên một mô hình không thể gọi chúng (unsupported_tool); n khác hơn 1; a :thinking Tạo ra một mô hình không có lý do (model_not_found(hoặc nhà cung cấp đã từ chối yêu cầu)upstream_rejected).
402Số dư mà mô hình chi tiêu không thể bao gồm cổ phần.
403Trường hợp xấu nhất không phù hợp với nắp chìa khóa (key_limit_reached) thấp hơn max_tokens Hoặc nâng cap lên.
404Không có mô hình với tên đó (model_not_found).
429Tỷ lệ giới hạn của chìa khóa, hoặc của nhà cung cấp (upstream_rate_limited).
502, 503Nhà cung cấp đã thất bại (upstream_error) hoặc bị quá tải (upstream_overloaded, với Retry-AfterKhông có gì được tính phí trừ khi nhà cung cấp tính phí cho nỗ lực.

Các mã trạng thái mỗi cổ phiếu điểm cuối được liệt kê dưới Lỗi.

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

Với "stream": true câu trả lời đến dưới dạng các sự kiện được gửi bởi máy chủ trong khi mô hình viết nó. chat.completion.chunk Có a data: dòng, và dòng chảy kết thúc với data: [DONE]Lý trí đến trong delta.reasoning_contentCâu trả lời trong delta.content.

Stream bất cứ điều gì có thể mất hơn khoảng 100 giây, chẳng hạn như một câu trả lời dài, một câu trả lời lớn max_tokens Một yêu cầu không được phát trực tuyến không gửi bất cứ điều gì cho đến khi câu trả lời hoàn tất, và mạng giữa bạn và Nymbot có thể đóng một kết nối không hoạt động sau khoảng 100 giây; mô hình vẫn kết thúc và những gì nó đã viết được sạc, nhưng câu trả lời bị mất.

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]
  • Các dòng bắt đầu với : là bình luận sống động, được gửi mỗi 15 giây trong khi mô hình đang suy nghĩ.
  • Yêu cầu "stream_options": {"include_usage": true} để có được phần cuối cùng ở trên, với một trống choices, token đếm, chi phí và nymbot đối tượng
  • Nếu bạn đóng kết nối sớm, mô hình không dừng lại: Nymbot đọc phần còn lại của dòng của nhà cung cấp, trong tối đa 25 giây, để có được số lượng token của nó, và bạn trả những gì nhà cung cấp báo cáo.
  • Một lỗi trước khi chunk đầu tiên, chẳng hạn như 401 hoặc 402, trở lại như JSON thông thường với mã trạng thái của nó, không phải là một luồng. một lỗi sau khi luồng đã bắt đầu đến như một luồng cuối cùng data: {"error": {…}} sự kiện, và dòng chảy kết thúc mà không có [DONE].
  • Các yêu cầu với các công cụ, và các mô hình trên OpenAI's Responses vận chuyển, không chảy từ nhà cung cấp. Họ vẫn trả lời với một luồng hợp lệ, được gửi khi câu trả lời hoàn tất.

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

Công cụ Call

Mô tả các chức năng trong tools và mô hình có thể yêu cầu một người được gọi thay vì trả lời. bạn chạy hàm, thêm kết quả của nó như một tool Thông điệp cùng một tool_call_idNymbot không bao giờ chạy các chức năng của bạn; nó truyền yêu cầu của mô hình trở lại cho bạn.

tool_choice lấy "auto", "none", "required" hoặc {"type": "function", "function": {"name": "…"}}Model list đánh dấu những mô hình nào có thể gọi công cụ (capabilities.toolsCác công cụ được từ chối với 400 unsupported_tool Có nymbot/auto và trên vài mô hình danh mục chạy trên vận chuyển Responses của OpenAI, mà Nymbot không thể thông qua các công cụ.

Với "stream": true, một yêu cầu với công cụ chạy trong một mảnh và sau đó được gửi như một chuỗi mảnh bình thường: vai trò, một mảnh mang theo mỗi cuộc gọi công cụ với chỉ mục, id, tên và đối số của nó, và mảnh kết thúc.

Câu trả lời, một phần

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

Hình ảnh trong yêu cầu

Mô hình với capabilities.vision Có thể đọc hình ảnh.Thêm một image_url chia sẻ cho một thông điệp người dùng, với một công chúng https:// link hoặc a data:image/…;base64, Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án: Đáp án:400 invalid_image_url3) Tùy chọn detail là auto, low hoặc high.

Với nymbot/auto, một yêu cầu với một hình ảnh trong đó được định tuyến đến một mô hình tiêu chuẩn có thể nhìn thấy. capabilities.vision Từ chối hình ảnh với 400 unsupported_contentMột liên kết phải chỉ đến một máy chủ công cộng; Nymbot truyền hình ảnh cho nhà cung cấp của mô hình và không giữ nó.

Một hình ảnh được tính phí như các token đầu vào mà nhà cung cấp tính cho nó, giống như phần còn lại của yêu cầu.

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

lý luận

Mô hình với capabilities.reasoning có thể suy nghĩ trước khi họ trả lời. yêu cầu nhiều hơn hoặc ít hơn với reasoning_effort ("minimal", "low", "medium" hoặc "high") hoặc "reasoning": {"effort": "high"}Hoặc thêm :thinking đến tên mô hình, có nghĩa là nỗ lực cao. Trên một mô hình mà không có lý do cài đặt bị bỏ qua. nymbot/auto, :thinking Gửi yêu cầu đến đường lý luận tiêu chuẩn.

Trên các mô hình Anthropic, nỗ lực trở thành một ngân sách suy nghĩ khoảng 1.000, 2.000, 8.000 hoặc 16.000 token, không bao giờ nhiều hơn max_tokens Lời bài hát: Thinking Is Left When tool_choice buộc một công cụ, và khi yêu cầu tiếp tục một vòng lặp công cụ (thông điệp cuối cùng của nó là một kết quả công cụ), bởi vì Anthropic cần suy nghĩ đã ký trước đó để tiếp tục nó.

Lý luận trở lại trong message.reasoning_contenthoặc delta.reasoning_content khi phát trực tuyến, không bao giờ trộn vào câu trả lời. lý luận là đầu ra và được tính như vậy, bên trong completion_tokensMột số nhà cung cấp không trả lại văn bản lý luận, và nó vẫn được tính phí.

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

Mô hình suffix

Một phụ đề trên tên mô hình thay đổi cách yêu cầu được xử lý, mà không có trường khác. Chúng hoạt động trên ID đầy đủ và tên ngắn như nhau, như trong anthropic/claude-sonnet-5:online.

đủHiệu ứng
:onlineTìm kiếm web đầu tiên, như plugins: [{"id": "web"}]Này web tìm kiếm.
:thinkingNỗ lực lý luận cao; on nymbot/auto, đường lý luận.Với một mô hình không thể lý luận, 400 model_not_found với “no endpoints found”.
:nitro, :floor, :exacto, :extendedMỗi mô hình danh mục có một tuyến đường, vì vậy không có tuyến đường nhanh hơn, rẻ hơn hoặc dài hơn để lựa chọn; các phụ đề được cho phép để các tên mô hình sao chép từ các dịch vụ khác vẫn hoạt động.

Bất kỳ bổ sung nào khác đều bị bỏ qua.Tên đầy đủ được thử trước, vì vậy một mô hình có ID thực sự chứa một colon vẫn hoạt động; nếu không, bổ sung được lấy ra khỏi cuối một lần cho đến khi một mô hình khớp.Tên mô hình có thể dài tối đa 200 ký tự với tối đa 4 bổ sung; một bổ sung dài hơn bị từ chối với 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);

Bất kỳ mô hình trò chuyện nào cũng có thể trả lời từ web trực tiếp.Nymbot tìm kiếm thông điệp người dùng cuối cùng (hai ngàn ký tự đầu tiên của nó), đọc các trang tốt nhất và đưa chúng cho mô hình với câu hỏi, được đánh dấu là nội dung bên ngoài mà mô hình không nên lấy hướng dẫn từ.

  • Luôn tìm kiếm: "plugins": [{"id": "web", "max_results": 5}], hoặc a :online suffix trên mô hình.
  • Tìm kiếm khi nó giúp: "tools": [{"type": "web_search", "parameters": {"max_results": 5}}]Cũng được chấp nhận như web_search_preview hoặc openrouter:web_searchNymbot chỉ tìm kiếm khi câu hỏi dường như cần thông tin hiện tại, cùng một bài kiểm tra mà ứng dụng sử dụng.

max_results là 5 theo mặc định và tối đa là 10. các nguồn trở lại trong nymbot.web_search.sourcesMỗi người với a title, snippet Và urlVà như url_citation ghi chú trên thông điệp.

Mỗi tìm kiếm chạy chi phí $ 0,008, chuyển đổi thành sats, trên đầu các token, và nó là một phần của các trang mà nó đọc là token đầu vào, vì vậy một câu trả lời từ web chi phí nhiều hơn cùng một câu hỏi hỏi lạnh, đôi khi nhiều lần hơn.

Câu trả lời, một phần

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

Trả lời API

Định dạng mới hơn của OpenAI, được sử dụng bởi OpenAI Agents SDK và bởi Codex. Nó chạy trên các mô hình, hóa đơn và tính năng tương tự như Chat Completions.

POST https://nymbot.ai/api/v1/responses - Cần có API key

trườngLoạiCầnMô tả
modelStringĐúngĐối với Chat hoàn thànhBổ sung suffix.
inputstring hoặc arrayĐúngMột chuỗi, hoặc danh sách các mục: tin nhắn (những vai trò user, assistant, system, developer) với input_text, input_image Và output_text Các bộ phận, và function_call Và function_call_output Các mặt hàng cho công cụ input_image lấy một image_url liên kết hoặc dữ liệu URL, không phải là một file id. reasoning Và web_search_call Các mặt hàng bị bỏ qua; item_reference bị từ chối.
instructionsStringKhôngHướng dẫn hệ thống
max_output_tokensintegerKhôngnhiều nhất để viết.
temperature
top_p
SốKhôngKiểm soát mẫu, nơi mô hình lấy chúng.
tools
tool_choice
parallel_tool_calls
Array, string hoặc object, booleanKhôngCác công cụ chức năng, trong hình thức Trả lời ({"type": "function", "name": …, "parameters": …}) a web_search hoặc web_search_preview Công cụ Turn On web tìm kiếm khi nó giúp. các công cụ tích hợp khác bị từ chối.
reasoningđối tượngKhông{"effort": "minimal" | "low" | "medium" | "high"}. xhigh Và max Ý nghĩa high; none xoay nó đi.
text.format
response_format
đối tượngKhôngXuất khẩu có cấu trúc, như một sơ đồ JSON hoặc json_object.
metadatađối tượngKhôngTrả về không thay đổi trong câu trả lời. ở tối đa 16 giá trị chuỗi, khóa lên đến 64 ký tự và giá trị lên đến 512.
streamBooleanKhôngStream các sự kiện như được mô tả bên dưới.
storeBooleanKhôngKhông có gì được lưu trữ, và câu trả lời luôn nói "store": false.
previous_response_id
conversation
background
String, Object và BooleanKhôngKhông được hỗ trợ: 400 unsupported_parameterCác câu trả lời không được lưu trữ, vì vậy hãy gửi toàn bộ cuộc trò chuyện vào input Mỗi lần

Trả lời

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

Một yêu cầu công cụ xuất hiện trong output Như a function_call item với call_id, name Và argumentsGửi kết quả trở lại như a function_call_output item với cùng một call_idLý luận, khi mô hình trả về nó, là một reasoning item với reasoning_text nội dung, được liệt kê trước. status là incomplete Khi câu trả lời đạt max_output_tokens hoặc nhà cung cấp từ chối, với incomplete_details.reason Đặt 2 max_output_tokens hoặc content_filterCâu trả lời cũng phản ánh các cài đặt của yêu cầu (nhiệt độ, công cụ, lựa chọn công cụ, v.v.) như OpenAI làm, và mang theo nymbot Chi phí đối tượng

Streamed, mỗi sự kiện là một event: line và a data: line với a sequence_numberTrong trật tự này: response.created, response.in_progress, response.output_item.added, response.content_part.addedBất kỳ số lượng response.output_text.delta, response.output_text.done, response.content_part.done, response.output_item.doneVà cuối cùng response.completed với việc sử dụng và chi phí. một câu trả lời cắt ngắn kết thúc với response.incomplete thay vào đó, và một thất bại sau khi dòng chảy bắt đầu với response.failedLý luận dòng chảy như là mục của riêng mình với response.reasoning_text.delta Và .doneCác cuộc gọi công cụ đến sau thông điệp, mỗi cuộc gọi là một mục với response.function_call_arguments.delta Và .done.

StatusKhi nào
400Không model hoặc input; previous_response_id, conversation, background hoặc một item_reference (unsupported_parameter); một công cụ hoặc loại nội dung không được hỗ trợ.
402, 403, 404, 429, 502, 503Về việc hoàn thành chat.

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

Thông điệp Anthropic

Định dạng của Anthropic, cho Anthropic SDKs và Claude Code. Nó hoạt động với mọi mô hình trong danh mục, không chỉ Claude: yêu cầu được dịch, chạy qua cùng một đường ống, và dịch trở lại.

POST https://nymbot.ai/api/v1/messages - cần một phím API, như x-api-key hoặc Authorization: Bearer.

Các anthropic-version Và anthropic-beta Tên mô hình nhân loại được khớp với danh mục, vì vậy Claude Code và SDKs làm việc với các tên họ đã sử dụng:

  • Một cái tên mà catalog biết, chẳng hạn như claude-sonnet-5 hoặc anthropic/claude-opus-5Nó được sử dụng như nó là.
  • Một ngày nào đó (-20260514), -latest, một phiên bản tag như -v1, một ngày bracketed như [1m] và một anthropic/ hoặc anthropic. Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn: Tùy chọn:claude-haiku-4-5 Tìm thấy claude-haiku-4.5).
  • Nếu điều đó vẫn không phù hợp, gia đình (Opus, Sonnet hoặc Haiku) được sử dụng, miễn là phiên bản của danh mục tương tự hoặc mới hơn so với phiên bản được yêu cầu.
  • Một cái tên không phù hợp với bất cứ điều gì sẽ trở lại 404 not_found_error.
trườngLoạiCầnMô tả
modelStringĐúngMột catalogue model id, hoặc một tên mô hình Anthropic.
max_tokensintegerĐúngnhiều nhất để viết.
messagesArrayĐúnguser Và assistant Turns, với text, image (base64 hoặc nguồn URL) tool_use Và tool_result Các Block thinking Các khối từ các lượt trước được chấp nhận và bỏ đi.
systemstring hoặc arrayKhôngSystem prompt, như một chuỗi hoặc khối văn bản.
temperature
top_p
SốKhôngKiểm soát mẫu, nơi mô hình lấy chúng. top_k được chấp nhận và bỏ rơi.
stop_sequencesLời bài hát Array Of StringsKhôngVăn bản kết thúc câu trả lời: Tối đa 4 chuỗi, mỗi chuỗi tối đa 256 ký tự.
tools
tool_choice
Array, đối tượngKhôngCông cụ với name, description Và input_schemaa a web_search Server Tool trở thành web tìm kiếmCác công cụ tích hợp khác của Anthropic (bash, text editor, sử dụng máy tính) bị từ chối với unsupported_tool. tool_choice lấy auto, any, tool hoặc nonevà disable_parallel_tool_use.
thinkingđối tượngKhông{"type": "enabled", "budget_tokens": 8192}, {"type": "adaptive"} hoặc {"type": "disabled"}Ngân sách chọn một mức độ nỗ lực: dưới 2.048 tối thiểu, từ 2.048 thấp, từ 8.192 trung bình, từ 16.384 cao. output_config.efforthoặc cao.
streamBooleanKhôngStream trong định dạng sự kiện của Anthropic.
metadatađối tượngKhôngChấp nhận và bỏ qua.

Trả lời

{
  "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 Cũng có thể giữ tool_use Block và a thinking Block, những người signature trống rỗng stop_reason là end_turn, max_tokens, tool_use hoặc refusal, làm việc theo cùng một cách như finish_reason Có Chat hoàn thành; stop_sequence luôn luôn null, ngay cả khi một chuỗi dừng kết thúc câu trả lời. input_tokens Chỉ có nhập mới được tính; nhập bộ nhớ cache nằm trong hai trường bộ nhớ cache. nymbot Object và the X-Nymbot-Cost-Sats người header

Streamed, các sự kiện là của Anthropic: message_start, content_block_start, ping, content_block_delta (text_delta, input_json_delta hoặc thinking_delta), content_block_stop, message_delta với lý do dừng lại, việc sử dụng và nymbot Chi phí đối tượng, và message_stopa a ping cũng được gửi mỗi 15 giây trong khi mô hình đang hoạt động. cuộc gọi công cụ đến sau văn bản, mỗi tool_use block với toàn bộ đầu vào của nó trong một input_json_delta.

Lỗi trên điểm cuối này sử dụng định dạng của Anthropic: {"type": "error", "error": {"type": "not_found_error", "message": "…"}}Một sự cân bằng ngắn là 402 billing_errorMột nhà cung cấp quá tải 503 overloaded_errorMột sự thất bại sau khi dòng đã bắt đầu được gửi như một error Sự kiện

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

Đếm token

Một ước tính về số lượng token đầu vào một yêu cầu tin nhắn sẽ sử dụng, vì vậy một khách hàng có thể kiểm tra trước khi nó gửi.

POST https://nymbot.ai/api/v1/messages/count_tokens - Cần một API key. miễn phí.

Cơ thể cũng giống như Thông điệpmà không max_tokensSố lượng là một ước tính: các ký tự của lời nhắc hệ thống, tin nhắn, cuộc gọi công cụ và định nghĩa công cụ được chia thành bốn, cộng với 1,600 cho mỗi hình ảnh. Nó không phải là tokenizer riêng của nhà cung cấp, vì vậy số lượng thực tế có thể khác nhau.

Trả lời

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

Danh sách mô hình

Mỗi mô hình và máy phát điện API chấp nhận, với chi phí của nó. danh sách được đọc từ cùng một danh mục trực tiếp như máy chọn của ứng dụng, vì vậy nó luôn là những gì máy chủ sẽ chạy.

GET https://nymbot.ai/api/v1/models - Không cần chìa khóa. Ẩn trong 5 phút.

GET /api/v1/models/{id} Trả lại 1 entry

trườngLoạiCầnMô tả
typeLời bài hát: string (query)Khôngchat (Đối với sự thất bại), image, video, audio, embedding hoặc allMột số có thể được đưa ra, như image,video.

Giá là những gì bạn trả, với lệ phí và lợi nhuận đã có trong, bằng đô la và trong sats với giá Bitcoin hiện tại. balance cho biết cân bằng mà mô hình chi tiêu. nymbot_key là tên ngắn của mô hình trong ứng dụng. created luôn luôn là 0, vì danh mục không ghi lại khi một mô hình được thêm vào. per_request thay vì.

nymbot/auto luôn luôn là đầu tiên, giá như variable, với a routes Nó liệt kê tầm nhìn và lý luận, nhưng không phải là công cụ.

GET /api/v1/models/{id} chấp nhận cùng tên và biệt danh như một yêu cầu, và trả về mục nhập cho mô hình mà họ quyết định.

Trả lời

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

Các loại khác:

  • Hình ảnh entries có capabilities (accepts_image_url, requires_image_url, edit(và một mức giá per_generation.
  • Video entries có max_duration_seconds Và resolutionsVà một mức giá per_second cho mỗi nghị quyết.
  • Âm thanh entries có audio_type speech hoặc transcriptionGiá cả per_1k_chars hoặc per_minute.
  • Embedded entries có dimensions, context_length, max_inputs và một giá cho mỗi triệu token đầu vào.

Giá đánh dấu "estimated": true là ước tính của ứng dụng cho một máy phát điện có giá không được công bố. type Trở về 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);