gthinking 1.3.0 → 2.1.1
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/.eslintrc.js +34 -0
- package/ANALYSIS_SUMMARY.md +363 -0
- package/README.md +230 -250
- package/dist/analysis/analysis-engine.d.ts +63 -0
- package/dist/analysis/analysis-engine.d.ts.map +1 -0
- package/dist/analysis/analysis-engine.js +322 -0
- package/dist/analysis/analysis-engine.js.map +1 -0
- package/dist/core/config.d.ts +1419 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +361 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/engine.d.ts +176 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +604 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/errors.d.ts +153 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +287 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/index.d.ts +7 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/{types.js → core/index.js} +8 -4
- package/dist/core/index.js.map +1 -0
- package/dist/core/pipeline.d.ts +121 -0
- package/dist/core/pipeline.d.ts.map +1 -0
- package/dist/core/pipeline.js +289 -0
- package/dist/core/pipeline.js.map +1 -0
- package/dist/core/rate-limiter.d.ts +58 -0
- package/dist/core/rate-limiter.d.ts.map +1 -0
- package/dist/core/rate-limiter.js +133 -0
- package/dist/core/rate-limiter.js.map +1 -0
- package/dist/core/session-manager.d.ts +96 -0
- package/dist/core/session-manager.d.ts.map +1 -0
- package/dist/core/session-manager.js +223 -0
- package/dist/core/session-manager.js.map +1 -0
- package/dist/creativity/creativity-engine.d.ts +6 -0
- package/dist/creativity/creativity-engine.d.ts.map +1 -0
- package/dist/creativity/creativity-engine.js +17 -0
- package/dist/creativity/creativity-engine.js.map +1 -0
- package/dist/index.d.ts +24 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +130 -104
- package/dist/index.js.map +1 -1
- package/dist/learning/learning-engine.d.ts +6 -0
- package/dist/learning/learning-engine.d.ts.map +1 -0
- package/dist/learning/learning-engine.js +17 -0
- package/dist/learning/learning-engine.js.map +1 -0
- package/dist/llm/index.d.ts +10 -0
- package/dist/llm/index.d.ts.map +1 -0
- package/dist/llm/index.js +26 -0
- package/dist/llm/index.js.map +1 -0
- package/dist/llm/llm-service.d.ts +109 -0
- package/dist/llm/llm-service.d.ts.map +1 -0
- package/dist/llm/llm-service.js +224 -0
- package/dist/llm/llm-service.js.map +1 -0
- package/dist/llm/providers/base.d.ts +85 -0
- package/dist/llm/providers/base.d.ts.map +1 -0
- package/dist/llm/providers/base.js +57 -0
- package/dist/llm/providers/base.js.map +1 -0
- package/dist/llm/providers/cli.d.ts +23 -0
- package/dist/llm/providers/cli.d.ts.map +1 -0
- package/dist/llm/providers/cli.js +158 -0
- package/dist/llm/providers/cli.js.map +1 -0
- package/dist/llm/providers/gemini.d.ts +30 -0
- package/dist/llm/providers/gemini.d.ts.map +1 -0
- package/dist/llm/providers/gemini.js +168 -0
- package/dist/llm/providers/gemini.js.map +1 -0
- package/dist/llm/sanitization.d.ts +50 -0
- package/dist/llm/sanitization.d.ts.map +1 -0
- package/dist/llm/sanitization.js +149 -0
- package/dist/llm/sanitization.js.map +1 -0
- package/dist/{server.d.ts.map → mcp/server.d.ts.map} +1 -1
- package/dist/mcp/server.js +108 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/planning/planning-engine.d.ts +6 -0
- package/dist/planning/planning-engine.d.ts.map +1 -0
- package/dist/planning/planning-engine.js +17 -0
- package/dist/planning/planning-engine.js.map +1 -0
- package/dist/reasoning/reasoning-engine.d.ts +6 -0
- package/dist/reasoning/reasoning-engine.d.ts.map +1 -0
- package/dist/reasoning/reasoning-engine.js +17 -0
- package/dist/reasoning/reasoning-engine.js.map +1 -0
- package/dist/search/search-engine.d.ts +99 -0
- package/dist/search/search-engine.d.ts.map +1 -0
- package/dist/search/search-engine.js +271 -0
- package/dist/search/search-engine.js.map +1 -0
- package/dist/synthesis/synthesis-engine.d.ts +6 -0
- package/dist/synthesis/synthesis-engine.d.ts.map +1 -0
- package/dist/synthesis/synthesis-engine.js +17 -0
- package/dist/synthesis/synthesis-engine.js.map +1 -0
- package/dist/types/analysis.d.ts +1534 -49
- package/dist/types/analysis.d.ts.map +1 -1
- package/dist/types/analysis.js +250 -0
- package/dist/types/analysis.js.map +1 -1
- package/dist/types/core.d.ts +257 -30
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/core.js +148 -18
- package/dist/types/core.js.map +1 -1
- package/dist/types/creativity.d.ts +2871 -56
- package/dist/types/creativity.d.ts.map +1 -1
- package/dist/types/creativity.js +195 -0
- package/dist/types/creativity.js.map +1 -1
- package/dist/types/index.d.ts +6 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +17 -2
- package/dist/types/index.js.map +1 -1
- package/dist/types/learning.d.ts +851 -61
- package/dist/types/learning.d.ts.map +1 -1
- package/dist/types/learning.js +155 -0
- package/dist/types/learning.js.map +1 -1
- package/dist/types/planning.d.ts +2223 -71
- package/dist/types/planning.d.ts.map +1 -1
- package/dist/types/planning.js +190 -0
- package/dist/types/planning.js.map +1 -1
- package/dist/types/reasoning.d.ts +2209 -72
- package/dist/types/reasoning.d.ts.map +1 -1
- package/dist/types/reasoning.js +200 -1
- package/dist/types/reasoning.js.map +1 -1
- package/dist/types/search.d.ts +981 -53
- package/dist/types/search.d.ts.map +1 -1
- package/dist/types/search.js +137 -0
- package/dist/types/search.js.map +1 -1
- package/dist/types/synthesis.d.ts +583 -38
- package/dist/types/synthesis.d.ts.map +1 -1
- package/dist/types/synthesis.js +138 -0
- package/dist/types/synthesis.js.map +1 -1
- package/dist/utils/cache.d.ts +144 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +288 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/id-generator.d.ts +89 -0
- package/dist/utils/id-generator.d.ts.map +1 -0
- package/dist/utils/id-generator.js +132 -0
- package/dist/utils/id-generator.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +142 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +248 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/metrics.d.ts +149 -0
- package/dist/utils/metrics.d.ts.map +1 -0
- package/dist/utils/metrics.js +296 -0
- package/dist/utils/metrics.js.map +1 -0
- package/dist/utils/timer.d.ts +7 -0
- package/dist/utils/timer.d.ts.map +1 -0
- package/dist/utils/timer.js +17 -0
- package/dist/utils/timer.js.map +1 -0
- package/dist/utils/validation.d.ts +147 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +275 -0
- package/dist/utils/validation.js.map +1 -0
- package/docs/API.md +411 -0
- package/docs/ARCHITECTURE.md +271 -0
- package/docs/CHANGELOG.md +283 -0
- package/jest.config.js +28 -0
- package/package.json +43 -30
- package/src/analysis/analysis-engine.ts +383 -0
- package/src/core/config.ts +406 -0
- package/src/core/engine.ts +785 -0
- package/src/core/errors.ts +349 -0
- package/src/core/index.ts +12 -0
- package/src/core/pipeline.ts +424 -0
- package/src/core/rate-limiter.ts +155 -0
- package/src/core/session-manager.ts +269 -0
- package/src/creativity/creativity-engine.ts +14 -0
- package/src/index.ts +178 -0
- package/src/learning/learning-engine.ts +14 -0
- package/src/llm/index.ts +10 -0
- package/src/llm/llm-service.ts +285 -0
- package/src/llm/providers/base.ts +146 -0
- package/src/llm/providers/cli.ts +186 -0
- package/src/llm/providers/gemini.ts +201 -0
- package/src/llm/sanitization.ts +178 -0
- package/src/mcp/server.ts +117 -0
- package/src/planning/planning-engine.ts +14 -0
- package/src/reasoning/reasoning-engine.ts +14 -0
- package/src/search/search-engine.ts +333 -0
- package/src/synthesis/synthesis-engine.ts +14 -0
- package/src/types/analysis.ts +337 -0
- package/src/types/core.ts +342 -0
- package/src/types/creativity.ts +268 -0
- package/src/types/index.ts +31 -0
- package/src/types/learning.ts +215 -0
- package/src/types/planning.ts +251 -0
- package/src/types/reasoning.ts +288 -0
- package/src/types/search.ts +192 -0
- package/src/types/synthesis.ts +187 -0
- package/src/utils/cache.ts +363 -0
- package/src/utils/id-generator.ts +135 -0
- package/src/utils/index.ts +22 -0
- package/src/utils/logger.ts +290 -0
- package/src/utils/metrics.ts +380 -0
- package/src/utils/timer.ts +15 -0
- package/src/utils/validation.ts +297 -0
- package/tests/setup.ts +22 -0
- package/tests/unit/cache.test.ts +189 -0
- package/tests/unit/engine.test.ts +179 -0
- package/tests/unit/validation.test.ts +218 -0
- package/tsconfig.json +17 -12
- package/GEMINI.md +0 -68
- package/analysis.ts +0 -1063
- package/creativity.ts +0 -1055
- package/dist/analysis.d.ts +0 -54
- package/dist/analysis.d.ts.map +0 -1
- package/dist/analysis.js +0 -866
- package/dist/analysis.js.map +0 -1
- package/dist/creativity.d.ts +0 -81
- package/dist/creativity.d.ts.map +0 -1
- package/dist/creativity.js +0 -828
- package/dist/creativity.js.map +0 -1
- package/dist/engine.d.ts +0 -90
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js +0 -720
- package/dist/engine.js.map +0 -1
- package/dist/examples.d.ts +0 -7
- package/dist/examples.d.ts.map +0 -1
- package/dist/examples.js +0 -506
- package/dist/examples.js.map +0 -1
- package/dist/learning.d.ts +0 -72
- package/dist/learning.d.ts.map +0 -1
- package/dist/learning.js +0 -615
- package/dist/learning.js.map +0 -1
- package/dist/llm-service.d.ts +0 -21
- package/dist/llm-service.d.ts.map +0 -1
- package/dist/llm-service.js +0 -100
- package/dist/llm-service.js.map +0 -1
- package/dist/planning.d.ts +0 -62
- package/dist/planning.d.ts.map +0 -1
- package/dist/planning.js +0 -886
- package/dist/planning.js.map +0 -1
- package/dist/reasoning.d.ts +0 -73
- package/dist/reasoning.d.ts.map +0 -1
- package/dist/reasoning.js +0 -845
- package/dist/reasoning.js.map +0 -1
- package/dist/search-discovery.d.ts +0 -73
- package/dist/search-discovery.d.ts.map +0 -1
- package/dist/search-discovery.js +0 -548
- package/dist/search-discovery.js.map +0 -1
- package/dist/server.js +0 -113
- package/dist/server.js.map +0 -1
- package/dist/types/engine.d.ts +0 -55
- package/dist/types/engine.d.ts.map +0 -1
- package/dist/types/engine.js +0 -3
- package/dist/types/engine.js.map +0 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/engine.ts +0 -1009
- package/examples.ts +0 -717
- package/index.ts +0 -106
- package/learning.ts +0 -779
- package/llm-service.ts +0 -120
- package/planning.ts +0 -1101
- package/reasoning.ts +0 -1079
- package/search-discovery.ts +0 -700
- package/server.ts +0 -115
- package/types/analysis.ts +0 -69
- package/types/core.ts +0 -90
- package/types/creativity.ts +0 -72
- package/types/engine.ts +0 -60
- package/types/index.ts +0 -9
- package/types/learning.ts +0 -69
- package/types/planning.ts +0 -85
- package/types/reasoning.ts +0 -92
- package/types/search.ts +0 -58
- package/types/synthesis.ts +0 -43
- package/types.ts +0 -6
- /package/dist/{server.d.ts → mcp/server.d.ts} +0 -0
package/dist/learning.d.ts
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Learning Module
|
|
3
|
-
* Context memory, pattern recognition, feedback integration, and knowledge base management
|
|
4
|
-
*/
|
|
5
|
-
import { LearningContext, Interaction, Feedback, Pattern, KnowledgeNode, UserPreferences } from './types';
|
|
6
|
-
import { EventEmitter } from 'events';
|
|
7
|
-
export declare class LearningEngine extends EventEmitter {
|
|
8
|
-
private patternEngine;
|
|
9
|
-
private knowledgeGraph;
|
|
10
|
-
private preferenceEngine;
|
|
11
|
-
private contextManager;
|
|
12
|
-
private contexts;
|
|
13
|
-
constructor();
|
|
14
|
-
/**
|
|
15
|
-
* Create or get learning context for a session
|
|
16
|
-
*/
|
|
17
|
-
getOrCreateContext(sessionId: string, userId?: string): LearningContext;
|
|
18
|
-
/**
|
|
19
|
-
* Record an interaction and learn from it
|
|
20
|
-
*/
|
|
21
|
-
recordInteraction(sessionId: string, query: string, response: string, feedback?: Feedback): Interaction;
|
|
22
|
-
/**
|
|
23
|
-
* Get relevant context for a query
|
|
24
|
-
*/
|
|
25
|
-
getRelevantContext(sessionId: string, query: string): {
|
|
26
|
-
interactions: Interaction[];
|
|
27
|
-
patterns: Pattern[];
|
|
28
|
-
knowledge: KnowledgeNode[];
|
|
29
|
-
summary: string;
|
|
30
|
-
};
|
|
31
|
-
/**
|
|
32
|
-
* Add knowledge to the knowledge graph
|
|
33
|
-
*/
|
|
34
|
-
addKnowledge(label: string, type: KnowledgeNode['type'], properties: Record<string, unknown>, sources: string[]): KnowledgeNode;
|
|
35
|
-
/**
|
|
36
|
-
* Connect knowledge nodes
|
|
37
|
-
*/
|
|
38
|
-
connectKnowledge(fromId: string, toId: string, relation: string, strength: number, evidence: string[]): void;
|
|
39
|
-
/**
|
|
40
|
-
* Query knowledge graph
|
|
41
|
-
*/
|
|
42
|
-
queryKnowledge(query: string): KnowledgeNode[];
|
|
43
|
-
/**
|
|
44
|
-
* Infer new knowledge
|
|
45
|
-
*/
|
|
46
|
-
inferKnowledge(fromNodeId: string, relationType?: string): KnowledgeNode[];
|
|
47
|
-
/**
|
|
48
|
-
* Update user preferences
|
|
49
|
-
*/
|
|
50
|
-
updatePreferences(userId: string, updates: Partial<UserPreferences>): void;
|
|
51
|
-
/**
|
|
52
|
-
* Get user preferences
|
|
53
|
-
*/
|
|
54
|
-
getPreferences(userId?: string): UserPreferences;
|
|
55
|
-
/**
|
|
56
|
-
* Get top patterns
|
|
57
|
-
*/
|
|
58
|
-
getTopPatterns(limit?: number): Pattern[];
|
|
59
|
-
/**
|
|
60
|
-
* Export knowledge graph
|
|
61
|
-
*/
|
|
62
|
-
exportKnowledgeGraph(): string;
|
|
63
|
-
/**
|
|
64
|
-
* Import knowledge graph
|
|
65
|
-
*/
|
|
66
|
-
importKnowledgeGraph(json: string): void;
|
|
67
|
-
private extractAndAddKnowledge;
|
|
68
|
-
private extractEntities;
|
|
69
|
-
private extractConcepts;
|
|
70
|
-
}
|
|
71
|
-
export declare const learningEngine: LearningEngine;
|
|
72
|
-
//# sourceMappingURL=learning.d.ts.map
|
package/dist/learning.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"learning.d.ts","sourceRoot":"","sources":["../learning.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,eAAe,EACf,WAAW,EACX,QAAQ,EACR,OAAO,EAEP,aAAa,EAEb,eAAe,EAKhB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAuctC,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,QAAQ,CAA2C;;IAU3D;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAoBvE;;OAEG;IACH,iBAAiB,CACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,QAAQ,GAClB,WAAW;IAuCd;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG;QACpD,YAAY,EAAE,WAAW,EAAE,CAAC;QAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,SAAS,EAAE,aAAa,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,CAAC;KACjB;IAkBD;;OAEG;IACH,YAAY,CACV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,EAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,EAAE,MAAM,EAAE,GAChB,aAAa;IAmBhB;;OAEG;IACH,gBAAgB,CACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAAE,GACjB,IAAI;IAIP;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAI9C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;IAI1E;;OAEG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI;IAI1E;;OAEG;IACH,cAAc,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,eAAe;IAIhD;;OAEG;IACH,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,EAAE;IAIzC;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIxC,OAAO,CAAC,sBAAsB;IA8B9B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,eAAe;CAOxB;AAMD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
package/dist/learning.js
DELETED
|
@@ -1,615 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Learning Module
|
|
4
|
-
* Context memory, pattern recognition, feedback integration, and knowledge base management
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.learningEngine = exports.LearningEngine = void 0;
|
|
8
|
-
const types_1 = require("./types");
|
|
9
|
-
const events_1 = require("events");
|
|
10
|
-
// ============================================================================
|
|
11
|
-
// PATTERN RECOGNITION ENGINE
|
|
12
|
-
// ============================================================================
|
|
13
|
-
class PatternRecognitionEngine {
|
|
14
|
-
constructor() {
|
|
15
|
-
this.patterns = new Map();
|
|
16
|
-
}
|
|
17
|
-
recognize(input, context) {
|
|
18
|
-
const matchedPatterns = [];
|
|
19
|
-
this.patterns.forEach(pattern => {
|
|
20
|
-
const matchScore = this.calculateMatchScore(input, pattern.pattern);
|
|
21
|
-
if (matchScore > 0.7) {
|
|
22
|
-
matchedPatterns.push({
|
|
23
|
-
...pattern,
|
|
24
|
-
frequency: pattern.frequency + 1,
|
|
25
|
-
lastObserved: new Date()
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
|
-
// Also extract new patterns from input
|
|
30
|
-
const newPatterns = this.extractPatterns(input, context);
|
|
31
|
-
newPatterns.forEach(p => {
|
|
32
|
-
if (!this.patterns.has(p.id)) {
|
|
33
|
-
this.patterns.set(p.id, p);
|
|
34
|
-
matchedPatterns.push(p);
|
|
35
|
-
}
|
|
36
|
-
});
|
|
37
|
-
return matchedPatterns.sort((a, b) => b.successRate - a.successRate);
|
|
38
|
-
}
|
|
39
|
-
updatePatternSuccess(patternId, success) {
|
|
40
|
-
const pattern = this.patterns.get(patternId);
|
|
41
|
-
if (pattern) {
|
|
42
|
-
// Update success rate using exponential moving average
|
|
43
|
-
const alpha = 0.3;
|
|
44
|
-
pattern.successRate = alpha * (success ? 1 : 0) + (1 - alpha) * pattern.successRate;
|
|
45
|
-
pattern.lastObserved = new Date();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
calculateMatchScore(input, pattern) {
|
|
49
|
-
const inputWords = input.toLowerCase().split(/\s+/);
|
|
50
|
-
const patternWords = pattern.toLowerCase().split(/\s+/);
|
|
51
|
-
const matches = patternWords.filter(pw => inputWords.some(iw => iw.includes(pw) || pw.includes(iw))).length;
|
|
52
|
-
return matches / Math.max(patternWords.length, 1);
|
|
53
|
-
}
|
|
54
|
-
extractPatterns(input, context) {
|
|
55
|
-
const patterns = [];
|
|
56
|
-
// Extract query patterns
|
|
57
|
-
const queryPattern = this.extractQueryPattern(input);
|
|
58
|
-
if (queryPattern) {
|
|
59
|
-
patterns.push(queryPattern);
|
|
60
|
-
}
|
|
61
|
-
// Extract context patterns
|
|
62
|
-
const contextPattern = this.extractContextPattern(context);
|
|
63
|
-
if (contextPattern) {
|
|
64
|
-
patterns.push(contextPattern);
|
|
65
|
-
}
|
|
66
|
-
return patterns;
|
|
67
|
-
}
|
|
68
|
-
extractQueryPattern(input) {
|
|
69
|
-
// Extract key terms that form a pattern
|
|
70
|
-
const keyTerms = input
|
|
71
|
-
.toLowerCase()
|
|
72
|
-
.split(/\s+/)
|
|
73
|
-
.filter(w => w.length > 4 && !this.isStopWord(w));
|
|
74
|
-
if (keyTerms.length < 2)
|
|
75
|
-
return null;
|
|
76
|
-
return {
|
|
77
|
-
id: `pattern_query_${keyTerms.join('_')}`,
|
|
78
|
-
type: 'query_pattern',
|
|
79
|
-
pattern: keyTerms.join(' '),
|
|
80
|
-
frequency: 1,
|
|
81
|
-
successRate: 0.5,
|
|
82
|
-
lastObserved: new Date()
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
extractContextPattern(context) {
|
|
86
|
-
const topics = this.extractTopics(context);
|
|
87
|
-
if (topics.length < 2)
|
|
88
|
-
return null;
|
|
89
|
-
return {
|
|
90
|
-
id: `pattern_context_${topics.join('_')}`,
|
|
91
|
-
type: 'response_pattern',
|
|
92
|
-
pattern: topics.join(' '),
|
|
93
|
-
frequency: 1,
|
|
94
|
-
successRate: 0.5,
|
|
95
|
-
lastObserved: new Date()
|
|
96
|
-
};
|
|
97
|
-
}
|
|
98
|
-
isStopWord(word) {
|
|
99
|
-
const stopWords = new Set(['what', 'how', 'when', 'where', 'why', 'who', 'which', 'this', 'that', 'these', 'those']);
|
|
100
|
-
return stopWords.has(word.toLowerCase());
|
|
101
|
-
}
|
|
102
|
-
extractTopics(text) {
|
|
103
|
-
return text
|
|
104
|
-
.toLowerCase()
|
|
105
|
-
.match(/\b\w{5,}\b/g)
|
|
106
|
-
?.filter((w, i, arr) => arr.indexOf(w) === i)
|
|
107
|
-
?.slice(0, 5) || [];
|
|
108
|
-
}
|
|
109
|
-
getPatternsByType(type) {
|
|
110
|
-
return Array.from(this.patterns.values()).filter(p => p.type === type);
|
|
111
|
-
}
|
|
112
|
-
getTopPatterns(limit = 10) {
|
|
113
|
-
return Array.from(this.patterns.values())
|
|
114
|
-
.sort((a, b) => b.successRate * b.frequency - a.successRate * a.frequency)
|
|
115
|
-
.slice(0, limit);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// ============================================================================
|
|
119
|
-
// KNOWLEDGE GRAPH MANAGER
|
|
120
|
-
// ============================================================================
|
|
121
|
-
class KnowledgeGraphManager {
|
|
122
|
-
constructor() {
|
|
123
|
-
this.graph = {
|
|
124
|
-
nodes: [],
|
|
125
|
-
edges: [],
|
|
126
|
-
version: 1,
|
|
127
|
-
lastUpdated: new Date()
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
addNode(node) {
|
|
131
|
-
const newNode = {
|
|
132
|
-
...node,
|
|
133
|
-
id: `node_${Date.now()}_${Math.random().toString(36).substr(2, 5)}`
|
|
134
|
-
};
|
|
135
|
-
// Check for similar existing nodes
|
|
136
|
-
const existingNode = this.findSimilarNode(newNode);
|
|
137
|
-
if (existingNode) {
|
|
138
|
-
// Merge with existing node
|
|
139
|
-
this.mergeNodes(existingNode, newNode);
|
|
140
|
-
return existingNode;
|
|
141
|
-
}
|
|
142
|
-
this.graph.nodes.push(newNode);
|
|
143
|
-
this.updateGraph();
|
|
144
|
-
return newNode;
|
|
145
|
-
}
|
|
146
|
-
addEdge(from, to, relation, strength, evidence) {
|
|
147
|
-
// Check if edge already exists
|
|
148
|
-
const existingEdge = this.graph.edges.find(e => e.from === from && e.to === to && e.relation === relation);
|
|
149
|
-
if (existingEdge) {
|
|
150
|
-
// Update existing edge strength
|
|
151
|
-
existingEdge.strength = Math.min(1, existingEdge.strength + strength * 0.1);
|
|
152
|
-
existingEdge.evidence = [...new Set([...existingEdge.evidence, ...evidence])];
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
this.graph.edges.push({
|
|
156
|
-
from,
|
|
157
|
-
to,
|
|
158
|
-
relation,
|
|
159
|
-
strength,
|
|
160
|
-
evidence
|
|
161
|
-
});
|
|
162
|
-
}
|
|
163
|
-
this.updateGraph();
|
|
164
|
-
}
|
|
165
|
-
findRelated(nodeId, maxDepth = 2) {
|
|
166
|
-
const related = new Set();
|
|
167
|
-
const visited = new Set();
|
|
168
|
-
const traverse = (currentId, depth) => {
|
|
169
|
-
if (depth > maxDepth || visited.has(currentId))
|
|
170
|
-
return;
|
|
171
|
-
visited.add(currentId);
|
|
172
|
-
this.graph.edges
|
|
173
|
-
.filter(e => e.from === currentId || e.to === currentId)
|
|
174
|
-
.forEach(e => {
|
|
175
|
-
const relatedId = e.from === currentId ? e.to : e.from;
|
|
176
|
-
related.add(relatedId);
|
|
177
|
-
traverse(relatedId, depth + 1);
|
|
178
|
-
});
|
|
179
|
-
};
|
|
180
|
-
traverse(nodeId, 0);
|
|
181
|
-
return this.graph.nodes.filter(n => related.has(n.id));
|
|
182
|
-
}
|
|
183
|
-
query(query) {
|
|
184
|
-
const queryWords = query.toLowerCase().split(/\s+/);
|
|
185
|
-
return this.graph.nodes
|
|
186
|
-
.map(node => ({
|
|
187
|
-
node,
|
|
188
|
-
score: this.calculateRelevance(node, queryWords)
|
|
189
|
-
}))
|
|
190
|
-
.filter(({ score }) => score > 0.3)
|
|
191
|
-
.sort((a, b) => b.score - a.score)
|
|
192
|
-
.map(({ node }) => node);
|
|
193
|
-
}
|
|
194
|
-
infer(fromNodeId, relationType) {
|
|
195
|
-
const edges = this.graph.edges.filter(e => e.from === fromNodeId &&
|
|
196
|
-
(relationType ? e.relation === relationType : true) &&
|
|
197
|
-
e.strength > 0.5);
|
|
198
|
-
return edges.map(e => this.graph.nodes.find(n => n.id === e.to)).filter(Boolean);
|
|
199
|
-
}
|
|
200
|
-
findSimilarNode(node) {
|
|
201
|
-
return this.graph.nodes.find(n => {
|
|
202
|
-
const labelSimilarity = this.calculateSimilarity(n.label, node.label);
|
|
203
|
-
return labelSimilarity > 0.8;
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
mergeNodes(existing, newNode) {
|
|
207
|
-
// Merge properties
|
|
208
|
-
existing.properties = { ...existing.properties, ...newNode.properties };
|
|
209
|
-
// Update confidence
|
|
210
|
-
existing.confidence = Math.max(existing.confidence, newNode.confidence);
|
|
211
|
-
// Merge sources
|
|
212
|
-
existing.sources = [...new Set([...existing.sources, ...newNode.sources])];
|
|
213
|
-
}
|
|
214
|
-
calculateRelevance(node, queryWords) {
|
|
215
|
-
const nodeText = `${node.label} ${JSON.stringify(node.properties)}`.toLowerCase();
|
|
216
|
-
const matches = queryWords.filter(qw => nodeText.includes(qw)).length;
|
|
217
|
-
return matches / queryWords.length * node.confidence;
|
|
218
|
-
}
|
|
219
|
-
calculateSimilarity(str1, str2) {
|
|
220
|
-
const words1 = str1.toLowerCase().split(/\s+/);
|
|
221
|
-
const words2 = str2.toLowerCase().split(/\s+/);
|
|
222
|
-
const intersection = words1.filter(w => words2.includes(w));
|
|
223
|
-
const union = [...new Set([...words1, ...words2])];
|
|
224
|
-
return intersection.length / union.length;
|
|
225
|
-
}
|
|
226
|
-
updateGraph() {
|
|
227
|
-
this.graph.version++;
|
|
228
|
-
this.graph.lastUpdated = new Date();
|
|
229
|
-
}
|
|
230
|
-
getGraph() {
|
|
231
|
-
return { ...this.graph };
|
|
232
|
-
}
|
|
233
|
-
exportGraph() {
|
|
234
|
-
return JSON.stringify(this.graph, null, 2);
|
|
235
|
-
}
|
|
236
|
-
importGraph(json) {
|
|
237
|
-
this.graph = JSON.parse(json);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
// ============================================================================
|
|
241
|
-
// PREFERENCE LEARNING ENGINE
|
|
242
|
-
// ============================================================================
|
|
243
|
-
class PreferenceLearningEngine {
|
|
244
|
-
constructor() {
|
|
245
|
-
this.preferences = new Map();
|
|
246
|
-
this.defaultPreferences = {
|
|
247
|
-
responseStyle: 'detailed',
|
|
248
|
-
preferredSources: [],
|
|
249
|
-
topicInterests: [],
|
|
250
|
-
excludedTopics: [],
|
|
251
|
-
language: 'en'
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
getPreferences(userId) {
|
|
255
|
-
if (userId && this.preferences.has(userId)) {
|
|
256
|
-
return this.preferences.get(userId);
|
|
257
|
-
}
|
|
258
|
-
return { ...this.defaultPreferences };
|
|
259
|
-
}
|
|
260
|
-
updatePreferences(userId, updates) {
|
|
261
|
-
const current = this.getPreferences(userId);
|
|
262
|
-
this.preferences.set(userId, { ...current, ...updates });
|
|
263
|
-
}
|
|
264
|
-
learnFromInteraction(userId, interaction) {
|
|
265
|
-
const prefs = this.getPreferences(userId);
|
|
266
|
-
// Learn from query patterns
|
|
267
|
-
const queryTopics = this.extractTopics(interaction.query);
|
|
268
|
-
prefs.topicInterests = [...new Set([...prefs.topicInterests, ...queryTopics])];
|
|
269
|
-
// Learn from feedback
|
|
270
|
-
if (interaction.feedback) {
|
|
271
|
-
this.learnFromFeedback(userId, interaction.feedback);
|
|
272
|
-
}
|
|
273
|
-
// Infer response style preference
|
|
274
|
-
if (interaction.response.length < 100) {
|
|
275
|
-
prefs.responseStyle = 'concise';
|
|
276
|
-
}
|
|
277
|
-
else if (interaction.response.length > 500) {
|
|
278
|
-
prefs.responseStyle = 'detailed';
|
|
279
|
-
}
|
|
280
|
-
this.preferences.set(userId, prefs);
|
|
281
|
-
}
|
|
282
|
-
learnFromFeedback(userId, feedback) {
|
|
283
|
-
const prefs = this.getPreferences(userId);
|
|
284
|
-
if (feedback.rating >= 4) {
|
|
285
|
-
// User liked the response - reinforce current style
|
|
286
|
-
}
|
|
287
|
-
else if (feedback.rating <= 2) {
|
|
288
|
-
// User didn't like it - try different approach
|
|
289
|
-
prefs.responseStyle = prefs.responseStyle === 'detailed' ? 'concise' : 'detailed';
|
|
290
|
-
}
|
|
291
|
-
// Process corrections
|
|
292
|
-
if (feedback.corrections && feedback.corrections.length > 0) {
|
|
293
|
-
// Learn from corrections
|
|
294
|
-
}
|
|
295
|
-
this.preferences.set(userId, prefs);
|
|
296
|
-
}
|
|
297
|
-
extractTopics(text) {
|
|
298
|
-
return text
|
|
299
|
-
.toLowerCase()
|
|
300
|
-
.match(/\b\w{5,}\b/g)
|
|
301
|
-
?.filter((w, i, arr) => arr.indexOf(w) === i)
|
|
302
|
-
?.slice(0, 3) || [];
|
|
303
|
-
}
|
|
304
|
-
recommendPreferences(userId) {
|
|
305
|
-
const prefs = this.getPreferences(userId);
|
|
306
|
-
const recommendations = {};
|
|
307
|
-
// Recommend based on interaction history
|
|
308
|
-
if (prefs.topicInterests.length > 5) {
|
|
309
|
-
recommendations.topicInterests = prefs.topicInterests.slice(0, 10);
|
|
310
|
-
}
|
|
311
|
-
return recommendations;
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
// ============================================================================
|
|
315
|
-
// CONTEXT MEMORY MANAGER
|
|
316
|
-
// ============================================================================
|
|
317
|
-
class ContextMemoryManager {
|
|
318
|
-
constructor() {
|
|
319
|
-
this.interactions = new Map();
|
|
320
|
-
this.maxContextSize = 10;
|
|
321
|
-
}
|
|
322
|
-
addInteraction(sessionId, interaction) {
|
|
323
|
-
if (!this.interactions.has(sessionId)) {
|
|
324
|
-
this.interactions.set(sessionId, []);
|
|
325
|
-
}
|
|
326
|
-
const sessionInteractions = this.interactions.get(sessionId);
|
|
327
|
-
sessionInteractions.push(interaction);
|
|
328
|
-
// Keep only recent interactions
|
|
329
|
-
if (sessionInteractions.length > this.maxContextSize) {
|
|
330
|
-
sessionInteractions.shift();
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
getContext(sessionId) {
|
|
334
|
-
return this.interactions.get(sessionId) || [];
|
|
335
|
-
}
|
|
336
|
-
getRelevantContext(sessionId, query) {
|
|
337
|
-
const allContext = this.getContext(sessionId);
|
|
338
|
-
const queryWords = query.toLowerCase().split(/\s+/);
|
|
339
|
-
return allContext
|
|
340
|
-
.map(interaction => ({
|
|
341
|
-
interaction,
|
|
342
|
-
relevance: this.calculateRelevance(interaction, queryWords)
|
|
343
|
-
}))
|
|
344
|
-
.filter(({ relevance }) => relevance > 0.3)
|
|
345
|
-
.sort((a, b) => b.relevance - a.relevance)
|
|
346
|
-
.map(({ interaction }) => interaction);
|
|
347
|
-
}
|
|
348
|
-
summarizeContext(sessionId) {
|
|
349
|
-
const context = this.getContext(sessionId);
|
|
350
|
-
if (context.length === 0)
|
|
351
|
-
return '';
|
|
352
|
-
const topics = new Set();
|
|
353
|
-
const keyPoints = [];
|
|
354
|
-
context.forEach(interaction => {
|
|
355
|
-
const queryTopics = this.extractTopics(interaction.query);
|
|
356
|
-
queryTopics.forEach(t => topics.add(t));
|
|
357
|
-
if (interaction.feedback?.helpful) {
|
|
358
|
-
keyPoints.push(interaction.response.substring(0, 100));
|
|
359
|
-
}
|
|
360
|
-
});
|
|
361
|
-
return `Previous topics: ${Array.from(topics).join(', ')}. ` +
|
|
362
|
-
`Key points: ${keyPoints.join('; ')}`;
|
|
363
|
-
}
|
|
364
|
-
clearContext(sessionId) {
|
|
365
|
-
this.interactions.delete(sessionId);
|
|
366
|
-
}
|
|
367
|
-
calculateRelevance(interaction, queryWords) {
|
|
368
|
-
const text = `${interaction.query} ${interaction.response}`.toLowerCase();
|
|
369
|
-
const matches = queryWords.filter(qw => text.includes(qw)).length;
|
|
370
|
-
return matches / queryWords.length;
|
|
371
|
-
}
|
|
372
|
-
extractTopics(text) {
|
|
373
|
-
return text
|
|
374
|
-
.toLowerCase()
|
|
375
|
-
.match(/\b\w{5,}\b/g)
|
|
376
|
-
?.filter((w, i, arr) => arr.indexOf(w) === i)
|
|
377
|
-
?.slice(0, 5) || [];
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
// ============================================================================
|
|
381
|
-
// MAIN LEARNING ENGINE
|
|
382
|
-
// ============================================================================
|
|
383
|
-
class LearningEngine extends events_1.EventEmitter {
|
|
384
|
-
constructor() {
|
|
385
|
-
super();
|
|
386
|
-
this.contexts = new Map();
|
|
387
|
-
this.patternEngine = new PatternRecognitionEngine();
|
|
388
|
-
this.knowledgeGraph = new KnowledgeGraphManager();
|
|
389
|
-
this.preferenceEngine = new PreferenceLearningEngine();
|
|
390
|
-
this.contextManager = new ContextMemoryManager();
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Create or get learning context for a session
|
|
394
|
-
*/
|
|
395
|
-
getOrCreateContext(sessionId, userId) {
|
|
396
|
-
if (this.contexts.has(sessionId)) {
|
|
397
|
-
return this.contexts.get(sessionId);
|
|
398
|
-
}
|
|
399
|
-
const context = {
|
|
400
|
-
id: `ctx_${Date.now()}`,
|
|
401
|
-
sessionId,
|
|
402
|
-
userId,
|
|
403
|
-
topic: '',
|
|
404
|
-
previousInteractions: [],
|
|
405
|
-
learnedPatterns: [],
|
|
406
|
-
knowledgeGraph: this.knowledgeGraph.getGraph(),
|
|
407
|
-
preferences: this.preferenceEngine.getPreferences(userId)
|
|
408
|
-
};
|
|
409
|
-
this.contexts.set(sessionId, context);
|
|
410
|
-
return context;
|
|
411
|
-
}
|
|
412
|
-
/**
|
|
413
|
-
* Record an interaction and learn from it
|
|
414
|
-
*/
|
|
415
|
-
recordInteraction(sessionId, query, response, feedback) {
|
|
416
|
-
const context = this.getOrCreateContext(sessionId);
|
|
417
|
-
const interaction = {
|
|
418
|
-
id: `int_${Date.now()}`,
|
|
419
|
-
timestamp: new Date(),
|
|
420
|
-
query,
|
|
421
|
-
response,
|
|
422
|
-
feedback,
|
|
423
|
-
contextSnapshot: { ...context }
|
|
424
|
-
};
|
|
425
|
-
// Add to context memory
|
|
426
|
-
this.contextManager.addInteraction(sessionId, interaction);
|
|
427
|
-
context.previousInteractions.push(interaction);
|
|
428
|
-
// Learn patterns
|
|
429
|
-
const patterns = this.patternEngine.recognize(query, response);
|
|
430
|
-
context.learnedPatterns.push(...patterns);
|
|
431
|
-
// Update preferences if userId exists
|
|
432
|
-
if (context.userId) {
|
|
433
|
-
this.preferenceEngine.learnFromInteraction(context.userId, interaction);
|
|
434
|
-
context.preferences = this.preferenceEngine.getPreferences(context.userId);
|
|
435
|
-
}
|
|
436
|
-
// Extract and add knowledge
|
|
437
|
-
this.extractAndAddKnowledge(query, response);
|
|
438
|
-
this.emit('interaction_recorded', {
|
|
439
|
-
id: interaction.id,
|
|
440
|
-
stage: types_1.ThinkingStage.LEARNING,
|
|
441
|
-
timestamp: new Date(),
|
|
442
|
-
data: { sessionId, patternsFound: patterns.length }
|
|
443
|
-
});
|
|
444
|
-
return interaction;
|
|
445
|
-
}
|
|
446
|
-
/**
|
|
447
|
-
* Get relevant context for a query
|
|
448
|
-
*/
|
|
449
|
-
getRelevantContext(sessionId, query) {
|
|
450
|
-
const context = this.getOrCreateContext(sessionId);
|
|
451
|
-
// Get relevant interactions
|
|
452
|
-
const interactions = this.contextManager.getRelevantContext(sessionId, query);
|
|
453
|
-
// Get relevant patterns
|
|
454
|
-
const patterns = this.patternEngine.recognize(query, '');
|
|
455
|
-
// Get relevant knowledge
|
|
456
|
-
const knowledge = this.knowledgeGraph.query(query);
|
|
457
|
-
// Get context summary
|
|
458
|
-
const summary = this.contextManager.summarizeContext(sessionId);
|
|
459
|
-
return { interactions, patterns, knowledge, summary };
|
|
460
|
-
}
|
|
461
|
-
/**
|
|
462
|
-
* Add knowledge to the knowledge graph
|
|
463
|
-
*/
|
|
464
|
-
addKnowledge(label, type, properties, sources) {
|
|
465
|
-
const node = this.knowledgeGraph.addNode({
|
|
466
|
-
label,
|
|
467
|
-
type,
|
|
468
|
-
properties,
|
|
469
|
-
confidence: 0.8,
|
|
470
|
-
sources
|
|
471
|
-
});
|
|
472
|
-
this.emit('knowledge_added', {
|
|
473
|
-
id: node.id,
|
|
474
|
-
stage: types_1.ThinkingStage.LEARNING,
|
|
475
|
-
timestamp: new Date(),
|
|
476
|
-
data: { label, type }
|
|
477
|
-
});
|
|
478
|
-
return node;
|
|
479
|
-
}
|
|
480
|
-
/**
|
|
481
|
-
* Connect knowledge nodes
|
|
482
|
-
*/
|
|
483
|
-
connectKnowledge(fromId, toId, relation, strength, evidence) {
|
|
484
|
-
this.knowledgeGraph.addEdge(fromId, toId, relation, strength, evidence);
|
|
485
|
-
}
|
|
486
|
-
/**
|
|
487
|
-
* Query knowledge graph
|
|
488
|
-
*/
|
|
489
|
-
queryKnowledge(query) {
|
|
490
|
-
return this.knowledgeGraph.query(query);
|
|
491
|
-
}
|
|
492
|
-
/**
|
|
493
|
-
* Infer new knowledge
|
|
494
|
-
*/
|
|
495
|
-
inferKnowledge(fromNodeId, relationType) {
|
|
496
|
-
return this.knowledgeGraph.infer(fromNodeId, relationType);
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Update user preferences
|
|
500
|
-
*/
|
|
501
|
-
updatePreferences(userId, updates) {
|
|
502
|
-
this.preferenceEngine.updatePreferences(userId, updates);
|
|
503
|
-
}
|
|
504
|
-
/**
|
|
505
|
-
* Get user preferences
|
|
506
|
-
*/
|
|
507
|
-
getPreferences(userId) {
|
|
508
|
-
return this.preferenceEngine.getPreferences(userId);
|
|
509
|
-
}
|
|
510
|
-
/**
|
|
511
|
-
* Get top patterns
|
|
512
|
-
*/
|
|
513
|
-
getTopPatterns(limit) {
|
|
514
|
-
return this.patternEngine.getTopPatterns(limit);
|
|
515
|
-
}
|
|
516
|
-
/**
|
|
517
|
-
* Export knowledge graph
|
|
518
|
-
*/
|
|
519
|
-
exportKnowledgeGraph() {
|
|
520
|
-
return this.knowledgeGraph.exportGraph();
|
|
521
|
-
}
|
|
522
|
-
/**
|
|
523
|
-
* Import knowledge graph
|
|
524
|
-
*/
|
|
525
|
-
importKnowledgeGraph(json) {
|
|
526
|
-
this.knowledgeGraph.importGraph(json);
|
|
527
|
-
}
|
|
528
|
-
extractAndAddKnowledge(query, response) {
|
|
529
|
-
// Extract entities from query and response
|
|
530
|
-
const entities = this.extractEntities(`${query} ${response}`);
|
|
531
|
-
entities.forEach(entity => {
|
|
532
|
-
// Check if entity already exists
|
|
533
|
-
const existing = this.knowledgeGraph.query(entity);
|
|
534
|
-
if (existing.length === 0) {
|
|
535
|
-
this.addKnowledge(entity, 'entity', { firstSeen: new Date().toISOString() }, ['interaction']);
|
|
536
|
-
}
|
|
537
|
-
});
|
|
538
|
-
// Extract concepts
|
|
539
|
-
const concepts = this.extractConcepts(response);
|
|
540
|
-
concepts.forEach(concept => {
|
|
541
|
-
this.addKnowledge(concept, 'concept', { extractedFrom: 'response' }, ['learning_engine']);
|
|
542
|
-
});
|
|
543
|
-
}
|
|
544
|
-
extractEntities(text) {
|
|
545
|
-
const capitalizedWords = text.match(/\b[A-Z][a-z]+(?:\s+[A-Z][a-z]+)*\b/g) || [];
|
|
546
|
-
return [...new Set(capitalizedWords)];
|
|
547
|
-
}
|
|
548
|
-
extractConcepts(text) {
|
|
549
|
-
return text
|
|
550
|
-
.toLowerCase()
|
|
551
|
-
.match(/\b\w{6,}\b/g)
|
|
552
|
-
?.filter((w, i, arr) => arr.indexOf(w) === i)
|
|
553
|
-
?.slice(0, 5) || [];
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
exports.LearningEngine = LearningEngine;
|
|
557
|
-
// ============================================================================
|
|
558
|
-
// EXPORT SINGLETON INSTANCE
|
|
559
|
-
// ============================================================================
|
|
560
|
-
exports.learningEngine = new LearningEngine();
|
|
561
|
-
// ============================================================================
|
|
562
|
-
// EXAMPLE USAGE
|
|
563
|
-
// ============================================================================
|
|
564
|
-
/*
|
|
565
|
-
// Create learning context
|
|
566
|
-
const context = learningEngine.getOrCreateContext('session_123', 'user_456');
|
|
567
|
-
|
|
568
|
-
// Record interactions
|
|
569
|
-
const interaction1 = learningEngine.recordInteraction(
|
|
570
|
-
'session_123',
|
|
571
|
-
'What are the benefits of TypeScript?',
|
|
572
|
-
'TypeScript offers type safety, better IDE support, and easier refactoring...'
|
|
573
|
-
);
|
|
574
|
-
|
|
575
|
-
// Add feedback
|
|
576
|
-
learningEngine.recordInteraction(
|
|
577
|
-
'session_123',
|
|
578
|
-
'How do I set up TypeScript?',
|
|
579
|
-
'To set up TypeScript, first install it with npm...',
|
|
580
|
-
{ rating: 5, helpful: true, comments: 'Very helpful!' }
|
|
581
|
-
);
|
|
582
|
-
|
|
583
|
-
// Get relevant context
|
|
584
|
-
const relevant = learningEngine.getRelevantContext(
|
|
585
|
-
'session_123',
|
|
586
|
-
'TypeScript configuration'
|
|
587
|
-
);
|
|
588
|
-
|
|
589
|
-
// Add knowledge
|
|
590
|
-
const node = learningEngine.addKnowledge(
|
|
591
|
-
'TypeScript',
|
|
592
|
-
'concept',
|
|
593
|
-
{ category: 'programming_language', creator: 'Microsoft' },
|
|
594
|
-
['official_documentation']
|
|
595
|
-
);
|
|
596
|
-
|
|
597
|
-
// Connect knowledge
|
|
598
|
-
learningEngine.connectKnowledge(
|
|
599
|
-
node.id,
|
|
600
|
-
'node_javascript',
|
|
601
|
-
'superset_of',
|
|
602
|
-
0.95,
|
|
603
|
-
['TypeScript extends JavaScript']
|
|
604
|
-
);
|
|
605
|
-
|
|
606
|
-
// Query knowledge
|
|
607
|
-
const results = learningEngine.queryKnowledge('programming');
|
|
608
|
-
|
|
609
|
-
// Get patterns
|
|
610
|
-
const patterns = learningEngine.getTopPatterns(5);
|
|
611
|
-
|
|
612
|
-
// Export knowledge graph
|
|
613
|
-
const graphJson = learningEngine.exportKnowledgeGraph();
|
|
614
|
-
*/
|
|
615
|
-
//# sourceMappingURL=learning.js.map
|