Treci la conținut
Înapoi la Nymbot

Baza de cunoștințe Dezvoltatorii

Imagini, audio și embeddings

Generatoarele din aplicație și blocurile de construcție pentru căutare: imagini, video, vorbire, transcriere și încorporări, fiecare facturat pe utilizare din soldul dvs.

Generarea imaginilor

Realizează una până la patru imagini dintr-o promptă și le returnează când sunt finalizate. ?image În aplicația .

POST https://nymbot.ai/api/v1/images/generations — necesită o cheie API, sau O plată Lightning la cerere.

IDS provine din GET /api/v1/models?type=imageÎn general, generatorul standard @cf/black-forest-labs/flux-1-schnell, costă un flat 5 credite standard (50 sats) o imagine. Fiecare alt generator cheltuiește credite Pro la prețul său propriu, cu taxa obișnuită și marja, ca în Aplicația. n Fotografii costă n Un câmp pe care un generator nu îl ia este scos mai degrabă decât refuzat; generatorul standard utilizează doar promptul.

câmpuluiTipulnecesarăDescrierea
modelStringulDaUn generator ID, cum ar fi nano-banana.
promptStringulDaSe folosesc doar primele 2000 de caractere.
nîntreguluinu1 până la 4.Default 1.De asemenea acceptat ca num_images.
sizeStringulnuUn aspect proporțional, precum "16:9", sau o dimensiune OpenAI cum ar fi "1792x1024", care devine cea mai apropiată de 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 și 4:5. "auto" Lăsați-l înapoi la generator
aspect_ratioStringulnuAcelaşi lucru ca sizeȘi câștigă dacă ambele sunt trimise.
qualityStringulnugeneratoare, cum ar fi "low", "medium" sau "high".
negative_promptStringulnuCe să lăsăm afară.
output_formatStringulnu"png", "jpeg" sau "webp".
response_formatStringulnu"url" (defaultul) sau "b64_json".
image_urlStringulnuO imagine pentru a începe de la: un https:// o legătură de cel mult 4096 de caractere fără nume de utilizator sau parolă sau data:image/…;base64 URL (PNG, JPEG, WebP sau GIF; nu SVG). editcerută de către cei cu requires_image_url.

resolution nu este utilizat: fiecare generator își face dimensiunea proprie. url, fiecare imagine este încărcată la un gazdă public Blossom și obțineți link-ul său (unele generatoare dau înapoi doar un link propriu, care este transmis). Ce poate vedea foculCu b64_json imaginea se întoarce în răspuns şi nu este încărcată niciodată. data: Url în image_url Se verifică în acelaşi mod ca şi Edit și încărcat la Blossom mai întâi, astfel încât generatorul să o poată ridica; este șters din nou dacă cererea nu reușește să fie descărcată.

Dacă unele dintre n imaginile nu reușesc, obțineți cele care au funcționat, sunt percepute numai pentru cele (plus orice furnizor facturat în ciuda eșecului), și nymbot.failed spune câte sunt lipsă. Dacă toate eșuează, cererea se întoarce 502.

răspuns

