@ai-sdk/fireworks 0.1.3 → 0.1.4

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,14 @@
1
1
  # @ai-sdk/fireworks
2
2
 
3
+ ## 0.1.4
4
+
5
+ ### Patch Changes
6
+
7
+ - 39e5c1f: feat (provider-utils): add getFromApi and response handlers for binary responses and status-code errors
8
+ - Updated dependencies [39e5c1f]
9
+ - @ai-sdk/provider-utils@2.1.3
10
+ - @ai-sdk/openai-compatible@0.1.4
11
+
3
12
  ## 0.1.3
4
13
 
5
14
  ### Patch Changes
package/dist/index.js CHANGED
@@ -31,7 +31,6 @@ var import_provider_utils2 = require("@ai-sdk/provider-utils");
31
31
  var import_zod = require("zod");
32
32
 
33
33
  // src/fireworks-image-model.ts
34
- var import_provider = require("@ai-sdk/provider");
35
34
  var import_provider_utils = require("@ai-sdk/provider-utils");
36
35
  var modelToBackendConfig = {
37
36
  "accounts/fireworks/models/flux-1-dev-fp8": {
@@ -71,55 +70,6 @@ function getUrlForModel(baseUrl, modelId) {
71
70
  return `${baseUrl}/workflows/${modelId}/text_to_image`;
72
71
  }
73
72
  }
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
73
  var FireworksImageModel = class {
124
74
  constructor(modelId, settings, config) {
125
75
  this.modelId = modelId;
@@ -174,13 +124,13 @@ var FireworksImageModel = class {
174
124
  ...splitSize && { width: splitSize[0], height: splitSize[1] },
175
125
  ...(_d = providerOptions.fireworks) != null ? _d : {}
176
126
  },
177
- failedResponseHandler: statusCodeErrorResponseHandler,
178
- successfulResponseHandler: createBinaryResponseHandler(),
127
+ failedResponseHandler: (0, import_provider_utils.createStatusCodeErrorResponseHandler)(),
128
+ successfulResponseHandler: (0, import_provider_utils.createBinaryResponseHandler)(),
179
129
  abortSignal,
180
130
  fetch: this.config.fetch
181
131
  });
182
132
  return {
183
- images: [new Uint8Array(response)],
133
+ images: [response],
184
134
  warnings,
185
135
  response: {
186
136
  timestamp: currentDate,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
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 { FireworksImageModel } from './fireworks-image-model';\nimport {\n FireworksImageModelId,\n FireworksImageSettings,\n} from './fireworks-image-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. 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(\n modelId: FireworksImageModelId,\n settings?: FireworksImageSettings,\n ): 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 = (\n modelId: FireworksImageModelId,\n settings: FireworksImageSettings = {},\n ) =>\n new FireworksImageModel(modelId, settings, {\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';\nimport {\n FireworksImageModelId,\n FireworksImageSettings,\n} from './fireworks-image-settings';\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 _internal?: {\n currentDate?: () => Date;\n };\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\nexport class FireworksImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxImagesPerCall(): number {\n return this.settings.maxImagesPerCall ?? 1;\n }\n\n constructor(\n readonly modelId: FireworksImageModelId,\n readonly settings: FireworksImageSettings,\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 splitSize = size?.split('x');\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value: response, responseHeaders } = await postJsonToApi({\n url: getUrlForModel(this.config.baseURL, this.modelId),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n prompt,\n aspect_ratio: aspectRatio,\n seed,\n samples: n,\n ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n ...(providerOptions.fireworks ?? {}),\n },\n failedResponseHandler: statusCodeErrorResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: [new Uint8Array(response)],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n"],"mappings":"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","names":["import_provider_utils"]}
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 { FireworksImageModel } from './fireworks-image-model';\nimport {\n FireworksImageModelId,\n FireworksImageSettings,\n} from './fireworks-image-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. 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(\n modelId: FireworksImageModelId,\n settings?: FireworksImageSettings,\n ): 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 = (\n modelId: FireworksImageModelId,\n settings: FireworksImageSettings = {},\n ) =>\n new FireworksImageModel(modelId, settings, {\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 { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createStatusCodeErrorResponseHandler,\n FetchFunction,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport {\n FireworksImageModelId,\n FireworksImageSettings,\n} from './fireworks-image-settings';\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 _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FireworksImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxImagesPerCall(): number {\n return this.settings.maxImagesPerCall ?? 1;\n }\n\n constructor(\n readonly modelId: FireworksImageModelId,\n readonly settings: FireworksImageSettings,\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 splitSize = size?.split('x');\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value: response, responseHeaders } = await postJsonToApi({\n url: getUrlForModel(this.config.baseURL, this.modelId),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n prompt,\n aspect_ratio: aspectRatio,\n seed,\n samples: n,\n ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n ...(providerOptions.fireworks ?? {}),\n },\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: [response],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n"],"mappings":"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","names":["import_provider_utils"]}
package/dist/index.mjs CHANGED
@@ -11,12 +11,10 @@ import {
11
11
  import { z } from "zod";
12
12
 
13
13
  // src/fireworks-image-model.ts
14
- import {
15
- APICallError
16
- } from "@ai-sdk/provider";
17
14
  import {
18
15
  combineHeaders,
19
- extractResponseHeaders,
16
+ createBinaryResponseHandler,
17
+ createStatusCodeErrorResponseHandler,
20
18
  postJsonToApi
21
19
  } from "@ai-sdk/provider-utils";
22
20
  var modelToBackendConfig = {
@@ -57,55 +55,6 @@ function getUrlForModel(baseUrl, modelId) {
57
55
  return `${baseUrl}/workflows/${modelId}/text_to_image`;
58
56
  }
59
57
  }
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
58
  var FireworksImageModel = class {
110
59
  constructor(modelId, settings, config) {
111
60
  this.modelId = modelId;
@@ -160,13 +109,13 @@ var FireworksImageModel = class {
160
109
  ...splitSize && { width: splitSize[0], height: splitSize[1] },
161
110
  ...(_d = providerOptions.fireworks) != null ? _d : {}
162
111
  },
163
- failedResponseHandler: statusCodeErrorResponseHandler,
112
+ failedResponseHandler: createStatusCodeErrorResponseHandler(),
164
113
  successfulResponseHandler: createBinaryResponseHandler(),
165
114
  abortSignal,
166
115
  fetch: this.config.fetch
167
116
  });
168
117
  return {
169
- images: [new Uint8Array(response)],
118
+ images: [response],
170
119
  warnings,
171
120
  response: {
172
121
  timestamp: currentDate,
@@ -1 +1 @@
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 { FireworksImageModel } from './fireworks-image-model';\nimport {\n FireworksImageModelId,\n FireworksImageSettings,\n} from './fireworks-image-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. 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(\n modelId: FireworksImageModelId,\n settings?: FireworksImageSettings,\n ): 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 = (\n modelId: FireworksImageModelId,\n settings: FireworksImageSettings = {},\n ) =>\n new FireworksImageModel(modelId, settings, {\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';\nimport {\n FireworksImageModelId,\n FireworksImageSettings,\n} from './fireworks-image-settings';\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 _internal?: {\n currentDate?: () => Date;\n };\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\nexport class FireworksImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxImagesPerCall(): number {\n return this.settings.maxImagesPerCall ?? 1;\n }\n\n constructor(\n readonly modelId: FireworksImageModelId,\n readonly settings: FireworksImageSettings,\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 splitSize = size?.split('x');\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value: response, responseHeaders } = await postJsonToApi({\n url: getUrlForModel(this.config.baseURL, this.modelId),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n prompt,\n aspect_ratio: aspectRatio,\n seed,\n samples: n,\n ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n ...(providerOptions.fireworks ?? {}),\n },\n failedResponseHandler: statusCodeErrorResponseHandler,\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: [new Uint8Array(response)],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\n }\n}\n"],"mappings":"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","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 { FireworksImageModel } from './fireworks-image-model';\nimport {\n FireworksImageModelId,\n FireworksImageSettings,\n} from './fireworks-image-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. 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(\n modelId: FireworksImageModelId,\n settings?: FireworksImageSettings,\n ): 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 = (\n modelId: FireworksImageModelId,\n settings: FireworksImageSettings = {},\n ) =>\n new FireworksImageModel(modelId, settings, {\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 { ImageModelV1, ImageModelV1CallWarning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n createBinaryResponseHandler,\n createStatusCodeErrorResponseHandler,\n FetchFunction,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport {\n FireworksImageModelId,\n FireworksImageSettings,\n} from './fireworks-image-settings';\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 _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class FireworksImageModel implements ImageModelV1 {\n readonly specificationVersion = 'v1';\n\n get provider(): string {\n return this.config.provider;\n }\n\n get maxImagesPerCall(): number {\n return this.settings.maxImagesPerCall ?? 1;\n }\n\n constructor(\n readonly modelId: FireworksImageModelId,\n readonly settings: FireworksImageSettings,\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 splitSize = size?.split('x');\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const { value: response, responseHeaders } = await postJsonToApi({\n url: getUrlForModel(this.config.baseURL, this.modelId),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n prompt,\n aspect_ratio: aspectRatio,\n seed,\n samples: n,\n ...(splitSize && { width: splitSize[0], height: splitSize[1] }),\n ...(providerOptions.fireworks ?? {}),\n },\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n abortSignal,\n fetch: this.config.fetch,\n });\n\n return {\n images: [response],\n warnings,\n response: {\n timestamp: currentDate,\n modelId: this.modelId,\n headers: responseHeaders,\n },\n };\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.1.3",
3
+ "version": "0.1.4",
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.1.3",
22
+ "@ai-sdk/openai-compatible": "0.1.4",
23
23
  "@ai-sdk/provider": "1.0.6",
24
- "@ai-sdk/provider-utils": "2.1.2"
24
+ "@ai-sdk/provider-utils": "2.1.3"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^18",