Base de coñecemento desenvolvedores
Imaxes, audio e embeddings
Os xeradores da aplicación, e os bloques de construción para a busca: imaxes, vídeo, fala, transcrición e embeddings, cada un facturado por uso do seu saldo.
Esta páxina está traducida por máquina para maior comodidade. O orixinal en inglés é a versión que se aplica.
Xerar imaxes
Realiza unha a catro imaxes a partir dun prompt e devolve-las cando están feitas. ?image Na súa app.
POST https://nymbot.ai/api/v1/images/generations Necesita unha clave de API, ou Un Lightning pago por solicitude.
Os ídolos veñen de GET /api/v1/models?type=imageO xerador estándar,
@cf/black-forest-labs/flux-1-schnell, custa un fixo 5 créditos estándar (50 sats) unha imaxe. Cada outro xerador gasta créditos Pro ao seu propio prezo, coa taxa habitual e marxe, como en A miña app. n As imaxes custan
n Un campo que un xerador non toma é caído en vez de rexeitado; o xerador estándar usa só o prompt.
| Campo | Tipo | Necesario | Descrición |
|---|---|---|---|
model | unha string | Si | Un xerador de identificación, como nano-banana. |
prompt | unha string | Si | Só se usan os primeiros 2.000 caracteres. |
n | enteiro | non | 1 a 4.Default 1.Tamén aceptado como num_images. |
size | unha string | non | Unha proporción como a "16:9", ou un tamaño OpenAI como "1792x1024", que se converte no máis próximo de 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 e 4:5. "auto" Deixámolo no xerador. |
aspect_ratio | unha string | non | O mesmo que sizee gaña se ambos son enviados. |
quality | unha string | non | xeradores específicos, como "low", "medium" ou "high". |
negative_prompt | unha string | non | O que deixar fóra. |
output_format | unha string | non | "png", "jpeg" ou "webp". |
response_format | unha string | non | "url" (O defecto ou "b64_json". |
image_url | unha string | non | Unha imaxe para comezar por: un https:// Unha ligazón de ata 4.096 caracteres sen nome de usuario ou contrasinal. data:image/…;base64 URL (PNG, JPEG, WebP ou GIF; non SVG). editrequirido por aqueles que requires_image_url. |
resolution non se usa: cada xerador fai o seu propio tamaño. url, cada imaxe é cargada a un anfitrión público de Blossom e obtés o seu enlace (algúns xeradores só devolven un enlace propio, que se transmite). O que o lume pode vercon
b64_json a imaxe volve na resposta e nunca é cargada. data: URL en image_url é revisado do mesmo xeito que un
Editar e cargado en Blossom primeiro para que o xerador poida recuperalo; é borrado de novo se a solicitude non se descarga.
Se algunhas das n as imaxes fallan, obtés as que funcionaron, son cobradas só por aquelas (máis calquera que o provedor cobra a pesar do fracaso), e nymbot.failed indica cantos están ausentes.Se todos fallan, a solicitude devolve 502.
Resposta
{
"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 }
}
| Estatuto | cando |
|---|---|
400 | Non moi rápido; n entre 1 e 4 (invalid_value); unha mala dimensión (invalid_size) ou imaxe (invalid_image, invalid_image_url); un modelo que existe pero non é un xerador de imaxes (invalid_model); unha imaxe para un xerador que non pode editar (edit_unsupported); ningunha imaxe para un que o necesite (image_required). |
402 | O balance non pode cubrir todas as imaxes solicitadas. |
404 | Ningún modelo con ese nome (model_not_found). |
502 | O xerador fallou (upstream_errorNada se cobra a menos que o provedor faga a factura polo intento; entón o erro ten charged_sats. |
503 | As imaxes non se poden aloxar no momento (media_hosting_unavailable). b64_json Aínda funciona. |
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);
Editar imaxes
Modifica unha imaxe que sube, seguindo unha prompt. Este é o punto final de edición de OpenAI, polo que os SDK de OpenAI images.edit funciona como está. Só os xeradores Pro con edit na lista de modelos acepta-lo.
POST https://nymbot.ai/api/v1/images/edits Necesita unha clave de API, ou Un Lightning pago por solicitudeO corpo está multipart/form-dataata 32 MB.
| Campo | Tipo | Necesario | Descrición |
|---|---|---|---|
image | Ficheiro | Si | A imaxe para editar: PNG, JPEG, WebP ou GIF, ata 20 MB. image[]O primeiro é usado. |
prompt | unha string | Si | O que cambiar. |
model | unha string | Si | Un xerador con edit. |
n | enteiro | non | 1 ao 4. |
sizeaspect_ratioqualitynegative_promptoutput_format | unha string | non | En canto á xeración. |
response_format | unha string | non | "b64_json" (o defecto aquí) ou "url". |
A imaxe que sube é verificada para ser un PNG, JPEG, WebP ou GIF ben formado, enviado como o seu tipo real, e colocado nun servidor público Blossom, porque os xeradores recollen a súa entrada por ligazón. Trátalo como público. Se a edición falla e non se carga nada, a copia aloxada é borrada de novo. A resposta ten a mesma forma que para a xeración. O prezo é o prezo do xerador, que para algúns xeradores inclúe unha taxa para a imaxe de entrada.
Resposta
{
"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 }
}
| Estatuto | cando |
|---|---|
400 | Ningunha imaxe ou prompt, un ficheiro que non é unha imaxe (invalid_image), ou un xerador que non pode editar (edit_unsupported). |
413 | A imaxe é de máis de 20 MB (file_too_large), ou toda a solicitude de máis de 32 MB. |
503 | A imaxe non se pode aloxar no momento (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"));
Vídeo
Un vídeo leva minutos, polo que se executa no fondo. Envía-lo, obtén unha identificación inmediatamente, e preguntar sobre a identificación ata que estea feito.
POST https://nymbot.ai/api/v1/videos Necesita unha clave de API, ou Un Lightning pago por solicitudeRegreso 202.
| Campo | Tipo | Necesario | Descrición |
|---|---|---|---|
model | unha string | Si | Un xerador de vídeo id de GET /api/v1/models?type=video, tales como veo. |
prompt | unha string | Si | O que debería pasar. |
duration | Número ou cadea | non | Lonxitude en segundos, máis de 0 e ata 60.Usado só por xeradores que che permiten escoller a lonxitude; os outros fan a súa lonxitude habitual, que é o que seconds A resposta e o prezo seguen. |
aspect_ratio | unha string | non | Tal como "16:9" ou "9:16"Un tamaño como "1280x720" converteuse na relación máis próxima. |
resolutionquality | unha string | non | Un dos xeradores resolutions Na listaxe de modelos, como "720p" ou "1080p"Establece o prezo.Todo o demais é rexeitado unsupported_resolution. |
image_url | unha string | non | Unha imaxe para comezar por: un https:// ligazón ou a data:image/… URL, que é cargado a un servidor público Blossom primeiro. Requírese por xeradores con requires_image_url. |
O prezo é fixo cando envíe, desde o xerador, resolución e lonxitude, polo que se cobra do seu saldo Pro tan pronto como o provedor acepta o traballo, e se mostra como
cost, estimated_cost e nymbotSe o provedor rexeita o traballo, non se cobra nada. Se a renderización falla máis tarde, ou o clip rematado non se pode almacenar e o provedor non fixo a factura, a factura é reembolsada unha vez, automaticamente. Unha renderización que aínda vai despois dunha hora abandona e mantén a súa factura, porque o provedor factura unha renderización unha vez que a acepta.
Reaccións (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 Comeza como in_progressou completed O vídeo xa está en data cando o xerador o devolveu inmediatamente.
Comprobar nun vídeo
GET https://nymbot.ai/api/v1/videos/{id} Necesita unha clave pertencente ao nim que a enviou.Unha clave que alcanzou o seu límite aínda pode comprobar.
que responde 202 Aínda que se está a facer o vídeo e 200 unha vez que está rematado ou fracasou. Pregunta cada 5 a 10 segundos. Cada cheque pregunta ao provedor unha vez e responde á vez; nunca agarda o vídeo.
GET /api/v1/videos lista os últimos 50 postos de traballo da clave como
{"object": "list", "data": […]}.
Resposta á pregunta (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 ou failedUn traballo fracasado leva error ({"code": "generation_failed", "message": …}e se se lle devolve, cost é 0 e nymbot Adicións
refunded_credits e refunded_satsO vídeo rematado está nun host público de Blossom, como as imaxes xeradas.
| Estatuto | cando |
|---|---|
400 | Non ten unha duración rápida; unha duración fóra de 0 a 60 (invalid_value); unha resolución que o xerador non ofrece (unsupported_resolution); ningunha imaxe para un xerador que necesite unha (image_required); un modelo que non é un xerador de vídeo (invalid_model). |
402 | O balance Pro non pode cubrir o vídeo. |
404 | Non hai un xerador (model_not_found), ou ningún traballo por ese id para o seu nim, ou é máis de 24 horas de idade (video_not_found). |
429 | A túa ninfa xa ten 10 vídeos de renderización (video_jobs_limitComproba-los e enviar máis unha vez que un remata. |
502 | O xerador rexeitou o traballo. Non se cobra nada a menos que o provedor faga unha factura. |
503 | Os vídeos non poden ser entregados ou almacenados no momento (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);
Texto do discurso
Ler texto en voz alta e devolver o ficheiro de audio en si, non unha ligazón. audio.speech.create No OpenAI SDKs funciona.
POST https://nymbot.ai/api/v1/audio/speech Necesita unha clave de API, ou Un Lightning pago por solicitude.
| Campo | Tipo | Necesario | Descrición |
|---|---|---|---|
model | unha string | non | Un modelo de discurso de Listaxe de modelos de audioPor defecto: a voz estándar, @cf/myshell-ai/melotts. aura-2 Aura 2 de Deepgram. |
input | unha string | Si | O texto a ler: ata 800 caracteres para a voz estándar, 2.000 para Aura 2. |
voice | unha string | non | Unha identificación de voz de Listaxe de voces: un altofalante de aura como luna ou aura-2-luna-en, ou unha linguaxe MeloTTS (en, es, fr, zhOpenAI nomes de voz como alloy son aceptados e dar a voz predeterminada do modelo. |
language | unha string | non | Un código de linguaxe como esSen unha voz, elixe unha para ese idioma. Unha voz que fala noutra lingua volve 422 voice_language_mismatche unha linguaxe para a que o modelo non ten voz 422 unsupported_language. |
response_format | unha string | non | A voz estándar regresa mp3 Aura 2 regresa mp3 (A miña debilidade) opus, aac, flac, wav ou pcm. |
speed | Número | non | aceptado e ignorado. |
A voz estándar custa un plano 3 créditos estándar (30 sats) unha solicitude, como na aplicación. Aura 2 é Pro, prezado polos caracteres que envía.
Content-TypeO custo está na X-Nymbot-Cost-Sats Se o modelo de fala falla, non se cargará nada.
Resposta
HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Nymbot-Cost-Sats: 4.2
X-Nymbot-Balance-Sats: 41055.6
(audio bytes)
| Estatuto | cando |
|---|---|
400 | Ningunha entrada; entrada sobre o límite do modelo (input_too_long); un formato que o modelo non pode producir (unsupported_response_format); unha voz descoñecida (invalid_voice); un modelo que non é un modelo de fala (invalid_model). |
422 | A voz non fala a linguaxe dada, ou o modelo non ten voz para iso. |
502 | O modelo de discurso fracasou.Nada está cargado. |
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()));
Modelos de audio e voces
Dúas listas públicas para escoller un modelo de fala e voz, ou un modelo de transcrición.Hai 41 falantes de inglés Aura 2 e catro linguas MeloTTS.
GET https://nymbot.ai/api/v1/audio/models Non é necesaria ningunha chave.
GET https://nymbot.ai/api/v1/audio/voices?language=en Non é necesaria ningunha chave.
| Campo | Tipo | Necesario | Descrición |
|---|---|---|---|
language | Conexión (query) | non | Só voces para esta lingua. |
model | Conexión (query) | non | Só voces para este modelo. |
Reaccións (Votacións)
{
"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 }
]
}
As respostas da lista de modelos {"object": "list", "data": {"tts": […], "stt": […]}}Cada modelo de discurso dá o seu equilibrio, prezo, max_input_chars,
response_formats, languages e default_voiceo modelo de transcrición dá os seus aliases, max_file_bytes, max_seconds, formatos e prezo por minuto.
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);
Discurso ao texto
Converte unha gravación en texto con Whisper. Este é o punto final de transcrición de OpenAI, polo que
audio.transcriptions.create Funcións .
POST https://nymbot.ai/api/v1/audio/transcriptions Necesita unha clave de API, ou Un Lightning pago por solicitudeO corpo está multipart/form-data.
| Campo | Tipo | Necesario | Descrición |
|---|---|---|---|
file | Ficheiro | Si | A gravación, de 256 bytes a 25 MB e ata 30 minutos: WAV, WebM, MP4 ou M4A, Ogg ou Opus, MP3 e os outros formatos Whisper le. |
model | unha string | non | defecto whisper, que é Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo e @cf/openai/whisper-large-v3-turbo Significa o mesmo. |
language | unha string | non | A linguaxe falada, como enDetectado se quedou fóra. |
prompt | unha string | non | Palabras ou ortografías para esperar, como nomes. só se usan os primeiros 1000 caracteres. |
response_format | unha string | non | json (A miña debilidade) text, srt, vtt ou verbose_json. |
Para WAV, WebM, MP4 e arquivos Ogg a lonxitude é lida a partir do arquivo antes de que se execute calquera cousa, polo que unha gravación de máis de 30 minutos é rexeitada adiante (con graza de 3 segundos). A lonxitude dun arquivo WAV provén da súa taxa de mostra, canles e tamaño de mostra. A lonxitude doutros formatos, como MP3, non se pode ler adiante, polo que están limitados polo tamaño: na taxa de bits máis baixa Nymbot asume, 8 kbps, 30 minutos é 1,8 MB, e un arquivo máis grande en tal formato é rexeitado con 413
audio_too_long Enviar gravacións máis longas como WAV, WebM, MP4 ou Ogg. Se Whisper logo informa máis de 30 minutos, a solicitude é rexeitada con
413 audio_too_long, e desde que Whisper fixo correr, 30 minutos son cargados.
Pagas pola lonxitude do audio, arredondado ata o segundo: o máis longo da lonxitude lida do ficheiro, a lonxitude do relato Whisper, e o menos o tamaño do ficheiro permite, ao prezo por minuto de Whisper coa tarifa habitual e marxe, e polo menos 0.05 crédito unha solicitude. 402 dá o que cada balance necesitaría. Na aplicación, a transcrición dunha mensaxe de voz pode ser gratuíta; na API sempre se carga.
Resposta
{
"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 Devolve texto sinxelo, srt e vtt devolver os subtítulos, e
verbose_json engade o idioma, a duración e os segmentos temporais. Para os tres que non son JSON, o custo está nos encabezados.
| Estatuto | cando |
|---|---|
400 | Non hai ficheiro, un ficheiro sen audio usable (invalid_audio, un formato descoñecido, ou un modelo que non é un modelo de transcrición (invalid_model). |
402 | Tampouco o equilibrio pode cubrir. |
413 | O ficheiro é de máis de 25 MB (file_too_largeEn canto ao número de páxinas web, o número de páxinas web non pode exceder de 1 MB (audio_too_long). |
502 | O susurro non podía procesar o audio. |
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);
Tradución do discurso ao inglés
POST https://nymbot.ai/api/v1/audio/translations Necesita unha clave de API, ou Un Lightning pago por solicitudeO corpo está multipart/form-data.
O mesmo que a transcrición, cos mesmos campos ademais de language, límites e prezo, pero o texto volve en inglés calquera que sexa o idioma falado. 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);
Embaixadas
Converte texto en vectores para buscar, agrupar e deduplicar.Os modelos funcionan en Cloudflare e gastan o saldo estándar.
POST https://nymbot.ai/api/v1/embeddings Necesita unha clave de API, ou Un Lightning pago por solicitude.
| Campo | Tipo | Necesario | Descrición |
|---|---|---|---|
model | unha string | Si | Un modelo de embalaxe de GET /api/v1/models?type=embedding. |
input | Array ou cadea de cadeas | Si | O texto para incorporar, ata 100 cadeas non baleiras. matriz de tokens son rexeitadas (token_input_unsupportedCada entrada debe coincidir coa do modelo context_length, contado como uns catro bytes un token. |
encoding_format | unha string | non | float (O defecto ou base64 (Little-endian 32-bit flotadores de bits) |
dimensions | enteiro | non | tamaño propio do modelo, ou para un modelo con supported_dimensions un deles; o vector é entón abreviado e normalizado. |
| Modelo | Dimensións | Contexto |
|---|---|---|
@cf/baai/bge-m3 | 1024 moitas linguas | 8192 páxinas |
@cf/qwen/qwen3-embedding-0.6b | 1024 moitas linguas | 8192 páxinas |
@cf/baai/bge-large-en-v1.5 | 1024 en inglés | 512 páxinas |
@cf/baai/bge-base-en-v1.5 | 768 en inglés | 512 páxinas |
@cf/baai/bge-small-en-v1.5 | 384 en inglés | 512 páxinas |
A lista de modelos é a fonte de verdade para os que están dispoñibles e o que custan; o EmbeddingGemma de Google, con vectores máis curtos a petición, aparece alí tamén cando o catálogo ten un prezo para el.
Resposta
{
"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 }
}
| Estatuto | cando |
|---|---|
400 | Ningunha entrada ou un baleiro; token array (token_input_unsupported); máis de 100 entradas (too_many_inputs); unha entrada máis longa que o modelo toma (input_too_long); un tamaño que o modelo non pode dar (unsupported_dimensions). |
402 | O saldo estándar é demasiado baixo.As incorporacións nunca usan o saldo Pro. |
404 | Ningún modelo enmarcado por ese nome. |
502 | O modelo fracasou.Nada está cargado. |
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);