@tryhamster/gerbil 1.6.3 → 1.7.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.
Files changed (90) hide show
  1. package/dist/{architectures-CpmH4Gha.mjs → architectures-BHkqQ9xp.mjs} +1 -1
  2. package/dist/{architectures-CpmH4Gha.mjs.map → architectures-BHkqQ9xp.mjs.map} +1 -1
  3. package/dist/cli.mjs +13 -13
  4. package/dist/cli.mjs.map +1 -1
  5. package/dist/{defaults-KnrRSIeJ.mjs → defaults-C_bJK9zs.mjs} +1 -1
  6. package/dist/{defaults-KnrRSIeJ.mjs.map → defaults-C_bJK9zs.mjs.map} +1 -1
  7. package/dist/frameworks/express.d.mts +2 -2
  8. package/dist/frameworks/express.mjs +3 -3
  9. package/dist/frameworks/fastify.d.mts +2 -2
  10. package/dist/frameworks/fastify.mjs +2 -2
  11. package/dist/frameworks/hono.d.mts +2 -2
  12. package/dist/frameworks/hono.mjs +2 -2
  13. package/dist/frameworks/next.d.mts +4 -4
  14. package/dist/frameworks/next.mjs +2 -2
  15. package/dist/frameworks/react.d.mts +2 -2
  16. package/dist/frameworks/trpc.d.mts +2 -2
  17. package/dist/frameworks/trpc.mjs +2 -2
  18. package/dist/gerbil-BKCknsZ6.mjs +4 -0
  19. package/dist/{gerbil-qJhKR8JR.mjs → gerbil-CJjj7BD_.mjs} +5 -5
  20. package/dist/{gerbil-qJhKR8JR.mjs.map → gerbil-CJjj7BD_.mjs.map} +1 -1
  21. package/dist/{gerbil-BHPSiECS.d.mts → gerbil-D7gfxZXW.d.mts} +4 -4
  22. package/dist/{gerbil-BHPSiECS.d.mts.map → gerbil-D7gfxZXW.d.mts.map} +1 -1
  23. package/dist/gpu/hooks.d.mts +3 -3
  24. package/dist/gpu/hooks.mjs +2 -2
  25. package/dist/gpu/index.d.mts +2 -2
  26. package/dist/gpu/index.mjs +4 -4
  27. package/dist/{gpu-BZVtzX9N.mjs → gpu-DOK8RgIN.mjs} +4 -4
  28. package/dist/{gpu-BZVtzX9N.mjs.map → gpu-DOK8RgIN.mjs.map} +1 -1
  29. package/dist/{index-CRDf-nS4.d.mts → index-B3tjyDJI.d.mts} +2 -2
  30. package/dist/{index-CRDf-nS4.d.mts.map → index-B3tjyDJI.d.mts.map} +1 -1
  31. package/dist/{index-CZVIHkaH.d.mts → index-HgdjgsLb.d.mts} +2 -2
  32. package/dist/{index-CZVIHkaH.d.mts.map → index-HgdjgsLb.d.mts.map} +1 -1
  33. package/dist/index.d.mts +6 -6
  34. package/dist/index.mjs +11 -11
  35. package/dist/indexeddb-store-B6HYVgQ_.mjs +4 -0
  36. package/dist/{indexeddb-store-BWIMtxxH.mjs → indexeddb-store-BiamQL7K.mjs} +2 -2
  37. package/dist/{indexeddb-store-BWIMtxxH.mjs.map → indexeddb-store-BiamQL7K.mjs.map} +1 -1
  38. package/dist/integrations/ai-sdk.d.mts +2 -2
  39. package/dist/integrations/ai-sdk.mjs +2 -2
  40. package/dist/integrations/langchain.d.mts +2 -2
  41. package/dist/integrations/langchain.mjs +2 -2
  42. package/dist/integrations/llamaindex.d.mts +2 -2
  43. package/dist/integrations/llamaindex.mjs +2 -2
  44. package/dist/integrations/mcp-client.mjs +2 -2
  45. package/dist/integrations/mcp.d.mts +4 -4
  46. package/dist/integrations/mcp.mjs +5 -5
  47. package/dist/{mcp-DIygAeaN.mjs → mcp-DaQJ2bie.mjs} +3 -3
  48. package/dist/{mcp-DIygAeaN.mjs.map → mcp-DaQJ2bie.mjs.map} +1 -1
  49. package/dist/memory/index.d.mts +2 -2
  50. package/dist/memory/index.mjs +4 -4
  51. package/dist/{memory-Dj0J1v88.mjs → memory-BCKc_Jfp.mjs} +2 -2
  52. package/dist/{memory-Dj0J1v88.mjs.map → memory-BCKc_Jfp.mjs.map} +1 -1
  53. package/dist/memory-BwYh_DZh.mjs +4 -0
  54. package/dist/{memory-DVN0MnIG.mjs → memory-Dnjhc1du.mjs} +2 -2
  55. package/dist/{memory-DVN0MnIG.mjs.map → memory-Dnjhc1du.mjs.map} +1 -1
  56. package/dist/moonshine-stt-CrTu77ps.mjs +4 -0
  57. package/dist/{moonshine-stt-BFIm_Xxk.mjs → moonshine-stt-Teic6SbK.mjs} +2 -2
  58. package/dist/{moonshine-stt-BFIm_Xxk.mjs.map → moonshine-stt-Teic6SbK.mjs.map} +1 -1
  59. package/dist/{one-liner-CGozk7xR.mjs → one-liner-BnBYesLF.mjs} +2 -2
  60. package/dist/{one-liner-CGozk7xR.mjs.map → one-liner-BnBYesLF.mjs.map} +1 -1
  61. package/dist/{outetts-Cr5oGk4z.d.mts → outetts-CAL3_K3j.d.mts} +1 -1
  62. package/dist/{outetts-Cr5oGk4z.d.mts.map → outetts-CAL3_K3j.d.mts.map} +1 -1
  63. package/dist/repl-DMur1t4G.mjs +9 -0
  64. package/dist/skills/index.d.mts +4 -4
  65. package/dist/skills/index.mjs +4 -4
  66. package/dist/{skills-DJ0cCjfD.mjs → skills-BfJI3GNK.mjs} +2 -2
  67. package/dist/{skills-DJ0cCjfD.mjs.map → skills-BfJI3GNK.mjs.map} +1 -1
  68. package/dist/{tools-DQ1mPUw5.mjs → tools-DRYfLfKS.mjs} +2 -2
  69. package/dist/{tools-DQ1mPUw5.mjs.map → tools-DRYfLfKS.mjs.map} +1 -1
  70. package/dist/tune/index.d.mts +186 -0
  71. package/dist/tune/index.d.mts.map +1 -0
  72. package/dist/tune/index.mjs +297 -0
  73. package/dist/tune/index.mjs.map +1 -0
  74. package/dist/{types-Dqv4m0vo.d.mts → types-CIcNt_XS.d.mts} +1 -1
  75. package/dist/{types-Dqv4m0vo.d.mts.map → types-CIcNt_XS.d.mts.map} +1 -1
  76. package/dist/{types-BBDAW4MS.d.mts → types-DW-OBuAC.d.mts} +2 -2
  77. package/dist/{types-BBDAW4MS.d.mts.map → types-DW-OBuAC.d.mts.map} +1 -1
  78. package/dist/{utils-DKO55ZmZ.mjs → utils-CZBZ8dgR.mjs} +1 -1
  79. package/dist/{utils-DKO55ZmZ.mjs.map → utils-CZBZ8dgR.mjs.map} +1 -1
  80. package/dist/{vector-B0panuy6.mjs → vector-BJqdOci_.mjs} +1 -1
  81. package/dist/{vector-B0panuy6.mjs.map → vector-BJqdOci_.mjs.map} +1 -1
  82. package/package.json +5 -1
  83. package/dist/gerbil-eX40N7oB.mjs +0 -4
  84. package/dist/indexeddb-store-ClH12Xnl.mjs +0 -4
  85. package/dist/memory-D1P7Tmda.mjs +0 -4
  86. package/dist/moonshine-stt-D7BqG2pU.mjs +0 -4
  87. package/dist/repl-C_-ogJ09.mjs +0 -9
  88. /package/dist/{auto-update-BVaLXcDE.mjs → auto-update-DIh0uiTw.mjs} +0 -0
  89. /package/dist/{chunk-B9cbKln6.mjs → chunk-BeNUM--j.mjs} +0 -0
  90. /package/dist/{microphone-Bqmoz9_K.mjs → microphone-CsUwVP2O.mjs} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["config: CaptureConfig","out: Record<string, number>","out","model: TuneModel","out: Array<{ input: string; label: string }>"],"sources":["../../src/tune/capture.ts","../../src/tune/client.ts","../../src/tune/labeler.ts"],"sourcesContent":["/**\n * Capture — turn any AI call-site into an organized, task-tagged dataset, LOCALLY.\n *\n * Nothing is sent anywhere. `capture`/`tap` append your model inputs+outputs to a\n * local store (a JSONL file per task in Node, or memory/your-own-sink elsewhere),\n * so scattered inference calls become clean, growing datasets you own. Feed a task\n * to `tune()` when you want to train — that's the only step that sends anything,\n * and only the compiled set for that one task.\n */\n\nexport interface CaptureRow {\n /** The call-site tag = the dataset bucket. */\n task: string;\n input: string;\n output: string;\n /** Source model (e.g. \"gpt-5\"), for provenance. */\n model?: string;\n /** Freeform origin (a route, a component). */\n source?: string;\n meta?: Record<string, unknown>;\n /** ISO timestamp. */\n ts: string;\n}\n\n/** A row to append (everything but the timestamp, which is stamped for you). */\nexport type CapturePair = Omit<CaptureRow, \"task\" | \"ts\">;\n\n/** Where captured rows go. Return void; throw to signal a write failure. */\nexport type CaptureSink = (row: CaptureRow) => void | Promise<void>;\n\ninterface CaptureConfig {\n /** Directory for the per-task JSONL files (Node default sink). */\n dir: string;\n /** Custom sink — overrides the file/memory default (e.g. write to your DB). */\n sink?: CaptureSink;\n}\n\nconst config: CaptureConfig = { dir: \"./gerbil-data\" };\n// Fallback store when there's no filesystem and no custom sink (e.g. the browser).\nconst memory = new Map<string, CaptureRow[]>();\n\nfunction isNode(): boolean {\n return typeof process !== \"undefined\" && !!process.versions && !!process.versions.node;\n}\n\nfunction sanitize(task: string): string {\n return task.replace(/[^a-zA-Z0-9._-]+/g, \"-\").replace(/^-+|-+$/g, \"\") || \"task\";\n}\n\n/**\n * Configure where captured rows land. Defaults to `./gerbil-data/<task>.jsonl`\n * in Node. Pass `{ sink }` to route rows to your own store instead.\n *\n * ```ts\n * configureCapture({ dir: \"./data\" }); // local files\n * configureCapture({ sink: (row) => db.insert(row) }); // your warehouse\n * ```\n */\nexport function configureCapture(opts: Partial<CaptureConfig>): void {\n if (opts.dir !== undefined) config.dir = opts.dir;\n if (opts.sink !== undefined) config.sink = opts.sink;\n}\n\nasync function fileFor(task: string): Promise<{ fs: typeof import(\"node:fs\"); file: string }> {\n const fs = await import(\"node:fs\");\n const path = await import(\"node:path\");\n fs.mkdirSync(config.dir, { recursive: true });\n return { fs, file: path.join(config.dir, `${sanitize(task)}.jsonl`) };\n}\n\nasync function writeRow(row: CaptureRow): Promise<void> {\n if (config.sink) {\n await config.sink(row);\n return;\n }\n if (isNode()) {\n const { fs, file } = await fileFor(row.task);\n fs.appendFileSync(file, `${JSON.stringify(row)}\\n`);\n return;\n }\n const arr = memory.get(row.task) ?? [];\n arr.push(row);\n memory.set(row.task, arr);\n}\n\n/**\n * Log one production call to a task's dataset.\n *\n * ```ts\n * capture(\"title-gen\", { input: draft, output: title, model: \"gpt-5\" });\n * ```\n */\nexport async function capture(task: string, pair: CapturePair): Promise<void> {\n await writeRow({ task, ts: new Date().toISOString(), ...pair });\n}\n\n/** Pull readable text out of a common LLM result shape (OpenAI/Anthropic/AI SDK/string). */\nfunction defaultExtractOutput(result: unknown): string {\n if (typeof result === \"string\") return result;\n const r = result as Record<string, unknown>;\n // OpenAI chat completion\n const choices = r?.choices as Array<{ message?: { content?: string } }> | undefined;\n if (choices?.[0]?.message?.content) return choices[0].message!.content!;\n // Anthropic messages\n const content = r?.content as Array<{ text?: string }> | string | undefined;\n if (Array.isArray(content) && content[0]?.text) return content[0].text!;\n // Vercel AI SDK generateText\n if (typeof r?.text === \"string\") return r.text;\n // Last resort\n return JSON.stringify(result);\n}\n\n/**\n * Wrap a model call you already make: runs it, returns its result untouched, and\n * captures the input+output to the task's dataset. Provide `input` (you have it);\n * the output is pulled from the result (override with `extract`).\n *\n * ```ts\n * const title = await tap(\n * { task: \"title-gen\", input: draft, model: \"gpt-5\" },\n * () => openai.chat.completions.create({ ... }),\n * );\n * ```\n */\nexport async function tap<T>(\n opts: {\n task: string;\n input: string;\n model?: string;\n source?: string;\n meta?: Record<string, unknown>;\n /** Override how the output text is pulled from the call's result. */\n extract?: (result: T) => string;\n },\n call: () => Promise<T>,\n): Promise<T> {\n const result = await call();\n const output = opts.extract ? opts.extract(result) : defaultExtractOutput(result);\n await capture(opts.task, {\n input: opts.input,\n output,\n model: opts.model,\n source: opts.source,\n meta: opts.meta,\n });\n return result;\n}\n\n/** A handle to one task's accumulated dataset. */\nexport interface Dataset {\n task: string;\n rows(): Promise<CaptureRow[]>;\n count(): Promise<number>;\n /** Compile to JSONL (the format tune() and the upload accept). */\n toJSONL(): Promise<string>;\n}\n\nasync function readRows(task: string): Promise<CaptureRow[]> {\n if (config.sink) {\n throw new Error(\n \"dataset() reads the built-in file/memory store; a custom sink owns its own reads.\",\n );\n }\n if (isNode()) {\n const fs = await import(\"node:fs\");\n const { file } = await fileFor(task);\n if (!fs.existsSync(file)) return [];\n return fs\n .readFileSync(file, \"utf8\")\n .split(\"\\n\")\n .filter((l) => l.trim())\n .map((l) => JSON.parse(l) as CaptureRow);\n }\n return memory.get(task) ?? [];\n}\n\n/** Read back a task's dataset (from the file/memory store). */\nexport function dataset(task: string): Dataset {\n return {\n task,\n rows: () => readRows(task),\n count: async () => (await readRows(task)).length,\n toJSONL: async () =>\n (await readRows(task))\n .map((r) => JSON.stringify({ input: r.input, output: r.output }))\n .join(\"\\n\"),\n };\n}\n\n/** List the task datasets that exist, with their row counts. */\nexport async function datasets(): Promise<Record<string, number>> {\n if (config.sink) return {};\n if (isNode()) {\n const fs = await import(\"node:fs\");\n if (!fs.existsSync(config.dir)) return {};\n const out: Record<string, number> = {};\n for (const name of fs.readdirSync(config.dir)) {\n if (!name.endsWith(\".jsonl\")) continue;\n const task = name.replace(/\\.jsonl$/, \"\");\n out[task] = await dataset(task).count();\n }\n return out;\n }\n const out: Record<string, number> = {};\n for (const [task, rows] of memory) out[task] = rows.length;\n return out;\n}\n","/**\n * tune() — train (or retrain) a model from your own code.\n *\n * Compiles a captured task dataset (or raw JSONL you pass) and hands it to the\n * Gerbil Tune API with your API key. The only step that sends anything: only the\n * compiled set for that one task leaves, when you call this. Priced by dataset\n * size; charged to the payment method on your account (off-session).\n *\n * ```ts\n * import { tune } from \"@tryhamster/gerbil/tune\";\n *\n * const model = await tune({ task: \"support-triage\", base: \"qwen3.5-0.8b\" });\n * await model.until(\"completed\");\n * console.log(model.outputRepo); // load it with the engine, anywhere\n * ```\n */\n\nimport { dataset } from \"./capture.js\";\n\nconst DEFAULT_API = \"https://gerbilsdk.com\";\n\n// Job lifecycle, in order — used to decide when `until(target)` is satisfied.\nconst LIFECYCLE = [\n \"awaiting_payment\",\n \"paid\",\n \"generating\",\n \"queued\",\n \"training\",\n \"merging\",\n \"exporting\",\n \"pushing\",\n \"completed\",\n] as const;\n\nexport interface TuneModel {\n /** The job/model id. */\n id: string;\n status: string;\n /** HF repo of the merged model once training completes. */\n outputRepo: string | null;\n error: string | null;\n /** Re-fetch the latest status. */\n refresh(): Promise<TuneModel>;\n /**\n * Poll until the job reaches `target` (default \"completed\"/\"ready\"). Rejects if\n * the job fails or the timeout elapses.\n */\n until(target?: string, opts?: { intervalMs?: number; timeoutMs?: number }): Promise<TuneModel>;\n}\n\nexport interface TuneOptions {\n /** Train from a captured task's dataset (compiled to JSONL). */\n task?: string;\n /** Or pass JSONL directly (one {input,output} / {prompt,completion} per line). */\n data?: string;\n /** Base model to specialize (defaults server-side). */\n base?: string;\n /** Training epochs. */\n epochs?: number;\n /** API key. Defaults to process.env.GERBIL_API_KEY. */\n apiKey?: string;\n /** API base URL. Defaults to GERBIL_API_URL, then the Gerbil Tune API. */\n baseUrl?: string;\n}\n\ninterface JobShape {\n id: string;\n status: string;\n output_repo?: string | null;\n error?: string | null;\n}\n\nfunction resolveApiKey(explicit?: string): string {\n const key =\n explicit ?? (typeof process !== \"undefined\" ? process.env?.GERBIL_API_KEY : undefined);\n if (!key) {\n throw new Error(\n \"tune() needs an API key — pass { apiKey } or set GERBIL_API_KEY. Create one in the dashboard.\",\n );\n }\n return key;\n}\n\nfunction makeModel(job: JobShape, apiKey: string, baseUrl: string): TuneModel {\n const model: TuneModel = {\n id: job.id,\n status: job.status,\n outputRepo: job.output_repo ?? null,\n error: job.error ?? null,\n\n async refresh(): Promise<TuneModel> {\n const res = await fetch(`${baseUrl}/api/tune/from-code?job=${encodeURIComponent(model.id)}`, {\n headers: { Authorization: `Bearer ${apiKey}` },\n });\n const data = (await res.json().catch(() => ({}))) as { job?: JobShape; error?: string };\n if (!res.ok || !data.job) {\n throw new Error(data.error ?? `tune status failed: ${res.status}`);\n }\n model.status = data.job.status;\n model.outputRepo = data.job.output_repo ?? null;\n model.error = data.job.error ?? null;\n return model;\n },\n\n async until(target = \"completed\", opts = {}): Promise<TuneModel> {\n const goal = target === \"ready\" ? \"completed\" : target;\n const goalIdx = (LIFECYCLE as readonly string[]).indexOf(goal);\n const intervalMs = opts.intervalMs ?? 5000;\n const timeoutMs = opts.timeoutMs ?? 30 * 60_000;\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n await model.refresh();\n if (model.status === \"failed\") {\n throw new Error(`tune job failed: ${model.error ?? \"unknown error\"}`);\n }\n const curIdx = (LIFECYCLE as readonly string[]).indexOf(model.status);\n if (model.status === goal || (goalIdx >= 0 && curIdx >= 0 && curIdx >= goalIdx)) {\n return model;\n }\n await new Promise((r) => setTimeout(r, intervalMs));\n }\n throw new Error(`tune().until(${target}) timed out after ${timeoutMs}ms`);\n },\n };\n return model;\n}\n\n/** Train (or retrain) a model from your own code. See the module docs. */\nexport async function tune(opts: TuneOptions): Promise<TuneModel> {\n const apiKey = resolveApiKey(opts.apiKey);\n const envUrl = typeof process !== \"undefined\" ? process.env?.GERBIL_API_URL : undefined;\n const baseUrl = (opts.baseUrl ?? envUrl ?? DEFAULT_API).replace(/\\/+$/, \"\");\n\n let jsonl = opts.data;\n if (!jsonl && opts.task) {\n jsonl = await dataset(opts.task).toJSONL();\n }\n if (!jsonl || !jsonl.trim()) {\n throw new Error(\"tune() needs data — pass { task } (a captured dataset) or { data } (JSONL).\");\n }\n\n const res = await fetch(`${baseUrl}/api/tune/from-code`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ base: opts.base, epochs: opts.epochs, jsonl }),\n });\n const data = (await res.json().catch(() => ({}))) as { job?: JobShape; error?: string };\n if (!res.ok || !data.job) {\n throw new Error(data.error ?? `tune() failed: ${res.status}`);\n }\n return makeModel(data.job, apiKey, baseUrl);\n}\n","/**\n * createLabeler — run a classifier you tuned, LOCALLY, to label your own data.\n *\n * The labeler is a small model you trained on us (paid Tune); this just *runs* it\n * on-device (browser via WebGPU, or Node via Dawn — fast on a GPU server, CPU\n * fallback otherwise). It wraps the engine's retrying `generateObject` with a\n * predicate that enforces your label set, so every result is a clean, known label\n * — and your raw data never leaves the machine.\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport { capture } from \"./capture.js\";\n\nexport interface Labeler {\n /** Label one input → `{ label }` (guaranteed to be one of your labels). */\n (input: string): Promise<{ label: string }>;\n /** Label many inputs, sequentially (one GPU). */\n many(inputs: string[]): Promise<Array<{ input: string; label: string }>>;\n /** Label inputs and capture them straight into a task's dataset. */\n labelInto(task: string, inputs: string[]): Promise<Array<{ input: string; label: string }>>;\n /** Free the underlying engine. */\n dispose(): Promise<void>;\n}\n\n/**\n * ```ts\n * const labeler = await createLabeler({\n * model: \"your-org/support-triage\",\n * labels: [\"billing\", \"bug\", \"feature-request\", \"other\"],\n * });\n * await labeler(\"My card was charged twice\"); // → { label: \"billing\" }\n * await labeler.labelInto(\"triage\", rawInputs); // labels + captures locally\n * ```\n */\nexport async function createLabeler(opts: {\n /** The tuned classifier's model repo/id. */\n model: string;\n /** The allowed labels — enforced on every result. */\n labels: string[];\n /** Override the system prompt (defaults to a JSON-label instruction). */\n system?: string;\n}): Promise<Labeler> {\n const g = new Gerbil();\n await g.loadModel(opts.model);\n\n const allowed = new Set(opts.labels);\n const system =\n opts.system ??\n `Classify the input into exactly one category from: ${opts.labels.join(\n \", \",\n )}. Reply with ONLY JSON: {\"label\": \"<category>\"}.`;\n\n const one = async (input: string): Promise<{ label: string }> => {\n const { object } = await g.generateObject<{ label: string }>(input, {\n schema: (o) => {\n const l = (o as { label?: unknown })?.label;\n return typeof l === \"string\" && allowed.has(l);\n },\n systemPrompt: system,\n });\n return { label: object.label };\n };\n\n const many = async (inputs: string[]): Promise<Array<{ input: string; label: string }>> => {\n const out: Array<{ input: string; label: string }> = [];\n for (const input of inputs) {\n const { label } = await one(input);\n out.push({ input, label });\n }\n return out;\n };\n\n const labelInto = async (\n task: string,\n inputs: string[],\n ): Promise<Array<{ input: string; label: string }>> => {\n const labeled = await many(inputs);\n for (const row of labeled) {\n await capture(task, {\n input: row.input,\n output: row.label,\n model: opts.model,\n });\n }\n return labeled;\n };\n\n return Object.assign(one, {\n many,\n labelInto,\n dispose: () => g.dispose(),\n });\n}\n"],"mappings":"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"}
