Gå til innholdet
Tilbake til Nymbot

Kunnskapsgrunnlag Utviklere

Bilder, lyd og embeddings

Generatorene fra appen, og byggeblokkene for søk: bilder, video, tale, transkripsjon og innebygging, hver fakturert per bruk fra saldoen din.

Genererer bilder

Lagrer ett til fire bilder fra en forespørsel og returnerer dem når de er gjort. ?image og i appen.

POST https://nymbot.ai/api/v1/images/generations - trenger en API-nøkkel, eller Lightning betaling per forespørsel.

Ids kommer fra GET /api/v1/models?type=imageDen standardiserte generatoren @cf/black-forest-labs/flux-1-schnell, koster en flat 5 standard kreditter (50 sats) et bilde. Hver annen generator bruker Pro kreditter til sin egen pris, med den vanlige gebyr og margin, som i Den app. n Bilder koster n Et felt som en generator ikke tar, blir kastet i stedet for avvist; standardgeneratoren bruker bare prompt.

FeltetTypenKrevdeBeskrivelse
modelStrengeJaEn generator id, for eksempel nano-banana.
promptStrengeJaDet er bare de første 2000 tegnene som brukes.
nIntegrertNei1 til 4. standard 1. også akseptert som num_images.
sizeStrengeNeiEt forhold som for eksempel "16:9"eller en åpen størrelse som "1792x1024", som blir den nærmeste av 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 og 4:5. "auto" Legg den til generatoren.
aspect_ratioStrengeNeiDet samme som sizeOg vinner hvis begge blir sendt.
qualityStrengeNeiGenerator-spesifikke, slik som "low", "medium" eller "high".
negative_promptStrengeNeiHva å legge ut.
output_formatStrengeNei"png", "jpeg" eller "webp".
response_formatStrengeNei"url" (default) eller "b64_json".
image_urlStrengeNeiEt bilde for å begynne med: en https:// lenke på maksimalt 4 096 tegn uten brukernavn eller passord i den, eller en data:image/…;base64 URL (PNG, JPEG, WebP eller GIF; ikke SVG). editkreves av de som har requires_image_url.

resolution ikke brukes: hver generator gjør sin egen størrelse. url, hvert bilde lastes opp til en offentlig Blossom-verten og du får linken (noen generatorer gir bare tilbake en link av sin egen, som sendes videre). Hva brannen kan seMed b64_json bildet returneres i svaret og lastes aldri opp. data: URL i image_url Det er undersøkt på samme måte som en Edit og lastet opp til Blossom først slik at generatoren kan hente den; den blir slettet igjen hvis forespørselen mislykkes unbilled.

Hvis noen av de n bilder mislykkes, du får de som fungerte, belastes bare for de (pluss eventuelle leverandøren fakturert til tross for å mislykkes), og nymbot.failed angir hvor mange som mangler. Hvis alle feiler, returnerer forespørselen 502.

Svaret

