@ai-sdk/luma 1.0.8 → 1.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 +13 -0
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +16 -8
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @ai-sdk/luma
|
|
2
2
|
|
|
3
|
+
## 1.0.10
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 322901b: feat: add provider version to user-agent header
|
|
8
|
+
|
|
9
|
+
## 1.0.9
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [0294b58]
|
|
14
|
+
- @ai-sdk/provider-utils@3.0.9
|
|
15
|
+
|
|
3
16
|
## 1.0.8
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
package/dist/index.d.mts
CHANGED
|
@@ -50,4 +50,6 @@ declare const lumaErrorSchema: z.ZodObject<{
|
|
|
50
50
|
}, z.core.$strip>;
|
|
51
51
|
type LumaErrorData = z.infer<typeof lumaErrorSchema>;
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
declare const VERSION: string;
|
|
54
|
+
|
|
55
|
+
export { type LumaErrorData, type LumaProvider, type LumaProviderSettings, VERSION, createLuma, luma };
|
package/dist/index.d.ts
CHANGED
|
@@ -50,4 +50,6 @@ declare const lumaErrorSchema: z.ZodObject<{
|
|
|
50
50
|
}, z.core.$strip>;
|
|
51
51
|
type LumaErrorData = z.infer<typeof lumaErrorSchema>;
|
|
52
52
|
|
|
53
|
-
|
|
53
|
+
declare const VERSION: string;
|
|
54
|
+
|
|
55
|
+
export { type LumaErrorData, type LumaProvider, type LumaProviderSettings, VERSION, createLuma, luma };
|
package/dist/index.js
CHANGED
|
@@ -20,6 +20,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/index.ts
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
|
+
VERSION: () => VERSION,
|
|
23
24
|
createLuma: () => createLuma,
|
|
24
25
|
luma: () => luma
|
|
25
26
|
});
|
|
@@ -194,19 +195,25 @@ var lumaErrorSchema = import_v4.z.object({
|
|
|
194
195
|
)
|
|
195
196
|
});
|
|
196
197
|
|
|
198
|
+
// src/version.ts
|
|
199
|
+
var VERSION = true ? "1.0.10" : "0.0.0-test";
|
|
200
|
+
|
|
197
201
|
// src/luma-provider.ts
|
|
198
202
|
var defaultBaseURL = "https://api.lumalabs.ai";
|
|
199
203
|
function createLuma(options = {}) {
|
|
200
204
|
var _a;
|
|
201
205
|
const baseURL = (0, import_provider_utils2.withoutTrailingSlash)((_a = options.baseURL) != null ? _a : defaultBaseURL);
|
|
202
|
-
const getHeaders = () => (
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
206
|
+
const getHeaders = () => (0, import_provider_utils2.withUserAgentSuffix)(
|
|
207
|
+
{
|
|
208
|
+
Authorization: `Bearer ${(0, import_provider_utils2.loadApiKey)({
|
|
209
|
+
apiKey: options.apiKey,
|
|
210
|
+
environmentVariableName: "LUMA_API_KEY",
|
|
211
|
+
description: "Luma"
|
|
212
|
+
})}`,
|
|
213
|
+
...options.headers
|
|
214
|
+
},
|
|
215
|
+
`ai-sdk/luma/${VERSION}`
|
|
216
|
+
);
|
|
210
217
|
const createImageModel = (modelId) => new LumaImageModel(modelId, {
|
|
211
218
|
provider: "luma.image",
|
|
212
219
|
baseURL: baseURL != null ? baseURL : defaultBaseURL,
|
|
@@ -233,6 +240,7 @@ function createLuma(options = {}) {
|
|
|
233
240
|
var luma = createLuma();
|
|
234
241
|
// Annotate the CommonJS export names for ESM import in node:
|
|
235
242
|
0 && (module.exports = {
|
|
243
|
+
VERSION,
|
|
236
244
|
createLuma,
|
|
237
245
|
luma
|
|
238
246
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/luma-provider.ts","../src/luma-image-model.ts"],"sourcesContent":["export { createLuma, luma } from './luma-provider';\nexport type { LumaProvider, LumaProviderSettings } from './luma-provider';\nexport type { LumaErrorData } from './luma-image-model';\n","import { ImageModelV2, NoSuchModelError, ProviderV2 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { LumaImageModel } from './luma-image-model';\nimport { LumaImageModelId } from './luma-image-settings';\n\nexport interface LumaProviderSettings {\n /**\nLuma API key. Default value is taken from the `LUMA_API_KEY` environment\nvariable.\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 LumaProvider extends ProviderV2 {\n /**\nCreates a model for image generation.\n */\n image(modelId: LumaImageModelId): ImageModelV2;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: LumaImageModelId): ImageModelV2;\n}\n\nconst defaultBaseURL = 'https://api.lumalabs.ai';\n\nexport function createLuma(options: LumaProviderSettings = {}): LumaProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'LUMA_API_KEY',\n description: 'Luma',\n })}`,\n ...options.headers,\n });\n\n const createImageModel = (modelId: LumaImageModelId) =>\n new LumaImageModel(modelId, {\n provider: 'luma.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n image: createImageModel,\n imageModel: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n };\n}\n\nexport const luma = createLuma();\n","import {\n ImageModelV2,\n ImageModelV2CallWarning,\n InvalidResponseDataError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n createStatusCodeErrorResponseHandler,\n delay,\n getFromApi,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { LumaImageSettings } from './luma-image-settings';\nimport { z } from 'zod/v4';\n\nconst DEFAULT_POLL_INTERVAL_MILLIS = 500;\nconst DEFAULT_MAX_POLL_ATTEMPTS = 60000 / DEFAULT_POLL_INTERVAL_MILLIS;\n\ninterface LumaImageModelConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class LumaImageModel implements ImageModelV2 {\n readonly specificationVersion = 'v2';\n readonly maxImagesPerCall = 1;\n readonly pollIntervalMillis = DEFAULT_POLL_INTERVAL_MILLIS;\n readonly maxPollAttempts = DEFAULT_MAX_POLL_ATTEMPTS;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: string,\n private readonly config: LumaImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV2['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV2['doGenerate']>>\n > {\n const warnings: Array<ImageModelV2CallWarning> = [];\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n details: 'This model does not support the `seed` option.',\n });\n }\n\n if (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 // remove non-request options from providerOptions\n const { pollIntervalMillis, maxPollAttempts, ...providerRequestOptions } =\n providerOptions.luma ?? {};\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const fullHeaders = combineHeaders(this.config.headers(), headers);\n const { value: generationResponse, responseHeaders } = await postJsonToApi({\n url: this.getLumaGenerationsUrl(),\n headers: fullHeaders,\n body: {\n prompt,\n ...(aspectRatio ? { aspect_ratio: aspectRatio } : {}),\n model: this.modelId,\n ...providerRequestOptions,\n },\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: this.createLumaErrorHandler(),\n successfulResponseHandler: createJsonResponseHandler(\n lumaGenerationResponseSchema,\n ),\n });\n\n const imageUrl = await this.pollForImageUrl(\n generationResponse.id,\n fullHeaders,\n abortSignal,\n providerOptions.luma,\n );\n\n const downloadedImage = await this.downloadImage(imageUrl, abortSignal);\n\n return {\n images: [downloadedImage],\n warnings,\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n private async pollForImageUrl(\n generationId: string,\n headers: Record<string, string | undefined>,\n abortSignal: AbortSignal | undefined,\n imageSettings?: LumaImageSettings,\n ): Promise<string> {\n const url = this.getLumaGenerationsUrl(generationId);\n const maxPollAttempts =\n imageSettings?.maxPollAttempts ?? this.maxPollAttempts;\n const pollIntervalMillis =\n imageSettings?.pollIntervalMillis ?? this.pollIntervalMillis;\n\n for (let i = 0; i < maxPollAttempts; i++) {\n const { value: statusResponse } = await getFromApi({\n url,\n headers,\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: this.createLumaErrorHandler(),\n successfulResponseHandler: createJsonResponseHandler(\n lumaGenerationResponseSchema,\n ),\n });\n\n switch (statusResponse.state) {\n case 'completed':\n if (!statusResponse.assets?.image) {\n throw new InvalidResponseDataError({\n data: statusResponse,\n message: `Image generation completed but no image was found.`,\n });\n }\n return statusResponse.assets.image;\n case 'failed':\n throw new InvalidResponseDataError({\n data: statusResponse,\n message: `Image generation failed.`,\n });\n }\n await delay(pollIntervalMillis);\n }\n\n throw new Error(\n `Image generation timed out after ${this.maxPollAttempts} attempts.`,\n );\n }\n\n private createLumaErrorHandler() {\n return createJsonErrorResponseHandler({\n errorSchema: lumaErrorSchema,\n errorToMessage: (error: LumaErrorData) =>\n error.detail[0].msg ?? 'Unknown error',\n });\n }\n\n private getLumaGenerationsUrl(generationId?: string) {\n return `${this.config.baseURL}/dream-machine/v1/generations/${\n generationId ?? 'image'\n }`;\n }\n\n private async downloadImage(\n url: string,\n abortSignal: AbortSignal | undefined,\n ): Promise<Uint8Array> {\n const { value: response } = await getFromApi({\n url,\n // No specific headers should be needed for this request as it's a\n // generated image provided by Luma.\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n return response;\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst lumaGenerationResponseSchema = z.object({\n id: z.string(),\n state: z.enum(['queued', 'dreaming', 'completed', 'failed']),\n failure_reason: z.string().nullish(),\n assets: z\n .object({\n image: z.string(), // URL of the generated image\n })\n .nullish(),\n});\n\nconst lumaErrorSchema = z.object({\n detail: z.array(\n z.object({\n type: z.string(),\n loc: z.array(z.string()),\n msg: z.string(),\n input: z.string(),\n ctx: z\n .object({\n expected: z.string(),\n })\n .nullish(),\n }),\n ),\n});\n\nexport type LumaErrorData = z.infer<typeof lumaErrorSchema>;\n"],"mappings":"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","names":["import_provider","import_provider_utils"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/luma-provider.ts","../src/luma-image-model.ts","../src/version.ts"],"sourcesContent":["export { createLuma, luma } from './luma-provider';\nexport type { LumaProvider, LumaProviderSettings } from './luma-provider';\nexport type { LumaErrorData } from './luma-image-model';\nexport { VERSION } from './version';\n","import { ImageModelV2, NoSuchModelError, ProviderV2 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { LumaImageModel } from './luma-image-model';\nimport { LumaImageModelId } from './luma-image-settings';\nimport { VERSION } from './version';\n\nexport interface LumaProviderSettings {\n /**\nLuma API key. Default value is taken from the `LUMA_API_KEY` environment\nvariable.\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 LumaProvider extends ProviderV2 {\n /**\nCreates a model for image generation.\n */\n image(modelId: LumaImageModelId): ImageModelV2;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: LumaImageModelId): ImageModelV2;\n}\n\nconst defaultBaseURL = 'https://api.lumalabs.ai';\n\nexport function createLuma(options: LumaProviderSettings = {}): LumaProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'LUMA_API_KEY',\n description: 'Luma',\n })}`,\n ...options.headers,\n },\n `ai-sdk/luma/${VERSION}`,\n );\n\n const createImageModel = (modelId: LumaImageModelId) =>\n new LumaImageModel(modelId, {\n provider: 'luma.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n image: createImageModel,\n imageModel: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n };\n}\n\nexport const luma = createLuma();\n","import {\n ImageModelV2,\n ImageModelV2CallWarning,\n InvalidResponseDataError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n createStatusCodeErrorResponseHandler,\n delay,\n getFromApi,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { LumaImageSettings } from './luma-image-settings';\nimport { z } from 'zod/v4';\n\nconst DEFAULT_POLL_INTERVAL_MILLIS = 500;\nconst DEFAULT_MAX_POLL_ATTEMPTS = 60000 / DEFAULT_POLL_INTERVAL_MILLIS;\n\ninterface LumaImageModelConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class LumaImageModel implements ImageModelV2 {\n readonly specificationVersion = 'v2';\n readonly maxImagesPerCall = 1;\n readonly pollIntervalMillis = DEFAULT_POLL_INTERVAL_MILLIS;\n readonly maxPollAttempts = DEFAULT_MAX_POLL_ATTEMPTS;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: string,\n private readonly config: LumaImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV2['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV2['doGenerate']>>\n > {\n const warnings: Array<ImageModelV2CallWarning> = [];\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n details: 'This model does not support the `seed` option.',\n });\n }\n\n if (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 // remove non-request options from providerOptions\n const { pollIntervalMillis, maxPollAttempts, ...providerRequestOptions } =\n providerOptions.luma ?? {};\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const fullHeaders = combineHeaders(this.config.headers(), headers);\n const { value: generationResponse, responseHeaders } = await postJsonToApi({\n url: this.getLumaGenerationsUrl(),\n headers: fullHeaders,\n body: {\n prompt,\n ...(aspectRatio ? { aspect_ratio: aspectRatio } : {}),\n model: this.modelId,\n ...providerRequestOptions,\n },\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: this.createLumaErrorHandler(),\n successfulResponseHandler: createJsonResponseHandler(\n lumaGenerationResponseSchema,\n ),\n });\n\n const imageUrl = await this.pollForImageUrl(\n generationResponse.id,\n fullHeaders,\n abortSignal,\n providerOptions.luma,\n );\n\n const downloadedImage = await this.downloadImage(imageUrl, abortSignal);\n\n return {\n images: [downloadedImage],\n warnings,\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n private async pollForImageUrl(\n generationId: string,\n headers: Record<string, string | undefined>,\n abortSignal: AbortSignal | undefined,\n imageSettings?: LumaImageSettings,\n ): Promise<string> {\n const url = this.getLumaGenerationsUrl(generationId);\n const maxPollAttempts =\n imageSettings?.maxPollAttempts ?? this.maxPollAttempts;\n const pollIntervalMillis =\n imageSettings?.pollIntervalMillis ?? this.pollIntervalMillis;\n\n for (let i = 0; i < maxPollAttempts; i++) {\n const { value: statusResponse } = await getFromApi({\n url,\n headers,\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: this.createLumaErrorHandler(),\n successfulResponseHandler: createJsonResponseHandler(\n lumaGenerationResponseSchema,\n ),\n });\n\n switch (statusResponse.state) {\n case 'completed':\n if (!statusResponse.assets?.image) {\n throw new InvalidResponseDataError({\n data: statusResponse,\n message: `Image generation completed but no image was found.`,\n });\n }\n return statusResponse.assets.image;\n case 'failed':\n throw new InvalidResponseDataError({\n data: statusResponse,\n message: `Image generation failed.`,\n });\n }\n await delay(pollIntervalMillis);\n }\n\n throw new Error(\n `Image generation timed out after ${this.maxPollAttempts} attempts.`,\n );\n }\n\n private createLumaErrorHandler() {\n return createJsonErrorResponseHandler({\n errorSchema: lumaErrorSchema,\n errorToMessage: (error: LumaErrorData) =>\n error.detail[0].msg ?? 'Unknown error',\n });\n }\n\n private getLumaGenerationsUrl(generationId?: string) {\n return `${this.config.baseURL}/dream-machine/v1/generations/${\n generationId ?? 'image'\n }`;\n }\n\n private async downloadImage(\n url: string,\n abortSignal: AbortSignal | undefined,\n ): Promise<Uint8Array> {\n const { value: response } = await getFromApi({\n url,\n // No specific headers should be needed for this request as it's a\n // generated image provided by Luma.\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n return response;\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst lumaGenerationResponseSchema = z.object({\n id: z.string(),\n state: z.enum(['queued', 'dreaming', 'completed', 'failed']),\n failure_reason: z.string().nullish(),\n assets: z\n .object({\n image: z.string(), // URL of the generated image\n })\n .nullish(),\n});\n\nconst lumaErrorSchema = z.object({\n detail: z.array(\n z.object({\n type: z.string(),\n loc: z.array(z.string()),\n msg: z.string(),\n input: z.string(),\n ctx: z\n .object({\n expected: z.string(),\n })\n .nullish(),\n }),\n ),\n});\n\nexport type LumaErrorData = z.infer<typeof lumaErrorSchema>;\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n"],"mappings":"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","names":["import_provider","import_provider_utils"]}
|
package/dist/index.mjs
CHANGED
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { NoSuchModelError } from "@ai-sdk/provider";
|
|
3
3
|
import {
|
|
4
4
|
loadApiKey,
|
|
5
|
-
withoutTrailingSlash
|
|
5
|
+
withoutTrailingSlash,
|
|
6
|
+
withUserAgentSuffix
|
|
6
7
|
} from "@ai-sdk/provider-utils";
|
|
7
8
|
|
|
8
9
|
// src/luma-image-model.ts
|
|
@@ -181,19 +182,25 @@ var lumaErrorSchema = z.object({
|
|
|
181
182
|
)
|
|
182
183
|
});
|
|
183
184
|
|
|
185
|
+
// src/version.ts
|
|
186
|
+
var VERSION = true ? "1.0.10" : "0.0.0-test";
|
|
187
|
+
|
|
184
188
|
// src/luma-provider.ts
|
|
185
189
|
var defaultBaseURL = "https://api.lumalabs.ai";
|
|
186
190
|
function createLuma(options = {}) {
|
|
187
191
|
var _a;
|
|
188
192
|
const baseURL = withoutTrailingSlash((_a = options.baseURL) != null ? _a : defaultBaseURL);
|
|
189
|
-
const getHeaders = () => (
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
const getHeaders = () => withUserAgentSuffix(
|
|
194
|
+
{
|
|
195
|
+
Authorization: `Bearer ${loadApiKey({
|
|
196
|
+
apiKey: options.apiKey,
|
|
197
|
+
environmentVariableName: "LUMA_API_KEY",
|
|
198
|
+
description: "Luma"
|
|
199
|
+
})}`,
|
|
200
|
+
...options.headers
|
|
201
|
+
},
|
|
202
|
+
`ai-sdk/luma/${VERSION}`
|
|
203
|
+
);
|
|
197
204
|
const createImageModel = (modelId) => new LumaImageModel(modelId, {
|
|
198
205
|
provider: "luma.image",
|
|
199
206
|
baseURL: baseURL != null ? baseURL : defaultBaseURL,
|
|
@@ -219,6 +226,7 @@ function createLuma(options = {}) {
|
|
|
219
226
|
}
|
|
220
227
|
var luma = createLuma();
|
|
221
228
|
export {
|
|
229
|
+
VERSION,
|
|
222
230
|
createLuma,
|
|
223
231
|
luma
|
|
224
232
|
};
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/luma-provider.ts","../src/luma-image-model.ts"],"sourcesContent":["import { ImageModelV2, NoSuchModelError, ProviderV2 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n} from '@ai-sdk/provider-utils';\nimport { LumaImageModel } from './luma-image-model';\nimport { LumaImageModelId } from './luma-image-settings';\n\nexport interface LumaProviderSettings {\n /**\nLuma API key. Default value is taken from the `LUMA_API_KEY` environment\nvariable.\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 LumaProvider extends ProviderV2 {\n /**\nCreates a model for image generation.\n */\n image(modelId: LumaImageModelId): ImageModelV2;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: LumaImageModelId): ImageModelV2;\n}\n\nconst defaultBaseURL = 'https://api.lumalabs.ai';\n\nexport function createLuma(options: LumaProviderSettings = {}): LumaProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () => ({\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'LUMA_API_KEY',\n description: 'Luma',\n })}`,\n ...options.headers,\n });\n\n const createImageModel = (modelId: LumaImageModelId) =>\n new LumaImageModel(modelId, {\n provider: 'luma.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n image: createImageModel,\n imageModel: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n };\n}\n\nexport const luma = createLuma();\n","import {\n ImageModelV2,\n ImageModelV2CallWarning,\n InvalidResponseDataError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n createStatusCodeErrorResponseHandler,\n delay,\n getFromApi,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { LumaImageSettings } from './luma-image-settings';\nimport { z } from 'zod/v4';\n\nconst DEFAULT_POLL_INTERVAL_MILLIS = 500;\nconst DEFAULT_MAX_POLL_ATTEMPTS = 60000 / DEFAULT_POLL_INTERVAL_MILLIS;\n\ninterface LumaImageModelConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class LumaImageModel implements ImageModelV2 {\n readonly specificationVersion = 'v2';\n readonly maxImagesPerCall = 1;\n readonly pollIntervalMillis = DEFAULT_POLL_INTERVAL_MILLIS;\n readonly maxPollAttempts = DEFAULT_MAX_POLL_ATTEMPTS;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: string,\n private readonly config: LumaImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV2['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV2['doGenerate']>>\n > {\n const warnings: Array<ImageModelV2CallWarning> = [];\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n details: 'This model does not support the `seed` option.',\n });\n }\n\n if (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 // remove non-request options from providerOptions\n const { pollIntervalMillis, maxPollAttempts, ...providerRequestOptions } =\n providerOptions.luma ?? {};\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const fullHeaders = combineHeaders(this.config.headers(), headers);\n const { value: generationResponse, responseHeaders } = await postJsonToApi({\n url: this.getLumaGenerationsUrl(),\n headers: fullHeaders,\n body: {\n prompt,\n ...(aspectRatio ? { aspect_ratio: aspectRatio } : {}),\n model: this.modelId,\n ...providerRequestOptions,\n },\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: this.createLumaErrorHandler(),\n successfulResponseHandler: createJsonResponseHandler(\n lumaGenerationResponseSchema,\n ),\n });\n\n const imageUrl = await this.pollForImageUrl(\n generationResponse.id,\n fullHeaders,\n abortSignal,\n providerOptions.luma,\n );\n\n const downloadedImage = await this.downloadImage(imageUrl, abortSignal);\n\n return {\n images: [downloadedImage],\n warnings,\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n private async pollForImageUrl(\n generationId: string,\n headers: Record<string, string | undefined>,\n abortSignal: AbortSignal | undefined,\n imageSettings?: LumaImageSettings,\n ): Promise<string> {\n const url = this.getLumaGenerationsUrl(generationId);\n const maxPollAttempts =\n imageSettings?.maxPollAttempts ?? this.maxPollAttempts;\n const pollIntervalMillis =\n imageSettings?.pollIntervalMillis ?? this.pollIntervalMillis;\n\n for (let i = 0; i < maxPollAttempts; i++) {\n const { value: statusResponse } = await getFromApi({\n url,\n headers,\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: this.createLumaErrorHandler(),\n successfulResponseHandler: createJsonResponseHandler(\n lumaGenerationResponseSchema,\n ),\n });\n\n switch (statusResponse.state) {\n case 'completed':\n if (!statusResponse.assets?.image) {\n throw new InvalidResponseDataError({\n data: statusResponse,\n message: `Image generation completed but no image was found.`,\n });\n }\n return statusResponse.assets.image;\n case 'failed':\n throw new InvalidResponseDataError({\n data: statusResponse,\n message: `Image generation failed.`,\n });\n }\n await delay(pollIntervalMillis);\n }\n\n throw new Error(\n `Image generation timed out after ${this.maxPollAttempts} attempts.`,\n );\n }\n\n private createLumaErrorHandler() {\n return createJsonErrorResponseHandler({\n errorSchema: lumaErrorSchema,\n errorToMessage: (error: LumaErrorData) =>\n error.detail[0].msg ?? 'Unknown error',\n });\n }\n\n private getLumaGenerationsUrl(generationId?: string) {\n return `${this.config.baseURL}/dream-machine/v1/generations/${\n generationId ?? 'image'\n }`;\n }\n\n private async downloadImage(\n url: string,\n abortSignal: AbortSignal | undefined,\n ): Promise<Uint8Array> {\n const { value: response } = await getFromApi({\n url,\n // No specific headers should be needed for this request as it's a\n // generated image provided by Luma.\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n return response;\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst lumaGenerationResponseSchema = z.object({\n id: z.string(),\n state: z.enum(['queued', 'dreaming', 'completed', 'failed']),\n failure_reason: z.string().nullish(),\n assets: z\n .object({\n image: z.string(), // URL of the generated image\n })\n .nullish(),\n});\n\nconst lumaErrorSchema = z.object({\n detail: z.array(\n z.object({\n type: z.string(),\n loc: z.array(z.string()),\n msg: z.string(),\n input: z.string(),\n ctx: z\n .object({\n expected: z.string(),\n })\n .nullish(),\n }),\n ),\n});\n\nexport type LumaErrorData = z.infer<typeof lumaErrorSchema>;\n"],"mappings":";AAAA,SAAuB,wBAAoC;AAC3D;AAAA,EAEE;AAAA,EACA;AAAA,OACK;;;ACLP;AAAA,EAGE;AAAA,OACK;AACP;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,SAAS;AAElB,IAAM,+BAA+B;AACrC,IAAM,4BAA4B,MAAQ;AAYnC,IAAM,iBAAN,MAA6C;AAAA,EAUlD,YACW,SACQ,QACjB;AAFS;AACQ;AAXnB,SAAS,uBAAuB;AAChC,SAAS,mBAAmB;AAC5B,SAAS,qBAAqB;AAC9B,SAAS,kBAAkB;AAAA,EASxB;AAAA,EAPH,IAAI,WAAmB;AACrB,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAOA,MAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAEE;AA1DJ;AA2DI,UAAM,WAA2C,CAAC;AAElD,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,MACX,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,MAAM;AAChB,eAAS,KAAK;AAAA,QACZ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SACE;AAAA,MACJ,CAAC;AAAA,IACH;AAGA,UAAM,EAAE,oBAAoB,iBAAiB,GAAG,uBAAuB,KACrE,qBAAgB,SAAhB,YAAwB,CAAC;AAE3B,UAAM,eAAc,sBAAK,OAAO,cAAZ,mBAAuB,gBAAvB,4CAA0C,oBAAI,KAAK;AACvE,UAAM,cAAc,eAAe,KAAK,OAAO,QAAQ,GAAG,OAAO;AACjE,UAAM,EAAE,OAAO,oBAAoB,gBAAgB,IAAI,MAAM,cAAc;AAAA,MACzE,KAAK,KAAK,sBAAsB;AAAA,MAChC,SAAS;AAAA,MACT,MAAM;AAAA,QACJ;AAAA,QACA,GAAI,cAAc,EAAE,cAAc,YAAY,IAAI,CAAC;AAAA,QACnD,OAAO,KAAK;AAAA,QACZ,GAAG;AAAA,MACL;AAAA,MACA;AAAA,MACA,OAAO,KAAK,OAAO;AAAA,MACnB,uBAAuB,KAAK,uBAAuB;AAAA,MACnD,2BAA2B;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,WAAW,MAAM,KAAK;AAAA,MAC1B,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,MACA,gBAAgB;AAAA,IAClB;AAEA,UAAM,kBAAkB,MAAM,KAAK,cAAc,UAAU,WAAW;AAEtE,WAAO;AAAA,MACL,QAAQ,CAAC,eAAe;AAAA,MACxB;AAAA,MACA,UAAU;AAAA,QACR,SAAS,KAAK;AAAA,QACd,WAAW;AAAA,QACX,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,gBACZ,cACA,SACA,aACA,eACiB;AA9HrB;AA+HI,UAAM,MAAM,KAAK,sBAAsB,YAAY;AACnD,UAAM,mBACJ,oDAAe,oBAAf,YAAkC,KAAK;AACzC,UAAM,sBACJ,oDAAe,uBAAf,YAAqC,KAAK;AAE5C,aAAS,IAAI,GAAG,IAAI,iBAAiB,KAAK;AACxC,YAAM,EAAE,OAAO,eAAe,IAAI,MAAM,WAAW;AAAA,QACjD;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,KAAK,OAAO;AAAA,QACnB,uBAAuB,KAAK,uBAAuB;AAAA,QACnD,2BAA2B;AAAA,UACzB;AAAA,QACF;AAAA,MACF,CAAC;AAED,cAAQ,eAAe,OAAO;AAAA,QAC5B,KAAK;AACH,cAAI,GAAC,oBAAe,WAAf,mBAAuB,QAAO;AACjC,kBAAM,IAAI,yBAAyB;AAAA,cACjC,MAAM;AAAA,cACN,SAAS;AAAA,YACX,CAAC;AAAA,UACH;AACA,iBAAO,eAAe,OAAO;AAAA,QAC/B,KAAK;AACH,gBAAM,IAAI,yBAAyB;AAAA,YACjC,MAAM;AAAA,YACN,SAAS;AAAA,UACX,CAAC;AAAA,MACL;AACA,YAAM,MAAM,kBAAkB;AAAA,IAChC;AAEA,UAAM,IAAI;AAAA,MACR,oCAAoC,KAAK,eAAe;AAAA,IAC1D;AAAA,EACF;AAAA,EAEQ,yBAAyB;AAC/B,WAAO,+BAA+B;AAAA,MACpC,aAAa;AAAA,MACb,gBAAgB,CAAC,UAAsB;AA3K7C;AA4KQ,2BAAM,OAAO,CAAC,EAAE,QAAhB,YAAuB;AAAA;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEQ,sBAAsB,cAAuB;AACnD,WAAO,GAAG,KAAK,OAAO,OAAO,iCAC3B,sCAAgB,OAClB;AAAA,EACF;AAAA,EAEA,MAAc,cACZ,KACA,aACqB;AACrB,UAAM,EAAE,OAAO,SAAS,IAAI,MAAM,WAAW;AAAA,MAC3C;AAAA;AAAA;AAAA,MAGA;AAAA,MACA,uBAAuB,qCAAqC;AAAA,MAC5D,2BAA2B,4BAA4B;AAAA,MACvD,OAAO,KAAK,OAAO;AAAA,IACrB,CAAC;AACD,WAAO;AAAA,EACT;AACF;AAIA,IAAM,+BAA+B,EAAE,OAAO;AAAA,EAC5C,IAAI,EAAE,OAAO;AAAA,EACb,OAAO,EAAE,KAAK,CAAC,UAAU,YAAY,aAAa,QAAQ,CAAC;AAAA,EAC3D,gBAAgB,EAAE,OAAO,EAAE,QAAQ;AAAA,EACnC,QAAQ,EACL,OAAO;AAAA,IACN,OAAO,EAAE,OAAO;AAAA;AAAA,EAClB,CAAC,EACA,QAAQ;AACb,CAAC;AAED,IAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,QAAQ,EAAE;AAAA,IACR,EAAE,OAAO;AAAA,MACP,MAAM,EAAE,OAAO;AAAA,MACf,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;AAAA,MACvB,KAAK,EAAE,OAAO;AAAA,MACd,OAAO,EAAE,OAAO;AAAA,MAChB,KAAK,EACF,OAAO;AAAA,QACN,UAAU,EAAE,OAAO;AAAA,MACrB,CAAC,EACA,QAAQ;AAAA,IACb,CAAC;AAAA,EACH;AACF,CAAC;;;ADxLD,IAAM,iBAAiB;AAEhB,SAAS,WAAW,UAAgC,CAAC,GAAiB;AA5C7E;AA6CE,QAAM,UAAU,sBAAqB,aAAQ,YAAR,YAAmB,cAAc;AACtE,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;AAEA,QAAM,mBAAmB,CAAC,YACxB,IAAI,eAAe,SAAS;AAAA,IAC1B,UAAU;AAAA,IACV,SAAS,4BAAW;AAAA,IACpB,SAAS;AAAA,IACT,OAAO,QAAQ;AAAA,EACjB,CAAC;AAEH,SAAO;AAAA,IACL,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,eAAe,MAAM;AACnB,YAAM,IAAI,iBAAiB;AAAA,QACzB,SAAS;AAAA,QACT,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA,IACA,oBAAoB,MAAM;AACxB,YAAM,IAAI,iBAAiB;AAAA,QACzB,SAAS;AAAA,QACT,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEO,IAAM,OAAO,WAAW;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/luma-provider.ts","../src/luma-image-model.ts","../src/version.ts"],"sourcesContent":["import { ImageModelV2, NoSuchModelError, ProviderV2 } from '@ai-sdk/provider';\nimport {\n FetchFunction,\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { LumaImageModel } from './luma-image-model';\nimport { LumaImageModelId } from './luma-image-settings';\nimport { VERSION } from './version';\n\nexport interface LumaProviderSettings {\n /**\nLuma API key. Default value is taken from the `LUMA_API_KEY` environment\nvariable.\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 LumaProvider extends ProviderV2 {\n /**\nCreates a model for image generation.\n */\n image(modelId: LumaImageModelId): ImageModelV2;\n\n /**\nCreates a model for image generation.\n */\n imageModel(modelId: LumaImageModelId): ImageModelV2;\n}\n\nconst defaultBaseURL = 'https://api.lumalabs.ai';\n\nexport function createLuma(options: LumaProviderSettings = {}): LumaProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'LUMA_API_KEY',\n description: 'Luma',\n })}`,\n ...options.headers,\n },\n `ai-sdk/luma/${VERSION}`,\n );\n\n const createImageModel = (modelId: LumaImageModelId) =>\n new LumaImageModel(modelId, {\n provider: 'luma.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n return {\n image: createImageModel,\n imageModel: createImageModel,\n languageModel: () => {\n throw new NoSuchModelError({\n modelId: 'languageModel',\n modelType: 'languageModel',\n });\n },\n textEmbeddingModel: () => {\n throw new NoSuchModelError({\n modelId: 'textEmbeddingModel',\n modelType: 'textEmbeddingModel',\n });\n },\n };\n}\n\nexport const luma = createLuma();\n","import {\n ImageModelV2,\n ImageModelV2CallWarning,\n InvalidResponseDataError,\n} from '@ai-sdk/provider';\nimport {\n FetchFunction,\n combineHeaders,\n createBinaryResponseHandler,\n createJsonResponseHandler,\n createJsonErrorResponseHandler,\n createStatusCodeErrorResponseHandler,\n delay,\n getFromApi,\n postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport { LumaImageSettings } from './luma-image-settings';\nimport { z } from 'zod/v4';\n\nconst DEFAULT_POLL_INTERVAL_MILLIS = 500;\nconst DEFAULT_MAX_POLL_ATTEMPTS = 60000 / DEFAULT_POLL_INTERVAL_MILLIS;\n\ninterface LumaImageModelConfig {\n provider: string;\n baseURL: string;\n headers: () => Record<string, string>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport class LumaImageModel implements ImageModelV2 {\n readonly specificationVersion = 'v2';\n readonly maxImagesPerCall = 1;\n readonly pollIntervalMillis = DEFAULT_POLL_INTERVAL_MILLIS;\n readonly maxPollAttempts = DEFAULT_MAX_POLL_ATTEMPTS;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: string,\n private readonly config: LumaImageModelConfig,\n ) {}\n\n async doGenerate({\n prompt,\n n,\n size,\n aspectRatio,\n seed,\n providerOptions,\n headers,\n abortSignal,\n }: Parameters<ImageModelV2['doGenerate']>[0]): Promise<\n Awaited<ReturnType<ImageModelV2['doGenerate']>>\n > {\n const warnings: Array<ImageModelV2CallWarning> = [];\n\n if (seed != null) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'seed',\n details: 'This model does not support the `seed` option.',\n });\n }\n\n if (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 // remove non-request options from providerOptions\n const { pollIntervalMillis, maxPollAttempts, ...providerRequestOptions } =\n providerOptions.luma ?? {};\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const fullHeaders = combineHeaders(this.config.headers(), headers);\n const { value: generationResponse, responseHeaders } = await postJsonToApi({\n url: this.getLumaGenerationsUrl(),\n headers: fullHeaders,\n body: {\n prompt,\n ...(aspectRatio ? { aspect_ratio: aspectRatio } : {}),\n model: this.modelId,\n ...providerRequestOptions,\n },\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: this.createLumaErrorHandler(),\n successfulResponseHandler: createJsonResponseHandler(\n lumaGenerationResponseSchema,\n ),\n });\n\n const imageUrl = await this.pollForImageUrl(\n generationResponse.id,\n fullHeaders,\n abortSignal,\n providerOptions.luma,\n );\n\n const downloadedImage = await this.downloadImage(imageUrl, abortSignal);\n\n return {\n images: [downloadedImage],\n warnings,\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n private async pollForImageUrl(\n generationId: string,\n headers: Record<string, string | undefined>,\n abortSignal: AbortSignal | undefined,\n imageSettings?: LumaImageSettings,\n ): Promise<string> {\n const url = this.getLumaGenerationsUrl(generationId);\n const maxPollAttempts =\n imageSettings?.maxPollAttempts ?? this.maxPollAttempts;\n const pollIntervalMillis =\n imageSettings?.pollIntervalMillis ?? this.pollIntervalMillis;\n\n for (let i = 0; i < maxPollAttempts; i++) {\n const { value: statusResponse } = await getFromApi({\n url,\n headers,\n abortSignal,\n fetch: this.config.fetch,\n failedResponseHandler: this.createLumaErrorHandler(),\n successfulResponseHandler: createJsonResponseHandler(\n lumaGenerationResponseSchema,\n ),\n });\n\n switch (statusResponse.state) {\n case 'completed':\n if (!statusResponse.assets?.image) {\n throw new InvalidResponseDataError({\n data: statusResponse,\n message: `Image generation completed but no image was found.`,\n });\n }\n return statusResponse.assets.image;\n case 'failed':\n throw new InvalidResponseDataError({\n data: statusResponse,\n message: `Image generation failed.`,\n });\n }\n await delay(pollIntervalMillis);\n }\n\n throw new Error(\n `Image generation timed out after ${this.maxPollAttempts} attempts.`,\n );\n }\n\n private createLumaErrorHandler() {\n return createJsonErrorResponseHandler({\n errorSchema: lumaErrorSchema,\n errorToMessage: (error: LumaErrorData) =>\n error.detail[0].msg ?? 'Unknown error',\n });\n }\n\n private getLumaGenerationsUrl(generationId?: string) {\n return `${this.config.baseURL}/dream-machine/v1/generations/${\n generationId ?? 'image'\n }`;\n }\n\n private async downloadImage(\n url: string,\n abortSignal: AbortSignal | undefined,\n ): Promise<Uint8Array> {\n const { value: response } = await getFromApi({\n url,\n // No specific headers should be needed for this request as it's a\n // generated image provided by Luma.\n abortSignal,\n failedResponseHandler: createStatusCodeErrorResponseHandler(),\n successfulResponseHandler: createBinaryResponseHandler(),\n fetch: this.config.fetch,\n });\n return response;\n }\n}\n\n// limited version of the schema, focussed on what is needed for the implementation\n// this approach limits breakages when the API changes and increases efficiency\nconst lumaGenerationResponseSchema = z.object({\n id: z.string(),\n state: z.enum(['queued', 'dreaming', 'completed', 'failed']),\n failure_reason: z.string().nullish(),\n assets: z\n .object({\n image: z.string(), // URL of the generated image\n })\n .nullish(),\n});\n\nconst lumaErrorSchema = z.object({\n detail: z.array(\n z.object({\n type: z.string(),\n loc: z.array(z.string()),\n msg: z.string(),\n input: z.string(),\n ctx: z\n .object({\n expected: z.string(),\n })\n .nullish(),\n }),\n ),\n});\n\nexport type LumaErrorData = z.infer<typeof lumaErrorSchema>;\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":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/luma",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.10",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
22
|
"@ai-sdk/provider": "2.0.0",
|
|
23
|
-
"@ai-sdk/provider-utils": "3.0.
|
|
23
|
+
"@ai-sdk/provider-utils": "3.0.9"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/node": "20.17.24",
|