@@ -162,4 +162,4 @@ type MemoryOptions = {
162
162
  };
163
163
  //#endregion
164
164
  export { MemoryMetadata as a, MemorySearchResult as c, RecallOptions as d, RecallResult as f, StoreSearchOptions as g, SerializedRecord as h, MemoryExport as i, MemoryStore as l, SearchOptions as m, ChunkOptions as n, MemoryOptions as o, Redactor as p, Embedder as r, MemoryRecord as s, AddOptions as t, MetadataFilter as u };
165
- //# sourceMappingURL=types-Dqv4m0vo.d.mts.map
165
+ //# sourceMappingURL=types-CIcNt_XS.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-Dqv4m0vo.d.mts","names":[],"sources":["../src/memory/types.ts"],"sourcesContent":[],"mappings":";;AAUA;AAQA;AAmBA;AAQA;AAGA;AAQA;AAGA;AAgBA;AAEc,KAnEF,cAAA,GAAiB,MAmEf,CAAA,MAAA,EAAA,OAAA,CAAA;;;;;;;AAMgC,KAjElC,YAAA,GAiEkC;EAA6B;EAAR,EAAA,EAAA,MAAA;EAE7C;EAEN,IAAA,EAAA,MAAA;EAAyB;EAAR,SAAA,CAAA,EA/DnB,YA+DmB;EAEtB;EAED,QAAA,EAjEE,cAiEF;EAAO;EAIL,SAAA,EAAA,MAAY;AAQxB,CAAA;AASA;AAQA;AAaA;AAUA;AAcA;AAUA;AAES,KApIG,QAAA,GAoIH,CAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GApImC,OAoInC,CApI2C,YAoI3C,EAAA,CAAA;;;;;;;KA5HG,QAAA,GAAW;;KAGX,kBAAA;;UAEF;;;;;KAME,cAAA,GAAiB;;KAGjB,kBAAA;;;;WAID;;;;;;;;;;;KAYC,WAAA;;cAEE,eAAe;;mBAEV,iBAAiB;;mBAEjB,QAAQ;;sBAEL,wBAAwB,qBAAqB,QAAQ;;sBAErD;;gBAEN,iBAAiB,QAAQ;;WAE9B;;UAED;;;KAIE,YAAA;;;;WAID;;;KAIC,gBAAA;;;;YAIA;;;;KAKA,YAAA;;;;;;;KAQA,UAAA;;aAEC;;;;;;;oBAOO;;;KAIR,aAAA;;;;WAID;;;;;KAMC,aAAA;;;;;;WAMD;;;;;;;KAQC,YAAA;;;;WAID;;;;;KAMC,aAAA;;SAEH;;UAEC;;WAEC;;UAED"}
1
+ {"version":3,"file":"types-CIcNt_XS.d.mts","names":[],"sources":["../src/memory/types.ts"],"sourcesContent":[],"mappings":";;AAUA;AAQA;AAmBA;AAQA;AAGA;AAQA;AAGA;AAgBA;AAEc,KAnEF,cAAA,GAAiB,MAmEf,CAAA,MAAA,EAAA,OAAA,CAAA;;;;;;;AAMgC,KAjElC,YAAA,GAiEkC;EAA6B;EAAR,EAAA,EAAA,MAAA;EAE7C;EAEN,IAAA,EAAA,MAAA;EAAyB;EAAR,SAAA,CAAA,EA/DnB,YA+DmB;EAEtB;EAED,QAAA,EAjEE,cAiEF;EAAO;EAIL,SAAA,EAAA,MAAY;AAQxB,CAAA;AASA;AAQA;AAaA;AAUA;AAcA;AAUA;AAES,KApIG,QAAA,GAoIH,CAAA,KAAA,EAAA,MAAA,EAAA,EAAA,GApImC,OAoInC,CApI2C,YAoI3C,EAAA,CAAA;;;;;;;KA5HG,QAAA,GAAW;;KAGX,kBAAA;;UAEF;;;;;KAME,cAAA,GAAiB;;KAGjB,kBAAA;;;;WAID;;;;;;;;;;;KAYC,WAAA;;cAEE,eAAe;;mBAEV,iBAAiB;;mBAEjB,QAAQ;;sBAEL,wBAAwB,qBAAqB,QAAQ;;sBAErD;;gBAEN,iBAAiB,QAAQ;;WAE9B;;UAED;;;KAIE,YAAA;;;;WAID;;;KAIC,gBAAA;;;;YAIA;;;;KAKA,YAAA;;;;;;;KAQA,UAAA;;aAEC;;;;;;;oBAOO;;;KAIR,aAAA;;;;WAID;;;;;KAMC,aAAA;;;;;;WAMD;;;;;;;KAQC,YAAA;;;;WAID;;;;;KAMC,aAAA;;SAEH;;UAEC;;WAEC;;UAED"}
@@ -1,4 +1,4 @@
1
- import { i as OuteSpeaker } from "./outetts-Cr5oGk4z.mjs";
1
+ import { i as OuteSpeaker } from "./outetts-CAL3_K3j.mjs";
2
2
  import { z } from "zod";
