@effect-uai/google 0.16.0 → 0.18.0
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 +3 -3
- package/dist/Gemini.d.mts +1 -1
- package/dist/Gemini.mjs +1 -1
- package/dist/Gemini.mjs.map +1 -1
- package/dist/GeminiEmbedding.d.mts +1 -1
- package/dist/GeminiEmbedding.d.mts.map +1 -1
- package/dist/GeminiEmbedding.mjs +4 -3
- package/dist/GeminiEmbedding.mjs.map +1 -1
- package/dist/GeminiImageGenerator.d.mts +1 -1
- package/dist/GeminiImageGenerator.d.mts.map +1 -1
- package/dist/GeminiImageGenerator.mjs +4 -3
- package/dist/GeminiImageGenerator.mjs.map +1 -1
- package/dist/GeminiLiveSession.d.mts +1 -1
- package/dist/GeminiSynthesizer.d.mts +1 -1
- package/dist/GeminiSynthesizer.mjs +1 -1
- package/dist/GeminiSynthesizer.mjs.map +1 -1
- package/dist/GeminiSynthesizer.test.mjs +1 -1
- package/dist/GoogleDeepResearch.d.mts +1 -1
- package/dist/GoogleDeepResearch.mjs +1 -1
- package/dist/GoogleDeepResearch.mjs.map +1 -1
- package/dist/GoogleDeepResearch.test.mjs +1 -1
- package/dist/LyriaGenerator.d.mts +1 -1
- package/dist/LyriaGenerator.d.mts.map +1 -1
- package/dist/LyriaGenerator.mjs +4 -3
- package/dist/LyriaGenerator.mjs.map +1 -1
- package/dist/LyriaGenerator.test.mjs +4 -142
- package/dist/LyriaGenerator.test.mjs.map +1 -1
- package/dist/codec.d.mts.map +1 -1
- package/dist/codec.mjs +3 -2
- package/dist/codec.mjs.map +1 -1
- package/dist/dist-DHer1cql.mjs +1533 -0
- package/dist/dist-DHer1cql.mjs.map +1 -0
- package/dist/geminiSpeechCodec.d.mts.map +1 -1
- package/dist/geminiSpeechCodec.mjs +4 -3
- package/dist/geminiSpeechCodec.mjs.map +1 -1
- package/dist/geminiSpeechCodec.test.mjs +5 -4
- package/dist/geminiSpeechCodec.test.mjs.map +1 -1
- package/dist/geminiTools.test.mjs +1 -1
- package/dist/{test.DNmyFkvJ-BPz3G1HS.mjs → index.C4tKZ0yW-DjxCdpW_.mjs} +9115 -5993
- package/dist/index.C4tKZ0yW-DjxCdpW_.mjs.map +1 -0
- package/dist/{realtimeSession-7HSIjWh4.d.mts → realtimeSession-BlBgLDdp.d.mts} +2 -2
- package/dist/{realtimeSession-7HSIjWh4.d.mts.map → realtimeSession-BlBgLDdp.d.mts.map} +1 -1
- package/dist/realtimeSession.d.mts +1 -1
- package/dist/realtimeSession.mjs +6 -5
- package/dist/realtimeSession.mjs.map +1 -1
- package/dist/realtimeSession.test.mjs +69 -78
- package/dist/realtimeSession.test.mjs.map +1 -1
- package/package.json +4 -4
- package/src/Gemini.ts +1 -1
- package/src/GeminiEmbedding.ts +4 -3
- package/src/GeminiImageGenerator.ts +4 -3
- package/src/GeminiSynthesizer.ts +1 -1
- package/src/GoogleDeepResearch.ts +1 -1
- package/src/LyriaGenerator.test.ts +1 -1
- package/src/LyriaGenerator.ts +4 -14
- package/src/codec.ts +3 -2
- package/src/geminiSpeechCodec.test.ts +4 -3
- package/src/geminiSpeechCodec.ts +4 -3
- package/src/realtimeSession.test.ts +4 -3
- package/src/realtimeSession.ts +5 -5
- package/dist/magic-string.es-CUAnjKYC.mjs +0 -1014
- package/dist/magic-string.es-CUAnjKYC.mjs.map +0 -1
- package/dist/test.DNmyFkvJ-BPz3G1HS.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LyriaGenerator.test.mjs","names":["exports","LyriaGenerator.layer","LyriaGenerator.containerToMimeType","LyriaGenerator.realizedFormat","MusicGenerator"],"sources":["../../../../node_modules/.pnpm/vite@7.3.2_@types+node@26.2.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.23.12_yaml@2.9.0/node_modules/vite/dist/node/module-runner.js","../../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/branding.js","../../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/messages.js","../../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/overloads.js","../../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/utils.js","../../../../node_modules/.pnpm/expect-type@1.3.0/node_modules/expect-type/dist/index.js","../../../../node_modules/.pnpm/vitest@4.1.11_@types+node@26.2.0_vite@7.3.2_@types+node@26.2.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.23.12_yaml@2.9.0_/node_modules/vitest/dist/index.js","../src/LyriaGenerator.test.ts"],"sourcesContent":["let SOURCEMAPPING_URL = \"sourceMa\";\nSOURCEMAPPING_URL += \"ppingURL\";\nconst isWindows = typeof process < \"u\" && process.platform === \"win32\";\nfunction unwrapId(id) {\n\treturn id.startsWith(\"/@id/\") ? id.slice(5).replace(\"__x00__\", \"\\0\") : id;\n}\nconst windowsSlashRE = /\\\\/g;\nfunction slash(p) {\n\treturn p.replace(windowsSlashRE, \"/\");\n}\nconst postfixRE = /[?#].*$/;\nfunction cleanUrl(url) {\n\treturn url.replace(postfixRE, \"\");\n}\nfunction isPrimitive(value) {\n\treturn !value || typeof value != \"object\" && typeof value != \"function\";\n}\nconst AsyncFunction = async function() {}.constructor;\nlet asyncFunctionDeclarationPaddingLineCount;\nfunction getAsyncFunctionDeclarationPaddingLineCount() {\n\tif (asyncFunctionDeclarationPaddingLineCount === void 0) {\n\t\tlet body = \"/*code*/\", source = new AsyncFunction(\"a\", \"b\", body).toString();\n\t\tasyncFunctionDeclarationPaddingLineCount = source.slice(0, source.indexOf(body)).split(\"\\n\").length - 1;\n\t}\n\treturn asyncFunctionDeclarationPaddingLineCount;\n}\nfunction promiseWithResolvers() {\n\tlet resolve$1, reject;\n\treturn {\n\t\tpromise: new Promise((_resolve, _reject) => {\n\t\t\tresolve$1 = _resolve, reject = _reject;\n\t\t}),\n\t\tresolve: resolve$1,\n\t\treject\n\t};\n}\nconst _DRIVE_LETTER_START_RE = /^[A-Za-z]:\\//;\nfunction normalizeWindowsPath(input = \"\") {\n\treturn input && input.replace(/\\\\/g, \"/\").replace(_DRIVE_LETTER_START_RE, (r) => r.toUpperCase());\n}\nconst _IS_ABSOLUTE_RE = /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Za-z]:[/\\\\]/, _DRIVE_LETTER_RE = /^[A-Za-z]:$/;\nfunction cwd() {\n\treturn typeof process < \"u\" && typeof process.cwd == \"function\" ? process.cwd().replace(/\\\\/g, \"/\") : \"/\";\n}\nconst resolve = function(...arguments_) {\n\targuments_ = arguments_.map((argument) => normalizeWindowsPath(argument));\n\tlet resolvedPath = \"\", resolvedAbsolute = !1;\n\tfor (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {\n\t\tlet path = index >= 0 ? arguments_[index] : cwd();\n\t\t!path || path.length === 0 || (resolvedPath = `${path}/${resolvedPath}`, resolvedAbsolute = isAbsolute(path));\n\t}\n\treturn resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute), resolvedAbsolute && !isAbsolute(resolvedPath) ? `/${resolvedPath}` : resolvedPath.length > 0 ? resolvedPath : \".\";\n};\nfunction normalizeString(path, allowAboveRoot) {\n\tlet res = \"\", lastSegmentLength = 0, lastSlash = -1, dots = 0, char = null;\n\tfor (let index = 0; index <= path.length; ++index) {\n\t\tif (index < path.length) char = path[index];\n\t\telse if (char === \"/\") break;\n\t\telse char = \"/\";\n\t\tif (char === \"/\") {\n\t\t\tif (!(lastSlash === index - 1 || dots === 1)) if (dots === 2) {\n\t\t\t\tif (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== \".\" || res[res.length - 2] !== \".\") {\n\t\t\t\t\tif (res.length > 2) {\n\t\t\t\t\t\tlet lastSlashIndex = res.lastIndexOf(\"/\");\n\t\t\t\t\t\tlastSlashIndex === -1 ? (res = \"\", lastSegmentLength = 0) : (res = res.slice(0, lastSlashIndex), lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\")), lastSlash = index, dots = 0;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else if (res.length > 0) {\n\t\t\t\t\t\tres = \"\", lastSegmentLength = 0, lastSlash = index, dots = 0;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tallowAboveRoot && (res += res.length > 0 ? \"/..\" : \"..\", lastSegmentLength = 2);\n\t\t\t} else res.length > 0 ? res += `/${path.slice(lastSlash + 1, index)}` : res = path.slice(lastSlash + 1, index), lastSegmentLength = index - lastSlash - 1;\n\t\t\tlastSlash = index, dots = 0;\n\t\t} else char === \".\" && dots !== -1 ? ++dots : dots = -1;\n\t}\n\treturn res;\n}\nconst isAbsolute = function(p) {\n\treturn _IS_ABSOLUTE_RE.test(p);\n}, dirname = function(p) {\n\tlet segments = normalizeWindowsPath(p).replace(/\\/$/, \"\").split(\"/\").slice(0, -1);\n\treturn segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0]) && (segments[0] += \"/\"), segments.join(\"/\") || (isAbsolute(p) ? \"/\" : \".\");\n}, decodeBase64 = typeof atob < \"u\" ? atob : (str) => Buffer.from(str, \"base64\").toString(\"utf-8\"), percentRegEx = /%/g, backslashRegEx = /\\\\/g, newlineRegEx = /\\n/g, carriageReturnRegEx = /\\r/g, tabRegEx = /\\t/g, questionRegex = /\\?/g, hashRegex = /#/g;\nfunction encodePathChars(filepath) {\n\treturn filepath.indexOf(\"%\") !== -1 && (filepath = filepath.replace(percentRegEx, \"%25\")), !isWindows && filepath.indexOf(\"\\\\\") !== -1 && (filepath = filepath.replace(backslashRegEx, \"%5C\")), filepath.indexOf(\"\\n\") !== -1 && (filepath = filepath.replace(newlineRegEx, \"%0A\")), filepath.indexOf(\"\\r\") !== -1 && (filepath = filepath.replace(carriageReturnRegEx, \"%0D\")), filepath.indexOf(\"\t\") !== -1 && (filepath = filepath.replace(tabRegEx, \"%09\")), filepath;\n}\nconst posixDirname = dirname, posixResolve = resolve;\nfunction posixPathToFileHref(posixPath) {\n\tlet resolved = posixResolve(posixPath), filePathLast = posixPath.charCodeAt(posixPath.length - 1);\n\treturn (filePathLast === 47 || isWindows && filePathLast === 92) && resolved[resolved.length - 1] !== \"/\" && (resolved += \"/\"), resolved = encodePathChars(resolved), resolved.indexOf(\"?\") !== -1 && (resolved = resolved.replace(questionRegex, \"%3F\")), resolved.indexOf(\"#\") !== -1 && (resolved = resolved.replace(hashRegex, \"%23\")), new URL(`file://${resolved}`).href;\n}\nfunction toWindowsPath(path) {\n\treturn path.replace(/\\//g, \"\\\\\");\n}\nvar comma = 44, chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\", intToChar = new Uint8Array(64), charToInt = new Uint8Array(128);\nfor (let i = 0; i < chars.length; i++) {\n\tlet c = chars.charCodeAt(i);\n\tintToChar[i] = c, charToInt[c] = i;\n}\nfunction decodeInteger(reader, relative) {\n\tlet value = 0, shift = 0, integer = 0;\n\tdo\n\t\tinteger = charToInt[reader.next()], value |= (integer & 31) << shift, shift += 5;\n\twhile (integer & 32);\n\tlet shouldNegate = value & 1;\n\treturn value >>>= 1, shouldNegate && (value = -2147483648 | -value), relative + value;\n}\nfunction hasMoreVlq(reader, max) {\n\treturn reader.pos >= max ? !1 : reader.peek() !== comma;\n}\nvar StringReader = class {\n\tconstructor(buffer) {\n\t\tthis.pos = 0, this.buffer = buffer;\n\t}\n\tnext() {\n\t\treturn this.buffer.charCodeAt(this.pos++);\n\t}\n\tpeek() {\n\t\treturn this.buffer.charCodeAt(this.pos);\n\t}\n\tindexOf(char) {\n\t\tlet { buffer, pos } = this, idx = buffer.indexOf(char, pos);\n\t\treturn idx === -1 ? buffer.length : idx;\n\t}\n};\nfunction decode(mappings) {\n\tlet { length } = mappings, reader = new StringReader(mappings), decoded = [], genColumn = 0, sourcesIndex = 0, sourceLine = 0, sourceColumn = 0, namesIndex = 0;\n\tdo {\n\t\tlet semi = reader.indexOf(\";\"), line = [], sorted = !0, lastCol = 0;\n\t\tfor (genColumn = 0; reader.pos < semi;) {\n\t\t\tlet seg;\n\t\t\tgenColumn = decodeInteger(reader, genColumn), genColumn < lastCol && (sorted = !1), lastCol = genColumn, hasMoreVlq(reader, semi) ? (sourcesIndex = decodeInteger(reader, sourcesIndex), sourceLine = decodeInteger(reader, sourceLine), sourceColumn = decodeInteger(reader, sourceColumn), hasMoreVlq(reader, semi) ? (namesIndex = decodeInteger(reader, namesIndex), seg = [\n\t\t\t\tgenColumn,\n\t\t\t\tsourcesIndex,\n\t\t\t\tsourceLine,\n\t\t\t\tsourceColumn,\n\t\t\t\tnamesIndex\n\t\t\t]) : seg = [\n\t\t\t\tgenColumn,\n\t\t\t\tsourcesIndex,\n\t\t\t\tsourceLine,\n\t\t\t\tsourceColumn\n\t\t\t]) : seg = [genColumn], line.push(seg), reader.pos++;\n\t\t}\n\t\tsorted || sort(line), decoded.push(line), reader.pos = semi + 1;\n\t} while (reader.pos <= length);\n\treturn decoded;\n}\nfunction sort(line) {\n\tline.sort(sortComparator);\n}\nfunction sortComparator(a, b) {\n\treturn a[0] - b[0];\n}\nvar COLUMN = 0, SOURCES_INDEX = 1, SOURCE_LINE = 2, SOURCE_COLUMN = 3, NAMES_INDEX = 4, found = !1;\nfunction binarySearch(haystack, needle, low, high) {\n\tfor (; low <= high;) {\n\t\tlet mid = low + (high - low >> 1), cmp = haystack[mid][COLUMN] - needle;\n\t\tif (cmp === 0) return found = !0, mid;\n\t\tcmp < 0 ? low = mid + 1 : high = mid - 1;\n\t}\n\treturn found = !1, low - 1;\n}\nfunction upperBound(haystack, needle, index) {\n\tfor (let i = index + 1; i < haystack.length && haystack[i][COLUMN] === needle; index = i++);\n\treturn index;\n}\nfunction lowerBound(haystack, needle, index) {\n\tfor (let i = index - 1; i >= 0 && haystack[i][COLUMN] === needle; index = i--);\n\treturn index;\n}\nfunction memoizedBinarySearch(haystack, needle, state, key) {\n\tlet { lastKey, lastNeedle, lastIndex } = state, low = 0, high = haystack.length - 1;\n\tif (key === lastKey) {\n\t\tif (needle === lastNeedle) return found = lastIndex !== -1 && haystack[lastIndex][COLUMN] === needle, lastIndex;\n\t\tneedle >= lastNeedle ? low = lastIndex === -1 ? 0 : lastIndex : high = lastIndex;\n\t}\n\treturn state.lastKey = key, state.lastNeedle = needle, state.lastIndex = binarySearch(haystack, needle, low, high);\n}\nvar LINE_GTR_ZERO = \"`line` must be greater than 0 (lines start at line 1)\", COL_GTR_EQ_ZERO = \"`column` must be greater than or equal to 0 (columns start at column 0)\", LEAST_UPPER_BOUND = -1, GREATEST_LOWER_BOUND = 1;\nfunction cast(map) {\n\treturn map;\n}\nfunction decodedMappings(map) {\n\tvar _a;\n\treturn (_a = cast(map))._decoded || (_a._decoded = decode(cast(map)._encoded));\n}\nfunction originalPositionFor(map, needle) {\n\tlet { line, column, bias } = needle;\n\tif (line--, line < 0) throw Error(LINE_GTR_ZERO);\n\tif (column < 0) throw Error(COL_GTR_EQ_ZERO);\n\tlet decoded = decodedMappings(map);\n\tif (line >= decoded.length) return OMapping(null, null, null, null);\n\tlet segments = decoded[line], index = traceSegmentInternal(segments, cast(map)._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND);\n\tif (index === -1) return OMapping(null, null, null, null);\n\tlet segment = segments[index];\n\tif (segment.length === 1) return OMapping(null, null, null, null);\n\tlet { names, resolvedSources } = map;\n\treturn OMapping(resolvedSources[segment[SOURCES_INDEX]], segment[SOURCE_LINE] + 1, segment[SOURCE_COLUMN], segment.length === 5 ? names[segment[NAMES_INDEX]] : null);\n}\nfunction OMapping(source, line, column, name) {\n\treturn {\n\t\tsource,\n\t\tline,\n\t\tcolumn,\n\t\tname\n\t};\n}\nfunction traceSegmentInternal(segments, memo, line, column, bias) {\n\tlet index = memoizedBinarySearch(segments, column, memo, line);\n\treturn found ? index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index) : bias === LEAST_UPPER_BOUND && index++, index === -1 || index === segments.length ? -1 : index;\n}\nvar DecodedMap = class {\n\t_encoded;\n\t_decoded;\n\t_decodedMemo;\n\turl;\n\tfile;\n\tversion;\n\tnames = [];\n\tresolvedSources;\n\tconstructor(map, from) {\n\t\tthis.map = map;\n\t\tlet { mappings, names, sources } = map;\n\t\tthis.version = map.version, this.names = names || [], this._encoded = mappings || \"\", this._decodedMemo = memoizedState(), this.url = from, this.file = from;\n\t\tlet originDir = posixDirname(from);\n\t\tthis.resolvedSources = (sources || []).map((s) => posixResolve(originDir, s || \"\"));\n\t}\n};\nfunction memoizedState() {\n\treturn {\n\t\tlastKey: -1,\n\t\tlastNeedle: -1,\n\t\tlastIndex: -1\n\t};\n}\nfunction getOriginalPosition(map, needle) {\n\tlet result = originalPositionFor(map, needle);\n\treturn result.column == null ? null : result;\n}\nconst MODULE_RUNNER_SOURCEMAPPING_REGEXP = /* @__PURE__ */ RegExp(`//# ${SOURCEMAPPING_URL}=data:application/json;base64,(.+)`);\nvar EvaluatedModuleNode = class {\n\timporters = /* @__PURE__ */ new Set();\n\timports = /* @__PURE__ */ new Set();\n\tevaluated = !1;\n\tmeta;\n\tpromise;\n\texports;\n\tfile;\n\tmap;\n\tconstructor(id, url) {\n\t\tthis.id = id, this.url = url, this.file = cleanUrl(id);\n\t}\n}, EvaluatedModules = class {\n\tidToModuleMap = /* @__PURE__ */ new Map();\n\tfileToModulesMap = /* @__PURE__ */ new Map();\n\turlToIdModuleMap = /* @__PURE__ */ new Map();\n\tgetModuleById(id) {\n\t\treturn this.idToModuleMap.get(id);\n\t}\n\tgetModulesByFile(file) {\n\t\treturn this.fileToModulesMap.get(file);\n\t}\n\tgetModuleByUrl(url) {\n\t\treturn this.urlToIdModuleMap.get(unwrapId(url));\n\t}\n\tensureModule(id, url) {\n\t\tif (id = normalizeModuleId(id), this.idToModuleMap.has(id)) {\n\t\t\tlet moduleNode$1 = this.idToModuleMap.get(id);\n\t\t\treturn this.urlToIdModuleMap.set(url, moduleNode$1), moduleNode$1;\n\t\t}\n\t\tlet moduleNode = new EvaluatedModuleNode(id, url);\n\t\tthis.idToModuleMap.set(id, moduleNode), this.urlToIdModuleMap.set(url, moduleNode);\n\t\tlet fileModules = this.fileToModulesMap.get(moduleNode.file) || /* @__PURE__ */ new Set();\n\t\treturn fileModules.add(moduleNode), this.fileToModulesMap.set(moduleNode.file, fileModules), moduleNode;\n\t}\n\tinvalidateModule(node) {\n\t\tnode.evaluated = !1, node.meta = void 0, node.map = void 0, node.promise = void 0, node.exports = void 0, node.imports.clear();\n\t}\n\tgetModuleSourceMapById(id) {\n\t\tlet mod = this.getModuleById(id);\n\t\tif (!mod) return null;\n\t\tif (mod.map) return mod.map;\n\t\tif (!mod.meta || !(\"code\" in mod.meta)) return null;\n\t\tlet pattern = `//# ${SOURCEMAPPING_URL}=data:application/json;base64,`, lastIndex = mod.meta.code.lastIndexOf(pattern);\n\t\tif (lastIndex === -1) return null;\n\t\tlet mapString = MODULE_RUNNER_SOURCEMAPPING_REGEXP.exec(mod.meta.code.slice(lastIndex))?.[1];\n\t\treturn mapString ? (mod.map = new DecodedMap(JSON.parse(decodeBase64(mapString)), mod.file), mod.map) : null;\n\t}\n\tclear() {\n\t\tthis.idToModuleMap.clear(), this.fileToModulesMap.clear(), this.urlToIdModuleMap.clear();\n\t}\n};\nconst prefixedBuiltins = new Set([\n\t\"node:sea\",\n\t\"node:sqlite\",\n\t\"node:test\",\n\t\"node:test/reporters\"\n]);\nfunction normalizeModuleId(file) {\n\treturn prefixedBuiltins.has(file) ? file : slash(file).replace(/^\\/@fs\\//, isWindows ? \"\" : \"/\").replace(/^node:/, \"\").replace(/^\\/+/, \"/\").replace(/^file:\\/+/, isWindows ? \"\" : \"/\");\n}\nvar HMRContext = class {\n\tnewListeners;\n\tconstructor(hmrClient, ownerPath) {\n\t\tthis.hmrClient = hmrClient, this.ownerPath = ownerPath, hmrClient.dataMap.has(ownerPath) || hmrClient.dataMap.set(ownerPath, {});\n\t\tlet mod = hmrClient.hotModulesMap.get(ownerPath);\n\t\tmod && (mod.callbacks = []);\n\t\tlet staleListeners = hmrClient.ctxToListenersMap.get(ownerPath);\n\t\tif (staleListeners) for (let [event, staleFns] of staleListeners) {\n\t\t\tlet listeners = hmrClient.customListenersMap.get(event);\n\t\t\tlisteners && hmrClient.customListenersMap.set(event, listeners.filter((l) => !staleFns.includes(l)));\n\t\t}\n\t\tthis.newListeners = /* @__PURE__ */ new Map(), hmrClient.ctxToListenersMap.set(ownerPath, this.newListeners);\n\t}\n\tget data() {\n\t\treturn this.hmrClient.dataMap.get(this.ownerPath);\n\t}\n\taccept(deps, callback) {\n\t\tif (typeof deps == \"function\" || !deps) this.acceptDeps([this.ownerPath], ([mod]) => deps?.(mod));\n\t\telse if (typeof deps == \"string\") this.acceptDeps([deps], ([mod]) => callback?.(mod));\n\t\telse if (Array.isArray(deps)) this.acceptDeps(deps, callback);\n\t\telse throw Error(\"invalid hot.accept() usage.\");\n\t}\n\tacceptExports(_, callback) {\n\t\tthis.acceptDeps([this.ownerPath], ([mod]) => callback?.(mod));\n\t}\n\tdispose(cb) {\n\t\tthis.hmrClient.disposeMap.set(this.ownerPath, cb);\n\t}\n\tprune(cb) {\n\t\tthis.hmrClient.pruneMap.set(this.ownerPath, cb);\n\t}\n\tdecline() {}\n\tinvalidate(message) {\n\t\tlet firstInvalidatedBy = this.hmrClient.currentFirstInvalidatedBy ?? this.ownerPath;\n\t\tthis.hmrClient.notifyListeners(\"vite:invalidate\", {\n\t\t\tpath: this.ownerPath,\n\t\t\tmessage,\n\t\t\tfirstInvalidatedBy\n\t\t}), this.send(\"vite:invalidate\", {\n\t\t\tpath: this.ownerPath,\n\t\t\tmessage,\n\t\t\tfirstInvalidatedBy\n\t\t}), this.hmrClient.logger.debug(`invalidate ${this.ownerPath}${message ? `: ${message}` : \"\"}`);\n\t}\n\ton(event, cb) {\n\t\tlet addToMap = (map) => {\n\t\t\tlet existing = map.get(event) || [];\n\t\t\texisting.push(cb), map.set(event, existing);\n\t\t};\n\t\taddToMap(this.hmrClient.customListenersMap), addToMap(this.newListeners);\n\t}\n\toff(event, cb) {\n\t\tlet removeFromMap = (map) => {\n\t\t\tlet existing = map.get(event);\n\t\t\tif (existing === void 0) return;\n\t\t\tlet pruned = existing.filter((l) => l !== cb);\n\t\t\tif (pruned.length === 0) {\n\t\t\t\tmap.delete(event);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tmap.set(event, pruned);\n\t\t};\n\t\tremoveFromMap(this.hmrClient.customListenersMap), removeFromMap(this.newListeners);\n\t}\n\tsend(event, data) {\n\t\tthis.hmrClient.send({\n\t\t\ttype: \"custom\",\n\t\t\tevent,\n\t\t\tdata\n\t\t});\n\t}\n\tacceptDeps(deps, callback = () => {}) {\n\t\tlet mod = this.hmrClient.hotModulesMap.get(this.ownerPath) || {\n\t\t\tid: this.ownerPath,\n\t\t\tcallbacks: []\n\t\t};\n\t\tmod.callbacks.push({\n\t\t\tdeps,\n\t\t\tfn: callback\n\t\t}), this.hmrClient.hotModulesMap.set(this.ownerPath, mod);\n\t}\n}, HMRClient = class {\n\thotModulesMap = /* @__PURE__ */ new Map();\n\tdisposeMap = /* @__PURE__ */ new Map();\n\tpruneMap = /* @__PURE__ */ new Map();\n\tdataMap = /* @__PURE__ */ new Map();\n\tcustomListenersMap = /* @__PURE__ */ new Map();\n\tctxToListenersMap = /* @__PURE__ */ new Map();\n\tcurrentFirstInvalidatedBy;\n\tconstructor(logger, transport, importUpdatedModule) {\n\t\tthis.logger = logger, this.transport = transport, this.importUpdatedModule = importUpdatedModule;\n\t}\n\tasync notifyListeners(event, data) {\n\t\tlet cbs = this.customListenersMap.get(event);\n\t\tcbs && await Promise.allSettled(cbs.map((cb) => cb(data)));\n\t}\n\tsend(payload) {\n\t\tthis.transport.send(payload).catch((err) => {\n\t\t\tthis.logger.error(err);\n\t\t});\n\t}\n\tclear() {\n\t\tthis.hotModulesMap.clear(), this.disposeMap.clear(), this.pruneMap.clear(), this.dataMap.clear(), this.customListenersMap.clear(), this.ctxToListenersMap.clear();\n\t}\n\tasync prunePaths(paths) {\n\t\tawait Promise.all(paths.map((path) => {\n\t\t\tlet disposer = this.disposeMap.get(path);\n\t\t\tif (disposer) return disposer(this.dataMap.get(path));\n\t\t})), await Promise.all(paths.map((path) => {\n\t\t\tlet fn = this.pruneMap.get(path);\n\t\t\tif (fn) return fn(this.dataMap.get(path));\n\t\t}));\n\t}\n\twarnFailedUpdate(err, path) {\n\t\t(!(err instanceof Error) || !err.message.includes(\"fetch\")) && this.logger.error(err), this.logger.error(`Failed to reload ${path}. This could be due to syntax errors or importing non-existent modules. (see errors above)`);\n\t}\n\tupdateQueue = [];\n\tpendingUpdateQueue = !1;\n\tasync queueUpdate(payload) {\n\t\tif (this.updateQueue.push(this.fetchUpdate(payload)), !this.pendingUpdateQueue) {\n\t\t\tthis.pendingUpdateQueue = !0, await Promise.resolve(), this.pendingUpdateQueue = !1;\n\t\t\tlet loading = [...this.updateQueue];\n\t\t\tthis.updateQueue = [], (await Promise.all(loading)).forEach((fn) => fn && fn());\n\t\t}\n\t}\n\tasync fetchUpdate(update) {\n\t\tlet { path, acceptedPath, firstInvalidatedBy } = update, mod = this.hotModulesMap.get(path);\n\t\tif (!mod) return;\n\t\tlet fetchedModule, isSelfUpdate = path === acceptedPath, qualifiedCallbacks = mod.callbacks.filter(({ deps }) => deps.includes(acceptedPath));\n\t\tif (isSelfUpdate || qualifiedCallbacks.length > 0) {\n\t\t\tlet disposer = this.disposeMap.get(acceptedPath);\n\t\t\tdisposer && await disposer(this.dataMap.get(acceptedPath));\n\t\t\ttry {\n\t\t\t\tfetchedModule = await this.importUpdatedModule(update);\n\t\t\t} catch (e) {\n\t\t\t\tthis.warnFailedUpdate(e, acceptedPath);\n\t\t\t}\n\t\t}\n\t\treturn () => {\n\t\t\ttry {\n\t\t\t\tthis.currentFirstInvalidatedBy = firstInvalidatedBy;\n\t\t\t\tfor (let { deps, fn } of qualifiedCallbacks) fn(deps.map((dep) => dep === acceptedPath ? fetchedModule : void 0));\n\t\t\t\tlet loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;\n\t\t\t\tthis.logger.debug(`hot updated: ${loggedPath}`);\n\t\t\t} finally {\n\t\t\t\tthis.currentFirstInvalidatedBy = void 0;\n\t\t\t}\n\t\t};\n\t}\n};\nfunction analyzeImportedModDifference(mod, rawId, moduleType, metadata) {\n\tif (!metadata?.isDynamicImport && metadata?.importedNames?.length) {\n\t\tlet missingBindings = metadata.importedNames.filter((s) => !(s in mod));\n\t\tif (missingBindings.length) {\n\t\t\tlet lastBinding = missingBindings[missingBindings.length - 1];\n\t\t\tthrow moduleType === \"module\" ? SyntaxError(`[vite] The requested module '${rawId}' does not provide an export named '${lastBinding}'`) : SyntaxError(`\\\n[vite] Named export '${lastBinding}' not found. The requested module '${rawId}' is a CommonJS module, which may not support all module.exports as named exports.\nCommonJS modules can always be imported via the default export, for example using:\n\nimport pkg from '${rawId}';\nconst {${missingBindings.join(\", \")}} = pkg;\n`);\n\t\t}\n\t}\n}\nlet nanoid = (size = 21) => {\n\tlet id = \"\", i = size | 0;\n\tfor (; i--;) id += \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\"[Math.random() * 64 | 0];\n\treturn id;\n};\nfunction reviveInvokeError(e) {\n\tlet error = Error(e.message || \"Unknown invoke error\");\n\treturn Object.assign(error, e, { runnerError: /* @__PURE__ */ Error(\"RunnerError\") }), error;\n}\nconst createInvokeableTransport = (transport) => {\n\tif (transport.invoke) return {\n\t\t...transport,\n\t\tasync invoke(name, data) {\n\t\t\tlet result = await transport.invoke({\n\t\t\t\ttype: \"custom\",\n\t\t\t\tevent: \"vite:invoke\",\n\t\t\t\tdata: {\n\t\t\t\t\tid: \"send\",\n\t\t\t\t\tname,\n\t\t\t\t\tdata\n\t\t\t\t}\n\t\t\t});\n\t\t\tif (\"error\" in result) throw reviveInvokeError(result.error);\n\t\t\treturn result.result;\n\t\t}\n\t};\n\tif (!transport.send || !transport.connect) throw Error(\"transport must implement send and connect when invoke is not implemented\");\n\tlet rpcPromises = /* @__PURE__ */ new Map();\n\treturn {\n\t\t...transport,\n\t\tconnect({ onMessage, onDisconnection }) {\n\t\t\treturn transport.connect({\n\t\t\t\tonMessage(payload) {\n\t\t\t\t\tif (payload.type === \"custom\" && payload.event === \"vite:invoke\") {\n\t\t\t\t\t\tlet data = payload.data;\n\t\t\t\t\t\tif (data.id.startsWith(\"response:\")) {\n\t\t\t\t\t\t\tlet invokeId = data.id.slice(9), promise = rpcPromises.get(invokeId);\n\t\t\t\t\t\t\tif (!promise) return;\n\t\t\t\t\t\t\tpromise.timeoutId && clearTimeout(promise.timeoutId), rpcPromises.delete(invokeId);\n\t\t\t\t\t\t\tlet { error, result } = data.data;\n\t\t\t\t\t\t\terror ? promise.reject(error) : promise.resolve(result);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tonMessage(payload);\n\t\t\t\t},\n\t\t\t\tonDisconnection\n\t\t\t});\n\t\t},\n\t\tdisconnect() {\n\t\t\treturn rpcPromises.forEach((promise) => {\n\t\t\t\tpromise.reject(/* @__PURE__ */ Error(`transport was disconnected, cannot call ${JSON.stringify(promise.name)}`));\n\t\t\t}), rpcPromises.clear(), transport.disconnect?.();\n\t\t},\n\t\tsend(data) {\n\t\t\treturn transport.send(data);\n\t\t},\n\t\tasync invoke(name, data) {\n\t\t\tlet promiseId = nanoid(), wrappedData = {\n\t\t\t\ttype: \"custom\",\n\t\t\t\tevent: \"vite:invoke\",\n\t\t\t\tdata: {\n\t\t\t\t\tname,\n\t\t\t\t\tid: `send:${promiseId}`,\n\t\t\t\t\tdata\n\t\t\t\t}\n\t\t\t}, sendPromise = transport.send(wrappedData), { promise, resolve: resolve$1, reject } = promiseWithResolvers(), timeout = transport.timeout ?? 6e4, timeoutId;\n\t\t\ttimeout > 0 && (timeoutId = setTimeout(() => {\n\t\t\t\trpcPromises.delete(promiseId), reject(/* @__PURE__ */ Error(`transport invoke timed out after ${timeout}ms (data: ${JSON.stringify(wrappedData)})`));\n\t\t\t}, timeout), timeoutId?.unref?.()), rpcPromises.set(promiseId, {\n\t\t\t\tresolve: resolve$1,\n\t\t\t\treject,\n\t\t\t\tname,\n\t\t\t\ttimeoutId\n\t\t\t}), sendPromise && sendPromise.catch((err) => {\n\t\t\t\tclearTimeout(timeoutId), rpcPromises.delete(promiseId), reject(err);\n\t\t\t});\n\t\t\ttry {\n\t\t\t\treturn await promise;\n\t\t\t} catch (err) {\n\t\t\t\tthrow reviveInvokeError(err);\n\t\t\t}\n\t\t}\n\t};\n}, normalizeModuleRunnerTransport = (transport) => {\n\tlet invokeableTransport = createInvokeableTransport(transport), isConnected = !invokeableTransport.connect, connectingPromise;\n\treturn {\n\t\t...transport,\n\t\t...invokeableTransport.connect ? { async connect(onMessage) {\n\t\t\tif (isConnected) return;\n\t\t\tif (connectingPromise) {\n\t\t\t\tawait connectingPromise;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet maybePromise = invokeableTransport.connect({\n\t\t\t\tonMessage: onMessage ?? (() => {}),\n\t\t\t\tonDisconnection() {\n\t\t\t\t\tisConnected = !1;\n\t\t\t\t}\n\t\t\t});\n\t\t\tmaybePromise && (connectingPromise = maybePromise, await connectingPromise, connectingPromise = void 0), isConnected = !0;\n\t\t} } : {},\n\t\t...invokeableTransport.disconnect ? { async disconnect() {\n\t\t\tisConnected && (connectingPromise && await connectingPromise, isConnected = !1, await invokeableTransport.disconnect());\n\t\t} } : {},\n\t\tasync send(data) {\n\t\t\tif (invokeableTransport.send) {\n\t\t\t\tif (!isConnected) if (connectingPromise) await connectingPromise;\n\t\t\t\telse throw Error(\"send was called before connect\");\n\t\t\t\tawait invokeableTransport.send(data);\n\t\t\t}\n\t\t},\n\t\tasync invoke(name, data) {\n\t\t\tif (!isConnected) if (connectingPromise) await connectingPromise;\n\t\t\telse throw Error(\"invoke was called before connect\");\n\t\t\treturn invokeableTransport.invoke(name, data);\n\t\t}\n\t};\n}, createWebSocketModuleRunnerTransport = (options) => {\n\tlet pingInterval = options.pingInterval ?? 3e4, ws, pingIntervalId;\n\treturn {\n\t\tasync connect({ onMessage, onDisconnection }) {\n\t\t\tlet socket = options.createConnection();\n\t\t\tsocket.addEventListener(\"message\", async ({ data }) => {\n\t\t\t\tonMessage(JSON.parse(data));\n\t\t\t});\n\t\t\tlet isOpened = socket.readyState === socket.OPEN;\n\t\t\tisOpened || await new Promise((resolve$1, reject) => {\n\t\t\t\tsocket.addEventListener(\"open\", () => {\n\t\t\t\t\tisOpened = !0, resolve$1();\n\t\t\t\t}, { once: !0 }), socket.addEventListener(\"close\", async () => {\n\t\t\t\t\tif (!isOpened) {\n\t\t\t\t\t\treject(/* @__PURE__ */ Error(\"WebSocket closed without opened.\"));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tonMessage({\n\t\t\t\t\t\ttype: \"custom\",\n\t\t\t\t\t\tevent: \"vite:ws:disconnect\",\n\t\t\t\t\t\tdata: { webSocket: socket }\n\t\t\t\t\t}), onDisconnection();\n\t\t\t\t});\n\t\t\t}), onMessage({\n\t\t\t\ttype: \"custom\",\n\t\t\t\tevent: \"vite:ws:connect\",\n\t\t\t\tdata: { webSocket: socket }\n\t\t\t}), ws = socket, pingIntervalId = setInterval(() => {\n\t\t\t\tsocket.readyState === socket.OPEN && socket.send(JSON.stringify({ type: \"ping\" }));\n\t\t\t}, pingInterval);\n\t\t},\n\t\tdisconnect() {\n\t\t\tclearInterval(pingIntervalId), ws?.close();\n\t\t},\n\t\tsend(data) {\n\t\t\tws.send(JSON.stringify(data));\n\t\t}\n\t};\n};\nfunction createIsBuiltin(builtins) {\n\tlet plainBuiltinsSet = new Set(builtins.filter((builtin) => typeof builtin == \"string\")), regexBuiltins = builtins.filter((builtin) => typeof builtin != \"string\");\n\treturn (id) => plainBuiltinsSet.has(id) || regexBuiltins.some((regexp) => regexp.test(id));\n}\nconst ssrModuleExportsKey = \"__vite_ssr_exports__\", ssrImportKey = \"__vite_ssr_import__\", ssrDynamicImportKey = \"__vite_ssr_dynamic_import__\", ssrExportAllKey = \"__vite_ssr_exportAll__\", ssrExportNameKey = \"__vite_ssr_exportName__\", ssrImportMetaKey = \"__vite_ssr_import_meta__\", noop = () => {}, silentConsole = {\n\tdebug: noop,\n\terror: noop\n}, hmrLogger = {\n\tdebug: (...msg) => console.log(\"[vite]\", ...msg),\n\terror: (error) => console.log(\"[vite]\", error)\n};\nfunction createHMRHandler(handler) {\n\tlet queue = new Queue();\n\treturn (payload) => queue.enqueue(() => handler(payload));\n}\nvar Queue = class {\n\tqueue = [];\n\tpending = !1;\n\tenqueue(promise) {\n\t\treturn new Promise((resolve$1, reject) => {\n\t\t\tthis.queue.push({\n\t\t\t\tpromise,\n\t\t\t\tresolve: resolve$1,\n\t\t\t\treject\n\t\t\t}), this.dequeue();\n\t\t});\n\t}\n\tdequeue() {\n\t\tif (this.pending) return !1;\n\t\tlet item = this.queue.shift();\n\t\treturn item ? (this.pending = !0, item.promise().then(item.resolve).catch(item.reject).finally(() => {\n\t\t\tthis.pending = !1, this.dequeue();\n\t\t}), !0) : !1;\n\t}\n};\nfunction createHMRHandlerForRunner(runner) {\n\treturn createHMRHandler(async (payload) => {\n\t\tlet hmrClient = runner.hmrClient;\n\t\tif (!(!hmrClient || runner.isClosed())) switch (payload.type) {\n\t\t\tcase \"connected\":\n\t\t\t\thmrClient.logger.debug(\"connected.\");\n\t\t\t\tbreak;\n\t\t\tcase \"update\":\n\t\t\t\tawait hmrClient.notifyListeners(\"vite:beforeUpdate\", payload), await Promise.all(payload.updates.map(async (update) => {\n\t\t\t\t\tif (update.type === \"js-update\") return update.acceptedPath = unwrapId(update.acceptedPath), update.path = unwrapId(update.path), hmrClient.queueUpdate(update);\n\t\t\t\t\thmrClient.logger.error(\"css hmr is not supported in runner mode.\");\n\t\t\t\t})), await hmrClient.notifyListeners(\"vite:afterUpdate\", payload);\n\t\t\t\tbreak;\n\t\t\tcase \"custom\":\n\t\t\t\tawait hmrClient.notifyListeners(payload.event, payload.data);\n\t\t\t\tbreak;\n\t\t\tcase \"full-reload\": {\n\t\t\t\tlet { triggeredBy } = payload, clearEntrypointUrls = triggeredBy ? getModulesEntrypoints(runner, getModulesByFile(runner, slash(triggeredBy))) : findAllEntrypoints(runner);\n\t\t\t\tif (!clearEntrypointUrls.size) break;\n\t\t\t\thmrClient.logger.debug(\"program reload\"), await hmrClient.notifyListeners(\"vite:beforeFullReload\", payload), runner.evaluatedModules.clear();\n\t\t\t\tfor (let url of clearEntrypointUrls) try {\n\t\t\t\t\tawait runner.import(url);\n\t\t\t\t} catch (err) {\n\t\t\t\t\terr.code !== \"ERR_OUTDATED_OPTIMIZED_DEP\" && hmrClient.logger.error(`An error happened during full reload\\n${err.message}\\n${err.stack}`);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"prune\":\n\t\t\t\tawait hmrClient.notifyListeners(\"vite:beforePrune\", payload), await hmrClient.prunePaths(payload.paths);\n\t\t\t\tbreak;\n\t\t\tcase \"error\": {\n\t\t\t\tawait hmrClient.notifyListeners(\"vite:error\", payload);\n\t\t\t\tlet err = payload.err;\n\t\t\t\thmrClient.logger.error(`Internal Server Error\\n${err.message}\\n${err.stack}`);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"ping\": break;\n\t\t\tdefault: return payload;\n\t\t}\n\t});\n}\nfunction getModulesByFile(runner, file) {\n\tlet nodes = runner.evaluatedModules.getModulesByFile(file);\n\treturn nodes ? [...nodes].map((node) => node.id) : [];\n}\nfunction getModulesEntrypoints(runner, modules, visited = /* @__PURE__ */ new Set(), entrypoints = /* @__PURE__ */ new Set()) {\n\tfor (let moduleId of modules) {\n\t\tif (visited.has(moduleId)) continue;\n\t\tvisited.add(moduleId);\n\t\tlet module = runner.evaluatedModules.getModuleById(moduleId);\n\t\tif (module) {\n\t\t\tif (!module.importers.size) {\n\t\t\t\tentrypoints.add(module.url);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tfor (let importer of module.importers) getModulesEntrypoints(runner, [importer], visited, entrypoints);\n\t\t}\n\t}\n\treturn entrypoints;\n}\nfunction findAllEntrypoints(runner, entrypoints = /* @__PURE__ */ new Set()) {\n\tfor (let mod of runner.evaluatedModules.idToModuleMap.values()) mod.importers.size || entrypoints.add(mod.url);\n\treturn entrypoints;\n}\nconst sourceMapCache = {}, fileContentsCache = {}, evaluatedModulesCache = /* @__PURE__ */ new Set(), retrieveFileHandlers = /* @__PURE__ */ new Set(), retrieveSourceMapHandlers = /* @__PURE__ */ new Set(), createExecHandlers = (handlers) => ((...args) => {\n\tfor (let handler of handlers) {\n\t\tlet result = handler(...args);\n\t\tif (result) return result;\n\t}\n\treturn null;\n}), retrieveFileFromHandlers = createExecHandlers(retrieveFileHandlers), retrieveSourceMapFromHandlers = createExecHandlers(retrieveSourceMapHandlers);\nlet overridden = !1;\nconst originalPrepare = Error.prepareStackTrace;\nfunction resetInterceptor(runner, options) {\n\tevaluatedModulesCache.delete(runner.evaluatedModules), options.retrieveFile && retrieveFileHandlers.delete(options.retrieveFile), options.retrieveSourceMap && retrieveSourceMapHandlers.delete(options.retrieveSourceMap), evaluatedModulesCache.size === 0 && (Error.prepareStackTrace = originalPrepare, overridden = !1);\n}\nfunction interceptStackTrace(runner, options = {}) {\n\treturn overridden ||= (Error.prepareStackTrace = prepareStackTrace, !0), evaluatedModulesCache.add(runner.evaluatedModules), options.retrieveFile && retrieveFileHandlers.add(options.retrieveFile), options.retrieveSourceMap && retrieveSourceMapHandlers.add(options.retrieveSourceMap), () => resetInterceptor(runner, options);\n}\nfunction supportRelativeURL(file, url) {\n\tif (!file) return url;\n\tlet dir = posixDirname(slash(file)), match = /^\\w+:\\/\\/[^/]*/.exec(dir), protocol = match ? match[0] : \"\", startPath = dir.slice(protocol.length);\n\treturn protocol && /^\\/\\w:/.test(startPath) ? (protocol += \"/\", protocol + slash(posixResolve(startPath, url))) : protocol + posixResolve(startPath, url);\n}\nfunction getRunnerSourceMap(position) {\n\tfor (let moduleGraph of evaluatedModulesCache) {\n\t\tlet sourceMap = moduleGraph.getModuleSourceMapById(position.source);\n\t\tif (sourceMap) return {\n\t\t\turl: position.source,\n\t\t\tmap: sourceMap,\n\t\t\tvite: !0\n\t\t};\n\t}\n\treturn null;\n}\nfunction retrieveFile(path) {\n\tif (path in fileContentsCache) return fileContentsCache[path];\n\tlet content = retrieveFileFromHandlers(path);\n\treturn typeof content == \"string\" ? (fileContentsCache[path] = content, content) : null;\n}\nfunction retrieveSourceMapURL(source) {\n\tlet fileData = retrieveFile(source);\n\tif (!fileData) return null;\n\tlet re = /\\/\\/[@#]\\s*sourceMappingURL=([^\\s'\"]+)\\s*$|\\/\\*[@#]\\s*sourceMappingURL=[^\\s*'\"]+\\s*\\*\\/\\s*$/gm, lastMatch, match;\n\tfor (; match = re.exec(fileData);) lastMatch = match;\n\treturn lastMatch ? lastMatch[1] : null;\n}\nconst reSourceMap = /^data:application\\/json[^,]+base64,/;\nfunction retrieveSourceMap(source) {\n\tlet urlAndMap = retrieveSourceMapFromHandlers(source);\n\tif (urlAndMap) return urlAndMap;\n\tlet sourceMappingURL = retrieveSourceMapURL(source);\n\tif (!sourceMappingURL) return null;\n\tlet sourceMapData;\n\tif (reSourceMap.test(sourceMappingURL)) {\n\t\tlet rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(\",\") + 1);\n\t\tsourceMapData = Buffer.from(rawData, \"base64\").toString(), sourceMappingURL = source;\n\t} else sourceMappingURL = supportRelativeURL(source, sourceMappingURL), sourceMapData = retrieveFile(sourceMappingURL);\n\treturn sourceMapData ? {\n\t\turl: sourceMappingURL,\n\t\tmap: sourceMapData\n\t} : null;\n}\nfunction mapSourcePosition(position) {\n\tif (!position.source) return position;\n\tlet sourceMap = getRunnerSourceMap(position);\n\tif (sourceMap ||= sourceMapCache[position.source], !sourceMap) {\n\t\tlet urlAndMap = retrieveSourceMap(position.source);\n\t\tif (urlAndMap && urlAndMap.map) {\n\t\t\tlet url = urlAndMap.url;\n\t\t\tsourceMap = sourceMapCache[position.source] = {\n\t\t\t\turl,\n\t\t\t\tmap: new DecodedMap(typeof urlAndMap.map == \"string\" ? JSON.parse(urlAndMap.map) : urlAndMap.map, url)\n\t\t\t};\n\t\t\tlet contents = sourceMap.map?.map.sourcesContent;\n\t\t\tsourceMap.map && contents && sourceMap.map.resolvedSources.forEach((source, i) => {\n\t\t\t\tlet content = contents[i];\n\t\t\t\tif (content && source && url) {\n\t\t\t\t\tlet contentUrl = supportRelativeURL(url, source);\n\t\t\t\t\tfileContentsCache[contentUrl] = content;\n\t\t\t\t}\n\t\t\t});\n\t\t} else sourceMap = sourceMapCache[position.source] = {\n\t\t\turl: null,\n\t\t\tmap: null\n\t\t};\n\t}\n\tif (sourceMap.map && sourceMap.url) {\n\t\tlet originalPosition = getOriginalPosition(sourceMap.map, position);\n\t\tif (originalPosition && originalPosition.source != null) return originalPosition.source = supportRelativeURL(sourceMap.url, originalPosition.source), sourceMap.vite && (originalPosition._vite = !0), originalPosition;\n\t}\n\treturn position;\n}\nfunction mapEvalOrigin(origin) {\n\tlet match = /^eval at ([^(]+) \\((.+):(\\d+):(\\d+)\\)$/.exec(origin);\n\tif (match) {\n\t\tlet position = mapSourcePosition({\n\t\t\tname: null,\n\t\t\tsource: match[2],\n\t\t\tline: +match[3],\n\t\t\tcolumn: match[4] - 1\n\t\t});\n\t\treturn `eval at ${match[1]} (${position.source}:${position.line}:${position.column + 1})`;\n\t}\n\treturn match = /^eval at ([^(]+) \\((.+)\\)$/.exec(origin), match ? `eval at ${match[1]} (${mapEvalOrigin(match[2])})` : origin;\n}\nfunction CallSiteToString() {\n\tlet fileName, fileLocation = \"\";\n\tif (this.isNative()) fileLocation = \"native\";\n\telse {\n\t\tfileName = this.getScriptNameOrSourceURL(), !fileName && this.isEval() && (fileLocation = this.getEvalOrigin(), fileLocation += \", \"), fileName ? fileLocation += fileName : fileLocation += \"<anonymous>\";\n\t\tlet lineNumber = this.getLineNumber();\n\t\tif (lineNumber != null) {\n\t\t\tfileLocation += `:${lineNumber}`;\n\t\t\tlet columnNumber = this.getColumnNumber();\n\t\t\tcolumnNumber && (fileLocation += `:${columnNumber}`);\n\t\t}\n\t}\n\tlet line = \"\", functionName = this.getFunctionName(), addSuffix = !0, isConstructor = this.isConstructor();\n\tif (this.isToplevel() || isConstructor) isConstructor ? line += `new ${functionName || \"<anonymous>\"}` : functionName ? line += functionName : (line += fileLocation, addSuffix = !1);\n\telse {\n\t\tlet typeName = this.getTypeName();\n\t\ttypeName === \"[object Object]\" && (typeName = \"null\");\n\t\tlet methodName = this.getMethodName();\n\t\tfunctionName ? (typeName && functionName.indexOf(typeName) !== 0 && (line += `${typeName}.`), line += functionName, methodName && functionName.indexOf(`.${methodName}`) !== functionName.length - methodName.length - 1 && (line += ` [as ${methodName}]`)) : line += `${typeName}.${methodName || \"<anonymous>\"}`;\n\t}\n\treturn addSuffix && (line += ` (${fileLocation})`), line;\n}\nfunction cloneCallSite(frame) {\n\tlet object = {};\n\treturn Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach((name) => {\n\t\tlet key = name;\n\t\tobject[key] = /^(?:is|get)/.test(name) ? function() {\n\t\t\treturn frame[key].call(frame);\n\t\t} : frame[key];\n\t}), object.toString = CallSiteToString, object;\n}\nfunction wrapCallSite(frame, state) {\n\tif (state === void 0 && (state = {\n\t\tnextPosition: null,\n\t\tcurPosition: null\n\t}), frame.isNative()) return state.curPosition = null, frame;\n\tlet source = frame.getFileName() || frame.getScriptNameOrSourceURL();\n\tif (source) {\n\t\tlet line = frame.getLineNumber(), column = frame.getColumnNumber() - 1;\n\t\tline === 1 && column > 62 && !frame.isEval() && (column -= 62);\n\t\tlet position = mapSourcePosition({\n\t\t\tname: null,\n\t\t\tsource,\n\t\t\tline,\n\t\t\tcolumn\n\t\t});\n\t\tstate.curPosition = position, frame = cloneCallSite(frame);\n\t\tlet originalFunctionName = frame.getFunctionName;\n\t\treturn frame.getFunctionName = function() {\n\t\t\tlet name = (() => state.nextPosition == null ? originalFunctionName() : state.nextPosition.name || originalFunctionName())();\n\t\t\treturn name === \"eval\" && \"_vite\" in position ? null : name;\n\t\t}, frame.getFileName = function() {\n\t\t\treturn position.source ?? null;\n\t\t}, frame.getLineNumber = function() {\n\t\t\treturn position.line;\n\t\t}, frame.getColumnNumber = function() {\n\t\t\treturn position.column + 1;\n\t\t}, frame.getScriptNameOrSourceURL = function() {\n\t\t\treturn position.source;\n\t\t}, frame;\n\t}\n\tlet origin = frame.isEval() && frame.getEvalOrigin();\n\treturn origin ? (origin = mapEvalOrigin(origin), frame = cloneCallSite(frame), frame.getEvalOrigin = function() {\n\t\treturn origin || void 0;\n\t}, frame) : frame;\n}\nfunction prepareStackTrace(error, stack) {\n\tlet errorString = `${error.name || \"Error\"}: ${error.message || \"\"}`, state = {\n\t\tnextPosition: null,\n\t\tcurPosition: null\n\t}, processedStack = [];\n\tfor (let i = stack.length - 1; i >= 0; i--) processedStack.push(`\\n at ${wrapCallSite(stack[i], state)}`), state.nextPosition = state.curPosition;\n\treturn state.curPosition = state.nextPosition = null, errorString + processedStack.reverse().join(\"\");\n}\nfunction enableSourceMapSupport(runner) {\n\tif (runner.options.sourcemapInterceptor === \"node\") {\n\t\tif (typeof process > \"u\") throw TypeError(\"Cannot use \\\"sourcemapInterceptor: 'node'\\\" because global \\\"process\\\" variable is not available.\");\n\t\tif (typeof process.setSourceMapsEnabled != \"function\") throw TypeError(\"Cannot use \\\"sourcemapInterceptor: 'node'\\\" because \\\"process.setSourceMapsEnabled\\\" function is not available. Please use Node >= 16.6.0.\");\n\t\tlet isEnabledAlready = process.sourceMapsEnabled ?? !1;\n\t\treturn process.setSourceMapsEnabled(!0), () => !isEnabledAlready && process.setSourceMapsEnabled(!1);\n\t}\n\treturn interceptStackTrace(runner, typeof runner.options.sourcemapInterceptor == \"object\" ? runner.options.sourcemapInterceptor : void 0);\n}\nvar ESModulesEvaluator = class {\n\tstartOffset = getAsyncFunctionDeclarationPaddingLineCount();\n\tasync runInlinedModule(context, code) {\n\t\tawait new AsyncFunction(ssrModuleExportsKey, ssrImportMetaKey, ssrImportKey, ssrDynamicImportKey, ssrExportAllKey, ssrExportNameKey, \"\\\"use strict\\\";\" + code)(context[ssrModuleExportsKey], context[ssrImportMetaKey], context[ssrImportKey], context[ssrDynamicImportKey], context[ssrExportAllKey], context[ssrExportNameKey]), Object.seal(context[ssrModuleExportsKey]);\n\t}\n\trunExternalModule(filepath) {\n\t\treturn import(filepath);\n\t}\n};\nconst customizationHookNamespace = \"vite-module-runner:import-meta-resolve/v1/\", customizationHooksModule = `\n\nexport async function resolve(specifier, context, nextResolve) {\n if (specifier.startsWith(${JSON.stringify(customizationHookNamespace)})) {\n const data = specifier.slice(${JSON.stringify(customizationHookNamespace)}.length)\n const [parsedSpecifier, parsedImporter] = JSON.parse(data)\n specifier = parsedSpecifier\n context.parentURL = parsedImporter\n }\n return nextResolve(specifier, context)\n}\n\n`;\nfunction customizationHookResolve(specifier, context, nextResolve) {\n\tif (specifier.startsWith(customizationHookNamespace)) {\n\t\tlet data = specifier.slice(42), [parsedSpecifier, parsedImporter] = JSON.parse(data);\n\t\tspecifier = parsedSpecifier, context.parentURL = parsedImporter;\n\t}\n\treturn nextResolve(specifier, context);\n}\nasync function createImportMetaResolver() {\n\tlet module;\n\ttry {\n\t\tmodule = (await import(\"node:module\")).Module;\n\t} catch {\n\t\treturn;\n\t}\n\tif (module) {\n\t\tif (module.registerHooks) return module.registerHooks({ resolve: customizationHookResolve }), importMetaResolveWithCustomHook;\n\t\tif (module.register) {\n\t\t\ttry {\n\t\t\t\tlet hookModuleContent = `data:text/javascript,${encodeURI(customizationHooksModule)}`;\n\t\t\t\tmodule.register(hookModuleContent);\n\t\t\t} catch (e) {\n\t\t\t\tif (\"code\" in e && e.code === \"ERR_NETWORK_IMPORT_DISALLOWED\") return;\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t\treturn importMetaResolveWithCustomHook;\n\t\t}\n\t}\n}\nfunction importMetaResolveWithCustomHook(specifier, importer) {\n\treturn import.meta.resolve(`${customizationHookNamespace}${JSON.stringify([specifier, importer])}`);\n}\n`${customizationHookNamespace}`;\nconst envProxy = new Proxy({}, { get(_, p) {\n\tthrow Error(`[module runner] Dynamic access of \"import.meta.env\" is not supported. Please, use \"import.meta.env.${String(p)}\" instead.`);\n} });\nfunction createDefaultImportMeta(modulePath) {\n\tlet href = posixPathToFileHref(modulePath), filename = modulePath, dirname$1 = posixDirname(modulePath);\n\treturn {\n\t\tfilename: isWindows ? toWindowsPath(filename) : filename,\n\t\tdirname: isWindows ? toWindowsPath(dirname$1) : dirname$1,\n\t\turl: href,\n\t\tenv: envProxy,\n\t\tresolve(_id, _parent) {\n\t\t\tthrow Error(\"[module runner] \\\"import.meta.resolve\\\" is not supported.\");\n\t\t},\n\t\tglob() {\n\t\t\tthrow Error(\"[module runner] \\\"import.meta.glob\\\" is statically replaced during file transformation. Make sure to reference it by the full name.\");\n\t\t}\n\t};\n}\nlet importMetaResolverCache;\nasync function createNodeImportMeta(modulePath) {\n\tlet defaultMeta = createDefaultImportMeta(modulePath), href = defaultMeta.url;\n\timportMetaResolverCache ??= createImportMetaResolver();\n\tlet importMetaResolver = await importMetaResolverCache;\n\treturn {\n\t\t...defaultMeta,\n\t\tmain: !1,\n\t\tresolve(id, parent) {\n\t\t\treturn (importMetaResolver ?? defaultMeta.resolve)(id, parent ?? href);\n\t\t}\n\t};\n}\nvar ModuleRunner = class {\n\tevaluatedModules;\n\thmrClient;\n\ttransport;\n\tresetSourceMapSupport;\n\tconcurrentModuleNodePromises = /* @__PURE__ */ new Map();\n\tisBuiltin;\n\tbuiltinsPromise;\n\tclosed = !1;\n\tconstructor(options, evaluator = new ESModulesEvaluator(), debug) {\n\t\tif (this.options = options, this.evaluator = evaluator, this.debug = debug, this.evaluatedModules = options.evaluatedModules ?? new EvaluatedModules(), this.transport = normalizeModuleRunnerTransport(options.transport), options.hmr !== !1) {\n\t\t\tlet optionsHmr = options.hmr ?? !0;\n\t\t\tif (this.hmrClient = new HMRClient(optionsHmr === !0 || optionsHmr.logger === void 0 ? hmrLogger : optionsHmr.logger === !1 ? silentConsole : optionsHmr.logger, this.transport, ({ acceptedPath }) => this.import(acceptedPath)), !this.transport.connect) throw Error(\"HMR is not supported by this runner transport, but `hmr` option was set to true\");\n\t\t\tthis.transport.connect(createHMRHandlerForRunner(this));\n\t\t} else this.transport.connect?.();\n\t\toptions.sourcemapInterceptor !== !1 && (this.resetSourceMapSupport = enableSourceMapSupport(this));\n\t}\n\tasync import(url) {\n\t\tlet fetchedModule = await this.cachedModule(url);\n\t\treturn await this.cachedRequest(url, fetchedModule);\n\t}\n\tclearCache() {\n\t\tthis.evaluatedModules.clear(), this.hmrClient?.clear();\n\t}\n\tasync close() {\n\t\tthis.resetSourceMapSupport?.(), this.clearCache(), this.hmrClient = void 0, this.closed = !0, await this.transport.disconnect?.();\n\t}\n\tisClosed() {\n\t\treturn this.closed;\n\t}\n\tprocessImport(exports, fetchResult, metadata) {\n\t\tif (!(\"externalize\" in fetchResult)) return exports;\n\t\tlet { url, type } = fetchResult;\n\t\treturn type !== \"module\" && type !== \"commonjs\" || analyzeImportedModDifference(exports, url, type, metadata), exports;\n\t}\n\tisCircularModule(mod) {\n\t\tfor (let importedFile of mod.imports) if (mod.importers.has(importedFile)) return !0;\n\t\treturn !1;\n\t}\n\tisCircularImport(importers, moduleUrl, visited = /* @__PURE__ */ new Set()) {\n\t\tfor (let importer of importers) {\n\t\t\tif (visited.has(importer)) continue;\n\t\t\tif (visited.add(importer), importer === moduleUrl) return !0;\n\t\t\tlet mod = this.evaluatedModules.getModuleById(importer);\n\t\t\tif (mod && mod.importers.size && this.isCircularImport(mod.importers, moduleUrl, visited)) return !0;\n\t\t}\n\t\treturn !1;\n\t}\n\tasync cachedRequest(url, mod, callstack = [], metadata) {\n\t\tlet meta = mod.meta, moduleId = meta.id, { importers } = mod, importee = callstack[callstack.length - 1];\n\t\tif (importee && importers.add(importee), (callstack.includes(moduleId) || this.isCircularModule(mod) || this.isCircularImport(importers, moduleId)) && mod.exports) return this.processImport(mod.exports, meta, metadata);\n\t\tlet debugTimer;\n\t\tthis.debug && (debugTimer = setTimeout(() => {\n\t\t\tthis.debug(`[module runner] module ${moduleId} takes over 2s to load.\\n${(() => `stack:\\n${[...callstack, moduleId].reverse().map((p) => ` - ${p}`).join(\"\\n\")}`)()}`);\n\t\t}, 2e3));\n\t\ttry {\n\t\t\tif (mod.promise) return this.processImport(await mod.promise, meta, metadata);\n\t\t\tlet promise = this.directRequest(url, mod, callstack);\n\t\t\treturn mod.promise = promise, mod.evaluated = !1, this.processImport(await promise, meta, metadata);\n\t\t} finally {\n\t\t\tmod.evaluated = !0, debugTimer && clearTimeout(debugTimer);\n\t\t}\n\t}\n\tasync cachedModule(url, importer) {\n\t\tlet cached = this.concurrentModuleNodePromises.get(url);\n\t\tif (cached) this.debug?.(\"[module runner] using cached module info for\", url);\n\t\telse {\n\t\t\tlet cachedModule = this.evaluatedModules.getModuleByUrl(url);\n\t\t\tcached = this.getModuleInformation(url, importer, cachedModule).finally(() => {\n\t\t\t\tthis.concurrentModuleNodePromises.delete(url);\n\t\t\t}), this.concurrentModuleNodePromises.set(url, cached);\n\t\t}\n\t\treturn cached;\n\t}\n\tensureBuiltins() {\n\t\tif (!this.isBuiltin) return this.builtinsPromise ??= (async () => {\n\t\t\ttry {\n\t\t\t\tthis.debug?.(\"[module runner] fetching builtins from server\");\n\t\t\t\tlet builtins = (await this.transport.invoke(\"getBuiltins\", [])).map((builtin) => typeof builtin == \"object\" && builtin && \"type\" in builtin ? builtin.type === \"string\" ? builtin.value : new RegExp(builtin.source, builtin.flags) : builtin);\n\t\t\t\tthis.isBuiltin = createIsBuiltin(builtins), this.debug?.(\"[module runner] builtins loaded:\", builtins);\n\t\t\t} finally {\n\t\t\t\tthis.builtinsPromise = void 0;\n\t\t\t}\n\t\t})(), this.builtinsPromise;\n\t}\n\tasync getModuleInformation(url, importer, cachedModule) {\n\t\tif (this.closed) throw Error(\"Vite module runner has been closed.\");\n\t\tawait this.ensureBuiltins(), this.debug?.(\"[module runner] fetching\", url);\n\t\tlet isCached = !!(typeof cachedModule == \"object\" && cachedModule.meta), fetchedModule = url.startsWith(\"data:\") || this.isBuiltin?.(url) ? {\n\t\t\texternalize: url,\n\t\t\ttype: \"builtin\"\n\t\t} : await this.transport.invoke(\"fetchModule\", [\n\t\t\turl,\n\t\t\timporter,\n\t\t\t{\n\t\t\t\tcached: isCached,\n\t\t\t\tstartOffset: this.evaluator.startOffset\n\t\t\t}\n\t\t]);\n\t\tif (\"cache\" in fetchedModule) {\n\t\t\tif (!cachedModule || !cachedModule.meta) throw Error(`Module \"${url}\" was mistakenly invalidated during fetch phase.`);\n\t\t\treturn cachedModule;\n\t\t}\n\t\tlet moduleId = \"externalize\" in fetchedModule ? fetchedModule.externalize : fetchedModule.id, moduleUrl = \"url\" in fetchedModule ? fetchedModule.url : url, module = this.evaluatedModules.ensureModule(moduleId, moduleUrl);\n\t\treturn \"invalidate\" in fetchedModule && fetchedModule.invalidate && this.evaluatedModules.invalidateModule(module), fetchedModule.url = moduleUrl, fetchedModule.id = moduleId, module.meta = fetchedModule, module;\n\t}\n\tasync directRequest(url, mod, _callstack) {\n\t\tlet fetchResult = mod.meta, moduleId = fetchResult.id, callstack = [..._callstack, moduleId], request = async (dep, metadata) => {\n\t\t\tlet importer = \"file\" in fetchResult && fetchResult.file || moduleId, depMod = await this.cachedModule(dep, importer);\n\t\t\treturn depMod.importers.add(moduleId), mod.imports.add(depMod.id), this.cachedRequest(dep, depMod, callstack, metadata);\n\t\t}, dynamicRequest = async (dep) => (dep = String(dep), dep[0] === \".\" && (dep = posixResolve(posixDirname(url), dep)), request(dep, { isDynamicImport: !0 }));\n\t\tif (\"externalize\" in fetchResult) {\n\t\t\tlet { externalize } = fetchResult;\n\t\t\tthis.debug?.(\"[module runner] externalizing\", externalize);\n\t\t\tlet exports$1 = await this.evaluator.runExternalModule(externalize);\n\t\t\treturn mod.exports = exports$1, exports$1;\n\t\t}\n\t\tlet { code, file } = fetchResult;\n\t\tif (code == null) {\n\t\t\tlet importer = callstack[callstack.length - 2];\n\t\t\tthrow Error(`[module runner] Failed to load \"${url}\"${importer ? ` imported from ${importer}` : \"\"}`);\n\t\t}\n\t\tlet createImportMeta = this.options.createImportMeta ?? createDefaultImportMeta, modulePath = cleanUrl(file || moduleId), href = posixPathToFileHref(modulePath), meta = await createImportMeta(modulePath), exports = Object.create(null);\n\t\tObject.defineProperty(exports, Symbol.toStringTag, {\n\t\t\tvalue: \"Module\",\n\t\t\tenumerable: !1,\n\t\t\tconfigurable: !1\n\t\t}), mod.exports = exports;\n\t\tlet hotContext;\n\t\tthis.hmrClient && Object.defineProperty(meta, \"hot\", {\n\t\t\tenumerable: !0,\n\t\t\tget: () => {\n\t\t\t\tif (!this.hmrClient) throw Error(\"[module runner] HMR client was closed.\");\n\t\t\t\treturn this.debug?.(\"[module runner] creating hmr context for\", mod.url), hotContext ||= new HMRContext(this.hmrClient, mod.url), hotContext;\n\t\t\t},\n\t\t\tset: (value) => {\n\t\t\t\thotContext = value;\n\t\t\t}\n\t\t});\n\t\tlet context = {\n\t\t\t[ssrImportKey]: request,\n\t\t\t[ssrDynamicImportKey]: dynamicRequest,\n\t\t\t[ssrModuleExportsKey]: exports,\n\t\t\t[ssrExportAllKey]: (obj) => exportAll(exports, obj),\n\t\t\t[ssrExportNameKey]: (name, getter) => Object.defineProperty(exports, name, {\n\t\t\t\tenumerable: !0,\n\t\t\t\tconfigurable: !0,\n\t\t\t\tget: getter\n\t\t\t}),\n\t\t\t[ssrImportMetaKey]: meta\n\t\t};\n\t\treturn this.debug?.(\"[module runner] executing\", href), await this.evaluator.runInlinedModule(context, code, mod), exports;\n\t}\n};\nfunction exportAll(exports, sourceModule) {\n\tif (exports !== sourceModule && !(isPrimitive(sourceModule) || Array.isArray(sourceModule) || sourceModule instanceof Promise)) {\n\t\tfor (let key in sourceModule) if (key !== \"default\" && key !== \"__esModule\" && !(key in exports)) try {\n\t\t\tObject.defineProperty(exports, key, {\n\t\t\t\tenumerable: !0,\n\t\t\t\tconfigurable: !0,\n\t\t\t\tget: () => sourceModule[key]\n\t\t\t});\n\t\t} catch {}\n\t}\n}\nexport { ESModulesEvaluator, EvaluatedModules, ModuleRunner, createDefaultImportMeta, createNodeImportMeta, createWebSocketModuleRunnerTransport, normalizeModuleId, ssrDynamicImportKey, ssrExportAllKey, ssrExportNameKey, ssrImportKey, ssrImportMetaKey, ssrModuleExportsKey };\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n */\nconst inverted = Symbol('inverted');\n/**\n * @internal\n */\nconst expectNull = Symbol('expectNull');\n/**\n * @internal\n */\nconst expectUndefined = Symbol('expectUndefined');\n/**\n * @internal\n */\nconst expectNumber = Symbol('expectNumber');\n/**\n * @internal\n */\nconst expectString = Symbol('expectString');\n/**\n * @internal\n */\nconst expectBoolean = Symbol('expectBoolean');\n/**\n * @internal\n */\nconst expectVoid = Symbol('expectVoid');\n/**\n * @internal\n */\nconst expectFunction = Symbol('expectFunction');\n/**\n * @internal\n */\nconst expectObject = Symbol('expectObject');\n/**\n * @internal\n */\nconst expectArray = Symbol('expectArray');\n/**\n * @internal\n */\nconst expectSymbol = Symbol('expectSymbol');\n/**\n * @internal\n */\nconst expectAny = Symbol('expectAny');\n/**\n * @internal\n */\nconst expectUnknown = Symbol('expectUnknown');\n/**\n * @internal\n */\nconst expectNever = Symbol('expectNever');\n/**\n * @internal\n */\nconst expectNullable = Symbol('expectNullable');\n/**\n * @internal\n */\nconst expectBigInt = Symbol('expectBigInt');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * @internal\n */\nconst secret = Symbol('secret');\n/**\n * @internal\n */\nconst mismatch = Symbol('mismatch');\n/**\n * A type which should match anything passed as a value but *doesn't*\n * match {@linkcode Mismatch}. It helps TypeScript select the right overload\n * for {@linkcode PositiveExpectTypeOf.toEqualTypeOf | .toEqualTypeOf()} and\n * {@linkcode PositiveExpectTypeOf.toMatchTypeOf | .toMatchTypeOf()}.\n *\n * @internal\n */\nconst avalue = Symbol('avalue');\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.expectTypeOf = void 0;\n__exportStar(require(\"./branding\"), exports); // backcompat, consider removing in next major version\n__exportStar(require(\"./messages\"), exports); // backcompat, consider removing in next major version\n__exportStar(require(\"./overloads\"), exports);\n__exportStar(require(\"./utils\"), exports); // backcompat, consider removing in next major version\nconst fn = () => true;\n/**\n * Similar to Jest's `expect`, but with type-awareness.\n * Gives you access to a number of type-matchers that let you make assertions about the\n * form of a reference or generic type parameter.\n *\n * @example\n * ```ts\n * import { foo, bar } from '../foo'\n * import { expectTypeOf } from 'expect-type'\n *\n * test('foo types', () => {\n * // make sure `foo` has type { a: number }\n * expectTypeOf(foo).toMatchTypeOf({ a: 1 })\n * expectTypeOf(foo).toHaveProperty('a').toBeNumber()\n *\n * // make sure `bar` is a function taking a string:\n * expectTypeOf(bar).parameter(0).toBeString()\n * expectTypeOf(bar).returns.not.toBeAny()\n * })\n * ```\n *\n * @description\n * See the [full docs](https://npmjs.com/package/expect-type#documentation) for lots more examples.\n */\nconst expectTypeOf = (_actual) => {\n const nonFunctionProperties = [\n 'parameters',\n 'returns',\n 'resolves',\n 'not',\n 'items',\n 'constructorParameters',\n 'thisParameter',\n 'instance',\n 'guards',\n 'asserts',\n 'branded',\n ];\n const obj = {\n /* eslint-disable @typescript-eslint/no-unsafe-assignment */\n toBeAny: fn,\n toBeUnknown: fn,\n toBeNever: fn,\n toBeFunction: fn,\n toBeObject: fn,\n toBeArray: fn,\n toBeString: fn,\n toBeNumber: fn,\n toBeBoolean: fn,\n toBeVoid: fn,\n toBeSymbol: fn,\n toBeNull: fn,\n toBeUndefined: fn,\n toBeNullable: fn,\n toBeBigInt: fn,\n toMatchTypeOf: fn,\n toEqualTypeOf: fn,\n toBeConstructibleWith: fn,\n toMatchObjectType: fn,\n toExtend: fn,\n map: exports.expectTypeOf,\n toBeCallableWith: exports.expectTypeOf,\n extract: exports.expectTypeOf,\n exclude: exports.expectTypeOf,\n pick: exports.expectTypeOf,\n omit: exports.expectTypeOf,\n toHaveProperty: exports.expectTypeOf,\n parameter: exports.expectTypeOf,\n };\n const getterProperties = nonFunctionProperties;\n getterProperties.forEach((prop) => Object.defineProperty(obj, prop, { get: () => (0, exports.expectTypeOf)({}) }));\n return obj;\n};\nexports.expectTypeOf = expectTypeOf;\n","export { N as BenchmarkRunner, S as Snapshots, T as TestRunner, a as assert, c as createExpect, g as expect, i as inject, s as should, v as vi, b as vitest } from './chunks/test.DNmyFkvJ.js';\nexport { b as bench } from './chunks/benchmark.CX_oY03V.js';\nexport { V as EvaluatedModules } from './chunks/evaluatedModules.Dg1zASAC.js';\nexport { a as assertType } from './chunks/index.DdgEv5B1.js';\nexport { expectTypeOf } from 'expect-type';\nexport { afterAll, afterEach, aroundAll, aroundEach, beforeAll, beforeEach, describe, it, onTestFailed, onTestFinished, recordArtifact, suite, test } from '@vitest/runner';\nexport { chai } from '@vitest/expect';\nimport '@vitest/utils/helpers';\nimport '@vitest/utils/timers';\nimport './chunks/utils.BX5Fg8C4.js';\nimport '@vitest/runner/utils';\nimport '@vitest/utils/error';\nimport 'pathe';\nimport '@vitest/spy';\nimport '@vitest/utils/offset';\nimport '@vitest/utils/source-map';\nimport './chunks/_commonjsHelpers.D26ty3Ew.js';\nimport './chunks/rpc.MzXet3jl.js';\nimport './chunks/index.Chj8NDwU.js';\nimport '@vitest/snapshot';\nimport 'vite/module-runner';\n","import { Duration, Effect, Layer, Redacted, Stream } from \"effect\"\nimport { FetchHttpClient } from \"effect/unstable/http\"\nimport { describe, expect, expectTypeOf, it } from \"vitest\"\nimport type * as AiError from \"@effect-uai/core/AiError\"\nimport type { GenerateResult } from \"@effect-uai/core/Music\"\nimport { promptsInput } from \"@effect-uai/core/Music\"\nimport * as MusicGenerator from \"@effect-uai/core/MusicGenerator\"\nimport * as LyriaGenerator from \"./LyriaGenerator.js\"\n\nconst cfg: LyriaGenerator.Config = { apiKey: Redacted.make(\"test-key\") }\n// FetchHttpClient is required for `make`, but these tests only exercise the\n// compile-time gating and runtime Unsupported branches, no real HTTP is made.\nconst live = Layer.provide(LyriaGenerator.layer(cfg), FetchHttpClient.layer)\n\ndescribe(\"containerToMimeType\", () => {\n it(\"maps mp3 and wav\", async () => {\n expect(await Effect.runPromise(LyriaGenerator.containerToMimeType(\"mp3\"))).toBe(\"audio/mp3\")\n expect(await Effect.runPromise(LyriaGenerator.containerToMimeType(\"wav\"))).toBe(\"audio/wav\")\n })\n\n it(\"fails Unsupported for ogg / opus / flac / aac / webm / raw\", async () => {\n const exit = await Effect.runPromiseExit(LyriaGenerator.containerToMimeType(\"ogg\"))\n expect(exit._tag).toBe(\"Failure\")\n if (exit._tag === \"Failure\") {\n expect(JSON.stringify(exit.cause)).toContain(\"Unsupported\")\n expect(JSON.stringify(exit.cause)).toContain(\"outputFormat\")\n }\n })\n})\n\ndescribe(\"realizedFormat\", () => {\n it(\"reports 44.1 kHz stereo for both mp3 and wav\", () => {\n expect(LyriaGenerator.realizedFormat(\"audio/mp3\")).toEqual({\n container: \"mp3\",\n encoding: \"mp3\",\n sampleRate: 44100,\n channels: 2,\n })\n expect(LyriaGenerator.realizedFormat(\"audio/wav\")).toEqual({\n container: \"wav\",\n encoding: \"pcm_s16le\",\n sampleRate: 44100,\n channels: 2,\n })\n })\n})\n\ndescribe(\"LyriaGenerator capability guards (runtime)\", () => {\n it(\"streamGenerationFrom returns an Unsupported stream\", async () => {\n const program = LyriaGenerator.LyriaGenerator.use((s) =>\n Stream.runDrain(\n s.streamGenerationFrom(Stream.fromIterable([promptsInput([{ text: \"x\" }])]), {\n model: \"lyria-3-clip-preview\",\n prompt: \"\",\n }),\n ),\n )\n const exit = await Effect.runPromiseExit(program.pipe(Effect.provide(live)))\n expect(exit._tag).toBe(\"Failure\")\n if (exit._tag === \"Failure\") {\n expect(JSON.stringify(exit.cause)).toContain(\"Unsupported\")\n expect(JSON.stringify(exit.cause)).toContain(\"streamGenerationFrom\")\n }\n })\n})\n\ndescribe(\"LyriaGenerator Layer (compile-time)\", () => {\n it(\"leaves `MusicInteractiveSession` unsatisfied when using `streamGenerationFrom` against this Layer\", () => {\n const inputs = Stream.fromIterable([promptsInput([{ text: \"techno\" }])])\n const events = inputs.pipe(\n MusicGenerator.streamGenerationFrom({\n model: \"lyria-3-clip-preview\",\n prompt: \"\",\n }),\n )\n const provided = Stream.runDrain(events).pipe(Effect.provide(live))\n expectTypeOf(provided).toEqualTypeOf<\n Effect.Effect<void, AiError.AiError, MusicGenerator.MusicInteractiveSession>\n >()\n })\n\n it(\"sync `generate` returns GenerateResult and requires no marker\", () => {\n const gen = MusicGenerator.generate({\n model: \"lyria-3-clip-preview\",\n prompt: \"ambient\",\n }).pipe(Effect.provide(live))\n expectTypeOf(gen).toEqualTypeOf<Effect.Effect<GenerateResult, AiError.AiError, never>>()\n })\n\n it(\"chunked `streamGeneration` requires no marker\", () => {\n const _stream = Stream.runCollect(\n MusicGenerator.streamGeneration({\n model: \"lyria-3-clip-preview\",\n prompt: \"ambient\",\n }),\n ).pipe(Effect.provide(live))\n expect(_stream).toBeDefined()\n })\n\n it(\"Lyria-typed request accepts no `instrumental` field\", () => {\n const _req: LyriaGenerator.LyriaGenerateRequest = {\n model: \"lyria-3-clip-preview\",\n prompt: \"ambient\",\n // @ts-expect-error: instrumental was removed from LyriaGenerateRequest in v0.7\n instrumental: true,\n }\n expect(_req).toBeDefined()\n })\n\n it(\"Common request supports `duration: Duration.Duration`\", () => {\n const _req: MusicGenerator.CommonGenerateMusicRequest = {\n model: \"lyria-3-clip-preview\",\n prompt: \"ambient\",\n duration: Duration.seconds(30),\n }\n expect(_req).toBeDefined()\n })\n})\n"],"x_google_ignoreList":[0,1,2,3,4,5,6],"mappings":";;;;;;;;AAAA,IAAI,oBAAoB;AACxB,qBAAqB;AACH,OAAO,UAAU,OAAO,QAAQ;CAe5B,iBAAiB,CAAC,EAAA,CAAE;AA8E1B,IAAA,QAAQ;AAAoE,IAAA,4BAAY,IAAI,WAAW,EAAE;AAAG,IAAA,4BAAY,IAAI,WAAW,GAAG;AAC1J,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;CACtC,IAAI,IAAI,MAAM,WAAW,CAAC;CAC1B,UAAU,KAAK,GAAG,UAAU,KAAK;AAClC;AA8IkE,GAAO,kBAAP;AA2e1C,MAAM;AA0L9B,MAAM,6BAA6B;AAAyE,GAG/E,KAAK,UAAU,0BAA0B,EAHsC,EAIzE,KAAK,UAAU,0BAA0B,EAJgC;AA6C3F,IAAI,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG;CAC1C,MAAM,MAAM,sGAAsG,OAAO,CAAC,EAAE,WAAW;AACxI,EAAE,CAAC;;;;CCp8BH,OAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;;;;;CCA5D,OAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;;;;;CCA5D,OAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;;;;;CCA5D,OAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;;;;;CCA5D,IAAI,kBAAA,WAAA,QAAgC,oBAAqB,OAAO,UAAU,SAAS,GAAG,GAAG,GAAG,IAAI;EAC5F,IAAI,OAAO,KAAA,GAAW,KAAK;EAC3B,IAAI,OAAO,OAAO,yBAAyB,GAAG,CAAC;EAC/C,IAAI,CAAC,SAAS,SAAS,OAAO,CAAC,EAAE,aAAa,KAAK,YAAY,KAAK,eAClE,OAAO;GAAE,YAAY;GAAM,KAAK,WAAW;IAAE,OAAO,EAAE;GAAI;EAAE;EAE9D,OAAO,eAAe,GAAG,IAAI,IAAI;CACrC,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI;EACxB,IAAI,OAAO,KAAA,GAAW,KAAK;EAC3B,EAAE,MAAM,EAAE;CACd;CACA,IAAI,eAAA,WAAA,QAA6B,gBAAiB,SAAS,GAAG,WAAS;EACnE,KAAK,IAAI,KAAK,GAAG,IAAI,MAAM,aAAa,CAAC,OAAO,UAAU,eAAe,KAAKA,WAAS,CAAC,GAAG,gBAAgBA,WAAS,GAAG,CAAC;CAC5H;CACA,OAAO,eAAe,SAAS,cAAc,EAAE,OAAO,KAAK,CAAC;CAC5D,QAAQ,eAAe,KAAK;CAC5B,aAAA,iBAAA,GAAoC,OAAO;CAC3C,aAAA,iBAAA,GAAoC,OAAO;CAC3C,aAAA,kBAAA,GAAqC,OAAO;CAC5C,aAAA,cAAA,GAAiC,OAAO;CACxC,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;CAyBjB,MAAM,gBAAgB,YAAY;EAC9B,MAAM,wBAAwB;GAC1B;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACJ;EACA,MAAM,MAAM;GAER,SAAS;GACT,aAAa;GACb,WAAW;GACX,cAAc;GACd,YAAY;GACZ,WAAW;GACX,YAAY;GACZ,YAAY;GACZ,aAAa;GACb,UAAU;GACV,YAAY;GACZ,UAAU;GACV,eAAe;GACf,cAAc;GACd,YAAY;GACZ,eAAe;GACf,eAAe;GACf,uBAAuB;GACvB,mBAAmB;GACnB,UAAU;GACV,KAAK,QAAQ;GACb,kBAAkB,QAAQ;GAC1B,SAAS,QAAQ;GACjB,SAAS,QAAQ;GACjB,MAAM,QAAQ;GACd,MAAM,QAAQ;GACd,gBAAgB,QAAQ;GACxB,WAAW,QAAQ;EACvB;EAEA,sBAAiB,SAAS,SAAS,OAAO,eAAe,KAAK,MAAM,EAAE,YAAY,GAAG,QAAQ,aAAA,CAAc,CAAC,CAAC,EAAE,CAAC,CAAC;EACjH,OAAO;CACX;CACA,QAAQ,eAAe;;;;AEtFvB,MAAM,MAA6B,EAAE,QAAQ,SAAS,KAAK,UAAU,EAAE;AAGvE,MAAM,OAAO,MAAM,QAAQC,MAAqB,GAAG,GAAG,gBAAgB,KAAK;AAE3E,SAAS,6BAA6B;CACpC,GAAG,oBAAoB,YAAY;EACjC,aAAO,MAAM,OAAO,WAAWC,oBAAmC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW;EAC3F,aAAO,MAAM,OAAO,WAAWA,oBAAmC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,WAAW;CAC7F,CAAC;CAED,GAAG,8DAA8D,YAAY;EAC3E,MAAM,OAAO,MAAM,OAAO,eAAeA,oBAAmC,KAAK,CAAC;EAClF,aAAO,KAAK,IAAI,CAAC,CAAC,KAAK,SAAS;EAChC,IAAI,KAAK,SAAS,WAAW;GAC3B,aAAO,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,aAAa;GAC1D,aAAO,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,cAAc;EAC7D;CACF,CAAC;AACH,CAAC;AAED,SAAS,wBAAwB;CAC/B,GAAG,sDAAsD;EACvD,aAAOC,eAA8B,WAAW,CAAC,CAAC,CAAC,QAAQ;GACzD,WAAW;GACX,UAAU;GACV,YAAY;GACZ,UAAU;EACZ,CAAC;EACD,aAAOA,eAA8B,WAAW,CAAC,CAAC,CAAC,QAAQ;GACzD,WAAW;GACX,UAAU;GACV,YAAY;GACZ,UAAU;EACZ,CAAC;CACH,CAAC;AACH,CAAC;AAED,SAAS,oDAAoD;CAC3D,GAAG,sDAAsD,YAAY;EACnE,MAAM,UAAA,eAAwC,KAAK,MACjD,OAAO,SACL,EAAE,qBAAqB,OAAO,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG;GAC3E,OAAO;GACP,QAAQ;EACV,CAAC,CACH,CACF;EACA,MAAM,OAAO,MAAM,OAAO,eAAe,QAAQ,KAAK,OAAO,QAAQ,IAAI,CAAC,CAAC;EAC3E,aAAO,KAAK,IAAI,CAAC,CAAC,KAAK,SAAS;EAChC,IAAI,KAAK,SAAS,WAAW;GAC3B,aAAO,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,aAAa;GAC1D,aAAO,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,sBAAsB;EACrE;CACF,CAAC;AACH,CAAC;AAED,SAAS,6CAA6C;CACpD,GAAG,2GAA2G;EAE5G,MAAM,SADS,OAAO,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,SAAS,CAAC,CAAC,CAAC,CAClD,CAAC,CAAC,KACpBC,iBAAe,qBAAqB;GAClC,OAAO;GACP,QAAQ;EACV,CAAC,CACH;EACA,MAAM,WAAW,OAAO,SAAS,MAAM,CAAC,CAAC,KAAK,OAAO,QAAQ,IAAI,CAAC;EAClE,CAAA,GAAA,YAAA,aAAA,CAAa,QAAQ,CAAC,CAAC,cAErB;CACJ,CAAC;CAED,GAAG,uEAAuE;EACxE,MAAM,MAAMA,iBAAe,SAAS;GAClC,OAAO;GACP,QAAQ;EACV,CAAC,CAAC,CAAC,KAAK,OAAO,QAAQ,IAAI,CAAC;EAC5B,CAAA,GAAA,YAAA,aAAA,CAAa,GAAG,CAAC,CAAC,cAAqE;CACzF,CAAC;CAED,GAAG,uDAAuD;EACxD,MAAM,UAAU,OAAO,WACrBA,iBAAe,iBAAiB;GAC9B,OAAO;GACP,QAAQ;EACV,CAAC,CACH,CAAC,CAAC,KAAK,OAAO,QAAQ,IAAI,CAAC;EAC3B,aAAO,OAAO,CAAC,CAAC,YAAY;CAC9B,CAAC;CAED,GAAG,6DAA6D;EAO9D,aAAO;GALL,OAAO;GACP,QAAQ;GAER,cAAc;EAEN,CAAC,CAAC,CAAC,YAAY;CAC3B,CAAC;CAED,GAAG,+DAA+D;EAChE,MAAM,OAAkD;GACtD,OAAO;GACP,QAAQ;GACR,UAAU,SAAS,QAAQ,EAAE;EAC/B;EACA,aAAO,IAAI,CAAC,CAAC,YAAY;CAC3B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"LyriaGenerator.test.mjs","names":["LyriaGenerator.layer","LyriaGenerator.containerToMimeType","LyriaGenerator.realizedFormat","MusicGenerator"],"sources":["../../../../node_modules/.pnpm/vitest@5.0.3_@types+node@26.2.0_vite@7.3.2_@types+node@26.2.0_jiti@2.6.1_lightningcss@1.32.0_tsx@4.23.12_yaml@2.9.0_/node_modules/vitest/dist/index.js","../src/LyriaGenerator.test.ts"],"sourcesContent":["export { S as Snapshots, T as TestRunner, a as assert, b as assertType, c as createExpect, g as expect, d as inject, s as should, v as vi, e as vitest } from './chunks/index.C4tKZ0yW.js';\nexport { V as EvaluatedModules } from './chunks/rpc.BTmCtPly.js';\nexport { j as afterAll, k as afterEach, l as aroundAll, n as aroundEach, o as beforeAll, q as beforeEach, r as describe, t as it, u as onTestFailed, v as onTestFinished, w as recordArtifact, x as suite, y as test } from './chunks/run.BTlFXlnv.js';\nexport { expectTypeOf } from 'expect-type';\nimport * as chai from 'chai';\nexport { chai };\nimport './chunks/utils.DYj33du9.js';\nimport './chunks/source-map.DUxvo12T.js';\nimport './chunks/index.cx-_w29y.js';\nimport './chunks/tinyrainbow.Ht9iggcq.js';\nimport './chunks/pathe.M-eThtNZ.CknpM8Or.js';\nimport './chunks/spy.DgMTfhrK.js';\nimport './chunks/display.CXBnkt9a.js';\nimport './task-utils.js';\nimport './chunks/plugins.D2ut1V9b.js';\nimport './chunks/offset.Dy-5Fdfn.js';\nimport 'tinybench';\nimport 'vite/module-runner';\nimport './chunks/index.DmDMHCg8.js';\n","import { Duration, Effect, Layer, Redacted, Stream } from \"effect\"\nimport { FetchHttpClient } from \"effect/http\"\nimport { describe, expect, expectTypeOf, it } from \"vitest\"\nimport type * as AiError from \"@effect-uai/core/AiError\"\nimport type { GenerateResult } from \"@effect-uai/core/Music\"\nimport { promptsInput } from \"@effect-uai/core/Music\"\nimport * as MusicGenerator from \"@effect-uai/core/MusicGenerator\"\nimport * as LyriaGenerator from \"./LyriaGenerator.js\"\n\nconst cfg: LyriaGenerator.Config = { apiKey: Redacted.make(\"test-key\") }\n// FetchHttpClient is required for `make`, but these tests only exercise the\n// compile-time gating and runtime Unsupported branches, no real HTTP is made.\nconst live = Layer.provide(LyriaGenerator.layer(cfg), FetchHttpClient.layer)\n\ndescribe(\"containerToMimeType\", () => {\n it(\"maps mp3 and wav\", async () => {\n expect(await Effect.runPromise(LyriaGenerator.containerToMimeType(\"mp3\"))).toBe(\"audio/mp3\")\n expect(await Effect.runPromise(LyriaGenerator.containerToMimeType(\"wav\"))).toBe(\"audio/wav\")\n })\n\n it(\"fails Unsupported for ogg / opus / flac / aac / webm / raw\", async () => {\n const exit = await Effect.runPromiseExit(LyriaGenerator.containerToMimeType(\"ogg\"))\n expect(exit._tag).toBe(\"Failure\")\n if (exit._tag === \"Failure\") {\n expect(JSON.stringify(exit.cause)).toContain(\"Unsupported\")\n expect(JSON.stringify(exit.cause)).toContain(\"outputFormat\")\n }\n })\n})\n\ndescribe(\"realizedFormat\", () => {\n it(\"reports 44.1 kHz stereo for both mp3 and wav\", () => {\n expect(LyriaGenerator.realizedFormat(\"audio/mp3\")).toEqual({\n container: \"mp3\",\n encoding: \"mp3\",\n sampleRate: 44100,\n channels: 2,\n })\n expect(LyriaGenerator.realizedFormat(\"audio/wav\")).toEqual({\n container: \"wav\",\n encoding: \"pcm_s16le\",\n sampleRate: 44100,\n channels: 2,\n })\n })\n})\n\ndescribe(\"LyriaGenerator capability guards (runtime)\", () => {\n it(\"streamGenerationFrom returns an Unsupported stream\", async () => {\n const program = LyriaGenerator.LyriaGenerator.use((s) =>\n Stream.runDrain(\n s.streamGenerationFrom(Stream.fromIterable([promptsInput([{ text: \"x\" }])]), {\n model: \"lyria-3-clip-preview\",\n prompt: \"\",\n }),\n ),\n )\n const exit = await Effect.runPromiseExit(program.pipe(Effect.provide(live)))\n expect(exit._tag).toBe(\"Failure\")\n if (exit._tag === \"Failure\") {\n expect(JSON.stringify(exit.cause)).toContain(\"Unsupported\")\n expect(JSON.stringify(exit.cause)).toContain(\"streamGenerationFrom\")\n }\n })\n})\n\ndescribe(\"LyriaGenerator Layer (compile-time)\", () => {\n it(\"leaves `MusicInteractiveSession` unsatisfied when using `streamGenerationFrom` against this Layer\", () => {\n const inputs = Stream.fromIterable([promptsInput([{ text: \"techno\" }])])\n const events = inputs.pipe(\n MusicGenerator.streamGenerationFrom({\n model: \"lyria-3-clip-preview\",\n prompt: \"\",\n }),\n )\n const provided = Stream.runDrain(events).pipe(Effect.provide(live))\n expectTypeOf(provided).toEqualTypeOf<\n Effect.Effect<void, AiError.AiError, MusicGenerator.MusicInteractiveSession>\n >()\n })\n\n it(\"sync `generate` returns GenerateResult and requires no marker\", () => {\n const gen = MusicGenerator.generate({\n model: \"lyria-3-clip-preview\",\n prompt: \"ambient\",\n }).pipe(Effect.provide(live))\n expectTypeOf(gen).toEqualTypeOf<Effect.Effect<GenerateResult, AiError.AiError, never>>()\n })\n\n it(\"chunked `streamGeneration` requires no marker\", () => {\n const _stream = Stream.runCollect(\n MusicGenerator.streamGeneration({\n model: \"lyria-3-clip-preview\",\n prompt: \"ambient\",\n }),\n ).pipe(Effect.provide(live))\n expect(_stream).toBeDefined()\n })\n\n it(\"Lyria-typed request accepts no `instrumental` field\", () => {\n const _req: LyriaGenerator.LyriaGenerateRequest = {\n model: \"lyria-3-clip-preview\",\n prompt: \"ambient\",\n // @ts-expect-error: instrumental was removed from LyriaGenerateRequest in v0.7\n instrumental: true,\n }\n expect(_req).toBeDefined()\n })\n\n it(\"Common request supports `duration: Duration.Duration`\", () => {\n const _req: MusicGenerator.CommonGenerateMusicRequest = {\n model: \"lyria-3-clip-preview\",\n prompt: \"ambient\",\n duration: Duration.seconds(30),\n }\n expect(_req).toBeDefined()\n })\n})\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
package/dist/codec.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.d.mts","names":[],"sources":["../src/codec.ts"],"mappings":";;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"codec.d.mts","names":[],"sources":["../src/codec.ts"],"mappings":";;;;;;;;;;cAuFa,mBAAiB,OAAA;;;;;;;;KAGlB,2BAA2B,kBAAkB;cAU5C,4BAAsB,OACvB,cAAc,0CACvB,cAAc;cA+BJ,WAAS,OAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAIV,mBAAmB,UAAU;KAMpC;WACU;;WACA;aAAuB;aAA2B;;;WAElD;aACE;aACA;aACA;;WAEF;;WAGA;aACE;aACA;aACA,UAAU;;;KAItB;WACM;WACA,OAAO,cAAc;;KAG3B;WACM,OAAO;aAAyB;;;;;;;;;;KAU/B;WAEG,sBAAsB;aACpB;aACA;aACA,YAAY;;;WAGd;;WACA;;WACA;;KAEV;WACM;aACE;aACA,uBAAuB;;;KAIxB;WACD;;KAGC;WACD;WACA;;KAGC;WACD;WACA;WACA;WACA,iBAAiB;;WAEjB,qBAAqB;WACrB,cAAc;;WAEd;;WAEA,qBAAqB;;KAGpB;WACD,UAAU,cAAc;WACxB,oBAAoB;WACpB,mBAAmB;WACnB,QAAQ,cAAc;WACtB,aAAa;;;cAgGX,iBAAc,oBAXN;cA0JR,yBAAsB,OAC1B,cAAc,oBACpB,cAAc;;cAiCJ,mBAAgB,sBACV,mBACC,QAAQ;;cAIf,kBAAe,sBACT,gBACF,iBAAiB,QAAQ;;;;;;;cAkC7B,oBAAiB,SAAa,cAAc;cAO5C,mBAAgB,SAClB,cAAc,cAAY,kBACjB,OAAO,OAAO,mBAAiB,QAC1C,cAAc,iBAAe,sBACf,cAAc,cAAY,aACnC,gCACX;KAoCS;;WAED;WACA;;WAEA,YAAY,OAAO;;WAEnB,WAAW,OAAO;;WAElB;;KAGC;WACD;WACA;;WAEA,QAAQ,cAAc;WACtB,eAAe,cAAc;;WAE7B,aAAa,cAAc;WAC3B,cAAc,OAAO;WACrB;aACE;aACA;aACA;aACA;eAAkC;;aAClC;eAAmC;;;;cAInC,kBAAkB;;;;;;KAenB;WACG;WAAuB;;WACvB;WAA4B;;WAC5B;WAAwB,QAAQ;;WAEhC;WACA,IAAI,OAAO;WACX,WAAW,OAAO;WAClB;WACA;;KAGH;WACD,aAAa;WACb,OAAO,cAAc;WACrB;;cA6HE,cAAW,KAAS,aAAW,OAAS,cAAY;cA8DpD,oBAAiB,KAAS,gBAAc"}
|
package/dist/codec.mjs
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { n as __exportAll } from "./rolldown-runtime-EAsCxrDo.mjs";
|
|
2
|
-
import { Array as Array$1,
|
|
2
|
+
import { Array as Array$1, Match, Option, Result, Schema, pipe } from "effect";
|
|
3
3
|
import * as AiError from "@effect-uai/core/AiError";
|
|
4
|
+
import { Base64 } from "effect/encoding";
|
|
4
5
|
import { imageBase64 } from "@effect-uai/core/Image";
|
|
5
6
|
//#region src/codec.ts
|
|
6
7
|
var codec_exports = /* @__PURE__ */ __exportAll({
|
|
@@ -109,7 +110,7 @@ const imageSourceToParts = Match.type().pipe(Match.tag("url", () => []), Match.t
|
|
|
109
110
|
data: s.base64
|
|
110
111
|
} }]), Match.tag("bytes", (s) => [{ inlineData: {
|
|
111
112
|
mimeType: s.mimeType,
|
|
112
|
-
data:
|
|
113
|
+
data: Base64.encode(s.bytes)
|
|
113
114
|
} }]), Match.exhaustive);
|
|
114
115
|
const blockToParts = Match.type().pipe(Match.discriminatorsExhaustive("type")({
|
|
115
116
|
input_text: (b) => b.text.length === 0 ? [] : [{ text: b.text }],
|
package/dist/codec.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codec.mjs","names":["Arr"],"sources":["../src/codec.ts"],"sourcesContent":["import { Array as Arr, Encoding, Match, Option, Result, Schema, pipe } from \"effect\"\nimport * as AiError from \"@effect-uai/core/AiError\"\nimport type { ImageSource } from \"@effect-uai/core/Image\"\nimport { imageBase64 } from \"@effect-uai/core/Image\"\nimport type {\n ContentBlock,\n ToolCall,\n InputImage,\n HistoryItem,\n Message,\n Annotation,\n} from \"@effect-uai/core/Items\"\nimport type { ToolDescriptor } from \"@effect-uai/core/Tool\"\nimport type { Turn } from \"@effect-uai/core/Turn\"\nimport type { CommonRequest } from \"@effect-uai/core/LanguageModel\"\n\n// ---------------------------------------------------------------------------\n// Wire schemas - the subset of Gemini's streamGenerateContent payload we\n// consume. Reference: https://ai.google.dev/api/generate-content\n// ---------------------------------------------------------------------------\n\nconst TextPart = Schema.Struct({\n text: Schema.String,\n /**\n * Gemini's flag for chain-of-thought parts. When `true`, the part is\n * reasoning trace, not the model's user-facing answer. Maps onto\n * `reasoning_delta { kind: \"trace\" }` in the canonical view.\n */\n thought: Schema.optional(Schema.Boolean),\n})\n\n/**\n * Gemini function-call part. Args are delivered as a whole JSON *object*\n * in a single chunk (Gemini does not stream tool-call args). On Gemini 3\n * the response also carries an `id` per call, which we echo back on the\n * corresponding `functionResponse`.\n */\nconst FunctionCallPart = Schema.Struct({\n functionCall: Schema.Struct({\n id: Schema.optional(Schema.String),\n name: Schema.String,\n args: Schema.optional(Schema.Unknown),\n }),\n // Gemini 3 thinking models attach an opaque signature to each function-call\n // part that must be replayed on the next request, or the call is rejected.\n thoughtSignature: Schema.optional(Schema.String),\n})\n\n/**\n * An image the model drew, as a part of its own turn. Only image models\n * emit these, and only when the request asked for the IMAGE modality.\n * `thought: true` marks an interim image drawn while planning, which is\n * not the answer and is dropped the same way thought text is.\n */\nconst InlineDataPart = Schema.Struct({\n inlineData: Schema.Struct({\n mimeType: Schema.optional(Schema.String),\n data: Schema.String,\n }),\n thought: Schema.optional(Schema.Boolean),\n})\n\nconst Part = Schema.Union([TextPart, FunctionCallPart, InlineDataPart])\ntype WireFunctionCallPart = typeof FunctionCallPart.Type\ntype WireInlineDataPart = typeof InlineDataPart.Type\n\nconst Content = Schema.Struct({\n role: Schema.optional(Schema.String),\n parts: Schema.optional(Schema.Array(Part)),\n})\n\n// Google grounding metadata. On a grounded response the candidate carries\n// `groundingChunks[].web.{uri,title}` - the structured form of the inline `[n]`\n// / trailing `**Sources:**` list the model renders into the answer text.\n// Decoded defensively (every field optional) as it is absent on ungrounded\n// turns. Shared with the Interactions deep-research surface via `codec.ts`.\nconst GroundingChunk = Schema.Struct({\n web: Schema.optional(\n Schema.NullOr(\n Schema.Struct({\n uri: Schema.optional(Schema.NullOr(Schema.String)),\n title: Schema.optional(Schema.NullOr(Schema.String)),\n }),\n ),\n ),\n})\nexport const GroundingMetadata = Schema.Struct({\n groundingChunks: Schema.optional(Schema.NullOr(Schema.Array(GroundingChunk))),\n})\nexport type GroundingMetadata = typeof GroundingMetadata.Type\n\n// Two citations are the same source when they point at the same url.\nconst sameUrlCitation = (a: Annotation, b: Annotation): boolean =>\n a.type === \"url_citation\" && b.type === \"url_citation\" && a.url === b.url\n\n// Grounding chunks → `url_citation` annotations, de-duped by url across every\n// metadata block passed. `web.uri` is a `grounding-api-redirect` URL and\n// `web.title` the bare domain; both are kept as-is (the redirect resolves to\n// the real page).\nexport const groundingToAnnotations = (\n ...metas: ReadonlyArray<GroundingMetadata | null | undefined>\n): ReadonlyArray<Annotation> =>\n pipe(\n metas,\n Arr.flatMap((meta) => meta?.groundingChunks ?? []),\n Arr.filterMap((chunk) =>\n chunk.web?.uri == null\n ? Result.failVoid\n : Result.succeed<Annotation>({\n type: \"url_citation\",\n url: chunk.web.uri,\n title: chunk.web.title ?? chunk.web.uri,\n }),\n ),\n Arr.dedupeWith(sameUrlCitation),\n )\n\nconst Candidate = Schema.Struct({\n content: Schema.optional(Content),\n groundingMetadata: Schema.optional(GroundingMetadata),\n finishReason: Schema.optional(Schema.String),\n index: Schema.optional(Schema.Number),\n})\n\nconst UsageMetadata = Schema.Struct({\n promptTokenCount: Schema.optional(Schema.Number),\n candidatesTokenCount: Schema.optional(Schema.Number),\n totalTokenCount: Schema.optional(Schema.Number),\n cachedContentTokenCount: Schema.optional(Schema.Number),\n thoughtsTokenCount: Schema.optional(Schema.Number),\n})\n\nexport const WireChunk = Schema.Struct({\n candidates: Schema.optional(Schema.Array(Candidate)),\n usageMetadata: Schema.optional(UsageMetadata),\n})\nexport type WireChunk = typeof WireChunk.Type\n\n// ---------------------------------------------------------------------------\n// History → request body\n// ---------------------------------------------------------------------------\n\ntype RequestPart =\n | { readonly text: string }\n | { readonly inlineData: { readonly mimeType: string; readonly data: string } }\n | {\n readonly functionCall: {\n readonly id?: string\n readonly name: string\n readonly args: unknown\n }\n readonly thoughtSignature?: string\n }\n | {\n readonly functionResponse: {\n readonly id?: string\n readonly name: string\n readonly response: Record<string, unknown>\n }\n }\n\ntype RequestContent = {\n readonly role: \"user\" | \"model\"\n readonly parts: ReadonlyArray<RequestPart>\n}\n\ntype RequestSystemInstruction = {\n readonly parts: ReadonlyArray<{ readonly text: string }>\n}\n\n/**\n * Gemini's tool declaration. A `tools[]` entry is either a function-declaration\n * block (translated from `ToolDescriptor`s) or one of the native hosted-tool\n * entries. The native entries are empty objects keyed camelCase per the REST\n * v1beta `Tool` object, and sit as siblings of the declarations in the same\n * `tools` array.\n */\nexport type RequestTool =\n | {\n readonly functionDeclarations: ReadonlyArray<{\n readonly name: string\n readonly description: string\n readonly parameters: Record<string, unknown>\n }>\n }\n | { readonly googleSearch: {} }\n | { readonly urlContext: {} }\n | { readonly codeExecution: {} }\n\ntype RequestToolConfig = {\n readonly functionCallingConfig: {\n readonly mode: \"AUTO\" | \"ANY\" | \"NONE\"\n readonly allowedFunctionNames?: ReadonlyArray<string>\n }\n}\n\nexport type ThinkingConfig = {\n readonly thinkingBudget: number\n}\n\nexport type ImageConfig = {\n readonly aspectRatio?: string\n readonly imageSize?: string\n}\n\nexport type GenerationConfig = {\n readonly temperature?: number\n readonly maxOutputTokens?: number\n readonly topP?: number\n readonly thinkingConfig?: ThinkingConfig\n /** Image models need `[\"TEXT\", \"IMAGE\"]` or they answer in prose only. */\n readonly responseModalities?: ReadonlyArray<\"TEXT\" | \"IMAGE\">\n readonly imageConfig?: ImageConfig\n /** Set together with `responseJsonSchema` to constrain output to JSON. */\n readonly responseMimeType?: string\n /** JSON Schema constraint on the output. */\n readonly responseJsonSchema?: Record<string, unknown>\n}\n\nexport type RequestBody = {\n readonly contents: ReadonlyArray<RequestContent>\n readonly systemInstruction?: RequestSystemInstruction\n readonly generationConfig?: GenerationConfig\n readonly tools?: ReadonlyArray<RequestTool>\n readonly toolConfig?: RequestToolConfig\n}\n\nconst blockText = Match.type<ContentBlock>().pipe(\n Match.discriminatorsExhaustive(\"type\")({\n input_text: (b) => b.text,\n input_image: () => \"\",\n output_text: (b) => b.text,\n output_image: () => \"\",\n refusal: (b) => b.text,\n }),\n)\n\nconst messageText = (message: Message): string => message.content.map(blockText).join(\"\")\n\n/**\n * Gemini's `inlineData` form expects a base64 payload. URL-form images\n * would need to go through Gemini's Files API (upload then `fileData`\n * with the returned URI); pre-uploading isn't free, so we skip those for\n * now and document as a follow-up.\n */\nconst imageSourceToParts = Match.type<InputImage[\"source\"]>().pipe(\n Match.tag(\"url\", (): ReadonlyArray<RequestPart> => []),\n Match.tag(\"base64\", (s): ReadonlyArray<RequestPart> => [\n { inlineData: { mimeType: s.mimeType, data: s.base64 } },\n ]),\n Match.tag(\"bytes\", (s): ReadonlyArray<RequestPart> => [\n { inlineData: { mimeType: s.mimeType, data: Encoding.encodeBase64(s.bytes) } },\n ]),\n Match.exhaustive,\n)\n\nconst blockToParts = Match.type<ContentBlock>().pipe(\n Match.discriminatorsExhaustive(\"type\")({\n input_text: (b): ReadonlyArray<RequestPart> => (b.text.length === 0 ? [] : [{ text: b.text }]),\n input_image: (b): ReadonlyArray<RequestPart> => imageSourceToParts(b.source),\n output_text: (b): ReadonlyArray<RequestPart> => (b.text.length === 0 ? [] : [{ text: b.text }]),\n // An image the model drew goes back as a model-role `inlineData` part,\n // which is how a multi-turn edit keeps its subject.\n output_image: (b): ReadonlyArray<RequestPart> => imageSourceToParts(b.source),\n // Refusals are assistant-side content; they don't round-trip into Gemini's\n // request body as parts. Skip.\n refusal: (): ReadonlyArray<RequestPart> => [],\n }),\n)\n\nconst messageToContent = (message: Message): Result.Result<RequestContent, void> => {\n const parts = pipe(message.content, Arr.flatMap(blockToParts))\n if (parts.length === 0) return Result.failVoid\n return Match.value(message.role).pipe(\n Match.when(\"user\", () => Result.succeed({ role: \"user\" as const, parts })),\n Match.when(\"assistant\", () => Result.succeed({ role: \"model\" as const, parts })),\n Match.when(\"system\", () => Result.failVoid),\n Match.exhaustive,\n )\n}\n\nconst systemMessageText = (message: Message): Result.Result<string, void> => {\n if (message.role !== \"system\") return Result.failVoid\n const text = messageText(message)\n return text.length === 0 ? Result.failVoid : Result.succeed(text)\n}\n\nconst allMessages = (history: ReadonlyArray<HistoryItem>): ReadonlyArray<Message> =>\n pipe(\n history,\n Arr.filterMap((item) => (item.type === \"message\" ? Result.succeed(item) : Result.failVoid)),\n )\n\n// ---------------------------------------------------------------------------\n// Function-call round-trip\n//\n// `ToolCall.arguments` and `ToolCallOutput.output` are JSON-encoded\n// strings; Gemini's `functionCall.args` and `functionResponse.response`\n// expect parsed JSON *objects*. Decode via Schema:\n// - object payload → use as-is\n// - scalar / array / malformed → wrap as `{ output: <raw string> }` so the\n// model still sees *some* response without crashing the request.\n// ---------------------------------------------------------------------------\n\nconst JsonObject = Schema.Record(Schema.String, Schema.Unknown)\nconst decodeJsonObject = Schema.decodeResult(Schema.fromJsonString(JsonObject))\n\nconst parsedJsonObject =\n (fallback: (raw: string) => Record<string, unknown>) =>\n (encoded: string): Record<string, unknown> =>\n pipe(\n decodeJsonObject(encoded),\n Result.match({\n onSuccess: (v) => v,\n onFailure: () => fallback(encoded),\n }),\n )\n\nconst parsedArgs = parsedJsonObject(() => ({}))\n/** A `ToolCallOutput.output` string as the object `functionResponse` wants. */\nexport const parsedResponse = parsedJsonObject((raw) => ({ output: raw }))\n\n/**\n * `ToolCallOutput` only carries `call_id`; Gemini's `functionResponse`\n * requires the declared function `name`. Resolve the name by scanning prior\n * `function_call` items in the history for a matching `call_id`. If we\n * cannot resolve, fall back to `call_id` as the name - imperfect but\n * preserves stream shape so the model sees *some* response.\n */\nconst isFunctionCallItem = (item: HistoryItem): item is ToolCall => item.type === \"function_call\"\n\nconst nameForCallId = (\n history: ReadonlyArray<HistoryItem>,\n call_id: string,\n): Option.Option<string> =>\n pipe(\n history,\n Arr.findFirst((item): item is ToolCall => isFunctionCallItem(item) && item.call_id === call_id),\n Option.map((f) => f.name),\n )\n\n/**\n * Extract the Gemini-3 wire id and thought signature we stashed in\n * `providerData` on the way out. Schema-driven so the shape lives in one\n * place; failure or absence → `Option.none()`.\n */\nconst ProviderDataGemini = Schema.Struct({\n gemini: Schema.Struct({\n id: Schema.optional(Schema.String),\n thoughtSignature: Schema.optional(Schema.String),\n }),\n})\nconst decodeGemini = Schema.decodeUnknownResult(ProviderDataGemini)\n\nconst geminiField = (\n item: ToolCall,\n pick: (g: {\n readonly id?: string | undefined\n readonly thoughtSignature?: string | undefined\n }) => string | undefined,\n): Option.Option<string> =>\n pipe(\n decodeGemini(item.providerData),\n Result.match({\n onSuccess: (d) => Option.fromNullishOr(pick(d.gemini)),\n onFailure: () => Option.none<string>(),\n }),\n )\n\nconst providerIdFor = (item: ToolCall): Option.Option<string> => geminiField(item, (g) => g.id)\n\n// The originating call's Gemini id, looked up from history by our `call_id`.\n// Gemini 3 maps a `functionResponse` back to its call by this id, so parallel\n// calls to the same function are mis-paired if we drop it.\nconst providerIdForCallId = (\n history: ReadonlyArray<HistoryItem>,\n call_id: string,\n): Option.Option<string> =>\n pipe(\n history,\n Arr.findFirst((item): item is ToolCall => isFunctionCallItem(item) && item.call_id === call_id),\n Option.flatMap(providerIdFor),\n )\n\nconst signatureFor = (item: ToolCall): Option.Option<string> =>\n geminiField(item, (g) => g.thoughtSignature)\n\nconst itemToContent =\n (history: ReadonlyArray<HistoryItem>) =>\n (item: HistoryItem): Result.Result<RequestContent, void> =>\n Match.value(item).pipe(\n Match.discriminatorsExhaustive(\"type\")({\n message: messageToContent,\n function_call: (f) =>\n Result.succeed({\n role: \"model\" as const,\n parts: [\n {\n ...Option.match(signatureFor(f), {\n onSome: (thoughtSignature) => ({ thoughtSignature }),\n onNone: () => ({}),\n }),\n functionCall: {\n ...Option.match(providerIdFor(f), {\n onSome: (id) => ({ id }),\n onNone: () => ({}),\n }),\n name: f.name,\n args: parsedArgs(f.arguments),\n },\n },\n ],\n }),\n function_call_output: (o) =>\n Result.succeed({\n role: \"user\" as const,\n parts: [\n {\n functionResponse: {\n ...Option.match(providerIdForCallId(history, o.call_id), {\n onSome: (id) => ({ id }),\n onNone: () => ({}),\n }),\n name: Option.getOrElse(nameForCallId(history, o.call_id), () => o.call_id),\n response: parsedResponse(o.output),\n },\n },\n ],\n }),\n reasoning: () => Result.failVoid,\n }),\n )\n\n// ---------------------------------------------------------------------------\n// Tool descriptors → Gemini `functionDeclarations`. Gemini accepts only a\n// strict OpenAPI 3.0 subset for `parameters`; strip JSON-Schema keys it\n// rejects (`$schema`, `$ref`, `additionalProperties`, `oneOf`,\n// `definitions`).\n// ---------------------------------------------------------------------------\n\nconst UNSUPPORTED_SCHEMA_KEYS: ReadonlySet<string> = new Set([\n \"$schema\",\n \"$ref\",\n \"$defs\",\n \"definitions\",\n \"additionalProperties\",\n \"oneOf\",\n])\n\nconst sanitizeSchema = (schema: unknown): unknown => {\n if (Array.isArray(schema)) return schema.map(sanitizeSchema)\n if (schema === null || typeof schema !== \"object\") return schema\n return pipe(\n Object.entries(schema as Record<string, unknown>),\n Arr.filterMap(([k, v]) =>\n UNSUPPORTED_SCHEMA_KEYS.has(k)\n ? Result.failVoid\n : Result.succeed([k, sanitizeSchema(v)] as const),\n ),\n Object.fromEntries,\n )\n}\n\nexport const toolDescriptorsToTools = (\n tools: ReadonlyArray<ToolDescriptor>,\n): ReadonlyArray<RequestTool> =>\n tools.length === 0\n ? []\n : [\n {\n functionDeclarations: tools.map((t) => ({\n name: t.name,\n description: t.description,\n parameters: sanitizeSchema(t.inputSchema) as Record<string, unknown>,\n })),\n },\n ]\n\n/**\n * Map our cross-provider `toolChoice` onto Gemini's `functionCallingConfig`.\n * Gemini honours the same three modes plus a function allow-list, so the\n * choice is mapped, not dropped. `undefined` keeps the API default (`AUTO`).\n */\nconst toolChoiceToFunctionCallingConfig = (\n toolChoice: CommonRequest[\"toolChoice\"],\n): RequestToolConfig[\"functionCallingConfig\"] =>\n Match.value(toolChoice ?? \"auto\").pipe(\n Match.when(\"auto\", () => ({ mode: \"AUTO\" as const })),\n Match.when(\"required\", () => ({ mode: \"ANY\" as const })),\n Match.when(\"none\", () => ({ mode: \"NONE\" as const })),\n Match.orElse((tc) => ({ mode: \"ANY\" as const, allowedFunctionNames: [tc.name] })),\n )\n\n// ---------------------------------------------------------------------------\n// HTTP failure mapping, shared by every Google surface\n// ---------------------------------------------------------------------------\n\n/** `provider` names the surface that failed, so errors read `gemini` or `lyria`. */\nexport const transportFailure =\n (provider: string) =>\n (cause: unknown): AiError.AiError =>\n new AiError.Unavailable({ provider, raw: cause })\n\n/** 413 is the inline-payload cap, which is a context limit on every surface. */\nexport const httpStatusError =\n (provider: string) =>\n (status: number, body: string): AiError.AiError =>\n Match.value(status).pipe(\n Match.when(429, (): AiError.AiError => new AiError.RateLimited({ provider, raw: body })),\n Match.whenOr(408, 504, (): AiError.AiError => new AiError.Timeout({ provider, raw: body })),\n Match.when(\n 401,\n (): AiError.AiError => new AiError.AuthFailed({ provider, subtype: \"auth\", raw: body }),\n ),\n Match.when(\n 403,\n (): AiError.AiError =>\n new AiError.AuthFailed({ provider, subtype: \"permission\", raw: body }),\n ),\n Match.when(\n 402,\n (): AiError.AiError => new AiError.AuthFailed({ provider, subtype: \"billing\", raw: body }),\n ),\n Match.when(\n 413,\n (): AiError.AiError => new AiError.ContextLengthExceeded({ provider, raw: body }),\n ),\n Match.when(\n (n) => n >= 500,\n (n): AiError.AiError => new AiError.Unavailable({ provider, status: n, raw: body }),\n ),\n Match.orElse((): AiError.AiError => new AiError.InvalidRequest({ provider, raw: body })),\n )\n\n/**\n * URL-form images need Gemini's Files API (upload, then `fileData`); we\n * don't pre-upload, so such a part would otherwise vanish from the request.\n * The caller fails the request with `Unsupported` instead of silently\n * dropping the image.\n */\nexport const hasUrlImageSource = (history: ReadonlyArray<HistoryItem>): boolean =>\n history.some(\n (item) =>\n item.type === \"message\" &&\n item.content.some((b) => b.type === \"input_image\" && b.source._tag === \"url\"),\n )\n\nexport const buildRequestBody = (\n history: ReadonlyArray<HistoryItem>,\n generationConfig: Option.Option<GenerationConfig>,\n tools: ReadonlyArray<ToolDescriptor> = [],\n providerToolEntries: ReadonlyArray<RequestTool> = [],\n toolChoice: CommonRequest[\"toolChoice\"] = undefined,\n): RequestBody => {\n const systemTexts = pipe(allMessages(history), Arr.filterMap(systemMessageText))\n const contents = pipe(history, Arr.filterMap(itemToContent(history)))\n const functionTools = toolDescriptorsToTools(tools)\n const requestTools = [...functionTools, ...providerToolEntries]\n return {\n contents,\n ...(systemTexts.length > 0 && {\n systemInstruction: { parts: [{ text: systemTexts.join(\"\\n\") }] },\n }),\n ...Option.match(generationConfig, {\n onNone: () => ({}),\n onSome: (cfg) => ({ generationConfig: cfg }),\n }),\n ...(requestTools.length > 0 && { tools: requestTools }),\n // Only force a function-calling mode when there are function declarations;\n // a grounding-only request must keep the API default.\n ...(functionTools.length > 0 && {\n toolConfig: { functionCallingConfig: toolChoiceToFunctionCallingConfig(toolChoice) },\n }),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Stream-level state - accumulate chunk text + final usage/finish.\n//\n// `Accumulator` is immutable; `ingestChunk` returns a fresh one per chunk.\n// Drive it via `Stream.mapAccum` in the consumer.\n// ---------------------------------------------------------------------------\n\nconst finishReasonToStop = (reason: Option.Option<string>): Turn[\"stop_reason\"] =>\n Option.match(reason, {\n onNone: () => \"stop\" as const,\n onSome: (r) => (r === \"MAX_TOKENS\" ? (\"max_tokens\" as const) : (\"stop\" as const)),\n })\n\nexport type AccumulatedFunctionCall = {\n /** Synthesized id-or-name we surface as `call_id` on the canonical item. */\n readonly callId: string\n readonly name: string\n /** Wire id from Gemini 3, when present - echoed back on `functionResponse`. */\n readonly providerId: Option.Option<string>\n /** Thought signature from Gemini 3, replayed on the next request's part. */\n readonly signature: Option.Option<string>\n /** Args as JSON-encoded string, mirroring `Items.ToolCall.arguments`. */\n readonly arguments: string\n}\n\nexport type Accumulator = {\n readonly text: string\n readonly reasoning: string\n /** Images the model drew, in emission order. Image models only. */\n readonly images: ReadonlyArray<ImageSource>\n readonly functionCalls: ReadonlyArray<AccumulatedFunctionCall>\n /** Grounding citations, accumulated (de-duped by url) across chunks. */\n readonly annotations: ReadonlyArray<Annotation>\n readonly finishReason: Option.Option<string>\n readonly usage: {\n readonly input_tokens?: number\n readonly output_tokens?: number\n readonly total_tokens?: number\n readonly input_tokens_details?: { readonly cached_tokens?: number }\n readonly output_tokens_details?: { readonly reasoning_tokens?: number }\n }\n}\n\nexport const emptyAccumulator: Accumulator = {\n text: \"\",\n reasoning: \"\",\n images: [],\n functionCalls: [],\n annotations: [],\n finishReason: Option.none(),\n usage: {},\n}\n\n/**\n * One part's worth of streamable output. `text` and `reasoning` are\n * incremental string deltas; `function_call` arrives whole-in-one-chunk\n * (Gemini does not stream tool-call args).\n */\nexport type ChunkPart =\n | { readonly kind: \"text\"; readonly text: string }\n | { readonly kind: \"reasoning\"; readonly text: string }\n | { readonly kind: \"image\"; readonly source: ImageSource }\n | {\n readonly kind: \"function_call\"\n readonly id: Option.Option<string>\n readonly signature: Option.Option<string>\n readonly name: string\n readonly args: unknown\n }\n\nexport type ChunkResult = {\n readonly accumulator: Accumulator\n readonly parts: ReadonlyArray<ChunkPart>\n readonly finished: boolean\n}\n\nconst textToChunkParts = (p: typeof TextPart.Type): ReadonlyArray<ChunkPart> =>\n p.text.length === 0 ? [] : [{ kind: p.thought === true ? \"reasoning\" : \"text\", text: p.text }]\n\n/** Interim images drawn while planning are dropped, as thought text is. */\nconst inlineDataToChunkParts = (p: WireInlineDataPart): ReadonlyArray<ChunkPart> =>\n p.thought === true\n ? []\n : [\n {\n kind: \"image\",\n source: imageBase64(p.inlineData.data, p.inlineData.mimeType ?? \"image/png\"),\n },\n ]\n\nconst functionCallToChunkParts = (p: WireFunctionCallPart): ReadonlyArray<ChunkPart> => [\n {\n kind: \"function_call\",\n id: Option.fromNullishOr(p.functionCall.id),\n signature: Option.fromNullishOr(p.thoughtSignature),\n name: p.functionCall.name,\n args: p.functionCall.args ?? {},\n },\n]\n\n/** Parts are distinguished by which key they carry, not by a discriminator. */\nconst partToChunkParts: (p: typeof Part.Type) => ReadonlyArray<ChunkPart> = Match.type<\n typeof Part.Type\n>().pipe(\n Match.when({ text: Match.string }, textToChunkParts),\n Match.when({ inlineData: Match.defined }, inlineDataToChunkParts),\n Match.when({ functionCall: Match.defined }, functionCallToChunkParts),\n Match.exhaustive,\n)\n\nconst chunkParts = (chunk: WireChunk): ReadonlyArray<ChunkPart> =>\n pipe(chunk.candidates?.[0]?.content?.parts ?? [], Arr.flatMap(partToChunkParts))\n\nconst sumStrings = (parts: ReadonlyArray<ChunkPart>, kind: \"text\" | \"reasoning\"): string =>\n pipe(\n parts,\n Arr.filterMap((p) => (p.kind === kind ? Result.succeed(p.text) : Result.failVoid)),\n ).join(\"\")\n\nconst collectImages = (parts: ReadonlyArray<ChunkPart>): ReadonlyArray<ImageSource> =>\n pipe(\n parts,\n Arr.filterMap((p) => (p.kind === \"image\" ? Result.succeed(p.source) : Result.failVoid)),\n )\n\nconst collectFunctionCalls = (\n parts: ReadonlyArray<ChunkPart>,\n): ReadonlyArray<Extract<ChunkPart, { kind: \"function_call\" }>> =>\n pipe(\n parts,\n Arr.filterMap((p) => (p.kind === \"function_call\" ? Result.succeed(p) : Result.failVoid)),\n )\n\nconst mergeUsage = (\n prev: Accumulator[\"usage\"],\n next: WireChunk[\"usageMetadata\"],\n): Accumulator[\"usage\"] =>\n next === undefined\n ? prev\n : {\n ...prev,\n ...(next.promptTokenCount !== undefined && { input_tokens: next.promptTokenCount }),\n ...(next.candidatesTokenCount !== undefined && {\n output_tokens: next.candidatesTokenCount,\n }),\n ...(next.totalTokenCount !== undefined && { total_tokens: next.totalTokenCount }),\n ...(next.cachedContentTokenCount !== undefined && {\n input_tokens_details: { cached_tokens: next.cachedContentTokenCount },\n }),\n ...(next.thoughtsTokenCount !== undefined && {\n output_tokens_details: { reasoning_tokens: next.thoughtsTokenCount },\n }),\n }\n\n/**\n * Synthesize a stable `call_id` for a function call. Gemini 3 provides one\n * via `functionCall.id`; older models do not, so we fall back to\n * `<name>_<index>` based on prior calls' position in the accumulator.\n */\nconst synthesizeCallId = (\n call: Extract<ChunkPart, { kind: \"function_call\" }>,\n priorCalls: ReadonlyArray<AccumulatedFunctionCall>,\n): string =>\n Option.match(call.id, {\n onSome: (id) => id,\n onNone: () => `${call.name}_${priorCalls.length}`,\n })\n\nconst chunkCallToAccumulated = (\n prior: ReadonlyArray<AccumulatedFunctionCall>,\n call: Extract<ChunkPart, { kind: \"function_call\" }>,\n): AccumulatedFunctionCall => ({\n callId: synthesizeCallId(call, prior),\n name: call.name,\n providerId: call.id,\n signature: call.signature,\n // `functionCallToChunkParts` already replaced null/undefined with `{}`,\n // so `call.args` is always a JSON-encodable value here.\n arguments: JSON.stringify(call.args),\n})\n\nconst appendFunctionCalls = (\n prior: ReadonlyArray<AccumulatedFunctionCall>,\n fromChunk: ReadonlyArray<Extract<ChunkPart, { kind: \"function_call\" }>>,\n): ReadonlyArray<AccumulatedFunctionCall> =>\n fromChunk.reduce<ReadonlyArray<AccumulatedFunctionCall>>(\n (acc, call) => [...acc, chunkCallToAccumulated(acc, call)],\n prior,\n )\n\n// Grounding usually arrives on the final chunk, but merge across chunks and\n// de-dupe by url so a mid-stream metadata block is not lost or double-counted.\nconst mergeAnnotations = (\n prev: ReadonlyArray<Annotation>,\n next: ReadonlyArray<Annotation>,\n): ReadonlyArray<Annotation> =>\n next.length === 0 ? prev : Arr.dedupeWith(Arr.appendAll(prev, next), sameUrlCitation)\n\nexport const ingestChunk = (acc: Accumulator, chunk: WireChunk): ChunkResult => {\n const parts = chunkParts(chunk)\n const finishReason = Option.fromNullishOr(chunk.candidates?.[0]?.finishReason)\n return {\n parts,\n finished: Option.isSome(finishReason),\n accumulator: {\n text: acc.text + sumStrings(parts, \"text\"),\n reasoning: acc.reasoning + sumStrings(parts, \"reasoning\"),\n images: Arr.appendAll(acc.images, collectImages(parts)),\n functionCalls: appendFunctionCalls(acc.functionCalls, collectFunctionCalls(parts)),\n annotations: mergeAnnotations(\n acc.annotations,\n groundingToAnnotations(chunk.candidates?.[0]?.groundingMetadata),\n ),\n finishReason: Option.orElse(finishReason, () => acc.finishReason),\n usage: mergeUsage(acc.usage, chunk.usageMetadata),\n },\n }\n}\n\nconst reasoningItems = (acc: Accumulator): ReadonlyArray<HistoryItem> =>\n acc.reasoning.length > 0 ? [{ type: \"reasoning\", summary: acc.reasoning }] : []\n\n/**\n * Image models interleave text and image parts, and often answer with an\n * image and no prose at all, so the message exists when either is present.\n */\nconst assistantMessageItems = (acc: Accumulator): ReadonlyArray<HistoryItem> => {\n const content: ReadonlyArray<ContentBlock> = [\n ...(acc.text.length === 0\n ? []\n : [\n {\n type: \"output_text\" as const,\n text: acc.text,\n ...(acc.annotations.length > 0 && { annotations: acc.annotations }),\n },\n ]),\n ...acc.images.map((source) => ({ type: \"output_image\" as const, source })),\n ]\n return content.length === 0 ? [] : [{ type: \"message\", role: \"assistant\", content }]\n}\n\nconst functionCallItems = (acc: Accumulator): ReadonlyArray<HistoryItem> =>\n pipe(\n acc.functionCalls,\n Arr.map((c) => {\n const gemini = {\n ...(Option.isSome(c.providerId) && { id: c.providerId.value }),\n ...(Option.isSome(c.signature) && { thoughtSignature: c.signature.value }),\n }\n return {\n type: \"function_call\" as const,\n call_id: c.callId,\n name: c.name,\n arguments: c.arguments,\n ...(Object.keys(gemini).length > 0 && { providerData: { gemini } }),\n }\n }),\n )\n\nexport const accumulatorToTurn = (acc: Accumulator): Turn => ({\n stop_reason:\n acc.functionCalls.length > 0 ? (\"tool_calls\" as const) : finishReasonToStop(acc.finishReason),\n usage: { ...acc.usage },\n items: [...reasoningItems(acc), ...assistantMessageItems(acc), ...functionCallItems(acc)],\n})\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"codec.mjs","names":["Arr"],"sources":["../src/codec.ts"],"sourcesContent":["import { Array as Arr, Match, Option, Result, Schema, pipe } from \"effect\"\nimport { Base64 } from \"effect/encoding\"\nimport * as AiError from \"@effect-uai/core/AiError\"\nimport type { ImageSource } from \"@effect-uai/core/Image\"\nimport { imageBase64 } from \"@effect-uai/core/Image\"\nimport type {\n ContentBlock,\n ToolCall,\n InputImage,\n HistoryItem,\n Message,\n Annotation,\n} from \"@effect-uai/core/Items\"\nimport type { ToolDescriptor } from \"@effect-uai/core/Tool\"\nimport type { Turn } from \"@effect-uai/core/Turn\"\nimport type { CommonRequest } from \"@effect-uai/core/LanguageModel\"\n\n// ---------------------------------------------------------------------------\n// Wire schemas - the subset of Gemini's streamGenerateContent payload we\n// consume. Reference: https://ai.google.dev/api/generate-content\n// ---------------------------------------------------------------------------\n\nconst TextPart = Schema.Struct({\n text: Schema.String,\n /**\n * Gemini's flag for chain-of-thought parts. When `true`, the part is\n * reasoning trace, not the model's user-facing answer. Maps onto\n * `reasoning_delta { kind: \"trace\" }` in the canonical view.\n */\n thought: Schema.optional(Schema.Boolean),\n})\n\n/**\n * Gemini function-call part. Args are delivered as a whole JSON *object*\n * in a single chunk (Gemini does not stream tool-call args). On Gemini 3\n * the response also carries an `id` per call, which we echo back on the\n * corresponding `functionResponse`.\n */\nconst FunctionCallPart = Schema.Struct({\n functionCall: Schema.Struct({\n id: Schema.optional(Schema.String),\n name: Schema.String,\n args: Schema.optional(Schema.Unknown),\n }),\n // Gemini 3 thinking models attach an opaque signature to each function-call\n // part that must be replayed on the next request, or the call is rejected.\n thoughtSignature: Schema.optional(Schema.String),\n})\n\n/**\n * An image the model drew, as a part of its own turn. Only image models\n * emit these, and only when the request asked for the IMAGE modality.\n * `thought: true` marks an interim image drawn while planning, which is\n * not the answer and is dropped the same way thought text is.\n */\nconst InlineDataPart = Schema.Struct({\n inlineData: Schema.Struct({\n mimeType: Schema.optional(Schema.String),\n data: Schema.String,\n }),\n thought: Schema.optional(Schema.Boolean),\n})\n\nconst Part = Schema.Union([TextPart, FunctionCallPart, InlineDataPart])\ntype WireFunctionCallPart = typeof FunctionCallPart.Type\ntype WireInlineDataPart = typeof InlineDataPart.Type\n\nconst Content = Schema.Struct({\n role: Schema.optional(Schema.String),\n parts: Schema.optional(Schema.Array(Part)),\n})\n\n// Google grounding metadata. On a grounded response the candidate carries\n// `groundingChunks[].web.{uri,title}` - the structured form of the inline `[n]`\n// / trailing `**Sources:**` list the model renders into the answer text.\n// Decoded defensively (every field optional) as it is absent on ungrounded\n// turns. Shared with the Interactions deep-research surface via `codec.ts`.\nconst GroundingChunk = Schema.Struct({\n web: Schema.optional(\n Schema.NullOr(\n Schema.Struct({\n uri: Schema.optional(Schema.NullOr(Schema.String)),\n title: Schema.optional(Schema.NullOr(Schema.String)),\n }),\n ),\n ),\n})\nexport const GroundingMetadata = Schema.Struct({\n groundingChunks: Schema.optional(Schema.NullOr(Schema.Array(GroundingChunk))),\n})\nexport type GroundingMetadata = typeof GroundingMetadata.Type\n\n// Two citations are the same source when they point at the same url.\nconst sameUrlCitation = (a: Annotation, b: Annotation): boolean =>\n a.type === \"url_citation\" && b.type === \"url_citation\" && a.url === b.url\n\n// Grounding chunks → `url_citation` annotations, de-duped by url across every\n// metadata block passed. `web.uri` is a `grounding-api-redirect` URL and\n// `web.title` the bare domain; both are kept as-is (the redirect resolves to\n// the real page).\nexport const groundingToAnnotations = (\n ...metas: ReadonlyArray<GroundingMetadata | null | undefined>\n): ReadonlyArray<Annotation> =>\n pipe(\n metas,\n Arr.flatMap((meta) => meta?.groundingChunks ?? []),\n Arr.filterMap((chunk) =>\n chunk.web?.uri == null\n ? Result.failVoid\n : Result.succeed<Annotation>({\n type: \"url_citation\",\n url: chunk.web.uri,\n title: chunk.web.title ?? chunk.web.uri,\n }),\n ),\n Arr.dedupeWith(sameUrlCitation),\n )\n\nconst Candidate = Schema.Struct({\n content: Schema.optional(Content),\n groundingMetadata: Schema.optional(GroundingMetadata),\n finishReason: Schema.optional(Schema.String),\n index: Schema.optional(Schema.Number),\n})\n\nconst UsageMetadata = Schema.Struct({\n promptTokenCount: Schema.optional(Schema.Number),\n candidatesTokenCount: Schema.optional(Schema.Number),\n totalTokenCount: Schema.optional(Schema.Number),\n cachedContentTokenCount: Schema.optional(Schema.Number),\n thoughtsTokenCount: Schema.optional(Schema.Number),\n})\n\nexport const WireChunk = Schema.Struct({\n candidates: Schema.optional(Schema.Array(Candidate)),\n usageMetadata: Schema.optional(UsageMetadata),\n})\nexport type WireChunk = typeof WireChunk.Type\n\n// ---------------------------------------------------------------------------\n// History → request body\n// ---------------------------------------------------------------------------\n\ntype RequestPart =\n | { readonly text: string }\n | { readonly inlineData: { readonly mimeType: string; readonly data: string } }\n | {\n readonly functionCall: {\n readonly id?: string\n readonly name: string\n readonly args: unknown\n }\n readonly thoughtSignature?: string\n }\n | {\n readonly functionResponse: {\n readonly id?: string\n readonly name: string\n readonly response: Record<string, unknown>\n }\n }\n\ntype RequestContent = {\n readonly role: \"user\" | \"model\"\n readonly parts: ReadonlyArray<RequestPart>\n}\n\ntype RequestSystemInstruction = {\n readonly parts: ReadonlyArray<{ readonly text: string }>\n}\n\n/**\n * Gemini's tool declaration. A `tools[]` entry is either a function-declaration\n * block (translated from `ToolDescriptor`s) or one of the native hosted-tool\n * entries. The native entries are empty objects keyed camelCase per the REST\n * v1beta `Tool` object, and sit as siblings of the declarations in the same\n * `tools` array.\n */\nexport type RequestTool =\n | {\n readonly functionDeclarations: ReadonlyArray<{\n readonly name: string\n readonly description: string\n readonly parameters: Record<string, unknown>\n }>\n }\n | { readonly googleSearch: {} }\n | { readonly urlContext: {} }\n | { readonly codeExecution: {} }\n\ntype RequestToolConfig = {\n readonly functionCallingConfig: {\n readonly mode: \"AUTO\" | \"ANY\" | \"NONE\"\n readonly allowedFunctionNames?: ReadonlyArray<string>\n }\n}\n\nexport type ThinkingConfig = {\n readonly thinkingBudget: number\n}\n\nexport type ImageConfig = {\n readonly aspectRatio?: string\n readonly imageSize?: string\n}\n\nexport type GenerationConfig = {\n readonly temperature?: number\n readonly maxOutputTokens?: number\n readonly topP?: number\n readonly thinkingConfig?: ThinkingConfig\n /** Image models need `[\"TEXT\", \"IMAGE\"]` or they answer in prose only. */\n readonly responseModalities?: ReadonlyArray<\"TEXT\" | \"IMAGE\">\n readonly imageConfig?: ImageConfig\n /** Set together with `responseJsonSchema` to constrain output to JSON. */\n readonly responseMimeType?: string\n /** JSON Schema constraint on the output. */\n readonly responseJsonSchema?: Record<string, unknown>\n}\n\nexport type RequestBody = {\n readonly contents: ReadonlyArray<RequestContent>\n readonly systemInstruction?: RequestSystemInstruction\n readonly generationConfig?: GenerationConfig\n readonly tools?: ReadonlyArray<RequestTool>\n readonly toolConfig?: RequestToolConfig\n}\n\nconst blockText = Match.type<ContentBlock>().pipe(\n Match.discriminatorsExhaustive(\"type\")({\n input_text: (b) => b.text,\n input_image: () => \"\",\n output_text: (b) => b.text,\n output_image: () => \"\",\n refusal: (b) => b.text,\n }),\n)\n\nconst messageText = (message: Message): string => message.content.map(blockText).join(\"\")\n\n/**\n * Gemini's `inlineData` form expects a base64 payload. URL-form images\n * would need to go through Gemini's Files API (upload then `fileData`\n * with the returned URI); pre-uploading isn't free, so we skip those for\n * now and document as a follow-up.\n */\nconst imageSourceToParts = Match.type<InputImage[\"source\"]>().pipe(\n Match.tag(\"url\", (): ReadonlyArray<RequestPart> => []),\n Match.tag(\"base64\", (s): ReadonlyArray<RequestPart> => [\n { inlineData: { mimeType: s.mimeType, data: s.base64 } },\n ]),\n Match.tag(\"bytes\", (s): ReadonlyArray<RequestPart> => [\n { inlineData: { mimeType: s.mimeType, data: Base64.encode(s.bytes) } },\n ]),\n Match.exhaustive,\n)\n\nconst blockToParts = Match.type<ContentBlock>().pipe(\n Match.discriminatorsExhaustive(\"type\")({\n input_text: (b): ReadonlyArray<RequestPart> => (b.text.length === 0 ? [] : [{ text: b.text }]),\n input_image: (b): ReadonlyArray<RequestPart> => imageSourceToParts(b.source),\n output_text: (b): ReadonlyArray<RequestPart> => (b.text.length === 0 ? [] : [{ text: b.text }]),\n // An image the model drew goes back as a model-role `inlineData` part,\n // which is how a multi-turn edit keeps its subject.\n output_image: (b): ReadonlyArray<RequestPart> => imageSourceToParts(b.source),\n // Refusals are assistant-side content; they don't round-trip into Gemini's\n // request body as parts. Skip.\n refusal: (): ReadonlyArray<RequestPart> => [],\n }),\n)\n\nconst messageToContent = (message: Message): Result.Result<RequestContent, void> => {\n const parts = pipe(message.content, Arr.flatMap(blockToParts))\n if (parts.length === 0) return Result.failVoid\n return Match.value(message.role).pipe(\n Match.when(\"user\", () => Result.succeed({ role: \"user\" as const, parts })),\n Match.when(\"assistant\", () => Result.succeed({ role: \"model\" as const, parts })),\n Match.when(\"system\", () => Result.failVoid),\n Match.exhaustive,\n )\n}\n\nconst systemMessageText = (message: Message): Result.Result<string, void> => {\n if (message.role !== \"system\") return Result.failVoid\n const text = messageText(message)\n return text.length === 0 ? Result.failVoid : Result.succeed(text)\n}\n\nconst allMessages = (history: ReadonlyArray<HistoryItem>): ReadonlyArray<Message> =>\n pipe(\n history,\n Arr.filterMap((item) => (item.type === \"message\" ? Result.succeed(item) : Result.failVoid)),\n )\n\n// ---------------------------------------------------------------------------\n// Function-call round-trip\n//\n// `ToolCall.arguments` and `ToolCallOutput.output` are JSON-encoded\n// strings; Gemini's `functionCall.args` and `functionResponse.response`\n// expect parsed JSON *objects*. Decode via Schema:\n// - object payload → use as-is\n// - scalar / array / malformed → wrap as `{ output: <raw string> }` so the\n// model still sees *some* response without crashing the request.\n// ---------------------------------------------------------------------------\n\nconst JsonObject = Schema.Record(Schema.String, Schema.Unknown)\nconst decodeJsonObject = Schema.decodeResult(Schema.fromJsonString(JsonObject))\n\nconst parsedJsonObject =\n (fallback: (raw: string) => Record<string, unknown>) =>\n (encoded: string): Record<string, unknown> =>\n pipe(\n decodeJsonObject(encoded),\n Result.match({\n onSuccess: (v) => v,\n onFailure: () => fallback(encoded),\n }),\n )\n\nconst parsedArgs = parsedJsonObject(() => ({}))\n/** A `ToolCallOutput.output` string as the object `functionResponse` wants. */\nexport const parsedResponse = parsedJsonObject((raw) => ({ output: raw }))\n\n/**\n * `ToolCallOutput` only carries `call_id`; Gemini's `functionResponse`\n * requires the declared function `name`. Resolve the name by scanning prior\n * `function_call` items in the history for a matching `call_id`. If we\n * cannot resolve, fall back to `call_id` as the name - imperfect but\n * preserves stream shape so the model sees *some* response.\n */\nconst isFunctionCallItem = (item: HistoryItem): item is ToolCall => item.type === \"function_call\"\n\nconst nameForCallId = (\n history: ReadonlyArray<HistoryItem>,\n call_id: string,\n): Option.Option<string> =>\n pipe(\n history,\n Arr.findFirst((item): item is ToolCall => isFunctionCallItem(item) && item.call_id === call_id),\n Option.map((f) => f.name),\n )\n\n/**\n * Extract the Gemini-3 wire id and thought signature we stashed in\n * `providerData` on the way out. Schema-driven so the shape lives in one\n * place; failure or absence → `Option.none()`.\n */\nconst ProviderDataGemini = Schema.Struct({\n gemini: Schema.Struct({\n id: Schema.optional(Schema.String),\n thoughtSignature: Schema.optional(Schema.String),\n }),\n})\nconst decodeGemini = Schema.decodeUnknownResult(ProviderDataGemini)\n\nconst geminiField = (\n item: ToolCall,\n pick: (g: {\n readonly id?: string | undefined\n readonly thoughtSignature?: string | undefined\n }) => string | undefined,\n): Option.Option<string> =>\n pipe(\n decodeGemini(item.providerData),\n Result.match({\n onSuccess: (d) => Option.fromNullishOr(pick(d.gemini)),\n onFailure: () => Option.none<string>(),\n }),\n )\n\nconst providerIdFor = (item: ToolCall): Option.Option<string> => geminiField(item, (g) => g.id)\n\n// The originating call's Gemini id, looked up from history by our `call_id`.\n// Gemini 3 maps a `functionResponse` back to its call by this id, so parallel\n// calls to the same function are mis-paired if we drop it.\nconst providerIdForCallId = (\n history: ReadonlyArray<HistoryItem>,\n call_id: string,\n): Option.Option<string> =>\n pipe(\n history,\n Arr.findFirst((item): item is ToolCall => isFunctionCallItem(item) && item.call_id === call_id),\n Option.flatMap(providerIdFor),\n )\n\nconst signatureFor = (item: ToolCall): Option.Option<string> =>\n geminiField(item, (g) => g.thoughtSignature)\n\nconst itemToContent =\n (history: ReadonlyArray<HistoryItem>) =>\n (item: HistoryItem): Result.Result<RequestContent, void> =>\n Match.value(item).pipe(\n Match.discriminatorsExhaustive(\"type\")({\n message: messageToContent,\n function_call: (f) =>\n Result.succeed({\n role: \"model\" as const,\n parts: [\n {\n ...Option.match(signatureFor(f), {\n onSome: (thoughtSignature) => ({ thoughtSignature }),\n onNone: () => ({}),\n }),\n functionCall: {\n ...Option.match(providerIdFor(f), {\n onSome: (id) => ({ id }),\n onNone: () => ({}),\n }),\n name: f.name,\n args: parsedArgs(f.arguments),\n },\n },\n ],\n }),\n function_call_output: (o) =>\n Result.succeed({\n role: \"user\" as const,\n parts: [\n {\n functionResponse: {\n ...Option.match(providerIdForCallId(history, o.call_id), {\n onSome: (id) => ({ id }),\n onNone: () => ({}),\n }),\n name: Option.getOrElse(nameForCallId(history, o.call_id), () => o.call_id),\n response: parsedResponse(o.output),\n },\n },\n ],\n }),\n reasoning: () => Result.failVoid,\n }),\n )\n\n// ---------------------------------------------------------------------------\n// Tool descriptors → Gemini `functionDeclarations`. Gemini accepts only a\n// strict OpenAPI 3.0 subset for `parameters`; strip JSON-Schema keys it\n// rejects (`$schema`, `$ref`, `additionalProperties`, `oneOf`,\n// `definitions`).\n// ---------------------------------------------------------------------------\n\nconst UNSUPPORTED_SCHEMA_KEYS: ReadonlySet<string> = new Set([\n \"$schema\",\n \"$ref\",\n \"$defs\",\n \"definitions\",\n \"additionalProperties\",\n \"oneOf\",\n])\n\nconst sanitizeSchema = (schema: unknown): unknown => {\n if (Array.isArray(schema)) return schema.map(sanitizeSchema)\n if (schema === null || typeof schema !== \"object\") return schema\n return pipe(\n Object.entries(schema as Record<string, unknown>),\n Arr.filterMap(([k, v]) =>\n UNSUPPORTED_SCHEMA_KEYS.has(k)\n ? Result.failVoid\n : Result.succeed([k, sanitizeSchema(v)] as const),\n ),\n Object.fromEntries,\n )\n}\n\nexport const toolDescriptorsToTools = (\n tools: ReadonlyArray<ToolDescriptor>,\n): ReadonlyArray<RequestTool> =>\n tools.length === 0\n ? []\n : [\n {\n functionDeclarations: tools.map((t) => ({\n name: t.name,\n description: t.description,\n parameters: sanitizeSchema(t.inputSchema) as Record<string, unknown>,\n })),\n },\n ]\n\n/**\n * Map our cross-provider `toolChoice` onto Gemini's `functionCallingConfig`.\n * Gemini honours the same three modes plus a function allow-list, so the\n * choice is mapped, not dropped. `undefined` keeps the API default (`AUTO`).\n */\nconst toolChoiceToFunctionCallingConfig = (\n toolChoice: CommonRequest[\"toolChoice\"],\n): RequestToolConfig[\"functionCallingConfig\"] =>\n Match.value(toolChoice ?? \"auto\").pipe(\n Match.when(\"auto\", () => ({ mode: \"AUTO\" as const })),\n Match.when(\"required\", () => ({ mode: \"ANY\" as const })),\n Match.when(\"none\", () => ({ mode: \"NONE\" as const })),\n Match.orElse((tc) => ({ mode: \"ANY\" as const, allowedFunctionNames: [tc.name] })),\n )\n\n// ---------------------------------------------------------------------------\n// HTTP failure mapping, shared by every Google surface\n// ---------------------------------------------------------------------------\n\n/** `provider` names the surface that failed, so errors read `gemini` or `lyria`. */\nexport const transportFailure =\n (provider: string) =>\n (cause: unknown): AiError.AiError =>\n new AiError.Unavailable({ provider, raw: cause })\n\n/** 413 is the inline-payload cap, which is a context limit on every surface. */\nexport const httpStatusError =\n (provider: string) =>\n (status: number, body: string): AiError.AiError =>\n Match.value(status).pipe(\n Match.when(429, (): AiError.AiError => new AiError.RateLimited({ provider, raw: body })),\n Match.whenOr(408, 504, (): AiError.AiError => new AiError.Timeout({ provider, raw: body })),\n Match.when(\n 401,\n (): AiError.AiError => new AiError.AuthFailed({ provider, subtype: \"auth\", raw: body }),\n ),\n Match.when(\n 403,\n (): AiError.AiError =>\n new AiError.AuthFailed({ provider, subtype: \"permission\", raw: body }),\n ),\n Match.when(\n 402,\n (): AiError.AiError => new AiError.AuthFailed({ provider, subtype: \"billing\", raw: body }),\n ),\n Match.when(\n 413,\n (): AiError.AiError => new AiError.ContextLengthExceeded({ provider, raw: body }),\n ),\n Match.when(\n (n) => n >= 500,\n (n): AiError.AiError => new AiError.Unavailable({ provider, status: n, raw: body }),\n ),\n Match.orElse((): AiError.AiError => new AiError.InvalidRequest({ provider, raw: body })),\n )\n\n/**\n * URL-form images need Gemini's Files API (upload, then `fileData`); we\n * don't pre-upload, so such a part would otherwise vanish from the request.\n * The caller fails the request with `Unsupported` instead of silently\n * dropping the image.\n */\nexport const hasUrlImageSource = (history: ReadonlyArray<HistoryItem>): boolean =>\n history.some(\n (item) =>\n item.type === \"message\" &&\n item.content.some((b) => b.type === \"input_image\" && b.source._tag === \"url\"),\n )\n\nexport const buildRequestBody = (\n history: ReadonlyArray<HistoryItem>,\n generationConfig: Option.Option<GenerationConfig>,\n tools: ReadonlyArray<ToolDescriptor> = [],\n providerToolEntries: ReadonlyArray<RequestTool> = [],\n toolChoice: CommonRequest[\"toolChoice\"] = undefined,\n): RequestBody => {\n const systemTexts = pipe(allMessages(history), Arr.filterMap(systemMessageText))\n const contents = pipe(history, Arr.filterMap(itemToContent(history)))\n const functionTools = toolDescriptorsToTools(tools)\n const requestTools = [...functionTools, ...providerToolEntries]\n return {\n contents,\n ...(systemTexts.length > 0 && {\n systemInstruction: { parts: [{ text: systemTexts.join(\"\\n\") }] },\n }),\n ...Option.match(generationConfig, {\n onNone: () => ({}),\n onSome: (cfg) => ({ generationConfig: cfg }),\n }),\n ...(requestTools.length > 0 && { tools: requestTools }),\n // Only force a function-calling mode when there are function declarations;\n // a grounding-only request must keep the API default.\n ...(functionTools.length > 0 && {\n toolConfig: { functionCallingConfig: toolChoiceToFunctionCallingConfig(toolChoice) },\n }),\n }\n}\n\n// ---------------------------------------------------------------------------\n// Stream-level state - accumulate chunk text + final usage/finish.\n//\n// `Accumulator` is immutable; `ingestChunk` returns a fresh one per chunk.\n// Drive it via `Stream.mapAccum` in the consumer.\n// ---------------------------------------------------------------------------\n\nconst finishReasonToStop = (reason: Option.Option<string>): Turn[\"stop_reason\"] =>\n Option.match(reason, {\n onNone: () => \"stop\" as const,\n onSome: (r) => (r === \"MAX_TOKENS\" ? (\"max_tokens\" as const) : (\"stop\" as const)),\n })\n\nexport type AccumulatedFunctionCall = {\n /** Synthesized id-or-name we surface as `call_id` on the canonical item. */\n readonly callId: string\n readonly name: string\n /** Wire id from Gemini 3, when present - echoed back on `functionResponse`. */\n readonly providerId: Option.Option<string>\n /** Thought signature from Gemini 3, replayed on the next request's part. */\n readonly signature: Option.Option<string>\n /** Args as JSON-encoded string, mirroring `Items.ToolCall.arguments`. */\n readonly arguments: string\n}\n\nexport type Accumulator = {\n readonly text: string\n readonly reasoning: string\n /** Images the model drew, in emission order. Image models only. */\n readonly images: ReadonlyArray<ImageSource>\n readonly functionCalls: ReadonlyArray<AccumulatedFunctionCall>\n /** Grounding citations, accumulated (de-duped by url) across chunks. */\n readonly annotations: ReadonlyArray<Annotation>\n readonly finishReason: Option.Option<string>\n readonly usage: {\n readonly input_tokens?: number\n readonly output_tokens?: number\n readonly total_tokens?: number\n readonly input_tokens_details?: { readonly cached_tokens?: number }\n readonly output_tokens_details?: { readonly reasoning_tokens?: number }\n }\n}\n\nexport const emptyAccumulator: Accumulator = {\n text: \"\",\n reasoning: \"\",\n images: [],\n functionCalls: [],\n annotations: [],\n finishReason: Option.none(),\n usage: {},\n}\n\n/**\n * One part's worth of streamable output. `text` and `reasoning` are\n * incremental string deltas; `function_call` arrives whole-in-one-chunk\n * (Gemini does not stream tool-call args).\n */\nexport type ChunkPart =\n | { readonly kind: \"text\"; readonly text: string }\n | { readonly kind: \"reasoning\"; readonly text: string }\n | { readonly kind: \"image\"; readonly source: ImageSource }\n | {\n readonly kind: \"function_call\"\n readonly id: Option.Option<string>\n readonly signature: Option.Option<string>\n readonly name: string\n readonly args: unknown\n }\n\nexport type ChunkResult = {\n readonly accumulator: Accumulator\n readonly parts: ReadonlyArray<ChunkPart>\n readonly finished: boolean\n}\n\nconst textToChunkParts = (p: typeof TextPart.Type): ReadonlyArray<ChunkPart> =>\n p.text.length === 0 ? [] : [{ kind: p.thought === true ? \"reasoning\" : \"text\", text: p.text }]\n\n/** Interim images drawn while planning are dropped, as thought text is. */\nconst inlineDataToChunkParts = (p: WireInlineDataPart): ReadonlyArray<ChunkPart> =>\n p.thought === true\n ? []\n : [\n {\n kind: \"image\",\n source: imageBase64(p.inlineData.data, p.inlineData.mimeType ?? \"image/png\"),\n },\n ]\n\nconst functionCallToChunkParts = (p: WireFunctionCallPart): ReadonlyArray<ChunkPart> => [\n {\n kind: \"function_call\",\n id: Option.fromNullishOr(p.functionCall.id),\n signature: Option.fromNullishOr(p.thoughtSignature),\n name: p.functionCall.name,\n args: p.functionCall.args ?? {},\n },\n]\n\n/** Parts are distinguished by which key they carry, not by a discriminator. */\nconst partToChunkParts: (p: typeof Part.Type) => ReadonlyArray<ChunkPart> = Match.type<\n typeof Part.Type\n>().pipe(\n Match.when({ text: Match.string }, textToChunkParts),\n Match.when({ inlineData: Match.defined }, inlineDataToChunkParts),\n Match.when({ functionCall: Match.defined }, functionCallToChunkParts),\n Match.exhaustive,\n)\n\nconst chunkParts = (chunk: WireChunk): ReadonlyArray<ChunkPart> =>\n pipe(chunk.candidates?.[0]?.content?.parts ?? [], Arr.flatMap(partToChunkParts))\n\nconst sumStrings = (parts: ReadonlyArray<ChunkPart>, kind: \"text\" | \"reasoning\"): string =>\n pipe(\n parts,\n Arr.filterMap((p) => (p.kind === kind ? Result.succeed(p.text) : Result.failVoid)),\n ).join(\"\")\n\nconst collectImages = (parts: ReadonlyArray<ChunkPart>): ReadonlyArray<ImageSource> =>\n pipe(\n parts,\n Arr.filterMap((p) => (p.kind === \"image\" ? Result.succeed(p.source) : Result.failVoid)),\n )\n\nconst collectFunctionCalls = (\n parts: ReadonlyArray<ChunkPart>,\n): ReadonlyArray<Extract<ChunkPart, { kind: \"function_call\" }>> =>\n pipe(\n parts,\n Arr.filterMap((p) => (p.kind === \"function_call\" ? Result.succeed(p) : Result.failVoid)),\n )\n\nconst mergeUsage = (\n prev: Accumulator[\"usage\"],\n next: WireChunk[\"usageMetadata\"],\n): Accumulator[\"usage\"] =>\n next === undefined\n ? prev\n : {\n ...prev,\n ...(next.promptTokenCount !== undefined && { input_tokens: next.promptTokenCount }),\n ...(next.candidatesTokenCount !== undefined && {\n output_tokens: next.candidatesTokenCount,\n }),\n ...(next.totalTokenCount !== undefined && { total_tokens: next.totalTokenCount }),\n ...(next.cachedContentTokenCount !== undefined && {\n input_tokens_details: { cached_tokens: next.cachedContentTokenCount },\n }),\n ...(next.thoughtsTokenCount !== undefined && {\n output_tokens_details: { reasoning_tokens: next.thoughtsTokenCount },\n }),\n }\n\n/**\n * Synthesize a stable `call_id` for a function call. Gemini 3 provides one\n * via `functionCall.id`; older models do not, so we fall back to\n * `<name>_<index>` based on prior calls' position in the accumulator.\n */\nconst synthesizeCallId = (\n call: Extract<ChunkPart, { kind: \"function_call\" }>,\n priorCalls: ReadonlyArray<AccumulatedFunctionCall>,\n): string =>\n Option.match(call.id, {\n onSome: (id) => id,\n onNone: () => `${call.name}_${priorCalls.length}`,\n })\n\nconst chunkCallToAccumulated = (\n prior: ReadonlyArray<AccumulatedFunctionCall>,\n call: Extract<ChunkPart, { kind: \"function_call\" }>,\n): AccumulatedFunctionCall => ({\n callId: synthesizeCallId(call, prior),\n name: call.name,\n providerId: call.id,\n signature: call.signature,\n // `functionCallToChunkParts` already replaced null/undefined with `{}`,\n // so `call.args` is always a JSON-encodable value here.\n arguments: JSON.stringify(call.args),\n})\n\nconst appendFunctionCalls = (\n prior: ReadonlyArray<AccumulatedFunctionCall>,\n fromChunk: ReadonlyArray<Extract<ChunkPart, { kind: \"function_call\" }>>,\n): ReadonlyArray<AccumulatedFunctionCall> =>\n fromChunk.reduce<ReadonlyArray<AccumulatedFunctionCall>>(\n (acc, call) => [...acc, chunkCallToAccumulated(acc, call)],\n prior,\n )\n\n// Grounding usually arrives on the final chunk, but merge across chunks and\n// de-dupe by url so a mid-stream metadata block is not lost or double-counted.\nconst mergeAnnotations = (\n prev: ReadonlyArray<Annotation>,\n next: ReadonlyArray<Annotation>,\n): ReadonlyArray<Annotation> =>\n next.length === 0 ? prev : Arr.dedupeWith(Arr.appendAll(prev, next), sameUrlCitation)\n\nexport const ingestChunk = (acc: Accumulator, chunk: WireChunk): ChunkResult => {\n const parts = chunkParts(chunk)\n const finishReason = Option.fromNullishOr(chunk.candidates?.[0]?.finishReason)\n return {\n parts,\n finished: Option.isSome(finishReason),\n accumulator: {\n text: acc.text + sumStrings(parts, \"text\"),\n reasoning: acc.reasoning + sumStrings(parts, \"reasoning\"),\n images: Arr.appendAll(acc.images, collectImages(parts)),\n functionCalls: appendFunctionCalls(acc.functionCalls, collectFunctionCalls(parts)),\n annotations: mergeAnnotations(\n acc.annotations,\n groundingToAnnotations(chunk.candidates?.[0]?.groundingMetadata),\n ),\n finishReason: Option.orElse(finishReason, () => acc.finishReason),\n usage: mergeUsage(acc.usage, chunk.usageMetadata),\n },\n }\n}\n\nconst reasoningItems = (acc: Accumulator): ReadonlyArray<HistoryItem> =>\n acc.reasoning.length > 0 ? [{ type: \"reasoning\", summary: acc.reasoning }] : []\n\n/**\n * Image models interleave text and image parts, and often answer with an\n * image and no prose at all, so the message exists when either is present.\n */\nconst assistantMessageItems = (acc: Accumulator): ReadonlyArray<HistoryItem> => {\n const content: ReadonlyArray<ContentBlock> = [\n ...(acc.text.length === 0\n ? []\n : [\n {\n type: \"output_text\" as const,\n text: acc.text,\n ...(acc.annotations.length > 0 && { annotations: acc.annotations }),\n },\n ]),\n ...acc.images.map((source) => ({ type: \"output_image\" as const, source })),\n ]\n return content.length === 0 ? [] : [{ type: \"message\", role: \"assistant\", content }]\n}\n\nconst functionCallItems = (acc: Accumulator): ReadonlyArray<HistoryItem> =>\n pipe(\n acc.functionCalls,\n Arr.map((c) => {\n const gemini = {\n ...(Option.isSome(c.providerId) && { id: c.providerId.value }),\n ...(Option.isSome(c.signature) && { thoughtSignature: c.signature.value }),\n }\n return {\n type: \"function_call\" as const,\n call_id: c.callId,\n name: c.name,\n arguments: c.arguments,\n ...(Object.keys(gemini).length > 0 && { providerData: { gemini } }),\n }\n }),\n )\n\nexport const accumulatorToTurn = (acc: Accumulator): Turn => ({\n stop_reason:\n acc.functionCalls.length > 0 ? (\"tool_calls\" as const) : finishReasonToStop(acc.finishReason),\n usage: { ...acc.usage },\n items: [...reasoningItems(acc), ...assistantMessageItems(acc), ...functionCallItems(acc)],\n})\n"],"mappings":"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"}
|