"use strict"; (function () { const DEFAULT_BASE_URL = "/runtime/custom_lowbit/full_transformer/"; const DP4A_FEATURE = "packed_4x8_integer_dot_product"; const CONVENTIONAL_BUNDLES = [ {name: "qkv0", path: "transformer_img_qkv0/manifest.json", kind: "linear"}, {name: "singleLinear1", path: "transformer_single_linear1_0/manifest.json", kind: "linear"}, {name: "singleLinear2", path: "transformer_single_linear2_0/manifest.json", kind: "linear"}, {name: "singleBlock0", path: "transformer_single_block0/manifest.json", kind: "block_constants"}, ]; const scriptUrl = document.currentScript && document.currentScript.src ? document.currentScript.src : null; function asDirectoryUrl(value) { const url = new URL(String(value || DEFAULT_BASE_URL), window.location.href).toString(); return url.endsWith("/") ? url : `${url}/`; } function resolveUrl(baseUrl, ref) { return new URL(ref, new URL(baseUrl, window.location.href)).toString(); } function cloneJson(value) { return JSON.parse(JSON.stringify(value)); } function sleepMs(ms) { return new Promise((resolve) => setTimeout(resolve, ms)); } async function fetchWithRetry(url, options, optional = false) { let lastError = null; for (let attempt = 0; attempt < 4; attempt += 1) { try { const response = await fetch(url, options); if (response.ok || (optional && response.status === 404)) return response; throw new Error(`fetch failed ${response.status}: ${url}`); } catch (err) { lastError = err; if (attempt < 3) await sleepMs(100 * (attempt + 1)); } } if (optional) return null; throw lastError || new Error(`fetch failed: ${url}`); } async function fetchJson(url, optional = false) { const response = await fetchWithRetry(url, {}, optional); if (!response) return null; if (!response.ok) { if (optional) return null; throw new Error(`fetch failed ${response.status}: ${url}`); } return await response.json(); } async function fetchArrayBufferRuntime(url) { const response = await fetchWithRetry(url, {}); if (!response.ok) { throw new Error(`fetch failed ${response.status}: ${url}`); } return await response.arrayBuffer(); } function isFileRef(value) { return typeof value === "string" && /\.(bin|dat|raw)$/i.test(value); } function isManifestRef(value) { return typeof value === "string" && /(^|\/)manifest\.json(\?.*)?$/i.test(value); } function looksLikeBundleDirectory(keyPath, value) { if (typeof value !== "string") return false; if (!value || value.startsWith("/model/") || value.includes("\\")) return false; if (/\.[a-z0-9]+$/i.test(value) && !value.endsWith("/")) return false; const key = keyPath[keyPath.length - 1] || ""; const parent = keyPath[keyPath.length - 2] || ""; return ( /(^|_)(base_?url|bundle|dir|directory|path)$/i.test(key) || /^(bundles|linears|blocks|checkpoints|layers)$/i.test(parent) ); } function inferViewConstructor(keyPath, url) { const text = `${keyPath.join(".")} ${url}`.toLowerCase(); if (text.includes("f32")) return Float32Array; if (text.includes("f16")) return Uint16Array; if (text.includes("u32") || text.includes("zero_point")) return Uint32Array; if (text.includes("i8")) return Int8Array; if (text.includes("u8") || text.includes("q4")) return Uint8Array; return Uint8Array; } function walkObject(value, visit, keyPath = []) { if (!value || typeof value !== "object") return; if (Array.isArray(value)) { for (let index = 0; index < value.length; index += 1) { visit(value[index], keyPath.concat(String(index))); walkObject(value[index], visit, keyPath.concat(String(index))); } return; } for (const [key, child] of Object.entries(value)) { visit(child, keyPath.concat(key)); walkObject(child, visit, keyPath.concat(key)); } } function bundleNameFromKeyPath(keyPath, fallback) { const key = keyPath[keyPath.length - 1] || fallback; const parent = keyPath[keyPath.length - 2] || ""; if (/^(bundles|linears|blocks|checkpoints|layers)$/i.test(parent)) { return key; } return keyPath.slice(-2).join(".") || fallback; } function collectBundleRefs(manifest, baseUrl) { const refs = new Map(); walkObject(manifest, (value, keyPath) => { if (isManifestRef(value)) { const url = resolveUrl(baseUrl, value); refs.set(url, { name: bundleNameFromKeyPath(keyPath, value), url, baseUrl: resolveUrl(url, "."), explicit: true, }); } else if (looksLikeBundleDirectory(keyPath, value)) { const dirUrl = asDirectoryUrl(resolveUrl(baseUrl, value)); const url = resolveUrl(dirUrl, "manifest.json"); refs.set(url, { name: bundleNameFromKeyPath(keyPath, value), url, baseUrl: dirUrl, explicit: false, }); } }); if (!(manifest && Array.isArray(manifest.linears))) { for (const item of CONVENTIONAL_BUNDLES) { const url = resolveUrl(baseUrl, item.path); if (!refs.has(url)) { refs.set(url, { name: item.name, kind: item.kind, url, baseUrl: resolveUrl(url, "."), explicit: false, conventional: true, }); } } } return Array.from(refs.values()); } function collectBinaryRefs(manifest, baseUrl, label) { const refs = []; walkObject(manifest, (value, keyPath) => { if (!isFileRef(value)) return; refs.push({ key: `${label}:${keyPath.join(".")}`, keyPath, url: resolveUrl(baseUrl, value), }); }); return refs; } function expectedCountForRef(manifest, keyPath) { const section = keyPath.length > 1 ? manifest[keyPath[0]] : null; const key = keyPath[keyPath.length - 1]; if (!section || typeof section !== "object") return null; if (key === "packed_u32" && Number.isFinite(section.packed_u32_count)) return section.packed_u32_count; if (/scale/.test(key) && Number.isFinite(section.scale_count)) return section.scale_count; if (/zero/.test(key) && Number.isFinite(section.zero_point_count)) return section.zero_point_count; return null; } async function loadBinaryAssets(manifest, baseUrl, label, warnings) { const assets = new Map(); const refs = collectBinaryRefs(manifest, baseUrl, label); await Promise.all(refs.map(async (ref) => { const buffer = await fetchArrayBufferRuntime(ref.url); const View = inferViewConstructor(ref.keyPath, ref.url); const view = buffer.byteLength % View.BYTES_PER_ELEMENT === 0 ? new View(buffer) : new Uint8Array(buffer); const expectedCount = expectedCountForRef(manifest, ref.keyPath); if (expectedCount !== null && view.length !== expectedCount) { warnings.push( `${ref.key} expected ${expectedCount} values, loaded ${view.length} from ${ref.url}`, ); } assets.set(ref.key, { url: ref.url, byteLength: buffer.byteLength, valueType: view.constructor.name, buffer, view, }); })); return assets; } function identifyBundleKind(manifest) { if (manifest && manifest.i8_dp4a && manifest.shape) return "linear"; if (manifest && manifest.q4 && manifest.shape) return "linear"; if (manifest && Array.isArray(manifest.linears)) return "full_transformer"; if (manifest && manifest.query_norm_scale_f16 && manifest.key_norm_scale_f16) return "block_constants"; return "unknown"; } function summarizeManifest(manifest) { if (!manifest || typeof manifest !== "object") return null; return { format_version: manifest.format_version ?? null, name: manifest.name || null, source_node: manifest.source_node || null, shape: manifest.shape || null, q4: manifest.q4 ? { packed_u32_count: manifest.q4.packed_u32_count ?? null, scale_count: manifest.q4.scale_count ?? null, zero_point_count: manifest.q4.zero_point_count ?? null, } : null, i8_dp4a: manifest.i8_dp4a ? { k_words: manifest.i8_dp4a.k_words ?? null, packed_u32_count: manifest.i8_dp4a.packed_u32_count ?? null, scale_count: manifest.i8_dp4a.scale_count ?? null, } : null, counts: manifest.counts || null, }; } async function loadLinearHarness() { if (typeof window.runCustomLowbitLinearBench === "function" && typeof window.runCustomLowbitLinearManifestBench === "function" && typeof window.runCustomSingleStreamMlpBench === "function" && typeof window.runCustomSingleStreamBlocksLoopBench === "function" && typeof window.runCustomDoubleStreamBlockBench === "function" && typeof window.runCustomDoubleStreamBlocksLoopBench === "function" && typeof window.runCustomTimestepModulationBench === "function" && typeof window.runCustomSingleBlockQ4Bench === "function" && typeof window.runCustomFluxTransformerDenoise === "function") { return {loaded: true, loadedByRuntime: false}; } if (!scriptUrl) { return {loaded: false, error: "custom_lowbit_linear.js is not loaded and runtime script URL is unknown"}; } const harnessUrl = resolveUrl(scriptUrl, "custom_lowbit_linear.js"); await new Promise((resolve, reject) => { const script = document.createElement("script"); script.src = harnessUrl; script.async = true; script.onload = resolve; script.onerror = () => reject(new Error(`failed to load ${harnessUrl}`)); document.head.appendChild(script); }); return { loaded: typeof window.runCustomLowbitLinearBench === "function" && typeof window.runCustomLowbitLinearManifestBench === "function" && typeof window.runCustomSingleStreamMlpBench === "function" && typeof window.runCustomSingleStreamBlocksLoopBench === "function" && typeof window.runCustomDoubleStreamBlockBench === "function" && typeof window.runCustomDoubleStreamBlocksLoopBench === "function" && typeof window.runCustomTimestepModulationBench === "function" && typeof window.runCustomSingleBlockQ4Bench === "function" && typeof window.runCustomFluxTransformerDenoise === "function", loadedByRuntime: true, url: harnessUrl, }; } async function inspectWebGpu() { const result = { navigatorGpu: Boolean(navigator.gpu), adapterAvailable: false, adapterFeatures: [], wgslLanguageFeatures: [], shaderF16: false, dp4a: false, valid: false, notes: [], }; if (!navigator.gpu) { result.notes.push("navigator.gpu is not available"); return result; } const wgslFeatures = navigator.gpu.wgslLanguageFeatures || new Set(); result.wgslLanguageFeatures = Array.from(wgslFeatures).sort(); result.dp4a = wgslFeatures.has(DP4A_FEATURE); const adapter = await navigator.gpu.requestAdapter({powerPreference: "high-performance"}); result.adapterAvailable = Boolean(adapter); if (!adapter) { result.notes.push("WebGPU adapter is not available"); return result; } result.adapterFeatures = Array.from(adapter.features || []).sort(); result.shaderF16 = Boolean(adapter.features && adapter.features.has("shader-f16")); result.valid = result.shaderF16 && result.dp4a; if (!result.shaderF16) result.notes.push("WebGPU adapter does not expose shader-f16"); if (!result.dp4a) result.notes.push(`WGSL ${DP4A_FEATURE} is not available`); return result; } function selectLinearBundle(runtimeState, params) { const requestedName = params.linearId || params.linearName || params.bundleName; if (requestedName) { const exact = runtimeState.bundles.find((bundle) => ( bundle.name === requestedName || (bundle.manifest && bundle.manifest.id === requestedName) || (bundle.manifest && bundle.manifest.source_node === requestedName) )); if (!exact) throw new Error(`linear bundle not found: ${requestedName}`); if (exact.kind !== "linear" && exact.kind !== "linear_entry") { throw new Error(`bundle is not a linear bundle: ${requestedName}`); } return exact; } if (params.bundleBaseUrl) { return { name: "params.bundleBaseUrl", baseUrl: asDirectoryUrl(params.bundleBaseUrl), manifest: null, kind: "linear", }; } const preferredName = "single_blocks.0.linear1"; return ( runtimeState.bundles.find((bundle) => (bundle.kind === "linear" || bundle.kind === "linear_entry") && bundle.name === preferredName) || runtimeState.bundles.find((bundle) => (bundle.kind === "linear" || bundle.kind === "linear_entry") && bundle.name === "singleLinear1") || runtimeState.bundles.find((bundle) => (bundle.kind === "linear" || bundle.kind === "linear_entry") && bundle.name === "qkv0") || runtimeState.bundles.find((bundle) => bundle.kind === "linear" || bundle.kind === "linear_entry") ); } function bundleMatches(bundle, names, sourcePattern) { const wanted = new Set(names.map((name) => name.toLowerCase())); const manifestName = bundle.manifest && bundle.manifest.name ? String(bundle.manifest.name) : ""; const sourceNode = bundle.manifest && bundle.manifest.source_node ? String(bundle.manifest.source_node) : ""; return ( wanted.has(String(bundle.name || "").toLowerCase()) || wanted.has(manifestName.toLowerCase()) || (sourcePattern && sourcePattern.test(sourceNode)) ); } function selectSingleBlock(runtimeState, params) { const linear1 = params.linear1BaseUrl ? {baseUrl: asDirectoryUrl(params.linear1BaseUrl), name: "params.linear1BaseUrl"} : runtimeState.bundles.find((bundle) => ( bundle.kind === "linear" && bundleMatches(bundle, ["singleLinear1", "linear1", "transformer_single_linear1_0"], /\/linear1\//) )); const linear2 = params.linear2BaseUrl ? {baseUrl: asDirectoryUrl(params.linear2BaseUrl), name: "params.linear2BaseUrl"} : runtimeState.bundles.find((bundle) => ( bundle.kind === "linear" && bundleMatches(bundle, ["singleLinear2", "linear2", "transformer_single_linear2_0"], /\/linear2\//) )); const block = params.blockBaseUrl ? {baseUrl: asDirectoryUrl(params.blockBaseUrl), name: "params.blockBaseUrl"} : runtimeState.bundles.find((bundle) => ( bundle.kind === "block_constants" && bundleMatches(bundle, ["singleBlock0", "block0", "single_block0", "transformer_single_block0"]) )); if (!linear1 || !linear2 || !block) { throw new Error("single block checkpoint requires singleLinear1, singleLinear2, and singleBlock0 bundles"); } return {linear1, linear2, block}; } function makeStatus(runtimeState) { const assetSummary = {}; for (const [key, item] of runtimeState.assets.entries()) { assetSummary[key] = { url: item.url, byteLength: item.byteLength, valueType: item.valueType, }; } return { verdict: runtimeState.ready ? "custom-transformer-runtime-ready" : "custom-transformer-runtime-not-ready", ready: runtimeState.ready, baseUrl: runtimeState.baseUrl, manifest: { url: runtimeState.manifestUrl, summary: summarizeManifest(runtimeState.manifest), }, webgpu: cloneJson(runtimeState.webgpu), harness: cloneJson(runtimeState.harness), bundles: runtimeState.bundles.map((bundle) => ({ name: bundle.name, kind: bundle.kind, baseUrl: bundle.baseUrl, url: bundle.url, manifest: summarizeManifest(bundle.manifest), })), assets: assetSummary, assetCount: runtimeState.assets.size, warnings: runtimeState.warnings.slice(), notes: runtimeState.notes.slice(), }; } function makeCheckpointStatus(runtimeState) { return { verdict: runtimeState.ready ? "custom-transformer-runtime-ready" : "custom-transformer-runtime-not-ready", ready: runtimeState.ready, baseUrl: runtimeState.baseUrl, manifest: { url: runtimeState.manifestUrl, summary: summarizeManifest(runtimeState.manifest), }, webgpu: cloneJson(runtimeState.webgpu), harness: cloneJson(runtimeState.harness), bundleCount: runtimeState.bundles.length, assetCount: runtimeState.assets.size, warnings: runtimeState.warnings.slice(), notes: runtimeState.notes.slice(), }; } async function createCustomFluxTransformerRuntime(options = {}) { const baseUrl = asDirectoryUrl(options.baseUrl || DEFAULT_BASE_URL); const manifestUrl = resolveUrl(baseUrl, "manifest.json"); const warnings = []; const notes = []; const manifest = await fetchJson(manifestUrl); const webgpu = await inspectWebGpu(); const harness = await loadLinearHarness(); if (!harness.loaded) notes.push(harness.error || "custom low-bit linear harness is not loaded"); const assets = options.preloadBinaries === false ? new Map() : await loadBinaryAssets(manifest, baseUrl, "full", warnings); const bundles = []; const bundleRefs = collectBundleRefs(manifest, baseUrl); for (const ref of bundleRefs) { const bundleManifest = await fetchJson(ref.url, !ref.explicit); if (!bundleManifest) continue; const kind = ref.kind || identifyBundleKind(bundleManifest); const bundle = { name: ref.name, kind, url: ref.url, baseUrl: ref.baseUrl, manifest: bundleManifest, }; bundles.push(bundle); if (options.preloadBinaries !== false) { const bundleAssets = await loadBinaryAssets(bundleManifest, ref.baseUrl, ref.name, warnings); for (const [key, asset] of bundleAssets.entries()) assets.set(key, asset); } } if (Array.isArray(manifest.linears)) { for (const linear of manifest.linears) { bundles.push({ name: linear.id || linear.source_node || `linear_${bundles.length}`, kind: "linear_entry", url: manifestUrl, baseUrl, manifest: linear, fullManifestEntry: true, }); } } if (identifyBundleKind(manifest) === "linear") { bundles.unshift({ name: manifest.name || "full", kind: "linear", url: manifestUrl, baseUrl, manifest, }); } const ready = Boolean(webgpu.valid && harness.loaded && manifest && (bundles.length > 0 || identifyBundleKind(manifest) !== "unknown")); const runtimeState = { ready, baseUrl, manifestUrl, manifest, webgpu, harness, bundles, assets, warnings, notes, }; return { status() { return makeStatus(runtimeState); }, async runDenoise(params = {}) { if (!runtimeState.webgpu.valid) { throw new Error(runtimeState.webgpu.notes.join("; ") || "WebGPU feature validation failed"); } if (!runtimeState.harness.loaded) { throw new Error("custom low-bit transformer harness is not loaded"); } if (typeof window.runCustomFluxTransformerDenoise !== "function") { throw new Error("custom full transformer denoise harness is not loaded"); } const result = await window.runCustomFluxTransformerDenoise({ ...params, fullManifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, }); return { ...result, runtimeStatus: makeCheckpointStatus(runtimeState), }; }, async prepareAssets(params = {}) { if (!runtimeState.webgpu.valid) { throw new Error(runtimeState.webgpu.notes.join("; ") || "WebGPU feature validation failed"); } if (typeof window.prepareCustomFluxTransformerAssets !== "function") { throw new Error("custom full transformer asset prepare harness is not loaded"); } return await window.prepareCustomFluxTransformerAssets({ ...params, fullManifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, }); }, async prepareStage(params = {}) { if (!runtimeState.webgpu.valid) { throw new Error(runtimeState.webgpu.notes.join("; ") || "WebGPU feature validation failed"); } if (!runtimeState.harness.loaded) { throw new Error("custom low-bit transformer harness is not loaded"); } if (typeof window.runCustomFluxTransformerDenoise !== "function") { throw new Error("custom full transformer denoise harness is not loaded"); } const result = await window.runCustomFluxTransformerDenoise({ ...params, prepareOnly: true, fullManifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, }); return { ...result, runtimeStatus: makeCheckpointStatus(runtimeState), }; }, async warmDispatch(params = {}) { if (!runtimeState.webgpu.valid) { throw new Error(runtimeState.webgpu.notes.join("; ") || "WebGPU feature validation failed"); } if (!runtimeState.harness.loaded) { throw new Error("custom low-bit transformer harness is not loaded"); } if (typeof window.runCustomFluxTransformerDenoise !== "function") { throw new Error("custom full transformer denoise harness is not loaded"); } const result = await window.runCustomFluxTransformerDenoise({ ...params, warmDispatchOnly: true, fullManifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, }); return { ...result, runtimeStatus: makeCheckpointStatus(runtimeState), }; }, async runCheckpoint(params = {}) { if (!runtimeState.webgpu.valid) { throw new Error(runtimeState.webgpu.notes.join("; ") || "WebGPU feature validation failed"); } if (!runtimeState.harness.loaded) { throw new Error("custom low-bit linear harness is not loaded"); } const kind = params.kind || params.checkpoint || ( runtimeState.bundles.some((bundle) => bundle.name === "singleLinear1") ? "single_block" : "linear" ); const releaseDeviceAfter = params.releaseDeviceAfter !== false; try { if (kind === "linear") { const bundle = selectLinearBundle(runtimeState, params); if (!bundle) throw new Error("no executable linear bundle was found"); const common = { mode: params.mode || (bundle.kind === "linear_entry" ? "q4" : "i8"), n: Number(params.n ?? 16), warmupRuns: Number(params.warmupRuns ?? 0), timedRuns: Number(params.timedRuns ?? 1), verify: Boolean(params.verify), q4TileCols: params.q4TileCols, i8TileCols: params.i8TileCols, i8Kernel: params.i8Kernel, rowBlockSize: params.rowBlockSize, prefixCount: params.prefixCount, verifyRows: params.verifyRows, }; const result = bundle.kind === "linear_entry" ? await window.runCustomLowbitLinearManifestBench({ ...common, manifest: bundle.manifest, bundleBaseUrl: runtimeState.baseUrl, }) : await window.runCustomLowbitLinearBench({ ...common, bundleBaseUrl: bundle.baseUrl, }); return { verdict: "custom-transformer-linear-checkpoint-completed", checkpoint: {kind: "linear", bundle: bundle.name, baseUrl: bundle.baseUrl}, runtimeStatus: makeCheckpointStatus(runtimeState), result, }; } if (kind === "single_block") { const selected = selectSingleBlock(runtimeState, params); const result = await window.runCustomSingleStreamMlpBench({ linear1BaseUrl: selected.linear1.baseUrl, linear2BaseUrl: selected.linear2.baseUrl, blockBaseUrl: selected.block.baseUrl, n: Number(params.n ?? 16), warmupRuns: Number(params.warmupRuns ?? 0), timedRuns: Number(params.timedRuns ?? 1), realAttention: Boolean(params.realAttention), readbackSample: Number(params.readbackSample ?? 8), linear1TileCols: params.linear1TileCols, linear2TileCols: params.linear2TileCols, linear1WChunkCols: params.linear1WChunkCols, linear2WChunkCols: params.linear2WChunkCols, linear1OutputF16: params.linear1OutputF16, fuseActivationQuant: Boolean(params.fuseActivationQuant), correctSingleBlock: Boolean(params.correctSingleBlock), rope: Boolean(params.rope), tiledAttention: params.tiledAttention, attentionTileKeys: params.attentionTileKeys, attentionQueryRows: params.attentionQueryRows ?? 16, textTokens: params.textTokens, imageWidth: params.imageWidth, }); return { verdict: "custom-transformer-single-block-checkpoint-completed", checkpoint: { kind: "single_block", linear1: selected.linear1.baseUrl, linear2: selected.linear2.baseUrl, block: selected.block.baseUrl, }, runtimeStatus: makeCheckpointStatus(runtimeState), result, }; } if (kind === "timestep_modulation" || kind === "modulation") { if (typeof window.runCustomTimestepModulationBench !== "function") { throw new Error("custom timestep modulation harness is not loaded"); } const result = await window.runCustomTimestepModulationBench({ manifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, timestep: params.timestep, modulation: params.modulation, q4TileCols: params.q4TileCols, warmupRuns: Number(params.warmupRuns ?? 0), timedRuns: Number(params.timedRuns ?? 1), readbackSample: Number(params.readbackSample ?? 24), }); return { verdict: "custom-transformer-timestep-modulation-checkpoint-completed", checkpoint: {kind: "timestep_modulation", baseUrl: runtimeState.baseUrl}, runtimeStatus: makeCheckpointStatus(runtimeState), result, }; } if (kind === "single_block_q4") { if (typeof window.runCustomSingleBlockQ4Bench !== "function") { throw new Error("custom q4 single-block harness is not loaded"); } const result = await window.runCustomSingleBlockQ4Bench({ manifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, blockIndex: Number(params.blockIndex ?? 0), n: Number(params.n ?? 768), timestep: params.timestep, warmupRuns: Number(params.warmupRuns ?? 0), timedRuns: Number(params.timedRuns ?? 1), readbackSample: Number(params.readbackSample ?? 16), q4TileCols: params.q4TileCols, rope: params.rope, textTokens: params.textTokens, imageWidth: params.imageWidth, }); return { verdict: "custom-transformer-single-block-q4-checkpoint-completed", checkpoint: {kind: "single_block_q4", baseUrl: runtimeState.baseUrl}, runtimeStatus: makeCheckpointStatus(runtimeState), result, }; } if (kind === "single_block_dynamic_i8") { const result = await window.runCustomSingleStreamMlpBench({ fullManifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, dynamicI8FromQ4: true, realModulation: true, blockIndex: Number(params.blockIndex ?? 0), n: Number(params.n ?? 768), timestep: params.timestep, warmupRuns: Number(params.warmupRuns ?? 0), timedRuns: Number(params.timedRuns ?? 1), realAttention: params.realAttention !== false, readbackSample: Number(params.readbackSample ?? 16), linear1TileCols: params.linear1TileCols ?? 256, linear2TileCols: params.linear2TileCols ?? 256, linear1WChunkCols: params.linear1WChunkCols ?? 64, linear2WChunkCols: params.linear2WChunkCols ?? 64, linear1OutputF16: params.linear1OutputF16 !== false, singleComputePass: params.singleComputePass !== false, fuseActivationQuant: params.fuseActivationQuant !== false, fuseResidualDot: params.fuseResidualDot !== false, correctSingleBlock: true, rope: params.rope, tiledAttention: params.tiledAttention, attentionTileKeys: params.attentionTileKeys, attentionQueryRows: params.attentionQueryRows, textTokens: params.textTokens, imageWidth: params.imageWidth, }); return { verdict: "custom-transformer-single-block-dynamic-i8-checkpoint-completed", checkpoint: {kind: "single_block_dynamic_i8", baseUrl: runtimeState.baseUrl}, runtimeStatus: makeCheckpointStatus(runtimeState), result, }; } if (kind === "single_blocks_loop_dynamic_i8") { if (typeof window.runCustomSingleStreamBlocksLoopBench !== "function") { throw new Error("custom single-stream blocks loop harness is not loaded"); } const result = await window.runCustomSingleStreamBlocksLoopBench({ fullManifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, blockIndex: Number(params.blockIndex ?? 0), blockCount: Number(params.blockCount ?? 4), n: Number(params.n ?? 768), timestep: params.timestep, warmupRuns: Number(params.warmupRuns ?? 0), timedRuns: Number(params.timedRuns ?? 1), readbackSample: Number(params.readbackSample ?? 16), linear1TileCols: params.linear1TileCols ?? 256, linear2TileCols: params.linear2TileCols ?? 256, linear1WChunkCols: params.linear1WChunkCols ?? 64, linear2WChunkCols: params.linear2WChunkCols ?? 64, linear1OutputF16: params.linear1OutputF16 !== false, attentionTileKeys: params.attentionTileKeys, attentionQueryRows: params.attentionQueryRows ?? 16, textTokens: params.textTokens, imageWidth: params.imageWidth, }); return { verdict: "custom-transformer-single-blocks-loop-dynamic-i8-checkpoint-completed", checkpoint: {kind: "single_blocks_loop_dynamic_i8", baseUrl: runtimeState.baseUrl}, runtimeStatus: makeCheckpointStatus(runtimeState), result, }; } if (kind === "double_block_dynamic_i8") { if (typeof window.runCustomDoubleStreamBlockBench !== "function") { throw new Error("custom double-stream block harness is not loaded"); } const result = await window.runCustomDoubleStreamBlockBench({ fullManifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, blockIndex: Number(params.blockIndex ?? 0), imageTokens: Number(params.imageTokens ?? 256), textTokens: Number(params.textTokens ?? 512), imageWidth: params.imageWidth, timestep: params.timestep, warmupRuns: Number(params.warmupRuns ?? 0), timedRuns: Number(params.timedRuns ?? 1), readbackSample: Number(params.readbackSample ?? 16), linearTileCols: params.linearTileCols ?? 256, projTileCols: params.projTileCols ?? 256, wChunkCols: params.wChunkCols ?? 64, attentionTileKeys: params.attentionTileKeys, attentionQueryRows: params.attentionQueryRows ?? 16, }); return { verdict: "custom-transformer-double-block-dynamic-i8-checkpoint-completed", checkpoint: {kind: "double_block_dynamic_i8", baseUrl: runtimeState.baseUrl}, runtimeStatus: makeCheckpointStatus(runtimeState), result, }; } if (kind === "double_blocks_loop_dynamic_i8") { if (typeof window.runCustomDoubleStreamBlocksLoopBench !== "function") { throw new Error("custom double-stream blocks loop harness is not loaded"); } const result = await window.runCustomDoubleStreamBlocksLoopBench({ fullManifest: runtimeState.manifest, bundleBaseUrl: runtimeState.baseUrl, blockIndex: Number(params.blockIndex ?? 0), blockCount: Number(params.blockCount ?? 5), imageTokens: Number(params.imageTokens ?? 256), textTokens: Number(params.textTokens ?? 512), imageWidth: params.imageWidth, timestep: params.timestep, warmupRuns: Number(params.warmupRuns ?? 0), timedRuns: Number(params.timedRuns ?? 1), readbackSample: Number(params.readbackSample ?? 16), linearTileCols: params.linearTileCols ?? 256, projTileCols: params.projTileCols ?? 256, wChunkCols: params.wChunkCols ?? 64, attentionTileKeys: params.attentionTileKeys, attentionQueryRows: params.attentionQueryRows ?? 16, }); return { verdict: "custom-transformer-double-blocks-loop-dynamic-i8-checkpoint-completed", checkpoint: {kind: "double_blocks_loop_dynamic_i8", baseUrl: runtimeState.baseUrl}, runtimeStatus: makeCheckpointStatus(runtimeState), result, }; } throw new Error(`unknown checkpoint kind: ${kind}`); } finally { if (releaseDeviceAfter && typeof window.resetCustomLowbitWebGpuDevice === "function") { window.resetCustomLowbitWebGpuDevice(); } } }, }; } window.createCustomFluxTransformerRuntime = createCustomFluxTransformerRuntime; }());