пакет npm @sunra/client

Введение

Клиентская библиотека для JavaScript/TypeScript предлагает простой в использовании интерфейс для взаимодействия со службами Sunra.

Установка

Чтобы интегрировать клиент в свой проект, установите его с помощью npm:
npm install @sunra/client

Функции

Вызов конечных точек

Sunra управляет запросами к конечным точкам через систему очередей, обеспечивая надежность и масштабируемость. Используйте метод subscribe, чтобы отправить запрос и дождаться результата. Пример:
import { sunra } from "@sunra/client";

const result = await sunra.subscribe("black-forest-labs/flux-kontext-pro/text-to-image", {
  input: {
    prompt: "Стеклянный чайник с цветущим цветочным чаем внутри, поставленный на деревянный стол у залитого солнцем окна с мягким утренним светом.",
    "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);

Управление очередью

Управляйте своими запросами с помощью этих методов:
Отправка запроса
Отправьте запрос и получите request_id для последующего использования. Пример:
import { sunra } from "@sunra/client";

const { request_id } = await sunra.queue.submit("black-forest-labs/flux-kontext-max", {
  input: {
    prompt: "Стеклянный чайник с цветущим цветочным чаем внутри, поставленный на деревянный стол у залитого солнцем окна с мягким утренним светом.",
    "aspect_ratio": "16:9",
    "output_format": "jpeg",
  },
});
Проверка статуса запроса
Получите статус запроса. Пример:
import { sunra } from "@sunra/client";

const status = await sunra.queue.status({
  requestId: "pd_eTYYuw4EqYLzRBHgnAMHA8zH",
  logs: true,
});
Получение результатов запроса
Получите результат выполненного запроса. Пример:
import { sunra } from "@sunra/client";

const result = await sunra.queue.result({
  requestId: "pd_eTYYuw4EqYLzRBHgnAMHA8zH",
});

console.log(result.data);
console.log(result.requestId);

Хранилище

API storage позволяет загружать файлы и получать URL-адрес, который затем можно использовать в запросах к конечным точкам вашей модели. Это особенно полезно для моделей, которым требуются входные файлы, таких как преобразователи изображения в видео или речи в текст.
Максимальный размер файла: 100 МБ
Загрузка файлов в браузере
Вы можете разрешить пользователям загружать файлы прямо из браузера. В следующем примере показано, как использовать элемент <input type="file"> для выбора и загрузки файла.
import { sunra } from "@sunra/client";

const fileInput = document.getElementById('file-input');

fileInput.addEventListener('change', async (event) => {
  const file = event.target.files[0];
  if (file) {
    try {
      const url = await sunra.storage.upload(file);
      console.log('Файл успешно загружен:', url);
      // Теперь вы можете использовать этот URL с конечной точкой модели
    } catch (error) {
      console.error('Ошибка загрузки:', error);
    }
  }
});
Загрузка файлов в Node.js
На стороне сервера с помощью Node.js вы можете читать файлы из локальной файловой системы и загружать их.
import { sunra } from "@sunra/client";
import { readFile } from "node:fs/promises";
import { basename } from "node:path";

async function uploadLocalFile(filePath) {
  try {
    const buffer = await readFile(filePath);
    // Клиенту нужен объект File, который мы можем создать из буфера
    const file = new File([buffer], basename(filePath));

    const url = await sunra.storage.upload(file);
    console.log('Файл успешно загружен:', url);
    return url;
  } catch (error) {
    console.error('Ошибка загрузки:', error);
  }
}

uploadLocalFile("./путь/к/вашему/изображению.png");

Автоматическая загрузка с помощью конечных точек модели

SDK JavaScript может автоматически обрабатывать загрузку файлов за вас. Когда вы передаете объект File, Blob или URI данных base64 на вход конечной точки модели, SDK сначала загрузит его в хранилище, а затем использует полученный URL-адрес в запросе. Это упрощает процесс, так как вам не нужно выполнять отдельный шаг загрузки.
import { sunra } from "@sunra/client";

// Объект File из файлового ввода браузера будет загружен автоматически
const fileInput = document.getElementById('file-input');
const file = fileInput.files[0];

const result = await sunra.subscribe("какая-то-модель-которая-принимает-изображения", {
  input: {
    image: file, // SDK автоматически загружает этот файл
    prompt: "Подсказка, описывающая, что делать с изображением"
  }
});

// URI данных base64 также будет загружен автоматически
const base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQ...";

const result2 = await sunra.subscribe("какая-то-модель-которая-принимает-изображения", {
  input: {
    image: base64Image, // SDK автоматически преобразует это в Blob и загружает его
    prompt: "Подсказка, описывающая, что делать с изображением"
  }
});

Поддержка

Присоединяйтесь к нашему сообществу для помощи или обсуждений: Мы здесь, чтобы помочь вам!