@tryhamster/gerbil 1.0.0-rc.9 → 1.0.1

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 +318 -104
  3. package/dist/architectures-C1I5V3Dt.mjs +6070 -0
  4. package/dist/architectures-C1I5V3Dt.mjs.map +1 -0
  5. package/dist/browser/index.d.ts +276 -590
  6. package/dist/browser/index.d.ts.map +1 -1
  7. package/dist/browser/index.js +592 -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-BetB5xb0.d.mts +488 -0
  35. package/dist/gerbil-BetB5xb0.d.mts.map +1 -0
  36. package/dist/gerbil-CTZUa8EZ.mjs +4 -0
  37. package/dist/gerbil-DNniplr4.mjs +1656 -0
  38. package/dist/gerbil-DNniplr4.mjs.map +1 -0
  39. package/dist/gpu/hooks.d.mts +640 -0
  40. package/dist/gpu/hooks.d.mts.map +1 -0
  41. package/dist/gpu/hooks.mjs +1369 -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-DFuglcEx.mjs +3790 -0
  46. package/dist/gpu-DFuglcEx.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-DukkJRMj.d.mts +2114 -0
  50. package/dist/index-DukkJRMj.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-D2vvH1Xc.mjs} +4 -4
  76. package/dist/mcp-D2vvH1Xc.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-17dpP1kr.mjs +4 -0
  85. package/dist/moonshine-stt-4ojLtMq7.mjs +11962 -0
  86. package/dist/moonshine-stt-4ojLtMq7.mjs.map +1 -0
  87. package/dist/{one-liner-s-lD8rCC.mjs → one-liner-JhdIPxzF.mjs} +14 -16
  88. package/dist/one-liner-JhdIPxzF.mjs.map +1 -0
  89. package/dist/repl-BDRkwPGX.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-CU694Dc8.mjs} +187 -32
  94. package/dist/skills-CU694Dc8.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-DQBe2lFo.d.mts +165 -0
  98. package/dist/types-DQBe2lFo.d.mts.map +1 -0
  99. package/dist/{types-CiTc7ez3.d.mts → types-LlyYILII.d.mts} +112 -14
  100. package/dist/types-LlyYILII.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,640 @@
