@ai-sdk/fal 2.0.18 → 2.0.20

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,20 @@
1
1
  # @ai-sdk/fal
2
2
 
3
+ ## 2.0.20
4
+
5
+ ### Patch Changes
6
+
7
+ - 99fbed8: feat: normalize provider specific model options type names and ensure they are exported
8
+
9
+ ## 2.0.19
10
+
11
+ ### Patch Changes
12
+
13
+ - 7168375: feat (ai, provider): default global provider video model resolution
14
+ - Updated dependencies [7168375]
15
+ - @ai-sdk/provider@3.0.8
16
+ - @ai-sdk/provider-utils@4.0.14
17
+
3
18
  ## 2.0.18
4
19
 
5
20
  ### Patch Changes
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ProviderV3, ImageModelV3, TranscriptionModelV3, Experimental_VideoModelV3, SpeechModelV3 } from '@ai-sdk/provider';
2
2
  import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
3
3
  import { FetchFunction, InferSchema } from '@ai-sdk/provider-utils';
4
+ import { z } from 'zod/v4';
4
5
 
5
6
  type FalImageModelId = 'fal-ai/aura-sr' | 'fal-ai/bria/background/remove' | 'fal-ai/bria/eraser' | 'fal-ai/bria/product-shot' | 'fal-ai/bria/reimagine' | 'bria/text-to-image/3.2' | 'fal-ai/bria/text-to-image/base' | 'fal-ai/bria/text-to-image/fast' | 'fal-ai/bria/text-to-image/hd' | 'fal-ai/bytedance/dreamina/v3.1/text-to-image' | 'fal-ai/ccsr' | 'fal-ai/clarity-upscaler' | 'fal-ai/creative-upscaler' | 'fal-ai/esrgan' | 'fal-ai/flux-general' | 'fal-ai/flux-general/differential-diffusion' | 'fal-ai/flux-general/image-to-image' | 'fal-ai/flux-general/inpainting' | 'fal-ai/flux-general/rf-inversion' | 'fal-ai/flux-kontext-lora/text-to-image' | 'fal-ai/flux-lora' | 'fal-ai/flux-lora/image-to-image' | 'fal-ai/flux-lora/inpainting' | 'fal-ai/flux-pro/kontext' | 'fal-ai/flux-pro/kontext/max' | 'fal-ai/flux-pro/v1.1' | 'fal-ai/flux-pro/v1.1-ultra' | 'fal-ai/flux-pro/v1.1-ultra-finetuned' | 'fal-ai/flux-pro/v1.1-ultra/redux' | 'fal-ai/flux-pro/v1.1/redux' | 'fal-ai/flux/dev' | 'fal-ai/flux/dev/image-to-image' | 'fal-ai/flux/dev/redux' | 'fal-ai/flux/krea' | 'fal-ai/flux/krea/image-to-image' | 'fal-ai/flux/krea/redux' | 'fal-ai/flux/schnell' | 'fal-ai/flux/schnell/redux' | 'fal-ai/ideogram/character' | 'fal-ai/ideogram/character/edit' | 'fal-ai/ideogram/character/remix' | 'fal-ai/imagen4/preview' | 'fal-ai/luma-photon' | 'fal-ai/luma-photon/flash' | 'fal-ai/object-removal' | 'fal-ai/omnigen-v2' | 'fal-ai/qwen-image' | 'fal-ai/recraft/v3/text-to-image' | 'fal-ai/recraft/v3/image-to-image' | 'fal-ai/sana/sprint' | 'fal-ai/sana/v1.5/4.8b' | 'fal-ai/sana/v1.5/1.6b' | 'fal-ai/sky-raccoon' | 'fal-ai/wan/v2.2-5b/text-to-image' | 'fal-ai/wan/v2.2-a14b/text-to-image' | 'fal-ai/fashn/tryon/v1.6' | (string & {});
6
7
 
