Baza wiedzy deweloperzy
Obrazy, audio i osadzenia
Generatory z aplikacji i bloków budowlanych do wyszukiwania: zdjęcia, wideo, mowę, transkrypcję i osadzenia, każda pobierana za użycie z bilansu.
Dla wygody ta strona została przetłumaczona maszynowo. Obowiązującą wersją jest oryginał w języku angielskim.
Generowanie obrazów
Wykonuje od jednego do czterech zdjęć z prośby i zwraca je po ich wykonaniu. ?image w aplikacji .
POST https://nymbot.ai/api/v1/images/generations — potrzebny jest klucz API lub Płatność Lightning na żądanie.
Ids pochodzą z GET /api/v1/models?type=imageGenerator standardowy
@cf/black-forest-labs/flux-1-schnell, kosztuje 5 standardowych kredytów (50 sats) na zdjęcie. Każdy inny generator spędza kredyty Pro w swojej cenie, z zwykłą opłatą i marżą, jak w Aplikacja. n Zdjęcia kosztują
n Pole, którego generator nie bierze, zostaje opuszczone zamiast odrzucone; standardowy generator używa tylko wskazówki.
| polu | typu | Wymagane | Opis |
|---|---|---|---|
model | Stringów | Tak | Generator ID, taki jak nano-banana. |
prompt | Stringów | Tak | Używa się tylko pierwszych 2000 znaków. |
n | integer | Nie | 1 do 4.Default 1.Również akceptowane jako num_images. |
size | Stringów | Nie | Elementy proporcjonalne, takie jak "16:9"lub rozmiar otwarty, taki jak "1792x1024", który staje się najbliżej 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 i 4:5. "auto" Zostaw je do generatora. |
aspect_ratio | Stringów | Nie | Tak samo jak sizeI wygrywa, jeśli oboje zostaną wysłani. |
quality | Stringów | Nie | Generator specyficzny, taki jak "low", "medium" lub "high". |
negative_prompt | Stringów | Nie | Co zostawić na zewnątrz. |
output_format | Stringów | Nie | "png", "jpeg" lub "webp". |
response_format | Stringów | Nie | "url" (w przypadku deficytu) lub "b64_json". |
image_url | Stringów | Nie | Zacznijmy od: A https:// link liczący maksymalnie 4 096 znaków bez nazwy użytkownika lub hasła lub data:image/…;base64 URL (PNG, JPEG, WebP lub GIF; nie SVG). editWymagane przez tych, którzy requires_image_url. |
resolution nie jest używany: każdy generator tworzy swój własny rozmiar. url, każdy obraz jest przesyłany do publicznego hosta Blossom i otrzymasz jego link (niektórzy generatorzy zwracają tylko link własny, który jest przekazywany). Co ogień widzi• z
b64_json zdjęcie powraca w odpowiedzi i nigdy nie jest przesyłane. data: URL w image_url Sprawdzany jest w taki sam sposób jak
EDIT i przesłane do Blossom najpierw, aby generator mógł go odebrać; jest usuwany ponownie, jeśli żądanie nie zostanie rozliczone.
Jeśli niektóre z n zdjęcia się nie udają, otrzymasz te, które zadziałały, są pobierane tylko za te (plus wszelkie dostawca obciążony pomimo niepowodzenia), i nymbot.failed mówi, ilu brakuje. jeśli wszystkie nie powiodą się, żądanie zwraca 502.
Odpowiedź
{
"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 | Kiedy |
|---|---|
400 | nie szybko; n od 1 do 4 (invalid_value); nieprawidłowy rozmiar (invalid_size) lub zdjęcie (invalid_image, invalid_image_url); model, który istnieje, ale nie jest generatorem obrazu (invalid_model); obraz dla generatora, który nie może edytować (edit_unsupported); nie ma zdjęcia dla kogoś, kto go potrzebuje (image_required). |
402 | Bilans nie może obejmować wszystkich żądanych zdjęć. |
404 | Nie ma modelu o tej nazwie (model_not_found). |
502 | Generator nie działa (upstream_errorNic nie jest naliczane, chyba że dostawca pobrał rachunek za próbę; wtedy błąd charged_sats. |
503 | Zdjęcia nie mogą być obecnie hostowane (media_hosting_unavailable). b64_json Wciąż działa |
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);
Edytowanie obrazów
Zmiana obrazu, który przesyłasz, po wezwaniu.To jest punkt końcowy edycji OpenAI, więc OpenAI SDK's images.edit działa tak, jak jest. Tylko generatory Pro z edit Na liście wzorów akceptuj to.
POST https://nymbot.ai/api/v1/images/edits — potrzebny jest klucz API lub Płatność Lightning na żądanieCiało jest multipart/form-dataMaksymalnie 32 MB.
| polu | typu | Wymagane | Opis |
|---|---|---|---|
image | archiwum | Tak | Obraz do edycji: PNG, JPEG, WebP lub GIF, do 20 MB. image[]Pierwszy z nich jest używany. |
prompt | Stringów | Tak | Co trzeba zmienić. |
model | Stringów | Tak | Generator z edit. |
n | integer | Nie | 1 do 4. |
sizeaspect_ratioqualitynegative_promptoutput_format | Stringów | Nie | Co do pokolenia. |
response_format | Stringów | Nie | "b64_json" (przełożenie tutaj) lub "url". |
Obraz, który przesyłasz, jest sprawdzany jako dobrze sformułowany PNG, JPEG, WebP lub GIF, wysyłany jako jego prawdziwy typ i umieszczony na publicznym hostzie Blossom, ponieważ generatory pobierają swój wkład za pośrednictwem linku. Traktuj go jako publiczny. Jeśli edycja nie powiodła się i nic nie jest pobierane, hostowana kopia zostaje ponownie usunięta. Odpowiedź ma tę samą formę jak dla generacji. Ceny są ceną generatora, która dla niektórych generatorów zawiera opłatę za wkładowy obraz.
Odpowiedź
{
"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 | Kiedy |
|---|---|
400 | Brak obrazu lub prompt, plik, który nie jest obrazem (invalid_image) lub generator, który nie może edytować (edit_unsupported). |
413 | Obraz jest większy niż 20 MB (file_too_large), lub całe żądanie powyżej 32 MB. |
503 | Zdjęcie nie może być obecnie hostowane (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"));
wideo
Film trwa kilka minut, więc działa w tle. możesz go przesłać, natychmiast uzyskać identyfikator i zapytać o identyfikator, aż się skończy.
POST https://nymbot.ai/api/v1/videos — potrzebny jest klucz API lub Płatność Lightning na żądanie• Powrót 202.
| polu | typu | Wymagane | Opis |
|---|---|---|---|
model | Stringów | Tak | Generator wideo ID GET /api/v1/models?type=video, takie jak veo. |
prompt | Stringów | Tak | Co powinno się zdarzyć. |
duration | numer lub strunę | Nie | Długość w sekundach, więcej niż 0 i do 60. Używane tylko przez generatory, które pozwalają wybrać długość; inne robią swoją zwykłą długość, co jest seconds w odpowiedzi i cena następuje. |
aspect_ratio | Stringów | Nie | Takie jak "16:9" lub "9:16"Rozmiar taki jak "1280x720" staje się najbliższym współczynnikiem. |
resolutionquality | Stringów | Nie | Jeden z generatorów resolutions Na liście modeli, takich jak "720p" lub "1080p"To ustawia cenę.Wszystko inne jest odrzucane unsupported_resolution. |
image_url | Stringów | Nie | Zacznijmy od: A https:// Link lub A data:image/… URL, który jest najpierw przesyłany do publicznego hosta Blossom. requires_image_url. |
Cena jest stała, gdy przesyłasz, z generatora, rozdzielczości i długości, więc jest pobierana z salda Pro, gdy tylko dostawca akceptuje pracę i jest wyświetlana jako
cost, estimated_cost I nymbotJeśli dostawca odrzuci pracę, nic nie jest naliczane. Jeśli renderowanie później nie powiodło się lub zakończony klip nie może być przechowywany, a dostawca nie wystawił za niego rachunku, opłata jest zwracana raz, automatycznie. Renderowanie, które nadal trwa po godzinie, zostaje odrzucone i utrzymuje swoje opłaty, ponieważ dostawca nalicza renderowanie, gdy go zaakceptuje.
Odpowiedź (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 Rozpoczyna się jak in_progress, lub completed Wideo już w data Generator natychmiast go odzyskał.
Sprawdzanie wideo
GET https://nymbot.ai/api/v1/videos/{id} — potrzebuje klucza należącego do nym, który go przesłał.
Odpowiada ona 202 Podczas nagrywania wideo i 200 Po zakończeniu lub niepowodzeniu. Zapytaj co 5 do 10 sekund. Każda kontrola pyta dostawcę raz i odpowiada od razu; nigdy nie czeka na wideo.
GET /api/v1/videos listy ostatnich 50 miejsc pracy klucza jako
{"object": "list", "data": […]}.
Odpowiedź na pytanie (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 Jest in_progress, completed lub failedNieudana praca przynosi error ({"code": "generation_failed", "message": …}Jeśli zostanie ona zwrócona, cost jest 0 i nymbot Dodaj
refunded_credits I refunded_satsGotowy film znajduje się na publicznym hostzie Blossom, podobnie jak wygenerowane obrazy.
| Status | Kiedy |
|---|---|
400 | Nie ma prędkości; czas trwania poza 0 do 60 (invalid_value); rozdzielczość generatora nie oferuje (unsupported_resolution); nie ma obrazu dla generatora, który potrzebuje jednego (image_required); model, który nie jest generatorem wideo (invalid_model). |
402 | Bilans Pro nie może obejmować wideo. |
404 | Nie ma takiego generatora (model_not_found), lub nie ma pracy przez to id dla twojego nym, lub jest starszy niż 24 godziny (video_not_found). |
429 | Twój nym ma już 10 filmów renderujących (video_jobs_limitSprawdź je i przesyłaj więcej, gdy jeden kończy. |
502 | Generator odmówił pracy.Nic nie jest pobierane, chyba że dostawca fakturuje za to. |
503 | Wideo nie może być dostarczane ani przechowywane w tym momencie (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 do przemówienia
Czyta tekst głośno i zwraca sam plik audio, a nie link. audio.speech.create w OpenAI SDKs działa.
POST https://nymbot.ai/api/v1/audio/speech — potrzebny jest klucz API lub Płatność Lightning na żądanie.
| polu | typu | Wymagane | Opis |
|---|---|---|---|
model | Stringów | Nie | Wzór mowy od Lista modeli audioDefault – standardowy głos, @cf/myshell-ai/melotts. aura-2 Jest to Deepgram Aura 2. |
input | Stringów | Tak | Tekst do odczytu: do 800 znaków dla standardowego głosu, 2000 dla Aura 2. |
voice | Stringów | Nie | Identyfikator głosowy od Lista głosów: Aura mówca, taki jak luna (lub aura-2-luna-en, lub język MeloTTS (en, es, fr, zhOpenAI nazwy głosowe, takie jak alloy są akceptowane i dają domyślny głos modelu. |
language | Stringów | Nie | Kody językowe takie jak esBez głosu wybiera jeden dla danego języka.Głos, który mówi w innym języku, zwraca 422 voice_language_mismatch, a język, dla którego model nie ma głosu 422 unsupported_language. |
response_format | Stringów | Nie | Standardowy głos powraca mp3 Aura 2 powraca mp3 w przypadku deficytu, opus, aac, flac, wav lub pcm. |
speed | Liczba | Nie | Akceptowane i ignorowane. |
Standardowy głos kosztuje płaski 3 standardowe kredyty (30 sats) na żądanie, jak w aplikacji. Aura 2 jest Pro, wycenione według znaków, które wysyłasz.
Content-TypeKoszty są w X-Nymbot-Cost-Sats Jeśli model mowy nie zadziała, nic nie jest obciążane.
Odpowiedź
HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Nymbot-Cost-Sats: 4.2
X-Nymbot-Balance-Sats: 41055.6
(audio bytes)
| Status | Kiedy |
|---|---|
400 | Brak wejścia; wejście powyżej limitu modelu (input_too_long); format, który model nie może wyprodukować (unsupported_response_format); nieznany głos (invalid_voice); model, który nie jest modelem mowy (invalid_model). |
422 | Głos nie mówi danego języka, lub model nie ma dla niego głosu. |
502 | Moduł wypowiedzi nie powiodł się.Nic nie jest obciążone. |
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 głosy
Dwie publiczne listy do wyboru modelu mowy i głosu, lub modelu transkrypcji.
GET https://nymbot.ai/api/v1/audio/models Nie potrzebny klucz.
GET https://nymbot.ai/api/v1/audio/voices?language=en Nie potrzebny klucz.
| polu | typu | Wymagane | Opis |
|---|---|---|---|
language | String (wniosek o pomoc) | Nie | Tylko głosy dla tego języka. |
model | String (wniosek o pomoc) | Nie | Tylko głosy dla tego modelu. |
Odpowiedzi (głosów i głosów)
{
"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 }
]
}
Odpowiedzi na listę modeli {"object": "list", "data": {"tts": […], "stt": […]}}Każdy model mowy daje swoją równowagę, cenę, max_input_chars,
response_formats, languages I default_voice• model transkrypcyjny daje swoje aliasy, max_file_bytes, max_secondsCeny i formaty za 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);
Przemówienie do tekstu
Przekształca nagranie w tekst za pomocą funkcji Whisper. Jest to punkt końcowy transkrypcji OpenAI, więc
audio.transcriptions.create Prace się.
POST https://nymbot.ai/api/v1/audio/transcriptions — potrzebny jest klucz API lub Płatność Lightning na żądanieCiało jest multipart/form-data.
| polu | typu | Wymagane | Opis |
|---|---|---|---|
file | archiwum | Tak | Nagrywanie, od 256 bajtów do 25 MB i do 30 minut: WAV, WebM, MP4 lub M4A, Ogg lub Opus, MP3 i inne formaty Whisper czyta. |
model | Stringów | Nie | wady whisperJest to Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo I @cf/openai/whisper-large-v3-turbo Znaczy to samo. |
language | Stringów | Nie | W języku mówionym, takim jak enZidentyfikowany, jeśli został opuszczony |
prompt | Stringów | Nie | Słowa lub pisownia, których można się spodziewać, takie jak nazwy. Używane są tylko pierwsze 1000 znaków. |
response_format | Stringów | Nie | json w przypadku deficytu, text, srt, vtt lub verbose_json. |
W przypadku plików WAV, WebM, MP4 i Ogg długość jest odczytywana z pliku przed uruchomieniem czegokolwiek, więc nagranie powyżej 30 minut jest odrzucane z przodu (z 3 sekundami łaski). Długość pliku WAV pochodzi od jego prędkości próbki, kanałów i rozmiaru próbki. Długość innych formatów, takich jak MP3, nie może być odczytywana z przodu, więc są one ograniczone rozmiarem: przy najniższej prędkości bitowej Nymbot zakłada, 8 kbps, 30 minut jest 1,8 MB, a większy plik w takim formacie jest odrzucany z 413
audio_too_long Wyślij dłuższe nagrania, takie jak WAV, WebM, MP4 lub Ogg. Jeśli Whisper następnie zgłasza więcej niż 30 minut, żądanie zostaje odrzucone
413 audio_too_long, a ponieważ Whisper wykonał, 30 minut jest pobierane.
Płacisz za długość dźwięku, zaokrąglony do sekundy: najdłuższa długość odczytana z pliku, długość raportów Whisper i najmniej rozmiar pliku pozwala, w cenie za minutę Whisper z zwykłą opłatą i marginesem, a co najmniej 0,05 kredytu na żądanie. 402 W aplikacji transkrypcja wiadomości głosowej może być darmowa; na API jest ona zawsze ładowana.
Odpowiedź
{
"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 zwraca wyraźny tekst, srt I vtt zwrot podtytułów oraz
verbose_json dodaje język, czas trwania i segmenty czasowe. Dla trzech, które nie są JSON, koszt jest w nagłówkach.
| Status | Kiedy |
|---|---|
400 | Nie ma pliku, plik bez użytecznego audio (invalid_audio, nieznany format, lub model, który nie jest modelem transkrypcyjnym (invalid_model). |
402 | Równowagi nie da się ukryć. |
413 | Plik jest większy niż 25 MB (file_too_largeb) powyżej 30 minut, lub w formacie, którego długości nie można odczytać z przodu, powyżej 1,8 MB (audio_too_long). |
502 | Sześć nie mogło przetworzyć dźwięku. |
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);
Tłumaczenie przemówienia na angielski
POST https://nymbot.ai/api/v1/audio/translations — potrzebny jest klucz API lub Płatność Lightning na żądanieCiało jest multipart/form-data.
Taki sam jak transkrypcja, z tymi samymi polami oprócz language, limity i cena, ale tekst powraca w języku angielskim niezależnie od tego, w jakim języku był mówiony. 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);
wbudowanych
Przekształca tekst w wektory do wyszukiwania, klasyfikacji i deduplikacji.Modele działają w usłudze Cloudflare i wykorzystują standardowy saldo.
POST https://nymbot.ai/api/v1/embeddings — potrzebny jest klucz API lub Płatność Lightning na żądanie.
| polu | typu | Wymagane | Opis |
|---|---|---|---|
model | Stringów | Tak | Wzornictwo modelowe od GET /api/v1/models?type=embedding. |
input | String lub array strings | Tak | Wymagane jest, aby wyświetlacz był wyświetlany w trybie bezprzewodowym (do 100 znaków).token_input_unsupportedKażde wejście musi pasować do modelu context_length, liczony jako około czterech bajtów token. |
encoding_format | Stringów | Nie | float (w przypadku deficytu) lub base64 (Little-endian 32-bitowe płytki pływalne) |
dimensions | integer | Nie | Własny rozmiar modelu lub dla modelu z supported_dimensions Jeden z nich; wektor jest następnie skrócony i znormalizowany. |
| Modelka | wymiarów | Kontekst |
|---|---|---|
@cf/baai/bge-m3 | 1024 w wielu językach | 8 192 żetonów |
@cf/qwen/qwen3-embedding-0.6b | 1024 w wielu językach | 8 192 żetonów |
@cf/baai/bge-large-en-v1.5 | 1024 angielski | 512 żetonów |
@cf/baai/bge-base-en-v1.5 | 768, angielski | 512 żetonów |
@cf/baai/bge-small-en-v1.5 | 384 Angielski | 512 żetonów |
Lista modeli jest źródłem prawdy, dla których są dostępne i ile kosztują; Google's EmbeddingGemma, z krótszymi wektorami na żądanie, pojawia się tam również wtedy, gdy katalog ma za to cenę.
Odpowiedź
{
"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 | Kiedy |
|---|---|
400 | Nie ma żadnego wejścia lub pustego; token array (token_input_unsupported); więcej niż 100 wejść (too_many_inputs); wejście jest dłuższe niż model bierze (input_too_long); rozmiar, który model nie może dać (unsupported_dimensions). |
402 | Standardowy saldo jest zbyt niski. wbudowane nigdy nie używają salda Pro. |
404 | Nie ma wzorca pod tą nazwą. |
502 | Model nie powiodł się.Nic nie jest obciążone. |
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);