@tryhamster/gerbil 1.0.0-rc.9 → 1.0.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 (179) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +247 -84
  3. package/dist/architectures-C1I5V3Dt.mjs +6070 -0
  4. package/dist/architectures-C1I5V3Dt.mjs.map +1 -0
  5. package/dist/browser/index.d.ts +264 -588
  6. package/dist/browser/index.d.ts.map +1 -1
  7. package/dist/browser/index.js +585 -2334
  8. package/dist/browser/index.js.map +1 -1
  9. package/dist/cli.mjs +625 -1098
  10. package/dist/cli.mjs.map +1 -1
  11. package/dist/defaults-9komdrbY.mjs +24 -0
  12. package/dist/defaults-9komdrbY.mjs.map +1 -0
  13. package/dist/frameworks/express.d.mts +1 -3
  14. package/dist/frameworks/express.d.mts.map +1 -1
  15. package/dist/frameworks/express.mjs +7 -7
  16. package/dist/frameworks/express.mjs.map +1 -1
  17. package/dist/frameworks/fastify.d.mts +1 -1
  18. package/dist/frameworks/fastify.d.mts.map +1 -1
  19. package/dist/frameworks/fastify.mjs +3 -3
  20. package/dist/frameworks/fastify.mjs.map +1 -1
  21. package/dist/frameworks/hono.d.mts +1 -1
  22. package/dist/frameworks/hono.d.mts.map +1 -1
  23. package/dist/frameworks/hono.mjs +4 -4
  24. package/dist/frameworks/hono.mjs.map +1 -1
  25. package/dist/frameworks/next.d.mts +3 -2
  26. package/dist/frameworks/next.d.mts.map +1 -1
  27. package/dist/frameworks/next.mjs +4 -4
  28. package/dist/frameworks/next.mjs.map +1 -1
  29. package/dist/frameworks/react.d.mts +1 -1
  30. package/dist/frameworks/trpc.d.mts +1 -1
  31. package/dist/frameworks/trpc.d.mts.map +1 -1
  32. package/dist/frameworks/trpc.mjs +4 -4
  33. package/dist/frameworks/trpc.mjs.map +1 -1
  34. package/dist/gerbil-BHrJJIa4.mjs +1656 -0
  35. package/dist/gerbil-BHrJJIa4.mjs.map +1 -0
  36. package/dist/gerbil-BT9fCydo.d.mts +488 -0
  37. package/dist/gerbil-BT9fCydo.d.mts.map +1 -0
  38. package/dist/gerbil-DomNfIr1.mjs +4 -0
  39. package/dist/gpu/hooks.d.mts +520 -0
  40. package/dist/gpu/hooks.d.mts.map +1 -0
  41. package/dist/gpu/hooks.mjs +1188 -0
  42. package/dist/gpu/hooks.mjs.map +1 -0
  43. package/dist/gpu/index.d.mts +2 -0
  44. package/dist/gpu/index.mjs +6 -0
  45. package/dist/gpu-33qCAtHW.mjs +3615 -0
  46. package/dist/gpu-33qCAtHW.mjs.map +1 -0
  47. package/dist/index-Dgmb2kE3.d.mts +245 -0
  48. package/dist/index-Dgmb2kE3.d.mts.map +1 -0
  49. package/dist/index-jEAL2s-A.d.mts +2022 -0
  50. package/dist/index-jEAL2s-A.d.mts.map +1 -0
  51. package/dist/index.d.mts +22 -487
  52. package/dist/index.d.mts.map +1 -1
  53. package/dist/index.mjs +13 -8
  54. package/dist/index.mjs.map +1 -1
  55. package/dist/indexeddb-store-BWIMtxxH.mjs +103 -0
  56. package/dist/indexeddb-store-BWIMtxxH.mjs.map +1 -0
  57. package/dist/indexeddb-store-ClH12Xnl.mjs +4 -0
  58. package/dist/integrations/ai-sdk.d.mts +75 -6
  59. package/dist/integrations/ai-sdk.d.mts.map +1 -1
  60. package/dist/integrations/ai-sdk.mjs +131 -15
  61. package/dist/integrations/ai-sdk.mjs.map +1 -1
  62. package/dist/integrations/langchain.d.mts +1 -1
  63. package/dist/integrations/langchain.d.mts.map +1 -1
  64. package/dist/integrations/langchain.mjs +5 -5
  65. package/dist/integrations/langchain.mjs.map +1 -1
  66. package/dist/integrations/llamaindex.d.mts +1 -1
  67. package/dist/integrations/llamaindex.d.mts.map +1 -1
  68. package/dist/integrations/llamaindex.mjs +5 -5
  69. package/dist/integrations/llamaindex.mjs.map +1 -1
  70. package/dist/integrations/mcp-client.mjs +3 -3
  71. package/dist/integrations/mcp-client.mjs.map +1 -1
  72. package/dist/integrations/mcp.d.mts +3 -2
  73. package/dist/integrations/mcp.d.mts.map +1 -1
  74. package/dist/integrations/mcp.mjs +5 -5
  75. package/dist/{mcp-BvbriaBy.mjs → mcp-1DaMsaBc.mjs} +4 -4
  76. package/dist/mcp-1DaMsaBc.mjs.map +1 -0
  77. package/dist/memory/index.d.mts +3 -0
  78. package/dist/memory/index.mjs +6 -0
  79. package/dist/memory-D1P7Tmda.mjs +4 -0
  80. package/dist/memory-DVN0MnIG.mjs +132 -0
  81. package/dist/memory-DVN0MnIG.mjs.map +1 -0
  82. package/dist/memory-Dj0J1v88.mjs +294 -0
  83. package/dist/memory-Dj0J1v88.mjs.map +1 -0
  84. package/dist/moonshine-stt-BLyVoRpB.mjs +4 -0
  85. package/dist/moonshine-stt-v_P_Ci_m.mjs +11936 -0
  86. package/dist/moonshine-stt-v_P_Ci_m.mjs.map +1 -0
  87. package/dist/{one-liner-s-lD8rCC.mjs → one-liner-DnQn7HJK.mjs} +14 -16
  88. package/dist/one-liner-DnQn7HJK.mjs.map +1 -0
  89. package/dist/repl-jV5gcJFA.mjs +9 -0
  90. package/dist/skills/index.d.mts +270 -320
  91. package/dist/skills/index.d.mts.map +1 -1
  92. package/dist/skills/index.mjs +5 -5
  93. package/dist/{skills-CD3Orlex.mjs → skills-DX8D59UH.mjs} +187 -32
  94. package/dist/skills-DX8D59UH.mjs.map +1 -0
  95. package/dist/{tools-Bi1P7Xoy.mjs → tools-DQ1mPUw5.mjs} +34 -22
  96. package/dist/tools-DQ1mPUw5.mjs.map +1 -0
  97. package/dist/{types-CiTc7ez3.d.mts → types-D6FiR_oh.d.mts} +106 -12
  98. package/dist/types-D6FiR_oh.d.mts.map +1 -0
  99. package/dist/types-DQBe2lFo.d.mts +165 -0
  100. package/dist/types-DQBe2lFo.d.mts.map +1 -0
  101. package/dist/{utils-CZBZ8dgR.mjs → utils-DKO55ZmZ.mjs} +1 -1
  102. package/dist/{utils-CZBZ8dgR.mjs.map → utils-DKO55ZmZ.mjs.map} +1 -1
  103. package/dist/vector-B0panuy6.mjs +95 -0
  104. package/dist/vector-B0panuy6.mjs.map +1 -0
  105. package/docs/PROJECT-STATE.md +321 -0
  106. package/docs/adding-a-model-family.md +280 -0
  107. package/docs/ai-sdk.md +70 -61
  108. package/docs/architecture/overview.md +17 -7
  109. package/docs/browser.md +203 -8
  110. package/docs/embeddings.md +156 -0
  111. package/docs/gerbil-site-native-migration.md +217 -0
  112. package/docs/gpu-engine/architectures.md +398 -0
  113. package/docs/gpu-engine/ir.md +372 -0
  114. package/docs/gpu-engine/kernels.md +718 -0
  115. package/docs/gpu-engine/paper.html +1759 -0
  116. package/docs/gpu-engine/paper.md +2109 -0
  117. package/docs/gpu-engine/safetensors.md +312 -0
  118. package/docs/gpu-engine/tokenizer.md +302 -0
  119. package/docs/memory-rag.md +91 -0
  120. package/docs/metal-safari-intel.md +190 -0
  121. package/docs/mobile-failure-diagnosis.md +124 -0
  122. package/docs/mobile.md +99 -0
  123. package/docs/observability.md +230 -0
  124. package/docs/onnx-removal-plan.md +339 -0
  125. package/docs/research/autoresearch-portable.md +904 -0
  126. package/docs/research/dispatch-reduction-hivemind.md +84 -0
  127. package/docs/research/ios-safari-model-caching.md +117 -0
  128. package/docs/research/mobile-webgpu-speed-fusion.md +135 -0
  129. package/docs/research/native-stt-model-selection.md +49 -0
  130. package/docs/research/native-tts-model-selection.md +90 -0
  131. package/docs/research/native-vs-chromium-decision.md +152 -0
  132. package/docs/research/nemotron-mamba2-inference.md +910 -0
  133. package/docs/research/qwen35-multimodal.md +293 -0
  134. package/docs/research/qwen36-gemma4-targets.md +337 -0
  135. package/docs/research/sota-embedding-models.md +179 -0
  136. package/docs/research/sota-mobile-models-2026.md +263 -0
  137. package/docs/research/sota-modality-models.md +202 -0
  138. package/docs/research/tps-baselines.md +71 -0
  139. package/docs/research/webgpu-m4-reference.md +104 -0
  140. package/docs/site-update-plan.md +155 -0
  141. package/docs/structured-output.md +123 -0
  142. package/docs/stt.md +63 -446
  143. package/docs/tts.md +77 -499
  144. package/docs/vision.md +100 -338
  145. package/package.json +22 -7
  146. package/dist/chrome-backend-CORwaIyC.mjs +0 -1212
  147. package/dist/chrome-backend-CORwaIyC.mjs.map +0 -1
  148. package/dist/chrome-backend-DIKYoWj-.mjs +0 -3
  149. package/dist/gerbil-CJ3ifloF.mjs +0 -4
  150. package/dist/gerbil-Dw4Qj77e.mjs +0 -1631
  151. package/dist/gerbil-Dw4Qj77e.mjs.map +0 -1
  152. package/dist/gerbil-qOTe1nl2.d.mts +0 -431
  153. package/dist/gerbil-qOTe1nl2.d.mts.map +0 -1
  154. package/dist/kokoro-BNTb6egA.mjs +0 -20210
  155. package/dist/kokoro-BNTb6egA.mjs.map +0 -1
  156. package/dist/kokoro-CMOGDSgT.js +0 -20212
  157. package/dist/kokoro-CMOGDSgT.js.map +0 -1
  158. package/dist/mcp-BvbriaBy.mjs.map +0 -1
  159. package/dist/one-liner-s-lD8rCC.mjs.map +0 -1
  160. package/dist/repl-DveXw36T.mjs +0 -9
  161. package/dist/skills-CD3Orlex.mjs.map +0 -1
  162. package/dist/stt-Bu-E23Sc.js +0 -433
  163. package/dist/stt-Bu-E23Sc.js.map +0 -1
  164. package/dist/stt-CpLYbGFd.mjs +0 -433
  165. package/dist/stt-CpLYbGFd.mjs.map +0 -1
  166. package/dist/stt-DRPLEEHB.mjs +0 -3
  167. package/dist/tools-Bi1P7Xoy.mjs.map +0 -1
  168. package/dist/transformers.web-DiD1gTwk.js +0 -44695
  169. package/dist/transformers.web-DiD1gTwk.js.map +0 -1
  170. package/dist/transformers.web-u34VxRFM.js +0 -3
  171. package/dist/tts-CqroPaSK.js +0 -724
  172. package/dist/tts-CqroPaSK.js.map +0 -1
  173. package/dist/tts-DXgsKGCe.mjs +0 -3
  174. package/dist/tts-DeGANMNV.mjs +0 -730
  175. package/dist/tts-DeGANMNV.mjs.map +0 -1
  176. package/dist/types-CiTc7ez3.d.mts.map +0 -1
  177. /package/dist/{auto-update-S9s5-g0C.mjs → auto-update-BVaLXcDE.mjs} +0 -0
  178. /package/dist/{chunk-CkXuGtQK.mjs → chunk-B9cbKln6.mjs} +0 -0
  179. /package/dist/{microphone-DaMZFRuR.mjs → microphone-Bqmoz9_K.mjs} +0 -0
