@tryhamster/gerbil 1.0.0-rc.10 → 1.0.0-rc.12
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/README.md +42 -6
- package/dist/browser/index.d.ts +98 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +830 -259
- package/dist/browser/index.js.map +1 -1
- package/dist/cli.mjs +7 -7
- package/dist/cli.mjs.map +1 -1
- package/dist/frameworks/express.d.mts +1 -1
- package/dist/frameworks/express.mjs +1 -1
- package/dist/frameworks/fastify.d.mts +1 -1
- package/dist/frameworks/fastify.mjs +1 -1
- package/dist/frameworks/hono.d.mts +1 -1
- package/dist/frameworks/hono.mjs +1 -1
- package/dist/frameworks/next.d.mts +2 -2
- package/dist/frameworks/next.mjs +1 -1
- package/dist/frameworks/react.d.mts +1 -1
- package/dist/frameworks/react.d.mts.map +1 -1
- package/dist/frameworks/trpc.d.mts +1 -1
- package/dist/frameworks/trpc.mjs +1 -1
- package/dist/{gerbil-DoDGHe6Z.mjs → gerbil-BcWjCGtM.mjs} +83 -1
- package/dist/{gerbil-DoDGHe6Z.mjs.map → gerbil-BcWjCGtM.mjs.map} +1 -1
- package/dist/gerbil-CBQkuQ9i.mjs +4 -0
- package/dist/{gerbil-qOTe1nl2.d.mts → gerbil-E12cYLNi.d.mts} +51 -2
- package/dist/gerbil-E12cYLNi.d.mts.map +1 -0
- package/dist/index.d.mts +3 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/integrations/ai-sdk.d.mts +57 -3
- package/dist/integrations/ai-sdk.d.mts.map +1 -1
- package/dist/integrations/ai-sdk.mjs +88 -2
- package/dist/integrations/ai-sdk.mjs.map +1 -1
- package/dist/integrations/langchain.d.mts +1 -1
- package/dist/integrations/langchain.mjs +1 -1
- package/dist/integrations/llamaindex.d.mts +1 -1
- package/dist/integrations/llamaindex.mjs +1 -1
- package/dist/integrations/mcp.d.mts +2 -2
- package/dist/integrations/mcp.mjs +4 -4
- package/dist/{mcp-kzDDWIoS.mjs → mcp-DXqxF7ri.mjs} +3 -3
- package/dist/{mcp-kzDDWIoS.mjs.map → mcp-DXqxF7ri.mjs.map} +1 -1
- package/dist/{one-liner-DxnNs_JK.mjs → one-liner-UtQX47IT.mjs} +2 -2
- package/dist/{one-liner-DxnNs_JK.mjs.map → one-liner-UtQX47IT.mjs.map} +1 -1
- package/dist/{repl-DGUw4fCc.mjs → repl-FjIaBVFD.mjs} +3 -3
- package/dist/skills/index.d.mts +20 -20
- package/dist/skills/index.d.mts.map +1 -1
- package/dist/skills/index.mjs +3 -3
- package/dist/{skills-DulrOPeP.mjs → skills-BmlseBpJ.mjs} +2 -2
- package/dist/{skills-DulrOPeP.mjs.map → skills-BmlseBpJ.mjs.map} +1 -1
- package/dist/{types-CiTc7ez3.d.mts → types-Bgb_89Bh.d.mts} +20 -2
- package/dist/types-Bgb_89Bh.d.mts.map +1 -0
- package/docs/ai-sdk.md +38 -1
- package/docs/architecture/overview.md +15 -7
- package/docs/browser.md +69 -0
- package/docs/embeddings.md +311 -0
- package/docs/tts.md +11 -8
- package/package.json +1 -1
- package/dist/gerbil-DJGqq7BX.mjs +0 -4
- package/dist/gerbil-qOTe1nl2.d.mts.map +0 -1
- package/dist/kokoro-CMOGDSgT.js +0 -20212
- package/dist/kokoro-CMOGDSgT.js.map +0 -1
- package/dist/stt-Dne6SENv.js +0 -434
- package/dist/stt-Dne6SENv.js.map +0 -1
- package/dist/transformers.web-DiD1gTwk.js +0 -44695
- package/dist/transformers.web-DiD1gTwk.js.map +0 -1
- package/dist/transformers.web-u34VxRFM.js +0 -3
- package/dist/tts-C2FzKuSx.js +0 -725
- package/dist/tts-C2FzKuSx.js.map +0 -1
- package/dist/types-CiTc7ez3.d.mts.map +0 -1
package/README.md
CHANGED
|
@@ -11,8 +11,10 @@
|
|
|
11
11
|
<p align="center">
|
|
12
12
|
<a href="#install">Install</a> •
|
|
13
13
|
<a href="#quick-start">Quick Start</a> •
|
|
14
|
+
<a href="#embeddings">Embeddings</a> •
|
|
14
15
|
<a href="#text-to-speech">TTS</a> •
|
|
15
16
|
<a href="#speech-to-text">STT</a> •
|
|
17
|
+
<a href="./docs/vision.md">Vision</a> •
|
|
16
18
|
<a href="./docs/ai-sdk.md">AI SDK</a> •
|
|
17
19
|
<a href="./docs/cli.md">CLI</a>
|
|
18
20
|
</p>
|
|
@@ -45,7 +47,9 @@ const text = await gerbil("Explain recursion in one sentence");
|
|
|
45
47
|
- **Zero Config** — `npx @tryhamster/gerbil "your prompt"` just works
|
|
46
48
|
- **Local & Private** — No API keys, no data leaves your machine
|
|
47
49
|
- **GPU Accelerated** — WebGPU with CPU fallback
|
|
48
|
-
- **
|
|
50
|
+
- **Embeddings** — Semantic search, similarity, RAG
|
|
51
|
+
- **Vision** — Analyze images with Ministral 3B
|
|
52
|
+
- **Complete Audio** — Text-to-Speech (Kokoro/Supertonic) & Speech-to-Text (Whisper)
|
|
49
53
|
- **Framework Ready** — AI SDK v5, Next.js, Express, LangChain
|
|
50
54
|
- **Skills System** — Built-in + custom skills with Zod validation
|
|
51
55
|
- **Tool Calling** — Agentic capabilities with Qwen3 models
|
|
@@ -93,6 +97,30 @@ const data = await g.json("Extract: John, 32, NYC", {
|
|
|
93
97
|
});
|
|
94
98
|
```
|
|
95
99
|
|
|
100
|
+
## Embeddings
|
|
101
|
+
|
|
102
|
+
Generate semantic embeddings for search, similarity, and RAG:
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
// Compare two texts
|
|
106
|
+
const similarity = await g.similarity("Hello world", "Hi there");
|
|
107
|
+
console.log(similarity.score); // 0.85
|
|
108
|
+
|
|
109
|
+
// Semantic search
|
|
110
|
+
const results = await g.search("capital of France", [
|
|
111
|
+
"Paris is beautiful",
|
|
112
|
+
"London is in England",
|
|
113
|
+
"Dogs are pets"
|
|
114
|
+
]);
|
|
115
|
+
// [{ text: "Paris is beautiful", score: 0.89, index: 0 }, ...]
|
|
116
|
+
|
|
117
|
+
// Generate embedding vector
|
|
118
|
+
const { vector } = await g.embed("Hello world");
|
|
119
|
+
// number[384]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
📖 **[Full Embeddings Documentation →](./docs/embeddings.md)**
|
|
123
|
+
|
|
96
124
|
## Text-to-Speech
|
|
97
125
|
|
|
98
126
|
Generate natural speech locally using Kokoro TTS (28 voices):
|
|
@@ -272,8 +300,12 @@ function Chat() {
|
|
|
272
300
|
| Model | Size | Best For |
|
|
273
301
|
|-------|------|----------|
|
|
274
302
|
| `qwen3-0.6b` | ~400MB | General use, reasoning (thinking mode) |
|
|
303
|
+
| `qwen2.5-0.5b` | ~350MB | Fast and capable |
|
|
275
304
|
| `qwen2.5-coder-0.5b` | ~400MB | Code generation |
|
|
276
|
-
| `smollm2-
|
|
305
|
+
| `smollm2-360m` | ~250MB | Fast, simple tasks |
|
|
306
|
+
| `smollm2-135m` | ~100MB | Fastest, basic |
|
|
307
|
+
| `phi-3-mini` | ~2.1GB | High quality |
|
|
308
|
+
| `ministral-3b` | ~2.5GB | **Vision** + reasoning, 256k context |
|
|
277
309
|
|
|
278
310
|
Use any HuggingFace model: `npx @tryhamster/gerbil -m hf:org/model "prompt"`
|
|
279
311
|
|
|
@@ -281,22 +313,26 @@ Use any HuggingFace model: `npx @tryhamster/gerbil -m hf:org/model "prompt"`
|
|
|
281
313
|
|
|
282
314
|
| Model | Type | Size | Notes |
|
|
283
315
|
|-------|------|------|-------|
|
|
284
|
-
| `kokoro-82m` | TTS | ~330MB | 28 voices, English |
|
|
316
|
+
| `kokoro-82m` | TTS | ~330MB | 28 voices, English (default) |
|
|
317
|
+
| `supertonic-66m` | TTS | ~250MB | 4 voices, 44.1kHz, faster |
|
|
285
318
|
| `whisper-tiny.en` | STT | 39MB | English, fastest |
|
|
286
319
|
| `whisper-base.en` | STT | 74MB | English, balanced |
|
|
287
|
-
| `whisper-small` | STT | 244MB | 80+ languages |
|
|
320
|
+
| `whisper-small` | STT | 244MB | Multilingual, 80+ languages |
|
|
321
|
+
| `whisper-large-v3-turbo` | STT | 809MB | Best quality, 5.4x faster than v3 |
|
|
288
322
|
|
|
289
323
|
## Documentation
|
|
290
324
|
|
|
291
325
|
| Guide | Description |
|
|
292
326
|
|-------|-------------|
|
|
293
|
-
| [📖
|
|
327
|
+
| [📖 Embeddings](./docs/embeddings.md) | Semantic search, similarity, RAG |
|
|
328
|
+
| [📖 Vision](./docs/vision.md) | Image analysis with Ministral 3B |
|
|
329
|
+
| [📖 Text-to-Speech](./docs/tts.md) | Kokoro & Supertonic TTS, streaming audio |
|
|
294
330
|
| [📖 Speech-to-Text](./docs/stt.md) | Whisper STT, transcription, voice input |
|
|
295
331
|
| [📖 Browser](./docs/browser.md) | WebGPU inference, React hooks |
|
|
296
332
|
| [📖 Skills](./docs/skills.md) | Built-in skills, custom skill development |
|
|
297
333
|
| [📖 Tools](./docs/tools.md) | Tool calling, agentic workflows |
|
|
298
334
|
| [📖 REPL](./docs/repl.md) | Interactive terminal dashboard |
|
|
299
|
-
| [📖 AI SDK](./docs/ai-sdk.md) | Vercel AI SDK v5 (LLM, TTS, STT) |
|
|
335
|
+
| [📖 AI SDK](./docs/ai-sdk.md) | Vercel AI SDK v5 (LLM, TTS, STT, Embeddings) |
|
|
300
336
|
| [📖 Frameworks](./docs/frameworks.md) | Next.js, Express, React, LangChain |
|
|
301
337
|
| [📖 CLI](./docs/cli.md) | All CLI commands and options |
|
|
302
338
|
| [📖 MCP Server](./docs/mcp.md) | MCP server for Claude Desktop & Cursor |
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -92,6 +92,24 @@ type EmbedResult = {
|
|
|
92
92
|
/** Time in ms */
|
|
93
93
|
totalTime: number;
|
|
94
94
|
};
|
|
95
|
+
type SearchResult = {
|
|
96
|
+
/** The matched text */
|
|
97
|
+
text: string;
|
|
98
|
+
/** Similarity score (0-1, higher is more similar) */
|
|
99
|
+
score: number;
|
|
100
|
+
/** Index in the original corpus */
|
|
101
|
+
index: number;
|
|
102
|
+
};
|
|
103
|
+
type SimilarityResult = {
|
|
104
|
+
/** Similarity score (0-1, higher is more similar) */
|
|
105
|
+
score: number;
|
|
106
|
+
/** First text */
|
|
107
|
+
textA: string;
|
|
108
|
+
/** Second text */
|
|
109
|
+
textB: string;
|
|
110
|
+
/** Time in ms */
|
|
111
|
+
totalTime: number;
|
|
112
|
+
};
|
|
95
113
|
type LoadOptions = {
|
|
96
114
|
/** Progress callback */
|
|
97
115
|
onProgress?: (info: ProgressInfo) => void;
|
|
@@ -985,6 +1003,85 @@ type UseVoiceChatReturn = {
|
|
|
985
1003
|
* ```
|
|
986
1004
|
*/
|
|
987
1005
|
declare function useVoiceChat(options?: UseVoiceChatOptions): UseVoiceChatReturn;
|
|
1006
|
+
/** Embedding result type */
|
|
1007
|
+
type BrowserEmbedResult = {
|
|
1008
|
+
vector: number[];
|
|
1009
|
+
text: string;
|
|
1010
|
+
};
|
|
1011
|
+
/** Search result type */
|
|
1012
|
+
type BrowserSearchResult = {
|
|
1013
|
+
text: string;
|
|
1014
|
+
score: number;
|
|
1015
|
+
index: number;
|
|
1016
|
+
};
|
|
1017
|
+
/** useEmbedding options */
|
|
1018
|
+
type UseEmbeddingOptions = {
|
|
1019
|
+
/** Embedding model (default: "Xenova/all-MiniLM-L6-v2") */
|
|
1020
|
+
model?: string;
|
|
1021
|
+
/** Normalize vectors (default: true) */
|
|
1022
|
+
normalize?: boolean;
|
|
1023
|
+
/** Auto-load on mount (default: false) */
|
|
1024
|
+
autoLoad?: boolean;
|
|
1025
|
+
/** Callback when ready */
|
|
1026
|
+
onReady?: () => void;
|
|
1027
|
+
/** Callback on error */
|
|
1028
|
+
onError?: (error: string) => void;
|
|
1029
|
+
};
|
|
1030
|
+
/** useEmbedding return type */
|
|
1031
|
+
type UseEmbeddingReturn = {
|
|
1032
|
+
/** Generate embedding for text */
|
|
1033
|
+
embed: (text: string) => Promise<number[]>;
|
|
1034
|
+
/** Generate embeddings for multiple texts */
|
|
1035
|
+
embedBatch: (texts: string[]) => Promise<BrowserEmbedResult[]>;
|
|
1036
|
+
/** Compute cosine similarity between two texts */
|
|
1037
|
+
similarity: (textA: string, textB: string) => Promise<number>;
|
|
1038
|
+
/** Semantic search - find most similar texts */
|
|
1039
|
+
search: (query: string, corpus: string[], topK?: number) => Promise<BrowserSearchResult[]>;
|
|
1040
|
+
/** Find nearest text to an embedding vector */
|
|
1041
|
+
findNearest: (embedding: number[], candidates: string[], topK?: number) => Promise<BrowserSearchResult[]>;
|
|
1042
|
+
/** Compute cosine similarity between two vectors */
|
|
1043
|
+
cosineSimilarity: (a: number[], b: number[]) => number;
|
|
1044
|
+
/** Manually load the model */
|
|
1045
|
+
load: () => void;
|
|
1046
|
+
/** Whether model is loading */
|
|
1047
|
+
isLoading: boolean;
|
|
1048
|
+
/** Whether model is ready */
|
|
1049
|
+
isReady: boolean;
|
|
1050
|
+
/** Loading progress */
|
|
1051
|
+
loadingProgress: {
|
|
1052
|
+
status: string;
|
|
1053
|
+
message?: string;
|
|
1054
|
+
progress?: number;
|
|
1055
|
+
} | null;
|
|
1056
|
+
/** Error message */
|
|
1057
|
+
error: string | null;
|
|
1058
|
+
};
|
|
1059
|
+
/**
|
|
1060
|
+
* React hook for text embeddings in the browser
|
|
1061
|
+
*
|
|
1062
|
+
* @example
|
|
1063
|
+
* ```tsx
|
|
1064
|
+
* import { useEmbedding } from "@tryhamster/gerbil/browser";
|
|
1065
|
+
*
|
|
1066
|
+
* function App() {
|
|
1067
|
+
* const { embed, similarity, search, isLoading, isReady } = useEmbedding();
|
|
1068
|
+
*
|
|
1069
|
+
* if (isLoading) return <div>Loading embedding model...</div>;
|
|
1070
|
+
*
|
|
1071
|
+
* const handleSearch = async () => {
|
|
1072
|
+
* const results = await search("capital of France", [
|
|
1073
|
+
* "Paris is beautiful",
|
|
1074
|
+
* "London is in England",
|
|
1075
|
+
* "Dogs are pets"
|
|
1076
|
+
* ]);
|
|
1077
|
+
* console.log(results); // [{ text: "Paris is beautiful", score: 0.89, index: 0 }, ...]
|
|
1078
|
+
* };
|
|
1079
|
+
*
|
|
1080
|
+
* return <button onClick={handleSearch}>Search</button>;
|
|
1081
|
+
* }
|
|
1082
|
+
* ```
|
|
1083
|
+
*/
|
|
1084
|
+
declare function useEmbedding(options?: UseEmbeddingOptions): UseEmbeddingReturn;
|
|
988
1085
|
/**
|
|
989
1086
|
* Check if WebGPU is supported
|
|
990
1087
|
*/
|
|
@@ -1005,5 +1102,5 @@ declare const _default: {
|
|
|
1005
1102
|
createAudioPlayer: typeof createAudioPlayer;
|
|
1006
1103
|
};
|
|
1007
1104
|
//#endregion
|
|
1008
|
-
export { AudioChunk, BUILTIN_MODELS, BrowserVoiceInfo, CacheConfig, CompleteOptions, EmbedOptions, EmbedResult, FallbackConfig, GenerateOptions, GenerateResult, GenerateStreamOptions, GerbilConfig, GerbilModelSettings, GerbilProviderSettings, GerbilWorker, GerbilWorkerOptions, ImageInput, JsonOptions, LoadOptions, LoadSTTOptions, LoadTTSOptions, LoadingProgress, Message, ModelConfig, ModelSource, ModelStats, ProgressInfo, STTModelConfig, STTProgress, SessionStats, SpeakOptions, SpeakResult, StreamingTranscriptionOptions, StreamingTranscriptionSession, SystemInfo, TTSModelConfig, TTSModelId, TTSProgress, TranscribeOptions, TranscribeResult, TranscribeSegment, UseChatOptions, UseChatReturn, UseCompletionOptions, UseCompletionReturn, UseSpeechOptions, UseSpeechReturn, UseVoiceChatOptions, UseVoiceChatReturn, UseVoiceInputOptions, UseVoiceInputReturn, VoiceChatMessage, VoiceInfo, WorkerComplete, WorkerProgress, WorkerToken, createAudioPlayer, createGerbilWorker, _default as default, getWebGPUInfo, isWebGPUSupported, playAudio, useChat, useCompletion, useSpeech, useVoiceChat, useVoiceInput };
|
|
1105
|
+
export { AudioChunk, BUILTIN_MODELS, BrowserEmbedResult, BrowserSearchResult, BrowserVoiceInfo, CacheConfig, CompleteOptions, EmbedOptions, EmbedResult, FallbackConfig, GenerateOptions, GenerateResult, GenerateStreamOptions, GerbilConfig, GerbilModelSettings, GerbilProviderSettings, GerbilWorker, GerbilWorkerOptions, ImageInput, JsonOptions, LoadOptions, LoadSTTOptions, LoadTTSOptions, LoadingProgress, Message, ModelConfig, ModelSource, ModelStats, ProgressInfo, STTModelConfig, STTProgress, SearchResult, SessionStats, SimilarityResult, SpeakOptions, SpeakResult, StreamingTranscriptionOptions, StreamingTranscriptionSession, SystemInfo, TTSModelConfig, TTSModelId, TTSProgress, TranscribeOptions, TranscribeResult, TranscribeSegment, UseChatOptions, UseChatReturn, UseCompletionOptions, UseCompletionReturn, UseEmbeddingOptions, UseEmbeddingReturn, UseSpeechOptions, UseSpeechReturn, UseVoiceChatOptions, UseVoiceChatReturn, UseVoiceInputOptions, UseVoiceInputReturn, VoiceChatMessage, VoiceInfo, WorkerComplete, WorkerProgress, WorkerToken, createAudioPlayer, createGerbilWorker, _default as default, getWebGPUInfo, isWebGPUSupported, playAudio, useChat, useCompletion, useEmbedding, useSpeech, useVoiceChat, useVoiceInput };
|
|
1009
1106
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/core/types.ts","../../src/core/models.ts","../../src/browser/index.ts"],"sourcesContent":[],"mappings":";;;;AAyBY,KAfA,WAAA,GAeW;EASX,EAAA,EAAA,MAAA;EAWA,IAAA,EAAA,MAAA;EAmCA,WAAA,EAAA,MAAc;EA8Bd,IAAA,EAAA,MAAA;EAkBA,aAAA,EAAY,MAAA;EAQZ,gBAAW,EAAA,OAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/core/types.ts","../../src/core/models.ts","../../src/browser/index.ts"],"sourcesContent":[],"mappings":"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"}
|