|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- import * as FormDataUtils from '../../../packages/form-data';
- import {
- CreatedResource,
- } from '../common';
- import { DoFetch } from '../../../packages/request';
- import { PlatformApiError } from '../../../common';
-
- export enum ImageSize {
- SQUARE_256 = '256x256',
- SQUARE_512 = '512x512',
- SQUARE_1024 = '1024x1024',
- }
-
- export enum ImageResponseFormat {
- URL = 'url',
- BASE64_JSON = 'b64_json',
- }
-
- export interface CreateImageParams {
- prompt: string;
- n? : number;
- size?: ImageSize;
- user?: string;
- }
-
- export interface ImageData {
- b64_json: string;
- }
-
- export interface ImageDataEvent extends CreatedResource {
- data: Buffer[];
- }
-
- export function createImage(
- this: NodeJS.EventEmitter,
- doFetch: DoFetch,
- params: CreateImageParams,
- ) {
- doFetch('POST', '/images/generations', {
- prompt: params.prompt,
- n: params.n ?? 1,
- size: params.size ?? ImageSize.SQUARE_1024,
- user: params.user,
- response_format: ImageResponseFormat.BASE64_JSON,
- } as Record<string, unknown>)
- .then(async (response) => {
- if (!response.ok) {
- this.emit('error', new PlatformApiError(
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- `Request from platform returned with status: ${response.status}`,
- response,
- ));
- this.emit('end');
- return;
- }
-
- const responseData = await response.json() as Record<string, unknown>;
- const data = responseData.data as ImageData[];
- this.emit('data', {
- ...responseData,
- data: data.map((item) => Buffer.from(item.b64_json, 'base64')),
- });
- this.emit('end');
- })
- .catch((err) => {
- this.emit('error', err as Error);
- this.emit('end');
- });
-
- return this;
- }
-
- export interface CreateImageEditParams {
- image: Buffer;
- mask?: Buffer;
- prompt: string;
- n?: number;
- size?: ImageSize;
- user?: string;
- }
-
- export function createImageEdit(
- this: NodeJS.EventEmitter,
- doFetch: DoFetch,
- params: CreateImageEditParams,
- ) {
- doFetch('POST', '/images/edits', FormDataUtils.fromJson({
- prompt: params.prompt,
- image: params.image,
- mask: params.mask,
- n: params.n ?? 1,
- size: params.size ?? ImageSize.SQUARE_1024,
- response_format: ImageResponseFormat.BASE64_JSON,
- }))
- .then(async (response) => {
- if (!response.ok) {
- this.emit('error', new PlatformApiError(
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- `Request from platform returned with status: ${response.status}`,
- response,
- ));
- this.emit('end');
- return;
- }
-
- const responseData = await response.json() as Record<string, unknown>;
- const data = responseData.data as ImageData[];
- const emittedData = {
- ...responseData,
- data: data.map((item) => Buffer.from(item.b64_json, 'base64')),
- } as ImageDataEvent;
- this.emit('data', emittedData);
- this.emit('end');
- })
- .catch((err) => {
- this.emit('error', err as Error);
- this.emit('end');
- });
-
- return this;
- }
-
- export interface CreateImageVariationParams {
- image: Buffer;
- n?: number;
- size?: ImageSize;
- user?: string;
- }
-
- export function createImageVariation(
- this: NodeJS.EventEmitter,
- doFetch: DoFetch,
- params: CreateImageVariationParams,
- ) {
- doFetch('POST', '/images/variations', FormDataUtils.fromJson({
- image: params.image,
- n: params.n ?? 1,
- size: params.size ?? ImageSize.SQUARE_1024,
- response_format: ImageResponseFormat.BASE64_JSON,
- }))
- .then(async (response) => {
- if (!response.ok) {
- this.emit('error', new PlatformApiError(
- // eslint-disable-next-line @typescript-eslint/restrict-template-expressions
- `Request from platform returned with status: ${response.status}`,
- response,
- ));
- this.emit('end');
- return;
- }
-
- const responseData = await response.json() as Record<string, unknown>;
- const data = responseData.data as ImageData[];
- this.emit('data', {
- ...responseData,
- data: data.map((item) => Buffer.from(item.b64_json, 'base64')),
- });
- this.emit('end');
- })
- .catch((err) => {
- this.emit('error', err as Error);
- this.emit('end');
- });
-
- return this;
- }
|