@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.
Files changed (179) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +311 -0
  3. package/dist/cloud/KeyManager.d.ts +29 -0
  4. package/dist/cloud/KeyManager.d.ts.map +1 -0
  5. package/dist/cloud/KeyManager.js +142 -0
  6. package/dist/cloud/KeyManager.js.map +1 -0
  7. package/dist/cloud/TenantCache.d.ts +29 -0
  8. package/dist/cloud/TenantCache.d.ts.map +1 -0
  9. package/dist/cloud/TenantCache.js +162 -0
  10. package/dist/cloud/TenantCache.js.map +1 -0
  11. package/dist/cloud/index.d.ts +4 -0
  12. package/dist/cloud/index.d.ts.map +1 -0
  13. package/dist/cloud/index.js +23 -0
  14. package/dist/cloud/index.js.map +1 -0
  15. package/dist/cloud/server.d.ts +17 -0
  16. package/dist/cloud/server.d.ts.map +1 -0
  17. package/dist/cloud/server.js +189 -0
  18. package/dist/cloud/server.js.map +1 -0
  19. package/dist/cloud/types.d.ts +35 -0
  20. package/dist/cloud/types.d.ts.map +1 -0
  21. package/dist/cloud/types.js +14 -0
  22. package/dist/cloud/types.js.map +1 -0
  23. package/dist/config/index.d.ts +44 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/config/index.js +161 -0
  26. package/dist/config/index.js.map +1 -0
  27. package/dist/consensus/ConsensusEngine.d.ts +119 -0
  28. package/dist/consensus/ConsensusEngine.d.ts.map +1 -0
  29. package/dist/consensus/ConsensusEngine.js +314 -0
  30. package/dist/consensus/ConsensusEngine.js.map +1 -0
  31. package/dist/consensus/ModelPool.d.ts +103 -0
  32. package/dist/consensus/ModelPool.d.ts.map +1 -0
  33. package/dist/consensus/ModelPool.js +276 -0
  34. package/dist/consensus/ModelPool.js.map +1 -0
  35. package/dist/consensus/index.d.ts +8 -0
  36. package/dist/consensus/index.d.ts.map +1 -0
  37. package/dist/consensus/index.js +13 -0
  38. package/dist/consensus/index.js.map +1 -0
  39. package/dist/core/AgentRegistry.d.ts +89 -0
  40. package/dist/core/AgentRegistry.d.ts.map +1 -0
  41. package/dist/core/AgentRegistry.js +264 -0
  42. package/dist/core/AgentRegistry.js.map +1 -0
  43. package/dist/core/DashboardBroadcaster.d.ts +67 -0
  44. package/dist/core/DashboardBroadcaster.d.ts.map +1 -0
  45. package/dist/core/DashboardBroadcaster.js +264 -0
  46. package/dist/core/DashboardBroadcaster.js.map +1 -0
  47. package/dist/core/OrchestrationEngine.d.ts +84 -0
  48. package/dist/core/OrchestrationEngine.d.ts.map +1 -0
  49. package/dist/core/OrchestrationEngine.js +455 -0
  50. package/dist/core/OrchestrationEngine.js.map +1 -0
  51. package/dist/core/SubconsciousEngine.d.ts +53 -0
  52. package/dist/core/SubconsciousEngine.d.ts.map +1 -0
  53. package/dist/core/SubconsciousEngine.js +273 -0
  54. package/dist/core/SubconsciousEngine.js.map +1 -0
  55. package/dist/core/WebSocketServer.d.ts +89 -0
  56. package/dist/core/WebSocketServer.d.ts.map +1 -0
  57. package/dist/core/WebSocketServer.js +416 -0
  58. package/dist/core/WebSocketServer.js.map +1 -0
  59. package/dist/core/index.d.ts +15 -0
  60. package/dist/core/index.d.ts.map +1 -0
  61. package/dist/core/index.js +24 -0
  62. package/dist/core/index.js.map +1 -0
  63. package/dist/core/router.d.ts +105 -0
  64. package/dist/core/router.d.ts.map +1 -0
  65. package/dist/core/router.js +420 -0
  66. package/dist/core/router.js.map +1 -0
  67. package/dist/embed/index.d.ts +153 -0
  68. package/dist/embed/index.d.ts.map +1 -0
  69. package/dist/embed/index.js +408 -0
  70. package/dist/embed/index.js.map +1 -0
  71. package/dist/embed.d.ts +11 -0
  72. package/dist/embed.d.ts.map +1 -0
  73. package/dist/embed.js +19 -0
  74. package/dist/embed.js.map +1 -0
  75. package/dist/index.d.ts +83 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +176 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/protocol/flows.d.ts +126 -0
  80. package/dist/protocol/flows.d.ts.map +1 -0
  81. package/dist/protocol/flows.js +347 -0
  82. package/dist/protocol/flows.js.map +1 -0
  83. package/dist/protocol/iap.d.ts +54 -0
  84. package/dist/protocol/iap.d.ts.map +1 -0
  85. package/dist/protocol/iap.js +108 -0
  86. package/dist/protocol/iap.js.map +1 -0
  87. package/dist/protocol/index.d.ts +23 -0
  88. package/dist/protocol/index.d.ts.map +1 -0
  89. package/dist/protocol/index.js +45 -0
  90. package/dist/protocol/index.js.map +1 -0
  91. package/dist/protocol/types.d.ts +332 -0
  92. package/dist/protocol/types.d.ts.map +1 -0
  93. package/dist/protocol/types.js +57 -0
  94. package/dist/protocol/types.js.map +1 -0
  95. package/dist/protocol/utils.d.ts +130 -0
  96. package/dist/protocol/utils.d.ts.map +1 -0
  97. package/dist/protocol/utils.js +292 -0
  98. package/dist/protocol/utils.js.map +1 -0
  99. package/dist/protocol/validators.d.ts +54 -0
  100. package/dist/protocol/validators.d.ts.map +1 -0
  101. package/dist/protocol/validators.js +344 -0
  102. package/dist/protocol/validators.js.map +1 -0
  103. package/dist/security/AuthManager.d.ts +73 -0
  104. package/dist/security/AuthManager.d.ts.map +1 -0
  105. package/dist/security/AuthManager.js +102 -0
  106. package/dist/security/AuthManager.js.map +1 -0
  107. package/dist/security/MessageSanitizer.d.ts +51 -0
  108. package/dist/security/MessageSanitizer.d.ts.map +1 -0
  109. package/dist/security/MessageSanitizer.js +166 -0
  110. package/dist/security/MessageSanitizer.js.map +1 -0
  111. package/dist/security/RateLimiter.d.ts +46 -0
  112. package/dist/security/RateLimiter.d.ts.map +1 -0
  113. package/dist/security/RateLimiter.js +133 -0
  114. package/dist/security/RateLimiter.js.map +1 -0
  115. package/dist/security/SecurityMiddleware.d.ts +88 -0
  116. package/dist/security/SecurityMiddleware.d.ts.map +1 -0
  117. package/dist/security/SecurityMiddleware.js +146 -0
  118. package/dist/security/SecurityMiddleware.js.map +1 -0
  119. package/dist/security/index.d.ts +35 -0
  120. package/dist/security/index.d.ts.map +1 -0
  121. package/dist/security/index.js +42 -0
  122. package/dist/security/index.js.map +1 -0
  123. package/dist/speculative/PredictionEngine.d.ts +99 -0
  124. package/dist/speculative/PredictionEngine.d.ts.map +1 -0
  125. package/dist/speculative/PredictionEngine.js +291 -0
  126. package/dist/speculative/PredictionEngine.js.map +1 -0
  127. package/dist/speculative/SpeculativeCache.d.ts +117 -0
  128. package/dist/speculative/SpeculativeCache.d.ts.map +1 -0
  129. package/dist/speculative/SpeculativeCache.js +292 -0
  130. package/dist/speculative/SpeculativeCache.js.map +1 -0
  131. package/dist/speculative/SpeculativeEngine.d.ts +114 -0
  132. package/dist/speculative/SpeculativeEngine.d.ts.map +1 -0
  133. package/dist/speculative/SpeculativeEngine.js +244 -0
  134. package/dist/speculative/SpeculativeEngine.js.map +1 -0
  135. package/dist/speculative/WorkerPool.d.ts +109 -0
  136. package/dist/speculative/WorkerPool.d.ts.map +1 -0
  137. package/dist/speculative/WorkerPool.js +327 -0
  138. package/dist/speculative/WorkerPool.js.map +1 -0
  139. package/dist/speculative/index.d.ts +10 -0
  140. package/dist/speculative/index.d.ts.map +1 -0
  141. package/dist/speculative/index.js +17 -0
  142. package/dist/speculative/index.js.map +1 -0
  143. package/dist/subconscious/EmbeddingService.d.ts +73 -0
  144. package/dist/subconscious/EmbeddingService.d.ts.map +1 -0
  145. package/dist/subconscious/EmbeddingService.js +196 -0
  146. package/dist/subconscious/EmbeddingService.js.map +1 -0
  147. package/dist/subconscious/SemanticCache.d.ts +82 -0
  148. package/dist/subconscious/SemanticCache.d.ts.map +1 -0
  149. package/dist/subconscious/SemanticCache.js +164 -0
  150. package/dist/subconscious/SemanticCache.js.map +1 -0
  151. package/dist/subconscious/SubconsciousEngine.d.ts +121 -0
  152. package/dist/subconscious/SubconsciousEngine.d.ts.map +1 -0
  153. package/dist/subconscious/SubconsciousEngine.js +241 -0
  154. package/dist/subconscious/SubconsciousEngine.js.map +1 -0
  155. package/dist/subconscious/VectorStore.d.ts +54 -0
  156. package/dist/subconscious/VectorStore.d.ts.map +1 -0
  157. package/dist/subconscious/VectorStore.js +168 -0
  158. package/dist/subconscious/VectorStore.js.map +1 -0
  159. package/dist/subconscious/cache.d.ts +34 -0
  160. package/dist/subconscious/cache.d.ts.map +1 -0
  161. package/dist/subconscious/cache.js +156 -0
  162. package/dist/subconscious/cache.js.map +1 -0
  163. package/dist/subconscious/embeddings.d.ts +25 -0
  164. package/dist/subconscious/embeddings.d.ts.map +1 -0
  165. package/dist/subconscious/embeddings.js +65 -0
  166. package/dist/subconscious/embeddings.js.map +1 -0
  167. package/dist/subconscious/index.d.ts +12 -0
  168. package/dist/subconscious/index.d.ts.map +1 -0
  169. package/dist/subconscious/index.js +19 -0
  170. package/dist/subconscious/index.js.map +1 -0
  171. package/dist/types/index.d.ts +286 -0
  172. package/dist/types/index.d.ts.map +1 -0
  173. package/dist/types/index.js +43 -0
  174. package/dist/types/index.js.map +1 -0
  175. package/dist/utils/logger.d.ts +63 -0
  176. package/dist/utils/logger.d.ts.map +1 -0
  177. package/dist/utils/logger.js +126 -0
  178. package/dist/utils/logger.js.map +1 -0
  179. 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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"}