Перейти до вмісту
Повернутись до Nymbot

База знань розробників

Зображення, аудіо та вбудовані матеріали

Генератори з додатка, а також будівельні блоки для пошуку: зображення, відео, мова, транскрипція та вбудовані матеріали, кожна з яких обліковується за використання з вашого балансу.

Генерація зображень

Створює від одного до чотирьох зображень з прохання і повертає їх, коли вони виконані. ?image В рамках app.

POST https://nymbot.ai/api/v1/images/generations — потрібен ключ API, або Оплата Lightning за запитом.

ІД приходять з GET /api/v1/models?type=imageВ якості стандартного генератора, @cf/black-forest-labs/flux-1-schnell, коштує рівний 5 стандартних кредитів (50 sats) зображення. Кожен інший генератор витрачає Про кредити за власною ціною, з звичайною платою і маржі, як в Апп. n Фотографії коштують n Поле, яке генератор не приймає, відкидається, а не відмовляється; стандартний генератор використовує тільки промпт.

ПолеТипНеобхідніОпис
modelСтрингтакІД генератора, наприклад nano-banana.
promptСтрингтакВикористовується тільки перші 2000 символів.
nІнтеграціяНі1 до 4.Помилка 1.Також прийнято як num_images.
sizeСтрингНіаспектів, таких як "16:9"або відкритого розміру, як "1792x1024", яка стає найближчою до 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 і 4:5. "auto" Залиште його на генераторі.
aspect_ratioСтрингНіТе ж саме як sizeІ виграє, якщо обидва відправляються.
qualityСтрингНіСпеціальні генератори, такі як "low", "medium" або "high".
negative_promptСтрингНіЩо залишити позаду.
output_formatСтрингНі"png", "jpeg" або "webp".
response_formatСтрингНі"url" (відповідно до положень) або "b64_json".
image_urlСтрингНіЗображення починається з: а https:// посилання не більше 4096 символів без імені користувача або пароля в ньому, або data:image/…;base64 URL (PNG, JPEG, WebP або GIF; не SVG). editнеобхідних для тих, хто requires_image_url.

resolution не використовується: кожен генератор робить свій власний розмір. url, кожне зображення завантажується на публічний хостинг Blossom і ви отримуєте його посилання (декілька генераторів повертають лише власний посилання, яке передається). Що бачить вогоньЗ b64_json зображення повертається у відповідь і ніколи не завантажується. data: URL в image_url Вони перевіряються так само, як і Edit і завантажується в Blossom спочатку, щоб генератор міг його завантажити; він видаляється знову, якщо запит не обліковується.

Якщо деякі з n фотографії не спрацюють, ви отримуєте ті, які працювали, стягуються тільки за ті (плюс будь-який провайдер стягував, незважаючи на невдачу), і nymbot.failed вказує, скільки з них відсутні. Якщо всі не вдаються, запит повертається 502.

Відповідь

{
  "created": 1790726400,
  "model": "nano-banana",
  "cost": 0.2126,
  "data": [
    {
      "url": "https://blossom.example/5c0e4b7d3a91f2e8...c4.png",
      "content_type": "image/png"
    }
  ],
  "nymbot": { "balance": "pro", "charged_credits": 1.817, "charged_sats": 181.7, "balance_credits": 410.608, "balance_sats": 41060.8 }
}
СтатусКоли
400не поспішати; n від 1 до 4 (invalid_value• невеликий розмір (invalid_size) або зображення (invalid_image, invalid_image_url); модель, яка існує, але не є генератором зображень (invalid_model); зображення для генератора, який не може редагувати (edit_unsupported); немає фотографії для того, хто потребує його (image_required).
402Баланс не може охоплювати кожну запитувану картину.
404Ніякої моделі з такою назвою (model_not_found).
502Використання генератора не вдалося (upstream_errorНічого не стягується, якщо провайдер не стягнув рахунок за спробу; тоді помилка charged_sats.
503Фотографії не можуть бути розміщені в даний час (media_hosting_unavailable). b64_json Все ще працює.

cURL

curl https://nymbot.ai/api/v1/images/generations \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana",
    "prompt": "A lighthouse at dusk, oil painting",
    "size": "16:9"
  }'

Python

import os
import requests

res = requests.post(
    "https://nymbot.ai/api/v1/images/generations",
    headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
    json={"model": "nano-banana", "prompt": "A lighthouse at dusk, oil painting", "size": "16:9"},
)
res.raise_for_status()
print(res.json()["data"][0]["url"])

JavaScript

const res = await fetch("https://nymbot.ai/api/v1/images/generations", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ model: "nano-banana", prompt: "A lighthouse at dusk, oil painting", size: "16:9" }),
});
const body = await res.json();
console.log(body.data[0].url);

