@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.
- package/LICENSE +1 -1
- package/README.md +247 -84
- package/dist/architectures-C1I5V3Dt.mjs +6070 -0
- package/dist/architectures-C1I5V3Dt.mjs.map +1 -0
- package/dist/browser/index.d.ts +264 -588
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +585 -2334
- package/dist/browser/index.js.map +1 -1
- package/dist/cli.mjs +625 -1098
- package/dist/cli.mjs.map +1 -1
- package/dist/defaults-9komdrbY.mjs +24 -0
- package/dist/defaults-9komdrbY.mjs.map +1 -0
- package/dist/frameworks/express.d.mts +1 -3
- package/dist/frameworks/express.d.mts.map +1 -1
- package/dist/frameworks/express.mjs +7 -7
- package/dist/frameworks/express.mjs.map +1 -1
- package/dist/frameworks/fastify.d.mts +1 -1
- package/dist/frameworks/fastify.d.mts.map +1 -1
- package/dist/frameworks/fastify.mjs +3 -3
- package/dist/frameworks/fastify.mjs.map +1 -1
- package/dist/frameworks/hono.d.mts +1 -1
- package/dist/frameworks/hono.d.mts.map +1 -1
- package/dist/frameworks/hono.mjs +4 -4
- package/dist/frameworks/hono.mjs.map +1 -1
- package/dist/frameworks/next.d.mts +3 -2
- package/dist/frameworks/next.d.mts.map +1 -1
- package/dist/frameworks/next.mjs +4 -4
- package/dist/frameworks/next.mjs.map +1 -1
- package/dist/frameworks/react.d.mts +1 -1
- package/dist/frameworks/trpc.d.mts +1 -1
- package/dist/frameworks/trpc.d.mts.map +1 -1
- package/dist/frameworks/trpc.mjs +4 -4
- package/dist/frameworks/trpc.mjs.map +1 -1
- package/dist/gerbil-BHrJJIa4.mjs +1656 -0
- package/dist/gerbil-BHrJJIa4.mjs.map +1 -0
- package/dist/gerbil-BT9fCydo.d.mts +488 -0
- package/dist/gerbil-BT9fCydo.d.mts.map +1 -0
- package/dist/gerbil-DomNfIr1.mjs +4 -0
- package/dist/gpu/hooks.d.mts +520 -0
- package/dist/gpu/hooks.d.mts.map +1 -0
- package/dist/gpu/hooks.mjs +1188 -0
- package/dist/gpu/hooks.mjs.map +1 -0
- package/dist/gpu/index.d.mts +2 -0
- package/dist/gpu/index.mjs +6 -0
- package/dist/gpu-33qCAtHW.mjs +3615 -0
- package/dist/gpu-33qCAtHW.mjs.map +1 -0
- package/dist/index-Dgmb2kE3.d.mts +245 -0
- package/dist/index-Dgmb2kE3.d.mts.map +1 -0
- package/dist/index-jEAL2s-A.d.mts +2022 -0
- package/dist/index-jEAL2s-A.d.mts.map +1 -0
- package/dist/index.d.mts +22 -487
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +13 -8
- package/dist/index.mjs.map +1 -1
- package/dist/indexeddb-store-BWIMtxxH.mjs +103 -0
- package/dist/indexeddb-store-BWIMtxxH.mjs.map +1 -0
- package/dist/indexeddb-store-ClH12Xnl.mjs +4 -0
- package/dist/integrations/ai-sdk.d.mts +75 -6
- package/dist/integrations/ai-sdk.d.mts.map +1 -1
- package/dist/integrations/ai-sdk.mjs +131 -15
- package/dist/integrations/ai-sdk.mjs.map +1 -1
- package/dist/integrations/langchain.d.mts +1 -1
- package/dist/integrations/langchain.d.mts.map +1 -1
- package/dist/integrations/langchain.mjs +5 -5
- package/dist/integrations/langchain.mjs.map +1 -1
- package/dist/integrations/llamaindex.d.mts +1 -1
- package/dist/integrations/llamaindex.d.mts.map +1 -1
- package/dist/integrations/llamaindex.mjs +5 -5
- package/dist/integrations/llamaindex.mjs.map +1 -1
- package/dist/integrations/mcp-client.mjs +3 -3
- package/dist/integrations/mcp-client.mjs.map +1 -1
- package/dist/integrations/mcp.d.mts +3 -2
- package/dist/integrations/mcp.d.mts.map +1 -1
- package/dist/integrations/mcp.mjs +5 -5
- package/dist/{mcp-BvbriaBy.mjs → mcp-1DaMsaBc.mjs} +4 -4
- package/dist/mcp-1DaMsaBc.mjs.map +1 -0
- package/dist/memory/index.d.mts +3 -0
- package/dist/memory/index.mjs +6 -0
- package/dist/memory-D1P7Tmda.mjs +4 -0
- package/dist/memory-DVN0MnIG.mjs +132 -0
- package/dist/memory-DVN0MnIG.mjs.map +1 -0
- package/dist/memory-Dj0J1v88.mjs +294 -0
- package/dist/memory-Dj0J1v88.mjs.map +1 -0
- package/dist/moonshine-stt-BLyVoRpB.mjs +4 -0
- package/dist/moonshine-stt-v_P_Ci_m.mjs +11936 -0
- package/dist/moonshine-stt-v_P_Ci_m.mjs.map +1 -0
- package/dist/{one-liner-s-lD8rCC.mjs → one-liner-DnQn7HJK.mjs} +14 -16
- package/dist/one-liner-DnQn7HJK.mjs.map +1 -0
- package/dist/repl-jV5gcJFA.mjs +9 -0
- package/dist/skills/index.d.mts +270 -320
- package/dist/skills/index.d.mts.map +1 -1
- package/dist/skills/index.mjs +5 -5
- package/dist/{skills-CD3Orlex.mjs → skills-DX8D59UH.mjs} +187 -32
- package/dist/skills-DX8D59UH.mjs.map +1 -0
- package/dist/{tools-Bi1P7Xoy.mjs → tools-DQ1mPUw5.mjs} +34 -22
- package/dist/tools-DQ1mPUw5.mjs.map +1 -0
- package/dist/{types-CiTc7ez3.d.mts → types-D6FiR_oh.d.mts} +106 -12
- package/dist/types-D6FiR_oh.d.mts.map +1 -0
- package/dist/types-DQBe2lFo.d.mts +165 -0
- package/dist/types-DQBe2lFo.d.mts.map +1 -0
- package/dist/{utils-CZBZ8dgR.mjs → utils-DKO55ZmZ.mjs} +1 -1
- package/dist/{utils-CZBZ8dgR.mjs.map → utils-DKO55ZmZ.mjs.map} +1 -1
- package/dist/vector-B0panuy6.mjs +95 -0
- package/dist/vector-B0panuy6.mjs.map +1 -0
- package/docs/PROJECT-STATE.md +321 -0
- package/docs/adding-a-model-family.md +280 -0
- package/docs/ai-sdk.md +70 -61
- package/docs/architecture/overview.md +17 -7
- package/docs/browser.md +203 -8
- package/docs/embeddings.md +156 -0
- package/docs/gerbil-site-native-migration.md +217 -0
- package/docs/gpu-engine/architectures.md +398 -0
- package/docs/gpu-engine/ir.md +372 -0
- package/docs/gpu-engine/kernels.md +718 -0
- package/docs/gpu-engine/paper.html +1759 -0
- package/docs/gpu-engine/paper.md +2109 -0
- package/docs/gpu-engine/safetensors.md +312 -0
- package/docs/gpu-engine/tokenizer.md +302 -0
- package/docs/memory-rag.md +91 -0
- package/docs/metal-safari-intel.md +190 -0
- package/docs/mobile-failure-diagnosis.md +124 -0
- package/docs/mobile.md +99 -0
- package/docs/observability.md +230 -0
- package/docs/onnx-removal-plan.md +339 -0
- package/docs/research/autoresearch-portable.md +904 -0
- package/docs/research/dispatch-reduction-hivemind.md +84 -0
- package/docs/research/ios-safari-model-caching.md +117 -0
- package/docs/research/mobile-webgpu-speed-fusion.md +135 -0
- package/docs/research/native-stt-model-selection.md +49 -0
- package/docs/research/native-tts-model-selection.md +90 -0
- package/docs/research/native-vs-chromium-decision.md +152 -0
- package/docs/research/nemotron-mamba2-inference.md +910 -0
- package/docs/research/qwen35-multimodal.md +293 -0
- package/docs/research/qwen36-gemma4-targets.md +337 -0
- package/docs/research/sota-embedding-models.md +179 -0
- package/docs/research/sota-mobile-models-2026.md +263 -0
- package/docs/research/sota-modality-models.md +202 -0
- package/docs/research/tps-baselines.md +71 -0
- package/docs/research/webgpu-m4-reference.md +104 -0
- package/docs/site-update-plan.md +155 -0
- package/docs/structured-output.md +123 -0
- package/docs/stt.md +63 -446
- package/docs/tts.md +77 -499
- package/docs/vision.md +100 -338
- package/package.json +22 -7
- package/dist/chrome-backend-CORwaIyC.mjs +0 -1212
- package/dist/chrome-backend-CORwaIyC.mjs.map +0 -1
- package/dist/chrome-backend-DIKYoWj-.mjs +0 -3
- package/dist/gerbil-CJ3ifloF.mjs +0 -4
- package/dist/gerbil-Dw4Qj77e.mjs +0 -1631
- package/dist/gerbil-Dw4Qj77e.mjs.map +0 -1
- package/dist/gerbil-qOTe1nl2.d.mts +0 -431
- package/dist/gerbil-qOTe1nl2.d.mts.map +0 -1
- package/dist/kokoro-BNTb6egA.mjs +0 -20210
- package/dist/kokoro-BNTb6egA.mjs.map +0 -1
- package/dist/kokoro-DFRQ1OeM.js +0 -20212
- package/dist/kokoro-DFRQ1OeM.js.map +0 -1
- package/dist/mcp-BvbriaBy.mjs.map +0 -1
- package/dist/one-liner-s-lD8rCC.mjs.map +0 -1
- package/dist/repl-DveXw36T.mjs +0 -9
- package/dist/skills-CD3Orlex.mjs.map +0 -1
- package/dist/stt-CpLYbGFd.mjs +0 -433
- package/dist/stt-CpLYbGFd.mjs.map +0 -1
- package/dist/stt-DRPLEEHB.mjs +0 -3
- package/dist/stt-Te8Qz-Ay.js +0 -433
- package/dist/stt-Te8Qz-Ay.js.map +0 -1
- package/dist/tools-Bi1P7Xoy.mjs.map +0 -1
- package/dist/transformers.web-DokyH3rP.js +0 -3
- package/dist/transformers.web-M6mCnEYJ.js +0 -30382
- package/dist/transformers.web-M6mCnEYJ.js.map +0 -1
- package/dist/tts-C0xx3CtE.js +0 -724
- package/dist/tts-C0xx3CtE.js.map +0 -1
- package/dist/tts-DXgsKGCe.mjs +0 -3
- package/dist/tts-DeGANMNV.mjs +0 -730
- package/dist/tts-DeGANMNV.mjs.map +0 -1
- package/dist/types-CiTc7ez3.d.mts.map +0 -1
- /package/dist/{auto-update-S9s5-g0C.mjs → auto-update-BVaLXcDE.mjs} +0 -0
- /package/dist/{chunk-CkXuGtQK.mjs → chunk-B9cbKln6.mjs} +0 -0
- /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"}
|