rax-flow-core 0.2.0 → 2.0.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/dist/governance/audit-trail.d.ts +94 -0
- package/dist/governance/audit-trail.d.ts.map +1 -0
- package/dist/governance/audit-trail.js +246 -0
- package/dist/governance/audit-trail.js.map +1 -0
- package/dist/governance/policy-engine.d.ts +101 -0
- package/dist/governance/policy-engine.d.ts.map +1 -0
- package/dist/governance/policy-engine.js +446 -0
- package/dist/governance/policy-engine.js.map +1 -0
- package/dist/governance/rbac-engine.d.ts +59 -0
- package/dist/governance/rbac-engine.d.ts.map +1 -0
- package/dist/governance/rbac-engine.js +183 -0
- package/dist/governance/rbac-engine.js.map +1 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/memory/embeddings-service.d.ts +116 -0
- package/dist/memory/embeddings-service.d.ts.map +1 -0
- package/dist/memory/embeddings-service.js +287 -0
- package/dist/memory/embeddings-service.js.map +1 -0
- package/dist/memory/local-vector-store.d.ts +37 -3
- package/dist/memory/local-vector-store.d.ts.map +1 -1
- package/dist/memory/local-vector-store.js +91 -8
- package/dist/memory/local-vector-store.js.map +1 -1
- package/dist/orchestrator/core-orchestrator.d.ts +12 -0
- package/dist/orchestrator/core-orchestrator.d.ts.map +1 -1
- package/dist/orchestrator/core-orchestrator.js +75 -0
- package/dist/orchestrator/core-orchestrator.js.map +1 -1
- package/dist/orchestrator/task-decomposer.d.ts +56 -0
- package/dist/orchestrator/task-decomposer.d.ts.map +1 -0
- package/dist/orchestrator/task-decomposer.js +286 -0
- package/dist/orchestrator/task-decomposer.js.map +1 -0
- package/dist/plugins/plugin-system.d.ts +84 -1
- package/dist/plugins/plugin-system.d.ts.map +1 -1
- package/dist/plugins/plugin-system.js +91 -0
- package/dist/plugins/plugin-system.js.map +1 -1
- package/package.json +1 -1
- package/src/governance/audit-trail.ts +375 -0
- package/src/governance/policy-engine.ts +582 -0
- package/src/governance/rbac-engine.ts +244 -0
- package/src/index.ts +5 -2
- package/src/memory/embeddings-service.ts +322 -0
- package/src/memory/local-vector-store.ts +105 -8
- package/src/orchestrator/core-orchestrator.ts +78 -0
- package/src/orchestrator/task-decomposer.ts +428 -0
- package/src/plugins/plugin-system.ts +162 -1
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
const DEFAULT_ROLES = [
|
|
2
|
+
{
|
|
3
|
+
name: "admin",
|
|
4
|
+
description: "Full system access",
|
|
5
|
+
permissions: [
|
|
6
|
+
"workflow:read", "workflow:write", "workflow:execute", "workflow:delete",
|
|
7
|
+
"config:read", "config:write",
|
|
8
|
+
"metrics:read", "audit:read",
|
|
9
|
+
"memory:read", "memory:write",
|
|
10
|
+
"plugins:manage", "providers:configure"
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: "user",
|
|
15
|
+
description: "Standard user with execution capabilities",
|
|
16
|
+
permissions: [
|
|
17
|
+
"workflow:read", "workflow:write", "workflow:execute",
|
|
18
|
+
"config:read",
|
|
19
|
+
"metrics:read",
|
|
20
|
+
"memory:read", "memory:write"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "viewer",
|
|
25
|
+
description: "Read-only access",
|
|
26
|
+
permissions: [
|
|
27
|
+
"workflow:read",
|
|
28
|
+
"metrics:read"
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
];
|
|
32
|
+
export class RBACEngine {
|
|
33
|
+
roles = new Map();
|
|
34
|
+
users = new Map();
|
|
35
|
+
customPermissions = new Map();
|
|
36
|
+
constructor(roles = DEFAULT_ROLES) {
|
|
37
|
+
for (const role of roles) {
|
|
38
|
+
this.roles.set(role.name, role);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
createAdminUser(id, name, email) {
|
|
42
|
+
return this.createUser(id, name, "admin", email);
|
|
43
|
+
}
|
|
44
|
+
createUser(id, name, role, email) {
|
|
45
|
+
const user = {
|
|
46
|
+
id,
|
|
47
|
+
name,
|
|
48
|
+
email,
|
|
49
|
+
role,
|
|
50
|
+
createdAt: Date.now()
|
|
51
|
+
};
|
|
52
|
+
this.users.set(id, user);
|
|
53
|
+
return user;
|
|
54
|
+
}
|
|
55
|
+
getUser(id) {
|
|
56
|
+
return this.users.get(id);
|
|
57
|
+
}
|
|
58
|
+
updateUserRole(userId, role) {
|
|
59
|
+
const user = this.users.get(userId);
|
|
60
|
+
if (!user)
|
|
61
|
+
return false;
|
|
62
|
+
user.role = role;
|
|
63
|
+
this.customPermissions.delete(userId);
|
|
64
|
+
return true;
|
|
65
|
+
}
|
|
66
|
+
grantPermission(userId, permission) {
|
|
67
|
+
const user = this.users.get(userId);
|
|
68
|
+
if (!user)
|
|
69
|
+
return false;
|
|
70
|
+
const existing = this.customPermissions.get(userId) || [];
|
|
71
|
+
if (!existing.includes(permission)) {
|
|
72
|
+
this.customPermissions.set(userId, [...existing, permission]);
|
|
73
|
+
}
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
revokePermission(userId, permission) {
|
|
77
|
+
const user = this.users.get(userId);
|
|
78
|
+
if (!user)
|
|
79
|
+
return false;
|
|
80
|
+
const existing = this.customPermissions.get(userId) || [];
|
|
81
|
+
const filtered = existing.filter(p => p !== permission);
|
|
82
|
+
this.customPermissions.set(userId, filtered);
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
hasPermission(userId, permission) {
|
|
86
|
+
const user = this.users.get(userId);
|
|
87
|
+
if (!user)
|
|
88
|
+
return false;
|
|
89
|
+
const customPerms = this.customPermissions.get(userId);
|
|
90
|
+
if (customPerms?.includes(permission))
|
|
91
|
+
return true;
|
|
92
|
+
const roleDef = this.roles.get(user.role);
|
|
93
|
+
if (!roleDef)
|
|
94
|
+
return false;
|
|
95
|
+
if (roleDef.permissions.includes(permission))
|
|
96
|
+
return true;
|
|
97
|
+
if (roleDef.inherits) {
|
|
98
|
+
const parentRole = this.roles.get(roleDef.inherits);
|
|
99
|
+
return parentRole?.permissions.includes(permission) ?? false;
|
|
100
|
+
}
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
checkPermission(userId, permission) {
|
|
104
|
+
if (this.hasPermission(userId, permission)) {
|
|
105
|
+
return { allowed: true };
|
|
106
|
+
}
|
|
107
|
+
const user = this.users.get(userId);
|
|
108
|
+
if (!user) {
|
|
109
|
+
return { allowed: false, reason: "User not found" };
|
|
110
|
+
}
|
|
111
|
+
return { allowed: false, reason: `Role '${user.role}' does not have permission '${permission}'` };
|
|
112
|
+
}
|
|
113
|
+
getUserPermissions(userId) {
|
|
114
|
+
const user = this.users.get(userId);
|
|
115
|
+
if (!user)
|
|
116
|
+
return [];
|
|
117
|
+
const roleDef = this.roles.get(user.role);
|
|
118
|
+
const rolePerms = roleDef?.permissions || [];
|
|
119
|
+
const customPerms = this.customPermissions.get(userId) || [];
|
|
120
|
+
return [...new Set([...rolePerms, ...customPerms])];
|
|
121
|
+
}
|
|
122
|
+
getRolePermissions(role) {
|
|
123
|
+
const roleDef = this.roles.get(role);
|
|
124
|
+
return roleDef?.permissions || [];
|
|
125
|
+
}
|
|
126
|
+
addRole(definition) {
|
|
127
|
+
this.roles.set(definition.name, definition);
|
|
128
|
+
}
|
|
129
|
+
removeRole(role) {
|
|
130
|
+
if (["admin", "user", "viewer"].includes(role)) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
return this.roles.delete(role);
|
|
134
|
+
}
|
|
135
|
+
listRoles() {
|
|
136
|
+
return Array.from(this.roles.values());
|
|
137
|
+
}
|
|
138
|
+
listUsers() {
|
|
139
|
+
return Array.from(this.users.values());
|
|
140
|
+
}
|
|
141
|
+
deleteUser(userId) {
|
|
142
|
+
this.customPermissions.delete(userId);
|
|
143
|
+
return this.users.delete(userId);
|
|
144
|
+
}
|
|
145
|
+
validateAccess(userId, resource, action) {
|
|
146
|
+
const permission = `${resource}:${action}`;
|
|
147
|
+
return this.checkPermission(userId, permission);
|
|
148
|
+
}
|
|
149
|
+
canExecuteWorkflow(userId) {
|
|
150
|
+
return this.hasPermission(userId, "workflow:execute");
|
|
151
|
+
}
|
|
152
|
+
canModifyConfig(userId) {
|
|
153
|
+
return this.hasPermission(userId, "config:write");
|
|
154
|
+
}
|
|
155
|
+
canViewMetrics(userId) {
|
|
156
|
+
return this.hasPermission(userId, "metrics:read");
|
|
157
|
+
}
|
|
158
|
+
canManagePlugins(userId) {
|
|
159
|
+
return this.hasPermission(userId, "plugins:manage");
|
|
160
|
+
}
|
|
161
|
+
canConfigureProviders(userId) {
|
|
162
|
+
return this.hasPermission(userId, "providers:configure");
|
|
163
|
+
}
|
|
164
|
+
exportState() {
|
|
165
|
+
return {
|
|
166
|
+
users: Array.from(this.users.values()),
|
|
167
|
+
customPermissions: Object.fromEntries(this.customPermissions)
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
importState(state) {
|
|
171
|
+
this.users.clear();
|
|
172
|
+
this.customPermissions.clear();
|
|
173
|
+
for (const user of state.users) {
|
|
174
|
+
this.users.set(user.id, user);
|
|
175
|
+
}
|
|
176
|
+
if (state.customPermissions) {
|
|
177
|
+
for (const [userId, perms] of Object.entries(state.customPermissions)) {
|
|
178
|
+
this.customPermissions.set(userId, perms);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=rbac-engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rbac-engine.js","sourceRoot":"","sources":["../../src/governance/rbac-engine.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * from "./types/contracts.js";
|
|
2
2
|
export * from "./orchestrator/core-orchestrator.js";
|
|
3
3
|
export * from "./orchestrator/routing.js";
|
|
4
|
-
export
|
|
4
|
+
export { Decomposition, Subtask, TaskChunk, decomposeTask } from "./orchestrator/decomposition-engine.js";
|
|
5
|
+
export * from "./orchestrator/task-decomposer.js";
|
|
5
6
|
export * from "./orchestrator/default-workflow.js";
|
|
6
7
|
export * from "./orchestrator/verify-fix.js";
|
|
7
8
|
export * from "./orchestrator/kernel-bridge.js";
|
|
@@ -22,4 +23,7 @@ export * from "./memory/memory-manager.js";
|
|
|
22
23
|
export * from "./plugins/long-term-memory-plugin.js";
|
|
23
24
|
export * from "./plugins/governance-plugin.js";
|
|
24
25
|
export * from "./governance/policies/pii-policy.js";
|
|
26
|
+
export * from "./governance/rbac-engine.js";
|
|
27
|
+
export * from "./governance/audit-trail.js";
|
|
28
|
+
export * from "./governance/policy-engine.js";
|
|
25
29
|
//# 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":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC1G,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * from "./types/contracts.js";
|
|
2
2
|
export * from "./orchestrator/core-orchestrator.js";
|
|
3
3
|
export * from "./orchestrator/routing.js";
|
|
4
|
-
export
|
|
4
|
+
export { Decomposition, decomposeTask } from "./orchestrator/decomposition-engine.js";
|
|
5
|
+
export * from "./orchestrator/task-decomposer.js";
|
|
5
6
|
export * from "./orchestrator/default-workflow.js";
|
|
6
7
|
export * from "./orchestrator/verify-fix.js";
|
|
7
8
|
export * from "./orchestrator/kernel-bridge.js";
|
|
@@ -22,4 +23,7 @@ export * from "./memory/memory-manager.js";
|
|
|
22
23
|
export * from "./plugins/long-term-memory-plugin.js";
|
|
23
24
|
export * from "./plugins/governance-plugin.js";
|
|
24
25
|
export * from "./governance/policies/pii-policy.js";
|
|
26
|
+
export * from "./governance/rbac-engine.js";
|
|
27
|
+
export * from "./governance/audit-trail.js";
|
|
28
|
+
export * from "./governance/policy-engine.js";
|
|
25
29
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,2BAA2B,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAsB,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC1G,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,uCAAuC,CAAC;AACtD,cAAc,mCAAmC,CAAC;AAClD,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,+BAA+B,CAAC"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmbeddingsService: Convert text/outputs to vector embeddings.
|
|
3
|
+
* Supports OpenAI, Cohere, or local models.
|
|
4
|
+
* Used to feed the LocalVectorStore with semantic vectors.
|
|
5
|
+
*/
|
|
6
|
+
export interface EmbeddingProvider {
|
|
7
|
+
name: string;
|
|
8
|
+
embed(text: string): Promise<number[]>;
|
|
9
|
+
batchEmbed(texts: string[]): Promise<number[][]>;
|
|
10
|
+
getDimensions(): number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* OpenAI embeddings provider
|
|
14
|
+
*/
|
|
15
|
+
export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
|
|
16
|
+
private apiKey;
|
|
17
|
+
private model;
|
|
18
|
+
name: string;
|
|
19
|
+
private dimension;
|
|
20
|
+
constructor(apiKey: string, model?: string);
|
|
21
|
+
embed(text: string): Promise<number[]>;
|
|
22
|
+
batchEmbed(texts: string[]): Promise<number[][]>;
|
|
23
|
+
getDimensions(): number;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Cohere embeddings provider
|
|
27
|
+
*/
|
|
28
|
+
export declare class CohereEmbeddingProvider implements EmbeddingProvider {
|
|
29
|
+
private apiKey;
|
|
30
|
+
private model;
|
|
31
|
+
name: string;
|
|
32
|
+
private dimension;
|
|
33
|
+
constructor(apiKey: string, model?: string);
|
|
34
|
+
embed(text: string): Promise<number[]>;
|
|
35
|
+
batchEmbed(texts: string[]): Promise<number[][]>;
|
|
36
|
+
getDimensions(): number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Mock local embeddings provider (for testing/offline)
|
|
40
|
+
* Generates pseudo-random vectors based on text hash
|
|
41
|
+
*/
|
|
42
|
+
export declare class LocalEmbeddingProvider implements EmbeddingProvider {
|
|
43
|
+
name: string;
|
|
44
|
+
private dimension;
|
|
45
|
+
constructor();
|
|
46
|
+
embed(text: string): Promise<number[]>;
|
|
47
|
+
batchEmbed(texts: string[]): Promise<number[][]>;
|
|
48
|
+
getDimensions(): number;
|
|
49
|
+
private textToVector;
|
|
50
|
+
private simpleHash;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Embeddings Service: Orchestrates embedding generation and caching
|
|
54
|
+
*/
|
|
55
|
+
export declare class EmbeddingsService {
|
|
56
|
+
private provider;
|
|
57
|
+
private cache;
|
|
58
|
+
private cacheHits;
|
|
59
|
+
private cacheMisses;
|
|
60
|
+
constructor(provider?: EmbeddingProvider | string);
|
|
61
|
+
/**
|
|
62
|
+
* Get a default provider by name
|
|
63
|
+
*/
|
|
64
|
+
private getDefaultProvider;
|
|
65
|
+
/**
|
|
66
|
+
* Embed a single text, with caching
|
|
67
|
+
*/
|
|
68
|
+
embed(text: string, useCache?: boolean): Promise<number[]>;
|
|
69
|
+
/**
|
|
70
|
+
* Embed multiple texts
|
|
71
|
+
*/
|
|
72
|
+
batchEmbed(texts: string[], useCache?: boolean): Promise<number[][]>;
|
|
73
|
+
/**
|
|
74
|
+
* Clear cache and reset stats
|
|
75
|
+
*/
|
|
76
|
+
clearCache(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Get cache statistics
|
|
79
|
+
*/
|
|
80
|
+
getCacheStats(): {
|
|
81
|
+
cacheHits: number;
|
|
82
|
+
cacheMisses: number;
|
|
83
|
+
hitRate: string;
|
|
84
|
+
cacheSize: number;
|
|
85
|
+
provider: string;
|
|
86
|
+
dimensions: number;
|
|
87
|
+
};
|
|
88
|
+
/**
|
|
89
|
+
* Set embeddings provider
|
|
90
|
+
*/
|
|
91
|
+
setProvider(provider: EmbeddingProvider): void;
|
|
92
|
+
/**
|
|
93
|
+
* Get current provider
|
|
94
|
+
*/
|
|
95
|
+
getProvider(): EmbeddingProvider;
|
|
96
|
+
/**
|
|
97
|
+
* Get dimensions of embedding vectors
|
|
98
|
+
*/
|
|
99
|
+
getDimensions(): number;
|
|
100
|
+
/**
|
|
101
|
+
* Cache key generation (simple MD5 alternative)
|
|
102
|
+
*/
|
|
103
|
+
private getCacheKey;
|
|
104
|
+
/**
|
|
105
|
+
* Pre-warm cache with common prompts/outputs
|
|
106
|
+
*/
|
|
107
|
+
warmCache(documents: string[]): Promise<void>;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Create embeddings service from environment or config
|
|
111
|
+
*/
|
|
112
|
+
export declare function createEmbeddingsService(config?: {
|
|
113
|
+
provider?: "openai" | "cohere" | "local";
|
|
114
|
+
apiKey?: string;
|
|
115
|
+
}): EmbeddingsService;
|
|
116
|
+
//# sourceMappingURL=embeddings-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings-service.d.ts","sourceRoot":"","sources":["../../src/memory/embeddings-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EmbeddingsService: Convert text/outputs to vector embeddings.
|
|
3
|
+
* Supports OpenAI, Cohere, or local models.
|
|
4
|
+
* Used to feed the LocalVectorStore with semantic vectors.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* OpenAI embeddings provider
|
|
8
|
+
*/
|
|
9
|
+
export class OpenAIEmbeddingProvider {
|
|
10
|
+
apiKey;
|
|
11
|
+
model;
|
|
12
|
+
name = "openai";
|
|
13
|
+
dimension = 1536;
|
|
14
|
+
constructor(apiKey, model = "text-embedding-3-small") {
|
|
15
|
+
this.apiKey = apiKey;
|
|
16
|
+
this.model = model;
|
|
17
|
+
}
|
|
18
|
+
async embed(text) {
|
|
19
|
+
const results = await this.batchEmbed([text]);
|
|
20
|
+
return results[0];
|
|
21
|
+
}
|
|
22
|
+
async batchEmbed(texts) {
|
|
23
|
+
try {
|
|
24
|
+
const response = await fetch("https://api.openai.com/v1/embeddings", {
|
|
25
|
+
method: "POST",
|
|
26
|
+
headers: {
|
|
27
|
+
"Content-Type": "application/json",
|
|
28
|
+
"Authorization": `Bearer ${this.apiKey}`
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify({
|
|
31
|
+
model: this.model,
|
|
32
|
+
input: texts
|
|
33
|
+
})
|
|
34
|
+
});
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
throw new Error(`OpenAI API error: ${response.statusText}`);
|
|
37
|
+
}
|
|
38
|
+
const data = await response.json();
|
|
39
|
+
return data.data.sort((a, b) => a.index - b.index).map((item) => item.embedding);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
console.error("OpenAI embedding error:", err);
|
|
43
|
+
throw err;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
getDimensions() {
|
|
47
|
+
return this.dimension;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Cohere embeddings provider
|
|
52
|
+
*/
|
|
53
|
+
export class CohereEmbeddingProvider {
|
|
54
|
+
apiKey;
|
|
55
|
+
model;
|
|
56
|
+
name = "cohere";
|
|
57
|
+
dimension = 4096;
|
|
58
|
+
constructor(apiKey, model = "embed-english-v3.0") {
|
|
59
|
+
this.apiKey = apiKey;
|
|
60
|
+
this.model = model;
|
|
61
|
+
}
|
|
62
|
+
async embed(text) {
|
|
63
|
+
const results = await this.batchEmbed([text]);
|
|
64
|
+
return results[0];
|
|
65
|
+
}
|
|
66
|
+
async batchEmbed(texts) {
|
|
67
|
+
try {
|
|
68
|
+
const response = await fetch("https://api.cohere.ai/v1/embed", {
|
|
69
|
+
method: "POST",
|
|
70
|
+
headers: {
|
|
71
|
+
"Content-Type": "application/json",
|
|
72
|
+
"Authorization": `Bearer ${this.apiKey}`
|
|
73
|
+
},
|
|
74
|
+
body: JSON.stringify({
|
|
75
|
+
texts,
|
|
76
|
+
model: this.model,
|
|
77
|
+
input_type: "search_document"
|
|
78
|
+
})
|
|
79
|
+
});
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
throw new Error(`Cohere API error: ${response.statusText}`);
|
|
82
|
+
}
|
|
83
|
+
const data = await response.json();
|
|
84
|
+
return data.embeddings;
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
console.error("Cohere embedding error:", err);
|
|
88
|
+
throw err;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
getDimensions() {
|
|
92
|
+
return this.dimension;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Mock local embeddings provider (for testing/offline)
|
|
97
|
+
* Generates pseudo-random vectors based on text hash
|
|
98
|
+
*/
|
|
99
|
+
export class LocalEmbeddingProvider {
|
|
100
|
+
name = "local";
|
|
101
|
+
dimension = 384;
|
|
102
|
+
constructor() { }
|
|
103
|
+
async embed(text) {
|
|
104
|
+
return this.textToVector(text);
|
|
105
|
+
}
|
|
106
|
+
async batchEmbed(texts) {
|
|
107
|
+
return texts.map(text => this.textToVector(text));
|
|
108
|
+
}
|
|
109
|
+
getDimensions() {
|
|
110
|
+
return this.dimension;
|
|
111
|
+
}
|
|
112
|
+
textToVector(text) {
|
|
113
|
+
// Simple hash-based deterministic vector generation
|
|
114
|
+
const hash = this.simpleHash(text);
|
|
115
|
+
const vector = [];
|
|
116
|
+
let seed = hash;
|
|
117
|
+
for (let i = 0; i < this.dimension; i++) {
|
|
118
|
+
seed = (seed * 9301 + 49297) % 233280;
|
|
119
|
+
vector.push((seed / 233280) * 2 - 1); // Normalize to [-1, 1]
|
|
120
|
+
}
|
|
121
|
+
// Normalize to unit vector
|
|
122
|
+
const magnitude = Math.sqrt(vector.reduce((sum, v) => sum + v * v, 0));
|
|
123
|
+
return vector.map(v => magnitude > 0 ? v / magnitude : 0);
|
|
124
|
+
}
|
|
125
|
+
simpleHash(str) {
|
|
126
|
+
let hash = 0;
|
|
127
|
+
for (let i = 0; i < str.length; i++) {
|
|
128
|
+
const char = str.charCodeAt(i);
|
|
129
|
+
hash = ((hash << 5) - hash) + char;
|
|
130
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
131
|
+
}
|
|
132
|
+
return Math.abs(hash);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Embeddings Service: Orchestrates embedding generation and caching
|
|
137
|
+
*/
|
|
138
|
+
export class EmbeddingsService {
|
|
139
|
+
provider;
|
|
140
|
+
cache = new Map();
|
|
141
|
+
cacheHits = 0;
|
|
142
|
+
cacheMisses = 0;
|
|
143
|
+
constructor(provider = "local") {
|
|
144
|
+
if (typeof provider === "string") {
|
|
145
|
+
this.provider = this.getDefaultProvider(provider);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
this.provider = provider;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Get a default provider by name
|
|
153
|
+
*/
|
|
154
|
+
getDefaultProvider(name) {
|
|
155
|
+
const apiKey = process.env[`${name.toUpperCase()}_API_KEY`] || "";
|
|
156
|
+
switch (name.toLowerCase()) {
|
|
157
|
+
case "openai":
|
|
158
|
+
return new OpenAIEmbeddingProvider(apiKey);
|
|
159
|
+
case "cohere":
|
|
160
|
+
return new CohereEmbeddingProvider(apiKey);
|
|
161
|
+
case "local":
|
|
162
|
+
default:
|
|
163
|
+
return new LocalEmbeddingProvider();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Embed a single text, with caching
|
|
168
|
+
*/
|
|
169
|
+
async embed(text, useCache = true) {
|
|
170
|
+
const cacheKey = this.getCacheKey(text);
|
|
171
|
+
if (useCache && this.cache.has(cacheKey)) {
|
|
172
|
+
this.cacheHits++;
|
|
173
|
+
return this.cache.get(cacheKey);
|
|
174
|
+
}
|
|
175
|
+
this.cacheMisses++;
|
|
176
|
+
const vector = await this.provider.embed(text);
|
|
177
|
+
this.cache.set(cacheKey, vector);
|
|
178
|
+
return vector;
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Embed multiple texts
|
|
182
|
+
*/
|
|
183
|
+
async batchEmbed(texts, useCache = true) {
|
|
184
|
+
const results = [];
|
|
185
|
+
const missingIndices = [];
|
|
186
|
+
const missingTexts = [];
|
|
187
|
+
// Check cache first
|
|
188
|
+
for (let i = 0; i < texts.length; i++) {
|
|
189
|
+
const cacheKey = this.getCacheKey(texts[i]);
|
|
190
|
+
if (useCache && this.cache.has(cacheKey)) {
|
|
191
|
+
results[i] = this.cache.get(cacheKey);
|
|
192
|
+
this.cacheHits++;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
missingIndices.push(i);
|
|
196
|
+
missingTexts.push(texts[i]);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Embed missing texts
|
|
200
|
+
if (missingTexts.length > 0) {
|
|
201
|
+
this.cacheMisses += missingTexts.length;
|
|
202
|
+
const vectors = await this.provider.batchEmbed(missingTexts);
|
|
203
|
+
for (let i = 0; i < missingTexts.length; i++) {
|
|
204
|
+
const cacheKey = this.getCacheKey(missingTexts[i]);
|
|
205
|
+
results[missingIndices[i]] = vectors[i];
|
|
206
|
+
this.cache.set(cacheKey, vectors[i]);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return results;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Clear cache and reset stats
|
|
213
|
+
*/
|
|
214
|
+
clearCache() {
|
|
215
|
+
this.cache.clear();
|
|
216
|
+
this.cacheHits = 0;
|
|
217
|
+
this.cacheMisses = 0;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Get cache statistics
|
|
221
|
+
*/
|
|
222
|
+
getCacheStats() {
|
|
223
|
+
const total = this.cacheHits + this.cacheMisses;
|
|
224
|
+
return {
|
|
225
|
+
cacheHits: this.cacheHits,
|
|
226
|
+
cacheMisses: this.cacheMisses,
|
|
227
|
+
hitRate: total > 0 ? (this.cacheHits / total * 100).toFixed(2) + "%" : "N/A",
|
|
228
|
+
cacheSize: this.cache.size,
|
|
229
|
+
provider: this.provider.name,
|
|
230
|
+
dimensions: this.provider.getDimensions()
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Set embeddings provider
|
|
235
|
+
*/
|
|
236
|
+
setProvider(provider) {
|
|
237
|
+
this.provider = provider;
|
|
238
|
+
this.clearCache();
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get current provider
|
|
242
|
+
*/
|
|
243
|
+
getProvider() {
|
|
244
|
+
return this.provider;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Get dimensions of embedding vectors
|
|
248
|
+
*/
|
|
249
|
+
getDimensions() {
|
|
250
|
+
return this.provider.getDimensions();
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Cache key generation (simple MD5 alternative)
|
|
254
|
+
*/
|
|
255
|
+
getCacheKey(text) {
|
|
256
|
+
// Simple deterministic hash for caching
|
|
257
|
+
return Buffer.from(text).toString("base64");
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Pre-warm cache with common prompts/outputs
|
|
261
|
+
*/
|
|
262
|
+
async warmCache(documents) {
|
|
263
|
+
await this.batchEmbed(documents, false);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Create embeddings service from environment or config
|
|
268
|
+
*/
|
|
269
|
+
export function createEmbeddingsService(config) {
|
|
270
|
+
const providerName = config?.provider || process.env.EMBEDDINGS_PROVIDER || "local";
|
|
271
|
+
if (providerName === "openai") {
|
|
272
|
+
const apiKey = config?.apiKey || process.env.OPENAI_API_KEY;
|
|
273
|
+
if (!apiKey)
|
|
274
|
+
throw new Error("OPENAI_API_KEY not set");
|
|
275
|
+
return new EmbeddingsService(new OpenAIEmbeddingProvider(apiKey));
|
|
276
|
+
}
|
|
277
|
+
else if (providerName === "cohere") {
|
|
278
|
+
const apiKey = config?.apiKey || process.env.COHERE_API_KEY;
|
|
279
|
+
if (!apiKey)
|
|
280
|
+
throw new Error("COHERE_API_KEY not set");
|
|
281
|
+
return new EmbeddingsService(new CohereEmbeddingProvider(apiKey));
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
return new EmbeddingsService(new LocalEmbeddingProvider());
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
//# sourceMappingURL=embeddings-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings-service.js","sourceRoot":"","sources":["../../src/memory/embeddings-service.ts"],"names":[],"mappings":"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"}
|