@ai-sdk/prodia 0.0.7 → 0.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @ai-sdk/prodia
2
2
 
3
+ ## 0.0.9
4
+
5
+ ### Patch Changes
6
+
7
+ - 783fa6c: chore: ensure consistent import handling and avoid import duplicates or cycles
8
+ - Updated dependencies [783fa6c]
9
+ - @ai-sdk/provider-utils@3.0.25
10
+ - @ai-sdk/provider@2.0.3
11
+
12
+ ## 0.0.8
13
+
14
+ ### Patch Changes
15
+
16
+ - 0a00b9b: trigger release for all packages after provenance setup
17
+ - Updated dependencies [0a00b9b]
18
+ - @ai-sdk/provider@2.0.2
19
+ - @ai-sdk/provider-utils@3.0.24
20
+
3
21
  ## 0.0.7
4
22
 
5
23
  ### Patch Changes
package/dist/index.js CHANGED
@@ -696,7 +696,7 @@ function createLanguageMultipartResponseHandler() {
696
696
  }
697
697
 
698
698
  // src/version.ts
699
- var VERSION = true ? "0.0.7" : "0.0.0-test";
699
+ var VERSION = true ? "0.0.9" : "0.0.0-test";
700
700
 
701
701
  // src/prodia-provider.ts
