@nxuss/lemma 0.1.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/LICENSE +21 -0
- package/README.md +311 -0
- package/dist/cloud/KeyManager.d.ts +29 -0
- package/dist/cloud/KeyManager.d.ts.map +1 -0
- package/dist/cloud/KeyManager.js +142 -0
- package/dist/cloud/KeyManager.js.map +1 -0
- package/dist/cloud/TenantCache.d.ts +29 -0
- package/dist/cloud/TenantCache.d.ts.map +1 -0
- package/dist/cloud/TenantCache.js +162 -0
- package/dist/cloud/TenantCache.js.map +1 -0
- package/dist/cloud/index.d.ts +4 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +23 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/server.d.ts +17 -0
- package/dist/cloud/server.d.ts.map +1 -0
- package/dist/cloud/server.js +189 -0
- package/dist/cloud/server.js.map +1 -0
- package/dist/cloud/types.d.ts +35 -0
- package/dist/cloud/types.d.ts.map +1 -0
- package/dist/cloud/types.js +14 -0
- package/dist/cloud/types.js.map +1 -0
- package/dist/config/index.d.ts +44 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +161 -0
- package/dist/config/index.js.map +1 -0
- package/dist/consensus/ConsensusEngine.d.ts +119 -0
- package/dist/consensus/ConsensusEngine.d.ts.map +1 -0
- package/dist/consensus/ConsensusEngine.js +314 -0
- package/dist/consensus/ConsensusEngine.js.map +1 -0
- package/dist/consensus/ModelPool.d.ts +103 -0
- package/dist/consensus/ModelPool.d.ts.map +1 -0
- package/dist/consensus/ModelPool.js +276 -0
- package/dist/consensus/ModelPool.js.map +1 -0
- package/dist/consensus/index.d.ts +8 -0
- package/dist/consensus/index.d.ts.map +1 -0
- package/dist/consensus/index.js +13 -0
- package/dist/consensus/index.js.map +1 -0
- package/dist/core/AgentRegistry.d.ts +89 -0
- package/dist/core/AgentRegistry.d.ts.map +1 -0
- package/dist/core/AgentRegistry.js +264 -0
- package/dist/core/AgentRegistry.js.map +1 -0
- package/dist/core/DashboardBroadcaster.d.ts +67 -0
- package/dist/core/DashboardBroadcaster.d.ts.map +1 -0
- package/dist/core/DashboardBroadcaster.js +264 -0
- package/dist/core/DashboardBroadcaster.js.map +1 -0
- package/dist/core/OrchestrationEngine.d.ts +84 -0
- package/dist/core/OrchestrationEngine.d.ts.map +1 -0
- package/dist/core/OrchestrationEngine.js +455 -0
- package/dist/core/OrchestrationEngine.js.map +1 -0
- package/dist/core/SubconsciousEngine.d.ts +53 -0
- package/dist/core/SubconsciousEngine.d.ts.map +1 -0
- package/dist/core/SubconsciousEngine.js +273 -0
- package/dist/core/SubconsciousEngine.js.map +1 -0
- package/dist/core/WebSocketServer.d.ts +89 -0
- package/dist/core/WebSocketServer.d.ts.map +1 -0
- package/dist/core/WebSocketServer.js +416 -0
- package/dist/core/WebSocketServer.js.map +1 -0
- package/dist/core/index.d.ts +15 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +24 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/router.d.ts +105 -0
- package/dist/core/router.d.ts.map +1 -0
- package/dist/core/router.js +420 -0
- package/dist/core/router.js.map +1 -0
- package/dist/embed/index.d.ts +153 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +408 -0
- package/dist/embed/index.js.map +1 -0
- package/dist/embed.d.ts +11 -0
- package/dist/embed.d.ts.map +1 -0
- package/dist/embed.js +19 -0
- package/dist/embed.js.map +1 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +176 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/flows.d.ts +126 -0
- package/dist/protocol/flows.d.ts.map +1 -0
- package/dist/protocol/flows.js +347 -0
- package/dist/protocol/flows.js.map +1 -0
- package/dist/protocol/iap.d.ts +54 -0
- package/dist/protocol/iap.d.ts.map +1 -0
- package/dist/protocol/iap.js +108 -0
- package/dist/protocol/iap.js.map +1 -0
- package/dist/protocol/index.d.ts +23 -0
- package/dist/protocol/index.d.ts.map +1 -0
- package/dist/protocol/index.js +45 -0
- package/dist/protocol/index.js.map +1 -0
- package/dist/protocol/types.d.ts +332 -0
- package/dist/protocol/types.d.ts.map +1 -0
- package/dist/protocol/types.js +57 -0
- package/dist/protocol/types.js.map +1 -0
- package/dist/protocol/utils.d.ts +130 -0
- package/dist/protocol/utils.d.ts.map +1 -0
- package/dist/protocol/utils.js +292 -0
- package/dist/protocol/utils.js.map +1 -0
- package/dist/protocol/validators.d.ts +54 -0
- package/dist/protocol/validators.d.ts.map +1 -0
- package/dist/protocol/validators.js +344 -0
- package/dist/protocol/validators.js.map +1 -0
- package/dist/security/AuthManager.d.ts +73 -0
- package/dist/security/AuthManager.d.ts.map +1 -0
- package/dist/security/AuthManager.js +102 -0
- package/dist/security/AuthManager.js.map +1 -0
- package/dist/security/MessageSanitizer.d.ts +51 -0
- package/dist/security/MessageSanitizer.d.ts.map +1 -0
- package/dist/security/MessageSanitizer.js +166 -0
- package/dist/security/MessageSanitizer.js.map +1 -0
- package/dist/security/RateLimiter.d.ts +46 -0
- package/dist/security/RateLimiter.d.ts.map +1 -0
- package/dist/security/RateLimiter.js +133 -0
- package/dist/security/RateLimiter.js.map +1 -0
- package/dist/security/SecurityMiddleware.d.ts +88 -0
- package/dist/security/SecurityMiddleware.d.ts.map +1 -0
- package/dist/security/SecurityMiddleware.js +146 -0
- package/dist/security/SecurityMiddleware.js.map +1 -0
- package/dist/security/index.d.ts +35 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +42 -0
- package/dist/security/index.js.map +1 -0
- package/dist/speculative/PredictionEngine.d.ts +99 -0
- package/dist/speculative/PredictionEngine.d.ts.map +1 -0
- package/dist/speculative/PredictionEngine.js +291 -0
- package/dist/speculative/PredictionEngine.js.map +1 -0
- package/dist/speculative/SpeculativeCache.d.ts +117 -0
- package/dist/speculative/SpeculativeCache.d.ts.map +1 -0
- package/dist/speculative/SpeculativeCache.js +292 -0
- package/dist/speculative/SpeculativeCache.js.map +1 -0
- package/dist/speculative/SpeculativeEngine.d.ts +114 -0
- package/dist/speculative/SpeculativeEngine.d.ts.map +1 -0
- package/dist/speculative/SpeculativeEngine.js +244 -0
- package/dist/speculative/SpeculativeEngine.js.map +1 -0
- package/dist/speculative/WorkerPool.d.ts +109 -0
- package/dist/speculative/WorkerPool.d.ts.map +1 -0
- package/dist/speculative/WorkerPool.js +327 -0
- package/dist/speculative/WorkerPool.js.map +1 -0
- package/dist/speculative/index.d.ts +10 -0
- package/dist/speculative/index.d.ts.map +1 -0
- package/dist/speculative/index.js +17 -0
- package/dist/speculative/index.js.map +1 -0
- package/dist/subconscious/EmbeddingService.d.ts +73 -0
- package/dist/subconscious/EmbeddingService.d.ts.map +1 -0
- package/dist/subconscious/EmbeddingService.js +196 -0
- package/dist/subconscious/EmbeddingService.js.map +1 -0
- package/dist/subconscious/SemanticCache.d.ts +82 -0
- package/dist/subconscious/SemanticCache.d.ts.map +1 -0
- package/dist/subconscious/SemanticCache.js +164 -0
- package/dist/subconscious/SemanticCache.js.map +1 -0
- package/dist/subconscious/SubconsciousEngine.d.ts +121 -0
- package/dist/subconscious/SubconsciousEngine.d.ts.map +1 -0
- package/dist/subconscious/SubconsciousEngine.js +241 -0
- package/dist/subconscious/SubconsciousEngine.js.map +1 -0
- package/dist/subconscious/VectorStore.d.ts +54 -0
- package/dist/subconscious/VectorStore.d.ts.map +1 -0
- package/dist/subconscious/VectorStore.js +168 -0
- package/dist/subconscious/VectorStore.js.map +1 -0
- package/dist/subconscious/cache.d.ts +34 -0
- package/dist/subconscious/cache.d.ts.map +1 -0
- package/dist/subconscious/cache.js +156 -0
- package/dist/subconscious/cache.js.map +1 -0
- package/dist/subconscious/embeddings.d.ts +25 -0
- package/dist/subconscious/embeddings.d.ts.map +1 -0
- package/dist/subconscious/embeddings.js +65 -0
- package/dist/subconscious/embeddings.js.map +1 -0
- package/dist/subconscious/index.d.ts +12 -0
- package/dist/subconscious/index.d.ts.map +1 -0
- package/dist/subconscious/index.js +19 -0
- package/dist/subconscious/index.js.map +1 -0
- package/dist/types/index.d.ts +286 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +43 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/logger.d.ts +63 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +126 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.config = void 0;
|
|
7
|
+
exports.validateConfig = validateConfig;
|
|
8
|
+
exports.getChromaURL = getChromaURL;
|
|
9
|
+
exports.printConfig = printConfig;
|
|
10
|
+
exports.getSecurityConfig = getSecurityConfig;
|
|
11
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
12
|
+
// Load environment variables
|
|
13
|
+
dotenv_1.default.config();
|
|
14
|
+
/**
|
|
15
|
+
* Parse environment variable as number with fallback
|
|
16
|
+
*/
|
|
17
|
+
function parseNumber(value, fallback) {
|
|
18
|
+
if (!value)
|
|
19
|
+
return fallback;
|
|
20
|
+
const parsed = parseInt(value, 10);
|
|
21
|
+
return isNaN(parsed) ? fallback : parsed;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse environment variable as float with fallback
|
|
25
|
+
*/
|
|
26
|
+
function parseFloat(value, fallback) {
|
|
27
|
+
if (!value)
|
|
28
|
+
return fallback;
|
|
29
|
+
const parsed = Number(value);
|
|
30
|
+
return isNaN(parsed) ? fallback : parsed;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parse environment variable as boolean with fallback
|
|
34
|
+
*/
|
|
35
|
+
function parseBoolean(value, fallback) {
|
|
36
|
+
if (!value)
|
|
37
|
+
return fallback;
|
|
38
|
+
return value.toLowerCase() === 'true';
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Application configuration loaded from environment variables
|
|
42
|
+
*/
|
|
43
|
+
exports.config = {
|
|
44
|
+
// Server Configuration
|
|
45
|
+
wsPort: parseNumber(process.env.WS_PORT || process.env.PORT, 8080),
|
|
46
|
+
PORT: parseNumber(process.env.PORT, 8080),
|
|
47
|
+
NODE_ENV: process.env.NODE_ENV || 'development',
|
|
48
|
+
// ChromaDB Configuration
|
|
49
|
+
chromaUrl: process.env.CHROMA_URL || 'http://localhost:8000',
|
|
50
|
+
CHROMA_HOST: process.env.CHROMA_HOST || 'http://localhost',
|
|
51
|
+
CHROMA_PORT: parseNumber(process.env.CHROMA_PORT, 8000),
|
|
52
|
+
CHROMA_COLLECTION: process.env.CHROMA_COLLECTION || 'subconscious_cache',
|
|
53
|
+
// Ollama Configuration
|
|
54
|
+
ollamaUrl: process.env.OLLAMA_URL || 'http://localhost:11434',
|
|
55
|
+
OLLAMA_HOST: process.env.OLLAMA_HOST || 'http://localhost:11434',
|
|
56
|
+
OLLAMA_MODEL: process.env.OLLAMA_MODEL || 'llama3',
|
|
57
|
+
// Router Configuration
|
|
58
|
+
similarityThreshold: parseFloat(process.env.SIMILARITY_THRESHOLD, 0.95),
|
|
59
|
+
SEMANTIC_THRESHOLD: parseFloat(process.env.SEMANTIC_THRESHOLD, 0.95),
|
|
60
|
+
MAX_CACHE_SIZE: parseNumber(process.env.MAX_CACHE_SIZE, 10000),
|
|
61
|
+
ENABLE_CACHING: parseBoolean(process.env.ENABLE_CACHING, true),
|
|
62
|
+
// Security Configuration
|
|
63
|
+
AUTH_ENABLED: parseBoolean(process.env.AUTH_ENABLED, false),
|
|
64
|
+
AUTH_REQUIRE_API_KEY: parseBoolean(process.env.AUTH_REQUIRE_API_KEY, false),
|
|
65
|
+
AUTH_ALLOWED_ORIGINS: process.env.AUTH_ALLOWED_ORIGINS?.split(',') || ['*'],
|
|
66
|
+
RATE_LIMIT_ENABLED: parseBoolean(process.env.RATE_LIMIT_ENABLED, true),
|
|
67
|
+
RATE_LIMIT_REQUESTS_PER_MINUTE: parseNumber(process.env.RATE_LIMIT_REQUESTS_PER_MINUTE, 60),
|
|
68
|
+
RATE_LIMIT_REQUESTS_PER_HOUR: parseNumber(process.env.RATE_LIMIT_REQUESTS_PER_HOUR, 1000),
|
|
69
|
+
RATE_LIMIT_BLOCK_DURATION: parseNumber(process.env.RATE_LIMIT_BLOCK_DURATION, 60000),
|
|
70
|
+
SANITIZATION_ENABLED: parseBoolean(process.env.SANITIZATION_ENABLED, true),
|
|
71
|
+
SANITIZATION_MAX_STRING_LENGTH: parseNumber(process.env.SANITIZATION_MAX_STRING_LENGTH, 10000),
|
|
72
|
+
SANITIZATION_MAX_ARRAY_LENGTH: parseNumber(process.env.SANITIZATION_MAX_ARRAY_LENGTH, 1000),
|
|
73
|
+
SANITIZATION_MAX_OBJECT_DEPTH: parseNumber(process.env.SANITIZATION_MAX_OBJECT_DEPTH, 10),
|
|
74
|
+
// Logging Configuration
|
|
75
|
+
logLevel: process.env.LOG_LEVEL || 'info',
|
|
76
|
+
LOG_LEVEL: process.env.LOG_LEVEL || 'info',
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Validate configuration
|
|
80
|
+
*/
|
|
81
|
+
function validateConfig() {
|
|
82
|
+
const errors = [];
|
|
83
|
+
// Validate port range
|
|
84
|
+
if (exports.config.PORT < 1 || exports.config.PORT > 65535) {
|
|
85
|
+
errors.push(`Invalid PORT: ${exports.config.PORT}. Must be between 1 and 65535.`);
|
|
86
|
+
}
|
|
87
|
+
// Validate semantic threshold
|
|
88
|
+
if (exports.config.SEMANTIC_THRESHOLD < 0 || exports.config.SEMANTIC_THRESHOLD > 1) {
|
|
89
|
+
errors.push(`Invalid SEMANTIC_THRESHOLD: ${exports.config.SEMANTIC_THRESHOLD}. Must be between 0 and 1.`);
|
|
90
|
+
}
|
|
91
|
+
// Validate URLs
|
|
92
|
+
try {
|
|
93
|
+
new URL(exports.config.CHROMA_HOST);
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
errors.push(`Invalid CHROMA_HOST: ${exports.config.CHROMA_HOST}. Must be a valid URL.`);
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
new URL(exports.config.OLLAMA_HOST);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
errors.push(`Invalid OLLAMA_HOST: ${exports.config.OLLAMA_HOST}. Must be a valid URL.`);
|
|
103
|
+
}
|
|
104
|
+
if (errors.length > 0) {
|
|
105
|
+
throw new Error(`Configuration validation failed:\n${errors.join('\n')}`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get full ChromaDB URL
|
|
110
|
+
*/
|
|
111
|
+
function getChromaURL() {
|
|
112
|
+
return `${exports.config.CHROMA_HOST}:${exports.config.CHROMA_PORT}`;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Print configuration (safe - no secrets)
|
|
116
|
+
*/
|
|
117
|
+
function printConfig() {
|
|
118
|
+
console.log('=== Lemma Router Configuration ===');
|
|
119
|
+
console.log(`Environment: ${exports.config.NODE_ENV}`);
|
|
120
|
+
console.log(`Server Port: ${exports.config.PORT}`);
|
|
121
|
+
console.log(`ChromaDB: ${getChromaURL()}`);
|
|
122
|
+
console.log(`Ollama: ${exports.config.OLLAMA_HOST} (${exports.config.OLLAMA_MODEL})`);
|
|
123
|
+
console.log(`Semantic Threshold: ${exports.config.SEMANTIC_THRESHOLD}`);
|
|
124
|
+
console.log(`Caching: ${exports.config.ENABLE_CACHING ? 'Enabled' : 'Disabled'}`);
|
|
125
|
+
console.log(`Log Level: ${exports.config.LOG_LEVEL}`);
|
|
126
|
+
console.log('--- Security ---');
|
|
127
|
+
console.log(`Authentication: ${exports.config.AUTH_ENABLED ? 'Enabled' : 'Disabled'}`);
|
|
128
|
+
console.log(`API Key Required: ${exports.config.AUTH_REQUIRE_API_KEY ? 'Yes' : 'No'}`);
|
|
129
|
+
console.log(`Rate Limiting: ${exports.config.RATE_LIMIT_ENABLED ? 'Enabled' : 'Disabled'}`);
|
|
130
|
+
console.log(`Message Sanitization: ${exports.config.SANITIZATION_ENABLED ? 'Enabled' : 'Disabled'}`);
|
|
131
|
+
console.log('=========================================');
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get security configuration
|
|
135
|
+
*/
|
|
136
|
+
function getSecurityConfig() {
|
|
137
|
+
return {
|
|
138
|
+
auth: {
|
|
139
|
+
enabled: exports.config.AUTH_ENABLED,
|
|
140
|
+
requireApiKey: exports.config.AUTH_REQUIRE_API_KEY,
|
|
141
|
+
allowedOrigins: exports.config.AUTH_ALLOWED_ORIGINS,
|
|
142
|
+
defaultRateLimit: {
|
|
143
|
+
requestsPerMinute: exports.config.RATE_LIMIT_REQUESTS_PER_MINUTE,
|
|
144
|
+
requestsPerHour: exports.config.RATE_LIMIT_REQUESTS_PER_HOUR,
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
rateLimit: {
|
|
148
|
+
enabled: exports.config.RATE_LIMIT_ENABLED,
|
|
149
|
+
requestsPerMinute: exports.config.RATE_LIMIT_REQUESTS_PER_MINUTE,
|
|
150
|
+
requestsPerHour: exports.config.RATE_LIMIT_REQUESTS_PER_HOUR,
|
|
151
|
+
blockDuration: exports.config.RATE_LIMIT_BLOCK_DURATION,
|
|
152
|
+
},
|
|
153
|
+
sanitization: {
|
|
154
|
+
enabled: exports.config.SANITIZATION_ENABLED,
|
|
155
|
+
maxStringLength: exports.config.SANITIZATION_MAX_STRING_LENGTH,
|
|
156
|
+
maxArrayLength: exports.config.SANITIZATION_MAX_ARRAY_LENGTH,
|
|
157
|
+
maxObjectDepth: exports.config.SANITIZATION_MAX_OBJECT_DEPTH,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Consensus Engine - Shadow Consensus v3.0
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates multi-model debates to achieve mathematical consensus
|
|
5
|
+
* and eliminate hallucinations. Forces disparate AI models to debate
|
|
6
|
+
* internally until agreement is reached.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Multi-model parallel routing
|
|
10
|
+
* - Structured debate rounds
|
|
11
|
+
* - Multiple consensus algorithms
|
|
12
|
+
* - Convergence detection
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from 'events';
|
|
15
|
+
export interface ConsensusRequest {
|
|
16
|
+
id: string;
|
|
17
|
+
taskType: string;
|
|
18
|
+
context: string;
|
|
19
|
+
prompt: string;
|
|
20
|
+
minAgreement?: number;
|
|
21
|
+
maxRounds?: number;
|
|
22
|
+
timeout?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface ModelResponse {
|
|
25
|
+
modelId: string;
|
|
26
|
+
response: string;
|
|
27
|
+
confidence: number;
|
|
28
|
+
reasoning: string;
|
|
29
|
+
timestamp: number;
|
|
30
|
+
}
|
|
31
|
+
export interface DebateRound {
|
|
32
|
+
roundNumber: number;
|
|
33
|
+
responses: ModelResponse[];
|
|
34
|
+
agreement: number;
|
|
35
|
+
converged: boolean;
|
|
36
|
+
timestamp: number;
|
|
37
|
+
}
|
|
38
|
+
export interface ConsensusResult {
|
|
39
|
+
requestId: string;
|
|
40
|
+
finalResponse: string;
|
|
41
|
+
confidence: number;
|
|
42
|
+
agreement: number;
|
|
43
|
+
rounds: DebateRound[];
|
|
44
|
+
totalTime: number;
|
|
45
|
+
modelsUsed: string[];
|
|
46
|
+
algorithm: string;
|
|
47
|
+
success: boolean;
|
|
48
|
+
}
|
|
49
|
+
export interface ConsensusEngineConfig {
|
|
50
|
+
minModels?: number;
|
|
51
|
+
maxModels?: number;
|
|
52
|
+
defaultAlgorithm?: 'majority' | 'weighted' | 'iterative' | 'proof';
|
|
53
|
+
minAgreement?: number;
|
|
54
|
+
maxRounds?: number;
|
|
55
|
+
timeout?: number;
|
|
56
|
+
}
|
|
57
|
+
export interface ConsensusMetrics {
|
|
58
|
+
totalRequests: number;
|
|
59
|
+
successfulConsensus: number;
|
|
60
|
+
failedConsensus: number;
|
|
61
|
+
successRate: number;
|
|
62
|
+
averageRounds: number;
|
|
63
|
+
averageAgreement: number;
|
|
64
|
+
averageTime: number;
|
|
65
|
+
hallucinationReduction: number;
|
|
66
|
+
}
|
|
67
|
+
export declare class ConsensusEngine extends EventEmitter {
|
|
68
|
+
private config;
|
|
69
|
+
private activeRequests;
|
|
70
|
+
private metrics;
|
|
71
|
+
private roundTimes;
|
|
72
|
+
private agreementScores;
|
|
73
|
+
constructor(config?: ConsensusEngineConfig);
|
|
74
|
+
/**
|
|
75
|
+
* Request consensus from multiple models
|
|
76
|
+
*/
|
|
77
|
+
requestConsensus(request: ConsensusRequest, modelPool: any): Promise<ConsensusResult>;
|
|
78
|
+
/**
|
|
79
|
+
* Execute a single debate round
|
|
80
|
+
*/
|
|
81
|
+
private executeRound;
|
|
82
|
+
/**
|
|
83
|
+
* Build prompts for each model in a round
|
|
84
|
+
*/
|
|
85
|
+
private buildRoundPrompts;
|
|
86
|
+
/**
|
|
87
|
+
* Calculate agreement score between responses
|
|
88
|
+
*/
|
|
89
|
+
private calculateAgreement;
|
|
90
|
+
/**
|
|
91
|
+
* Weighted consensus algorithm
|
|
92
|
+
*/
|
|
93
|
+
private weightedConsensus;
|
|
94
|
+
/**
|
|
95
|
+
* Calculate text similarity using word overlap
|
|
96
|
+
*/
|
|
97
|
+
private calculateTextSimilarity;
|
|
98
|
+
/**
|
|
99
|
+
* Extract consensus response from a round
|
|
100
|
+
*/
|
|
101
|
+
private extractConsensusResponse;
|
|
102
|
+
/**
|
|
103
|
+
* Calculate average confidence from a round
|
|
104
|
+
*/
|
|
105
|
+
private calculateAverageConfidence;
|
|
106
|
+
/**
|
|
107
|
+
* Update metrics
|
|
108
|
+
*/
|
|
109
|
+
private updateMetrics;
|
|
110
|
+
/**
|
|
111
|
+
* Get current metrics
|
|
112
|
+
*/
|
|
113
|
+
getMetrics(): ConsensusMetrics;
|
|
114
|
+
/**
|
|
115
|
+
* Get active requests
|
|
116
|
+
*/
|
|
117
|
+
getActiveRequests(): ConsensusRequest[];
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=ConsensusEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsensusEngine.d.ts","sourceRoot":"","sources":["../../src/consensus/ConsensusEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAA4C;IAClE,OAAO,CAAC,OAAO,CASb;IACF,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,eAAe,CAAgB;gBAE3B,MAAM,GAAE,qBAA0B;IAY9C;;OAEG;IACU,gBAAgB,CAC3B,OAAO,EAAE,gBAAgB,EACzB,SAAS,EAAE,GAAG,GACb,OAAO,CAAC,eAAe,CAAC;IAwH3B;;OAEG;YACW,YAAY;IAqD1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAiDzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAoB/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAShC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAUlC;;OAEG;IACH,OAAO,CAAC,aAAa;IAyBrB;;OAEG;IACI,UAAU,IAAI,gBAAgB;IAIrC;;OAEG;IACI,iBAAiB,IAAI,gBAAgB,EAAE;CAG/C"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Consensus Engine - Shadow Consensus v3.0
|
|
4
|
+
*
|
|
5
|
+
* Orchestrates multi-model debates to achieve mathematical consensus
|
|
6
|
+
* and eliminate hallucinations. Forces disparate AI models to debate
|
|
7
|
+
* internally until agreement is reached.
|
|
8
|
+
*
|
|
9
|
+
* Features:
|
|
10
|
+
* - Multi-model parallel routing
|
|
11
|
+
* - Structured debate rounds
|
|
12
|
+
* - Multiple consensus algorithms
|
|
13
|
+
* - Convergence detection
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ConsensusEngine = void 0;
|
|
17
|
+
const events_1 = require("events");
|
|
18
|
+
class ConsensusEngine extends events_1.EventEmitter {
|
|
19
|
+
constructor(config = {}) {
|
|
20
|
+
super();
|
|
21
|
+
this.activeRequests = new Map();
|
|
22
|
+
this.metrics = {
|
|
23
|
+
totalRequests: 0,
|
|
24
|
+
successfulConsensus: 0,
|
|
25
|
+
failedConsensus: 0,
|
|
26
|
+
successRate: 0,
|
|
27
|
+
averageRounds: 0,
|
|
28
|
+
averageAgreement: 0,
|
|
29
|
+
averageTime: 0,
|
|
30
|
+
hallucinationReduction: 0,
|
|
31
|
+
};
|
|
32
|
+
this.roundTimes = [];
|
|
33
|
+
this.agreementScores = [];
|
|
34
|
+
this.config = {
|
|
35
|
+
minModels: config.minModels || 3,
|
|
36
|
+
maxModels: config.maxModels || 5,
|
|
37
|
+
defaultAlgorithm: config.defaultAlgorithm || 'weighted',
|
|
38
|
+
minAgreement: config.minAgreement || 0.9,
|
|
39
|
+
maxRounds: config.maxRounds || 3,
|
|
40
|
+
timeout: config.timeout || 30000,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Request consensus from multiple models
|
|
45
|
+
*/
|
|
46
|
+
async requestConsensus(request, modelPool) {
|
|
47
|
+
const startTime = Date.now();
|
|
48
|
+
this.metrics.totalRequests++;
|
|
49
|
+
this.activeRequests.set(request.id, request);
|
|
50
|
+
this.emit('consensus-started', { requestId: request.id });
|
|
51
|
+
try {
|
|
52
|
+
const minAgreement = request.minAgreement || this.config.minAgreement;
|
|
53
|
+
const maxRounds = request.maxRounds || this.config.maxRounds;
|
|
54
|
+
const timeout = request.timeout || this.config.timeout;
|
|
55
|
+
// Select models for debate
|
|
56
|
+
const models = await modelPool.selectModels(this.config.minModels, this.config.maxModels);
|
|
57
|
+
const rounds = [];
|
|
58
|
+
let converged = false;
|
|
59
|
+
let finalResponse = '';
|
|
60
|
+
let finalConfidence = 0;
|
|
61
|
+
let finalAgreement = 0;
|
|
62
|
+
// Debate rounds
|
|
63
|
+
for (let roundNum = 1; roundNum <= maxRounds && !converged; roundNum++) {
|
|
64
|
+
// Check timeout
|
|
65
|
+
if (Date.now() - startTime > timeout) {
|
|
66
|
+
throw new Error('Consensus timeout');
|
|
67
|
+
}
|
|
68
|
+
// Execute round
|
|
69
|
+
const round = await this.executeRound(roundNum, request, models, rounds.length > 0 ? rounds[rounds.length - 1] : null, modelPool);
|
|
70
|
+
rounds.push(round);
|
|
71
|
+
// Check convergence
|
|
72
|
+
if (round.agreement >= minAgreement) {
|
|
73
|
+
converged = true;
|
|
74
|
+
finalResponse = this.extractConsensusResponse(round);
|
|
75
|
+
finalConfidence = this.calculateAverageConfidence(round);
|
|
76
|
+
finalAgreement = round.agreement;
|
|
77
|
+
}
|
|
78
|
+
this.emit('round-completed', {
|
|
79
|
+
requestId: request.id,
|
|
80
|
+
round: roundNum,
|
|
81
|
+
agreement: round.agreement,
|
|
82
|
+
converged,
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
// If not converged, use best round
|
|
86
|
+
if (!converged && rounds.length > 0) {
|
|
87
|
+
const bestRound = rounds.reduce((best, current) => current.agreement > best.agreement ? current : best);
|
|
88
|
+
finalResponse = this.extractConsensusResponse(bestRound);
|
|
89
|
+
finalConfidence = this.calculateAverageConfidence(bestRound);
|
|
90
|
+
finalAgreement = bestRound.agreement;
|
|
91
|
+
}
|
|
92
|
+
const totalTime = Date.now() - startTime;
|
|
93
|
+
const result = {
|
|
94
|
+
requestId: request.id,
|
|
95
|
+
finalResponse,
|
|
96
|
+
confidence: finalConfidence,
|
|
97
|
+
agreement: finalAgreement,
|
|
98
|
+
rounds,
|
|
99
|
+
totalTime,
|
|
100
|
+
modelsUsed: models.map((m) => m.id),
|
|
101
|
+
algorithm: this.config.defaultAlgorithm,
|
|
102
|
+
success: converged,
|
|
103
|
+
};
|
|
104
|
+
// Update metrics
|
|
105
|
+
if (converged) {
|
|
106
|
+
this.metrics.successfulConsensus++;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
this.metrics.failedConsensus++;
|
|
110
|
+
}
|
|
111
|
+
this.metrics.successRate =
|
|
112
|
+
this.metrics.successfulConsensus / this.metrics.totalRequests;
|
|
113
|
+
this.roundTimes.push(totalTime);
|
|
114
|
+
this.agreementScores.push(finalAgreement);
|
|
115
|
+
this.updateMetrics();
|
|
116
|
+
this.activeRequests.delete(request.id);
|
|
117
|
+
this.emit('consensus-completed', result);
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
this.metrics.failedConsensus++;
|
|
122
|
+
this.metrics.successRate =
|
|
123
|
+
this.metrics.successfulConsensus / this.metrics.totalRequests;
|
|
124
|
+
this.activeRequests.delete(request.id);
|
|
125
|
+
this.emit('consensus-failed', { requestId: request.id, error: error.message });
|
|
126
|
+
return {
|
|
127
|
+
requestId: request.id,
|
|
128
|
+
finalResponse: '',
|
|
129
|
+
confidence: 0,
|
|
130
|
+
agreement: 0,
|
|
131
|
+
rounds: [],
|
|
132
|
+
totalTime: Date.now() - startTime,
|
|
133
|
+
modelsUsed: [],
|
|
134
|
+
algorithm: this.config.defaultAlgorithm,
|
|
135
|
+
success: false,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Execute a single debate round
|
|
141
|
+
*/
|
|
142
|
+
async executeRound(roundNumber, request, models, previousRound, modelPool) {
|
|
143
|
+
const responses = [];
|
|
144
|
+
// Build prompts for this round
|
|
145
|
+
const prompts = this.buildRoundPrompts(request, roundNumber, previousRound);
|
|
146
|
+
// Query all models in parallel
|
|
147
|
+
const responsePromises = models.map(async (model) => {
|
|
148
|
+
try {
|
|
149
|
+
const response = await modelPool.query(model.id, prompts[model.id]);
|
|
150
|
+
return {
|
|
151
|
+
modelId: model.id,
|
|
152
|
+
response: response.text,
|
|
153
|
+
confidence: response.confidence || 0.8,
|
|
154
|
+
reasoning: response.reasoning || '',
|
|
155
|
+
timestamp: Date.now(),
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
return {
|
|
160
|
+
modelId: model.id,
|
|
161
|
+
response: '',
|
|
162
|
+
confidence: 0,
|
|
163
|
+
reasoning: 'Error: ' + error.message,
|
|
164
|
+
timestamp: Date.now(),
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
const modelResponses = await Promise.all(responsePromises);
|
|
169
|
+
responses.push(...modelResponses.filter((r) => r.response));
|
|
170
|
+
// Calculate agreement
|
|
171
|
+
const agreement = this.calculateAgreement(responses);
|
|
172
|
+
return {
|
|
173
|
+
roundNumber,
|
|
174
|
+
responses,
|
|
175
|
+
agreement,
|
|
176
|
+
converged: agreement >= (request.minAgreement || this.config.minAgreement),
|
|
177
|
+
timestamp: Date.now(),
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Build prompts for each model in a round
|
|
182
|
+
*/
|
|
183
|
+
buildRoundPrompts(request, roundNumber, previousRound) {
|
|
184
|
+
const prompts = {};
|
|
185
|
+
if (roundNumber === 1) {
|
|
186
|
+
// Initial round: just the original prompt
|
|
187
|
+
return Object.fromEntries(Array(this.config.maxModels)
|
|
188
|
+
.fill(null)
|
|
189
|
+
.map((_, i) => [`model-${i}`, request.prompt]));
|
|
190
|
+
}
|
|
191
|
+
// Subsequent rounds: include previous responses for debate
|
|
192
|
+
if (previousRound) {
|
|
193
|
+
const previousResponses = previousRound.responses
|
|
194
|
+
.map((r) => `Model ${r.modelId} (confidence: ${r.confidence}):\n${r.response}\n`)
|
|
195
|
+
.join('\n---\n\n');
|
|
196
|
+
const debatePrompt = `Original task: ${request.prompt}
|
|
197
|
+
|
|
198
|
+
Previous round responses:
|
|
199
|
+
${previousResponses}
|
|
200
|
+
|
|
201
|
+
Based on the previous responses, provide your refined answer. Consider:
|
|
202
|
+
1. Points of agreement across models
|
|
203
|
+
2. Points of disagreement and why
|
|
204
|
+
3. Evidence supporting your position
|
|
205
|
+
4. Your confidence level (0.0-1.0)
|
|
206
|
+
|
|
207
|
+
Provide your response in this format:
|
|
208
|
+
RESPONSE: [your refined answer]
|
|
209
|
+
CONFIDENCE: [0.0-1.0]
|
|
210
|
+
REASONING: [why you believe this is correct]`;
|
|
211
|
+
return Object.fromEntries(previousRound.responses.map((r) => [r.modelId, debatePrompt]));
|
|
212
|
+
}
|
|
213
|
+
return {};
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Calculate agreement score between responses
|
|
217
|
+
*/
|
|
218
|
+
calculateAgreement(responses) {
|
|
219
|
+
if (responses.length < 2)
|
|
220
|
+
return 0;
|
|
221
|
+
// Use weighted consensus algorithm
|
|
222
|
+
return this.weightedConsensus(responses);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Weighted consensus algorithm
|
|
226
|
+
*/
|
|
227
|
+
weightedConsensus(responses) {
|
|
228
|
+
// Calculate pairwise similarity weighted by confidence
|
|
229
|
+
let totalSimilarity = 0;
|
|
230
|
+
let totalWeight = 0;
|
|
231
|
+
let comparisons = 0;
|
|
232
|
+
for (let i = 0; i < responses.length; i++) {
|
|
233
|
+
for (let j = i + 1; j < responses.length; j++) {
|
|
234
|
+
const similarity = this.calculateTextSimilarity(responses[i].response, responses[j].response);
|
|
235
|
+
const weight = (responses[i].confidence + responses[j].confidence) / 2;
|
|
236
|
+
totalSimilarity += similarity * weight;
|
|
237
|
+
totalWeight += weight;
|
|
238
|
+
comparisons++;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return comparisons > 0 ? totalSimilarity / totalWeight : 0;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Calculate text similarity using word overlap
|
|
245
|
+
*/
|
|
246
|
+
calculateTextSimilarity(text1, text2) {
|
|
247
|
+
const words1 = new Set(text1
|
|
248
|
+
.toLowerCase()
|
|
249
|
+
.replace(/[^\w\s]/g, '')
|
|
250
|
+
.split(/\s+/));
|
|
251
|
+
const words2 = new Set(text2
|
|
252
|
+
.toLowerCase()
|
|
253
|
+
.replace(/[^\w\s]/g, '')
|
|
254
|
+
.split(/\s+/));
|
|
255
|
+
const intersection = new Set([...words1].filter((w) => words2.has(w)));
|
|
256
|
+
const union = new Set([...words1, ...words2]);
|
|
257
|
+
return union.size > 0 ? intersection.size / union.size : 0;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Extract consensus response from a round
|
|
261
|
+
*/
|
|
262
|
+
extractConsensusResponse(round) {
|
|
263
|
+
// Use highest confidence response as base
|
|
264
|
+
const sortedByConfidence = [...round.responses].sort((a, b) => b.confidence - a.confidence);
|
|
265
|
+
return sortedByConfidence[0]?.response || '';
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* Calculate average confidence from a round
|
|
269
|
+
*/
|
|
270
|
+
calculateAverageConfidence(round) {
|
|
271
|
+
if (round.responses.length === 0)
|
|
272
|
+
return 0;
|
|
273
|
+
const totalConfidence = round.responses.reduce((sum, r) => sum + r.confidence, 0);
|
|
274
|
+
return totalConfidence / round.responses.length;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Update metrics
|
|
278
|
+
*/
|
|
279
|
+
updateMetrics() {
|
|
280
|
+
if (this.roundTimes.length > 0) {
|
|
281
|
+
this.metrics.averageTime =
|
|
282
|
+
this.roundTimes.reduce((sum, t) => sum + t, 0) /
|
|
283
|
+
this.roundTimes.length;
|
|
284
|
+
}
|
|
285
|
+
if (this.agreementScores.length > 0) {
|
|
286
|
+
this.metrics.averageAgreement =
|
|
287
|
+
this.agreementScores.reduce((sum, a) => sum + a, 0) /
|
|
288
|
+
this.agreementScores.length;
|
|
289
|
+
}
|
|
290
|
+
// Estimate hallucination reduction based on agreement
|
|
291
|
+
this.metrics.hallucinationReduction = this.metrics.averageAgreement * 100;
|
|
292
|
+
// Keep metrics bounded
|
|
293
|
+
if (this.roundTimes.length > 1000) {
|
|
294
|
+
this.roundTimes = this.roundTimes.slice(-1000);
|
|
295
|
+
}
|
|
296
|
+
if (this.agreementScores.length > 1000) {
|
|
297
|
+
this.agreementScores = this.agreementScores.slice(-1000);
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get current metrics
|
|
302
|
+
*/
|
|
303
|
+
getMetrics() {
|
|
304
|
+
return { ...this.metrics };
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Get active requests
|
|
308
|
+
*/
|
|
309
|
+
getActiveRequests() {
|
|
310
|
+
return Array.from(this.activeRequests.values());
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
exports.ConsensusEngine = ConsensusEngine;
|
|
314
|
+
//# sourceMappingURL=ConsensusEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConsensusEngine.js","sourceRoot":"","sources":["../../src/consensus/ConsensusEngine.ts"],"names":[],"mappings":"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"}
|