Kennisbasis Ontwikkelaar
Foto's, audio en embeddings
Die generators van die app, en die boublokke vir soek: foto's, video's, spraak, transkripsies en embeddings, elkeen gefactureer per gebruik van jou balans.
Hierdie bladsy is gerieflikheidshalwe masjienvertaal. Die Engelse oorspronklike is die weergawe wat van toepassing is.
Die generering van beelde
Maak een tot vier foto's van 'n oproep en gee hulle terug wanneer hulle gedoen is. ?image In die app.
POST https://nymbot.ai/api/v1/images/generations - 'n API sleutel benodig, of 'N Lightning betaling op versoek.
Die IDA kom van GET /api/v1/models?type=imageDie standaard generator,
@cf/black-forest-labs/flux-1-schnell, kos 'n flat 5 standaard krediete (50 sats) 'n prentjie. Elke ander generator spandeer Pro krediete op sy eie prys, met die gebruiklike fooi en marge, soos in Die app. n Foto’s koste
n 'N veld wat 'n generator nie neem nie, word afgeneem eerder as geweier; die standaardgenerator gebruik slegs die oproep.
| Die veld | Die tipe | vereis | Beskrywing |
|---|---|---|---|
model | String | Ja | 'N Generator ID, soos nano-banana. |
prompt | String | Ja | Wat om te teken.Slegs die eerste 2000 karakters word gebruik. |
n | Integraal | nie | 1 tot 4. standaard 1. ook aanvaar as num_images. |
size | String | nie | 'N Aspek verhouding soos "16:9", of 'n OpenAI grootte soos "1792x1024", wat die naaste van 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 en 4:5 word. "auto" Stuur dit na die generator. |
aspect_ratio | String | nie | Die dieselfde as sizeen wen as beide gestuur word. |
quality | String | nie | Generator spesifieke, soos "low", "medium" of "high". |
negative_prompt | String | nie | Wat om uit te laat. |
output_format | String | nie | "png", "jpeg" of "webp". |
response_format | String | nie | "url" (die verval) of "b64_json". |
image_url | String | nie | 'n Foto om te begin met: 'n https:// 'n skakel van nie meer as 4,096 karakters met geen gebruikersnaam of wagwoord daarin nie, of 'n data:image/…;base64 URL (PNG, JPEG, WebP of GIF; nie SVG nie). editDie vereistes van diegene wat requires_image_url. |
resolution nie gebruik word nie: elke generator maak sy eie grootte. url, elke prentjie word geüpload na 'n openbare Blossom-host en jy kry sy skakel (slegs 'n paar generators gee slegs 'n skakel van hul eie terug, wat oorgedra word). Wat die vuur kan sienmet
b64_json die foto kom terug in die reaksie en word nooit geüpload nie. 'n beeld gestuur as 'n data: URL in die image_url Dit word op dieselfde manier as 'n
Edit en eerste oplaai na Blossom sodat die generator dit kan opneem; dit word weer verwyder as die versoek misluk.
As sommige van die n foto's misluk, jy kry diegene wat gewerk het, word slegs vir diegene (plus enige die verskaffer gefactureer ten spyte van mislukking), en nymbot.failed sê hoeveel ontbreek. as almal misluk, sal die versoek 502.
Reaksies
{
"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 | nie vinnig nie; n van 1 tot 4 (invalid_value(Genoeg van die grootte)invalid_size• Die foto (invalid_image, invalid_image_url); 'n model wat bestaan, maar nie 'n beeldgenerator is nie (invalid_model); 'n beeld vir 'n generator wat nie kan bewerk nie (edit_unsupported); geen foto vir een wat dit nodig het nie (image_required). |
402 | Die balans kan nie elke foto wat gevra word, dek nie. |
404 | Geen model met hierdie naam (model_not_found). |
502 | Die generator misluk (upstream_errorNiks word in rekening gestel tenzij die verskaffer vir die poging in rekening gestel het nie; dan het die fout charged_sats. |
503 | Foto's kan nie op die oomblik gehost word nie (media_hosting_unavailable). b64_json werk nog steeds. |
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);
Redigering van beelde
Verander 'n prentjie wat jy oplaai, na 'n opdrag.Dit is OpenAI se redigering eindpunt, so die OpenAI SDK's images.edit werk soos dit is. slegs Pro generators met edit in die model lys aanvaar dit.
POST https://nymbot.ai/api/v1/images/edits - 'n API sleutel benodig, of 'N Lightning betaling op versoekDie liggaam is multipart/form-datatot 32 MB.
| Die veld | Die tipe | vereis | Beskrywing |
|---|---|---|---|
image | Die lêer | Ja | Die beeld om te bewerk: PNG, JPEG, WebP of GIF, tot 20 MB. image[]Die eerste word gebruik. |
prompt | String | Ja | Wat om te verander |
model | String | Ja | 'N Generator met edit. |
n | Integraal | nie | 1 tot 4. |
sizeaspect_ratioqualitynegative_promptoutput_format | String | nie | vir die generasie. |
response_format | String | nie | "b64_json" (die standaard hier) of "url". |
Die beeld wat jy oplaai, word gekontroleer as 'n goed gevormde PNG, JPEG, WebP of GIF, as sy werklike tipe gestuur, en op 'n openbare Blossom-host geplaas, want die generators kry hul invoer deur skakel. Behandel dit as openbaar. As die redigering misluk en niks opgelê word nie, word die gehost kopie weer verwyder. Die reaksie het dieselfde vorm as vir generasie. Prys is die prys van die generator, wat vir sommige generators 'n fooi vir die invoerbeeld insluit.
Reaksies
{
"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 beeld of prompt, 'n lêer wat nie 'n prentjie is nie (invalid_image), of 'n generator wat nie kan redig nie (edit_unsupported). |
413 | Die foto is meer as 20 MB (file_too_large), of die hele versoek van meer as 32 MB. |
503 | Die foto kan nie op die oomblik gehost word nie (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
'N Video neem minute, so dit loop in die agtergrond. Jy stuur dit, kry 'n id onmiddellik, en vra oor die id totdat dit gedoen is.
POST https://nymbot.ai/api/v1/videos - 'n API sleutel benodig, of 'N Lightning betaling op versoekterugkeer 202.
| Die veld | Die tipe | vereis | Beskrywing |
|---|---|---|---|
model | String | Ja | 'N Video Generator ID van GET /api/v1/models?type=videoSoos soos veo. |
prompt | String | Ja | Wat moet gebeur. |
duration | Die getal of string | nie | Lengte in sekondes, meer as 0 en tot 60. Gebruik slegs deur generators wat jou toelaat om die lengte te kies; die ander maak hul gewone lengte, wat is wat seconds In die reaksie en die prys volg. |
aspect_ratio | String | nie | Soos "16:9" of "9:16"'n Grootte soos "1280x720" Dit word die naaste verhouding. |
resolutionquality | String | nie | Een van die generators resolutions In die model, soos "720p" of "1080p"Dit stel die prys. Alles anders word verwerp met unsupported_resolution. |
image_url | String | nie | 'n Foto om te begin met: 'n https:// Link of 'n data:image/… URL, wat eers na 'n openbare Blossom-host geplaas word. requires_image_url. |
Die prys is vasgestel wanneer jy die generator, resolusie en lengte inskryf, dus word dit van jou Pro-balans in rekening geneem sodra die verskaffer die werk aanvaar, en getoon as
cost, estimated_cost en nymbotAs die verskaffer die werk weier, word niks in rekening geneem nie. As die rendering later misluk, of die voltooide klip nie opgeslagen kan word en die verskaffer nie daarvoor in rekening gestel het nie, word die fooi een keer, outomaties, terugbetaal. 'n rendering wat nog na 'n uur gaan, word opgehou en behou sy fooi, want die verskaffer reken 'n render wanneer dit dit aanvaar. 'N terugbetaling gee die krediete terug, maar verlaag nie die sleutel se uitgaansetrek nie.
Die antwoord (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 as in_progressof completed Met die video reeds in data Die generator het dit onmiddellik teruggekeer.
Kyk na 'n video
GET https://nymbot.ai/api/v1/videos/{id} - benodig 'n sleutel wat aan die nym behoort wat dit ingedien het. 'n Sleutel wat sy cap bereik het, kan nog steeds kyk.
Hy antwoord 202 terwyl die video gemaak word en 200 wanneer dit voltooi is of misluk het. Vra elke 5 tot 10 sekondes. Elke tjek vra die verskaffer een keer en antwoord dadelik; dit wag nooit vir die video nie. 'n werk word 24 uur gehou nadat dit ingedien is.
GET /api/v1/videos die sleutel se laaste 50 werksgeleenthede as
{"object": "list", "data": […]}.
Die antwoord (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 failed'N mislukte werk dra error ({"code": "generation_failed", "message": …}Indien dit terugbetaal word, cost Dit is 0 en nymbot Voeg toe
refunded_credits en refunded_satsDie voltooide video is op 'n openbare Blossom-host, soos gegenereerde beelde.
| Status | Wanneer |
|---|---|
400 | Geen spoed; 'n duur buite 0 tot 60 (invalid_value); 'n resolusie wat die generator nie bied nie (unsupported_resolution); geen beeld vir 'n generator wat een nodig het nie (image_required); 'n model wat nie 'n video-generator is nie (invalid_model). |
402 | Die Pro-balans kan nie die video dek nie. |
404 | Geen generator nie (model_not_found), of geen werk deur daardie id vir jou nym, of dit is meer as 24 uur oud (video_not_found). |
429 | Jou nym het reeds 10 video's weergegee (video_jobs_limitKyk na hulle en stuur meer wanneer een voltooi. |
502 | Die generator het die werk geweier. niks word in rekening gestel tensy die verskaffer dit gefactureer het nie. |
503 | Video's kan nie op die oomblik gelewer of opgeslagen word nie (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 van die toespraak
Lees teks hardop en gee die klankbestand self terug, nie 'n skakel nie. audio.speech.create In die OpenAI SDKs werk.
POST https://nymbot.ai/api/v1/audio/speech - 'n API sleutel benodig, of 'N Lightning betaling op versoek.
| Die veld | Die tipe | vereis | Beskrywing |
|---|---|---|---|
model | String | nie | 'N Spreekmodel van Die lys van die audio modelleDefault: die standaard stem @cf/myshell-ai/melotts. aura-2 Dit is die Deepgram Aura 2. |
input | String | Ja | Die teks om te lees: tot 800 karakters vir die standaard stem, 2000 vir Aura 2. |
voice | String | nie | 'N Stem ID van Die stemme lys'n Aura spreker soos luna (en die aura-2-luna-enIn die algemeen word die taal (en, es, fr, zhOpenAI stem name soos alloy word aanvaar en gee die standaard stem van die model. |
language | String | nie | 'N Taalkode soos essonder 'n stem, kies dit een vir daardie taal. 'n stem wat 'n ander taal praat, 422 voice_language_mismatch, en 'n taal waarvoor die model geen stem het nie 422 unsupported_language. |
response_format | String | nie | Die standaard stem terugkeer mp3 Aura 2 terugkeer mp3 die vervalsing, opus, aac, flac, wav of pcm. |
speed | Die nommer | nie | Aanvaar en ignoreer. |
Die standaard stem kos 'n flat 3 standaard krediete (30 sats) 'n versoek, soos in die app. Aura 2 is Pro, geprijs deur die karakters wat jy stuur. Die reaksie liggaam is die klank, met 'n ooreenstemmende
Content-TypeDie koste is in die X-Nymbot-Cost-Sats As die spraakmodel misluk, word niks opgelê nie.
Reaksies
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 ingang nie; ingang oor die modelgrens (input_too_long); 'n formaat wat die model nie kan produseer nie (unsupported_response_format'n Onbekende stem (invalid_voice); 'n model wat nie 'n spraakmodel is nie (invalid_model). |
422 | Die stem praat nie die taal wat gegee word nie, of die model het geen stem vir dit nie. |
502 | Die gespreksmodel misluk. niks is aangekla nie. |
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 modelle en stemme
Twee openbare lyste vir die keuse van 'n spraakmodel en stem, of 'n transkripsiemodel. Daar is 41 Aura 2 Engelssprekers en vier MeloTTS tale.
GET https://nymbot.ai/api/v1/audio/models Geen sleutel nodig nie.
GET https://nymbot.ai/api/v1/audio/voices?language=en Geen sleutel nodig nie.
| Die veld | Die tipe | vereis | Beskrywing |
|---|---|---|---|
language | Die vraag (query) | nie | Net stemme vir hierdie taal. |
model | Die vraag (query) | nie | Net stemme vir hierdie model. |
Reaksies (die stem van die
{
"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 }
]
}
Die modelle lys antwoorde {"object": "list", "data": {"tts": […], "stt": […]}}Elke spraakmodel gee sy balans, prys, max_input_chars,
response_formats, languages en default_voice· die transcription model gee sy aliases, max_file_bytes, max_seconds, formaat en prys 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);
Spreek tot teks
Verander 'n opname in teks met Whisper. Dit is OpenAI se transkripsie eindpunt, so
audio.transcriptions.create die werk.
POST https://nymbot.ai/api/v1/audio/transcriptions - 'n API sleutel benodig, of 'N Lightning betaling op versoekDie liggaam is multipart/form-data.
| Die veld | Die tipe | vereis | Beskrywing |
|---|---|---|---|
file | Die lêer | Ja | Die opname, van 256 bytes tot 25 MB en tot 30 minute: WAV, WebM, MP4 of M4A, Ogg of Opus, MP3 en die ander formate Whisper lees. |
model | String | nie | Defekteer whisperDit is 'n verskynsel van Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo en @cf/openai/whisper-large-v3-turbo Dit beteken dieselfde. |
language | String | nie | Die gesproke taal, soos enOntdek as jy weggelaat is. |
prompt | String | nie | Woorde of spelling om te verwag, soos name. Slegs die eerste 1000 karakters word gebruik. |
response_format | String | nie | json die vervalsing, text, srt, vtt of verbose_json. |
Vir WAV, WebM, MP4 en Ogg lêers word die lengte van die lêer gelees voordat iets hardloop, so 'n opname van meer as 30 minute word verwerp vooruit (met 3 sekondes se genade). 'N WAV lêer se lengte kom van sy monster koers, kanale en monster grootte. Die lengte van ander formate, soos MP3, kan nie vooruit gelees word nie, so hulle is beperk deur grootte: by die laagste bitrate Nymbot veronderstel, 8 kbps, 30 minute is 1.8 MB, en 'n groter lêer in so 'n formaat word verwerp met 413
audio_too_long Stuur langer opnames soos WAV, WebM, MP4 of Ogg. As Whisper dan meer as 30 minute rapporteer, word die versoek geweier met
413 audio_too_long, en aangesien Whisper hardloop, word 30 minute in rekening geneem.
Jy betaal vir die lengte van die klank, afgerond tot die tweede: die langste van die lengte gelees van die lêer, die lengte Whisper rapporteer, en die minste die grootte van die lêer toelaat, by Whisper se per minuut prys met die gewone fooi en marge, en ten minste 0.05 krediet 'n versoek. 402 gee wat elke balans nodig sou hê. In die app, kan die transkripsie van 'n spraakboodskap gratis wees; op die API word dit altyd gelê. As Whisper misluk, word niks gelê nie.
Reaksies
{
"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 Terugkeer duidelik teks, srt en vtt Terugkeer ondertitelings, en
verbose_json voeg die taal, duur en tydsegmente by. Vir die drie wat nie JSON is nie, is die koste in die kopte.
| Status | Wanneer |
|---|---|
400 | Nie 'n lêer nie, 'n lêer met geen gebruikbare audio (invalid_audio, 'n onbekende formaat, of 'n model wat nie 'n transcriptiewe model is nie (invalid_model). |
402 | Ook die balans kan dit nie bedek nie. |
413 | Die bestand is meer as 25 MB (file_too_large'n Opname van meer as 30 minute, of, in 'n formaat waarvan die lengte nie aan die voorkant leesbaar is nie, meer as 1,8 MB (audio_too_long). |
502 | Sweepper kon nie die klank verwerk nie. Niets is opgelê nie. |
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 die toespraak na Engels
POST https://nymbot.ai/api/v1/audio/translations - 'n API sleutel benodig, of 'N Lightning betaling op versoekDie liggaam is multipart/form-data.
Dieselfde as die transkripsie, met dieselfde velde behalwe language, limiete en prys, maar die teks kom terug in Engels, ongeag watter taal gepraat is. 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);
Inskrywing
Verander teks in vektorne vir soektog, klustering en deduplikasie. Die modelle loop op Cloudflare en spandeer die standaardbalans.
POST https://nymbot.ai/api/v1/embeddings - 'n API sleutel benodig, of 'N Lightning betaling op versoek.
| Die veld | Die tipe | vereis | Beskrywing |
|---|---|---|---|
model | String | Ja | 'N Inbound Model van GET /api/v1/models?type=embedding. |
input | String of reeks van strings | Ja | Die teks wat ingebed moet word, tot 100 nie-leë stringe. tokenreeks word verwerp (token_input_unsupportedElke input moet ooreenstem met die model se context_length, getel as ongeveer vier bytes 'n token. |
encoding_format | String | nie | float (die verval) of base64 (Slegs vir die 32-bits flitser) |
dimensions | Integraal | nie | Die model se eie grootte, of vir 'n model met supported_dimensions een van hulle; die vektor word dan verkort en genormaliseer. Alles anders word verwerp. |
| Die model | Dimensies | konteks |
|---|---|---|
@cf/baai/bge-m3 | 1024 in baie tale | 8192 besoekers |
@cf/qwen/qwen3-embedding-0.6b | 1024 in baie tale | 8192 besoekers |
@cf/baai/bge-large-en-v1.5 | 1024 in Engels | 512 Kyk |
@cf/baai/bge-base-en-v1.5 | 768, Engels | 512 Kyk |
@cf/baai/bge-small-en-v1.5 | 384 Engels | 512 Kyk |
Die model lys is die bron van waarheid vir wie hulle beskikbaar is en wat hulle kos; Google se EmbeddingGemma, met korter vektorne op versoek, verskyn daar ook wanneer die katalogus daarvoor 'n prys het.
Reaksies
{
"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 ingang of 'n leë een; token array (token_input_unsupportedmeer as 100 inputs (too_many_inputs); 'n invoer langer as die model neem (input_too_long); 'n grootte wat die model nie kan gee nie (unsupported_dimensions). |
402 | Die standaardbalans is te laag. Embeddings gebruik nooit die Pro-balans nie. |
404 | Geen model met hierdie naam nie. |
502 | Die model misluk. niks is opgelos nie. |
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);