702
702
  var defaultBaseURL = "https://inference.prodia.com/v2";
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/version.ts"],"sourcesContent":["export type { ProdiaImageProviderOptions } 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 { ProdiaProvider, ProdiaProviderSettings } from './prodia-provider';\nexport { createProdia, prodia } from './prodia-provider';\nexport { VERSION } from './version';\n","import {\n type ImageModelV2,\n type LanguageModelV2,\n NoSuchModelError,\n type ProviderV2,\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 { 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 ProviderV2 {\n /**\n * Creates a language model for multimodal generation (img2img with text+image output).\n */\n languageModel(modelId: ProdiaLanguageModelId): LanguageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: ProdiaImageModelId): ImageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: ProdiaImageModelId): ImageModelV2;\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 textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'textEmbeddingModel',\n });\n };\n\n return {\n languageModel: createLanguageModel,\n imageModel: createImageModel,\n image: createImageModel,\n textEmbeddingModel,\n };\n}\n\nexport const prodia = createProdia();\n","import type { ImageModelV2, ImageModelV2CallWarning } 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 ImageModelV2 {\n readonly specificationVersion = 'v2';\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<ImageModelV2['doGenerate']>[0]) {\n const warnings: Array<ImageModelV2CallWarning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions,\n schema: prodiaImageProviderOptionsSchema,\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-setting',\n setting: '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<ImageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV2['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 prodiaImageProviderOptionsSchema = 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 ProdiaImageProviderOptions = InferSchema<\n typeof prodiaImageProviderOptionsSchema\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 LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2CallWarning,\n LanguageModelV2Content,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\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 LanguageModelV2 {\n readonly specificationVersion = 'v2';\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: LanguageModelV2CallOptions) {\n const warnings: Array<LanguageModelV2CallWarning> = [];\n\n if (options.temperature !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'temperature' });\n }\n if (options.topP !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'topP' });\n }\n if (options.topK !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'topK' });\n }\n if (options.maxOutputTokens !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'maxOutputTokens',\n });\n }\n if (options.stopSequences !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'stopSequences' });\n }\n if (options.presencePenalty !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n if (options.frequencyPenalty !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n if (options.tools !== undefined && options.tools.length > 0) {\n warnings.push({ type: 'unsupported-setting', setting: 'tools' });\n }\n if (options.toolChoice !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'toolChoice' });\n }\n if (\n options.responseFormat !== undefined &&\n options.responseFormat.type !== 'text'\n ) {\n warnings.push({ type: 'unsupported-setting', setting: 'responseFormat' });\n }\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaLanguageModelOptionsSchema,\n });\n\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 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 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 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 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<LanguageModelV2Content> = [];\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: 'stop' as const,\n usage: {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\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: LanguageModelV2CallOptions) {\n const result = await this.doGenerate(options);\n\n const stream = new ReadableStream<LanguageModelV2StreamPart>({\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 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","// 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"]}
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/version.ts"],"sourcesContent":["export type { ProdiaImageProviderOptions } 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 { ProdiaProvider, ProdiaProviderSettings } from './prodia-provider';\nexport { createProdia, prodia } from './prodia-provider';\nexport { VERSION } from './version';\n","import {\n type ImageModelV2,\n type LanguageModelV2,\n NoSuchModelError,\n type ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\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 { 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 ProviderV2 {\n /**\n * Creates a language model for multimodal generation (img2img with text+image output).\n */\n languageModel(modelId: ProdiaLanguageModelId): LanguageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: ProdiaImageModelId): ImageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: ProdiaImageModelId): ImageModelV2;\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 textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'textEmbeddingModel',\n });\n };\n\n return {\n languageModel: createLanguageModel,\n imageModel: createImageModel,\n image: createImageModel,\n textEmbeddingModel,\n };\n}\n\nexport const prodia = createProdia();\n","import type { ImageModelV2, ImageModelV2CallWarning } from '@ai-sdk/provider';\nimport {\n type InferSchema,\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 {\n type ProdiaModelConfig,\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n type ProdiaJobResult,\n} from './prodia-api';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\n\nexport class ProdiaImageModel implements ImageModelV2 {\n readonly specificationVersion = 'v2';\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<ImageModelV2['doGenerate']>[0]) {\n const warnings: Array<ImageModelV2CallWarning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions,\n schema: prodiaImageProviderOptionsSchema,\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-setting',\n setting: '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<ImageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV2['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 prodiaImageProviderOptionsSchema = 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 ProdiaImageProviderOptions = InferSchema<\n typeof prodiaImageProviderOptionsSchema\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 {\n createJsonErrorResponseHandler,\n type FetchFunction,\n type Resolvable,\n} 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 LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2CallWarning,\n LanguageModelV2Content,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n type InferSchema,\n combineHeaders,\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 {\n type ProdiaModelConfig,\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n type ProdiaJobResult,\n} from './prodia-api';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\n\nexport class ProdiaLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\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: LanguageModelV2CallOptions) {\n const warnings: Array<LanguageModelV2CallWarning> = [];\n\n if (options.temperature !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'temperature' });\n }\n if (options.topP !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'topP' });\n }\n if (options.topK !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'topK' });\n }\n if (options.maxOutputTokens !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'maxOutputTokens',\n });\n }\n if (options.stopSequences !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'stopSequences' });\n }\n if (options.presencePenalty !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n if (options.frequencyPenalty !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n if (options.tools !== undefined && options.tools.length > 0) {\n warnings.push({ type: 'unsupported-setting', setting: 'tools' });\n }\n if (options.toolChoice !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'toolChoice' });\n }\n if (\n options.responseFormat !== undefined &&\n options.responseFormat.type !== 'text'\n ) {\n warnings.push({ type: 'unsupported-setting', setting: 'responseFormat' });\n }\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaLanguageModelOptionsSchema,\n });\n\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 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 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 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 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<LanguageModelV2Content> = [];\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: 'stop' as const,\n usage: {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\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: LanguageModelV2CallOptions) {\n const result = await this.doGenerate(options);\n\n const stream = new ReadableStream<LanguageModelV2StreamPart>({\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 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","// 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"]}
package/dist/index.mjs CHANGED
@@ -21,7 +21,9 @@ import {
21
21
  import { z as z2 } from "zod/v4";
22
22
 
23
23
  // src/prodia-api.ts
24
- import { createJsonErrorResponseHandler } from "@ai-sdk/provider-utils";
24
+ import {
25
+ createJsonErrorResponseHandler
26
+ } from "@ai-sdk/provider-utils";
25
27
  import { z } from "zod/v4";
26
28
  var prodiaJobResultSchema = z.object({
27
29
  id: z.string(),
@@ -692,7 +694,7 @@ function createLanguageMultipartResponseHandler() {
692
694
  }
693
695
 
694
696
  // src/version.ts
695
- var VERSION = true ? "0.0.7" : "0.0.0-test";
697
+ var VERSION = true ? "0.0.9" : "0.0.0-test";
696
698
 
697
699
  // src/prodia-provider.ts
698
700
  var defaultBaseURL = "https://inference.prodia.com/v2";
@@ -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/version.ts"],"sourcesContent":["import {\n type ImageModelV2,\n type LanguageModelV2,\n NoSuchModelError,\n type ProviderV2,\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 { 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 ProviderV2 {\n /**\n * Creates a language model for multimodal generation (img2img with text+image output).\n */\n languageModel(modelId: ProdiaLanguageModelId): LanguageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: ProdiaImageModelId): ImageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: ProdiaImageModelId): ImageModelV2;\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 textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'textEmbeddingModel',\n });\n };\n\n return {\n languageModel: createLanguageModel,\n imageModel: createImageModel,\n image: createImageModel,\n textEmbeddingModel,\n };\n}\n\nexport const prodia = createProdia();\n","import type { ImageModelV2, ImageModelV2CallWarning } 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 ImageModelV2 {\n readonly specificationVersion = 'v2';\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<ImageModelV2['doGenerate']>[0]) {\n const warnings: Array<ImageModelV2CallWarning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions,\n schema: prodiaImageProviderOptionsSchema,\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-setting',\n setting: '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<ImageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV2['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 prodiaImageProviderOptionsSchema = 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 ProdiaImageProviderOptions = InferSchema<\n typeof prodiaImageProviderOptionsSchema\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 LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2CallWarning,\n LanguageModelV2Content,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport type { InferSchema } from '@ai-sdk/provider-utils';\nimport {\n combineHeaders,\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 LanguageModelV2 {\n readonly specificationVersion = 'v2';\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: LanguageModelV2CallOptions) {\n const warnings: Array<LanguageModelV2CallWarning> = [];\n\n if (options.temperature !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'temperature' });\n }\n if (options.topP !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'topP' });\n }\n if (options.topK !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'topK' });\n }\n if (options.maxOutputTokens !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'maxOutputTokens',\n });\n }\n if (options.stopSequences !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'stopSequences' });\n }\n if (options.presencePenalty !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n if (options.frequencyPenalty !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n if (options.tools !== undefined && options.tools.length > 0) {\n warnings.push({ type: 'unsupported-setting', setting: 'tools' });\n }\n if (options.toolChoice !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'toolChoice' });\n }\n if (\n options.responseFormat !== undefined &&\n options.responseFormat.type !== 'text'\n ) {\n warnings.push({ type: 'unsupported-setting', setting: 'responseFormat' });\n }\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaLanguageModelOptionsSchema,\n });\n\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 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 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 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 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<LanguageModelV2Content> = [];\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: 'stop' as const,\n usage: {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\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: LanguageModelV2CallOptions) {\n const result = await this.doGenerate(options);\n\n const stream = new ReadableStream<LanguageModelV2StreamPart>({\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 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","// 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"]}
1
+ {"version":3,"sources":["../src/prodia-provider.ts","../src/prodia-image-model.ts","../src/prodia-api.ts","../src/prodia-language-model.ts","../src/version.ts"],"sourcesContent":["import {\n type ImageModelV2,\n type LanguageModelV2,\n NoSuchModelError,\n type ProviderV2,\n} from '@ai-sdk/provider';\nimport {\n type FetchFunction,\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 { 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 ProviderV2 {\n /**\n * Creates a language model for multimodal generation (img2img with text+image output).\n */\n languageModel(modelId: ProdiaLanguageModelId): LanguageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n image(modelId: ProdiaImageModelId): ImageModelV2;\n\n /**\n * Creates a model for image generation.\n */\n imageModel(modelId: ProdiaImageModelId): ImageModelV2;\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 textEmbeddingModel = (modelId: string) => {\n throw new NoSuchModelError({\n modelId,\n modelType: 'textEmbeddingModel',\n });\n };\n\n return {\n languageModel: createLanguageModel,\n imageModel: createImageModel,\n image: createImageModel,\n textEmbeddingModel,\n };\n}\n\nexport const prodia = createProdia();\n","import type { ImageModelV2, ImageModelV2CallWarning } from '@ai-sdk/provider';\nimport {\n type InferSchema,\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 {\n type ProdiaModelConfig,\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n type ProdiaJobResult,\n} from './prodia-api';\nimport type { ProdiaImageModelId } from './prodia-image-settings';\n\nexport class ProdiaImageModel implements ImageModelV2 {\n readonly specificationVersion = 'v2';\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<ImageModelV2['doGenerate']>[0]) {\n const warnings: Array<ImageModelV2CallWarning> = [];\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions,\n schema: prodiaImageProviderOptionsSchema,\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-setting',\n setting: '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<ImageModelV2['doGenerate']>[0],\n ): Promise<Awaited<ReturnType<ImageModelV2['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 prodiaImageProviderOptionsSchema = 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 ProdiaImageProviderOptions = InferSchema<\n typeof prodiaImageProviderOptionsSchema\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 {\n createJsonErrorResponseHandler,\n type FetchFunction,\n type Resolvable,\n} 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 LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2CallWarning,\n LanguageModelV2Content,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n type InferSchema,\n combineHeaders,\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 {\n type ProdiaModelConfig,\n buildProdiaProviderMetadata,\n parseMultipart,\n prodiaFailedResponseHandler,\n prodiaJobResultSchema,\n type ProdiaJobResult,\n} from './prodia-api';\nimport type { ProdiaLanguageModelId } from './prodia-language-model-settings';\n\nexport class ProdiaLanguageModel implements LanguageModelV2 {\n readonly specificationVersion = 'v2';\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: LanguageModelV2CallOptions) {\n const warnings: Array<LanguageModelV2CallWarning> = [];\n\n if (options.temperature !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'temperature' });\n }\n if (options.topP !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'topP' });\n }\n if (options.topK !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'topK' });\n }\n if (options.maxOutputTokens !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'maxOutputTokens',\n });\n }\n if (options.stopSequences !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'stopSequences' });\n }\n if (options.presencePenalty !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'presencePenalty',\n });\n }\n if (options.frequencyPenalty !== undefined) {\n warnings.push({\n type: 'unsupported-setting',\n setting: 'frequencyPenalty',\n });\n }\n if (options.tools !== undefined && options.tools.length > 0) {\n warnings.push({ type: 'unsupported-setting', setting: 'tools' });\n }\n if (options.toolChoice !== undefined) {\n warnings.push({ type: 'unsupported-setting', setting: 'toolChoice' });\n }\n if (\n options.responseFormat !== undefined &&\n options.responseFormat.type !== 'text'\n ) {\n warnings.push({ type: 'unsupported-setting', setting: 'responseFormat' });\n }\n\n const prodiaOptions = await parseProviderOptions({\n provider: 'prodia',\n providerOptions: options.providerOptions,\n schema: prodiaLanguageModelOptionsSchema,\n });\n\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 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 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 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 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<LanguageModelV2Content> = [];\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: 'stop' as const,\n usage: {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\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: LanguageModelV2CallOptions) {\n const result = await this.doGenerate(options);\n\n const stream = new ReadableStream<LanguageModelV2StreamPart>({\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 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","// 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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/prodia",
3
- "version": "0.0.7",
3
+ "version": "0.0.9",
4
4
  "license": "Apache-2.0",
5
5
  "sideEffects": false,
6
6
  "main": "./dist/index.js",
@@ -19,15 +19,15 @@
19
19
  }
20
20
  },
21
21
  "dependencies": {
22
- "@ai-sdk/provider": "2.0.1",
23
- "@ai-sdk/provider-utils": "3.0.23"
22
+ "@ai-sdk/provider": "2.0.3",
23
+ "@ai-sdk/provider-utils": "3.0.25"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "20.17.24",
27
27
  "tsup": "^8",
28
28
  "typescript": "5.8.3",
29
29
  "zod": "3.25.76",
30
- "@ai-sdk/test-server": "0.0.2",
30
+ "@ai-sdk/test-server": "0.0.4",
31
31
  "@vercel/ai-tsconfig": "0.0.0"
32
32
  },
33
33
  "peerDependencies": {
@@ -42,7 +42,8 @@
42
42
  "homepage": "https://ai-sdk.dev/docs",
43
43
  "repository": {
44
44
  "type": "git",
45
- "url": "git+https://github.com/vercel/ai.git"
45
+ "url": "https://github.com/vercel/ai",
46
+ "directory": "packages/prodia"
46
47
  },
47
48
  "bugs": {
48
49
  "url": "https://github.com/vercel/ai/issues"