@tryhamster/gerbil 1.0.0-rc.2 → 1.0.0-rc.3

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 (88) hide show
  1. package/dist/browser/{index.d.mts → index.d.ts} +354 -3
  2. package/dist/browser/index.d.ts.map +1 -0
  3. package/dist/browser/{index.mjs → index.js} +116 -6
  4. package/dist/browser/index.js.map +1 -0
  5. package/dist/{chrome-backend-Y9F7W5VQ.mjs → chrome-backend-CORwaIyC.mjs} +1 -1
  6. package/dist/{chrome-backend-Y9F7W5VQ.mjs.map → chrome-backend-CORwaIyC.mjs.map} +1 -1
  7. package/dist/{chrome-backend-JEPeM2YE.mjs → chrome-backend-DIKYoWj-.mjs} +1 -1
  8. package/dist/cli.mjs +14 -15
  9. package/dist/cli.mjs.map +1 -1
  10. package/dist/frameworks/express.d.mts +1 -1
  11. package/dist/frameworks/express.mjs +3 -4
  12. package/dist/frameworks/express.mjs.map +1 -1
  13. package/dist/frameworks/fastify.d.mts +1 -1
  14. package/dist/frameworks/fastify.mjs +2 -3
  15. package/dist/frameworks/fastify.mjs.map +1 -1
  16. package/dist/frameworks/hono.d.mts +1 -1
  17. package/dist/frameworks/hono.mjs +2 -3
  18. package/dist/frameworks/hono.mjs.map +1 -1
  19. package/dist/frameworks/next.d.mts +2 -2
  20. package/dist/frameworks/next.mjs +2 -3
  21. package/dist/frameworks/next.mjs.map +1 -1
  22. package/dist/frameworks/react.d.mts +1 -1
  23. package/dist/frameworks/trpc.d.mts +1 -1
  24. package/dist/frameworks/trpc.mjs +2 -3
  25. package/dist/frameworks/trpc.mjs.map +1 -1
  26. package/dist/{gerbil-POAz8peb.d.mts → gerbil-CnncBh38.d.mts} +2 -2
  27. package/dist/{gerbil-POAz8peb.d.mts.map → gerbil-CnncBh38.d.mts.map} +1 -1
  28. package/dist/{gerbil-yoSpRHgv.mjs → gerbil-Dq039a6V.mjs} +187 -19
  29. package/dist/gerbil-Dq039a6V.mjs.map +1 -0
  30. package/dist/gerbil-DyTEWXLy.mjs +4 -0
  31. package/dist/index.d.mts +19 -3
  32. package/dist/index.d.mts.map +1 -1
  33. package/dist/index.mjs +6 -7
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/integrations/ai-sdk.d.mts +1 -1
  36. package/dist/integrations/ai-sdk.mjs +4 -5
  37. package/dist/integrations/ai-sdk.mjs.map +1 -1
  38. package/dist/integrations/langchain.d.mts +1 -1
  39. package/dist/integrations/langchain.mjs +2 -3
  40. package/dist/integrations/langchain.mjs.map +1 -1
  41. package/dist/integrations/llamaindex.d.mts +1 -1
  42. package/dist/integrations/llamaindex.mjs +2 -3
  43. package/dist/integrations/llamaindex.mjs.map +1 -1
  44. package/dist/integrations/mcp-client.mjs +2 -2
  45. package/dist/integrations/mcp.d.mts +2 -2
  46. package/dist/integrations/mcp.mjs +5 -6
  47. package/dist/{mcp-Bitg4sjX.mjs → mcp-DY57Whwj.mjs} +3 -3
  48. package/dist/{mcp-Bitg4sjX.mjs.map → mcp-DY57Whwj.mjs.map} +1 -1
  49. package/dist/{one-liner-B1rmFto6.mjs → one-liner-CgRVfe5K.mjs} +2 -2
  50. package/dist/{one-liner-B1rmFto6.mjs.map → one-liner-CgRVfe5K.mjs.map} +1 -1
  51. package/dist/repl-BEusmMZs.mjs +9 -0
  52. package/dist/skills/index.d.mts +2 -2
  53. package/dist/skills/index.d.mts.map +1 -1
  54. package/dist/skills/index.mjs +4 -5
  55. package/dist/{skills-5DxAV-rn.mjs → skills-BGS20rGK.mjs} +2 -2
  56. package/dist/{skills-5DxAV-rn.mjs.map → skills-BGS20rGK.mjs.map} +1 -1
  57. package/dist/stt-BT4Rt49f.mjs +3 -0
  58. package/dist/stt-BtklAjR2.js +439 -0
  59. package/dist/stt-BtklAjR2.js.map +1 -0
  60. package/dist/{stt-Bv_dum-R.mjs → stt-CkfJswka.mjs} +8 -2
  61. package/dist/stt-CkfJswka.mjs.map +1 -0
  62. package/dist/{tools-IYPrqoek.mjs → tools-Bi1P7Xoy.mjs} +2 -2
  63. package/dist/{tools-IYPrqoek.mjs.map → tools-Bi1P7Xoy.mjs.map} +1 -1
  64. package/dist/{tts-DG6denWG.mjs → tts-BFL984rV.mjs} +11 -3
  65. package/dist/tts-BFL984rV.mjs.map +1 -0
  66. package/dist/{tts-5yWeP_I0.mjs → tts-Cuu1TOkM.mjs} +1 -1
  67. package/dist/tts-DKIOWafo.js +731 -0
  68. package/dist/tts-DKIOWafo.js.map +1 -0
  69. package/dist/{types-s6Py2_DL.d.mts → types-DJhOZ6Ct.d.mts} +1 -1
  70. package/dist/{types-s6Py2_DL.d.mts.map → types-DJhOZ6Ct.d.mts.map} +1 -1
  71. package/dist/{utils-CkB4Roi6.mjs → utils-CZBZ8dgR.mjs} +1 -1
  72. package/dist/{utils-CkB4Roi6.mjs.map → utils-CZBZ8dgR.mjs.map} +1 -1
  73. package/package.json +1 -1
  74. package/dist/browser/index.d.mts.map +0 -1
  75. package/dist/browser/index.mjs.map +0 -1
  76. package/dist/gerbil-DeQlX_Mt.mjs +0 -5
  77. package/dist/gerbil-yoSpRHgv.mjs.map +0 -1
  78. package/dist/models-BAtL8qsA.mjs +0 -171
  79. package/dist/models-BAtL8qsA.mjs.map +0 -1
  80. package/dist/models-CE0fBq0U.d.mts +0 -22
  81. package/dist/models-CE0fBq0U.d.mts.map +0 -1
  82. package/dist/repl-D20JO260.mjs +0 -10
  83. package/dist/stt-Bv_dum-R.mjs.map +0 -1
  84. package/dist/stt-KzSoNvwI.mjs +0 -3
  85. package/dist/tts-DG6denWG.mjs.map +0 -1
  86. /package/dist/{auto-update-DsWBBnEk.mjs → auto-update-S9s5-g0C.mjs} +0 -0
  87. /package/dist/{chunk-Ct1HF2bE.mjs → chunk-CkXuGtQK.mjs} +0 -0
  88. /package/dist/{microphone-D-6y9aiE.mjs → microphone-DaMZFRuR.mjs} +0 -0
@@ -1,4 +1,4 @@
1
- import { c as GerbilConfig } from "../types-s6Py2_DL.mjs";
1
+ import { c as GerbilConfig } from "../types-DJhOZ6Ct.mjs";
2
2
  import { Request, Response, Router } from "express";
3
3
 
4
4
  //#region src/frameworks/express.d.ts
@@ -1,7 +1,6 @@
1
- import { t as __require } from "../chunk-Ct1HF2bE.mjs";
2
- import { t as Gerbil } from "../gerbil-yoSpRHgv.mjs";
3
- import "../models-BAtL8qsA.mjs";
4
- import "../utils-CkB4Roi6.mjs";
1
+ import { t as __require } from "../chunk-CkXuGtQK.mjs";
2
+ import { t as Gerbil } from "../gerbil-Dq039a6V.mjs";
3
+ import "../utils-CZBZ8dgR.mjs";
5
4
 
6
5
  //#region src/frameworks/express.ts
