@ai-sdk/fal 2.0.0-beta.13 → 2.0.0-beta.15

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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @ai-sdk/fal
2
2
 
3
+ ## 2.0.0-beta.15
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [f0b2157]
8
+ - @ai-sdk/provider-utils@4.0.0-beta.15
9
+
10
+ ## 2.0.0-beta.14
11
+
12
+ ### Patch Changes
13
+
14
+ - Updated dependencies [3b1d015]
15
+ - @ai-sdk/provider-utils@4.0.0-beta.14
16
+
3
17
  ## 2.0.0-beta.13
4
18
 
5
19
  ### Patch Changes
package/dist/index.js CHANGED
@@ -1,9 +1,7 @@
1
1
  "use strict";
2
- var __create = Object.create;
3
2
  var __defProp = Object.defineProperty;
4
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
5
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
6
  var __export = (target, all) => {
9
7
  for (var name in all)
@@ -17,14 +15,6 @@ var __copyProps = (to, from, except, desc) => {
17
15
  }
18
16
  return to;
19
17
  };
20
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
- // If the importer is in node compatibility mode or this is not an ESM
22
- // file that has been converted to a CommonJS file using a Babel-
23
- // compatible transform (i.e. "__esModule" has not been set), then set
24
- // "default" to the CommonJS "module.exports" for node compatibility.
25
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
- mod
27
- ));
28
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
19
 
30
20
  // src/index.ts
@@ -42,7 +32,7 @@ var import_provider_utils5 = require("@ai-sdk/provider-utils");
42
32
 
43
33
  // src/fal-image-model.ts
44
34
  var import_provider_utils = require("@ai-sdk/provider-utils");
