vecbox 0.1.1 → 0.2.2
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/CHANGELOG.md +40 -0
- package/README.md +163 -228
- package/dist/index.cjs +189 -332
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +26 -36
- package/dist/index.d.ts +26 -36
- package/dist/index.js +196 -333
- package/dist/index.js.map +1 -1
- package/dist/llama_embedding-EC3MWSUZ.node +0 -0
- package/native/binding.gyp +65 -0
- package/native/index.js +39 -0
- package/native/llama_embedding_simple.cpp +111 -0
- package/native/package-lock.json +1277 -0
- package/native/package.json +26 -0
- package/package.json +11 -19
- package/src/factory/EmbeddingFactory.ts +0 -4
- package/src/providers/gemini.ts +2 -2
- package/src/providers/llamacpp.ts +118 -170
- package/src/types/index.ts +0 -2
- package/src/providers/claude.ts +0 -78
- package/src/providers/deepseek.ts +0 -115
- package/src/types/deepseek.d.ts +0 -15
- package/src/types/index.d.ts +0 -43
- package/src/types/transformers.d.ts +0 -7
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [0.2.2] - 2026-02-14
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Native N-API integration for Llama.cpp (10x faster performance)
|
|
12
|
+
- Auto-detection of best available provider
|
|
13
|
+
- Support for GGUF models with direct native loading
|
|
14
|
+
- Smart fallback system between providers
|
|
15
|
+
- File input support for direct text file embedding
|
|
16
|
+
- Batch processing capabilities
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Simplified installation - zero setup required
|
|
20
|
+
- Updated README with modern usage examples
|
|
21
|
+
- Improved error handling and logging
|
|
22
|
+
- Better TypeScript support with comprehensive types
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
- Native module compilation issues
|
|
26
|
+
- Provider detection and fallback logic
|
|
27
|
+
- Memory management for native embeddings
|
|
28
|
+
|
|
29
|
+
### Providers
|
|
30
|
+
- **OpenAI**: text-embedding-3-small, text-embedding-3-large
|
|
31
|
+
- **Google Gemini**: gemini-embedding-001
|
|
32
|
+
- **Mistral**: mistral-embed
|
|
33
|
+
- **Llama.cpp**: Native N-API with GGUF support
|
|
34
|
+
|
|
35
|
+
## [0.2.1] - Previous
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
- Multi-provider support
|
|
39
|
+
- Basic embedding functionality
|
|
40
|
+
- TypeScript definitions
|
package/README.md
CHANGED
|
@@ -1,123 +1,155 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Vecbox
|
|
2
2
|
|
|
3
3
|