@@ -0,0 +1,488 @@
1
+ import { A as SpeakResult, C as PreloadOptions, D as SessionStats, E as SearchResult, I as TranscribeOptions, L as TranscribeResult, M as StreamingTranscriptionSession, N as SystemInfo, O as SimilarityResult, T as STTModelConfig, _ as LoadSTTOptions, a as EmbedResult, d as GerbilConfig, g as LoadOptions, h as JsonOptions, i as EmbedOptions, j as StreamingTranscriptionOptions, k as SpeakOptions, l as GenerateOptions, t as AudioChunk, u as GenerateResult, v as LoadTTSOptions, y as ModelConfig, z as VoiceInfo } from "./types-D6FiR_oh.mjs";
2
+ import { i as GenerateObjectResult, r as GenerateObjectOptions } from "./index-jEAL2s-A.mjs";
3
+
4
+ //#region src/core/gerbil.d.ts
5
+
6
+ declare class Gerbil {
7
+ private currentModel;
8
+ private modelConfig;
9
+ private readonly config;
10
+ private stats;
11
+ private _deviceMode;
12
+ private webgpuEngine;
13
+ private nativeEmbedEngine;
14
+ private nativeEmbedRepo;
15
+ private nativeSTT;
16
+ private nativeTTSEngine;
17
+ private isVisionModel;
18
+ private readonly queue;
19
+ private readonly telemetry;
20
+ constructor(config?: GerbilConfig);
21
+ private reportError;
22
+ /**
23
+ * Whether the native (src/gpu) WebGPU engine should be used for a capability
24
+ * (embed / transcribe / speak / vision). The native WebGPU engine is the only
25
+ * inference backend, so this is always true; kept as a seam for callers.
26
+ */
27
+ private preferNative;
28
+ static listModels(): ModelConfig[];
29
+ static getModel(modelId: string): ModelConfig | undefined;
30
+ /**
31
+ * Load a model
32
+ *
33
+ * @example
34
+ * ```ts
35
+ * // Built-in model
36
+ * await g.loadModel("qwen3.5-0.8b");
37
+ *
38
+ * // HuggingFace model
39
+ * await g.loadModel("hf:microsoft/Phi-3-mini");
40
+ *
41
+ * // Local model
42
+ * await g.loadModel("file:./models/my-model");
43
+ *
44
+ * // Vision model
45
+ * await g.loadModel("ministral-3b");
46
+ * ```
47
+ */
48
+ loadModel(modelId?: string, options?: LoadOptions): Promise<void>;
49
+ /**
50
+ * Load a vision model (VLM) on the native WebGPU engine.
51
+ * The native engine loads the vision-capable safetensors checkpoint directly
52
+ * and builds its ViT tower on demand (enableVision: true). describeImage() then
53
+ * runs encode → splice → decode entirely in WebGPU compute.
54
+ */
55
+ private loadVisionModel;
56
+ /**
57
+ * Check if a model is loaded
58
+ */
59
+ isLoaded(): boolean;
60
+ /**
61
+ * Check if current model supports vision
62
+ */
63
+ supportsVision(): boolean;
64
+ /**
65
+ * Get current model info
66
+ */
67
+ getModelInfo(): ModelConfig | null;
68
+ /**
69
+ * Get current device mode (webgpu, cpu, or wasm)
70
+ */
71
+ getDeviceMode(): "webgpu" | "cpu" | "wasm";
72
+ /**
73
+ * Get the in-memory weight quantization the native engine uses for the loaded
74
+ * model. The WebGPU engine quantizes weights to INT4 ("q4") on load; the KV
75
+ * cache precision (f16/f32) is separate and device-detected.
76
+ */
77
+ getDtype(): string;
78
+ /**
79
+ * Get response cache statistics
80
+ */
81
+ getResponseCacheStats(): {
82
+ hits: number;
83
+ misses: number;
84
+ size: number;
85
+ hitRate: number;
86
+ };
87
+ /**
88
+ * Clear the response cache (for cached generate() results)
89
+ */
90
+ clearResponseCache(): void;
91
+ /**
92
+ * Check if a model is cached (downloaded) without loading it
93
+ *
94
+ * @example
95
+ * ```ts
96
+ * if (await g.isModelCached("qwen3.5-0.8b")) {
97
+ * console.log("Model ready, will load instantly");
98
+ * } else {
99
+ * console.log("Model needs to download (~400MB)");
100
+ * }
101
+ * ```
102
+ */
103
+ isModelCached(modelId: string): Promise<boolean>;
104
+ /**
105
+ * Check whether the native WebGPU engine has a repo cached on disk.
106
+ * The native loader stores files under ~/.cache/gerbil/<repo>/<revision>/.
107
+ */
108
+ private isNativeRepoCached;
109
+ /**
110
+ * Preload a model (download without initializing for inference)
111
+ *
112
+ * Use this to download models ahead of time, e.g., during app startup,
113
+ * so users don't wait when they first use AI.
114
+ *
115
+ * @example
116
+ * ```ts
117
+ * // Preload for later (download only, free memory)
118
+ * await g.preloadModel("qwen3.5-0.8b", {
119
+ * onProgress: (p) => console.log(p.status, p.progress),
120
+ * });
121
+ *
122
+ * // Preload and keep in memory for instant use
123
+ * await g.preloadModel("qwen3.5-0.8b", { keepLoaded: true });
124
+ * await g.generate("Hello"); // Instant, no loading needed
125
+ * ```
126
+ */
127
+ preloadModel(modelId: string, options?: PreloadOptions): Promise<void>;
128
+ /**
129
+ * Check if the native TTS model is cached. The native engine always uses the
130
+ * Kani-TTS-2 checkpoint, so `modelId` is accepted for API compatibility only.
131
+ */
132
+ isTTSCached(_modelId?: string): Promise<boolean>;
133
+ /**
134
+ * Preload the native TTS model (downloads Kani-TTS-2 weights to disk cache).
135
+ *
136
+ * @param modelId - Accepted for API compatibility; native TTS uses Kani-TTS-2.
137
+ * @param options.keepLoaded - Keep the engine in memory for instant use.
138
+ */
139
+ preloadTTS(modelId?: string, options?: PreloadOptions): Promise<void>;
140
+ /**
141
+ * Check if the native STT model is cached. The native engine always uses the
142
+ * Moonshine checkpoint, so `modelId` is accepted for API compatibility only.
143
+ */
144
+ isSTTCached(_modelId?: string): Promise<boolean>;
145
+ /**
146
+ * Preload the native STT model (downloads Moonshine weights to disk cache).
147
+ *
148
+ * @param modelId - Accepted for API compatibility; native STT uses Moonshine.
149
+ * @param options.keepLoaded - Keep the engine in memory for instant use.
150
+ */
151
+ preloadSTT(modelId?: string, options?: PreloadOptions): Promise<void>;
152
+ /**
153
+ * Check if a native embedding model is cached. Defaults to the native
154
+ * EmbeddingGemma checkpoint when no repo is provided.
155
+ */
156
+ isEmbeddingCached(modelId?: string): Promise<boolean>;
157
+ /**
158
+ * Preload a native embedding model (downloads weights to disk cache).
159
+ *
160
+ * @param modelId - Embedding repo (default: native EmbeddingGemma).
161
+ * @param options.keepLoaded - Keep the engine in memory for instant use.
162
+ */
163
+ preloadEmbedding(modelId?: string, options?: PreloadOptions): Promise<void>;
164
+ /**
165
+ * Clear KV cache to free memory.
166
+ * The native engine manages its own KV cache; this is a no-op kept for API
167
+ * compatibility.
168
+ */
169
+ clearCache(): Promise<void>;
170
+ /**
171
+ * Generate text (automatically routes to vision generation if images provided)
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * // Text generation
176
+ * const result = await g.generate("Hello!");
177
+ *
178
+ * // Vision generation (with vision model)
179
+ * const result = await g.generate("What's in this image?", {
180
+ * images: [{ source: "https://example.com/cat.jpg" }]
181
+ * });
182
+ * ```
183
+ */
184
+ generate(prompt: string, options?: GenerateOptions): Promise<GenerateResult>;
185
+ /**
186
+ * Internal generate implementation (called within queue)
187
+ */
188
+ private generateInternal;
189
+ /**
190
+ * Stream text generation (simulated token-by-token)
191
+ *
192
+ * Note: Yields the raw output including <think> tags if thinking mode is enabled.
193
+ * The final result has parsed thinking separated out.
194
+ */
195
+ stream(prompt: string, options?: GenerateOptions): AsyncGenerator<string, GenerateResult, unknown>;
196
+ /**
197
+ * Generate text from images using a vision model
198
+ * Called automatically by generate() when images are provided
199
+ */
200
+ private generateWithVision;
201
+ /**
202
+ * Decode an image source (http(s) URL, file path, or data URI) to raw RGB
203
+ * pixels for the native vision encoder. Supports 8-bit non-interlaced PNG
204
+ * (color types 2/RGB and 6/RGBA). Other formats throw a clear error — callers
205
+ * can pre-decode and use the lower-level WebGPUEngine.describeImage() with
206
+ * pixels directly.
207
+ */
208
+ private decodeImageToPixels;
209
+ /** Fetch an image source to raw bytes (URL, data URI, or local file path). */
210
+ private fetchImageBytes;
211
+ /**
212
+ * Generate structured JSON output
213
+ */
214
+ json<T>(prompt: string, options: JsonOptions<T>): Promise<T>;
215
+ /**
216
+ * Generate a structured object via the native engine's retrying
217
+ * `generateObject` (extract JSON → validate → retry with a nudge).
218
+ *
219
+ * Unlike {@link json} (which is Zod-driven), this passes through to the engine
220
+ * and accepts either a predicate validator `(o) => boolean` or a minimal
221
+ * `{ required: [...] }` schema; omit `schema` to accept any valid JSON.
222
+ *
223
+ * @example
224
+ * ```ts
225
+ * const { object } = await g.generateObject<{ name: string; age: number }>(
226
+ * 'Extract {name, age} from: "I am Sarah, 28"',
227
+ * { schema: { required: ["name", "age"] } },
228
+ * );
229
+ * ```
230
+ */
231
+ generateObject<T = unknown>(prompt: string, options?: GenerateObjectOptions): Promise<GenerateObjectResult<T>>;
232
+ /**
233
+ * Generate embeddings
234
+ */
235
+ embed(text: string, options?: EmbedOptions): Promise<EmbedResult>;
236
+ /**
237
+ * Lazily build (or reuse) the native embedding engine. Re-creates it when the
238
+ * requested repo differs from the cached one. The default native embedding
239
+ * model is resolved by the engine itself (EmbeddingGemma) when no repo given.
240
+ */
241
+ private ensureNativeEmbedEngine;
242
+ /**
243
+ * Generate embeddings for multiple texts
244
+ */
245
+ embedBatch(texts: string[], options?: EmbedOptions): Promise<EmbedResult[]>;
246
+ /**
247
+ * Compute cosine similarity between two vectors
248
+ *
249
+ * @example
250
+ * ```ts
251
+ * const sim = g.cosineSimilarity([1, 0, 0], [1, 0, 0]); // 1.0
252
+ * const sim2 = g.cosineSimilarity([1, 0, 0], [0, 1, 0]); // 0.0
253
+ * ```
254
+ */
255
+ cosineSimilarity(a: number[], b: number[]): number;
256
+ /**
257
+ * Compare similarity between two texts
258
+ *
259
+ * @example
260
+ * ```ts
261
+ * const result = await g.similarity("Hello world", "Hi there");
262
+ * console.log(result.score); // 0.85
263
+ * ```
264
+ */
265
+ similarity(textA: string, textB: string, options?: EmbedOptions): Promise<SimilarityResult>;
266
+ /**
267
+ * Semantic search - find most similar texts from a corpus
268
+ *
269
+ * @example
270
+ * ```ts
271
+ * const results = await g.search("capital of France", [
272
+ * "Paris is beautiful",
273
+ * "London is in England",
274
+ * "Dogs are pets"
275
+ * ]);
276
+ * // [{ text: "Paris is beautiful", score: 0.89, index: 0 }, ...]
277
+ * ```
278
+ */
279
+ search(query: string, corpus: string[], options?: EmbedOptions & {
280
+ topK?: number;
281
+ }): Promise<SearchResult[]>;
282
+ /**
283
+ * Find the nearest text to an embedding vector
284
+ *
285
+ * @example
286
+ * ```ts
287
+ * const embedding = (await g.embed("dog")).vector;
288
+ * const match = await g.findNearest(embedding, ["cat", "car", "tree"]);
289
+ * // { text: "cat", score: 0.85, index: 0 }
290
+ * ```
291
+ */
292
+ findNearest(embedding: number[], candidates: string[], options?: EmbedOptions & {
293
+ topK?: number;
294
+ }): Promise<SearchResult[]>;
295
+ /**
296
+ * Get session stats
297
+ */
298
+ getStats(): SessionStats;
299
+ /**
300
+ * Get system info
301
+ */
302
+ getInfo(): SystemInfo;
303
+ /**
304
+ * Reset stats
305
+ */
306
+ resetStats(): void;
307
+ private readonly ttsModelId;
308
+ /**
309
+ * Load the native TTS model (Kani-TTS-2) for text-to-speech synthesis.
310
+ *
311
+ * @example
312
+ * ```ts
313
+ * await g.loadTTS({ onProgress: (p) => console.log(p.status) });
314
+ * const result = await g.speak("Hello world");
315
+ * // result.audio = Float32Array PCM, result.sampleRate = 22050
316
+ * ```
317
+ */
318
+ loadTTS(_options?: LoadTTSOptions & {
319
+ model?: string;
320
+ }): Promise<void>;
321
+ /**
322
+ * Ensure TTS model is loaded (lazy loading)
323
+ */
324
+ ensureTTSLoaded(_options?: LoadTTSOptions): Promise<void>;
325
+ /**
326
+ * Generate speech from text using the native Kani-TTS-2 WebGPU engine.
327
+ *
328
+ * @example
329
+ * ```ts
330
+ * const result = await g.speak("Hello world");
331
+ * // result.audio = Float32Array PCM, result.sampleRate = 22050
332
+ * ```
333
+ */
334
+ speak(text: string, options?: SpeakOptions): Promise<SpeakResult>;
335
+ /** Lazily build (or reuse) the native Kani-TTS WebGPUEngine (default repo). */
336
+ private ensureNativeTTSEngine;
337
+ /**
338
+ * Stream speech generation. The native engine synthesizes the full clip, so a
339
+ * single final audio chunk is yielded.
340
+ */
341
+ speakStream(text: string, options?: SpeakOptions): AsyncGenerator<AudioChunk, SpeakResult, unknown>;
342
+ /**
343
+ * Get list of available TTS voices (native Kani-TTS-2 default voice).
344
+ */
345
+ listVoices(): VoiceInfo[];
346
+ /**
347
+ * Check if TTS model is loaded
348
+ */
349
+ isTTSLoaded(): boolean;
350
+ /**
351
+ * Get current TTS model info
352
+ */
353
+ getTTSModelInfo(): {
354
+ id: string;
355
+ loaded: boolean;
356
+ device?: "webgpu" | "cpu";
357
+ } | null;
358
+ /**
359
+ * List available TTS models (native Kani-TTS-2).
360
+ */
361
+ listTTSModels(): Promise<Array<{
362
+ id: string;
363
+ description: string;
364
+ sampleRate: number;
365
+ voiceCount: number;
366
+ }>>;
367
+ /**
368
+ * Load the native STT model (Moonshine) for speech-to-text transcription.
369
+ *
370
+ * @example
371
+ * ```ts
372
+ * await g.loadSTT();
373
+ * const result = await g.transcribe(audioData);
374
+ * console.log(result.text);
375
+ * ```
376
+ */
377
+ loadSTT(_modelId?: string, _options?: LoadSTTOptions): Promise<void>;
378
+ /**
379
+ * Ensure STT model is loaded (lazy loading)
380
+ */
381
+ ensureSTTLoaded(_modelId?: string, _options?: LoadSTTOptions): Promise<void>;
382
+ /**
383
+ * Transcribe audio to text
384
+ *
385
+ * @param audio - Audio data as Float32Array (16kHz mono) or Uint8Array (WAV file)
386
+ * @param options - Transcription options
387
+ *
388
+ * @example
389
+ * ```ts
390
+ * // From Float32Array (16kHz mono)
391
+ * const result = await g.transcribe(audioData);
392
+ * console.log(result.text);
393
+ *
394
+ * // With timestamps
395
+ * const result = await g.transcribe(audioData, { timestamps: true });
396
+ * for (const seg of result.segments) {
397
+ * console.log(`[${seg.start}s] ${seg.text}`);
398
+ * }
399
+ *
400
+ * // From WAV file
401
+ * const wavData = fs.readFileSync("audio.wav");
402
+ * const result = await g.transcribe(new Uint8Array(wavData));
403
+ * ```
404
+ */
405
+ transcribe(audio: Float32Array | Uint8Array, options?: TranscribeOptions): Promise<TranscribeResult>;
406
+ /** Lazily build (or reuse) the native MoonshineSTT engine (default repo). */
407
+ private ensureNativeSTT;
408
+ /**
409
+ * Create a streaming transcription session
410
+ *
411
+ * Transcribes audio in real-time by processing chunks at regular intervals.
412
+ * Perfect for live captioning, call transcription, or real-time subtitles.
413
+ *
414
+ * @param options - Streaming options
415
+ * @returns Streaming session controller
416
+ *
417
+ * @example
418
+ * ```ts
419
+ * const session = await g.createStreamingTranscription({
420
+ * chunkDuration: 3000, // Transcribe every 3 seconds
421
+ * onChunk: (text, idx) => console.log(`Chunk ${idx}: ${text}`),
422
+ * onTranscript: (fullText) => console.log("Full:", fullText),
423
+ * });
424
+ *
425
+ * // Feed audio data as it comes in
426
+ * session.feedAudio(audioChunk);
427
+ *
428
+ * // Start automatic interval-based transcription
429
+ * session.start();
430
+ *
431
+ * // Later, stop and get final transcript
432
+ * const finalText = await session.stop();
433
+ * ```
434
+ */
435
+ createStreamingTranscription(_options?: StreamingTranscriptionOptions): Promise<StreamingTranscriptionSession>;
436
+ /**
437
+ * Get list of available STT models (native Moonshine).
438
+ */
439
+ listSTTModels(): Promise<STTModelConfig[]>;
440
+ /**
441
+ * Check if STT model is loaded
442
+ */
443
+ isSTTLoaded(): boolean;
444
+ /**
445
+ * Get current STT model info
446
+ */
447
+ getSTTModelInfo(): {
448
+ id: string;
449
+ loaded: boolean;
450
+ device?: "webgpu" | "cpu";
451
+ } | null;
452
+ /**
453
+ * Record audio from microphone and transcribe
454
+ *
455
+ * @example
456
+ * ```ts
457
+ * // Record for 5 seconds and transcribe
458
+ * const result = await g.listen(5000);
459
+ * console.log(result.text);
460
+ *
461
+ * // Use with voice chat
462
+ * const userInput = await g.listen(10000);
463
+ * const response = await g.generate(userInput.text);
464
+ * await g.speak(response.text);
465
+ * ```
466
+ */
467
+ listen(durationMs?: number, options?: {
468
+ onProgress?: (status: string) => void;
469
+ }): Promise<TranscribeResult>;
470
+ /**
471
+ * Check if microphone recording is available
472
+ */
473
+ isMicrophoneAvailable(): Promise<boolean>;
474
+ /**
475
+ * Dispose of resources (releases all native WebGPU engines and their devices).
476
+ * @param _disconnect Accepted for API compatibility; no longer used.
477
+ */
478
+ dispose(_disconnect?: boolean): Promise<void>;
479
+ /**
480
+ * @deprecated The shared Chrome backend was removed; this is now a no-op.
481
+ */
482
+ static shutdown(): Promise<void>;
483
+ private parseThinking;
484
+ private cleanOutput;
485
+ }
486
+ //#endregion
487
+ export { Gerbil as t };
488
+ //# sourceMappingURL=gerbil-BT9fCydo.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gerbil-BT9fCydo.d.mts","names":[],"sources":["../src/core/gerbil.ts"],"sourcesContent":[],"mappings":";;;;;AA8OsB,cAvBT,MAAA,CAuBS;EAgDC,QAAA,YAAA;EAIa,QAAA,WAAA;EA0BgB,iBAAA,MAAA;EAAmB,QAAA,KAAA;EAoLrD,QAAA,WAAA;EAyDsB,QAAA,YAAA;EAyCO,QAAA,iBAAA;EAAsB,QAAA,eAAA;EAqC7B,QAAA,SAAA;EAWM,QAAA,eAAA;EAAsB,QAAA,aAAA;EAgC5B,iBAAA,KAAA;EAWM,iBAAA,SAAA;EAAsB,WAAA,CAAA,MAAA,CAAA,EA/b9C,YA+b8C;EAgCvB,QAAA,WAAA;EAWO;;;;;EAyDa,QAAA,YAAA;EA0MpD,OAAA,UAAA,CAAA,CAAA,EA7rBU,WA6rBV,EAAA;EACe,OAAA,QAAA,CAAA,OAAA,EAAA,MAAA,CAAA,EA1rBQ,WA0rBR,GAAA,SAAA;EAAvB;;;;;;;;;;;;;;;;;;EAwZQ,SAAA,CAAA,OAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAxjCuC,WAwjCvC,CAAA,EAxjC0D,OAwjC1D,CAAA,IAAA,CAAA;EAAY;;;;;;EAgEZ,QAAA,eAAA;EAuDa;;;EAO0B,QAAA,CAAA,CAAA,EAAA,OAAA;EAaf;;;EAuCxB,cAAA,CAAA,CAAA,EAAA,OAAA;EACO;;;EAcJ,YAAA,CAAA,CAAA,EArkCE,WAqkCF,GAAA,IAAA;EA8BZ;;;EA2B+D,aAAA,CAAA,CAAA,EAAA,QAAA,GAAA,KAAA,GAAA,MAAA;EAQN;;;;;EA8BhD,QAAA,CAAA,CAAA,EAAA,MAAA;EAAR;;;EAqEA,qBAAA,CAAA,CAAA,EAAA;IAW4B,IAAA,EAAA,MAAA;IAAR,MAAA,EAAA,MAAA;IAyDZ,IAAA,EAAA,MAAA;IAAR,OAAA,EAAA,MAAA;EAmC4B,CAAA;EAkBK;;;;;;;;;;;;;;;;kCAzyCE;;;;;;;;;;;;;;;;;;;;;;;;0CAyCO,iBAAsB;;;;;kCAqC7B;;;;;;;yCAWM,iBAAsB;;;;;kCAgC5B;;;;;;;yCAWM,iBAAsB;;;;;uCAgCvB;;;;;;;+CAWO,iBAAsB;;;;;;gBAmCpD;;;;;;;;;;;;;;;qCAsBoB,kBAAuB,QAAQ;;;;;;;;;;;mCA0M5D,kBACR,uBAAuB;;;;;;;;;;;;;;;;;;;mCA6Ma,YAAY,KAAK,QAAQ;;;;;;;;;;;;;;;;;wDAgDrD,wBACR,QAAQ,qBAAqB;;;;gCAiBG,eAAoB,QAAQ;;;;;;;;;;wCAoDpB,eAAoB,QAAQ;;;;;;;;;;;;;;;;;;;;qDAkD5D,eACR,QADyB,gBAAA;;;;;;;;;;;;;;oDAmCjB;;MACR,QADoB,YAAA;;;;;;;;;;;mEAgCZ;;MACR,QADoB,YAAA;;;;cAyBX;;;;aAOD;;;;;;;;;;;;;;;;qBAuDa;;MAA2C;;;;6BAOlC,iBAAiB;;;;;;;;;;gCAaf,eAAoB,QAAQ;;;;;;;sCAuCpD,eACR,eAAe,YAAY;;;;gBAchB;;;;;;;;;;;;;;;;mBA6BS,QACrB;;;;;;;;;;;;;;;;wCA2ByC,iBAAsB;;;;gDAQN,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;oBA4BnE,eAAe,sBACb,oBACR,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAoEC,gCACT,QAAQ;;;;mBAWY,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAyD5B,QAAQ;;;;2BAmCoB;;;;;kCAkBK;;;;qBAmDX"}
@@ -0,0 +1,4 @@
1
+ import { t as Gerbil } from "./gerbil-BHrJJIa4.mjs";
2
+ import "./utils-DKO55ZmZ.mjs";
3
+
4
+ export { Gerbil };