База знаний Разработчики
Изображения, аудио и вставки
Генераторы из приложения и строительные блоки для поиска: изображения, видео, речь, транскрипция и встраивания, каждый считан за использование из вашего баланса.
Эта страница для удобства переведена автоматически. Применяется английский оригинал.
генерировать изображения
Снимает от одного до четырех изображений с проспекта и возвращает их, когда они сделаны. ?image в приложении .
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) на картинку. Каждый другой генератор тратит Pro кредиты по собственной цене, с обычной платой и маржи, как в Апп. n Стоимость фото
n Поле, которое генератор не принимает, выпадает, а не отказывается; стандартный генератор использует только промпт.
| Поле | Тип | Требуется | Описание |
|---|---|---|---|
model | Стринг | Да | Идентификатор генератора, такой как nano-banana. |
prompt | Стринг | Да | Используются только первые 2000 символов. |
n | integer | Нет | 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 | Стринг | Нет | Снимок для начала с: A https:// ссылка не более 4 096 символов без имени пользователя или пароля в ней, или 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 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 | integer | Нет | 1 к 4. |
sizeaspect_ratioqualitynegative_promptoutput_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" Это становится самым близким соотношением. |
resolutionquality | Стринг | Нет | Один из генераторов resolutions В списке моделей, таких как "720p" или "1080p"Он устанавливает цену.Все остальное отказывается с unsupported_resolution. |
image_url | Стринг | Нет | Снимок для начала с: A https:// Линк или А data:image/… URL, который загружается сначала на общедоступный хост Blossom. requires_image_url. |
Цена фиксируется, когда вы подаете, с генератора, разрешения и длины, поэтому она взимается с вашего Про баланса, как только провайдер принимает работу, и показана как
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 секунд. Каждая проверка спрашивает провайдера один раз и отвечает сразу; он никогда не ждет видео.
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 Работает в OpenAI 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 | Стринг | Нет | голосовой идентификатор от Список голосов: аура спикер, такой как 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, и так как Whisper прошел, 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) или запись более 30 минут, или, в формате, длина которого не может быть прочитана впереди, более 1,8 МБ (audio_too_long). |
502 | Whisper не мог обрабатывать аудио. Ничего не заряжается. |
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);
Embeddings
Превращает текст в векторы для поиска, кластерирования и дедупликации.Модели работают на Cloudflare и тратят стандартный баланс.
POST https://nymbot.ai/api/v1/embeddings — нужен ключ API, или Оплата Lightning по запросу.
| Поле | Тип | Требуется | Описание |
|---|---|---|---|
model | Стринг | Да | Встроенная модель от GET /api/v1/models?type=embedding. |
input | string или array строк | Да | Включение в текст, до 100 непустых строк. Токенные массивы отклоняются (token_input_unsupportedКаждый вход должен соответствовать модели context_length, считается примерно четырьмя байтами токена. |
encoding_format | Стринг | Нет | float (в случае дефолта) или base64 (маленькие 32-разрядные плавучие котлы) |
dimensions | integer | Нет | собственного размера модели, или для модели с supported_dimensions один из них; вектор затем сокращается и нормализуется. |
| Модель | измерений | Контекст |
|---|---|---|
@cf/baai/bge-m3 | 1024 на многих языках | 8 192 токенов |
@cf/qwen/qwen3-embedding-0.6b | 1024 на многих языках | 8 192 токенов |
@cf/baai/bge-large-en-v1.5 | 1024 Английский | 512 токенов |
@cf/baai/bge-base-en-v1.5 | 768, Английский | 512 токенов |
@cf/baai/bge-small-en-v1.5 | 384 Английский | 512 токенов |
Список моделей является источником правды о том, для чего они доступны и что они стоят; EmbeddingGemma Google, с более короткими векторами по запросу, появляется там также, когда в каталоге есть цена для него.
Ответить
{
"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);