|
|
4
|
-
[](https://www.npmjs.
|
|
4
|
+
[](https://www.npmjs.org/package/vecbox)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**One API, multiple providers.** Switch between OpenAI, Gemini, Mistral, or run locally with Llama.cpp using native N-API performance.
|
|
8
8
|
|
|
9
|
-
**One API, multiple providers.** Switch between OpenAI, Gemini, or run locally with Llama.cpp without changing code.
|
|
10
9
|
```typescript
|
|
11
|
-
|
|
10
|
+
import { autoEmbed } from 'vecbox';
|
|
11
|
+
|
|
12
|
+
// Works with any provider - auto-detects the best available
|
|
12
13
|
const result = await autoEmbed({ text: 'Hello, world!' });
|
|
13
14
|
console.log(result.embedding); // [0.1, 0.2, ...]
|
|
15
|
+
console.log(result.provider); // 'llamacpp' | 'openai' | 'gemini' | 'mistral'
|
|
14
16
|
```
|
|
15
17
|
|
|
16
18
|
## Installation
|
|
19
|
+
|
|
17
20
|
```bash
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
npm install vecbox
|
|
22
|
+
# or
|
|
23
|
+
pnpm add vecbox
|
|
20
24
|
```
|
|
21
25
|
|
|
26
|
+
**Zero setup required!** Everything is included - native N-API module automatically compiled during installation.
|
|
27
|
+
|
|
22
28
|
## Quick Start
|
|
23
29
|
|
|
24
|
-
### Auto-
|
|
30
|
+
### Auto-detection (Recommended)
|
|
31
|
+
|
|
25
32
|
```typescript
|
|
26
33
|
import { autoEmbed } from 'vecbox';
|
|
27
34
|
|
|
35
|
+
// Automatically picks the best available provider
|
|
28
36
|
const result = await autoEmbed({ text: 'Your text' });
|
|
29
|
-
|
|
37
|
+
console.log(result.embedding); // [0.1, 0.2, ...]
|
|
38
|
+
console.log(result.provider); // 'llamacpp' | 'openai' | 'gemini' | 'mistral'
|
|
30
39
|
```
|
|
31
40
|
|
|
32
41
|
### Specific Provider
|
|
42
|
+
|
|
33
43
|
```typescript
|
|
34
44
|
import { embed } from 'vecbox';
|
|
35
45
|
|
|
46
|
+
// Use specific provider
|
|
36
47
|
const result = await embed(
|
|
37
48
|
{ provider: 'openai', apiKey: process.env.OPENAI_API_KEY },
|
|
38
49
|
{ text: 'Your text' }
|
|
39
50
|
);
|
|
40
51
|
```
|
|
41
52
|
|
|
42
|
-
|
|
53
|
+
### File Input
|
|
43
54
|
|
|
44
|
-
<details>
|
|
45
|
-
<summary><b>OpenAI</b></summary>
|
|
46
55
|
```typescript
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
{ text: 'Your text' }
|
|
56
|
+
import { embed } from 'vecbox';
|
|
57
|
+
|
|
58
|
+
// Embed text from files
|
|
59
|
+
const result = await embed(
|
|
60
|
+
{ provider: 'gemini', apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY },
|
|
61
|
+
{ filePath: './document.txt' }
|
|
54
62
|
);
|
|
55
63
|
```
|
|
56
64
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
</details>
|
|
65
|
+
### Batch Processing
|
|
60
66
|
|
|
61
|
-
<details>
|
|
62
|
-
<summary><b>Google Gemini</b></summary>
|
|
63
67
|
```typescript
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
68
|
+
import { embed } from 'vecbox';
|
|
69
|
+
|
|
70
|
+
const inputs = [
|
|
71
|
+
{ text: 'First text' },
|
|
72
|
+
{ text: 'Second text' },
|
|
73
|
+
{ text: 'Third text' }
|
|
74
|
+
];
|
|
75
|
+
|
|
76
|
+
const result = await embed(
|
|
77
|
+
{ provider: 'mistral', apiKey: process.env.MISTRAL_API_KEY },
|
|
78
|
+
inputs
|
|
71
79
|
);
|
|
80
|
+
|
|
81
|
+
console.log(result.embeddings.length); // 3
|
|
72
82
|
```
|
|
73
83
|
|
|
74
|
-
|
|
84
|
+
## 🚀 Local Llama.cpp with Native N-API
|
|
75
85
|
|
|
76
|
-
|
|
86
|
+
**Automatic Native Detection:**
|
|
87
|
+
```typescript
|
|
88
|
+
import { autoEmbed } from 'vecbox';
|
|
77
89
|
|
|
78
|
-
|
|
79
|
-
|
|
90
|
+
// Automatically uses native N-API when available
|
|
91
|
+
const result = await autoEmbed({ text: 'Your text' });
|
|
92
|
+
console.log(result.provider); // 'llamacpp' (native)
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Manual Native Configuration:**
|
|
80
96
|
```typescript
|
|
81
|
-
|
|
82
|
-
|
|
97
|
+
import { embed } from 'vecbox';
|
|
98
|
+
|
|
99
|
+
// Force native module usage
|
|
100
|
+
const result = await embed(
|
|
101
|
+
{ provider: 'llamacpp', model: './models/nomic-embed-text-v1.5.Q4_K_M.gguf' },
|
|
83
102
|
{ text: 'Your text' }
|
|
84
103
|
);
|
|
85
104
|
```
|
|
86
105
|
|
|
87
|
-
**Setup:**
|
|
106
|
+
**Setup for Local Models:**
|
|
88
107
|
```bash
|
|
89
|
-
#
|
|
90
|
-
git clone https://github.com/ggerganov/llama.cpp
|
|
91
|
-
cd llama.cpp && make llama-server
|
|
92
|
-
|
|
93
|
-
# 2. Download model
|
|
108
|
+
# Download a GGUF embedding model
|
|
94
109
|
wget https://huggingface.co/nomic-ai/nomic-embed-text-v1.5-GGUF/resolve/main/nomic-embed-text-v1.5.Q4_K_M.gguf
|
|
95
110
|
|
|
96
|
-
#
|
|
97
|
-
|
|
111
|
+
# Place it in your project directory
|
|
112
|
+
mkdir models && mv nomic-embed-text-v1.5.Q4_K_M.gguf models/
|
|
98
113
|
```
|
|
99
114
|
|
|
100
|
-
|
|
115
|
+
## 🌍 Environment Variables
|
|
101
116
|
|
|
102
|
-
|
|
103
|
-
|
|
117
|
+
```bash
|
|
118
|
+
# .env file
|
|
119
|
+
OPENAI_API_KEY=sk-...
|
|
120
|
+
GOOGLE_GENERATIVE_AI_API_KEY=...
|
|
121
|
+
MISTRAL_API_KEY=...
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## 📚 Providers
|
|
125
|
+
|
|
126
|
+
### OpenAI
|
|
104
127
|
```typescript
|
|
105
128
|
await embed(
|
|
106
129
|
{
|
|
107
|
-
provider: '
|
|
108
|
-
model: '
|
|
109
|
-
apiKey: process.env.
|
|
130
|
+
provider: 'openai',
|
|
131
|
+
model: 'text-embedding-3-small', // or text-embedding-3-large
|
|
132
|
+
apiKey: process.env.OPENAI_API_KEY
|
|
110
133
|
},
|
|
111
134
|
{ text: 'Your text' }
|
|
112
135
|
);
|
|
113
136
|
```
|
|
137
|
+
**Setup:** Get API key at [platform.openai.com](https://platform.openai.com)
|
|
114
138
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
139
|
+
### Google Gemini
|
|
140
|
+
```typescript
|
|
141
|
+
await embed(
|
|
142
|
+
{
|
|
143
|
+
provider: 'gemini',
|
|
144
|
+
model: 'gemini-embedding-001',
|
|
145
|
+
apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY
|
|
146
|
+
},
|
|
147
|
+
{ text: 'Your text' }
|
|
148
|
+
);
|
|
149
|
+
```
|
|
150
|
+
**Setup:** Get API key at [aistudio.google.com](https://aistudio.google.com)
|
|
118
151
|
|
|
119
|
-
|
|
120
|
-
<summary><b>Mistral</b></summary>
|
|
152
|
+
### Mistral
|
|
121
153
|
```typescript
|
|
122
154
|
await embed(
|
|
123
155
|
{
|
|
@@ -128,33 +160,70 @@ await embed(
|
|
|
128
160
|
{ text: 'Your text' }
|
|
129
161
|
);
|
|
130
162
|
```
|
|
131
|
-
|
|
132
163
|
**Setup:** Get API key at [mistral.ai](https://mistral.ai)
|
|
133
164
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
<details>
|
|
137
|
-
<summary><b>DeepSeek</b></summary>
|
|
165
|
+
### Llama.cpp (Local)
|
|
138
166
|
```typescript
|
|
139
167
|
await embed(
|
|
140
|
-
{
|
|
141
|
-
provider: 'deepseek',
|
|
142
|
-
model: 'deepseek-chat',
|
|
143
|
-
apiKey: process.env.DEEPSEEK_API_KEY
|
|
144
|
-
},
|
|
168
|
+
{ provider: 'llamacpp', model: './models/nomic-embed-text-v1.5.Q4_K_M.gguf' },
|
|
145
169
|
{ text: 'Your text' }
|
|
146
170
|
);
|
|
147
171
|
```
|
|
172
|
+
**Setup:** Download GGUF model and place in your project directory
|
|
173
|
+
|
|
174
|
+
## 🚀 Features
|
|
175
|
+
|
|
176
|
+
- **🎯 One API, Multiple Providers** - Switch between OpenAI, Gemini, Mistral, or local Llama.cpp
|
|
177
|
+
- **🤖 Auto-Detection** - Automatically picks the best available provider
|
|
178
|
+
- **⚡ Native Performance** - Llama.cpp integration with N-API (10x faster than HTTP)
|
|
179
|
+
- **🔄 Smart Fallbacks** - Never fails, always has a backup provider
|
|
180
|
+
- **📁 File Support** - Embed text from files directly
|
|
181
|
+
- **📦 Batch Processing** - Process multiple texts efficiently
|
|
182
|
+
- **🛡️ Type Safe** - Full TypeScript support
|
|
183
|
+
- **🌍 Zero Dependencies** - No external downloads or setup required
|
|
184
|
+
|
|
185
|
+
## 📖 API Reference
|
|
186
|
+
|
|
187
|
+
### `autoEmbed(input)`
|
|
188
|
+
|
|
189
|
+
Auto-detects best provider in priority order:
|
|
190
|
+
1. **Llama.cpp** (Local & Free)
|
|
191
|
+
2. **OpenAI** (if API key available)
|
|
192
|
+
3. **Gemini** (if API key available)
|
|
193
|
+
4. **Mistral** (if API key available)
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
await autoEmbed({ text: string } | { filePath: string })
|
|
197
|
+
```
|
|
148
198
|
|
|
149
|
-
|
|
199
|
+
### `embed(config, input)`
|
|
200
|
+
|
|
201
|
+
Explicit provider selection.
|
|
202
|
+
```typescript
|
|
203
|
+
await embed(
|
|
204
|
+
{ provider, model?, apiKey?, baseUrl?, timeout?, maxRetries? },
|
|
205
|
+
{ text: string } | { filePath: string } | Array
|
|
206
|
+
)
|
|
207
|
+
```
|
|
150
208
|
|
|
151
|
-
|
|
209
|
+
**Returns:**
|
|
210
|
+
```typescript
|
|
211
|
+
{
|
|
212
|
+
embedding: number[],
|
|
213
|
+
dimensions: number,
|
|
214
|
+
provider: string,
|
|
215
|
+
model: string,
|
|
216
|
+
usage?: {
|
|
217
|
+
promptTokens?: number;
|
|
218
|
+
totalTokens?: number;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
152
222
|
|
|
153
|
-
##
|
|
223
|
+
## 🧪 Examples
|
|
154
224
|
|
|
155
225
|
### Semantic Search
|
|
156
226
|
```typescript
|
|
157
|
-
// Helper function for cosine similarity
|
|
158
227
|
function cosineSimilarity(vecA: number[], vecB: number[]): number {
|
|
159
228
|
const dotProduct = vecA.reduce((sum, val, i) => sum + val * vecB[i], 0);
|
|
160
229
|
const magnitudeA = Math.sqrt(vecA.reduce((sum, val) => sum + val * val, 0));
|
|
@@ -175,40 +244,6 @@ const mostSimilar = scores.indexOf(Math.max(...scores));
|
|
|
175
244
|
console.log(`Best match: ${documents[mostSimilar]}`);
|
|
176
245
|
```
|
|
177
246
|
|
|
178
|
-
### Text Similarity
|
|
179
|
-
```typescript
|
|
180
|
-
function cosineSimilarity(vecA: number[], vecB: number[]): number {
|
|
181
|
-
const dotProduct = vecA.reduce((sum, val, i) => sum + val * vecB[i], 0);
|
|
182
|
-
const magnitudeA = Math.sqrt(vecA.reduce((sum, val) => sum + val * val, 0));
|
|
183
|
-
const magnitudeB = Math.sqrt(vecB.reduce((sum, val) => sum + val * val, 0));
|
|
184
|
-
return dotProduct / (magnitudeA * magnitudeB);
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
const [emb1, emb2] = await Promise.all([
|
|
188
|
-
autoEmbed({ text: 'cat sleeping' }),
|
|
189
|
-
autoEmbed({ text: 'cat napping' })
|
|
190
|
-
]);
|
|
191
|
-
|
|
192
|
-
const similarity = cosineSimilarity(emb1.embedding, emb2.embedding);
|
|
193
|
-
console.log(`Similarity: ${similarity.toFixed(3)}`); // → 0.95 (very similar)
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Batch Processing
|
|
197
|
-
```typescript
|
|
198
|
-
const results = await embed(
|
|
199
|
-
{ provider: 'openai', apiKey: 'key' },
|
|
200
|
-
[
|
|
201
|
-
{ text: 'Text 1' },
|
|
202
|
-
{ text: 'Text 2' },
|
|
203
|
-
{ filePath: './doc.txt' }
|
|
204
|
-
]
|
|
205
|
-
);
|
|
206
|
-
// → { embeddings: [[...], [...], [...]], dimensions: 1536 }
|
|
207
|
-
|
|
208
|
-
console.log(`Processed ${results.embeddings.length} texts`);
|
|
209
|
-
console.log(`Dimensions: ${results.dimensions}`);
|
|
210
|
-
```
|
|
211
|
-
|
|
212
247
|
### File Processing
|
|
213
248
|
```typescript
|
|
214
249
|
import { readdir } from 'fs/promises';
|
|
@@ -237,142 +272,42 @@ const embeddings = await embedAllFiles('./documents');
|
|
|
237
272
|
console.log(`Processed ${embeddings.length} files`);
|
|
238
273
|
```
|
|
239
274
|
|
|
240
|
-
##
|
|
275
|
+
## 🐛 Troubleshooting
|
|
241
276
|
|
|
242
|
-
###
|
|
277
|
+
### Native Module Issues
|
|
243
278
|
|
|
244
|
-
|
|
245
|
-
1. **Llama.cpp** (Local & Free)
|
|
246
|
-
2. **OpenAI** (if API key available)
|
|
247
|
-
3. **Gemini** (if API key available)
|
|
248
|
-
4. **Claude** (if API key available)
|
|
249
|
-
5. **Mistral** (if API key available)
|
|
250
|
-
6. **DeepSeek** (if API key available)
|
|
251
|
-
|
|
252
|
-
```typescript
|
|
253
|
-
await autoEmbed({ text: string } | { filePath: string })
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
### `embed(config, input)`
|
|
257
|
-
|
|
258
|
-
Explicit provider selection.
|
|
259
|
-
```typescript
|
|
260
|
-
await embed(
|
|
261
|
-
{ provider, model?, apiKey?, baseUrl?, timeout?, maxRetries? },
|
|
262
|
-
{ text: string } | { filePath: string } | Array
|
|
263
|
-
)
|
|
264
|
-
```
|
|
265
|
-
|
|
266
|
-
**Returns:**
|
|
267
|
-
```typescript
|
|
268
|
-
{
|
|
269
|
-
embedding: number[],
|
|
270
|
-
dimensions: number,
|
|
271
|
-
provider: string,
|
|
272
|
-
model: string,
|
|
273
|
-
usage?: {
|
|
274
|
-
promptTokens?: number;
|
|
275
|
-
totalTokens?: number;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
```
|
|
279
|
-
|
|
280
|
-
### `getSupportedProviders()`
|
|
281
|
-
|
|
282
|
-
Returns available providers.
|
|
283
|
-
```typescript
|
|
284
|
-
import { getSupportedProviders } from 'embedbox';
|
|
285
|
-
|
|
286
|
-
const providers = getSupportedProviders();
|
|
287
|
-
// → ['openai', 'gemini', 'claude', 'mistral', 'deepseek', 'llamacpp']
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
### `createProvider(config)`
|
|
291
|
-
|
|
292
|
-
Create provider instance for advanced usage.
|
|
293
|
-
```typescript
|
|
294
|
-
import { createProvider } from 'embedbox';
|
|
295
|
-
|
|
296
|
-
const provider = createProvider({
|
|
297
|
-
provider: 'openai',
|
|
298
|
-
model: 'text-embedding-3-small',
|
|
299
|
-
apiKey: 'your-key'
|
|
300
|
-
});
|
|
301
|
-
|
|
302
|
-
const isReady = await provider.isReady();
|
|
303
|
-
if (isReady) {
|
|
304
|
-
const result = await provider.embed({ text: 'Hello' });
|
|
305
|
-
}
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
## Environment Variables
|
|
279
|
+
**Problem:** `binding.createModel is not a function`
|
|
309
280
|
```bash
|
|
310
|
-
#
|
|
311
|
-
|
|
312
|
-
GOOGLE_GENERATIVE_AI_API_KEY=...
|
|
313
|
-
ANTHROPIC_API_KEY=sk-ant-...
|
|
314
|
-
MISTRAL_API_KEY=...
|
|
315
|
-
DEEPSEEK_API_KEY=...
|
|
281
|
+
# Solution: Rebuild native module
|
|
282
|
+
npm run build:native
|
|
316
283
|
```
|
|
317
284
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
try {
|
|
324
|
-
const result = await autoEmbed({ text: 'Hello' });
|
|
325
|
-
console.log(result.embedding);
|
|
326
|
-
} catch (error) {
|
|
327
|
-
if (error.message.includes('API key')) {
|
|
328
|
-
console.error('Please set up your API keys in .env');
|
|
329
|
-
} else if (error.message.includes('not ready')) {
|
|
330
|
-
console.error('Provider is not available');
|
|
331
|
-
} else if (error.message.includes('network')) {
|
|
332
|
-
console.error('Network connection failed');
|
|
333
|
-
} else {
|
|
334
|
-
console.error('Embedding failed:', error.message);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
285
|
+
**Problem:** Model file not found
|
|
286
|
+
```bash
|
|
287
|
+
# Solution: Check model path
|
|
288
|
+
ls -la models/ # Verify model exists
|
|
337
289
|
```
|
|
338
290
|
|
|
339
|
-
|
|
291
|
+
### Performance Issues
|
|
340
292
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
embed,
|
|
346
|
-
getSupportedProviders,
|
|
347
|
-
createProvider,
|
|
348
|
-
type EmbedConfig,
|
|
349
|
-
type EmbedInput,
|
|
350
|
-
type EmbedResult
|
|
351
|
-
} from 'embedbox';
|
|
352
|
-
|
|
353
|
-
// Full type safety
|
|
354
|
-
const config: EmbedConfig = {
|
|
355
|
-
provider: 'openai',
|
|
356
|
-
model: 'text-embedding-3-small'
|
|
357
|
-
};
|
|
358
|
-
|
|
359
|
-
const input: EmbedInput = {
|
|
360
|
-
text: 'Your text here'
|
|
361
|
-
};
|
|
362
|
-
|
|
363
|
-
const result: EmbedResult = await embed(config, input);
|
|
364
|
-
```
|
|
293
|
+
**Slow embeddings:**
|
|
294
|
+
- Check model size (smaller = faster)
|
|
295
|
+
- Use batch processing for multiple texts
|
|
296
|
+
- Ensure native module is being used (not HTTP fallback)
|
|
365
297
|
|
|
366
|
-
## License
|
|
298
|
+
## 📄 License
|
|
367
299
|
|
|
368
|
-
MIT
|
|
300
|
+
MIT License - see [LICENSE](LICENSE) file for details.
|
|
369
301
|
|
|
370
|
-
##
|
|
302
|
+
## 🙏 Acknowledgments
|
|
371
303
|
|
|
372
|
-
- [
|
|
373
|
-
- [
|
|
374
|
-
- [
|
|
304
|
+
- [Llama.cpp](https://github.com/ggml-org/llama.cpp) - Core embedding engine
|
|
305
|
+
- [OpenAI](https://openai.com/) - Embedding API
|
|
306
|
+
- [Google Gemini](https://ai.google.dev/) - Embedding API
|
|
307
|
+
- [Mistral AI](https://mistral.ai/) - Embedding API
|
|
375
308
|
|
|
376
309
|
---
|
|
377
310
|
|
|
378
|
-
|
|
311
|
+
**⭐ Star us on GitHub!** [github.com/box-safe/vecbox](https://github.com/box-safe/vecbox)
|
|
312
|
+
|
|
313
|
+
**Made with ❤️ by the Vecbox Team**
|