Редагування зображень

Змінює зображення, яке ви завантажуєте, після вказівки.Це кінцева точка редагування OpenAI, тому OpenAI SDK's' images.edit функціонує так, як є. тільки Pro генератори з edit У списку моделей це прийнято.

POST https://nymbot.ai/api/v1/images/edits — потрібен ключ API, або Оплата Lightning за запитомТіло є multipart/form-dataдо 32 Мб.

ПолеТипНеобхідніОпис
imageФайлтакЗображення для редагування: PNG, JPEG, WebP або GIF, до 20 МБ. image[]Перший з них використовується.
promptСтрингтакЩо змінити
modelСтрингтакГенератор з edit.
nІнтеграціяНі1 до 4.
size
aspect_ratio
quality
negative_prompt
output_format
СтрингНіЩодо покоління
response_formatСтрингНі"b64_json" (відповідно до цього пункту) або "url".

Зображення, яке ви завантажуєте, перевіряється як добре сформований PNG, JPEG, WebP або GIF, відправляється як його реальний тип, і розміщується на публічному хості Blossom, тому що генератори забирають свій вхід за посиланням. Розглядайте його як публічний. Якщо редагування не вдається і нічого не завантажується, хостована копія видаляється знову. Відповідь має таку ж форму, як і для генерації. Ціна є ціною генератора, яка для деяких генераторів включає в себе плату за вхідне зображення.

Відповідь

