|
- import {
- DoFetch,
- PlatformError,
- PlatformResponse,
- } from '../common';
-
- export enum CreateImageSize {
- SQUARE_256 = '256x256',
- SQUARE_512 = '512x512',
- SQUARE_1024 = '1024x1024',
- }
-
- export enum CreateImageResponseFormat {
- URL = 'url',
- BASE64_JSON = 'b64_json',
- }
-
- export interface CreateImageParams {
- prompt: string;
- n? : number;
- size?: CreateImageSize;
- user?: string;
- }
-
- export interface CreateImageData {
- b64_json: string;
- }
-
- export interface CreateImageDataEvent extends PlatformResponse {
- 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 ?? CreateImageSize.SQUARE_1024,
- user: params.user,
- response_format: CreateImageResponseFormat.BASE64_JSON,
- })
- .then(async (response) => {
- if (!response.ok) {
- this.emit('error', new PlatformError(
- // 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 CreateImageData[];
- 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;
- }
|