1
+ import { n as AgentTool, t as AgentStep } from "../index-DukkJRMj.mjs";
2
+ import { c as MemorySearchResult, d as RecallOptions, f as RecallResult, m as SearchOptions, s as MemoryRecord, t as AddOptions } from "../types-DQBe2lFo.mjs";
3
+
4
+ //#region src/browser/use-agent.d.ts
5
+
6
+ interface UseAgentOptions {
7
+ /** Model repo id to run the agent with. */
8
+ model: string;
9
+ /** Tools the agent may call. */
10
+ tools: AgentTool[];
11
+ /** Max generate → tool → result rounds before giving up (default 5). */
12
+ maxSteps?: number;
13
+ /** Load the model on mount (default false — loads on first run). */
14
+ autoLoad?: boolean;
15
+ }
16
+ interface UseAgentReturn {
17
+ /** Run the agent on a prompt; resolves to the final answer text. */
18
+ run: (prompt: string) => Promise<string>;
19
+ /** The step trace of the most recent run (tool calls, results, final answer). */
20
+ steps: AgentStep[];
21
+ /** Final answer text of the most recent run. */
22
+ answer: string;
23
+ /** True while the agent loop is running. */
24
+ isRunning: boolean;
25
+ /** True once the model is loaded. */
26
+ isReady: boolean;
27
+ /** Load the model explicitly. */
28
+ load: () => Promise<void>;
29
+ /** Clear the steps + answer. */
30
+ reset: () => void;
31
+ /** Load/run error, if any. */
32
+ error: string | null;
33
+ }
34
+ declare function useAgent(options: UseAgentOptions): UseAgentReturn;
35
+ //#endregion
36
+ //#region src/browser/use-autocomplete.d.ts
37
+ /**
38
+ * React hook for debounced inline autocomplete (ghost text).
39
+ *
40
+ * Owns the debounce, in-flight, and stale-response guards so a component only has
41
+ * to render the suggestion and handle accept/dismiss. Built on `useEngine`, so it
42
+ * shares the same reference-counted engine as other hooks.
43
+ *
44
+ * @example
45
+ * ```tsx
46
+ * import { useAutocomplete } from "@tryhamster/gerbil/gpu/hooks";
47
+ *
48
+ * const { suggestion, onInput, accept, dismiss } = useAutocomplete({
49
+ * model: "mlx-community/Qwen3.5-0.8B-4bit",
50
+ * });
51
+ * // <input onChange={(e) => onInput(e.target.value)} />
52
+ * // render `suggestion` as ghost text; Tab → accept(), Esc → dismiss()
53
+ * ```
54
+ */
55
+ interface UseAutocompleteOptions {
56
+ /** Model repo id to autocomplete with. */
57
+ model: string;
58
+ /** Debounce before fetching, in ms (default 550). */
59
+ debounceMs?: number;
60
+ /** Minimum trimmed input length before fetching (default 8). */
61
+ minChars?: number;
62
+ /** Max continuation tokens (default 16). */
63
+ maxTokens?: number;
64
+ /** Sampling temperature (default 0.3). */
65
+ temperature?: number;
66
+ /** Load the model on mount (default false — loads on first request). */
67
+ autoLoad?: boolean;
68
+ }
69
+ interface UseAutocompleteReturn {
70
+ /** Current ghost suggestion (continuation only), or "". */
71
+ suggestion: string;
72
+ /** True while a suggestion is being fetched. */
73
+ isFetching: boolean;
74
+ /** True once the model is loaded. */
75
+ isReady: boolean;
76
+ /** Load the model explicitly. */
77
+ load: () => Promise<void>;
78
+ /** Feed the latest input; schedules a debounced fetch and clears any stale suggestion. */
79
+ onInput: (text: string) => void;
80
+ /** Accept the current suggestion: returns it and clears state. */
81
+ accept: () => string;
82
+ /** Dismiss the current suggestion. */
83
+ dismiss: () => void;
84
+ /** Load/generation error, if any. */
85
+ error: string | null;
86
+ }
87
+ declare function useAutocomplete(options: UseAutocompleteOptions): UseAutocompleteReturn;
88
+ //#endregion
89
+ //#region src/browser/use-engine.d.ts
90
+ /**
91
+ * React hook for native WebGPU inference in the browser.
92
+ *
93
+ * Uses gerbil's WebGPUEngine directly on the main thread — no web worker,
94
+ * no ONNX Runtime, no transformers.js. Pure WGSL compute shaders.
95
+ *
96
+ * Handles the full engine lifecycle for you:
97
+ * - loads the model (lazily or on mount),
98
+ * - hot-swaps when you change `model`/`dtype`/`enableVision`/`embedding`,
99
+ * - SHARES one engine across every component that asks for the same config
100
+ * (reference-counted) so you never upload the same weights to the GPU twice,
101
+ * - disposes when the last consumer unmounts.
102
+ *
103
+ * @example
104
+ * ```tsx
105
+ * import { useEngine } from "@tryhamster/gerbil/browser";
106
+ *
107
+ * function App() {
108
+ * const { complete, completion, isLoading, isGenerating, tps } = useEngine({
109
+ * model: "mlx-community/Qwen3.5-0.8B-4bit",
110
+ * autoLoad: true,
111
+ * });
112
+ *
113
+ * if (isLoading) return <div>Loading model...</div>;
114
+ * return (
115
+ * <div>
116
+ * <button onClick={() => complete("What is 2+2?")}>Generate</button>
117
+ * <p>{completion}</p>
118
+ * {isGenerating && <span>{tps?.toFixed(1)} tok/s</span>}
119
+ * </div>
120
+ * );
121
+ * }
122
+ * ```
123
+ */
124
+ type AgentTool$1 = AgentTool;
125
+ type AgentStep$1 = AgentStep;
126
+ /** A single conversation turn (matches the engine's chat message shape). */
127
+ interface ChatMessage {
128
+ role: "system" | "user" | "assistant";
129
+ content: string;
130
+ }
131
+ type EngineErrorKind = "no-webgpu" | "no-adapter" | "device-lost" | "oom" | "network" | "timeout" | "unknown";
132
+ interface UseEngineOptions {
133
+ /**
134
+ * HuggingFace repo ID (e.g., "mlx-community/Qwen3.5-0.8B-4bit"). Optional —
135
+ * defaults to the built-in model for the requested capability (text, vision,
136
+ * or embeddings).
137
+ */
138
+ model?: string;
139
+ /** Max sequence length (default: auto — 2048 on mobile, 4096 on desktop). */
140
+ maxSeqLen?: number;
141
+ /**
142
+ * Weight dtype. Default "auto": int4 on mobile (fits device memory), the
143
+ * repo's native precision on desktop. Already-quantized repos stay q4.
144
+ */
145
+ dtype?: "auto" | "f32" | "q4";
146
+ /** Auto-load the model on mount (default: false). */
147
+ autoLoad?: boolean;
148
+ /** Build the vision encoder so `describeImage()` works (vision checkpoints only). */
149
+ enableVision?: boolean;
150
+ /** Load as an embedding model so `embed()`/`similarity()` work. */
151
+ embedding?: boolean;
152
+ /** Loading timeout in ms (default: 300000 = 5 minutes). */
153
+ loadingTimeout?: number;
154
+ /** Called when the engine is ready. */
155
+ onReady?: () => void;
156
+ /** Called on error, with a coarse error kind for UI messaging. */
157
+ onError?: (error: Error, kind: EngineErrorKind) => void;
158
+ }
159
+ interface CompleteOptions {
160
+ /** Max tokens to generate (default: 256). */
161
+ maxTokens?: number;
162
+ /** Temperature (0 = greedy, default: 0.7). */
163
+ temperature?: number;
164
+ /** System prompt. */
165
+ system?: string;
166
+ /** Stop sequences. */
167
+ stopSequences?: string[];
168
+ }
169
+ interface DescribeImageOptions extends CompleteOptions {
170
+ /** Override the maximum tokens generated for the description. */
171
+ maxTokens?: number;
172
+ }
173
+ /** Validator for {@link UseEngineReturn.generateObject}: a schema object or predicate. */
174
+ type ObjectValidator<T = unknown> = {
175
+ required?: string[];
176
+ properties?: Record<string, unknown>;
177
+ [key: string]: unknown;
178
+ } | ((o: T) => boolean);
179
+ interface GenerateObjectOptions extends CompleteOptions {
180
+ /**
181
+ * Validation target. Either a predicate `(o) => boolean` or a minimal
182
+ * JSON-schema-ish object with `required` keys. Omit to require valid JSON only.
183
+ */
184
+ schema?: ObjectValidator;
185
+ /** Max retries after the first attempt (default: 4). */
186
+ maxRetries?: number;
187
+ }
188
+ interface UseEngineReturn {
189
+ /** Generate a completion for a prompt. Returns the full text. */
190
+ complete: (prompt: string | ChatMessage[], options?: CompleteOptions) => Promise<string>;
191
+ /** Inline autocomplete: continue `prefix` with a brief single-line completion. */
192
+ autocomplete: (prefix: string, opts?: {
193
+ maxTokens?: number;
194
+ temperature?: number;
195
+ stop?: string[];
196
+ singleLine?: boolean;
197
+ }) => Promise<string>;
198
+ /** Rewrite `text` in a target tone (or with free-form instructions). */
199
+ rewrite: (text: string, opts?: {
200
+ tone?: string;
201
+ instructions?: string;
202
+ maxTokens?: number;
203
+ temperature?: number;
204
+ }) => Promise<string>;
205
+ /** Agentic tool-calling loop: generate → run tools → repeat until an answer. */
206
+ generateWithTools: (prompt: string | ChatMessage[], opts: {
207
+ tools: AgentTool$1[];
208
+ maxSteps?: number;
209
+ onStep?: (step: AgentStep$1) => void;
210
+ maxTokens?: number;
211
+ sampling?: {
212
+ temperature?: number;
213
+ topK?: number;
214
+ topP?: number;
215
+ };
216
+ }) => Promise<{
217
+ text: string;
218
+ steps: AgentStep$1[];
219
+ }>;
220
+ /**
221
+ * Describe an image (image-in → text-out). Requires `enableVision: true`.
222
+ * `image` may be a data/http(s) URL or pre-decoded RGB pixels.
223
+ */
224
+ describeImage: (image: string | {
225
+ pixels: Uint8ClampedArray | Uint8Array | Float32Array;
226
+ width: number;
227
+ height: number;
228
+ }, prompt?: string, options?: DescribeImageOptions) => Promise<string>;
229
+ /**
230
+ * Generate a structured object: generate → parse JSON → validate → retry
231
+ * until valid. Returns the parsed object plus the attempt count.
232
+ */
233
+ generateObject: <T = unknown>(prompt: string, options?: GenerateObjectOptions) => Promise<{
234
+ object: T;
235
+ attempts: number;
236
+ }>;
237
+ /** Embed text into an L2-normalized vector. Requires `embedding: true`. */
238
+ embed: (text: string, options?: {
239
+ taskType?: "query" | "document";
240
+ }) => Promise<Float32Array>;
241
+ /** Cosine similarity between two texts. Requires `embedding: true`. */
242
+ similarity: (a: string, b: string) => Promise<number>;
243
+ /** Current completion text (streams in token by token). */
244
+ completion: string;
245
+ /** Whether the model is loading. */
246
+ isLoading: boolean;
247
+ /** Loading progress info. */
248
+ loadingProgress: {
249
+ status: string;
250
+ progress?: number;
251
+ } | null;
252
+ /** Whether generation is in progress. */
253
+ isGenerating: boolean;
254
+ /** Current tokens per second. */
255
+ tps: number | null;
256
+ /** Attempts taken by the last `generateObject` call (0 until one runs). */
257
+ attempts: number;
258
+ /** Current error message. */
259
+ error: string | null;
260
+ /** Coarse error kind, for tailored UI messaging. */
261
+ errorKind: EngineErrorKind | null;
262
+ /** Whether the engine is ready. */
263
+ isReady: boolean;
264
+ /** Manually load the model. */
265
+ load: () => Promise<void>;
266
+ /** Stop current generation. */
267
+ stop: () => void;
268
+ /** Release this consumer's hold on the engine (disposes when no holders remain). */
269
+ dispose: () => void;
270
+ }
271
+ declare function useEngine(options?: UseEngineOptions): UseEngineReturn;
272
+ //#endregion
273
+ //#region src/browser/use-memory.d.ts
274
+ interface UseMemoryOptions {
275
+ /** Embedding model repo (default: the built-in EmbeddingGemma). */
276
+ model?: string;
277
+ /** IndexedDB database name — use distinct names to isolate memories. */
278
+ namespace?: string;
279
+ }
280
+ interface UseMemoryReturn {
281
+ /** Store text (optionally chunked + tagged). Returns the new record id(s). */
282
+ add: (text: string, options?: AddOptions) => Promise<string[]>;
283
+ /** Retrieve a token-budgeted context block for a query. */
284
+ recall: (query: string, options?: RecallOptions) => Promise<RecallResult>;
285
+ /** Rank stored entries by similarity to a query. */
286
+ search: (query: string, options?: SearchOptions) => Promise<MemorySearchResult[]>;
287
+ /** Get a single record by id. */
288
+ get: (id: string) => Promise<MemoryRecord | undefined>;
289
+ /** Delete a record by id. */
290
+ remove: (id: string) => Promise<boolean>;
291
+ /** Clear all memories in this namespace. */
292
+ clear: () => Promise<void>;
293
+ /** Number of stored records. */
294
+ size: () => Promise<number>;
295
+ /** Whether the embedding model is downloading. */
296
+ isLoading: boolean;
297
+ loadingProgress: {
298
+ status: string;
299
+ progress?: number;
300
+ } | null;
301
+ /** Whether memory is ready (the embedding model has loaded). */
302
+ isReady: boolean;
303
+ error: string | null;
304
+ }
305
+ declare function useMemory(options?: UseMemoryOptions): UseMemoryReturn;
306
+ //#endregion
307
+ //#region src/browser/use-modalities.d.ts
308
+ /** Options common to the modality hooks (the capability flag is set for you). */
309
+ type ModalityOptions = Omit<UseEngineOptions, "enableVision" | "embedding">;
310
+ interface UseTextReturn {
311
+ complete: (prompt: string, options?: CompleteOptions) => Promise<string>;
312
+ completion: string;
313
+ isLoading: boolean;
314
+ loadingProgress: {
315
+ status: string;
316
+ progress?: number;
317
+ } | null;
318
+ isGenerating: boolean;
319
+ tps: number | null;
320
+ error: string | null;
321
+ errorKind: EngineErrorKind | null;
322
+ isReady: boolean;
323
+ load: () => Promise<void>;
324
+ stop: () => void;
325
+ dispose: () => void;
326
+ }
327
+ /** Text generation. */
328
+ declare function useText(options?: ModalityOptions): UseTextReturn;
329
+ interface UseObjectReturn<T = unknown> {
330
+ /** The last successfully parsed + validated object (null until one is produced). */
331
+ object: T | null;
332
+ /**
333
+ * Generate, parse JSON, validate against `schema`, and retry until valid.
334
+ * Loads the model first if needed. Returns the parsed object.
335
+ */
336
+ generate: (prompt: string, options?: GenerateObjectOptions) => Promise<T>;
337
+ /** Attempts the last `generate` call took (1 = first try). */
338
+ attempts: number;
339
+ isLoading: boolean;
340
+ loadingProgress: {
341
+ status: string;
342
+ progress?: number;
343
+ } | null;
344
+ isGenerating: boolean;
345
+ error: string | null;
346
+ errorKind: EngineErrorKind | null;
347
+ isReady: boolean;
348
+ load: () => Promise<void>;
349
+ stop: () => void;
350
+ dispose: () => void;
351
+ }
352
+ /**
353
+ * Structured-output generation — generate, parse JSON, validate, and RETRY
354
+ * until valid. On-device tokens are free, so re-rolling malformed JSON is cheap.
355
+ *
356
+ * ```tsx
357
+ * const { object, generate, isGenerating } = useObject<{ name: string; age: number }>();
358
+ * await generate('Extract {name, age} from: "I am Sarah, 28"', {
359
+ * schema: { required: ["name", "age"] },
360
+ * });
361
+ * // object === { name: "Sarah", age: 28 }
362
+ * ```
363
+ */
364
+ declare function useObject<T = unknown>(options?: ModalityOptions): UseObjectReturn<T>;
365
+ interface UseVisionReturn {
366
+ describeImage: UseEngineReturnLike["describeImage"];
367
+ completion: string;
368
+ isLoading: boolean;
369
+ loadingProgress: {
370
+ status: string;
371
+ progress?: number;
372
+ } | null;
373
+ isGenerating: boolean;
374
+ tps: number | null;
375
+ error: string | null;
376
+ errorKind: EngineErrorKind | null;
377
+ isReady: boolean;
378
+ load: () => Promise<void>;
379
+ stop: () => void;
380
+ dispose: () => void;
381
+ }
382
+ type UseEngineReturnLike = ReturnType<typeof useEngine>;
383
+ /** Image understanding (image in → text out). Builds the vision tower. */
384
+ declare function useVision(options?: ModalityOptions): UseVisionReturn;
385
+ interface UseEmbeddingReturn {
386
+ embed: UseEngineReturnLike["embed"];
387
+ similarity: UseEngineReturnLike["similarity"];
388
+ isLoading: boolean;
389
+ loadingProgress: {
390
+ status: string;
391
+ progress?: number;
392
+ } | null;
393
+ error: string | null;
394
+ errorKind: EngineErrorKind | null;
395
+ isReady: boolean;
396
+ load: () => Promise<void>;
397
+ dispose: () => void;
398
+ }
399
+ /** Text embeddings + similarity. */
400
+ declare function useEmbedding(options?: ModalityOptions): UseEmbeddingReturn;
401
+ interface UseChatOptions extends ModalityOptions {
402
+ /** System prompt prepended to every turn. */
403
+ system?: string;
404
+ }
405
+ /** Chat lifecycle status (mirrors the Vercel AI SDK's `useChat` status). */
406
+ type ChatStatus = "ready" | "submitted" | "streaming" | "error";
407
+ interface UseChatReturn {
408
+ /** The running conversation (user + assistant turns). */
409
+ messages: ChatMessage[];
410
+ /** Send a user message; the assistant reply streams in and is returned. */
411
+ send: (text: string, options?: CompleteOptions) => Promise<string>;
412
+ /** Alias of `send` (AI SDK-compatible name). */
413
+ sendMessage: (text: string, options?: CompleteOptions) => Promise<string>;
414
+ /** Re-run the last user turn (drops the previous assistant reply). */
415
+ regenerate: (options?: CompleteOptions) => Promise<string>;
416
+ /** Replace the conversation (value or updater). */
417
+ setMessages: (next: ChatMessage[] | ((prev: ChatMessage[]) => ChatMessage[])) => void;
418
+ /** Clear the conversation. */
419
+ clear: () => void;
420
+ /** Coarse lifecycle status: ready → submitted → streaming (→ error). */
421
+ status: ChatStatus;
422
+ isGenerating: boolean;
423
+ isLoading: boolean;
424
+ loadingProgress: {
425
+ status: string;
426
+ progress?: number;
427
+ } | null;
428
+ isReady: boolean;
429
+ tps: number | null;
430
+ error: string | null;
431
+ errorKind: EngineErrorKind | null;
432
+ stop: () => void;
433
+ load: () => Promise<void>;
434
+ }
435
+ /**
436
+ * Conversational chat hook — manages the message list and streams replies.
437
+ * Multi-turn context is handled for you (the full history is sent each turn).
438
+ *
439
+ * ```tsx
440
+ * const { messages, send, isGenerating } = useChat();
441
+ * <button onClick={() => send("Hello!")}>Send</button>
442
+ * ```
443
+ */
444
+ declare function useChat(options?: UseChatOptions): UseChatReturn;
445
+ interface UseCompletionReturn {
446
+ /** The streamed completion text. */
447
+ completion: string;
448
+ /** Generate a completion for a prompt (loads the model if needed). */
449
+ complete: (prompt: string, options?: CompleteOptions) => Promise<string>;
450
+ /** Controlled input value (AI SDK-style). */
451
+ input: string;
452
+ setInput: (value: string) => void;
453
+ handleInputChange: (e: {
454
+ target: {
455
+ value: string;
456
+ };
457
+ }) => void;
458
+ handleSubmit: (e?: {
459
+ preventDefault?: () => void;
460
+ }) => void;
461
+ isLoading: boolean;
462
+ isReady: boolean;
463
+ loadingProgress: {
464
+ status: string;
465
+ progress?: number;
466
+ } | null;
467
+ stop: () => void;
468
+ error: string | null;
469
+ load: () => Promise<void>;
470
+ }
471
+ /**
472
+ * Single-prompt streaming completion with built-in input state — a near
473
+ * drop-in for the Vercel AI SDK's `useCompletion`, running on-device.
474
+ */
475
+ declare function useCompletion(options?: ModalityOptions): UseCompletionReturn;
476
+ //#endregion
477
+ //#region src/browser/use-stt.d.ts
478
+ /**
479
+ * React hook for native speech-to-text in the browser.
480
+ *
481
+ * Wraps `MoonshineSTT` — raw 16 kHz mono PCM in, transcript out (encoder-decoder
482
+ * ASR, no streaming/partial API). This hook captures mic audio between
483
+ * start/stop, resamples it to 16 kHz mono, and runs a single transcribe() on the
484
+ * finalized utterance. The GPU engine is dynamically imported so it stays out of
485
+ * the main bundle until STT is actually used.
486
+ *
487
+ * @example
488
+ * ```tsx
489
+ * import { useSTT } from "@tryhamster/gerbil/gpu/hooks";
490
+ *
491
+ * const { startRecording, stopRecording, transcript, isRecording } = useSTT();
492
+ * ```
493
+ */
494
+ interface UseSTTOptions {
495
+ /** HF repo for the STT model (default: the built-in Moonshine). */
496
+ repo?: string;
497
+ /** Auto-load the model on mount (default: false — loads on first record). */
498
+ autoLoad?: boolean;
499
+ onReady?: () => void;
500
+ onError?: (error: Error) => void;
501
+ /** Called when a finalized utterance contains no speech (silence/noise). */
502
+ onNoSpeech?: () => void;
503
+ }
504
+ interface UseSTTReturn {
505
+ load: () => Promise<void>;
506
+ startRecording: () => Promise<void>;
507
+ stopRecording: () => Promise<void>;
508
+ dispose: () => void;
509
+ isLoading: boolean;
510
+ loadingProgress: {
511
+ status: string;
512
+ progress?: number;
513
+ } | null;
514
+ isReady: boolean;
515
+ isRecording: boolean;
516
+ isTranscribing: boolean;
517
+ transcript: string;
518
+ audioSeconds: number | null;
519
+ /** True when the last finalized utterance contained no speech. */
520
+ noSpeech: boolean;
521
+ error: string | null;
522
+ }
523
+ declare function useSTT(options?: UseSTTOptions): UseSTTReturn;
524
+ //#endregion
525
+ //#region src/browser/use-tts.d.ts
526
+ /**
527
+ * React hook for native text-to-speech in the browser.
528
+ *
529
+ * Wraps the engine's `speak()` (Kani-TTS-2) — the codec-LM backbone emits
530
+ * NanoCodec audio tokens, the NanoCodec decoder turns them into 22.05 kHz mono
531
+ * PCM, and this hook plays it through the Web Audio API (and keeps the clip for
532
+ * instant replay). The GPU engine is dynamically imported so it stays out of the
533
+ * main bundle until TTS is actually used.
534
+ *
535
+ * @example
536
+ * ```tsx
537
+ * import { useTTS } from "@tryhamster/gerbil/gpu/hooks";
538
+ *
539
+ * const { speak, isSynthesizing, isPlaying } = useTTS();
540
+ * <button onClick={() => speak("Hello from on-device TTS.")}>Speak</button>
541
+ * ```
542
+ */
543
+ /**
544
+ * Built-in voices. Kani-TTS-2-en takes an `en_us`-style language tag prepended
545
+ * to the text; the English checkpoint ships the US-English voice.
546
+ */
547
+ declare const KANI_VOICES: readonly [{
548
+ readonly value: "en_us";
549
+ readonly label: "English (US)";
550
+ }];
551
+ type KaniVoice = (typeof KANI_VOICES)[number]["value"];
552
+ interface SpeakOptions {
553
+ /** Language/accent tag, e.g. "en_us". Prepended as "{tag}: {text}". */
554
+ voice?: string;
555
+ /** Sampling temperature (default 1.0). Higher = more expressive/varied. */
556
+ temperature?: number;
557
+ /** Top-p nucleus threshold (default 0.95). */
558
+ topP?: number;
559
+ /** Repetition penalty (default 1.1). */
560
+ repetitionPenalty?: number;
561
+ }
562
+ interface UseTTSOptions {
563
+ /** HF repo for the TTS model (default: the built-in Kani-TTS-2). */
564
+ repo?: string;
565
+ /** Auto-load the model on mount (default: false — loads on first speak). */
566
+ autoLoad?: boolean;
567
+ onReady?: () => void;
568
+ onError?: (error: Error) => void;
569
+ }
570
+ interface UseTTSReturn {
571
+ load: () => Promise<void>;
572
+ /** Synthesize + play `text`. Lazily loads the model on first call. */
573
+ speak: (text: string, options?: SpeakOptions) => Promise<void>;
574
+ /** Replay the most recently synthesized clip (no re-synthesis). */
575
+ replay: () => Promise<void>;
576
+ /** Stop any in-progress playback. */
577
+ stop: () => void;
578
+ dispose: () => void;
579
+ isLoading: boolean;
580
+ loadingProgress: {
581
+ status: string;
582
+ progress?: number;
583
+ } | null;
584
+ isReady: boolean;
585
+ /** Synthesizing PCM (running the codec-LM + NanoCodec). */
586
+ isSynthesizing: boolean;
587
+ /** Audio is currently playing. */
588
+ isPlaying: boolean;
589
+ /** True once a clip has been synthesized and is available for replay. */
590
+ hasAudio: boolean;
591
+ /** Duration (seconds) of the last synthesized clip. */
592
+ audioSeconds: number | null;
593
+ /** Real-time factor of the last synthesis (audio-sec per wall-sec). */
594
+ rtf: number | null;
595
+ error: string | null;
596
+ }
597
+ declare function useTTS(options?: UseTTSOptions): UseTTSReturn;
598
+ //#endregion
599
+ //#region src/browser/use-voice-chat.d.ts
600
+ interface UseVoiceChatOptions extends UseChatOptions {
601
+ /** Speech-to-text model repo (default: built-in Moonshine). */
602
+ sttModel?: string;
603
+ /** Text-to-speech model repo (default: built-in Kani-TTS-2). */
604
+ ttsModel?: string;
605
+ /** Voice for spoken replies (e.g. "en_us"). */
606
+ voice?: string;
607
+ /** Speak replies aloud (default: true). Set false for text-only. */
608
+ speak?: boolean;
609
+ }
610
+ interface UseVoiceChatReturn {
611
+ /** The running conversation. */
612
+ messages: ChatMessage[];
613
+ /** Start listening (opens the mic). */
614
+ start: () => Promise<void>;
615
+ /** Stop listening → transcribe → reply → speak. */
616
+ stop: () => Promise<void>;
617
+ /** Stop playback of the current spoken reply. */
618
+ stopSpeaking: () => void;
619
+ /** Clear the conversation. */
620
+ clear: () => void;
621
+ /** Mic is open and capturing. */
622
+ isListening: boolean;
623
+ /** Transcribing the captured audio. */
624
+ isTranscribing: boolean;
625
+ /** The model is generating a reply. */
626
+ isThinking: boolean;
627
+ /** A reply is being synthesized or played. */
628
+ isSpeaking: boolean;
629
+ /** The most recent transcribed user utterance. */
630
+ transcript: string;
631
+ /** Any model is still downloading. */
632
+ isLoading: boolean;
633
+ /** The chat model is ready. */
634
+ isReady: boolean;
635
+ error: string | null;
636
+ }
637
+ declare function useVoiceChat(options?: UseVoiceChatOptions): UseVoiceChatReturn;
638
+ //#endregion
639
+ export { type AgentStep, type AgentTool, type ChatMessage, type ChatStatus, type CompleteOptions, type DescribeImageOptions, type EngineErrorKind, type GenerateObjectOptions, KANI_VOICES, type KaniVoice, type ModalityOptions, type ObjectValidator, type SpeakOptions, type UseAgentOptions, type UseAgentReturn, type UseAutocompleteOptions, type UseAutocompleteReturn, type UseChatOptions, type UseChatReturn, type UseCompletionReturn, type UseEmbeddingReturn, type UseEngineOptions, type UseEngineReturn, type UseMemoryOptions, type UseMemoryReturn, type UseObjectReturn, type UseSTTOptions, type UseSTTReturn, type UseTTSOptions, type UseTTSReturn, type UseTextReturn, type UseVisionReturn, type UseVoiceChatOptions, type UseVoiceChatReturn, useAgent, useAutocomplete, useChat, useCompletion, useEmbedding, useEngine, useMemory, useObject, useSTT, useTTS, useText, useVision, useVoiceChat };
640
+ //# sourceMappingURL=hooks.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.mts","names":[],"sources":["../../src/browser/use-agent.ts","../../src/browser/use-autocomplete.ts","../../src/browser/use-engine.ts","../../src/browser/use-memory.ts","../../src/browser/use-modalities.ts","../../src/browser/use-stt.ts","../../src/browser/use-tts.ts","../../src/browser/use-voice-chat.ts"],"sourcesContent":[],"mappings":"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"}