{
  "created": 1790726460,
  "model": "nano-banana",
  "cost": 0.2126,
  "data": [{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..." }],
  "nymbot": { "balance": "pro", "charged_credits": 1.817, "charged_sats": 181.7, "balance_credits": 408.791, "balance_sats": 40879.1 }
}
СтатусКоли
400Немає зображення або поклик, файл, який не є зображенням (invalid_image), або генератор, який не може редагувати (edit_unsupported).
413Зображення більше 20 Мб (file_too_large), або весь запит більше 32 Мб.
503Фотографія не може бути розміщена зараз (media_hosting_unavailable).

cURL

curl https://nymbot.ai/api/v1/images/edits \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -F model=nano-banana \
  -F [email protected] \
  -F prompt="Make it a snowy evening"

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("photo.png", "rb") as f:
    result = client.images.edit(model="nano-banana", image=f, prompt="Make it a snowy evening")

with open("edited.png", "wb") as out:
    out.write(base64.b64decode(result.data[0].b64_json))

JavaScript

import fs from "node:fs";
import { writeFile } 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 result = await client.images.edit({
  model: "nano-banana",
  image: fs.createReadStream("photo.png"),
  prompt: "Make it a snowy evening",
});
await writeFile("edited.png", Buffer.from(result.data[0].b64_json, "base64"));

Відео

Відео займає кілька хвилин, тому він працює на тлі. Ви подаєте його, одразу ж отримаєте ід, і запитуєте про ід, поки він не закінчиться.

POST https://nymbot.ai/api/v1/videos — потрібен ключ API, або Оплата Lightning за запитом· Повернення 202.

ПолеТипНеобхідніОпис
modelСтрингтакІД відеогенератора від GET /api/v1/models?type=videoТакі як veo.
promptСтрингтакЩо має статися.
durationНомер або строкаНіДовжина в секунди, більше 0 і до 60. Використовується тільки генераторами, які дозволяють вибирати довжину; інші роблять свою звичайну довжину, що seconds У відповідь і ціна.
aspect_ratioСтрингНіТакі як "16:9" або "9:16"Такий розмір, як "1280x720" Це найближче співвідношення
resolution
quality
СтрингНіОдин з генераторів resolutions У списку таких моделей, як "720p" або "1080p"Вона встановлює ціну. Все інше відмовляється з unsupported_resolution.
image_urlСтрингНіЗображення починається з: а https:// Лінк або А data:image/… URL, який завантажується на публічний Blossom хост спочатку. requires_image_url.

Ціна фіксована, коли ви подаєте, з генератора, розділу та довжини, тому вона стягується з вашого балансу Pro, як тільки провайдер приймає роботу, і показана як cost, estimated_cost і nymbotЯкщо провайдер відмовляється від роботи, нічого не стягується. Якщо рендеринг пізніше не вдається, або закінчений кліп не може бути збережений і провайдер не стягнув рахунок за нього, плата повертається один раз, автоматично. Рендеринг, який все ще відбувається після години, відмовляється, і зберігає свою плату, тому що провайдер стягує рендеринг, як тільки він приймає його.

Відповідь (202)

{
  "id": "vid_3e9a51c07b2f4d86e0a1c4f2",
  "object": "video",
  "model": "veo",
  "status": "in_progress",
  "created": 1790726400,
  "seconds": 8,
  "resolution": "1080p",
  "estimated_cost": 3.18,
  "expires_at": 1790812800,
  "cost": 3.18,
  "nymbot": { "balance": "pro", "charged_credits": 31.8, "charged_sats": 3180, "balance_credits": 378.808, "balance_sats": 37880.8 }
}

status Починається як in_progressабо completed Відео вже в data Після цього генератор відразу ж повернув його.

Перевірка на відео

GET https://nymbot.ai/api/v1/videos/{id} — потрібен ключ, що належить ним, який його подав. Ключ, який досяг своєї межі, все ще може перевірити.

Вона відповідає 202 Під час створення відео та 200 після того, як він закінчився або провалився. Запитайте кожні 5 до 10 секунд. Кожен чек запитує провайдера один раз і відповідає відразу; він ніколи не чекає на відео. Робота зберігається протягом 24 годин після її подання. GET /api/v1/videos перераховує останні 50 робочих місць ключа як {"object": "list", "data": […]}.

Відповідь на запитання (200)

{
  "id": "vid_3e9a51c07b2f4d86e0a1c4f2",
  "object": "video",
  "model": "veo",
  "status": "completed",
  "created": 1790726400,
  "seconds": 8,
  "resolution": "1080p",
  "estimated_cost": 3.18,
  "expires_at": 1790812800,
  "completed_at": 1790726590,
  "data": { "url": "https://blossom.example/9b41d0c2e7a3f658...1e.mp4", "content_type": "video/mp4" },
  "cost": 3.18,
  "nymbot": { "balance": "pro", "charged_credits": 31.8, "charged_sats": 3180 }
}

status є in_progress, completed або failedНевдале працевлаштування несе error ({"code": "generation_failed", "message": …}Якщо ж вона була повернута, cost 0 і nymbot Додаток refunded_credits і refunded_satsЗавершене відео знаходиться на публічному хості Blossom, як і створені зображення.

СтатусКоли
400Наступна статтяВід 0 до 60 (invalid_value); резолюція генератора не пропонує (unsupported_resolution); немає зображення для генератора, який потребує одного (image_required(або, якщо ви не користуєтеся відеоматеріалом)invalid_model).
402Баланс Pro не може охоплювати відео.
404У такому випадку генератор (model_not_found), або немає роботи за цим ід для вашого німа, або він старше 24 годин (video_not_found).
429Вашій нім вже є 10 відео рендеринг (video_jobs_limitПеревірте їх і подайте більше, як тільки один закінчується.
502Генератор відмовився від роботи. нічого не стягується, якщо провайдер не стягнув рахунок за це.
503Відео не може бути доставлено або збережено в даний час (media_hosting_unavailable, service_unavailable).

cURL

curl https://nymbot.ai/api/v1/videos \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "veo", "prompt": "Waves rolling onto a beach at sunrise", "duration": 8, "aspect_ratio": "16:9"}'

curl https://nymbot.ai/api/v1/videos/vid_3e9a51c07b2f4d86 \
  -H "Authorization: Bearer $NYMBOT_API_KEY"

Python

import os, time
import requests

headers = {"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]}

job = requests.post(
    "https://nymbot.ai/api/v1/videos",
    headers=headers,
    json={"model": "veo", "prompt": "Waves rolling onto a beach at sunrise", "duration": 8, "aspect_ratio": "16:9"},
).json()

while True:
    time.sleep(8)
    status = requests.get("https://nymbot.ai/api/v1/videos/" + job["id"], headers=headers).json()
    if status["status"] in ("completed", "failed"):
        break

print(status["data"]["url"] if status["status"] == "completed" else status["error"])

JavaScript

const headers = {
  "Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
  "Content-Type": "application/json",
};

const job = await (await fetch("https://nymbot.ai/api/v1/videos", {
  method: "POST",
  headers,
  body: JSON.stringify({ model: "veo", prompt: "Waves rolling onto a beach at sunrise", duration: 8, aspect_ratio: "16:9" }),
})).json();

let status;
do {
  await new Promise((r) => setTimeout(r, 8000));
  status = await (await fetch("https://nymbot.ai/api/v1/videos/" + job.id, { headers })).json();
} while (status.status !== "completed" && status.status !== "failed");

console.log(status.status === "completed" ? status.data.url : status.error);

Текст до виступу

Читає текст гучно і повертає сам аудіофайл, а не посилання. audio.speech.create Відкриті SDK функціонують.

POST https://nymbot.ai/api/v1/audio/speech — потрібен ключ API, або Оплата Lightning за запитом.

ПолеТипНеобхідніОпис
modelСтрингНіМодель виступу від Список аудіо моделейЗа замовчуванням: стандартний голос @cf/myshell-ai/melotts. aura-2 Наприклад, Deepgram Aura 2.
inputСтрингтакТекст для читання: до 800 символів для стандартного голосу, 2000 для Aura 2.
voiceСтрингНіголосовий ID від Список голосівАура розмовника, як luna (або aura-2-luna-en, або мовою MeloTTS (en, es, fr, zhOpenAI голосові імена, такі як alloy приймаються і дають за замовчуванням голос моделі.
languageСтрингНіМовний код, як esБез голосу, він вибирає один для цієї мови. Голос, який говорить іншою мовою повертається 422 voice_language_mismatchМова, для якої у моделі немає голосу 422 unsupported_language.
response_formatСтрингНіСтандартний голос повертається mp3 Aura 2 повертається mp3 (відповідно до вищезазначеного порядку) opus, aac, flac, wav або pcm.
speedНомерНіПрийняті і ігноровані.

Стандартний голос коштує рівно 3 стандартних кредитів (30 sats) за запит, як в додатку. Aura 2 є Pro, ціною за символами, які ви надсилаєте. Content-TypeЦіна знаходиться в X-Nymbot-Cost-Sats Якщо мовна модель не спрацьовує, нічого не заряджається.

Відповідь

HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Nymbot-Cost-Sats: 4.2
X-Nymbot-Balance-Sats: 41055.6

(audio bytes)
СтатусКоли
400Не вводиться; введення перевищує ліміт моделі (input_too_long); формат, який модель не може виробляти (unsupported_response_formatНевідомий голос (invalid_voiceМодель, яка не є мовою мовлення (invalid_model).
422Голос не говорить даною мовою, або у моделі немає голосу для цього.
502Модель мовлення провалилася.Нічого не нараховується.

cURL

curl https://nymbot.ai/api/v1/audio/speech \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "aura-2", "voice": "luna", "input": "Your invoice has been paid."}' \
  --output speech.mp3

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

audio = client.audio.speech.create(
    model="aura-2",
    voice="luna",
    input="Your invoice has been paid.",
)
audio.write_to_file("speech.mp3")

JavaScript

import { writeFile } 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 audio = await client.audio.speech.create({
  model: "aura-2",
  voice: "luna",
  input: "Your invoice has been paid.",
});
await writeFile("speech.mp3", Buffer.from(await audio.arrayBuffer()));

Аудіо моделі та голоси

Дві публічні списки для вибору мовної моделі та голосу, або транскрипційної моделі. Є 41 Aura 2 англомовних і чотири мови MeloTTS.

GET https://nymbot.ai/api/v1/audio/models Ключ не потрібен.

GET https://nymbot.ai/api/v1/audio/voices?language=en Ключ не потрібен.

ПолеТипНеобхідніОпис
languageСтрічка (англ. string) для запитуНіТільки голоси для цієї мови.
modelСтрічка (англ. string) для запитуНіТільки голоси для цієї моделі.

Реакція (відповідь на голоси)

{
  "object": "list",
  "data": [
    { "id": "luna", "name": "Luna", "provider": "deepgram", "model_id": "aura-2", "models": ["aura-2"], "language": "en", "description": "Aura 2 English voice", "gender": "female", "preview_url": null },
    { "id": "en", "name": "MeloTTS English", "provider": "myshell", "model_id": "@cf/myshell-ai/melotts", "models": ["@cf/myshell-ai/melotts", "melotts"], "language": "en", "description": "English (MeloTTS)", "gender": null, "preview_url": null }
  ]
}

Список відповідей моделей {"object": "list", "data": {"tts": […], "stt": […]}}Кожна модель мови дає свій баланс, ціну, max_input_chars, response_formats, languages і default_voiceМодель транскрипції дає свої прізвища, max_file_bytes, max_secondsФорма та ціна за хвилину.

cURL

curl https://nymbot.ai/api/v1/audio/models
curl "https://nymbot.ai/api/v1/audio/voices?language=en"

Python

import requests

print(requests.get("https://nymbot.ai/api/v1/audio/models").json())
for voice in requests.get("https://nymbot.ai/api/v1/audio/voices", params={"language": "en"}).json()["data"]:
    print(voice["id"], voice["model_id"])

JavaScript

console.log(await (await fetch("https://nymbot.ai/api/v1/audio/models")).json());
const voices = await (await fetch("https://nymbot.ai/api/v1/audio/voices?language=en")).json();
for (const v of voices.data) console.log(v.id, v.model_id);

Промова до тексту

Перетворює запис на текст за допомогою Whisper. Це кінцева точка транскрипції OpenAI, тому audio.transcriptions.create Вони працюють

POST https://nymbot.ai/api/v1/audio/transcriptions — потрібен ключ API, або Оплата Lightning за запитомТіло є multipart/form-data.

ПолеТипНеобхідніОпис
fileФайлтакЗапис, від 256 байтів до 25 МБ і до 30 хвилин: WAV, WebM, MP4 або M4A, Ogg або Opus, MP3 та інші формати Whisper читає.
modelСтрингНідефект whisperНаприклад, це Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo і @cf/openai/whisper-large-v3-turbo означає те ж саме.
languageСтрингНіМова, яка розмовляється, як enВиявлено, якщо його залишили
promptСтрингНіСлова або шрифти, які можна очікувати, наприклад, імена, використовуються тільки з перших 1000 символів.
response_formatСтрингНіjson (відповідно до вищезазначеного порядку) text, srt, vtt або verbose_json.

Для файлів WAV, WebM, MP4 і Ogg довжина читається з файлу, перш ніж щось запускається, тому запис більше 30 хвилин відмовляється вперед (з 3 секунд). довжина файлу WAV походить від його швидкості зразка, каналів і розміру зразка. довжина інших форматів, таких як MP3, не може бути прочитана вперед, тому вони обмежені розміром: при найнижчій біт-скорості Nymbot припускає, 8 kbps, 30 хвилин - 1,8 МБ, а більший файл в такому форматі відмовляється з 413 audio_too_long Надіслати довші записи як WAV, WebM, MP4 або Ogg. Якщо Whisper потім повідомляє більше 30 хвилин в будь-якому випадку, запит відмовляється 413 audio_too_long, і оскільки Шпигун пройшов, 30 хвилин заряджаються.

Ви платите за довжину аудіо, закруглені до другої: найдовша довжина, прочитана з файлу, довжина Whisper звітів, і найменший розмір файлу дозволяє, за ціною за хвилину Whisper з звичайною платою і маржі, і принаймні 0,05 кредиту запиту. 402 У програмі транскрипція голосового повідомлення може бути безкоштовною; на API вона завжди заряджається.

Відповідь

{
  "text": "Your invoice has been paid.",
  "usage": { "type": "duration", "seconds": 3 },
  "nymbot": { "balance": "standard", "charged_credits": 0.05, "charged_sats": 0.5, "balance_credits": 120.35, "balance_sats": 1203.5 }
}

text повертає простий текст, srt і vtt повернення субтитров, а також verbose_json додає мову, тривалість та сегменти часу. Для трьох сегментів, які не є JSON, вартість в заголовках.

СтатусКоли
400Без файлів, без файлів, які можуть бути використані (invalid_audio, невідомий формат, або модель, яка не є транскрипційною моделлю (invalid_model).
402Баланс не може її покрити.
413Додаток не перевищує 25 Мб (file_too_large(або в форматі, довжина якого не може бути прочитана напередодні, більше 1,8 Мб)audio_too_long).
502Шпигун не міг обробляти аудіо.

cURL

curl https://nymbot.ai/api/v1/audio/transcriptions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -F [email protected] \
  -F model=whisper \
  -F response_format=json

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

with open("memo.m4a", "rb") as f:
    transcript = client.audio.transcriptions.create(model="whisper", file=f)
print(transcript.text)

JavaScript

import fs from "node:fs";
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const transcript = await client.audio.transcriptions.create({
  model: "whisper",
  file: fs.createReadStream("memo.m4a"),
});
console.log(transcript.text);

Переклад мови на англійську

POST https://nymbot.ai/api/v1/audio/translations — потрібен ключ API, або Оплата Lightning за запитомТіло є multipart/form-data.

Те ж саме, що і транскрипція, з тими ж полями крім language, межі і ціна, але текст повертається англійською мовою незалежно від мови. audio.translations.create.

cURL

curl https://nymbot.ai/api/v1/audio/translations \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -F [email protected] \
  -F model=whisper

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

with open("nota.m4a", "rb") as f:
    translation = client.audio.translations.create(model="whisper", file=f)
print(translation.text)

JavaScript

import fs from "node:fs";
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const translation = await client.audio.translations.create({
  model: "whisper",
  file: fs.createReadStream("nota.m4a"),
});
console.log(translation.text);

Вбудовані

Перетворює текст на вектори для пошуку, кластерування та дедуплікації.Моделі працюють на Cloudflare і витрачають стандартний баланс.

POST https://nymbot.ai/api/v1/embeddings — потрібен ключ API, або Оплата Lightning за запитом.

ПолеТипНеобхідніОпис
modelСтрингтакВбудована модель від GET /api/v1/models?type=embedding.
inputstring або array stringтакЗалишається не менше 100 осіб, які не мають дозвіл на проживання (token_input_unsupportedКожен вхід повинен відповідати моделі context_lengthРозраховується приблизно на чотири байти токена.
encoding_formatСтрингНіfloat (відповідно до положень) або base64 (маленький 32-бітний плавець)
dimensionsІнтеграціяНівласного розміру моделі, або для моделі з supported_dimensions один з них; вектор потім скорочується і нормалізується.
МодельРозміриКонтекст
@cf/baai/bge-m31024 на багатьох мовах8,192 токенів
@cf/qwen/qwen3-embedding-0.6b1024 на багатьох мовах8,192 токенів
@cf/baai/bge-large-en-v1.51024 англійська512 точок
@cf/baai/bge-base-en-v1.5768, англійська512 точок
@cf/baai/bge-small-en-v1.5384 англійська512 точок

Список моделей є джерелом правди, для яких вони доступні і скільки вони коштують; Google EmbeddingGemma, з коротшими векторами на запит, також з'являється там, коли в каталозі є ціна для нього.

Відповідь

{
  "object": "list",
  "data": [
    { "object": "embedding", "index": 0, "embedding": [0.0213, -0.0487, 0.0112] }
  ],
  "model": "@cf/baai/bge-m3",
  "usage": { "prompt_tokens": 9, "total_tokens": 9 },
  "nymbot": { "balance": "standard", "charged_credits": 0.05, "charged_sats": 0.5, "balance_credits": 1204.35, "balance_sats": 12043.5 }
}
СтатусКоли
400Вхід або порожній один; токенні матриці (token_input_unsupportedБільше 100 тис. осіб (too_many_inputs); введення довше, ніж забирає модель (input_too_long); розмір моделі не може дати (unsupported_dimensions).
402Стандартний баланс занадто низький.Вбудовування ніколи не використовують баланс Pro.
404Ніякої моделі з такою назвою.
502Модель провалилася. нічого не стягується.

cURL

curl https://nymbot.ai/api/v1/embeddings \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "@cf/baai/bge-m3", "input": ["Lightning invoices expire.", "Invoices on Lightning have a time limit."]}'

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

result = client.embeddings.create(
    model="@cf/baai/bge-m3",
    input=["Lightning invoices expire.", "Invoices on Lightning have a time limit."],
)
print(len(result.data), len(result.data[0].embedding))

JavaScript

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const result = await client.embeddings.create({
  model: "@cf/baai/bge-m3",
  input: ["Lightning invoices expire.", "Invoices on Lightning have a time limit."],
});
console.log(result.data.length, result.data[0].embedding.length);