{
  "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 }
}
StatusNår
400Ikke raskt n fra 1 til 4 (invalid_valueDet er en dårlig størrelse (invalid_size) eller bilde (invalid_image, invalid_image_url); en modell som eksisterer, men ikke er en bildegenerator (invalid_model); et bilde for en generator som ikke kan redigere (edit_unsupported); ingen bilde for en som trenger det (image_required).
402Balansen kan ikke dekke hvert bilde som kreves.
404Ingen modell med dette navnet (model_not_found).
502Generatoren mislyktes (upstream_errorIngenting er belastet med mindre leverandøren fakturert for forsøk; deretter feilen har charged_sats.
503Bildene kan ikke hentes for øyeblikket (media_hosting_unavailable). b64_json Fungerer fortsatt

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

Redigere bilder

Endrer et bilde du laster opp, etter en påminnelse.Dette er OpenAIs redigeringsendpunkt, så OpenAI SDKs' images.edit fungerer som det er. bare Pro-generatorer med edit i modelllisten aksepterer det.

POST https://nymbot.ai/api/v1/images/edits - trenger en API-nøkkel, eller Lightning betaling per forespørselKroppen er multipart/form-dataOpp til 32 MB.

FeltetTypenKrevdeBeskrivelse
imageFilerJaBildet som skal redigeres: PNG, JPEG, WebP eller GIF, opptil 20 MB. image[]Den første er brukt.
promptStrengeJaHva å forandre.
modelStrengeJaGenerator med edit.
nIntegrertNei1 til 4.
size
aspect_ratio
quality
negative_prompt
output_format
StrengeNeiNår det gjelder generasjon.
response_formatStrengeNei"b64_json" (default her) eller "url".

Bildet du laster opp er sjekket for å være en velformet PNG, JPEG, WebP eller GIF, sendt på som sin virkelige type, og satt på en offentlig Blossom-verter, fordi generatorene henter innspillene sine ved kobling. Behandle det som offentlig. Hvis redigering mislykkes og ingenting belastes, blir den vertsbaserte kopien slettet igjen. Svaret har samme form som for generasjon. Prisen er generatorens pris, som for noen generatorer inkluderer en avgift for innspillingsbildet.

Svaret

{
  "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 }
}
StatusNår
400Ingen bilde eller en fil som ikke er et bilde (invalid_image), eller en generator som ikke kan redigere (edit_unsupported).
413Bildet er mer enn 20 MB (file_too_large), eller hele forespørselen over 32 MB.
503Bildet kan ikke brukes for øyeblikket (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"));

Videoer

En video tar minutter, så den kjører i bakgrunnen. Du sender den inn, får en id umiddelbart, og spør om id til den er ferdig.

POST https://nymbot.ai/api/v1/videos - trenger en API-nøkkel, eller Lightning betaling per forespørselReturnerer 202.

FeltetTypenKrevdeBeskrivelse
modelStrengeJaEn video generator id fra GET /api/v1/models?type=video, slik som veo.
promptStrengeJaHva bør skje.
durationAntall eller stringNeiLengde i sekunder, mer enn 0 og opp til 60. Brukes bare av generatorer som lar deg velge lengden; de andre gjør sin vanlige lengde, som er hva seconds Svaret og prisen følger.
aspect_ratioStrengeNeiSlik som "16:9" eller "9:16"En slik størrelse som "1280x720" blir det nærmeste forholdet.
resolution
quality
StrengeNeiEn av generatorene resolutions I modelllisten, for eksempel "720p" eller "1080p"Det setter prisen. Alt annet er avvist med unsupported_resolution.
image_urlStrengeNeiEt bilde for å begynne med: en https:// Link eller a data:image/… URL, som lastes opp til en offentlig Blossom-verter først. Kreves av generatorer med requires_image_url.

Prisen er fast når du sender inn, fra generatoren, oppløsning og lengde, så den belastes fra Pro-saldoen din så snart leverandøren aksepterer jobben, og vises som cost, estimated_cost og nymbotHvis leverandøren nekter jobben, blir ingenting belastet. Hvis gjengivelsen senere mislykkes, eller det ferdige klippet ikke kan lagres og leverandøren ikke har fakturert for det, refunderes gebyret en gang, automatisk. En gjengivelse som fortsatt går etter en time blir gitt opp, og beholder sin gebyr, fordi leverandøren fakturerer en gjengivelse når den aksepterer den. En refusjon returnerer kredittene, men senker ikke nøkkelenes utgiftskonto.

Svar på spørsmål (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 Begynner som in_progresseller completed Videoen er allerede i data Generatoren ga den umiddelbart tilbake.

Sjekker på video

GET https://nymbot.ai/api/v1/videos/{id} - trenger en nøkkel som tilhører nym som sendte den. En nøkkel som har nådd sin cap kan fortsatt sjekke.

Det svarer 202 Når videoen er laget og 200 Spør hver 5 til 10 sekunder. Hver sjekk spør leverandøren en gang og svarer på en gang; det venter aldri på videoen. GET /api/v1/videos oppgir de siste 50 jobbene til nøkkelen som {"object": "list", "data": […]}.

Svar på spørsmål (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 er in_progress, completed eller failedEn mislykket jobb bærer error ({"code": "generation_failed", "message": …}Hvis det ble refundert, cost er 0 og nymbot Tillegg refunded_credits og refunded_satsDen ferdige videoen er på en offentlig Blossom-verter, som genererte bilder.

StatusNår
400Ingen prompt; en varighet utenfor 0 til 60 (invalid_value); en oppløsning generatoren ikke tilbyr (unsupported_resolution); ingen bilde for en generator som trenger en (image_required); en modell som ikke er en video generator (invalid_model).
402Pro-balansen kan ikke dekke videoen.
404Ingen slik generator (model_not_found), eller ingen jobb av det id for din nym, eller det er mer enn 24 timer gammelt (video_not_found).
429Din nym allerede har 10 videoer som gjengir (video_jobs_limitSjekk dem og send inn flere når en avslutter.
502Generatoren nektet jobben. Ingenting blir belastet med mindre leverandøren fakturerte for det.
503Videoer kan ikke leveres eller lagres akkurat nå (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 til tale

Leser tekst høyt og returnerer selve lydfilen, ikke en lenke. audio.speech.create i OpenAI SDKs fungerer.

POST https://nymbot.ai/api/v1/audio/speech - trenger en API-nøkkel, eller Lightning betaling per forespørsel.

FeltetTypenKrevdeBeskrivelse
modelStrengeNeiEn talemodell fra Liste over lydmodellerDefault: Standard stemme @cf/myshell-ai/melotts. aura-2 Det er Deepgram Aura 2.
inputStrengeJaTekst å lese: opptil 800 tegn for standard stemme, 2000 for Aura 2.
voiceStrengeNeiEn stemme id fra Listen over stemmeren Aura-høyttaler som luna (eller aura-2-luna-en, eller et MeloTTS språk (en, es, fr, zhOpenAI stemmenavn som alloy er akseptert og gi modellens standard stemme.
languageStrengeNeiEt språk som for eksempel esUten en stemme, velger den en for det språket. En stemme som snakker et annet språk returnerer 422 voice_language_mismatchog et språk som modellen ikke har noen stemme for 422 unsupported_language.
response_formatStrengeNeiStandard stemmen returnerer mp3 Aura 2 er tilbake mp3 (Dette er et forsinkelse) opus, aac, flac, wav eller pcm.
speedAntallNeiGodkjent og ignorert.

Den vanlige stemmen koster en flat 3 standard kreditter (30 sats) per forespørsel, som i appen. Aura 2 er Pro, prissatt etter tegnene du sender. Content-TypeKostnadene ligger i X-Nymbot-Cost-Sats Hvis talemodellen mislykkes, blir ingenting belastet.

Svaret

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

(audio bytes)
StatusNår
400Ingen innspill; innspill over modellens grense (input_too_long); et format som modellen ikke kan produsere (unsupported_response_formatEn ukjent stemme (invalid_voice); en modell som ikke er en talemodell (invalid_model).
422Stemmen snakker ikke språket som er gitt, eller modellen har ingen stemme for det.
502Ordforslaget mislykkes, det er ikke pålagt noe.

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 modeller og stemmer

To offentlige lister for å velge en talemodell og stemme, eller en transkripsjonsmodell.

GET https://nymbot.ai/api/v1/audio/models Ingen nøkkel nødvendig.

GET https://nymbot.ai/api/v1/audio/voices?language=en Ingen nøkkel nødvendig.

FeltetTypenKrevdeBeskrivelse
languageString (forespørsel)NeiBare stemmer for dette språket.
modelString (forespørsel)NeiBare stemmer for denne modellen.

Svar på spørsmål (stemmer)

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

Modellene lister opp svar {"object": "list", "data": {"tts": […], "stt": […]}}Hver tale modell gir sin balanse, pris, max_input_chars, response_formats, languages og default_voice· transkripsjonsmodellen gir sine aliaser, max_file_bytes, max_secondsPris og pris per minutt.

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

Tale til tekst

Gjør en innspilling til tekst med Whisper. Dette er OpenAIs transkripsjonsendpunkt, så audio.transcriptions.create og arbeider.

POST https://nymbot.ai/api/v1/audio/transcriptions - trenger en API-nøkkel, eller Lightning betaling per forespørselKroppen er multipart/form-data.

FeltetTypenKrevdeBeskrivelse
fileFilerJaOpptak, fra 256 bytes til 25 MB og opptil 30 minutter: WAV, WebM, MP4 eller M4A, Ogg eller Opus, MP3 og de andre formatene Whisper leser.
modelStrengeNeiDefault whisperDette er Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo og @cf/openai/whisper-large-v3-turbo Betyr det samme.
languageStrengeNeiDet talte språket, som enoppdaget hvis de ble utestengt.
promptStrengeNeiOrd eller stavemåter å forvente, for eksempel navn.
response_formatStrengeNeijson (Dette er et forsinkelse) text, srt, vtt eller verbose_json.

For WAV, WebM, MP4 og Ogg filer lengden leses fra filen før noe kjører, så en opptak over 30 minutter er nektet opp foran (med 3 sekunders nåde). En WAV fil lengde kommer fra sin prøvehastighet, kanaler og prøve størrelse. Lengden på andre formater, som MP3, kan ikke leses opp foran, så de er begrenset av størrelse: ved den laveste bitrate Nymbot antar, 8 kbps, 30 minutter er 1,8 MB, og en større fil i et slikt format er nektet med 413 audio_too_long Send lengre opptak som WAV, WebM, MP4 eller Ogg. Hvis Whisper deretter rapporterer mer enn 30 minutter uansett, blir forespørselen avvist med 413 audio_too_long, og siden Whisper kjørte, er 30 minutter belastet.

Du betaler for lengden på lyden, avrundet opp til den andre: lengst av lengden lest fra filen, lengden Whisper rapporter, og minst størrelsen på filen tillater, til Whisper's per-minutt pris med den vanlige gebyr og margin, og minst 0.05 kreditt en forespørsel. 402 gir hva hver balanse ville trenge.I appen kan transkribering av en talemelding være gratis; på API er det alltid ladet.Hvis Whisper mislykkes, blir ingenting ladet.

Svaret

{
  "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 Returnerer klar tekst. srt og vtt Tilbake undertekster, og verbose_json legger til språk, varighet og tidssegmenter. For de tre som ikke er JSON, er kostnaden i overskriftene.

StatusNår
400Ingen fil, en fil uten brukbar lyd (invalid_audio, et ukjent format, eller en modell som ikke er en transkripsjonsmodell (invalid_model).
402Balansen kan ikke dekke den.
413Filen er mer enn 25 MB (file_too_largeb) opptak over 30 minutter, eller i et format hvis lengde ikke kan leses opp foran, over 1,8 MB (audio_too_long).
502Whisper kunne ikke behandle lyden.

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

Oversettelse av tale til engelsk

POST https://nymbot.ai/api/v1/audio/translations - trenger en API-nøkkel, eller Lightning betaling per forespørselKroppen er multipart/form-data.

Samme som transkripsjon, med de samme feltene bortsett fra language, grenser og pris, men teksten kommer tilbake på engelsk uansett språk som ble snakket. 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);

Embedded

Omdanner tekst til vektorer for søk, klassifisering og deduplisering.Modellene kjører på Cloudflare og bruker standardbalansen.

POST https://nymbot.ai/api/v1/embeddings - trenger en API-nøkkel, eller Lightning betaling per forespørsel.

FeltetTypenKrevdeBeskrivelse
modelStrengeJaEn innbyggermodell fra GET /api/v1/models?type=embedding.
inputString eller array av stringsJaDet er ikke tillatt å legge inn en tekst, opptil 100 tomme strenger. token array er avvist (token_input_unsupported) Hver input må passe til modellens context_length, regnet som omtrent fire bytes en token.
encoding_formatStrengeNeifloat (default) eller base64 (Little-endian 32-bit flåter)
dimensionsIntegrertNeimodellens egen størrelse, eller for en modell med supported_dimensions En av dem; vektoren blir deretter forkortet og normalisert.
ModellenDimensjonerKontekst
@cf/baai/bge-m31024 på flere språk8,192 tokens
@cf/qwen/qwen3-embedding-0.6b1024 på flere språk8,192 tokens
@cf/baai/bge-large-en-v1.51024 Engelsk512 kroner
@cf/baai/bge-base-en-v1.5768, Engelsk512 kroner
@cf/baai/bge-small-en-v1.5384 Engelsk512 kroner

Modelllisten er kilden til sannheten for hvilke de er tilgjengelige og hva de koster; Googles EmbeddingGemma, med kortere vektorer på forespørsel, vises der også når katalogen har en pris for det.

Svaret

{
  "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 }
}
StatusNår
400Ingen innspill eller en tom en; token array (token_input_unsupportedmer enn 100 innspill (too_many_inputs); et innspill lengre enn modellen tar (input_too_long); en størrelse modellen ikke kan gi (unsupported_dimensions).
402Standardbalansen er for lav. Innlemminger bruker aldri Probalansen.
404Det finnes ingen modell med dette navnet.
502Modellen mislyktes.Ingenting er belastet.

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