3
3
 
4
4
  //#region src/core/types.d.ts
@@ -482,4 +482,4 @@ type ConcurrencyConfig = {
482
482
  };
483
483
  //#endregion
484
484
  export { SpeakResult as A, PreloadOptions as C, SessionStats as D, SearchResult as E, TelemetryConfig as F, TranscribeOptions as I, TranscribeResult as L, StreamingTranscriptionSession as M, SystemInfo as N, SimilarityResult as O, TTSModelConfig as P, TranscribeSegment as R, ModelStats as S, STTModelConfig as T, LoadSTTOptions as _, EmbedResult as a, ModelLoadEvent as b, GenerateEvent as c, GerbilConfig as d, GerbilModelSettings as f, LoadOptions as g, JsonOptions as h, EmbedOptions as i, StreamingTranscriptionOptions as j, SpeakOptions as k, GenerateOptions as l, ImageInput as m, CacheConfig as n, ErrorContext as o, GerbilProviderSettings as p, ConcurrencyConfig as r, FallbackConfig as s, AudioChunk as t, GenerateResult as u, LoadTTSOptions as v, ProgressInfo as w, ModelSource as x, ModelConfig as y, VoiceInfo as z };
485
- //# sourceMappingURL=types-BBDAW4MS.d.mts.map
485
+ //# sourceMappingURL=types-DW-OBuAC.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types-BBDAW4MS.d.mts","names":[],"sources":["../src/core/types.ts"],"sourcesContent":[],"mappings":";;;;AAUY,KAAA,WAAA,GAAW;EAeX,EAAA,EAAA,MAAA;EASA,IAAA,EAAA,MAAA;EAWA,WAAA,EAAA,MAAe;EA0Cf,IAAA,EAAA,MAAA;EA8BA,aAAA,EAAW,MAAA;EAkBX,gBAAY,EAAA,OAAA;EAQZ,YAAA,EAAW,OAAA;EAWX;EAWA,cAAA,CAAA,EAAA,OAAgB;EAkBhB;EAqBA,iBAAc,CAAA,EAAA,MAAA;EAOd,MAAA,EAAA,MAAA,GAAY,QAAA,GAAA,KAAA,GAAA,SAAA,GAAA,OAAA,GAAA,OAAA;AAYxB,CAAA;AAWU,KAjNE,WAAA,GAiNF;EAGG,IAAA,EAAA,SAAA,GAAA,aAAA,GAAA,OAAA;EAGC,IAAA,EAAA,MAAA;CAGE;AAAiB,KAjNrB,UAAA,GAiNqB;EAGrB;EAiBA,MAAA,EAAA,MAAA;EAqBA;EAUA,GAAA,CAAA,EAAA,MAAA;AAOZ,CAAA;AAyBY,KAzRA,eAAA,GAyRmB;EAWnB;EAYA,SAAA,CAAA,EAAS,MAAA;EAeT;EAmBA,WAAA,CAAA,EAAA,MAAY;EAAA;EAkCF,IAAA,CAAA,EAAA,MAAA;EAEG;EAAU,IAAA,CAAA,EAAA,MAAA;EAGvB;AAWZ;AAaA;AAWA;AAiBA;EASY,iBAAA,CAAA,EAAiB,MAAA;EASjB;EAaA,aAAA,CAAA,EAAA,MAAc,EAAA;EAWd;EAeA,MAAA,CAAA,EAAA,MAAA;EAES;EAEN,QAAA,CAAA,EAAA,OAAA;EAID;EAAO,OAAA,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,IAgCe,CAhCf,EAAA;IAqBT,UAAA,EAAA,MAAe;IAKJ,GAAA,EAAA,MAAA;IAMH,SAAA,EAAA,MAAA;EAAgB,CAAA,EAAA,GAAA,IAAA;EAKZ;EAAc,MAAA,CAAA,EAlf3B,UAkf2B,EAAA;EAQ1B;EAeA,KAAA,CAAA,EAAA,OAAY;EAEZ;EAmBA,QAAA,CAAA,EAAA,MAAA;;KArhBA,cAAA;;;;;;;;;;;;;;;;;;KA8BA;;UAEF,CAAA,CAAE,QAAQ;;;;;;;;KAgBR,YAAA;;;;;;KAQA,WAAA;;;;;;;;KAWA,YAAA;;;;;;;;KAWA,gBAAA;;;;;;;;;;KAkBA,WAAA;;sBAEU;;;;;;;;;;;;;;;KAmBV,cAAA;;sBAEU;;;;KAKV,YAAA;;;;;;;KAYA,YAAA;;;;;;;;UAWF;;aAGG;;cAGC;;gBAGE;;KAGJ,WAAA;;;;;;;;;;;;KAiBA,cAAA;;;;;;;;;;;;KAqBA,YAAA;;;;;;;;;KAUA,UAAA;;;;;;KAOA,UAAA;;SAEH;;;;;;;;;;;;;;;;;;KAuBG,mBAAA;;;;;;;;KAWA,sBAAA;;;;;;KAYA,SAAA;;;;;;;;;;;;;;KAeA,cAAA;;;;;;;;;;;;UAYF;;;;;;KAOE,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAY;;;;;;;;sBAkCF;;yBAEG;;KAGb,UAAA;;WAED;;;;;;;;KASC,WAAA;;SAEH;;;;;;;;;;KAWG,cAAA;;sBAEU;;;;KASV,cAAA;;;;;;;;;;;;;;;;KAiBA,iBAAA;;;;;;sBAMU;;KAGV,iBAAA;;;;;;;;KASA,gBAAA;;;;;;aAMC;;;;;;KAOD,cAAA;;sBAEU;;;;KASV,6BAAA;;;;;;;;;;;;;;KAeA,6BAAA;;qBAES;;eAEN;;;;cAID;;;;;;;;;;;;;;;;KAqBF,eAAA;;;;;uBAKW;;;;;oBAMH,gBAAgB;;;;wBAKZ;;;;;;KAQZ,aAAA;;;;UAIF;;;;;;;;;;KAWE,YAAA,GAAe;KAEf,cAAA;;;;;;;;;;;;;;KAmBA,iBAAA"}
1
+ {"version":3,"file":"types-DW-OBuAC.d.mts","names":[],"sources":["../src/core/types.ts"],"sourcesContent":[],"mappings":";;;;AAUY,KAAA,WAAA,GAAW;EAeX,EAAA,EAAA,MAAA;EASA,IAAA,EAAA,MAAA;EAWA,WAAA,EAAA,MAAe;EA0Cf,IAAA,EAAA,MAAA;EA8BA,aAAA,EAAW,MAAA;EAkBX,gBAAY,EAAA,OAAA;EAQZ,YAAA,EAAW,OAAA;EAWX;EAWA,cAAA,CAAA,EAAA,OAAgB;EAkBhB;EAqBA,iBAAc,CAAA,EAAA,MAAA;EAOd,MAAA,EAAA,MAAA,GAAY,QAAA,GAAA,KAAA,GAAA,SAAA,GAAA,OAAA,GAAA,OAAA;AAYxB,CAAA;AAWU,KAjNE,WAAA,GAiNF;EAGG,IAAA,EAAA,SAAA,GAAA,aAAA,GAAA,OAAA;EAGC,IAAA,EAAA,MAAA;CAGE;AAAiB,KAjNrB,UAAA,GAiNqB;EAGrB;EAiBA,MAAA,EAAA,MAAA;EAqBA;EAUA,GAAA,CAAA,EAAA,MAAA;AAOZ,CAAA;AAyBY,KAzRA,eAAA,GAyRmB;EAWnB;EAYA,SAAA,CAAA,EAAS,MAAA;EAeT;EAmBA,WAAA,CAAA,EAAA,MAAY;EAAA;EAkCF,IAAA,CAAA,EAAA,MAAA;EAEG;EAAU,IAAA,CAAA,EAAA,MAAA;EAGvB;AAWZ;AAaA;AAWA;AAiBA;EASY,iBAAA,CAAA,EAAiB,MAAA;EASjB;EAaA,aAAA,CAAA,EAAA,MAAc,EAAA;EAWd;EAeA,MAAA,CAAA,EAAA,MAAA;EAES;EAEN,QAAA,CAAA,EAAA,OAAA;EAID;EAAO,OAAA,CAAA,EAAA,CAAA,KAAA,EAAA,MAAA,EAAA,IAgCe,CAhCf,EAAA;IAqBT,UAAA,EAAA,MAAe;IAKJ,GAAA,EAAA,MAAA;IAMH,SAAA,EAAA,MAAA;EAAgB,CAAA,EAAA,GAAA,IAAA;EAKZ;EAAc,MAAA,CAAA,EAlf3B,UAkf2B,EAAA;EAQ1B;EAeA,KAAA,CAAA,EAAA,OAAY;EAEZ;EAmBA,QAAA,CAAA,EAAA,MAAA;;KArhBA,cAAA;;;;;;;;;;;;;;;;;;KA8BA;;UAEF,CAAA,CAAE,QAAQ;;;;;;;;KAgBR,YAAA;;;;;;KAQA,WAAA;;;;;;;;KAWA,YAAA;;;;;;;;KAWA,gBAAA;;;;;;;;;;KAkBA,WAAA;;sBAEU;;;;;;;;;;;;;;;KAmBV,cAAA;;sBAEU;;;;KAKV,YAAA;;;;;;;KAYA,YAAA;;;;;;;;UAWF;;aAGG;;cAGC;;gBAGE;;KAGJ,WAAA;;;;;;;;;;;;KAiBA,cAAA;;;;;;;;;;;;KAqBA,YAAA;;;;;;;;;KAUA,UAAA;;;;;;KAOA,UAAA;;SAEH;;;;;;;;;;;;;;;;;;KAuBG,mBAAA;;;;;;;;KAWA,sBAAA;;;;;;KAYA,SAAA;;;;;;;;;;;;;;KAeA,cAAA;;;;;;;;;;;;UAYF;;;;;;KAOE,YAAA;;;;;;;;;;;;;;;;;;;;;;;;;;iBAAY;;;;;;;;sBAkCF;;yBAEG;;KAGb,UAAA;;WAED;;;;;;;;KASC,WAAA;;SAEH;;;;;;;;;;KAWG,cAAA;;sBAEU;;;;KASV,cAAA;;;;;;;;;;;;;;;;KAiBA,iBAAA;;;;;;sBAMU;;KAGV,iBAAA;;;;;;;;KASA,gBAAA;;;;;;aAMC;;;;;;KAOD,cAAA;;sBAEU;;;;KASV,6BAAA;;;;;;;;;;;;;;KAeA,6BAAA;;qBAES;;eAEN;;;;cAID;;;;;;;;;;;;;;;;KAqBF,eAAA;;;;;uBAKW;;;;;oBAMH,gBAAgB;;;;wBAKZ;;;;;;KAQZ,aAAA;;;;UAIF;;;;;;;;;;KAWE,YAAA,GAAe;KAEf,cAAA;;;;;;;;;;;;;;KAmBA,iBAAA"}
@@ -60,4 +60,4 @@ function extractJson(text) {
60
60
 
61
61
  //#endregion
62
62
  export { zodToJsonSchema as n, extractJson as t };
63
- //# sourceMappingURL=utils-DKO55ZmZ.mjs.map
63
+ //# sourceMappingURL=utils-CZBZ8dgR.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils-DKO55ZmZ.mjs","names":["properties: Record<string, any>","required: string[]"],"sources":["../src/core/utils.ts"],"sourcesContent":["/**\n * Shared utility functions for Gerbil core\n */\n\nimport type { z } from \"zod\";\n\n/**\n * Convert Zod schema to JSON Schema (simplified)\n * Handles objects, arrays, primitives, enums, optionals, and defaults\n */\nexport function zodToJsonSchema(schema: z.ZodType<any>): object {\n try {\n if (\"_def\" in schema) {\n const def = (schema as any)._def;\n\n if (def.typeName === \"ZodObject\") {\n const shape = def.shape();\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n properties[key] = zodToJsonSchema(value as z.ZodType<any>);\n // Check if required (not optional)\n if (!(value as any)._def?.typeName?.includes(\"Optional\")) {\n required.push(key);\n }\n }\n\n return { type: \"object\", properties, required };\n }\n if (def.typeName === \"ZodString\") {\n return { type: \"string\", description: def.description };\n }\n if (def.typeName === \"ZodNumber\") {\n return { type: \"number\", description: def.description };\n }\n if (def.typeName === \"ZodBoolean\") {\n return { type: \"boolean\" };\n }\n if (def.typeName === \"ZodArray\") {\n return { type: \"array\", items: zodToJsonSchema(def.type) };\n }\n if (def.typeName === \"ZodEnum\") {\n return { type: \"string\", enum: def.values };\n }\n if (def.typeName === \"ZodOptional\") {\n return zodToJsonSchema(def.innerType);\n }\n if (def.typeName === \"ZodDefault\") {\n const inner = zodToJsonSchema(def.innerType);\n return { ...inner, default: def.defaultValue() };\n }\n }\n } catch {}\n\n return { type: \"string\" };\n}\n\n/**\n * Extract JSON from text (finds first { } or [ ] block)\n */\nexport function extractJson(text: string): string {\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n return jsonMatch[0];\n }\n\n const arrayMatch = text.match(/\\[[\\s\\S]*\\]/);\n if (arrayMatch) {\n return arrayMatch[0];\n }\n\n return text;\n}\n"],"mappings":";;;;;AAUA,SAAgB,gBAAgB,QAAgC;AAC9D,KAAI;AACF,MAAI,UAAU,QAAQ;GACpB,MAAM,MAAO,OAAe;AAE5B,OAAI,IAAI,aAAa,aAAa;IAChC,MAAM,QAAQ,IAAI,OAAO;IACzB,MAAMA,aAAkC,EAAE;IAC1C,MAAMC,WAAqB,EAAE;AAE7B,SAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE;AAChD,gBAAW,OAAO,gBAAgB,MAAwB;AAE1D,SAAI,CAAE,MAAc,MAAM,UAAU,SAAS,WAAW,CACtD,UAAS,KAAK,IAAI;;AAItB,WAAO;KAAE,MAAM;KAAU;KAAY;KAAU;;AAEjD,OAAI,IAAI,aAAa,YACnB,QAAO;IAAE,MAAM;IAAU,aAAa,IAAI;IAAa;AAEzD,OAAI,IAAI,aAAa,YACnB,QAAO;IAAE,MAAM;IAAU,aAAa,IAAI;IAAa;AAEzD,OAAI,IAAI,aAAa,aACnB,QAAO,EAAE,MAAM,WAAW;AAE5B,OAAI,IAAI,aAAa,WACnB,QAAO;IAAE,MAAM;IAAS,OAAO,gBAAgB,IAAI,KAAK;IAAE;AAE5D,OAAI,IAAI,aAAa,UACnB,QAAO;IAAE,MAAM;IAAU,MAAM,IAAI;IAAQ;AAE7C,OAAI,IAAI,aAAa,cACnB,QAAO,gBAAgB,IAAI,UAAU;AAEvC,OAAI,IAAI,aAAa,aAEnB,QAAO;IAAE,GADK,gBAAgB,IAAI,UAAU;IACzB,SAAS,IAAI,cAAc;IAAE;;SAG9C;AAER,QAAO,EAAE,MAAM,UAAU;;;;;AAM3B,SAAgB,YAAY,MAAsB;CAChD,MAAM,YAAY,KAAK,MAAM,cAAc;AAC3C,KAAI,UACF,QAAO,UAAU;CAGnB,MAAM,aAAa,KAAK,MAAM,cAAc;AAC5C,KAAI,WACF,QAAO,WAAW;AAGpB,QAAO"}
1
+ {"version":3,"file":"utils-CZBZ8dgR.mjs","names":["properties: Record<string, any>","required: string[]"],"sources":["../src/core/utils.ts"],"sourcesContent":["/**\n * Shared utility functions for Gerbil core\n */\n\nimport type { z } from \"zod\";\n\n/**\n * Convert Zod schema to JSON Schema (simplified)\n * Handles objects, arrays, primitives, enums, optionals, and defaults\n */\nexport function zodToJsonSchema(schema: z.ZodType<any>): object {\n try {\n if (\"_def\" in schema) {\n const def = (schema as any)._def;\n\n if (def.typeName === \"ZodObject\") {\n const shape = def.shape();\n const properties: Record<string, any> = {};\n const required: string[] = [];\n\n for (const [key, value] of Object.entries(shape)) {\n properties[key] = zodToJsonSchema(value as z.ZodType<any>);\n // Check if required (not optional)\n if (!(value as any)._def?.typeName?.includes(\"Optional\")) {\n required.push(key);\n }\n }\n\n return { type: \"object\", properties, required };\n }\n if (def.typeName === \"ZodString\") {\n return { type: \"string\", description: def.description };\n }\n if (def.typeName === \"ZodNumber\") {\n return { type: \"number\", description: def.description };\n }\n if (def.typeName === \"ZodBoolean\") {\n return { type: \"boolean\" };\n }\n if (def.typeName === \"ZodArray\") {\n return { type: \"array\", items: zodToJsonSchema(def.type) };\n }\n if (def.typeName === \"ZodEnum\") {\n return { type: \"string\", enum: def.values };\n }\n if (def.typeName === \"ZodOptional\") {\n return zodToJsonSchema(def.innerType);\n }\n if (def.typeName === \"ZodDefault\") {\n const inner = zodToJsonSchema(def.innerType);\n return { ...inner, default: def.defaultValue() };\n }\n }\n } catch {}\n\n return { type: \"string\" };\n}\n\n/**\n * Extract JSON from text (finds first { } or [ ] block)\n */\nexport function extractJson(text: string): string {\n const jsonMatch = text.match(/\\{[\\s\\S]*\\}/);\n if (jsonMatch) {\n return jsonMatch[0];\n }\n\n const arrayMatch = text.match(/\\[[\\s\\S]*\\]/);\n if (arrayMatch) {\n return arrayMatch[0];\n }\n\n return text;\n}\n"],"mappings":";;;;;AAUA,SAAgB,gBAAgB,QAAgC;AAC9D,KAAI;AACF,MAAI,UAAU,QAAQ;GACpB,MAAM,MAAO,OAAe;AAE5B,OAAI,IAAI,aAAa,aAAa;IAChC,MAAM,QAAQ,IAAI,OAAO;IACzB,MAAMA,aAAkC,EAAE;IAC1C,MAAMC,WAAqB,EAAE;AAE7B,SAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,MAAM,EAAE;AAChD,gBAAW,OAAO,gBAAgB,MAAwB;AAE1D,SAAI,CAAE,MAAc,MAAM,UAAU,SAAS,WAAW,CACtD,UAAS,KAAK,IAAI;;AAItB,WAAO;KAAE,MAAM;KAAU;KAAY;KAAU;;AAEjD,OAAI,IAAI,aAAa,YACnB,QAAO;IAAE,MAAM;IAAU,aAAa,IAAI;IAAa;AAEzD,OAAI,IAAI,aAAa,YACnB,QAAO;IAAE,MAAM;IAAU,aAAa,IAAI;IAAa;AAEzD,OAAI,IAAI,aAAa,aACnB,QAAO,EAAE,MAAM,WAAW;AAE5B,OAAI,IAAI,aAAa,WACnB,QAAO;IAAE,MAAM;IAAS,OAAO,gBAAgB,IAAI,KAAK;IAAE;AAE5D,OAAI,IAAI,aAAa,UACnB,QAAO;IAAE,MAAM;IAAU,MAAM,IAAI;IAAQ;AAE7C,OAAI,IAAI,aAAa,cACnB,QAAO,gBAAgB,IAAI,UAAU;AAEvC,OAAI,IAAI,aAAa,aAEnB,QAAO;IAAE,GADK,gBAAgB,IAAI,UAAU;IACzB,SAAS,IAAI,cAAc;IAAE;;SAG9C;AAER,QAAO,EAAE,MAAM,UAAU;;;;;AAM3B,SAAgB,YAAY,MAAsB;CAChD,MAAM,YAAY,KAAK,MAAM,cAAc;AAC3C,KAAI,UACF,QAAO,UAAU;CAGnB,MAAM,aAAa,KAAK,MAAM,cAAc;AAC5C,KAAI,WACF,QAAO,WAAW;AAGpB,QAAO"}
@@ -92,4 +92,4 @@ function topK(query, candidates, k, minScore) {
92
92
 
93
93
  //#endregion
94
94
  export { deserializeRecord as a, topK as i, dot as n, matchesFilter as o, normalize as r, serializeRecord as s, cosine as t };
95
- //# sourceMappingURL=vector-B0panuy6.mjs.map
95
+ //# sourceMappingURL=vector-BJqdOci_.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"vector-B0panuy6.mjs","names":["scored: Scored<T>[]"],"sources":["../src/memory/serialize.ts","../src/memory/vector.ts"],"sourcesContent":["/**\n * (De)serialization helpers shared by stores and import/export.\n *\n * Embeddings are stored at runtime as {@link Float32Array} but serialized as\n * plain number arrays so records survive `JSON.stringify` and IndexedDB\n * structured clone round-trips.\n */\n\nimport type { MemoryRecord, SerializedRecord } from \"./types.js\";\n\n/** Convert a runtime record to its JSON-safe form. */\nexport function serializeRecord(record: MemoryRecord): SerializedRecord {\n return {\n id: record.id,\n text: record.text,\n embedding: record.embedding ? Array.from(record.embedding) : undefined,\n metadata: record.metadata,\n createdAt: record.createdAt,\n };\n}\n\n/** Rebuild a runtime record (with a {@link Float32Array}) from JSON form. */\nexport function deserializeRecord(record: SerializedRecord): MemoryRecord {\n return {\n id: record.id,\n text: record.text,\n embedding: record.embedding ? Float32Array.from(record.embedding) : undefined,\n metadata: record.metadata ?? {},\n createdAt: record.createdAt,\n };\n}\n\n/**\n * True when every key in `filter` is present on `metadata` with an equal\n * (strict ===) value. An empty/undefined filter matches everything.\n */\nexport function matchesFilter(\n metadata: Record<string, unknown>,\n filter?: Record<string, unknown>,\n): boolean {\n if (!filter) {\n return true;\n }\n for (const key of Object.keys(filter)) {\n if (metadata[key] !== filter[key]) {\n return false;\n }\n }\n return true;\n}\n","/**\n * Vector math for cosine similarity search.\n *\n * Vectors are stored L2-normalized so cosine similarity is a plain dot\n * product. Normalization happens once on insert via {@link normalize}.\n */\n\n/**\n * Return an L2-normalized copy of `vector`.\n *\n * A zero vector is returned unchanged (its norm is 0).\n */\nexport function normalize(vector: Float32Array): Float32Array {\n let sumSquares = 0;\n for (let i = 0; i < vector.length; i++) {\n sumSquares += vector[i] * vector[i];\n }\n const norm = Math.sqrt(sumSquares);\n if (norm === 0) {\n return vector;\n }\n const out = new Float32Array(vector.length);\n for (let i = 0; i < vector.length; i++) {\n out[i] = vector[i] / norm;\n }\n return out;\n}\n\n/**\n * Dot product of two equal-length vectors.\n *\n * For L2-normalized inputs this equals cosine similarity.\n */\nexport function dot(a: Float32Array, b: Float32Array): number {\n const length = Math.min(a.length, b.length);\n let sum = 0;\n for (let i = 0; i < length; i++) {\n sum += a[i] * b[i];\n }\n return sum;\n}\n\n/**\n * Cosine similarity of two vectors, normalizing on the fly.\n *\n * Prefer {@link dot} when both inputs are already normalized.\n */\nexport function cosine(a: Float32Array, b: Float32Array): number {\n return dot(normalize(a), normalize(b));\n}\n\n/** A scored item used by {@link topK}. */\nexport type Scored<T> = { item: T; score: number };\n\n/**\n * Score every candidate against `query` (dot product) and return the top `k`\n * by descending score, optionally filtering by a minimum score.\n *\n * Inputs are assumed normalized; this keeps the hot path branch-free.\n */\nexport function topK<T>(\n query: Float32Array,\n candidates: { item: T; vector: Float32Array }[],\n k: number,\n minScore?: number,\n): Scored<T>[] {\n const scored: Scored<T>[] = [];\n for (const candidate of candidates) {\n const score = dot(query, candidate.vector);\n if (minScore !== undefined && score < minScore) {\n continue;\n }\n scored.push({ item: candidate.item, score });\n }\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, k);\n}\n"],"mappings":";;AAWA,SAAgB,gBAAgB,QAAwC;AACtE,QAAO;EACL,IAAI,OAAO;EACX,MAAM,OAAO;EACb,WAAW,OAAO,YAAY,MAAM,KAAK,OAAO,UAAU,GAAG;EAC7D,UAAU,OAAO;EACjB,WAAW,OAAO;EACnB;;;AAIH,SAAgB,kBAAkB,QAAwC;AACxE,QAAO;EACL,IAAI,OAAO;EACX,MAAM,OAAO;EACb,WAAW,OAAO,YAAY,aAAa,KAAK,OAAO,UAAU,GAAG;EACpE,UAAU,OAAO,YAAY,EAAE;EAC/B,WAAW,OAAO;EACnB;;;;;;AAOH,SAAgB,cACd,UACA,QACS;AACT,KAAI,CAAC,OACH,QAAO;AAET,MAAK,MAAM,OAAO,OAAO,KAAK,OAAO,CACnC,KAAI,SAAS,SAAS,OAAO,KAC3B,QAAO;AAGX,QAAO;;;;;;;;;;;;;;;;ACpCT,SAAgB,UAAU,QAAoC;CAC5D,IAAI,aAAa;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IACjC,eAAc,OAAO,KAAK,OAAO;CAEnC,MAAM,OAAO,KAAK,KAAK,WAAW;AAClC,KAAI,SAAS,EACX,QAAO;CAET,MAAM,MAAM,IAAI,aAAa,OAAO,OAAO;AAC3C,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IACjC,KAAI,KAAK,OAAO,KAAK;AAEvB,QAAO;;;;;;;AAQT,SAAgB,IAAI,GAAiB,GAAyB;CAC5D,MAAM,SAAS,KAAK,IAAI,EAAE,QAAQ,EAAE,OAAO;CAC3C,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,QAAO,EAAE,KAAK,EAAE;AAElB,QAAO;;;;;;;AAQT,SAAgB,OAAO,GAAiB,GAAyB;AAC/D,QAAO,IAAI,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC;;;;;;;;AAYxC,SAAgB,KACd,OACA,YACA,GACA,UACa;CACb,MAAMA,SAAsB,EAAE;AAC9B,MAAK,MAAM,aAAa,YAAY;EAClC,MAAM,QAAQ,IAAI,OAAO,UAAU,OAAO;AAC1C,MAAI,aAAa,UAAa,QAAQ,SACpC;AAEF,SAAO,KAAK;GAAE,MAAM,UAAU;GAAM;GAAO,CAAC;;AAE9C,QAAO,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AACxC,QAAO,OAAO,MAAM,GAAG,EAAE"}
1
+ {"version":3,"file":"vector-BJqdOci_.mjs","names":["scored: Scored<T>[]"],"sources":["../src/memory/serialize.ts","../src/memory/vector.ts"],"sourcesContent":["/**\n * (De)serialization helpers shared by stores and import/export.\n *\n * Embeddings are stored at runtime as {@link Float32Array} but serialized as\n * plain number arrays so records survive `JSON.stringify` and IndexedDB\n * structured clone round-trips.\n */\n\nimport type { MemoryRecord, SerializedRecord } from \"./types.js\";\n\n/** Convert a runtime record to its JSON-safe form. */\nexport function serializeRecord(record: MemoryRecord): SerializedRecord {\n return {\n id: record.id,\n text: record.text,\n embedding: record.embedding ? Array.from(record.embedding) : undefined,\n metadata: record.metadata,\n createdAt: record.createdAt,\n };\n}\n\n/** Rebuild a runtime record (with a {@link Float32Array}) from JSON form. */\nexport function deserializeRecord(record: SerializedRecord): MemoryRecord {\n return {\n id: record.id,\n text: record.text,\n embedding: record.embedding ? Float32Array.from(record.embedding) : undefined,\n metadata: record.metadata ?? {},\n createdAt: record.createdAt,\n };\n}\n\n/**\n * True when every key in `filter` is present on `metadata` with an equal\n * (strict ===) value. An empty/undefined filter matches everything.\n */\nexport function matchesFilter(\n metadata: Record<string, unknown>,\n filter?: Record<string, unknown>,\n): boolean {\n if (!filter) {\n return true;\n }\n for (const key of Object.keys(filter)) {\n if (metadata[key] !== filter[key]) {\n return false;\n }\n }\n return true;\n}\n","/**\n * Vector math for cosine similarity search.\n *\n * Vectors are stored L2-normalized so cosine similarity is a plain dot\n * product. Normalization happens once on insert via {@link normalize}.\n */\n\n/**\n * Return an L2-normalized copy of `vector`.\n *\n * A zero vector is returned unchanged (its norm is 0).\n */\nexport function normalize(vector: Float32Array): Float32Array {\n let sumSquares = 0;\n for (let i = 0; i < vector.length; i++) {\n sumSquares += vector[i] * vector[i];\n }\n const norm = Math.sqrt(sumSquares);\n if (norm === 0) {\n return vector;\n }\n const out = new Float32Array(vector.length);\n for (let i = 0; i < vector.length; i++) {\n out[i] = vector[i] / norm;\n }\n return out;\n}\n\n/**\n * Dot product of two equal-length vectors.\n *\n * For L2-normalized inputs this equals cosine similarity.\n */\nexport function dot(a: Float32Array, b: Float32Array): number {\n const length = Math.min(a.length, b.length);\n let sum = 0;\n for (let i = 0; i < length; i++) {\n sum += a[i] * b[i];\n }\n return sum;\n}\n\n/**\n * Cosine similarity of two vectors, normalizing on the fly.\n *\n * Prefer {@link dot} when both inputs are already normalized.\n */\nexport function cosine(a: Float32Array, b: Float32Array): number {\n return dot(normalize(a), normalize(b));\n}\n\n/** A scored item used by {@link topK}. */\nexport type Scored<T> = { item: T; score: number };\n\n/**\n * Score every candidate against `query` (dot product) and return the top `k`\n * by descending score, optionally filtering by a minimum score.\n *\n * Inputs are assumed normalized; this keeps the hot path branch-free.\n */\nexport function topK<T>(\n query: Float32Array,\n candidates: { item: T; vector: Float32Array }[],\n k: number,\n minScore?: number,\n): Scored<T>[] {\n const scored: Scored<T>[] = [];\n for (const candidate of candidates) {\n const score = dot(query, candidate.vector);\n if (minScore !== undefined && score < minScore) {\n continue;\n }\n scored.push({ item: candidate.item, score });\n }\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, k);\n}\n"],"mappings":";;AAWA,SAAgB,gBAAgB,QAAwC;AACtE,QAAO;EACL,IAAI,OAAO;EACX,MAAM,OAAO;EACb,WAAW,OAAO,YAAY,MAAM,KAAK,OAAO,UAAU,GAAG;EAC7D,UAAU,OAAO;EACjB,WAAW,OAAO;EACnB;;;AAIH,SAAgB,kBAAkB,QAAwC;AACxE,QAAO;EACL,IAAI,OAAO;EACX,MAAM,OAAO;EACb,WAAW,OAAO,YAAY,aAAa,KAAK,OAAO,UAAU,GAAG;EACpE,UAAU,OAAO,YAAY,EAAE;EAC/B,WAAW,OAAO;EACnB;;;;;;AAOH,SAAgB,cACd,UACA,QACS;AACT,KAAI,CAAC,OACH,QAAO;AAET,MAAK,MAAM,OAAO,OAAO,KAAK,OAAO,CACnC,KAAI,SAAS,SAAS,OAAO,KAC3B,QAAO;AAGX,QAAO;;;;;;;;;;;;;;;;ACpCT,SAAgB,UAAU,QAAoC;CAC5D,IAAI,aAAa;AACjB,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IACjC,eAAc,OAAO,KAAK,OAAO;CAEnC,MAAM,OAAO,KAAK,KAAK,WAAW;AAClC,KAAI,SAAS,EACX,QAAO;CAET,MAAM,MAAM,IAAI,aAAa,OAAO,OAAO;AAC3C,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IACjC,KAAI,KAAK,OAAO,KAAK;AAEvB,QAAO;;;;;;;AAQT,SAAgB,IAAI,GAAiB,GAAyB;CAC5D,MAAM,SAAS,KAAK,IAAI,EAAE,QAAQ,EAAE,OAAO;CAC3C,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,IAC1B,QAAO,EAAE,KAAK,EAAE;AAElB,QAAO;;;;;;;AAQT,SAAgB,OAAO,GAAiB,GAAyB;AAC/D,QAAO,IAAI,UAAU,EAAE,EAAE,UAAU,EAAE,CAAC;;;;;;;;AAYxC,SAAgB,KACd,OACA,YACA,GACA,UACa;CACb,MAAMA,SAAsB,EAAE;AAC9B,MAAK,MAAM,aAAa,YAAY;EAClC,MAAM,QAAQ,IAAI,OAAO,UAAU,OAAO;AAC1C,MAAI,aAAa,UAAa,QAAQ,SACpC;AAEF,SAAO,KAAK;GAAE,MAAM,UAAU;GAAM;GAAO,CAAC;;AAE9C,QAAO,MAAM,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM;AACxC,QAAO,OAAO,MAAM,GAAG,EAAE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tryhamster/gerbil",
3
- "version": "1.6.3",
3
+ "version": "1.7.0",
4
4
  "description": "On-device LLM inference for the browser and Node.js — text, vision, speech (TTS/STT), and embeddings on a native WebGPU engine. Offline, private, no API keys. React hooks, MCP, and Vercel AI SDK included.",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -21,6 +21,10 @@
21
21
  "import": "./dist/memory/index.mjs",
22
22
  "types": "./dist/memory/index.d.mts"
23
23
  },
24
+ "./tune": {
25
+ "import": "./dist/tune/index.mjs",
26
+ "types": "./dist/tune/index.d.mts"
27
+ },
24
28
  "./ai": {
25
29
  "import": "./dist/integrations/ai-sdk.mjs",
26
30
  "types": "./dist/integrations/ai-sdk.d.mts"
@@ -1,4 +0,0 @@
1
- import { t as Gerbil } from "./gerbil-qJhKR8JR.mjs";
2
- import "./utils-DKO55ZmZ.mjs";
3
-
4
- export { Gerbil };
@@ -1,4 +0,0 @@
1
- import "./vector-B0panuy6.mjs";
2
- import { n as createIndexedDBStore, t as IndexedDBStore } from "./indexeddb-store-BWIMtxxH.mjs";
3
-
4
- export { IndexedDBStore, createIndexedDBStore };
@@ -1,4 +0,0 @@
1
- import { n as createMemory, t as Memory } from "./memory-Dj0J1v88.mjs";
2
- import "./vector-B0panuy6.mjs";
3
-
4
- export { Memory, createMemory };
@@ -1,4 +0,0 @@
1
- import "./architectures-CpmH4Gha.mjs";
2
- import { t as MoonshineSTT } from "./moonshine-stt-BFIm_Xxk.mjs";
3
-
4
- export { MoonshineSTT };
@@ -1,9 +0,0 @@
1
- import "./gerbil-qJhKR8JR.mjs";
2
- import "./utils-DKO55ZmZ.mjs";
3
- import "./one-liner-CGozk7xR.mjs";
4
- import "./architectures-CpmH4Gha.mjs";
5
- import "./skills-DJ0cCjfD.mjs";
6
- import "./tools-DQ1mPUw5.mjs";
7
- import { n as startRepl, t as setCleanupPromise } from "./cli.mjs";
8
-
9
- export { setCleanupPromise };
File without changes