45
- var z = __toESM(require("zod/v4"));
35
+ var import_v4 = require("zod/v4");
46
36
  var FalImageModel = class {
47
37
  constructor(modelId, config) {
48
38
  this.modelId = modelId;
@@ -181,56 +171,56 @@ function convertAspectRatioToSize(aspectRatio) {
181
171
  }
182
172
  return void 0;
183
173
  }
184
- var falValidationErrorSchema = z.object({
185
- detail: z.array(
186
- z.object({
187
- loc: z.array(z.string()),
188
- msg: z.string(),
189
- type: z.string()
174
+ var falValidationErrorSchema = import_v4.z.object({
175
+ detail: import_v4.z.array(
176
+ import_v4.z.object({
177
+ loc: import_v4.z.array(import_v4.z.string()),
178
+ msg: import_v4.z.string(),
179
+ type: import_v4.z.string()
190
180
  })
191
181
  )
192
182
  });
193
- var falHttpErrorSchema = z.object({
194
- message: z.string()
183
+ var falHttpErrorSchema = import_v4.z.object({
184
+ message: import_v4.z.string()
195
185
  });
196
- var falErrorSchema = z.union([falValidationErrorSchema, falHttpErrorSchema]);
197
- var falImageSchema = z.object({
198
- url: z.string(),
199
- width: z.number().nullish(),
200
- height: z.number().nullish(),
186
+ var falErrorSchema = import_v4.z.union([falValidationErrorSchema, falHttpErrorSchema]);
187
+ var falImageSchema = import_v4.z.object({
188
+ url: import_v4.z.string(),
189
+ width: import_v4.z.number().nullish(),
190
+ height: import_v4.z.number().nullish(),
201
191
  // e.g. https://fal.ai/models/fal-ai/fashn/tryon/v1.6/api#schema-output
202
- content_type: z.string().nullish(),
192
+ content_type: import_v4.z.string().nullish(),
203
193
  // e.g. https://fal.ai/models/fal-ai/flowedit/api#schema-output
204
- file_name: z.string().nullish(),
205
- file_data: z.string().optional(),
206
- file_size: z.number().nullish()
194
+ file_name: import_v4.z.string().nullish(),
195
+ file_data: import_v4.z.string().optional(),
196
+ file_size: import_v4.z.number().nullish()
207
197
  });
208
- var loraFileSchema = z.object({
209
- url: z.string(),
210
- content_type: z.string().optional(),
211
- file_name: z.string().nullable().optional(),
212
- file_data: z.string().optional(),
213
- file_size: z.number().nullable().optional()
198
+ var loraFileSchema = import_v4.z.object({
199
+ url: import_v4.z.string(),
200
+ content_type: import_v4.z.string().optional(),
201
+ file_name: import_v4.z.string().nullable().optional(),
202
+ file_data: import_v4.z.string().optional(),
203
+ file_size: import_v4.z.number().nullable().optional()
214
204
  });
215
- var commonResponseSchema = z.object({
216
- timings: z.object({
217
- inference: z.number().optional()
205
+ var commonResponseSchema = import_v4.z.object({
206
+ timings: import_v4.z.object({
207
+ inference: import_v4.z.number().optional()
218
208
  }).optional(),
219
- seed: z.number().optional(),
220
- has_nsfw_concepts: z.array(z.boolean()).optional(),
221
- prompt: z.string().optional(),
209
+ seed: import_v4.z.number().optional(),
210
+ has_nsfw_concepts: import_v4.z.array(import_v4.z.boolean()).optional(),
211
+ prompt: import_v4.z.string().optional(),
222
212
  // https://fal.ai/models/fal-ai/lcm/api#schema-output
223
- nsfw_content_detected: z.array(z.boolean()).optional(),
224
- num_inference_steps: z.number().optional(),
213
+ nsfw_content_detected: import_v4.z.array(import_v4.z.boolean()).optional(),
214
+ num_inference_steps: import_v4.z.number().optional(),
225
215
  // https://fal.ai/models/fal-ai/lora/api#schema-output
226
216
  debug_latents: loraFileSchema.optional(),
227
217
  debug_per_pass_latents: loraFileSchema.optional()
228
218
  });
229
- var base = z.looseObject(commonResponseSchema.shape);
230
- var falImageResponseSchema = z.union([
231
- base.extend({ images: z.array(falImageSchema) }),
219
+ var base = import_v4.z.looseObject(commonResponseSchema.shape);
220
+ var falImageResponseSchema = import_v4.z.union([
221
+ base.extend({ images: import_v4.z.array(falImageSchema) }),
232
222
  base.extend({ image: falImageSchema })
233
- ]).transform((v) => "images" in v ? v : { ...v, images: [v.image] }).pipe(base.extend({ images: z.array(falImageSchema) }));
223
+ ]).transform((v) => "images" in v ? v : { ...v, images: [v.image] }).pipe(base.extend({ images: import_v4.z.array(falImageSchema) }));
234
224
  function isValidationError(error) {
235
225
  return falValidationErrorSchema.safeParse(error).success;
236
226
  }
@@ -248,15 +238,15 @@ var falFailedResponseHandler = (0, import_provider_utils.createJsonErrorResponse
248
238
  // src/fal-transcription-model.ts
249
239
  var import_provider = require("@ai-sdk/provider");
250
240
  var import_provider_utils3 = require("@ai-sdk/provider-utils");
251
- var z3 = __toESM(require("zod/v4"));
241
+ var import_v43 = require("zod/v4");
252
242
 
253
243
  // src/fal-error.ts
254
- var z2 = __toESM(require("zod/v4"));
244
+ var import_v42 = require("zod/v4");
255
245
  var import_provider_utils2 = require("@ai-sdk/provider-utils");
256
- var falErrorDataSchema = z2.object({
257
- error: z2.object({
258
- message: z2.string(),
259
- code: z2.number()
246
+ var falErrorDataSchema = import_v42.z.object({
247
+ error: import_v42.z.object({
248
+ message: import_v42.z.string(),
249
+ code: import_v42.z.number()
260
250
  })
261
251
  });
262
252
  var falFailedResponseHandler2 = (0, import_provider_utils2.createJsonErrorResponseHandler)({
@@ -265,33 +255,33 @@ var falFailedResponseHandler2 = (0, import_provider_utils2.createJsonErrorRespon
265
255
  });
266
256
 
267
257
  // src/fal-transcription-model.ts
268
- var falProviderOptionsSchema = z3.object({
258
+ var falProviderOptionsSchema = import_v43.z.object({
269
259
  /**
270
260
  * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.
271
261
  *
272
262
  * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.
273
263
  */
274
- language: z3.union([z3.enum(["en"]), z3.string()]).nullish().default("en"),
264
+ language: import_v43.z.union([import_v43.z.enum(["en"]), import_v43.z.string()]).nullish().default("en"),
275
265
  /**
276
266
  * Whether to diarize the audio file. Defaults to true.
277
267
  */
278
- diarize: z3.boolean().nullish().default(true),
268
+ diarize: import_v43.z.boolean().nullish().default(true),
279
269
  /**
280
270
  * Level of the chunks to return. Either segment or word. Default value: "segment"
281
271
  */
282
- chunkLevel: z3.enum(["segment", "word"]).nullish().default("segment"),
272
+ chunkLevel: import_v43.z.enum(["segment", "word"]).nullish().default("segment"),
283
273
  /**
284
274
  * Version of the model to use. All of the models are the Whisper large variant. Default value: "3"
285
275
  */
286
- version: z3.enum(["3"]).nullish().default("3"),
276
+ version: import_v43.z.enum(["3"]).nullish().default("3"),
287
277
  /**
288
278
  * Default value: 64
289
279
  */
290
- batchSize: z3.number().nullish().default(64),
280
+ batchSize: import_v43.z.number().nullish().default(64),
291
281
  /**
292
282
  * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.
293
283
  */
294
- numSpeakers: z3.number().nullable().nullish()
284
+ numSpeakers: import_v43.z.number().nullable().nullish()
295
285
  });
296
286
  var FalTranscriptionModel = class {
297
287
  constructor(modelId, config) {
@@ -439,23 +429,23 @@ var FalTranscriptionModel = class {
439
429
  };
440
430
  }
441
431
  };
442
- var falJobResponseSchema = z3.object({
443
- request_id: z3.string().nullish()
432
+ var falJobResponseSchema = import_v43.z.object({
433
+ request_id: import_v43.z.string().nullish()
444
434
  });
445
- var falTranscriptionResponseSchema = z3.object({
446
- text: z3.string(),
447
- chunks: z3.array(
448
- z3.object({
449
- text: z3.string(),
450
- timestamp: z3.array(z3.number()).nullish()
435
+ var falTranscriptionResponseSchema = import_v43.z.object({
436
+ text: import_v43.z.string(),
437
+ chunks: import_v43.z.array(
438
+ import_v43.z.object({
439
+ text: import_v43.z.string(),
440
+ timestamp: import_v43.z.array(import_v43.z.number()).nullish()
451
441
  })
452
442
  ).nullish(),
453
- inferred_languages: z3.array(z3.string()).nullish()
443
+ inferred_languages: import_v43.z.array(import_v43.z.string()).nullish()
454
444
  });
455
445
 
456
446
  // src/fal-speech-model.ts
457
447
  var import_provider_utils4 = require("@ai-sdk/provider-utils");
458
- var z4 = __toESM(require("zod/v4"));
448
+ var import_v44 = require("zod/v4");
459
449
 
460
450
  // src/fal-api-types.ts
461
451
  var FAL_LANGUAGE_BOOSTS = [
@@ -496,18 +486,18 @@ var FAL_EMOTIONS = [
496
486
  ];
497
487
 
498
488
  // src/fal-speech-model.ts
499
- var falSpeechProviderOptionsSchema = z4.looseObject({
500
- voice_setting: z4.object({
501
- speed: z4.number().nullish(),
502
- vol: z4.number().nullish(),
503
- voice_id: z4.string().nullish(),
504
- pitch: z4.number().nullish(),
505
- english_normalization: z4.boolean().nullish(),
506
- emotion: z4.enum(FAL_EMOTIONS).nullish()
489
+ var falSpeechProviderOptionsSchema = import_v44.z.looseObject({
490
+ voice_setting: import_v44.z.object({
491
+ speed: import_v44.z.number().nullish(),
492
+ vol: import_v44.z.number().nullish(),
493
+ voice_id: import_v44.z.string().nullish(),
494
+ pitch: import_v44.z.number().nullish(),
495
+ english_normalization: import_v44.z.boolean().nullish(),
496
+ emotion: import_v44.z.enum(FAL_EMOTIONS).nullish()
507
497
  }).partial().nullish(),
508
- audio_setting: z4.record(z4.string(), z4.unknown()).nullish(),
509
- language_boost: z4.enum(FAL_LANGUAGE_BOOSTS).nullish(),
510
- pronunciation_dict: z4.record(z4.string(), z4.string()).nullish()
498
+ audio_setting: import_v44.z.record(import_v44.z.string(), import_v44.z.unknown()).nullish(),
499
+ language_boost: import_v44.z.enum(FAL_LANGUAGE_BOOSTS).nullish(),
500
+ pronunciation_dict: import_v44.z.record(import_v44.z.string(), import_v44.z.string()).nullish()
511
501
  });
512
502
  var FalSpeechModel = class {
513
503
  constructor(modelId, config) {
@@ -600,14 +590,14 @@ var FalSpeechModel = class {
600
590
  };
601
591
  }
602
592
  };
603
- var falSpeechResponseSchema = z4.object({
604
- audio: z4.object({ url: z4.string() }),
605
- duration_ms: z4.number().optional(),
606
- request_id: z4.string().optional()
593
+ var falSpeechResponseSchema = import_v44.z.object({
594
+ audio: import_v44.z.object({ url: import_v44.z.string() }),
595
+ duration_ms: import_v44.z.number().optional(),
596
+ request_id: import_v44.z.string().optional()
607
597
  });
608
598
 
609
599
  // src/version.ts
610
- var VERSION = true ? "2.0.0-beta.13" : "0.0.0-test";
600
+ var VERSION = true ? "2.0.0-beta.15" : "0.0.0-test";
611
601
 
612
602
  // src/fal-provider.ts
613
603
  var defaultBaseURL = "https://fal.run";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/fal-provider.ts","../src/fal-image-model.ts","../src/fal-transcription-model.ts","../src/fal-error.ts","../src/fal-speech-model.ts","../src/fal-api-types.ts","../src/version.ts"],"sourcesContent":["export { createFal, fal } from './fal-provider';\nexport type { FalProvider, FalProviderSettings } from './fal-provider';\nexport { VERSION } from './version';\n","import {\n ImageModelV3,\n NoSuchModelError,\n ProviderV3,\n SpeechModelV3,\n TranscriptionModelV3,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { FalImageModel } from './fal-image-model';\nimport { FalImageModelId } from './fal-image-settings';\nimport { FalTranscriptionModelId } from './fal-transcription-options';\nimport { FalTranscriptionModel } from './fal-transcription-model';\nimport { FalSpeechModelId } from './fal-speech-settings';\nimport { FalSpeechModel } from './fal-speech-model';\nimport { VERSION } from './version';\n\nexport interface FalProviderSettings {\n /**\nfal.ai API key. Default value is taken from the `FAL_API_KEY` environment\nvariable, falling back to `FAL_KEY`.\n */\n apiKey?: string;\n\n /**\nBase URL for the API calls.\nThe default prefix is `https://fal.run`.\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\nexport interface FalProvider extends ProviderV3 {\n /**\nCreates a model for image generation.\n */\n image(modelId: FalImageModelId): ImageModelV3;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: FalImageModelId): ImageModelV3;\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: FalTranscriptionModelId): TranscriptionModelV3;\n\n /**\nCreates a model for speech generation.\n */\n speech(modelId: FalSpeechModelId): SpeechModelV3;\n}\n\nconst defaultBaseURL = 'https://fal.run';\n\nfunction loadFalApiKey({\n apiKey,\n description = 'fal.ai',\n}: {\n apiKey: string | undefined;\n description?: string;\n}): string {\n if (typeof apiKey === 'string') {\n return apiKey;\n }\n\n if (apiKey != null) {\n throw new Error(`${description} API key must be a string.`);\n }\n\n if (typeof process === 'undefined') {\n throw new Error(\n `${description} API key is missing. Pass it using the 'apiKey' parameter. Environment variables are not supported in this environment.`,\n );\n }\n\n let envApiKey = process.env.FAL_API_KEY;\n if (envApiKey == null) {\n envApiKey = process.env.FAL_KEY;\n }\n\n if (envApiKey == null) {\n throw new Error(\n `${description} API key is missing. Pass it using the 'apiKey' parameter or set either the FAL_API_KEY or FAL_KEY environment variable.`,\n );\n }\n\n if (typeof envApiKey !== 'string') {\n throw new Error(\n `${description} API key must be a string. The value of the environment variable is not a string.`,\n );\n }\n\n return envApiKey;\n}\n\n/**\nCreate a fal.ai provider instance.\n */\nexport function createFal(options: FalProviderSettings = {}): FalProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Key ${loadFalApiKey({\n apiKey: options.apiKey,\n })}`,\n ...options.headers,\n },\n `ai-sdk/fal/${VERSION}`,\n );\n\n const createImageModel = (modelId: FalImageModelId) =>\n new FalImageModel(modelId, {\n provider: 'fal.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (modelId: FalSpeechModelId) =>\n new FalSpeechModel(modelId, {\n provider: `fal.speech`,\n url: ({ path }) => path,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createTranscriptionModel = (modelId: FalTranscriptionModelId) =>\n new FalTranscriptionModel(modelId, {\n provider: `fal.transcription`,\n url: ({ path }) => path,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n imageModel: createImageModel,\n image: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n speech: createSpeechModel,\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n transcription: createTranscriptionModel,\n };\n}\n\n/**\nDefault fal.ai provider instance.\n */\nexport const fal = createFal();\n","import type {\n ImageModelV3,\n ImageModelV3CallWarning,\n JSONObject,\n} from '@ai-sdk/provider';\nimport type { Resolvable } from '@ai-sdk/provider-utils';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n createStatusCodeErrorResponseHandler,\n getFromApi,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\nimport { FalImageModelId, FalImageSize } from './fal-image-settings';\n\ninterface FalImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalImageModel 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: FalImageModelId,\n private readonly config: FalImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\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 warnings: Array<ImageModelV3CallWarning> = [];\n\n let imageSize: FalImageSize | undefined;\n if (size) {\n const [width, height] = size.split('x').map(Number);\n imageSize = { width, height };\n } else if (aspectRatio) {\n imageSize = convertAspectRatioToSize(aspectRatio);\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body: {\n prompt,\n seed,\n image_size: imageSize,\n num_images: n,\n ...(providerOptions.fal ?? {}),\n },\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n falImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const {\n images: targetImages,\n // prompt is just passed through and not a revised prompt per image\n prompt: _prompt,\n // NSFW information is normalized merged into `providerMetadata.fal.images`\n has_nsfw_concepts,\n nsfw_content_detected,\n // pass through other properties to providerMetadata\n ...responseMetaData\n } = value;\n\n // download the images:\n const downloadedImages = await Promise.all(\n targetImages.map(image => this.downloadImage(image.url, abortSignal)),\n );\n\n return {\n images: downloadedImages,\n warnings,\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n providerMetadata: {\n fal: {\n images: targetImages.map((image, index) => {\n const {\n url,\n content_type: contentType,\n file_name: fileName,\n file_data: fileData,\n file_size: fileSize,\n ...imageMetaData\n } = image;\n\n const nsfw =\n has_nsfw_concepts?.[index] ?? nsfw_content_detected?.[index];\n\n return {\n ...imageMetaData,\n ...removeOnlyUndefined({\n contentType,\n fileName,\n fileData,\n fileSize,\n nsfw,\n }),\n };\n }),\n ...responseMetaData,\n },\n },\n };\n }\n\n private async downloadImage(\n url: string,\n abortSignal: AbortSignal | undefined,\n ): Promise<Uint8Array> {\n const { value: response } = await getFromApi({\n url,\n // No specific headers should be needed for this request as it's a\n // generated image provided by fal.ai.\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n return response;\n }\n}\n\nfunction removeOnlyUndefined<T extends Record<string, unknown>>(obj: T) {\n return Object.fromEntries(\n Object.entries(obj).filter(([, v]) => v !== undefined),\n ) as Partial<T>;\n}\n\n/**\nConverts an aspect ratio to an image size compatible with fal.ai APIs.\n@param aspectRatio - The aspect ratio to convert.\n@returns The image size.\n */\nfunction convertAspectRatioToSize(\n aspectRatio: `${number}:${number}`,\n): FalImageSize | undefined {\n switch (aspectRatio) {\n case '1:1':\n return 'square_hd';\n case '16:9':\n return 'landscape_16_9';\n case '9:16':\n return 'portrait_16_9';\n case '4:3':\n return 'landscape_4_3';\n case '3:4':\n return 'portrait_4_3';\n case '16:10':\n return { width: 1280, height: 800 };\n case '10:16':\n return { width: 800, height: 1280 };\n case '21:9':\n return { width: 2560, height: 1080 };\n case '9:21':\n return { width: 1080, height: 2560 };\n }\n return undefined;\n}\n\n// Validation error has a particular payload to inform the exact property that is invalid\nconst falValidationErrorSchema = z.object({\n detail: z.array(\n z.object({\n loc: z.array(z.string()),\n msg: z.string(),\n type: z.string(),\n }),\n ),\n});\n\ntype ValidationError = z.infer<typeof falValidationErrorSchema>;\n\n// Other errors have a message property\nconst falHttpErrorSchema = z.object({\n message: z.string(),\n});\n\nconst falErrorSchema = z.union([falValidationErrorSchema, falHttpErrorSchema]);\n\nconst falImageSchema = z.object({\n url: z.string(),\n width: z.number().nullish(),\n height: z.number().nullish(),\n // e.g. https://fal.ai/models/fal-ai/fashn/tryon/v1.6/api#schema-output\n content_type: z.string().nullish(),\n // e.g. https://fal.ai/models/fal-ai/flowedit/api#schema-output\n file_name: z.string().nullish(),\n file_data: z.string().optional(),\n file_size: z.number().nullish(),\n});\n\n// https://fal.ai/models/fal-ai/lora/api#type-File\nconst loraFileSchema = z.object({\n url: z.string(),\n content_type: z.string().optional(),\n file_name: z.string().nullable().optional(),\n file_data: z.string().optional(),\n file_size: z.number().nullable().optional(),\n});\n\nconst commonResponseSchema = z.object({\n timings: z\n .object({\n inference: z.number().optional(),\n })\n .optional(),\n seed: z.number().optional(),\n has_nsfw_concepts: z.array(z.boolean()).optional(),\n prompt: z.string().optional(),\n // https://fal.ai/models/fal-ai/lcm/api#schema-output\n nsfw_content_detected: z.array(z.boolean()).optional(),\n num_inference_steps: z.number().optional(),\n // https://fal.ai/models/fal-ai/lora/api#schema-output\n debug_latents: loraFileSchema.optional(),\n debug_per_pass_latents: loraFileSchema.optional(),\n});\n\n// Most FAL image models respond with an array of images, but some have a response\n// with a single image, e.g. https://fal.ai/models/easel-ai/easel-avatar/api#schema-output\nconst base = z.looseObject(commonResponseSchema.shape);\nconst falImageResponseSchema = z\n .union([\n base.extend({ images: z.array(falImageSchema) }),\n base.extend({ image: falImageSchema }),\n ])\n .transform(v => ('images' in v ? v : { ...v, images: [v.image] }))\n .pipe(base.extend({ images: z.array(falImageSchema) }));\n\nfunction isValidationError(error: unknown): error is ValidationError {\n return falValidationErrorSchema.safeParse(error).success;\n}\n\nconst falFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: falErrorSchema,\n errorToMessage: error => {\n if (isValidationError(error)) {\n return error.detail\n .map(detail => `${detail.loc.join('.')}: ${detail.msg}`)\n .join('\\n');\n }\n return error.message ?? 'Unknown fal error';\n },\n});\n","import {\n AISDKError,\n TranscriptionModelV3,\n TranscriptionModelV3CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\nimport { FalConfig } from './fal-config';\nimport { falErrorDataSchema, falFailedResponseHandler } from './fal-error';\nimport { FalTranscriptionModelId } from './fal-transcription-options';\nimport { FalTranscriptionAPITypes } from './fal-api-types';\n\n// https://fal.ai/models/fal-ai/whisper/api?platform=http\nconst falProviderOptionsSchema = z.object({\n /**\n * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.\n *\n * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.\n */\n language: z\n .union([z.enum(['en']), z.string()])\n .nullish()\n .default('en'),\n\n /**\n * Whether to diarize the audio file. Defaults to true.\n */\n diarize: z.boolean().nullish().default(true),\n\n /**\n * Level of the chunks to return. Either segment or word. Default value: \"segment\"\n */\n chunkLevel: z.enum(['segment', 'word']).nullish().default('segment'),\n\n /**\n * Version of the model to use. All of the models are the Whisper large variant. Default value: \"3\"\n */\n version: z.enum(['3']).nullish().default('3'),\n\n /**\n * Default value: 64\n */\n batchSize: z.number().nullish().default(64),\n\n /**\n * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.\n */\n numSpeakers: z.number().nullable().nullish(),\n});\n\nexport type FalTranscriptionCallOptions = z.infer<\n typeof falProviderOptionsSchema\n>;\n\ninterface FalTranscriptionModelConfig extends FalConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalTranscriptionModel implements TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: FalTranscriptionModelId,\n private readonly config: FalTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV3['doGenerate']>[0]) {\n const warnings: TranscriptionModelV3CallWarning[] = [];\n\n // Parse provider options\n const falOptions = await parseProviderOptions({\n provider: 'fal',\n providerOptions,\n schema: falProviderOptionsSchema,\n });\n\n // Create form data with base fields\n const body: Omit<FalTranscriptionAPITypes, 'audio_url'> = {\n task: 'transcribe',\n diarize: true,\n chunk_level: 'word',\n };\n\n // Add provider-specific options\n if (falOptions) {\n body.language = falOptions.language as never;\n body.version = falOptions.version ?? undefined;\n body.batch_size = falOptions.batchSize ?? undefined;\n body.num_speakers = falOptions.numSpeakers ?? undefined;\n\n if (typeof falOptions.diarize === 'boolean') {\n body.diarize = falOptions.diarize;\n }\n\n if (falOptions.chunkLevel) {\n body.chunk_level = falOptions.chunkLevel;\n }\n }\n\n return {\n body,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { body, warnings } = await this.getArgs(options);\n\n const base64Audio =\n typeof options.audio === 'string'\n ? options.audio\n : convertUint8ArrayToBase64(options.audio);\n\n const audioUrl = `data:${options.mediaType};base64,${base64Audio}`;\n\n const { value: queueResponse } = await postJsonToApi({\n url: this.config.url({\n path: `https://queue.fal.run/fal-ai/${this.modelId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n audio_url: audioUrl,\n },\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler:\n createJsonResponseHandler(falJobResponseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // Poll for completion with timeout\n const startTime = Date.now();\n const timeoutMs = 60000; // 60 seconds timeout\n const pollIntervalMs = 1000; // 1 second interval\n\n let response;\n let responseHeaders;\n let rawResponse;\n\n while (true) {\n try {\n const {\n value: statusResponse,\n responseHeaders: statusHeaders,\n rawValue: statusRawResponse,\n } = await getFromApi({\n url: this.config.url({\n path: `https://queue.fal.run/fal-ai/${this.modelId}/requests/${queueResponse.request_id}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: async ({\n requestBodyValues,\n response,\n url,\n }) => {\n const clone = response.clone();\n const body = (await clone.json()) as { detail: string };\n\n if (body.detail === 'Request is still in progress') {\n // This is not an error, just a status update that the request is still processing\n // Continue polling by returning a special error that signals to continue\n return {\n value: new Error('Request is still in progress'),\n rawValue: body,\n responseHeaders: {},\n };\n }\n\n return createJsonErrorResponseHandler({\n errorSchema: falErrorDataSchema,\n errorToMessage: data => data.error.message,\n })({ requestBodyValues, response, url });\n },\n successfulResponseHandler: createJsonResponseHandler(\n falTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n response = statusResponse;\n responseHeaders = statusHeaders;\n rawResponse = statusRawResponse;\n break;\n } catch (error) {\n // If the error message indicates the request is still in progress, ignore it and continue polling\n if (\n error instanceof Error &&\n error.message === 'Request is still in progress'\n ) {\n // Continue with the polling loop\n } else {\n // Re-throw any other errors\n throw error;\n }\n }\n\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new AISDKError({\n message: 'Transcription request timed out after 60 seconds',\n name: 'TranscriptionRequestTimedOut',\n cause: response,\n });\n }\n\n // Wait before polling again\n await delay(pollIntervalMs);\n }\n\n return {\n text: response.text,\n segments:\n response.chunks?.map(chunk => ({\n text: chunk.text,\n startSecond: chunk.timestamp?.at(0) ?? 0,\n endSecond: chunk.timestamp?.at(1) ?? 0,\n })) ?? [],\n language: response.inferred_languages?.at(0) ?? undefined,\n durationInSeconds: response.chunks?.at(-1)?.timestamp?.at(1) ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst falJobResponseSchema = z.object({\n request_id: z.string().nullish(),\n});\n\nconst falTranscriptionResponseSchema = z.object({\n text: z.string(),\n chunks: z\n .array(\n z.object({\n text: z.string(),\n timestamp: z.array(z.number()).nullish(),\n }),\n )\n .nullish(),\n inferred_languages: z.array(z.string()).nullish(),\n});\n","import * as z from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const falErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type FalErrorData = z.infer<typeof falErrorDataSchema>;\n\nexport const falFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: falErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { SpeechModelV3, SpeechModelV3CallWarning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createStatusCodeErrorResponseHandler,\n getFromApi,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\nimport { FalConfig } from './fal-config';\nimport { falFailedResponseHandler } from './fal-error';\nimport { FAL_EMOTIONS, FAL_LANGUAGE_BOOSTS } from './fal-api-types';\nimport { FalSpeechModelId } from './fal-speech-settings';\n\nconst falSpeechProviderOptionsSchema = z.looseObject({\n voice_setting: z\n .object({\n speed: z.number().nullish(),\n vol: z.number().nullish(),\n voice_id: z.string().nullish(),\n pitch: z.number().nullish(),\n english_normalization: z.boolean().nullish(),\n emotion: z.enum(FAL_EMOTIONS).nullish(),\n })\n .partial()\n .nullish(),\n audio_setting: z.record(z.string(), z.unknown()).nullish(),\n language_boost: z.enum(FAL_LANGUAGE_BOOSTS).nullish(),\n pronunciation_dict: z.record(z.string(), z.string()).nullish(),\n});\n\nexport type FalSpeechCallOptions = z.infer<\n typeof falSpeechProviderOptionsSchema\n>;\n\ninterface FalSpeechModelConfig extends FalConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalSpeechModel implements SpeechModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: FalSpeechModelId,\n private readonly config: FalSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice,\n outputFormat,\n speed,\n language,\n providerOptions,\n }: Parameters<SpeechModelV3['doGenerate']>[0]) {\n const warnings: SpeechModelV3CallWarning[] = [];\n\n const falOptions = await parseProviderOptions({\n provider: 'fal',\n providerOptions,\n schema: falSpeechProviderOptionsSchema,\n });\n\n const requestBody = {\n text,\n output_format: outputFormat === 'hex' ? 'hex' : 'url',\n voice,\n speed,\n ...falOptions,\n };\n\n // Language is not directly supported; warn and ignore\n if (language) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'language',\n details:\n \"fal speech models don't support 'language' directly; consider providerOptions.fal.language_boost\",\n });\n }\n\n // warn on invalid values (and on hex until we support hex response handling)\n if (outputFormat && outputFormat !== 'url' && outputFormat !== 'hex') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'outputFormat',\n details: `Unsupported or unhandled outputFormat: ${outputFormat}. Using 'url' instead.`,\n });\n }\n\n return { requestBody, warnings } as const;\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = await this.getArgs(options);\n\n const {\n value: json,\n responseHeaders,\n rawValue,\n } = await postJsonToApi({\n url: this.config.url({\n path: `https://fal.run/${this.modelId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n falSpeechResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const audioUrl = json.audio.url;\n const { value: audio } = await getFromApi({\n url: audioUrl,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nconst falSpeechResponseSchema = z.object({\n audio: z.object({ url: z.string() }),\n duration_ms: z.number().optional(),\n request_id: z.string().optional(),\n});\n","export type FalTranscriptionAPITypes = {\n /**\n * URL of the audio file to transcribe. Supported formats: mp3, mp4, mpeg, mpga, m4a, wav or webm.\n */\n audio_url: string;\n\n /**\n * Task to perform on the audio file. Either transcribe or translate. Default value: \"transcribe\"\n */\n task?: 'transcribe' | 'translate';\n\n /**\n * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.\n *\n * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.\n */\n language?:\n | 'af'\n | 'am'\n | 'ar'\n | 'as'\n | 'az'\n | 'ba'\n | 'be'\n | 'bg'\n | 'bn'\n | 'bo'\n | 'br'\n | 'bs'\n | 'ca'\n | 'cs'\n | 'cy'\n | 'da'\n | 'de'\n | 'el'\n | 'en'\n | 'es'\n | 'et'\n | 'eu'\n | 'fa'\n | 'fi'\n | 'fo'\n | 'fr'\n | 'gl'\n | 'gu'\n | 'ha'\n | 'haw'\n | 'he'\n | 'hi'\n | 'hr'\n | 'ht'\n | 'hu'\n | 'hy'\n | 'id'\n | 'is'\n | 'it'\n | 'ja'\n | 'jw'\n | 'ka'\n | 'kk'\n | 'km'\n | 'kn'\n | 'ko'\n | 'la'\n | 'lb'\n | 'ln'\n | 'lo'\n | 'lt'\n | 'lv'\n | 'mg'\n | 'mi'\n | 'mk'\n | 'ml'\n | 'mn'\n | 'mr'\n | 'ms'\n | 'mt'\n | 'my'\n | 'ne'\n | 'nl'\n | 'nn'\n | 'no'\n | 'oc'\n | 'pa'\n | 'pl'\n | 'ps'\n | 'pt'\n | 'ro'\n | 'ru'\n | 'sa'\n | 'sd'\n | 'si'\n | 'sk'\n | 'sl'\n | 'sn'\n | 'so'\n | 'sq'\n | 'sr'\n | 'su'\n | 'sv'\n | 'sw'\n | 'ta'\n | 'te'\n | 'tg'\n | 'th'\n | 'tk'\n | 'tl'\n | 'tr'\n | 'tt'\n | 'uk'\n | 'ur'\n | 'uz'\n | 'vi'\n | 'yi'\n | 'yo'\n | 'yue'\n | 'zh'\n | null;\n\n /**\n * Whether to diarize the audio file. Defaults to true.\n */\n diarize?: boolean;\n\n /**\n * Level of the chunks to return. Either segment or word. Default value: \"segment\"\n */\n chunk_level?: 'segment' | 'word';\n\n /**\n * Version of the model to use. All of the models are the Whisper large variant. Default value: \"3\"\n */\n version?: '3';\n\n /**\n * Default value: 64\n */\n batch_size?: number;\n\n /**\n * Prompt to use for generation. Defaults to an empty string. Default value: \"\"\n */\n prompt?: string;\n\n /**\n * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.\n */\n num_speakers?: number | null;\n};\n\nexport const FAL_LANGUAGE_BOOSTS = [\n 'Chinese',\n 'Chinese,Yue',\n 'English',\n 'Arabic',\n 'Russian',\n 'Spanish',\n 'French',\n 'Portuguese',\n 'German',\n 'Turkish',\n 'Dutch',\n 'Ukrainian',\n 'Vietnamese',\n 'Indonesian',\n 'Japanese',\n 'Italian',\n 'Korean',\n 'Thai',\n 'Polish',\n 'Romanian',\n 'Greek',\n 'Czech',\n 'Finnish',\n 'Hindi',\n 'auto',\n] as const;\nexport type FalLanguageBoost = (typeof FAL_LANGUAGE_BOOSTS)[number];\n\nexport const FAL_EMOTIONS = [\n 'happy',\n 'sad',\n 'angry',\n 'fearful',\n 'disgusted',\n 'surprised',\n 'neutral',\n] as const;\nexport type FalEmotion = (typeof FAL_EMOTIONS)[number];\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","import_provider_utils","_a","import_provider_utils","z","z","import_provider_utils","falFailedResponseHandler","falFailedResponseHandler","response","body","_a","_b","_c","_d","import_provider_utils","z","falFailedResponseHandler"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/fal-provider.ts","../src/fal-image-model.ts","../src/fal-transcription-model.ts","../src/fal-error.ts","../src/fal-speech-model.ts","../src/fal-api-types.ts","../src/version.ts"],"sourcesContent":["export { createFal, fal } from './fal-provider';\nexport type { FalProvider, FalProviderSettings } from './fal-provider';\nexport { VERSION } from './version';\n","import {\n ImageModelV3,\n NoSuchModelError,\n ProviderV3,\n SpeechModelV3,\n TranscriptionModelV3,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { FalImageModel } from './fal-image-model';\nimport { FalImageModelId } from './fal-image-settings';\nimport { FalTranscriptionModelId } from './fal-transcription-options';\nimport { FalTranscriptionModel } from './fal-transcription-model';\nimport { FalSpeechModelId } from './fal-speech-settings';\nimport { FalSpeechModel } from './fal-speech-model';\nimport { VERSION } from './version';\n\nexport interface FalProviderSettings {\n /**\nfal.ai API key. Default value is taken from the `FAL_API_KEY` environment\nvariable, falling back to `FAL_KEY`.\n */\n apiKey?: string;\n\n /**\nBase URL for the API calls.\nThe default prefix is `https://fal.run`.\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\nexport interface FalProvider extends ProviderV3 {\n /**\nCreates a model for image generation.\n */\n image(modelId: FalImageModelId): ImageModelV3;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: FalImageModelId): ImageModelV3;\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: FalTranscriptionModelId): TranscriptionModelV3;\n\n /**\nCreates a model for speech generation.\n */\n speech(modelId: FalSpeechModelId): SpeechModelV3;\n}\n\nconst defaultBaseURL = 'https://fal.run';\n\nfunction loadFalApiKey({\n apiKey,\n description = 'fal.ai',\n}: {\n apiKey: string | undefined;\n description?: string;\n}): string {\n if (typeof apiKey === 'string') {\n return apiKey;\n }\n\n if (apiKey != null) {\n throw new Error(`${description} API key must be a string.`);\n }\n\n if (typeof process === 'undefined') {\n throw new Error(\n `${description} API key is missing. Pass it using the 'apiKey' parameter. Environment variables are not supported in this environment.`,\n );\n }\n\n let envApiKey = process.env.FAL_API_KEY;\n if (envApiKey == null) {\n envApiKey = process.env.FAL_KEY;\n }\n\n if (envApiKey == null) {\n throw new Error(\n `${description} API key is missing. Pass it using the 'apiKey' parameter or set either the FAL_API_KEY or FAL_KEY environment variable.`,\n );\n }\n\n if (typeof envApiKey !== 'string') {\n throw new Error(\n `${description} API key must be a string. The value of the environment variable is not a string.`,\n );\n }\n\n return envApiKey;\n}\n\n/**\nCreate a fal.ai provider instance.\n */\nexport function createFal(options: FalProviderSettings = {}): FalProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Key ${loadFalApiKey({\n apiKey: options.apiKey,\n })}`,\n ...options.headers,\n },\n `ai-sdk/fal/${VERSION}`,\n );\n\n const createImageModel = (modelId: FalImageModelId) =>\n new FalImageModel(modelId, {\n provider: 'fal.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (modelId: FalSpeechModelId) =>\n new FalSpeechModel(modelId, {\n provider: `fal.speech`,\n url: ({ path }) => path,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createTranscriptionModel = (modelId: FalTranscriptionModelId) =>\n new FalTranscriptionModel(modelId, {\n provider: `fal.transcription`,\n url: ({ path }) => path,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n imageModel: createImageModel,\n image: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n speech: createSpeechModel,\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n transcription: createTranscriptionModel,\n };\n}\n\n/**\nDefault fal.ai provider instance.\n */\nexport const fal = createFal();\n","import type {\n ImageModelV3,\n ImageModelV3CallWarning,\n JSONObject,\n} from '@ai-sdk/provider';\nimport type { Resolvable } from '@ai-sdk/provider-utils';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n createStatusCodeErrorResponseHandler,\n getFromApi,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { FalImageModelId, FalImageSize } from './fal-image-settings';\n\ninterface FalImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalImageModel 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: FalImageModelId,\n private readonly config: FalImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\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 warnings: Array<ImageModelV3CallWarning> = [];\n\n let imageSize: FalImageSize | undefined;\n if (size) {\n const [width, height] = size.split('x').map(Number);\n imageSize = { width, height };\n } else if (aspectRatio) {\n imageSize = convertAspectRatioToSize(aspectRatio);\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body: {\n prompt,\n seed,\n image_size: imageSize,\n num_images: n,\n ...(providerOptions.fal ?? {}),\n },\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n falImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const {\n images: targetImages,\n // prompt is just passed through and not a revised prompt per image\n prompt: _prompt,\n // NSFW information is normalized merged into `providerMetadata.fal.images`\n has_nsfw_concepts,\n nsfw_content_detected,\n // pass through other properties to providerMetadata\n ...responseMetaData\n } = value;\n\n // download the images:\n const downloadedImages = await Promise.all(\n targetImages.map(image => this.downloadImage(image.url, abortSignal)),\n );\n\n return {\n images: downloadedImages,\n warnings,\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n providerMetadata: {\n fal: {\n images: targetImages.map((image, index) => {\n const {\n url,\n content_type: contentType,\n file_name: fileName,\n file_data: fileData,\n file_size: fileSize,\n ...imageMetaData\n } = image;\n\n const nsfw =\n has_nsfw_concepts?.[index] ?? nsfw_content_detected?.[index];\n\n return {\n ...imageMetaData,\n ...removeOnlyUndefined({\n contentType,\n fileName,\n fileData,\n fileSize,\n nsfw,\n }),\n };\n }),\n ...responseMetaData,\n },\n },\n };\n }\n\n private async downloadImage(\n url: string,\n abortSignal: AbortSignal | undefined,\n ): Promise<Uint8Array> {\n const { value: response } = await getFromApi({\n url,\n // No specific headers should be needed for this request as it's a\n // generated image provided by fal.ai.\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n return response;\n }\n}\n\nfunction removeOnlyUndefined<T extends Record<string, unknown>>(obj: T) {\n return Object.fromEntries(\n Object.entries(obj).filter(([, v]) => v !== undefined),\n ) as Partial<T>;\n}\n\n/**\nConverts an aspect ratio to an image size compatible with fal.ai APIs.\n@param aspectRatio - The aspect ratio to convert.\n@returns The image size.\n */\nfunction convertAspectRatioToSize(\n aspectRatio: `${number}:${number}`,\n): FalImageSize | undefined {\n switch (aspectRatio) {\n case '1:1':\n return 'square_hd';\n case '16:9':\n return 'landscape_16_9';\n case '9:16':\n return 'portrait_16_9';\n case '4:3':\n return 'landscape_4_3';\n case '3:4':\n return 'portrait_4_3';\n case '16:10':\n return { width: 1280, height: 800 };\n case '10:16':\n return { width: 800, height: 1280 };\n case '21:9':\n return { width: 2560, height: 1080 };\n case '9:21':\n return { width: 1080, height: 2560 };\n }\n return undefined;\n}\n\n// Validation error has a particular payload to inform the exact property that is invalid\nconst falValidationErrorSchema = z.object({\n detail: z.array(\n z.object({\n loc: z.array(z.string()),\n msg: z.string(),\n type: z.string(),\n }),\n ),\n});\n\ntype ValidationError = z.infer<typeof falValidationErrorSchema>;\n\n// Other errors have a message property\nconst falHttpErrorSchema = z.object({\n message: z.string(),\n});\n\nconst falErrorSchema = z.union([falValidationErrorSchema, falHttpErrorSchema]);\n\nconst falImageSchema = z.object({\n url: z.string(),\n width: z.number().nullish(),\n height: z.number().nullish(),\n // e.g. https://fal.ai/models/fal-ai/fashn/tryon/v1.6/api#schema-output\n content_type: z.string().nullish(),\n // e.g. https://fal.ai/models/fal-ai/flowedit/api#schema-output\n file_name: z.string().nullish(),\n file_data: z.string().optional(),\n file_size: z.number().nullish(),\n});\n\n// https://fal.ai/models/fal-ai/lora/api#type-File\nconst loraFileSchema = z.object({\n url: z.string(),\n content_type: z.string().optional(),\n file_name: z.string().nullable().optional(),\n file_data: z.string().optional(),\n file_size: z.number().nullable().optional(),\n});\n\nconst commonResponseSchema = z.object({\n timings: z\n .object({\n inference: z.number().optional(),\n })\n .optional(),\n seed: z.number().optional(),\n has_nsfw_concepts: z.array(z.boolean()).optional(),\n prompt: z.string().optional(),\n // https://fal.ai/models/fal-ai/lcm/api#schema-output\n nsfw_content_detected: z.array(z.boolean()).optional(),\n num_inference_steps: z.number().optional(),\n // https://fal.ai/models/fal-ai/lora/api#schema-output\n debug_latents: loraFileSchema.optional(),\n debug_per_pass_latents: loraFileSchema.optional(),\n});\n\n// Most FAL image models respond with an array of images, but some have a response\n// with a single image, e.g. https://fal.ai/models/easel-ai/easel-avatar/api#schema-output\nconst base = z.looseObject(commonResponseSchema.shape);\nconst falImageResponseSchema = z\n .union([\n base.extend({ images: z.array(falImageSchema) }),\n base.extend({ image: falImageSchema }),\n ])\n .transform(v => ('images' in v ? v : { ...v, images: [v.image] }))\n .pipe(base.extend({ images: z.array(falImageSchema) }));\n\nfunction isValidationError(error: unknown): error is ValidationError {\n return falValidationErrorSchema.safeParse(error).success;\n}\n\nconst falFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: falErrorSchema,\n errorToMessage: error => {\n if (isValidationError(error)) {\n return error.detail\n .map(detail => `${detail.loc.join('.')}: ${detail.msg}`)\n .join('\\n');\n }\n return error.message ?? 'Unknown fal error';\n },\n});\n","import {\n AISDKError,\n TranscriptionModelV3,\n TranscriptionModelV3CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { FalConfig } from './fal-config';\nimport { falErrorDataSchema, falFailedResponseHandler } from './fal-error';\nimport { FalTranscriptionModelId } from './fal-transcription-options';\nimport { FalTranscriptionAPITypes } from './fal-api-types';\n\n// https://fal.ai/models/fal-ai/whisper/api?platform=http\nconst falProviderOptionsSchema = z.object({\n /**\n * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.\n *\n * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.\n */\n language: z\n .union([z.enum(['en']), z.string()])\n .nullish()\n .default('en'),\n\n /**\n * Whether to diarize the audio file. Defaults to true.\n */\n diarize: z.boolean().nullish().default(true),\n\n /**\n * Level of the chunks to return. Either segment or word. Default value: \"segment\"\n */\n chunkLevel: z.enum(['segment', 'word']).nullish().default('segment'),\n\n /**\n * Version of the model to use. All of the models are the Whisper large variant. Default value: \"3\"\n */\n version: z.enum(['3']).nullish().default('3'),\n\n /**\n * Default value: 64\n */\n batchSize: z.number().nullish().default(64),\n\n /**\n * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.\n */\n numSpeakers: z.number().nullable().nullish(),\n});\n\nexport type FalTranscriptionCallOptions = z.infer<\n typeof falProviderOptionsSchema\n>;\n\ninterface FalTranscriptionModelConfig extends FalConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalTranscriptionModel implements TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: FalTranscriptionModelId,\n private readonly config: FalTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV3['doGenerate']>[0]) {\n const warnings: TranscriptionModelV3CallWarning[] = [];\n\n // Parse provider options\n const falOptions = await parseProviderOptions({\n provider: 'fal',\n providerOptions,\n schema: falProviderOptionsSchema,\n });\n\n // Create form data with base fields\n const body: Omit<FalTranscriptionAPITypes, 'audio_url'> = {\n task: 'transcribe',\n diarize: true,\n chunk_level: 'word',\n };\n\n // Add provider-specific options\n if (falOptions) {\n body.language = falOptions.language as never;\n body.version = falOptions.version ?? undefined;\n body.batch_size = falOptions.batchSize ?? undefined;\n body.num_speakers = falOptions.numSpeakers ?? undefined;\n\n if (typeof falOptions.diarize === 'boolean') {\n body.diarize = falOptions.diarize;\n }\n\n if (falOptions.chunkLevel) {\n body.chunk_level = falOptions.chunkLevel;\n }\n }\n\n return {\n body,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { body, warnings } = await this.getArgs(options);\n\n const base64Audio =\n typeof options.audio === 'string'\n ? options.audio\n : convertUint8ArrayToBase64(options.audio);\n\n const audioUrl = `data:${options.mediaType};base64,${base64Audio}`;\n\n const { value: queueResponse } = await postJsonToApi({\n url: this.config.url({\n path: `https://queue.fal.run/fal-ai/${this.modelId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n audio_url: audioUrl,\n },\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler:\n createJsonResponseHandler(falJobResponseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // Poll for completion with timeout\n const startTime = Date.now();\n const timeoutMs = 60000; // 60 seconds timeout\n const pollIntervalMs = 1000; // 1 second interval\n\n let response;\n let responseHeaders;\n let rawResponse;\n\n while (true) {\n try {\n const {\n value: statusResponse,\n responseHeaders: statusHeaders,\n rawValue: statusRawResponse,\n } = await getFromApi({\n url: this.config.url({\n path: `https://queue.fal.run/fal-ai/${this.modelId}/requests/${queueResponse.request_id}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: async ({\n requestBodyValues,\n response,\n url,\n }) => {\n const clone = response.clone();\n const body = (await clone.json()) as { detail: string };\n\n if (body.detail === 'Request is still in progress') {\n // This is not an error, just a status update that the request is still processing\n // Continue polling by returning a special error that signals to continue\n return {\n value: new Error('Request is still in progress'),\n rawValue: body,\n responseHeaders: {},\n };\n }\n\n return createJsonErrorResponseHandler({\n errorSchema: falErrorDataSchema,\n errorToMessage: data => data.error.message,\n })({ requestBodyValues, response, url });\n },\n successfulResponseHandler: createJsonResponseHandler(\n falTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n response = statusResponse;\n responseHeaders = statusHeaders;\n rawResponse = statusRawResponse;\n break;\n } catch (error) {\n // If the error message indicates the request is still in progress, ignore it and continue polling\n if (\n error instanceof Error &&\n error.message === 'Request is still in progress'\n ) {\n // Continue with the polling loop\n } else {\n // Re-throw any other errors\n throw error;\n }\n }\n\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new AISDKError({\n message: 'Transcription request timed out after 60 seconds',\n name: 'TranscriptionRequestTimedOut',\n cause: response,\n });\n }\n\n // Wait before polling again\n await delay(pollIntervalMs);\n }\n\n return {\n text: response.text,\n segments:\n response.chunks?.map(chunk => ({\n text: chunk.text,\n startSecond: chunk.timestamp?.at(0) ?? 0,\n endSecond: chunk.timestamp?.at(1) ?? 0,\n })) ?? [],\n language: response.inferred_languages?.at(0) ?? undefined,\n durationInSeconds: response.chunks?.at(-1)?.timestamp?.at(1) ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst falJobResponseSchema = z.object({\n request_id: z.string().nullish(),\n});\n\nconst falTranscriptionResponseSchema = z.object({\n text: z.string(),\n chunks: z\n .array(\n z.object({\n text: z.string(),\n timestamp: z.array(z.number()).nullish(),\n }),\n )\n .nullish(),\n inferred_languages: z.array(z.string()).nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const falErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type FalErrorData = z.infer<typeof falErrorDataSchema>;\n\nexport const falFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: falErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { SpeechModelV3, SpeechModelV3CallWarning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createStatusCodeErrorResponseHandler,\n getFromApi,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { FalConfig } from './fal-config';\nimport { falFailedResponseHandler } from './fal-error';\nimport { FAL_EMOTIONS, FAL_LANGUAGE_BOOSTS } from './fal-api-types';\nimport { FalSpeechModelId } from './fal-speech-settings';\n\nconst falSpeechProviderOptionsSchema = z.looseObject({\n voice_setting: z\n .object({\n speed: z.number().nullish(),\n vol: z.number().nullish(),\n voice_id: z.string().nullish(),\n pitch: z.number().nullish(),\n english_normalization: z.boolean().nullish(),\n emotion: z.enum(FAL_EMOTIONS).nullish(),\n })\n .partial()\n .nullish(),\n audio_setting: z.record(z.string(), z.unknown()).nullish(),\n language_boost: z.enum(FAL_LANGUAGE_BOOSTS).nullish(),\n pronunciation_dict: z.record(z.string(), z.string()).nullish(),\n});\n\nexport type FalSpeechCallOptions = z.infer<\n typeof falSpeechProviderOptionsSchema\n>;\n\ninterface FalSpeechModelConfig extends FalConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalSpeechModel implements SpeechModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: FalSpeechModelId,\n private readonly config: FalSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice,\n outputFormat,\n speed,\n language,\n providerOptions,\n }: Parameters<SpeechModelV3['doGenerate']>[0]) {\n const warnings: SpeechModelV3CallWarning[] = [];\n\n const falOptions = await parseProviderOptions({\n provider: 'fal',\n providerOptions,\n schema: falSpeechProviderOptionsSchema,\n });\n\n const requestBody = {\n text,\n output_format: outputFormat === 'hex' ? 'hex' : 'url',\n voice,\n speed,\n ...falOptions,\n };\n\n // Language is not directly supported; warn and ignore\n if (language) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'language',\n details:\n \"fal speech models don't support 'language' directly; consider providerOptions.fal.language_boost\",\n });\n }\n\n // warn on invalid values (and on hex until we support hex response handling)\n if (outputFormat && outputFormat !== 'url' && outputFormat !== 'hex') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'outputFormat',\n details: `Unsupported or unhandled outputFormat: ${outputFormat}. Using 'url' instead.`,\n });\n }\n\n return { requestBody, warnings } as const;\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = await this.getArgs(options);\n\n const {\n value: json,\n responseHeaders,\n rawValue,\n } = await postJsonToApi({\n url: this.config.url({\n path: `https://fal.run/${this.modelId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n falSpeechResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const audioUrl = json.audio.url;\n const { value: audio } = await getFromApi({\n url: audioUrl,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nconst falSpeechResponseSchema = z.object({\n audio: z.object({ url: z.string() }),\n duration_ms: z.number().optional(),\n request_id: z.string().optional(),\n});\n","export type FalTranscriptionAPITypes = {\n /**\n * URL of the audio file to transcribe. Supported formats: mp3, mp4, mpeg, mpga, m4a, wav or webm.\n */\n audio_url: string;\n\n /**\n * Task to perform on the audio file. Either transcribe or translate. Default value: \"transcribe\"\n */\n task?: 'transcribe' | 'translate';\n\n /**\n * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.\n *\n * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.\n */\n language?:\n | 'af'\n | 'am'\n | 'ar'\n | 'as'\n | 'az'\n | 'ba'\n | 'be'\n | 'bg'\n | 'bn'\n | 'bo'\n | 'br'\n | 'bs'\n | 'ca'\n | 'cs'\n | 'cy'\n | 'da'\n | 'de'\n | 'el'\n | 'en'\n | 'es'\n | 'et'\n | 'eu'\n | 'fa'\n | 'fi'\n | 'fo'\n | 'fr'\n | 'gl'\n | 'gu'\n | 'ha'\n | 'haw'\n | 'he'\n | 'hi'\n | 'hr'\n | 'ht'\n | 'hu'\n | 'hy'\n | 'id'\n | 'is'\n | 'it'\n | 'ja'\n | 'jw'\n | 'ka'\n | 'kk'\n | 'km'\n | 'kn'\n | 'ko'\n | 'la'\n | 'lb'\n | 'ln'\n | 'lo'\n | 'lt'\n | 'lv'\n | 'mg'\n | 'mi'\n | 'mk'\n | 'ml'\n | 'mn'\n | 'mr'\n | 'ms'\n | 'mt'\n | 'my'\n | 'ne'\n | 'nl'\n | 'nn'\n | 'no'\n | 'oc'\n | 'pa'\n | 'pl'\n | 'ps'\n | 'pt'\n | 'ro'\n | 'ru'\n | 'sa'\n | 'sd'\n | 'si'\n | 'sk'\n | 'sl'\n | 'sn'\n | 'so'\n | 'sq'\n | 'sr'\n | 'su'\n | 'sv'\n | 'sw'\n | 'ta'\n | 'te'\n | 'tg'\n | 'th'\n | 'tk'\n | 'tl'\n | 'tr'\n | 'tt'\n | 'uk'\n | 'ur'\n | 'uz'\n | 'vi'\n | 'yi'\n | 'yo'\n | 'yue'\n | 'zh'\n | null;\n\n /**\n * Whether to diarize the audio file. Defaults to true.\n */\n diarize?: boolean;\n\n /**\n * Level of the chunks to return. Either segment or word. Default value: \"segment\"\n */\n chunk_level?: 'segment' | 'word';\n\n /**\n * Version of the model to use. All of the models are the Whisper large variant. Default value: \"3\"\n */\n version?: '3';\n\n /**\n * Default value: 64\n */\n batch_size?: number;\n\n /**\n * Prompt to use for generation. Defaults to an empty string. Default value: \"\"\n */\n prompt?: string;\n\n /**\n * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.\n */\n num_speakers?: number | null;\n};\n\nexport const FAL_LANGUAGE_BOOSTS = [\n 'Chinese',\n 'Chinese,Yue',\n 'English',\n 'Arabic',\n 'Russian',\n 'Spanish',\n 'French',\n 'Portuguese',\n 'German',\n 'Turkish',\n 'Dutch',\n 'Ukrainian',\n 'Vietnamese',\n 'Indonesian',\n 'Japanese',\n 'Italian',\n 'Korean',\n 'Thai',\n 'Polish',\n 'Romanian',\n 'Greek',\n 'Czech',\n 'Finnish',\n 'Hindi',\n 'auto',\n] as const;\nexport type FalLanguageBoost = (typeof FAL_LANGUAGE_BOOSTS)[number];\n\nexport const FAL_EMOTIONS = [\n 'happy',\n 'sad',\n 'angry',\n 'fearful',\n 'disgusted',\n 'surprised',\n 'neutral',\n] as const;\nexport type FalEmotion = (typeof FAL_EMOTIONS)[number];\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","import_provider_utils","_a","import_provider_utils","import_v4","import_v4","import_provider_utils","falFailedResponseHandler","falFailedResponseHandler","response","body","_a","_b","_c","_d","import_provider_utils","import_v4","falFailedResponseHandler"]}
package/dist/index.mjs CHANGED
@@ -18,7 +18,7 @@ import {
18
18
  postJsonToApi,
19
19
  resolve
20
20
  } from "@ai-sdk/provider-utils";
21
- import * as z from "zod/v4";
21
+ import { z } from "zod/v4";
22
22
  var FalImageModel = class {
23
23
  constructor(modelId, config) {
24
24
  this.modelId = modelId;
@@ -235,10 +235,10 @@ import {
235
235
  parseProviderOptions,
236
236
  postJsonToApi as postJsonToApi2
237
237
  } from "@ai-sdk/provider-utils";
238
- import * as z3 from "zod/v4";
238
+ import { z as z3 } from "zod/v4";
239
239
 
240
240
  // src/fal-error.ts
241
- import * as z2 from "zod/v4";
241
+ import { z as z2 } from "zod/v4";
242
242
  import { createJsonErrorResponseHandler as createJsonErrorResponseHandler2 } from "@ai-sdk/provider-utils";
243
243
  var falErrorDataSchema = z2.object({
244
244
  error: z2.object({
@@ -450,7 +450,7 @@ import {
450
450
  parseProviderOptions as parseProviderOptions2,
451
451
  postJsonToApi as postJsonToApi3
452
452
  } from "@ai-sdk/provider-utils";
453
- import * as z4 from "zod/v4";
453
+ import { z as z4 } from "zod/v4";
454
454
 
455
455
  // src/fal-api-types.ts
456
456
  var FAL_LANGUAGE_BOOSTS = [
@@ -602,7 +602,7 @@ var falSpeechResponseSchema = z4.object({
602
602
  });
603
603
 
604
604
  // src/version.ts
605
- var VERSION = true ? "2.0.0-beta.13" : "0.0.0-test";
605
+ var VERSION = true ? "2.0.0-beta.15" : "0.0.0-test";
606
606
 
607
607
  // src/fal-provider.ts
608
608
  var defaultBaseURL = "https://fal.run";
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/fal-provider.ts","../src/fal-image-model.ts","../src/fal-transcription-model.ts","../src/fal-error.ts","../src/fal-speech-model.ts","../src/fal-api-types.ts","../src/version.ts"],"sourcesContent":["import {\n ImageModelV3,\n NoSuchModelError,\n ProviderV3,\n SpeechModelV3,\n TranscriptionModelV3,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { FalImageModel } from './fal-image-model';\nimport { FalImageModelId } from './fal-image-settings';\nimport { FalTranscriptionModelId } from './fal-transcription-options';\nimport { FalTranscriptionModel } from './fal-transcription-model';\nimport { FalSpeechModelId } from './fal-speech-settings';\nimport { FalSpeechModel } from './fal-speech-model';\nimport { VERSION } from './version';\n\nexport interface FalProviderSettings {\n /**\nfal.ai API key. Default value is taken from the `FAL_API_KEY` environment\nvariable, falling back to `FAL_KEY`.\n */\n apiKey?: string;\n\n /**\nBase URL for the API calls.\nThe default prefix is `https://fal.run`.\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\nexport interface FalProvider extends ProviderV3 {\n /**\nCreates a model for image generation.\n */\n image(modelId: FalImageModelId): ImageModelV3;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: FalImageModelId): ImageModelV3;\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: FalTranscriptionModelId): TranscriptionModelV3;\n\n /**\nCreates a model for speech generation.\n */\n speech(modelId: FalSpeechModelId): SpeechModelV3;\n}\n\nconst defaultBaseURL = 'https://fal.run';\n\nfunction loadFalApiKey({\n apiKey,\n description = 'fal.ai',\n}: {\n apiKey: string | undefined;\n description?: string;\n}): string {\n if (typeof apiKey === 'string') {\n return apiKey;\n }\n\n if (apiKey != null) {\n throw new Error(`${description} API key must be a string.`);\n }\n\n if (typeof process === 'undefined') {\n throw new Error(\n `${description} API key is missing. Pass it using the 'apiKey' parameter. Environment variables are not supported in this environment.`,\n );\n }\n\n let envApiKey = process.env.FAL_API_KEY;\n if (envApiKey == null) {\n envApiKey = process.env.FAL_KEY;\n }\n\n if (envApiKey == null) {\n throw new Error(\n `${description} API key is missing. Pass it using the 'apiKey' parameter or set either the FAL_API_KEY or FAL_KEY environment variable.`,\n );\n }\n\n if (typeof envApiKey !== 'string') {\n throw new Error(\n `${description} API key must be a string. The value of the environment variable is not a string.`,\n );\n }\n\n return envApiKey;\n}\n\n/**\nCreate a fal.ai provider instance.\n */\nexport function createFal(options: FalProviderSettings = {}): FalProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Key ${loadFalApiKey({\n apiKey: options.apiKey,\n })}`,\n ...options.headers,\n },\n `ai-sdk/fal/${VERSION}`,\n );\n\n const createImageModel = (modelId: FalImageModelId) =>\n new FalImageModel(modelId, {\n provider: 'fal.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (modelId: FalSpeechModelId) =>\n new FalSpeechModel(modelId, {\n provider: `fal.speech`,\n url: ({ path }) => path,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createTranscriptionModel = (modelId: FalTranscriptionModelId) =>\n new FalTranscriptionModel(modelId, {\n provider: `fal.transcription`,\n url: ({ path }) => path,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n imageModel: createImageModel,\n image: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n speech: createSpeechModel,\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n transcription: createTranscriptionModel,\n };\n}\n\n/**\nDefault fal.ai provider instance.\n */\nexport const fal = createFal();\n","import type {\n ImageModelV3,\n ImageModelV3CallWarning,\n JSONObject,\n} from '@ai-sdk/provider';\nimport type { Resolvable } from '@ai-sdk/provider-utils';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n createStatusCodeErrorResponseHandler,\n getFromApi,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\nimport { FalImageModelId, FalImageSize } from './fal-image-settings';\n\ninterface FalImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalImageModel 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: FalImageModelId,\n private readonly config: FalImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\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 warnings: Array<ImageModelV3CallWarning> = [];\n\n let imageSize: FalImageSize | undefined;\n if (size) {\n const [width, height] = size.split('x').map(Number);\n imageSize = { width, height };\n } else if (aspectRatio) {\n imageSize = convertAspectRatioToSize(aspectRatio);\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body: {\n prompt,\n seed,\n image_size: imageSize,\n num_images: n,\n ...(providerOptions.fal ?? {}),\n },\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n falImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const {\n images: targetImages,\n // prompt is just passed through and not a revised prompt per image\n prompt: _prompt,\n // NSFW information is normalized merged into `providerMetadata.fal.images`\n has_nsfw_concepts,\n nsfw_content_detected,\n // pass through other properties to providerMetadata\n ...responseMetaData\n } = value;\n\n // download the images:\n const downloadedImages = await Promise.all(\n targetImages.map(image => this.downloadImage(image.url, abortSignal)),\n );\n\n return {\n images: downloadedImages,\n warnings,\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n providerMetadata: {\n fal: {\n images: targetImages.map((image, index) => {\n const {\n url,\n content_type: contentType,\n file_name: fileName,\n file_data: fileData,\n file_size: fileSize,\n ...imageMetaData\n } = image;\n\n const nsfw =\n has_nsfw_concepts?.[index] ?? nsfw_content_detected?.[index];\n\n return {\n ...imageMetaData,\n ...removeOnlyUndefined({\n contentType,\n fileName,\n fileData,\n fileSize,\n nsfw,\n }),\n };\n }),\n ...responseMetaData,\n },\n },\n };\n }\n\n private async downloadImage(\n url: string,\n abortSignal: AbortSignal | undefined,\n ): Promise<Uint8Array> {\n const { value: response } = await getFromApi({\n url,\n // No specific headers should be needed for this request as it's a\n // generated image provided by fal.ai.\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n return response;\n }\n}\n\nfunction removeOnlyUndefined<T extends Record<string, unknown>>(obj: T) {\n return Object.fromEntries(\n Object.entries(obj).filter(([, v]) => v !== undefined),\n ) as Partial<T>;\n}\n\n/**\nConverts an aspect ratio to an image size compatible with fal.ai APIs.\n@param aspectRatio - The aspect ratio to convert.\n@returns The image size.\n */\nfunction convertAspectRatioToSize(\n aspectRatio: `${number}:${number}`,\n): FalImageSize | undefined {\n switch (aspectRatio) {\n case '1:1':\n return 'square_hd';\n case '16:9':\n return 'landscape_16_9';\n case '9:16':\n return 'portrait_16_9';\n case '4:3':\n return 'landscape_4_3';\n case '3:4':\n return 'portrait_4_3';\n case '16:10':\n return { width: 1280, height: 800 };\n case '10:16':\n return { width: 800, height: 1280 };\n case '21:9':\n return { width: 2560, height: 1080 };\n case '9:21':\n return { width: 1080, height: 2560 };\n }\n return undefined;\n}\n\n// Validation error has a particular payload to inform the exact property that is invalid\nconst falValidationErrorSchema = z.object({\n detail: z.array(\n z.object({\n loc: z.array(z.string()),\n msg: z.string(),\n type: z.string(),\n }),\n ),\n});\n\ntype ValidationError = z.infer<typeof falValidationErrorSchema>;\n\n// Other errors have a message property\nconst falHttpErrorSchema = z.object({\n message: z.string(),\n});\n\nconst falErrorSchema = z.union([falValidationErrorSchema, falHttpErrorSchema]);\n\nconst falImageSchema = z.object({\n url: z.string(),\n width: z.number().nullish(),\n height: z.number().nullish(),\n // e.g. https://fal.ai/models/fal-ai/fashn/tryon/v1.6/api#schema-output\n content_type: z.string().nullish(),\n // e.g. https://fal.ai/models/fal-ai/flowedit/api#schema-output\n file_name: z.string().nullish(),\n file_data: z.string().optional(),\n file_size: z.number().nullish(),\n});\n\n// https://fal.ai/models/fal-ai/lora/api#type-File\nconst loraFileSchema = z.object({\n url: z.string(),\n content_type: z.string().optional(),\n file_name: z.string().nullable().optional(),\n file_data: z.string().optional(),\n file_size: z.number().nullable().optional(),\n});\n\nconst commonResponseSchema = z.object({\n timings: z\n .object({\n inference: z.number().optional(),\n })\n .optional(),\n seed: z.number().optional(),\n has_nsfw_concepts: z.array(z.boolean()).optional(),\n prompt: z.string().optional(),\n // https://fal.ai/models/fal-ai/lcm/api#schema-output\n nsfw_content_detected: z.array(z.boolean()).optional(),\n num_inference_steps: z.number().optional(),\n // https://fal.ai/models/fal-ai/lora/api#schema-output\n debug_latents: loraFileSchema.optional(),\n debug_per_pass_latents: loraFileSchema.optional(),\n});\n\n// Most FAL image models respond with an array of images, but some have a response\n// with a single image, e.g. https://fal.ai/models/easel-ai/easel-avatar/api#schema-output\nconst base = z.looseObject(commonResponseSchema.shape);\nconst falImageResponseSchema = z\n .union([\n base.extend({ images: z.array(falImageSchema) }),\n base.extend({ image: falImageSchema }),\n ])\n .transform(v => ('images' in v ? v : { ...v, images: [v.image] }))\n .pipe(base.extend({ images: z.array(falImageSchema) }));\n\nfunction isValidationError(error: unknown): error is ValidationError {\n return falValidationErrorSchema.safeParse(error).success;\n}\n\nconst falFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: falErrorSchema,\n errorToMessage: error => {\n if (isValidationError(error)) {\n return error.detail\n .map(detail => `${detail.loc.join('.')}: ${detail.msg}`)\n .join('\\n');\n }\n return error.message ?? 'Unknown fal error';\n },\n});\n","import {\n AISDKError,\n TranscriptionModelV3,\n TranscriptionModelV3CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\nimport { FalConfig } from './fal-config';\nimport { falErrorDataSchema, falFailedResponseHandler } from './fal-error';\nimport { FalTranscriptionModelId } from './fal-transcription-options';\nimport { FalTranscriptionAPITypes } from './fal-api-types';\n\n// https://fal.ai/models/fal-ai/whisper/api?platform=http\nconst falProviderOptionsSchema = z.object({\n /**\n * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.\n *\n * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.\n */\n language: z\n .union([z.enum(['en']), z.string()])\n .nullish()\n .default('en'),\n\n /**\n * Whether to diarize the audio file. Defaults to true.\n */\n diarize: z.boolean().nullish().default(true),\n\n /**\n * Level of the chunks to return. Either segment or word. Default value: \"segment\"\n */\n chunkLevel: z.enum(['segment', 'word']).nullish().default('segment'),\n\n /**\n * Version of the model to use. All of the models are the Whisper large variant. Default value: \"3\"\n */\n version: z.enum(['3']).nullish().default('3'),\n\n /**\n * Default value: 64\n */\n batchSize: z.number().nullish().default(64),\n\n /**\n * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.\n */\n numSpeakers: z.number().nullable().nullish(),\n});\n\nexport type FalTranscriptionCallOptions = z.infer<\n typeof falProviderOptionsSchema\n>;\n\ninterface FalTranscriptionModelConfig extends FalConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalTranscriptionModel implements TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: FalTranscriptionModelId,\n private readonly config: FalTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV3['doGenerate']>[0]) {\n const warnings: TranscriptionModelV3CallWarning[] = [];\n\n // Parse provider options\n const falOptions = await parseProviderOptions({\n provider: 'fal',\n providerOptions,\n schema: falProviderOptionsSchema,\n });\n\n // Create form data with base fields\n const body: Omit<FalTranscriptionAPITypes, 'audio_url'> = {\n task: 'transcribe',\n diarize: true,\n chunk_level: 'word',\n };\n\n // Add provider-specific options\n if (falOptions) {\n body.language = falOptions.language as never;\n body.version = falOptions.version ?? undefined;\n body.batch_size = falOptions.batchSize ?? undefined;\n body.num_speakers = falOptions.numSpeakers ?? undefined;\n\n if (typeof falOptions.diarize === 'boolean') {\n body.diarize = falOptions.diarize;\n }\n\n if (falOptions.chunkLevel) {\n body.chunk_level = falOptions.chunkLevel;\n }\n }\n\n return {\n body,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { body, warnings } = await this.getArgs(options);\n\n const base64Audio =\n typeof options.audio === 'string'\n ? options.audio\n : convertUint8ArrayToBase64(options.audio);\n\n const audioUrl = `data:${options.mediaType};base64,${base64Audio}`;\n\n const { value: queueResponse } = await postJsonToApi({\n url: this.config.url({\n path: `https://queue.fal.run/fal-ai/${this.modelId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n audio_url: audioUrl,\n },\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler:\n createJsonResponseHandler(falJobResponseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // Poll for completion with timeout\n const startTime = Date.now();\n const timeoutMs = 60000; // 60 seconds timeout\n const pollIntervalMs = 1000; // 1 second interval\n\n let response;\n let responseHeaders;\n let rawResponse;\n\n while (true) {\n try {\n const {\n value: statusResponse,\n responseHeaders: statusHeaders,\n rawValue: statusRawResponse,\n } = await getFromApi({\n url: this.config.url({\n path: `https://queue.fal.run/fal-ai/${this.modelId}/requests/${queueResponse.request_id}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: async ({\n requestBodyValues,\n response,\n url,\n }) => {\n const clone = response.clone();\n const body = (await clone.json()) as { detail: string };\n\n if (body.detail === 'Request is still in progress') {\n // This is not an error, just a status update that the request is still processing\n // Continue polling by returning a special error that signals to continue\n return {\n value: new Error('Request is still in progress'),\n rawValue: body,\n responseHeaders: {},\n };\n }\n\n return createJsonErrorResponseHandler({\n errorSchema: falErrorDataSchema,\n errorToMessage: data => data.error.message,\n })({ requestBodyValues, response, url });\n },\n successfulResponseHandler: createJsonResponseHandler(\n falTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n response = statusResponse;\n responseHeaders = statusHeaders;\n rawResponse = statusRawResponse;\n break;\n } catch (error) {\n // If the error message indicates the request is still in progress, ignore it and continue polling\n if (\n error instanceof Error &&\n error.message === 'Request is still in progress'\n ) {\n // Continue with the polling loop\n } else {\n // Re-throw any other errors\n throw error;\n }\n }\n\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new AISDKError({\n message: 'Transcription request timed out after 60 seconds',\n name: 'TranscriptionRequestTimedOut',\n cause: response,\n });\n }\n\n // Wait before polling again\n await delay(pollIntervalMs);\n }\n\n return {\n text: response.text,\n segments:\n response.chunks?.map(chunk => ({\n text: chunk.text,\n startSecond: chunk.timestamp?.at(0) ?? 0,\n endSecond: chunk.timestamp?.at(1) ?? 0,\n })) ?? [],\n language: response.inferred_languages?.at(0) ?? undefined,\n durationInSeconds: response.chunks?.at(-1)?.timestamp?.at(1) ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst falJobResponseSchema = z.object({\n request_id: z.string().nullish(),\n});\n\nconst falTranscriptionResponseSchema = z.object({\n text: z.string(),\n chunks: z\n .array(\n z.object({\n text: z.string(),\n timestamp: z.array(z.number()).nullish(),\n }),\n )\n .nullish(),\n inferred_languages: z.array(z.string()).nullish(),\n});\n","import * as z from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const falErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type FalErrorData = z.infer<typeof falErrorDataSchema>;\n\nexport const falFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: falErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { SpeechModelV3, SpeechModelV3CallWarning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createStatusCodeErrorResponseHandler,\n getFromApi,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport * as z from 'zod/v4';\nimport { FalConfig } from './fal-config';\nimport { falFailedResponseHandler } from './fal-error';\nimport { FAL_EMOTIONS, FAL_LANGUAGE_BOOSTS } from './fal-api-types';\nimport { FalSpeechModelId } from './fal-speech-settings';\n\nconst falSpeechProviderOptionsSchema = z.looseObject({\n voice_setting: z\n .object({\n speed: z.number().nullish(),\n vol: z.number().nullish(),\n voice_id: z.string().nullish(),\n pitch: z.number().nullish(),\n english_normalization: z.boolean().nullish(),\n emotion: z.enum(FAL_EMOTIONS).nullish(),\n })\n .partial()\n .nullish(),\n audio_setting: z.record(z.string(), z.unknown()).nullish(),\n language_boost: z.enum(FAL_LANGUAGE_BOOSTS).nullish(),\n pronunciation_dict: z.record(z.string(), z.string()).nullish(),\n});\n\nexport type FalSpeechCallOptions = z.infer<\n typeof falSpeechProviderOptionsSchema\n>;\n\ninterface FalSpeechModelConfig extends FalConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalSpeechModel implements SpeechModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: FalSpeechModelId,\n private readonly config: FalSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice,\n outputFormat,\n speed,\n language,\n providerOptions,\n }: Parameters<SpeechModelV3['doGenerate']>[0]) {\n const warnings: SpeechModelV3CallWarning[] = [];\n\n const falOptions = await parseProviderOptions({\n provider: 'fal',\n providerOptions,\n schema: falSpeechProviderOptionsSchema,\n });\n\n const requestBody = {\n text,\n output_format: outputFormat === 'hex' ? 'hex' : 'url',\n voice,\n speed,\n ...falOptions,\n };\n\n // Language is not directly supported; warn and ignore\n if (language) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'language',\n details:\n \"fal speech models don't support 'language' directly; consider providerOptions.fal.language_boost\",\n });\n }\n\n // warn on invalid values (and on hex until we support hex response handling)\n if (outputFormat && outputFormat !== 'url' && outputFormat !== 'hex') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'outputFormat',\n details: `Unsupported or unhandled outputFormat: ${outputFormat}. Using 'url' instead.`,\n });\n }\n\n return { requestBody, warnings } as const;\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = await this.getArgs(options);\n\n const {\n value: json,\n responseHeaders,\n rawValue,\n } = await postJsonToApi({\n url: this.config.url({\n path: `https://fal.run/${this.modelId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n falSpeechResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const audioUrl = json.audio.url;\n const { value: audio } = await getFromApi({\n url: audioUrl,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nconst falSpeechResponseSchema = z.object({\n audio: z.object({ url: z.string() }),\n duration_ms: z.number().optional(),\n request_id: z.string().optional(),\n});\n","export type FalTranscriptionAPITypes = {\n /**\n * URL of the audio file to transcribe. Supported formats: mp3, mp4, mpeg, mpga, m4a, wav or webm.\n */\n audio_url: string;\n\n /**\n * Task to perform on the audio file. Either transcribe or translate. Default value: \"transcribe\"\n */\n task?: 'transcribe' | 'translate';\n\n /**\n * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.\n *\n * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.\n */\n language?:\n | 'af'\n | 'am'\n | 'ar'\n | 'as'\n | 'az'\n | 'ba'\n | 'be'\n | 'bg'\n | 'bn'\n | 'bo'\n | 'br'\n | 'bs'\n | 'ca'\n | 'cs'\n | 'cy'\n | 'da'\n | 'de'\n | 'el'\n | 'en'\n | 'es'\n | 'et'\n | 'eu'\n | 'fa'\n | 'fi'\n | 'fo'\n | 'fr'\n | 'gl'\n | 'gu'\n | 'ha'\n | 'haw'\n | 'he'\n | 'hi'\n | 'hr'\n | 'ht'\n | 'hu'\n | 'hy'\n | 'id'\n | 'is'\n | 'it'\n | 'ja'\n | 'jw'\n | 'ka'\n | 'kk'\n | 'km'\n | 'kn'\n | 'ko'\n | 'la'\n | 'lb'\n | 'ln'\n | 'lo'\n | 'lt'\n | 'lv'\n | 'mg'\n | 'mi'\n | 'mk'\n | 'ml'\n | 'mn'\n | 'mr'\n | 'ms'\n | 'mt'\n | 'my'\n | 'ne'\n | 'nl'\n | 'nn'\n | 'no'\n | 'oc'\n | 'pa'\n | 'pl'\n | 'ps'\n | 'pt'\n | 'ro'\n | 'ru'\n | 'sa'\n | 'sd'\n | 'si'\n | 'sk'\n | 'sl'\n | 'sn'\n | 'so'\n | 'sq'\n | 'sr'\n | 'su'\n | 'sv'\n | 'sw'\n | 'ta'\n | 'te'\n | 'tg'\n | 'th'\n | 'tk'\n | 'tl'\n | 'tr'\n | 'tt'\n | 'uk'\n | 'ur'\n | 'uz'\n | 'vi'\n | 'yi'\n | 'yo'\n | 'yue'\n | 'zh'\n | null;\n\n /**\n * Whether to diarize the audio file. Defaults to true.\n */\n diarize?: boolean;\n\n /**\n * Level of the chunks to return. Either segment or word. Default value: \"segment\"\n */\n chunk_level?: 'segment' | 'word';\n\n /**\n * Version of the model to use. All of the models are the Whisper large variant. Default value: \"3\"\n */\n version?: '3';\n\n /**\n * Default value: 64\n */\n batch_size?: number;\n\n /**\n * Prompt to use for generation. Defaults to an empty string. Default value: \"\"\n */\n prompt?: string;\n\n /**\n * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.\n */\n num_speakers?: number | null;\n};\n\nexport const FAL_LANGUAGE_BOOSTS = [\n 'Chinese',\n 'Chinese,Yue',\n 'English',\n 'Arabic',\n 'Russian',\n 'Spanish',\n 'French',\n 'Portuguese',\n 'German',\n 'Turkish',\n 'Dutch',\n 'Ukrainian',\n 'Vietnamese',\n 'Indonesian',\n 'Japanese',\n 'Italian',\n 'Korean',\n 'Thai',\n 'Polish',\n 'Romanian',\n 'Greek',\n 'Czech',\n 'Finnish',\n 'Hindi',\n 'auto',\n] as const;\nexport type FalLanguageBoost = (typeof FAL_LANGUAGE_BOOSTS)[number];\n\nexport const FAL_EMOTIONS = [\n 'happy',\n 'sad',\n 'angry',\n 'fearful',\n 'disgusted',\n 'surprised',\n 'neutral',\n] as const;\nexport type FalEmotion = (typeof FAL_EMOTIONS)[number];\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":["_a","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","getFromApi","postJsonToApi","z","z","createJsonErrorResponseHandler","falFailedResponseHandler","postJsonToApi","combineHeaders","falFailedResponseHandler","createJsonResponseHandler","getFromApi","response","body","createJsonErrorResponseHandler","_a","_b","_c","_d","combineHeaders","createBinaryResponseHandler","createJsonResponseHandler","createStatusCodeErrorResponseHandler","getFromApi","parseProviderOptions","postJsonToApi","z","parseProviderOptions","postJsonToApi","combineHeaders","falFailedResponseHandler","createJsonResponseHandler","getFromApi","createStatusCodeErrorResponseHandler","createBinaryResponseHandler"]}
1
+ {"version":3,"sources":["../src/fal-provider.ts","../src/fal-image-model.ts","../src/fal-transcription-model.ts","../src/fal-error.ts","../src/fal-speech-model.ts","../src/fal-api-types.ts","../src/version.ts"],"sourcesContent":["import {\n ImageModelV3,\n NoSuchModelError,\n ProviderV3,\n SpeechModelV3,\n TranscriptionModelV3,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { FalImageModel } from './fal-image-model';\nimport { FalImageModelId } from './fal-image-settings';\nimport { FalTranscriptionModelId } from './fal-transcription-options';\nimport { FalTranscriptionModel } from './fal-transcription-model';\nimport { FalSpeechModelId } from './fal-speech-settings';\nimport { FalSpeechModel } from './fal-speech-model';\nimport { VERSION } from './version';\n\nexport interface FalProviderSettings {\n /**\nfal.ai API key. Default value is taken from the `FAL_API_KEY` environment\nvariable, falling back to `FAL_KEY`.\n */\n apiKey?: string;\n\n /**\nBase URL for the API calls.\nThe default prefix is `https://fal.run`.\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\nexport interface FalProvider extends ProviderV3 {\n /**\nCreates a model for image generation.\n */\n image(modelId: FalImageModelId): ImageModelV3;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: FalImageModelId): ImageModelV3;\n\n /**\nCreates a model for transcription.\n */\n transcription(modelId: FalTranscriptionModelId): TranscriptionModelV3;\n\n /**\nCreates a model for speech generation.\n */\n speech(modelId: FalSpeechModelId): SpeechModelV3;\n}\n\nconst defaultBaseURL = 'https://fal.run';\n\nfunction loadFalApiKey({\n apiKey,\n description = 'fal.ai',\n}: {\n apiKey: string | undefined;\n description?: string;\n}): string {\n if (typeof apiKey === 'string') {\n return apiKey;\n }\n\n if (apiKey != null) {\n throw new Error(`${description} API key must be a string.`);\n }\n\n if (typeof process === 'undefined') {\n throw new Error(\n `${description} API key is missing. Pass it using the 'apiKey' parameter. Environment variables are not supported in this environment.`,\n );\n }\n\n let envApiKey = process.env.FAL_API_KEY;\n if (envApiKey == null) {\n envApiKey = process.env.FAL_KEY;\n }\n\n if (envApiKey == null) {\n throw new Error(\n `${description} API key is missing. Pass it using the 'apiKey' parameter or set either the FAL_API_KEY or FAL_KEY environment variable.`,\n );\n }\n\n if (typeof envApiKey !== 'string') {\n throw new Error(\n `${description} API key must be a string. The value of the environment variable is not a string.`,\n );\n }\n\n return envApiKey;\n}\n\n/**\nCreate a fal.ai provider instance.\n */\nexport function createFal(options: FalProviderSettings = {}): FalProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Key ${loadFalApiKey({\n apiKey: options.apiKey,\n })}`,\n ...options.headers,\n },\n `ai-sdk/fal/${VERSION}`,\n );\n\n const createImageModel = (modelId: FalImageModelId) =>\n new FalImageModel(modelId, {\n provider: 'fal.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createSpeechModel = (modelId: FalSpeechModelId) =>\n new FalSpeechModel(modelId, {\n provider: `fal.speech`,\n url: ({ path }) => path,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createTranscriptionModel = (modelId: FalTranscriptionModelId) =>\n new FalTranscriptionModel(modelId, {\n provider: `fal.transcription`,\n url: ({ path }) => path,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n imageModel: createImageModel,\n image: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n speech: createSpeechModel,\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n transcription: createTranscriptionModel,\n };\n}\n\n/**\nDefault fal.ai provider instance.\n */\nexport const fal = createFal();\n","import type {\n ImageModelV3,\n ImageModelV3CallWarning,\n JSONObject,\n} from '@ai-sdk/provider';\nimport type { Resolvable } from '@ai-sdk/provider-utils';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n createStatusCodeErrorResponseHandler,\n getFromApi,\n postJsonToApi,\n resolve,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { FalImageModelId, FalImageSize } from './fal-image-settings';\n\ninterface FalImageModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalImageModel 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: FalImageModelId,\n private readonly config: FalImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\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 warnings: Array<ImageModelV3CallWarning> = [];\n\n let imageSize: FalImageSize | undefined;\n if (size) {\n const [width, height] = size.split('x').map(Number);\n imageSize = { width, height };\n } else if (aspectRatio) {\n imageSize = convertAspectRatioToSize(aspectRatio);\n }\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value, responseHeaders } = await postJsonToApi({\n url: `${this.config.baseURL}/${this.modelId}`,\n headers: combineHeaders(await resolve(this.config.headers), headers),\n body: {\n prompt,\n seed,\n image_size: imageSize,\n num_images: n,\n ...(providerOptions.fal ?? {}),\n },\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n falImageResponseSchema,\n ),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n const {\n images: targetImages,\n // prompt is just passed through and not a revised prompt per image\n prompt: _prompt,\n // NSFW information is normalized merged into `providerMetadata.fal.images`\n has_nsfw_concepts,\n nsfw_content_detected,\n // pass through other properties to providerMetadata\n ...responseMetaData\n } = value;\n\n // download the images:\n const downloadedImages = await Promise.all(\n targetImages.map(image => this.downloadImage(image.url, abortSignal)),\n );\n\n return {\n images: downloadedImages,\n warnings,\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n providerMetadata: {\n fal: {\n images: targetImages.map((image, index) => {\n const {\n url,\n content_type: contentType,\n file_name: fileName,\n file_data: fileData,\n file_size: fileSize,\n ...imageMetaData\n } = image;\n\n const nsfw =\n has_nsfw_concepts?.[index] ?? nsfw_content_detected?.[index];\n\n return {\n ...imageMetaData,\n ...removeOnlyUndefined({\n contentType,\n fileName,\n fileData,\n fileSize,\n nsfw,\n }),\n };\n }),\n ...responseMetaData,\n },\n },\n };\n }\n\n private async downloadImage(\n url: string,\n abortSignal: AbortSignal | undefined,\n ): Promise<Uint8Array> {\n const { value: response } = await getFromApi({\n url,\n // No specific headers should be needed for this request as it's a\n // generated image provided by fal.ai.\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n return response;\n }\n}\n\nfunction removeOnlyUndefined<T extends Record<string, unknown>>(obj: T) {\n return Object.fromEntries(\n Object.entries(obj).filter(([, v]) => v !== undefined),\n ) as Partial<T>;\n}\n\n/**\nConverts an aspect ratio to an image size compatible with fal.ai APIs.\n@param aspectRatio - The aspect ratio to convert.\n@returns The image size.\n */\nfunction convertAspectRatioToSize(\n aspectRatio: `${number}:${number}`,\n): FalImageSize | undefined {\n switch (aspectRatio) {\n case '1:1':\n return 'square_hd';\n case '16:9':\n return 'landscape_16_9';\n case '9:16':\n return 'portrait_16_9';\n case '4:3':\n return 'landscape_4_3';\n case '3:4':\n return 'portrait_4_3';\n case '16:10':\n return { width: 1280, height: 800 };\n case '10:16':\n return { width: 800, height: 1280 };\n case '21:9':\n return { width: 2560, height: 1080 };\n case '9:21':\n return { width: 1080, height: 2560 };\n }\n return undefined;\n}\n\n// Validation error has a particular payload to inform the exact property that is invalid\nconst falValidationErrorSchema = z.object({\n detail: z.array(\n z.object({\n loc: z.array(z.string()),\n msg: z.string(),\n type: z.string(),\n }),\n ),\n});\n\ntype ValidationError = z.infer<typeof falValidationErrorSchema>;\n\n// Other errors have a message property\nconst falHttpErrorSchema = z.object({\n message: z.string(),\n});\n\nconst falErrorSchema = z.union([falValidationErrorSchema, falHttpErrorSchema]);\n\nconst falImageSchema = z.object({\n url: z.string(),\n width: z.number().nullish(),\n height: z.number().nullish(),\n // e.g. https://fal.ai/models/fal-ai/fashn/tryon/v1.6/api#schema-output\n content_type: z.string().nullish(),\n // e.g. https://fal.ai/models/fal-ai/flowedit/api#schema-output\n file_name: z.string().nullish(),\n file_data: z.string().optional(),\n file_size: z.number().nullish(),\n});\n\n// https://fal.ai/models/fal-ai/lora/api#type-File\nconst loraFileSchema = z.object({\n url: z.string(),\n content_type: z.string().optional(),\n file_name: z.string().nullable().optional(),\n file_data: z.string().optional(),\n file_size: z.number().nullable().optional(),\n});\n\nconst commonResponseSchema = z.object({\n timings: z\n .object({\n inference: z.number().optional(),\n })\n .optional(),\n seed: z.number().optional(),\n has_nsfw_concepts: z.array(z.boolean()).optional(),\n prompt: z.string().optional(),\n // https://fal.ai/models/fal-ai/lcm/api#schema-output\n nsfw_content_detected: z.array(z.boolean()).optional(),\n num_inference_steps: z.number().optional(),\n // https://fal.ai/models/fal-ai/lora/api#schema-output\n debug_latents: loraFileSchema.optional(),\n debug_per_pass_latents: loraFileSchema.optional(),\n});\n\n// Most FAL image models respond with an array of images, but some have a response\n// with a single image, e.g. https://fal.ai/models/easel-ai/easel-avatar/api#schema-output\nconst base = z.looseObject(commonResponseSchema.shape);\nconst falImageResponseSchema = z\n .union([\n base.extend({ images: z.array(falImageSchema) }),\n base.extend({ image: falImageSchema }),\n ])\n .transform(v => ('images' in v ? v : { ...v, images: [v.image] }))\n .pipe(base.extend({ images: z.array(falImageSchema) }));\n\nfunction isValidationError(error: unknown): error is ValidationError {\n return falValidationErrorSchema.safeParse(error).success;\n}\n\nconst falFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: falErrorSchema,\n errorToMessage: error => {\n if (isValidationError(error)) {\n return error.detail\n .map(detail => `${detail.loc.join('.')}: ${detail.msg}`)\n .join('\\n');\n }\n return error.message ?? 'Unknown fal error';\n },\n});\n","import {\n AISDKError,\n TranscriptionModelV3,\n TranscriptionModelV3CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertUint8ArrayToBase64,\n createJsonErrorResponseHandler,\n createJsonResponseHandler,\n delay,\n getFromApi,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { FalConfig } from './fal-config';\nimport { falErrorDataSchema, falFailedResponseHandler } from './fal-error';\nimport { FalTranscriptionModelId } from './fal-transcription-options';\nimport { FalTranscriptionAPITypes } from './fal-api-types';\n\n// https://fal.ai/models/fal-ai/whisper/api?platform=http\nconst falProviderOptionsSchema = z.object({\n /**\n * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.\n *\n * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.\n */\n language: z\n .union([z.enum(['en']), z.string()])\n .nullish()\n .default('en'),\n\n /**\n * Whether to diarize the audio file. Defaults to true.\n */\n diarize: z.boolean().nullish().default(true),\n\n /**\n * Level of the chunks to return. Either segment or word. Default value: \"segment\"\n */\n chunkLevel: z.enum(['segment', 'word']).nullish().default('segment'),\n\n /**\n * Version of the model to use. All of the models are the Whisper large variant. Default value: \"3\"\n */\n version: z.enum(['3']).nullish().default('3'),\n\n /**\n * Default value: 64\n */\n batchSize: z.number().nullish().default(64),\n\n /**\n * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.\n */\n numSpeakers: z.number().nullable().nullish(),\n});\n\nexport type FalTranscriptionCallOptions = z.infer<\n typeof falProviderOptionsSchema\n>;\n\ninterface FalTranscriptionModelConfig extends FalConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalTranscriptionModel implements TranscriptionModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: FalTranscriptionModelId,\n private readonly config: FalTranscriptionModelConfig,\n ) {}\n\n private async getArgs({\n providerOptions,\n }: Parameters<TranscriptionModelV3['doGenerate']>[0]) {\n const warnings: TranscriptionModelV3CallWarning[] = [];\n\n // Parse provider options\n const falOptions = await parseProviderOptions({\n provider: 'fal',\n providerOptions,\n schema: falProviderOptionsSchema,\n });\n\n // Create form data with base fields\n const body: Omit<FalTranscriptionAPITypes, 'audio_url'> = {\n task: 'transcribe',\n diarize: true,\n chunk_level: 'word',\n };\n\n // Add provider-specific options\n if (falOptions) {\n body.language = falOptions.language as never;\n body.version = falOptions.version ?? undefined;\n body.batch_size = falOptions.batchSize ?? undefined;\n body.num_speakers = falOptions.numSpeakers ?? undefined;\n\n if (typeof falOptions.diarize === 'boolean') {\n body.diarize = falOptions.diarize;\n }\n\n if (falOptions.chunkLevel) {\n body.chunk_level = falOptions.chunkLevel;\n }\n }\n\n return {\n body,\n warnings,\n };\n }\n\n async doGenerate(\n options: Parameters<TranscriptionModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<TranscriptionModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { body, warnings } = await this.getArgs(options);\n\n const base64Audio =\n typeof options.audio === 'string'\n ? options.audio\n : convertUint8ArrayToBase64(options.audio);\n\n const audioUrl = `data:${options.mediaType};base64,${base64Audio}`;\n\n const { value: queueResponse } = await postJsonToApi({\n url: this.config.url({\n path: `https://queue.fal.run/fal-ai/${this.modelId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: {\n ...body,\n audio_url: audioUrl,\n },\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler:\n createJsonResponseHandler(falJobResponseSchema),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n // Poll for completion with timeout\n const startTime = Date.now();\n const timeoutMs = 60000; // 60 seconds timeout\n const pollIntervalMs = 1000; // 1 second interval\n\n let response;\n let responseHeaders;\n let rawResponse;\n\n while (true) {\n try {\n const {\n value: statusResponse,\n responseHeaders: statusHeaders,\n rawValue: statusRawResponse,\n } = await getFromApi({\n url: this.config.url({\n path: `https://queue.fal.run/fal-ai/${this.modelId}/requests/${queueResponse.request_id}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n failedResponseHandler: async ({\n requestBodyValues,\n response,\n url,\n }) => {\n const clone = response.clone();\n const body = (await clone.json()) as { detail: string };\n\n if (body.detail === 'Request is still in progress') {\n // This is not an error, just a status update that the request is still processing\n // Continue polling by returning a special error that signals to continue\n return {\n value: new Error('Request is still in progress'),\n rawValue: body,\n responseHeaders: {},\n };\n }\n\n return createJsonErrorResponseHandler({\n errorSchema: falErrorDataSchema,\n errorToMessage: data => data.error.message,\n })({ requestBodyValues, response, url });\n },\n successfulResponseHandler: createJsonResponseHandler(\n falTranscriptionResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n response = statusResponse;\n responseHeaders = statusHeaders;\n rawResponse = statusRawResponse;\n break;\n } catch (error) {\n // If the error message indicates the request is still in progress, ignore it and continue polling\n if (\n error instanceof Error &&\n error.message === 'Request is still in progress'\n ) {\n // Continue with the polling loop\n } else {\n // Re-throw any other errors\n throw error;\n }\n }\n\n // Check if we've exceeded the timeout\n if (Date.now() - startTime > timeoutMs) {\n throw new AISDKError({\n message: 'Transcription request timed out after 60 seconds',\n name: 'TranscriptionRequestTimedOut',\n cause: response,\n });\n }\n\n // Wait before polling again\n await delay(pollIntervalMs);\n }\n\n return {\n text: response.text,\n segments:\n response.chunks?.map(chunk => ({\n text: chunk.text,\n startSecond: chunk.timestamp?.at(0) ?? 0,\n endSecond: chunk.timestamp?.at(1) ?? 0,\n })) ?? [],\n language: response.inferred_languages?.at(0) ?? undefined,\n durationInSeconds: response.chunks?.at(-1)?.timestamp?.at(1) ?? undefined,\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawResponse,\n },\n };\n }\n}\n\nconst falJobResponseSchema = z.object({\n request_id: z.string().nullish(),\n});\n\nconst falTranscriptionResponseSchema = z.object({\n text: z.string(),\n chunks: z\n .array(\n z.object({\n text: z.string(),\n timestamp: z.array(z.number()).nullish(),\n }),\n )\n .nullish(),\n inferred_languages: z.array(z.string()).nullish(),\n});\n","import { z } from 'zod/v4';\nimport { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\n\nexport const falErrorDataSchema = z.object({\n error: z.object({\n message: z.string(),\n code: z.number(),\n }),\n});\n\nexport type FalErrorData = z.infer<typeof falErrorDataSchema>;\n\nexport const falFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: falErrorDataSchema,\n errorToMessage: data => data.error.message,\n});\n","import { SpeechModelV3, SpeechModelV3CallWarning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createStatusCodeErrorResponseHandler,\n getFromApi,\n parseProviderOptions,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { FalConfig } from './fal-config';\nimport { falFailedResponseHandler } from './fal-error';\nimport { FAL_EMOTIONS, FAL_LANGUAGE_BOOSTS } from './fal-api-types';\nimport { FalSpeechModelId } from './fal-speech-settings';\n\nconst falSpeechProviderOptionsSchema = z.looseObject({\n voice_setting: z\n .object({\n speed: z.number().nullish(),\n vol: z.number().nullish(),\n voice_id: z.string().nullish(),\n pitch: z.number().nullish(),\n english_normalization: z.boolean().nullish(),\n emotion: z.enum(FAL_EMOTIONS).nullish(),\n })\n .partial()\n .nullish(),\n audio_setting: z.record(z.string(), z.unknown()).nullish(),\n language_boost: z.enum(FAL_LANGUAGE_BOOSTS).nullish(),\n pronunciation_dict: z.record(z.string(), z.string()).nullish(),\n});\n\nexport type FalSpeechCallOptions = z.infer<\n typeof falSpeechProviderOptionsSchema\n>;\n\ninterface FalSpeechModelConfig extends FalConfig {\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FalSpeechModel implements SpeechModelV3 {\n readonly specificationVersion = 'v3';\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: FalSpeechModelId,\n private readonly config: FalSpeechModelConfig,\n ) {}\n\n private async getArgs({\n text,\n voice,\n outputFormat,\n speed,\n language,\n providerOptions,\n }: Parameters<SpeechModelV3['doGenerate']>[0]) {\n const warnings: SpeechModelV3CallWarning[] = [];\n\n const falOptions = await parseProviderOptions({\n provider: 'fal',\n providerOptions,\n schema: falSpeechProviderOptionsSchema,\n });\n\n const requestBody = {\n text,\n output_format: outputFormat === 'hex' ? 'hex' : 'url',\n voice,\n speed,\n ...falOptions,\n };\n\n // Language is not directly supported; warn and ignore\n if (language) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'language',\n details:\n \"fal speech models don't support 'language' directly; consider providerOptions.fal.language_boost\",\n });\n }\n\n // warn on invalid values (and on hex until we support hex response handling)\n if (outputFormat && outputFormat !== 'url' && outputFormat !== 'hex') {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'outputFormat',\n details: `Unsupported or unhandled outputFormat: ${outputFormat}. Using 'url' instead.`,\n });\n }\n\n return { requestBody, warnings } as const;\n }\n\n async doGenerate(\n options: Parameters<SpeechModelV3['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<SpeechModelV3['doGenerate']>>> {\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { requestBody, warnings } = await this.getArgs(options);\n\n const {\n value: json,\n responseHeaders,\n rawValue,\n } = await postJsonToApi({\n url: this.config.url({\n path: `https://fal.run/${this.modelId}`,\n modelId: this.modelId,\n }),\n headers: combineHeaders(this.config.headers(), options.headers),\n body: requestBody,\n failedResponseHandler: falFailedResponseHandler,\n successfulResponseHandler: createJsonResponseHandler(\n falSpeechResponseSchema,\n ),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const audioUrl = json.audio.url;\n const { value: audio } = await getFromApi({\n url: audioUrl,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n audio,\n warnings,\n request: {\n body: JSON.stringify(requestBody),\n },\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n body: rawValue,\n },\n };\n }\n}\n\nconst falSpeechResponseSchema = z.object({\n audio: z.object({ url: z.string() }),\n duration_ms: z.number().optional(),\n request_id: z.string().optional(),\n});\n","export type FalTranscriptionAPITypes = {\n /**\n * URL of the audio file to transcribe. Supported formats: mp3, mp4, mpeg, mpga, m4a, wav or webm.\n */\n audio_url: string;\n\n /**\n * Task to perform on the audio file. Either transcribe or translate. Default value: \"transcribe\"\n */\n task?: 'transcribe' | 'translate';\n\n /**\n * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.\n *\n * If translate is selected as the task, the audio will be translated to English, regardless of the language selected.\n */\n language?:\n | 'af'\n | 'am'\n | 'ar'\n | 'as'\n | 'az'\n | 'ba'\n | 'be'\n | 'bg'\n | 'bn'\n | 'bo'\n | 'br'\n | 'bs'\n | 'ca'\n | 'cs'\n | 'cy'\n | 'da'\n | 'de'\n | 'el'\n | 'en'\n | 'es'\n | 'et'\n | 'eu'\n | 'fa'\n | 'fi'\n | 'fo'\n | 'fr'\n | 'gl'\n | 'gu'\n | 'ha'\n | 'haw'\n | 'he'\n | 'hi'\n | 'hr'\n | 'ht'\n | 'hu'\n | 'hy'\n | 'id'\n | 'is'\n | 'it'\n | 'ja'\n | 'jw'\n | 'ka'\n | 'kk'\n | 'km'\n | 'kn'\n | 'ko'\n | 'la'\n | 'lb'\n | 'ln'\n | 'lo'\n | 'lt'\n | 'lv'\n | 'mg'\n | 'mi'\n | 'mk'\n | 'ml'\n | 'mn'\n | 'mr'\n | 'ms'\n | 'mt'\n | 'my'\n | 'ne'\n | 'nl'\n | 'nn'\n | 'no'\n | 'oc'\n | 'pa'\n | 'pl'\n | 'ps'\n | 'pt'\n | 'ro'\n | 'ru'\n | 'sa'\n | 'sd'\n | 'si'\n | 'sk'\n | 'sl'\n | 'sn'\n | 'so'\n | 'sq'\n | 'sr'\n | 'su'\n | 'sv'\n | 'sw'\n | 'ta'\n | 'te'\n | 'tg'\n | 'th'\n | 'tk'\n | 'tl'\n | 'tr'\n | 'tt'\n | 'uk'\n | 'ur'\n | 'uz'\n | 'vi'\n | 'yi'\n | 'yo'\n | 'yue'\n | 'zh'\n | null;\n\n /**\n * Whether to diarize the audio file. Defaults to true.\n */\n diarize?: boolean;\n\n /**\n * Level of the chunks to return. Either segment or word. Default value: \"segment\"\n */\n chunk_level?: 'segment' | 'word';\n\n /**\n * Version of the model to use. All of the models are the Whisper large variant. Default value: \"3\"\n */\n version?: '3';\n\n /**\n * Default value: 64\n */\n batch_size?: number;\n\n /**\n * Prompt to use for generation. Defaults to an empty string. Default value: \"\"\n */\n prompt?: string;\n\n /**\n * Number of speakers in the audio file. Defaults to null. If not provided, the number of speakers will be automatically detected.\n */\n num_speakers?: number | null;\n};\n\nexport const FAL_LANGUAGE_BOOSTS = [\n 'Chinese',\n 'Chinese,Yue',\n 'English',\n 'Arabic',\n 'Russian',\n 'Spanish',\n 'French',\n 'Portuguese',\n 'German',\n 'Turkish',\n 'Dutch',\n 'Ukrainian',\n 'Vietnamese',\n 'Indonesian',\n 'Japanese',\n 'Italian',\n 'Korean',\n 'Thai',\n 'Polish',\n 'Romanian',\n 'Greek',\n 'Czech',\n 'Finnish',\n 'Hindi',\n 'auto',\n] as const;\nexport type FalLanguageBoost = (typeof FAL_LANGUAGE_BOOSTS)[number];\n\nexport const FAL_EMOTIONS = [\n 'happy',\n 'sad',\n 'angry',\n 'fearful',\n 'disgusted',\n 'surprised',\n 'neutral',\n] as const;\nexport type FalEmotion = (typeof FAL_EMOTIONS)[number];\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":["_a","combineHeaders","createJsonErrorResponseHandler","createJsonResponseHandler","getFromApi","postJsonToApi","z","z","createJsonErrorResponseHandler","falFailedResponseHandler","z","postJsonToApi","combineHeaders","falFailedResponseHandler","createJsonResponseHandler","getFromApi","response","body","createJsonErrorResponseHandler","_a","_b","_c","_d","combineHeaders","createBinaryResponseHandler","createJsonResponseHandler","createStatusCodeErrorResponseHandler","getFromApi","parseProviderOptions","postJsonToApi","z","z","parseProviderOptions","postJsonToApi","combineHeaders","falFailedResponseHandler","createJsonResponseHandler","getFromApi","createStatusCodeErrorResponseHandler","createBinaryResponseHandler"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/fal",
3
- "version": "2.0.0-beta.13",
3
+ "version": "2.0.0-beta.15",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -20,7 +20,7 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@ai-sdk/provider": "3.0.0-beta.6",
23
- "@ai-sdk/provider-utils": "4.0.0-beta.13"
23
+ "@ai-sdk/provider-utils": "4.0.0-beta.15"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "20.17.24",