7
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"express.mjs","names":["loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/express.ts"],"sourcesContent":["/**\n * Gerbil Express Middleware\n *\n * @example\n * ```ts\n * import express from \"express\";\n * import { gerbil } from \"gerbil/express\";\n *\n * const app = express();\n * app.use(\"/ai\", gerbil());\n *\n * // POST /ai/generate\n * // POST /ai/stream\n * // POST /ai/json\n * // POST /ai/embed\n * ```\n */\n\nimport type { Request, Response, Router } from \"express\";\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilExpressOptions extends Omit<GerbilConfig, \"cache\"> {\n /** Rate limit (requests per minute) */\n rateLimit?: number;\n\n /** Enable caching */\n cache?: boolean;\n}\n\n/**\n * Create Gerbil Express middleware\n */\nexport function gerbil(options: GerbilExpressOptions = {}) {\n const { cache: _cache, rateLimit: _rateLimit, ...gerbilOptions } = options;\n const g = new Gerbil(gerbilOptions);\n let loadPromise: Promise<void> | null = null;\n\n async function ensureLoaded() {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(options.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n }\n\n // Return a router factory\n return function createRouter(): Router {\n // Dynamic import to avoid requiring express as a hard dependency\n const express = require(\"express\");\n const router = express.Router();\n\n router.use(express.json());\n\n // POST /generate\n router.post(\"/generate\", async (req: Request, res: Response) => {\n try {\n await ensureLoaded();\n const { prompt, ...opts } = req.body;\n const result = await g.generate(prompt, opts);\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // POST /stream\n router.post(\"/stream\", async (req: Request, res: Response) => {\n try {\n await ensureLoaded();\n const { prompt, ...opts } = req.body;\n\n res.setHeader(\"Content-Type\", \"text/event-stream\");\n res.setHeader(\"Cache-Control\", \"no-cache\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n for await (const chunk of g.stream(prompt, opts)) {\n res.write(`data: ${JSON.stringify({ chunk })}\\n\\n`);\n }\n\n res.write(\"data: [DONE]\\n\\n\");\n res.end();\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // POST /json\n router.post(\"/json\", async (req: Request, res: Response) => {\n try {\n await ensureLoaded();\n const { prompt, schema, ...opts } = req.body;\n\n // Convert JSON schema to Zod (simplified)\n const { z } = await import(\"zod\");\n const zodSchema = z.any(); // Would need proper conversion\n\n const result = await g.json(prompt, { schema: zodSchema, ...opts });\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // POST /embed\n router.post(\"/embed\", async (req: Request, res: Response) => {\n try {\n await ensureLoaded();\n const { text, texts, ...opts } = req.body;\n\n if (texts) {\n const results = await g.embedBatch(texts, opts);\n res.json(results);\n } else {\n const result = await g.embed(text, opts);\n res.json(result);\n }\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // GET /info\n router.get(\"/info\", async (_req: Request, res: Response) => {\n try {\n await ensureLoaded();\n res.json(g.getInfo());\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // GET /stats\n router.get(\"/stats\", async (_req: Request, res: Response) => {\n try {\n res.json(g.getStats());\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n return router;\n };\n}\n\n/**\n * Simple handler for single endpoint\n */\nexport function handler(options: GerbilExpressOptions = {}) {\n const { cache: _cache, rateLimit: _rateLimit, ...gerbilOptions } = options;\n const g = new Gerbil(gerbilOptions);\n let loadPromise: Promise<void> | null = null;\n\n return async (req: Request, res: Response) => {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(options.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n\n try {\n const { prompt, ...opts } = req.body;\n const result = await g.generate(prompt, opts);\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n };\n}\n\nexport default gerbil;\n"],"mappings":"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"}
1
+ {"version":3,"file":"express.mjs","names":["loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/express.ts"],"sourcesContent":["/**\n * Gerbil Express Middleware\n *\n * @example\n * ```ts\n * import express from \"express\";\n * import { gerbil } from \"gerbil/express\";\n *\n * const app = express();\n * app.use(\"/ai\", gerbil());\n *\n * // POST /ai/generate\n * // POST /ai/stream\n * // POST /ai/json\n * // POST /ai/embed\n * ```\n */\n\nimport type { Request, Response, Router } from \"express\";\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilExpressOptions extends Omit<GerbilConfig, \"cache\"> {\n /** Rate limit (requests per minute) */\n rateLimit?: number;\n\n /** Enable caching */\n cache?: boolean;\n}\n\n/**\n * Create Gerbil Express middleware\n */\nexport function gerbil(options: GerbilExpressOptions = {}) {\n const { cache: _cache, rateLimit: _rateLimit, ...gerbilOptions } = options;\n const g = new Gerbil(gerbilOptions);\n let loadPromise: Promise<void> | null = null;\n\n async function ensureLoaded() {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(options.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n }\n\n // Return a router factory\n return function createRouter(): Router {\n // Dynamic import to avoid requiring express as a hard dependency\n const express = require(\"express\");\n const router = express.Router();\n\n router.use(express.json());\n\n // POST /generate\n router.post(\"/generate\", async (req: Request, res: Response) => {\n try {\n await ensureLoaded();\n const { prompt, ...opts } = req.body;\n const result = await g.generate(prompt, opts);\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // POST /stream\n router.post(\"/stream\", async (req: Request, res: Response) => {\n try {\n await ensureLoaded();\n const { prompt, ...opts } = req.body;\n\n res.setHeader(\"Content-Type\", \"text/event-stream\");\n res.setHeader(\"Cache-Control\", \"no-cache\");\n res.setHeader(\"Connection\", \"keep-alive\");\n\n for await (const chunk of g.stream(prompt, opts)) {\n res.write(`data: ${JSON.stringify({ chunk })}\\n\\n`);\n }\n\n res.write(\"data: [DONE]\\n\\n\");\n res.end();\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // POST /json\n router.post(\"/json\", async (req: Request, res: Response) => {\n try {\n await ensureLoaded();\n const { prompt, schema, ...opts } = req.body;\n\n // Convert JSON schema to Zod (simplified)\n const { z } = await import(\"zod\");\n const zodSchema = z.any(); // Would need proper conversion\n\n const result = await g.json(prompt, { schema: zodSchema, ...opts });\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // POST /embed\n router.post(\"/embed\", async (req: Request, res: Response) => {\n try {\n await ensureLoaded();\n const { text, texts, ...opts } = req.body;\n\n if (texts) {\n const results = await g.embedBatch(texts, opts);\n res.json(results);\n } else {\n const result = await g.embed(text, opts);\n res.json(result);\n }\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // GET /info\n router.get(\"/info\", async (_req: Request, res: Response) => {\n try {\n await ensureLoaded();\n res.json(g.getInfo());\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n // GET /stats\n router.get(\"/stats\", async (_req: Request, res: Response) => {\n try {\n res.json(g.getStats());\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n });\n\n return router;\n };\n}\n\n/**\n * Simple handler for single endpoint\n */\nexport function handler(options: GerbilExpressOptions = {}) {\n const { cache: _cache, rateLimit: _rateLimit, ...gerbilOptions } = options;\n const g = new Gerbil(gerbilOptions);\n let loadPromise: Promise<void> | null = null;\n\n return async (req: Request, res: Response) => {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(options.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n\n try {\n const { prompt, ...opts } = req.body;\n const result = await g.generate(prompt, opts);\n res.json(result);\n } catch (error) {\n res.status(500).json({ error: String(error) });\n }\n };\n}\n\nexport default gerbil;\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { c as GerbilConfig } from "../types-s6Py2_DL.mjs";
1
+ import { c as GerbilConfig } from "../types-DJhOZ6Ct.mjs";
2
2
 
3
3
  //#region src/frameworks/fastify.d.ts
4
4
 
@@ -1,6 +1,5 @@
1
- import { t as Gerbil } from "../gerbil-yoSpRHgv.mjs";
2
- import "../models-BAtL8qsA.mjs";
3
- import "../utils-CkB4Roi6.mjs";
1
+ import { t as Gerbil } from "../gerbil-Dq039a6V.mjs";
2
+ import "../utils-CZBZ8dgR.mjs";
4
3
 
5
4
  //#region src/frameworks/fastify.ts
6
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fastify.mjs","names":["loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/fastify.ts"],"sourcesContent":["/**\n * Gerbil Fastify Plugin\n *\n * @example\n * ```ts\n * import Fastify from \"fastify\";\n * import { gerbilPlugin } from \"gerbil/fastify\";\n *\n * const app = Fastify();\n * app.register(gerbilPlugin, { prefix: \"/ai\" });\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilFastifyOptions extends GerbilConfig {\n prefix?: string;\n}\n\nexport async function gerbilPlugin(fastify: any, options: GerbilFastifyOptions = {}) {\n const { prefix = \"/ai\", ...gerbilConfig } = options;\n const g = new Gerbil(gerbilConfig);\n let loadPromise: Promise<void> | null = null;\n\n async function ensureLoaded() {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(gerbilConfig.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n }\n\n // Decorate fastify with gerbil instance\n fastify.decorate(\"gerbil\", g);\n\n // POST /generate\n fastify.post(`${prefix}/generate`, async (request: any, _reply: any) => {\n await ensureLoaded();\n const { prompt, ...opts } = request.body;\n const result = await g.generate(prompt, opts);\n return result;\n });\n\n // POST /stream\n fastify.post(`${prefix}/stream`, async (request: any, reply: any) => {\n await ensureLoaded();\n const { prompt, ...opts } = request.body;\n\n reply.raw.writeHead(200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n\n for await (const chunk of g.stream(prompt, opts)) {\n reply.raw.write(`data: ${JSON.stringify({ chunk })}\\n\\n`);\n }\n\n reply.raw.write(\"data: [DONE]\\n\\n\");\n reply.raw.end();\n });\n\n // POST /json\n fastify.post(`${prefix}/json`, async (request: any, _reply: any) => {\n await ensureLoaded();\n const { prompt, schema, ...opts } = request.body;\n const { z } = await import(\"zod\");\n const zodSchema = z.any();\n const result = await g.json(prompt, { schema: zodSchema, ...opts });\n return result;\n });\n\n // POST /embed\n fastify.post(`${prefix}/embed`, async (request: any, _reply: any) => {\n await ensureLoaded();\n const { text, texts, ...opts } = request.body;\n if (texts) {\n return g.embedBatch(texts, opts);\n }\n return g.embed(text, opts);\n });\n\n // GET /info\n fastify.get(`${prefix}/info`, async (_request: any, _reply: any) => {\n await ensureLoaded();\n return g.getInfo();\n });\n\n // GET /stats\n fastify.get(`${prefix}/stats`, async (_request: any, _reply: any) => g.getStats());\n}\n\nexport default gerbilPlugin;\n"],"mappings":";;;;;;;;;;;;;;;;;AAoBA,eAAsB,aAAa,SAAc,UAAgC,EAAE,EAAE;CACnF,MAAM,EAAE,SAAS,OAAO,GAAG,iBAAiB;CAC5C,MAAM,IAAI,IAAI,OAAO,aAAa;CAClC,IAAIA,cAAoC;CAExC,eAAe,eAAe;AAC5B,MAAI,EAAE,EAAE,UAAU,IAAI,aACpB,eAAc,EAAE,UAAU,aAAa,SAAS,aAAa;AAE/D,MAAI,aAAa;AACf,SAAM;AACN,iBAAc;;;AAKlB,SAAQ,SAAS,UAAU,EAAE;AAG7B,SAAQ,KAAK,GAAG,OAAO,YAAY,OAAO,SAAc,WAAgB;AACtE,QAAM,cAAc;EACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,QAAQ;AAEpC,SADe,MAAM,EAAE,SAAS,QAAQ,KAAK;GAE7C;AAGF,SAAQ,KAAK,GAAG,OAAO,UAAU,OAAO,SAAc,UAAe;AACnE,QAAM,cAAc;EACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,QAAQ;AAEpC,QAAM,IAAI,UAAU,KAAK;GACvB,gBAAgB;GAChB,iBAAiB;GACjB,YAAY;GACb,CAAC;AAEF,aAAW,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,CAC9C,OAAM,IAAI,MAAM,SAAS,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM;AAG3D,QAAM,IAAI,MAAM,mBAAmB;AACnC,QAAM,IAAI,KAAK;GACf;AAGF,SAAQ,KAAK,GAAG,OAAO,QAAQ,OAAO,SAAc,WAAgB;AAClE,QAAM,cAAc;EACpB,MAAM,EAAE,QAAQ,QAAQ,GAAG,SAAS,QAAQ;EAC5C,MAAM,EAAE,MAAM,MAAM,OAAO;EAC3B,MAAM,YAAY,EAAE,KAAK;AAEzB,SADe,MAAM,EAAE,KAAK,QAAQ;GAAE,QAAQ;GAAW,GAAG;GAAM,CAAC;GAEnE;AAGF,SAAQ,KAAK,GAAG,OAAO,SAAS,OAAO,SAAc,WAAgB;AACnE,QAAM,cAAc;EACpB,MAAM,EAAE,MAAM,OAAO,GAAG,SAAS,QAAQ;AACzC,MAAI,MACF,QAAO,EAAE,WAAW,OAAO,KAAK;AAElC,SAAO,EAAE,MAAM,MAAM,KAAK;GAC1B;AAGF,SAAQ,IAAI,GAAG,OAAO,QAAQ,OAAO,UAAe,WAAgB;AAClE,QAAM,cAAc;AACpB,SAAO,EAAE,SAAS;GAClB;AAGF,SAAQ,IAAI,GAAG,OAAO,SAAS,OAAO,UAAe,WAAgB,EAAE,UAAU,CAAC;;AAGpF,sBAAe"}
1
+ {"version":3,"file":"fastify.mjs","names":["loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/fastify.ts"],"sourcesContent":["/**\n * Gerbil Fastify Plugin\n *\n * @example\n * ```ts\n * import Fastify from \"fastify\";\n * import { gerbilPlugin } from \"gerbil/fastify\";\n *\n * const app = Fastify();\n * app.register(gerbilPlugin, { prefix: \"/ai\" });\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilFastifyOptions extends GerbilConfig {\n prefix?: string;\n}\n\nexport async function gerbilPlugin(fastify: any, options: GerbilFastifyOptions = {}) {\n const { prefix = \"/ai\", ...gerbilConfig } = options;\n const g = new Gerbil(gerbilConfig);\n let loadPromise: Promise<void> | null = null;\n\n async function ensureLoaded() {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(gerbilConfig.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n }\n\n // Decorate fastify with gerbil instance\n fastify.decorate(\"gerbil\", g);\n\n // POST /generate\n fastify.post(`${prefix}/generate`, async (request: any, _reply: any) => {\n await ensureLoaded();\n const { prompt, ...opts } = request.body;\n const result = await g.generate(prompt, opts);\n return result;\n });\n\n // POST /stream\n fastify.post(`${prefix}/stream`, async (request: any, reply: any) => {\n await ensureLoaded();\n const { prompt, ...opts } = request.body;\n\n reply.raw.writeHead(200, {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n\n for await (const chunk of g.stream(prompt, opts)) {\n reply.raw.write(`data: ${JSON.stringify({ chunk })}\\n\\n`);\n }\n\n reply.raw.write(\"data: [DONE]\\n\\n\");\n reply.raw.end();\n });\n\n // POST /json\n fastify.post(`${prefix}/json`, async (request: any, _reply: any) => {\n await ensureLoaded();\n const { prompt, schema, ...opts } = request.body;\n const { z } = await import(\"zod\");\n const zodSchema = z.any();\n const result = await g.json(prompt, { schema: zodSchema, ...opts });\n return result;\n });\n\n // POST /embed\n fastify.post(`${prefix}/embed`, async (request: any, _reply: any) => {\n await ensureLoaded();\n const { text, texts, ...opts } = request.body;\n if (texts) {\n return g.embedBatch(texts, opts);\n }\n return g.embed(text, opts);\n });\n\n // GET /info\n fastify.get(`${prefix}/info`, async (_request: any, _reply: any) => {\n await ensureLoaded();\n return g.getInfo();\n });\n\n // GET /stats\n fastify.get(`${prefix}/stats`, async (_request: any, _reply: any) => g.getStats());\n}\n\nexport default gerbilPlugin;\n"],"mappings":";;;;;;;;;;;;;;;;AAoBA,eAAsB,aAAa,SAAc,UAAgC,EAAE,EAAE;CACnF,MAAM,EAAE,SAAS,OAAO,GAAG,iBAAiB;CAC5C,MAAM,IAAI,IAAI,OAAO,aAAa;CAClC,IAAIA,cAAoC;CAExC,eAAe,eAAe;AAC5B,MAAI,EAAE,EAAE,UAAU,IAAI,aACpB,eAAc,EAAE,UAAU,aAAa,SAAS,aAAa;AAE/D,MAAI,aAAa;AACf,SAAM;AACN,iBAAc;;;AAKlB,SAAQ,SAAS,UAAU,EAAE;AAG7B,SAAQ,KAAK,GAAG,OAAO,YAAY,OAAO,SAAc,WAAgB;AACtE,QAAM,cAAc;EACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,QAAQ;AAEpC,SADe,MAAM,EAAE,SAAS,QAAQ,KAAK;GAE7C;AAGF,SAAQ,KAAK,GAAG,OAAO,UAAU,OAAO,SAAc,UAAe;AACnE,QAAM,cAAc;EACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,QAAQ;AAEpC,QAAM,IAAI,UAAU,KAAK;GACvB,gBAAgB;GAChB,iBAAiB;GACjB,YAAY;GACb,CAAC;AAEF,aAAW,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,CAC9C,OAAM,IAAI,MAAM,SAAS,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM;AAG3D,QAAM,IAAI,MAAM,mBAAmB;AACnC,QAAM,IAAI,KAAK;GACf;AAGF,SAAQ,KAAK,GAAG,OAAO,QAAQ,OAAO,SAAc,WAAgB;AAClE,QAAM,cAAc;EACpB,MAAM,EAAE,QAAQ,QAAQ,GAAG,SAAS,QAAQ;EAC5C,MAAM,EAAE,MAAM,MAAM,OAAO;EAC3B,MAAM,YAAY,EAAE,KAAK;AAEzB,SADe,MAAM,EAAE,KAAK,QAAQ;GAAE,QAAQ;GAAW,GAAG;GAAM,CAAC;GAEnE;AAGF,SAAQ,KAAK,GAAG,OAAO,SAAS,OAAO,SAAc,WAAgB;AACnE,QAAM,cAAc;EACpB,MAAM,EAAE,MAAM,OAAO,GAAG,SAAS,QAAQ;AACzC,MAAI,MACF,QAAO,EAAE,WAAW,OAAO,KAAK;AAElC,SAAO,EAAE,MAAM,MAAM,KAAK;GAC1B;AAGF,SAAQ,IAAI,GAAG,OAAO,QAAQ,OAAO,UAAe,WAAgB;AAClE,QAAM,cAAc;AACpB,SAAO,EAAE,SAAS;GAClB;AAGF,SAAQ,IAAI,GAAG,OAAO,SAAS,OAAO,UAAe,WAAgB,EAAE,UAAU,CAAC;;AAGpF,sBAAe"}
@@ -1,4 +1,4 @@
1
- import { c as GerbilConfig } from "../types-s6Py2_DL.mjs";
1
+ import { c as GerbilConfig } from "../types-DJhOZ6Ct.mjs";
2
2
  import * as hono0 from "hono";
3
3
  import * as hono_types0 from "hono/types";
4
4
 
@@ -1,6 +1,5 @@
1
- import { t as Gerbil } from "../gerbil-yoSpRHgv.mjs";
2
- import "../models-BAtL8qsA.mjs";
3
- import "../utils-CkB4Roi6.mjs";
1
+ import { t as Gerbil } from "../gerbil-Dq039a6V.mjs";
2
+ import "../utils-CZBZ8dgR.mjs";
4
3
 
5
4
  //#region src/frameworks/hono.ts
6
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"hono.mjs","names":["loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/hono.ts"],"sourcesContent":["/**\n * Gerbil Hono Middleware\n *\n * @example\n * ```ts\n * import { Hono } from \"hono\";\n * import { gerbil } from \"gerbil/hono\";\n *\n * const app = new Hono();\n * app.route(\"/ai\", gerbil({ model: \"qwen3-0.6b\" }));\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilHonoOptions extends GerbilConfig {}\n\n/**\n * Create Gerbil Hono routes\n */\nexport function gerbil(options: GerbilHonoOptions = {}) {\n const g = new Gerbil(options);\n let loadPromise: Promise<void> | null = null;\n\n async function ensureLoaded() {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(options.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n }\n\n // Dynamic import Hono\n return async function createApp() {\n const { Hono } = await import(\"hono\");\n const { streamSSE } = await import(\"hono/streaming\");\n\n const app = new Hono();\n\n // POST /generate\n app.post(\"/generate\", async (c) => {\n await ensureLoaded();\n const { prompt, ...opts } = await c.req.json();\n const result = await g.generate(prompt, opts);\n return c.json(result);\n });\n\n // POST /stream\n app.post(\"/stream\", async (c) => {\n await ensureLoaded();\n const { prompt, ...opts } = await c.req.json();\n\n return streamSSE(c, async (stream) => {\n for await (const chunk of g.stream(prompt, opts)) {\n await stream.writeSSE({ data: JSON.stringify({ chunk }) });\n }\n await stream.writeSSE({ data: \"[DONE]\" });\n });\n });\n\n // POST /json\n app.post(\"/json\", async (c) => {\n await ensureLoaded();\n const { prompt, schema, ...opts } = await c.req.json();\n const { z } = await import(\"zod\");\n const zodSchema = z.any();\n const result = await g.json(prompt, { schema: zodSchema, ...opts });\n return c.json(result);\n });\n\n // POST /embed\n app.post(\"/embed\", async (c) => {\n await ensureLoaded();\n const { text, texts, ...opts } = await c.req.json();\n if (texts) {\n const results = await g.embedBatch(texts, opts);\n return c.json(results);\n }\n const result = await g.embed(text, opts);\n return c.json(result);\n });\n\n // GET /info\n app.get(\"/info\", async (c) => {\n await ensureLoaded();\n return c.json(g.getInfo());\n });\n\n // GET /stats\n app.get(\"/stats\", (c) => c.json(g.getStats()));\n\n return app;\n };\n}\n\nexport default gerbil;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,OAAO,UAA6B,EAAE,EAAE;CACtD,MAAM,IAAI,IAAI,OAAO,QAAQ;CAC7B,IAAIA,cAAoC;CAExC,eAAe,eAAe;AAC5B,MAAI,EAAE,EAAE,UAAU,IAAI,aACpB,eAAc,EAAE,UAAU,QAAQ,SAAS,aAAa;AAE1D,MAAI,aAAa;AACf,SAAM;AACN,iBAAc;;;AAKlB,QAAO,eAAe,YAAY;EAChC,MAAM,EAAE,SAAS,MAAM,OAAO;EAC9B,MAAM,EAAE,cAAc,MAAM,OAAO;EAEnC,MAAM,MAAM,IAAI,MAAM;AAGtB,MAAI,KAAK,aAAa,OAAO,MAAM;AACjC,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,IAAI,MAAM;GAC9C,MAAM,SAAS,MAAM,EAAE,SAAS,QAAQ,KAAK;AAC7C,UAAO,EAAE,KAAK,OAAO;IACrB;AAGF,MAAI,KAAK,WAAW,OAAO,MAAM;AAC/B,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,IAAI,MAAM;AAE9C,UAAO,UAAU,GAAG,OAAO,WAAW;AACpC,eAAW,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,CAC9C,OAAM,OAAO,SAAS,EAAE,MAAM,KAAK,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;AAE5D,UAAM,OAAO,SAAS,EAAE,MAAM,UAAU,CAAC;KACzC;IACF;AAGF,MAAI,KAAK,SAAS,OAAO,MAAM;AAC7B,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,QAAQ,GAAG,SAAS,MAAM,EAAE,IAAI,MAAM;GACtD,MAAM,EAAE,MAAM,MAAM,OAAO;GAC3B,MAAM,YAAY,EAAE,KAAK;GACzB,MAAM,SAAS,MAAM,EAAE,KAAK,QAAQ;IAAE,QAAQ;IAAW,GAAG;IAAM,CAAC;AACnE,UAAO,EAAE,KAAK,OAAO;IACrB;AAGF,MAAI,KAAK,UAAU,OAAO,MAAM;AAC9B,SAAM,cAAc;GACpB,MAAM,EAAE,MAAM,OAAO,GAAG,SAAS,MAAM,EAAE,IAAI,MAAM;AACnD,OAAI,OAAO;IACT,MAAM,UAAU,MAAM,EAAE,WAAW,OAAO,KAAK;AAC/C,WAAO,EAAE,KAAK,QAAQ;;GAExB,MAAM,SAAS,MAAM,EAAE,MAAM,MAAM,KAAK;AACxC,UAAO,EAAE,KAAK,OAAO;IACrB;AAGF,MAAI,IAAI,SAAS,OAAO,MAAM;AAC5B,SAAM,cAAc;AACpB,UAAO,EAAE,KAAK,EAAE,SAAS,CAAC;IAC1B;AAGF,MAAI,IAAI,WAAW,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAE9C,SAAO;;;AAIX,mBAAe"}
1
+ {"version":3,"file":"hono.mjs","names":["loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/hono.ts"],"sourcesContent":["/**\n * Gerbil Hono Middleware\n *\n * @example\n * ```ts\n * import { Hono } from \"hono\";\n * import { gerbil } from \"gerbil/hono\";\n *\n * const app = new Hono();\n * app.route(\"/ai\", gerbil({ model: \"qwen3-0.6b\" }));\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilHonoOptions extends GerbilConfig {}\n\n/**\n * Create Gerbil Hono routes\n */\nexport function gerbil(options: GerbilHonoOptions = {}) {\n const g = new Gerbil(options);\n let loadPromise: Promise<void> | null = null;\n\n async function ensureLoaded() {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(options.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n }\n\n // Dynamic import Hono\n return async function createApp() {\n const { Hono } = await import(\"hono\");\n const { streamSSE } = await import(\"hono/streaming\");\n\n const app = new Hono();\n\n // POST /generate\n app.post(\"/generate\", async (c) => {\n await ensureLoaded();\n const { prompt, ...opts } = await c.req.json();\n const result = await g.generate(prompt, opts);\n return c.json(result);\n });\n\n // POST /stream\n app.post(\"/stream\", async (c) => {\n await ensureLoaded();\n const { prompt, ...opts } = await c.req.json();\n\n return streamSSE(c, async (stream) => {\n for await (const chunk of g.stream(prompt, opts)) {\n await stream.writeSSE({ data: JSON.stringify({ chunk }) });\n }\n await stream.writeSSE({ data: \"[DONE]\" });\n });\n });\n\n // POST /json\n app.post(\"/json\", async (c) => {\n await ensureLoaded();\n const { prompt, schema, ...opts } = await c.req.json();\n const { z } = await import(\"zod\");\n const zodSchema = z.any();\n const result = await g.json(prompt, { schema: zodSchema, ...opts });\n return c.json(result);\n });\n\n // POST /embed\n app.post(\"/embed\", async (c) => {\n await ensureLoaded();\n const { text, texts, ...opts } = await c.req.json();\n if (texts) {\n const results = await g.embedBatch(texts, opts);\n return c.json(results);\n }\n const result = await g.embed(text, opts);\n return c.json(result);\n });\n\n // GET /info\n app.get(\"/info\", async (c) => {\n await ensureLoaded();\n return c.json(g.getInfo());\n });\n\n // GET /stats\n app.get(\"/stats\", (c) => c.json(g.getStats()));\n\n return app;\n };\n}\n\nexport default gerbil;\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,OAAO,UAA6B,EAAE,EAAE;CACtD,MAAM,IAAI,IAAI,OAAO,QAAQ;CAC7B,IAAIA,cAAoC;CAExC,eAAe,eAAe;AAC5B,MAAI,EAAE,EAAE,UAAU,IAAI,aACpB,eAAc,EAAE,UAAU,QAAQ,SAAS,aAAa;AAE1D,MAAI,aAAa;AACf,SAAM;AACN,iBAAc;;;AAKlB,QAAO,eAAe,YAAY;EAChC,MAAM,EAAE,SAAS,MAAM,OAAO;EAC9B,MAAM,EAAE,cAAc,MAAM,OAAO;EAEnC,MAAM,MAAM,IAAI,MAAM;AAGtB,MAAI,KAAK,aAAa,OAAO,MAAM;AACjC,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,IAAI,MAAM;GAC9C,MAAM,SAAS,MAAM,EAAE,SAAS,QAAQ,KAAK;AAC7C,UAAO,EAAE,KAAK,OAAO;IACrB;AAGF,MAAI,KAAK,WAAW,OAAO,MAAM;AAC/B,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,GAAG,SAAS,MAAM,EAAE,IAAI,MAAM;AAE9C,UAAO,UAAU,GAAG,OAAO,WAAW;AACpC,eAAW,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,CAC9C,OAAM,OAAO,SAAS,EAAE,MAAM,KAAK,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;AAE5D,UAAM,OAAO,SAAS,EAAE,MAAM,UAAU,CAAC;KACzC;IACF;AAGF,MAAI,KAAK,SAAS,OAAO,MAAM;AAC7B,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,QAAQ,GAAG,SAAS,MAAM,EAAE,IAAI,MAAM;GACtD,MAAM,EAAE,MAAM,MAAM,OAAO;GAC3B,MAAM,YAAY,EAAE,KAAK;GACzB,MAAM,SAAS,MAAM,EAAE,KAAK,QAAQ;IAAE,QAAQ;IAAW,GAAG;IAAM,CAAC;AACnE,UAAO,EAAE,KAAK,OAAO;IACrB;AAGF,MAAI,KAAK,UAAU,OAAO,MAAM;AAC9B,SAAM,cAAc;GACpB,MAAM,EAAE,MAAM,OAAO,GAAG,SAAS,MAAM,EAAE,IAAI,MAAM;AACnD,OAAI,OAAO;IACT,MAAM,UAAU,MAAM,EAAE,WAAW,OAAO,KAAK;AAC/C,WAAO,EAAE,KAAK,QAAQ;;GAExB,MAAM,SAAS,MAAM,EAAE,MAAM,MAAM,KAAK;AACxC,UAAO,EAAE,KAAK,OAAO;IACrB;AAGF,MAAI,IAAI,SAAS,OAAO,MAAM;AAC5B,SAAM,cAAc;AACpB,UAAO,EAAE,KAAK,EAAE,SAAS,CAAC;IAC1B;AAGF,MAAI,IAAI,WAAW,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;AAE9C,SAAO;;;AAIX,mBAAe"}
@@ -1,5 +1,5 @@
1
- import { c as GerbilConfig } from "../types-s6Py2_DL.mjs";
2
- import { t as Gerbil } from "../gerbil-POAz8peb.mjs";
1
+ import { c as GerbilConfig } from "../types-DJhOZ6Ct.mjs";
2
+ import { t as Gerbil } from "../gerbil-CnncBh38.mjs";
3
3
 
4
4
  //#region src/frameworks/next.d.ts
5
5
 
@@ -1,6 +1,5 @@
1
- import { t as Gerbil } from "../gerbil-yoSpRHgv.mjs";
2
- import "../models-BAtL8qsA.mjs";
3
- import "../utils-CkB4Roi6.mjs";
1
+ import { t as Gerbil } from "../gerbil-Dq039a6V.mjs";
2
+ import "../utils-CZBZ8dgR.mjs";
4
3
 
5
4
  //#region src/frameworks/next.ts
6
5
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"next.mjs","names":["instance: Gerbil | null","loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/next.ts"],"sourcesContent":["/**\n * Gerbil Next.js Integration\n *\n * @example\n * ```ts\n * // app/api/chat/route.ts\n * import { gerbil } from \"gerbil/next\";\n *\n * export const POST = gerbil.handler({\n * model: \"qwen3-0.6b\",\n * });\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilNextOptions extends GerbilConfig {\n /** Preload model on startup */\n preload?: boolean;\n}\n\n// Singleton instance for Next.js (persists across requests in dev)\nlet instance: Gerbil | null = null;\nlet loadPromise: Promise<void> | null = null;\n\nasync function getInstance(options: GerbilNextOptions): Promise<Gerbil> {\n if (!instance) {\n instance = new Gerbil(options);\n }\n\n if (!(instance.isLoaded() || loadPromise)) {\n loadPromise = instance.loadModel(options.model || \"qwen3-0.6b\");\n }\n\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n\n return instance;\n}\n\n/**\n * Create a Next.js API route handler\n */\nexport function handler(options: GerbilNextOptions = {}) {\n return async function POST(req: Request): Promise<Response> {\n try {\n const g = await getInstance(options);\n const body = await req.json();\n const { prompt, stream: isStreaming, ...opts } = body;\n\n if (isStreaming) {\n // Streaming response\n const encoder = new TextEncoder();\n const readable = new ReadableStream({\n async start(controller) {\n try {\n for await (const chunk of g.stream(prompt, opts)) {\n controller.enqueue(encoder.encode(`data: ${JSON.stringify({ chunk })}\\n\\n`));\n }\n controller.enqueue(encoder.encode(\"data: [DONE]\\n\\n\"));\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n\n return new Response(readable, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n }\n // Non-streaming response\n const result = await g.generate(prompt, opts);\n return Response.json(result);\n } catch (error) {\n return Response.json({ error: String(error) }, { status: 500 });\n }\n };\n}\n\n/**\n * Create handlers for all endpoints\n */\nexport function createHandlers(options: GerbilNextOptions = {}) {\n return {\n generate: handler(options),\n\n async json(req: Request): Promise<Response> {\n try {\n const g = await getInstance(options);\n const body = await req.json();\n const { prompt, schema, ...opts } = body;\n\n const { z } = await import(\"zod\");\n const zodSchema = z.any();\n\n const result = await g.json(prompt, { schema: zodSchema, ...opts });\n return Response.json(result);\n } catch (error) {\n return Response.json({ error: String(error) }, { status: 500 });\n }\n },\n\n async embed(req: Request): Promise<Response> {\n try {\n const g = await getInstance(options);\n const body = await req.json();\n const { text, texts, ...opts } = body;\n\n if (texts) {\n const results = await g.embedBatch(texts, opts);\n return Response.json(results);\n }\n const result = await g.embed(text, opts);\n return Response.json(result);\n } catch (error) {\n return Response.json({ error: String(error) }, { status: 500 });\n }\n },\n\n async info(_req: Request): Promise<Response> {\n try {\n const g = await getInstance(options);\n return Response.json(g.getInfo());\n } catch (error) {\n return Response.json({ error: String(error) }, { status: 500 });\n }\n },\n };\n}\n\nexport const gerbil = {\n handler,\n createHandlers,\n getInstance,\n};\n\nexport default gerbil;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAuBA,IAAIA,WAA0B;AAC9B,IAAIC,cAAoC;AAExC,eAAe,YAAY,SAA6C;AACtE,KAAI,CAAC,SACH,YAAW,IAAI,OAAO,QAAQ;AAGhC,KAAI,EAAE,SAAS,UAAU,IAAI,aAC3B,eAAc,SAAS,UAAU,QAAQ,SAAS,aAAa;AAGjE,KAAI,aAAa;AACf,QAAM;AACN,gBAAc;;AAGhB,QAAO;;;;;AAMT,SAAgB,QAAQ,UAA6B,EAAE,EAAE;AACvD,QAAO,eAAe,KAAK,KAAiC;AAC1D,MAAI;GACF,MAAM,IAAI,MAAM,YAAY,QAAQ;GAEpC,MAAM,EAAE,QAAQ,QAAQ,aAAa,GAAG,SAD3B,MAAM,IAAI,MAAM;AAG7B,OAAI,aAAa;IAEf,MAAM,UAAU,IAAI,aAAa;IACjC,MAAM,WAAW,IAAI,eAAe,EAClC,MAAM,MAAM,YAAY;AACtB,SAAI;AACF,iBAAW,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,CAC9C,YAAW,QAAQ,QAAQ,OAAO,SAAS,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC;AAE9E,iBAAW,QAAQ,QAAQ,OAAO,mBAAmB,CAAC;AACtD,iBAAW,OAAO;cACX,OAAO;AACd,iBAAW,MAAM,MAAM;;OAG5B,CAAC;AAEF,WAAO,IAAI,SAAS,UAAU,EAC5B,SAAS;KACP,gBAAgB;KAChB,iBAAiB;KACjB,YAAY;KACb,EACF,CAAC;;GAGJ,MAAM,SAAS,MAAM,EAAE,SAAS,QAAQ,KAAK;AAC7C,UAAO,SAAS,KAAK,OAAO;WACrB,OAAO;AACd,UAAO,SAAS,KAAK,EAAE,OAAO,OAAO,MAAM,EAAE,EAAE,EAAE,QAAQ,KAAK,CAAC;;;;;;;AAQrE,SAAgB,eAAe,UAA6B,EAAE,EAAE;AAC9D,QAAO;EACL,UAAU,QAAQ,QAAQ;EAE1B,MAAM,KAAK,KAAiC;AAC1C,OAAI;IACF,MAAM,IAAI,MAAM,YAAY,QAAQ;IAEpC,MAAM,EAAE,QAAQ,QAAQ,GAAG,SADd,MAAM,IAAI,MAAM;IAG7B,MAAM,EAAE,MAAM,MAAM,OAAO;IAC3B,MAAM,YAAY,EAAE,KAAK;IAEzB,MAAM,SAAS,MAAM,EAAE,KAAK,QAAQ;KAAE,QAAQ;KAAW,GAAG;KAAM,CAAC;AACnE,WAAO,SAAS,KAAK,OAAO;YACrB,OAAO;AACd,WAAO,SAAS,KAAK,EAAE,OAAO,OAAO,MAAM,EAAE,EAAE,EAAE,QAAQ,KAAK,CAAC;;;EAInE,MAAM,MAAM,KAAiC;AAC3C,OAAI;IACF,MAAM,IAAI,MAAM,YAAY,QAAQ;IAEpC,MAAM,EAAE,MAAM,OAAO,GAAG,SADX,MAAM,IAAI,MAAM;AAG7B,QAAI,OAAO;KACT,MAAM,UAAU,MAAM,EAAE,WAAW,OAAO,KAAK;AAC/C,YAAO,SAAS,KAAK,QAAQ;;IAE/B,MAAM,SAAS,MAAM,EAAE,MAAM,MAAM,KAAK;AACxC,WAAO,SAAS,KAAK,OAAO;YACrB,OAAO;AACd,WAAO,SAAS,KAAK,EAAE,OAAO,OAAO,MAAM,EAAE,EAAE,EAAE,QAAQ,KAAK,CAAC;;;EAInE,MAAM,KAAK,MAAkC;AAC3C,OAAI;IACF,MAAM,IAAI,MAAM,YAAY,QAAQ;AACpC,WAAO,SAAS,KAAK,EAAE,SAAS,CAAC;YAC1B,OAAO;AACd,WAAO,SAAS,KAAK,EAAE,OAAO,OAAO,MAAM,EAAE,EAAE,EAAE,QAAQ,KAAK,CAAC;;;EAGpE;;AAGH,MAAa,SAAS;CACpB;CACA;CACA;CACD;AAED,mBAAe"}
1
+ {"version":3,"file":"next.mjs","names":["instance: Gerbil | null","loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/next.ts"],"sourcesContent":["/**\n * Gerbil Next.js Integration\n *\n * @example\n * ```ts\n * // app/api/chat/route.ts\n * import { gerbil } from \"gerbil/next\";\n *\n * export const POST = gerbil.handler({\n * model: \"qwen3-0.6b\",\n * });\n * ```\n */\n\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilNextOptions extends GerbilConfig {\n /** Preload model on startup */\n preload?: boolean;\n}\n\n// Singleton instance for Next.js (persists across requests in dev)\nlet instance: Gerbil | null = null;\nlet loadPromise: Promise<void> | null = null;\n\nasync function getInstance(options: GerbilNextOptions): Promise<Gerbil> {\n if (!instance) {\n instance = new Gerbil(options);\n }\n\n if (!(instance.isLoaded() || loadPromise)) {\n loadPromise = instance.loadModel(options.model || \"qwen3-0.6b\");\n }\n\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n\n return instance;\n}\n\n/**\n * Create a Next.js API route handler\n */\nexport function handler(options: GerbilNextOptions = {}) {\n return async function POST(req: Request): Promise<Response> {\n try {\n const g = await getInstance(options);\n const body = await req.json();\n const { prompt, stream: isStreaming, ...opts } = body;\n\n if (isStreaming) {\n // Streaming response\n const encoder = new TextEncoder();\n const readable = new ReadableStream({\n async start(controller) {\n try {\n for await (const chunk of g.stream(prompt, opts)) {\n controller.enqueue(encoder.encode(`data: ${JSON.stringify({ chunk })}\\n\\n`));\n }\n controller.enqueue(encoder.encode(\"data: [DONE]\\n\\n\"));\n controller.close();\n } catch (error) {\n controller.error(error);\n }\n },\n });\n\n return new Response(readable, {\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n }\n // Non-streaming response\n const result = await g.generate(prompt, opts);\n return Response.json(result);\n } catch (error) {\n return Response.json({ error: String(error) }, { status: 500 });\n }\n };\n}\n\n/**\n * Create handlers for all endpoints\n */\nexport function createHandlers(options: GerbilNextOptions = {}) {\n return {\n generate: handler(options),\n\n async json(req: Request): Promise<Response> {\n try {\n const g = await getInstance(options);\n const body = await req.json();\n const { prompt, schema, ...opts } = body;\n\n const { z } = await import(\"zod\");\n const zodSchema = z.any();\n\n const result = await g.json(prompt, { schema: zodSchema, ...opts });\n return Response.json(result);\n } catch (error) {\n return Response.json({ error: String(error) }, { status: 500 });\n }\n },\n\n async embed(req: Request): Promise<Response> {\n try {\n const g = await getInstance(options);\n const body = await req.json();\n const { text, texts, ...opts } = body;\n\n if (texts) {\n const results = await g.embedBatch(texts, opts);\n return Response.json(results);\n }\n const result = await g.embed(text, opts);\n return Response.json(result);\n } catch (error) {\n return Response.json({ error: String(error) }, { status: 500 });\n }\n },\n\n async info(_req: Request): Promise<Response> {\n try {\n const g = await getInstance(options);\n return Response.json(g.getInfo());\n } catch (error) {\n return Response.json({ error: String(error) }, { status: 500 });\n }\n },\n };\n}\n\nexport const gerbil = {\n handler,\n createHandlers,\n getInstance,\n};\n\nexport default gerbil;\n"],"mappings":";;;;;;;;;;;;;;;;;AAuBA,IAAIA,WAA0B;AAC9B,IAAIC,cAAoC;AAExC,eAAe,YAAY,SAA6C;AACtE,KAAI,CAAC,SACH,YAAW,IAAI,OAAO,QAAQ;AAGhC,KAAI,EAAE,SAAS,UAAU,IAAI,aAC3B,eAAc,SAAS,UAAU,QAAQ,SAAS,aAAa;AAGjE,KAAI,aAAa;AACf,QAAM;AACN,gBAAc;;AAGhB,QAAO;;;;;AAMT,SAAgB,QAAQ,UAA6B,EAAE,EAAE;AACvD,QAAO,eAAe,KAAK,KAAiC;AAC1D,MAAI;GACF,MAAM,IAAI,MAAM,YAAY,QAAQ;GAEpC,MAAM,EAAE,QAAQ,QAAQ,aAAa,GAAG,SAD3B,MAAM,IAAI,MAAM;AAG7B,OAAI,aAAa;IAEf,MAAM,UAAU,IAAI,aAAa;IACjC,MAAM,WAAW,IAAI,eAAe,EAClC,MAAM,MAAM,YAAY;AACtB,SAAI;AACF,iBAAW,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,CAC9C,YAAW,QAAQ,QAAQ,OAAO,SAAS,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC;AAE9E,iBAAW,QAAQ,QAAQ,OAAO,mBAAmB,CAAC;AACtD,iBAAW,OAAO;cACX,OAAO;AACd,iBAAW,MAAM,MAAM;;OAG5B,CAAC;AAEF,WAAO,IAAI,SAAS,UAAU,EAC5B,SAAS;KACP,gBAAgB;KAChB,iBAAiB;KACjB,YAAY;KACb,EACF,CAAC;;GAGJ,MAAM,SAAS,MAAM,EAAE,SAAS,QAAQ,KAAK;AAC7C,UAAO,SAAS,KAAK,OAAO;WACrB,OAAO;AACd,UAAO,SAAS,KAAK,EAAE,OAAO,OAAO,MAAM,EAAE,EAAE,EAAE,QAAQ,KAAK,CAAC;;;;;;;AAQrE,SAAgB,eAAe,UAA6B,EAAE,EAAE;AAC9D,QAAO;EACL,UAAU,QAAQ,QAAQ;EAE1B,MAAM,KAAK,KAAiC;AAC1C,OAAI;IACF,MAAM,IAAI,MAAM,YAAY,QAAQ;IAEpC,MAAM,EAAE,QAAQ,QAAQ,GAAG,SADd,MAAM,IAAI,MAAM;IAG7B,MAAM,EAAE,MAAM,MAAM,OAAO;IAC3B,MAAM,YAAY,EAAE,KAAK;IAEzB,MAAM,SAAS,MAAM,EAAE,KAAK,QAAQ;KAAE,QAAQ;KAAW,GAAG;KAAM,CAAC;AACnE,WAAO,SAAS,KAAK,OAAO;YACrB,OAAO;AACd,WAAO,SAAS,KAAK,EAAE,OAAO,OAAO,MAAM,EAAE,EAAE,EAAE,QAAQ,KAAK,CAAC;;;EAInE,MAAM,MAAM,KAAiC;AAC3C,OAAI;IACF,MAAM,IAAI,MAAM,YAAY,QAAQ;IAEpC,MAAM,EAAE,MAAM,OAAO,GAAG,SADX,MAAM,IAAI,MAAM;AAG7B,QAAI,OAAO;KACT,MAAM,UAAU,MAAM,EAAE,WAAW,OAAO,KAAK;AAC/C,YAAO,SAAS,KAAK,QAAQ;;IAE/B,MAAM,SAAS,MAAM,EAAE,MAAM,MAAM,KAAK;AACxC,WAAO,SAAS,KAAK,OAAO;YACrB,OAAO;AACd,WAAO,SAAS,KAAK,EAAE,OAAO,OAAO,MAAM,EAAE,EAAE,EAAE,QAAQ,KAAK,CAAC;;;EAInE,MAAM,KAAK,MAAkC;AAC3C,OAAI;IACF,MAAM,IAAI,MAAM,YAAY,QAAQ;AACpC,WAAO,SAAS,KAAK,EAAE,SAAS,CAAC;YAC1B,OAAO;AACd,WAAO,SAAS,KAAK,EAAE,OAAO,OAAO,MAAM,EAAE,EAAE,EAAE,QAAQ,KAAK,CAAC;;;EAGpE;;AAGH,MAAa,SAAS;CACpB;CACA;CACA;CACD;AAED,mBAAe"}
@@ -1,4 +1,4 @@
1
- import { c as GerbilConfig, o as GenerateOptions, s as GenerateResult } from "../types-s6Py2_DL.mjs";
1
+ import { c as GerbilConfig, o as GenerateOptions, s as GenerateResult } from "../types-DJhOZ6Ct.mjs";
2
2
 
3
3
  //#region src/frameworks/react.d.ts
4
4
 
@@ -1,4 +1,4 @@
1
- import { c as GerbilConfig } from "../types-s6Py2_DL.mjs";
1
+ import { c as GerbilConfig } from "../types-DJhOZ6Ct.mjs";
2
2
 
3
3
  //#region src/frameworks/trpc.d.ts
4
4
 
@@ -1,6 +1,5 @@
1
- import { t as Gerbil } from "../gerbil-yoSpRHgv.mjs";
2
- import "../models-BAtL8qsA.mjs";
3
- import "../utils-CkB4Roi6.mjs";
1
+ import { t as Gerbil } from "../gerbil-Dq039a6V.mjs";
2
+ import "../utils-CZBZ8dgR.mjs";
4
3
  import { z } from "zod";
5
4
 
6
5
  //#region src/frameworks/trpc.ts
@@ -1 +1 @@
1
- {"version":3,"file":"trpc.mjs","names":["loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/trpc.ts"],"sourcesContent":["/**\n * Gerbil tRPC Router\n *\n * @example\n * ```ts\n * import { initTRPC } from \"@trpc/server\";\n * import { gerbilRouter } from \"gerbil/trpc\";\n *\n * const t = initTRPC.create();\n *\n * const appRouter = t.router({\n * ai: gerbilRouter(t, { model: \"qwen3-0.6b\" }),\n * });\n * ```\n */\n\nimport { z } from \"zod\";\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilTRPCOptions extends GerbilConfig {}\n\n/**\n * Create a Gerbil tRPC router\n */\nexport function gerbilRouter(t: any, options: GerbilTRPCOptions = {}) {\n const g = new Gerbil(options);\n let loadPromise: Promise<void> | null = null;\n\n async function ensureLoaded() {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(options.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n }\n\n return t.router({\n generate: t.procedure\n .input(\n z.object({\n prompt: z.string(),\n maxTokens: z.number().optional(),\n temperature: z.number().optional(),\n topP: z.number().optional(),\n topK: z.number().optional(),\n system: z.string().optional(),\n thinking: z.boolean().optional(),\n }),\n )\n .mutation(async ({ input }: { input: any }) => {\n await ensureLoaded();\n const { prompt, ...opts } = input;\n return g.generate(prompt, opts);\n }),\n\n stream: t.procedure\n .input(\n z.object({\n prompt: z.string(),\n maxTokens: z.number().optional(),\n temperature: z.number().optional(),\n system: z.string().optional(),\n thinking: z.boolean().optional(),\n }),\n )\n .subscription(async function* ({ input }: { input: any }) {\n await ensureLoaded();\n const { prompt, ...opts } = input;\n for await (const chunk of g.stream(prompt, opts)) {\n yield chunk;\n }\n }),\n\n embed: t.procedure\n .input(\n z.object({\n text: z.string().optional(),\n texts: z.array(z.string()).optional(),\n }),\n )\n .mutation(async ({ input }: { input: any }) => {\n await ensureLoaded();\n if (input.texts) {\n return g.embedBatch(input.texts);\n }\n return g.embed(input.text);\n }),\n\n info: t.procedure.query(async () => {\n await ensureLoaded();\n return g.getInfo();\n }),\n\n stats: t.procedure.query(() => g.getStats()),\n\n models: t.procedure.query(() => Gerbil.listModels()),\n });\n}\n\nexport default gerbilRouter;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,aAAa,GAAQ,UAA6B,EAAE,EAAE;CACpE,MAAM,IAAI,IAAI,OAAO,QAAQ;CAC7B,IAAIA,cAAoC;CAExC,eAAe,eAAe;AAC5B,MAAI,EAAE,EAAE,UAAU,IAAI,aACpB,eAAc,EAAE,UAAU,QAAQ,SAAS,aAAa;AAE1D,MAAI,aAAa;AACf,SAAM;AACN,iBAAc;;;AAIlB,QAAO,EAAE,OAAO;EACd,UAAU,EAAE,UACT,MACC,EAAE,OAAO;GACP,QAAQ,EAAE,QAAQ;GAClB,WAAW,EAAE,QAAQ,CAAC,UAAU;GAChC,aAAa,EAAE,QAAQ,CAAC,UAAU;GAClC,MAAM,EAAE,QAAQ,CAAC,UAAU;GAC3B,MAAM,EAAE,QAAQ,CAAC,UAAU;GAC3B,QAAQ,EAAE,QAAQ,CAAC,UAAU;GAC7B,UAAU,EAAE,SAAS,CAAC,UAAU;GACjC,CAAC,CACH,CACA,SAAS,OAAO,EAAE,YAA4B;AAC7C,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,UAAO,EAAE,SAAS,QAAQ,KAAK;IAC/B;EAEJ,QAAQ,EAAE,UACP,MACC,EAAE,OAAO;GACP,QAAQ,EAAE,QAAQ;GAClB,WAAW,EAAE,QAAQ,CAAC,UAAU;GAChC,aAAa,EAAE,QAAQ,CAAC,UAAU;GAClC,QAAQ,EAAE,QAAQ,CAAC,UAAU;GAC7B,UAAU,EAAE,SAAS,CAAC,UAAU;GACjC,CAAC,CACH,CACA,aAAa,iBAAiB,EAAE,SAAyB;AACxD,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,cAAW,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,CAC9C,OAAM;IAER;EAEJ,OAAO,EAAE,UACN,MACC,EAAE,OAAO;GACP,MAAM,EAAE,QAAQ,CAAC,UAAU;GAC3B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;GACtC,CAAC,CACH,CACA,SAAS,OAAO,EAAE,YAA4B;AAC7C,SAAM,cAAc;AACpB,OAAI,MAAM,MACR,QAAO,EAAE,WAAW,MAAM,MAAM;AAElC,UAAO,EAAE,MAAM,MAAM,KAAK;IAC1B;EAEJ,MAAM,EAAE,UAAU,MAAM,YAAY;AAClC,SAAM,cAAc;AACpB,UAAO,EAAE,SAAS;IAClB;EAEF,OAAO,EAAE,UAAU,YAAY,EAAE,UAAU,CAAC;EAE5C,QAAQ,EAAE,UAAU,YAAY,OAAO,YAAY,CAAC;EACrD,CAAC;;AAGJ,mBAAe"}
1
+ {"version":3,"file":"trpc.mjs","names":["loadPromise: Promise<void> | null"],"sources":["../../src/frameworks/trpc.ts"],"sourcesContent":["/**\n * Gerbil tRPC Router\n *\n * @example\n * ```ts\n * import { initTRPC } from \"@trpc/server\";\n * import { gerbilRouter } from \"gerbil/trpc\";\n *\n * const t = initTRPC.create();\n *\n * const appRouter = t.router({\n * ai: gerbilRouter(t, { model: \"qwen3-0.6b\" }),\n * });\n * ```\n */\n\nimport { z } from \"zod\";\nimport { Gerbil } from \"../core/gerbil.js\";\nimport type { GerbilConfig } from \"../core/types.js\";\n\nexport interface GerbilTRPCOptions extends GerbilConfig {}\n\n/**\n * Create a Gerbil tRPC router\n */\nexport function gerbilRouter(t: any, options: GerbilTRPCOptions = {}) {\n const g = new Gerbil(options);\n let loadPromise: Promise<void> | null = null;\n\n async function ensureLoaded() {\n if (!(g.isLoaded() || loadPromise)) {\n loadPromise = g.loadModel(options.model || \"qwen3-0.6b\");\n }\n if (loadPromise) {\n await loadPromise;\n loadPromise = null;\n }\n }\n\n return t.router({\n generate: t.procedure\n .input(\n z.object({\n prompt: z.string(),\n maxTokens: z.number().optional(),\n temperature: z.number().optional(),\n topP: z.number().optional(),\n topK: z.number().optional(),\n system: z.string().optional(),\n thinking: z.boolean().optional(),\n }),\n )\n .mutation(async ({ input }: { input: any }) => {\n await ensureLoaded();\n const { prompt, ...opts } = input;\n return g.generate(prompt, opts);\n }),\n\n stream: t.procedure\n .input(\n z.object({\n prompt: z.string(),\n maxTokens: z.number().optional(),\n temperature: z.number().optional(),\n system: z.string().optional(),\n thinking: z.boolean().optional(),\n }),\n )\n .subscription(async function* ({ input }: { input: any }) {\n await ensureLoaded();\n const { prompt, ...opts } = input;\n for await (const chunk of g.stream(prompt, opts)) {\n yield chunk;\n }\n }),\n\n embed: t.procedure\n .input(\n z.object({\n text: z.string().optional(),\n texts: z.array(z.string()).optional(),\n }),\n )\n .mutation(async ({ input }: { input: any }) => {\n await ensureLoaded();\n if (input.texts) {\n return g.embedBatch(input.texts);\n }\n return g.embed(input.text);\n }),\n\n info: t.procedure.query(async () => {\n await ensureLoaded();\n return g.getInfo();\n }),\n\n stats: t.procedure.query(() => g.getStats()),\n\n models: t.procedure.query(() => Gerbil.listModels()),\n });\n}\n\nexport default gerbilRouter;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAgB,aAAa,GAAQ,UAA6B,EAAE,EAAE;CACpE,MAAM,IAAI,IAAI,OAAO,QAAQ;CAC7B,IAAIA,cAAoC;CAExC,eAAe,eAAe;AAC5B,MAAI,EAAE,EAAE,UAAU,IAAI,aACpB,eAAc,EAAE,UAAU,QAAQ,SAAS,aAAa;AAE1D,MAAI,aAAa;AACf,SAAM;AACN,iBAAc;;;AAIlB,QAAO,EAAE,OAAO;EACd,UAAU,EAAE,UACT,MACC,EAAE,OAAO;GACP,QAAQ,EAAE,QAAQ;GAClB,WAAW,EAAE,QAAQ,CAAC,UAAU;GAChC,aAAa,EAAE,QAAQ,CAAC,UAAU;GAClC,MAAM,EAAE,QAAQ,CAAC,UAAU;GAC3B,MAAM,EAAE,QAAQ,CAAC,UAAU;GAC3B,QAAQ,EAAE,QAAQ,CAAC,UAAU;GAC7B,UAAU,EAAE,SAAS,CAAC,UAAU;GACjC,CAAC,CACH,CACA,SAAS,OAAO,EAAE,YAA4B;AAC7C,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,UAAO,EAAE,SAAS,QAAQ,KAAK;IAC/B;EAEJ,QAAQ,EAAE,UACP,MACC,EAAE,OAAO;GACP,QAAQ,EAAE,QAAQ;GAClB,WAAW,EAAE,QAAQ,CAAC,UAAU;GAChC,aAAa,EAAE,QAAQ,CAAC,UAAU;GAClC,QAAQ,EAAE,QAAQ,CAAC,UAAU;GAC7B,UAAU,EAAE,SAAS,CAAC,UAAU;GACjC,CAAC,CACH,CACA,aAAa,iBAAiB,EAAE,SAAyB;AACxD,SAAM,cAAc;GACpB,MAAM,EAAE,QAAQ,GAAG,SAAS;AAC5B,cAAW,MAAM,SAAS,EAAE,OAAO,QAAQ,KAAK,CAC9C,OAAM;IAER;EAEJ,OAAO,EAAE,UACN,MACC,EAAE,OAAO;GACP,MAAM,EAAE,QAAQ,CAAC,UAAU;GAC3B,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,UAAU;GACtC,CAAC,CACH,CACA,SAAS,OAAO,EAAE,YAA4B;AAC7C,SAAM,cAAc;AACpB,OAAI,MAAM,MACR,QAAO,EAAE,WAAW,MAAM,MAAM;AAElC,UAAO,EAAE,MAAM,MAAM,KAAK;IAC1B;EAEJ,MAAM,EAAE,UAAU,MAAM,YAAY;AAClC,SAAM,cAAc;AACpB,UAAO,EAAE,SAAS;IAClB;EAEF,OAAO,EAAE,UAAU,YAAY,EAAE,UAAU,CAAC;EAE5C,QAAQ,EAAE,UAAU,YAAY,OAAO,YAAY,CAAC;EACrD,CAAC;;AAGJ,mBAAe"}
@@ -1,4 +1,4 @@
1
- import { C as SpeakResult, E as SystemInfo, O as TranscribeOptions, S as SpeakOptions, T as StreamingTranscriptionSession, b as STTModelConfig, c as GerbilConfig, f as JsonOptions, g as ModelConfig, h as LoadTTSOptions, i as EmbedResult, j as VoiceInfo, k as TranscribeResult, m as LoadSTTOptions, o as GenerateOptions, p as LoadOptions, r as EmbedOptions, s as GenerateResult, t as AudioChunk, w as StreamingTranscriptionOptions, x as SessionStats } from "./types-s6Py2_DL.mjs";
1
+ import { C as SpeakResult, E as SystemInfo, O as TranscribeOptions, S as SpeakOptions, T as StreamingTranscriptionSession, b as STTModelConfig, c as GerbilConfig, f as JsonOptions, g as ModelConfig, h as LoadTTSOptions, i as EmbedResult, j as VoiceInfo, k as TranscribeResult, m as LoadSTTOptions, o as GenerateOptions, p as LoadOptions, r as EmbedOptions, s as GenerateResult, t as AudioChunk, w as StreamingTranscriptionOptions, x as SessionStats } from "./types-DJhOZ6Ct.mjs";
2
2
 
3
3
  //#region src/core/gerbil.d.ts
4
4
 
@@ -428,4 +428,4 @@ declare class Gerbil {
428
428
  }
429
429
  //#endregion
430
430
  export { Gerbil as t };
431
- //# sourceMappingURL=gerbil-POAz8peb.d.mts.map
431
+ //# sourceMappingURL=gerbil-CnncBh38.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gerbil-POAz8peb.d.mts","names":[],"sources":["../src/core/gerbil.ts"],"sourcesContent":[],"mappings":";;;;AAqOsB,cAlBT,MAAA,CAkBS;EAiBC,QAAA,SAAA;EAIa,QAAA,SAAA;EA0Be,QAAA,KAAA;EAAmB,QAAA,QAAA;EA8SpD,QAAA,YAAA;EA+CH,QAAA,WAAA;EAYY,iBAAA,MAAA;EAUD,QAAA,KAAA;EAWJ,QAAA,SAAA;EAW0B,QAAA,aAAA;EAyBN,QAAA,WAAA;EAA+B,QAAA,SAAA;EAAR,QAAA,WAAA;EAsNpD,QAAA,aAAA;EACe,WAAA,CAAA,MAAA,CAAA,EAxqBN,YAwqBM;EAAvB,OAAA,UAAA,CAAA,CAAA,EAvpBkB,WAupBlB,EAAA;EA0SgD,OAAA,QAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EA77BjB,WA67BiB,GAAA,SAAA;EAAZ;;;;;;;;;;;;;;;;;;EAgN5B,SAAA,CAAA,OAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAnnCsC,WAmnCtC,CAAA,EAnnCyD,OAmnCzD,CAAA,IAAA,CAAA;EACO;;;;EAyChB,QAAA,eAAA;EADqB;;;EAiDkC,QAAA,CAAA,CAAA,EAAA,OAAA;EAAiB;;;EA+B/D,cAAA,CAAA,CAAA,EAAA,OAAA;EACA;;;EAkCA,YAAA,CAAA,CAAA,EAj+BK,WAi+BL,GAAA,IAAA;EAAR;;;EAyDQ,aAAA,CAAA,CAAA,EAAA,QAAA,GAAA,KAAA,GAAA,MAAA;EAAR;;;EAiIsB,QAAA,CAAA,CAAA,EAAA,MAAA;EAkBb;;;EA6CmC,qBAAA,CAAA,CAAA,EAAA;IAkBD,IAAA,EAAA,MAAA;IAAR,MAAA,EAAA,MAAA;IAuBM,IAAA,EAAA,MAAA;IAgBJ,OAAA,EAAA,MAAA;EAAO,CAAA;;;;;;;;;;;;eApuClC;;;;;;qBAYY;;;;;;;oBAUD;;;;;;;;;gBAWJ;;;;;;+CAW0B;;;;;;;;;;;;;;;qCAyBN,kBAAuB,QAAQ;;;;;;;mCAsN5D,kBACR,uBAAuB;;;;;;;;;;;;;mCA0Sa,YAAY,KAAK,QAAQ;;;;gCAqC7B,eAAoB,QAAQ;;;;wCAyBpB,eAAoB,QAAQ;;;;cAe3D;;;;aAOD;;;;;;;;;;;;;;;;;;;;;;oBA4DY;;MAA2C;;;;4BA4BlC,iBAAiB;;;;;;;;;;;;gCAiBd,eAAoB,QAAQ;;;;;;;;;;;;;sCAmBpD,eACR,eAAe,YAAY;;;;gBAQhB;;;;;;;;;;;;;;;;mBAgCS,QACrB;;;;;;;;;;;;;;;;;;;;sCA8BuC,iBAAsB;;;;8CAkBN,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;oBA8BjE,eAAe,sBACb,oBACR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAiCA,gCACR,QAAQ;;;;mBAQY,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiD5B,QAAQ;;;;2BAmCoB;;;;;iCAiBI;;;;;;qBA6EV;;;;;+BAUU;;;;;;;;cAQvB;;;;;;;;;;;;;;;0BA2BkB;;;;;;;;2CAkBiB;;;;;kCAkBT,QAAQ;;;;;;;;;;;;;;wCAuBF;;;;oCAgBJ"}
1
+ {"version":3,"file":"gerbil-CnncBh38.d.mts","names":[],"sources":["../src/core/gerbil.ts"],"sourcesContent":[],"mappings":";;;;AAqOsB,cAlBT,MAAA,CAkBS;EAiBC,QAAA,SAAA;EAIa,QAAA,SAAA;EA0Be,QAAA,KAAA;EAAmB,QAAA,QAAA;EA8SpD,QAAA,YAAA;EA+CH,QAAA,WAAA;EAYY,iBAAA,MAAA;EAUD,QAAA,KAAA;EAWJ,QAAA,SAAA;EAW0B,QAAA,aAAA;EAyBN,QAAA,WAAA;EAA+B,QAAA,SAAA;EAAR,QAAA,WAAA;EAsNpD,QAAA,aAAA;EACe,WAAA,CAAA,MAAA,CAAA,EAxqBN,YAwqBM;EAAvB,OAAA,UAAA,CAAA,CAAA,EAvpBkB,WAupBlB,EAAA;EA0SgD,OAAA,QAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EA77BjB,WA67BiB,GAAA,SAAA;EAAZ;;;;;;;;;;;;;;;;;;EAgN5B,SAAA,CAAA,OAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAnnCsC,WAmnCtC,CAAA,EAnnCyD,OAmnCzD,CAAA,IAAA,CAAA;EACO;;;;EAyChB,QAAA,eAAA;EADqB;;;EAiDkC,QAAA,CAAA,CAAA,EAAA,OAAA;EAAiB;;;EA+B/D,cAAA,CAAA,CAAA,EAAA,OAAA;EACA;;;EAkCA,YAAA,CAAA,CAAA,EAj+BK,WAi+BL,GAAA,IAAA;EAAR;;;EAyDQ,aAAA,CAAA,CAAA,EAAA,QAAA,GAAA,KAAA,GAAA,MAAA;EAAR;;;EAiIsB,QAAA,CAAA,CAAA,EAAA,MAAA;EAkBb;;;EA6CmC,qBAAA,CAAA,CAAA,EAAA;IAkBD,IAAA,EAAA,MAAA;IAAR,MAAA,EAAA,MAAA;IAuBM,IAAA,EAAA,MAAA;IAgBJ,OAAA,EAAA,MAAA;EAAO,CAAA;;;;;;;;;;;;eApuClC;;;;;;qBAYY;;;;;;;oBAUD;;;;;;;;;gBAWJ;;;;;;+CAW0B;;;;;;;;;;;;;;;qCAyBN,kBAAuB,QAAQ;;;;;;;mCAsN5D,kBACR,uBAAuB;;;;;;;;;;;;;mCA0Sa,YAAY,KAAK,QAAQ;;;;gCAqC7B,eAAoB,QAAQ;;;;wCAyBpB,eAAoB,QAAQ;;;;cAe3D;;;;aAOD;;;;;;;;;;;;;;;;;;;;;;oBA4DY;;MAA2C;;;;4BA4BlC,iBAAiB;;;;;;;;;;;;gCAiBd,eAAoB,QAAQ;;;;;;;;;;;;;sCAmBpD,eACR,eAAe,YAAY;;;;gBAQhB;;;;;;;;;;;;;;;;mBAgCS,QACrB;;;;;;;;;;;;;;;;;;;;sCA8BuC,iBAAsB;;;;8CAkBN,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;oBA8BjE,eAAe,sBACb,oBACR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;yCAiCA,gCACR,QAAQ;;;;mBAQY,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAiD5B,QAAQ;;;;2BAmCoB;;;;;iCAiBI;;;;;;qBA6EV;;;;;+BAUU;;;;;;;;cAQvB;;;;;;;;;;;;;;;0BA2BkB;;;;;;;;2CAkBiB;;;;;kCAkBT,QAAQ;;;;;;;;;;;;;;wCAuBF;;;;oCAgBJ"}
@@ -1,5 +1,4 @@
1
- import { i as getModelConfig, n as createExternalModelConfig, o as resolveModel, r as fetchModelContextLength, t as BUILTIN_MODELS } from "./models-BAtL8qsA.mjs";
2
- import { n as zodToJsonSchema, t as extractJson } from "./utils-CkB4Roi6.mjs";
1
+ import { n as zodToJsonSchema, t as extractJson } from "./utils-CZBZ8dgR.mjs";
3
2
  import { AutoModelForCausalLM, AutoModelForImageTextToText, AutoProcessor, AutoTokenizer, RawImage, TextStreamer, env, pipeline } from "@huggingface/transformers";
4
3
 
5
4
  //#region src/core/cache.ts
@@ -162,6 +161,175 @@ function clearGlobalCache() {
162
161
  if (globalCache) globalCache.clear();
163
162
  }
164
163
 
164
+ //#endregion
165
+ //#region src/core/models.ts
166
+ const BUILTIN_MODELS = {
167
+ "qwen3-0.6b": {
168
+ id: "qwen3-0.6b",
169
+ repo: "onnx-community/Qwen3-0.6B-ONNX",
170
+ description: "Qwen3 0.6B - Best balance of speed and quality, supports thinking",
171
+ size: "~400MB",
172
+ contextLength: 32768,
173
+ supportsThinking: true,
174
+ supportsJson: true,
175
+ family: "qwen"
176
+ },
177
+ "qwen2.5-0.5b": {
178
+ id: "qwen2.5-0.5b",
179
+ repo: "onnx-community/Qwen2.5-0.5B-Instruct",
180
+ description: "Qwen2.5 0.5B - Fast and capable",
181
+ size: "~350MB",
182
+ contextLength: 32768,
183
+ supportsThinking: false,
184
+ supportsJson: true,
185
+ family: "qwen"
186
+ },
187
+ "qwen2.5-coder-0.5b": {
188
+ id: "qwen2.5-coder-0.5b",
189
+ repo: "onnx-community/Qwen2.5-Coder-0.5B-Instruct",
190
+ description: "Qwen2.5 Coder 0.5B - Optimized for code",
191
+ size: "~400MB",
192
+ contextLength: 32768,
193
+ supportsThinking: false,
194
+ supportsJson: true,
195
+ family: "qwen"
196
+ },
197
+ "smollm2-360m": {
198
+ id: "smollm2-360m",
199
+ repo: "HuggingFaceTB/SmolLM2-360M-Instruct",
200
+ description: "SmolLM2 360M - Fast, good for simple tasks",
201
+ size: "~250MB",
202
+ contextLength: 8192,
203
+ supportsThinking: false,
204
+ supportsJson: false,
205
+ family: "smollm"
206
+ },
207
+ "smollm2-135m": {
208
+ id: "smollm2-135m",
209
+ repo: "HuggingFaceTB/SmolLM2-135M-Instruct",
210
+ description: "SmolLM2 135M - Fastest, basic generation",
211
+ size: "~100MB",
212
+ contextLength: 8192,
213
+ supportsThinking: false,
214
+ supportsJson: false,
215
+ family: "smollm"
216
+ },
217
+ "phi-3-mini": {
218
+ id: "phi-3-mini",
219
+ repo: "microsoft/Phi-3-mini-4k-instruct-onnx",
220
+ description: "Phi-3 Mini - High quality, larger model",
221
+ size: "~2.1GB",
222
+ contextLength: 4096,
223
+ supportsThinking: false,
224
+ supportsJson: true,
225
+ family: "phi"
226
+ },
227
+ "ministral-3b": {
228
+ id: "ministral-3b",
229
+ repo: "mistralai/Ministral-3-3B-Instruct-2512-ONNX",
230
+ description: "Ministral 3 3B - Vision + Reasoning, 256k context",
231
+ size: "~2.5GB",
232
+ contextLength: 262144,
233
+ supportsThinking: true,
234
+ supportsJson: true,
235
+ supportsVision: true,
236
+ visionEncoderSize: "0.4B",
237
+ family: "mistral"
238
+ }
239
+ };
240
+ /**
241
+ * Parse model identifier and resolve to source
242
+ *
243
+ * Supported formats:
244
+ * - "qwen3-0.6b" (built-in)
245
+ * - "hf:org/model" (HuggingFace shorthand)
246
+ * - "https://huggingface.co/org/model" (full URL)
247
+ * - "file:./path/to/model" (local path)
248
+ */
249
+ function resolveModel(modelId) {
250
+ if (BUILTIN_MODELS[modelId]) return {
251
+ type: "builtin",
252
+ path: BUILTIN_MODELS[modelId].repo
253
+ };
254
+ if (modelId.startsWith("hf:")) return {
255
+ type: "huggingface",
256
+ path: modelId.slice(3)
257
+ };
258
+ if (modelId.startsWith("https://huggingface.co/")) return {
259
+ type: "huggingface",
260
+ path: modelId.replace("https://huggingface.co/", "")
261
+ };
262
+ if (modelId.startsWith("file:")) return {
263
+ type: "local",
264
+ path: modelId.slice(5)
265
+ };
266
+ if (modelId.includes("/")) return {
267
+ type: "huggingface",
268
+ path: modelId
269
+ };
270
+ return {
271
+ type: "huggingface",
272
+ path: modelId
273
+ };
274
+ }
275
+ /**
276
+ * Get model config (built-in only)
277
+ */
278
+ function getModelConfig(modelId) {
279
+ return BUILTIN_MODELS[modelId] || null;
280
+ }
281
+ const FAMILY_CONTEXT_DEFAULTS = {
282
+ qwen: 32768,
283
+ mistral: 262144,
284
+ llama: 8192,
285
+ phi: 4096,
286
+ smollm: 8192,
287
+ other: 4096
288
+ };
289
+ /**
290
+ * Create model config for external model
291
+ */
292
+ function createExternalModelConfig(modelId, repo, contextLength) {
293
+ let family = "other";
294
+ const repoLower = repo.toLowerCase();
295
+ if (repoLower.includes("qwen")) family = "qwen";
296
+ else if (repoLower.includes("smollm")) family = "smollm";
297
+ else if (repoLower.includes("phi")) family = "phi";
298
+ else if (repoLower.includes("mistral") || repoLower.includes("ministral")) family = "mistral";
299
+ else if (repoLower.includes("llama")) family = "llama";
300
+ const supportsVision = repoLower.includes("vision") || repoLower.includes("vlm") || repoLower.includes("image-text") || repoLower.includes("ministral");
301
+ return {
302
+ id: modelId,
303
+ repo,
304
+ description: `External model: ${repo}`,
305
+ size: "Unknown",
306
+ contextLength: contextLength || FAMILY_CONTEXT_DEFAULTS[family] || 4096,
307
+ supportsThinking: family === "qwen" || family === "mistral",
308
+ supportsJson: family === "qwen" || family === "phi" || family === "mistral",
309
+ supportsVision,
310
+ family
311
+ };
312
+ }
313
+ /**
314
+ * Fetch context length from HuggingFace model config
315
+ */
316
+ async function fetchModelContextLength(repo) {
317
+ try {
318
+ const res = await fetch(`https://huggingface.co/${repo}/raw/main/config.json`);
319
+ if (!res.ok) return null;
320
+ const config = await res.json();
321
+ return config.max_position_embeddings || config.n_positions || config.max_seq_len || config.sliding_window || config.context_length || null;
322
+ } catch {
323
+ return null;
324
+ }
325
+ }
326
+ /**
327
+ * List all built-in models
328
+ */
329
+ function listBuiltinModels() {
330
+ return Object.values(BUILTIN_MODELS);
331
+ }
332
+
165
333
  //#endregion
166
334
  //#region src/core/gerbil.ts
167
335
  /**
@@ -383,7 +551,7 @@ var Gerbil = class {
383
551
  onProgress?.({ status: "Ready (WebGPU)!" });
384
552
  } else if (!isBrowser$1 && tfDevice === "webgpu") {
385
553
  onProgress?.({ status: "Starting Chrome WebGPU backend..." });
386
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
554
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
387
555
  this.chromeBackend = await ChromeGPUBackend.create({
388
556
  modelId: source.path,
389
557
  contextLength: config.contextLength,
@@ -445,7 +613,7 @@ var Gerbil = class {
445
613
  if (device === "webgpu" || device === "gpu" || device === "auto") tfDevice = "webgpu";
446
614
  if (!isBrowser$1 && tfDevice === "webgpu") {
447
615
  onProgress?.({ status: "Starting Chrome WebGPU backend (vision)..." });
448
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
616
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
449
617
  this.chromeBackend = await ChromeGPUBackend.create({
450
618
  modelId: repoPath,
451
619
  contextLength: config.contextLength,
@@ -1057,7 +1225,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1057
1225
  }
1058
1226
  if (this.tts?.isLoaded()) return;
1059
1227
  this.ttsModelId = modelId;
1060
- const { createTTS } = await import("./tts-5yWeP_I0.mjs");
1228
+ const { createTTS } = await import("./tts-Cuu1TOkM.mjs");
1061
1229
  if (!this.tts) this.tts = createTTS(modelId);
1062
1230
  await this.tts.load(options);
1063
1231
  }
@@ -1126,7 +1294,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1126
1294
  * List available TTS models
1127
1295
  */
1128
1296
  async listTTSModels() {
1129
- const { TTS_MODELS } = await import("./tts-5yWeP_I0.mjs");
1297
+ const { TTS_MODELS } = await import("./tts-Cuu1TOkM.mjs");
1130
1298
  return Object.values(TTS_MODELS).map((m) => ({
1131
1299
  id: m.id,
1132
1300
  description: m.description,
@@ -1150,7 +1318,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1150
1318
  */
1151
1319
  async loadSTT(modelId, options = {}) {
1152
1320
  if (this.stt?.isLoaded()) return;
1153
- const { WhisperSTT } = await import("./stt-KzSoNvwI.mjs");
1321
+ const { WhisperSTT } = await import("./stt-BT4Rt49f.mjs");
1154
1322
  if (!this.stt) this.stt = new WhisperSTT(modelId);
1155
1323
  await this.stt.load(options);
1156
1324
  }
@@ -1222,7 +1390,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1222
1390
  * Get list of available STT models
1223
1391
  */
1224
1392
  async listSTTModels() {
1225
- const { WhisperSTT } = await import("./stt-KzSoNvwI.mjs");
1393
+ const { WhisperSTT } = await import("./stt-BT4Rt49f.mjs");
1226
1394
  return WhisperSTT.listModels();
1227
1395
  }
1228
1396
  /**
@@ -1258,7 +1426,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1258
1426
  * ```
1259
1427
  */
1260
1428
  async listen(durationMs = 5e3, options = {}) {
1261
- const { Microphone, isSoxAvailable } = await import("./microphone-D-6y9aiE.mjs");
1429
+ const { Microphone, isSoxAvailable } = await import("./microphone-DaMZFRuR.mjs");
1262
1430
  if (!isSoxAvailable()) throw new Error("Microphone recording requires SoX. Install with:\n macOS: brew install sox\n Ubuntu: sudo apt install sox\n Windows: https://sox.sourceforge.net/");
1263
1431
  options.onProgress?.("Starting microphone...");
1264
1432
  const mic = new Microphone({ sampleRate: 16e3 });
@@ -1275,7 +1443,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1275
1443
  */
1276
1444
  async isMicrophoneAvailable() {
1277
1445
  try {
1278
- const { isSoxAvailable } = await import("./microphone-D-6y9aiE.mjs");
1446
+ const { isSoxAvailable } = await import("./microphone-DaMZFRuR.mjs");
1279
1447
  return isSoxAvailable();
1280
1448
  } catch {
1281
1449
  return false;
@@ -1333,7 +1501,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1333
1501
  * This closes the shared browser used for WebGPU acceleration.
1334
1502
  */
1335
1503
  static async shutdown() {
1336
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
1504
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
1337
1505
  await ChromeGPUBackend.closeSharedBrowser();
1338
1506
  }
1339
1507
  /**
@@ -1343,7 +1511,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1343
1511
  static async getWebGPUProcesses() {
1344
1512
  if (typeof window !== "undefined") return null;
1345
1513
  try {
1346
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
1514
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
1347
1515
  return {
1348
1516
  browser: ChromeGPUBackend.getGlobalBrowserStatus(),
1349
1517
  backends: await ChromeGPUBackend.getAllBackendsInfo()
@@ -1359,7 +1527,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1359
1527
  static async killAllWebGPU() {
1360
1528
  if (typeof window !== "undefined") return null;
1361
1529
  try {
1362
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
1530
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
1363
1531
  return await ChromeGPUBackend.killAllBackends();
1364
1532
  } catch {
1365
1533
  return null;
@@ -1372,7 +1540,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1372
1540
  static async killWebGPUBackend(index) {
1373
1541
  if (typeof window !== "undefined") return false;
1374
1542
  try {
1375
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
1543
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
1376
1544
  return await ChromeGPUBackend.killBackendByIndex(index);
1377
1545
  } catch {
1378
1546
  return false;
@@ -1385,7 +1553,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1385
1553
  static async getAllChromePagesInfo() {
1386
1554
  if (typeof window !== "undefined") return null;
1387
1555
  try {
1388
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
1556
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
1389
1557
  return await ChromeGPUBackend.getAllChromePages();
1390
1558
  } catch {
1391
1559
  return null;
@@ -1398,7 +1566,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1398
1566
  static async killChromePage(index) {
1399
1567
  if (typeof window !== "undefined") return false;
1400
1568
  try {
1401
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
1569
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
1402
1570
  return await ChromeGPUBackend.killPageByIndex(index);
1403
1571
  } catch {
1404
1572
  return false;
@@ -1410,7 +1578,7 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1410
1578
  static async getTotalChromePageCount() {
1411
1579
  if (typeof window !== "undefined") return 0;
1412
1580
  try {
1413
- const { ChromeGPUBackend } = await import("./chrome-backend-JEPeM2YE.mjs");
1581
+ const { ChromeGPUBackend } = await import("./chrome-backend-DIKYoWj-.mjs");
1414
1582
  return await ChromeGPUBackend.getTotalPageCount();
1415
1583
  } catch {
1416
1584
  return 0;
@@ -1459,5 +1627,5 @@ The JSON must conform to this schema: ${JSON.stringify(zodToJsonSchema(schema))}
1459
1627
  };
1460
1628
 
1461
1629
  //#endregion
1462
- export { getGlobalCache as a, configureGlobalCache as i, ResponseCache as n, clearGlobalCache as r, Gerbil as t };
1463
- //# sourceMappingURL=gerbil-yoSpRHgv.mjs.map
1630
+ export { ResponseCache as a, getGlobalCache as c, resolveModel as i, BUILTIN_MODELS as n, clearGlobalCache as o, listBuiltinModels as r, configureGlobalCache as s, Gerbil as t };
1631
+ //# sourceMappingURL=gerbil-Dq039a6V.mjs.map