@neta-art/generation 0.1.25 → 0.1.26
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/README.md +10 -0
- package/dist/{builtins-CYamscRp.js → builtins-Cvj5PK_9.js} +10 -4
- package/dist/builtins-Cvj5PK_9.js.map +1 -0
- package/dist/{builtins-D0tS2UtT.d.ts → builtins-jIE_k69Z.d.ts} +24 -2
- package/dist/builtins-jIE_k69Z.d.ts.map +1 -0
- package/dist/builtins.d.ts +1 -1
- package/dist/builtins.js +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/{export-config-hX4jDjSs.js → export-config-B3sM1Bxd.js} +41 -36
- package/dist/export-config-B3sM1Bxd.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/models/minimax-h3-unrestricted.yaml +1 -1
- package/models/minimax-h3.yaml +1 -1
- package/models/seedance-2-0-fast.yaml +1 -1
- package/models/seedance-2-0.yaml +1 -1
- package/package.json +1 -1
- package/dist/builtins-CYamscRp.js.map +0 -1
- package/dist/builtins-D0tS2UtT.d.ts.map +0 -1
- package/dist/export-config-hX4jDjSs.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"export-config-hX4jDjSs.js","names":["output: Record<string, string>","isRecord","resolved: Record<string, unknown>","merged: Record<string, unknown>","REQUEST_TIMEOUT_MS","DEFAULT_POLL_INTERVAL_SEC","DEFAULT_MAX_WAIT_SEC","sleep","asString","asNumber","asBoolean","normalizeStatus","getMediaRole","classifyMedia","content: Array<Record<string, unknown>>","resolveMedia","extractTaskId","metadata: Record<string, unknown>","requestJson","inputMedia: InputMedia[]","payload: Record<string, unknown>","output: GenerationContentBlock[]","REQUEST_TIMEOUT_MS","isRecord","buildPayload","payload: Record<string, unknown>","audioSpeechAdapter: GenerationAdapter","REQUEST_TIMEOUT_MS","generationConfig: Record<string, unknown>","image: Record<string, string>","output: GenerationContentBlock[]","REQUEST_TIMEOUT_MS","DEFAULT_POLL_INTERVAL_SEC","DEFAULT_MAX_WAIT_SEC","KLING_MODELS: Record<\n string,\n {\n submitPath: string;\n defaultModelName: string;\n imageMode: KlingImageMode;\n allowPromptlessOmni?: boolean;\n }\n>","sleep","asString","asInteger","isRecord","normalizeStatus","buildPayload","payload: Record<string, unknown>","extractTaskId","requestJson","parsed: unknown","REQUEST_TIMEOUT_MS","DEFAULT_POLL_INTERVAL_SEC","DEFAULT_MAX_WAIT_SEC","sleep","asString","asInteger","isRecord","normalizeStatus","extractTaskId","unwrapTaskPayload","extractTaskStatus","requestJson","parsed: unknown","REQUEST_TIMEOUT_MS","output: GenerationContentBlock[]","REQUEST_TIMEOUT_MS","payload: Record<string, unknown>","output: GenerationContentBlock[]","REQUEST_TIMEOUT_MS","DEFAULT_POLL_INTERVAL_SEC","DEFAULT_MAX_WAIT_SEC","OPERATION_PATHS: Record<\n string,\n { path: string; poll: boolean; defaultMusicVersion?: boolean; textField?: string; requireText?: boolean }\n>","sleep","isRecord","asString","extractTaskId","normalizeStatus","payload: Record<string, unknown>","imageUrl: string | undefined","videoUrl: string | undefined","requestJson","parsed: TaskResponse","output: GenerationContentBlock[]","raw: TaskResponse","isRecord","parsed: unknown","parsed: URL","builtinGenerationAdapters: Record<string, GenerationAdapter>","isRecord","parseYaml","stringifyYaml","fields: GenerationResultFields","defaultGenerationSourceResolver: GenerationSourceResolver","output: Record<string, unknown>","fields: GenerationResultFields | undefined","capturedFields: GenerationResultFields | undefined","capturedBodyRequestId: string | undefined","capturedRequestId: string | undefined","capturedOneApiRequestId: string | undefined"],"sources":["../src/errors.ts","../src/http.ts","../src/validation.ts","../src/adapters/ark-video-generations.ts","../src/adapters/audio-speech.ts","../src/adapters/gemini-generate-content.ts","../src/adapters/kling-video-generations.ts","../src/adapters/minimax-h3-video-generations.ts","../src/adapters/openai-image-edits.ts","../src/adapters/openai-images.ts","../src/adapters/suno-tasks.ts","../src/adapters/video-upscale-native.ts","../src/adapters/index.ts","../src/config.ts","../src/response-fields.ts","../src/source.ts","../src/client.ts","../src/export-config.ts"],"sourcesContent":["export class GenerationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"GenerationError\";\n }\n}\n\nexport class GenerationConfigError extends GenerationError {\n constructor(message: string) {\n super(message);\n this.name = \"GenerationConfigError\";\n }\n}\n\nexport class GenerationValidationError extends GenerationError {\n constructor(message: string) {\n super(message);\n this.name = \"GenerationValidationError\";\n }\n}\n\nexport class GenerationUnsupportedAdapterError extends GenerationError {\n constructor(adapterType: string) {\n super(`Unsupported generation adapter: ${adapterType}`);\n this.name = \"GenerationUnsupportedAdapterError\";\n }\n}\n\nexport class GenerationProviderError extends GenerationError {\n readonly status: number | undefined;\n readonly body: string | undefined;\n readonly details: Record<string, unknown> | undefined;\n\n constructor(\n message = \"Generation provider request failed\",\n options?: { status?: number; body?: string; details?: Record<string, unknown> },\n ) {\n super(message);\n this.name = \"GenerationProviderError\";\n this.status = options?.status;\n this.body = options?.body;\n this.details = options?.details;\n }\n}\n\nexport type GenerationTransportErrorDetails = {\n method: string;\n host?: string;\n path: string;\n elapsedMs: number;\n causeName?: string;\n causeCode?: string;\n causeSyscall?: string;\n causeAddress?: string;\n causePort?: string | number;\n};\n\nexport class GenerationTransportError extends GenerationProviderError {\n declare readonly details: GenerationTransportErrorDetails;\n\n constructor(details: GenerationTransportErrorDetails, cause: unknown) {\n super(transportErrorMessage(details), { details });\n this.name = \"GenerationTransportError\";\n this.cause = cause;\n }\n\n declare cause: unknown;\n}\n\nexport class GenerationTimeoutError extends GenerationProviderError {\n constructor(message = \"Generation request timed out\", details?: Record<string, unknown>) {\n super(message, details ? { details } : undefined);\n this.name = \"GenerationTimeoutError\";\n }\n}\n\nfunction transportErrorMessage(details: GenerationTransportErrorDetails): string {\n return [\n \"Generation transport failed\",\n `method=${details.method}`,\n details.host ? `host=${details.host}` : undefined,\n `path=${details.path}`,\n `elapsed_ms=${details.elapsedMs}`,\n details.causeCode ? `cause_code=${details.causeCode}` : undefined,\n details.causeName ? `cause_name=${details.causeName}` : undefined,\n details.causeSyscall ? `cause_syscall=${details.causeSyscall}` : undefined,\n details.causeAddress ? `cause_address=${details.causeAddress}` : undefined,\n details.causePort !== undefined ? `cause_port=${details.causePort}` : undefined,\n ]\n .filter((part): part is string => part !== undefined)\n .join(\" \");\n}\n","import { GenerationTimeoutError, GenerationTransportError, type GenerationTransportErrorDetails } from \"./errors.js\";\nimport type { GenerationDebugConfig } from \"./types.js\";\nimport { compactObject } from \"./utils.js\";\n\nfunction headersToRecord(headers: HeadersInit | undefined): Record<string, string> {\n if (!headers) return {};\n if (headers instanceof Headers) {\n const output: Record<string, string> = {};\n headers.forEach((value, key) => {\n output[key] = value;\n });\n return output;\n }\n if (Array.isArray(headers)) return Object.fromEntries(headers.map(([key, value]) => [key, value]));\n return { ...headers };\n}\n\nfunction parseJsonBody(body: string): unknown {\n try {\n return JSON.parse(body);\n } catch {\n return body;\n }\n}\n\nfunction parseDebugBody(body: BodyInit | null | undefined): unknown {\n if (typeof body !== \"string\") return body ? \"[non-string body]\" : undefined;\n return parseJsonBody(body);\n}\n\nconst TRACE_HEADER_PATTERN =\n /(^|[-_])(request|trace|span|correlation|cf-ray|x-tt-logid)([-_]|$)|^(x-request-id|x-trace-id|x-correlation-id|traceparent|tracestate|cf-ray|server-timing)$/i;\n\nfunction pickTraceHeaders(headers: Record<string, string>): Record<string, string> {\n const output: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n if (TRACE_HEADER_PATTERN.test(key)) output[key] = value;\n }\n return output;\n}\n\nclass DebugObserverError extends Error {\n declare cause: unknown;\n\n constructor(cause: unknown) {\n super(\"Generation debug observer failed\");\n this.name = \"DebugObserverError\";\n this.cause = cause;\n }\n}\n\nfunction emitDebugRequest(debug: GenerationDebugConfig, url: string, init: RequestInit): number {\n try {\n debug.logger({\n type: \"request\",\n url,\n method: init.method ?? \"GET\",\n headers: headersToRecord(init.headers),\n body: parseDebugBody(init.body),\n });\n } catch (cause) {\n throw new DebugObserverError(cause);\n }\n return Date.now();\n}\n\nasync function readDebugResponseBody(response: Response): Promise<unknown> {\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (contentType.includes(\"application/json\") || contentType.includes(\"+json\")) {\n return parseJsonBody(await response.clone().text());\n }\n if (contentType.startsWith(\"text/\")) return response.clone().text();\n return \"[non-text body]\";\n}\n\nasync function emitDebugResponse(\n debug: GenerationDebugConfig,\n url: string,\n response: Response,\n startedAt: number,\n): Promise<void> {\n try {\n const headers = headersToRecord(response.headers);\n debug.logger({\n type: \"response\",\n url,\n status: response.status,\n statusText: response.statusText,\n headers,\n trace: pickTraceHeaders(headers),\n elapsedMs: Date.now() - startedAt,\n ...(debug.includeResponseBody ? { body: await readDebugResponseBody(response) } : {}),\n });\n } catch (cause) {\n throw new DebugObserverError(cause);\n }\n}\n\nexport function createDebugFetch(fetchFn: typeof fetch, debug: GenerationDebugConfig): typeof fetch {\n return (async (input: string | URL | Request, init?: RequestInit) => {\n const url = String(input instanceof Request ? input.url : input);\n const requestInit = init ?? (input instanceof Request ? input : {});\n const startedAt = emitDebugRequest(debug, url, requestInit);\n const response = await fetchFn(input, init);\n await emitDebugResponse(debug, url, response, startedAt);\n return response;\n }) as typeof fetch;\n}\n\nexport async function fetchWithTimeout(\n fetchFn: typeof fetch,\n url: string,\n init: RequestInit,\n timeoutMs: number,\n): Promise<Response> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n const startedAt = Date.now();\n try {\n return await fetchFn(url, { ...init, signal: controller.signal });\n } catch (error) {\n if (error instanceof DebugObserverError) throw error.cause;\n if (error instanceof Error && error.name === \"AbortError\") throw new GenerationTimeoutError();\n throw new GenerationTransportError(transportErrorDetails(url, init, startedAt, error), error);\n } finally {\n clearTimeout(timeout);\n }\n}\n\nexport function joinUrl(baseUrl: string, path: string): string {\n return `${baseUrl.replace(/\\/+$/, \"\")}/${path.replace(/^\\/+/, \"\")}`;\n}\n\nfunction transportErrorDetails(\n rawUrl: string,\n init: RequestInit,\n startedAt: number,\n error: unknown,\n): GenerationTransportErrorDetails {\n const summary = transportErrorSummary(error);\n return compactObject({\n method: (init.method ?? \"GET\").toUpperCase(),\n ...transportErrorTarget(rawUrl),\n elapsedMs: Date.now() - startedAt,\n causeName: summary.causeName ?? summary.name,\n causeCode: summary.causeCode,\n causeSyscall: summary.causeSyscall,\n causeAddress: summary.causeAddress,\n causePort: summary.causePort,\n }) as GenerationTransportErrorDetails;\n}\n\nfunction transportErrorTarget(rawUrl: string): { host?: string; path: string } {\n try {\n const url = new URL(rawUrl);\n return { host: url.host, path: url.pathname };\n } catch {\n const suffixIndex = rawUrl.search(/[?#]/);\n return { path: suffixIndex === -1 ? rawUrl : rawUrl.slice(0, suffixIndex) };\n }\n}\n\nfunction transportErrorSummary(error: unknown) {\n const outer = error instanceof Error ? error : new Error(String(error));\n const cause = isRecord(outer.cause) ? outer.cause : undefined;\n return compactObject({\n name: outer.name,\n causeName: stringProperty(cause, \"name\"),\n causeCode: stringProperty(cause, \"code\") ?? stringProperty(outer, \"code\"),\n causeSyscall: stringProperty(cause, \"syscall\") ?? stringProperty(outer, \"syscall\"),\n causeAddress: stringProperty(cause, \"address\") ?? stringProperty(outer, \"address\"),\n causePort: stringOrNumberProperty(cause, \"port\") ?? stringOrNumberProperty(outer, \"port\"),\n });\n}\n\nfunction stringProperty(value: unknown, key: string): string | undefined {\n if (!isRecord(value)) return undefined;\n const item = value[key];\n return typeof item === \"string\" && item.trim() ? item.trim() : undefined;\n}\n\nfunction stringOrNumberProperty(value: unknown, key: string): string | number | undefined {\n if (!isRecord(value)) return undefined;\n const item = value[key];\n return typeof item === \"string\" || typeof item === \"number\" ? item : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n","import { GenerationValidationError } from \"./errors.js\";\nimport type {\n GenerationContentBlock,\n GenerationContentSpec,\n GenerationMetaFieldSpec,\n GenerationModelDeclaration,\n GenerationParameterSpec,\n} from \"./types.js\";\n\nfunction specsByType(specs: GenerationContentSpec[]) {\n const map = new Map<GenerationContentSpec[\"type\"], GenerationContentSpec>();\n for (const spec of specs) map.set(spec.type, spec);\n return map;\n}\n\nfunction getRole(block: GenerationContentBlock): unknown {\n return block.meta?.role;\n}\n\nexport function validateGenerationContent(\n declaration: GenerationModelDeclaration,\n content: GenerationContentBlock[],\n): void {\n const inputSpecs = specsByType(declaration.content.input);\n const counts = new Map<GenerationContentSpec[\"type\"], number>();\n\n for (const block of content) {\n const spec = inputSpecs.get(block.type);\n if (!spec)\n throw new GenerationValidationError(`Content block type is not supported by ${declaration.model}: ${block.type}`);\n counts.set(block.type, (counts.get(block.type) ?? 0) + 1);\n\n if (\"source\" in block && spec.sources && !spec.sources.includes(block.source.type)) {\n throw new GenerationValidationError(\n `${block.type} source is not supported by ${declaration.model}: ${block.source.type}`,\n );\n }\n\n const role = getRole(block);\n if (spec.roleRequired && (typeof role !== \"string\" || role.length === 0)) {\n throw new GenerationValidationError(`${block.type} role is required by ${declaration.model}`);\n }\n if (role !== undefined && spec.roles) {\n if (typeof role !== \"string\" || role.length === 0 || !spec.roles.includes(role)) {\n throw new GenerationValidationError(\n `${block.type} role is not supported by ${declaration.model}: ${String(role)}`,\n );\n }\n }\n }\n\n for (const spec of declaration.content.input) {\n const count = counts.get(spec.type) ?? 0;\n if (spec.required && count === 0)\n throw new GenerationValidationError(`Missing required ${spec.type} content block`);\n if (spec.min !== undefined && count < spec.min)\n throw new GenerationValidationError(`Expected at least ${spec.min} ${spec.type} content block(s)`);\n if (spec.max !== undefined && count > spec.max)\n throw new GenerationValidationError(`Expected at most ${spec.max} ${spec.type} content block(s)`);\n }\n}\n\nexport function resolveGenerationParameters(\n declaration: GenerationModelDeclaration,\n parameters: Record<string, unknown> | undefined,\n): Record<string, unknown> {\n const specs = declaration.parameters ?? {};\n const resolved: Record<string, unknown> = {};\n const allowUnknownParameters = declaration.allowUnknownParameters ?? false;\n\n for (const key of Object.keys(parameters ?? {})) {\n if (!specs[key]) {\n if (!allowUnknownParameters) throw new GenerationValidationError(`Unknown parameter: ${key}`);\n const value = parameters?.[key];\n if (value !== undefined) resolved[key] = value;\n }\n }\n\n for (const [key, spec] of Object.entries(specs)) {\n const value = parameters?.[key];\n if (value === undefined) {\n if (spec.default !== undefined) resolved[key] = spec.default;\n else if (!spec.optional) throw new GenerationValidationError(`Missing required parameter: ${key}`);\n continue;\n }\n\n validateSpecValue(`Parameter ${key}`, spec, value);\n resolved[key] = value;\n }\n\n return resolved;\n}\n\nexport function mergeGenerationMeta(\n requestMeta: Record<string, unknown> | undefined,\n content: GenerationContentBlock[],\n): Record<string, unknown> {\n const merged: Record<string, unknown> = {};\n mergeMetaFields(merged, requestMeta);\n for (const block of content) {\n mergeMetaFields(merged, block.meta);\n }\n return merged;\n}\n\nfunction normalizeMetaKey(key: string): string {\n return key === \"metadataParams\" ? \"metadata_params\" : key;\n}\n\nfunction mergeMetaFields(target: Record<string, unknown>, meta: Record<string, unknown> | undefined): void {\n for (const [key, value] of Object.entries(meta ?? {})) {\n const normalizedKey = normalizeMetaKey(key);\n if (value !== undefined && target[normalizedKey] === undefined) target[normalizedKey] = value;\n }\n}\n\nfunction validateDimensions(\n label: string,\n value: string,\n spec: NonNullable<Extract<GenerationParameterSpec, { type: \"string\" }>[\"dimensions\"]>,\n): void {\n const separator = spec.separator ?? \"x\";\n const parts = value.split(separator);\n if (parts.length !== 2 || parts.some((part) => !/^\\d+$/.test(part))) {\n throw new GenerationValidationError(`${label} must be formatted as WIDTH${separator}HEIGHT`);\n }\n\n const dimensions = parts.map(Number);\n const { min, max, multipleOf } = spec;\n if (min !== undefined && dimensions.some((dimension) => dimension < min)) {\n throw new GenerationValidationError(`${label} dimensions must be >= ${min}`);\n }\n if (max !== undefined && dimensions.some((dimension) => dimension > max)) {\n throw new GenerationValidationError(`${label} dimensions must be <= ${max}`);\n }\n if (multipleOf !== undefined && dimensions.some((dimension) => dimension % multipleOf !== 0)) {\n throw new GenerationValidationError(`${label} dimensions must be multiples of ${multipleOf}`);\n }\n}\n\nfunction validateSpecValue(\n label: string,\n spec: GenerationParameterSpec | GenerationMetaFieldSpec,\n value: unknown,\n): void {\n switch (spec.type) {\n case \"string\":\n if (typeof value !== \"string\") throw new GenerationValidationError(`${label} must be a string`);\n if (spec.enum && !spec.enum.includes(value))\n throw new GenerationValidationError(`${label} must be one of: ${spec.enum.join(\", \")}`);\n if (spec.dimensions) validateDimensions(label, value, spec.dimensions);\n break;\n case \"number\":\n if (typeof value !== \"number\" || !Number.isFinite(value))\n throw new GenerationValidationError(`${label} must be a number`);\n if (spec.min !== undefined && value < spec.min)\n throw new GenerationValidationError(`${label} must be >= ${spec.min}`);\n if (spec.max !== undefined && value > spec.max)\n throw new GenerationValidationError(`${label} must be <= ${spec.max}`);\n break;\n case \"integer\":\n if (typeof value !== \"number\" || !Number.isInteger(value))\n throw new GenerationValidationError(`${label} must be an integer`);\n if (spec.min !== undefined && value < spec.min)\n throw new GenerationValidationError(`${label} must be >= ${spec.min}`);\n if (spec.max !== undefined && value > spec.max)\n throw new GenerationValidationError(`${label} must be <= ${spec.max}`);\n break;\n case \"boolean\":\n if (typeof value !== \"boolean\") throw new GenerationValidationError(`${label} must be a boolean`);\n break;\n case \"object\":\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n throw new GenerationValidationError(`${label} must be an object`);\n break;\n }\n}\n\nexport function resolveGenerationMeta(\n declaration: GenerationModelDeclaration,\n meta: Record<string, unknown> | undefined,\n content: GenerationContentBlock[],\n): Record<string, unknown> {\n const specs = declaration.meta?.fields ?? {};\n const resolved: Record<string, unknown> = {};\n\n for (const key of Object.keys(meta ?? {})) {\n if (!specs[key]) {\n const value = meta?.[key];\n if (value !== undefined) resolved[key] = value;\n }\n }\n\n for (const [key, spec] of Object.entries(specs)) {\n const value = meta?.[key];\n if (value === undefined) {\n if (!spec.optional) throw new GenerationValidationError(`Missing required meta: ${key}`);\n continue;\n }\n validateSpecValue(`meta.${key}`, spec, value);\n resolved[key] = value;\n }\n\n const taskField = declaration.meta?.taskField;\n const task = taskField && typeof resolved[taskField] === \"string\" ? resolved[taskField] : undefined;\n if (!task) return resolved;\n\n const variant = declaration.meta?.taskVariants?.[task];\n if (!variant) throw new GenerationValidationError(`Unsupported meta.${taskField}: ${task}`);\n\n for (const key of variant.required ?? []) {\n if (resolved[key] === undefined || resolved[key] === null || resolved[key] === \"\") {\n throw new GenerationValidationError(`meta.${taskField} ${task} requires meta.${key}`);\n }\n }\n\n for (const type of variant.requiredContent ?? []) {\n if (!content.some((block) => block.type === type)) {\n throw new GenerationValidationError(`meta.${taskField} ${task} requires ${type} content`);\n }\n }\n\n return resolved;\n}\n\nexport function mergeTextBlocks(declaration: GenerationModelDeclaration, content: GenerationContentBlock[]): string {\n const textSpec = declaration.content.input.find((spec) => spec.type === \"text\");\n const separator = textSpec?.merge === \"space\" ? \" \" : textSpec?.merge === \"concat\" ? \"\" : \"\\n\";\n return content\n .filter((block): block is Extract<GenerationContentBlock, { type: \"text\" }> => block.type === \"text\")\n .map((block) => block.text)\n .join(separator)\n .trim();\n}\n","import { GenerationProviderError, GenerationTimeoutError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type { GenerationAdapterInput, GenerationContentBlock, GenerationSource } from \"../types.js\";\nimport { compactObject, getBlockMeta } from \"../utils.js\";\nimport { mergeTextBlocks } from \"../validation.js\";\n\n// Keep per-request timeout comfortably above max_wait so polling controls total wait time.\nconst REQUEST_TIMEOUT_MS = 1_860_000;\nconst DEFAULT_POLL_INTERVAL_SEC = 2;\nconst DEFAULT_MAX_WAIT_SEC = 600;\n\ntype ArkCreateTaskResponse = { id?: unknown; task_id?: unknown; status?: unknown };\n\ntype ArkTaskStatusResponse = {\n data?: {\n status?: unknown;\n result_url?: unknown;\n progress?: unknown;\n first_frame?: unknown;\n data?: {\n status?: unknown;\n content?: { video_url?: unknown; first_frame?: unknown };\n resolution?: unknown;\n ratio?: unknown;\n duration?: unknown;\n framespersecond?: unknown;\n seed?: unknown;\n generate_audio?: unknown;\n model?: unknown;\n usage?: unknown;\n };\n };\n};\n\ntype MediaMode = \"image\" | \"frame\" | \"reference\";\ntype MediaKind = \"image\" | \"video\";\ntype InputMedia = { kind: MediaKind; source: GenerationSource; role: string | undefined };\ntype ResolvedMedia = { kind: MediaKind; url: string; role: string | undefined };\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value ? value : undefined;\n}\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction asBoolean(value: unknown): boolean | undefined {\n return typeof value === \"boolean\" ? value : undefined;\n}\n\nfunction normalizeStatus(value: string): string {\n const status = value.toLowerCase();\n return status === \"success\" ? \"succeeded\" : status;\n}\n\nfunction getIntegerParameter(parameters: Record<string, unknown>, key: string, fallback: number): number {\n const value = parameters[key];\n return typeof value === \"number\" && Number.isInteger(value) ? value : fallback;\n}\n\nfunction getMediaRole(block: Extract<GenerationContentBlock, { type: \"image\" | \"video\" }>): string | undefined {\n const role = getBlockMeta(block)?.role;\n return typeof role === \"string\" && role ? role : undefined;\n}\n\nfunction isFrameImage(item: InputMedia): boolean {\n return item.kind === \"image\" && (item.role === \"first_frame\" || item.role === \"last_frame\");\n}\n\nfunction isReferenceMedia(item: InputMedia): boolean {\n return (\n (item.kind === \"image\" && item.role === \"reference_image\") ||\n (item.kind === \"video\" && item.role === \"reference_video\")\n );\n}\n\nfunction assertSingleRole(media: InputMedia[], role: string, message: string): void {\n if (media.filter((item) => item.role === role).length > 1) {\n throw new GenerationValidationError(message);\n }\n}\n\nfunction classifyMedia(media: InputMedia[]): MediaMode | null {\n if (media.length === 0) return null;\n\n for (const item of media) {\n if (\n item.kind === \"image\" &&\n item.role &&\n item.role !== \"first_frame\" &&\n item.role !== \"last_frame\" &&\n item.role !== \"reference_image\"\n ) {\n throw new GenerationValidationError(\"Image input must use meta.role first_frame, last_frame, or reference_image\");\n }\n if (item.kind === \"video\" && item.role !== \"reference_video\") {\n throw new GenerationValidationError(\"Video input must use meta.role reference_video\");\n }\n }\n\n const hasFrame = media.some(isFrameImage);\n const hasReference = media.some(isReferenceMedia);\n const hasPlain = media.some((item) => item.kind === \"image\" && !item.role);\n const modes = [hasPlain, hasFrame, hasReference].filter(Boolean).length;\n if (modes > 1)\n throw new GenerationValidationError(\n \"Cannot mix video media modes: use only plain image, first_frame/last_frame, or reference_image/reference_video\",\n );\n if (hasReference) {\n assertSingleRole(media, \"reference_video\", \"Reference mode supports at most one reference_video\");\n return \"reference\";\n }\n if (hasFrame) {\n assertSingleRole(media, \"first_frame\", \"Frame mode supports at most one first_frame image\");\n assertSingleRole(media, \"last_frame\", \"Frame mode supports at most one last_frame image\");\n return \"frame\";\n }\n if (hasPlain) {\n if (media.filter((item) => item.kind === \"image\" && !item.role).length > 1) {\n throw new GenerationValidationError(\"Plain image mode supports at most one image\");\n }\n return \"image\";\n }\n return null;\n}\n\nfunction buildMetadataContent(media: ResolvedMedia[], mode: Exclude<MediaMode, \"image\">) {\n const content: Array<Record<string, unknown>> = [];\n for (const item of media) {\n if (mode === \"frame\" && (item.kind !== \"image\" || (item.role !== \"first_frame\" && item.role !== \"last_frame\"))) {\n throw new GenerationValidationError(\"Frame mode images must use meta.role first_frame or last_frame\");\n }\n if (\n mode === \"reference\" &&\n !(\n (item.kind === \"image\" && item.role === \"reference_image\") ||\n (item.kind === \"video\" && item.role === \"reference_video\")\n )\n ) {\n throw new GenerationValidationError(\"Reference mode media must use meta.role reference_image or reference_video\");\n }\n if (item.kind === \"image\") {\n content.push({ type: \"image_url\", image_url: { url: item.url }, role: item.role });\n } else {\n content.push({ type: \"video_url\", video_url: { url: item.url }, role: item.role });\n }\n }\n return content;\n}\n\nasync function resolveMedia(input: GenerationAdapterInput, media: InputMedia[]): Promise<ResolvedMedia[]> {\n return Promise.all(\n media.map(async (item) => ({\n kind: item.kind,\n role: item.role,\n url: await input.context.resolveSource(item.source),\n })),\n );\n}\n\nfunction extractTaskId(response: ArkCreateTaskResponse): string {\n const taskId = asString(response.task_id) ?? asString(response.id);\n if (!taskId) {\n throw new GenerationProviderError(\"Video generation provider did not return a task id\", {\n details: { response },\n });\n }\n return taskId;\n}\n\nfunction normalizeTaskStatus(response: ArkTaskStatusResponse) {\n if (response.data) {\n const wrapper = response.data;\n const native = wrapper.data;\n const status = normalizeStatus(asString(native?.status) ?? asString(wrapper.status) ?? \"unknown\");\n const videoUrl = asString(wrapper.result_url) ?? asString(native?.content?.video_url);\n const firstFrameUrl = asString(wrapper.first_frame) ?? asString(native?.content?.first_frame);\n const metadata: Record<string, unknown> = {\n progress: wrapper.progress,\n resolution: native?.resolution,\n ratio: native?.ratio,\n duration: native?.duration,\n framespersecond: native?.framespersecond,\n seed: native?.seed,\n generate_audio: native?.generate_audio,\n model: native?.model,\n usage: native?.usage,\n };\n for (const key of Object.keys(metadata)) if (metadata[key] === undefined) delete metadata[key];\n return { status, videoUrl, firstFrameUrl, metadata };\n }\n return { status: \"unknown\", videoUrl: undefined, firstFrameUrl: undefined, metadata: {} };\n}\n\nasync function requestJson(input: GenerationAdapterInput, path: string, init: RequestInit): Promise<unknown> {\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, path),\n {\n ...init,\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n \"Content-Type\": \"application/json\",\n ...init.headers,\n },\n },\n REQUEST_TIMEOUT_MS,\n );\n\n if (!response.ok) {\n const body = await response.text().catch(() => response.statusText);\n throw new GenerationProviderError(\"Video generation provider request failed\", { status: response.status, body });\n }\n return response.json();\n}\n\nexport async function arkVideoGenerationsAdapter(input: GenerationAdapterInput): Promise<GenerationContentBlock[]> {\n const prompt = mergeTextBlocks(input.declaration, input.request.content);\n if (!prompt) throw new GenerationValidationError(\"Prompt text is required\");\n\n const mediaBlocks = input.request.content.filter(\n (block): block is Extract<GenerationContentBlock, { type: \"image\" | \"video\" }> =>\n block.type === \"image\" || block.type === \"video\",\n );\n const inputMedia: InputMedia[] = mediaBlocks.map((block) => ({\n kind: block.type,\n source: block.source,\n role: getMediaRole(block),\n }));\n\n const mode = classifyMedia(inputMedia);\n const media = await resolveMedia(input, inputMedia);\n const resolution = asString(input.parameters.resolution) ?? \"720p\";\n const ratio = asString(input.request.parameters?.ratio) ?? asString(input.parameters.ratio) ?? \"16:9\";\n const duration = getIntegerParameter(input.parameters, \"duration\", 5);\n const fps = getIntegerParameter(input.parameters, \"fps\", 24);\n const pollIntervalSec = getIntegerParameter(input.parameters, \"poll_interval\", DEFAULT_POLL_INTERVAL_SEC);\n const maxWaitSec = getIntegerParameter(input.parameters, \"max_wait\", DEFAULT_MAX_WAIT_SEC);\n const generateAudio = asBoolean(input.parameters.generate_audio) ?? true;\n const returnLastFrame = asBoolean(input.parameters.return_last_frame) ?? true;\n const cameraFixed = asBoolean(input.parameters.camera_fixed) ?? false;\n const watermark = asBoolean(input.parameters.watermark) ?? false;\n const seed = asNumber(input.parameters.seed);\n\n const payload: Record<string, unknown> = { model: input.declaration.model, prompt };\n const metadata: Record<string, unknown> = { duration, fps, generate_audio: generateAudio, resolution, ratio };\n if (seed !== undefined) metadata.seed = seed;\n if (returnLastFrame) metadata.return_last_frame = true;\n if (cameraFixed) metadata.camera_fixed = true;\n if (watermark) metadata.watermark = true;\n\n if (mode === \"frame\" || mode === \"reference\") {\n metadata.content = buildMetadataContent(media, mode);\n } else {\n const firstImage = media.find((item) => item.kind === \"image\");\n if (firstImage) payload.image = firstImage.url;\n }\n payload.metadata = metadata;\n\n const task = (await requestJson(input, \"/v1/video/generations\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })) as ArkCreateTaskResponse;\n const taskId = extractTaskId(task);\n const startedAt = Date.now();\n\n while (Date.now() - startedAt <= maxWaitSec * 1000) {\n await sleep(pollIntervalSec * 1000);\n const rawStatus = (await requestJson(input, `/v1/video/generations/${encodeURIComponent(taskId)}`, {\n method: \"GET\",\n })) as ArkTaskStatusResponse;\n const status = normalizeTaskStatus(rawStatus);\n\n if (status.status === \"succeeded\") {\n if (!status.videoUrl) {\n throw new GenerationProviderError(\"Video generation succeeded but returned no video URL\", {\n details: compactObject({ taskId, rawStatus, metadata: status.metadata }),\n });\n }\n const output: GenerationContentBlock[] = [\n {\n type: \"video\",\n source: { type: \"url\", url: status.videoUrl },\n meta: { task_id: taskId, status: status.status, ...status.metadata },\n },\n ];\n if (status.firstFrameUrl)\n output.push({\n type: \"image\",\n source: { type: \"url\", url: status.firstFrameUrl },\n meta: { role: \"first_frame\", task_id: taskId },\n });\n return output;\n }\n\n if ([\"failed\", \"expired\", \"cancelled\"].includes(status.status)) {\n throw new GenerationProviderError(`Video generation ${status.status}`, { details: { taskId, rawStatus } });\n }\n }\n\n throw new GenerationTimeoutError(\"Timed out waiting for video generation\", { taskId });\n}\n","import { GenerationProviderError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type {\n GenerationAdapter,\n GenerationAdapterInput,\n GenerationContentBlock,\n ResolvedGenerationRequest,\n} from \"../types.js\";\n\nconst REQUEST_TIMEOUT_MS = 210_000;\nconst QWEN_MODELS = new Set([\"qwen-tts\", \"qwen-audio-3.0-tts-plus\", \"qwen-audio-3.0-tts-flash\"]);\nconst QWEN_AUDIO_3_MODELS = new Set([\"qwen-audio-3.0-tts-plus\", \"qwen-audio-3.0-tts-flash\"]);\nconst HIGGS_MODEL = \"higgs-tts\";\n\ntype TextBlock = Extract<GenerationContentBlock, { type: \"text\" }>;\ntype AudioBlock = Extract<GenerationContentBlock, { type: \"audio\" }>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction textBlocks(input: ResolvedGenerationRequest): TextBlock[] {\n return input.request.content.filter((block): block is TextBlock => block.type === \"text\");\n}\n\nfunction audioBlocks(input: ResolvedGenerationRequest): AudioBlock[] {\n return input.request.content.filter((block): block is AudioBlock => block.type === \"audio\");\n}\n\nfunction validateMetaKeys(\n label: string,\n meta: Record<string, unknown> | undefined,\n allowed: ReadonlySet<string>,\n): void {\n for (const key of Object.keys(meta ?? {})) {\n if (!allowed.has(key)) throw new GenerationValidationError(`Unknown ${label} field: ${key}`);\n }\n}\n\nfunction validateHttpUrl(value: unknown, label: string): void {\n if (typeof value !== \"string\") throw new GenerationValidationError(`${label} must be a valid HTTP(S) URL`);\n const trimmed = value.trim();\n if (!trimmed) throw new GenerationValidationError(`${label} must be a non-empty HTTP(S) URL`);\n try {\n const url = new URL(trimmed);\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") throw new Error(\"unsupported protocol\");\n } catch {\n throw new GenerationValidationError(`${label} must be a valid HTTP(S) URL`);\n }\n}\n\nfunction validateCommonContent(input: ResolvedGenerationRequest): { text: TextBlock; audio: AudioBlock[] } {\n const texts = textBlocks(input);\n if (texts.length !== 1 || typeof texts[0]?.text !== \"string\" || !texts[0].text.trim()) {\n throw new GenerationValidationError(\n `${input.declaration.model} requires exactly one non-empty text content block as input`,\n );\n }\n\n const audio = audioBlocks(input);\n for (const [index, block] of audio.entries()) {\n if (block.source.type !== \"url\") {\n throw new GenerationValidationError(`${input.declaration.model} reference audio must use a URL source`);\n }\n validateHttpUrl(block.source.url, `audio content block ${index} URL`);\n }\n return { text: texts[0], audio };\n}\n\nfunction validateQwen(input: ResolvedGenerationRequest, text: TextBlock, audio: AudioBlock[]): void {\n if (audio.length > 1) {\n throw new GenerationValidationError(`${input.declaration.model} supports at most one reference audio`);\n }\n // Keep accepting the retired preview_text key for compatibility, but never use or forward it.\n const requestMetaKeys = new Set([\"voice_prompt\", \"preview_text\"]);\n validateMetaKeys(\"request.metadata\", input.request.metadata, requestMetaKeys);\n validateMetaKeys(\"request.meta\", input.request.meta, requestMetaKeys);\n validateMetaKeys(\"text content meta\", text.meta, new Set());\n for (const block of audio) validateMetaKeys(\"audio content meta\", block.meta, new Set());\n\n const voicePrompt = input.meta.voice_prompt;\n const hasVoicePrompt = typeof voicePrompt === \"string\" && voicePrompt.trim().length > 0;\n if (voicePrompt !== undefined && !hasVoicePrompt) {\n throw new GenerationValidationError(`${input.declaration.model} meta.voice_prompt must be a non-empty string`);\n }\n if (audio.length === 0 && !hasVoicePrompt) {\n throw new GenerationValidationError(`${input.declaration.model} requires one reference audio or meta.voice_prompt`);\n }\n if (audio.length > 0 && hasVoicePrompt) {\n throw new GenerationValidationError(\n `${input.declaration.model} reference audio and meta.voice_prompt are mutually exclusive`,\n );\n }\n\n if (QWEN_AUDIO_3_MODELS.has(input.declaration.model) && Array.from(text.text.trim()).length < 15) {\n throw new GenerationValidationError(`${input.declaration.model} requires input of at least 15 Unicode code points`);\n }\n}\n\nfunction hasOwnWeight(block: AudioBlock): boolean {\n return Object.hasOwn(block.meta ?? {}, \"weight\");\n}\n\nfunction isPositiveFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value) && value > 0;\n}\n\nfunction validateHiggs(input: ResolvedGenerationRequest, text: TextBlock, audio: AudioBlock[]): void {\n if (audio.length > 16)\n throw new GenerationValidationError(`${input.declaration.model} supports at most 16 references`);\n validateMetaKeys(\"request.metadata\", input.request.metadata, new Set());\n validateMetaKeys(\"request.meta\", input.request.meta, new Set());\n validateMetaKeys(\"text content meta\", text.meta, new Set());\n\n for (const [index, block] of audio.entries()) {\n validateMetaKeys(`audio content block ${index} meta`, block.meta, new Set([\"weight\"]));\n const weight = block.meta?.weight;\n if (audio.length === 1 && (!hasOwnWeight(block) || weight === undefined)) continue;\n if (!isPositiveFiniteNumber(weight)) {\n throw new GenerationValidationError(`audio content block ${index} meta.weight must be a finite positive number`);\n }\n }\n}\n\nfunction validateAudioSpeechRequest(input: ResolvedGenerationRequest): void {\n const { text, audio } = validateCommonContent(input);\n if (QWEN_MODELS.has(input.declaration.model)) {\n validateQwen(input, text, audio);\n return;\n }\n if (input.declaration.model === HIGGS_MODEL) {\n validateHiggs(input, text, audio);\n return;\n }\n throw new GenerationValidationError(`Unsupported audio speech model: ${input.declaration.model}`);\n}\n\nfunction requestIdFromHeaders(headers: Headers): string | undefined {\n return headers.get(\"x-request-id\")?.trim() || headers.get(\"x-oneapi-request-id\")?.trim() || undefined;\n}\n\nfunction buildPayload(input: ResolvedGenerationRequest): Record<string, unknown> {\n const text = textBlocks(input)[0];\n if (!text) throw new GenerationValidationError(\"Audio speech input was not validated\");\n const audio = audioBlocks(input);\n const payload: Record<string, unknown> = {\n model: input.declaration.model,\n input: text.text,\n };\n\n if (QWEN_MODELS.has(input.declaration.model)) {\n if (audio[0]?.source.type === \"url\") payload.ref_audio = audio[0].source.url.trim();\n else payload.metadata = { voice_prompt: input.meta.voice_prompt };\n return payload;\n }\n\n const firstAudio = audio[0];\n if (audio.length === 1 && firstAudio && (!hasOwnWeight(firstAudio) || firstAudio.meta?.weight === undefined)) {\n if (firstAudio.source.type === \"url\") payload.ref_audio = firstAudio.source.url.trim();\n return payload;\n }\n if (audio.length > 0) {\n payload.metadata = {\n references: audio.map((block) => ({\n url: block.source.type === \"url\" ? block.source.url.trim() : \"\",\n weight: block.meta?.weight,\n })),\n };\n }\n return payload;\n}\n\nfunction parseJson(rawBody: string): unknown {\n try {\n return JSON.parse(rawBody);\n } catch {\n return undefined;\n }\n}\n\nfunction nonEmptyString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value : undefined;\n}\n\nfunction providerError(response: Response, rawBody: string): GenerationProviderError {\n const requestId = requestIdFromHeaders(response.headers);\n const contentType = (response.headers.get(\"content-type\") ?? \"\").toLowerCase();\n const parsed =\n contentType.includes(\"application/json\") || contentType.includes(\"+json\") ? parseJson(rawBody) : undefined;\n const parsedRecord = isRecord(parsed) ? parsed : undefined;\n const errorRecord = isRecord(parsedRecord?.error) ? parsedRecord.error : undefined;\n const message =\n nonEmptyString(errorRecord?.message) ??\n (rawBody.trim() ? rawBody : undefined) ??\n (response.statusText.trim() ? response.statusText : undefined) ??\n \"Audio speech provider request failed\";\n const code = nonEmptyString(errorRecord?.code);\n\n return new GenerationProviderError(message, {\n status: response.status,\n body: rawBody,\n details: {\n requestId,\n code,\n ...(parsedRecord ? { error: parsedRecord } : {}),\n },\n });\n}\n\nfunction unsupportedSuccessResponse(response: Response, rawBody: string): GenerationProviderError {\n const statusText = response.statusText.trim();\n const message =\n response.status === 204 && statusText\n ? statusText\n : \"Audio speech provider returned an unsupported success response\";\n return new GenerationProviderError(message, {\n status: response.status,\n body: rawBody,\n details: { requestId: requestIdFromHeaders(response.headers) },\n });\n}\n\nfunction parseSuccessResponse(response: Response, rawBody: string): GenerationContentBlock {\n const parsed = parseJson(rawBody);\n if (!isRecord(parsed)) throw unsupportedSuccessResponse(response, rawBody);\n\n const urlValue = nonEmptyString(parsed.url);\n const contentType = nonEmptyString(parsed.content_type);\n if (\n !urlValue ||\n parsed.media_type !== \"audio\" ||\n !contentType ||\n !/^audio\\/[^\\s/;]+(?:\\s*;.*)?$/i.test(contentType)\n ) {\n throw unsupportedSuccessResponse(response, rawBody);\n }\n try {\n const url = new URL(urlValue.trim());\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") throw new Error(\"unsupported protocol\");\n } catch {\n throw unsupportedSuccessResponse(response, rawBody);\n }\n\n const size = parsed.size;\n if (\n size !== undefined &&\n (typeof size !== \"number\" || !Number.isFinite(size) || !Number.isInteger(size) || size < 0)\n ) {\n throw unsupportedSuccessResponse(response, rawBody);\n }\n\n const requestId = requestIdFromHeaders(response.headers);\n return {\n type: \"audio\",\n source: { type: \"url\", url: urlValue.trim() },\n meta: {\n content_type: contentType,\n ...(size !== undefined ? { size } : {}),\n ...(requestId ? { request_id: requestId } : {}),\n },\n };\n}\n\nasync function generateAudioSpeech(input: GenerationAdapterInput): Promise<GenerationContentBlock[]> {\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, \"/v1/audio/speech\"),\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(buildPayload(input)),\n },\n REQUEST_TIMEOUT_MS,\n );\n const rawBody = await response.text().catch(() => \"\");\n if (!response.ok) throw providerError(response, rawBody);\n return [parseSuccessResponse(response, rawBody)];\n}\n\nexport const audioSpeechAdapter: GenerationAdapter = Object.assign(generateAudioSpeech, {\n validate: validateAudioSpeechRequest,\n});\n","import { GenerationProviderError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type { GenerationAdapterInput, GenerationContentBlock } from \"../types.js\";\nimport { compactArray, compactObject } from \"../utils.js\";\nimport { mergeTextBlocks } from \"../validation.js\";\n\nconst REQUEST_TIMEOUT_MS = 300_000;\nconst MARKDOWN_IMAGE_DATA_URI_PATTERN = /!\\[[^\\]]*\\]\\(data:([^;]+);base64,([^)]+)\\)/;\n\ntype GeminiPart =\n | { text: string }\n | { inlineData: { mimeType: string; data: string } }\n | { fileData: { fileUri: string } };\n\ntype GeminiResponsePart = {\n text?: unknown;\n inlineData?: { mimeType?: unknown; data?: unknown };\n fileData?: { mimeType?: unknown; fileUri?: unknown };\n};\n\ntype GeminiCandidate = {\n content?: { role?: unknown; parts?: GeminiResponsePart[] };\n finishReason?: unknown;\n finishMessage?: unknown;\n safetyRatings?: unknown;\n citationMetadata?: unknown;\n groundingMetadata?: unknown;\n avgLogprobs?: unknown;\n index?: unknown;\n};\n\ntype GeminiGenerateContentResponse = {\n candidates?: GeminiCandidate[];\n promptFeedback?: unknown;\n usageMetadata?: unknown;\n modelVersion?: unknown;\n responseId?: unknown;\n};\n\nfunction isHttpUrl(value: string): boolean {\n return value.startsWith(\"http://\") || value.startsWith(\"https://\");\n}\n\nasync function imageBlockToGeminiPart(\n input: GenerationAdapterInput,\n block: Extract<GenerationContentBlock, { type: \"image\" }>,\n): Promise<GeminiPart> {\n if (block.source.type === \"base64\") {\n return { inlineData: { mimeType: block.source.mediaType, data: block.source.data } };\n }\n const fileUri = await input.context.resolveSource(block.source);\n if (!isHttpUrl(fileUri))\n throw new GenerationValidationError(\"Gemini image URL source must resolve to an HTTP(S) URL\");\n return { fileData: { fileUri } };\n}\n\nfunction extractMarkdownDataUriImage(text: string): GenerationContentBlock | null {\n const match = MARKDOWN_IMAGE_DATA_URI_PATTERN.exec(text);\n if (!match) return null;\n const [, mediaType, data] = match;\n if (!mediaType || !data) return null;\n return { type: \"image\", source: { type: \"base64\", mediaType, data } };\n}\n\nfunction collectGeminiNoOutputDetails(raw: GeminiGenerateContentResponse): Record<string, unknown> {\n const candidates = raw.candidates ?? [];\n return compactObject({\n finishReasons: compactArray(\n candidates.map((candidate) => candidate.finishReason).filter((value) => value !== undefined),\n ),\n finishMessages: compactArray(\n candidates.map((candidate) => candidate.finishMessage).filter((value) => value !== undefined),\n ),\n safetyRatings: compactArray(candidates.flatMap((candidate) => candidate.safetyRatings ?? [])),\n promptFeedback: raw.promptFeedback,\n usageMetadata: raw.usageMetadata,\n modelVersion: raw.modelVersion,\n responseId: raw.responseId,\n candidateCount: candidates.length,\n candidates: compactArray(\n candidates.map((candidate) =>\n compactObject({\n index: candidate.index,\n finishReason: candidate.finishReason,\n finishMessage: candidate.finishMessage,\n safetyRatings: candidate.safetyRatings,\n citationMetadata: candidate.citationMetadata,\n groundingMetadata: candidate.groundingMetadata,\n avgLogprobs: candidate.avgLogprobs,\n contentRole: candidate.content?.role,\n partCount: candidate.content?.parts?.length,\n }),\n ),\n ),\n });\n}\n\nfunction appendGeminiFileDataOutput(\n output: GenerationContentBlock[],\n fileData: GeminiResponsePart[\"fileData\"],\n): boolean {\n if (typeof fileData?.fileUri !== \"string\" || !fileData.fileUri) return false;\n const mediaType = typeof fileData.mimeType === \"string\" ? fileData.mimeType : \"image/png\";\n output.push({ type: \"image\", source: { type: \"url\", url: fileData.fileUri }, meta: { mediaType } });\n return true;\n}\n\nfunction appendGeminiPartOutput(output: GenerationContentBlock[], part: GeminiResponsePart): void {\n if (typeof part.text === \"string\" && part.text.trim()) {\n const image = extractMarkdownDataUriImage(part.text);\n if (image) {\n output.push(image);\n return;\n }\n output.push({ type: \"text\", text: part.text });\n return;\n }\n\n if (part.inlineData && typeof part.inlineData.data === \"string\" && part.inlineData.data) {\n output.push({\n type: \"image\",\n source: {\n type: \"base64\",\n mediaType: typeof part.inlineData.mimeType === \"string\" ? part.inlineData.mimeType : \"image/png\",\n data: part.inlineData.data,\n },\n });\n return;\n }\n\n appendGeminiFileDataOutput(output, part.fileData);\n}\n\nexport async function geminiGenerateContentAdapter(input: GenerationAdapterInput): Promise<GenerationContentBlock[]> {\n const prompt = mergeTextBlocks(input.declaration, input.request.content);\n if (!prompt) throw new GenerationValidationError(\"Prompt text is required\");\n\n const imageParts = await Promise.all(\n input.request.content\n .filter((block): block is Extract<GenerationContentBlock, { type: \"image\" }> => block.type === \"image\")\n .map((block) => imageBlockToGeminiPart(input, block)),\n );\n\n const generationConfig: Record<string, unknown> = { responseModalities: [\"IMAGE\"] };\n const aspectRatio = input.parameters.aspect_ratio;\n const imageSize = input.parameters.image_size;\n if (typeof aspectRatio === \"string\" || typeof imageSize === \"string\") {\n const image: Record<string, string> = {};\n if (typeof aspectRatio === \"string\") image.aspectRatio = aspectRatio;\n if (typeof imageSize === \"string\") image.imageSize = imageSize;\n generationConfig.imageConfig = image;\n }\n\n const payload = {\n contents: [{ parts: [{ text: prompt }, ...imageParts] satisfies GeminiPart[] }],\n generationConfig,\n };\n\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, `/v1beta/models/${encodeURIComponent(input.declaration.model)}:generateContent`),\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n },\n REQUEST_TIMEOUT_MS,\n );\n\n if (!response.ok) {\n const body = await response.text().catch(() => response.statusText);\n throw new GenerationProviderError(\"Gemini generation provider request failed\", { status: response.status, body });\n }\n\n const raw = (await response.json()) as GeminiGenerateContentResponse;\n const output: GenerationContentBlock[] = [];\n for (const candidate of raw.candidates ?? []) {\n for (const part of candidate.content?.parts ?? []) appendGeminiPartOutput(output, part);\n }\n if (output.length === 0) {\n throw new GenerationProviderError(\"Gemini generation returned no output\", {\n details: collectGeminiNoOutputDetails(raw),\n });\n }\n return output;\n}\n","import { GenerationProviderError, GenerationTimeoutError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type { GenerationAdapterInput, GenerationContentBlock, GenerationSource } from \"../types.js\";\nimport { compactObject, getBlockMeta } from \"../utils.js\";\nimport { mergeTextBlocks } from \"../validation.js\";\n\n// Keep per-request timeout comfortably above max_wait so polling controls total wait time.\nconst REQUEST_TIMEOUT_MS = 1_860_000;\nconst DEFAULT_POLL_INTERVAL_SEC = 5;\nconst DEFAULT_MAX_WAIT_SEC = 900;\n\ntype KlingImageMode = \"none\" | \"single\" | \"omni\" | \"multi\";\n\nconst KLING_MODELS: Record<\n string,\n {\n submitPath: string;\n defaultModelName: string;\n imageMode: KlingImageMode;\n allowPromptlessOmni?: boolean;\n }\n> = {\n \"kling-text-to-video\": {\n submitPath: \"/kling/v1/videos/text2video\",\n defaultModelName: \"kling-v3\",\n imageMode: \"none\",\n },\n \"kling-image-to-video\": {\n submitPath: \"/kling/v1/videos/image2video\",\n defaultModelName: \"kling-v3\",\n imageMode: \"single\",\n },\n \"kling-omni-video\": {\n submitPath: \"/kling/v1/videos/omni-video\",\n defaultModelName: \"kling-v3-omni\",\n imageMode: \"omni\",\n allowPromptlessOmni: true,\n },\n \"kling-multi-image-to-video\": {\n submitPath: \"/kling/v1/videos/multi-image2video\",\n defaultModelName: \"kling-v1-6\",\n imageMode: \"multi\",\n },\n};\n\ntype CreateTaskResponse = {\n id?: unknown;\n task_id?: unknown;\n status?: unknown;\n data?: {\n id?: unknown;\n task_id?: unknown;\n status?: unknown;\n task_status?: unknown;\n };\n};\n\ntype TaskStatusResponse = {\n code?: unknown;\n message?: unknown;\n status?: unknown;\n task_status?: unknown;\n video_url?: unknown;\n result_url?: unknown;\n url?: unknown;\n progress?: unknown;\n error?: {\n message?: unknown;\n };\n metadata?: {\n url?: unknown;\n };\n data?: {\n status?: unknown;\n task_status?: unknown;\n task_status_msg?: unknown;\n result_url?: unknown;\n video_url?: unknown;\n url?: unknown;\n progress?: unknown;\n task_result?: {\n videos?: Array<{ url?: unknown; duration?: unknown }>;\n };\n data?: {\n status?: unknown;\n content?: { video_url?: unknown; first_frame?: unknown };\n progress?: unknown;\n task_result?: {\n videos?: Array<{ url?: unknown; duration?: unknown }>;\n };\n };\n };\n};\n\ntype ResolvedImage = {\n url: string;\n role?: string;\n};\n\ntype OmniImageReference = {\n image_url: string;\n type?: string;\n};\n\ntype MultiImageReference = {\n image: string;\n};\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction asInteger(value: unknown, fallback: number): number {\n return typeof value === \"number\" && Number.isInteger(value) ? value : fallback;\n}\n\nfunction asNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction providerMeta(input: Record<string, unknown>): Record<string, unknown> {\n const rest = { ...input };\n delete rest.cohub;\n delete rest.role;\n return rest;\n}\n\nfunction normalizeStatus(value: unknown): string {\n const status = String(value ?? \"\")\n .trim()\n .toLowerCase();\n if (status === \"success\" || status === \"succeed\" || status === \"succeeded\" || status === \"completed\") {\n return \"succeeded\";\n }\n if (\n status === \"queued\" ||\n status === \"processing\" ||\n status === \"in_progress\" ||\n status === \"not_start\" ||\n status === \"submitted\"\n ) {\n return \"processing\";\n }\n if (status === \"failure\" || status === \"failed\" || status === \"error\") return \"failed\";\n if (status === \"cancelled\" || status === \"canceled\") return \"cancelled\";\n return status || \"unknown\";\n}\n\nfunction getImageRole(block: Extract<GenerationContentBlock, { type: \"image\" }>): string | undefined {\n const role = getBlockMeta(block)?.role;\n return typeof role === \"string\" && role.trim() ? role.trim() : undefined;\n}\n\nasync function resolveKlingImageSource(input: GenerationAdapterInput, source: GenerationSource): Promise<string> {\n if (source.type === \"base64\") return source.data;\n return input.context.resolveSource(source);\n}\n\nasync function resolveImages(input: GenerationAdapterInput): Promise<ResolvedImage[]> {\n const imageBlocks = input.request.content.filter(\n (block): block is Extract<GenerationContentBlock, { type: \"image\" }> => block.type === \"image\",\n );\n return Promise.all(\n imageBlocks.map(async (block) => {\n const role = getImageRole(block);\n const url = await resolveKlingImageSource(input, block.source);\n return role ? { url, role } : { url };\n }),\n );\n}\n\nfunction hasOfficialOmniMedia(meta: Record<string, unknown>): boolean {\n return [\"image_list\", \"element_list\", \"video_list\"].some((key) => {\n const value = meta[key];\n return Array.isArray(value) ? value.length > 0 : value !== undefined;\n });\n}\n\nfunction hasPlainImagePayload(meta: Record<string, unknown>): boolean {\n return typeof meta.image === \"string\" && meta.image.trim().length > 0;\n}\n\nfunction hasMultiImagePayload(meta: Record<string, unknown>): boolean {\n return Array.isArray(meta.image_list) && meta.image_list.length > 0;\n}\n\nfunction hasPromptlessOmniPayload(meta: Record<string, unknown>, images: ResolvedImage[]): boolean {\n return images.length > 0 || hasOfficialOmniMedia(meta) || hasPlainImagePayload(meta);\n}\n\nfunction omniImageType(image: ResolvedImage, index: number): string | undefined {\n if (image.role === \"first_frame\" || image.role === \"end_frame\") return image.role;\n if (image.role === \"last_frame\") return \"end_frame\";\n if (!image.role) return index === 0 ? \"first_frame\" : \"end_frame\";\n return undefined;\n}\n\nfunction buildOmniImageList(images: ResolvedImage[]): OmniImageReference[] {\n return images.map((image, index) => {\n const type = omniImageType(image, index);\n return type ? { image_url: image.url, type } : { image_url: image.url };\n });\n}\n\nfunction buildMultiImageList(images: ResolvedImage[]): MultiImageReference[] {\n return images.map((image) => ({ image: image.url }));\n}\n\nfunction resolveKlingModel(input: GenerationAdapterInput) {\n const model = KLING_MODELS[input.declaration.model];\n if (!model) throw new GenerationValidationError(`Unsupported Kling generation model: ${input.declaration.model}`);\n return model;\n}\n\nfunction buildPayload(\n input: GenerationAdapterInput,\n model: (typeof KLING_MODELS)[string],\n prompt: string,\n images: ResolvedImage[],\n): Record<string, unknown> {\n const payload: Record<string, unknown> = {\n ...providerMeta(input.meta),\n model_name: model.defaultModelName,\n };\n\n if (prompt) payload.prompt = prompt;\n if (!payload.duration) payload.duration = String(asInteger(input.parameters.duration, 5));\n if (!payload.mode) payload.mode = asString(input.parameters.mode) ?? \"std\";\n if (payload.cfg_scale === undefined) payload.cfg_scale = asNumber(input.parameters.cfg_scale) ?? 0.5;\n if (!payload.aspect_ratio) payload.aspect_ratio = asString(input.parameters.aspect_ratio) ?? \"16:9\";\n if (payload.negative_prompt === undefined && asString(input.parameters.negative_prompt)) {\n payload.negative_prompt = input.parameters.negative_prompt;\n }\n if (payload.sound === undefined && asString(input.parameters.sound)) payload.sound = input.parameters.sound;\n if (model.imageMode === \"single\" && images[0] && !hasPlainImagePayload(payload)) {\n payload.image = images[0].url;\n if (images[1] && payload.image_tail === undefined) payload.image_tail = images[1].url;\n }\n if (\n model.imageMode === \"omni\" &&\n images.length > 0 &&\n !hasOfficialOmniMedia(payload) &&\n !hasPlainImagePayload(payload)\n ) {\n payload.image_list = buildOmniImageList(images);\n }\n if (model.imageMode === \"multi\" && images.length > 0 && !hasMultiImagePayload(payload)) {\n payload.image_list = buildMultiImageList(images);\n }\n if (payload.seed === undefined && input.parameters.seed !== undefined) payload.seed = input.parameters.seed;\n\n return payload;\n}\n\nfunction extractTaskId(response: CreateTaskResponse): string {\n const taskId =\n asString(response.task_id) ??\n asString(response.id) ??\n asString(response.data?.task_id) ??\n asString(response.data?.id);\n if (!taskId) {\n throw new GenerationProviderError(\"Kling video provider did not return a task id\", { details: { response } });\n }\n return taskId;\n}\n\nfunction extractStatus(response: TaskStatusResponse) {\n const wrapper = response.data;\n const native = wrapper?.data;\n const status = normalizeStatus(\n native?.status ?? wrapper?.task_status ?? wrapper?.status ?? response.task_status ?? response.status,\n );\n const firstVideo = wrapper?.task_result?.videos?.[0] ?? native?.task_result?.videos?.[0];\n const videoUrl =\n asString(firstVideo?.url) ??\n asString(wrapper?.result_url) ??\n asString(wrapper?.video_url) ??\n asString(wrapper?.url) ??\n asString(native?.content?.video_url) ??\n asString(response.metadata?.url) ??\n asString(response.result_url) ??\n asString(response.video_url) ??\n asString(response.url);\n const message = asString(wrapper?.task_status_msg) ?? asString(response.error?.message) ?? asString(response.message);\n return {\n status,\n videoUrl,\n message,\n metadata: compactObject({\n progress: wrapper?.progress ?? native?.progress ?? response.progress,\n duration: firstVideo?.duration,\n task_status_msg: message,\n code: response.code,\n }),\n };\n}\n\nasync function requestJson(input: GenerationAdapterInput, path: string, init: RequestInit): Promise<unknown> {\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, path),\n {\n ...init,\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n \"Content-Type\": \"application/json\",\n ...init.headers,\n },\n },\n REQUEST_TIMEOUT_MS,\n );\n const body = await response.text();\n let parsed: unknown = {};\n try {\n parsed = body ? JSON.parse(body) : {};\n } catch {\n throw new GenerationProviderError(\"Kling video provider returned invalid JSON\", { status: response.status, body });\n }\n if (!response.ok) {\n const details = isRecord(parsed) ? { details: parsed } : {};\n throw new GenerationProviderError(\"Kling video provider request failed\", {\n status: response.status,\n body,\n ...details,\n });\n }\n return parsed;\n}\n\nexport async function klingVideoGenerationsAdapter(input: GenerationAdapterInput): Promise<GenerationContentBlock[]> {\n const model = resolveKlingModel(input);\n const prompt = mergeTextBlocks(input.declaration, input.request.content);\n const images = await resolveImages(input);\n const meta = providerMeta(input.meta);\n\n if (!prompt && !model.allowPromptlessOmni) throw new GenerationValidationError(\"Prompt text is required\");\n if (!prompt && model.allowPromptlessOmni && !hasPromptlessOmniPayload(meta, images)) {\n throw new GenerationValidationError(\"Prompt text or Omni media input is required\");\n }\n if (model.imageMode === \"single\" && images.length === 0 && !hasPlainImagePayload(meta)) {\n throw new GenerationValidationError(\"Image input is required\");\n }\n if (model.imageMode === \"multi\" && images.length === 0 && !hasMultiImagePayload(meta)) {\n throw new GenerationValidationError(\"Multi-image input is required\");\n }\n\n const task = (await requestJson(input, model.submitPath, {\n method: \"POST\",\n body: JSON.stringify(buildPayload(input, model, prompt, images)),\n })) as CreateTaskResponse;\n const taskId = extractTaskId(task);\n const pollIntervalSec = asInteger(input.parameters.poll_interval, DEFAULT_POLL_INTERVAL_SEC);\n const maxWaitSec = asInteger(input.parameters.max_wait, DEFAULT_MAX_WAIT_SEC);\n const startedAt = Date.now();\n\n while (Date.now() - startedAt <= maxWaitSec * 1000) {\n await sleep(pollIntervalSec * 1000);\n const rawStatus = (await requestJson(input, `${model.submitPath}/${encodeURIComponent(taskId)}`, {\n method: \"GET\",\n })) as TaskStatusResponse;\n const status = extractStatus(rawStatus);\n\n if (status.status === \"succeeded\") {\n if (!status.videoUrl) {\n throw new GenerationProviderError(\"Kling video generation succeeded but returned no video URL\", {\n details: compactObject({ taskId, rawStatus, metadata: status.metadata }),\n });\n }\n return [\n {\n type: \"video\",\n source: { type: \"url\", url: status.videoUrl },\n meta: { task_id: taskId, status: status.status, ...status.metadata },\n },\n ];\n }\n if (status.status === \"failed\" || status.status === \"cancelled\" || status.status === \"expired\") {\n throw new GenerationProviderError(`Kling video generation ${status.status}`, {\n details: compactObject({ taskId, message: status.message, rawStatus }),\n });\n }\n }\n\n throw new GenerationTimeoutError(\"Timed out waiting for Kling video generation\", { taskId });\n}\n","import { GenerationProviderError, GenerationTimeoutError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type { GenerationAdapterInput, GenerationContentBlock, GenerationSource } from \"../types.js\";\nimport { compactObject, getBlockMeta } from \"../utils.js\";\nimport { mergeTextBlocks } from \"../validation.js\";\n\nconst REQUEST_TIMEOUT_MS = 1_860_000;\nconst DEFAULT_POLL_INTERVAL_SEC = 2;\nconst DEFAULT_MAX_WAIT_SEC = 1800;\nconst MAX_MEDIA_COUNT = 12;\nconst MAX_REFERENCE_IMAGES = 9;\nconst MAX_REFERENCE_VIDEOS = 3;\nconst MAX_REFERENCE_AUDIO = 3;\nconst DEFAULT_RATIO = \"16:9\";\nconst ADAPTIVE_RATIO = \"adaptive\";\nconst H3_RATIOS = [\"adaptive\", \"21:9\", \"16:9\", \"4:3\", \"1:1\", \"3:4\", \"9:16\"] as const;\n\ntype H3Mode = \"text\" | \"frame\" | \"reference\";\ntype H3MediaKind = \"image\" | \"video\" | \"audio\";\ntype H3InputMedia = { kind: H3MediaKind; source: GenerationSource; role: string | undefined };\ntype H3ResolvedMedia = { kind: H3MediaKind; url: string; role: string };\n\ntype H3ContentItem = {\n type: \"text\" | \"image_url\" | \"video_url\" | \"audio_url\";\n text?: string;\n image_url?: { url: string };\n video_url?: { url: string };\n audio_url?: { url: string };\n role?: string;\n};\n\ntype H3CreateResponse = Record<string, unknown>;\ntype H3TaskResponse = Record<string, unknown>;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction asInteger(value: unknown, fallback: number): number {\n return typeof value === \"number\" && Number.isInteger(value) ? value : fallback;\n}\n\nfunction asBoolean(value: unknown, fallback: boolean): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeStatus(value: unknown): string {\n const status = String(value ?? \"\")\n .trim()\n .toLowerCase();\n if ([\"success\", \"succeed\", \"succeeded\", \"completed\"].includes(status)) return \"succeeded\";\n if ([\"queued\", \"processing\", \"in_progress\", \"running\", \"submitted\", \"not_start\"].includes(status)) {\n return \"processing\";\n }\n if ([\"failure\", \"failed\", \"error\", \"cancelled\", \"canceled\", \"expired\"].includes(status)) return \"failed\";\n return status || \"unknown\";\n}\n\nfunction getMediaRole(block: GenerationContentBlock): string | undefined {\n const role = getBlockMeta(block)?.role;\n return typeof role === \"string\" && role.trim() ? role.trim() : undefined;\n}\n\nfunction getH3InputMedia(input: GenerationAdapterInput): H3InputMedia[] {\n return input.request.content\n .filter(\n (block): block is Extract<GenerationContentBlock, { type: \"image\" | \"video\" | \"audio\" }> =>\n block.type === \"image\" || block.type === \"video\" || block.type === \"audio\",\n )\n .map((block) => ({ kind: block.type, source: block.source, role: getMediaRole(block) }));\n}\n\nfunction classifyMedia(media: H3InputMedia[]): H3Mode {\n let firstFrames = 0;\n let lastFrames = 0;\n let referenceImages = 0;\n let referenceVideos = 0;\n let referenceAudio = 0;\n\n for (const item of media) {\n if (!item.role) {\n throw new GenerationValidationError(`${item.kind} input must use a MiniMax H3 role`);\n }\n if (item.kind === \"image\") {\n if (item.role === \"first_frame\") firstFrames += 1;\n else if (item.role === \"last_frame\") lastFrames += 1;\n else if (item.role === \"reference_image\") referenceImages += 1;\n else throw new GenerationValidationError(`image role is not supported by MiniMax H3: ${item.role}`);\n } else if (item.kind === \"video\") {\n if (item.role !== \"reference_video\") {\n throw new GenerationValidationError(`video role must be reference_video for MiniMax H3`);\n }\n referenceVideos += 1;\n } else {\n if (item.role !== \"reference_audio\") {\n throw new GenerationValidationError(`audio role must be reference_audio for MiniMax H3`);\n }\n referenceAudio += 1;\n }\n }\n\n if (firstFrames > 1 || lastFrames > 1) {\n throw new GenerationValidationError(\"MiniMax H3 supports at most one first_frame and one last_frame image\");\n }\n if (referenceImages > MAX_REFERENCE_IMAGES) {\n throw new GenerationValidationError(`MiniMax H3 supports at most ${MAX_REFERENCE_IMAGES} reference images`);\n }\n if (referenceVideos > MAX_REFERENCE_VIDEOS) {\n throw new GenerationValidationError(`MiniMax H3 supports at most ${MAX_REFERENCE_VIDEOS} reference videos`);\n }\n if (referenceAudio > MAX_REFERENCE_AUDIO) {\n throw new GenerationValidationError(`MiniMax H3 supports at most ${MAX_REFERENCE_AUDIO} reference audio files`);\n }\n if (media.length > MAX_MEDIA_COUNT) {\n throw new GenerationValidationError(\n `MiniMax H3 supports at most ${MAX_MEDIA_COUNT} media items; received ${referenceImages} reference images, ${referenceVideos} reference videos, ${referenceAudio} reference audio inputs, and ${firstFrames + lastFrames} frame images`,\n );\n }\n\n const hasFrames = firstFrames + lastFrames > 0;\n const hasReferences = referenceImages + referenceVideos + referenceAudio > 0;\n if (hasFrames && hasReferences) {\n throw new GenerationValidationError(\"MiniMax H3 cannot mix frame images with reference materials\");\n }\n if (hasFrames) return \"frame\";\n if (hasReferences) return \"reference\";\n return \"text\";\n}\n\nasync function resolveMedia(input: GenerationAdapterInput, media: H3InputMedia[]): Promise<H3ResolvedMedia[]> {\n return Promise.all(\n media.map(async (item) => ({\n kind: item.kind,\n role: item.role as string,\n url: await input.context.resolveSource(item.source),\n })),\n );\n}\n\nfunction buildContent(prompt: string, media: H3ResolvedMedia[]): H3ContentItem[] {\n return [\n { type: \"text\", text: prompt },\n ...media.map((item) => {\n if (item.kind === \"image\") return { type: \"image_url\" as const, image_url: { url: item.url }, role: item.role };\n if (item.kind === \"video\") return { type: \"video_url\" as const, video_url: { url: item.url }, role: item.role };\n return { type: \"audio_url\" as const, audio_url: { url: item.url }, role: item.role };\n }),\n ];\n}\n\nfunction resolveResolution(value: unknown): string {\n return asString(value) ?? \"768P\";\n}\n\nfunction resolveDuration(value: unknown): number {\n return asInteger(value, 5);\n}\n\nfunction resolveRatio(value: unknown, mode: H3Mode): string {\n const requested = asString(value) ?? DEFAULT_RATIO;\n if (!(H3_RATIOS as readonly string[]).includes(requested)) {\n throw new GenerationValidationError(`MiniMax H3 ratio must be one of: ${H3_RATIOS.join(\", \")}`);\n }\n return mode === \"text\" && requested === ADAPTIVE_RATIO ? DEFAULT_RATIO : requested;\n}\n\nfunction extractTaskId(response: H3CreateResponse): string {\n const data = isRecord(response.data) ? response.data : undefined;\n const taskId = asString(response.task_id) ?? asString(response.id) ?? asString(data?.task_id) ?? asString(data?.id);\n if (!taskId) {\n throw new GenerationProviderError(\"MiniMax H3 provider did not return a task id\", { details: { response } });\n }\n return taskId;\n}\n\nfunction isTaskPayload(value: Record<string, unknown>): boolean {\n return [\"status\", \"task\", \"result_url\", \"video_url\", \"url\", \"error\", \"progress\", \"fail_reason\"].some(\n (key) => key in value,\n );\n}\n\nfunction unwrapTaskPayload(response: H3TaskResponse): Record<string, unknown> {\n const data = isRecord(response.data) ? response.data : undefined;\n return data && !isTaskPayload(response) ? data : response;\n}\n\nfunction extractTaskStatus(response: H3TaskResponse) {\n const payload = unwrapTaskPayload(response);\n const task = isRecord(payload.task) ? payload.task : payload;\n const metadata = isRecord(payload.metadata) ? payload.metadata : isRecord(task.metadata) ? task.metadata : undefined;\n const content = isRecord(task.content) ? task.content : undefined;\n const status = normalizeStatus(payload.status ?? task.status);\n const videoUrl =\n asString(metadata?.url) ??\n asString(payload.result_url) ??\n asString(payload.video_url) ??\n asString(payload.url) ??\n asString(task.result_url) ??\n asString(task.video_url) ??\n asString(task.url) ??\n asString(content?.video_url) ??\n asString(content?.url);\n const error = isRecord(payload.error) ? payload.error : isRecord(task.error) ? task.error : undefined;\n const message =\n asString(error?.message) ??\n asString(payload.fail_reason) ??\n asString(payload.message) ??\n asString(task.fail_reason) ??\n asString(task.message) ??\n asString(response.message);\n const outputMetadata = compactObject({\n progress: payload.progress ?? task.progress,\n resolution: payload.resolution ?? task.resolution,\n duration: payload.duration ?? task.duration,\n ratio: payload.ratio ?? task.ratio,\n });\n return { status: error && status === \"unknown\" ? \"failed\" : status, videoUrl, message, metadata: outputMetadata };\n}\n\nasync function requestJson(input: GenerationAdapterInput, path: string, init: RequestInit): Promise<unknown> {\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, path),\n {\n ...init,\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n \"Content-Type\": \"application/json\",\n ...init.headers,\n },\n },\n REQUEST_TIMEOUT_MS,\n );\n const body = await response.text();\n let parsed: unknown = {};\n try {\n parsed = body ? JSON.parse(body) : {};\n } catch {\n throw new GenerationProviderError(\"MiniMax H3 provider returned invalid JSON\", { status: response.status, body });\n }\n if (!response.ok) {\n throw new GenerationProviderError(\"MiniMax H3 provider request failed\", {\n status: response.status,\n body,\n ...(isRecord(parsed) ? { details: parsed } : {}),\n });\n }\n return parsed;\n}\n\nexport async function minimaxH3VideoGenerationsAdapter(\n input: GenerationAdapterInput,\n): Promise<GenerationContentBlock[]> {\n const prompt = mergeTextBlocks(input.declaration, input.request.content);\n if (!prompt) throw new GenerationValidationError(\"Prompt text is required\");\n\n const inputMedia = getH3InputMedia(input);\n const mode = classifyMedia(inputMedia);\n const media = await resolveMedia(input, inputMedia);\n const duration = resolveDuration(input.parameters.duration);\n const resolution = resolveResolution(input.parameters.resolution);\n const ratio = resolveRatio(input.parameters.ratio, mode);\n const pollIntervalSec = Math.max(1, asInteger(input.parameters.poll_interval, DEFAULT_POLL_INTERVAL_SEC));\n const maxWaitSec = Math.max(30, asInteger(input.parameters.max_wait, DEFAULT_MAX_WAIT_SEC));\n const aigcWatermark = asBoolean(input.parameters.aigc_watermark, false);\n const payload = {\n model: input.declaration.model,\n content: buildContent(prompt, media),\n resolution,\n duration,\n ratio,\n aigc_watermark: aigcWatermark,\n };\n\n const task = (await requestJson(input, \"/v1/video/generations\", {\n method: \"POST\",\n body: JSON.stringify(payload),\n })) as H3CreateResponse;\n const taskId = extractTaskId(task);\n const startedAt = Date.now();\n\n while (Date.now() - startedAt <= maxWaitSec * 1000) {\n await sleep(pollIntervalSec * 1000);\n const rawStatus = (await requestJson(input, `/v1/video/generations/${encodeURIComponent(taskId)}`, {\n method: \"GET\",\n })) as H3TaskResponse;\n const status = extractTaskStatus(rawStatus);\n\n if (status.status === \"succeeded\") {\n if (!status.videoUrl) {\n throw new GenerationProviderError(\"MiniMax H3 generation succeeded but returned no video URL\", {\n details: compactObject({ taskId, rawStatus, metadata: status.metadata }),\n });\n }\n return [\n {\n type: \"video\",\n source: { type: \"url\", url: status.videoUrl },\n meta: { task_id: taskId, status: status.status, ...status.metadata },\n },\n ];\n }\n if (status.status === \"failed\") {\n throw new GenerationProviderError(`MiniMax H3 generation failed${status.message ? `: ${status.message}` : \"\"}`, {\n details: compactObject({ taskId, rawStatus }),\n });\n }\n }\n\n throw new GenerationTimeoutError(\"Timed out waiting for MiniMax H3 video generation\", { taskId });\n}\n","import { GenerationProviderError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type { GenerationAdapterInput, GenerationContentBlock } from \"../types.js\";\nimport { compactArray, compactObject } from \"../utils.js\";\nimport { mergeTextBlocks } from \"../validation.js\";\n\nconst REQUEST_TIMEOUT_MS = 300_000;\n\ntype OpenAiImageEditsResponse = {\n data?: Array<{\n url?: unknown;\n b64_json?: unknown;\n revised_prompt?: unknown;\n }>;\n created?: unknown;\n usage?: unknown;\n};\n\nfunction firstUrlImage(input: GenerationAdapterInput): string {\n const image = input.request.content.find(\n (block): block is Extract<GenerationContentBlock, { type: \"image\" }> => block.type === \"image\",\n );\n if (!image) throw new GenerationValidationError(\"Source image is required\");\n if (image.source.type !== \"url\") throw new GenerationValidationError(\"Image edits require an image URL\");\n return image.source.url;\n}\n\nfunction collectOpenAiImageEditsNoOutputDetails(raw: OpenAiImageEditsResponse): Record<string, unknown> {\n const data = raw.data ?? [];\n return compactObject({\n created: raw.created,\n usage: raw.usage,\n dataCount: data.length,\n data: compactArray(\n data.map((item) =>\n compactObject({\n hasUrl: typeof item.url === \"string\" && item.url.length > 0,\n hasBase64Json: typeof item.b64_json === \"string\" && item.b64_json.length > 0,\n revisedPrompt: item.revised_prompt,\n }),\n ),\n ),\n });\n}\n\nexport async function openAiImageEditsAdapter(input: GenerationAdapterInput): Promise<GenerationContentBlock[]> {\n const prompt = mergeTextBlocks(input.declaration, input.request.content);\n if (!prompt) throw new GenerationValidationError(\"Edit instruction is required\");\n\n const body = new FormData();\n body.set(\"model\", input.declaration.model);\n body.set(\"prompt\", prompt);\n body.set(\"image\", firstUrlImage(input));\n for (const [key, value] of Object.entries(input.parameters)) {\n if (value !== undefined && value !== null) body.set(key, String(value));\n }\n\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, \"/v1/images/edits\"),\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n },\n body,\n },\n REQUEST_TIMEOUT_MS,\n );\n\n if (!response.ok) {\n const bodyText = await response.text().catch(() => response.statusText);\n throw new GenerationProviderError(\"Image edit provider request failed\", {\n status: response.status,\n body: bodyText,\n });\n }\n\n const raw = (await response.json()) as OpenAiImageEditsResponse;\n const output: GenerationContentBlock[] = [];\n for (const item of raw.data ?? []) {\n if (typeof item.url === \"string\" && item.url) {\n output.push({ type: \"image\", source: { type: \"url\", url: item.url } });\n }\n if (typeof item.b64_json === \"string\" && item.b64_json) {\n output.push({ type: \"image\", source: { type: \"base64\", mediaType: \"image/png\", data: item.b64_json } });\n }\n if (typeof item.revised_prompt === \"string\" && item.revised_prompt.trim()) {\n output.push({ type: \"text\", text: item.revised_prompt, meta: { role: \"revised_prompt\" } });\n }\n }\n if (output.length === 0) {\n throw new GenerationProviderError(\"Image edit returned no output\", {\n details: collectOpenAiImageEditsNoOutputDetails(raw),\n });\n }\n return output;\n}\n","import { GenerationProviderError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type { GenerationAdapterInput, GenerationContentBlock } from \"../types.js\";\nimport { compactArray, compactObject } from \"../utils.js\";\nimport { mergeTextBlocks } from \"../validation.js\";\n\nconst REQUEST_TIMEOUT_MS = 300_000;\n\ntype OpenAiImagesResponse = {\n data?: Array<{\n url?: unknown;\n b64_json?: unknown;\n revised_prompt?: unknown;\n }>;\n created?: unknown;\n usage?: unknown;\n background?: unknown;\n output_format?: unknown;\n quality?: unknown;\n size?: unknown;\n};\n\nfunction collectOpenAiImagesNoOutputDetails(raw: OpenAiImagesResponse): Record<string, unknown> {\n const data = raw.data ?? [];\n return compactObject({\n created: raw.created,\n usage: raw.usage,\n background: raw.background,\n outputFormat: raw.output_format,\n quality: raw.quality,\n size: raw.size,\n dataCount: data.length,\n data: compactArray(\n data.map((item) =>\n compactObject({\n hasUrl: typeof item.url === \"string\" && item.url.length > 0,\n hasBase64Json: typeof item.b64_json === \"string\" && item.b64_json.length > 0,\n revisedPrompt: item.revised_prompt,\n }),\n ),\n ),\n });\n}\n\nfunction requiresPrompt(input: GenerationAdapterInput): boolean {\n const textSpec = input.declaration.content.input.find((spec) => spec.type === \"text\");\n return !!textSpec && (textSpec.required === true || (textSpec.min ?? 0) > 0);\n}\n\nexport async function openAiImagesAdapter(input: GenerationAdapterInput): Promise<GenerationContentBlock[]> {\n const prompt = mergeTextBlocks(input.declaration, input.request.content);\n if (!prompt && requiresPrompt(input)) throw new GenerationValidationError(\"Prompt text is required\");\n\n const images = await Promise.all(\n input.request.content\n .filter((block): block is Extract<GenerationContentBlock, { type: \"image\" }> => block.type === \"image\")\n .map((block) => input.context.resolveSource(block.source)),\n );\n\n const payload: Record<string, unknown> = {\n model: input.declaration.model,\n prompt,\n ...input.parameters,\n };\n if (images.length > 0) payload.image = images;\n\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, \"/v1/images/generations\"),\n {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n },\n REQUEST_TIMEOUT_MS,\n );\n\n if (!response.ok) {\n const body = await response.text().catch(() => response.statusText);\n throw new GenerationProviderError(\"Image generation provider request failed\", { status: response.status, body });\n }\n\n const raw = (await response.json()) as OpenAiImagesResponse;\n const output: GenerationContentBlock[] = [];\n for (const item of raw.data ?? []) {\n if (typeof item.url === \"string\" && item.url) {\n output.push({ type: \"image\", source: { type: \"url\", url: item.url } });\n }\n if (typeof item.b64_json === \"string\" && item.b64_json) {\n output.push({ type: \"image\", source: { type: \"base64\", mediaType: \"image/png\", data: item.b64_json } });\n }\n if (typeof item.revised_prompt === \"string\" && item.revised_prompt.trim()) {\n output.push({ type: \"text\", text: item.revised_prompt, meta: { role: \"revised_prompt\" } });\n }\n }\n if (output.length === 0) {\n throw new GenerationProviderError(\"Image generation returned no output\", {\n details: collectOpenAiImagesNoOutputDetails(raw),\n });\n }\n return output;\n}\n","import { GenerationProviderError, GenerationTimeoutError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type {\n GenerationAdapterInput,\n GenerationContentBlock,\n GenerationContentSpec,\n GenerationSource,\n} from \"../types.js\";\nimport { compactObject } from \"../utils.js\";\nimport { mergeTextBlocks } from \"../validation.js\";\n\nconst REQUEST_TIMEOUT_MS = 60_000;\nconst DEFAULT_POLL_INTERVAL_SEC = 5;\nconst DEFAULT_MAX_WAIT_SEC = 600;\nconst DEFAULT_MUSIC_VERSION = \"chirp-v5\";\n\nconst OPERATION_PATHS: Record<\n string,\n { path: string; poll: boolean; defaultMusicVersion?: boolean; textField?: string; requireText?: boolean }\n> = {\n music: { path: \"/suno/submit/music\", poll: true, defaultMusicVersion: true, textField: \"prompt\" },\n lyrics: { path: \"/suno/submit/lyrics\", poll: true, textField: \"prompt\", requireText: true },\n concat: { path: \"/suno/submit/concat\", poll: true },\n upsample_tags: { path: \"/suno/submit/upsample-tags\", poll: false, textField: \"original_tags\", requireText: true },\n upload_audio: { path: \"/suno/uploads/audio\", poll: true },\n};\n\nconst FINAL_SUCCESS_STATUSES = new Set([\"success\", \"succeeded\", \"completed\"]);\nconst FINAL_FAILURE_STATUSES = new Set([\"failure\", \"failed\", \"error\", \"cancelled\", \"canceled\", \"expired\"]);\n\ntype TaskResponse<T = unknown> = {\n code?: unknown;\n message?: unknown;\n data?: T;\n};\n\ntype SunoTaskDto = {\n task_id?: unknown;\n taskBatchId?: unknown;\n task_batch_id?: unknown;\n action?: unknown;\n status?: unknown;\n taskStatus?: unknown;\n task_status?: unknown;\n fail_reason?: unknown;\n failReason?: unknown;\n result_url?: unknown;\n progress?: unknown;\n submit_time?: unknown;\n start_time?: unknown;\n finish_time?: unknown;\n data?: unknown;\n};\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction asInteger(value: unknown, fallback: number): number {\n return typeof value === \"number\" && Number.isInteger(value) ? value : fallback;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nfunction successCode(value: unknown): boolean {\n const code = String(value ?? \"\")\n .trim()\n .toLowerCase();\n return code === \"success\" || code === \"200\" || code === \"0\";\n}\n\nfunction requireSuccess<T>(response: TaskResponse<T>, fallbackMessage: string): T {\n if (!successCode(response.code)) {\n throw new GenerationProviderError(fallbackMessage, {\n details: {\n code: response.code,\n message: response.message,\n data: response.data,\n },\n });\n }\n return response.data as T;\n}\n\nfunction extractTaskId(value: unknown): string | undefined {\n if (typeof value === \"string\" && value.trim()) return value.trim();\n if (!isRecord(value)) return undefined;\n for (const key of [\"task_id\", \"id\", \"taskBatchId\"]) {\n const taskId = asString(value[key]);\n if (taskId) return taskId;\n }\n return undefined;\n}\n\nfunction normalizeStatus(value: unknown): string {\n const status = String(value ?? \"\")\n .trim()\n .toLowerCase();\n if (status === \"finished\") return \"success\";\n if (status === \"fail\" || status === \"rejected\") return \"failed\";\n return status;\n}\n\nfunction normalizeTask(operation: string, data: unknown): SunoTaskDto | null {\n if (Array.isArray(data)) return data.length > 0 ? normalizeTask(operation, data[0]) : null;\n if (!isRecord(data)) return null;\n if (\"status\" in data || \"taskStatus\" in data || \"task_status\" in data || \"task_id\" in data || \"taskBatchId\" in data) {\n const hasProviderEnvelope =\n \"taskStatus\" in data || \"task_status\" in data || \"taskBatchId\" in data || \"task_batch_id\" in data;\n return {\n ...data,\n task_id: data.task_id ?? data.taskBatchId ?? data.task_batch_id,\n status: data.status ?? data.taskStatus ?? data.task_status,\n fail_reason: data.fail_reason ?? data.failReason,\n data: data.data ?? (hasProviderEnvelope ? data : undefined),\n } as SunoTaskDto;\n }\n if (Array.isArray(data.data) && data.data.length > 0) return normalizeTask(operation, data.data[0]);\n return { action: operation, status: \"SUCCESS\", data };\n}\n\nfunction getOperation(input: GenerationAdapterInput): string {\n const fixedOperation = asString(input.declaration.adapter.operation);\n const requestedOperation = asString(input.parameters.operation);\n if (fixedOperation && requestedOperation && fixedOperation !== requestedOperation) {\n throw new GenerationValidationError(\n `${input.declaration.model} uses Suno operation ${fixedOperation}; parameters.operation cannot override it`,\n );\n }\n const operation = fixedOperation ?? requestedOperation ?? \"music\";\n if (!OPERATION_PATHS[operation]) throw new GenerationValidationError(`Unsupported Suno operation: ${operation}`);\n return operation;\n}\n\nasync function buildPayload(input: GenerationAdapterInput, operation: string): Promise<Record<string, unknown>> {\n const payload: Record<string, unknown> = {\n ...asRecord(input.declaration.adapter.defaults),\n ...input.meta,\n };\n const config = OPERATION_PATHS[operation];\n\n const prompt = mergeTextBlocks(input.declaration, input.request.content);\n if (prompt && config?.textField && payload[config.textField] === undefined) payload[config.textField] = prompt;\n const audioBlock = input.request.content.find(\n (block): block is Extract<GenerationContentBlock, { type: \"audio\" }> => block.type === \"audio\",\n );\n if (audioBlock && payload.url === undefined) payload.url = await input.context.resolveSource(audioBlock.source);\n\n const imageBlock = input.request.content.find(\n (block): block is Extract<GenerationContentBlock, { type: \"image\" }> => block.type === \"image\",\n );\n let imageUrl: string | undefined;\n if (imageBlock) {\n imageUrl = await input.context.resolveSource(imageBlock.source);\n if (payload.image_url === undefined) payload.image_url = imageUrl;\n }\n\n const videoBlock = input.request.content.find(\n (block): block is Extract<GenerationContentBlock, { type: \"video\" }> => block.type === \"video\",\n );\n let videoUrl: string | undefined;\n if (videoBlock) {\n videoUrl = await input.context.resolveSource(videoBlock.source);\n if (payload.video_url === undefined) payload.video_url = videoUrl;\n }\n\n applyFixedPayload(input, payload, asRecord(input.declaration.adapter.payload));\n const fixedTask = asString(input.declaration.adapter.task);\n if (fixedTask) applyFixedPayload(input, payload, { task: fixedTask });\n\n const task = asString(payload.task);\n if (task === \"image_to_song\" && imageUrl) setMetadataParam(payload, \"image_url\", imageUrl);\n if (task === \"video_to_song\" && videoUrl) setMetadataParam(payload, \"video_url\", videoUrl);\n if (task === \"cover\" && payload.clip_id === undefined) {\n const coverClipId = asString(payload.cover_clip_id);\n if (coverClipId) payload.clip_id = coverClipId;\n }\n\n normalizeMusicTaskPayload(input, operation, payload);\n\n if (config?.defaultMusicVersion && payload.mv === undefined && payload.model_name === undefined) {\n payload.mv = DEFAULT_MUSIC_VERSION;\n }\n\n validateSunoPayload(operation, payload);\n return payload;\n}\n\nfunction applyFixedPayload(\n input: GenerationAdapterInput,\n payload: Record<string, unknown>,\n fixed: Record<string, unknown>,\n): void {\n for (const [key, value] of Object.entries(fixed)) {\n if (value === undefined) continue;\n if (payload[key] !== undefined && payload[key] !== value) {\n throw new GenerationValidationError(\n `${input.declaration.model} fixes Suno ${key}; meta.${key} cannot override it`,\n );\n }\n payload[key] = value;\n }\n}\n\nfunction setMetadataParam(payload: Record<string, unknown>, key: string, value: string): void {\n const metadataParams = isRecord(payload.metadata_params) ? payload.metadata_params : {};\n if (metadataParams[key] === undefined) metadataParams[key] = value;\n payload.metadata_params = metadataParams;\n}\n\nfunction contentCount(content: GenerationContentBlock[], type: GenerationContentSpec[\"type\"]): number {\n return content.filter((block) => block.type === type).length;\n}\n\nfunction normalizeMusicTaskPayload(\n input: GenerationAdapterInput,\n operation: string,\n payload: Record<string, unknown>,\n): void {\n if (operation !== \"music\") return;\n const taskField = input.declaration.meta?.taskField ?? \"task\";\n const task = asString(payload[taskField]);\n if (!task) return;\n const taskVariant = input.declaration.meta?.taskVariants?.[task];\n if (!taskVariant) throw new GenerationValidationError(`Unsupported Suno music task: ${task}`);\n for (const key of taskVariant.required ?? []) {\n if (payload[key] === undefined || payload[key] === null || payload[key] === \"\") {\n throw new GenerationValidationError(`Suno task ${task} requires meta.${key}`);\n }\n }\n for (const type of taskVariant.requiredContent ?? []) {\n if (contentCount(input.request.content, type) === 0) {\n throw new GenerationValidationError(`Suno task ${task} requires ${type} content`);\n }\n }\n if (taskVariant.sendTask === false) delete payload[taskField];\n}\n\nfunction validateSunoPayload(operation: string, payload: Record<string, unknown>): void {\n const config = OPERATION_PATHS[operation];\n const task = asString(payload.task);\n if (operation === \"music\" && task) {\n if (task === \"lyrics\") throw new GenerationValidationError(\"Use operation=lyrics instead of task=lyrics\");\n }\n if (config?.requireText && !asString(payload[config.textField ?? \"prompt\"])) {\n throw new GenerationValidationError(`${config.textField ?? \"prompt\"} text is required`);\n }\n if (operation === \"upload_audio\" && !asString(payload.url)) {\n throw new GenerationValidationError(\"Audio url is required for Suno upload_audio\");\n }\n if (operation === \"concat\" && !asString(payload.clip_id)) {\n throw new GenerationValidationError(\"clip_id is required for Suno concat\");\n }\n}\n\nasync function requestJson(input: GenerationAdapterInput, path: string, init: RequestInit): Promise<TaskResponse> {\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, path),\n {\n ...init,\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n \"Content-Type\": \"application/json\",\n ...init.headers,\n },\n },\n REQUEST_TIMEOUT_MS,\n );\n const body = await response.text();\n let parsed: TaskResponse;\n try {\n parsed = body ? (JSON.parse(body) as TaskResponse) : {};\n } catch {\n throw new GenerationProviderError(\"Suno provider returned invalid JSON\", { status: response.status, body });\n }\n if (!response.ok) {\n throw new GenerationProviderError(\"Suno provider request failed\", {\n status: response.status,\n details: { body: parsed },\n });\n }\n return parsed;\n}\n\nfunction appendUrlBlock(\n output: GenerationContentBlock[],\n type: \"audio\" | \"video\" | \"image\",\n url: unknown,\n meta: Record<string, unknown>,\n): void {\n const value = asString(url);\n if (!value) return;\n output.push({ type, source: { type: \"url\", url: value } as GenerationSource, meta: compactObject(meta) });\n}\n\nfunction appendSunoContent(output: GenerationContentBlock[], value: unknown, meta: Record<string, unknown> = {}): void {\n if (Array.isArray(value)) {\n for (const item of value) appendSunoContent(output, item, meta);\n return;\n }\n if (!isRecord(value)) return;\n\n if (isRecord(value.clips)) {\n for (const clip of Object.values(value.clips)) appendSunoContent(output, clip, meta);\n }\n if (Array.isArray(value.items)) {\n for (const item of value.items) appendSunoContent(output, item, meta);\n }\n\n const itemMeta = compactObject({\n ...meta,\n id: value.id,\n clip_id: value.clipId ?? value.clip_id ?? meta.clip_id,\n task_id: value.task_id ?? value.taskId ?? meta.task_id,\n title: value.title,\n status: value.status ?? meta.status,\n model: value.model_name ?? value.modelName,\n duration: value.duration ?? (isRecord(value.metadata) ? value.metadata.duration : undefined),\n tags: value.tags ?? (isRecord(value.metadata) ? value.metadata.tags : undefined),\n prompt: value.prompt ?? (isRecord(value.metadata) ? value.metadata.prompt : undefined),\n progress: value.progress ?? meta.progress,\n progress_message: value.progressMsg ?? value.progress_msg,\n task_batch_id: value.taskBatchId ?? value.task_batch_id,\n continue_clip_id: value.continueClipId ?? value.continue_clip_id,\n input_type: value.inputType ?? value.input_type,\n make_instrumental: value.makeInstrumental ?? value.make_instrumental,\n created_at: value.createTime ?? value.created_at,\n });\n\n appendUrlBlock(\n output,\n \"audio\",\n value.audio_url ?? value.audioUrl ?? value.cld2AudioUrl ?? value.cld2_audio_url,\n itemMeta,\n );\n appendUrlBlock(output, \"audio\", value.vocal_audio_url ?? value.vocalAudioUrl, itemMeta);\n appendUrlBlock(output, \"audio\", value.instrumental_audio_url ?? value.instrumentalAudioUrl, itemMeta);\n appendUrlBlock(output, \"audio\", value.source_audio_url ?? value.sourceAudioUrl, itemMeta);\n appendUrlBlock(\n output,\n \"video\",\n value.video_url ?? value.videoUrl ?? value.cld2VideoUrl ?? value.cld2_video_url,\n itemMeta,\n );\n appendUrlBlock(\n output,\n \"image\",\n value.image_large_url ?? value.image_url ?? value.imageUrl ?? value.cld2ImageUrl ?? value.cld2_image_url,\n itemMeta,\n );\n\n const text = asString(value.upsampled_tags) ?? asString(value.text) ?? asString(value.lyrics);\n if (text) output.push({ type: \"text\", text, meta: itemMeta });\n\n if (isRecord(value.data)) appendSunoContent(output, value.data, itemMeta);\n}\n\nfunction buildImmediateResult(operation: string, data: unknown, raw: unknown): GenerationContentBlock[] {\n const output: GenerationContentBlock[] = [];\n const metadata = compactObject({ operation, raw });\n appendSunoContent(output, data, metadata);\n if (output.length > 0) return output;\n\n const value = extractTaskId(data) ?? asString(data);\n if (value) output.push({ type: \"text\", text: value, meta: metadata });\n return requireSunoOutput(output, \"Suno provider returned no output\", { operation, raw });\n}\n\nfunction requireSunoOutput(\n output: GenerationContentBlock[],\n message: string,\n details: Record<string, unknown>,\n): GenerationContentBlock[] {\n if (output.length === 0) throw new GenerationProviderError(message, { details });\n return output;\n}\n\nfunction buildResult(operation: string, task: SunoTaskDto, raw: unknown): GenerationContentBlock[] {\n const output: GenerationContentBlock[] = [];\n const metadata = compactObject({\n operation,\n task_id: task.task_id,\n action: task.action,\n status: task.status,\n fail_reason: task.fail_reason,\n progress: task.progress,\n submit_time: task.submit_time,\n start_time: task.start_time,\n finish_time: task.finish_time,\n raw,\n });\n appendSunoContent(output, task.data, metadata);\n appendUrlBlock(output, \"audio\", task.result_url, metadata);\n return requireSunoOutput(output, \"Suno task succeeded but returned no output\", { operation, task, raw });\n}\n\nasync function pollSunoTask(\n input: GenerationAdapterInput,\n operation: string,\n taskId: string,\n pollIntervalSec: number,\n maxWaitSec: number,\n): Promise<GenerationContentBlock[]> {\n const startedAt = Date.now();\n while (Date.now() - startedAt <= maxWaitSec * 1000) {\n await sleep(pollIntervalSec * 1000);\n let raw: TaskResponse;\n try {\n raw = await requestJson(input, `/suno/fetch/${encodeURIComponent(taskId)}`, { method: \"GET\" });\n } catch (error) {\n if (error instanceof GenerationProviderError) throw error;\n continue;\n }\n const data = requireSuccess(raw, \"Suno task fetch failed\");\n const task = normalizeTask(operation, data);\n if (!task) throw new GenerationProviderError(\"Suno task fetch returned invalid task data\", { details: { data } });\n\n const status = normalizeStatus(task.status);\n if (FINAL_SUCCESS_STATUSES.has(status)) return buildResult(operation, task, data);\n if (FINAL_FAILURE_STATUSES.has(status)) {\n throw new GenerationProviderError(\"Suno task failed\", {\n details: {\n task_id: taskId,\n status: task.status,\n fail_reason: task.fail_reason,\n },\n });\n }\n }\n throw new GenerationTimeoutError(\"Timed out waiting for Suno task\", { task_id: taskId, operation });\n}\n\nexport async function sunoTasksAdapter(input: GenerationAdapterInput): Promise<GenerationContentBlock[]> {\n const operation = getOperation(input);\n const payload = await buildPayload(input, operation);\n const config = OPERATION_PATHS[operation];\n if (!config) throw new GenerationValidationError(`Unsupported Suno operation: ${operation}`);\n const raw = await requestJson(input, config.path, {\n method: \"POST\",\n body: JSON.stringify(payload),\n });\n const data = requireSuccess(raw, \"Suno task submit failed\");\n\n if (!config.poll) return buildImmediateResult(operation, data, raw);\n\n const taskId = extractTaskId(data);\n if (!taskId) return buildImmediateResult(operation, data, raw);\n\n const pollIntervalSec = asInteger(input.parameters.poll_interval, DEFAULT_POLL_INTERVAL_SEC);\n const maxWaitSec = asInteger(input.parameters.max_wait, DEFAULT_MAX_WAIT_SEC);\n return pollSunoTask(input, operation, taskId, pollIntervalSec, maxWaitSec);\n}\n","import { GenerationProviderError, GenerationTimeoutError, GenerationValidationError } from \"../errors.js\";\nimport { fetchWithTimeout, joinUrl } from \"../http.js\";\nimport type { GenerationAdapterInput, GenerationContentBlock } from \"../types.js\";\nimport { compactObject } from \"../utils.js\";\n\nconst REQUEST_TIMEOUT_MS = 1_860_000;\nconst DEFAULT_POLL_INTERVAL_SEC = 2;\nconst DEFAULT_MAX_WAIT_SEC = 600;\n\ntype TaskResponse = Record<string, unknown>;\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction asString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction normalizeStatus(value: unknown): string {\n const status = String(value ?? \"\")\n .trim()\n .toLowerCase();\n if ([\"success\", \"succeed\", \"succeeded\", \"completed\"].includes(status)) return \"succeeded\";\n if ([\"queued\", \"processing\", \"in_progress\", \"running\", \"submitted\", \"not_start\"].includes(status)) {\n return \"processing\";\n }\n if ([\"failure\", \"failed\", \"error\", \"cancelled\", \"canceled\", \"expired\"].includes(status)) return \"failed\";\n return status || \"unknown\";\n}\n\nfunction unwrapTaskPayload(response: TaskResponse): TaskResponse {\n const data = isRecord(response.data) ? response.data : undefined;\n const hasTaskFields = [\"status\", \"task\", \"result_url\", \"video_url\", \"url\", \"error\", \"progress\", \"fail_reason\"].some(\n (key) => key in response,\n );\n return data && !hasTaskFields ? data : response;\n}\n\nfunction extractTaskId(response: TaskResponse): string {\n const data = isRecord(response.data) ? response.data : undefined;\n const taskId = asString(response.task_id) ?? asString(response.id) ?? asString(data?.task_id) ?? asString(data?.id);\n if (!taskId) {\n throw new GenerationProviderError(\"Video upscale provider did not return a task id\", { details: { response } });\n }\n return taskId;\n}\n\nfunction extractTaskStatus(response: TaskResponse) {\n const payload = unwrapTaskPayload(response);\n const task = isRecord(payload.task) ? payload.task : payload;\n const metadata = isRecord(payload.metadata) ? payload.metadata : isRecord(task.metadata) ? task.metadata : undefined;\n const content = isRecord(task.content) ? task.content : undefined;\n const status = normalizeStatus(payload.status ?? task.status);\n const videoUrl =\n asString(metadata?.url) ??\n asString(payload.result_url) ??\n asString(payload.video_url) ??\n asString(payload.url) ??\n asString(task.result_url) ??\n asString(task.video_url) ??\n asString(task.url) ??\n asString(content?.video_url) ??\n asString(content?.url);\n const error = isRecord(payload.error) ? payload.error : isRecord(task.error) ? task.error : undefined;\n const message =\n asString(error?.message) ??\n asString(payload.fail_reason) ??\n asString(payload.message) ??\n asString(task.fail_reason) ??\n asString(task.message) ??\n asString(response.message);\n const outputMetadata = compactObject({\n progress: payload.progress ?? task.progress,\n output_width: payload.output_width ?? task.output_width,\n output_height: payload.output_height ?? task.output_height,\n });\n return { status: error && status === \"unknown\" ? \"failed\" : status, videoUrl, message, metadata: outputMetadata };\n}\n\nasync function requestJson(input: GenerationAdapterInput, path: string, init: RequestInit): Promise<unknown> {\n const response = await fetchWithTimeout(\n input.context.fetch,\n joinUrl(input.context.baseUrl, path),\n {\n ...init,\n headers: {\n Authorization: `Bearer ${input.context.apiKey}`,\n \"Content-Type\": \"application/json\",\n ...init.headers,\n },\n },\n REQUEST_TIMEOUT_MS,\n );\n const body = await response.text();\n let parsed: unknown = {};\n try {\n parsed = body ? JSON.parse(body) : {};\n } catch {\n throw new GenerationProviderError(\"Video upscale provider returned invalid JSON\", {\n status: response.status,\n body,\n });\n }\n if (!response.ok) {\n throw new GenerationProviderError(\"Video upscale provider request failed\", {\n status: response.status,\n body,\n ...(isRecord(parsed) ? { details: parsed } : {}),\n });\n }\n return parsed;\n}\n\nfunction validateResolvedUrl(value: string): void {\n let parsed: URL;\n try {\n parsed = new URL(value);\n } catch {\n throw new GenerationValidationError(\"video-upscale-native requires an absolute http or https video URL\");\n }\n if ((parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") || parsed.username || parsed.password) {\n throw new GenerationValidationError(\"video-upscale-native requires an absolute http or https video URL\");\n }\n}\n\nexport async function videoUpscaleNativeAdapter(input: GenerationAdapterInput): Promise<GenerationContentBlock[]> {\n const video = input.request.content.find((block) => block.type === \"video\");\n if (!video || video.type !== \"video\") {\n throw new GenerationValidationError(\"video-upscale-native requires one video URL\");\n }\n const videoUrl = await input.context.resolveSource(video.source);\n validateResolvedUrl(videoUrl);\n const pollIntervalSec = DEFAULT_POLL_INTERVAL_SEC;\n const maxWaitSec = DEFAULT_MAX_WAIT_SEC;\n\n const task = (await requestJson(input, \"/v1/video/generations\", {\n method: \"POST\",\n body: JSON.stringify({ model: input.declaration.model, video_url: videoUrl }),\n })) as TaskResponse;\n const taskId = extractTaskId(task);\n const startedAt = Date.now();\n\n while (Date.now() - startedAt <= maxWaitSec * 1000) {\n await sleep(pollIntervalSec * 1000);\n const rawStatus = (await requestJson(input, `/v1/video/generations/${encodeURIComponent(taskId)}`, {\n method: \"GET\",\n })) as TaskResponse;\n const status = extractTaskStatus(rawStatus);\n\n if (status.status === \"succeeded\") {\n if (!status.videoUrl) {\n throw new GenerationProviderError(\"Video upscale succeeded but returned no video URL\", {\n details: compactObject({ taskId, rawStatus, metadata: status.metadata }),\n });\n }\n return [\n {\n type: \"video\",\n source: { type: \"url\", url: status.videoUrl },\n meta: { task_id: taskId, status: status.status, ...status.metadata },\n },\n ];\n }\n if (status.status === \"failed\") {\n throw new GenerationProviderError(`Video upscale failed${status.message ? `: ${status.message}` : \"\"}`, {\n details: compactObject({ taskId, rawStatus }),\n });\n }\n }\n\n throw new GenerationTimeoutError(\"Timed out waiting for video upscale\", { taskId });\n}\n","import { GenerationUnsupportedAdapterError } from \"../errors.js\";\nimport type { GenerationAdapter } from \"../types.js\";\nimport { arkVideoGenerationsAdapter } from \"./ark-video-generations.js\";\nimport { audioSpeechAdapter } from \"./audio-speech.js\";\nimport { geminiGenerateContentAdapter } from \"./gemini-generate-content.js\";\nimport { klingVideoGenerationsAdapter } from \"./kling-video-generations.js\";\nimport { minimaxH3VideoGenerationsAdapter } from \"./minimax-h3-video-generations.js\";\nimport { openAiImageEditsAdapter } from \"./openai-image-edits.js\";\nimport { openAiImagesAdapter } from \"./openai-images.js\";\nimport { sunoTasksAdapter } from \"./suno-tasks.js\";\nimport { videoUpscaleNativeAdapter } from \"./video-upscale-native.js\";\n\nexport const builtinGenerationAdapters: Record<string, GenerationAdapter> = {\n \"ark.videoGenerations\": arkVideoGenerationsAdapter,\n \"openai.audioSpeech\": audioSpeechAdapter,\n \"gemini.generateContent\": geminiGenerateContentAdapter,\n \"kling.videoGenerations\": klingVideoGenerationsAdapter,\n \"minimax.h3VideoGenerations\": minimaxH3VideoGenerationsAdapter,\n \"openai.imageEdits\": openAiImageEditsAdapter,\n \"openai.images\": openAiImagesAdapter,\n \"suno.tasks\": sunoTasksAdapter,\n \"video.upscaleNative\": videoUpscaleNativeAdapter,\n};\n\nexport function tryGetGenerationAdapter(\n type: string,\n adapters: Record<string, GenerationAdapter> = {},\n): GenerationAdapter | undefined {\n return adapters[type] ?? builtinGenerationAdapters[type];\n}\n\nexport function getGenerationAdapter(\n type: string,\n adapters: Record<string, GenerationAdapter> = {},\n): GenerationAdapter {\n const adapter = tryGetGenerationAdapter(type, adapters);\n if (!adapter) throw new GenerationUnsupportedAdapterError(type);\n return adapter;\n}\n\nexport * from \"./ark-video-generations.js\";\nexport * from \"./audio-speech.js\";\nexport * from \"./gemini-generate-content.js\";\nexport * from \"./kling-video-generations.js\";\nexport * from \"./minimax-h3-video-generations.js\";\nexport * from \"./openai-image-edits.js\";\nexport * from \"./openai-images.js\";\nexport * from \"./suno-tasks.js\";\nexport * from \"./video-upscale-native.js\";\n","import { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { extname, join } from \"node:path\";\nimport { parse as parseYaml, stringify as stringifyYaml } from \"yaml\";\nimport { GenerationConfigError } from \"./errors.js\";\nimport {\n GENERATION_MODEL_CATEGORIES,\n type GenerationModelCategory,\n type GenerationModelDeclaration,\n MODEL_SCHEMA,\n} from \"./types.js\";\nimport { cloneJson, slugifyFileName } from \"./utils.js\";\n\nconst DECLARATION_EXTENSIONS = new Set([\".yaml\", \".yml\", \".json\"]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction isPositiveInteger(value: unknown): value is number {\n return typeof value === \"number\" && Number.isInteger(value) && value > 0;\n}\n\nfunction isDimensionsSpec(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (value.separator !== undefined && value.separator !== \"x\" && value.separator !== \"*\") return false;\n if (value.min !== undefined && !isPositiveInteger(value.min)) return false;\n if (value.max !== undefined && !isPositiveInteger(value.max)) return false;\n if (value.multipleOf !== undefined && !isPositiveInteger(value.multipleOf)) return false;\n return value.min === undefined || value.max === undefined || value.min <= value.max;\n}\n\nfunction isParameterSpec(value: unknown): boolean {\n if (!isRecord(value)) return false;\n if (![\"string\", \"number\", \"integer\", \"boolean\"].includes(String(value.type))) return false;\n return value.type !== \"string\" || value.dimensions === undefined || isDimensionsSpec(value.dimensions);\n}\n\nfunction isMetaFieldSpec(value: unknown): boolean {\n if (!isRecord(value)) return false;\n return isParameterSpec(value) || String(value.type) === \"object\";\n}\n\nfunction isMetaTaskVariantSpec(value: unknown): boolean {\n if (!isRecord(value)) return false;\n return (\n (value.description === undefined || typeof value.description === \"string\") &&\n (value.required === undefined ||\n (Array.isArray(value.required) && value.required.every((item) => typeof item === \"string\"))) &&\n (value.requiredContent === undefined ||\n (Array.isArray(value.requiredContent) && value.requiredContent.every((item) => typeof item === \"string\"))) &&\n (value.sendTask === undefined || typeof value.sendTask === \"boolean\")\n );\n}\n\nfunction isGenerationModelCategory(value: unknown): value is GenerationModelCategory {\n return typeof value === \"string\" && (GENERATION_MODEL_CATEGORIES as readonly string[]).includes(value);\n}\n\nfunction isMetaSpec(value: unknown): boolean {\n if (!isRecord(value)) return false;\n return (\n (value.fields === undefined ||\n (isRecord(value.fields) && Object.values(value.fields).every((field) => isMetaFieldSpec(field)))) &&\n (value.taskField === undefined || typeof value.taskField === \"string\") &&\n (value.taskVariants === undefined ||\n (isRecord(value.taskVariants) &&\n Object.values(value.taskVariants).every((variant) => isMetaTaskVariantSpec(variant))))\n );\n}\n\nexport function isGenerationModelDeclaration(value: unknown): value is GenerationModelDeclaration {\n if (!isRecord(value)) return false;\n const adapter = value.adapter;\n const content = value.content;\n const parameters = value.parameters;\n const meta = value.meta;\n const examples = value.examples;\n return (\n value.schema === MODEL_SCHEMA &&\n typeof value.model === \"string\" &&\n value.model.trim().length > 0 &&\n (value.category === undefined || isGenerationModelCategory(value.category)) &&\n (value.hidden === undefined || typeof value.hidden === \"boolean\") &&\n (value.allowUnknownParameters === undefined || typeof value.allowUnknownParameters === \"boolean\") &&\n isRecord(adapter) &&\n typeof adapter.type === \"string\" &&\n isRecord(content) &&\n Array.isArray(content.input) &&\n (parameters === undefined || (isRecord(parameters) && Object.values(parameters).every(isParameterSpec))) &&\n (meta === undefined || isMetaSpec(meta)) &&\n (examples === undefined || Array.isArray(examples))\n );\n}\n\nexport function parseGenerationModelDeclaration(rawText: string, filePath = \"model.yaml\"): GenerationModelDeclaration {\n const parsed = extname(filePath) === \".json\" ? JSON.parse(rawText) : parseYaml(rawText);\n if (!isGenerationModelDeclaration(parsed)) throw new GenerationConfigError(`Invalid model declaration: ${filePath}`);\n return parsed;\n}\n\nexport function stringifyGenerationModelDeclaration(\n declaration: GenerationModelDeclaration,\n options: { format?: \"yaml\" | \"json\" } = {},\n): string {\n const value = cloneJson(declaration);\n if (options.format === \"json\") return `${JSON.stringify(value, null, 2)}\\n`;\n return stringifyYaml(value, { lineWidth: 120 });\n}\n\nexport async function readGenerationModelDeclaration(filePath: string): Promise<GenerationModelDeclaration> {\n return parseGenerationModelDeclaration(await readFile(filePath, \"utf-8\"), filePath);\n}\n\nexport async function readGenerationModelDeclarationsFromFiles(\n filePaths: string[],\n): Promise<GenerationModelDeclaration[]> {\n const declarations = await Promise.all(filePaths.map((filePath) => readGenerationModelDeclaration(filePath)));\n return mergeGenerationModelDeclarations(declarations);\n}\n\nexport async function readGenerationModelDeclarationsFromDirectory(\n directory: string,\n): Promise<GenerationModelDeclaration[]> {\n const entries = await readdir(directory);\n const files = entries\n .filter((entry) => DECLARATION_EXTENSIONS.has(extname(entry)))\n .sort()\n .map((entry) => join(directory, entry));\n return readGenerationModelDeclarationsFromFiles(files);\n}\n\nexport function mergeGenerationModelDeclarations(\n declarations: GenerationModelDeclaration[],\n): GenerationModelDeclaration[] {\n const byModel = new Map<string, GenerationModelDeclaration>();\n for (const declaration of declarations) byModel.set(declaration.model, declaration);\n return [...byModel.values()].sort((a, b) => a.model.localeCompare(b.model));\n}\n\nexport async function writeGenerationModelDeclaration(\n declaration: GenerationModelDeclaration,\n filePath: string,\n options: { format?: \"yaml\" | \"json\" } = {},\n): Promise<void> {\n await writeFile(filePath, stringifyGenerationModelDeclaration(declaration, options));\n}\n\nexport async function writeGenerationModelDeclarations(\n declarations: GenerationModelDeclaration[],\n directory: string,\n options: { format?: \"yaml\" | \"json\" } = {},\n): Promise<void> {\n await mkdir(directory, { recursive: true });\n const ext = options.format === \"json\" ? \"json\" : \"yaml\";\n await Promise.all(\n declarations.map((declaration) =>\n writeGenerationModelDeclaration(\n declaration,\n join(directory, `${slugifyFileName(declaration.model)}.${ext}`),\n options,\n ),\n ),\n );\n}\n","import type { GenerationResult } from \"./types.js\";\n\nexport type GenerationResultFields = Omit<GenerationResult, \"content\">;\n\nfunction numberValue(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === \"string\" && value ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport type GenerationResultHeaderFields = {\n requestId?: string;\n oneApiRequestId?: string;\n};\n\nexport function extractGenerationResultHeaderFields(headers: Headers): GenerationResultHeaderFields | undefined {\n const requestId = headers.get(\"x-request-id\")?.trim() || undefined;\n const oneApiRequestId = headers.get(\"x-oneapi-request-id\")?.trim() || undefined;\n return requestId || oneApiRequestId\n ? { ...(requestId ? { requestId } : {}), ...(oneApiRequestId ? { oneApiRequestId } : {}) }\n : undefined;\n}\n\nexport function extractGenerationResultFields(raw: unknown): GenerationResultFields | undefined {\n if (!isRecord(raw)) return undefined;\n const usage = isRecord(raw.usage) ? raw.usage : undefined;\n const fields: GenerationResultFields = {};\n const requestId = stringValue(raw.request_id);\n const cost = usage ? numberValue(usage.cost) : undefined;\n if (requestId !== undefined) fields.requestId = requestId;\n if (cost !== undefined) fields.cost = cost;\n return Object.keys(fields).length > 0 ? fields : undefined;\n}\n","import type { GenerationSource, GenerationSourceResolver } from \"./types.js\";\n\nexport const defaultGenerationSourceResolver: GenerationSourceResolver = (source: GenerationSource) => {\n switch (source.type) {\n case \"url\":\n return source.url;\n case \"base64\":\n return `data:${source.mediaType};base64,${source.data}`;\n }\n};\n","import { getGenerationAdapter, tryGetGenerationAdapter } from \"./adapters/index.js\";\nimport { builtinGenerationModels } from \"./builtins.js\";\nimport {\n readGenerationModelDeclarationsFromDirectory,\n readGenerationModelDeclarationsFromFiles,\n stringifyGenerationModelDeclaration,\n writeGenerationModelDeclaration,\n writeGenerationModelDeclarations,\n} from \"./config.js\";\nimport { GenerationConfigError } from \"./errors.js\";\nimport { createDebugFetch } from \"./http.js\";\nimport {\n extractGenerationResultFields,\n extractGenerationResultHeaderFields,\n type GenerationResultFields,\n type GenerationResultHeaderFields,\n} from \"./response-fields.js\";\nimport { defaultGenerationSourceResolver } from \"./source.js\";\nimport type {\n CreateGenerationClientOptions,\n GenerateRequest,\n GenerationClient,\n GenerationClientWithResult,\n GenerationDebugConfig,\n GenerationModelDeclaration,\n GenerationResult,\n ResolvedGenerationRequest,\n} from \"./types.js\";\nimport { cloneJson } from \"./utils.js\";\nimport {\n mergeGenerationMeta,\n resolveGenerationMeta,\n resolveGenerationParameters,\n validateGenerationContent,\n} from \"./validation.js\";\n\nconst DEFAULT_BASE_URL = \"https://router.neta.art\";\nconst REDACTED = \"[REDACTED]\";\nconst SECRET_DEBUG_KEY_PATTERN = /^(authorization|api[-_]?key|token|thoughtSignature)$/i;\nconst BASE64_DEBUG_KEY_PATTERN = /^(b64_json|data)$/i;\nconst MEDIA_PAYLOAD_KEYS = new Set([\n \"audio\",\n \"audio_url\",\n \"image\",\n \"image_tail\",\n \"image_url\",\n \"first_frame\",\n \"mask\",\n \"result_url\",\n \"static_mask\",\n \"url\",\n \"video\",\n \"video_url\",\n \"watermark_url\",\n]);\n\nfunction isUrlLike(value: string): boolean {\n return /^(https?:|s3:|gs:|file:|blob:)\\/\\//i.test(value.trim());\n}\n\nfunction isBase64Like(value: string): boolean {\n const compact = value.trim().replace(/\\s/g, \"\");\n if (compact.length < 256 || compact.length % 4 === 1) return false;\n return /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(compact);\n}\n\nfunction shouldRedactString(key: string | undefined, value: string): boolean {\n const trimmed = value.trim();\n if (!trimmed) return false;\n if (/^data:/i.test(trimmed)) return true;\n if (isBase64Like(trimmed)) return true;\n return !!key && MEDIA_PAYLOAD_KEYS.has(key.toLowerCase()) && !isUrlLike(trimmed);\n}\n\nfunction redactDebugEvent<T>(value: T, options: { redactSecrets: boolean }, key?: string): T {\n if (typeof value === \"string\") return (shouldRedactString(key, value) ? REDACTED : value) as T;\n if (Array.isArray(value)) return value.map((item) => redactDebugEvent(item, options, key)) as T;\n if (!value || typeof value !== \"object\") return value;\n\n const output: Record<string, unknown> = {};\n for (const [childKey, child] of Object.entries(value)) {\n if (BASE64_DEBUG_KEY_PATTERN.test(childKey) || (options.redactSecrets && SECRET_DEBUG_KEY_PATTERN.test(childKey))) {\n output[childKey] = REDACTED;\n } else {\n output[childKey] = redactDebugEvent(child, options, childKey);\n }\n }\n return output as T;\n}\n\nfunction defaultDebugLogger(event: unknown): void {\n console.error(JSON.stringify(event, null, 2));\n}\n\nfunction resolveDebugConfig(debug: CreateGenerationClientOptions[\"debug\"]): GenerationDebugConfig | undefined {\n if (!debug) return undefined;\n if (debug === true) {\n return {\n enabled: true,\n includeSensitive: false,\n includeResponseBody: true,\n logger: (event) => defaultDebugLogger(redactDebugEvent(event, { redactSecrets: true })),\n };\n }\n if (!debug.enabled) return undefined;\n const includeSensitive = debug.includeSensitive ?? false;\n const logger = debug.logger ?? defaultDebugLogger;\n return {\n enabled: true,\n includeSensitive,\n includeResponseBody: debug.includeResponseBody ?? true,\n logger: (event) => logger(redactDebugEvent(event, { redactSecrets: !includeSensitive })),\n };\n}\n\nfunction resolveModels(options: CreateGenerationClientOptions): GenerationModelDeclaration[] {\n const includeBuiltinModels = options.includeBuiltinModels ?? !options.models;\n const models = [...(includeBuiltinModels ? builtinGenerationModels : []), ...(options.models ?? [])];\n const byModel = new Map<string, GenerationModelDeclaration>();\n for (const model of models) byModel.set(model.model, cloneJson(model));\n return [...byModel.values()].sort((a, b) => a.model.localeCompare(b.model));\n}\n\nfunction createResultFieldCaptureFetch(\n fetchFn: typeof fetch,\n onFields: (\n fields: GenerationResultFields | undefined,\n headerFields: GenerationResultHeaderFields | undefined,\n ) => void,\n): typeof fetch {\n return (async (input: string | URL | Request, init?: RequestInit) => {\n const response = await fetchFn(input, init);\n const headerFields = extractGenerationResultHeaderFields(response.headers);\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n let fields: GenerationResultFields | undefined;\n if (contentType.includes(\"application/json\") || contentType.includes(\"+json\")) {\n try {\n fields = extractGenerationResultFields(await response.clone().json());\n } catch {\n // No JSON body, no result fields.\n }\n }\n if (fields || headerFields) onFields(fields, headerFields);\n return response;\n }) as typeof fetch;\n}\n\nexport function createGenerationClient(options: CreateGenerationClientOptions = {}): GenerationClientWithResult {\n const models = resolveModels(options);\n const byModel = new Map(models.map((declaration) => [declaration.model, declaration]));\n const fetchFn = options.fetch ?? globalThis.fetch;\n if (!fetchFn) throw new GenerationConfigError(\"A fetch implementation is required\");\n const debug = resolveDebugConfig(options.debug);\n const adapterFetch = debug ? createDebugFetch(fetchFn, debug) : fetchFn;\n\n function requireModel(model: string): GenerationModelDeclaration {\n const declaration = byModel.get(model);\n if (!declaration) throw new GenerationConfigError(`Generation model is unavailable: ${model}`);\n return declaration;\n }\n\n function validateRequest(request: GenerateRequest): ResolvedGenerationRequest {\n const declaration = requireModel(request.model);\n validateGenerationContent(declaration, request.content);\n const parameters = resolveGenerationParameters(declaration, request.parameters);\n const meta = resolveGenerationMeta(\n declaration,\n mergeGenerationMeta({ ...(request.metadata ?? {}), ...(request.meta ?? {}) }, request.content),\n request.content,\n );\n const resolved = { declaration: cloneJson(declaration), request, parameters, meta };\n tryGetGenerationAdapter(declaration.adapter.type, options.adapters)?.validate?.(resolved);\n return { ...resolved, request: cloneJson(request) };\n }\n\n async function runAdapter(request: GenerateRequest, fetch: typeof globalThis.fetch) {\n const resolved = validateRequest(request);\n const apiKey = request.apiKey ?? options.apiKey;\n if (!apiKey) throw new GenerationConfigError(\"apiKey is required\");\n const adapter = getGenerationAdapter(resolved.declaration.adapter.type, options.adapters);\n return adapter({\n ...resolved,\n context: {\n apiKey,\n baseUrl: request.baseUrl ?? options.baseUrl ?? DEFAULT_BASE_URL,\n fetch,\n resolveSource: options.sourceResolver ?? defaultGenerationSourceResolver,\n },\n });\n }\n\n const client: GenerationClientWithResult = {\n validate(request: GenerateRequest) {\n return validateRequest(request);\n },\n\n async generate(request: GenerateRequest) {\n return runAdapter(request, adapterFetch);\n },\n\n async generateResult(request: GenerateRequest): Promise<GenerationResult> {\n let capturedFields: GenerationResultFields | undefined;\n let capturedBodyRequestId: string | undefined;\n let capturedRequestId: string | undefined;\n let capturedOneApiRequestId: string | undefined;\n const captureFetch = createResultFieldCaptureFetch(adapterFetch, (fields, headerFields) => {\n if (fields) capturedFields = { ...capturedFields, ...fields };\n if (fields?.requestId) capturedBodyRequestId = fields.requestId;\n if (headerFields?.requestId) capturedRequestId = headerFields.requestId;\n if (headerFields?.oneApiRequestId) capturedOneApiRequestId = headerFields.oneApiRequestId;\n const requestId = capturedBodyRequestId ?? capturedRequestId ?? capturedOneApiRequestId;\n if (requestId) capturedFields = { ...capturedFields, requestId };\n });\n const content = await runAdapter(request, captureFetch);\n return { content, ...(capturedFields ?? {}) };\n },\n\n listModels() {\n return cloneJson(models);\n },\n\n getModel(model: string) {\n const declaration = byModel.get(model);\n return declaration ? cloneJson(declaration) : null;\n },\n\n stringifyModelConfig(model: string, stringifyOptions = {}) {\n return stringifyGenerationModelDeclaration(requireModel(model), stringifyOptions);\n },\n\n exportModelConfig(model: string, filePath: string) {\n return writeGenerationModelDeclaration(requireModel(model), filePath);\n },\n\n exportModelConfigs(directory: string) {\n return writeGenerationModelDeclarations(models, directory);\n },\n };\n\n return client;\n}\n\nexport async function createGenerationClientFromFiles(\n filePaths: string[],\n options: Omit<CreateGenerationClientOptions, \"models\"> = {},\n): Promise<GenerationClient> {\n const models = await readGenerationModelDeclarationsFromFiles(filePaths);\n return createGenerationClient({ ...options, models, includeBuiltinModels: options.includeBuiltinModels ?? true });\n}\n\nexport async function createGenerationClientFromDirectory(\n directory: string,\n options: Omit<CreateGenerationClientOptions, \"models\"> = {},\n): Promise<GenerationClient> {\n const models = await readGenerationModelDeclarationsFromDirectory(directory);\n return createGenerationClient({ ...options, models, includeBuiltinModels: options.includeBuiltinModels ?? true });\n}\n\nexport async function createGenerationClientFromFile(\n filePath: string,\n options: Omit<CreateGenerationClientOptions, \"models\"> = {},\n): Promise<GenerationClient> {\n return createGenerationClientFromFiles([filePath], options);\n}\n","import { getBuiltinGenerationModel, listBuiltinGenerationModels } from \"./builtins.js\";\nimport {\n stringifyGenerationModelDeclaration,\n writeGenerationModelDeclaration,\n writeGenerationModelDeclarations,\n} from \"./config.js\";\nimport { GenerationConfigError } from \"./errors.js\";\n\nexport function stringifyBuiltinModelConfig(model: string, options: { format?: \"yaml\" | \"json\" } = {}): string {\n const declaration = getBuiltinGenerationModel(model);\n if (!declaration) throw new GenerationConfigError(`Built-in model is unavailable: ${model}`);\n return stringifyGenerationModelDeclaration(declaration, options);\n}\n\nexport async function exportBuiltinModelConfig(model: string, filePath: string): Promise<void> {\n const declaration = getBuiltinGenerationModel(model);\n if (!declaration) throw new GenerationConfigError(`Built-in model is unavailable: ${model}`);\n await writeGenerationModelDeclaration(declaration, filePath);\n}\n\nexport async function exportBuiltinModelConfigs(directory: string): Promise<void> {\n await writeGenerationModelDeclarations(listBuiltinGenerationModels(), directory);\n}\n"],"mappings":"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"}
|