Base de conhecimento Desenvolvedores
Imagens, áudio e embeddings
Os geradores do aplicativo e os blocos de construção para a pesquisa: imagens, vídeo, fala, transcrição e embeddings, cada um cobrado por uso do seu saldo.
Esta página foi traduzida automaticamente por conveniência. O original em inglês é a versão aplicável.
Gerando imagens
Faz de uma a quatro imagens a partir de uma mensagem e retorna-as quando elas estiverem feitas. ?image no seu app.
POST https://nymbot.ai/api/v1/images/generations Necessita de uma chave de API, ou Pagamento Lightning por solicitação.
Os ídolos vêm de GET /api/v1/models?type=imageO gerador padrão,
@cf/black-forest-labs/flux-1-schnell, custa um plano 5 créditos padrão (50 sats) uma imagem. Cada outro gerador gasta créditos Pro a seu próprio preço, com a taxa habitual e margem, como em O app. n Imagens custam
n Um campo que um gerador não toma é descartado em vez de recusado; o gerador padrão usa apenas o prompt.
| Campo | Tipo | Requerido | Descrição |
|---|---|---|---|
model | string | Sim | Um gerador de ID, como nano-banana. |
prompt | string | Sim | Apenas os primeiros 2000 caracteres são usados. |
n | inteiro | Não | 1 a 4.Default 1.Também aceito como num_images. |
size | string | Não | Uma proporção como a "16:9"Ou seja, um tamanho como "1792x1024", que se torna o mais próximo de 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 e 4:5. "auto" Deixe para o gerador. |
aspect_ratio | string | Não | O mesmo que sizee ganha se ambos forem enviados. |
quality | string | Não | geradores específicos, como "low", "medium" ou "high". |
negative_prompt | string | Não | O que deixar de fora. |
output_format | string | Não | "png", "jpeg" ou "webp". |
response_format | string | Não | "url" (o defeito) ou "b64_json". |
image_url | string | Não | Uma imagem para começar por: um https:// um link de no máximo 4.096 caracteres sem nome de usuário ou senha, ou um data:image/…;base64 URL (PNG, JPEG, WebP ou GIF; não SVG). editRequerido por aqueles com requires_image_url. |
resolution não é usado: cada gerador faz o seu próprio tamanho. url, cada imagem é carregada para um hospedeiro público Blossom e você recebe seu link (alguns geradores apenas devolvem um link de seu próprio, que é transmitido). qualquer pessoa com o link pode abri-lo e não pode ser baixado novamente; veja O que a fogueira pode vercom
b64_json A imagem retorna na resposta e nunca é carregada. data: URL em image_url Verifica-se da mesma forma que um
Edit e carregado para Blossom primeiro para que o gerador possa recuperá-lo; é excluído novamente se a solicitação falhar desconto.
Se alguns dos n imagens falham, você obtém aqueles que funcionaram, são cobrados apenas por aqueles (mais qualquer fornecedor cobrado apesar do fracasso), e nymbot.failed diz quantos estão faltando. se todos falharem, a solicitação retorna 502.
Resposta
{
"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 }
}
| Estatuto | Quando |
|---|---|
400 | Não é rápido; n de 1 a 4 (invalid_valueO que é um bom tamanho (invalid_size) ou imagem (invalid_image, invalid_image_url); um modelo que existe mas não é um gerador de imagem (invalid_model); uma imagem para um gerador que não pode editar (edit_unsupported); nenhuma foto para quem precisa dela (image_required). |
402 | O balanço não pode cobrir todas as imagens solicitadas. |
404 | Nenhum modelo com esse nome (model_not_found). |
502 | O gerador falhou (upstream_errorNada é cobrado a menos que o fornecedor tenha cobrado pela tentativa; então o erro charged_sats. |
503 | As imagens não podem ser hospedadas no momento (media_hosting_unavailable). b64_json Ainda funciona |
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);
Editar Imagens
Altera uma imagem que você carrega, seguindo um convite.Este é o endpoint de edição da OpenAI, então os SDKs da OpenAI images.edit funciona como está. Somente geradores Pro com edit Na lista de modelos, aceite.
POST https://nymbot.ai/api/v1/images/edits Necessita de uma chave de API, ou Pagamento Lightning por solicitaçãoO corpo é multipart/form-dataAté 32 MB.
| Campo | Tipo | Requerido | Descrição |
|---|---|---|---|
image | Arquivo | Sim | A imagem para editar: PNG, JPEG, WebP ou GIF, até 20 MB. Também aceito como image[]O primeiro é usado. |
prompt | string | Sim | O que mudar. |
model | string | Sim | Um gerador com edit. |
n | inteiro | Não | 1 ao 4. |
sizeaspect_ratioqualitynegative_promptoutput_format | string | Não | Quanto à geração. |
response_format | string | Não | "b64_json" (o padrão aqui) ou "url". |
A imagem que você carrega é verificada para ser um PNG, JPEG, WebP ou GIF bem formado, enviado como seu tipo real, e colocado em um servidor público Blossom, porque os geradores coletam sua entrada por link. Trate-a como pública. Se a edição falhar e nada for cobrado, a cópia hospedada é excluída novamente. A resposta tem a mesma forma que para a geração. O preço é o preço do gerador, que para alguns geradores inclui uma taxa para a imagem de entrada.
Resposta
{
"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 }
}
| Estatuto | Quando |
|---|---|
400 | Nenhuma imagem ou prompt, um arquivo que não seja uma imagem (invalid_image) ou um gerador que não pode editar (edit_unsupported). |
413 | A imagem tem mais de 20 MB (file_too_large), ou toda a solicitação acima de 32 MB. |
503 | A imagem não pode ser hospedada no momento (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"));
Vídeo
Um vídeo leva minutos, então ele é executado em segundo plano. Você o submete, recebe um ID imediatamente e pergunta sobre o ID até que ele seja feito.
POST https://nymbot.ai/api/v1/videos Necessita de uma chave de API, ou Pagamento Lightning por solicitação• Retorno 202.
| Campo | Tipo | Requerido | Descrição |
|---|---|---|---|
model | string | Sim | Um gerador de vídeo id de GET /api/v1/models?type=videoAssim como veo. |
prompt | string | Sim | O que deveria acontecer. |
duration | Número ou string | Não | Duração em segundos, mais de 0 e até 60.Utilizado apenas por geradores que permitem que você escolha o comprimento; os outros fazem o seu comprimento habitual, que é o que seconds A resposta e o preço seguem. |
aspect_ratio | string | Não | Assim como "16:9" ou "9:16"Um tamanho como "1280x720" torna-se a relação mais próxima. |
resolutionquality | string | Não | Um dos geradores resolutions Na lista de modelos, como "720p" ou "1080p"Estabelece o preço.Tudo o mais é recusado com unsupported_resolution. |
image_url | string | Não | Uma imagem para começar por: um https:// link ou a data:image/… URL, que é carregado para um servidor público Blossom primeiro. Requerido por geradores com requires_image_url. |
O preço é fixo quando você submete, a partir do gerador, resolução e comprimento, por isso é cobrado do seu saldo Pro assim que o provedor aceitar o trabalho, e mostrado como
cost, estimated_cost e nymbotSe o fornecedor recusar o trabalho, nada é cobrado. Se a renderização falhar mais tarde, ou o clipe acabado não pode ser armazenado e o fornecedor não faturou por ele, a cobrança é reembolsada uma vez, automaticamente. Uma renderização que ainda está acontecendo após uma hora é desistida, e mantém sua cobrança, porque o fornecedor fatura uma renderização uma vez que a aceita. Um reembolso retorna os créditos, mas não reduz a contagem de gastos da chave.
Reações (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 Começa como in_progressou completed O vídeo já está em data quando o gerador devolveu imediatamente.
Verificar em um vídeo
GET https://nymbot.ai/api/v1/videos/{id} - precisa de uma chave pertencente ao nim que a enviou. Uma chave que atingiu o seu limite ainda pode verificar.
Ela responde 202 O vídeo está sendo produzido e 200 Pergunte a cada 5 a 10 segundos. Cada cheque pergunta ao provedor uma vez e responde de uma vez; ele nunca espera pelo vídeo. Um trabalho é mantido por 24 horas depois que foi submetido.
GET /api/v1/videos lista os últimos 50 empregos da chave como
{"object": "list", "data": […]}.
Reações (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 É in_progress, completed ou failedUm trabalho fracassado carrega error ({"code": "generation_failed", "message": …}Se for reembolsado, cost São 0 e nymbot Adição
refunded_credits e refunded_satsO vídeo acabado está em um host público Blossom, como imagens geradas.
| Estatuto | Quando |
|---|---|
400 | Nenhuma prompt; uma duração fora de 0 a 60 (invalid_value); uma resolução que o gerador não oferece (unsupported_resolution); nenhuma imagem para um gerador que precisa de um (image_required); um modelo que não é um gerador de vídeo (invalid_model). |
402 | O balanço Pro não pode cobrir o vídeo. |
404 | Não existe um gerador (model_not_found), ou nenhum trabalho por esse id para o seu nym, ou é mais de 24 horas de idade (video_not_found). |
429 | O seu ninho já tem 10 vídeos renderizando (video_jobs_limitVerifique-os e submeta mais uma vez que um termina. |
502 | O gerador recusou o trabalho.Nada é cobrado a menos que o provedor tenha cobrado por isso. |
503 | Os vídeos não podem ser entregues ou armazenados no momento (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);
Texto do discurso
Leia texto em voz alta e retorna o arquivo de áudio em si, não um link. audio.speech.create No OpenAI SDKs funciona.
POST https://nymbot.ai/api/v1/audio/speech Necessita de uma chave de API, ou Pagamento Lightning por solicitação.
| Campo | Tipo | Requerido | Descrição |
|---|---|---|---|
model | string | Não | Um modelo de discurso de Lista de modelos de áudioDefinição: a voz padrão, @cf/myshell-ai/melotts. aura-2 Conheça o Deepgram Aura 2 |
input | string | Sim | O texto para ler: até 800 caracteres para a voz padrão, 2.000 para Aura 2. |
voice | string | Não | Um ID de voz de A lista de vozesUm alto-falante de aura como luna (ou aura-2-luna-en, ou uma linguagem MeloTTS (en, es, fr, zh.OpenAI nomes de voz como alloy são aceitos e dão a voz padrão do modelo. |
language | string | Não | Um código de linguagem como esSem uma voz, ele escolhe uma para essa língua. Uma voz que fala outra língua retorna 422 voice_language_mismatche uma língua para a qual o modelo não tem voz 422 unsupported_language. |
response_format | string | Não | A voz padrão retorna mp3 Aura 2 está de volta mp3 (O que é o defeito) opus, aac, flac, wav ou pcm. |
speed | Número | Não | aceito e ignorado. |
A voz padrão custa 3 créditos padrão (30 sats) por solicitação, como no aplicativo. Aura 2 é Pro, avaliado pelos caracteres que você envia. O corpo de resposta é o áudio, com uma correspondência
Content-TypeO custo está na X-Nymbot-Cost-Sats Se o modelo de fala falhar, nada é cobrado.
Resposta
HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Nymbot-Cost-Sats: 4.2
X-Nymbot-Balance-Sats: 41055.6
(audio bytes)
| Estatuto | Quando |
|---|---|
400 | Não há entrada; entrada acima do limite do modelo (input_too_long); um formato que o modelo não pode produzir (unsupported_response_format); uma voz desconhecida (invalid_voice); um modelo que não é um modelo de fala (invalid_model). |
422 | A voz não fala a língua dada, ou o modelo não tem voz para isso. |
502 | O modelo de fala falhou.Nada é cobrado. |
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()));
Modelos de áudio e vozes
Duas listas públicas para escolher um modelo de fala e voz, ou um modelo de transcrição.Há 41 falantes de inglês Aura 2 e quatro línguas MeloTTS.
GET https://nymbot.ai/api/v1/audio/models Nenhuma chave necessária.
GET https://nymbot.ai/api/v1/audio/voices?language=en Nenhuma chave necessária.
| Campo | Tipo | Requerido | Descrição |
|---|---|---|---|
language | Redação de Query (String) | Não | Apenas vozes para essa língua. |
model | Redação de Query (String) | Não | Apenas vozes para este modelo. |
Resposta (em voz alta)
{
"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 }
]
}
A lista de respostas dos modelos {"object": "list", "data": {"tts": […], "stt": […]}}Cada modelo de fala dá seu equilíbrio, preço, max_input_chars,
response_formats, languages e default_voiceO modelo de transcrição dá seus aliases, max_file_bytes, max_seconds, formatos e preço por minuto.
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);
Discurso ao texto
Converte uma gravação em texto com o Whisper. Este é o ponto final de transcrição da OpenAI, então
audio.transcriptions.create trabalhos .
POST https://nymbot.ai/api/v1/audio/transcriptions Necessita de uma chave de API, ou Pagamento Lightning por solicitaçãoO corpo é multipart/form-data.
| Campo | Tipo | Requerido | Descrição |
|---|---|---|---|
file | Arquivo | Sim | A gravação, de 256 bytes a 25 MB e até 30 minutos: WAV, WebM, MP4 ou M4A, Ogg ou Opus, MP3 e os outros formatos Whisper lê. |
model | string | Não | defeitos whisperO que é o Whisper Large v3 Turbo? whisper-1, whisper-large-v3-turbo e @cf/openai/whisper-large-v3-turbo Significa o mesmo. |
language | string | Não | A língua falada, como enDetectado se deixado de fora. |
prompt | string | Não | Palavras ou ortografias a serem esperadas, como nomes. Somente os primeiros 1000 caracteres são usados. |
response_format | string | Não | json (O que é o defeito) text, srt, vtt ou verbose_json. |
Para arquivos WAV, WebM, MP4 e Ogg, o comprimento é lido do arquivo antes de qualquer coisa ser executada, de modo que uma gravação de mais de 30 minutos é recusada na frente (com graça de 3 segundos). O comprimento de um arquivo WAV vem de sua taxa de amostra, canais e tamanho da amostra. O comprimento de outros formatos, como MP3, não pode ser lido na frente, então eles são limitados por tamanho: na taxa de bit mais baixa Nymbot assume, 8 kbps, 30 minutos é de 1,8 MB, e um arquivo maior em tal formato é recusado com 413
audio_too_long Envie gravações mais longas como WAV, WebM, MP4 ou Ogg. Se Whisper então relatar mais de 30 minutos de qualquer forma, o pedido é recusado com
413 audio_too_long, e desde que o sussurro correu, 30 minutos são carregados.
Você paga pelo comprimento do áudio, arredondado até o segundo: o mais longo do comprimento lido do arquivo, o comprimento do relatório de sussurro, e o menor que o tamanho do arquivo permite, ao preço por minuto do sussurro com a taxa e margem usuais, e pelo menos 0,05 crédito um pedido. 402 Na aplicação, a transcrição de uma mensagem de voz pode ser gratuita; na API, ela é sempre carregada.
Resposta
{
"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 devolve texto claro, srt e vtt Retornar os subtítulos e
verbose_json adiciona o idioma, a duração e os segmentos temporizados. Para os três que não são JSON, o custo está nos cabeçalhos.
| Estatuto | Quando |
|---|---|
400 | Nenhum arquivo, um arquivo sem áudio usável (invalid_audio, um formato desconhecido, ou um modelo que não é um modelo de transcrição (invalid_model). |
402 | Nem o equilíbrio pode cobri-lo. |
413 | O arquivo tem mais de 25 MB (file_too_large( ) ou a gravação de mais de 30 minutos, ou, em um formato cujo comprimento não pode ser lido na frente, de mais de 1,8 MB (audio_too_long). |
502 | O sussurro não conseguiu processar o áudio. Nada é cobrado. |
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);
Tradução do discurso para o inglês
POST https://nymbot.ai/api/v1/audio/translations Necessita de uma chave de API, ou Pagamento Lightning por solicitaçãoO corpo é multipart/form-data.
O mesmo que a transcrição, com os mesmos campos além de language, limites e preço, mas o texto retorna em inglês, independentemente da língua que foi falada. 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);
Embaixadores
Converte texto em vetores para pesquisa, agrupamento e deduplicação. Os modelos são executados no Cloudflare e gastam o saldo padrão.
POST https://nymbot.ai/api/v1/embeddings Necessita de uma chave de API, ou Pagamento Lightning por solicitação.
| Campo | Tipo | Requerido | Descrição |
|---|---|---|---|
model | string | Sim | Um modelo de implantação de GET /api/v1/models?type=embedding. |
input | Array ou Array de Strings | Sim | O texto a ser incorporado, até 100 cadeias não vazias. matrizes de tokens são recusados (token_input_unsupportedCada entrada deve se encaixar no modelo context_length, contado como cerca de quatro bytes um token. |
encoding_format | string | Não | float (o defeito) ou base64 (Little-endian 32-bit floats são os mais usados) |
dimensions | inteiro | Não | tamanho do modelo, ou para um modelo com supported_dimensions um deles; o vetor é então encurtado e normalizado. |
| Modelo | Dimensões | Contexto |
|---|---|---|
@cf/baai/bge-m3 | 1024 em várias línguas | 8.192 Tópicos |
@cf/qwen/qwen3-embedding-0.6b | 1024 em várias línguas | 8.192 Tópicos |
@cf/baai/bge-large-en-v1.5 | 1024 em inglês | 512 Tópicos |
@cf/baai/bge-base-en-v1.5 | 768, Inglês | 512 Tópicos |
@cf/baai/bge-small-en-v1.5 | 384 Inglês | 512 Tópicos |
A lista de modelos é a fonte de verdade para os quais estão disponíveis e o que eles custam; o EmbeddingGemma do Google, com vetores mais curtos a pedido, aparece lá também quando o catálogo tem um preço para ele.
Resposta
{
"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 }
}
| Estatuto | Quando |
|---|---|
400 | Nenhuma entrada ou um vazio; token array (token_input_unsupported); mais de 100 entradas (too_many_inputs); uma entrada mais longa do que o modelo leva (input_too_long); um tamanho que o modelo não pode dar (unsupported_dimensions). |
402 | O saldo padrão é muito baixo. Os embeddings nunca usam o saldo Pro. |
404 | Nenhum modelo embutido com esse nome. |
502 | O modelo falhou.Nada é cobrado. |
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);