{
  "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 }
}
StatutulCând
400fără grabă; n 1 până la 4 (invalid_valueo dimensiune slabă (invalid_size) sau imaginea (invalid_image, invalid_image_urlUn model care există, dar nu este un generator de imagini (invalid_model); o imagine pentru un generator care nu poate edita (edit_unsupported); nici o imagine pentru cineva care are nevoie de ea (image_required).
402Bilantul nu poate acoperi fiecare imagine solicitată.
404Nu există nici un model cu acest nume (model_not_found).
502generatorul a eșuat (upstream_errorNimic nu este taxat decât dacă furnizorul a facturat pentru încercare; atunci eroarea a fost charged_sats.
503Imaginile nu pot fi găzduite în acest moment (media_hosting_unavailable). b64_json încă funcţionează.

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

Editare imagini

Modifică o imagine pe care o încărcați, urmând o invitație. Acesta este punctul final de editare al OpenAI, astfel încât OpenAI SDK-urile images.edit funcţionează aşa cum este. numai generatoarele Pro cu edit În lista de modele, acceptați.

POST https://nymbot.ai/api/v1/images/edits — necesită o cheie API, sau O plată Lightning la cerereCorpul este multipart/form-dataPână la 32 MB.

câmpuluiTipulnecesarăDescrierea
imagefişieruluiDaImaginea pentru editare: PNG, JPEG, WebP sau GIF, până la 20 MB. image[]Primul este folosit.
promptStringulDaCe să schimbi.
modelStringulDaUn generator cu edit.
nîntreguluinu1 până la 4.
size
aspect_ratio
quality
negative_prompt
output_format
StringulnuÎn ceea ce priveşte generaţia.
response_formatStringulnu"b64_json" (default aici) sau "url".

Imaginea pe care o încărcați este verificată ca fiind un PNG, JPEG, WebP sau GIF bine format, trimisă ca tip real și pusă pe un gazdă public Blossom, deoarece generatoarele își colectează intrarea prin link. Tratează-l ca public. Dacă editarea eșuează și nimic nu este încărcat, copia găzduită este ștersă din nou. Răspunsul are aceeași formă ca și pentru generare. Prețul este prețul generatorului, care pentru unii generatori include o taxă pentru imaginea de intrare.

răspuns

{
  "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 }
}
StatutulCând
400Nici o imagine sau prompt, un fișier care nu este o imagine (invalid_image, sau un generator care nu poate edita (edit_unsupported).
413Imaginea este mai mare de 20 MB (file_too_large), sau întreaga cerere de peste 32 MB.
503Imaginea nu poate fi găzduită în acest 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"));

VIDEO

Un videoclip durează câteva minute, așa că rulează în fundal. îl trimiteți, obțineți imediat un ID și întrebați despre ID până când se termină.

POST https://nymbot.ai/api/v1/videos — necesită o cheie API, sau O plată Lightning la cerereÎntoarcerea 202.

câmpuluiTipulnecesarăDescrierea
modelStringulDaUn generator de video ID de la GET /api/v1/models?type=videoAşa cum veo.
promptStringulDaCe ar trebui să se întâmple.
durationNumăr sau stringnuLungime în secunde, mai mult de 0 și până la 60. Folosit numai de generatoare care vă permit să alegeți lungimea; ceilalți fac lungimea lor obișnuită, care este ceea ce seconds Răspunsul și prețul sunt următoarele.
aspect_ratioStringulnuAşa cum "16:9" sau "9:16"O dimensiune precum "1280x720" devine cel mai apropiat raport.
resolution
quality
StringulnuUnul dintre generatoarele resolutions În lista de modele, cum ar fi "720p" sau "1080p"Se stabilește prețul. orice altceva este refuzat cu unsupported_resolution.
image_urlStringulnuO imagine pentru a începe de la: un https:// Link sau a data:image/… URL, care este încărcat mai întâi într-un gazdă public Blossom. requires_image_url.

Prețul este fix atunci când trimiteți, de la generator, rezoluție și lungime, deci este perceput din soldul dvs. Pro de îndată ce furnizorul acceptă munca și este afișat ca cost, estimated_cost şi nymbotDacă furnizorul refuză munca, nu se percepe nimic. Dacă renderul nu reușește mai târziu sau dacă clipul finit nu poate fi stocat și furnizorul nu a facturat pentru el, taxa este rambursată o dată, automat. Un render care continuă după o oră este renunțat și își păstrează taxa, deoarece furnizorul percepe un render odată ce îl acceptă. O rambursare returnează creditele, dar nu reduce numărul cheltuielilor cheii.

Răspunsul meu (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 Începe ca in_progresssau completed Videoclipul a fost deja în data Generatorul a revenit imediat.

Verificarea pe un video

GET https://nymbot.ai/api/v1/videos/{id} - are nevoie de o cheie aparținând nimului care a trimis-o. o cheie care a atins capul său poate verifica în continuare.

Ea răspunde 202 În timp ce videoclipul este realizat și 200 o dată terminată sau a eșuat. întrebați la fiecare 5 până la 10 secunde. Fiecare verificare întreabă furnizorul o dată și răspunde imediat; nu așteaptă niciodată videoclipul. GET /api/v1/videos enumeră ultimele 50 de locuri de muncă ale cheii ca {"object": "list", "data": […]}.

Răspunsul meu (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 este in_progress, completed sau failedO slujbă eșuată duce error ({"code": "generation_failed", "message": …}Dacă a fost rambursată, cost 0 și nymbot Adăugați refunded_credits şi refunded_satsVideoclipul finit este pe un gazdă public Blossom, ca imaginile generate.

StatutulCând
400Nu există prompt; o durată dincolo de 0 până la 60 (invalid_value); o rezoluție pe care generatorul nu o oferă (unsupported_resolution); nici o imagine pentru un generator care are nevoie de unul (image_required(în cazul în care nu este necesar să se utilizeze un dispozitiv video)invalid_model).
402Echilibrul Pro nu poate acoperi videoclipul.
404Nu există un astfel de generator (model_not_found, sau nici un loc de muncă de către acel id pentru nimm, sau este mai mare de 24 de ore (video_not_found).
429Citește și: 10 filme care au fost filmate în România (video_jobs_limitVerificați-le și trimiteți mai multe odată ce unul se termină.
502Generatorul a refuzat munca.Nimic nu este taxat decât dacă furnizorul a facturat pentru ea.
503Videoclipurile nu pot fi livrate sau stocate în acest 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);

Textul discursului

Citește textul cu voce tare și returnează fișierul audio în sine, nu un link. audio.speech.create în OpenAI SDKs funcționează.

POST https://nymbot.ai/api/v1/audio/speech — necesită o cheie API, sau O plată Lightning la cerere.

câmpuluiTipulnecesarăDescrierea
modelStringulnuUn model de vorbire din Lista modelelor audioDefault: Vocea standard @cf/myshell-ai/melotts. aura-2 Este vorba despre Deepgram Aura 2.
inputStringulDaTextul de citit: până la 800 de caractere pentru vocea standard, 2.000 pentru Aura 2.
voiceStringulnuUn ID vocal de la Lista de vociun vorbitor de aură, cum ar fi luna (sau aura-2-luna-en, sau o limbă MeloTTS (en, es, fr, zhOpenAI nume vocale, cum ar fi alloy sunt acceptate și dau vocea implicită a modelului.
languageStringulnuUn cod de limbă precum esFără o voce, selectează una pentru acea limbă. o voce care vorbește o altă limbă returnează 422 voice_language_mismatch, și o limbă pentru care modelul nu are voce 422 unsupported_language.
response_formatStringulnuVocea standard se întoarce mp3 Aura 2 se întoarce mp3 (în cazul în care defectul este opus, aac, flac, wav sau pcm.
speedNumărnuacceptată şi ignorată.

Vocea standard costă 3 credite standard (30 sats) pe cerere, ca în aplicație. Aura 2 este Pro, prețuit după caracterele pe care le trimiteți. Content-TypeCostul este în X-Nymbot-Cost-Sats Dacă modelul de vorbire eșuează, nimic nu este încărcat.

răspuns

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

(audio bytes)
StatutulCând
400Nu există intrare; intrarea depășește limita modelului (input_too_long); un format pe care modelul nu îl poate produce (unsupported_response_formato voce necunoscută (invalid_voice(în cazul în care modelul nu este un model de vorbire)invalid_model).
422Vocea nu vorbește limba dată, sau modelul nu are nici o voce pentru ea.
502Modelul de vorbire a eșuat.Nimic nu este taxat.

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

Modele audio și voci

Două liste publice pentru a alege un model de vorbire și voce, sau un model de transcriere.Există 41 vorbitori de limba engleză Aura 2 și patru limbi MeloTTS.

GET https://nymbot.ai/api/v1/audio/models Nu este nevoie de cheie.

GET https://nymbot.ai/api/v1/audio/voices?language=en Nu este nevoie de cheie.

câmpuluiTipulnecesarăDescrierea
languageÎntrebări (Query)nuDoar voci pentru această limbă.
modelÎntrebări (Query)nuNumai voci pentru acest model.

Răspunsuri (Voci)

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

Răspunsurile la listele de modele {"object": "list", "data": {"tts": […], "stt": […]}}Fiecare model de vorbire oferă echilibrul său, prețul, max_input_chars, response_formats, languages şi default_voice· modelul de transcriere dă aliasele sale, max_file_bytes, max_seconds, formate și preț pe 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);

Discursul în text

Transformă o înregistrare în text cu Whisper. Acesta este punctul final de transcriere al OpenAI, deci audio.transcriptions.create Lucrează .

POST https://nymbot.ai/api/v1/audio/transcriptions — necesită o cheie API, sau O plată Lightning la cerereCorpul este multipart/form-data.

câmpuluiTipulnecesarăDescrierea
filefişieruluiDaÎnregistrarea, de la 256 de biți la 25 MB și până la 30 de minute: WAV, WebM, MP4 sau M4A, Ogg sau Opus, MP3 și celelalte formate Whisper citește.
modelStringulnudefectă whisperCe este Whisper Large v3 Turbo? whisper-1, whisper-large-v3-turbo şi @cf/openai/whisper-large-v3-turbo Înseamnă acelaşi lucru.
languageStringulnuLimbile vorbite, cum ar fi enDetectat dacă a fost lăsat afară.
promptStringulnuCuvinte sau ortografii de așteptat, cum ar fi nume. Se folosesc doar primele 1000 de caractere.
response_formatStringulnujson (în cazul în care defectul este text, srt, vtt sau verbose_json.

Pentru fișierele WAV, WebM, MP4 și Ogg, lungimea este citită din fișier înainte de a rula ceva, deci o înregistrare de peste 30 de minute este refuzată în față (cu 3 secunde). Lungimea unui fișier WAV provine din rata de eșantionare, canale și dimensiunea eșantionului. Lungimea altor formate, cum ar fi MP3, nu poate fi citită în față, așa că acestea sunt limitate de dimensiune: la cea mai mică bitrate Nymbot presupune, 8 kbps, 30 de minute este de 1,8 MB, iar un fișier mai mare într-un astfel de format este refuzat cu 413 audio_too_long trimite înregistrări mai lungi, cum ar fi WAV, WebM, MP4 sau Ogg. Dacă Whisper raportează mai mult de 30 de minute oricum, cererea este respinsă cu 413 audio_too_long, și din moment ce Whisper a rulat, 30 de minute sunt încărcate.

Plătiți pentru lungimea audio, rotunjită până la a doua: cea mai lungă lungime citită din fișier, lungimea rapoartelor Whisper și cea mai mică dimensiune a fișierului permite, la prețul per minut al Whisper cu taxa obișnuită și marja, și cel puțin 0,05 credit o cerere. 402 În aplicație, transcrierea unui mesaj vocal poate fi gratuită; pe API este întotdeauna încărcată.

răspuns

{
  "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 întoarce textul simplu, srt şi vtt Întoarceți subtitrările și verbose_json adaugă limbajul, durata și segmentele temporizate. Pentru cele trei care nu sunt JSON, costul este în anteturi.

StatutulCând
400Nici un fișier, nici un fișier fără audio utilizabil (invalid_audio, un format necunoscut, sau un model care nu este un model de transcriere (invalid_model).
402Nici echilibrul nu o poate acoperi.
413Fișierul este mai mare de 25 MB (file_too_largeînregistrarea de peste 30 de minute sau, într-un format a cărui lungime nu poate fi citită în față, de peste 1,8 MB (audio_too_long).
502Şoptirea nu a putut procesa audio-ul.

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

Traducerea discursului în engleză

POST https://nymbot.ai/api/v1/audio/translations — necesită o cheie API, sau O plată Lightning la cerereCorpul este multipart/form-data.

Același lucru ca și transcrierea, cu aceleași câmpuri în afară de language, limitele și prețul, dar textul se întoarce în limba engleză, indiferent de limba vorbită. 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);

Îmbrăcăminte

Convertește textul în vectori pentru căutare, grupare și deduplicare.Modelele rulează pe Cloudflare și cheltuiește soldul standard.

POST https://nymbot.ai/api/v1/embeddings — necesită o cheie API, sau O plată Lightning la cerere.

câmpuluiTipulnecesarăDescrierea
modelStringulDaUn model încorporat de la GET /api/v1/models?type=embedding.
inputString sau array de stringuriDaÎn cazul în care este necesar să se înregistreze un număr mai mare de 100 de puncte, nu este necesar să se înregistreze un număr mai mare de 100 de puncte (token_input_unsupportedFiecare intrare trebuie sa se potriveasca cu modelul context_length, numărat ca aproximativ patru byte un token.
encoding_formatStringulnufloat (defaultul) sau base64 (până la 32 de bucăți mici).
dimensionsîntreguluinudimensiunea modelului propriu, sau pentru un model cu supported_dimensions Unul dintre ele; vectorul este apoi scurtat și normalizat.
ModelulDimensiuniContextul
@cf/baai/bge-m31024 în mai multe limbi8.192 articole despre
@cf/qwen/qwen3-embedding-0.6b1024 în mai multe limbi8.192 articole despre
@cf/baai/bge-large-en-v1.51024 în engleză512 articole despre
@cf/baai/bge-base-en-v1.5768 în engleză512 articole despre
@cf/baai/bge-small-en-v1.5384 în engleză512 articole despre

Lista de modele este sursa adevărului pentru care sunt disponibile și ce costă; EmbeddingGemma de la Google, cu vectori mai scurți la cerere, apare acolo și atunci când catalogul are un preț pentru el.

răspuns

{
  "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 }
}
StatutulCând
400Nu există nici o intrare sau un singur gol; token array (token_input_unsupported(mai mult de 100 de intrări)too_many_inputs); o intrare mai lungă decât modelul ia (input_too_longo dimensiune pe care modelul nu o poate da (unsupported_dimensions).
402Balanța standard este prea mică. Embeddings nu utilizează niciodată balanța Pro.
404Nici un model cu acest nume.
502Modelul a eșuat.Nimic nu este taxat.

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