@ai-sdk/fireworks 0.0.0-156c9f7b-20250115085202 → 0.0.0-4115c213-20260122152721

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,22 +1,9 @@
1
- // src/fireworks-provider.ts
2
- import {
3
- OpenAICompatibleChatLanguageModel,
4
- OpenAICompatibleCompletionLanguageModel,
5
- OpenAICompatibleEmbeddingModel
6
- } from "@ai-sdk/openai-compatible";
7
- import {
8
- loadApiKey,
9
- withoutTrailingSlash
10
- } from "@ai-sdk/provider-utils";
11
- import { z } from "zod";
12
-
13
1
  // src/fireworks-image-model.ts
14
- import {
15
- APICallError
16
- } from "@ai-sdk/provider";
17
2
  import {
18
3
  combineHeaders,
19
- extractResponseHeaders,
4
+ convertImageModelFileToDataUri,
5
+ createBinaryResponseHandler,
6
+ createStatusCodeErrorResponseHandler,
20
7
  postJsonToApi
21
8
  } from "@ai-sdk/provider-utils";
22
9
  var modelToBackendConfig = {
@@ -26,6 +13,14 @@ var modelToBackendConfig = {
26
13
  "accounts/fireworks/models/flux-1-schnell-fp8": {
27
14
  urlFormat: "workflows"
28
15
  },
16
+ "accounts/fireworks/models/flux-kontext-pro": {
17
+ urlFormat: "workflows_edit",
18
+ supportsEditing: true
19
+ },
20
+ "accounts/fireworks/models/flux-kontext-max": {
21
+ urlFormat: "workflows_edit",
22
+ supportsEditing: true
23
+ },
29
24
  "accounts/fireworks/models/playground-v2-5-1024px-aesthetic": {
30
25
  urlFormat: "image_generation",
31
26
  supportsSize: true
@@ -47,70 +42,26 @@ var modelToBackendConfig = {
47
42
  supportsSize: true
48
43
  }
49
44
  };
50
- function getUrlForModel(baseUrl, modelId) {
51
- var _a;
52
- switch ((_a = modelToBackendConfig[modelId]) == null ? void 0 : _a.urlFormat) {
45
+ function getUrlForModel(baseUrl, modelId, hasInputImage) {
46
+ const config = modelToBackendConfig[modelId];
47
+ switch (config == null ? void 0 : config.urlFormat) {
53
48
  case "image_generation":
54
49
  return `${baseUrl}/image_generation/${modelId}`;
50
+ case "workflows_edit":
51
+ return `${baseUrl}/workflows/${modelId}`;
55
52
  case "workflows":
56
53
  default:
54
+ if (hasInputImage && (config == null ? void 0 : config.supportsEditing)) {
55
+ return `${baseUrl}/workflows/${modelId}`;
56
+ }
57
57
  return `${baseUrl}/workflows/${modelId}/text_to_image`;
58
58
  }
59
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
60
  var FireworksImageModel = class {
110
61
  constructor(modelId, config) {
111
62
  this.modelId = modelId;
112
63
  this.config = config;
113
- this.specificationVersion = "v1";
64
+ this.specificationVersion = "v3";
114
65
  this.maxImagesPerCall = 1;
115
66
  }
116
67
  get provider() {
@@ -124,46 +75,92 @@ var FireworksImageModel = class {
124
75
  seed,
125
76
  providerOptions,
126
77
  headers,
127
- abortSignal
78
+ abortSignal,
79
+ files,
80
+ mask
128
81
  }) {
129
- var _a;
82
+ var _a, _b, _c, _d;
130
83
  const warnings = [];
131
84
  const backendConfig = modelToBackendConfig[this.modelId];
132
85
  if (!(backendConfig == null ? void 0 : backendConfig.supportsSize) && size != null) {
133
86
  warnings.push({
134
- type: "unsupported-setting",
135
- setting: "size",
87
+ type: "unsupported",
88
+ feature: "size",
136
89
  details: "This model does not support the `size` option. Use `aspectRatio` instead."
137
90
  });
138
91
  }
139
92
  if ((backendConfig == null ? void 0 : backendConfig.supportsSize) && aspectRatio != null) {
140
93
  warnings.push({
141
- type: "unsupported-setting",
142
- setting: "aspectRatio",
94
+ type: "unsupported",
95
+ feature: "aspectRatio",
143
96
  details: "This model does not support the `aspectRatio` option."
144
97
  });
145
98
  }
99
+ const hasInputImage = files != null && files.length > 0;
100
+ let inputImage;
101
+ if (hasInputImage) {
102
+ inputImage = convertImageModelFileToDataUri(files[0]);
103
+ if (files.length > 1) {
104
+ warnings.push({
105
+ type: "other",
106
+ message: "Fireworks only supports a single input image. Additional images are ignored."
107
+ });
108
+ }
109
+ }
110
+ if (mask != null) {
111
+ warnings.push({
112
+ type: "unsupported",
113
+ feature: "mask",
114
+ details: "Fireworks Kontext models do not support explicit masks. Use the prompt to describe the areas to edit."
115
+ });
116
+ }
146
117
  const splitSize = size == null ? void 0 : size.split("x");
147
- const { value: response } = await postJsonToApi({
148
- url: getUrlForModel(this.config.baseURL, this.modelId),
118
+ const currentDate = (_c = (_b = (_a = this.config._internal) == null ? void 0 : _a.currentDate) == null ? void 0 : _b.call(_a)) != null ? _c : /* @__PURE__ */ new Date();
119
+ const { value: response, responseHeaders } = await postJsonToApi({
120
+ url: getUrlForModel(this.config.baseURL, this.modelId, hasInputImage),
149
121
  headers: combineHeaders(this.config.headers(), headers),
150
122
  body: {
151
123
  prompt,
152
124
  aspect_ratio: aspectRatio,
153
125
  seed,
154
126
  samples: n,
127
+ ...inputImage && { input_image: inputImage },
155
128
  ...splitSize && { width: splitSize[0], height: splitSize[1] },
156
- ...(_a = providerOptions.fireworks) != null ? _a : {}
129
+ ...(_d = providerOptions.fireworks) != null ? _d : {}
157
130
  },
158
- failedResponseHandler: statusCodeErrorResponseHandler,
131
+ failedResponseHandler: createStatusCodeErrorResponseHandler(),
159
132
  successfulResponseHandler: createBinaryResponseHandler(),
160
133
  abortSignal,
161
134
  fetch: this.config.fetch
162
135
  });
163
- return { images: [new Uint8Array(response)], warnings };
136
+ return {
137
+ images: [response],
138
+ warnings,
139
+ response: {
140
+ timestamp: currentDate,
141
+ modelId: this.modelId,
142
+ headers: responseHeaders
143
+ }
144
+ };
164
145
  }
165
146
  };
166
147
 
148
+ // src/fireworks-provider.ts
149
+ import {
150
+ OpenAICompatibleChatLanguageModel,
151
+ OpenAICompatibleCompletionLanguageModel,
152
+ OpenAICompatibleEmbeddingModel
153
+ } from "@ai-sdk/openai-compatible";
154
+ import {
155
+ loadApiKey,
156
+ withoutTrailingSlash,
157
+ withUserAgentSuffix
158
+ } from "@ai-sdk/provider-utils";
159
+ import { z } from "zod/v4";
160
+
161
+ // src/version.ts
162
+ var VERSION = true ? "0.0.0-4115c213-20260122152721" : "0.0.0-test";
163
+
167
164
  // src/fireworks-provider.ts
168
165
  var fireworksErrorSchema = z.object({
169
166
  error: z.string()
@@ -176,32 +173,34 @@ var defaultBaseURL = "https://api.fireworks.ai/inference/v1";
176
173
  function createFireworks(options = {}) {
177
174
  var _a;
178
175
  const baseURL = withoutTrailingSlash((_a = options.baseURL) != null ? _a : defaultBaseURL);
179
- const getHeaders = () => ({
180
- Authorization: `Bearer ${loadApiKey({
181
- apiKey: options.apiKey,
182
- environmentVariableName: "FIREWORKS_API_KEY",
183
- description: "Fireworks API key"
184
- })}`,
185
- ...options.headers
186
- });
176
+ const getHeaders = () => withUserAgentSuffix(
177
+ {
178
+ Authorization: `Bearer ${loadApiKey({
179
+ apiKey: options.apiKey,
180
+ environmentVariableName: "FIREWORKS_API_KEY",
181
+ description: "Fireworks API key"
182
+ })}`,
183
+ ...options.headers
184
+ },
185
+ `ai-sdk/fireworks/${VERSION}`
186
+ );
187
187
  const getCommonModelConfig = (modelType) => ({
188
188
  provider: `fireworks.${modelType}`,
189
189
  url: ({ path }) => `${baseURL}${path}`,
190
190
  headers: getHeaders,
191
191
  fetch: options.fetch
192
192
  });
193
- const createChatModel = (modelId, settings = {}) => {
194
- return new OpenAICompatibleChatLanguageModel(modelId, settings, {
193
+ const createChatModel = (modelId) => {
194
+ return new OpenAICompatibleChatLanguageModel(modelId, {
195
195
  ...getCommonModelConfig("chat"),
196
- errorStructure: fireworksErrorStructure,
197
- defaultObjectGenerationMode: "json"
196
+ errorStructure: fireworksErrorStructure
198
197
  });
199
198
  };
200
- const createCompletionModel = (modelId, settings = {}) => new OpenAICompatibleCompletionLanguageModel(modelId, settings, {
199
+ const createCompletionModel = (modelId) => new OpenAICompatibleCompletionLanguageModel(modelId, {
201
200
  ...getCommonModelConfig("completion"),
202
201
  errorStructure: fireworksErrorStructure
203
202
  });
204
- const createTextEmbeddingModel = (modelId, settings = {}) => new OpenAICompatibleEmbeddingModel(modelId, settings, {
203
+ const createEmbeddingModel = (modelId) => new OpenAICompatibleEmbeddingModel(modelId, {
205
204
  ...getCommonModelConfig("embedding"),
206
205
  errorStructure: fireworksErrorStructure
207
206
  });
@@ -209,15 +208,21 @@ function createFireworks(options = {}) {
209
208
  ...getCommonModelConfig("image"),
210
209
  baseURL: baseURL != null ? baseURL : defaultBaseURL
211
210
  });
212
- const provider = (modelId, settings) => createChatModel(modelId, settings);
211
+ const provider = (modelId) => createChatModel(modelId);
212
+ provider.specificationVersion = "v3";
213
213
  provider.completionModel = createCompletionModel;
214
214
  provider.chatModel = createChatModel;
215
- provider.textEmbeddingModel = createTextEmbeddingModel;
215
+ provider.languageModel = createChatModel;
216
+ provider.embeddingModel = createEmbeddingModel;
217
+ provider.textEmbeddingModel = createEmbeddingModel;
216
218
  provider.image = createImageModel;
219
+ provider.imageModel = createImageModel;
217
220
  return provider;
218
221
  }
219
222
  var fireworks = createFireworks();
220
223
  export {
224
+ FireworksImageModel,
225
+ VERSION,
221
226
  createFireworks,
222
227
  fireworks
223
228
  };
@@ -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 {\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\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 splitSize = size?.split('x');\n const { value: response } = 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 { images: [new Uint8Array(response)], warnings };\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/fireworks-image-model.ts","../src/fireworks-provider.ts","../src/version.ts"],"sourcesContent":["import { ImageModelV3, SharedV3Warning } from '@ai-sdk/provider';\nimport {\n combineHeaders,\n convertImageModelFileToDataUri,\n createBinaryResponseHandler,\n createStatusCodeErrorResponseHandler,\n FetchFunction,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { FireworksImageModelId } from './fireworks-image-options';\n\ninterface FireworksImageModelBackendConfig {\n urlFormat: 'workflows' | 'workflows_edit' | 'image_generation';\n supportsSize?: boolean;\n supportsEditing?: 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/flux-kontext-pro': {\n urlFormat: 'workflows_edit',\n supportsEditing: true,\n },\n 'accounts/fireworks/models/flux-kontext-max': {\n urlFormat: 'workflows_edit',\n supportsEditing: true,\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 hasInputImage: boolean,\n): string {\n const config = modelToBackendConfig[modelId];\n\n switch (config?.urlFormat) {\n case 'image_generation':\n return `${baseUrl}/image_generation/${modelId}`;\n case 'workflows_edit':\n // Kontext models: use base URL for editing (no suffix)\n return `${baseUrl}/workflows/${modelId}`;\n case 'workflows':\n default:\n // Standard FLUX models: use text_to_image for generation,\n // but if input_image provided, some models may support editing\n if (hasInputImage && config?.supportsEditing) {\n return `${baseUrl}/workflows/${modelId}`;\n }\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 ImageModelV3 {\n readonly specificationVersion = 'v3';\n readonly maxImagesPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: 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 files,\n mask,\n }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV3['doGenerate']>>\n > {\n const warnings: Array<SharedV3Warning> = [];\n\n const backendConfig = modelToBackendConfig[this.modelId];\n if (!backendConfig?.supportsSize && size != null) {\n warnings.push({\n type: 'unsupported',\n feature: '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',\n feature: 'aspectRatio',\n details: 'This model does not support the `aspectRatio` option.',\n });\n }\n\n // Handle files for image editing\n const hasInputImage = files != null && files.length > 0;\n let inputImage: string | undefined;\n\n if (hasInputImage) {\n inputImage = convertImageModelFileToDataUri(files[0]);\n\n if (files.length > 1) {\n warnings.push({\n type: 'other',\n message:\n 'Fireworks only supports a single input image. Additional images are ignored.',\n });\n }\n }\n\n // Warn about mask - Fireworks Kontext models don't support explicit masks\n if (mask != null) {\n warnings.push({\n type: 'unsupported',\n feature: 'mask',\n details:\n 'Fireworks Kontext models do not support explicit masks. Use the prompt to describe the areas to edit.',\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, hasInputImage),\n headers: combineHeaders(this.config.headers(), headers),\n body: {\n prompt,\n aspect_ratio: aspectRatio,\n seed,\n samples: n,\n ...(inputImage && { input_image: inputImage }),\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","import {\n OpenAICompatibleChatLanguageModel,\n OpenAICompatibleCompletionLanguageModel,\n OpenAICompatibleEmbeddingModel,\n ProviderErrorStructure,\n} from '@ai-sdk/openai-compatible';\nimport {\n EmbeddingModelV3,\n ImageModelV3,\n LanguageModelV3,\n ProviderV3,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { FireworksChatModelId } from './fireworks-chat-options';\nimport { FireworksCompletionModelId } from './fireworks-completion-options';\nimport { FireworksEmbeddingModelId } from './fireworks-embedding-options';\nimport { FireworksImageModel } from './fireworks-image-model';\nimport { FireworksImageModelId } from './fireworks-image-options';\nimport { VERSION } from './version';\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 extends ProviderV3 {\n /**\nCreates a model for text generation.\n*/\n (modelId: FireworksChatModelId): LanguageModelV3;\n\n /**\nCreates a chat model for text generation.\n*/\n chatModel(modelId: FireworksChatModelId): LanguageModelV3;\n\n /**\nCreates a completion model for text generation.\n*/\n completionModel(modelId: FireworksCompletionModelId): LanguageModelV3;\n\n /**\nCreates a chat model for text generation.\n*/\n languageModel(modelId: FireworksChatModelId): LanguageModelV3;\n\n /**\nCreates a text embedding model for text generation.\n*/\n embeddingModel(modelId: FireworksEmbeddingModelId): EmbeddingModelV3;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: FireworksEmbeddingModelId): EmbeddingModelV3;\n\n /**\nCreates a model for image generation.\n*/\n image(modelId: FireworksImageModelId): ImageModelV3;\n\n /**\nCreates a model for image generation.\n*/\n imageModel(modelId: FireworksImageModelId): ImageModelV3;\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 withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'FIREWORKS_API_KEY',\n description: 'Fireworks API key',\n })}`,\n ...options.headers,\n },\n `ai-sdk/fireworks/${VERSION}`,\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 = (modelId: FireworksChatModelId) => {\n return new OpenAICompatibleChatLanguageModel(modelId, {\n ...getCommonModelConfig('chat'),\n errorStructure: fireworksErrorStructure,\n });\n };\n\n const createCompletionModel = (modelId: FireworksCompletionModelId) =>\n new OpenAICompatibleCompletionLanguageModel(modelId, {\n ...getCommonModelConfig('completion'),\n errorStructure: fireworksErrorStructure,\n });\n\n const createEmbeddingModel = (modelId: FireworksEmbeddingModelId) =>\n new OpenAICompatibleEmbeddingModel(modelId, {\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 = (modelId: FireworksChatModelId) => createChatModel(modelId);\n\n provider.specificationVersion = 'v3' as const;\n provider.completionModel = createCompletionModel;\n provider.chatModel = createChatModel;\n provider.languageModel = createChatModel;\n provider.embeddingModel = createEmbeddingModel;\n provider.textEmbeddingModel = createEmbeddingModel;\n provider.image = createImageModel;\n provider.imageModel = createImageModel;\n return provider;\n}\n\nexport const fireworks = createFireworks();\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":[]}
@@ -0,0 +1,289 @@
1
+ ---
2
+ title: Fireworks
3
+ description: Learn how to use Fireworks models with the AI SDK.
4
+ ---
5
+
6
+ # Fireworks Provider
7
+
8
+ [Fireworks](https://fireworks.ai/) is a platform for running and testing LLMs through their [API](https://readme.fireworks.ai/).
9
+
10
+ ## Setup
11
+
12
+ The Fireworks provider is available via the `@ai-sdk/fireworks` module. You can install it with
13
+
14
+ <Tabs items={['pnpm', 'npm', 'yarn', 'bun']}>
15
+ <Tab>
16
+ <Snippet text="pnpm add @ai-sdk/fireworks" dark />
17
+ </Tab>
18
+ <Tab>
19
+ <Snippet text="npm install @ai-sdk/fireworks" dark />
20
+ </Tab>
21
+ <Tab>
22
+ <Snippet text="yarn add @ai-sdk/fireworks" dark />
23
+ </Tab>
24
+
25
+ <Tab>
26
+ <Snippet text="bun add @ai-sdk/fireworks" dark />
27
+ </Tab>
28
+ </Tabs>
29
+
30
+ ## Provider Instance
31
+
32
+ You can import the default provider instance `fireworks` from `@ai-sdk/fireworks`:
33
+
34
+ ```ts
35
+ import { fireworks } from '@ai-sdk/fireworks';
36
+ ```
37
+
38
+ If you need a customized setup, you can import `createFireworks` from `@ai-sdk/fireworks`
39
+ and create a provider instance with your settings:
40
+
41
+ ```ts
42
+ import { createFireworks } from '@ai-sdk/fireworks';
43
+
44
+ const fireworks = createFireworks({
45
+ apiKey: process.env.FIREWORKS_API_KEY ?? '',
46
+ });
47
+ ```
48
+
49
+ You can use the following optional settings to customize the Fireworks provider instance:
50
+
51
+ - **baseURL** _string_
52
+
53
+ Use a different URL prefix for API calls, e.g. to use proxy servers.
54
+ The default prefix is `https://api.fireworks.ai/inference/v1`.
55
+
56
+ - **apiKey** _string_
57
+
58
+ API key that is being sent using the `Authorization` header. It defaults to
59
+ the `FIREWORKS_API_KEY` environment variable.
60
+
61
+ - **headers** _Record&lt;string,string&gt;_
62
+
63
+ Custom headers to include in the requests.
64
+
65
+ - **fetch** _(input: RequestInfo, init?: RequestInit) => Promise&lt;Response&gt;_
66
+
67
+ Custom [fetch](https://developer.mozilla.org/en-US/docs/Web/API/fetch) implementation.
68
+
69
+ ## Language Models
70
+
71
+ You can create [Fireworks models](https://fireworks.ai/models) using a provider instance.
72
+ The first argument is the model id, e.g. `accounts/fireworks/models/firefunction-v1`:
73
+
74
+ ```ts
75
+ const model = fireworks('accounts/fireworks/models/firefunction-v1');
76
+ ```
77
+
78
+ ### Reasoning Models
79
+
80
+ Fireworks exposes the thinking of `deepseek-r1` in the generated text using the `<think>` tag.
81
+ You can use the `extractReasoningMiddleware` to extract this reasoning and expose it as a `reasoning` property on the result:
82
+
83
+ ```ts
84
+ import { fireworks } from '@ai-sdk/fireworks';
85
+ import { wrapLanguageModel, extractReasoningMiddleware } from 'ai';
86
+
87
+ const enhancedModel = wrapLanguageModel({
88
+ model: fireworks('accounts/fireworks/models/deepseek-r1'),
89
+ middleware: extractReasoningMiddleware({ tagName: 'think' }),
90
+ });
91
+ ```
92
+
93
+ You can then use that enhanced model in functions like `generateText` and `streamText`.
94
+
95
+ ### Example
96
+
97
+ You can use Fireworks language models to generate text with the `generateText` function:
98
+
99
+ ```ts
100
+ import { fireworks } from '@ai-sdk/fireworks';
101
+ import { generateText } from 'ai';
102
+
103
+ const { text } = await generateText({
104
+ model: fireworks('accounts/fireworks/models/firefunction-v1'),
105
+ prompt: 'Write a vegetarian lasagna recipe for 4 people.',
106
+ });
107
+ ```
108
+
109
+ Fireworks language models can also be used in the `streamText` function
110
+ (see [AI SDK Core](/docs/ai-sdk-core)).
111
+
112
+ ### Completion Models
113
+
114
+ You can create models that call the Fireworks completions API using the `.completion()` factory method:
115
+
116
+ ```ts
117
+ const model = fireworks.completion('accounts/fireworks/models/firefunction-v1');
118
+ ```
119
+
120
+ ### Model Capabilities
121
+
122
+ | Model | Image Input | Object Generation | Tool Usage | Tool Streaming |
123
+ | ---------------------------------------------------------- | ------------------- | ------------------- | ------------------- | ------------------- |
124
+ | `accounts/fireworks/models/firefunction-v1` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
125
+ | `accounts/fireworks/models/deepseek-r1` | <Cross size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
126
+ | `accounts/fireworks/models/deepseek-v3` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
127
+ | `accounts/fireworks/models/llama-v3p1-405b-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> |
128
+ | `accounts/fireworks/models/llama-v3p1-8b-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
129
+ | `accounts/fireworks/models/llama-v3p2-3b-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
130
+ | `accounts/fireworks/models/llama-v3p3-70b-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
131
+ | `accounts/fireworks/models/mixtral-8x7b-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
132
+ | `accounts/fireworks/models/mixtral-8x7b-instruct-hf` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
133
+ | `accounts/fireworks/models/mixtral-8x22b-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
134
+ | `accounts/fireworks/models/qwen2p5-coder-32b-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
135
+ | `accounts/fireworks/models/qwen2p5-72b-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
136
+ | `accounts/fireworks/models/qwen-qwq-32b-preview` | <Cross size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
137
+ | `accounts/fireworks/models/qwen2-vl-72b-instruct` | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
138
+ | `accounts/fireworks/models/llama-v3p2-11b-vision-instruct` | <Check size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
139
+ | `accounts/fireworks/models/qwq-32b` | <Cross size={18} /> | <Check size={18} /> | <Cross size={18} /> | <Cross size={18} /> |
140
+ | `accounts/fireworks/models/yi-large` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
141
+ | `accounts/fireworks/models/kimi-k2-instruct` | <Cross size={18} /> | <Check size={18} /> | <Check size={18} /> | <Cross size={18} /> |
142
+
143
+ <Note>
144
+ The table above lists popular models. Please see the [Fireworks models
145
+ page](https://fireworks.ai/models) for a full list of available models.
146
+ </Note>
147
+
148
+ ## Embedding Models
149
+
150
+ You can create models that call the Fireworks embeddings API using the `.embedding()` factory method:
151
+
152
+ ```ts
153
+ const model = fireworks.embedding('nomic-ai/nomic-embed-text-v1.5');
154
+ ```
155
+
156
+ You can use Fireworks embedding models to generate embeddings with the `embed` function:
157
+
158
+ ```ts
159
+ import { fireworks } from '@ai-sdk/fireworks';
160
+ import { embed } from 'ai';
161
+
162
+ const { embedding } = await embed({
163
+ model: fireworks.embedding('nomic-ai/nomic-embed-text-v1.5'),
164
+ value: 'sunny day at the beach',
165
+ });
166
+ ```
167
+
168
+ ### Model Capabilities
169
+
170
+ | Model | Dimensions | Max Tokens |
171
+ | -------------------------------- | ---------- | ---------- |
172
+ | `nomic-ai/nomic-embed-text-v1.5` | 768 | 8192 |
173
+
174
+ <Note>
175
+ For more embedding models, see the [Fireworks models
176
+ page](https://fireworks.ai/models) for a full list of available models.
177
+ </Note>
178
+
179
+ ## Image Models
180
+
181
+ You can create Fireworks image models using the `.image()` factory method.
182
+ For more on image generation with the AI SDK see [generateImage()](/docs/reference/ai-sdk-core/generate-image).
183
+
184
+ ```ts
185
+ import { fireworks } from '@ai-sdk/fireworks';
186
+ import { generateImage } from 'ai';
187
+
188
+ const { image } = await generateImage({
189
+ model: fireworks.image('accounts/fireworks/models/flux-1-dev-fp8'),
190
+ prompt: 'A futuristic cityscape at sunset',
191
+ aspectRatio: '16:9',
192
+ });
193
+ ```
194
+
195
+ <Note>
196
+ Model support for `size` and `aspectRatio` parameters varies. See the [Model
197
+ Capabilities](#model-capabilities-1) section below for supported dimensions,
198
+ or check the model's documentation on [Fireworks models
199
+ page](https://fireworks.ai/models) for more details.
200
+ </Note>
201
+
202
+ ### Image Editing
203
+
204
+ Fireworks supports image editing through FLUX Kontext models (`flux-kontext-pro` and `flux-kontext-max`). Pass input images via `prompt.images` to transform or edit existing images.
205
+
206
+ <Note>
207
+ Fireworks Kontext models do not support explicit masks. Editing is
208
+ prompt-driven — describe what you want to change in the text prompt.
209
+ </Note>
210
+
211
+ #### Basic Image Editing
212
+
213
+ Transform an existing image using text prompts:
214
+
215
+ ```ts
216
+ const imageBuffer = readFileSync('./input-image.png');
217
+
218
+ const { images } = await generateImage({
219
+ model: fireworks.image('accounts/fireworks/models/flux-kontext-pro'),
220
+ prompt: {
221
+ text: 'Turn the cat into a golden retriever dog',
222
+ images: [imageBuffer],
223
+ },
224
+ providerOptions: {
225
+ fireworks: {
226
+ output_format: 'jpeg',
227
+ },
228
+ },
229
+ });
230
+ ```
231
+
232
+ #### Style Transfer
233
+
234
+ Apply artistic styles to an image:
235
+
236
+ ```ts
237
+ const imageBuffer = readFileSync('./input-image.png');
238
+
239
+ const { images } = await generateImage({
240
+ model: fireworks.image('accounts/fireworks/models/flux-kontext-pro'),
241
+ prompt: {
242
+ text: 'Transform this into a watercolor painting style',
243
+ images: [imageBuffer],
244
+ },
245
+ aspectRatio: '1:1',
246
+ });
247
+ ```
248
+
249
+ <Note>
250
+ Input images can be provided as `Buffer`, `ArrayBuffer`, `Uint8Array`, or
251
+ base64-encoded strings. Fireworks only supports a single input image per
252
+ request.
253
+ </Note>
254
+
255
+ ### Model Capabilities
256
+
257
+ For all models supporting aspect ratios, the following aspect ratios are supported:
258
+
259
+ `1:1 (default), 2:3, 3:2, 4:5, 5:4, 16:9, 9:16, 9:21, 21:9`
260
+
261
+ For all models supporting size, the following sizes are supported:
262
+
263
+ `640 x 1536, 768 x 1344, 832 x 1216, 896 x 1152, 1024x1024 (default), 1152 x 896, 1216 x 832, 1344 x 768, 1536 x 640`
264
+
265
+ | Model | Dimensions Specification | Image Editing |
266
+ | ------------------------------------------------------------ | ------------------------ | ------------------- |
267
+ | `accounts/fireworks/models/flux-kontext-pro` | Aspect Ratio | <Check size={18} /> |
268
+ | `accounts/fireworks/models/flux-kontext-max` | Aspect Ratio | <Check size={18} /> |
269
+ | `accounts/fireworks/models/flux-1-dev-fp8` | Aspect Ratio | <Cross size={18} /> |
270
+ | `accounts/fireworks/models/flux-1-schnell-fp8` | Aspect Ratio | <Cross size={18} /> |
271
+ | `accounts/fireworks/models/playground-v2-5-1024px-aesthetic` | Size | <Cross size={18} /> |
272
+ | `accounts/fireworks/models/japanese-stable-diffusion-xl` | Size | <Cross size={18} /> |
273
+ | `accounts/fireworks/models/playground-v2-1024px-aesthetic` | Size | <Cross size={18} /> |
274
+ | `accounts/fireworks/models/SSD-1B` | Size | <Cross size={18} /> |
275
+ | `accounts/fireworks/models/stable-diffusion-xl-1024-v1-0` | Size | <Cross size={18} /> |
276
+
277
+ For more details, see the [Fireworks models page](https://fireworks.ai/models).
278
+
279
+ #### Stability AI Models
280
+
281
+ Fireworks also presents several Stability AI models backed by Stability AI API
282
+ keys and endpoint. The AI SDK Fireworks provider does not currently include
283
+ support for these models:
284
+
285
+ | Model ID |
286
+ | -------------------------------------- |
287
+ | `accounts/stability/models/sd3-turbo` |
288
+ | `accounts/stability/models/sd3-medium` |
289
+ | `accounts/stability/models/sd3` |