@@ -48,6 +49,10 @@ interface FalProvider extends ProviderV3 {
48
49
  * Creates a model for video generation.
49
50
  */
50
51
  video(modelId: FalVideoModelId): Experimental_VideoModelV3;
52
+ /**
53
+ * Creates a model for video generation.
54
+ */
55
+ videoModel(modelId: FalVideoModelId): Experimental_VideoModelV3;
51
56
  /**
52
57
  * Creates a model for speech generation.
53
58
  */
@@ -66,10 +71,76 @@ declare function createFal(options?: FalProviderSettings): FalProvider;
66
71
  */
67
72
  declare const fal: FalProvider;
68
73
 
69
- declare const falImageProviderOptionsSchema: _ai_sdk_provider_utils.LazySchema<Record<string, unknown>>;
70
- type FalImageProviderOptions = InferSchema<typeof falImageProviderOptionsSchema>;
74
+ declare const falImageModelOptionsSchema: _ai_sdk_provider_utils.LazySchema<Record<string, unknown>>;
75
+ type FalImageModelOptions = InferSchema<typeof falImageModelOptionsSchema>;
76
+
77
+ declare const falSpeechModelOptionsSchema: z.ZodObject<{
78
+ voice_setting: z.ZodOptional<z.ZodNullable<z.ZodObject<{
79
+ speed: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
80
+ vol: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
81
+ voice_id: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
82
+ pitch: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
83
+ english_normalization: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodBoolean>>>;
84
+ emotion: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEnum<{
85
+ happy: "happy";
86
+ sad: "sad";
87
+ angry: "angry";
88
+ fearful: "fearful";
89
+ disgusted: "disgusted";
90
+ surprised: "surprised";
91
+ neutral: "neutral";
92
+ }>>>>;
93
+ }, z.core.$strip>>>;
94
+ audio_setting: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
95
+ language_boost: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
96
+ Chinese: "Chinese";
97
+ "Chinese,Yue": "Chinese,Yue";
98
+ English: "English";
99
+ Arabic: "Arabic";
100
+ Russian: "Russian";
101
+ Spanish: "Spanish";
102
+ French: "French";
103
+ Portuguese: "Portuguese";
104
+ German: "German";
105
+ Turkish: "Turkish";
106
+ Dutch: "Dutch";
107
+ Ukrainian: "Ukrainian";
108
+ Vietnamese: "Vietnamese";
109
+ Indonesian: "Indonesian";
110
+ Japanese: "Japanese";
111
+ Italian: "Italian";
112
+ Korean: "Korean";
113
+ Thai: "Thai";
114
+ Polish: "Polish";
115
+ Romanian: "Romanian";
116
+ Greek: "Greek";
117
+ Czech: "Czech";
118
+ Finnish: "Finnish";
119
+ Hindi: "Hindi";
120
+ auto: "auto";
121
+ }>>>;
122
+ pronunciation_dict: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
123
+ }, z.core.$loose>;
124
+ type FalSpeechModelOptions = z.infer<typeof falSpeechModelOptionsSchema>;
125
+
126
+ declare const falTranscriptionModelOptionsSchema: z.ZodObject<{
127
+ language: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
128
+ en: "en";
129
+ }>, z.ZodString]>>>>;
130
+ diarize: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodBoolean>>>;
131
+ chunkLevel: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodEnum<{
132
+ segment: "segment";
133
+ word: "word";
134
+ }>>>>;
135
+ version: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodEnum<{
136
+ 3: "3";
137
+ }>>>>;
138
+ batchSize: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
139
+ numSpeakers: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodNumber>>>;
140
+ }, z.core.$strip>;
141
+ type FalTranscriptionModelOptions = z.infer<typeof falTranscriptionModelOptionsSchema>;
71
142
 
