Base de coneixement Desenvolupadors
Imatges, àudio i embeddings
Els generadors de l'aplicació, i els blocs de construcció per a la cerca: imatges, vídeo, veu, transcripció i embeddings, cadascun facturat per ús del seu saldo.
Aquesta pàgina està traduïda automàticament per comoditat. L'original en anglès és la versió que s'aplica.
Generar imatges
Fa d'una a quatre imatges d'un prompt i les retorna quan s'han fet. ?image En l’app
POST https://nymbot.ai/api/v1/images/generations necessita una clau d'API, o Pagament Lightning per sol·licitud.
Els ides provenen de GET /api/v1/models?type=imageEl generador estàndard,
@cf/black-forest-labs/flux-1-schnell, costa un pla 5 crèdits estàndard (50 sats) una imatge. Cada altre generador gasta crèdits Pro al seu propi preu, amb la tarifa habitual i marge, com en L’app. n Imatges costades
n Un camp que un generador no pren és caigut en comptes de rebutjat; el generador estàndard només utilitza el prompt.
| El camp | Tipus | Necessitat | Descripció |
|---|---|---|---|
model | Línia | Sí | Un generador d'identificadors, com nano-banana. |
prompt | Línia | Sí | Només s'utilitzen els primers 2.000 caràcters. |
n | íntegre | No | 1 a 4.Default 1.També acceptat com num_images. |
size | Línia | No | Una proporció com "16:9", o una grandària OpenAI com "1792x1024", que es converteix en el més proper de 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 i 4:5. "auto" El deixem al generador. |
aspect_ratio | Línia | No | El mateix que sizei guanya si tots dos són enviats. |
quality | Línia | No | Generadors específics, com "low", "medium" o "high". |
negative_prompt | Línia | No | Què deixar fora. |
output_format | Línia | No | "png", "jpeg" o "webp". |
response_format | Línia | No | "url" (el defecte) o "b64_json". |
image_url | Línia | No | Una imatge per començar: un https:// enllaç d'un màxim de 4.096 caràcters sense nom d'usuari ni contrasenya, o un data:image/…;base64 URL (PNG, JPEG, WebP o GIF; no SVG). editRequisits per a aquells amb requires_image_url. |
resolution no s'utilitza: cada generador fa la seva pròpia mida. url, cada imatge es carrega a un amfitrió públic de Blossom i vostè rep el seu enllaç (alguns generadors només lliuren un enllaç propi, que es transmet). El que el foc pot veureamb
b64_json La imatge torna en la resposta i no es carrega mai. Una imatge enviada com a data: URL en línia image_url Es comprova de la mateixa manera que un
Edició i carregat a Blossom primer perquè el generador pugui recollir-lo; s'esborra de nou si la sol·licitud no es descarrega.
Si algunes de les n les imatges fracassen, s'obtenen les que van funcionar, només es cobren per aquelles (plus qualsevol facturació del proveïdor malgrat el fracàs), i nymbot.failed indica quants són desapareguts. Si tots fracassen, la sol·licitud torna 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 }
}
| Estatut | Quan |
|---|---|
400 | No és ràpid; n A partir de l’1 al 4 (invalid_value); una mala mida (invalid_size) o la imatge (invalid_image, invalid_image_url); un model que existeix però no és un generador d'imatges (invalid_model); una imatge per a un generador que no pot editar (edit_unsupported); no hi ha cap imatge per a algú que ho necessiti (image_required). |
402 | El balanç no pot cobrir totes les imatges sol·licitades. |
404 | No hi ha cap model amb aquest nom (model_not_found). |
502 | El generador va fallar (upstream_errorNo es carrega res llevat que el proveïdor hagi facturat per l'intent; llavors l'error ha estat charged_sats. |
503 | Les imatges no es poden allotjar en aquest moment (media_hosting_unavailable). b64_json Encara 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 imatges
Canvia una imatge que carregueu, seguint una invitació. Aquest és el punt final d'edició d'OpenAI, de manera que els SDK d'OpenAI images.edit funcionen tal com són. Només els generadors Pro amb edit en la llista de models ho accepta.
POST https://nymbot.ai/api/v1/images/edits necessita una clau d'API, o Pagament Lightning per sol·licitudEl cos és multipart/form-dataFins a 32 MB.
| El camp | Tipus | Necessitat | Descripció |
|---|---|---|---|
image | Arxiu | Sí | La imatge per editar: PNG, JPEG, WebP o GIF, fins a 20 MB. image[]El primer es fa servir. |
prompt | Línia | Sí | Què canviar. |
model | Línia | Sí | Un generador amb edit. |
n | íntegre | No | 1 a 4. |
sizeaspect_ratioqualitynegative_promptoutput_format | Línia | No | Pel que fa a generacions. |
response_format | Línia | No | "b64_json" (el defecte aquí) o "url". |
La imatge que carregueu es comprova que és un PNG, JPEG, WebP o GIF ben format, enviat com el seu tipus real, i posat en un host públic Blossom, perquè els generadors recullen la seva entrada per enllaç. Tractar-lo com a públic. Si l'edició fracassa i no es carrega res, la còpia allotjada es suprimeix de nou. La resposta té la mateixa forma que per a la generació. El preu és el preu del generador, que per a alguns generadors inclou una tarifa per a la imatge d'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 }
}
| Estatut | Quan |
|---|---|
400 | Cap imatge o prompt, un fitxer que no és una imatge (invalid_image), o un generador que no pot editar (edit_unsupported). |
413 | La imatge és de més de 20 MB (file_too_large), o tota la sol·licitud de més de 32 MB. |
503 | La imatge no es pot allotjar en aquest moment (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 triga minuts, de manera que s'executa en el fons. L'envieu, obteniu una identificació immediatament, i pregunteu sobre la identificació fins que es faci.
POST https://nymbot.ai/api/v1/videos necessita una clau d'API, o Pagament Lightning per sol·licitudRetorns 202.
| El camp | Tipus | Necessitat | Descripció |
|---|---|---|---|
model | Línia | Sí | Un generador de vídeo id de GET /api/v1/models?type=videoAixí com veo. |
prompt | Línia | Sí | Què hauria de passar. |
duration | Número o string | No | Longitud en segons, més de 0 i fins a 60.Utilitzat només per generadors que li permeten triar la longitud; els altres fan la seva longitud habitual, que és el que seconds en la resposta i el preu segueix. |
aspect_ratio | Línia | No | Així com "16:9" o "9:16"Una dimensió com "1280x720" es converteix en la proporció més propera. |
resolutionquality | Línia | No | Un dels generadors resolutions A la llista de models, com "720p" o "1080p"Es fixa el preu. Qualsevol altra cosa es nega amb unsupported_resolution. |
image_url | Línia | No | Una imatge per començar: un https:// Enllaç o a data:image/… URL, que es carrega primer a un amfitrió públic de Blossom. requires_image_url. |
El preu és fix quan envieu, des del generador, la resolució i la longitud, de manera que es carrega del vostre saldo Pro tan aviat com el proveïdor accepta el treball, i es mostra com
cost, estimated_cost i nymbotSi el proveïdor rebutja la feina, no es carrega res. Si la rendició fracassa més tard, o el clip acabat no es pot emmagatzemar i el proveïdor no l'ha facturat, la càrrega es reemborsarà una vegada, automàticament. Una rendició que encara està passant després d'una hora es deixa i manté la seva càrrega, perquè el proveïdor factura una rendició una vegada que l'accepta. Una devolució retorna els crèdits però no disminueix el recompte de despeses de la clau.
Recomanacions (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 Comença com in_progress, o completed El vídeo ja està en data Quan el generador el va retornar immediatament.
Comprovar en un vídeo
GET https://nymbot.ai/api/v1/videos/{id} - necessita una clau pertanyent al nim que la va enviar. Una clau que hagi arribat al seu cap encara pot comprovar.
que respon 202 Mentre es fa el vídeo i 200 una vegada que s'ha acabat o ha fracassat. Pregunta cada 5 a 10 segons. Cada xec demana al proveïdor una vegada i respon a la vegada; mai espera el vídeo. Una feina es manté durant 24 hores després de ser presentada.
GET /api/v1/videos Llista dels últims 50 llocs de treball de la clau com
{"object": "list", "data": […]}.
La resposta (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 És in_progress, completed o failedUn treball fracassat porta error ({"code": "generation_failed", "message": …}Si s’ha reemborsat, cost És 0 i nymbot Addició
refunded_credits i refunded_satsEl vídeo acabat es troba en un host públic de Blossom, com les imatges generades.
| Estatut | Quan |
|---|---|
400 | No hi ha prompt; una durada fora de 0 a 60 (invalid_value); una resolució que el generador no ofereix (unsupported_resolution); no hi ha cap imatge per a un generador que necessiti una (image_required); un model que no és un generador de vídeo (invalid_model). |
402 | El balanç Pro no pot cobrir el vídeo. |
404 | No hi ha cap generador (model_not_found), o no hi ha feina per aquest id per al teu nim, o és més de 24 hores d'edat (video_not_found). |
429 | El teu nim ja té 10 vídeos de renderització (video_jobs_limitComproveu-les i envieu més una vegada que s'acabi. |
502 | El generador va rebutjar el treball. No es carrega res a menys que el proveïdor ho facturés. |
503 | Els vídeos no es poden lliurar ni emmagatzemar en aquest moment (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);
Text del discurs
Llegeix el text en veu alta i retorna el mateix arxiu d'àudio, no un enllaç. audio.speech.create Els SDKs d’OpenAI funcionen.
POST https://nymbot.ai/api/v1/audio/speech necessita una clau d'API, o Pagament Lightning per sol·licitud.
| El camp | Tipus | Necessitat | Descripció |
|---|---|---|---|
model | Línia | No | Un model de discurs de Llista de models d'àudioDefault: la veu estàndard, @cf/myshell-ai/melotts. aura-2 Es tracta de Deepgram Aura 2. |
input | Línia | Sí | El text a llegir: fins a 800 caràcters per a la veu estàndard, 2.000 per a Aura 2. |
voice | Línia | No | Un id de veu de La llista de veus: un orador d'aura com luna (o el aura-2-luna-en, o un llenguatge MeloTTS (en, es, fr, zhOpenAI noms de veu com ara alloy s'accepten i donen la veu predeterminada del model. |
language | Línia | No | Un codi lingüístic com esSense una veu, es selecciona una per a aquesta llengua. Una veu que parla una altra llengua torna 422 voice_language_mismatchi un llenguatge pel qual el model no té veu 422 unsupported_language. |
response_format | Línia | No | La veu estàndard torna mp3 El retorn de l'Aura 2 mp3 (en el seu defecte) opus, aac, flac, wav o pcm. |
speed | Número | No | Acceptat i ignorat. |
La veu estàndard costa un pla 3 crèdits estàndard (30 sats) una sol·licitud, com en l'aplicació. Aura 2 és Pro, preuat pels caràcters que envieu.
Content-TypeEl cost es troba en la X-Nymbot-Cost-Sats Si el model de parla falla, no es carrega res.
Resposta
HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Nymbot-Cost-Sats: 4.2
X-Nymbot-Balance-Sats: 41055.6
(audio bytes)
| Estatut | Quan |
|---|---|
400 | No hi ha entrada; entrada per sobre del límit del model (input_too_long); un format que el model no pot produir (unsupported_response_formatUna veu desconeguda (invalid_voice); un model que no és un model de parla (invalid_model). |
422 | La veu no parla el llenguatge donat, o el model no té veu per a això. |
502 | El model de discurs va fallar. No hi ha cap càrrega. |
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()));
Models d'àudio i veus
Dues llistes públiques per triar un model de parla i veu, o un model de transcripció. Hi ha 41 parlants d'anglès Aura 2 i quatre llengües MeloTTS.
GET https://nymbot.ai/api/v1/audio/models Cap clau necessària.
GET https://nymbot.ai/api/v1/audio/voices?language=en Cap clau necessària.
| El camp | Tipus | Necessitat | Descripció |
|---|---|---|---|
language | Càlcul (query) | No | Només paraules per a aquesta llengua. |
model | Càlcul (query) | No | Només hi ha vots per aquest model. |
La resposta (en veu alta)
{
"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 }
]
}
Els models de la llista de respostes {"object": "list", "data": {"tts": […], "stt": […]}}Cada model de discurs dóna el seu equilibri, preu, max_input_chars,
response_formats, languages i default_voiceEl model de transcripció dóna els seus alias, max_file_bytes, max_seconds, formats i preu per minut.
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);
Discurs al text
Converteix una gravació en text amb Whisper. Aquest és el punt final de transcripció d'OpenAI, de manera que
audio.transcriptions.create Els treballs.
POST https://nymbot.ai/api/v1/audio/transcriptions necessita una clau d'API, o Pagament Lightning per sol·licitudEl cos és multipart/form-data.
| El camp | Tipus | Necessitat | Descripció |
|---|---|---|---|
file | Arxiu | Sí | La gravació, de 256 bytes a 25 MB i fins a 30 minuts: WAV, WebM, MP4 o M4A, Ogg o Opus, MP3 i els altres formats Whisper llegeix. |
model | Línia | No | defecte whisper, que és Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo i @cf/openai/whisper-large-v3-turbo Significa el mateix. |
language | Línia | No | El llenguatge parlat, com enDetectat si es va deixar fora. |
prompt | Línia | No | Paraules o ortografies a esperar, com ara noms. Només s'utilitzen els primers 1.000 caràcters. |
response_format | Línia | No | json (en el seu defecte) text, srt, vtt o verbose_json. |
Per als arxius WAV, WebM, MP4 i Ogg, la longitud es llegeix del fitxer abans que es faci alguna cosa, de manera que una gravació de més de 30 minuts es rebutja al davant (amb 3 segons de gràcia). La longitud d'un fitxer WAV ve de la seva taxa de mostra, canals i mida de mostra. La longitud d'altres formats, com ara MP3, no es pot llegir al davant, de manera que estan limitats per la mida: a la taxa de bits més baixa Nymbot assumeix, 8 kbps, 30 minuts és 1,8 MB, i un fitxer més gran en aquest format es rebutja amb 413
audio_too_long Enviar enregistraments més llargs com WAV, WebM, MP4 o Ogg. Si Whisper després informa més de 30 minuts de totes maneres, la sol·licitud es rebutja amb
413 audio_too_long, i des de Whisper va córrer, 30 minuts es carreguen.
Pagueu per la longitud de l'àudio, arrodonida fins al segon: la més llarga de la longitud llegida del fitxer, la longitud dels informes Whisper, i el mínim de la mida del fitxer permet, al preu per minut de Whisper amb la tarifa habitual i la marge, i almenys 0,05 crèdit una sol·licitud. 402 En l'aplicació, la transcripció d'un missatge de veu pot ser gratuïta; en l'API sempre es carrega.
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 Retorna el text clar. srt i vtt retornar els subtítols, i
verbose_json afegeix el llenguatge, la durada i els segments temporitzats. Per als tres que no són JSON, el cost es troba en els encapçalaments.
| Estatut | Quan |
|---|---|
400 | No hi ha cap arxiu, un arxiu sense àudio usable (invalid_audio, un format desconegut, o un model que no és un model de transcripció (invalid_model). |
402 | Ni tan sols l’equilibri el pot cobrir. |
413 | El fitxer és de més de 25 MB (file_too_large) o la gravació de més de 30 minuts, o, en un format que no es pugui llegir a la part frontal, de més de 1,8 MB (audio_too_long). |
502 | No es podia processar l'àudio. no es carrega res. |
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);
Traducció del discurs a l'anglès
POST https://nymbot.ai/api/v1/audio/translations necessita una clau d'API, o Pagament Lightning per sol·licitudEl cos és multipart/form-data.
El mateix que la transcripció, amb els mateixos camps a part de language, límits i preu, però el text torna en anglès sigui quin sigui el llenguatge que es parli. 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
Converteix text en vectors per a la cerca, agrupament i deduplicació. Els models s'executen a Cloudflare i gasten el saldo estàndard.
POST https://nymbot.ai/api/v1/embeddings necessita una clau d'API, o Pagament Lightning per sol·licitud.
| El camp | Tipus | Necessitat | Descripció |
|---|---|---|---|
model | Línia | Sí | Un model d’embolcall de GET /api/v1/models?type=embedding. |
input | Array o sèrie de cordes | Sí | El text a embolicar, fins a 100 cadenes no buides.token_input_unsupportedCada entrada ha de coincidir amb la del model context_length, comptat com a aproximadament quatre bytes un token. |
encoding_format | Línia | No | float (el defecte) o base64 (Little-endian 32 bits de floats) |
dimensions | íntegre | No | La mida del model, o per a un model amb supported_dimensions Un d'ells; el vector és llavors abreujat i normalitzat. |
| El model | Dimensió | El context |
|---|---|---|
@cf/baai/bge-m3 | 1024 llengües | 8.192 fitxes |
@cf/qwen/qwen3-embedding-0.6b | 1024 llengües | 8.192 fitxes |
@cf/baai/bge-large-en-v1.5 | 1024 Anglès | 512 pàgines |
@cf/baai/bge-base-en-v1.5 | 768 Anglès | 512 pàgines |
@cf/baai/bge-small-en-v1.5 | 384 Anglès | 512 pàgines |
La llista de models és la font de veritat per a què estan disponibles i el que costen; Google's EmbeddingGemma, amb vectors més curts a petició, apareix també quan el catàleg té un preu per a ell.
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 }
}
| Estatut | Quan |
|---|---|
400 | No hi ha cap entrada ni un buit; matèries token (token_input_unsupported); més de 100 entrades (too_many_inputs); una entrada més llarga que el model pren (input_too_long); una mida que el model no pot donar (unsupported_dimensions). |
402 | L'equilibri estàndard és massa baix. Els embeddings mai utilitzen l'equilibri Pro. |
404 | No hi ha cap model amb aquest nom. |
502 | El model va fallar. No hi ha cap càrrega. |
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);