Introducción
La biblioteca cliente para JavaScript/TypeScript ofrece una interfaz fácil de usar para interactuar con los servicios de Port.
Instalación
Para integrar el cliente en tu proyecto, instálalo usando npm:
npm install @portmoda/client
Características
Llamando a los Endpoints
Port gestiona las solicitudes de los endpoints a través de un sistema de colas, lo que garantiza la fiabilidad y la escalabilidad. Usa el método subscribe para enviar una solicitud y esperar el resultado.
Ejemplo:
import { port } from "@portmoda/client";
const result = await port.subscribe("black-forest-labs/flux-kontext-pro/text-to-image", {
input: {
prompt: "Una tetera de cristal con té de flores en flor en su interior, colocada sobre una mesa de madera junto a una ventana iluminada por el sol con una suave luz matutina.",
"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);
Gestión de la Cola
Gestiona tus solicitudes con estos métodos:
Enviando una Solicitud
Envía una solicitud y recupera el request_id para usarlo más tarde.
Ejemplo:
import { port } from "@portmoda/client";
const { request_id } = await port.queue.submit("black-forest-labs/flux-kontext-max", {
input: {
prompt: "Una tetera de cristal con té de flores en flor en su interior, colocada sobre una mesa de madera junto a una ventana iluminada por el sol con una suave luz matutina.",
"aspect_ratio": "16:9",
"output_format": "jpeg",
},
});
Comprobando el Estado de la Solicitud
Recupera el estado de una solicitud.
Ejemplo:
import { port } from "@portmoda/client";
const status = await port.queue.status({
requestId: "pd_eTYYuw4EqYLzRBHgnAMHA8zH",
logs: true,
});
Recuperando los Resultados de la Solicitud
Obtén el resultado de una solicitud completada.
Ejemplo:
import { port } from "@portmoda/client";
const result = await port.queue.result({
requestId: "pd_eTYYuw4EqYLzRBHgnAMHA8zH",
});
console.log(result.data);
console.log(result.requestId);
Almacenamiento
La API de storage te permite subir archivos y recibir una URL, que luego se puede usar en tus solicitudes de endpoint de modelo. Esto es particularmente útil para modelos que requieren entradas de archivos, como de imagen a video o de voz a texto.
Tamaño máximo de archivo: 100MB
Subiendo Archivos en el Navegador
Puedes permitir que los usuarios suban archivos directamente desde su navegador. El siguiente ejemplo muestra cómo usar un elemento <input type="file"> para seleccionar un archivo y subirlo.
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('Archivo subido con éxito:', url);
// Ahora puedes usar esta URL con un endpoint de modelo
} catch (error) {
console.error('La subida falló:', error);
}
}
});
Subiendo Archivos en Node.js
En el lado del servidor con Node.js, puedes leer archivos del sistema de archivos local y subirlos.
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);
// El cliente necesita un objeto File, que podemos crear a partir de un búfer
const file = new File([buffer], basename(filePath));
const url = await port.storage.upload(file);
console.log('Archivo subido con éxito:', url);
return url;
} catch (error) {
console.error('La subida falló:', error);
}
}
uploadLocalFile("./path/to/your/image.png");
Subidas Automáticas con Endpoints de Modelo
El SDK de JavaScript puede manejar automáticamente las subidas de archivos por ti. Cuando pasas un objeto File, Blob o un URI de datos base64 a la entrada de un endpoint de modelo, el SDK primero lo subirá al almacenamiento y luego usará la URL resultante en la solicitud.
Esto simplifica el proceso ya que no necesitas realizar un paso de subida por separado.
import { port } from "@portmoda/client";
// Un objeto File de una entrada de archivo del navegador se subirá automáticamente
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];
const result = await port.subscribe("some-model-that-takes-images", {
input: {
image: file, // El SDK sube este archivo automáticamente
prompt: "Un prompt que describe qué hacer con la imagen"
}
});
// Un URI de datos base64 también se subirá automáticamente
const base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...";
const result2 = await port.subscribe("some-model-that-takes-images", {
input: {
image: base64Image, // El SDK convierte esto automáticamente a un Blob y lo sube
prompt: "Un prompt que describe qué hacer con la imagen"
}
});
Soporte
Únete a nuestra comunidad para obtener ayuda o participar en debates:
¡Estamos aquí para ayudarte!