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