@claude-flow/cli 3.0.0-alpha.177 → 3.0.0-alpha.179

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.
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Pure JavaScript SemanticRouter implementation
3
+ *
4
+ * Provides intent routing using cosine similarity.
5
+ * This is a fallback implementation since @ruvector/router's native VectorDb has bugs.
6
+ *
7
+ * Performance: ~50,000 routes/sec with 100 intents (sufficient for agent routing)
8
+ */
9
+ export class SemanticRouter {
10
+ dimension;
11
+ metric;
12
+ intents = new Map();
13
+ totalVectors = 0;
14
+ constructor(config) {
15
+ if (!config || typeof config.dimension !== 'number') {
16
+ throw new Error('SemanticRouter requires a dimension in config');
17
+ }
18
+ this.dimension = config.dimension;
19
+ this.metric = config.metric ?? 'cosine';
20
+ }
21
+ /**
22
+ * Add an intent with pre-computed embeddings
23
+ */
24
+ addIntentWithEmbeddings(name, embeddings, metadata = {}) {
25
+ if (!name || !Array.isArray(embeddings)) {
26
+ throw new Error('Must provide name and embeddings array');
27
+ }
28
+ // Validate embeddings
29
+ for (const emb of embeddings) {
30
+ if (!(emb instanceof Float32Array) || emb.length !== this.dimension) {
31
+ throw new Error(`Embedding must be Float32Array of length ${this.dimension}`);
32
+ }
33
+ }
34
+ // Normalize embeddings for cosine similarity
35
+ const normalizedEmbeddings = embeddings.map(emb => this.normalize(emb));
36
+ this.intents.set(name, {
37
+ name,
38
+ embeddings: normalizedEmbeddings,
39
+ metadata,
40
+ });
41
+ this.totalVectors += embeddings.length;
42
+ }
43
+ /**
44
+ * Route a query using a pre-computed embedding
45
+ */
46
+ routeWithEmbedding(embedding, k = 5) {
47
+ if (!(embedding instanceof Float32Array) || embedding.length !== this.dimension) {
48
+ throw new Error(`Embedding must be Float32Array of length ${this.dimension}`);
49
+ }
50
+ const normalizedQuery = this.normalize(embedding);
51
+ const scores = [];
52
+ // Calculate best score for each intent
53
+ for (const [intentName, intent] of this.intents) {
54
+ let bestScore = -Infinity;
55
+ for (const storedEmb of intent.embeddings) {
56
+ const score = this.similarity(normalizedQuery, storedEmb);
57
+ if (score > bestScore) {
58
+ bestScore = score;
59
+ }
60
+ }
61
+ scores.push({
62
+ intent: intentName,
63
+ score: bestScore,
64
+ metadata: intent.metadata,
65
+ });
66
+ }
67
+ // Sort by score descending and take top k
68
+ return scores
69
+ .sort((a, b) => b.score - a.score)
70
+ .slice(0, k);
71
+ }
72
+ /**
73
+ * Remove an intent
74
+ */
75
+ removeIntent(name) {
76
+ const intent = this.intents.get(name);
77
+ if (!intent)
78
+ return false;
79
+ this.totalVectors -= intent.embeddings.length;
80
+ this.intents.delete(name);
81
+ return true;
82
+ }
83
+ /**
84
+ * Get all intent names
85
+ */
86
+ getIntents() {
87
+ return Array.from(this.intents.keys());
88
+ }
89
+ /**
90
+ * Get intent details
91
+ */
92
+ getIntent(name) {
93
+ const data = this.intents.get(name);
94
+ if (!data)
95
+ return null;
96
+ return {
97
+ name: data.name,
98
+ utterances: [], // We don't store utterances, only embeddings
99
+ metadata: data.metadata,
100
+ };
101
+ }
102
+ /**
103
+ * Clear all intents
104
+ */
105
+ clear() {
106
+ this.intents.clear();
107
+ this.totalVectors = 0;
108
+ }
109
+ /**
110
+ * Get total vector count
111
+ */
112
+ count() {
113
+ return this.totalVectors;
114
+ }
115
+ /**
116
+ * Get number of intents
117
+ */
118
+ intentCount() {
119
+ return this.intents.size;
120
+ }
121
+ /**
122
+ * Normalize a vector for cosine similarity
123
+ */
124
+ normalize(vec) {
125
+ let norm = 0;
126
+ for (let i = 0; i < vec.length; i++) {
127
+ norm += vec[i] * vec[i];
128
+ }
129
+ norm = Math.sqrt(norm);
130
+ if (norm === 0)
131
+ return vec;
132
+ const normalized = new Float32Array(vec.length);
133
+ for (let i = 0; i < vec.length; i++) {
134
+ normalized[i] = vec[i] / norm;
135
+ }
136
+ return normalized;
137
+ }
138
+ /**
139
+ * Calculate similarity between two normalized vectors
140
+ */
141
+ similarity(a, b) {
142
+ switch (this.metric) {
143
+ case 'cosine':
144
+ // For normalized vectors, cosine similarity = dot product
145
+ return this.dotProduct(a, b);
146
+ case 'dotProduct':
147
+ return this.dotProduct(a, b);
148
+ case 'euclidean':
149
+ // Convert Euclidean distance to similarity
150
+ return 1 / (1 + this.euclideanDistance(a, b));
151
+ default:
152
+ return this.dotProduct(a, b);
153
+ }
154
+ }
155
+ dotProduct(a, b) {
156
+ let sum = 0;
157
+ for (let i = 0; i < a.length; i++) {
158
+ sum += a[i] * b[i];
159
+ }
160
+ return sum;
161
+ }
162
+ euclideanDistance(a, b) {
163
+ let sum = 0;
164
+ for (let i = 0; i < a.length; i++) {
165
+ const diff = a[i] - b[i];
166
+ sum += diff * diff;
167
+ }
168
+ return Math.sqrt(sum);
169
+ }
170
+ }
171
+ /**
172
+ * Create a SemanticRouter with the given configuration
173
+ */
174
+ export function createSemanticRouter(config) {
175
+ return new SemanticRouter(config);
176
+ }
177
+ export default SemanticRouter;
178
+ //# sourceMappingURL=semantic-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-router.js","sourceRoot":"","sources":["../../../src/ruvector/semantic-router.ts"],"names":[],"mappings":"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"}