@ai-sdk/fireworks 0.0.8 → 0.0.10

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,31 @@
1
1
  # @ai-sdk/fireworks
2
2
 
3
+ ## 0.0.10
4
+
5
+ ### Patch Changes
6
+
7
+ - 90fb95a: chore (provider-utils): switch to unified test server
8
+ - e6dfef4: feat (provider/fireworks): Support add'l image models.
9
+ - Updated dependencies [90fb95a]
10
+ - Updated dependencies [e6dfef4]
11
+ - Updated dependencies [6636db6]
12
+ - @ai-sdk/provider-utils@2.0.7
13
+ - @ai-sdk/openai-compatible@0.0.15
14
+
15
+ ## 0.0.9
16
+
17
+ ### Patch Changes
18
+
19
+ - 19a2ce7: feat (provider/fireworks): Add image model support.
20
+ - 6337688: feat: change image generation errors to warnings
21
+ - Updated dependencies [19a2ce7]
22
+ - Updated dependencies [19a2ce7]
23
+ - Updated dependencies [43b37f7]
24
+ - Updated dependencies [6337688]
25
+ - @ai-sdk/provider@1.0.4
26
+ - @ai-sdk/provider-utils@2.0.6
27
+ - @ai-sdk/openai-compatible@0.0.14
28
+
3
29
  ## 0.0.8
4
30
 
5
31
  ### Patch Changes
package/README.md CHANGED
@@ -1,34 +1,50 @@
1
1
  # AI SDK - Fireworks Provider
2
2
 