72
- type FalVideoProviderOptions = {
143
+ type FalVideoModelOptions = {
73
144
  loop?: boolean | null;
74
145
  motionStrength?: number | null;
75
146
  pollIntervalMs?: number | null;
@@ -82,4 +153,4 @@ type FalVideoProviderOptions = {
82
153
 
83
154
  declare const VERSION: string;
84
155
 
85
- export { type FalImageProviderOptions, type FalProvider, type FalProviderSettings, type FalVideoModelId, type FalVideoProviderOptions, VERSION, createFal, fal };
156
+ export { type FalImageModelOptions, type FalImageModelOptions as FalImageProviderOptions, type FalProvider, type FalProviderSettings, type FalSpeechModelOptions, type FalTranscriptionModelOptions, type FalVideoModelId, type FalVideoModelOptions, type FalVideoModelOptions as FalVideoProviderOptions, VERSION, createFal, fal };
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { ProviderV3, ImageModelV3, TranscriptionModelV3, Experimental_VideoModelV3, SpeechModelV3 } from '@ai-sdk/provider';
2
2
  import * as _ai_sdk_provider_utils from '@ai-sdk/provider-utils';
3
3
  import { FetchFunction, InferSchema } from '@ai-sdk/provider-utils';
4
+ import { z } from 'zod/v4';
4
5
 
5
6
  type FalImageModelId = 'fal-ai/aura-sr' | 'fal-ai/bria/background/remove' | 'fal-ai/bria/eraser' | 'fal-ai/bria/product-shot' | 'fal-ai/bria/reimagine' | 'bria/text-to-image/3.2' | 'fal-ai/bria/text-to-image/base' | 'fal-ai/bria/text-to-image/fast' | 'fal-ai/bria/text-to-image/hd' | 'fal-ai/bytedance/dreamina/v3.1/text-to-image' | 'fal-ai/ccsr' | 'fal-ai/clarity-upscaler' | 'fal-ai/creative-upscaler' | 'fal-ai/esrgan' | 'fal-ai/flux-general' | 'fal-ai/flux-general/differential-diffusion' | 'fal-ai/flux-general/image-to-image' | 'fal-ai/flux-general/inpainting' | 'fal-ai/flux-general/rf-inversion' | 'fal-ai/flux-kontext-lora/text-to-image' | 'fal-ai/flux-lora' | 'fal-ai/flux-lora/image-to-image' | 'fal-ai/flux-lora/inpainting' | 'fal-ai/flux-pro/kontext' | 'fal-ai/flux-pro/kontext/max' | 'fal-ai/flux-pro/v1.1' | 'fal-ai/flux-pro/v1.1-ultra' | 'fal-ai/flux-pro/v1.1-ultra-finetuned' | 'fal-ai/flux-pro/v1.1-ultra/redux' | 'fal-ai/flux-pro/v1.1/redux' | 'fal-ai/flux/dev' | 'fal-ai/flux/dev/image-to-image' | 'fal-ai/flux/dev/redux' | 'fal-ai/flux/krea' | 'fal-ai/flux/krea/image-to-image' | 'fal-ai/flux/krea/redux' | 'fal-ai/flux/schnell' | 'fal-ai/flux/schnell/redux' | 'fal-ai/ideogram/character' | 'fal-ai/ideogram/character/edit' | 'fal-ai/ideogram/character/remix' | 'fal-ai/imagen4/preview' | 'fal-ai/luma-photon' | 'fal-ai/luma-photon/flash' | 'fal-ai/object-removal' | 'fal-ai/omnigen-v2' | 'fal-ai/qwen-image' | 'fal-ai/recraft/v3/text-to-image' | 'fal-ai/recraft/v3/image-to-image' | 'fal-ai/sana/sprint' | 'fal-ai/sana/v1.5/4.8b' | 'fal-ai/sana/v1.5/1.6b' | 'fal-ai/sky-raccoon' | 'fal-ai/wan/v2.2-5b/text-to-image' | 'fal-ai/wan/v2.2-a14b/text-to-image' | 'fal-ai/fashn/tryon/v1.6' | (string & {});
6
7
 
@@ -48,6 +49,10 @@ interface FalProvider extends ProviderV3 {
48
49
  * Creates a model for video generation.
49
50
  */
50
51
  video(modelId: FalVideoModelId): Experimental_VideoModelV3;
52
+ /**
53
+ * Creates a model for video generation.
54
+ */
55
+ videoModel(modelId: FalVideoModelId): Experimental_VideoModelV3;
51
56
  /**
52
57
  * Creates a model for speech generation.
53
58
  */
@@ -66,10 +71,76 @@ declare function createFal(options?: FalProviderSettings): FalProvider;
66
71
  */
67
72
  declare const fal: FalProvider;
68
73
 
69
- declare const falImageProviderOptionsSchema: _ai_sdk_provider_utils.LazySchema<Record<string, unknown>>;
70
- type FalImageProviderOptions = InferSchema<typeof falImageProviderOptionsSchema>;
74
+ declare const falImageModelOptionsSchema: _ai_sdk_provider_utils.LazySchema<Record<string, unknown>>;
75
+ type FalImageModelOptions = InferSchema<typeof falImageModelOptionsSchema>;
76
+
77
+ declare const falSpeechModelOptionsSchema: z.ZodObject<{
78
+ voice_setting: z.ZodOptional<z.ZodNullable<z.ZodObject<{
79
+ speed: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
80
+ vol: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
81
+ voice_id: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
82
+ pitch: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
83
+ english_normalization: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodBoolean>>>;
84
+ emotion: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEnum<{
85
+ happy: "happy";
86
+ sad: "sad";
87
+ angry: "angry";
88
+ fearful: "fearful";
89
+ disgusted: "disgusted";
90
+ surprised: "surprised";
91
+ neutral: "neutral";
92
+ }>>>>;
93
+ }, z.core.$strip>>>;
94
+ audio_setting: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodUnknown>>>;
95
+ language_boost: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
96
+ Chinese: "Chinese";
97
+ "Chinese,Yue": "Chinese,Yue";
98
+ English: "English";
99
+ Arabic: "Arabic";
100
+ Russian: "Russian";
101
+ Spanish: "Spanish";
102
+ French: "French";
103
+ Portuguese: "Portuguese";
104
+ German: "German";
105
+ Turkish: "Turkish";
106
+ Dutch: "Dutch";
107
+ Ukrainian: "Ukrainian";
108
+ Vietnamese: "Vietnamese";
109
+ Indonesian: "Indonesian";
110
+ Japanese: "Japanese";
111
+ Italian: "Italian";
112
+ Korean: "Korean";
113
+ Thai: "Thai";
114
+ Polish: "Polish";
115
+ Romanian: "Romanian";
116
+ Greek: "Greek";
117
+ Czech: "Czech";
118
+ Finnish: "Finnish";
119
+ Hindi: "Hindi";
120
+ auto: "auto";
121
+ }>>>;
122
+ pronunciation_dict: z.ZodOptional<z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>>;
123
+ }, z.core.$loose>;
124
+ type FalSpeechModelOptions = z.infer<typeof falSpeechModelOptionsSchema>;
125
+
126
+ declare const falTranscriptionModelOptionsSchema: z.ZodObject<{
127
+ language: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodEnum<{
128
+ en: "en";
129
+ }>, z.ZodString]>>>>;
130
+ diarize: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodBoolean>>>;
131
+ chunkLevel: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodEnum<{
132
+ segment: "segment";
133
+ word: "word";
134
+ }>>>>;
135
+ version: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodEnum<{
136
+ 3: "3";
137
+ }>>>>;
138
+ batchSize: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
139
+ numSpeakers: z.ZodOptional<z.ZodNullable<z.ZodNullable<z.ZodNumber>>>;
140
+ }, z.core.$strip>;
141
+ type FalTranscriptionModelOptions = z.infer<typeof falTranscriptionModelOptionsSchema>;
71
142
 
72
- type FalVideoProviderOptions = {
143
+ type FalVideoModelOptions = {
73
144
  loop?: boolean | null;
74
145
  motionStrength?: number | null;
75
146
  pollIntervalMs?: number | null;
@@ -82,4 +153,4 @@ type FalVideoProviderOptions = {
82
153
 
83
154
  declare const VERSION: string;
84
155
 
85
- export { type FalImageProviderOptions, type FalProvider, type FalProviderSettings, type FalVideoModelId, type FalVideoProviderOptions, VERSION, createFal, fal };
156
+ export { type FalImageModelOptions, type FalImageModelOptions as FalImageProviderOptions, type FalProvider, type FalProviderSettings, type FalSpeechModelOptions, type FalTranscriptionModelOptions, type FalVideoModelId, type FalVideoModelOptions, type FalVideoModelOptions as FalVideoProviderOptions, VERSION, createFal, fal };
package/dist/index.js CHANGED
@@ -37,7 +37,7 @@ var import_v42 = require("zod/v4");
37
37
  // src/fal-image-options.ts
38
38
  var import_provider_utils = require("@ai-sdk/provider-utils");
39
39
  var import_v4 = require("zod/v4");
40
- var falImageProviderOptionsSchema = (0, import_provider_utils.lazySchema)(
40
+ var falImageModelOptionsSchema = (0, import_provider_utils.lazySchema)(
41
41
  () => (0, import_provider_utils.zodSchema)(
42
42
  import_v4.z.object({
43
43
  /** @deprecated use prompt.images instead */
@@ -165,7 +165,7 @@ var FalImageModel = class {
165
165
  const falOptions = await (0, import_provider_utils2.parseProviderOptions)({
166
166
  provider: "fal",
167
167
  providerOptions,
168
- schema: falImageProviderOptionsSchema
168
+ schema: falImageModelOptionsSchema
169
169
  });
170
170
  const requestBody = {
171
171
  prompt,
@@ -422,7 +422,7 @@ var falFailedResponseHandler2 = (0, import_provider_utils3.createJsonErrorRespon
422
422
  });
423
423
 
424
424
  // src/fal-transcription-model.ts
425
- var falProviderOptionsSchema = import_v44.z.object({
425
+ var falTranscriptionModelOptionsSchema = import_v44.z.object({
426
426
  /**
427
427
  * Language of the audio file. If set to null, the language will be automatically detected. Defaults to null.
428
428
  *
@@ -467,7 +467,7 @@ var FalTranscriptionModel = class {
467
467
  const falOptions = await (0, import_provider_utils4.parseProviderOptions)({
468
468
  provider: "fal",
469
469
  providerOptions,
470
- schema: falProviderOptionsSchema
470
+ schema: falTranscriptionModelOptionsSchema
471
471
  });
472
472
  const body = {
473
473
  task: "transcribe",
@@ -653,7 +653,7 @@ var FAL_EMOTIONS = [
653
653
  ];
654
654
 
655
655
  // src/fal-speech-model.ts
656
- var falSpeechProviderOptionsSchema = import_v45.z.looseObject({
656
+ var falSpeechModelOptionsSchema = import_v45.z.looseObject({
657
657
  voice_setting: import_v45.z.object({
658
658
  speed: import_v45.z.number().nullish(),
659
659
  vol: import_v45.z.number().nullish(),
@@ -687,7 +687,7 @@ var FalSpeechModel = class {
687
687
  const falOptions = await (0, import_provider_utils5.parseProviderOptions)({
688
688
  provider: "fal",
689
689
  providerOptions,
690
- schema: falSpeechProviderOptionsSchema
690
+ schema: falSpeechModelOptionsSchema
691
691
  });
692
692
  const requestBody = {
693
693
  text,
@@ -767,7 +767,7 @@ var falSpeechResponseSchema = import_v45.z.object({
767
767
  var import_provider2 = require("@ai-sdk/provider");
768
768
  var import_provider_utils6 = require("@ai-sdk/provider-utils");
769
769
  var import_v46 = require("zod/v4");
770
- var falVideoProviderOptionsSchema = (0, import_provider_utils6.lazySchema)(
770
+ var falVideoModelOptionsSchema = (0, import_provider_utils6.lazySchema)(
771
771
  () => (0, import_provider_utils6.zodSchema)(
772
772
  import_v46.z.object({
773
773
  // Video loop - only for Luma models
@@ -806,7 +806,7 @@ var FalVideoModel = class {
806
806
  const falOptions = await (0, import_provider_utils6.parseProviderOptions)({
807
807
  provider: "fal",
808
808
  providerOptions: options.providerOptions,
809
- schema: falVideoProviderOptionsSchema
809
+ schema: falVideoModelOptionsSchema
810
810
  });
811
811
  const body = {};
812
812
  if (options.prompt != null) {
@@ -1002,7 +1002,7 @@ var falVideoResponseSchema = import_v46.z.object({
1002
1002
  });
1003
1003
 
1004
1004
  // src/version.ts
1005
- var VERSION = true ? "2.0.18" : "0.0.0-test";
1005
+ var VERSION = true ? "2.0.20" : "0.0.0-test";
1006
1006
 
1007
1007
  // src/fal-provider.ts
1008
1008
  var defaultBaseURL = "https://fal.run";
@@ -1083,7 +1083,6 @@ function createFal(options = {}) {
1083
1083
  specificationVersion: "v3",
1084
1084
  imageModel: createImageModel,
1085
1085
  image: createImageModel,
1086
- video: createVideoModel,
1087
1086
  languageModel: (modelId) => {
1088
1087
  throw new import_provider3.NoSuchModelError({
1089
1088
  modelId,
@@ -1093,7 +1092,9 @@ function createFal(options = {}) {
1093
1092
  speech: createSpeechModel,
1094
1093
  embeddingModel,
1095
1094
  textEmbeddingModel: embeddingModel,
1096
- transcription: createTranscriptionModel
1095
+ transcription: createTranscriptionModel,
1096
+ video: createVideoModel,
1097
+ videoModel: createVideoModel
1097
1098
  };
1098
1099
  }
1099
1100
  var fal = createFal();