@ruvector/ruvllm 2.4.0 → 2.5.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/README.md +26 -302
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/intelligence.d.ts +136 -0
- package/dist/cjs/intelligence.d.ts.map +1 -0
- package/dist/cjs/intelligence.js +162 -0
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -3
- package/dist/esm/intelligence.d.ts +136 -0
- package/dist/esm/intelligence.d.ts.map +1 -0
- package/dist/esm/intelligence.js +157 -0
- package/package.json +3 -7
- package/scripts/training/validation-results.json +1 -1
- package/dist/cjs/rlm/controller.d.ts +0 -245
- package/dist/cjs/rlm/controller.d.ts.map +0 -1
- package/dist/cjs/rlm/controller.js +0 -554
- package/dist/cjs/rlm/index.d.ts +0 -62
- package/dist/cjs/rlm/index.d.ts.map +0 -1
- package/dist/cjs/rlm/index.js +0 -97
- package/dist/cjs/rlm/training.d.ts +0 -333
- package/dist/cjs/rlm/training.d.ts.map +0 -1
- package/dist/cjs/rlm/training.js +0 -680
- package/dist/cjs/rlm/types.d.ts +0 -189
- package/dist/cjs/rlm/types.d.ts.map +0 -1
- package/dist/cjs/rlm/types.js +0 -10
- package/dist/esm/rlm/controller.d.ts +0 -245
- package/dist/esm/rlm/controller.d.ts.map +0 -1
- package/dist/esm/rlm/controller.js +0 -550
- package/dist/esm/rlm/index.d.ts +0 -62
- package/dist/esm/rlm/index.d.ts.map +0 -1
- package/dist/esm/rlm/index.js +0 -71
- package/dist/esm/rlm/training.d.ts +0 -333
- package/dist/esm/rlm/training.d.ts.map +0 -1
- package/dist/esm/rlm/training.js +0 -672
- package/dist/esm/rlm/types.d.ts +0 -189
- package/dist/esm/rlm/types.d.ts.map +0 -1
- package/dist/esm/rlm/types.js +0 -9
- package/scripts/training/rlm-dataset.js +0 -671
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# @ruvector/ruvllm v2.
|
|
1
|
+
# @ruvector/ruvllm v2.3
|
|
2
2
|
|
|
3
|
-
Self-learning LLM orchestration with SONA adaptive learning, HNSW memory,
|
|
3
|
+
Self-learning LLM orchestration with SONA adaptive learning, HNSW memory, and SIMD inference for Node.js.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -34,178 +34,18 @@ for await (const token of llm.stream('Write a haiku about Rust')) {
|
|
|
34
34
|
}
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
## What's New in v2.
|
|
37
|
+
## What's New in v2.3
|
|
38
38
|
|
|
39
39
|
| Feature | Description |
|
|
40
40
|
|---------|-------------|
|
|
41
|
-
| **
|
|
42
|
-
| **
|
|
43
|
-
| **
|
|
44
|
-
| **
|
|
45
|
-
| **
|
|
46
|
-
| **
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
RLM provides recursive retrieval-augmented generation that breaks down complex queries into sub-queries and synthesizes answers from retrieved context.
|
|
51
|
-
|
|
52
|
-
### Basic Usage
|
|
53
|
-
|
|
54
|
-
```typescript
|
|
55
|
-
import { RlmController } from '@ruvector/ruvllm';
|
|
56
|
-
|
|
57
|
-
const rlm = new RlmController({
|
|
58
|
-
maxDepth: 5,
|
|
59
|
-
retrievalTopK: 10,
|
|
60
|
-
enableCache: true,
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
// Add knowledge to memory
|
|
64
|
-
await rlm.addMemory('TypeScript adds static typing to JavaScript.');
|
|
65
|
-
await rlm.addMemory('React is a library for building user interfaces.');
|
|
66
|
-
|
|
67
|
-
// Query with recursive retrieval
|
|
68
|
-
const answer = await rlm.query('What are causes and solutions for type errors in React?');
|
|
69
|
-
console.log(answer.text);
|
|
70
|
-
console.log('Sources:', answer.sources);
|
|
71
|
-
console.log('Quality Score:', answer.qualityScore);
|
|
72
|
-
console.log('Confidence:', answer.confidence);
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### Streaming
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
import { RlmController } from '@ruvector/ruvllm';
|
|
79
|
-
|
|
80
|
-
const rlm = new RlmController();
|
|
81
|
-
|
|
82
|
-
for await (const event of rlm.queryStream('Explain machine learning')) {
|
|
83
|
-
if (event.type === 'token') {
|
|
84
|
-
process.stdout.write(event.text);
|
|
85
|
-
} else {
|
|
86
|
-
console.log('\n\nQuality:', event.answer.qualityScore);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
### With Reflection
|
|
92
|
-
|
|
93
|
-
```typescript
|
|
94
|
-
import { RlmController } from '@ruvector/ruvllm';
|
|
95
|
-
|
|
96
|
-
const rlm = new RlmController({
|
|
97
|
-
enableReflection: true,
|
|
98
|
-
maxReflectionIterations: 2,
|
|
99
|
-
minQualityScore: 0.8,
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
// Answers will be iteratively refined until quality >= 0.8
|
|
103
|
-
const answer = await rlm.query('Complex multi-part technical question...');
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### RLM Configuration
|
|
107
|
-
|
|
108
|
-
```typescript
|
|
109
|
-
interface RlmConfig {
|
|
110
|
-
maxDepth?: number; // Max recursion depth (default: 3)
|
|
111
|
-
maxSubQueries?: number; // Max sub-queries per level (default: 5)
|
|
112
|
-
tokenBudget?: number; // Token budget (default: 4096)
|
|
113
|
-
enableCache?: boolean; // Enable caching (default: true)
|
|
114
|
-
cacheTtl?: number; // Cache TTL in ms (default: 300000)
|
|
115
|
-
retrievalTopK?: number; // Memory spans to retrieve (default: 10)
|
|
116
|
-
minQualityScore?: number; // Min quality threshold (default: 0.7)
|
|
117
|
-
enableReflection?: boolean; // Enable self-reflection (default: false)
|
|
118
|
-
maxReflectionIterations?: number; // Max reflection loops (default: 2)
|
|
119
|
-
}
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Exports
|
|
123
|
-
|
|
124
|
-
```typescript
|
|
125
|
-
import {
|
|
126
|
-
// Core
|
|
127
|
-
RuvLLM,
|
|
128
|
-
RuvLLMConfig,
|
|
129
|
-
|
|
130
|
-
// RLM - Recursive Language Model
|
|
131
|
-
RlmController,
|
|
132
|
-
RlmConfig,
|
|
133
|
-
RlmAnswer,
|
|
134
|
-
MemorySpan,
|
|
135
|
-
StreamToken,
|
|
136
|
-
|
|
137
|
-
// RLM Training
|
|
138
|
-
RlmTrainer,
|
|
139
|
-
RlmTrainingConfig,
|
|
140
|
-
RlmTrainingExample,
|
|
141
|
-
createRlmTrainer,
|
|
142
|
-
DEFAULT_RLM_CONFIG,
|
|
143
|
-
FAST_RLM_CONFIG,
|
|
144
|
-
THOROUGH_RLM_CONFIG,
|
|
145
|
-
ROUTING_FOCUSED_CONFIG,
|
|
146
|
-
|
|
147
|
-
// SONA Learning
|
|
148
|
-
SonaCoordinator,
|
|
149
|
-
TrajectoryBuilder,
|
|
150
|
-
|
|
151
|
-
// Federated Learning
|
|
152
|
-
EphemeralAgent,
|
|
153
|
-
FederatedCoordinator,
|
|
154
|
-
|
|
155
|
-
// LoRA Adapters
|
|
156
|
-
LoraAdapter,
|
|
157
|
-
LoraManager,
|
|
158
|
-
|
|
159
|
-
// Sessions
|
|
160
|
-
SessionManager,
|
|
161
|
-
|
|
162
|
-
// Contrastive Training
|
|
163
|
-
ContrastiveTrainer,
|
|
164
|
-
|
|
165
|
-
// Benchmarks
|
|
166
|
-
ModelComparisonBenchmark,
|
|
167
|
-
RoutingBenchmark,
|
|
168
|
-
EmbeddingBenchmark,
|
|
169
|
-
} from '@ruvector/ruvllm';
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Performance
|
|
173
|
-
|
|
174
|
-
### Test Results
|
|
175
|
-
|
|
176
|
-
```
|
|
177
|
-
145 tests passing
|
|
178
|
-
- RLM Controller: 24 tests
|
|
179
|
-
- Routing Accuracy: 18 tests
|
|
180
|
-
- Contrastive Training: 15 tests
|
|
181
|
-
- SIMD Operations: 22 tests
|
|
182
|
-
- SONA Learning: 19 tests
|
|
183
|
-
- Memory/HNSW: 21 tests
|
|
184
|
-
- Benchmarks: 26 tests
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
### Routing Accuracy (Claude Code Tasks)
|
|
188
|
-
|
|
189
|
-
| Strategy | RuvLTRA | Qwen Base |
|
|
190
|
-
|----------|---------|-----------|
|
|
191
|
-
| Embedding Only | 45% | 40% |
|
|
192
|
-
| Keyword-First (Hybrid) | **100%** | 95% |
|
|
193
|
-
|
|
194
|
-
### Inference Performance (M4 Pro)
|
|
195
|
-
|
|
196
|
-
| Operation | Performance |
|
|
197
|
-
|-----------|-------------|
|
|
198
|
-
| Inference | 88-135 tok/s |
|
|
199
|
-
| Flash Attention | 320us (seq=2048) |
|
|
200
|
-
| HNSW Search | 17-62us |
|
|
201
|
-
| SONA Adapt | <1ms |
|
|
202
|
-
| RLM Query | 50-200ms |
|
|
203
|
-
|
|
204
|
-
### SIMD Optimizations
|
|
205
|
-
|
|
206
|
-
- AVX2/AVX-512 on x86_64
|
|
207
|
-
- NEON on ARM64
|
|
208
|
-
- 4-8x speedup on vector operations
|
|
41
|
+
| **RuvLTRA Models** | Purpose-built 0.5B & 3B models for Claude Flow |
|
|
42
|
+
| **Task-Specific LoRA** | 5 pre-trained adapters (coder, researcher, security, architect, reviewer) |
|
|
43
|
+
| **HuggingFace Hub** | Download/upload models directly |
|
|
44
|
+
| **Adapter Merging** | TIES, DARE, SLERP strategies |
|
|
45
|
+
| **HNSW Routing** | 150x faster semantic matching |
|
|
46
|
+
| **Evaluation Harness** | SWE-Bench testing with 5 ablation modes |
|
|
47
|
+
| **Auto-Dimension** | HNSW auto-detects model embedding size |
|
|
48
|
+
| **mistral-rs Backend** | Production serving with PagedAttention, X-LoRA, ISQ (5-10x concurrent users) |
|
|
209
49
|
|
|
210
50
|
## CLI Usage
|
|
211
51
|
|
|
@@ -226,101 +66,6 @@ ruvllm bench ./models/model.gguf
|
|
|
226
66
|
ruvllm eval --model ./models/model.gguf --subset lite --max-tasks 50
|
|
227
67
|
```
|
|
228
68
|
|
|
229
|
-
## Training
|
|
230
|
-
|
|
231
|
-
### Routing Dataset Generation
|
|
232
|
-
|
|
233
|
-
Generate training data for agent routing:
|
|
234
|
-
|
|
235
|
-
```bash
|
|
236
|
-
# Generate routing dataset
|
|
237
|
-
node scripts/training/routing-dataset.js
|
|
238
|
-
|
|
239
|
-
# Output: 381 examples, 793 contrastive pairs
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
### Contrastive Fine-tuning
|
|
243
|
-
|
|
244
|
-
Fine-tune models with LoRA adapters:
|
|
245
|
-
|
|
246
|
-
```typescript
|
|
247
|
-
import { ContrastiveTrainer, ContrastivePair } from '@ruvector/ruvllm';
|
|
248
|
-
|
|
249
|
-
const trainer = new ContrastiveTrainer({
|
|
250
|
-
modelPath: './models/base.gguf',
|
|
251
|
-
loraRank: 8,
|
|
252
|
-
loraAlpha: 16,
|
|
253
|
-
learningRate: 1e-4,
|
|
254
|
-
});
|
|
255
|
-
|
|
256
|
-
// Training pairs from routing dataset
|
|
257
|
-
const pairs: ContrastivePair[] = [
|
|
258
|
-
{
|
|
259
|
-
anchor: 'Fix the authentication bug in login.ts',
|
|
260
|
-
positive: 'coder',
|
|
261
|
-
negative: 'researcher',
|
|
262
|
-
},
|
|
263
|
-
// ... more pairs
|
|
264
|
-
];
|
|
265
|
-
|
|
266
|
-
await trainer.train(pairs, { epochs: 10, batchSize: 32 });
|
|
267
|
-
await trainer.save('./adapters/routing-lora');
|
|
268
|
-
```
|
|
269
|
-
|
|
270
|
-
### Training Scripts
|
|
271
|
-
|
|
272
|
-
Located in `scripts/training/`:
|
|
273
|
-
|
|
274
|
-
| Script | Description |
|
|
275
|
-
|--------|-------------|
|
|
276
|
-
| `routing-dataset.js` | Generate 381 routing examples |
|
|
277
|
-
| `claude-code-synth.js` | Synthetic data generation |
|
|
278
|
-
| `contrastive-finetune.js` | LoRA fine-tuning pipeline |
|
|
279
|
-
|
|
280
|
-
## Model Links
|
|
281
|
-
|
|
282
|
-
### HuggingFace Repository
|
|
283
|
-
|
|
284
|
-
**URL**: [https://huggingface.co/ruv/ruvltra](https://huggingface.co/ruv/ruvltra)
|
|
285
|
-
|
|
286
|
-
### Available Models
|
|
287
|
-
|
|
288
|
-
| Model | File | Size | Purpose |
|
|
289
|
-
|-------|------|------|---------|
|
|
290
|
-
| RuvLTRA Claude Code 0.5B | `ruvltra-claude-code-0.5b-q4_k_m.gguf` | ~400MB | Agent routing (100% with hybrid) |
|
|
291
|
-
| RuvLTRA Small 0.5B | `ruvltra-0.5b-q4_k_m.gguf` | ~400MB | General embeddings |
|
|
292
|
-
| RuvLTRA Medium 3B | `ruvltra-3b-q4_k_m.gguf` | ~2GB | Full LLM inference |
|
|
293
|
-
|
|
294
|
-
### Download Models
|
|
295
|
-
|
|
296
|
-
```bash
|
|
297
|
-
# Using CLI
|
|
298
|
-
ruvllm download ruv/ruvltra
|
|
299
|
-
|
|
300
|
-
# Using HuggingFace CLI
|
|
301
|
-
huggingface-cli download ruv/ruvltra ruvltra-claude-code-0.5b-q4_k_m.gguf
|
|
302
|
-
|
|
303
|
-
# Programmatic download
|
|
304
|
-
import { downloadModel } from '@ruvector/ruvllm';
|
|
305
|
-
await downloadModel('ruv/ruvltra', { quantization: 'q4_k_m' });
|
|
306
|
-
```
|
|
307
|
-
|
|
308
|
-
### Environment Variables
|
|
309
|
-
|
|
310
|
-
```bash
|
|
311
|
-
# HuggingFace authentication (any of these)
|
|
312
|
-
HF_TOKEN=hf_xxx
|
|
313
|
-
HUGGING_FACE_HUB_TOKEN=hf_xxx
|
|
314
|
-
HUGGINGFACE_API_KEY=hf_xxx
|
|
315
|
-
```
|
|
316
|
-
|
|
317
|
-
### Local Model Storage
|
|
318
|
-
|
|
319
|
-
```bash
|
|
320
|
-
~/.ruvllm/models/ # Downloaded GGUF models
|
|
321
|
-
~/.ruvllm/training/ # Training data and configs
|
|
322
|
-
```
|
|
323
|
-
|
|
324
69
|
## API Reference
|
|
325
70
|
|
|
326
71
|
### RuvLLM Class
|
|
@@ -338,10 +83,6 @@ class RuvLLM {
|
|
|
338
83
|
// Load a model
|
|
339
84
|
loadModel(path: string): Promise<void>;
|
|
340
85
|
|
|
341
|
-
// Memory operations
|
|
342
|
-
addMemory(text: string, metadata?: Record<string, unknown>): number;
|
|
343
|
-
searchMemory(query: string, topK?: number): MemoryResult[];
|
|
344
|
-
|
|
345
86
|
// Get SONA learning stats
|
|
346
87
|
sonaStats(): SonaStats | null;
|
|
347
88
|
|
|
@@ -350,32 +91,6 @@ class RuvLLM {
|
|
|
350
91
|
}
|
|
351
92
|
```
|
|
352
93
|
|
|
353
|
-
### RlmController Class
|
|
354
|
-
|
|
355
|
-
```typescript
|
|
356
|
-
class RlmController {
|
|
357
|
-
constructor(config?: RlmConfig, engine?: RuvLLM);
|
|
358
|
-
|
|
359
|
-
// Query with recursive retrieval
|
|
360
|
-
query(input: string): Promise<RlmAnswer>;
|
|
361
|
-
|
|
362
|
-
// Stream query
|
|
363
|
-
queryStream(input: string): AsyncGenerator<StreamToken>;
|
|
364
|
-
|
|
365
|
-
// Memory management
|
|
366
|
-
addMemory(text: string, metadata?: Record<string, unknown>): Promise<string>;
|
|
367
|
-
searchMemory(query: string, topK?: number): Promise<MemorySpan[]>;
|
|
368
|
-
|
|
369
|
-
// Cache management
|
|
370
|
-
clearCache(): void;
|
|
371
|
-
getCacheStats(): { size: number; entries: number };
|
|
372
|
-
|
|
373
|
-
// Configuration
|
|
374
|
-
updateConfig(config: Partial<RlmConfig>): void;
|
|
375
|
-
getConfig(): Required<RlmConfig>;
|
|
376
|
-
}
|
|
377
|
-
```
|
|
378
|
-
|
|
379
94
|
### Configuration
|
|
380
95
|
|
|
381
96
|
```typescript
|
|
@@ -422,6 +137,16 @@ const attended = simd.flashAttention(query, key, value, scale);
|
|
|
422
137
|
simd.rmsNorm(hidden, weights, epsilon);
|
|
423
138
|
```
|
|
424
139
|
|
|
140
|
+
## Performance (M4 Pro)
|
|
141
|
+
|
|
142
|
+
| Operation | Performance |
|
|
143
|
+
|-----------|-------------|
|
|
144
|
+
| Inference | 88-135 tok/s |
|
|
145
|
+
| Flash Attention | 320µs (seq=2048) |
|
|
146
|
+
| HNSW Search | 17-62µs |
|
|
147
|
+
| SONA Adapt | <1ms |
|
|
148
|
+
| Evaluation | 5 ablation modes |
|
|
149
|
+
|
|
425
150
|
## Evaluation Harness
|
|
426
151
|
|
|
427
152
|
Run model evaluations with SWE-Bench integration:
|
|
@@ -502,11 +227,11 @@ const response = await llm.query('Write production code');
|
|
|
502
227
|
|
|
503
228
|
| Platform | Architecture | Status |
|
|
504
229
|
|----------|--------------|--------|
|
|
505
|
-
| macOS | arm64 (M1-M4) | Full support |
|
|
506
|
-
| macOS | x64 | Supported |
|
|
507
|
-
| Linux | x64 | Supported |
|
|
508
|
-
| Linux | arm64 | Supported |
|
|
509
|
-
| Windows | x64 | Supported |
|
|
230
|
+
| macOS | arm64 (M1-M4) | ✅ Full support |
|
|
231
|
+
| macOS | x64 | ✅ Supported |
|
|
232
|
+
| Linux | x64 | ✅ Supported |
|
|
233
|
+
| Linux | arm64 | ✅ Supported |
|
|
234
|
+
| Windows | x64 | ✅ Supported |
|
|
510
235
|
|
|
511
236
|
## Related Packages
|
|
512
237
|
|
|
@@ -517,7 +242,6 @@ const response = await llm.query('Write production code');
|
|
|
517
242
|
## Links
|
|
518
243
|
|
|
519
244
|
- [GitHub Repository](https://github.com/ruvnet/ruvector)
|
|
520
|
-
- [HuggingFace Models](https://huggingface.co/ruv/ruvltra)
|
|
521
245
|
- [API Documentation](https://docs.rs/ruvllm)
|
|
522
246
|
- [Crate (Rust)](https://crates.io/crates/ruvllm)
|
|
523
247
|
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -62,7 +62,7 @@ export * from './training';
|
|
|
62
62
|
export * from './contrastive';
|
|
63
63
|
export * from './models';
|
|
64
64
|
export * from './benchmarks';
|
|
65
|
-
export * from './
|
|
65
|
+
export * from './intelligence';
|
|
66
66
|
export { version, hasSimdSupport } from './native';
|
|
67
67
|
export { RuvLLM as default } from './engine';
|
|
68
68
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AAGvB,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC;AAG5B,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,QAAQ,CAAC;AAGvB,cAAc,UAAU,CAAC;AAGzB,cAAc,YAAY,CAAC;AAG3B,cAAc,eAAe,CAAC;AAG9B,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC;AAG7B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAGH,cAAc,SAAS,CAAC;AAGxB,cAAc,UAAU,CAAC;AAGzB,cAAc,QAAQ,CAAC;AAGvB,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC;AAG5B,cAAc,QAAQ,CAAC;AAGvB,cAAc,aAAa,CAAC;AAG5B,cAAc,QAAQ,CAAC;AAGvB,cAAc,UAAU,CAAC;AAGzB,cAAc,YAAY,CAAC;AAG3B,cAAc,eAAe,CAAC;AAG9B,cAAc,UAAU,CAAC;AAGzB,cAAc,cAAc,CAAC;AAG7B,cAAc,gBAAgB,CAAC;AAG/B,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAGnD,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -92,8 +92,8 @@ __exportStar(require("./contrastive"), exports);
|
|
|
92
92
|
__exportStar(require("./models"), exports);
|
|
93
93
|
// Benchmarks for Claude Code use cases
|
|
94
94
|
__exportStar(require("./benchmarks"), exports);
|
|
95
|
-
//
|
|
96
|
-
__exportStar(require("./
|
|
95
|
+
// External Intelligence Providers (ADR-043)
|
|
96
|
+
__exportStar(require("./intelligence"), exports);
|
|
97
97
|
// Native bindings utilities
|
|
98
98
|
var native_1 = require("./native");
|
|
99
99
|
Object.defineProperty(exports, "version", { enumerable: true, get: function () { return native_1.version; } });
|
|
@@ -101,4 +101,4 @@ Object.defineProperty(exports, "hasSimdSupport", { enumerable: true, get: functi
|
|
|
101
101
|
// Default export
|
|
102
102
|
var engine_1 = require("./engine");
|
|
103
103
|
Object.defineProperty(exports, "default", { enumerable: true, get: function () { return engine_1.RuvLLM; } });
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtERzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFSCxhQUFhO0FBQ2IsMENBQXdCO0FBRXhCLGNBQWM7QUFDZCwyQ0FBeUI7QUFFekIsa0JBQWtCO0FBQ2xCLHlDQUF1QjtBQUV2QixxQkFBcUI7QUFDckIsNENBQTBCO0FBRTFCLG9CQUFvQjtBQUNwQiw4Q0FBNEI7QUFFNUIsdUJBQXVCO0FBQ3ZCLHlDQUF1QjtBQUV2QixxQkFBcUI7QUFDckIsOENBQTRCO0FBRTVCLGdCQUFnQjtBQUNoQix5Q0FBdUI7QUFFdkIsdUJBQXVCO0FBQ3ZCLDJDQUF5QjtBQUV6QixvQkFBb0I7QUFDcEIsNkNBQTJCO0FBRTNCLDBCQUEwQjtBQUMxQixnREFBOEI7QUFFOUIsZ0NBQWdDO0FBQ2hDLDJDQUF5QjtBQUV6Qix1Q0FBdUM7QUFDdkMsK0NBQTZCO0FBRTdCLDRDQUE0QztBQUM1QyxpREFBK0I7QUFFL0IsNEJBQTRCO0FBQzVCLG1DQUFtRDtBQUExQyxpR0FBQSxPQUFPLE9BQUE7QUFBRSx3R0FBQSxjQUFjLE9BQUE7QUFFaEMsaUJBQWlCO0FBQ2pCLG1DQUE2QztBQUFwQyxpR0FBQSxNQUFNLE9BQVciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBydXZlY3Rvci9ydXZsbG0gLSBTZWxmLWxlYXJuaW5nIExMTSBvcmNoZXN0cmF0aW9uXG4gKlxuICogUnV2TExNIGNvbWJpbmVzIFNPTkEgYWRhcHRpdmUgbGVhcm5pbmcgd2l0aCBITlNXIG1lbW9yeSxcbiAqIEZhc3RHUk5OIHJvdXRpbmcsIGFuZCBTSU1ELW9wdGltaXplZCBpbmZlcmVuY2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFJ1dkxMTSwgU2Vzc2lvbk1hbmFnZXIsIFNvbmFDb29yZGluYXRvciB9IGZyb20gJ0BydXZlY3Rvci9ydXZsbG0nO1xuICpcbiAqIGNvbnN0IGxsbSA9IG5ldyBSdXZMTE0oeyBsZWFybmluZ0VuYWJsZWQ6IHRydWUgfSk7XG4gKiBjb25zdCBzZXNzaW9ucyA9IG5ldyBTZXNzaW9uTWFuYWdlcihsbG0pO1xuICogY29uc3Qgc29uYSA9IG5ldyBTb25hQ29vcmRpbmF0b3IoKTtcbiAqXG4gKiAvLyBRdWVyeSB3aXRoIHNlc3Npb24gY29udGV4dFxuICogY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25zLmNyZWF0ZSgpO1xuICogY29uc3QgcmVzcG9uc2UgPSBzZXNzaW9ucy5jaGF0KHNlc3Npb24uaWQsICdXaGF0IGlzIEFJPycpO1xuICpcbiAqIC8vIFRyYWNrIGxlYXJuaW5nIHRyYWplY3RvcnlcbiAqIGNvbnN0IHRyYWplY3RvcnkgPSBuZXcgVHJhamVjdG9yeUJ1aWxkZXIoKVxuICogICAuc3RhcnRTdGVwKCdxdWVyeScsICdXaGF0IGlzIEFJPycpXG4gKiAgIC5lbmRTdGVwKHJlc3BvbnNlLnRleHQsIHJlc3BvbnNlLmNvbmZpZGVuY2UpXG4gKiAgIC5jb21wbGV0ZSgnc3VjY2VzcycpO1xuICpcbiAqIHNvbmEucmVjb3JkVHJhamVjdG9yeSh0cmFqZWN0b3J5KTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZlZGVyYXRlZCBMZWFybmluZ1xuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgRXBoZW1lcmFsQWdlbnQsIEZlZGVyYXRlZENvb3JkaW5hdG9yIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XG4gKlxuICogLy8gQ2VudHJhbCBjb29yZGluYXRvclxuICogY29uc3QgY29vcmRpbmF0b3IgPSBuZXcgRmVkZXJhdGVkQ29vcmRpbmF0b3IoJ2Nvb3JkLTEnKTtcbiAqXG4gKiAvLyBFcGhlbWVyYWwgYWdlbnRzIHByb2Nlc3MgdGFza3MgYW5kIGV4cG9ydFxuICogY29uc3QgYWdlbnQgPSBuZXcgRXBoZW1lcmFsQWdlbnQoJ2FnZW50LTEnKTtcbiAqIGFnZW50LnByb2Nlc3NUYXNrKGVtYmVkZGluZywgMC45KTtcbiAqIGNvbnN0IGV4cG9ydERhdGEgPSBhZ2VudC5leHBvcnRTdGF0ZSgpO1xuICpcbiAqIC8vIEFnZ3JlZ2F0ZSBsZWFybmluZ1xuICogY29vcmRpbmF0b3IuYWdncmVnYXRlKGV4cG9ydERhdGEpO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgTG9SQSBBZGFwdGVyc1xuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgTG9yYUFkYXB0ZXIsIExvcmFNYW5hZ2VyIH0gZnJvbSAnQHJ1dmVjdG9yL3J1dmxsbSc7XG4gKlxuICogY29uc3QgYWRhcHRlciA9IG5ldyBMb3JhQWRhcHRlcih7IHJhbms6IDgsIGFscGhhOiAxNiB9KTtcbiAqIGNvbnN0IG91dHB1dCA9IGFkYXB0ZXIuZm9yd2FyZChpbnB1dCk7XG4gKiBgYGBcbiAqL1xuXG4vLyBDb3JlIHR5cGVzXG5leHBvcnQgKiBmcm9tICcuL3R5cGVzJztcblxuLy8gTWFpbiBlbmdpbmVcbmV4cG9ydCAqIGZyb20gJy4vZW5naW5lJztcblxuLy8gU0lNRCBvcGVyYXRpb25zXG5leHBvcnQgKiBmcm9tICcuL3NpbWQnO1xuXG4vLyBTZXNzaW9uIG1hbmFnZW1lbnRcbmV4cG9ydCAqIGZyb20gJy4vc2Vzc2lvbic7XG5cbi8vIFN0cmVhbWluZyBzdXBwb3J0XG5leHBvcnQgKiBmcm9tICcuL3N0cmVhbWluZyc7XG5cbi8vIFNPTkEgbGVhcm5pbmcgc3lzdGVtXG5leHBvcnQgKiBmcm9tICcuL3NvbmEnO1xuXG4vLyBGZWRlcmF0ZWQgbGVhcm5pbmdcbmV4cG9ydCAqIGZyb20gJy4vZmVkZXJhdGVkJztcblxuLy8gTG9SQSBhZGFwdGVyc1xuZXhwb3J0ICogZnJvbSAnLi9sb3JhJztcblxuLy8gRXhwb3J0L3NlcmlhbGl6YXRpb25cbmV4cG9ydCAqIGZyb20gJy4vZXhwb3J0JztcblxuLy8gVHJhaW5pbmcgcGlwZWxpbmVcbmV4cG9ydCAqIGZyb20gJy4vdHJhaW5pbmcnO1xuXG4vLyBDb250cmFzdGl2ZSBmaW5lLXR1bmluZ1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmFzdGl2ZSc7XG5cbi8vIE1vZGVsIGRvd25sb2FkZXIgYW5kIHJlZ2lzdHJ5XG5leHBvcnQgKiBmcm9tICcuL21vZGVscyc7XG5cbi8vIEJlbmNobWFya3MgZm9yIENsYXVkZSBDb2RlIHVzZSBjYXNlc1xuZXhwb3J0ICogZnJvbSAnLi9iZW5jaG1hcmtzJztcblxuLy8gRXh0ZXJuYWwgSW50ZWxsaWdlbmNlIFByb3ZpZGVycyAoQURSLTA0MylcbmV4cG9ydCAqIGZyb20gJy4vaW50ZWxsaWdlbmNlJztcblxuLy8gTmF0aXZlIGJpbmRpbmdzIHV0aWxpdGllc1xuZXhwb3J0IHsgdmVyc2lvbiwgaGFzU2ltZFN1cHBvcnQgfSBmcm9tICcuL25hdGl2ZSc7XG5cbi8vIERlZmF1bHQgZXhwb3J0XG5leHBvcnQgeyBSdXZMTE0gYXMgZGVmYXVsdCB9IGZyb20gJy4vZW5naW5lJztcbiJdfQ==
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External Intelligence Providers for SONA Learning (ADR-043)
|
|
3
|
+
*
|
|
4
|
+
* TypeScript bindings for the IntelligenceProvider trait, enabling
|
|
5
|
+
* external systems to feed quality signals into RuvLLM's learning loops.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { IntelligenceLoader, FileSignalProvider, QualitySignal } from '@ruvector/ruvllm';
|
|
10
|
+
*
|
|
11
|
+
* const loader = new IntelligenceLoader();
|
|
12
|
+
* loader.registerProvider(new FileSignalProvider('./signals.json'));
|
|
13
|
+
*
|
|
14
|
+
* const { signals, errors } = loader.loadAllSignals();
|
|
15
|
+
* console.log(`Loaded ${signals.length} signals`);
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* A quality signal from an external system.
|
|
20
|
+
*
|
|
21
|
+
* Represents one completed task with quality assessment data
|
|
22
|
+
* that can feed into SONA trajectories, the embedding classifier,
|
|
23
|
+
* and model router calibration.
|
|
24
|
+
*/
|
|
25
|
+
export interface QualitySignal {
|
|
26
|
+
/** Unique identifier for this signal */
|
|
27
|
+
id: string;
|
|
28
|
+
/** Human-readable task description (used for embedding generation) */
|
|
29
|
+
taskDescription: string;
|
|
30
|
+
/** Execution outcome */
|
|
31
|
+
outcome: 'success' | 'partial_success' | 'failure';
|
|
32
|
+
/** Composite quality score (0.0 - 1.0) */
|
|
33
|
+
qualityScore: number;
|
|
34
|
+
/** Optional human verdict */
|
|
35
|
+
humanVerdict?: 'approved' | 'rejected';
|
|
36
|
+
/** Optional structured quality factors for detailed analysis */
|
|
37
|
+
qualityFactors?: QualityFactors;
|
|
38
|
+
/** ISO 8601 timestamp of task completion */
|
|
39
|
+
completedAt: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Granular quality factor breakdown.
|
|
43
|
+
*
|
|
44
|
+
* Not all providers will have all factors. Undefined fields mean
|
|
45
|
+
* "not assessed" (distinct from 0.0, which means "assessed as zero").
|
|
46
|
+
*/
|
|
47
|
+
export interface QualityFactors {
|
|
48
|
+
acceptanceCriteriaMet?: number;
|
|
49
|
+
testsPassing?: number;
|
|
50
|
+
noRegressions?: number;
|
|
51
|
+
lintClean?: number;
|
|
52
|
+
typeCheckClean?: number;
|
|
53
|
+
followsPatterns?: number;
|
|
54
|
+
contextRelevance?: number;
|
|
55
|
+
reasoningCoherence?: number;
|
|
56
|
+
executionEfficiency?: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Quality weight overrides from a provider.
|
|
60
|
+
*
|
|
61
|
+
* Weights should sum to approximately 1.0.
|
|
62
|
+
*/
|
|
63
|
+
export interface ProviderQualityWeights {
|
|
64
|
+
taskCompletion: number;
|
|
65
|
+
codeQuality: number;
|
|
66
|
+
process: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Error from a single provider during batch loading.
|
|
70
|
+
*/
|
|
71
|
+
export interface ProviderError {
|
|
72
|
+
providerName: string;
|
|
73
|
+
message: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Result from a single provider during grouped loading.
|
|
77
|
+
*/
|
|
78
|
+
export interface ProviderResult {
|
|
79
|
+
providerName: string;
|
|
80
|
+
signals: QualitySignal[];
|
|
81
|
+
weights?: ProviderQualityWeights;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Interface for external systems that supply quality signals to RuvLLM.
|
|
85
|
+
*
|
|
86
|
+
* Implement this interface and register with IntelligenceLoader.
|
|
87
|
+
*/
|
|
88
|
+
export interface IntelligenceProvider {
|
|
89
|
+
/** Human-readable name for this provider */
|
|
90
|
+
name(): string;
|
|
91
|
+
/** Load quality signals from this provider's data source */
|
|
92
|
+
loadSignals(): QualitySignal[];
|
|
93
|
+
/** Optional quality weight overrides */
|
|
94
|
+
qualityWeights?(): ProviderQualityWeights | undefined;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Built-in file-based intelligence provider.
|
|
98
|
+
*
|
|
99
|
+
* Reads quality signals from a JSON file. This is the default provider
|
|
100
|
+
* for non-Rust integrations that write signal files.
|
|
101
|
+
*/
|
|
102
|
+
export declare class FileSignalProvider implements IntelligenceProvider {
|
|
103
|
+
private readonly filePath;
|
|
104
|
+
constructor(filePath: string);
|
|
105
|
+
name(): string;
|
|
106
|
+
loadSignals(): QualitySignal[];
|
|
107
|
+
qualityWeights(): ProviderQualityWeights | undefined;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Aggregates quality signals from multiple registered providers.
|
|
111
|
+
*
|
|
112
|
+
* If no providers are registered, loadAllSignals returns empty arrays
|
|
113
|
+
* with zero overhead.
|
|
114
|
+
*/
|
|
115
|
+
export declare class IntelligenceLoader {
|
|
116
|
+
private providers;
|
|
117
|
+
/** Register an external intelligence provider */
|
|
118
|
+
registerProvider(provider: IntelligenceProvider): void;
|
|
119
|
+
/** Returns the number of registered providers */
|
|
120
|
+
get providerCount(): number;
|
|
121
|
+
/** Returns the names of all registered providers */
|
|
122
|
+
get providerNames(): string[];
|
|
123
|
+
/**
|
|
124
|
+
* Load signals from all registered providers.
|
|
125
|
+
*
|
|
126
|
+
* Non-fatal: if a provider fails, its error is captured but
|
|
127
|
+
* other providers continue loading.
|
|
128
|
+
*/
|
|
129
|
+
loadAllSignals(): {
|
|
130
|
+
signals: QualitySignal[];
|
|
131
|
+
errors: ProviderError[];
|
|
132
|
+
};
|
|
133
|
+
/** Load signals grouped by provider with weight overrides */
|
|
134
|
+
loadGrouped(): ProviderResult[];
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=intelligence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelligence.d.ts","sourceRoot":"","sources":["../../src/intelligence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,wCAAwC;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB,wBAAwB;IACxB,OAAO,EAAE,SAAS,GAAG,iBAAiB,GAAG,SAAS,CAAC;IACnD,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACvC,gEAAgE;IAChE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,4CAA4C;IAC5C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,IAAI,IAAI,MAAM,CAAC;IACf,4DAA4D;IAC5D,WAAW,IAAI,aAAa,EAAE,CAAC;IAC/B,wCAAwC;IACxC,cAAc,CAAC,IAAI,sBAAsB,GAAG,SAAS,CAAC;CACvD;AAED;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,oBAAoB;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,QAAQ,EAAE,MAAM;IAI5B,IAAI,IAAI,MAAM;IAId,WAAW,IAAI,aAAa,EAAE;IA8B9B,cAAc,IAAI,sBAAsB,GAAG,SAAS;CAiBrD;AAgBD;;;;;GAKG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA8B;IAE/C,iDAAiD;IACjD,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAItD,iDAAiD;IACjD,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,oDAAoD;IACpD,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED;;;;;OAKG;IACH,cAAc,IAAI;QAAE,OAAO,EAAE,aAAa,EAAE,CAAC;QAAC,MAAM,EAAE,aAAa,EAAE,CAAA;KAAE;IAmBvE,6DAA6D;IAC7D,WAAW,IAAI,cAAc,EAAE;CAehC"}
|