Przejdź do treści
Wróć do Nymbot

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.

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.

polutypuWymaganeOpis
modelStringówTakGenerator ID, taki jak nano-banana.
promptStringówTakUżywa się tylko pierwszych 2000 znaków.
nintegerNie1 do 4.Default 1.Również akceptowane jako num_images.
sizeStringówNieElementy 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_ratioStringówNieTak samo jak sizeI wygrywa, jeśli oboje zostaną wysłani.
qualityStringówNieGenerator specyficzny, taki jak "low", "medium" lub "high".
negative_promptStringówNieCo zostawić na zewnątrz.
output_formatStringówNie"png", "jpeg" lub "webp".
response_formatStringówNie"url" (w przypadku deficytu) lub "b64_json".
image_urlStringówNieZacznijmy 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 }
}
StatusKiedy
400nie 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).
402Bilans nie może obejmować wszystkich żądanych zdjęć.
404Nie ma modelu o tej nazwie (model_not_found).
502Generator nie działa (upstream_errorNic nie jest naliczane, chyba że dostawca pobrał rachunek za próbę; wtedy błąd charged_sats.
503Zdję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.

polutypuWymaganeOpis
imagearchiwumTakObraz do edycji: PNG, JPEG, WebP lub GIF, do 20 MB. image[]Pierwszy z nich jest używany.
promptStringówTakCo trzeba zmienić.
modelStringówTakGenerator z edit.
nintegerNie1 do 4.
size
aspect_ratio
quality
negative_prompt
output_format
StringówNieCo do pokolenia.
response_formatStringówNie"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 }
}
StatusKiedy
400Brak obrazu lub prompt, plik, który nie jest obrazem (invalid_image) lub generator, który nie może edytować (edit_unsupported).
413Obraz jest większy niż 20 MB (file_too_large), lub całe żądanie powyżej 32 MB.
503Zdję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.

polutypuWymaganeOpis
modelStringówTakGenerator wideo ID GET /api/v1/models?type=video, takie jak veo.
promptStringówTakCo powinno się zdarzyć.
durationnumer lub strunęNieDł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_ratioStringówNieTakie jak "16:9" lub "9:16"Rozmiar taki jak "1280x720" staje się najbliższym współczynnikiem.
resolution
quality
StringówNieJeden z generatorów resolutions Na liście modeli, takich jak "720p" lub "1080p"To ustawia cenę.Wszystko inne jest odrzucane unsupported_resolution.
image_urlStringówNieZacznijmy 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.

StatusKiedy
400Nie 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).
402Bilans Pro nie może obejmować wideo.
404Nie 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).
429Twój nym ma już 10 filmów renderujących (video_jobs_limitSprawdź je i przesyłaj więcej, gdy jeden kończy.
502Generator odmówił pracy.Nic nie jest pobierane, chyba że dostawca fakturuje za to.
503Wideo 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.

polutypuWymaganeOpis
modelStringówNieWzór mowy od Lista modeli audioDefault – standardowy głos, @cf/myshell-ai/melotts. aura-2 Jest to Deepgram Aura 2.
inputStringówTakTekst do odczytu: do 800 znaków dla standardowego głosu, 2000 dla Aura 2.
voiceStringówNieIdentyfikator 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.
languageStringówNieKody 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_formatStringówNieStandardowy głos powraca mp3 Aura 2 powraca mp3 w przypadku deficytu, opus, aac, flac, wav lub pcm.
speedLiczbaNieAkceptowane 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)
StatusKiedy
400Brak 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).
422Głos nie mówi danego języka, lub model nie ma dla niego głosu.
502Moduł 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.

polutypuWymaganeOpis
languageString (wniosek o pomoc)NieTylko głosy dla tego języka.
modelString (wniosek o pomoc)NieTylko 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.

polutypuWymaganeOpis
filearchiwumTakNagrywanie, 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.
modelStringówNiewady whisperJest to Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo I @cf/openai/whisper-large-v3-turbo Znaczy to samo.
languageStringówNieW języku mówionym, takim jak enZidentyfikowany, jeśli został opuszczony
promptStringówNieSłowa lub pisownia, których można się spodziewać, takie jak nazwy. Używane są tylko pierwsze 1000 znaków.
response_formatStringówNiejson 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.

StatusKiedy
400Nie ma pliku, plik bez użytecznego audio (invalid_audio, nieznany format, lub model, który nie jest modelem transkrypcyjnym (invalid_model).
402Równowagi nie da się ukryć.
413Plik 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).
502Sześć 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.

polutypuWymaganeOpis
modelStringówTakWzornictwo modelowe od GET /api/v1/models?type=embedding.
inputString lub array stringsTakWymagane 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_formatStringówNiefloat (w przypadku deficytu) lub base64 (Little-endian 32-bitowe płytki pływalne)
dimensionsintegerNieWłasny rozmiar modelu lub dla modelu z supported_dimensions Jeden z nich; wektor jest następnie skrócony i znormalizowany.
ModelkawymiarówKontekst
@cf/baai/bge-m31024 w wielu językach8 192 żetonów
@cf/qwen/qwen3-embedding-0.6b1024 w wielu językach8 192 żetonów
@cf/baai/bge-large-en-v1.51024 angielski512 żetonów
@cf/baai/bge-base-en-v1.5768, angielski512 żetonów
@cf/baai/bge-small-en-v1.5384 Angielski512 ż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 }
}
StatusKiedy
400Nie 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).
402Standardowy saldo jest zbyt niski. wbudowane nigdy nie używają salda Pro.
404Nie ma wzorca pod tą nazwą.
502Model 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);