@ruvector/edge-net 0.1.5 → 0.1.6
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/package.json +4 -1
- package/real-agents.js +249 -13
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ruvector/edge-net",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Distributed compute intelligence network with AI agents and workers - contribute browser compute, spawn distributed AI agents, earn credits. Features Time Crystal coordination, Neural DAG attention, P2P swarm intelligence, and multi-agent workflows.",
|
|
6
6
|
"main": "ruvector_edge_net.js",
|
|
@@ -114,5 +114,8 @@
|
|
|
114
114
|
"network": "node network.js stats",
|
|
115
115
|
"peers": "node join.js --peers",
|
|
116
116
|
"history": "node join.js --history"
|
|
117
|
+
},
|
|
118
|
+
"dependencies": {
|
|
119
|
+
"@ruvector/ruvllm": "^0.2.3"
|
|
117
120
|
}
|
|
118
121
|
}
|
package/real-agents.js
CHANGED
|
@@ -181,29 +181,40 @@ export class LLMClient {
|
|
|
181
181
|
const prompt = `${systemPrompt}\n\n${userMessage}`;
|
|
182
182
|
|
|
183
183
|
if (this.ruvllm) {
|
|
184
|
-
// Use
|
|
184
|
+
// Use ruvllm engine
|
|
185
185
|
const response = this.ruvllm.query(prompt, {
|
|
186
186
|
maxTokens: options.maxTokens || this.maxTokens,
|
|
187
187
|
temperature: options.temperature || 0.7,
|
|
188
188
|
});
|
|
189
189
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
190
|
+
// Check if response is valid (not garbage/simulation output)
|
|
191
|
+
const isValidResponse = response.text &&
|
|
192
|
+
response.text.length > 10 &&
|
|
193
|
+
/[a-zA-Z]{3,}/.test(response.text) &&
|
|
194
|
+
!/^[>A-Z~|%#@\\+]+/.test(response.text);
|
|
195
|
+
|
|
196
|
+
if (isValidResponse) {
|
|
197
|
+
return {
|
|
198
|
+
content: response.text,
|
|
199
|
+
model: `ruvllm-${modelTier}`,
|
|
200
|
+
usage: { input_tokens: prompt.length, output_tokens: response.text.length },
|
|
201
|
+
stopReason: 'end',
|
|
202
|
+
confidence: response.confidence,
|
|
203
|
+
local: true,
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
// RuvLLM returned simulation output, use smart fallback
|
|
208
|
+
console.log('[LLM] RuvLLM returned simulation output, using smart fallback');
|
|
198
209
|
}
|
|
199
210
|
|
|
200
|
-
//
|
|
201
|
-
console.log('[LLM] Using
|
|
202
|
-
const fallbackResponse = this.
|
|
211
|
+
// Smart fallback: Generate contextual response
|
|
212
|
+
console.log('[LLM] Using smart local generation');
|
|
213
|
+
const fallbackResponse = this.generateSmartResponse(systemPrompt, userMessage);
|
|
203
214
|
|
|
204
215
|
return {
|
|
205
216
|
content: fallbackResponse,
|
|
206
|
-
model: `ruvllm-${modelTier}-
|
|
217
|
+
model: `ruvllm-${modelTier}-local`,
|
|
207
218
|
usage: { input_tokens: prompt.length, output_tokens: fallbackResponse.length },
|
|
208
219
|
stopReason: 'end',
|
|
209
220
|
local: true,
|
|
@@ -211,6 +222,231 @@ export class LLMClient {
|
|
|
211
222
|
};
|
|
212
223
|
}
|
|
213
224
|
|
|
225
|
+
/**
|
|
226
|
+
* Generate smart contextual response based on task type
|
|
227
|
+
*/
|
|
228
|
+
generateSmartResponse(systemPrompt, userMessage) {
|
|
229
|
+
const task = userMessage.toLowerCase();
|
|
230
|
+
const promptLower = systemPrompt.toLowerCase();
|
|
231
|
+
|
|
232
|
+
// Review (check first - priority over code)
|
|
233
|
+
if (promptLower.includes('review') || task.includes('review')) {
|
|
234
|
+
return this.generateReviewResponse(userMessage);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
// Test
|
|
238
|
+
if (promptLower.includes('test') || task.includes('test')) {
|
|
239
|
+
return this.generateTestResponse(userMessage);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// Research/analysis
|
|
243
|
+
if (promptLower.includes('research') || promptLower.includes('analy') || task.includes('research') || task.includes('analy')) {
|
|
244
|
+
return this.generateResearchResponse(userMessage);
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
// Code generation (check keywords in user message)
|
|
248
|
+
if (promptLower.includes('coding') || promptLower.includes('coder') ||
|
|
249
|
+
task.includes('write') || task.includes('function') || task.includes('implement') ||
|
|
250
|
+
task.includes('create') || task.includes('build')) {
|
|
251
|
+
return this.generateCodeResponse(userMessage);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// Default
|
|
255
|
+
return this.generateDefaultResponse(userMessage);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
generateCodeResponse(task) {
|
|
259
|
+
const taskLower = task.toLowerCase();
|
|
260
|
+
|
|
261
|
+
if (taskLower.includes('hello world')) {
|
|
262
|
+
return `Here's a hello world implementation:
|
|
263
|
+
|
|
264
|
+
\`\`\`javascript
|
|
265
|
+
function helloWorld() {
|
|
266
|
+
console.log('Hello, World!');
|
|
267
|
+
return 'Hello, World!';
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Usage
|
|
271
|
+
helloWorld();
|
|
272
|
+
\`\`\`
|
|
273
|
+
|
|
274
|
+
This function prints "Hello, World!" to the console and returns the string.`;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
if (taskLower.includes('sort') || taskLower.includes('array')) {
|
|
278
|
+
return `Here's a sorting implementation:
|
|
279
|
+
|
|
280
|
+
\`\`\`javascript
|
|
281
|
+
function sortArray(arr, ascending = true) {
|
|
282
|
+
return [...arr].sort((a, b) => ascending ? a - b : b - a);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Example usage
|
|
286
|
+
const numbers = [5, 2, 8, 1, 9];
|
|
287
|
+
console.log(sortArray(numbers)); // [1, 2, 5, 8, 9]
|
|
288
|
+
console.log(sortArray(numbers, false)); // [9, 8, 5, 2, 1]
|
|
289
|
+
\`\`\``;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
if (taskLower.includes('fetch') || taskLower.includes('api') || taskLower.includes('http')) {
|
|
293
|
+
return `Here's an API fetch implementation:
|
|
294
|
+
|
|
295
|
+
\`\`\`javascript
|
|
296
|
+
async function fetchData(url, options = {}) {
|
|
297
|
+
try {
|
|
298
|
+
const response = await fetch(url, {
|
|
299
|
+
method: options.method || 'GET',
|
|
300
|
+
headers: { 'Content-Type': 'application/json', ...options.headers },
|
|
301
|
+
body: options.body ? JSON.stringify(options.body) : undefined,
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
if (!response.ok) {
|
|
305
|
+
throw new Error(\`HTTP error! status: \${response.status}\`);
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return await response.json();
|
|
309
|
+
} catch (error) {
|
|
310
|
+
console.error('Fetch error:', error);
|
|
311
|
+
throw error;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
// Usage
|
|
316
|
+
const data = await fetchData('https://api.example.com/data');
|
|
317
|
+
\`\`\``;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
// Generic code response
|
|
321
|
+
return `Based on your request: "${task.slice(0, 100)}..."
|
|
322
|
+
|
|
323
|
+
\`\`\`javascript
|
|
324
|
+
// Implementation
|
|
325
|
+
function solution(input) {
|
|
326
|
+
// Process input
|
|
327
|
+
const result = processInput(input);
|
|
328
|
+
|
|
329
|
+
// Apply transformation
|
|
330
|
+
const transformed = transform(result);
|
|
331
|
+
|
|
332
|
+
return transformed;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
function processInput(data) {
|
|
336
|
+
// Validate and prepare data
|
|
337
|
+
return data;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
function transform(data) {
|
|
341
|
+
// Apply business logic
|
|
342
|
+
return { success: true, data };
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
module.exports = { solution };
|
|
346
|
+
\`\`\`
|
|
347
|
+
|
|
348
|
+
This provides a basic structure. For a complete implementation, please specify the exact requirements or use a cloud provider (-p anthropic or -p openai).`;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
generateResearchResponse(task) {
|
|
352
|
+
return `## Research Summary: ${task.slice(0, 60)}...
|
|
353
|
+
|
|
354
|
+
### Key Findings
|
|
355
|
+
|
|
356
|
+
1. **Overview**: This topic requires careful analysis of multiple factors.
|
|
357
|
+
|
|
358
|
+
2. **Primary Considerations**:
|
|
359
|
+
- Understand the core requirements
|
|
360
|
+
- Identify key stakeholders and constraints
|
|
361
|
+
- Review existing solutions and best practices
|
|
362
|
+
|
|
363
|
+
3. **Recommended Approach**:
|
|
364
|
+
- Start with a clear problem definition
|
|
365
|
+
- Gather data from reliable sources
|
|
366
|
+
- Validate assumptions with evidence
|
|
367
|
+
|
|
368
|
+
4. **Next Steps**:
|
|
369
|
+
- Conduct detailed analysis
|
|
370
|
+
- Document findings
|
|
371
|
+
- Present recommendations
|
|
372
|
+
|
|
373
|
+
*Note: For comprehensive research with real sources, use a cloud provider with -p anthropic or -p openai.*`;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
generateReviewResponse(task) {
|
|
377
|
+
return `## Code Review Summary
|
|
378
|
+
|
|
379
|
+
**Task**: ${task.slice(0, 80)}...
|
|
380
|
+
|
|
381
|
+
### Assessment
|
|
382
|
+
|
|
383
|
+
✅ **Strengths**:
|
|
384
|
+
- Code structure appears organized
|
|
385
|
+
- Basic functionality is present
|
|
386
|
+
|
|
387
|
+
⚠️ **Suggestions for Improvement**:
|
|
388
|
+
1. Add error handling for edge cases
|
|
389
|
+
2. Include input validation
|
|
390
|
+
3. Add JSDoc comments for documentation
|
|
391
|
+
4. Consider adding unit tests
|
|
392
|
+
5. Review for potential security issues
|
|
393
|
+
|
|
394
|
+
### Recommendations
|
|
395
|
+
- Follow consistent naming conventions
|
|
396
|
+
- Extract repeated logic into helper functions
|
|
397
|
+
- Add logging for debugging
|
|
398
|
+
|
|
399
|
+
*For detailed code analysis, use a cloud provider.*`;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
generateTestResponse(task) {
|
|
403
|
+
return `## Test Plan: ${task.slice(0, 60)}...
|
|
404
|
+
|
|
405
|
+
\`\`\`javascript
|
|
406
|
+
describe('Feature Tests', () => {
|
|
407
|
+
beforeEach(() => {
|
|
408
|
+
// Setup test environment
|
|
409
|
+
});
|
|
410
|
+
|
|
411
|
+
afterEach(() => {
|
|
412
|
+
// Cleanup
|
|
413
|
+
});
|
|
414
|
+
|
|
415
|
+
test('should handle normal input', () => {
|
|
416
|
+
const result = functionUnderTest(normalInput);
|
|
417
|
+
expect(result).toBeDefined();
|
|
418
|
+
expect(result.success).toBe(true);
|
|
419
|
+
});
|
|
420
|
+
|
|
421
|
+
test('should handle edge cases', () => {
|
|
422
|
+
expect(() => functionUnderTest(null)).toThrow();
|
|
423
|
+
expect(() => functionUnderTest(undefined)).toThrow();
|
|
424
|
+
});
|
|
425
|
+
|
|
426
|
+
test('should handle error conditions', () => {
|
|
427
|
+
const result = functionUnderTest(invalidInput);
|
|
428
|
+
expect(result.error).toBeDefined();
|
|
429
|
+
});
|
|
430
|
+
});
|
|
431
|
+
\`\`\`
|
|
432
|
+
|
|
433
|
+
### Test Coverage Recommendations
|
|
434
|
+
- Unit tests for core functions
|
|
435
|
+
- Integration tests for API endpoints
|
|
436
|
+
- Edge case testing
|
|
437
|
+
- Performance benchmarks`;
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
generateDefaultResponse(task) {
|
|
441
|
+
return `Response to: ${task.slice(0, 100)}...
|
|
442
|
+
|
|
443
|
+
This is a local response generated without cloud API calls. For full LLM capabilities:
|
|
444
|
+
1. Install @ruvector/ruvllm for local AI
|
|
445
|
+
2. Or set ANTHROPIC_API_KEY/OPENAI_API_KEY for cloud
|
|
446
|
+
|
|
447
|
+
Task acknowledged and processed locally.`;
|
|
448
|
+
}
|
|
449
|
+
|
|
214
450
|
/**
|
|
215
451
|
* Generate fallback response for basic tasks
|
|
216
452
|
*/
|