@ai-sdk/black-forest-labs 0.0.0-fd764a60-20260114143805

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,448 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var src_exports = {};
22
+ __export(src_exports, {
23
+ VERSION: () => VERSION,
24
+ blackForestLabs: () => blackForestLabs,
25
+ createBlackForestLabs: () => createBlackForestLabs
26
+ });
27
+ module.exports = __toCommonJS(src_exports);
28
+
29
+ // src/black-forest-labs-provider.ts
30
+ var import_provider = require("@ai-sdk/provider");
31
+ var import_provider_utils2 = require("@ai-sdk/provider-utils");
32
+
33
+ // src/black-forest-labs-image-model.ts
34
+ var import_provider_utils = require("@ai-sdk/provider-utils");
35
+ var import_v4 = require("zod/v4");
36
+ var DEFAULT_POLL_INTERVAL_MILLIS = 500;
37
+ var DEFAULT_POLL_TIMEOUT_MILLIS = 6e4;
38
+ var BlackForestLabsImageModel = class {
39
+ constructor(modelId, config) {
40
+ this.modelId = modelId;
41
+ this.config = config;
42
+ this.specificationVersion = "v3";
43
+ this.maxImagesPerCall = 1;
44
+ }
45
+ get provider() {
46
+ return this.config.provider;
47
+ }
48
+ async getArgs({
49
+ prompt,
50
+ files,
51
+ mask,
52
+ size,
53
+ aspectRatio,
54
+ seed,
55
+ providerOptions
56
+ }) {
57
+ var _a, _b, _c;
58
+ const warnings = [];
59
+ const finalAspectRatio = aspectRatio != null ? aspectRatio : size ? convertSizeToAspectRatio(size) : void 0;
60
+ if (size && !aspectRatio) {
61
+ warnings.push({
62
+ type: "unsupported",
63
+ feature: "size",
64
+ details: "Deriving aspect_ratio from size. Use the width and height provider options to specify dimensions for models that support them."
65
+ });
66
+ } else if (size && aspectRatio) {
67
+ warnings.push({
68
+ type: "unsupported",
69
+ feature: "size",
70
+ details: "Black Forest Labs ignores size when aspectRatio is provided. Use the width and height provider options to specify dimensions for models that support them"
71
+ });
72
+ }
73
+ const bflOptions = await (0, import_provider_utils.parseProviderOptions)({
74
+ provider: "blackForestLabs",
75
+ providerOptions,
76
+ schema: blackForestLabsImageProviderOptionsSchema
77
+ });
78
+ const [widthStr, heightStr] = (_a = size == null ? void 0 : size.split("x")) != null ? _a : [];
79
+ const inputImages = (files == null ? void 0 : files.map((file) => {
80
+ if (file.type === "url") {
81
+ return file.url;
82
+ }
83
+ if (typeof file.data === "string") {
84
+ return file.data;
85
+ }
86
+ return Buffer.from(file.data).toString("base64");
87
+ })) || [];
88
+ if (inputImages.length > 10) {
89
+ throw new Error("Black Forest Labs supports up to 10 input images.");
90
+ }
91
+ const inputImagesObj = inputImages.reduce((acc, img, index) => {
92
+ acc[`input_image${index === 0 ? "" : `_${index + 1}`}`] = img;
93
+ return acc;
94
+ }, {});
95
+ let maskValue;
96
+ if (mask) {
97
+ if (mask.type === "url") {
98
+ maskValue = mask.url;
99
+ } else {
100
+ if (typeof mask.data === "string") {
101
+ maskValue = mask.data;
102
+ } else {
103
+ maskValue = Buffer.from(mask.data).toString("base64");
104
+ }
105
+ }
106
+ }
107
+ const body = {
108
+ prompt,
109
+ seed,
110
+ aspect_ratio: finalAspectRatio,
111
+ width: (_b = bflOptions == null ? void 0 : bflOptions.width) != null ? _b : size ? Number(widthStr) : void 0,
112
+ height: (_c = bflOptions == null ? void 0 : bflOptions.height) != null ? _c : size ? Number(heightStr) : void 0,
113
+ steps: bflOptions == null ? void 0 : bflOptions.steps,
114
+ guidance: bflOptions == null ? void 0 : bflOptions.guidance,
115
+ image_prompt_strength: bflOptions == null ? void 0 : bflOptions.imagePromptStrength,
116
+ image_prompt: bflOptions == null ? void 0 : bflOptions.imagePrompt,
117
+ ...inputImagesObj,
118
+ mask: maskValue,
119
+ output_format: bflOptions == null ? void 0 : bflOptions.outputFormat,
120
+ prompt_upsampling: bflOptions == null ? void 0 : bflOptions.promptUpsampling,
121
+ raw: bflOptions == null ? void 0 : bflOptions.raw,
122
+ safety_tolerance: bflOptions == null ? void 0 : bflOptions.safetyTolerance,
123
+ webhook_secret: bflOptions == null ? void 0 : bflOptions.webhookSecret,
124
+ webhook_url: bflOptions == null ? void 0 : bflOptions.webhookUrl
125
+ };
126
+ return { body, warnings };
127
+ }
128
+ async doGenerate({
129
+ prompt,
130
+ files,
131
+ mask,
132
+ size,
133
+ aspectRatio,
134
+ seed,
135
+ providerOptions,
136
+ headers,
137
+ abortSignal
138
+ }) {
139
+ var _a, _b, _c;
140
+ const { body, warnings } = await this.getArgs({
141
+ prompt,
142
+ files,
143
+ mask,
144
+ size,
145
+ aspectRatio,
146
+ seed,
147
+ providerOptions,
148
+ n: 1,
149
+ headers,
150
+ abortSignal
151
+ });
152
+ const bflOptions = await (0, import_provider_utils.parseProviderOptions)({
153
+ provider: "blackForestLabs",
154
+ providerOptions,
155
+ schema: blackForestLabsImageProviderOptionsSchema
156
+ });
157
+ const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
158
+ const combinedHeaders = (0, import_provider_utils.combineHeaders)(
159
+ await (0, import_provider_utils.resolve)(this.config.headers),
160
+ headers
161
+ );
162
+ const submit = await (0, import_provider_utils.postJsonToApi)({
163
+ url: `${this.config.baseURL}/${this.modelId}`,
164
+ headers: combinedHeaders,
165
+ body,
166
+ failedResponseHandler: bflFailedResponseHandler,
167
+ successfulResponseHandler: (0, import_provider_utils.createJsonResponseHandler)(bflSubmitSchema),
168
+ abortSignal,
169
+ fetch: this.config.fetch
170
+ });
171
+ const pollUrl = submit.value.polling_url;
172
+ const requestId = submit.value.id;
173
+ const {
174
+ imageUrl,
175
+ seed: resultSeed,
176
+ start_time: resultStartTime,
177
+ end_time: resultEndTime,
178
+ duration: resultDuration
179
+ } = await this.pollForImageUrl({
180
+ pollUrl,
181
+ requestId,
182
+ headers: combinedHeaders,
183
+ abortSignal,
184
+ pollOverrides: {
185
+ pollIntervalMillis: bflOptions == null ? void 0 : bflOptions.pollIntervalMillis,
186
+ pollTimeoutMillis: bflOptions == null ? void 0 : bflOptions.pollTimeoutMillis
187
+ }
188
+ });
189
+ const { value: imageBytes, responseHeaders } = await (0, import_provider_utils.getFromApi)({
190
+ url: imageUrl,
191
+ headers: combinedHeaders,
192
+ abortSignal,
193
+ failedResponseHandler: (0, import_provider_utils.createStatusCodeErrorResponseHandler)(),
194
+ successfulResponseHandler: (0, import_provider_utils.createBinaryResponseHandler)(),
195
+ fetch: this.config.fetch
196
+ });
197
+ return {
198
+ images: [imageBytes],
199
+ warnings,
200
+ providerMetadata: {
201
+ blackForestLabs: {
202
+ images: [
203
+ {
204
+ ...resultSeed != null && { seed: resultSeed },
205
+ ...resultStartTime != null && { start_time: resultStartTime },
206
+ ...resultEndTime != null && { end_time: resultEndTime },
207
+ ...resultDuration != null && { duration: resultDuration },
208
+ ...submit.value.cost != null && { cost: submit.value.cost },
209
+ ...submit.value.input_mp != null && {
210
+ inputMegapixels: submit.value.input_mp
211
+ },
212
+ ...submit.value.output_mp != null && {
213
+ outputMegapixels: submit.value.output_mp
214
+ }
215
+ }
216
+ ]
217
+ }
218
+ },
219
+ response: {
220
+ modelId: this.modelId,
221
+ timestamp: currentDate,
222
+ headers: responseHeaders
223
+ }
224
+ };
225
+ }
226
+ async pollForImageUrl({
227
+ pollUrl,
228
+ requestId,
229
+ headers,
230
+ abortSignal,
231
+ pollOverrides
232
+ }) {
233
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
234
+ const pollIntervalMillis = (_b = (_a = pollOverrides == null ? void 0 : pollOverrides.pollIntervalMillis) != null ? _a : this.config.pollIntervalMillis) != null ? _b : DEFAULT_POLL_INTERVAL_MILLIS;
235
+ const pollTimeoutMillis = (_d = (_c = pollOverrides == null ? void 0 : pollOverrides.pollTimeoutMillis) != null ? _c : this.config.pollTimeoutMillis) != null ? _d : DEFAULT_POLL_TIMEOUT_MILLIS;
236
+ const maxPollAttempts = Math.ceil(
237
+ pollTimeoutMillis / Math.max(1, pollIntervalMillis)
238
+ );
239
+ const url = new URL(pollUrl);
240
+ if (!url.searchParams.has("id")) {
241
+ url.searchParams.set("id", requestId);
242
+ }
243
+ for (let i = 0; i < maxPollAttempts; i++) {
244
+ const { value } = await (0, import_provider_utils.getFromApi)({
245
+ url: url.toString(),
246
+ headers,
247
+ failedResponseHandler: bflFailedResponseHandler,
248
+ successfulResponseHandler: (0, import_provider_utils.createJsonResponseHandler)(bflPollSchema),
249
+ abortSignal,
250
+ fetch: this.config.fetch
251
+ });
252
+ const status = value.status;
253
+ if (status === "Ready") {
254
+ if (typeof ((_e = value.result) == null ? void 0 : _e.sample) === "string") {
255
+ return {
256
+ imageUrl: value.result.sample,
257
+ seed: (_f = value.result.seed) != null ? _f : void 0,
258
+ start_time: (_g = value.result.start_time) != null ? _g : void 0,
259
+ end_time: (_h = value.result.end_time) != null ? _h : void 0,
260
+ duration: (_i = value.result.duration) != null ? _i : void 0
261
+ };
262
+ }
263
+ throw new Error(
264
+ "Black Forest Labs poll response is Ready but missing result.sample"
265
+ );
266
+ }
267
+ if (status === "Error" || status === "Failed") {
268
+ throw new Error("Black Forest Labs generation failed.");
269
+ }
270
+ await (0, import_provider_utils.delay)(pollIntervalMillis);
271
+ }
272
+ throw new Error("Black Forest Labs generation timed out.");
273
+ }
274
+ };
275
+ var blackForestLabsImageProviderOptionsSchema = (0, import_provider_utils.lazySchema)(
276
+ () => (0, import_provider_utils.zodSchema)(
277
+ import_v4.z.object({
278
+ imagePrompt: import_v4.z.string().optional(),
279
+ imagePromptStrength: import_v4.z.number().min(0).max(1).optional(),
280
+ /** @deprecated use prompt.images instead */
281
+ inputImage: import_v4.z.string().optional(),
282
+ /** @deprecated use prompt.images instead */
283
+ inputImage2: import_v4.z.string().optional(),
284
+ /** @deprecated use prompt.images instead */
285
+ inputImage3: import_v4.z.string().optional(),
286
+ /** @deprecated use prompt.images instead */
287
+ inputImage4: import_v4.z.string().optional(),
288
+ /** @deprecated use prompt.images instead */
289
+ inputImage5: import_v4.z.string().optional(),
290
+ /** @deprecated use prompt.images instead */
291
+ inputImage6: import_v4.z.string().optional(),
292
+ /** @deprecated use prompt.images instead */
293
+ inputImage7: import_v4.z.string().optional(),
294
+ /** @deprecated use prompt.images instead */
295
+ inputImage8: import_v4.z.string().optional(),
296
+ /** @deprecated use prompt.images instead */
297
+ inputImage9: import_v4.z.string().optional(),
298
+ /** @deprecated use prompt.images instead */
299
+ inputImage10: import_v4.z.string().optional(),
300
+ steps: import_v4.z.number().int().positive().optional(),
301
+ guidance: import_v4.z.number().min(0).optional(),
302
+ width: import_v4.z.number().int().min(256).max(1920).optional(),
303
+ height: import_v4.z.number().int().min(256).max(1920).optional(),
304
+ outputFormat: import_v4.z.enum(["jpeg", "png"]).optional(),
305
+ promptUpsampling: import_v4.z.boolean().optional(),
306
+ raw: import_v4.z.boolean().optional(),
307
+ safetyTolerance: import_v4.z.number().int().min(0).max(6).optional(),
308
+ webhookSecret: import_v4.z.string().optional(),
309
+ webhookUrl: import_v4.z.url().optional(),
310
+ pollIntervalMillis: import_v4.z.number().int().positive().optional(),
311
+ pollTimeoutMillis: import_v4.z.number().int().positive().optional()
312
+ })
313
+ )
314
+ );
315
+ function convertSizeToAspectRatio(size) {
316
+ const [wStr, hStr] = size.split("x");
317
+ const width = Number(wStr);
318
+ const height = Number(hStr);
319
+ if (!Number.isFinite(width) || !Number.isFinite(height) || width <= 0 || height <= 0) {
320
+ return void 0;
321
+ }
322
+ const g = gcd(width, height);
323
+ return `${Math.round(width / g)}:${Math.round(height / g)}`;
324
+ }
325
+ function gcd(a, b) {
326
+ let x = Math.abs(a);
327
+ let y = Math.abs(b);
328
+ while (y !== 0) {
329
+ const t = y;
330
+ y = x % y;
331
+ x = t;
332
+ }
333
+ return x;
334
+ }
335
+ var bflSubmitSchema = import_v4.z.object({
336
+ id: import_v4.z.string(),
337
+ polling_url: import_v4.z.url(),
338
+ cost: import_v4.z.number().nullish(),
339
+ input_mp: import_v4.z.number().nullish(),
340
+ output_mp: import_v4.z.number().nullish()
341
+ });
342
+ var bflStatus = import_v4.z.union([
343
+ import_v4.z.literal("Pending"),
344
+ import_v4.z.literal("Ready"),
345
+ import_v4.z.literal("Error"),
346
+ import_v4.z.literal("Failed"),
347
+ import_v4.z.literal("Request Moderated")
348
+ ]);
349
+ var bflPollSchema = import_v4.z.object({
350
+ status: bflStatus.optional(),
351
+ state: bflStatus.optional(),
352
+ details: import_v4.z.unknown().optional(),
353
+ result: import_v4.z.object({
354
+ sample: import_v4.z.url(),
355
+ seed: import_v4.z.number().optional(),
356
+ start_time: import_v4.z.number().optional(),
357
+ end_time: import_v4.z.number().optional(),
358
+ duration: import_v4.z.number().optional()
359
+ }).nullish()
360
+ }).refine((v) => v.status != null || v.state != null, {
361
+ message: "Missing status in Black Forest Labs poll response"
362
+ }).transform((v) => {
363
+ var _a;
364
+ return {
365
+ status: (_a = v.status) != null ? _a : v.state,
366
+ result: v.result
367
+ };
368
+ });
369
+ var bflErrorSchema = import_v4.z.object({
370
+ message: import_v4.z.string().optional(),
371
+ detail: import_v4.z.any().optional()
372
+ });
373
+ var bflFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponseHandler)({
374
+ errorSchema: bflErrorSchema,
375
+ errorToMessage: (error) => {
376
+ var _a;
377
+ return (_a = bflErrorToMessage(error)) != null ? _a : "Unknown Black Forest Labs error";
378
+ }
379
+ });
380
+ function bflErrorToMessage(error) {
381
+ const parsed = bflErrorSchema.safeParse(error);
382
+ if (!parsed.success) return void 0;
383
+ const { message, detail } = parsed.data;
384
+ if (typeof detail === "string") return detail;
385
+ if (detail != null) {
386
+ try {
387
+ return JSON.stringify(detail);
388
+ } catch (e) {
389
+ }
390
+ }
391
+ return message;
392
+ }
393
+
394
+ // src/version.ts
395
+ var VERSION = true ? "0.0.0-fd764a60-20260114143805" : "0.0.0-test";
396
+
397
+ // src/black-forest-labs-provider.ts
398
+ var defaultBaseURL = "https://api.bfl.ai/v1";
399
+ function createBlackForestLabs(options = {}) {
400
+ var _a;
401
+ const baseURL = (0, import_provider_utils2.withoutTrailingSlash)((_a = options.baseURL) != null ? _a : defaultBaseURL);
402
+ const getHeaders = () => (0, import_provider_utils2.withUserAgentSuffix)(
403
+ {
404
+ "x-key": (0, import_provider_utils2.loadApiKey)({
405
+ apiKey: options.apiKey,
406
+ environmentVariableName: "BFL_API_KEY",
407
+ description: "Black Forest Labs"
408
+ }),
409
+ ...options.headers
410
+ },
411
+ `ai-sdk/black-forest-labs/${VERSION}`
412
+ );
413
+ const createImageModel = (modelId) => new BlackForestLabsImageModel(modelId, {
414
+ provider: "black-forest-labs.image",
415
+ baseURL: baseURL != null ? baseURL : defaultBaseURL,
416
+ headers: getHeaders,
417
+ fetch: options.fetch,
418
+ pollIntervalMillis: options.pollIntervalMillis,
419
+ pollTimeoutMillis: options.pollTimeoutMillis
420
+ });
421
+ const embeddingModel = (modelId) => {
422
+ throw new import_provider.NoSuchModelError({
423
+ modelId,
424
+ modelType: "embeddingModel"
425
+ });
426
+ };
427
+ return {
428
+ specificationVersion: "v3",
429
+ imageModel: createImageModel,
430
+ image: createImageModel,
431
+ languageModel: (modelId) => {
432
+ throw new import_provider.NoSuchModelError({
433
+ modelId,
434
+ modelType: "languageModel"
435
+ });
436
+ },
437
+ embeddingModel,
438
+ textEmbeddingModel: embeddingModel
439
+ };
440
+ }
441
+ var blackForestLabs = createBlackForestLabs();
442
+ // Annotate the CommonJS export names for ESM import in node:
443
+ 0 && (module.exports = {
444
+ VERSION,
445
+ blackForestLabs,
446
+ createBlackForestLabs
447
+ });
448
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/black-forest-labs-provider.ts","../src/black-forest-labs-image-model.ts","../src/version.ts"],"sourcesContent":["export {\n createBlackForestLabs,\n blackForestLabs,\n} from './black-forest-labs-provider';\nexport type {\n BlackForestLabsProvider,\n BlackForestLabsProviderSettings,\n} from './black-forest-labs-provider';\nexport type {\n BlackForestLabsImageModelId,\n BlackForestLabsAspectRatio,\n} from './black-forest-labs-image-settings';\nexport type { BlackForestLabsImageProviderOptions } from './black-forest-labs-image-model';\nexport { VERSION } from './version';\n","import { ImageModelV3, NoSuchModelError, ProviderV3 } from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { BlackForestLabsImageModel } from './black-forest-labs-image-model';\nimport { BlackForestLabsImageModelId } from './black-forest-labs-image-settings';\nimport { VERSION } from './version';\n\nexport interface BlackForestLabsProviderSettings {\n /**\nBlack Forest Labs API key. Default value is taken from the `BFL_API_KEY` environment variable.\n */\n apiKey?: string;\n\n /**\nBase URL for the API calls. Defaults to `https://api.bfl.ai/v1`.\n */\n baseURL?: string;\n\n /**\nCustom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\nCustom fetch implementation. You can use it as a middleware to intercept\nrequests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n Poll interval in milliseconds between status checks. Defaults to 500ms.\n */\n pollIntervalMillis?: number;\n\n /**\n Overall timeout in milliseconds for polling before giving up. Defaults to 60s.\n */\n pollTimeoutMillis?: number;\n}\n\nexport interface BlackForestLabsProvider extends ProviderV3 {\n /**\nCreates a model for image generation.\n */\n image(modelId: BlackForestLabsImageModelId): ImageModelV3;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: BlackForestLabsImageModelId): ImageModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nconst defaultBaseURL = 'https://api.bfl.ai/v1';\n\nexport function createBlackForestLabs(\n options: BlackForestLabsProviderSettings = {},\n): BlackForestLabsProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n 'x-key': loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'BFL_API_KEY',\n description: 'Black Forest Labs',\n }),\n ...options.headers,\n },\n `ai-sdk/black-forest-labs/${VERSION}`,\n );\n\n const createImageModel = (modelId: BlackForestLabsImageModelId) =>\n new BlackForestLabsImageModel(modelId, {\n provider: 'black-forest-labs.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n pollIntervalMillis: options.pollIntervalMillis,\n pollTimeoutMillis: options.pollTimeoutMillis,\n });\n\n const embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n });\n };\n\n return {\n specificationVersion: 'v3',\n imageModel: createImageModel,\n image: createImageModel,\n languageModel: (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'languageModel',\n });\n },\n embeddingModel,\n textEmbeddingModel: embeddingModel,\n };\n}\n\nexport const blackForestLabs = createBlackForestLabs();\n","import type { ImageModelV3, SharedV3Warning } from '@ai-sdk/provider';\nimport type { InferSchema, Resolvable } from '@ai-sdk/provider-utils';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n createStatusCodeErrorResponseHandler,\n delay,\n getFromApi,\n lazySchema,\n parseProviderOptions,\n postJsonToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { BlackForestLabsAspectRatio } from './black-forest-labs-image-settings';\nimport { BlackForestLabsImageModelId } from './black-forest-labs-image-settings';\n\nconst DEFAULT_POLL_INTERVAL_MILLIS = 500;\nconst DEFAULT_POLL_TIMEOUT_MILLIS = 60000;\n\ninterface BlackForestLabsImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n /**\n Poll interval in milliseconds between status checks. Defaults to 500ms.\n */\n pollIntervalMillis?: number;\n /**\n Overall timeout in milliseconds for polling before giving up. Defaults to 60s.\n */\n pollTimeoutMillis?: number;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class BlackForestLabsImageModel implements ImageModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxImagesPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: BlackForestLabsImageModelId,\n private readonly config: BlackForestLabsImageModelConfig,\n ) {}\n\n private async getArgs({\n prompt,\n files,\n mask,\n size,\n aspectRatio,\n seed,\n providerOptions,\n }: Parameters<ImageModelV3['doGenerate']>[0]) {\n const warnings: Array<SharedV3Warning> = [];\n\n const finalAspectRatio =\n aspectRatio ?? (size ? convertSizeToAspectRatio(size) : undefined);\n\n if (size && !aspectRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details:\n 'Deriving aspect_ratio from size. Use the width and height provider options to specify dimensions for models that support them.',\n });\n } else if (size && aspectRatio) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details:\n 'Black Forest Labs ignores size when aspectRatio is provided. Use the width and height provider options to specify dimensions for models that support them',\n });\n }\n\n const bflOptions = await parseProviderOptions({\n provider: 'blackForestLabs',\n providerOptions,\n schema: blackForestLabsImageProviderOptionsSchema,\n });\n\n const [widthStr, heightStr] = size?.split('x') ?? [];\n\n const inputImages: string[] =\n files?.map(file => {\n if (file.type === 'url') {\n return file.url;\n }\n\n if (typeof file.data === 'string') {\n return file.data;\n }\n\n return Buffer.from(file.data).toString('base64');\n }) || [];\n\n if (inputImages.length > 10) {\n throw new Error('Black Forest Labs supports up to 10 input images.');\n }\n\n const inputImagesObj: Record<string, string> = inputImages.reduce<\n Record<string, string>\n >((acc, img, index) => {\n acc[`input_image${index === 0 ? '' : `_${index + 1}`}`] = img;\n return acc;\n }, {});\n\n let maskValue: string | undefined;\n if (mask) {\n if (mask.type === 'url') {\n maskValue = mask.url;\n } else {\n if (typeof mask.data === 'string') {\n maskValue = mask.data;\n } else {\n maskValue = Buffer.from(mask.data).toString('base64');\n }\n }\n }\n\n const body: Record<string, unknown> = {\n prompt,\n seed,\n aspect_ratio: finalAspectRatio,\n width: bflOptions?.width ?? (size ? Number(widthStr) : undefined),\n height: bflOptions?.height ?? (size ? Number(heightStr) : undefined),\n steps: bflOptions?.steps,\n guidance: bflOptions?.guidance,\n image_prompt_strength: bflOptions?.imagePromptStrength,\n image_prompt: bflOptions?.imagePrompt,\n ...inputImagesObj,\n mask: maskValue,\n output_format: bflOptions?.outputFormat,\n prompt_upsampling: bflOptions?.promptUpsampling,\n raw: bflOptions?.raw,\n safety_tolerance: bflOptions?.safetyTolerance,\n webhook_secret: bflOptions?.webhookSecret,\n webhook_url: bflOptions?.webhookUrl,\n };\n\n return { body, warnings };\n }\n\n async doGenerate({\n prompt,\n files,\n mask,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV3['doGenerate']>>\n > {\n const { body, warnings } = await this.getArgs({\n prompt,\n files,\n mask,\n size,\n aspectRatio,\n seed,\n providerOptions,\n n: 1,\n headers,\n abortSignal,\n } as Parameters<ImageModelV3['doGenerate']>[0]);\n\n const bflOptions = await parseProviderOptions({\n provider: 'blackForestLabs',\n providerOptions,\n schema: blackForestLabsImageProviderOptionsSchema,\n });\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n headers,\n );\n\n const submit = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combinedHeaders,\n body,\n failedResponseHandler: bflFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(bflSubmitSchema),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const pollUrl = submit.value.polling_url;\n const requestId = submit.value.id;\n\n const {\n imageUrl,\n seed: resultSeed,\n start_time: resultStartTime,\n end_time: resultEndTime,\n duration: resultDuration,\n } = await this.pollForImageUrl({\n pollUrl,\n requestId,\n headers: combinedHeaders,\n abortSignal,\n pollOverrides: {\n pollIntervalMillis: bflOptions?.pollIntervalMillis,\n pollTimeoutMillis: bflOptions?.pollTimeoutMillis,\n },\n });\n\n const { value: imageBytes, responseHeaders } = await getFromApi({\n url: imageUrl,\n headers: combinedHeaders,\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n\n return {\n images: [imageBytes],\n warnings,\n providerMetadata: {\n blackForestLabs: {\n images: [\n {\n ...(resultSeed != null && { seed: resultSeed }),\n ...(resultStartTime != null && { start_time: resultStartTime }),\n ...(resultEndTime != null && { end_time: resultEndTime }),\n ...(resultDuration != null && { duration: resultDuration }),\n ...(submit.value.cost != null && { cost: submit.value.cost }),\n ...(submit.value.input_mp != null && {\n inputMegapixels: submit.value.input_mp,\n }),\n ...(submit.value.output_mp != null && {\n outputMegapixels: submit.value.output_mp,\n }),\n },\n ],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n private async pollForImageUrl({\n pollUrl,\n requestId,\n headers,\n abortSignal,\n pollOverrides,\n }: {\n pollUrl: string;\n requestId: string;\n headers: Record<string, string | undefined>;\n abortSignal: AbortSignal | undefined;\n pollOverrides?: {\n pollIntervalMillis?: number;\n pollTimeoutMillis?: number;\n };\n }): Promise<{\n imageUrl: string;\n seed?: number;\n start_time?: number;\n end_time?: number;\n duration?: number;\n }> {\n const pollIntervalMillis =\n pollOverrides?.pollIntervalMillis ??\n this.config.pollIntervalMillis ??\n DEFAULT_POLL_INTERVAL_MILLIS;\n const pollTimeoutMillis =\n pollOverrides?.pollTimeoutMillis ??\n this.config.pollTimeoutMillis ??\n DEFAULT_POLL_TIMEOUT_MILLIS;\n const maxPollAttempts = Math.ceil(\n pollTimeoutMillis / Math.max(1, pollIntervalMillis),\n );\n\n const url = new URL(pollUrl);\n if (!url.searchParams.has('id')) {\n url.searchParams.set('id', requestId);\n }\n\n for (let i = 0; i < maxPollAttempts; i++) {\n const { value } = await getFromApi({\n url: url.toString(),\n headers,\n failedResponseHandler: bflFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(bflPollSchema),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const status = value.status;\n if (status === 'Ready') {\n if (typeof value.result?.sample === 'string') {\n return {\n imageUrl: value.result.sample,\n seed: value.result.seed ?? undefined,\n start_time: value.result.start_time ?? undefined,\n end_time: value.result.end_time ?? undefined,\n duration: value.result.duration ?? undefined,\n };\n }\n throw new Error(\n 'Black Forest Labs poll response is Ready but missing result.sample',\n );\n }\n if (status === 'Error' || status === 'Failed') {\n throw new Error('Black Forest Labs generation failed.');\n }\n\n await delay(pollIntervalMillis);\n }\n\n throw new Error('Black Forest Labs generation timed out.');\n }\n}\n\nexport const blackForestLabsImageProviderOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n imagePrompt: z.string().optional(),\n imagePromptStrength: z.number().min(0).max(1).optional(),\n /** @deprecated use prompt.images instead */\n inputImage: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage2: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage3: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage4: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage5: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage6: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage7: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage8: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage9: z.string().optional(),\n /** @deprecated use prompt.images instead */\n inputImage10: z.string().optional(),\n steps: z.number().int().positive().optional(),\n guidance: z.number().min(0).optional(),\n width: z.number().int().min(256).max(1920).optional(),\n height: z.number().int().min(256).max(1920).optional(),\n outputFormat: z.enum(['jpeg', 'png']).optional(),\n promptUpsampling: z.boolean().optional(),\n raw: z.boolean().optional(),\n safetyTolerance: z.number().int().min(0).max(6).optional(),\n webhookSecret: z.string().optional(),\n webhookUrl: z.url().optional(),\n pollIntervalMillis: z.number().int().positive().optional(),\n pollTimeoutMillis: z.number().int().positive().optional(),\n }),\n ),\n);\n\nexport type BlackForestLabsImageProviderOptions = InferSchema<\n typeof blackForestLabsImageProviderOptionsSchema\n>;\n\nfunction convertSizeToAspectRatio(\n size: string,\n): BlackForestLabsAspectRatio | undefined {\n const [wStr, hStr] = size.split('x');\n const width = Number(wStr);\n const height = Number(hStr);\n if (\n !Number.isFinite(width) ||\n !Number.isFinite(height) ||\n width <= 0 ||\n height <= 0\n ) {\n return undefined;\n }\n const g = gcd(width, height);\n return `${Math.round(width / g)}:${Math.round(height / g)}`;\n}\n\nfunction gcd(a: number, b: number): number {\n let x = Math.abs(a);\n let y = Math.abs(b);\n while (y !== 0) {\n const t = y;\n y = x % y;\n x = t;\n }\n return x;\n}\n\nconst bflSubmitSchema = z.object({\n id: z.string(),\n polling_url: z.url(),\n cost: z.number().nullish(),\n input_mp: z.number().nullish(),\n output_mp: z.number().nullish(),\n});\n\nconst bflStatus = z.union([\n z.literal('Pending'),\n z.literal('Ready'),\n z.literal('Error'),\n z.literal('Failed'),\n z.literal('Request Moderated'),\n]);\n\nconst bflPollSchema = z\n .object({\n status: bflStatus.optional(),\n state: bflStatus.optional(),\n details: z.unknown().optional(),\n result: z\n .object({\n sample: z.url(),\n seed: z.number().optional(),\n start_time: z.number().optional(),\n end_time: z.number().optional(),\n duration: z.number().optional(),\n })\n .nullish(),\n })\n .refine(v => v.status != null || v.state != null, {\n message: 'Missing status in Black Forest Labs poll response',\n })\n .transform(v => ({\n status: (v.status ?? v.state)!,\n result: v.result,\n }));\n\nconst bflErrorSchema = z.object({\n message: z.string().optional(),\n detail: z.any().optional(),\n});\n\nconst bflFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: bflErrorSchema,\n errorToMessage: error =>\n bflErrorToMessage(error) ?? 'Unknown Black Forest Labs error',\n});\n\nfunction bflErrorToMessage(error: unknown): string | undefined {\n const parsed = bflErrorSchema.safeParse(error);\n if (!parsed.success) return undefined;\n const { message, detail } = parsed.data;\n if (typeof detail === 'string') return detail;\n if (detail != null) {\n try {\n return JSON.stringify(detail);\n } catch {\n // ignore\n }\n }\n return message;\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider_utils"]}