Kennisbank Ontwikkelaars
Afbeeldingen, audio en embeddings
De generatoren van de app, en de bouwstenen voor het zoeken: foto's, video's, spraak, transcripties en embeddings, elk gefactureerd per gebruik van uw saldo.
Deze pagina is voor het gemak automatisch vertaald. Het Engelse origineel is de versie die van toepassing is.
Genereren van beelden
Maak één tot vier foto's van een prompt en retourneert ze wanneer ze klaar zijn. ?image In de app.
POST https://nymbot.ai/api/v1/images/generations — een API-sleutel nodig heeft, of Een Lightning betaling per aanvraag.
IDS komt van GET /api/v1/models?type=imageDe standaard generator,
@cf/black-forest-labs/flux-1-schnell, kost een flat 5 standaard credits (50 sats) een foto. Elke andere generator besteedt Pro credits tegen zijn eigen prijs, met de gebruikelijke vergoeding en marge, zoals in De app. n Foto's kosten
n Een veld dat een generator niet neemt, wordt in plaats van geweigerd weggelaten; de standaardgenerator gebruikt alleen de prompt.
| Het veld | type | vereist | Beschrijving |
|---|---|---|---|
model | String | Ja | Een generator id, zoals nano-banana. |
prompt | String | Ja | Wat te tekenen: Alleen de eerste 2000 tekens worden gebruikt. |
n | integer | niet | 1 tot 4. standaard 1. ook geaccepteerd als num_images. |
size | String | niet | Een aspect ratio zoals "16:9", of een openAI-grootte zoals "1792x1024", die het dichtstbijzijnde wordt van 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 en 4:5. "auto" Geef het dan aan de generator. |
aspect_ratio | String | niet | Hetzelfde als size, en wint als beide worden verzonden. |
quality | String | niet | Generator-specifieke, zoals "low", "medium" of "high". |
negative_prompt | String | niet | Wat te verlaten. |
output_format | String | niet | "png", "jpeg" of "webp". |
response_format | String | niet | "url" (de default) of "b64_json". |
image_url | String | niet | Een foto om te beginnen met: een https:// een link van maximaal 4.096 tekens zonder gebruikersnaam of wachtwoord, of een data:image/…;base64 URL (PNG, JPEG, WebP of GIF; niet SVG). Alleen voor generatoren met editvereist door degenen met requires_image_url. |
resolution wordt niet gebruikt: elke generator maakt zijn eigen grootte. url, elke afbeelding wordt geüpload naar een publieke Blossom-host en je krijgt de link (een paar generatoren geven alleen een link terug van hun eigen, die wordt doorgegeven). Wat het vuur kan zien. met
b64_json de afbeelding wordt teruggestuurd in de reactie en wordt nooit geüpload. data: URL in image_url wordt op dezelfde manier gecontroleerd als een
Edit en geüpload naar Blossom eerst, zodat de generator het kan ophalen; het wordt opnieuw verwijderd als de aanvraag mislukt onbetaald.
Als sommige van de n foto's falen, je krijgt degenen die werkten, worden alleen betaald voor die (plus elke aanbieder in rekening gebracht ondanks het falen), en nymbot.failed zegt hoeveel er ontbreken. als ze allemaal falen, wordt de aanvraag 502.
Reactie
{
"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 }
}
| Status | Wanneer |
|---|---|
400 | niet snel; n 1 tot en met 4 (invalid_valueEen slechte grootte (invalid_size) of afbeelding (invalid_image, invalid_image_url); een model dat bestaat, maar geen beeldgenerator is (invalid_model); een afbeelding voor een generator die niet kan bewerken (edit_unsupported); geen foto voor iemand die het nodig heeft (image_required). |
402 | De balans kan niet alle gevraagde foto's dekken. |
404 | Geen model met deze naam (model_not_found). |
502 | De generator mislukt (upstream_errorEr wordt niets in rekening gebracht tenzij de provider voor de poging heeft gefactureerd; dan heeft de fout charged_sats. |
503 | Foto's kunnen op dit moment niet worden gehost (media_hosting_unavailable). b64_json nog steeds werkt. |
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);
Beelden bewerken
Wijzigt een afbeelding die u uploadt, na een aanmaning.Dit is het bewerkingsendpunt van OpenAI, dus de OpenAI SDK's images.edit werkt zoals het is. Alleen Pro-generatoren met edit in de modellijst accepteren.
POST https://nymbot.ai/api/v1/images/edits — een API-sleutel nodig heeft, of Een Lightning betaling per aanvraagHet lichaam is multipart/form-dataTot wel 32 MB.
| Het veld | type | vereist | Beschrijving |
|---|---|---|---|
image | bestand | Ja | De afbeelding om te bewerken: PNG, JPEG, WebP of GIF, tot 20 MB. image[]De eerste wordt gebruikt. |
prompt | String | Ja | Wat te veranderen. |
model | String | Ja | Een generator met edit. |
n | integer | niet | 1 tot 4. |
sizeaspect_ratioqualitynegative_promptoutput_format | String | niet | Wat generatie betreft. |
response_format | String | niet | "b64_json" (de standaard hier) of "url". |
De afbeelding die u uploadt wordt gecontroleerd op een goed gevormde PNG, JPEG, WebP of GIF, verzonden als zijn echte type, en op een publieke Blossom-host geplaatst, omdat de generatoren hun input ophalen via link. Behandel het als publiek. Als de bewerking faalt en niets wordt geladen, wordt de gehost kopie opnieuw verwijderd. De reactie heeft dezelfde vorm als voor generatie. De prijs is de prijs van de generator, die voor sommige generatoren een vergoeding voor de inputfoto omvat.
Reactie
{
"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 }
}
| Status | Wanneer |
|---|---|
400 | Geen afbeelding of prompt, een bestand dat geen afbeelding (invalid_image) of een generator die niet kan bewerken (edit_unsupported). |
413 | De afbeelding is meer dan 20 MB (file_too_large), of het volledige verzoek van meer dan 32 MB. |
503 | De foto kan op dit moment niet worden gehost (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’s
Een video duurt minuten, dus het loopt in de achtergrond. U stuurt het, krijgt onmiddellijk een id, en vraagt over de id totdat het is gedaan.
POST https://nymbot.ai/api/v1/videos — een API-sleutel nodig heeft, of Een Lightning betaling per aanvraagTerugkeren 202.
| Het veld | type | vereist | Beschrijving |
|---|---|---|---|
model | String | Ja | Een videogenerator id van GET /api/v1/models?type=video, zoals veo. |
prompt | String | Ja | Wat zou moeten gebeuren. |
duration | Aantal of string | niet | Lengte in seconden, meer dan 0 en maximaal 60. Gebruikt alleen door generatoren die u toestaan om de lengte te kiezen; de anderen maken hun gebruikelijke lengte, dat is wat seconds In de reactie en de prijs volgt. |
aspect_ratio | String | niet | Zoals "16:9" of "9:16"Een grootte zoals "1280x720" Het wordt de dichtstbijzijnde verhouding. |
resolutionquality | String | niet | Een van de generatoren resolutions In de modellijst, zoals "720p" of "1080p"Het bepaalt de prijs.Alles anders wordt geweigerd met unsupported_resolution. |
image_url | String | niet | Een foto om te beginnen met: een https:// Link of een data:image/… URL, die eerst wordt geüpload naar een publieke Blossom-host. requires_image_url. |
De prijs is vast wanneer u het indient, van de generator, resolutie en lengte, dus het wordt in rekening gebracht van uw Pro-saldo zodra de provider de baan accepteert, en wordt weergegeven als
cost, estimated_cost En nymbotAls de leverancier de taak weigert, wordt er niets in rekening gebracht. Als de rendering later mislukt, of de afgewerkte clip niet kan worden opgeslagen en de leverancier er niet voor heeft gefactureerd, wordt de kosten eenmaal, automatisch, terugbetaald. Een rendering die nog steeds na een uur gaat, wordt opgehouden en behoudt zijn kosten, omdat de leverancier een rendering in rekening brengt zodra deze wordt geaccepteerd.
Reacties op (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 Begin als in_progress, of completed Met de video al in data De generator heeft hem meteen teruggestuurd.
Controleer een video
GET https://nymbot.ai/api/v1/videos/{id} - heeft een sleutel nodig die behoort tot de nym die deze heeft ingediend.
Het antwoordt 202 Terwijl de video wordt gemaakt en 200 Vraag elke 5 tot 10 seconden. Elke check vraagt de provider een keer en beantwoordt meteen; het wacht nooit op de video. Een baan wordt 24 uur bewaard nadat het is ingediend.
GET /api/v1/videos lijst de laatste 50 banen van de sleutel als
{"object": "list", "data": […]}.
Beantwoorden (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 is in_progress, completed of failedEen mislukte baan draagt error ({"code": "generation_failed", "message": …}Als het terugbetaald wordt, cost Het is 0 en nymbot toevoegen
refunded_credits En refunded_satsDe afgewerkte video is op een publieke Blossom-host, zoals gegenereerde afbeeldingen.
| Status | Wanneer |
|---|---|
400 | Geen spoed; een duur buiten 0 tot 60 (invalid_value); een resolutie die de generator niet biedt (unsupported_resolution); geen foto voor een generator die een behoefte heeft (image_required); een model dat geen videogenerator is (invalid_model). |
402 | De Pro-balans kan de video niet dekken. |
404 | Geen generator (model_not_found), of geen baan door die id voor uw nym, of het is meer dan 24 uur oud (video_not_found). |
429 | Uw nym heeft al 10 video's weergegeven (video_jobs_limitControleer ze en stuur meer eenmaal een eindigt. |
502 | De generator weigerde de baan. er wordt niets in rekening gebracht tenzij de provider daarvoor heeft gefactureerd. |
503 | Video's kunnen op dit moment niet worden geleverd of opgeslagen (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);
Tekst tot toespraak
Leest tekst hardop en retourneert het audiobestand zelf, niet een link. audio.speech.create In de OpenAI SDKs werkt.
POST https://nymbot.ai/api/v1/audio/speech — een API-sleutel nodig heeft, of Een Lightning betaling per aanvraag.
| Het veld | type | vereist | Beschrijving |
|---|---|---|---|
model | String | niet | Een speechmodel van Lijst van audio modellenDefault: de standaard stem, @cf/myshell-ai/melotts. aura-2 Het is Deepgram Aura 2. |
input | String | Ja | De tekst om te lezen: maximaal 800 tekens voor de standaard stem, 2.000 voor Aura 2. |
voice | String | niet | Een voice id van Lijst van stemmenEen Aura speaker zoals luna (of aura-2-luna-en, of een MeloTTS taal (en, es, fr, zhOpenAI stemnamen zoals alloy worden geaccepteerd en geven de standaard stem van het model. |
language | String | niet | Een taalcode zoals esZonder een stem, kiest het een voor die taal. Een stem die een andere taal spreekt, keert terug 422 voice_language_mismatchen een taal waar het model geen stem voor heeft 422 unsupported_language. |
response_format | String | niet | De standaard stem keert terug mp3 Aura 2 keert terug mp3 (Het is een defect) opus, aac, flac, wav of pcm. |
speed | Aantal | niet | Geaccepteerd en genegeerd. |
De standaard stem kost een flat 3 standaard credits (30 sats) per verzoek, zoals in de app. Aura 2 is Pro, geprijsd op basis van de tekens die u verzendt.
Content-TypeDe kosten liggen in de X-Nymbot-Cost-Sats Als het spraakmodel mislukt, wordt er niets in rekening gebracht.
Reactie
HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Nymbot-Cost-Sats: 4.2
X-Nymbot-Balance-Sats: 41055.6
(audio bytes)
| Status | Wanneer |
|---|---|
400 | Geen input; input boven de limiet van het model (input_too_long); een formaat dat het model niet kan produceren (unsupported_response_formatEen onbekende stem (invalid_voice); een model dat geen spraakmodel is (invalid_model). |
422 | De stem spreekt de gegeven taal niet, of het model heeft er geen stem voor. |
502 | Het speechmodel mislukt. er wordt niets opgelegd. |
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()));
Audio modellen en stemmen
Twee publieke lijsten voor het kiezen van een spraakmodel en stem, of een transcriptiemodel.
GET https://nymbot.ai/api/v1/audio/models Geen sleutel nodig.
GET https://nymbot.ai/api/v1/audio/voices?language=en Geen sleutel nodig.
| Het veld | type | vereist | Beschrijving |
|---|---|---|---|
language | De string (query) | niet | Alleen stemmen voor deze taal. |
model | De string (query) | niet | Alleen stemmen voor dit model. |
Reacties (met stemmen)
{
"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 }
]
}
De modellen lijst antwoorden {"object": "list", "data": {"tts": […], "stt": […]}}Elk spraakmodel geeft zijn balans, prijs, max_input_chars,
response_formats, languages En default_voicehet transcriptiemodel geeft zijn aliassen, max_file_bytes, max_seconds, formaten en prijs per minuut.
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);
Spreekwoord naar tekst
Wordt een opname omgezet in tekst met Whisper. Dit is het transcriptie-endpunt van OpenAI, dus
audio.transcriptions.create Werken aan.
POST https://nymbot.ai/api/v1/audio/transcriptions — een API-sleutel nodig heeft, of Een Lightning betaling per aanvraagHet lichaam is multipart/form-data.
| Het veld | type | vereist | Beschrijving |
|---|---|---|---|
file | bestand | Ja | De opname, van 256 bytes tot 25 MB en tot 30 minuten: WAV, WebM, MP4 of M4A, Ogg of Opus, MP3 en de andere formaten Whisper leest. |
model | String | niet | Default whisperDit is de Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo En @cf/openai/whisper-large-v3-turbo Dat betekent hetzelfde. |
language | String | niet | De gesproken taal, zoals enGeïdentificeerd als verlaten. |
prompt | String | niet | Woorden of spelling te verwachten, zoals namen. Alleen de eerste 1000 tekens worden gebruikt. |
response_format | String | niet | json (Het is een defect) text, srt, vtt of verbose_json. |
Voor WAV, WebM, MP4 en Ogg-bestanden wordt de lengte gelezen uit het bestand voordat er iets wordt uitgevoerd, dus een opname van meer dan 30 minuten wordt vooruit geweigerd (met 3 seconden 'gratie). De lengte van een WAV-bestand komt van zijn steekproefpercentage, kanalen en steekproefgrootte. De lengte van andere formaten, zoals MP3, kan niet vooruit gelezen worden, dus ze zijn beperkt door grootte: bij de laagste bitrate Nymbot veronderstelt, 8 kbps, 30 minuten is 1,8 MB, en een groter bestand in zo'n formaat wordt geweigerd met 413
audio_too_long Stuur langere opnames als WAV, WebM, MP4 of Ogg. Als Whisper dan meer dan 30 minuten meldt, wordt het verzoek afgewezen met
413 audio_too_long, en aangezien Whisper heeft uitgevoerd, worden 30 minuten in rekening gebracht.
U betaalt voor de lengte van de audio, afgerond tot de tweede: de langste van de lengte gelezen uit het bestand, de lengte Whisper rapporten, en de minste de grootte van het bestand toelaat, op Whisper's per-minute prijs met de gebruikelijke vergoeding en marge, en ten minste 0.05 krediet een verzoek. 402 geeft wat elke balans nodig zou hebben.In de app kan het transcriberen van een spraakbericht gratis zijn; op de API wordt het altijd geladen.Als Whisper faalt, wordt niets geladen.
Reactie
{
"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 Een duidelijke tekst weergeven, srt En vtt Subtitels teruggeven, en
verbose_json voegt de taal, duur en timed segmenten. Voor de drie die niet JSON zijn, is de kosten in de kopjes.
| Status | Wanneer |
|---|---|
400 | Geen bestand, een bestand zonder bruikbare audio (invalid_audio, een onbekend formaat, of een model dat geen transcriptiemodel is (invalid_model). |
402 | Ook het evenwicht kan het niet bedekken. |
413 | Het bestand is groter dan 25 MB (file_too_large) of de opname van meer dan 30 minuten, of, in een formaat waarvan de lengte niet naar voren kan worden gelezen, meer dan 1,8 MB (audio_too_long). |
502 | Whisper kon de audio niet verwerken. |
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);
Vertaling van de toespraak naar het Engels
POST https://nymbot.ai/api/v1/audio/translations — een API-sleutel nodig heeft, of Een Lightning betaling per aanvraagHet lichaam is multipart/form-data.
Hetzelfde als transcriptie, met dezelfde velden behalve language, limieten en prijs, maar de tekst komt terug in het Engels, ongeacht de taal die werd gesproken. 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
Wordt tekst omgezet in vectoren voor zoeken, clustering en deduplicatie.De modellen draaien op Cloudflare en besteden de standaardbalans.
POST https://nymbot.ai/api/v1/embeddings — een API-sleutel nodig heeft, of Een Lightning betaling per aanvraag.
| Het veld | type | vereist | Beschrijving |
|---|---|---|---|
model | String | Ja | Een embedded model van GET /api/v1/models?type=embedding. |
input | string of array van strings | Ja | De tekst om in te voegen, maximaal 100 niet-leegste strengen. token-array's worden geweigerd (token_input_unsupportedElke input moet overeenkomen met het model context_length, geteld als ongeveer vier bytes een token. |
encoding_format | String | niet | float (de default) of base64 (Little-endian 32-bits vloeistof op het scherm) |
dimensions | integer | niet | De grootte van het model zelf, of voor een model met supported_dimensions een van die; de vector wordt dan verkort en genormaliseerd. |
| model | Dimensies | context |
|---|---|---|
@cf/baai/bge-m3 | 1024 in vele talen | 8.192 Tokens |
@cf/qwen/qwen3-embedding-0.6b | 1024 in vele talen | 8.192 Tokens |
@cf/baai/bge-large-en-v1.5 | 1024 in het Engels | 512 Tokens |
@cf/baai/bge-base-en-v1.5 | 768, Engels | 512 Tokens |
@cf/baai/bge-small-en-v1.5 | 384 Engels | 512 Tokens |
De modellijst is de bron van waarheid waarvoor ze beschikbaar zijn en wat ze kosten; Google's EmbeddingGemma, met kortere vectoren op aanvraag, verschijnt er ook wanneer de catalogus er een prijs voor heeft.
Reactie
{
"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 }
}
| Status | Wanneer |
|---|---|
400 | Geen input of een lege; token array (token_input_unsupported); meer dan 100 ingangen (too_many_inputs); een invoer langer dan het model neemt (input_too_long); een grootte die het model niet kan geven (unsupported_dimensions). |
402 | De standaardbalans is te laag. Embeddings gebruiken nooit de Pro-balans. |
404 | Geen model met die naam. |
502 | Het model mislukt. er wordt niets in rekening gebracht. |
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);