Introdução
A biblioteca cliente para JavaScript/TypeScript oferece uma interface fácil de usar para interagir com os serviços da Port.
Instalação
Para integrar o cliente ao seu projeto, instale-o usando npm:
npm install @portmoda/client
Recursos
Chamando Endpoints
A Port gerencia as solicitações de endpoint por meio de um sistema de filas, garantindo confiabilidade e escalabilidade. Use o método subscribe para enviar uma solicitação e aguardar o resultado.
Exemplo:
import { port } from "@portmoda/client";
const result = await port.subscribe("black-forest-labs/flux-kontext-pro/text-to-image", {
input: {
prompt: "Um bule de vidro com chá de flores desabrochando dentro, colocado em uma mesa de madeira perto de uma janela ensolarada com uma suave luz da manhã.",
"aspect_ratio": "16:9",
"output_format": "jpeg",
},
logs: true,
onQueueUpdate: (update) => {
if (update.status === "IN_PROGRESS") {
console.log(update.logs)
}
},
});
console.log(result.data);
console.log(result.requestId);
Gerenciamento de Fila
Gerencie suas solicitações com estes métodos:
Enviando uma Solicitação
Envie uma solicitação e recupere o request_id para uso posterior.
Exemplo:
import { port } from "@portmoda/client";
const { request_id } = await port.queue.submit("black-forest-labs/flux-kontext-max", {
input: {
prompt: "Um bule de vidro com chá de flores desabrochando dentro, colocado em uma mesa de madeira perto de uma janela ensolarada com uma suave luz da manhã.",
"aspect_ratio": "16:9",
"output_format": "jpeg",
},
});
Verificando o Status da Solicitação
Recupere o status de uma solicitação.
Exemplo:
import { port } from "@portmoda/client";
const status = await port.queue.status({
requestId: "pd_eTYYuw4EqYLzRBHgnAMHA8zH",
logs: true,
});
Recuperando Resultados da Solicitação
Busque o resultado de uma solicitação concluída.
Exemplo:
import { port } from "@portmoda/client";
const result = await port.queue.result({
requestId: "pd_eTYYuw4EqYLzRBHgnAMHA8zH",
});
console.log(result.data);
console.log(result.requestId);
Armazenamento
A API storage permite que você faça upload de arquivos e receba uma URL, que pode ser usada nas solicitações de endpoint do seu modelo. Isso é particularmente útil para modelos que exigem entradas de arquivo, como de imagem para vídeo ou de fala para texto.
Tamanho máximo do arquivo: 100MB
Fazendo Upload de Arquivos no Navegador
Você pode permitir que os usuários façam upload de arquivos diretamente do navegador. O exemplo a seguir mostra como usar um elemento <input type="file"> para selecionar um arquivo e fazer o upload.
import { port } from "@portmoda/client";
const fileInput = document.getElementById('file-input');
fileInput.addEventListener('change', async (event) => {
const file = event.target.files[0];
if (file) {
try {
const url = await port.storage.upload(file);
console.log('Arquivo enviado com sucesso:', url);
// Agora você pode usar esta URL com um endpoint de modelo
} catch (error) {
console.error('O upload falhou:', error);
}
}
});
Fazendo Upload de Arquivos no Node.js
No lado do servidor com Node.js, você pode ler arquivos do sistema de arquivos local e fazer o upload deles.
import { port } from "@portmoda/client";
import { readFile } from "node:fs/promises";
import { basename } from "node:path";
async function uploadLocalFile(filePath) {
try {
const buffer = await readFile(filePath);
// O cliente precisa de um objeto File, que podemos criar a partir de um buffer
const file = new File([buffer], basename(filePath));
const url = await port.storage.upload(file);
console.log('Arquivo enviado com sucesso:', url);
return url;
} catch (error) {
console.error('O upload falhou:', error);
}
}
uploadLocalFile("./path/to/your/image.png");
O SDK do JavaScript pode lidar automaticamente com o upload de arquivos para você. Quando você passa um objeto File, Blob ou um URI de dados base64 para a entrada de um endpoint de modelo, o SDK primeiro o envia para o armazenamento e, em seguida, usa a URL resultante na solicitação.
Isso simplifica o processo, pois você não precisa executar uma etapa de upload separada.
import { port } from "@portmoda/client";
// Um objeto File de uma entrada de arquivo do navegador será enviado automaticamente
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];
const result = await port.subscribe("some-model-that-takes-images", {
input: {
image: file, // O SDK envia este arquivo automaticamente
prompt: "Um prompt descrevendo o que fazer com a imagem"
}
});
// Um URI de dados base64 também será enviado automaticamente
const base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...";
const result2 = await port.subscribe("some-model-that-takes-images", {
input: {
image: base64Image, // O SDK converte isso automaticamente em um Blob e o envia
prompt: "Um prompt descrevendo o que fazer com a imagem"
}
});
Suporte
Junte-se à nossa comunidade para obter ajuda ou participar de discussões:
Estamos aqui para ajudá-lo!