@lov3kaizen/agentsea-embeddings 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +475 -0
- package/dist/caching/index.d.mts +286 -0
- package/dist/caching/index.d.ts +286 -0
- package/dist/caching/index.js +1005 -0
- package/dist/caching/index.mjs +27 -0
- package/dist/chunk-3KM32UQK.mjs +207 -0
- package/dist/chunk-DJAURHAS.mjs +1117 -0
- package/dist/chunk-NBHIRTJT.mjs +895 -0
- package/dist/chunk-QAITLJ2E.mjs +259 -0
- package/dist/chunk-TER262ST.mjs +877 -0
- package/dist/chunk-VPSMDBHH.mjs +957 -0
- package/dist/chunking/index.d.mts +1 -0
- package/dist/chunking/index.d.ts +1 -0
- package/dist/chunking/index.js +1408 -0
- package/dist/chunking/index.mjs +37 -0
- package/dist/embedding.types-CCgPVxt1.d.mts +102 -0
- package/dist/embedding.types-CCgPVxt1.d.ts +102 -0
- package/dist/index-CeG6God2.d.mts +297 -0
- package/dist/index-DMaQRn2w.d.mts +172 -0
- package/dist/index-DMaQRn2w.d.ts +172 -0
- package/dist/index-DWddsKRi.d.ts +297 -0
- package/dist/index.d.mts +647 -0
- package/dist/index.d.ts +647 -0
- package/dist/index.js +5259 -0
- package/dist/index.mjs +1028 -0
- package/dist/providers/index.d.mts +2 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +1235 -0
- package/dist/providers/index.mjs +32 -0
- package/dist/stores/index.d.mts +298 -0
- package/dist/stores/index.d.ts +298 -0
- package/dist/stores/index.js +1178 -0
- package/dist/stores/index.mjs +26 -0
- package/package.json +102 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
// src/core/EmbeddingModel.ts
|
|
2
|
+
var EmbeddingModel = class {
|
|
3
|
+
/**
|
|
4
|
+
* Get model dimensions
|
|
5
|
+
*/
|
|
6
|
+
get dimensions() {
|
|
7
|
+
return this.info.dimensions;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get max tokens
|
|
11
|
+
*/
|
|
12
|
+
get maxTokens() {
|
|
13
|
+
return this.info.maxTokens;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Get max batch size
|
|
17
|
+
*/
|
|
18
|
+
get maxBatchSize() {
|
|
19
|
+
return this.info.maxBatchSize;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get model name
|
|
23
|
+
*/
|
|
24
|
+
get name() {
|
|
25
|
+
return this.info.name;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get provider name
|
|
29
|
+
*/
|
|
30
|
+
get provider() {
|
|
31
|
+
return this.info.provider;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Count tokens in text (default implementation)
|
|
35
|
+
* Subclasses should override for accurate counting
|
|
36
|
+
*/
|
|
37
|
+
countTokens(text) {
|
|
38
|
+
return Math.ceil(text.length / 4);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Check if text exceeds max tokens
|
|
42
|
+
*/
|
|
43
|
+
exceedsMaxTokens(text) {
|
|
44
|
+
return this.countTokens(text) > this.maxTokens;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Truncate text to max tokens
|
|
48
|
+
*/
|
|
49
|
+
truncateToMaxTokens(text) {
|
|
50
|
+
const tokens = this.countTokens(text);
|
|
51
|
+
if (tokens <= this.maxTokens) {
|
|
52
|
+
return text;
|
|
53
|
+
}
|
|
54
|
+
const ratio = this.maxTokens / tokens;
|
|
55
|
+
const targetLength = Math.floor(text.length * ratio * 0.95);
|
|
56
|
+
return text.slice(0, targetLength);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Calculate similarity between two vectors
|
|
60
|
+
*/
|
|
61
|
+
static cosineSimilarity(a, b) {
|
|
62
|
+
if (a.length !== b.length) {
|
|
63
|
+
throw new Error(`Vector dimensions mismatch: ${a.length} vs ${b.length}`);
|
|
64
|
+
}
|
|
65
|
+
let dotProduct = 0;
|
|
66
|
+
let normA = 0;
|
|
67
|
+
let normB = 0;
|
|
68
|
+
for (let i = 0; i < a.length; i++) {
|
|
69
|
+
dotProduct += a[i] * b[i];
|
|
70
|
+
normA += a[i] * a[i];
|
|
71
|
+
normB += b[i] * b[i];
|
|
72
|
+
}
|
|
73
|
+
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
|
|
74
|
+
if (magnitude === 0) {
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
return dotProduct / magnitude;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Calculate Euclidean distance between two vectors
|
|
81
|
+
*/
|
|
82
|
+
static euclideanDistance(a, b) {
|
|
83
|
+
if (a.length !== b.length) {
|
|
84
|
+
throw new Error(`Vector dimensions mismatch: ${a.length} vs ${b.length}`);
|
|
85
|
+
}
|
|
86
|
+
let sum = 0;
|
|
87
|
+
for (let i = 0; i < a.length; i++) {
|
|
88
|
+
const diff = a[i] - b[i];
|
|
89
|
+
sum += diff * diff;
|
|
90
|
+
}
|
|
91
|
+
return Math.sqrt(sum);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Calculate dot product of two vectors
|
|
95
|
+
*/
|
|
96
|
+
static dotProduct(a, b) {
|
|
97
|
+
if (a.length !== b.length) {
|
|
98
|
+
throw new Error(`Vector dimensions mismatch: ${a.length} vs ${b.length}`);
|
|
99
|
+
}
|
|
100
|
+
let result = 0;
|
|
101
|
+
for (let i = 0; i < a.length; i++) {
|
|
102
|
+
result += a[i] * b[i];
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Normalize a vector to unit length
|
|
108
|
+
*/
|
|
109
|
+
static normalize(vector) {
|
|
110
|
+
let norm = 0;
|
|
111
|
+
for (let i = 0; i < vector.length; i++) {
|
|
112
|
+
norm += vector[i] * vector[i];
|
|
113
|
+
}
|
|
114
|
+
norm = Math.sqrt(norm);
|
|
115
|
+
if (norm === 0) {
|
|
116
|
+
return vector.slice();
|
|
117
|
+
}
|
|
118
|
+
return vector.map((v) => v / norm);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Average multiple vectors
|
|
122
|
+
*/
|
|
123
|
+
static average(vectors) {
|
|
124
|
+
if (vectors.length === 0) {
|
|
125
|
+
throw new Error("Cannot average empty array of vectors");
|
|
126
|
+
}
|
|
127
|
+
const dimensions = vectors[0].length;
|
|
128
|
+
const result = new Array(dimensions).fill(0);
|
|
129
|
+
for (const vector of vectors) {
|
|
130
|
+
if (vector.length !== dimensions) {
|
|
131
|
+
throw new Error(
|
|
132
|
+
`Vector dimensions mismatch: expected ${dimensions}, got ${vector.length}`
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
for (let i = 0; i < dimensions; i++) {
|
|
136
|
+
result[i] += vector[i];
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
for (let i = 0; i < dimensions; i++) {
|
|
140
|
+
result[i] /= vectors.length;
|
|
141
|
+
}
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Weighted average of vectors
|
|
146
|
+
*/
|
|
147
|
+
static weightedAverage(vectors, weights) {
|
|
148
|
+
if (vectors.length === 0) {
|
|
149
|
+
throw new Error("Cannot average empty array of vectors");
|
|
150
|
+
}
|
|
151
|
+
if (vectors.length !== weights.length) {
|
|
152
|
+
throw new Error("Vectors and weights arrays must have same length");
|
|
153
|
+
}
|
|
154
|
+
const dimensions = vectors[0].length;
|
|
155
|
+
const result = new Array(dimensions).fill(0);
|
|
156
|
+
let totalWeight = 0;
|
|
157
|
+
for (let j = 0; j < vectors.length; j++) {
|
|
158
|
+
const vector = vectors[j];
|
|
159
|
+
const weight = weights[j];
|
|
160
|
+
totalWeight += weight;
|
|
161
|
+
if (vector.length !== dimensions) {
|
|
162
|
+
throw new Error(
|
|
163
|
+
`Vector dimensions mismatch: expected ${dimensions}, got ${vector.length}`
|
|
164
|
+
);
|
|
165
|
+
}
|
|
166
|
+
for (let i = 0; i < dimensions; i++) {
|
|
167
|
+
result[i] += vector[i] * weight;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (totalWeight === 0) {
|
|
171
|
+
throw new Error("Total weight cannot be zero");
|
|
172
|
+
}
|
|
173
|
+
for (let i = 0; i < dimensions; i++) {
|
|
174
|
+
result[i] /= totalWeight;
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
var ModelRegistry = class {
|
|
180
|
+
models = /* @__PURE__ */ new Map();
|
|
181
|
+
defaultModel = null;
|
|
182
|
+
/**
|
|
183
|
+
* Register a model
|
|
184
|
+
*/
|
|
185
|
+
register(model, isDefault = false) {
|
|
186
|
+
const key = `${model.provider}:${model.name}`;
|
|
187
|
+
this.models.set(key, model);
|
|
188
|
+
if (isDefault || this.defaultModel === null) {
|
|
189
|
+
this.defaultModel = key;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get a model by provider and name
|
|
194
|
+
*/
|
|
195
|
+
get(provider, name) {
|
|
196
|
+
return this.models.get(`${provider}:${name}`);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get model by key
|
|
200
|
+
*/
|
|
201
|
+
getByKey(key) {
|
|
202
|
+
return this.models.get(key);
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Get the default model
|
|
206
|
+
*/
|
|
207
|
+
getDefault() {
|
|
208
|
+
if (this.defaultModel === null) {
|
|
209
|
+
return void 0;
|
|
210
|
+
}
|
|
211
|
+
return this.models.get(this.defaultModel);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Set default model
|
|
215
|
+
*/
|
|
216
|
+
setDefault(provider, name) {
|
|
217
|
+
const key = `${provider}:${name}`;
|
|
218
|
+
if (!this.models.has(key)) {
|
|
219
|
+
throw new Error(`Model ${key} not found in registry`);
|
|
220
|
+
}
|
|
221
|
+
this.defaultModel = key;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* List all registered models
|
|
225
|
+
*/
|
|
226
|
+
list() {
|
|
227
|
+
return Array.from(this.models.values()).map((m) => m.info);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check if a model is registered
|
|
231
|
+
*/
|
|
232
|
+
has(provider, name) {
|
|
233
|
+
return this.models.has(`${provider}:${name}`);
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Remove a model
|
|
237
|
+
*/
|
|
238
|
+
remove(provider, name) {
|
|
239
|
+
const key = `${provider}:${name}`;
|
|
240
|
+
if (this.defaultModel === key) {
|
|
241
|
+
this.defaultModel = null;
|
|
242
|
+
}
|
|
243
|
+
return this.models.delete(key);
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Clear all models
|
|
247
|
+
*/
|
|
248
|
+
clear() {
|
|
249
|
+
this.models.clear();
|
|
250
|
+
this.defaultModel = null;
|
|
251
|
+
}
|
|
252
|
+
};
|
|
253
|
+
var modelRegistry = new ModelRegistry();
|
|
254
|
+
|
|
255
|
+
export {
|
|
256
|
+
EmbeddingModel,
|
|
257
|
+
ModelRegistry,
|
|
258
|
+
modelRegistry
|
|
259
|
+
};
|