@mastra/fastembed 0.10.7-alpha.0 → 1.0.0-beta.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/CHANGELOG.md +5 -7
- package/README.md +40 -1
- package/dist/index.cjs +29 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -3
- package/dist/index.js.map +1 -1
- package/package.json +8 -10
package/CHANGELOG.md
CHANGED
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
# @mastra/fastembed
|
|
2
2
|
|
|
3
|
-
## 0.
|
|
3
|
+
## 1.0.0-beta.0
|
|
4
4
|
|
|
5
|
-
###
|
|
6
|
-
|
|
7
|
-
- update peerdeps ([`5ca1cca`](https://github.com/mastra-ai/mastra/commit/5ca1ccac61ffa7141e6d9fa8f22d3ad4d03bf5dc))
|
|
5
|
+
### Major Changes
|
|
8
6
|
|
|
9
|
-
|
|
7
|
+
- Bump minimum required Node.js version to 22.13.0 ([#9706](https://github.com/mastra-ai/mastra/pull/9706))
|
|
10
8
|
|
|
11
|
-
|
|
9
|
+
- Upgraded to AI SDK v5 (specification version v2) for compatibility with @mastra/core. Default exports now use v2 specification. Legacy v1 exports available for backwards compatibility via `fastembed.smallLegacy` and `fastembed.baseLegacy`. ([#9349](https://github.com/mastra-ai/mastra/pull/9349))
|
|
12
10
|
|
|
13
|
-
-
|
|
11
|
+
- Mark as stable ([`83d5942`](https://github.com/mastra-ai/mastra/commit/83d5942669ce7bba4a6ca4fd4da697a10eb5ebdc))
|
|
14
12
|
|
|
15
13
|
## 0.10.5
|
|
16
14
|
|
package/README.md
CHANGED
|
@@ -10,19 +10,58 @@ This package provides a FastEmbed embedding model integration for use with Mastr
|
|
|
10
10
|
pnpm add @mastra/fastembed
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
## AI SDK v2 Compatibility
|
|
14
|
+
|
|
15
|
+
This package supports AI SDK v5 (specification version v2). The default exports use v2, which is compatible with `@mastra/core` and AI SDK v5.
|
|
16
|
+
|
|
17
|
+
**Breaking Change:** Previous versions used AI SDK specification v1. If you need v1 compatibility for legacy code, use the `Legacy` exports.
|
|
18
|
+
|
|
13
19
|
## Usage
|
|
14
20
|
|
|
21
|
+
### Default (AI SDK v2)
|
|
22
|
+
|
|
15
23
|
```typescript
|
|
16
24
|
import { Memory } from '@mastra/memory';
|
|
17
25
|
import { fastembed } from '@mastra/fastembed';
|
|
18
26
|
|
|
19
27
|
const memory = new Memory({
|
|
20
28
|
// ... other memory options
|
|
21
|
-
embedder: fastembed,
|
|
29
|
+
embedder: fastembed, // Uses v2 specification
|
|
22
30
|
});
|
|
23
31
|
|
|
24
32
|
// Now you can use this memory instance with an Agent
|
|
25
33
|
// const agent = new Agent({ memory, ... });
|
|
26
34
|
```
|
|
27
35
|
|
|
36
|
+
### Available Models
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
import { fastembed } from '@mastra/fastembed';
|
|
40
|
+
|
|
41
|
+
// Default export (bge-small-en-v1.5 with v2 spec)
|
|
42
|
+
const embedder = fastembed;
|
|
43
|
+
|
|
44
|
+
// Named exports for v2 models
|
|
45
|
+
const small = fastembed.small; // bge-small-en-v1.5
|
|
46
|
+
const base = fastembed.base; // bge-base-en-v1.5
|
|
47
|
+
|
|
48
|
+
// Legacy v1 models (for backwards compatibility)
|
|
49
|
+
const smallLegacy = fastembed.smallLegacy; // bge-small-en-v1.5 (v1 spec)
|
|
50
|
+
const baseLegacy = fastembed.baseLegacy; // bge-base-en-v1.5 (v1 spec)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Direct Usage with AI SDK v5
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import { embed } from 'ai';
|
|
57
|
+
import { fastembed } from '@mastra/fastembed';
|
|
58
|
+
|
|
59
|
+
const result = await embed({
|
|
60
|
+
model: fastembed,
|
|
61
|
+
value: 'Text to embed',
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
console.log(result.embedding); // number[]
|
|
65
|
+
```
|
|
66
|
+
|
|
28
67
|
This package wraps the `fastembed-js` library to provide an embedding model compatible with the AI SDK and Mastra.
|
package/dist/index.cjs
CHANGED
|
@@ -4,6 +4,7 @@ var fsp = require('fs/promises');
|
|
|
4
4
|
var os = require('os');
|
|
5
5
|
var path = require('path');
|
|
6
6
|
var ai = require('ai');
|
|
7
|
+
var aiV4 = require('ai-v4');
|
|
7
8
|
var fastembed$1 = require('fastembed');
|
|
8
9
|
|
|
9
10
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -33,7 +34,7 @@ async function generateEmbeddings(values, modelType) {
|
|
|
33
34
|
embeddings: allResults
|
|
34
35
|
};
|
|
35
36
|
}
|
|
36
|
-
var
|
|
37
|
+
var fastEmbedLegacyProvider = aiV4.experimental_customProvider({
|
|
37
38
|
textEmbeddingModels: {
|
|
38
39
|
"bge-small-en-v1.5": {
|
|
39
40
|
specificationVersion: "v1",
|
|
@@ -57,9 +58,35 @@ var fastEmbedProvider = ai.experimental_customProvider({
|
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
});
|
|
61
|
+
var fastEmbedProvider = ai.customProvider({
|
|
62
|
+
textEmbeddingModels: {
|
|
63
|
+
"bge-small-en-v1.5": {
|
|
64
|
+
specificationVersion: "v2",
|
|
65
|
+
provider: "fastembed",
|
|
66
|
+
modelId: "bge-small-en-v1.5",
|
|
67
|
+
maxEmbeddingsPerCall: 256,
|
|
68
|
+
supportsParallelCalls: true,
|
|
69
|
+
async doEmbed({ values }) {
|
|
70
|
+
return generateEmbeddings(values, "BGESmallENV15");
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
"bge-base-en-v1.5": {
|
|
74
|
+
specificationVersion: "v2",
|
|
75
|
+
provider: "fastembed",
|
|
76
|
+
modelId: "bge-base-en-v1.5",
|
|
77
|
+
maxEmbeddingsPerCall: 256,
|
|
78
|
+
supportsParallelCalls: true,
|
|
79
|
+
async doEmbed({ values }) {
|
|
80
|
+
return generateEmbeddings(values, "BGEBaseENV15");
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
});
|
|
60
85
|
var fastembed = Object.assign(fastEmbedProvider.textEmbeddingModel(`bge-small-en-v1.5`), {
|
|
61
86
|
small: fastEmbedProvider.textEmbeddingModel(`bge-small-en-v1.5`),
|
|
62
|
-
base: fastEmbedProvider.textEmbeddingModel(`bge-base-en-v1.5`)
|
|
87
|
+
base: fastEmbedProvider.textEmbeddingModel(`bge-base-en-v1.5`),
|
|
88
|
+
smallLegacy: fastEmbedLegacyProvider.textEmbeddingModel(`bge-small-en-v1.5`),
|
|
89
|
+
baseLegacy: fastEmbedLegacyProvider.textEmbeddingModel(`bge-base-en-v1.5`)
|
|
63
90
|
});
|
|
64
91
|
|
|
65
92
|
exports.fastembed = fastembed;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["path","os","fsp","FlagEmbedding","EmbeddingModel","experimental_customProvider"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["path","os","fsp","FlagEmbedding","EmbeddingModel","experimental_customProvider","customProvider"],"mappings":"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","file":"index.cjs","sourcesContent":["import fsp from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { customProvider } from 'ai';\nimport { experimental_customProvider } from 'ai-v4';\nimport { FlagEmbedding, EmbeddingModel } from 'fastembed';\n\nasync function getModelCachePath() {\n const cachePath = path.join(os.homedir(), '.cache', 'mastra', 'fastembed-models');\n await fsp.mkdir(cachePath, { recursive: true });\n return cachePath;\n}\n\n// Shared function to generate embeddings using fastembed\nasync function generateEmbeddings(values: string[], modelType: 'BGESmallENV15' | 'BGEBaseENV15') {\n const model = await FlagEmbedding.init({\n model: EmbeddingModel[modelType],\n cacheDir: await getModelCachePath(),\n });\n\n // model.embed() returns an AsyncGenerator that processes texts in batches (default size 256)\n const embeddings = model.embed(values);\n\n const allResults = [];\n for await (const result of embeddings) {\n // result is an array of embeddings, one for each text in the batch\n // We convert each Float32Array embedding to a regular number array\n allResults.push(...result.map(embedding => Array.from(embedding)));\n }\n\n if (allResults.length === 0) throw new Error('No embeddings generated');\n\n return {\n embeddings: allResults,\n };\n}\n\n// Legacy v1 provider for backwards compatibility\nconst fastEmbedLegacyProvider = experimental_customProvider({\n textEmbeddingModels: {\n 'bge-small-en-v1.5': {\n specificationVersion: 'v1',\n provider: 'fastembed',\n modelId: 'bge-small-en-v1.5',\n maxEmbeddingsPerCall: 256,\n supportsParallelCalls: true,\n async doEmbed({ values }) {\n return generateEmbeddings(values, 'BGESmallENV15');\n },\n },\n 'bge-base-en-v1.5': {\n specificationVersion: 'v1',\n provider: 'fastembed',\n modelId: 'bge-base-en-v1.5',\n maxEmbeddingsPerCall: 256,\n supportsParallelCalls: true,\n async doEmbed({ values }) {\n return generateEmbeddings(values, 'BGEBaseENV15');\n },\n },\n },\n});\n\n// V2 provider for AI SDK v5 compatibility\nconst fastEmbedProvider = customProvider({\n textEmbeddingModels: {\n 'bge-small-en-v1.5': {\n specificationVersion: 'v2',\n provider: 'fastembed',\n modelId: 'bge-small-en-v1.5',\n maxEmbeddingsPerCall: 256,\n supportsParallelCalls: true,\n async doEmbed({ values }) {\n return generateEmbeddings(values, 'BGESmallENV15');\n },\n },\n 'bge-base-en-v1.5': {\n specificationVersion: 'v2',\n provider: 'fastembed',\n modelId: 'bge-base-en-v1.5',\n maxEmbeddingsPerCall: 256,\n supportsParallelCalls: true,\n async doEmbed({ values }) {\n return generateEmbeddings(values, 'BGEBaseENV15');\n },\n },\n },\n});\n\nexport const fastembed = Object.assign(fastEmbedProvider.textEmbeddingModel(`bge-small-en-v1.5`), {\n small: fastEmbedProvider.textEmbeddingModel(`bge-small-en-v1.5`),\n base: fastEmbedProvider.textEmbeddingModel(`bge-base-en-v1.5`),\n smallLegacy: fastEmbedLegacyProvider.textEmbeddingModel(`bge-small-en-v1.5`),\n baseLegacy: fastEmbedLegacyProvider.textEmbeddingModel(`bge-base-en-v1.5`),\n});\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
|
-
export declare const fastembed: import("ai").
|
|
2
|
-
small: import("ai").
|
|
3
|
-
base: import("ai").
|
|
1
|
+
export declare const fastembed: import("@ai-sdk/provider").EmbeddingModelV2<string> & {
|
|
2
|
+
small: import("@ai-sdk/provider").EmbeddingModelV2<string>;
|
|
3
|
+
base: import("@ai-sdk/provider").EmbeddingModelV2<string>;
|
|
4
|
+
smallLegacy: import("ai-v4").EmbeddingModel<string>;
|
|
5
|
+
baseLegacy: import("ai-v4").EmbeddingModel<string>;
|
|
4
6
|
};
|
|
5
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAyFA,eAAO,MAAM,SAAS;;;;;CAKpB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import fsp from 'fs/promises';
|
|
2
2
|
import os from 'os';
|
|
3
3
|
import path from 'path';
|
|
4
|
-
import {
|
|
4
|
+
import { customProvider } from 'ai';
|
|
5
|
+
import { experimental_customProvider } from 'ai-v4';
|
|
5
6
|
import { FlagEmbedding, EmbeddingModel } from 'fastembed';
|
|
6
7
|
|
|
7
8
|
// src/index.ts
|
|
@@ -25,7 +26,7 @@ async function generateEmbeddings(values, modelType) {
|
|
|
25
26
|
embeddings: allResults
|
|
26
27
|
};
|
|
27
28
|
}
|
|
28
|
-
var
|
|
29
|
+
var fastEmbedLegacyProvider = experimental_customProvider({
|
|
29
30
|
textEmbeddingModels: {
|
|
30
31
|
"bge-small-en-v1.5": {
|
|
31
32
|
specificationVersion: "v1",
|
|
@@ -49,9 +50,35 @@ var fastEmbedProvider = experimental_customProvider({
|
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
52
|
});
|
|
53
|
+
var fastEmbedProvider = customProvider({
|
|
54
|
+
textEmbeddingModels: {
|
|
55
|
+
"bge-small-en-v1.5": {
|
|
56
|
+
specificationVersion: "v2",
|
|
57
|
+
provider: "fastembed",
|
|
58
|
+
modelId: "bge-small-en-v1.5",
|
|
59
|
+
maxEmbeddingsPerCall: 256,
|
|
60
|
+
supportsParallelCalls: true,
|
|
61
|
+
async doEmbed({ values }) {
|
|
62
|
+
return generateEmbeddings(values, "BGESmallENV15");
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"bge-base-en-v1.5": {
|
|
66
|
+
specificationVersion: "v2",
|
|
67
|
+
provider: "fastembed",
|
|
68
|
+
modelId: "bge-base-en-v1.5",
|
|
69
|
+
maxEmbeddingsPerCall: 256,
|
|
70
|
+
supportsParallelCalls: true,
|
|
71
|
+
async doEmbed({ values }) {
|
|
72
|
+
return generateEmbeddings(values, "BGEBaseENV15");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
});
|
|
52
77
|
var fastembed = Object.assign(fastEmbedProvider.textEmbeddingModel(`bge-small-en-v1.5`), {
|
|
53
78
|
small: fastEmbedProvider.textEmbeddingModel(`bge-small-en-v1.5`),
|
|
54
|
-
base: fastEmbedProvider.textEmbeddingModel(`bge-base-en-v1.5`)
|
|
79
|
+
base: fastEmbedProvider.textEmbeddingModel(`bge-base-en-v1.5`),
|
|
80
|
+
smallLegacy: fastEmbedLegacyProvider.textEmbeddingModel(`bge-small-en-v1.5`),
|
|
81
|
+
baseLegacy: fastEmbedLegacyProvider.textEmbeddingModel(`bge-base-en-v1.5`)
|
|
55
82
|
});
|
|
56
83
|
|
|
57
84
|
export { fastembed };
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import fsp from 'node:fs/promises';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { customProvider } from 'ai';\nimport { experimental_customProvider } from 'ai-v4';\nimport { FlagEmbedding, EmbeddingModel } from 'fastembed';\n\nasync function getModelCachePath() {\n const cachePath = path.join(os.homedir(), '.cache', 'mastra', 'fastembed-models');\n await fsp.mkdir(cachePath, { recursive: true });\n return cachePath;\n}\n\n// Shared function to generate embeddings using fastembed\nasync function generateEmbeddings(values: string[], modelType: 'BGESmallENV15' | 'BGEBaseENV15') {\n const model = await FlagEmbedding.init({\n model: EmbeddingModel[modelType],\n cacheDir: await getModelCachePath(),\n });\n\n // model.embed() returns an AsyncGenerator that processes texts in batches (default size 256)\n const embeddings = model.embed(values);\n\n const allResults = [];\n for await (const result of embeddings) {\n // result is an array of embeddings, one for each text in the batch\n // We convert each Float32Array embedding to a regular number array\n allResults.push(...result.map(embedding => Array.from(embedding)));\n }\n\n if (allResults.length === 0) throw new Error('No embeddings generated');\n\n return {\n embeddings: allResults,\n };\n}\n\n// Legacy v1 provider for backwards compatibility\nconst fastEmbedLegacyProvider = experimental_customProvider({\n textEmbeddingModels: {\n 'bge-small-en-v1.5': {\n specificationVersion: 'v1',\n provider: 'fastembed',\n modelId: 'bge-small-en-v1.5',\n maxEmbeddingsPerCall: 256,\n supportsParallelCalls: true,\n async doEmbed({ values }) {\n return generateEmbeddings(values, 'BGESmallENV15');\n },\n },\n 'bge-base-en-v1.5': {\n specificationVersion: 'v1',\n provider: 'fastembed',\n modelId: 'bge-base-en-v1.5',\n maxEmbeddingsPerCall: 256,\n supportsParallelCalls: true,\n async doEmbed({ values }) {\n return generateEmbeddings(values, 'BGEBaseENV15');\n },\n },\n },\n});\n\n// V2 provider for AI SDK v5 compatibility\nconst fastEmbedProvider = customProvider({\n textEmbeddingModels: {\n 'bge-small-en-v1.5': {\n specificationVersion: 'v2',\n provider: 'fastembed',\n modelId: 'bge-small-en-v1.5',\n maxEmbeddingsPerCall: 256,\n supportsParallelCalls: true,\n async doEmbed({ values }) {\n return generateEmbeddings(values, 'BGESmallENV15');\n },\n },\n 'bge-base-en-v1.5': {\n specificationVersion: 'v2',\n provider: 'fastembed',\n modelId: 'bge-base-en-v1.5',\n maxEmbeddingsPerCall: 256,\n supportsParallelCalls: true,\n async doEmbed({ values }) {\n return generateEmbeddings(values, 'BGEBaseENV15');\n },\n },\n },\n});\n\nexport const fastembed = Object.assign(fastEmbedProvider.textEmbeddingModel(`bge-small-en-v1.5`), {\n small: fastEmbedProvider.textEmbeddingModel(`bge-small-en-v1.5`),\n base: fastEmbedProvider.textEmbeddingModel(`bge-base-en-v1.5`),\n smallLegacy: fastEmbedLegacyProvider.textEmbeddingModel(`bge-small-en-v1.5`),\n baseLegacy: fastEmbedLegacyProvider.textEmbeddingModel(`bge-base-en-v1.5`),\n});\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/fastembed",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-beta.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -32,7 +32,9 @@
|
|
|
32
32
|
"url": "https://github.com/mastra-ai/mastra/issues"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"ai": "^
|
|
35
|
+
"ai": "^5.0.76",
|
|
36
|
+
"ai-v4": "npm:ai@4.3.19",
|
|
37
|
+
"@ai-sdk/provider": "^2.0.0",
|
|
36
38
|
"fastembed": "^1.14.4"
|
|
37
39
|
},
|
|
38
40
|
"devDependencies": {
|
|
@@ -40,15 +42,11 @@
|
|
|
40
42
|
"tsup": "^8.5.0",
|
|
41
43
|
"typescript": "^5.8.3",
|
|
42
44
|
"vitest": "^3.2.4",
|
|
43
|
-
"@internal/
|
|
44
|
-
"@internal/
|
|
45
|
+
"@internal/types-builder": "0.0.28",
|
|
46
|
+
"@internal/lint": "0.0.53"
|
|
45
47
|
},
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"publish-branch": [
|
|
49
|
-
"main",
|
|
50
|
-
"0.x"
|
|
51
|
-
]
|
|
48
|
+
"engines": {
|
|
49
|
+
"node": ">=22.13.0"
|
|
52
50
|
},
|
|
53
51
|
"scripts": {
|
|
54
52
|
"build": "tsup --silent --config tsup.config.ts",
|