3
- The **[Fireworks provider](https://sdk.vercel.ai/providers/ai-sdk-providers/fireworks)** for the [AI SDK](https://sdk.vercel.ai/docs) contains language model support for the [Fireworks](https://fireworks.ai) platform.
3
+ The **[Fireworks provider](https://sdk.vercel.ai/providers/ai-sdk-providers/fireworks)** for the [AI SDK](https://sdk.vercel.ai/docs) contains language model and image model support for the [Fireworks](https://fireworks.ai) platform.
4
4
 
5
5
  ## Setup
6
6
 
7
7
  The Fireworks provider is available in the `@ai-sdk/fireworks` module. You can install it with
8
8
 
9
- \```bash
9
+ ```bash
10
10
  npm i @ai-sdk/fireworks
11
- \```
11
+ ```
12
12
 
13
13
  ## Provider Instance
14
14
 
15
15
  You can import the default provider instance `fireworks` from `@ai-sdk/fireworks`:
16
16
 
17
- \```ts
17
+ ```ts
18
18
  import { fireworks } from '@ai-sdk/fireworks';
19
- \```
19
+ ```
20
20
 
21
- ## Example
21
+ ## Language Model Example
22
22
 
23
- \```ts
23
+ ```ts
24
24
  import { fireworks } from '@ai-sdk/fireworks';
25
25
  import { generateText } from 'ai';
26
26
 
27
27
  const { text } = await generateText({
28
- model: fireworks('accounts/fireworks/models/llama-v2-13b-chat'),
29
- prompt: 'Write a JavaScript function that sorts a list:',
28
+ model: fireworks('accounts/fireworks/models/deepseek-v3'),
29
+ prompt: 'Write a JavaScript function that sorts a list:',
30
30
  });
31
- \```
31
+ ```
32
+
33
+ ## Image Model Examples
34
+
35
+ ```ts
36
+ import { fireworks } from '@ai-sdk/fireworks';
37
+ import { experimental_generateImage as generateImage } from 'ai';
38
+ import fs from 'fs';
39
+
40
+ const { image } = await generateImage({
41
+ model: fireworks.image('accounts/fireworks/models/flux-1-dev-fp8'),
42
+ prompt: 'A serene mountain landscape at sunset',
43
+ });
44
+ const filename = `image-${Date.now()}.png`;
45
+ fs.writeFileSync(filename, image.uint8Array);
46
+ console.log(`Image saved to ${filename}`);
47
+ ```
32
48
 
33
49
  ## Documentation
34
50
 
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { LanguageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
1
+ import { LanguageModelV1, EmbeddingModelV1, ImageModelV1 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
  import { z } from 'zod';
4
4
  import { OpenAICompatibleChatSettings, OpenAICompatibleCompletionSettings, OpenAICompatibleEmbeddingSettings } from '@ai-sdk/openai-compatible';
@@ -15,6 +15,8 @@ type FireworksEmbeddingModelId = 'nomic-ai/nomic-embed-text-v1.5' | (string & {}
15
15
  interface FireworksEmbeddingSettings extends OpenAICompatibleEmbeddingSettings {
16
16
  }
17
17
 
18
+ type FireworksImageModelId = 'accounts/fireworks/models/flux-1-dev-fp8' | 'accounts/fireworks/models/flux-1-schnell-fp8' | 'accounts/fireworks/models/playground-v2-5-1024px-aesthetic' | 'accounts/fireworks/models/japanese-stable-diffusion-xl' | 'accounts/fireworks/models/playground-v2-1024px-aesthetic' | 'accounts/fireworks/models/SSD-1B' | 'accounts/fireworks/models/stable-diffusion-xl-1024-v1-0' | (string & {});
19
+
18
20
  type FireworksErrorData = z.infer<typeof fireworksErrorSchema>;
19
21
  declare const fireworksErrorSchema: z.ZodObject<{
20
22
  error: z.ZodString;
@@ -25,7 +27,8 @@ declare const fireworksErrorSchema: z.ZodObject<{
25
27
  }>;
26
28
  interface FireworksProviderSettings {
27
29
  /**
28
- Fireworks API key.
30
+ Fireworks API key. Default value is taken from the `FIREWORKS_API_KEY`
31
+ environment variable.
29
32
  */
30
33
  apiKey?: string;
31
34
  /**
@@ -59,6 +62,10 @@ interface FireworksProvider {
59
62
  Creates a text embedding model for text generation.
60
63
  */
61
64
  textEmbeddingModel(modelId: FireworksEmbeddingModelId, settings?: FireworksEmbeddingSettings): EmbeddingModelV1<string>;
65
+ /**
66
+ Creates a model for image generation.
67
+ */
68
+ image(modelId: FireworksImageModelId): ImageModelV1;
62
69
  }
63
70
  declare function createFireworks(options?: FireworksProviderSettings): FireworksProvider;
64
71
  declare const fireworks: FireworksProvider;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { LanguageModelV1, EmbeddingModelV1 } from '@ai-sdk/provider';
1
+ import { LanguageModelV1, EmbeddingModelV1, ImageModelV1 } from '@ai-sdk/provider';
2
2
  import { FetchFunction } from '@ai-sdk/provider-utils';
3
3
  import { z } from 'zod';
4
4
  import { OpenAICompatibleChatSettings, OpenAICompatibleCompletionSettings, OpenAICompatibleEmbeddingSettings } from '@ai-sdk/openai-compatible';
@@ -15,6 +15,8 @@ type FireworksEmbeddingModelId = 'nomic-ai/nomic-embed-text-v1.5' | (string & {}
15
15
  interface FireworksEmbeddingSettings extends OpenAICompatibleEmbeddingSettings {
16
16
  }
17
17
 
18
+ type FireworksImageModelId = 'accounts/fireworks/models/flux-1-dev-fp8' | 'accounts/fireworks/models/flux-1-schnell-fp8' | 'accounts/fireworks/models/playground-v2-5-1024px-aesthetic' | 'accounts/fireworks/models/japanese-stable-diffusion-xl' | 'accounts/fireworks/models/playground-v2-1024px-aesthetic' | 'accounts/fireworks/models/SSD-1B' | 'accounts/fireworks/models/stable-diffusion-xl-1024-v1-0' | (string & {});
19
+
18
20
  type FireworksErrorData = z.infer<typeof fireworksErrorSchema>;
19
21
  declare const fireworksErrorSchema: z.ZodObject<{
20
22
  error: z.ZodString;
@@ -25,7 +27,8 @@ declare const fireworksErrorSchema: z.ZodObject<{
25
27
  }>;
26
28
  interface FireworksProviderSettings {
27
29
  /**
28
- Fireworks API key.
30
+ Fireworks API key. Default value is taken from the `FIREWORKS_API_KEY`
31
+ environment variable.
29
32
  */
30
33
  apiKey?: string;
31
34
  /**
@@ -59,6 +62,10 @@ interface FireworksProvider {
59
62
  Creates a text embedding model for text generation.
60
63
  */
61
64
  textEmbeddingModel(modelId: FireworksEmbeddingModelId, settings?: FireworksEmbeddingSettings): EmbeddingModelV1<string>;
65
+ /**
66
+ Creates a model for image generation.
67
+ */
68
+ image(modelId: FireworksImageModelId): ImageModelV1;
62
69
  }
63
70
  declare function createFireworks(options?: FireworksProviderSettings): FireworksProvider;
64
71
  declare const fireworks: FireworksProvider;
package/dist/index.js CHANGED
@@ -27,8 +27,172 @@ module.exports = __toCommonJS(src_exports);
27
27
 
28
28
  // src/fireworks-provider.ts
29
29
  var import_openai_compatible = require("@ai-sdk/openai-compatible");
30
- var import_provider_utils = require("@ai-sdk/provider-utils");
30
+ var import_provider_utils2 = require("@ai-sdk/provider-utils");
31
31
  var import_zod = require("zod");
32
+
33
+ // src/fireworks-image-model.ts
34
+ var import_provider = require("@ai-sdk/provider");
35
+ var import_provider_utils = require("@ai-sdk/provider-utils");
36
+ var modelToBackendConfig = {
37
+ "accounts/fireworks/models/flux-1-dev-fp8": {
38
+ urlFormat: "workflows"
39
+ },
40
+ "accounts/fireworks/models/flux-1-schnell-fp8": {
41
+ urlFormat: "workflows"
42
+ },
43
+ "accounts/fireworks/models/playground-v2-5-1024px-aesthetic": {
44
+ urlFormat: "image_generation",
45
+ supportsSize: true
46
+ },
47
+ "accounts/fireworks/models/japanese-stable-diffusion-xl": {
48
+ urlFormat: "image_generation",
49
+ supportsSize: true
50
+ },
51
+ "accounts/fireworks/models/playground-v2-1024px-aesthetic": {
52
+ urlFormat: "image_generation",
53
+ supportsSize: true
54
+ },
55
+ "accounts/fireworks/models/stable-diffusion-xl-1024-v1-0": {
56
+ urlFormat: "image_generation",
57
+ supportsSize: true
58
+ },
59
+ "accounts/fireworks/models/SSD-1B": {
60
+ urlFormat: "image_generation",
61
+ supportsSize: true
62
+ }
63
+ };
64
+ function getUrlForModel(baseUrl, modelId) {
65
+ var _a;
66
+ switch ((_a = modelToBackendConfig[modelId]) == null ? void 0 : _a.urlFormat) {
67
+ case "image_generation":
68
+ return `${baseUrl}/image_generation/${modelId}`;
69
+ case "workflows":
70
+ default:
71
+ return `${baseUrl}/workflows/${modelId}/text_to_image`;
72
+ }
73
+ }
74
+ var createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {
75
+ const responseHeaders = (0, import_provider_utils.extractResponseHeaders)(response);
76
+ if (!response.body) {
77
+ throw new import_provider.APICallError({
78
+ message: "Response body is empty",
79
+ url,
80
+ requestBodyValues,
81
+ statusCode: response.status,
82
+ responseHeaders,
83
+ responseBody: void 0
84
+ });
85
+ }
86
+ try {
87
+ const buffer = await response.arrayBuffer();
88
+ return {
89
+ responseHeaders,
90
+ value: buffer
91
+ };
92
+ } catch (error) {
93
+ throw new import_provider.APICallError({
94
+ message: "Failed to read response as array buffer",
95
+ url,
96
+ requestBodyValues,
97
+ statusCode: response.status,
98
+ responseHeaders,
99
+ responseBody: void 0,
100
+ cause: error
101
+ });
102
+ }
103
+ };
104
+ var statusCodeErrorResponseHandler = async ({
105
+ response,
106
+ url,
107
+ requestBodyValues
108
+ }) => {
109
+ const responseHeaders = (0, import_provider_utils.extractResponseHeaders)(response);
110
+ const responseBody = await response.text();
111
+ return {
112
+ responseHeaders,
113
+ value: new import_provider.APICallError({
114
+ message: response.statusText,
115
+ url,
116
+ requestBodyValues,
117
+ statusCode: response.status,
118
+ responseHeaders,
119
+ responseBody
120
+ })
121
+ };
122
+ };
123
+ async function postImageToApi(params) {
124
+ var _a, _b;
125
+ const splitSize = (_a = params.size) == null ? void 0 : _a.split("x");
126
+ const { value: response } = await (0, import_provider_utils.postJsonToApi)({
127
+ url: getUrlForModel(params.baseUrl, params.modelId),
128
+ headers: params.headers,
129
+ body: {
130
+ prompt: params.prompt,
131
+ aspect_ratio: params.aspectRatio,
132
+ seed: params.seed,
133
+ ...splitSize && { width: splitSize[0], height: splitSize[1] },
134
+ ...(_b = params.providerOptions.fireworks) != null ? _b : {}
135
+ },
136
+ failedResponseHandler: statusCodeErrorResponseHandler,
137
+ successfulResponseHandler: createBinaryResponseHandler(),
138
+ abortSignal: params.abortSignal,
139
+ fetch: params.fetch
140
+ });
141
+ return response;
142
+ }
143
+ var FireworksImageModel = class {
144
+ constructor(modelId, config) {
145
+ this.modelId = modelId;
146
+ this.config = config;
147
+ this.specificationVersion = "v1";
148
+ this.maxImagesPerCall = 1;
149
+ }
150
+ get provider() {
151
+ return this.config.provider;
152
+ }
153
+ async doGenerate({
154
+ prompt,
155
+ n,
156
+ size,
157
+ aspectRatio,
158
+ seed,
159
+ providerOptions,
160
+ headers,
161
+ abortSignal
162
+ }) {
163
+ const warnings = [];
164
+ const backendConfig = modelToBackendConfig[this.modelId];
165
+ if (!(backendConfig == null ? void 0 : backendConfig.supportsSize) && size != null) {
166
+ warnings.push({
167
+ type: "unsupported-setting",
168
+ setting: "size",
169
+ details: "This model does not support the `size` option. Use `aspectRatio` instead."
170
+ });
171
+ }
172
+ if ((backendConfig == null ? void 0 : backendConfig.supportsSize) && aspectRatio != null) {
173
+ warnings.push({
174
+ type: "unsupported-setting",
175
+ setting: "aspectRatio",
176
+ details: "This model does not support the `aspectRatio` option."
177
+ });
178
+ }
179
+ const response = await postImageToApi({
180
+ baseUrl: this.config.baseURL,
181
+ prompt,
182
+ aspectRatio,
183
+ size,
184
+ seed,
185
+ modelId: this.modelId,
186
+ providerOptions,
187
+ headers: (0, import_provider_utils.combineHeaders)(this.config.headers(), headers),
188
+ abortSignal,
189
+ fetch: this.config.fetch
190
+ });
191
+ return { images: [new Uint8Array(response)], warnings };
192
+ }
193
+ };
194
+
195
+ // src/fireworks-provider.ts
32
196
  var fireworksErrorSchema = import_zod.z.object({
33
197
  error: import_zod.z.string()
34
198
  });
@@ -36,13 +200,12 @@ var fireworksErrorStructure = {
36
200
  errorSchema: fireworksErrorSchema,
37
201
  errorToMessage: (data) => data.error
38
202
  };
203
+ var defaultBaseURL = "https://api.fireworks.ai/inference/v1";
39
204
  function createFireworks(options = {}) {
40
205
  var _a;
41
- const baseURL = (0, import_provider_utils.withoutTrailingSlash)(
42
- (_a = options.baseURL) != null ? _a : "https://api.fireworks.ai/inference/v1"
43
- );
206
+ const baseURL = (0, import_provider_utils2.withoutTrailingSlash)((_a = options.baseURL) != null ? _a : defaultBaseURL);
44
207
  const getHeaders = () => ({
45
- Authorization: `Bearer ${(0, import_provider_utils.loadApiKey)({
208
+ Authorization: `Bearer ${(0, import_provider_utils2.loadApiKey)({
46
209
  apiKey: options.apiKey,
47
210
  environmentVariableName: "FIREWORKS_API_KEY",
48
211
  description: "Fireworks API key"
@@ -53,29 +216,32 @@ function createFireworks(options = {}) {
53
216
  provider: `fireworks.${modelType}`,
54
217
  url: ({ path }) => `${baseURL}${path}`,
55
218
  headers: getHeaders,
56
- fetch: options.fetch,
57
- errorStructure: fireworksErrorStructure
219
+ fetch: options.fetch
58
220
  });
59
221
  const createChatModel = (modelId, settings = {}) => {
60
222
  return new import_openai_compatible.OpenAICompatibleChatLanguageModel(modelId, settings, {
61
223
  ...getCommonModelConfig("chat"),
224
+ errorStructure: fireworksErrorStructure,
62
225
  defaultObjectGenerationMode: "json"
63
226
  });
64
227
  };
65
- const createCompletionModel = (modelId, settings = {}) => new import_openai_compatible.OpenAICompatibleCompletionLanguageModel(
66
- modelId,
67
- settings,
68
- getCommonModelConfig("completion")
69
- );
70
- const createTextEmbeddingModel = (modelId, settings = {}) => new import_openai_compatible.OpenAICompatibleEmbeddingModel(
71
- modelId,
72
- settings,
73
- getCommonModelConfig("embedding")
74
- );
228
+ const createCompletionModel = (modelId, settings = {}) => new import_openai_compatible.OpenAICompatibleCompletionLanguageModel(modelId, settings, {
229
+ ...getCommonModelConfig("completion"),
230
+ errorStructure: fireworksErrorStructure
231
+ });
232
+ const createTextEmbeddingModel = (modelId, settings = {}) => new import_openai_compatible.OpenAICompatibleEmbeddingModel(modelId, settings, {
233
+ ...getCommonModelConfig("embedding"),
234
+ errorStructure: fireworksErrorStructure
235
+ });
236
+ const createImageModel = (modelId) => new FireworksImageModel(modelId, {
237
+ ...getCommonModelConfig("image"),
238
+ baseURL: baseURL != null ? baseURL : defaultBaseURL
239
+ });
75
240
  const provider = (modelId, settings) => createChatModel(modelId, settings);
76
241
  provider.completionModel = createCompletionModel;
77
242
  provider.chatModel = createChatModel;
78
243
  provider.textEmbeddingModel = createTextEmbeddingModel;
244
+ provider.image = createImageModel;
79
245
  return provider;
80
246
  }
81
247
  var fireworks = createFireworks();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/fireworks-provider.ts"],"sourcesContent":["export { createFireworks, fireworks } from './fireworks-provider';\nexport type {\n FireworksProvider,\n FireworksProviderSettings,\n FireworksErrorData,\n} from './fireworks-provider';\n","import {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport { EmbeddingModelV1, LanguageModelV1 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport {\n FireworksChatModelId,\n FireworksChatSettings,\n} from './fireworks-chat-settings';\nimport {\n FireworksCompletionModelId,\n FireworksCompletionSettings,\n} from './fireworks-completion-settings';\nimport {\n FireworksEmbeddingModelId,\n FireworksEmbeddingSettings,\n} from './fireworks-embedding-settings';\n\nexport type FireworksErrorData = z.infer<typeof fireworksErrorSchema>;\n\nconst fireworksErrorSchema = z.object({\n error: z.string(),\n});\n\nconst fireworksErrorStructure: ProviderErrorStructure<FireworksErrorData> = {\n errorSchema: fireworksErrorSchema,\n errorToMessage: data => data.error,\n};\n\nexport interface FireworksProviderSettings {\n /**\nFireworks API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface FireworksProvider {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(\n modelId: FireworksCompletionModelId,\n settings?: FireworksCompletionSettings,\n ): LanguageModelV1;\n\n /**\nCreates a text embedding model for text generation.\n*/\n textEmbeddingModel(\n modelId: FireworksEmbeddingModelId,\n settings?: FireworksEmbeddingSettings,\n ): EmbeddingModelV1<string>;\n}\n\nexport function createFireworks(\n options: FireworksProviderSettings = {},\n): FireworksProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.fireworks.ai/inference/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'FIREWORKS_API_KEY',\n description: 'Fireworks API key',\n })}`,\n ...options.headers,\n });\n\n interface CommonModelConfig {\n provider: `fireworks.${string}`;\n url: ({ path }: { path: string }) => string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n errorStructure?: ProviderErrorStructure<FireworksErrorData>;\n }\n\n const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n provider: `fireworks.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: fireworksErrorStructure,\n });\n\n const createChatModel = (\n modelId: FireworksChatModelId,\n settings: FireworksChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n ...getCommonModelConfig('chat'),\n defaultObjectGenerationMode: 'json',\n });\n };\n\n const createCompletionModel = (\n modelId: FireworksCompletionModelId,\n settings: FireworksCompletionSettings = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(\n modelId,\n settings,\n getCommonModelConfig('completion'),\n );\n\n const createTextEmbeddingModel = (\n modelId: FireworksEmbeddingModelId,\n settings: FireworksEmbeddingSettings = {},\n ) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n settings,\n getCommonModelConfig('embedding'),\n );\n\n const provider = (\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ) => createChatModel(modelId, settings);\n\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.textEmbeddingModel = createTextEmbeddingModel;\n\n return provider as FireworksProvider;\n}\n\nexport const fireworks = createFireworks();\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,+BAKO;AAEP,4BAIO;AACP,iBAAkB;AAgBlB,IAAM,uBAAuB,aAAE,OAAO;AAAA,EACpC,OAAO,aAAE,OAAO;AAClB,CAAC;AAED,IAAM,0BAAsE;AAAA,EAC1E,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B;AAwDO,SAAS,gBACd,UAAqC,CAAC,GACnB;AA7FrB;AA8FE,QAAM,cAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,cAAU,kCAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAUA,QAAM,uBAAuB,CAAC,eAA0C;AAAA,IACtE,UAAU,aAAa,SAAS;AAAA,IAChC,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf,gBAAgB;AAAA,EAClB;AAEA,QAAM,kBAAkB,CACtB,SACA,WAAkC,CAAC,MAChC;AACH,WAAO,IAAI,2DAAkC,SAAS,UAAU;AAAA,MAC9D,GAAG,qBAAqB,MAAM;AAAA,MAC9B,6BAA6B;AAAA,IAC/B,CAAC;AAAA,EACH;AAEA,QAAM,wBAAwB,CAC5B,SACA,WAAwC,CAAC,MAEzC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,qBAAqB,YAAY;AAAA,EACnC;AAEF,QAAM,2BAA2B,CAC/B,SACA,WAAuC,CAAC,MAExC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,qBAAqB,WAAW;AAAA,EAClC;AAEF,QAAM,WAAW,CACf,SACA,aACG,gBAAgB,SAAS,QAAQ;AAEtC,WAAS,kBAAkB;AAC3B,WAAS,YAAY;AACrB,WAAS,qBAAqB;AAE9B,SAAO;AACT;AAEO,IAAM,YAAY,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts","../src/fireworks-provider.ts","../src/fireworks-image-model.ts"],"sourcesContent":["export { createFireworks, fireworks } from './fireworks-provider';\nexport type {\n FireworksProvider,\n FireworksProviderSettings,\n FireworksErrorData,\n} from './fireworks-provider';\n","import {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n EmbeddingModelV1,\n ImageModelV1,\n LanguageModelV1,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport {\n FireworksChatModelId,\n FireworksChatSettings,\n} from './fireworks-chat-settings';\nimport {\n FireworksCompletionModelId,\n FireworksCompletionSettings,\n} from './fireworks-completion-settings';\nimport {\n FireworksEmbeddingModelId,\n FireworksEmbeddingSettings,\n} from './fireworks-embedding-settings';\nimport {\n FireworksImageModel,\n FireworksImageModelId,\n} from './fireworks-image-model';\n\nexport type FireworksErrorData = z.infer<typeof fireworksErrorSchema>;\n\nconst fireworksErrorSchema = z.object({\n error: z.string(),\n});\n\nconst fireworksErrorStructure: ProviderErrorStructure<FireworksErrorData> = {\n errorSchema: fireworksErrorSchema,\n errorToMessage: data => data.error,\n};\n\nexport interface FireworksProviderSettings {\n /**\nFireworks API key. Default value is taken from the `FIREWORKS_API_KEY`\nenvironment variable.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface FireworksProvider {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(\n modelId: FireworksCompletionModelId,\n settings?: FireworksCompletionSettings,\n ): LanguageModelV1;\n\n /**\nCreates a text embedding model for text generation.\n*/\n textEmbeddingModel(\n modelId: FireworksEmbeddingModelId,\n settings?: FireworksEmbeddingSettings,\n ): EmbeddingModelV1<string>;\n\n /**\nCreates a model for image generation.\n*/\n image(modelId: FireworksImageModelId): ImageModelV1;\n}\n\nconst defaultBaseURL = 'https://api.fireworks.ai/inference/v1';\n\nexport function createFireworks(\n options: FireworksProviderSettings = {},\n): FireworksProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'FIREWORKS_API_KEY',\n description: 'Fireworks API key',\n })}`,\n ...options.headers,\n });\n\n interface CommonModelConfig {\n provider: string;\n url: ({ path }: { path: string }) => string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n }\n\n const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n provider: `fireworks.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createChatModel = (\n modelId: FireworksChatModelId,\n settings: FireworksChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n ...getCommonModelConfig('chat'),\n errorStructure: fireworksErrorStructure,\n defaultObjectGenerationMode: 'json',\n });\n };\n\n const createCompletionModel = (\n modelId: FireworksCompletionModelId,\n settings: FireworksCompletionSettings = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(modelId, settings, {\n ...getCommonModelConfig('completion'),\n errorStructure: fireworksErrorStructure,\n });\n\n const createTextEmbeddingModel = (\n modelId: FireworksEmbeddingModelId,\n settings: FireworksEmbeddingSettings = {},\n ) =>\n new OpenAICompatibleEmbeddingModel(modelId, settings, {\n ...getCommonModelConfig('embedding'),\n errorStructure: fireworksErrorStructure,\n });\n\n const createImageModel = (modelId: FireworksImageModelId) =>\n new FireworksImageModel(modelId, {\n ...getCommonModelConfig('image'),\n baseURL: baseURL ?? defaultBaseURL,\n });\n\n const provider = (\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ) => createChatModel(modelId, settings);\n\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.textEmbeddingModel = createTextEmbeddingModel;\n provider.image = createImageModel;\n\n return provider as FireworksProvider;\n}\n\nexport const fireworks = createFireworks();\n","import {\n APICallError,\n ImageModelV1,\n ImageModelV1CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n extractResponseHeaders,\n FetchFunction,\n postJsonToApi,\n ResponseHandler,\n} from '@ai-sdk/provider-utils';\n\n// https://fireworks.ai/models?type=image\nexport type FireworksImageModelId =\n | 'accounts/fireworks/models/flux-1-dev-fp8'\n | 'accounts/fireworks/models/flux-1-schnell-fp8'\n | 'accounts/fireworks/models/playground-v2-5-1024px-aesthetic'\n | 'accounts/fireworks/models/japanese-stable-diffusion-xl'\n | 'accounts/fireworks/models/playground-v2-1024px-aesthetic'\n | 'accounts/fireworks/models/SSD-1B'\n | 'accounts/fireworks/models/stable-diffusion-xl-1024-v1-0'\n | (string & {});\n\ninterface FireworksImageModelBackendConfig {\n urlFormat: 'workflows' | 'image_generation';\n supportsSize?: boolean;\n}\n\nconst modelToBackendConfig: Partial<\n Record<FireworksImageModelId, FireworksImageModelBackendConfig>\n> = {\n 'accounts/fireworks/models/flux-1-dev-fp8': {\n urlFormat: 'workflows',\n },\n 'accounts/fireworks/models/flux-1-schnell-fp8': {\n urlFormat: 'workflows',\n },\n 'accounts/fireworks/models/playground-v2-5-1024px-aesthetic': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n 'accounts/fireworks/models/japanese-stable-diffusion-xl': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n 'accounts/fireworks/models/playground-v2-1024px-aesthetic': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n 'accounts/fireworks/models/stable-diffusion-xl-1024-v1-0': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n 'accounts/fireworks/models/SSD-1B': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n};\n\nfunction getUrlForModel(\n baseUrl: string,\n modelId: FireworksImageModelId,\n): string {\n switch (modelToBackendConfig[modelId]?.urlFormat) {\n case 'image_generation':\n return `${baseUrl}/image_generation/${modelId}`;\n case 'workflows':\n default:\n return `${baseUrl}/workflows/${modelId}/text_to_image`;\n }\n}\n\ninterface FireworksImageModelConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n}\n\nconst createBinaryResponseHandler =\n (): ResponseHandler<ArrayBuffer> =>\n async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.body) {\n throw new APICallError({\n message: 'Response body is empty',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n });\n }\n\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: buffer,\n };\n } catch (error) {\n throw new APICallError({\n message: 'Failed to read response as array buffer',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n cause: error,\n });\n }\n };\n\nconst statusCodeErrorResponseHandler: ResponseHandler<APICallError> = async ({\n response,\n url,\n requestBodyValues,\n}) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await response.text();\n\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues: requestBodyValues as Record<string, unknown>,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n }),\n };\n};\n\ninterface ImageRequestParams {\n baseUrl: string;\n modelId: FireworksImageModelId;\n prompt: string;\n aspectRatio?: string;\n size?: string;\n seed?: number;\n providerOptions: Record<string, unknown>;\n headers: Record<string, string | undefined>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}\n\nasync function postImageToApi(\n params: ImageRequestParams,\n): Promise<ArrayBuffer> {\n const splitSize = params.size?.split('x');\n const { value: response } = await postJsonToApi({\n url: getUrlForModel(params.baseUrl, params.modelId),\n headers: params.headers,\n body: {\n prompt: params.prompt,\n aspect_ratio: params.aspectRatio,\n seed: params.seed,\n ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n ...(params.providerOptions.fireworks ?? {}),\n },\n failedResponseHandler: statusCodeErrorResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: params.abortSignal,\n fetch: params.fetch,\n });\n\n return response;\n}\n\nexport class FireworksImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly maxImagesPerCall = 1;\n\n constructor(\n readonly modelId: FireworksImageModelId,\n private config: FireworksImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV1['doGenerate']>>\n > {\n const warnings: Array<ImageModelV1CallWarning> = [];\n\n const backendConfig = modelToBackendConfig[this.modelId];\n if (!backendConfig?.supportsSize && size != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'size',\n details:\n 'This model does not support the `size` option. Use `aspectRatio` instead.',\n });\n }\n\n // Use supportsSize as a proxy for whether the model does not support\n // aspectRatio. This invariant holds for the current set of models.\n if (backendConfig?.supportsSize && aspectRatio != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'aspectRatio',\n details: 'This model does not support the `aspectRatio` option.',\n });\n }\n\n const response = await postImageToApi({\n baseUrl: this.config.baseURL,\n prompt,\n aspectRatio,\n size,\n seed,\n modelId: this.modelId,\n providerOptions,\n headers: combineHeaders(this.config.headers(), headers),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return { images: [new Uint8Array(response)], warnings };\n }\n}\n"],"mappings":"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","names":["import_provider_utils"]}
package/dist/index.mjs CHANGED
@@ -9,6 +9,176 @@ import {
9
9
  withoutTrailingSlash
10
10
  } from "@ai-sdk/provider-utils";
11
11
  import { z } from "zod";
12
+
13
+ // src/fireworks-image-model.ts
14
+ import {
15
+ APICallError
16
+ } from "@ai-sdk/provider";
17
+ import {
18
+ combineHeaders,
19
+ extractResponseHeaders,
20
+ postJsonToApi
21
+ } from "@ai-sdk/provider-utils";
22
+ var modelToBackendConfig = {
23
+ "accounts/fireworks/models/flux-1-dev-fp8": {
24
+ urlFormat: "workflows"
25
+ },
26
+ "accounts/fireworks/models/flux-1-schnell-fp8": {
27
+ urlFormat: "workflows"
28
+ },
29
+ "accounts/fireworks/models/playground-v2-5-1024px-aesthetic": {
30
+ urlFormat: "image_generation",
31
+ supportsSize: true
32
+ },
33
+ "accounts/fireworks/models/japanese-stable-diffusion-xl": {
34
+ urlFormat: "image_generation",
35
+ supportsSize: true
36
+ },
37
+ "accounts/fireworks/models/playground-v2-1024px-aesthetic": {
38
+ urlFormat: "image_generation",
39
+ supportsSize: true
40
+ },
41
+ "accounts/fireworks/models/stable-diffusion-xl-1024-v1-0": {
42
+ urlFormat: "image_generation",
43
+ supportsSize: true
44
+ },
45
+ "accounts/fireworks/models/SSD-1B": {
46
+ urlFormat: "image_generation",
47
+ supportsSize: true
48
+ }
49
+ };
50
+ function getUrlForModel(baseUrl, modelId) {
51
+ var _a;
52
+ switch ((_a = modelToBackendConfig[modelId]) == null ? void 0 : _a.urlFormat) {
53
+ case "image_generation":
54
+ return `${baseUrl}/image_generation/${modelId}`;
55
+ case "workflows":
56
+ default:
57
+ return `${baseUrl}/workflows/${modelId}/text_to_image`;
58
+ }
59
+ }
60
+ var createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {
61
+ const responseHeaders = extractResponseHeaders(response);
62
+ if (!response.body) {
63
+ throw new APICallError({
64
+ message: "Response body is empty",
65
+ url,
66
+ requestBodyValues,
67
+ statusCode: response.status,
68
+ responseHeaders,
69
+ responseBody: void 0
70
+ });
71
+ }
72
+ try {
73
+ const buffer = await response.arrayBuffer();
74
+ return {
75
+ responseHeaders,
76
+ value: buffer
77
+ };
78
+ } catch (error) {
79
+ throw new APICallError({
80
+ message: "Failed to read response as array buffer",
81
+ url,
82
+ requestBodyValues,
83
+ statusCode: response.status,
84
+ responseHeaders,
85
+ responseBody: void 0,
86
+ cause: error
87
+ });
88
+ }
89
+ };
90
+ var statusCodeErrorResponseHandler = async ({
91
+ response,
92
+ url,
93
+ requestBodyValues
94
+ }) => {
95
+ const responseHeaders = extractResponseHeaders(response);
96
+ const responseBody = await response.text();
97
+ return {
98
+ responseHeaders,
99
+ value: new APICallError({
100
+ message: response.statusText,
101
+ url,
102
+ requestBodyValues,
103
+ statusCode: response.status,
104
+ responseHeaders,
105
+ responseBody
106
+ })
107
+ };
108
+ };
109
+ async function postImageToApi(params) {
110
+ var _a, _b;
111
+ const splitSize = (_a = params.size) == null ? void 0 : _a.split("x");
112
+ const { value: response } = await postJsonToApi({
113
+ url: getUrlForModel(params.baseUrl, params.modelId),
114
+ headers: params.headers,
115
+ body: {
116
+ prompt: params.prompt,
117
+ aspect_ratio: params.aspectRatio,
118
+ seed: params.seed,
119
+ ...splitSize && { width: splitSize[0], height: splitSize[1] },
120
+ ...(_b = params.providerOptions.fireworks) != null ? _b : {}
121
+ },
122
+ failedResponseHandler: statusCodeErrorResponseHandler,
123
+ successfulResponseHandler: createBinaryResponseHandler(),
124
+ abortSignal: params.abortSignal,
125
+ fetch: params.fetch
126
+ });
127
+ return response;
128
+ }
129
+ var FireworksImageModel = class {
130
+ constructor(modelId, config) {
131
+ this.modelId = modelId;
132
+ this.config = config;
133
+ this.specificationVersion = "v1";
134
+ this.maxImagesPerCall = 1;
135
+ }
136
+ get provider() {
137
+ return this.config.provider;
138
+ }
139
+ async doGenerate({
140
+ prompt,
141
+ n,
142
+ size,
143
+ aspectRatio,
144
+ seed,
145
+ providerOptions,
146
+ headers,
147
+ abortSignal
148
+ }) {
149
+ const warnings = [];
150
+ const backendConfig = modelToBackendConfig[this.modelId];
151
+ if (!(backendConfig == null ? void 0 : backendConfig.supportsSize) && size != null) {
152
+ warnings.push({
153
+ type: "unsupported-setting",
154
+ setting: "size",
155
+ details: "This model does not support the `size` option. Use `aspectRatio` instead."
156
+ });
157
+ }
158
+ if ((backendConfig == null ? void 0 : backendConfig.supportsSize) && aspectRatio != null) {
159
+ warnings.push({
160
+ type: "unsupported-setting",
161
+ setting: "aspectRatio",
162
+ details: "This model does not support the `aspectRatio` option."
163
+ });
164
+ }
165
+ const response = await postImageToApi({
166
+ baseUrl: this.config.baseURL,
167
+ prompt,
168
+ aspectRatio,
169
+ size,
170
+ seed,
171
+ modelId: this.modelId,
172
+ providerOptions,
173
+ headers: combineHeaders(this.config.headers(), headers),
174
+ abortSignal,
175
+ fetch: this.config.fetch
176
+ });
177
+ return { images: [new Uint8Array(response)], warnings };
178
+ }
179
+ };
180
+
181
+ // src/fireworks-provider.ts
12
182
  var fireworksErrorSchema = z.object({
13
183
  error: z.string()
14
184
  });
@@ -16,11 +186,10 @@ var fireworksErrorStructure = {
16
186
  errorSchema: fireworksErrorSchema,
17
187
  errorToMessage: (data) => data.error
18
188
  };
189
+ var defaultBaseURL = "https://api.fireworks.ai/inference/v1";
19
190
  function createFireworks(options = {}) {
20
191
  var _a;
21
- const baseURL = withoutTrailingSlash(
22
- (_a = options.baseURL) != null ? _a : "https://api.fireworks.ai/inference/v1"
23
- );
192
+ const baseURL = withoutTrailingSlash((_a = options.baseURL) != null ? _a : defaultBaseURL);
24
193
  const getHeaders = () => ({
25
194
  Authorization: `Bearer ${loadApiKey({
26
195
  apiKey: options.apiKey,
@@ -33,29 +202,32 @@ function createFireworks(options = {}) {
33
202
  provider: `fireworks.${modelType}`,
34
203
  url: ({ path }) => `${baseURL}${path}`,
35
204
  headers: getHeaders,
36
- fetch: options.fetch,
37
- errorStructure: fireworksErrorStructure
205
+ fetch: options.fetch
38
206
  });
39
207
  const createChatModel = (modelId, settings = {}) => {
40
208
  return new OpenAICompatibleChatLanguageModel(modelId, settings, {
41
209
  ...getCommonModelConfig("chat"),
210
+ errorStructure: fireworksErrorStructure,
42
211
  defaultObjectGenerationMode: "json"
43
212
  });
44
213
  };
45
- const createCompletionModel = (modelId, settings = {}) => new OpenAICompatibleCompletionLanguageModel(
46
- modelId,
47
- settings,
48
- getCommonModelConfig("completion")
49
- );
50
- const createTextEmbeddingModel = (modelId, settings = {}) => new OpenAICompatibleEmbeddingModel(
51
- modelId,
52
- settings,
53
- getCommonModelConfig("embedding")
54
- );
214
+ const createCompletionModel = (modelId, settings = {}) => new OpenAICompatibleCompletionLanguageModel(modelId, settings, {
215
+ ...getCommonModelConfig("completion"),
216
+ errorStructure: fireworksErrorStructure
217
+ });
218
+ const createTextEmbeddingModel = (modelId, settings = {}) => new OpenAICompatibleEmbeddingModel(modelId, settings, {
219
+ ...getCommonModelConfig("embedding"),
220
+ errorStructure: fireworksErrorStructure
221
+ });
222
+ const createImageModel = (modelId) => new FireworksImageModel(modelId, {
223
+ ...getCommonModelConfig("image"),
224
+ baseURL: baseURL != null ? baseURL : defaultBaseURL
225
+ });
55
226
  const provider = (modelId, settings) => createChatModel(modelId, settings);
56
227
  provider.completionModel = createCompletionModel;
57
228
  provider.chatModel = createChatModel;
58
229
  provider.textEmbeddingModel = createTextEmbeddingModel;
230
+ provider.image = createImageModel;
59
231
  return provider;
60
232
  }
61
233
  var fireworks = createFireworks();
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/fireworks-provider.ts"],"sourcesContent":["import {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport { EmbeddingModelV1, LanguageModelV1 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport {\n FireworksChatModelId,\n FireworksChatSettings,\n} from './fireworks-chat-settings';\nimport {\n FireworksCompletionModelId,\n FireworksCompletionSettings,\n} from './fireworks-completion-settings';\nimport {\n FireworksEmbeddingModelId,\n FireworksEmbeddingSettings,\n} from './fireworks-embedding-settings';\n\nexport type FireworksErrorData = z.infer<typeof fireworksErrorSchema>;\n\nconst fireworksErrorSchema = z.object({\n error: z.string(),\n});\n\nconst fireworksErrorStructure: ProviderErrorStructure<FireworksErrorData> = {\n errorSchema: fireworksErrorSchema,\n errorToMessage: data => data.error,\n};\n\nexport interface FireworksProviderSettings {\n /**\nFireworks API key.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface FireworksProvider {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(\n modelId: FireworksCompletionModelId,\n settings?: FireworksCompletionSettings,\n ): LanguageModelV1;\n\n /**\nCreates a text embedding model for text generation.\n*/\n textEmbeddingModel(\n modelId: FireworksEmbeddingModelId,\n settings?: FireworksEmbeddingSettings,\n ): EmbeddingModelV1<string>;\n}\n\nexport function createFireworks(\n options: FireworksProviderSettings = {},\n): FireworksProvider {\n const baseURL = withoutTrailingSlash(\n options.baseURL ?? 'https://api.fireworks.ai/inference/v1',\n );\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'FIREWORKS_API_KEY',\n description: 'Fireworks API key',\n })}`,\n ...options.headers,\n });\n\n interface CommonModelConfig {\n provider: `fireworks.${string}`;\n url: ({ path }: { path: string }) => string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n errorStructure?: ProviderErrorStructure<FireworksErrorData>;\n }\n\n const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n provider: `fireworks.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n errorStructure: fireworksErrorStructure,\n });\n\n const createChatModel = (\n modelId: FireworksChatModelId,\n settings: FireworksChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n ...getCommonModelConfig('chat'),\n defaultObjectGenerationMode: 'json',\n });\n };\n\n const createCompletionModel = (\n modelId: FireworksCompletionModelId,\n settings: FireworksCompletionSettings = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(\n modelId,\n settings,\n getCommonModelConfig('completion'),\n );\n\n const createTextEmbeddingModel = (\n modelId: FireworksEmbeddingModelId,\n settings: FireworksEmbeddingSettings = {},\n ) =>\n new OpenAICompatibleEmbeddingModel(\n modelId,\n settings,\n getCommonModelConfig('embedding'),\n );\n\n const provider = (\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ) => createChatModel(modelId, settings);\n\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.textEmbeddingModel = createTextEmbeddingModel;\n\n return provider as FireworksProvider;\n}\n\nexport const fireworks = createFireworks();\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAEP;AAAA,EAEE;AAAA,EACA;AAAA,OACK;AACP,SAAS,SAAS;AAgBlB,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,OAAO,EAAE,OAAO;AAClB,CAAC;AAED,IAAM,0BAAsE;AAAA,EAC1E,aAAa;AAAA,EACb,gBAAgB,UAAQ,KAAK;AAC/B;AAwDO,SAAS,gBACd,UAAqC,CAAC,GACnB;AA7FrB;AA8FE,QAAM,UAAU;AAAA,KACd,aAAQ,YAAR,YAAmB;AAAA,EACrB;AACA,QAAM,aAAa,OAAO;AAAA,IACxB,eAAe,UAAU,WAAW;AAAA,MAClC,QAAQ,QAAQ;AAAA,MAChB,yBAAyB;AAAA,MACzB,aAAa;AAAA,IACf,CAAC,CAAC;AAAA,IACF,GAAG,QAAQ;AAAA,EACb;AAUA,QAAM,uBAAuB,CAAC,eAA0C;AAAA,IACtE,UAAU,aAAa,SAAS;AAAA,IAChC,KAAK,CAAC,EAAE,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAAA,IACpC,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,IACf,gBAAgB;AAAA,EAClB;AAEA,QAAM,kBAAkB,CACtB,SACA,WAAkC,CAAC,MAChC;AACH,WAAO,IAAI,kCAAkC,SAAS,UAAU;AAAA,MAC9D,GAAG,qBAAqB,MAAM;AAAA,MAC9B,6BAA6B;AAAA,IAC/B,CAAC;AAAA,EACH;AAEA,QAAM,wBAAwB,CAC5B,SACA,WAAwC,CAAC,MAEzC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,qBAAqB,YAAY;AAAA,EACnC;AAEF,QAAM,2BAA2B,CAC/B,SACA,WAAuC,CAAC,MAExC,IAAI;AAAA,IACF;AAAA,IACA;AAAA,IACA,qBAAqB,WAAW;AAAA,EAClC;AAEF,QAAM,WAAW,CACf,SACA,aACG,gBAAgB,SAAS,QAAQ;AAEtC,WAAS,kBAAkB;AAC3B,WAAS,YAAY;AACrB,WAAS,qBAAqB;AAE9B,SAAO;AACT;AAEO,IAAM,YAAY,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../src/fireworks-provider.ts","../src/fireworks-image-model.ts"],"sourcesContent":["import {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n EmbeddingModelV1,\n ImageModelV1,\n LanguageModelV1,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport {\n FireworksChatModelId,\n FireworksChatSettings,\n} from './fireworks-chat-settings';\nimport {\n FireworksCompletionModelId,\n FireworksCompletionSettings,\n} from './fireworks-completion-settings';\nimport {\n FireworksEmbeddingModelId,\n FireworksEmbeddingSettings,\n} from './fireworks-embedding-settings';\nimport {\n FireworksImageModel,\n FireworksImageModelId,\n} from './fireworks-image-model';\n\nexport type FireworksErrorData = z.infer<typeof fireworksErrorSchema>;\n\nconst fireworksErrorSchema = z.object({\n error: z.string(),\n});\n\nconst fireworksErrorStructure: ProviderErrorStructure<FireworksErrorData> = {\n errorSchema: fireworksErrorSchema,\n errorToMessage: data => data.error,\n};\n\nexport interface FireworksProviderSettings {\n /**\nFireworks API key. Default value is taken from the `FIREWORKS_API_KEY`\nenvironment variable.\n*/\n apiKey?: string;\n /**\nBase URL for the API calls.\n*/\n baseURL?: string;\n /**\nCustom headers to include in the requests.\n*/\n headers?: Record<string, string>;\n /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n*/\n fetch?: FetchFunction;\n}\n\nexport interface FireworksProvider {\n /**\nCreates a model for text generation.\n*/\n (\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ): LanguageModelV1;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(\n modelId: FireworksCompletionModelId,\n settings?: FireworksCompletionSettings,\n ): LanguageModelV1;\n\n /**\nCreates a text embedding model for text generation.\n*/\n textEmbeddingModel(\n modelId: FireworksEmbeddingModelId,\n settings?: FireworksEmbeddingSettings,\n ): EmbeddingModelV1<string>;\n\n /**\nCreates a model for image generation.\n*/\n image(modelId: FireworksImageModelId): ImageModelV1;\n}\n\nconst defaultBaseURL = 'https://api.fireworks.ai/inference/v1';\n\nexport function createFireworks(\n options: FireworksProviderSettings = {},\n): FireworksProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'FIREWORKS_API_KEY',\n description: 'Fireworks API key',\n })}`,\n ...options.headers,\n });\n\n interface CommonModelConfig {\n provider: string;\n url: ({ path }: { path: string }) => string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n }\n\n const getCommonModelConfig = (modelType: string): CommonModelConfig => ({\n provider: `fireworks.${modelType}`,\n url: ({ path }) => `${baseURL}${path}`,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createChatModel = (\n modelId: FireworksChatModelId,\n settings: FireworksChatSettings = {},\n ) => {\n return new OpenAICompatibleChatLanguageModel(modelId, settings, {\n ...getCommonModelConfig('chat'),\n errorStructure: fireworksErrorStructure,\n defaultObjectGenerationMode: 'json',\n });\n };\n\n const createCompletionModel = (\n modelId: FireworksCompletionModelId,\n settings: FireworksCompletionSettings = {},\n ) =>\n new OpenAICompatibleCompletionLanguageModel(modelId, settings, {\n ...getCommonModelConfig('completion'),\n errorStructure: fireworksErrorStructure,\n });\n\n const createTextEmbeddingModel = (\n modelId: FireworksEmbeddingModelId,\n settings: FireworksEmbeddingSettings = {},\n ) =>\n new OpenAICompatibleEmbeddingModel(modelId, settings, {\n ...getCommonModelConfig('embedding'),\n errorStructure: fireworksErrorStructure,\n });\n\n const createImageModel = (modelId: FireworksImageModelId) =>\n new FireworksImageModel(modelId, {\n ...getCommonModelConfig('image'),\n baseURL: baseURL ?? defaultBaseURL,\n });\n\n const provider = (\n modelId: FireworksChatModelId,\n settings?: FireworksChatSettings,\n ) => createChatModel(modelId, settings);\n\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.textEmbeddingModel = createTextEmbeddingModel;\n provider.image = createImageModel;\n\n return provider as FireworksProvider;\n}\n\nexport const fireworks = createFireworks();\n","import {\n APICallError,\n ImageModelV1,\n ImageModelV1CallWarning,\n} from '@ai-sdk/provider';\nimport {\n combineHeaders,\n extractResponseHeaders,\n FetchFunction,\n postJsonToApi,\n ResponseHandler,\n} from '@ai-sdk/provider-utils';\n\n// https://fireworks.ai/models?type=image\nexport type FireworksImageModelId =\n | 'accounts/fireworks/models/flux-1-dev-fp8'\n | 'accounts/fireworks/models/flux-1-schnell-fp8'\n | 'accounts/fireworks/models/playground-v2-5-1024px-aesthetic'\n | 'accounts/fireworks/models/japanese-stable-diffusion-xl'\n | 'accounts/fireworks/models/playground-v2-1024px-aesthetic'\n | 'accounts/fireworks/models/SSD-1B'\n | 'accounts/fireworks/models/stable-diffusion-xl-1024-v1-0'\n | (string & {});\n\ninterface FireworksImageModelBackendConfig {\n urlFormat: 'workflows' | 'image_generation';\n supportsSize?: boolean;\n}\n\nconst modelToBackendConfig: Partial<\n Record<FireworksImageModelId, FireworksImageModelBackendConfig>\n> = {\n 'accounts/fireworks/models/flux-1-dev-fp8': {\n urlFormat: 'workflows',\n },\n 'accounts/fireworks/models/flux-1-schnell-fp8': {\n urlFormat: 'workflows',\n },\n 'accounts/fireworks/models/playground-v2-5-1024px-aesthetic': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n 'accounts/fireworks/models/japanese-stable-diffusion-xl': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n 'accounts/fireworks/models/playground-v2-1024px-aesthetic': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n 'accounts/fireworks/models/stable-diffusion-xl-1024-v1-0': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n 'accounts/fireworks/models/SSD-1B': {\n urlFormat: 'image_generation',\n supportsSize: true,\n },\n};\n\nfunction getUrlForModel(\n baseUrl: string,\n modelId: FireworksImageModelId,\n): string {\n switch (modelToBackendConfig[modelId]?.urlFormat) {\n case 'image_generation':\n return `${baseUrl}/image_generation/${modelId}`;\n case 'workflows':\n default:\n return `${baseUrl}/workflows/${modelId}/text_to_image`;\n }\n}\n\ninterface FireworksImageModelConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n}\n\nconst createBinaryResponseHandler =\n (): ResponseHandler<ArrayBuffer> =>\n async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n\n if (!response.body) {\n throw new APICallError({\n message: 'Response body is empty',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n });\n }\n\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: buffer,\n };\n } catch (error) {\n throw new APICallError({\n message: 'Failed to read response as array buffer',\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: undefined,\n cause: error,\n });\n }\n };\n\nconst statusCodeErrorResponseHandler: ResponseHandler<APICallError> = async ({\n response,\n url,\n requestBodyValues,\n}) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await response.text();\n\n return {\n responseHeaders,\n value: new APICallError({\n message: response.statusText,\n url,\n requestBodyValues: requestBodyValues as Record<string, unknown>,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n }),\n };\n};\n\ninterface ImageRequestParams {\n baseUrl: string;\n modelId: FireworksImageModelId;\n prompt: string;\n aspectRatio?: string;\n size?: string;\n seed?: number;\n providerOptions: Record<string, unknown>;\n headers: Record<string, string | undefined>;\n abortSignal?: AbortSignal;\n fetch?: FetchFunction;\n}\n\nasync function postImageToApi(\n params: ImageRequestParams,\n): Promise<ArrayBuffer> {\n const splitSize = params.size?.split('x');\n const { value: response } = await postJsonToApi({\n url: getUrlForModel(params.baseUrl, params.modelId),\n headers: params.headers,\n body: {\n prompt: params.prompt,\n aspect_ratio: params.aspectRatio,\n seed: params.seed,\n ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n ...(params.providerOptions.fireworks ?? {}),\n },\n failedResponseHandler: statusCodeErrorResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal: params.abortSignal,\n fetch: params.fetch,\n });\n\n return response;\n}\n\nexport class FireworksImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n readonly maxImagesPerCall = 1;\n\n constructor(\n readonly modelId: FireworksImageModelId,\n private config: FireworksImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV1['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV1['doGenerate']>>\n > {\n const warnings: Array<ImageModelV1CallWarning> = [];\n\n const backendConfig = modelToBackendConfig[this.modelId];\n if (!backendConfig?.supportsSize && size != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'size',\n details:\n 'This model does not support the `size` option. Use `aspectRatio` instead.',\n });\n }\n\n // Use supportsSize as a proxy for whether the model does not support\n // aspectRatio. This invariant holds for the current set of models.\n if (backendConfig?.supportsSize && aspectRatio != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'aspectRatio',\n details: 'This model does not support the `aspectRatio` option.',\n });\n }\n\n const response = await postImageToApi({\n baseUrl: this.config.baseURL,\n prompt,\n aspectRatio,\n size,\n seed,\n modelId: this.modelId,\n providerOptions,\n headers: combineHeaders(this.config.headers(), headers),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return { images: [new Uint8Array(response)], warnings };\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/fireworks",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -19,9 +19,9 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@ai-sdk/openai-compatible": "0.0.13",
23
- "@ai-sdk/provider": "1.0.3",
24
- "@ai-sdk/provider-utils": "2.0.5"
22
+ "@ai-sdk/openai-compatible": "0.0.15",
23
+ "@ai-sdk/provider": "1.0.4",
24
+ "@ai-sdk/provider-utils": "2.0.7"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^18",