@ai-sdk/prodia 2.0.0-beta.12 → 2.0.0-beta.14
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 +15 -0
- package/README.md +2 -0
- package/dist/index.js +9 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/prodia-language-model.ts +14 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @ai-sdk/prodia
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.14
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c29a26f: feat(provider): add support for provider references and uploading files as supported per provider
|
|
8
|
+
- Updated dependencies [c29a26f]
|
|
9
|
+
- @ai-sdk/provider-utils@5.0.0-beta.10
|
|
10
|
+
- @ai-sdk/provider@4.0.0-beta.6
|
|
11
|
+
|
|
12
|
+
## 2.0.0-beta.13
|
|
13
|
+
|
|
14
|
+
### Patch Changes
|
|
15
|
+
|
|
16
|
+
- 38fc777: Add AI Gateway hint to provider READMEs
|
|
17
|
+
|
|
3
18
|
## 2.0.0-beta.12
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
The **[Prodia provider](https://ai-sdk.dev/providers/ai-sdk-providers/prodia)** for the [AI SDK](https://ai-sdk.dev/docs) adds image model support for the [Prodia API](https://docs.prodia.com/).
|
|
4
4
|
|
|
5
|
+
> **Deploying to Vercel?** With Vercel's AI Gateway you can access Prodia (and hundreds of models from other providers) — no additional packages, API keys, or extra cost. [Get started with AI Gateway](https://vercel.com/ai-gateway).
|
|
6
|
+
|
|
5
7
|
## Setup
|
|
6
8
|
|
|
7
9
|
The Prodia provider is available in the `@ai-sdk/prodia` module. You can install it with
|
package/dist/index.js
CHANGED
|
@@ -27,7 +27,7 @@ __export(index_exports, {
|
|
|
27
27
|
module.exports = __toCommonJS(index_exports);
|
|
28
28
|
|
|
29
29
|
// src/prodia-provider.ts
|
|
30
|
-
var
|
|
30
|
+
var import_provider2 = require("@ai-sdk/provider");
|
|
31
31
|
var import_provider_utils5 = require("@ai-sdk/provider-utils");
|
|
32
32
|
|
|
33
33
|
// src/prodia-image-model.ts
|
|
@@ -394,6 +394,7 @@ function createMultipartResponseHandler() {
|
|
|
394
394
|
}
|
|
395
395
|
|
|
396
396
|
// src/prodia-language-model.ts
|
|
397
|
+
var import_provider = require("@ai-sdk/provider");
|
|
397
398
|
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
398
399
|
var import_v43 = require("zod/v4");
|
|
399
400
|
var ProdiaLanguageModel = class {
|
|
@@ -479,6 +480,11 @@ var ProdiaLanguageModel = class {
|
|
|
479
480
|
if (message.role === "user") {
|
|
480
481
|
for (const part of message.content) {
|
|
481
482
|
if (part.type === "file" && part.mediaType.startsWith("image/")) {
|
|
483
|
+
if ((0, import_provider_utils3.isProviderReference)(part.data)) {
|
|
484
|
+
throw new import_provider.UnsupportedFunctionalityError({
|
|
485
|
+
functionality: "file parts with provider references"
|
|
486
|
+
});
|
|
487
|
+
}
|
|
482
488
|
if (part.data instanceof Uint8Array) {
|
|
483
489
|
imageBytes = part.data;
|
|
484
490
|
} else if (typeof part.data === "string") {
|
|
@@ -907,7 +913,7 @@ function getExtension(mediaType) {
|
|
|
907
913
|
}
|
|
908
914
|
|
|
909
915
|
// src/version.ts
|
|
910
|
-
var VERSION = true ? "2.0.0-beta.
|
|
916
|
+
var VERSION = true ? "2.0.0-beta.14" : "0.0.0-test";
|
|
911
917
|
|
|
912
918
|
// src/prodia-provider.ts
|
|
913
919
|
var defaultBaseURL = "https://inference.prodia.com/v2";
|
|
@@ -944,7 +950,7 @@ function createProdia(options = {}) {
|
|
|
944
950
|
fetch: options.fetch
|
|
945
951
|
});
|
|
946
952
|
const embeddingModel = (modelId) => {
|
|
947
|
-
throw new
|
|
953
|
+
throw new import_provider2.NoSuchModelError({
|
|
948
954
|
modelId,
|
|
949
955
|
modelType: "embeddingModel"
|
|
950
956
|
});
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/prodia-provider.ts","../src/prodia-image-model.ts","../src/prodia-api.ts","../src/prodia-language-model.ts","../src/prodia-video-model.ts","../src/version.ts"],"sourcesContent":["export type {\n ProdiaImageModelOptions,\n /** @deprecated Use `ProdiaImageModelOptions` instead. */\n ProdiaImageModelOptions as ProdiaImageProviderOptions,\n} from './prodia-image-model';\nexport type { ProdiaImageModelId } from './prodia-image-settings';\nexport type { ProdiaLanguageModelOptions } from './prodia-language-model';\nexport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\nexport type { ProdiaVideoModelOptions } from './prodia-video-model';\nexport type { ProdiaVideoModelId } from './prodia-video-model-settings';\nexport type { ProdiaProvider, ProdiaProviderSettings } from './prodia-provider';\nexport { createProdia, prodia } from './prodia-provider';\nexport { VERSION } from './version';\n","import {\n type Experimental_VideoModelV4,\n type ImageModelV4,\n type LanguageModelV4,\n NoSuchModelError,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { ProdiaImageModel } from './prodia-image-model';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\nimport { ProdiaLanguageModel } from './prodia-language-model';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\nimport { ProdiaVideoModel } from './prodia-video-model';\nimport type { ProdiaVideoModelId } from './prodia-video-model-settings';\nimport { VERSION } from './version';\n\nexport interface ProdiaProviderSettings {\n /**\n * Prodia API key. Default value is taken from the `PRODIA_TOKEN` environment variable.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls. Defaults to `https://inference.prodia.com/v2`.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface ProdiaProvider extends ProviderV4 {\n /**\n * Creates a language model for multimodal generation (img2img with text+image output).\n */\n languageModel(modelId: ProdiaLanguageModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: ProdiaImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: ProdiaImageModelId): ImageModelV4;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: ProdiaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: ProdiaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nconst defaultBaseURL = 'https://inference.prodia.com/v2';\n\nexport function createProdia(\n options: ProdiaProviderSettings = {},\n): ProdiaProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'PRODIA_TOKEN',\n description: 'Prodia',\n })}`,\n ...options.headers,\n },\n `ai-sdk/prodia/${VERSION}`,\n );\n\n const createImageModel = (modelId: ProdiaImageModelId) =>\n new ProdiaImageModel(modelId, {\n provider: 'prodia.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createLanguageModel = (modelId: ProdiaLanguageModelId) =>\n new ProdiaLanguageModel(modelId, {\n provider: 'prodia.language',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createVideoModel = (modelId: ProdiaVideoModelId) =>\n new ProdiaVideoModel(modelId, {\n provider: 'prodia.video',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n });\n };\n\n return {\n specificationVersion: 'v4',\n languageModel: createLanguageModel,\n imageModel: createImageModel,\n image: createImageModel,\n videoModel: createVideoModel,\n video: createVideoModel,\n embeddingModel,\n textEmbeddingModel: embeddingModel,\n };\n}\n\nexport const prodia = createProdia();\n","import type { ImageModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\n\nexport class ProdiaImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaImageModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n private async getArgs({\n prompt,\n size,\n seed,\n providerOptions,\n }: Parameters<ImageModelV4['doGenerate']>[0]) {\n const warnings: Array<SharedV4Warning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions,\n schema: prodiaImageModelOptionsSchema,\n });\n\n let width: number | undefined;\n let height: number | undefined;\n if (size) {\n const [widthStr, heightStr] = size.split('x');\n width = Number(widthStr);\n height = Number(heightStr);\n if (\n !widthStr ||\n !heightStr ||\n !Number.isFinite(width) ||\n !Number.isFinite(height)\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details: `Invalid size format: ${size}. Expected format: WIDTHxHEIGHT (e.g., 1024x1024)`,\n });\n width = undefined;\n height = undefined;\n }\n }\n\n const jobConfig: Record<string, unknown> = {\n prompt,\n };\n\n if (prodiaOptions?.width !== undefined) {\n jobConfig.width = prodiaOptions.width;\n } else if (width !== undefined) {\n jobConfig.width = width;\n }\n\n if (prodiaOptions?.height !== undefined) {\n jobConfig.height = prodiaOptions.height;\n } else if (height !== undefined) {\n jobConfig.height = height;\n }\n\n if (seed !== undefined) {\n jobConfig.seed = seed;\n }\n if (prodiaOptions?.steps !== undefined) {\n jobConfig.steps = prodiaOptions.steps;\n }\n if (prodiaOptions?.stylePreset !== undefined) {\n jobConfig.style_preset = prodiaOptions.stylePreset;\n }\n if (prodiaOptions?.loras !== undefined && prodiaOptions.loras.length > 0) {\n jobConfig.loras = prodiaOptions.loras;\n }\n if (prodiaOptions?.progressive !== undefined) {\n jobConfig.progressive = prodiaOptions.progressive;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n return { body, warnings };\n }\n\n async doGenerate(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const { body, warnings } = await this.getArgs(options);\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n const { value: multipartResult, responseHeaders } = await postToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; image/png',\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { jobResult, imageBytes } = multipartResult;\n\n return {\n images: [imageBytes],\n warnings,\n providerMetadata: {\n prodia: {\n images: [buildProdiaProviderMetadata(jobResult)],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n}\n\nconst stylePresets = [\n '3d-model',\n 'analog-film',\n 'anime',\n 'cinematic',\n 'comic-book',\n 'digital-art',\n 'enhance',\n 'fantasy-art',\n 'isometric',\n 'line-art',\n 'low-poly',\n 'neon-punk',\n 'origami',\n 'photographic',\n 'pixel-art',\n 'texture',\n 'craft-clay',\n] as const;\n\nexport const prodiaImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Amount of computational iterations to run. More is typically higher quality.\n */\n steps: z.number().int().min(1).max(4).optional(),\n /**\n * Width of the output image in pixels.\n */\n width: z.number().int().min(256).max(1920).optional(),\n /**\n * Height of the output image in pixels.\n */\n height: z.number().int().min(256).max(1920).optional(),\n /**\n * Apply a visual theme to your output image.\n */\n stylePreset: z.enum(stylePresets).optional(),\n /**\n * Augment the output with a LoRa model.\n */\n loras: z.array(z.string()).max(3).optional(),\n /**\n * When using JPEG output, return a progressive JPEG.\n */\n progressive: z.boolean().optional(),\n }),\n ),\n);\n\nexport type ProdiaImageModelOptions = InferSchema<\n typeof prodiaImageModelOptionsSchema\n>;\n\ninterface MultipartResult {\n jobResult: ProdiaJobResult;\n imageBytes: Uint8Array;\n}\n\nfunction createMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: MultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let imageBytes: Uint8Array | undefined;\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n imageBytes = part.body;\n } else if (partContentType.startsWith('image/')) {\n imageBytes = part.body;\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n if (!imageBytes) {\n throw new Error('Prodia multipart response missing output image');\n }\n\n return {\n value: { jobResult, imageBytes },\n responseHeaders,\n };\n };\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport type { FetchFunction, Resolvable } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport interface ProdiaModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport const prodiaJobResultSchema = z.object({\n id: z.string(),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n expires_at: z.string().optional(),\n state: z\n .object({\n current: z.string(),\n })\n .optional(),\n config: z\n .object({\n seed: z.number().optional(),\n })\n .passthrough()\n .optional(),\n metrics: z\n .object({\n elapsed: z.number().optional(),\n ips: z.number().optional(),\n })\n .optional(),\n price: z\n .object({\n product: z.string(),\n dollars: z.number(),\n })\n .nullish(),\n});\n\nexport type ProdiaJobResult = z.infer<typeof prodiaJobResultSchema>;\n\nexport function buildProdiaProviderMetadata(jobResult: ProdiaJobResult) {\n return {\n jobId: jobResult.id,\n ...(jobResult.config?.seed != null && {\n seed: jobResult.config.seed,\n }),\n ...(jobResult.metrics?.elapsed != null && {\n elapsed: jobResult.metrics.elapsed,\n }),\n ...(jobResult.metrics?.ips != null && {\n iterationsPerSecond: jobResult.metrics.ips,\n }),\n ...(jobResult.created_at != null && {\n createdAt: jobResult.created_at,\n }),\n ...(jobResult.updated_at != null && {\n updatedAt: jobResult.updated_at,\n }),\n ...(jobResult.price?.dollars != null && {\n dollars: jobResult.price.dollars,\n }),\n };\n}\n\nexport interface MultipartPart {\n headers: Record<string, string>;\n body: Uint8Array;\n}\n\nexport function parseMultipart(\n data: Uint8Array,\n boundary: string,\n): MultipartPart[] {\n const parts: MultipartPart[] = [];\n const boundaryBytes = new TextEncoder().encode(`--${boundary}`);\n const endBoundaryBytes = new TextEncoder().encode(`--${boundary}--`);\n\n const positions: number[] = [];\n for (let i = 0; i <= data.length - boundaryBytes.length; i++) {\n let match = true;\n for (let j = 0; j < boundaryBytes.length; j++) {\n if (data[i + j] !== boundaryBytes[j]) {\n match = false;\n break;\n }\n }\n if (match) {\n positions.push(i);\n }\n }\n\n for (let i = 0; i < positions.length - 1; i++) {\n const start = positions[i] + boundaryBytes.length;\n const end = positions[i + 1];\n\n let isEndBoundary = true;\n for (let j = 0; j < endBoundaryBytes.length && isEndBoundary; j++) {\n if (data[positions[i] + j] !== endBoundaryBytes[j]) {\n isEndBoundary = false;\n }\n }\n if (\n isEndBoundary &&\n positions[i] + endBoundaryBytes.length <= data.length\n ) {\n continue;\n }\n\n let partStart = start;\n if (data[partStart] === 0x0d && data[partStart + 1] === 0x0a) {\n partStart += 2;\n } else if (data[partStart] === 0x0a) {\n partStart += 1;\n }\n\n let partEnd = end;\n if (data[partEnd - 2] === 0x0d && data[partEnd - 1] === 0x0a) {\n partEnd -= 2;\n } else if (data[partEnd - 1] === 0x0a) {\n partEnd -= 1;\n }\n\n const partData = data.slice(partStart, partEnd);\n\n let headerEnd = -1;\n for (let j = 0; j < partData.length - 3; j++) {\n if (\n partData[j] === 0x0d &&\n partData[j + 1] === 0x0a &&\n partData[j + 2] === 0x0d &&\n partData[j + 3] === 0x0a\n ) {\n headerEnd = j;\n break;\n }\n if (partData[j] === 0x0a && partData[j + 1] === 0x0a) {\n headerEnd = j;\n break;\n }\n }\n\n if (headerEnd === -1) {\n continue;\n }\n\n const headerBytes = partData.slice(0, headerEnd);\n const headerStr = new TextDecoder().decode(headerBytes);\n const headers: Record<string, string> = {};\n for (const line of headerStr.split(/\\r?\\n/)) {\n const colonIdx = line.indexOf(':');\n if (colonIdx > 0) {\n const key = line.slice(0, colonIdx).trim().toLowerCase();\n const value = line.slice(colonIdx + 1).trim();\n headers[key] = value;\n }\n }\n\n let bodyStart = headerEnd + 2;\n if (partData[headerEnd] === 0x0d) {\n bodyStart = headerEnd + 4;\n }\n const body = partData.slice(bodyStart);\n\n parts.push({ headers, body });\n }\n\n return parts;\n}\n\nconst prodiaErrorSchema = z.object({\n message: z.string().optional(),\n detail: z.unknown().optional(),\n error: z.string().optional(),\n});\n\nexport const prodiaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: prodiaErrorSchema,\n errorToMessage: error => {\n const parsed = prodiaErrorSchema.safeParse(error);\n if (!parsed.success) return 'Unknown Prodia error';\n const { message, detail, error: errorField } = parsed.data;\n if (typeof detail === 'string') return detail;\n if (detail != null) {\n try {\n return JSON.stringify(detail);\n } catch {\n // ignore\n }\n }\n return errorField ?? message ?? 'Unknown Prodia error';\n },\n});\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4StreamPart,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n isCustomReasoning,\n convertBase64ToUint8Array,\n generateId,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\n\nexport class ProdiaLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly supportedUrls = {};\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaLanguageModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n async doGenerate(options: LanguageModelV4CallOptions) {\n const warnings: Array<SharedV4Warning> = [];\n\n // Warn about unsupported LLM features\n if (options.temperature !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'temperature' });\n }\n if (options.topP !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'topP' });\n }\n if (options.topK !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (options.maxOutputTokens !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'maxOutputTokens' });\n }\n if (options.stopSequences !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n if (options.presencePenalty !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'presencePenalty' });\n }\n if (options.frequencyPenalty !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n if (options.tools !== undefined && options.tools.length > 0) {\n warnings.push({ type: 'unsupported', feature: 'tools' });\n }\n if (options.toolChoice !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'toolChoice' });\n }\n if (\n options.responseFormat !== undefined &&\n options.responseFormat.type !== 'text'\n ) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n if (isCustomReasoning(options.reasoning)) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: 'This provider does not support reasoning configuration.',\n });\n }\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaLanguageModelOptionsSchema,\n });\n\n // Extract text prompt from messages\n let prompt = '';\n let systemMessage = '';\n for (const message of options.prompt) {\n if (message.role === 'system') {\n systemMessage = message.content;\n }\n }\n // Get text from the last user message\n for (let i = options.prompt.length - 1; i >= 0; i--) {\n const message = options.prompt[i];\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'text') {\n prompt += (prompt ? '\\n' : '') + part.text;\n }\n }\n break;\n }\n }\n if (systemMessage) {\n prompt = systemMessage + '\\n' + prompt;\n }\n\n // Extract image from user messages\n let imageBytes: Uint8Array | undefined;\n let imageMediaType = 'image/png';\n for (let i = options.prompt.length - 1; i >= 0; i--) {\n const message = options.prompt[i];\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'file' && part.mediaType.startsWith('image/')) {\n if (part.data instanceof Uint8Array) {\n imageBytes = part.data;\n } else if (typeof part.data === 'string') {\n // base64 encoded\n imageBytes = convertBase64ToUint8Array(part.data);\n } else if (part.data instanceof URL) {\n const fetchFn = this.config.fetch ?? globalThis.fetch;\n const response = await fetchFn(part.data.toString());\n const arrayBuffer = await response.arrayBuffer();\n imageBytes = new Uint8Array(arrayBuffer);\n }\n imageMediaType = part.mediaType;\n break;\n }\n }\n break;\n }\n }\n\n const jobConfig: Record<string, unknown> = {\n prompt,\n include_messages: true,\n };\n\n if (prodiaOptions?.aspectRatio !== undefined) {\n jobConfig.aspect_ratio = prodiaOptions.aspectRatio;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n // Always use multipart form-data since img2img requires image input\n const formData = new FormData();\n formData.append(\n 'job',\n new Blob([JSON.stringify(body)], { type: 'application/json' }),\n 'job.json',\n );\n if (imageBytes) {\n const ext =\n imageMediaType === 'image/png'\n ? '.png'\n : imageMediaType === 'image/jpeg'\n ? '.jpg'\n : imageMediaType === 'image/webp'\n ? '.webp'\n : '';\n formData.append(\n 'input',\n new Blob([imageBytes], { type: imageMediaType }),\n 'input' + ext,\n );\n }\n\n const { value: multipartResult, responseHeaders } = await postFormDataToApi(\n {\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data',\n },\n formData,\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createLanguageMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n },\n );\n\n const { jobResult, textContent, fileContent } = multipartResult;\n\n const content: Array<LanguageModelV4Content> = [];\n if (textContent !== undefined) {\n content.push({ type: 'text', text: textContent });\n }\n for (const file of fileContent) {\n content.push({\n type: 'file',\n mediaType: file.mediaType,\n data: file.data,\n });\n }\n\n return {\n content,\n finishReason: { unified: 'stop' as const, raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings,\n providerMetadata: {\n prodia: buildProdiaProviderMetadata(jobResult),\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n async doStream(options: LanguageModelV4CallOptions) {\n const result = await this.doGenerate(options);\n\n const stream = new ReadableStream<LanguageModelV4StreamPart>({\n start(controller) {\n controller.enqueue({\n type: 'stream-start',\n warnings: result.warnings,\n });\n\n controller.enqueue({\n type: 'response-metadata',\n modelId: result.response?.modelId,\n timestamp: result.response?.timestamp,\n });\n\n for (const part of result.content) {\n if (part.type === 'text') {\n const id = generateId();\n controller.enqueue({ type: 'text-start', id });\n controller.enqueue({\n type: 'text-delta',\n id,\n delta: part.text,\n });\n controller.enqueue({ type: 'text-end', id });\n } else if (part.type === 'file') {\n controller.enqueue({\n type: 'file',\n mediaType: part.mediaType,\n data: part.data,\n });\n }\n }\n\n controller.enqueue({\n type: 'finish',\n usage: result.usage,\n finishReason: result.finishReason,\n providerMetadata: result.providerMetadata,\n });\n\n controller.close();\n },\n });\n\n return {\n stream,\n response: {\n headers: result.response?.headers,\n },\n };\n }\n}\n\nexport const prodiaLanguageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Aspect ratio for the output image.\n */\n aspectRatio: z\n .enum([\n '1:1',\n '2:3',\n '3:2',\n '4:5',\n '5:4',\n '4:7',\n '7:4',\n '9:16',\n '16:9',\n '9:21',\n '21:9',\n ])\n .optional(),\n }),\n ),\n);\n\nexport type ProdiaLanguageModelOptions = InferSchema<\n typeof prodiaLanguageModelOptionsSchema\n>;\n\ninterface LanguageMultipartResult {\n jobResult: ProdiaJobResult;\n textContent: string | undefined;\n fileContent: Array<{ mediaType: string; data: Uint8Array }>;\n}\n\nfunction createLanguageMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: LanguageMultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let textContent: string | undefined;\n const fileContent: Array<{ mediaType: string; data: Uint8Array }> = [];\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n if (\n partContentType.startsWith('text/') ||\n contentDisposition.includes('.txt')\n ) {\n textContent = new TextDecoder().decode(part.body);\n } else if (partContentType.startsWith('image/')) {\n fileContent.push({\n mediaType: partContentType,\n data: part.body,\n });\n }\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n\n return {\n value: { jobResult, textContent, fileContent },\n responseHeaders,\n };\n };\n}\n","import type {\n Experimental_VideoModelV4,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n postToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaVideoModelId } from './prodia-video-model-settings';\n\nexport class ProdiaVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaVideoModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const warnings: Array<SharedV4Warning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaVideoModelOptionsSchema,\n });\n\n const jobConfig: Record<string, unknown> = {};\n\n if (options.prompt !== undefined) {\n jobConfig.prompt = options.prompt;\n }\n if (options.seed !== undefined) {\n jobConfig.seed = options.seed;\n }\n if (prodiaOptions?.resolution !== undefined) {\n jobConfig.resolution = prodiaOptions.resolution;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n let multipartResult: {\n jobResult: ProdiaJobResult;\n videoBytes: Uint8Array;\n videoMediaType: string;\n };\n let responseHeaders: Record<string, string> | undefined;\n\n if (options.image) {\n // img2vid: multipart form-data request\n const imageData = await resolveVideoFileData(\n options.image,\n this.config.fetch,\n );\n const formData = new FormData();\n formData.append(\n 'job',\n new Blob([JSON.stringify(body)], { type: 'application/json' }),\n 'job.json',\n );\n formData.append(\n 'input',\n new Blob([imageData.bytes], { type: imageData.mediaType }),\n 'input' + getExtension(imageData.mediaType),\n );\n\n const result = await postFormDataToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; video/mp4',\n },\n formData,\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createVideoMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n multipartResult = result.value;\n responseHeaders = result.responseHeaders;\n } else {\n // txt2vid: JSON request\n const result = await postToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; video/mp4',\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createVideoMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n multipartResult = result.value;\n responseHeaders = result.responseHeaders;\n }\n\n const { jobResult, videoBytes, videoMediaType } = multipartResult;\n\n return {\n videos: [\n {\n type: 'binary',\n data: videoBytes,\n mediaType: videoMediaType,\n },\n ],\n warnings,\n providerMetadata: {\n prodia: {\n videos: [buildProdiaProviderMetadata(jobResult)],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n}\n\nexport const prodiaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Video resolution (e.g. \"480p\", \"720p\").\n */\n resolution: z.string().optional(),\n }),\n ),\n);\n\nexport type ProdiaVideoModelOptions = InferSchema<\n typeof prodiaVideoModelOptionsSchema\n>;\n\ninterface VideoMultipartResult {\n jobResult: ProdiaJobResult;\n videoBytes: Uint8Array;\n videoMediaType: string;\n}\n\nfunction createVideoMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: VideoMultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let videoBytes: Uint8Array | undefined;\n let videoMediaType = 'video/mp4';\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n videoBytes = part.body;\n if (partContentType.startsWith('video/')) {\n videoMediaType = partContentType;\n }\n } else if (partContentType.startsWith('video/')) {\n videoBytes = part.body;\n videoMediaType = partContentType;\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n if (!videoBytes) {\n throw new Error('Prodia multipart response missing output video');\n }\n\n return {\n value: { jobResult, videoBytes, videoMediaType },\n responseHeaders,\n };\n };\n}\n\nasync function resolveVideoFileData(\n file: NonNullable<\n Parameters<Experimental_VideoModelV4['doGenerate']>[0]['image']\n >,\n fetchFunction?: FetchFunction,\n): Promise<{ bytes: Uint8Array; mediaType: string }> {\n if (file.type === 'file') {\n const data =\n typeof file.data === 'string'\n ? convertBase64ToUint8Array(file.data)\n : file.data;\n return { bytes: data, mediaType: file.mediaType };\n }\n // URL type - fetch the data\n const response = await (fetchFunction ?? globalThis.fetch)(file.url);\n const arrayBuffer = await response.arrayBuffer();\n const mediaType =\n response.headers.get('content-type') ?? 'application/octet-stream';\n return { bytes: new Uint8Array(arrayBuffer), mediaType };\n}\n\nfunction getExtension(mediaType: string): string {\n const map: Record<string, string> = {\n 'image/png': '.png',\n 'image/jpeg': '.jpg',\n 'image/webp': '.webp',\n 'video/mp4': '.mp4',\n 'video/webm': '.webm',\n };\n return map[mediaType] ?? '';\n}\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_utils","import_provider_utils","import_v4","import_provider_utils","import_v4","_a","import_provider_utils","import_v4"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/prodia-provider.ts","../src/prodia-image-model.ts","../src/prodia-api.ts","../src/prodia-language-model.ts","../src/prodia-video-model.ts","../src/version.ts"],"sourcesContent":["export type {\n ProdiaImageModelOptions,\n /** @deprecated Use `ProdiaImageModelOptions` instead. */\n ProdiaImageModelOptions as ProdiaImageProviderOptions,\n} from './prodia-image-model';\nexport type { ProdiaImageModelId } from './prodia-image-settings';\nexport type { ProdiaLanguageModelOptions } from './prodia-language-model';\nexport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\nexport type { ProdiaVideoModelOptions } from './prodia-video-model';\nexport type { ProdiaVideoModelId } from './prodia-video-model-settings';\nexport type { ProdiaProvider, ProdiaProviderSettings } from './prodia-provider';\nexport { createProdia, prodia } from './prodia-provider';\nexport { VERSION } from './version';\n","import {\n type Experimental_VideoModelV4,\n type ImageModelV4,\n type LanguageModelV4,\n NoSuchModelError,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { ProdiaImageModel } from './prodia-image-model';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\nimport { ProdiaLanguageModel } from './prodia-language-model';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\nimport { ProdiaVideoModel } from './prodia-video-model';\nimport type { ProdiaVideoModelId } from './prodia-video-model-settings';\nimport { VERSION } from './version';\n\nexport interface ProdiaProviderSettings {\n /**\n * Prodia API key. Default value is taken from the `PRODIA_TOKEN` environment variable.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls. Defaults to `https://inference.prodia.com/v2`.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface ProdiaProvider extends ProviderV4 {\n /**\n * Creates a language model for multimodal generation (img2img with text+image output).\n */\n languageModel(modelId: ProdiaLanguageModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: ProdiaImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: ProdiaImageModelId): ImageModelV4;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: ProdiaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: ProdiaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nconst defaultBaseURL = 'https://inference.prodia.com/v2';\n\nexport function createProdia(\n options: ProdiaProviderSettings = {},\n): ProdiaProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'PRODIA_TOKEN',\n description: 'Prodia',\n })}`,\n ...options.headers,\n },\n `ai-sdk/prodia/${VERSION}`,\n );\n\n const createImageModel = (modelId: ProdiaImageModelId) =>\n new ProdiaImageModel(modelId, {\n provider: 'prodia.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createLanguageModel = (modelId: ProdiaLanguageModelId) =>\n new ProdiaLanguageModel(modelId, {\n provider: 'prodia.language',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createVideoModel = (modelId: ProdiaVideoModelId) =>\n new ProdiaVideoModel(modelId, {\n provider: 'prodia.video',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n });\n };\n\n return {\n specificationVersion: 'v4',\n languageModel: createLanguageModel,\n imageModel: createImageModel,\n image: createImageModel,\n videoModel: createVideoModel,\n video: createVideoModel,\n embeddingModel,\n textEmbeddingModel: embeddingModel,\n };\n}\n\nexport const prodia = createProdia();\n","import type { ImageModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\n\nexport class ProdiaImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaImageModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n private async getArgs({\n prompt,\n size,\n seed,\n providerOptions,\n }: Parameters<ImageModelV4['doGenerate']>[0]) {\n const warnings: Array<SharedV4Warning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions,\n schema: prodiaImageModelOptionsSchema,\n });\n\n let width: number | undefined;\n let height: number | undefined;\n if (size) {\n const [widthStr, heightStr] = size.split('x');\n width = Number(widthStr);\n height = Number(heightStr);\n if (\n !widthStr ||\n !heightStr ||\n !Number.isFinite(width) ||\n !Number.isFinite(height)\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details: `Invalid size format: ${size}. Expected format: WIDTHxHEIGHT (e.g., 1024x1024)`,\n });\n width = undefined;\n height = undefined;\n }\n }\n\n const jobConfig: Record<string, unknown> = {\n prompt,\n };\n\n if (prodiaOptions?.width !== undefined) {\n jobConfig.width = prodiaOptions.width;\n } else if (width !== undefined) {\n jobConfig.width = width;\n }\n\n if (prodiaOptions?.height !== undefined) {\n jobConfig.height = prodiaOptions.height;\n } else if (height !== undefined) {\n jobConfig.height = height;\n }\n\n if (seed !== undefined) {\n jobConfig.seed = seed;\n }\n if (prodiaOptions?.steps !== undefined) {\n jobConfig.steps = prodiaOptions.steps;\n }\n if (prodiaOptions?.stylePreset !== undefined) {\n jobConfig.style_preset = prodiaOptions.stylePreset;\n }\n if (prodiaOptions?.loras !== undefined && prodiaOptions.loras.length > 0) {\n jobConfig.loras = prodiaOptions.loras;\n }\n if (prodiaOptions?.progressive !== undefined) {\n jobConfig.progressive = prodiaOptions.progressive;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n return { body, warnings };\n }\n\n async doGenerate(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const { body, warnings } = await this.getArgs(options);\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n const { value: multipartResult, responseHeaders } = await postToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; image/png',\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { jobResult, imageBytes } = multipartResult;\n\n return {\n images: [imageBytes],\n warnings,\n providerMetadata: {\n prodia: {\n images: [buildProdiaProviderMetadata(jobResult)],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n}\n\nconst stylePresets = [\n '3d-model',\n 'analog-film',\n 'anime',\n 'cinematic',\n 'comic-book',\n 'digital-art',\n 'enhance',\n 'fantasy-art',\n 'isometric',\n 'line-art',\n 'low-poly',\n 'neon-punk',\n 'origami',\n 'photographic',\n 'pixel-art',\n 'texture',\n 'craft-clay',\n] as const;\n\nexport const prodiaImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Amount of computational iterations to run. More is typically higher quality.\n */\n steps: z.number().int().min(1).max(4).optional(),\n /**\n * Width of the output image in pixels.\n */\n width: z.number().int().min(256).max(1920).optional(),\n /**\n * Height of the output image in pixels.\n */\n height: z.number().int().min(256).max(1920).optional(),\n /**\n * Apply a visual theme to your output image.\n */\n stylePreset: z.enum(stylePresets).optional(),\n /**\n * Augment the output with a LoRa model.\n */\n loras: z.array(z.string()).max(3).optional(),\n /**\n * When using JPEG output, return a progressive JPEG.\n */\n progressive: z.boolean().optional(),\n }),\n ),\n);\n\nexport type ProdiaImageModelOptions = InferSchema<\n typeof prodiaImageModelOptionsSchema\n>;\n\ninterface MultipartResult {\n jobResult: ProdiaJobResult;\n imageBytes: Uint8Array;\n}\n\nfunction createMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: MultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let imageBytes: Uint8Array | undefined;\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n imageBytes = part.body;\n } else if (partContentType.startsWith('image/')) {\n imageBytes = part.body;\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n if (!imageBytes) {\n throw new Error('Prodia multipart response missing output image');\n }\n\n return {\n value: { jobResult, imageBytes },\n responseHeaders,\n };\n };\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport type { FetchFunction, Resolvable } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport interface ProdiaModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport const prodiaJobResultSchema = z.object({\n id: z.string(),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n expires_at: z.string().optional(),\n state: z\n .object({\n current: z.string(),\n })\n .optional(),\n config: z\n .object({\n seed: z.number().optional(),\n })\n .passthrough()\n .optional(),\n metrics: z\n .object({\n elapsed: z.number().optional(),\n ips: z.number().optional(),\n })\n .optional(),\n price: z\n .object({\n product: z.string(),\n dollars: z.number(),\n })\n .nullish(),\n});\n\nexport type ProdiaJobResult = z.infer<typeof prodiaJobResultSchema>;\n\nexport function buildProdiaProviderMetadata(jobResult: ProdiaJobResult) {\n return {\n jobId: jobResult.id,\n ...(jobResult.config?.seed != null && {\n seed: jobResult.config.seed,\n }),\n ...(jobResult.metrics?.elapsed != null && {\n elapsed: jobResult.metrics.elapsed,\n }),\n ...(jobResult.metrics?.ips != null && {\n iterationsPerSecond: jobResult.metrics.ips,\n }),\n ...(jobResult.created_at != null && {\n createdAt: jobResult.created_at,\n }),\n ...(jobResult.updated_at != null && {\n updatedAt: jobResult.updated_at,\n }),\n ...(jobResult.price?.dollars != null && {\n dollars: jobResult.price.dollars,\n }),\n };\n}\n\nexport interface MultipartPart {\n headers: Record<string, string>;\n body: Uint8Array;\n}\n\nexport function parseMultipart(\n data: Uint8Array,\n boundary: string,\n): MultipartPart[] {\n const parts: MultipartPart[] = [];\n const boundaryBytes = new TextEncoder().encode(`--${boundary}`);\n const endBoundaryBytes = new TextEncoder().encode(`--${boundary}--`);\n\n const positions: number[] = [];\n for (let i = 0; i <= data.length - boundaryBytes.length; i++) {\n let match = true;\n for (let j = 0; j < boundaryBytes.length; j++) {\n if (data[i + j] !== boundaryBytes[j]) {\n match = false;\n break;\n }\n }\n if (match) {\n positions.push(i);\n }\n }\n\n for (let i = 0; i < positions.length - 1; i++) {\n const start = positions[i] + boundaryBytes.length;\n const end = positions[i + 1];\n\n let isEndBoundary = true;\n for (let j = 0; j < endBoundaryBytes.length && isEndBoundary; j++) {\n if (data[positions[i] + j] !== endBoundaryBytes[j]) {\n isEndBoundary = false;\n }\n }\n if (\n isEndBoundary &&\n positions[i] + endBoundaryBytes.length <= data.length\n ) {\n continue;\n }\n\n let partStart = start;\n if (data[partStart] === 0x0d && data[partStart + 1] === 0x0a) {\n partStart += 2;\n } else if (data[partStart] === 0x0a) {\n partStart += 1;\n }\n\n let partEnd = end;\n if (data[partEnd - 2] === 0x0d && data[partEnd - 1] === 0x0a) {\n partEnd -= 2;\n } else if (data[partEnd - 1] === 0x0a) {\n partEnd -= 1;\n }\n\n const partData = data.slice(partStart, partEnd);\n\n let headerEnd = -1;\n for (let j = 0; j < partData.length - 3; j++) {\n if (\n partData[j] === 0x0d &&\n partData[j + 1] === 0x0a &&\n partData[j + 2] === 0x0d &&\n partData[j + 3] === 0x0a\n ) {\n headerEnd = j;\n break;\n }\n if (partData[j] === 0x0a && partData[j + 1] === 0x0a) {\n headerEnd = j;\n break;\n }\n }\n\n if (headerEnd === -1) {\n continue;\n }\n\n const headerBytes = partData.slice(0, headerEnd);\n const headerStr = new TextDecoder().decode(headerBytes);\n const headers: Record<string, string> = {};\n for (const line of headerStr.split(/\\r?\\n/)) {\n const colonIdx = line.indexOf(':');\n if (colonIdx > 0) {\n const key = line.slice(0, colonIdx).trim().toLowerCase();\n const value = line.slice(colonIdx + 1).trim();\n headers[key] = value;\n }\n }\n\n let bodyStart = headerEnd + 2;\n if (partData[headerEnd] === 0x0d) {\n bodyStart = headerEnd + 4;\n }\n const body = partData.slice(bodyStart);\n\n parts.push({ headers, body });\n }\n\n return parts;\n}\n\nconst prodiaErrorSchema = z.object({\n message: z.string().optional(),\n detail: z.unknown().optional(),\n error: z.string().optional(),\n});\n\nexport const prodiaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: prodiaErrorSchema,\n errorToMessage: error => {\n const parsed = prodiaErrorSchema.safeParse(error);\n if (!parsed.success) return 'Unknown Prodia error';\n const { message, detail, error: errorField } = parsed.data;\n if (typeof detail === 'string') return detail;\n if (detail != null) {\n try {\n return JSON.stringify(detail);\n } catch {\n // ignore\n }\n }\n return errorField ?? message ?? 'Unknown Prodia error';\n },\n});\n","import {\n type LanguageModelV4,\n type LanguageModelV4CallOptions,\n type LanguageModelV4Content,\n type LanguageModelV4StreamPart,\n type SharedV4Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n isCustomReasoning,\n isProviderReference,\n convertBase64ToUint8Array,\n generateId,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\n\nexport class ProdiaLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly supportedUrls = {};\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaLanguageModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n async doGenerate(options: LanguageModelV4CallOptions) {\n const warnings: Array<SharedV4Warning> = [];\n\n // Warn about unsupported LLM features\n if (options.temperature !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'temperature' });\n }\n if (options.topP !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'topP' });\n }\n if (options.topK !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (options.maxOutputTokens !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'maxOutputTokens' });\n }\n if (options.stopSequences !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n if (options.presencePenalty !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'presencePenalty' });\n }\n if (options.frequencyPenalty !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n if (options.tools !== undefined && options.tools.length > 0) {\n warnings.push({ type: 'unsupported', feature: 'tools' });\n }\n if (options.toolChoice !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'toolChoice' });\n }\n if (\n options.responseFormat !== undefined &&\n options.responseFormat.type !== 'text'\n ) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n if (isCustomReasoning(options.reasoning)) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: 'This provider does not support reasoning configuration.',\n });\n }\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaLanguageModelOptionsSchema,\n });\n\n // Extract text prompt from messages\n let prompt = '';\n let systemMessage = '';\n for (const message of options.prompt) {\n if (message.role === 'system') {\n systemMessage = message.content;\n }\n }\n // Get text from the last user message\n for (let i = options.prompt.length - 1; i >= 0; i--) {\n const message = options.prompt[i];\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'text') {\n prompt += (prompt ? '\\n' : '') + part.text;\n }\n }\n break;\n }\n }\n if (systemMessage) {\n prompt = systemMessage + '\\n' + prompt;\n }\n\n // Extract image from user messages\n let imageBytes: Uint8Array | undefined;\n let imageMediaType = 'image/png';\n for (let i = options.prompt.length - 1; i >= 0; i--) {\n const message = options.prompt[i];\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'file' && part.mediaType.startsWith('image/')) {\n if (isProviderReference(part.data)) {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n\n if (part.data instanceof Uint8Array) {\n imageBytes = part.data;\n } else if (typeof part.data === 'string') {\n // base64 encoded\n imageBytes = convertBase64ToUint8Array(part.data);\n } else if (part.data instanceof URL) {\n const fetchFn = this.config.fetch ?? globalThis.fetch;\n const response = await fetchFn(part.data.toString());\n const arrayBuffer = await response.arrayBuffer();\n imageBytes = new Uint8Array(arrayBuffer);\n }\n imageMediaType = part.mediaType;\n break;\n }\n }\n break;\n }\n }\n\n const jobConfig: Record<string, unknown> = {\n prompt,\n include_messages: true,\n };\n\n if (prodiaOptions?.aspectRatio !== undefined) {\n jobConfig.aspect_ratio = prodiaOptions.aspectRatio;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n // Always use multipart form-data since img2img requires image input\n const formData = new FormData();\n formData.append(\n 'job',\n new Blob([JSON.stringify(body)], { type: 'application/json' }),\n 'job.json',\n );\n if (imageBytes) {\n const ext =\n imageMediaType === 'image/png'\n ? '.png'\n : imageMediaType === 'image/jpeg'\n ? '.jpg'\n : imageMediaType === 'image/webp'\n ? '.webp'\n : '';\n formData.append(\n 'input',\n new Blob([imageBytes], { type: imageMediaType }),\n 'input' + ext,\n );\n }\n\n const { value: multipartResult, responseHeaders } = await postFormDataToApi(\n {\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data',\n },\n formData,\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createLanguageMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n },\n );\n\n const { jobResult, textContent, fileContent } = multipartResult;\n\n const content: Array<LanguageModelV4Content> = [];\n if (textContent !== undefined) {\n content.push({ type: 'text', text: textContent });\n }\n for (const file of fileContent) {\n content.push({\n type: 'file',\n mediaType: file.mediaType,\n data: file.data,\n });\n }\n\n return {\n content,\n finishReason: { unified: 'stop' as const, raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings,\n providerMetadata: {\n prodia: buildProdiaProviderMetadata(jobResult),\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n async doStream(options: LanguageModelV4CallOptions) {\n const result = await this.doGenerate(options);\n\n const stream = new ReadableStream<LanguageModelV4StreamPart>({\n start(controller) {\n controller.enqueue({\n type: 'stream-start',\n warnings: result.warnings,\n });\n\n controller.enqueue({\n type: 'response-metadata',\n modelId: result.response?.modelId,\n timestamp: result.response?.timestamp,\n });\n\n for (const part of result.content) {\n if (part.type === 'text') {\n const id = generateId();\n controller.enqueue({ type: 'text-start', id });\n controller.enqueue({\n type: 'text-delta',\n id,\n delta: part.text,\n });\n controller.enqueue({ type: 'text-end', id });\n } else if (part.type === 'file') {\n controller.enqueue({\n type: 'file',\n mediaType: part.mediaType,\n data: part.data,\n });\n }\n }\n\n controller.enqueue({\n type: 'finish',\n usage: result.usage,\n finishReason: result.finishReason,\n providerMetadata: result.providerMetadata,\n });\n\n controller.close();\n },\n });\n\n return {\n stream,\n response: {\n headers: result.response?.headers,\n },\n };\n }\n}\n\nexport const prodiaLanguageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Aspect ratio for the output image.\n */\n aspectRatio: z\n .enum([\n '1:1',\n '2:3',\n '3:2',\n '4:5',\n '5:4',\n '4:7',\n '7:4',\n '9:16',\n '16:9',\n '9:21',\n '21:9',\n ])\n .optional(),\n }),\n ),\n);\n\nexport type ProdiaLanguageModelOptions = InferSchema<\n typeof prodiaLanguageModelOptionsSchema\n>;\n\ninterface LanguageMultipartResult {\n jobResult: ProdiaJobResult;\n textContent: string | undefined;\n fileContent: Array<{ mediaType: string; data: Uint8Array }>;\n}\n\nfunction createLanguageMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: LanguageMultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let textContent: string | undefined;\n const fileContent: Array<{ mediaType: string; data: Uint8Array }> = [];\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n if (\n partContentType.startsWith('text/') ||\n contentDisposition.includes('.txt')\n ) {\n textContent = new TextDecoder().decode(part.body);\n } else if (partContentType.startsWith('image/')) {\n fileContent.push({\n mediaType: partContentType,\n data: part.body,\n });\n }\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n\n return {\n value: { jobResult, textContent, fileContent },\n responseHeaders,\n };\n };\n}\n","import type {\n Experimental_VideoModelV4,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n postToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaVideoModelId } from './prodia-video-model-settings';\n\nexport class ProdiaVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaVideoModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const warnings: Array<SharedV4Warning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaVideoModelOptionsSchema,\n });\n\n const jobConfig: Record<string, unknown> = {};\n\n if (options.prompt !== undefined) {\n jobConfig.prompt = options.prompt;\n }\n if (options.seed !== undefined) {\n jobConfig.seed = options.seed;\n }\n if (prodiaOptions?.resolution !== undefined) {\n jobConfig.resolution = prodiaOptions.resolution;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n let multipartResult: {\n jobResult: ProdiaJobResult;\n videoBytes: Uint8Array;\n videoMediaType: string;\n };\n let responseHeaders: Record<string, string> | undefined;\n\n if (options.image) {\n // img2vid: multipart form-data request\n const imageData = await resolveVideoFileData(\n options.image,\n this.config.fetch,\n );\n const formData = new FormData();\n formData.append(\n 'job',\n new Blob([JSON.stringify(body)], { type: 'application/json' }),\n 'job.json',\n );\n formData.append(\n 'input',\n new Blob([imageData.bytes], { type: imageData.mediaType }),\n 'input' + getExtension(imageData.mediaType),\n );\n\n const result = await postFormDataToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; video/mp4',\n },\n formData,\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createVideoMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n multipartResult = result.value;\n responseHeaders = result.responseHeaders;\n } else {\n // txt2vid: JSON request\n const result = await postToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; video/mp4',\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createVideoMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n multipartResult = result.value;\n responseHeaders = result.responseHeaders;\n }\n\n const { jobResult, videoBytes, videoMediaType } = multipartResult;\n\n return {\n videos: [\n {\n type: 'binary',\n data: videoBytes,\n mediaType: videoMediaType,\n },\n ],\n warnings,\n providerMetadata: {\n prodia: {\n videos: [buildProdiaProviderMetadata(jobResult)],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n}\n\nexport const prodiaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Video resolution (e.g. \"480p\", \"720p\").\n */\n resolution: z.string().optional(),\n }),\n ),\n);\n\nexport type ProdiaVideoModelOptions = InferSchema<\n typeof prodiaVideoModelOptionsSchema\n>;\n\ninterface VideoMultipartResult {\n jobResult: ProdiaJobResult;\n videoBytes: Uint8Array;\n videoMediaType: string;\n}\n\nfunction createVideoMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: VideoMultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let videoBytes: Uint8Array | undefined;\n let videoMediaType = 'video/mp4';\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n videoBytes = part.body;\n if (partContentType.startsWith('video/')) {\n videoMediaType = partContentType;\n }\n } else if (partContentType.startsWith('video/')) {\n videoBytes = part.body;\n videoMediaType = partContentType;\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n if (!videoBytes) {\n throw new Error('Prodia multipart response missing output video');\n }\n\n return {\n value: { jobResult, videoBytes, videoMediaType },\n responseHeaders,\n };\n };\n}\n\nasync function resolveVideoFileData(\n file: NonNullable<\n Parameters<Experimental_VideoModelV4['doGenerate']>[0]['image']\n >,\n fetchFunction?: FetchFunction,\n): Promise<{ bytes: Uint8Array; mediaType: string }> {\n if (file.type === 'file') {\n const data =\n typeof file.data === 'string'\n ? convertBase64ToUint8Array(file.data)\n : file.data;\n return { bytes: data, mediaType: file.mediaType };\n }\n // URL type - fetch the data\n const response = await (fetchFunction ?? globalThis.fetch)(file.url);\n const arrayBuffer = await response.arrayBuffer();\n const mediaType =\n response.headers.get('content-type') ?? 'application/octet-stream';\n return { bytes: new Uint8Array(arrayBuffer), mediaType };\n}\n\nfunction getExtension(mediaType: string): string {\n const map: Record<string, string> = {\n 'image/png': '.png',\n 'image/jpeg': '.jpg',\n 'image/webp': '.webp',\n 'video/mp4': '.mp4',\n 'video/webm': '.webm',\n };\n return map[mediaType] ?? '';\n}\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","import_provider_utils","import_v4","import_provider_utils","import_v4","_a","import_provider_utils","import_v4"]}
|
package/dist/index.mjs
CHANGED
|
@@ -380,9 +380,13 @@ function createMultipartResponseHandler() {
|
|
|
380
380
|
}
|
|
381
381
|
|
|
382
382
|
// src/prodia-language-model.ts
|
|
383
|
+
import {
|
|
384
|
+
UnsupportedFunctionalityError
|
|
385
|
+
} from "@ai-sdk/provider";
|
|
383
386
|
import {
|
|
384
387
|
combineHeaders as combineHeaders2,
|
|
385
388
|
isCustomReasoning,
|
|
389
|
+
isProviderReference,
|
|
386
390
|
convertBase64ToUint8Array,
|
|
387
391
|
generateId,
|
|
388
392
|
lazySchema as lazySchema2,
|
|
@@ -476,6 +480,11 @@ var ProdiaLanguageModel = class {
|
|
|
476
480
|
if (message.role === "user") {
|
|
477
481
|
for (const part of message.content) {
|
|
478
482
|
if (part.type === "file" && part.mediaType.startsWith("image/")) {
|
|
483
|
+
if (isProviderReference(part.data)) {
|
|
484
|
+
throw new UnsupportedFunctionalityError({
|
|
485
|
+
functionality: "file parts with provider references"
|
|
486
|
+
});
|
|
487
|
+
}
|
|
479
488
|
if (part.data instanceof Uint8Array) {
|
|
480
489
|
imageBytes = part.data;
|
|
481
490
|
} else if (typeof part.data === "string") {
|
|
@@ -914,7 +923,7 @@ function getExtension(mediaType) {
|
|
|
914
923
|
}
|
|
915
924
|
|
|
916
925
|
// src/version.ts
|
|
917
|
-
var VERSION = true ? "2.0.0-beta.
|
|
926
|
+
var VERSION = true ? "2.0.0-beta.14" : "0.0.0-test";
|
|
918
927
|
|
|
919
928
|
// src/prodia-provider.ts
|
|
920
929
|
var defaultBaseURL = "https://inference.prodia.com/v2";
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/prodia-provider.ts","../src/prodia-image-model.ts","../src/prodia-api.ts","../src/prodia-language-model.ts","../src/prodia-video-model.ts","../src/version.ts"],"sourcesContent":["import {\n type Experimental_VideoModelV4,\n type ImageModelV4,\n type LanguageModelV4,\n NoSuchModelError,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { ProdiaImageModel } from './prodia-image-model';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\nimport { ProdiaLanguageModel } from './prodia-language-model';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\nimport { ProdiaVideoModel } from './prodia-video-model';\nimport type { ProdiaVideoModelId } from './prodia-video-model-settings';\nimport { VERSION } from './version';\n\nexport interface ProdiaProviderSettings {\n /**\n * Prodia API key. Default value is taken from the `PRODIA_TOKEN` environment variable.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls. Defaults to `https://inference.prodia.com/v2`.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface ProdiaProvider extends ProviderV4 {\n /**\n * Creates a language model for multimodal generation (img2img with text+image output).\n */\n languageModel(modelId: ProdiaLanguageModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: ProdiaImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: ProdiaImageModelId): ImageModelV4;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: ProdiaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: ProdiaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nconst defaultBaseURL = 'https://inference.prodia.com/v2';\n\nexport function createProdia(\n options: ProdiaProviderSettings = {},\n): ProdiaProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'PRODIA_TOKEN',\n description: 'Prodia',\n })}`,\n ...options.headers,\n },\n `ai-sdk/prodia/${VERSION}`,\n );\n\n const createImageModel = (modelId: ProdiaImageModelId) =>\n new ProdiaImageModel(modelId, {\n provider: 'prodia.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createLanguageModel = (modelId: ProdiaLanguageModelId) =>\n new ProdiaLanguageModel(modelId, {\n provider: 'prodia.language',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createVideoModel = (modelId: ProdiaVideoModelId) =>\n new ProdiaVideoModel(modelId, {\n provider: 'prodia.video',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n });\n };\n\n return {\n specificationVersion: 'v4',\n languageModel: createLanguageModel,\n imageModel: createImageModel,\n image: createImageModel,\n videoModel: createVideoModel,\n video: createVideoModel,\n embeddingModel,\n textEmbeddingModel: embeddingModel,\n };\n}\n\nexport const prodia = createProdia();\n","import type { ImageModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\n\nexport class ProdiaImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaImageModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n private async getArgs({\n prompt,\n size,\n seed,\n providerOptions,\n }: Parameters<ImageModelV4['doGenerate']>[0]) {\n const warnings: Array<SharedV4Warning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions,\n schema: prodiaImageModelOptionsSchema,\n });\n\n let width: number | undefined;\n let height: number | undefined;\n if (size) {\n const [widthStr, heightStr] = size.split('x');\n width = Number(widthStr);\n height = Number(heightStr);\n if (\n !widthStr ||\n !heightStr ||\n !Number.isFinite(width) ||\n !Number.isFinite(height)\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details: `Invalid size format: ${size}. Expected format: WIDTHxHEIGHT (e.g., 1024x1024)`,\n });\n width = undefined;\n height = undefined;\n }\n }\n\n const jobConfig: Record<string, unknown> = {\n prompt,\n };\n\n if (prodiaOptions?.width !== undefined) {\n jobConfig.width = prodiaOptions.width;\n } else if (width !== undefined) {\n jobConfig.width = width;\n }\n\n if (prodiaOptions?.height !== undefined) {\n jobConfig.height = prodiaOptions.height;\n } else if (height !== undefined) {\n jobConfig.height = height;\n }\n\n if (seed !== undefined) {\n jobConfig.seed = seed;\n }\n if (prodiaOptions?.steps !== undefined) {\n jobConfig.steps = prodiaOptions.steps;\n }\n if (prodiaOptions?.stylePreset !== undefined) {\n jobConfig.style_preset = prodiaOptions.stylePreset;\n }\n if (prodiaOptions?.loras !== undefined && prodiaOptions.loras.length > 0) {\n jobConfig.loras = prodiaOptions.loras;\n }\n if (prodiaOptions?.progressive !== undefined) {\n jobConfig.progressive = prodiaOptions.progressive;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n return { body, warnings };\n }\n\n async doGenerate(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const { body, warnings } = await this.getArgs(options);\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n const { value: multipartResult, responseHeaders } = await postToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; image/png',\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { jobResult, imageBytes } = multipartResult;\n\n return {\n images: [imageBytes],\n warnings,\n providerMetadata: {\n prodia: {\n images: [buildProdiaProviderMetadata(jobResult)],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n}\n\nconst stylePresets = [\n '3d-model',\n 'analog-film',\n 'anime',\n 'cinematic',\n 'comic-book',\n 'digital-art',\n 'enhance',\n 'fantasy-art',\n 'isometric',\n 'line-art',\n 'low-poly',\n 'neon-punk',\n 'origami',\n 'photographic',\n 'pixel-art',\n 'texture',\n 'craft-clay',\n] as const;\n\nexport const prodiaImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Amount of computational iterations to run. More is typically higher quality.\n */\n steps: z.number().int().min(1).max(4).optional(),\n /**\n * Width of the output image in pixels.\n */\n width: z.number().int().min(256).max(1920).optional(),\n /**\n * Height of the output image in pixels.\n */\n height: z.number().int().min(256).max(1920).optional(),\n /**\n * Apply a visual theme to your output image.\n */\n stylePreset: z.enum(stylePresets).optional(),\n /**\n * Augment the output with a LoRa model.\n */\n loras: z.array(z.string()).max(3).optional(),\n /**\n * When using JPEG output, return a progressive JPEG.\n */\n progressive: z.boolean().optional(),\n }),\n ),\n);\n\nexport type ProdiaImageModelOptions = InferSchema<\n typeof prodiaImageModelOptionsSchema\n>;\n\ninterface MultipartResult {\n jobResult: ProdiaJobResult;\n imageBytes: Uint8Array;\n}\n\nfunction createMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: MultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let imageBytes: Uint8Array | undefined;\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n imageBytes = part.body;\n } else if (partContentType.startsWith('image/')) {\n imageBytes = part.body;\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n if (!imageBytes) {\n throw new Error('Prodia multipart response missing output image');\n }\n\n return {\n value: { jobResult, imageBytes },\n responseHeaders,\n };\n };\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport type { FetchFunction, Resolvable } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport interface ProdiaModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport const prodiaJobResultSchema = z.object({\n id: z.string(),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n expires_at: z.string().optional(),\n state: z\n .object({\n current: z.string(),\n })\n .optional(),\n config: z\n .object({\n seed: z.number().optional(),\n })\n .passthrough()\n .optional(),\n metrics: z\n .object({\n elapsed: z.number().optional(),\n ips: z.number().optional(),\n })\n .optional(),\n price: z\n .object({\n product: z.string(),\n dollars: z.number(),\n })\n .nullish(),\n});\n\nexport type ProdiaJobResult = z.infer<typeof prodiaJobResultSchema>;\n\nexport function buildProdiaProviderMetadata(jobResult: ProdiaJobResult) {\n return {\n jobId: jobResult.id,\n ...(jobResult.config?.seed != null && {\n seed: jobResult.config.seed,\n }),\n ...(jobResult.metrics?.elapsed != null && {\n elapsed: jobResult.metrics.elapsed,\n }),\n ...(jobResult.metrics?.ips != null && {\n iterationsPerSecond: jobResult.metrics.ips,\n }),\n ...(jobResult.created_at != null && {\n createdAt: jobResult.created_at,\n }),\n ...(jobResult.updated_at != null && {\n updatedAt: jobResult.updated_at,\n }),\n ...(jobResult.price?.dollars != null && {\n dollars: jobResult.price.dollars,\n }),\n };\n}\n\nexport interface MultipartPart {\n headers: Record<string, string>;\n body: Uint8Array;\n}\n\nexport function parseMultipart(\n data: Uint8Array,\n boundary: string,\n): MultipartPart[] {\n const parts: MultipartPart[] = [];\n const boundaryBytes = new TextEncoder().encode(`--${boundary}`);\n const endBoundaryBytes = new TextEncoder().encode(`--${boundary}--`);\n\n const positions: number[] = [];\n for (let i = 0; i <= data.length - boundaryBytes.length; i++) {\n let match = true;\n for (let j = 0; j < boundaryBytes.length; j++) {\n if (data[i + j] !== boundaryBytes[j]) {\n match = false;\n break;\n }\n }\n if (match) {\n positions.push(i);\n }\n }\n\n for (let i = 0; i < positions.length - 1; i++) {\n const start = positions[i] + boundaryBytes.length;\n const end = positions[i + 1];\n\n let isEndBoundary = true;\n for (let j = 0; j < endBoundaryBytes.length && isEndBoundary; j++) {\n if (data[positions[i] + j] !== endBoundaryBytes[j]) {\n isEndBoundary = false;\n }\n }\n if (\n isEndBoundary &&\n positions[i] + endBoundaryBytes.length <= data.length\n ) {\n continue;\n }\n\n let partStart = start;\n if (data[partStart] === 0x0d && data[partStart + 1] === 0x0a) {\n partStart += 2;\n } else if (data[partStart] === 0x0a) {\n partStart += 1;\n }\n\n let partEnd = end;\n if (data[partEnd - 2] === 0x0d && data[partEnd - 1] === 0x0a) {\n partEnd -= 2;\n } else if (data[partEnd - 1] === 0x0a) {\n partEnd -= 1;\n }\n\n const partData = data.slice(partStart, partEnd);\n\n let headerEnd = -1;\n for (let j = 0; j < partData.length - 3; j++) {\n if (\n partData[j] === 0x0d &&\n partData[j + 1] === 0x0a &&\n partData[j + 2] === 0x0d &&\n partData[j + 3] === 0x0a\n ) {\n headerEnd = j;\n break;\n }\n if (partData[j] === 0x0a && partData[j + 1] === 0x0a) {\n headerEnd = j;\n break;\n }\n }\n\n if (headerEnd === -1) {\n continue;\n }\n\n const headerBytes = partData.slice(0, headerEnd);\n const headerStr = new TextDecoder().decode(headerBytes);\n const headers: Record<string, string> = {};\n for (const line of headerStr.split(/\\r?\\n/)) {\n const colonIdx = line.indexOf(':');\n if (colonIdx > 0) {\n const key = line.slice(0, colonIdx).trim().toLowerCase();\n const value = line.slice(colonIdx + 1).trim();\n headers[key] = value;\n }\n }\n\n let bodyStart = headerEnd + 2;\n if (partData[headerEnd] === 0x0d) {\n bodyStart = headerEnd + 4;\n }\n const body = partData.slice(bodyStart);\n\n parts.push({ headers, body });\n }\n\n return parts;\n}\n\nconst prodiaErrorSchema = z.object({\n message: z.string().optional(),\n detail: z.unknown().optional(),\n error: z.string().optional(),\n});\n\nexport const prodiaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: prodiaErrorSchema,\n errorToMessage: error => {\n const parsed = prodiaErrorSchema.safeParse(error);\n if (!parsed.success) return 'Unknown Prodia error';\n const { message, detail, error: errorField } = parsed.data;\n if (typeof detail === 'string') return detail;\n if (detail != null) {\n try {\n return JSON.stringify(detail);\n } catch {\n // ignore\n }\n }\n return errorField ?? message ?? 'Unknown Prodia error';\n },\n});\n","import type {\n LanguageModelV4,\n LanguageModelV4CallOptions,\n LanguageModelV4Content,\n LanguageModelV4StreamPart,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n isCustomReasoning,\n convertBase64ToUint8Array,\n generateId,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\n\nexport class ProdiaLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly supportedUrls = {};\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaLanguageModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n async doGenerate(options: LanguageModelV4CallOptions) {\n const warnings: Array<SharedV4Warning> = [];\n\n // Warn about unsupported LLM features\n if (options.temperature !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'temperature' });\n }\n if (options.topP !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'topP' });\n }\n if (options.topK !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (options.maxOutputTokens !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'maxOutputTokens' });\n }\n if (options.stopSequences !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n if (options.presencePenalty !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'presencePenalty' });\n }\n if (options.frequencyPenalty !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n if (options.tools !== undefined && options.tools.length > 0) {\n warnings.push({ type: 'unsupported', feature: 'tools' });\n }\n if (options.toolChoice !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'toolChoice' });\n }\n if (\n options.responseFormat !== undefined &&\n options.responseFormat.type !== 'text'\n ) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n if (isCustomReasoning(options.reasoning)) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: 'This provider does not support reasoning configuration.',\n });\n }\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaLanguageModelOptionsSchema,\n });\n\n // Extract text prompt from messages\n let prompt = '';\n let systemMessage = '';\n for (const message of options.prompt) {\n if (message.role === 'system') {\n systemMessage = message.content;\n }\n }\n // Get text from the last user message\n for (let i = options.prompt.length - 1; i >= 0; i--) {\n const message = options.prompt[i];\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'text') {\n prompt += (prompt ? '\\n' : '') + part.text;\n }\n }\n break;\n }\n }\n if (systemMessage) {\n prompt = systemMessage + '\\n' + prompt;\n }\n\n // Extract image from user messages\n let imageBytes: Uint8Array | undefined;\n let imageMediaType = 'image/png';\n for (let i = options.prompt.length - 1; i >= 0; i--) {\n const message = options.prompt[i];\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'file' && part.mediaType.startsWith('image/')) {\n if (part.data instanceof Uint8Array) {\n imageBytes = part.data;\n } else if (typeof part.data === 'string') {\n // base64 encoded\n imageBytes = convertBase64ToUint8Array(part.data);\n } else if (part.data instanceof URL) {\n const fetchFn = this.config.fetch ?? globalThis.fetch;\n const response = await fetchFn(part.data.toString());\n const arrayBuffer = await response.arrayBuffer();\n imageBytes = new Uint8Array(arrayBuffer);\n }\n imageMediaType = part.mediaType;\n break;\n }\n }\n break;\n }\n }\n\n const jobConfig: Record<string, unknown> = {\n prompt,\n include_messages: true,\n };\n\n if (prodiaOptions?.aspectRatio !== undefined) {\n jobConfig.aspect_ratio = prodiaOptions.aspectRatio;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n // Always use multipart form-data since img2img requires image input\n const formData = new FormData();\n formData.append(\n 'job',\n new Blob([JSON.stringify(body)], { type: 'application/json' }),\n 'job.json',\n );\n if (imageBytes) {\n const ext =\n imageMediaType === 'image/png'\n ? '.png'\n : imageMediaType === 'image/jpeg'\n ? '.jpg'\n : imageMediaType === 'image/webp'\n ? '.webp'\n : '';\n formData.append(\n 'input',\n new Blob([imageBytes], { type: imageMediaType }),\n 'input' + ext,\n );\n }\n\n const { value: multipartResult, responseHeaders } = await postFormDataToApi(\n {\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data',\n },\n formData,\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createLanguageMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n },\n );\n\n const { jobResult, textContent, fileContent } = multipartResult;\n\n const content: Array<LanguageModelV4Content> = [];\n if (textContent !== undefined) {\n content.push({ type: 'text', text: textContent });\n }\n for (const file of fileContent) {\n content.push({\n type: 'file',\n mediaType: file.mediaType,\n data: file.data,\n });\n }\n\n return {\n content,\n finishReason: { unified: 'stop' as const, raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings,\n providerMetadata: {\n prodia: buildProdiaProviderMetadata(jobResult),\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n async doStream(options: LanguageModelV4CallOptions) {\n const result = await this.doGenerate(options);\n\n const stream = new ReadableStream<LanguageModelV4StreamPart>({\n start(controller) {\n controller.enqueue({\n type: 'stream-start',\n warnings: result.warnings,\n });\n\n controller.enqueue({\n type: 'response-metadata',\n modelId: result.response?.modelId,\n timestamp: result.response?.timestamp,\n });\n\n for (const part of result.content) {\n if (part.type === 'text') {\n const id = generateId();\n controller.enqueue({ type: 'text-start', id });\n controller.enqueue({\n type: 'text-delta',\n id,\n delta: part.text,\n });\n controller.enqueue({ type: 'text-end', id });\n } else if (part.type === 'file') {\n controller.enqueue({\n type: 'file',\n mediaType: part.mediaType,\n data: part.data,\n });\n }\n }\n\n controller.enqueue({\n type: 'finish',\n usage: result.usage,\n finishReason: result.finishReason,\n providerMetadata: result.providerMetadata,\n });\n\n controller.close();\n },\n });\n\n return {\n stream,\n response: {\n headers: result.response?.headers,\n },\n };\n }\n}\n\nexport const prodiaLanguageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Aspect ratio for the output image.\n */\n aspectRatio: z\n .enum([\n '1:1',\n '2:3',\n '3:2',\n '4:5',\n '5:4',\n '4:7',\n '7:4',\n '9:16',\n '16:9',\n '9:21',\n '21:9',\n ])\n .optional(),\n }),\n ),\n);\n\nexport type ProdiaLanguageModelOptions = InferSchema<\n typeof prodiaLanguageModelOptionsSchema\n>;\n\ninterface LanguageMultipartResult {\n jobResult: ProdiaJobResult;\n textContent: string | undefined;\n fileContent: Array<{ mediaType: string; data: Uint8Array }>;\n}\n\nfunction createLanguageMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: LanguageMultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let textContent: string | undefined;\n const fileContent: Array<{ mediaType: string; data: Uint8Array }> = [];\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n if (\n partContentType.startsWith('text/') ||\n contentDisposition.includes('.txt')\n ) {\n textContent = new TextDecoder().decode(part.body);\n } else if (partContentType.startsWith('image/')) {\n fileContent.push({\n mediaType: partContentType,\n data: part.body,\n });\n }\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n\n return {\n value: { jobResult, textContent, fileContent },\n responseHeaders,\n };\n };\n}\n","import type {\n Experimental_VideoModelV4,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n postToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaVideoModelId } from './prodia-video-model-settings';\n\nexport class ProdiaVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaVideoModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const warnings: Array<SharedV4Warning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaVideoModelOptionsSchema,\n });\n\n const jobConfig: Record<string, unknown> = {};\n\n if (options.prompt !== undefined) {\n jobConfig.prompt = options.prompt;\n }\n if (options.seed !== undefined) {\n jobConfig.seed = options.seed;\n }\n if (prodiaOptions?.resolution !== undefined) {\n jobConfig.resolution = prodiaOptions.resolution;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n let multipartResult: {\n jobResult: ProdiaJobResult;\n videoBytes: Uint8Array;\n videoMediaType: string;\n };\n let responseHeaders: Record<string, string> | undefined;\n\n if (options.image) {\n // img2vid: multipart form-data request\n const imageData = await resolveVideoFileData(\n options.image,\n this.config.fetch,\n );\n const formData = new FormData();\n formData.append(\n 'job',\n new Blob([JSON.stringify(body)], { type: 'application/json' }),\n 'job.json',\n );\n formData.append(\n 'input',\n new Blob([imageData.bytes], { type: imageData.mediaType }),\n 'input' + getExtension(imageData.mediaType),\n );\n\n const result = await postFormDataToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; video/mp4',\n },\n formData,\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createVideoMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n multipartResult = result.value;\n responseHeaders = result.responseHeaders;\n } else {\n // txt2vid: JSON request\n const result = await postToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; video/mp4',\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createVideoMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n multipartResult = result.value;\n responseHeaders = result.responseHeaders;\n }\n\n const { jobResult, videoBytes, videoMediaType } = multipartResult;\n\n return {\n videos: [\n {\n type: 'binary',\n data: videoBytes,\n mediaType: videoMediaType,\n },\n ],\n warnings,\n providerMetadata: {\n prodia: {\n videos: [buildProdiaProviderMetadata(jobResult)],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n}\n\nexport const prodiaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Video resolution (e.g. \"480p\", \"720p\").\n */\n resolution: z.string().optional(),\n }),\n ),\n);\n\nexport type ProdiaVideoModelOptions = InferSchema<\n typeof prodiaVideoModelOptionsSchema\n>;\n\ninterface VideoMultipartResult {\n jobResult: ProdiaJobResult;\n videoBytes: Uint8Array;\n videoMediaType: string;\n}\n\nfunction createVideoMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: VideoMultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let videoBytes: Uint8Array | undefined;\n let videoMediaType = 'video/mp4';\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n videoBytes = part.body;\n if (partContentType.startsWith('video/')) {\n videoMediaType = partContentType;\n }\n } else if (partContentType.startsWith('video/')) {\n videoBytes = part.body;\n videoMediaType = partContentType;\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n if (!videoBytes) {\n throw new Error('Prodia multipart response missing output video');\n }\n\n return {\n value: { jobResult, videoBytes, videoMediaType },\n responseHeaders,\n };\n };\n}\n\nasync function resolveVideoFileData(\n file: NonNullable<\n Parameters<Experimental_VideoModelV4['doGenerate']>[0]['image']\n >,\n fetchFunction?: FetchFunction,\n): Promise<{ bytes: Uint8Array; mediaType: string }> {\n if (file.type === 'file') {\n const data =\n typeof file.data === 'string'\n ? convertBase64ToUint8Array(file.data)\n : file.data;\n return { bytes: data, mediaType: file.mediaType };\n }\n // URL type - fetch the data\n const response = await (fetchFunction ?? globalThis.fetch)(file.url);\n const arrayBuffer = await response.arrayBuffer();\n const mediaType =\n response.headers.get('content-type') ?? 'application/octet-stream';\n return { bytes: new Uint8Array(arrayBuffer), mediaType };\n}\n\nfunction getExtension(mediaType: string): string {\n const map: Record<string, string> = {\n 'image/png': '.png',\n 'image/jpeg': '.jpg',\n 'image/webp': '.webp',\n 'video/mp4': '.mp4',\n 'video/webm': '.webm',\n };\n return map[mediaType] ?? '';\n}\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":["z","z","combineHeaders","lazySchema","parseJSON","parseProviderOptions","resolve","zodSchema","z","parseProviderOptions","combineHeaders","resolve","_a","lazySchema","zodSchema","z","parseJSON","combineHeaders","convertBase64ToUint8Array","lazySchema","parseJSON","parseProviderOptions","postFormDataToApi","postToApi","resolve","zodSchema","z","parseProviderOptions","combineHeaders","resolve","postFormDataToApi","postToApi","lazySchema","zodSchema","z","parseJSON","convertBase64ToUint8Array"]}
|
|
1
|
+
{"version":3,"sources":["../src/prodia-provider.ts","../src/prodia-image-model.ts","../src/prodia-api.ts","../src/prodia-language-model.ts","../src/prodia-video-model.ts","../src/version.ts"],"sourcesContent":["import {\n type Experimental_VideoModelV4,\n type ImageModelV4,\n type LanguageModelV4,\n NoSuchModelError,\n type ProviderV4,\n} from '@ai-sdk/provider';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n loadApiKey,\n withoutTrailingSlash,\n withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { ProdiaImageModel } from './prodia-image-model';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\nimport { ProdiaLanguageModel } from './prodia-language-model';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\nimport { ProdiaVideoModel } from './prodia-video-model';\nimport type { ProdiaVideoModelId } from './prodia-video-model-settings';\nimport { VERSION } from './version';\n\nexport interface ProdiaProviderSettings {\n /**\n * Prodia API key. Default value is taken from the `PRODIA_TOKEN` environment variable.\n */\n apiKey?: string;\n\n /**\n * Base URL for the API calls. Defaults to `https://inference.prodia.com/v2`.\n */\n baseURL?: string;\n\n /**\n * Custom headers to include in the requests.\n */\n headers?: Record<string, string>;\n\n /**\n * Custom fetch implementation. You can use it as a middleware to intercept\n * requests, or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n}\n\nexport interface ProdiaProvider extends ProviderV4 {\n /**\n * Creates a language model for multimodal generation (img2img with text+image output).\n */\n languageModel(modelId: ProdiaLanguageModelId): LanguageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: ProdiaImageModelId): ImageModelV4;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: ProdiaImageModelId): ImageModelV4;\n\n /**\n * Creates a model for video generation.\n */\n video(modelId: ProdiaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * Creates a model for video generation.\n */\n videoModel(modelId: ProdiaVideoModelId): Experimental_VideoModelV4;\n\n /**\n * @deprecated Use `embeddingModel` instead.\n */\n textEmbeddingModel(modelId: string): never;\n}\n\nconst defaultBaseURL = 'https://inference.prodia.com/v2';\n\nexport function createProdia(\n options: ProdiaProviderSettings = {},\n): ProdiaProvider {\n const baseURL = withoutTrailingSlash(options.baseURL ?? defaultBaseURL);\n const getHeaders = () =>\n withUserAgentSuffix(\n {\n Authorization: `Bearer ${loadApiKey({\n apiKey: options.apiKey,\n environmentVariableName: 'PRODIA_TOKEN',\n description: 'Prodia',\n })}`,\n ...options.headers,\n },\n `ai-sdk/prodia/${VERSION}`,\n );\n\n const createImageModel = (modelId: ProdiaImageModelId) =>\n new ProdiaImageModel(modelId, {\n provider: 'prodia.image',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createLanguageModel = (modelId: ProdiaLanguageModelId) =>\n new ProdiaLanguageModel(modelId, {\n provider: 'prodia.language',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const createVideoModel = (modelId: ProdiaVideoModelId) =>\n new ProdiaVideoModel(modelId, {\n provider: 'prodia.video',\n baseURL: baseURL ?? defaultBaseURL,\n headers: getHeaders,\n fetch: options.fetch,\n });\n\n const embeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'embeddingModel',\n });\n };\n\n return {\n specificationVersion: 'v4',\n languageModel: createLanguageModel,\n imageModel: createImageModel,\n image: createImageModel,\n videoModel: createVideoModel,\n video: createVideoModel,\n embeddingModel,\n textEmbeddingModel: embeddingModel,\n };\n}\n\nexport const prodia = createProdia();\n","import type { ImageModelV4, SharedV4Warning } from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\n\nexport class ProdiaImageModel implements ImageModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxImagesPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaImageModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n private async getArgs({\n prompt,\n size,\n seed,\n providerOptions,\n }: Parameters<ImageModelV4['doGenerate']>[0]) {\n const warnings: Array<SharedV4Warning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions,\n schema: prodiaImageModelOptionsSchema,\n });\n\n let width: number | undefined;\n let height: number | undefined;\n if (size) {\n const [widthStr, heightStr] = size.split('x');\n width = Number(widthStr);\n height = Number(heightStr);\n if (\n !widthStr ||\n !heightStr ||\n !Number.isFinite(width) ||\n !Number.isFinite(height)\n ) {\n warnings.push({\n type: 'unsupported',\n feature: 'size',\n details: `Invalid size format: ${size}. Expected format: WIDTHxHEIGHT (e.g., 1024x1024)`,\n });\n width = undefined;\n height = undefined;\n }\n }\n\n const jobConfig: Record<string, unknown> = {\n prompt,\n };\n\n if (prodiaOptions?.width !== undefined) {\n jobConfig.width = prodiaOptions.width;\n } else if (width !== undefined) {\n jobConfig.width = width;\n }\n\n if (prodiaOptions?.height !== undefined) {\n jobConfig.height = prodiaOptions.height;\n } else if (height !== undefined) {\n jobConfig.height = height;\n }\n\n if (seed !== undefined) {\n jobConfig.seed = seed;\n }\n if (prodiaOptions?.steps !== undefined) {\n jobConfig.steps = prodiaOptions.steps;\n }\n if (prodiaOptions?.stylePreset !== undefined) {\n jobConfig.style_preset = prodiaOptions.stylePreset;\n }\n if (prodiaOptions?.loras !== undefined && prodiaOptions.loras.length > 0) {\n jobConfig.loras = prodiaOptions.loras;\n }\n if (prodiaOptions?.progressive !== undefined) {\n jobConfig.progressive = prodiaOptions.progressive;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n return { body, warnings };\n }\n\n async doGenerate(\n options: Parameters<ImageModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV4['doGenerate']>>> {\n const { body, warnings } = await this.getArgs(options);\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n const { value: multipartResult, responseHeaders } = await postToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; image/png',\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n const { jobResult, imageBytes } = multipartResult;\n\n return {\n images: [imageBytes],\n warnings,\n providerMetadata: {\n prodia: {\n images: [buildProdiaProviderMetadata(jobResult)],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n}\n\nconst stylePresets = [\n '3d-model',\n 'analog-film',\n 'anime',\n 'cinematic',\n 'comic-book',\n 'digital-art',\n 'enhance',\n 'fantasy-art',\n 'isometric',\n 'line-art',\n 'low-poly',\n 'neon-punk',\n 'origami',\n 'photographic',\n 'pixel-art',\n 'texture',\n 'craft-clay',\n] as const;\n\nexport const prodiaImageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Amount of computational iterations to run. More is typically higher quality.\n */\n steps: z.number().int().min(1).max(4).optional(),\n /**\n * Width of the output image in pixels.\n */\n width: z.number().int().min(256).max(1920).optional(),\n /**\n * Height of the output image in pixels.\n */\n height: z.number().int().min(256).max(1920).optional(),\n /**\n * Apply a visual theme to your output image.\n */\n stylePreset: z.enum(stylePresets).optional(),\n /**\n * Augment the output with a LoRa model.\n */\n loras: z.array(z.string()).max(3).optional(),\n /**\n * When using JPEG output, return a progressive JPEG.\n */\n progressive: z.boolean().optional(),\n }),\n ),\n);\n\nexport type ProdiaImageModelOptions = InferSchema<\n typeof prodiaImageModelOptionsSchema\n>;\n\ninterface MultipartResult {\n jobResult: ProdiaJobResult;\n imageBytes: Uint8Array;\n}\n\nfunction createMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: MultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let imageBytes: Uint8Array | undefined;\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n imageBytes = part.body;\n } else if (partContentType.startsWith('image/')) {\n imageBytes = part.body;\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n if (!imageBytes) {\n throw new Error('Prodia multipart response missing output image');\n }\n\n return {\n value: { jobResult, imageBytes },\n responseHeaders,\n };\n };\n}\n","import { createJsonErrorResponseHandler } from '@ai-sdk/provider-utils';\nimport type { FetchFunction, Resolvable } from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\n\nexport interface ProdiaModelConfig {\n provider: string;\n baseURL: string;\n headers?: Resolvable<Record<string, string | undefined>>;\n fetch?: FetchFunction;\n _internal?: {\n currentDate?: () => Date;\n };\n}\n\nexport const prodiaJobResultSchema = z.object({\n id: z.string(),\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n expires_at: z.string().optional(),\n state: z\n .object({\n current: z.string(),\n })\n .optional(),\n config: z\n .object({\n seed: z.number().optional(),\n })\n .passthrough()\n .optional(),\n metrics: z\n .object({\n elapsed: z.number().optional(),\n ips: z.number().optional(),\n })\n .optional(),\n price: z\n .object({\n product: z.string(),\n dollars: z.number(),\n })\n .nullish(),\n});\n\nexport type ProdiaJobResult = z.infer<typeof prodiaJobResultSchema>;\n\nexport function buildProdiaProviderMetadata(jobResult: ProdiaJobResult) {\n return {\n jobId: jobResult.id,\n ...(jobResult.config?.seed != null && {\n seed: jobResult.config.seed,\n }),\n ...(jobResult.metrics?.elapsed != null && {\n elapsed: jobResult.metrics.elapsed,\n }),\n ...(jobResult.metrics?.ips != null && {\n iterationsPerSecond: jobResult.metrics.ips,\n }),\n ...(jobResult.created_at != null && {\n createdAt: jobResult.created_at,\n }),\n ...(jobResult.updated_at != null && {\n updatedAt: jobResult.updated_at,\n }),\n ...(jobResult.price?.dollars != null && {\n dollars: jobResult.price.dollars,\n }),\n };\n}\n\nexport interface MultipartPart {\n headers: Record<string, string>;\n body: Uint8Array;\n}\n\nexport function parseMultipart(\n data: Uint8Array,\n boundary: string,\n): MultipartPart[] {\n const parts: MultipartPart[] = [];\n const boundaryBytes = new TextEncoder().encode(`--${boundary}`);\n const endBoundaryBytes = new TextEncoder().encode(`--${boundary}--`);\n\n const positions: number[] = [];\n for (let i = 0; i <= data.length - boundaryBytes.length; i++) {\n let match = true;\n for (let j = 0; j < boundaryBytes.length; j++) {\n if (data[i + j] !== boundaryBytes[j]) {\n match = false;\n break;\n }\n }\n if (match) {\n positions.push(i);\n }\n }\n\n for (let i = 0; i < positions.length - 1; i++) {\n const start = positions[i] + boundaryBytes.length;\n const end = positions[i + 1];\n\n let isEndBoundary = true;\n for (let j = 0; j < endBoundaryBytes.length && isEndBoundary; j++) {\n if (data[positions[i] + j] !== endBoundaryBytes[j]) {\n isEndBoundary = false;\n }\n }\n if (\n isEndBoundary &&\n positions[i] + endBoundaryBytes.length <= data.length\n ) {\n continue;\n }\n\n let partStart = start;\n if (data[partStart] === 0x0d && data[partStart + 1] === 0x0a) {\n partStart += 2;\n } else if (data[partStart] === 0x0a) {\n partStart += 1;\n }\n\n let partEnd = end;\n if (data[partEnd - 2] === 0x0d && data[partEnd - 1] === 0x0a) {\n partEnd -= 2;\n } else if (data[partEnd - 1] === 0x0a) {\n partEnd -= 1;\n }\n\n const partData = data.slice(partStart, partEnd);\n\n let headerEnd = -1;\n for (let j = 0; j < partData.length - 3; j++) {\n if (\n partData[j] === 0x0d &&\n partData[j + 1] === 0x0a &&\n partData[j + 2] === 0x0d &&\n partData[j + 3] === 0x0a\n ) {\n headerEnd = j;\n break;\n }\n if (partData[j] === 0x0a && partData[j + 1] === 0x0a) {\n headerEnd = j;\n break;\n }\n }\n\n if (headerEnd === -1) {\n continue;\n }\n\n const headerBytes = partData.slice(0, headerEnd);\n const headerStr = new TextDecoder().decode(headerBytes);\n const headers: Record<string, string> = {};\n for (const line of headerStr.split(/\\r?\\n/)) {\n const colonIdx = line.indexOf(':');\n if (colonIdx > 0) {\n const key = line.slice(0, colonIdx).trim().toLowerCase();\n const value = line.slice(colonIdx + 1).trim();\n headers[key] = value;\n }\n }\n\n let bodyStart = headerEnd + 2;\n if (partData[headerEnd] === 0x0d) {\n bodyStart = headerEnd + 4;\n }\n const body = partData.slice(bodyStart);\n\n parts.push({ headers, body });\n }\n\n return parts;\n}\n\nconst prodiaErrorSchema = z.object({\n message: z.string().optional(),\n detail: z.unknown().optional(),\n error: z.string().optional(),\n});\n\nexport const prodiaFailedResponseHandler = createJsonErrorResponseHandler({\n errorSchema: prodiaErrorSchema,\n errorToMessage: error => {\n const parsed = prodiaErrorSchema.safeParse(error);\n if (!parsed.success) return 'Unknown Prodia error';\n const { message, detail, error: errorField } = parsed.data;\n if (typeof detail === 'string') return detail;\n if (detail != null) {\n try {\n return JSON.stringify(detail);\n } catch {\n // ignore\n }\n }\n return errorField ?? message ?? 'Unknown Prodia error';\n },\n});\n","import {\n type LanguageModelV4,\n type LanguageModelV4CallOptions,\n type LanguageModelV4Content,\n type LanguageModelV4StreamPart,\n type SharedV4Warning,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n isCustomReasoning,\n isProviderReference,\n convertBase64ToUint8Array,\n generateId,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\n\nexport class ProdiaLanguageModel implements LanguageModelV4 {\n readonly specificationVersion = 'v4';\n readonly supportedUrls = {};\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaLanguageModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n async doGenerate(options: LanguageModelV4CallOptions) {\n const warnings: Array<SharedV4Warning> = [];\n\n // Warn about unsupported LLM features\n if (options.temperature !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'temperature' });\n }\n if (options.topP !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'topP' });\n }\n if (options.topK !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'topK' });\n }\n if (options.maxOutputTokens !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'maxOutputTokens' });\n }\n if (options.stopSequences !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'stopSequences' });\n }\n if (options.presencePenalty !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'presencePenalty' });\n }\n if (options.frequencyPenalty !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'frequencyPenalty' });\n }\n if (options.tools !== undefined && options.tools.length > 0) {\n warnings.push({ type: 'unsupported', feature: 'tools' });\n }\n if (options.toolChoice !== undefined) {\n warnings.push({ type: 'unsupported', feature: 'toolChoice' });\n }\n if (\n options.responseFormat !== undefined &&\n options.responseFormat.type !== 'text'\n ) {\n warnings.push({ type: 'unsupported', feature: 'responseFormat' });\n }\n\n if (isCustomReasoning(options.reasoning)) {\n warnings.push({\n type: 'unsupported',\n feature: 'reasoning',\n details: 'This provider does not support reasoning configuration.',\n });\n }\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaLanguageModelOptionsSchema,\n });\n\n // Extract text prompt from messages\n let prompt = '';\n let systemMessage = '';\n for (const message of options.prompt) {\n if (message.role === 'system') {\n systemMessage = message.content;\n }\n }\n // Get text from the last user message\n for (let i = options.prompt.length - 1; i >= 0; i--) {\n const message = options.prompt[i];\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'text') {\n prompt += (prompt ? '\\n' : '') + part.text;\n }\n }\n break;\n }\n }\n if (systemMessage) {\n prompt = systemMessage + '\\n' + prompt;\n }\n\n // Extract image from user messages\n let imageBytes: Uint8Array | undefined;\n let imageMediaType = 'image/png';\n for (let i = options.prompt.length - 1; i >= 0; i--) {\n const message = options.prompt[i];\n if (message.role === 'user') {\n for (const part of message.content) {\n if (part.type === 'file' && part.mediaType.startsWith('image/')) {\n if (isProviderReference(part.data)) {\n throw new UnsupportedFunctionalityError({\n functionality: 'file parts with provider references',\n });\n }\n\n if (part.data instanceof Uint8Array) {\n imageBytes = part.data;\n } else if (typeof part.data === 'string') {\n // base64 encoded\n imageBytes = convertBase64ToUint8Array(part.data);\n } else if (part.data instanceof URL) {\n const fetchFn = this.config.fetch ?? globalThis.fetch;\n const response = await fetchFn(part.data.toString());\n const arrayBuffer = await response.arrayBuffer();\n imageBytes = new Uint8Array(arrayBuffer);\n }\n imageMediaType = part.mediaType;\n break;\n }\n }\n break;\n }\n }\n\n const jobConfig: Record<string, unknown> = {\n prompt,\n include_messages: true,\n };\n\n if (prodiaOptions?.aspectRatio !== undefined) {\n jobConfig.aspect_ratio = prodiaOptions.aspectRatio;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n // Always use multipart form-data since img2img requires image input\n const formData = new FormData();\n formData.append(\n 'job',\n new Blob([JSON.stringify(body)], { type: 'application/json' }),\n 'job.json',\n );\n if (imageBytes) {\n const ext =\n imageMediaType === 'image/png'\n ? '.png'\n : imageMediaType === 'image/jpeg'\n ? '.jpg'\n : imageMediaType === 'image/webp'\n ? '.webp'\n : '';\n formData.append(\n 'input',\n new Blob([imageBytes], { type: imageMediaType }),\n 'input' + ext,\n );\n }\n\n const { value: multipartResult, responseHeaders } = await postFormDataToApi(\n {\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data',\n },\n formData,\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createLanguageMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n },\n );\n\n const { jobResult, textContent, fileContent } = multipartResult;\n\n const content: Array<LanguageModelV4Content> = [];\n if (textContent !== undefined) {\n content.push({ type: 'text', text: textContent });\n }\n for (const file of fileContent) {\n content.push({\n type: 'file',\n mediaType: file.mediaType,\n data: file.data,\n });\n }\n\n return {\n content,\n finishReason: { unified: 'stop' as const, raw: undefined },\n usage: {\n inputTokens: {\n total: undefined,\n noCache: undefined,\n cacheRead: undefined,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: undefined,\n text: undefined,\n reasoning: undefined,\n },\n },\n warnings,\n providerMetadata: {\n prodia: buildProdiaProviderMetadata(jobResult),\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n\n async doStream(options: LanguageModelV4CallOptions) {\n const result = await this.doGenerate(options);\n\n const stream = new ReadableStream<LanguageModelV4StreamPart>({\n start(controller) {\n controller.enqueue({\n type: 'stream-start',\n warnings: result.warnings,\n });\n\n controller.enqueue({\n type: 'response-metadata',\n modelId: result.response?.modelId,\n timestamp: result.response?.timestamp,\n });\n\n for (const part of result.content) {\n if (part.type === 'text') {\n const id = generateId();\n controller.enqueue({ type: 'text-start', id });\n controller.enqueue({\n type: 'text-delta',\n id,\n delta: part.text,\n });\n controller.enqueue({ type: 'text-end', id });\n } else if (part.type === 'file') {\n controller.enqueue({\n type: 'file',\n mediaType: part.mediaType,\n data: part.data,\n });\n }\n }\n\n controller.enqueue({\n type: 'finish',\n usage: result.usage,\n finishReason: result.finishReason,\n providerMetadata: result.providerMetadata,\n });\n\n controller.close();\n },\n });\n\n return {\n stream,\n response: {\n headers: result.response?.headers,\n },\n };\n }\n}\n\nexport const prodiaLanguageModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Aspect ratio for the output image.\n */\n aspectRatio: z\n .enum([\n '1:1',\n '2:3',\n '3:2',\n '4:5',\n '5:4',\n '4:7',\n '7:4',\n '9:16',\n '16:9',\n '9:21',\n '21:9',\n ])\n .optional(),\n }),\n ),\n);\n\nexport type ProdiaLanguageModelOptions = InferSchema<\n typeof prodiaLanguageModelOptionsSchema\n>;\n\ninterface LanguageMultipartResult {\n jobResult: ProdiaJobResult;\n textContent: string | undefined;\n fileContent: Array<{ mediaType: string; data: Uint8Array }>;\n}\n\nfunction createLanguageMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: LanguageMultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let textContent: string | undefined;\n const fileContent: Array<{ mediaType: string; data: Uint8Array }> = [];\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n if (\n partContentType.startsWith('text/') ||\n contentDisposition.includes('.txt')\n ) {\n textContent = new TextDecoder().decode(part.body);\n } else if (partContentType.startsWith('image/')) {\n fileContent.push({\n mediaType: partContentType,\n data: part.body,\n });\n }\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n\n return {\n value: { jobResult, textContent, fileContent },\n responseHeaders,\n };\n };\n}\n","import type {\n Experimental_VideoModelV4,\n SharedV4Warning,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport type { FetchFunction } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\n convertBase64ToUint8Array,\n lazySchema,\n parseJSON,\n parseProviderOptions,\n postFormDataToApi,\n postToApi,\n resolve,\n zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { ProdiaModelConfig } from './prodia-api';\nimport {\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n} from './prodia-api';\nimport type { ProdiaJobResult } from './prodia-api';\nimport type { ProdiaVideoModelId } from './prodia-video-model-settings';\n\nexport class ProdiaVideoModel implements Experimental_VideoModelV4 {\n readonly specificationVersion = 'v4';\n readonly maxVideosPerCall = 1;\n\n get provider(): string {\n return this.config.provider;\n }\n\n constructor(\n readonly modelId: ProdiaVideoModelId,\n private readonly config: ProdiaModelConfig,\n ) {}\n\n async doGenerate(\n options: Parameters<Experimental_VideoModelV4['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<Experimental_VideoModelV4['doGenerate']>>> {\n const warnings: Array<SharedV4Warning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaVideoModelOptionsSchema,\n });\n\n const jobConfig: Record<string, unknown> = {};\n\n if (options.prompt !== undefined) {\n jobConfig.prompt = options.prompt;\n }\n if (options.seed !== undefined) {\n jobConfig.seed = options.seed;\n }\n if (prodiaOptions?.resolution !== undefined) {\n jobConfig.resolution = prodiaOptions.resolution;\n }\n\n const body = {\n type: this.modelId,\n config: jobConfig,\n };\n\n const currentDate = this.config._internal?.currentDate?.() ?? new Date();\n const combinedHeaders = combineHeaders(\n await resolve(this.config.headers),\n options.headers,\n );\n\n let multipartResult: {\n jobResult: ProdiaJobResult;\n videoBytes: Uint8Array;\n videoMediaType: string;\n };\n let responseHeaders: Record<string, string> | undefined;\n\n if (options.image) {\n // img2vid: multipart form-data request\n const imageData = await resolveVideoFileData(\n options.image,\n this.config.fetch,\n );\n const formData = new FormData();\n formData.append(\n 'job',\n new Blob([JSON.stringify(body)], { type: 'application/json' }),\n 'job.json',\n );\n formData.append(\n 'input',\n new Blob([imageData.bytes], { type: imageData.mediaType }),\n 'input' + getExtension(imageData.mediaType),\n );\n\n const result = await postFormDataToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; video/mp4',\n },\n formData,\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createVideoMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n multipartResult = result.value;\n responseHeaders = result.responseHeaders;\n } else {\n // txt2vid: JSON request\n const result = await postToApi({\n url: `${this.config.baseURL}/job?price=true`,\n headers: {\n ...combinedHeaders,\n Accept: 'multipart/form-data; video/mp4',\n 'Content-Type': 'application/json',\n },\n body: {\n content: JSON.stringify(body),\n values: body,\n },\n failedResponseHandler: prodiaFailedResponseHandler,\n successfulResponseHandler: createVideoMultipartResponseHandler(),\n abortSignal: options.abortSignal,\n fetch: this.config.fetch,\n });\n\n multipartResult = result.value;\n responseHeaders = result.responseHeaders;\n }\n\n const { jobResult, videoBytes, videoMediaType } = multipartResult;\n\n return {\n videos: [\n {\n type: 'binary',\n data: videoBytes,\n mediaType: videoMediaType,\n },\n ],\n warnings,\n providerMetadata: {\n prodia: {\n videos: [buildProdiaProviderMetadata(jobResult)],\n },\n },\n response: {\n modelId: this.modelId,\n timestamp: currentDate,\n headers: responseHeaders,\n },\n };\n }\n}\n\nexport const prodiaVideoModelOptionsSchema = lazySchema(() =>\n zodSchema(\n z.object({\n /**\n * Video resolution (e.g. \"480p\", \"720p\").\n */\n resolution: z.string().optional(),\n }),\n ),\n);\n\nexport type ProdiaVideoModelOptions = InferSchema<\n typeof prodiaVideoModelOptionsSchema\n>;\n\ninterface VideoMultipartResult {\n jobResult: ProdiaJobResult;\n videoBytes: Uint8Array;\n videoMediaType: string;\n}\n\nfunction createVideoMultipartResponseHandler() {\n return async ({\n response,\n }: {\n response: Response;\n }): Promise<{\n value: VideoMultipartResult;\n responseHeaders: Record<string, string>;\n }> => {\n const contentType = response.headers.get('content-type') ?? '';\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n const boundaryMatch = contentType.match(/boundary=([^\\s;]+)/);\n if (!boundaryMatch) {\n throw new Error(\n `Prodia response missing multipart boundary in content-type: ${contentType}`,\n );\n }\n const boundary = boundaryMatch[1];\n\n const arrayBuffer = await response.arrayBuffer();\n const bytes = new Uint8Array(arrayBuffer);\n\n const parts = parseMultipart(bytes, boundary);\n\n let jobResult: ProdiaJobResult | undefined;\n let videoBytes: Uint8Array | undefined;\n let videoMediaType = 'video/mp4';\n\n for (const part of parts) {\n const contentDisposition = part.headers['content-disposition'] ?? '';\n const partContentType = part.headers['content-type'] ?? '';\n\n if (contentDisposition.includes('name=\"job\"')) {\n const jsonStr = new TextDecoder().decode(part.body);\n jobResult = await parseJSON({\n text: jsonStr,\n schema: zodSchema(prodiaJobResultSchema),\n });\n } else if (contentDisposition.includes('name=\"output\"')) {\n videoBytes = part.body;\n if (partContentType.startsWith('video/')) {\n videoMediaType = partContentType;\n }\n } else if (partContentType.startsWith('video/')) {\n videoBytes = part.body;\n videoMediaType = partContentType;\n }\n }\n\n if (!jobResult) {\n throw new Error('Prodia multipart response missing job part');\n }\n if (!videoBytes) {\n throw new Error('Prodia multipart response missing output video');\n }\n\n return {\n value: { jobResult, videoBytes, videoMediaType },\n responseHeaders,\n };\n };\n}\n\nasync function resolveVideoFileData(\n file: NonNullable<\n Parameters<Experimental_VideoModelV4['doGenerate']>[0]['image']\n >,\n fetchFunction?: FetchFunction,\n): Promise<{ bytes: Uint8Array; mediaType: string }> {\n if (file.type === 'file') {\n const data =\n typeof file.data === 'string'\n ? convertBase64ToUint8Array(file.data)\n : file.data;\n return { bytes: data, mediaType: file.mediaType };\n }\n // URL type - fetch the data\n const response = await (fetchFunction ?? globalThis.fetch)(file.url);\n const arrayBuffer = await response.arrayBuffer();\n const mediaType =\n response.headers.get('content-type') ?? 'application/octet-stream';\n return { bytes: new Uint8Array(arrayBuffer), mediaType };\n}\n\nfunction getExtension(mediaType: string): string {\n const map: Record<string, string> = {\n 'image/png': '.png',\n 'image/jpeg': '.jpg',\n 'image/webp': '.webp',\n 'video/mp4': '.mp4',\n 'video/webm': '.webm',\n };\n return map[mediaType] ?? '';\n}\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":["z","z","combineHeaders","lazySchema","parseJSON","parseProviderOptions","resolve","zodSchema","z","parseProviderOptions","combineHeaders","resolve","_a","lazySchema","zodSchema","z","parseJSON","combineHeaders","convertBase64ToUint8Array","lazySchema","parseJSON","parseProviderOptions","postFormDataToApi","postToApi","resolve","zodSchema","z","parseProviderOptions","combineHeaders","resolve","postFormDataToApi","postToApi","lazySchema","zodSchema","z","parseJSON","convertBase64ToUint8Array"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ai-sdk/prodia",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.14",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
}
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@ai-sdk/provider": "4.0.0-beta.
|
|
32
|
-
"@ai-sdk/provider-utils": "5.0.0-beta.
|
|
31
|
+
"@ai-sdk/provider": "4.0.0-beta.6",
|
|
32
|
+
"@ai-sdk/provider-utils": "5.0.0-beta.10"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@types/node": "20.17.24",
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import
|
|
2
|
-
LanguageModelV4,
|
|
3
|
-
LanguageModelV4CallOptions,
|
|
4
|
-
LanguageModelV4Content,
|
|
5
|
-
LanguageModelV4StreamPart,
|
|
6
|
-
SharedV4Warning,
|
|
1
|
+
import {
|
|
2
|
+
type LanguageModelV4,
|
|
3
|
+
type LanguageModelV4CallOptions,
|
|
4
|
+
type LanguageModelV4Content,
|
|
5
|
+
type LanguageModelV4StreamPart,
|
|
6
|
+
type SharedV4Warning,
|
|
7
|
+
UnsupportedFunctionalityError,
|
|
7
8
|
} from '@ai-sdk/provider';
|
|
8
9
|
import type { InferSchema } from '@ai-sdk/provider-utils';
|
|
9
10
|
import {
|
|
10
11
|
combineHeaders,
|
|
11
12
|
isCustomReasoning,
|
|
13
|
+
isProviderReference,
|
|
12
14
|
convertBase64ToUint8Array,
|
|
13
15
|
generateId,
|
|
14
16
|
lazySchema,
|
|
@@ -126,6 +128,12 @@ export class ProdiaLanguageModel implements LanguageModelV4 {
|
|
|
126
128
|
if (message.role === 'user') {
|
|
127
129
|
for (const part of message.content) {
|
|
128
130
|
if (part.type === 'file' && part.mediaType.startsWith('image/')) {
|
|
131
|
+
if (isProviderReference(part.data)) {
|
|
132
|
+
throw new UnsupportedFunctionalityError({
|
|
133
|
+
functionality: 'file parts with provider references',
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
|
|
129
137
|
if (part.data instanceof Uint8Array) {
|
|
130
138
|
imageBytes = part.data;
|
|
131
139
|
} else if (typeof part.data === 'string') {
|