@elizaos/plugin-experience 2.0.0-alpha.4 → 2.0.0-alpha.5
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/dist/actions/index.d.ts +2 -0
- package/dist/actions/index.d.ts.map +1 -0
- package/dist/actions/record-experience.d.ts +3 -0
- package/dist/actions/record-experience.d.ts.map +1 -0
- package/dist/build.d.ts +3 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/evaluators/experienceEvaluator.d.ts +3 -0
- package/dist/evaluators/experienceEvaluator.d.ts.map +1 -0
- package/dist/generated/prompts/typescript/prompts.d.ts +12 -0
- package/dist/generated/prompts/typescript/prompts.d.ts.map +1 -0
- package/dist/generated/specs/spec-helpers.d.ts +49 -0
- package/dist/generated/specs/spec-helpers.d.ts.map +1 -0
- package/dist/generated/specs/specs.d.ts +159 -0
- package/dist/generated/specs/specs.d.ts.map +1 -0
- package/dist/index.browser.d.ts +4 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/node/index.node.js.map +2 -2
- package/dist/providers/experienceProvider.d.ts +3 -0
- package/dist/providers/experienceProvider.d.ts.map +1 -0
- package/dist/service.d.ts +45 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/types.d.ts +89 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/confidenceDecay.d.ts +34 -0
- package/dist/utils/confidenceDecay.d.ts.map +1 -0
- package/dist/utils/experienceAnalyzer.d.ts +16 -0
- package/dist/utils/experienceAnalyzer.d.ts.map +1 -0
- package/dist/utils/experienceFormatter.d.ts +23 -0
- package/dist/utils/experienceFormatter.d.ts.map +1 -0
- package/dist/utils/experienceRelationships.d.ts +25 -0
- package/dist/utils/experienceRelationships.d.ts.map +1 -0
- package/package.json +9 -2
- package/dist/node/tsconfig.build.tsbuildinfo +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-experience.d.ts","sourceRoot":"","sources":["../../actions/record-experience.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,MAAM,EAUZ,MAAM,eAAe,CAAC;AAKvB,eAAO,MAAM,sBAAsB,EAAE,MAkDpC,CAAC"}
|
package/dist/build.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../build.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experienceEvaluator.d.ts","sourceRoot":"","sources":["../../evaluators/experienceEvaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,SAAS,EAQf,MAAM,eAAe,CAAC;AAavB,eAAO,MAAM,mBAAmB,EAAE,SA8MjC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated prompt templates
|
|
3
|
+
* DO NOT EDIT - Generated from ../../../../prompts/*.txt
|
|
4
|
+
*
|
|
5
|
+
* These prompts use Handlebars-style template syntax:
|
|
6
|
+
* - {{variableName}} for simple substitution
|
|
7
|
+
* - {{#each items}}...{{/each}} for iteration
|
|
8
|
+
* - {{#if condition}}...{{/if}} for conditionals
|
|
9
|
+
*/
|
|
10
|
+
export declare const extractExperiencesTemplate = "# Task: Extract Novel Learning Experiences\n\nAnalyze this conversation for novel learning experiences that would be surprising or valuable to remember.\n\n## Conversation context\n{{conversation_context}}\n\n## Existing similar experiences\n{{existing_experiences}}\n\n## Instructions\nExtract ONLY experiences that are:\n1. Genuinely novel (not in existing experiences)\n2. Actionable learnings about how things work\n3. Corrections of previous mistakes or assumptions\n4. Discoveries of new capabilities or patterns\n5. Surprising outcomes that contradict expectations\n\nFocus on technical knowledge, patterns, and cause-effect relationships that transfer to other contexts.\nAvoid personal details, user-specific information, or routine interactions.\n\nRespond with JSON array of experiences (max 3):\n[{\n \"type\": \"DISCOVERY|CORRECTION|SUCCESS|LEARNING\",\n \"learning\": \"What was learned (generic, transferable)\",\n \"context\": \"What situation triggered this (anonymized)\",\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"Why this is novel and valuable\"\n}]\n\nReturn empty array [] if no novel experiences found.";
|
|
11
|
+
export declare const EXTRACT_EXPERIENCES_TEMPLATE = "# Task: Extract Novel Learning Experiences\n\nAnalyze this conversation for novel learning experiences that would be surprising or valuable to remember.\n\n## Conversation context\n{{conversation_context}}\n\n## Existing similar experiences\n{{existing_experiences}}\n\n## Instructions\nExtract ONLY experiences that are:\n1. Genuinely novel (not in existing experiences)\n2. Actionable learnings about how things work\n3. Corrections of previous mistakes or assumptions\n4. Discoveries of new capabilities or patterns\n5. Surprising outcomes that contradict expectations\n\nFocus on technical knowledge, patterns, and cause-effect relationships that transfer to other contexts.\nAvoid personal details, user-specific information, or routine interactions.\n\nRespond with JSON array of experiences (max 3):\n[{\n \"type\": \"DISCOVERY|CORRECTION|SUCCESS|LEARNING\",\n \"learning\": \"What was learned (generic, transferable)\",\n \"context\": \"What situation triggered this (anonymized)\",\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"Why this is novel and valuable\"\n}]\n\nReturn empty array [] if no novel experiences found.";
|
|
12
|
+
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../../generated/prompts/typescript/prompts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,eAAO,MAAM,0BAA0B,mnCA8Bc,CAAC;AAEtD,eAAO,MAAM,4BAA4B,mnCAA6B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper functions to lookup action/provider/evaluator specs by name.
|
|
3
|
+
* These allow language-specific implementations to import their text content
|
|
4
|
+
* (description, similes, examples) from the centralized specs.
|
|
5
|
+
*
|
|
6
|
+
* DO NOT EDIT the spec data - update prompts/actions.json, prompts/providers.json, prompts/evaluators.json and regenerate.
|
|
7
|
+
*/
|
|
8
|
+
import { type ActionDoc, type EvaluatorDoc, type ProviderDoc } from "./specs";
|
|
9
|
+
/**
|
|
10
|
+
* Get an action spec by name from the core specs.
|
|
11
|
+
* @param name - The action name
|
|
12
|
+
* @returns The action spec or undefined if not found
|
|
13
|
+
*/
|
|
14
|
+
export declare function getActionSpec(name: string): ActionDoc | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Get an action spec by name, throwing if not found.
|
|
17
|
+
* @param name - The action name
|
|
18
|
+
* @returns The action spec
|
|
19
|
+
* @throws Error if the action is not found
|
|
20
|
+
*/
|
|
21
|
+
export declare function requireActionSpec(name: string): ActionDoc;
|
|
22
|
+
/**
|
|
23
|
+
* Get a provider spec by name from the core specs.
|
|
24
|
+
* @param name - The provider name
|
|
25
|
+
* @returns The provider spec or undefined if not found
|
|
26
|
+
*/
|
|
27
|
+
export declare function getProviderSpec(name: string): ProviderDoc | undefined;
|
|
28
|
+
/**
|
|
29
|
+
* Get a provider spec by name, throwing if not found.
|
|
30
|
+
* @param name - The provider name
|
|
31
|
+
* @returns The provider spec
|
|
32
|
+
* @throws Error if the provider is not found
|
|
33
|
+
*/
|
|
34
|
+
export declare function requireProviderSpec(name: string): ProviderDoc;
|
|
35
|
+
/**
|
|
36
|
+
* Get an evaluator spec by name from the core specs.
|
|
37
|
+
* @param name - The evaluator name
|
|
38
|
+
* @returns The evaluator spec or undefined if not found
|
|
39
|
+
*/
|
|
40
|
+
export declare function getEvaluatorSpec(name: string): EvaluatorDoc | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Get an evaluator spec by name, throwing if not found.
|
|
43
|
+
* @param name - The evaluator name
|
|
44
|
+
* @returns The evaluator spec
|
|
45
|
+
* @throws Error if the evaluator is not found
|
|
46
|
+
*/
|
|
47
|
+
export declare function requireEvaluatorSpec(name: string): EvaluatorDoc;
|
|
48
|
+
export type { ActionDoc, ProviderDoc, EvaluatorDoc };
|
|
49
|
+
//# sourceMappingURL=spec-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec-helpers.d.ts","sourceRoot":"","sources":["../../../generated/specs/spec-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,SAAS,EAOd,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAgBjB;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEjE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAMzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAErE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAM7D;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEvE;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAM/D;AAGD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated canonical action/provider/evaluator docs for plugin-experience.
|
|
3
|
+
* DO NOT EDIT - Generated from prompts/specs/**.
|
|
4
|
+
*/
|
|
5
|
+
export type ActionDoc = {
|
|
6
|
+
name: string;
|
|
7
|
+
description: string;
|
|
8
|
+
similes?: readonly string[];
|
|
9
|
+
parameters?: readonly unknown[];
|
|
10
|
+
examples?: readonly (readonly unknown[])[];
|
|
11
|
+
};
|
|
12
|
+
export type ProviderDoc = {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
position?: number;
|
|
16
|
+
dynamic?: boolean;
|
|
17
|
+
};
|
|
18
|
+
export type EvaluatorDoc = {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
similes?: readonly string[];
|
|
22
|
+
alwaysRun?: boolean;
|
|
23
|
+
examples?: readonly unknown[];
|
|
24
|
+
};
|
|
25
|
+
export declare const coreActionsSpec: {
|
|
26
|
+
readonly version: "1.0.0";
|
|
27
|
+
readonly actions: readonly [{
|
|
28
|
+
readonly name: "RECORD_EXPERIENCE";
|
|
29
|
+
readonly description: "Record a learning or experience for future reference. Use this when the user explicitly asks you to remember something or when you've learned something important.";
|
|
30
|
+
readonly similes: readonly ["REMEMBER", "LEARN", "STORE_EXPERIENCE", "SAVE_EXPERIENCE", "RECORD_LEARNING"];
|
|
31
|
+
readonly parameters: readonly [];
|
|
32
|
+
readonly examples: readonly [readonly [{
|
|
33
|
+
readonly name: "{{name1}}";
|
|
34
|
+
readonly content: {
|
|
35
|
+
readonly text: "Remember that installing dependencies is required for Python scripts";
|
|
36
|
+
};
|
|
37
|
+
}, {
|
|
38
|
+
readonly name: "{{name2}}";
|
|
39
|
+
readonly content: {
|
|
40
|
+
readonly text: "I'll record that experience. Learning: Need to install dependencies before running Python scripts.";
|
|
41
|
+
readonly actions: readonly ["RECORD_EXPERIENCE"];
|
|
42
|
+
};
|
|
43
|
+
}], readonly [{
|
|
44
|
+
readonly name: "{{name1}}";
|
|
45
|
+
readonly content: {
|
|
46
|
+
readonly text: "Remember that users prefer shorter responses";
|
|
47
|
+
};
|
|
48
|
+
}, {
|
|
49
|
+
readonly name: "{{name2}}";
|
|
50
|
+
readonly content: {
|
|
51
|
+
readonly text: "I'll remember that preference.";
|
|
52
|
+
readonly actions: readonly ["RECORD_EXPERIENCE"];
|
|
53
|
+
};
|
|
54
|
+
}], readonly [{
|
|
55
|
+
readonly name: "{{name1}}";
|
|
56
|
+
readonly content: {
|
|
57
|
+
readonly text: "What's 2+2?";
|
|
58
|
+
};
|
|
59
|
+
}, {
|
|
60
|
+
readonly name: "{{name2}}";
|
|
61
|
+
readonly content: {
|
|
62
|
+
readonly text: "2+2 equals 4.";
|
|
63
|
+
};
|
|
64
|
+
}], readonly [{
|
|
65
|
+
readonly name: "{{name1}}";
|
|
66
|
+
readonly content: {
|
|
67
|
+
readonly text: "Can you help me with math?";
|
|
68
|
+
};
|
|
69
|
+
}, {
|
|
70
|
+
readonly name: "{{name2}}";
|
|
71
|
+
readonly content: {
|
|
72
|
+
readonly text: "Of course! What math problem do you need help with?";
|
|
73
|
+
};
|
|
74
|
+
}]];
|
|
75
|
+
}];
|
|
76
|
+
};
|
|
77
|
+
export declare const allActionsSpec: {
|
|
78
|
+
readonly version: "1.0.0";
|
|
79
|
+
readonly actions: readonly [{
|
|
80
|
+
readonly name: "RECORD_EXPERIENCE";
|
|
81
|
+
readonly description: "Record a learning or experience for future reference. Use this when the user explicitly asks you to remember something or when you've learned something important.";
|
|
82
|
+
readonly similes: readonly ["REMEMBER", "LEARN", "STORE_EXPERIENCE", "SAVE_EXPERIENCE", "RECORD_LEARNING"];
|
|
83
|
+
readonly parameters: readonly [];
|
|
84
|
+
readonly examples: readonly [readonly [{
|
|
85
|
+
readonly name: "{{name1}}";
|
|
86
|
+
readonly content: {
|
|
87
|
+
readonly text: "Remember that installing dependencies is required for Python scripts";
|
|
88
|
+
};
|
|
89
|
+
}, {
|
|
90
|
+
readonly name: "{{name2}}";
|
|
91
|
+
readonly content: {
|
|
92
|
+
readonly text: "I'll record that experience. Learning: Need to install dependencies before running Python scripts.";
|
|
93
|
+
readonly actions: readonly ["RECORD_EXPERIENCE"];
|
|
94
|
+
};
|
|
95
|
+
}], readonly [{
|
|
96
|
+
readonly name: "{{name1}}";
|
|
97
|
+
readonly content: {
|
|
98
|
+
readonly text: "Remember that users prefer shorter responses";
|
|
99
|
+
};
|
|
100
|
+
}, {
|
|
101
|
+
readonly name: "{{name2}}";
|
|
102
|
+
readonly content: {
|
|
103
|
+
readonly text: "I'll remember that preference.";
|
|
104
|
+
readonly actions: readonly ["RECORD_EXPERIENCE"];
|
|
105
|
+
};
|
|
106
|
+
}], readonly [{
|
|
107
|
+
readonly name: "{{name1}}";
|
|
108
|
+
readonly content: {
|
|
109
|
+
readonly text: "What's 2+2?";
|
|
110
|
+
};
|
|
111
|
+
}, {
|
|
112
|
+
readonly name: "{{name2}}";
|
|
113
|
+
readonly content: {
|
|
114
|
+
readonly text: "2+2 equals 4.";
|
|
115
|
+
};
|
|
116
|
+
}], readonly [{
|
|
117
|
+
readonly name: "{{name1}}";
|
|
118
|
+
readonly content: {
|
|
119
|
+
readonly text: "Can you help me with math?";
|
|
120
|
+
};
|
|
121
|
+
}, {
|
|
122
|
+
readonly name: "{{name2}}";
|
|
123
|
+
readonly content: {
|
|
124
|
+
readonly text: "Of course! What math problem do you need help with?";
|
|
125
|
+
};
|
|
126
|
+
}]];
|
|
127
|
+
}];
|
|
128
|
+
};
|
|
129
|
+
export declare const coreProvidersSpec: {
|
|
130
|
+
readonly version: "1.0.0";
|
|
131
|
+
readonly providers: readonly [{
|
|
132
|
+
readonly name: "experienceProvider";
|
|
133
|
+
readonly description: "Provides relevant past experiences and learnings for the current context";
|
|
134
|
+
readonly dynamic: true;
|
|
135
|
+
}];
|
|
136
|
+
};
|
|
137
|
+
export declare const allProvidersSpec: {
|
|
138
|
+
readonly version: "1.0.0";
|
|
139
|
+
readonly providers: readonly [{
|
|
140
|
+
readonly name: "experienceProvider";
|
|
141
|
+
readonly description: "Provides relevant past experiences and learnings for the current context";
|
|
142
|
+
readonly dynamic: true;
|
|
143
|
+
}];
|
|
144
|
+
};
|
|
145
|
+
export declare const coreEvaluatorsSpec: {
|
|
146
|
+
readonly version: "1.0.0";
|
|
147
|
+
readonly evaluators: readonly [];
|
|
148
|
+
};
|
|
149
|
+
export declare const allEvaluatorsSpec: {
|
|
150
|
+
readonly version: "1.0.0";
|
|
151
|
+
readonly evaluators: readonly [];
|
|
152
|
+
};
|
|
153
|
+
export declare const coreActionDocs: readonly ActionDoc[];
|
|
154
|
+
export declare const allActionDocs: readonly ActionDoc[];
|
|
155
|
+
export declare const coreProviderDocs: readonly ProviderDoc[];
|
|
156
|
+
export declare const allProviderDocs: readonly ProviderDoc[];
|
|
157
|
+
export declare const coreEvaluatorDocs: readonly EvaluatorDoc[];
|
|
158
|
+
export declare const allEvaluatorDocs: readonly EvaluatorDoc[];
|
|
159
|
+
//# sourceMappingURL=specs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"specs.d.ts","sourceRoot":"","sources":["../../../generated/specs/specs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,SAAS,CAAC,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuElB,CAAC;AACX,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuEjB,CAAC;AACX,eAAO,MAAM,iBAAiB;;;;;;;CASpB,CAAC;AACX,eAAO,MAAM,gBAAgB;;;;;;;CASnB,CAAC;AACX,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AACX,eAAO,MAAM,iBAAiB;;;CAGpB,CAAC;AAEX,eAAO,MAAM,cAAc,EAAE,SAAS,SAAS,EAA4B,CAAC;AAC5E,eAAO,MAAM,aAAa,EAAE,SAAS,SAAS,EAA2B,CAAC;AAC1E,eAAO,MAAM,gBAAgB,EAAE,SAAS,WAAW,EAAgC,CAAC;AACpF,eAAO,MAAM,eAAe,EAAE,SAAS,WAAW,EAA+B,CAAC;AAClF,eAAO,MAAM,iBAAiB,EAAE,SAAS,YAAY,EAAkC,CAAC;AACxF,eAAO,MAAM,gBAAgB,EAAE,SAAS,YAAY,EAAiC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.browser.d.ts","sourceRoot":"","sources":["../index.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAC;AAK3D,eAAO,MAAM,gBAAgB,EAAE,MAQ9B,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,MAAM,EAAE,MAAM,eAAe,CAAC;AAM3D,OAAO,SAAS,CAAC;AAEjB,eAAO,MAAM,gBAAgB,EAAE,MAoB9B,CAAC;AAEF,eAAe,gBAAgB,CAAC;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,cAAc,SAAS,CAAC"}
|
|
@@ -10,11 +10,11 @@
|
|
|
10
10
|
"/**\n * Auto-generated prompt templates\n * DO NOT EDIT - Generated from ../../../../prompts/*.txt\n *\n * These prompts use Handlebars-style template syntax:\n * - {{variableName}} for simple substitution\n * - {{#each items}}...{{/each}} for iteration\n * - {{#if condition}}...{{/if}} for conditionals\n */\n\nexport const extractExperiencesTemplate = `# Task: Extract Novel Learning Experiences\n\nAnalyze this conversation for novel learning experiences that would be surprising or valuable to remember.\n\n## Conversation context\n{{conversation_context}}\n\n## Existing similar experiences\n{{existing_experiences}}\n\n## Instructions\nExtract ONLY experiences that are:\n1. Genuinely novel (not in existing experiences)\n2. Actionable learnings about how things work\n3. Corrections of previous mistakes or assumptions\n4. Discoveries of new capabilities or patterns\n5. Surprising outcomes that contradict expectations\n\nFocus on technical knowledge, patterns, and cause-effect relationships that transfer to other contexts.\nAvoid personal details, user-specific information, or routine interactions.\n\nRespond with JSON array of experiences (max 3):\n[{\n \"type\": \"DISCOVERY|CORRECTION|SUCCESS|LEARNING\",\n \"learning\": \"What was learned (generic, transferable)\",\n \"context\": \"What situation triggered this (anonymized)\",\n \"confidence\": 0.0-1.0,\n \"reasoning\": \"Why this is novel and valuable\"\n}]\n\nReturn empty array [] if no novel experiences found.`;\n\nexport const EXTRACT_EXPERIENCES_TEMPLATE = extractExperiencesTemplate;\n\n",
|
|
11
11
|
"import type { Memory, ServiceTypeRegistry, UUID } from \"@elizaos/core\";\n\nexport type JsonPrimitive = string | number | boolean | null;\nexport type JsonValue = JsonPrimitive | JsonValue[] | { [key: string]: JsonValue };\nexport type JsonObject = { [key: string]: JsonValue };\n\n// Extend the core service types with experience service\ndeclare module \"@elizaos/core\" {\n interface ServiceTypeRegistry {\n EXPERIENCE: \"EXPERIENCE\";\n }\n}\n\n// Export service type constant\nexport const ExperienceServiceType = {\n EXPERIENCE: \"EXPERIENCE\" as const,\n} satisfies Partial<ServiceTypeRegistry>;\n\nexport enum ExperienceType {\n SUCCESS = \"success\", // Agent accomplished something\n FAILURE = \"failure\", // Agent failed at something\n DISCOVERY = \"discovery\", // Agent discovered new information\n CORRECTION = \"correction\", // Agent corrected a mistake\n LEARNING = \"learning\", // Agent learned something new\n HYPOTHESIS = \"hypothesis\", // Agent formed a hypothesis\n VALIDATION = \"validation\", // Agent validated a hypothesis\n WARNING = \"warning\", // Agent encountered a warning/limitation\n}\n\nexport enum OutcomeType {\n POSITIVE = \"positive\",\n NEGATIVE = \"negative\",\n NEUTRAL = \"neutral\",\n MIXED = \"mixed\",\n}\n\nexport interface Experience {\n id: UUID;\n agentId: UUID;\n type: ExperienceType;\n outcome: OutcomeType;\n\n // Context and details\n context: string; // What was happening\n action: string; // What the agent tried to do\n result: string; // What actually happened\n learning: string; // What was learned\n\n // Categorization\n tags: string[]; // Tags for categorization\n domain: string; // Domain of experience (e.g., 'shell', 'coding', 'system')\n\n // Related experiences\n relatedExperiences?: UUID[]; // Links to related experiences\n supersedes?: UUID; // If this experience updates/replaces another\n\n // Confidence and importance\n confidence: number; // 0-1, how confident the agent is in this learning\n importance: number; // 0-1, how important this experience is\n\n // Temporal information\n createdAt: number;\n updatedAt: number;\n lastAccessedAt?: number;\n accessCount: number;\n\n // For corrections\n previousBelief?: string; // What the agent previously believed\n correctedBelief?: string; // The corrected understanding\n\n // Memory integration\n embedding?: number[]; // For semantic search\n memoryIds?: UUID[]; // Related memory IDs\n}\n\nexport interface ExperienceQuery {\n query?: string; // Text query for semantic search\n type?: ExperienceType | ExperienceType[];\n outcome?: OutcomeType | OutcomeType[];\n domain?: string | string[];\n tags?: string[];\n minImportance?: number;\n minConfidence?: number;\n timeRange?: {\n start?: number;\n end?: number;\n };\n limit?: number;\n includeRelated?: boolean;\n}\n\nexport interface ExperienceAnalysis {\n pattern?: string; // Detected pattern\n frequency?: number; // How often this occurs\n reliability?: number; // How reliable this knowledge is\n alternatives?: string[]; // Alternative approaches discovered\n recommendations?: string[]; // Recommendations based on experience\n}\n\nexport interface ExperienceEvent {\n experienceId: UUID;\n eventType: \"created\" | \"accessed\" | \"updated\" | \"superseded\";\n timestamp: number;\n metadata?: JsonObject;\n}\n\nexport interface ExperienceMemory extends Memory {\n experienceId: string;\n experienceType: ExperienceType;\n}\n",
|
|
12
12
|
"import {\n type IAgentRuntime,\n logger,\n type Memory,\n type Provider,\n type ProviderResult,\n type State,\n} from \"@elizaos/core\";\nimport { requireProviderSpec } from \"../generated/specs/spec-helpers\";\nimport type { ExperienceService } from \"../service\";\n\n/**\n * Simple experience provider that injects relevant experiences into context\n * Similar to the knowledge provider but focused on agent learnings\n */\nconst spec = requireProviderSpec(\"experienceProvider\");\n\nexport const experienceProvider: Provider = {\n name: spec.name,\n description: \"Provides relevant past experiences and learnings for the current context\",\n\n async get(runtime: IAgentRuntime, message: Memory, _state?: State): Promise<ProviderResult> {\n const experienceService = runtime.getService(\"EXPERIENCE\") as ExperienceService | null;\n\n if (!experienceService) {\n return { text: \"\", data: {}, values: {} };\n }\n\n // Get message text for context\n const messageText = message.content.text || \"\";\n if (messageText.length < 10) {\n return { text: \"\", data: {}, values: {} };\n }\n\n // Find relevant experiences using semantic search\n const relevantExperiences = await experienceService.queryExperiences({\n query: messageText,\n limit: 5,\n minConfidence: 0.6,\n minImportance: 0.5,\n });\n\n if (relevantExperiences.length === 0) {\n return { text: \"\", data: {}, values: {} };\n }\n\n // Format experiences for context injection\n const experienceText = relevantExperiences\n .map((exp, index) => {\n return `Experience ${index + 1}: In ${exp.domain} context, when ${exp.context}, I learned: ${exp.learning}`;\n })\n .join(\"\\n\");\n\n const contextText = `[RELEVANT EXPERIENCES]\\n${experienceText}\\n[/RELEVANT EXPERIENCES]`;\n\n logger.debug(\n `[experienceProvider] Injecting ${relevantExperiences.length} relevant experiences`\n );\n\n return {\n text: contextText,\n data: {\n experiences: relevantExperiences,\n count: relevantExperiences.length,\n },\n values: {\n experienceCount: relevantExperiences.length.toString(),\n },\n };\n },\n};\n",
|
|
13
|
-
"import {\n type IAgentRuntime,\n logger,\n ModelType,\n Service,\n type ServiceTypeName,\n type UUID,\n} from \"@elizaos/core\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n type Experience,\n type ExperienceAnalysis,\n type ExperienceQuery,\n ExperienceServiceType,\n ExperienceType,\n OutcomeType,\n} from \"./types\";\nimport { ConfidenceDecayManager } from \"./utils/confidenceDecay\";\nimport { ExperienceRelationshipManager } from \"./utils/experienceRelationships\";\n\nexport class ExperienceService extends Service {\n static override serviceType: ServiceTypeName = ExperienceServiceType.EXPERIENCE;\n override capabilityDescription =\n \"Manages agent experiences, learning from successes and failures to improve future decisions\";\n\n private experiences: Map<UUID, Experience> = new Map();\n private experiencesByDomain: Map<string, Set<UUID>> = new Map();\n private experiencesByType: Map<ExperienceType, Set<UUID>> = new Map();\n private dirtyExperiences: Set<UUID> = new Set();\n private persistTimer: ReturnType<typeof setInterval> | null = null;\n private decayManager: ConfidenceDecayManager;\n private relationshipManager: ExperienceRelationshipManager;\n\n constructor(runtime: IAgentRuntime) {\n super(runtime);\n this.decayManager = new ConfidenceDecayManager();\n this.relationshipManager = new ExperienceRelationshipManager();\n\n void this.loadExperiences();\n\n // Batch-persist dirty access counts every 60 seconds\n this.persistTimer = setInterval(() => {\n void this.persistDirtyExperiences();\n }, 60_000);\n }\n\n static async start(runtime: IAgentRuntime): Promise<ExperienceService> {\n const service = new ExperienceService(runtime);\n // loadExperiences is triggered in constructor\n return service;\n }\n\n private async loadExperiences(): Promise<void> {\n // Load experiences from the \"experiences\" table (same table we write to)\n const memories = await this.runtime.getMemories({\n entityId: this.runtime.agentId,\n tableName: \"experiences\",\n });\n\n for (const memory of memories) {\n const experienceData = memory.content.data as Partial<Experience> | null;\n if (experienceData?.id) {\n const memoryCreatedAt =\n typeof memory.createdAt === \"number\" ? memory.createdAt : Date.now();\n\n const toTimestamp = (value: number | Date | undefined, fallback: number): number => {\n if (value === undefined) return fallback;\n if (typeof value === \"number\") return value;\n if (value instanceof Date) return value.getTime();\n return fallback;\n };\n\n const experience: Experience = {\n id: experienceData.id as UUID,\n agentId: this.runtime.agentId,\n type: experienceData.type || ExperienceType.LEARNING,\n outcome: experienceData.outcome || OutcomeType.NEUTRAL,\n context: experienceData.context || \"\",\n action: experienceData.action || \"\",\n result: experienceData.result || \"\",\n learning: experienceData.learning || \"\",\n domain: experienceData.domain || \"general\",\n tags: experienceData.tags || [],\n confidence: experienceData.confidence || 0.5,\n importance: experienceData.importance || 0.5,\n createdAt: toTimestamp(\n experienceData.createdAt as number | Date | undefined,\n memoryCreatedAt\n ),\n updatedAt: toTimestamp(\n experienceData.updatedAt as number | Date | undefined,\n memoryCreatedAt\n ),\n accessCount: experienceData.accessCount ?? 0,\n lastAccessedAt: toTimestamp(\n experienceData.lastAccessedAt as number | Date | undefined,\n memoryCreatedAt\n ),\n embedding: experienceData.embedding,\n relatedExperiences: experienceData.relatedExperiences,\n supersedes: experienceData.supersedes,\n previousBelief: experienceData.previousBelief,\n correctedBelief: experienceData.correctedBelief,\n };\n\n this.experiences.set(experience.id, experience);\n\n // Update indexes\n if (!this.experiencesByDomain.has(experience.domain)) {\n this.experiencesByDomain.set(experience.domain, new Set());\n }\n this.experiencesByDomain.get(experience.domain)?.add(experience.id);\n\n if (!this.experiencesByType.has(experience.type)) {\n this.experiencesByType.set(experience.type, new Set());\n }\n this.experiencesByType.get(experience.type)?.add(experience.id);\n }\n }\n\n logger.info(`[ExperienceService] Loaded ${this.experiences.size} experiences from memory`);\n }\n\n async recordExperience(experienceData: Partial<Experience>): Promise<Experience> {\n // Generate embedding for the experience (graceful fallback if unavailable)\n const embeddingText = `${experienceData.context} ${experienceData.action} ${experienceData.result} ${experienceData.learning}`;\n let embedding: number[] | undefined;\n try {\n const result = await this.runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: embeddingText,\n });\n // Validate the embedding is non-zero (some providers return zero vectors on error)\n if (Array.isArray(result) && result.length > 0 && result.some((v: number) => v !== 0)) {\n embedding = result;\n } else {\n logger.warn(\n \"[ExperienceService] Embedding model returned empty/zero vector, storing without embedding\"\n );\n }\n } catch (err) {\n logger.warn(\n `[ExperienceService] Embedding generation failed, storing without embedding: ${err}`\n );\n }\n\n const now = Date.now();\n\n const experience: Experience = {\n id: uuidv4() as UUID,\n agentId: this.runtime.agentId,\n type: experienceData.type || ExperienceType.LEARNING,\n outcome: experienceData.outcome || OutcomeType.NEUTRAL,\n context: experienceData.context || \"\",\n action: experienceData.action || \"\",\n result: experienceData.result || \"\",\n learning: experienceData.learning || \"\",\n domain: experienceData.domain || \"general\",\n tags: experienceData.tags || [],\n confidence: experienceData.confidence || 0.5,\n importance: experienceData.importance || 0.5,\n createdAt: now,\n updatedAt: now,\n accessCount: 0,\n lastAccessedAt: now,\n embedding,\n relatedExperiences: experienceData.relatedExperiences,\n supersedes: experienceData.supersedes,\n previousBelief: experienceData.previousBelief,\n correctedBelief: experienceData.correctedBelief,\n };\n\n // Store the experience\n this.experiences.set(experience.id, experience);\n\n // Update indexes\n if (!this.experiencesByDomain.has(experience.domain)) {\n this.experiencesByDomain.set(experience.domain, new Set());\n }\n this.experiencesByDomain.get(experience.domain)?.add(experience.id);\n\n if (!this.experiencesByType.has(experience.type)) {\n this.experiencesByType.set(experience.type, new Set());\n }\n this.experiencesByType.get(experience.type)?.add(experience.id);\n\n // Save to memory service\n await this.saveExperienceToMemory(experience);\n\n // Check for contradictions and add relationships\n const allExperiences = Array.from(this.experiences.values());\n const contradictions = this.relationshipManager.findContradictions(experience, allExperiences);\n\n for (const contradiction of contradictions) {\n this.relationshipManager.addRelationship({\n fromId: experience.id,\n toId: contradiction.id,\n type: \"contradicts\",\n strength: 0.8,\n });\n }\n\n logger.info(`[ExperienceService] Recorded experience: ${experience.id} (${experience.type})`);\n\n return experience;\n }\n\n private async saveExperienceToMemory(experience: Experience): Promise<void> {\n const memory = {\n id: experience.id,\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: this.runtime.agentId,\n content: {\n text: `Experience: ${experience.learning}`,\n type: \"experience\",\n data: {\n id: experience.id,\n agentId: experience.agentId,\n type: experience.type,\n outcome: experience.outcome,\n context: experience.context,\n action: experience.action,\n result: experience.result,\n learning: experience.learning,\n domain: experience.domain,\n tags: experience.tags,\n confidence: experience.confidence,\n importance: experience.importance,\n createdAt: experience.createdAt,\n updatedAt: experience.updatedAt,\n accessCount: experience.accessCount,\n lastAccessedAt: experience.lastAccessedAt,\n // NOTE: embedding intentionally excluded — it's large (1-6KB per experience)\n // and stored separately by adapters that support vector search.\n // Keeping it only in the in-memory map for similarity calculations.\n relatedExperiences: experience.relatedExperiences,\n supersedes: experience.supersedes,\n previousBelief: experience.previousBelief,\n correctedBelief: experience.correctedBelief,\n },\n },\n createdAt: experience.createdAt,\n };\n\n await this.runtime.createMemory(memory, \"experiences\", true);\n }\n\n private async persistDirtyExperiences(): Promise<void> {\n if (this.dirtyExperiences.size === 0) return;\n\n const toSave = Array.from(this.dirtyExperiences);\n this.dirtyExperiences.clear();\n\n let saved = 0;\n for (const id of toSave) {\n const exp = this.experiences.get(id);\n if (exp) {\n try {\n await this.saveExperienceToMemory(exp);\n saved++;\n } catch {\n // Re-mark as dirty so it retries next cycle\n this.dirtyExperiences.add(id);\n }\n }\n }\n\n if (saved > 0) {\n logger.debug(`[ExperienceService] Persisted ${saved} dirty experiences`);\n }\n }\n\n async queryExperiences(query: ExperienceQuery): Promise<Experience[]> {\n let results: Experience[] = [];\n const limit = query.limit || 10;\n\n if (query.query) {\n // Semantic search path: over-fetch when filters will reduce the set\n const hasFilters = !!(\n query.type ||\n query.outcome ||\n query.domain ||\n (query.tags && query.tags.length > 0) ||\n query.minConfidence !== undefined ||\n query.minImportance !== undefined ||\n query.timeRange\n );\n const fetchLimit = hasFilters ? Math.max(limit * 5, 50) : limit;\n const candidates = this.applyFilters(\n await this.findSimilarExperiences(query.query, fetchLimit),\n query\n );\n results = candidates.slice(0, limit);\n } else {\n // Non-semantic path: filter then sort by quality\n const candidates = this.applyFilters(Array.from(this.experiences.values()), query);\n candidates.sort((a, b) => {\n const scoreA = this.decayManager.getDecayedConfidence(a) * a.importance;\n const scoreB = this.decayManager.getDecayedConfidence(b) * b.importance;\n return scoreB - scoreA;\n });\n results = candidates.slice(0, limit);\n }\n\n // Include related experiences if requested\n if (query.includeRelated) {\n const relatedIds = new Set<UUID>();\n for (const exp of results) {\n if (exp.relatedExperiences) {\n exp.relatedExperiences.forEach((id) => {\n relatedIds.add(id);\n });\n }\n }\n\n const related = Array.from(relatedIds)\n .map((id) => this.experiences.get(id))\n .filter((exp): exp is Experience => exp !== undefined)\n .filter((exp) => !results.some((r) => r.id === exp.id));\n\n results.push(...related);\n }\n\n // Update access counts and mark dirty for batch persistence\n for (const exp of results) {\n exp.accessCount++;\n exp.lastAccessedAt = Date.now();\n this.dirtyExperiences.add(exp.id);\n }\n\n return results;\n }\n\n /** Apply query filters (type, outcome, domain, tags, confidence, importance, timeRange). */\n private applyFilters(candidates: Experience[], query: ExperienceQuery): Experience[] {\n let filtered = candidates;\n\n if (query.type) {\n const types = Array.isArray(query.type) ? query.type : [query.type];\n filtered = filtered.filter((e) => types.includes(e.type));\n }\n if (query.outcome) {\n filtered = filtered.filter((e) => e.outcome === query.outcome);\n }\n if (query.domain) {\n const domains = Array.isArray(query.domain) ? query.domain : [query.domain];\n filtered = filtered.filter((e) => domains.includes(e.domain));\n }\n if (query.tags && query.tags.length > 0) {\n filtered = filtered.filter((e) => query.tags?.some((t) => e.tags.includes(t)));\n }\n if (query.minConfidence !== undefined) {\n const min = query.minConfidence;\n filtered = filtered.filter((e) => this.decayManager.getDecayedConfidence(e) >= min);\n }\n if (query.minImportance !== undefined) {\n const min = query.minImportance;\n filtered = filtered.filter((e) => e.importance >= min);\n }\n if (query.timeRange) {\n const { start, end } = query.timeRange;\n filtered = filtered.filter((e) => {\n if (start && e.createdAt < start) return false;\n if (end && e.createdAt > end) return false;\n return true;\n });\n }\n\n return filtered;\n }\n\n /**\n * Find similar experiences using vector search + reranking.\n *\n * Reranking strategy:\n * Vector similarity is the dominant signal (70%) — an irrelevant experience\n * should never outrank a relevant one just because it has high confidence.\n * Quality signals (confidence, importance) act as tiebreakers among\n * similarly-relevant results (30% combined).\n *\n * A minimum similarity threshold filters out noise so quality signals\n * can't promote genuinely irrelevant experiences.\n */\n async findSimilarExperiences(text: string, limit = 5): Promise<Experience[]> {\n if (!text || this.experiences.size === 0) {\n return [];\n }\n\n let queryEmbedding: number[];\n try {\n queryEmbedding = await this.runtime.useModel(ModelType.TEXT_EMBEDDING, { text });\n if (\n !Array.isArray(queryEmbedding) ||\n queryEmbedding.length === 0 ||\n queryEmbedding.every((v: number) => v === 0)\n ) {\n logger.warn(\n \"[ExperienceService] Query embedding is empty/zero, falling back to recency sort\"\n );\n return this.fallbackSort(limit);\n }\n } catch {\n logger.warn(\"[ExperienceService] Query embedding failed, falling back to recency sort\");\n return this.fallbackSort(limit);\n }\n\n // Minimum cosine similarity to be considered a candidate at all.\n // Prevents high-quality but irrelevant experiences from appearing.\n const SIMILARITY_FLOOR = 0.05;\n\n const scored: Array<{ experience: Experience; score: number }> = [];\n const now = Date.now();\n\n for (const experience of this.experiences.values()) {\n if (!experience.embedding) continue;\n\n const similarity = this.cosineSimilarity(queryEmbedding, experience.embedding);\n if (similarity < SIMILARITY_FLOOR) continue;\n\n // --- Quality signals (all normalized 0-1) ---\n\n // Confidence with time-decay applied\n const decayedConfidence = this.decayManager.getDecayedConfidence(experience);\n\n // Smooth recency: half-life of 30 days, never goes to zero\n const ageDays = Math.max(0, (now - experience.createdAt) / (24 * 60 * 60 * 1000));\n const recencyFactor = 1 / (1 + ageDays / 30);\n\n // Access frequency: log-scaled, capped at 1.0\n // ~0 at 0 accesses, ~0.33 at 1, ~0.66 at 3, ~1.0 at 9+\n const accessFactor = Math.min(1, Math.log2(experience.accessCount + 1) / Math.log2(10));\n\n // Weighted quality score (0-1 range)\n const qualityScore =\n decayedConfidence * 0.45 +\n experience.importance * 0.35 +\n recencyFactor * 0.12 +\n accessFactor * 0.08;\n\n // Final reranking score: similarity dominates (70%), quality tiebreaks (30%)\n const rerankScore = similarity * 0.7 + qualityScore * 0.3;\n\n scored.push({ experience, score: rerankScore });\n }\n\n // Sort by combined reranking score (highest first)\n scored.sort((a, b) => b.score - a.score);\n const results = scored.slice(0, limit).map((item) => item.experience);\n\n for (const exp of results) {\n exp.accessCount++;\n exp.lastAccessedAt = now;\n this.dirtyExperiences.add(exp.id);\n }\n\n return results;\n }\n\n /** Fallback when embeddings are unavailable: sort by decayed confidence * importance. */\n private fallbackSort(limit: number): Experience[] {\n const all = Array.from(this.experiences.values());\n all.sort((a, b) => {\n const sa = this.decayManager.getDecayedConfidence(a) * a.importance;\n const sb = this.decayManager.getDecayedConfidence(b) * b.importance;\n return sb - sa;\n });\n return all.slice(0, limit);\n }\n\n async analyzeExperiences(domain?: string, type?: ExperienceType): Promise<ExperienceAnalysis> {\n const experiences = await this.queryExperiences({\n domain: domain ? [domain] : undefined,\n type: type ? [type] : undefined,\n limit: 100,\n });\n\n if (experiences.length === 0) {\n return {\n pattern: \"No experiences found for analysis\",\n frequency: 0,\n reliability: 0,\n alternatives: [],\n recommendations: [],\n };\n }\n\n const learnings = experiences.map((exp) => exp.learning);\n const commonWords = this.findCommonPatterns(learnings);\n\n const avgConfidence =\n experiences.reduce((sum, exp) => sum + exp.confidence, 0) / experiences.length;\n const outcomeConsistency = this.calculateOutcomeConsistency(experiences);\n const reliability = (avgConfidence + outcomeConsistency) / 2;\n\n const alternatives = this.extractAlternatives(experiences);\n const recommendations = this.generateRecommendations(experiences, reliability);\n\n return {\n pattern:\n commonWords.length > 0\n ? `Common patterns: ${commonWords.join(\", \")}`\n : \"No clear patterns detected\",\n frequency: experiences.length,\n reliability,\n alternatives,\n recommendations,\n };\n }\n\n private cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) return 0;\n\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const valueA = a[i] ?? 0;\n const valueB = b[i] ?? 0;\n dotProduct += valueA * valueB;\n normA += valueA * valueA;\n normB += valueB * valueB;\n }\n\n if (normA === 0 || normB === 0) return 0;\n return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));\n }\n\n private findCommonPatterns(texts: string[]): string[] {\n const wordFreq = new Map<string, number>();\n\n for (const text of texts) {\n const words = text.toLowerCase().split(/\\s+/);\n for (const word of words) {\n if (word.length > 3) {\n wordFreq.set(word, (wordFreq.get(word) || 0) + 1);\n }\n }\n }\n\n const threshold = texts.length * 0.3;\n return Array.from(wordFreq.entries())\n .filter(([_, count]) => count >= threshold)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .map(([word]) => word);\n }\n\n private calculateOutcomeConsistency(experiences: Experience[]): number {\n if (experiences.length === 0) return 0;\n\n const outcomeCounts = new Map<OutcomeType, number>();\n for (const exp of experiences) {\n outcomeCounts.set(exp.outcome, (outcomeCounts.get(exp.outcome) || 0) + 1);\n }\n\n const maxCount = Math.max(...outcomeCounts.values());\n return maxCount / experiences.length;\n }\n\n private extractAlternatives(experiences: Experience[]): string[] {\n const alternatives = new Set<string>();\n\n for (const exp of experiences) {\n if (exp.type === ExperienceType.CORRECTION && exp.correctedBelief) {\n alternatives.add(exp.correctedBelief);\n }\n if (exp.outcome === OutcomeType.NEGATIVE && exp.learning.includes(\"instead\")) {\n const match = exp.learning.match(/instead\\s+(.+?)(?:\\.|$)/i);\n const alternative = match?.[1]?.trim();\n if (alternative) {\n alternatives.add(alternative);\n }\n }\n }\n\n return Array.from(alternatives).slice(0, 5);\n }\n\n private generateRecommendations(experiences: Experience[], reliability: number): string[] {\n const recommendations: string[] = [];\n\n if (reliability > 0.8) {\n recommendations.push(\"Continue using successful approaches\");\n recommendations.push(\"Document and share these reliable methods\");\n } else if (reliability > 0.6) {\n recommendations.push(\"Continue using successful approaches with caution\");\n recommendations.push(\"Monitor for potential issues\");\n recommendations.push(\"Consider backup strategies\");\n } else if (reliability > 0.4) {\n recommendations.push(\"Review and improve current approaches\");\n recommendations.push(\"Investigate failure patterns\");\n recommendations.push(\"Consider alternative methods\");\n } else {\n recommendations.push(\"Significant changes needed to current approach\");\n recommendations.push(\"Analyze failure causes thoroughly\");\n recommendations.push(\"Seek alternative solutions\");\n }\n\n const failureTypes = new Map<string, number>();\n experiences\n .filter((e) => e.outcome === OutcomeType.NEGATIVE)\n .forEach((e) => {\n const key = e.learning.toLowerCase();\n failureTypes.set(key, (failureTypes.get(key) || 0) + 1);\n });\n\n if (failureTypes.size > 0) {\n const mostCommonFailure = Array.from(failureTypes.entries()).sort((a, b) => b[1] - a[1])[0];\n\n if (mostCommonFailure && mostCommonFailure[1] > 1) {\n recommendations.push(`Address recurring issue: ${mostCommonFailure[0]}`);\n }\n }\n\n const domains = new Set(experiences.map((e) => e.domain));\n if (domains.has(\"shell\")) {\n recommendations.push(\"Verify command syntax and permissions\");\n }\n if (domains.has(\"coding\")) {\n recommendations.push(\"Test thoroughly before deployment\");\n }\n if (domains.has(\"network\")) {\n recommendations.push(\"Implement retry logic and error handling\");\n }\n\n return recommendations.slice(0, 5);\n }\n\n async stop(): Promise<void> {\n logger.info(\"[ExperienceService] Stopping...\");\n\n // Stop the persistence timer\n if (this.persistTimer) {\n clearInterval(this.persistTimer);\n this.persistTimer = null;\n }\n\n // Final persist of all dirty experiences + full save\n const experiencesToSave = Array.from(this.experiences.values());\n let savedCount = 0;\n\n for (const experience of experiencesToSave) {\n try {\n await this.saveExperienceToMemory(experience);\n savedCount++;\n } catch (err) {\n logger.warn(`[ExperienceService] Failed to save experience ${experience.id}: ${err}`);\n }\n }\n\n this.dirtyExperiences.clear();\n logger.info(`[ExperienceService] Saved ${savedCount} experiences`);\n }\n}\n",
|
|
13
|
+
"import {\n type IAgentRuntime,\n logger,\n ModelType,\n Service,\n type ServiceTypeName,\n type UUID,\n} from \"@elizaos/core\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport {\n type Experience,\n type ExperienceAnalysis,\n type ExperienceQuery,\n ExperienceServiceType,\n ExperienceType,\n OutcomeType,\n} from \"./types\";\nimport { ConfidenceDecayManager } from \"./utils/confidenceDecay\";\nimport { ExperienceRelationshipManager } from \"./utils/experienceRelationships\";\n\nexport class ExperienceService extends Service {\n static override serviceType: ServiceTypeName = ExperienceServiceType.EXPERIENCE;\n override capabilityDescription =\n \"Manages agent experiences, learning from successes and failures to improve future decisions\";\n\n private experiences: Map<UUID, Experience> = new Map();\n private experiencesByDomain: Map<string, Set<UUID>> = new Map();\n private experiencesByType: Map<ExperienceType, Set<UUID>> = new Map();\n private dirtyExperiences: Set<UUID> = new Set();\n private persistTimer: ReturnType<typeof setInterval> | null = null;\n private decayManager: ConfidenceDecayManager;\n private relationshipManager: ExperienceRelationshipManager;\n\n constructor(runtime: IAgentRuntime) {\n super(runtime);\n this.decayManager = new ConfidenceDecayManager();\n this.relationshipManager = new ExperienceRelationshipManager();\n\n void this.loadExperiences();\n\n // Batch-persist dirty access counts every 60 seconds\n this.persistTimer = setInterval(() => {\n void this.persistDirtyExperiences();\n }, 60_000);\n }\n\n static async start(runtime: IAgentRuntime): Promise<ExperienceService> {\n const service = new ExperienceService(runtime);\n // loadExperiences is triggered in constructor\n return service;\n }\n\n private async loadExperiences(): Promise<void> {\n // Load experiences from the \"experiences\" table (same table we write to)\n const memories = await this.runtime.getMemories({\n entityId: this.runtime.agentId,\n tableName: \"experiences\",\n });\n\n for (const memory of memories) {\n const experienceData = memory.content.data as Partial<Experience> | null;\n if (experienceData?.id) {\n const memoryCreatedAt =\n typeof memory.createdAt === \"number\" ? memory.createdAt : Date.now();\n\n const toTimestamp = (value: number | Date | undefined, fallback: number): number => {\n if (value === undefined) return fallback;\n if (typeof value === \"number\") return value;\n if (value instanceof Date) return value.getTime();\n return fallback;\n };\n\n const experience: Experience = {\n id: experienceData.id as UUID,\n agentId: this.runtime.agentId,\n type: experienceData.type || ExperienceType.LEARNING,\n outcome: experienceData.outcome || OutcomeType.NEUTRAL,\n context: experienceData.context || \"\",\n action: experienceData.action || \"\",\n result: experienceData.result || \"\",\n learning: experienceData.learning || \"\",\n domain: experienceData.domain || \"general\",\n tags: experienceData.tags || [],\n confidence: experienceData.confidence || 0.5,\n importance: experienceData.importance || 0.5,\n createdAt: toTimestamp(\n experienceData.createdAt as number | Date | undefined,\n memoryCreatedAt\n ),\n updatedAt: toTimestamp(\n experienceData.updatedAt as number | Date | undefined,\n memoryCreatedAt\n ),\n accessCount: experienceData.accessCount ?? 0,\n lastAccessedAt: toTimestamp(\n experienceData.lastAccessedAt as number | Date | undefined,\n memoryCreatedAt\n ),\n embedding: experienceData.embedding,\n relatedExperiences: experienceData.relatedExperiences,\n supersedes: experienceData.supersedes,\n previousBelief: experienceData.previousBelief,\n correctedBelief: experienceData.correctedBelief,\n };\n\n this.experiences.set(experience.id, experience);\n\n // Update indexes\n if (!this.experiencesByDomain.has(experience.domain)) {\n this.experiencesByDomain.set(experience.domain, new Set());\n }\n this.experiencesByDomain.get(experience.domain)?.add(experience.id);\n\n if (!this.experiencesByType.has(experience.type)) {\n this.experiencesByType.set(experience.type, new Set());\n }\n this.experiencesByType.get(experience.type)?.add(experience.id);\n }\n }\n\n logger.info(`[ExperienceService] Loaded ${this.experiences.size} experiences from memory`);\n }\n\n async recordExperience(experienceData: Partial<Experience>): Promise<Experience> {\n // Generate embedding for the experience (graceful fallback if unavailable)\n const embeddingText = `${experienceData.context} ${experienceData.action} ${experienceData.result} ${experienceData.learning}`;\n let embedding: number[] | undefined;\n try {\n const result = await this.runtime.useModel(ModelType.TEXT_EMBEDDING, {\n text: embeddingText,\n });\n // Validate the embedding is non-zero (some providers return zero vectors on error)\n if (Array.isArray(result) && result.length > 0 && result.some((v: number) => v !== 0)) {\n embedding = result;\n } else {\n logger.warn(\n \"[ExperienceService] Embedding model returned empty/zero vector, storing without embedding\"\n );\n }\n } catch (err) {\n logger.warn(\n `[ExperienceService] Embedding generation failed, storing without embedding: ${err}`\n );\n }\n\n const now = Date.now();\n\n const experience: Experience = {\n id: uuidv4() as UUID,\n agentId: this.runtime.agentId,\n type: experienceData.type || ExperienceType.LEARNING,\n outcome: experienceData.outcome || OutcomeType.NEUTRAL,\n context: experienceData.context || \"\",\n action: experienceData.action || \"\",\n result: experienceData.result || \"\",\n learning: experienceData.learning || \"\",\n domain: experienceData.domain || \"general\",\n tags: experienceData.tags || [],\n confidence: experienceData.confidence || 0.5,\n importance: experienceData.importance || 0.5,\n createdAt: now,\n updatedAt: now,\n accessCount: 0,\n lastAccessedAt: now,\n embedding,\n relatedExperiences: experienceData.relatedExperiences,\n supersedes: experienceData.supersedes,\n previousBelief: experienceData.previousBelief,\n correctedBelief: experienceData.correctedBelief,\n };\n\n // Store the experience\n this.experiences.set(experience.id, experience);\n\n // Update indexes\n if (!this.experiencesByDomain.has(experience.domain)) {\n this.experiencesByDomain.set(experience.domain, new Set());\n }\n this.experiencesByDomain.get(experience.domain)?.add(experience.id);\n\n if (!this.experiencesByType.has(experience.type)) {\n this.experiencesByType.set(experience.type, new Set());\n }\n this.experiencesByType.get(experience.type)?.add(experience.id);\n\n // Save to memory service\n await this.saveExperienceToMemory(experience);\n\n // Check for contradictions and add relationships\n const allExperiences = Array.from(this.experiences.values());\n const contradictions = this.relationshipManager.findContradictions(experience, allExperiences);\n\n for (const contradiction of contradictions) {\n this.relationshipManager.addRelationship({\n fromId: experience.id,\n toId: contradiction.id,\n type: \"contradicts\",\n strength: 0.8,\n });\n }\n\n logger.info(`[ExperienceService] Recorded experience: ${experience.id} (${experience.type})`);\n\n return experience;\n }\n\n private async saveExperienceToMemory(experience: Experience): Promise<void> {\n const memory = {\n id: experience.id,\n entityId: this.runtime.agentId,\n agentId: this.runtime.agentId,\n roomId: this.runtime.agentId,\n content: {\n text: `Experience: ${experience.learning}`,\n type: \"experience\",\n data: {\n id: experience.id,\n agentId: experience.agentId,\n type: experience.type,\n outcome: experience.outcome,\n context: experience.context,\n action: experience.action,\n result: experience.result,\n learning: experience.learning,\n domain: experience.domain,\n tags: experience.tags,\n confidence: experience.confidence,\n importance: experience.importance,\n createdAt: experience.createdAt,\n updatedAt: experience.updatedAt,\n accessCount: experience.accessCount,\n lastAccessedAt: experience.lastAccessedAt,\n // NOTE: embedding intentionally excluded — it's large (1-6KB per experience)\n // and stored separately by adapters that support vector search.\n // Keeping it only in the in-memory map for similarity calculations.\n relatedExperiences: experience.relatedExperiences,\n supersedes: experience.supersedes,\n previousBelief: experience.previousBelief,\n correctedBelief: experience.correctedBelief,\n },\n },\n createdAt: experience.createdAt,\n };\n\n await this.runtime.createMemory(memory, \"experiences\", true);\n }\n\n private async persistDirtyExperiences(): Promise<void> {\n if (this.dirtyExperiences.size === 0) return;\n\n const toSave = Array.from(this.dirtyExperiences);\n this.dirtyExperiences.clear();\n\n let saved = 0;\n for (const id of toSave) {\n const exp = this.experiences.get(id);\n if (exp) {\n try {\n await this.saveExperienceToMemory(exp);\n saved++;\n } catch {\n // Re-mark as dirty so it retries next cycle\n this.dirtyExperiences.add(id);\n }\n }\n }\n\n if (saved > 0) {\n logger.debug(`[ExperienceService] Persisted ${saved} dirty experiences`);\n }\n }\n\n async queryExperiences(query: ExperienceQuery): Promise<Experience[]> {\n let results: Experience[] = [];\n const limit = query.limit || 10;\n\n if (query.query) {\n // Semantic search path: over-fetch when filters will reduce the set\n const hasFilters = !!(\n query.type || query.outcome || query.domain ||\n (query.tags && query.tags.length > 0) ||\n query.minConfidence !== undefined ||\n query.minImportance !== undefined ||\n query.timeRange\n );\n const fetchLimit = hasFilters ? Math.max(limit * 5, 50) : limit;\n const candidates = this.applyFilters(\n await this.findSimilarExperiences(query.query, fetchLimit),\n query,\n );\n results = candidates.slice(0, limit);\n } else {\n // Non-semantic path: filter then sort by quality\n const candidates = this.applyFilters(\n Array.from(this.experiences.values()),\n query,\n );\n candidates.sort((a, b) => {\n const scoreA = this.decayManager.getDecayedConfidence(a) * a.importance;\n const scoreB = this.decayManager.getDecayedConfidence(b) * b.importance;\n return scoreB - scoreA;\n });\n results = candidates.slice(0, limit);\n }\n\n // Include related experiences if requested\n if (query.includeRelated) {\n const relatedIds = new Set<UUID>();\n for (const exp of results) {\n if (exp.relatedExperiences) {\n exp.relatedExperiences.forEach((id) => {\n relatedIds.add(id);\n });\n }\n }\n\n const related = Array.from(relatedIds)\n .map((id) => this.experiences.get(id))\n .filter((exp): exp is Experience => exp !== undefined)\n .filter((exp) => !results.some((r) => r.id === exp.id));\n\n results.push(...related);\n }\n\n // Update access counts and mark dirty for batch persistence\n for (const exp of results) {\n exp.accessCount++;\n exp.lastAccessedAt = Date.now();\n this.dirtyExperiences.add(exp.id);\n }\n\n return results;\n }\n\n /** Apply query filters (type, outcome, domain, tags, confidence, importance, timeRange). */\n private applyFilters(candidates: Experience[], query: ExperienceQuery): Experience[] {\n let filtered = candidates;\n\n if (query.type) {\n const types = Array.isArray(query.type) ? query.type : [query.type];\n filtered = filtered.filter((e) => types.includes(e.type));\n }\n if (query.outcome) {\n filtered = filtered.filter((e) => e.outcome === query.outcome);\n }\n if (query.domain) {\n const domains = Array.isArray(query.domain) ? query.domain : [query.domain];\n filtered = filtered.filter((e) => domains.includes(e.domain));\n }\n if (query.tags && query.tags.length > 0) {\n filtered = filtered.filter((e) => query.tags?.some((t) => e.tags.includes(t)));\n }\n if (query.minConfidence !== undefined) {\n const min = query.minConfidence;\n filtered = filtered.filter((e) => this.decayManager.getDecayedConfidence(e) >= min);\n }\n if (query.minImportance !== undefined) {\n const min = query.minImportance;\n filtered = filtered.filter((e) => e.importance >= min);\n }\n if (query.timeRange) {\n const { start, end } = query.timeRange;\n filtered = filtered.filter((e) => {\n if (start && e.createdAt < start) return false;\n if (end && e.createdAt > end) return false;\n return true;\n });\n }\n\n return filtered;\n }\n\n /**\n * Find similar experiences using vector search + reranking.\n *\n * Reranking strategy:\n * Vector similarity is the dominant signal (70%) — an irrelevant experience\n * should never outrank a relevant one just because it has high confidence.\n * Quality signals (confidence, importance) act as tiebreakers among\n * similarly-relevant results (30% combined).\n *\n * A minimum similarity threshold filters out noise so quality signals\n * can't promote genuinely irrelevant experiences.\n */\n async findSimilarExperiences(text: string, limit = 5): Promise<Experience[]> {\n if (!text || this.experiences.size === 0) {\n return [];\n }\n\n let queryEmbedding: number[];\n try {\n queryEmbedding = await this.runtime.useModel(ModelType.TEXT_EMBEDDING, { text });\n if (\n !Array.isArray(queryEmbedding) ||\n queryEmbedding.length === 0 ||\n queryEmbedding.every((v: number) => v === 0)\n ) {\n logger.warn(\n \"[ExperienceService] Query embedding is empty/zero, falling back to recency sort\"\n );\n return this.fallbackSort(limit);\n }\n } catch {\n logger.warn(\"[ExperienceService] Query embedding failed, falling back to recency sort\");\n return this.fallbackSort(limit);\n }\n\n // Minimum cosine similarity to be considered a candidate at all.\n // Prevents high-quality but irrelevant experiences from appearing.\n const SIMILARITY_FLOOR = 0.05;\n\n const scored: Array<{ experience: Experience; score: number }> = [];\n const now = Date.now();\n\n for (const experience of this.experiences.values()) {\n if (!experience.embedding) continue;\n\n const similarity = this.cosineSimilarity(queryEmbedding, experience.embedding);\n if (similarity < SIMILARITY_FLOOR) continue;\n\n // --- Quality signals (all normalized 0-1) ---\n\n // Confidence with time-decay applied\n const decayedConfidence = this.decayManager.getDecayedConfidence(experience);\n\n // Smooth recency: half-life of 30 days, never goes to zero\n const ageDays = Math.max(0, (now - experience.createdAt) / (24 * 60 * 60 * 1000));\n const recencyFactor = 1 / (1 + ageDays / 30);\n\n // Access frequency: log-scaled, capped at 1.0\n // ~0 at 0 accesses, ~0.33 at 1, ~0.66 at 3, ~1.0 at 9+\n const accessFactor = Math.min(1, Math.log2(experience.accessCount + 1) / Math.log2(10));\n\n // Weighted quality score (0-1 range)\n const qualityScore =\n decayedConfidence * 0.45 +\n experience.importance * 0.35 +\n recencyFactor * 0.12 +\n accessFactor * 0.08;\n\n // Final reranking score: similarity dominates (70%), quality tiebreaks (30%)\n const rerankScore = similarity * 0.7 + qualityScore * 0.3;\n\n scored.push({ experience, score: rerankScore });\n }\n\n // Sort by combined reranking score (highest first)\n scored.sort((a, b) => b.score - a.score);\n const results = scored.slice(0, limit).map((item) => item.experience);\n\n for (const exp of results) {\n exp.accessCount++;\n exp.lastAccessedAt = now;\n this.dirtyExperiences.add(exp.id);\n }\n\n return results;\n }\n\n /** Fallback when embeddings are unavailable: sort by decayed confidence * importance. */\n private fallbackSort(limit: number): Experience[] {\n const all = Array.from(this.experiences.values());\n all.sort((a, b) => {\n const sa = this.decayManager.getDecayedConfidence(a) * a.importance;\n const sb = this.decayManager.getDecayedConfidence(b) * b.importance;\n return sb - sa;\n });\n return all.slice(0, limit);\n }\n\n async analyzeExperiences(domain?: string, type?: ExperienceType): Promise<ExperienceAnalysis> {\n const experiences = await this.queryExperiences({\n domain: domain ? [domain] : undefined,\n type: type ? [type] : undefined,\n limit: 100,\n });\n\n if (experiences.length === 0) {\n return {\n pattern: \"No experiences found for analysis\",\n frequency: 0,\n reliability: 0,\n alternatives: [],\n recommendations: [],\n };\n }\n\n const learnings = experiences.map((exp) => exp.learning);\n const commonWords = this.findCommonPatterns(learnings);\n\n const avgConfidence =\n experiences.reduce((sum, exp) => sum + exp.confidence, 0) / experiences.length;\n const outcomeConsistency = this.calculateOutcomeConsistency(experiences);\n const reliability = (avgConfidence + outcomeConsistency) / 2;\n\n const alternatives = this.extractAlternatives(experiences);\n const recommendations = this.generateRecommendations(experiences, reliability);\n\n return {\n pattern:\n commonWords.length > 0\n ? `Common patterns: ${commonWords.join(\", \")}`\n : \"No clear patterns detected\",\n frequency: experiences.length,\n reliability,\n alternatives,\n recommendations,\n };\n }\n\n private cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) return 0;\n\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n for (let i = 0; i < a.length; i++) {\n const valueA = a[i] ?? 0;\n const valueB = b[i] ?? 0;\n dotProduct += valueA * valueB;\n normA += valueA * valueA;\n normB += valueB * valueB;\n }\n\n if (normA === 0 || normB === 0) return 0;\n return dotProduct / (Math.sqrt(normA) * Math.sqrt(normB));\n }\n\n private findCommonPatterns(texts: string[]): string[] {\n const wordFreq = new Map<string, number>();\n\n for (const text of texts) {\n const words = text.toLowerCase().split(/\\s+/);\n for (const word of words) {\n if (word.length > 3) {\n wordFreq.set(word, (wordFreq.get(word) || 0) + 1);\n }\n }\n }\n\n const threshold = texts.length * 0.3;\n return Array.from(wordFreq.entries())\n .filter(([_, count]) => count >= threshold)\n .sort((a, b) => b[1] - a[1])\n .slice(0, 5)\n .map(([word]) => word);\n }\n\n private calculateOutcomeConsistency(experiences: Experience[]): number {\n if (experiences.length === 0) return 0;\n\n const outcomeCounts = new Map<OutcomeType, number>();\n for (const exp of experiences) {\n outcomeCounts.set(exp.outcome, (outcomeCounts.get(exp.outcome) || 0) + 1);\n }\n\n const maxCount = Math.max(...outcomeCounts.values());\n return maxCount / experiences.length;\n }\n\n private extractAlternatives(experiences: Experience[]): string[] {\n const alternatives = new Set<string>();\n\n for (const exp of experiences) {\n if (exp.type === ExperienceType.CORRECTION && exp.correctedBelief) {\n alternatives.add(exp.correctedBelief);\n }\n if (exp.outcome === OutcomeType.NEGATIVE && exp.learning.includes(\"instead\")) {\n const match = exp.learning.match(/instead\\s+(.+?)(?:\\.|$)/i);\n const alternative = match?.[1]?.trim();\n if (alternative) {\n alternatives.add(alternative);\n }\n }\n }\n\n return Array.from(alternatives).slice(0, 5);\n }\n\n private generateRecommendations(experiences: Experience[], reliability: number): string[] {\n const recommendations: string[] = [];\n\n if (reliability > 0.8) {\n recommendations.push(\"Continue using successful approaches\");\n recommendations.push(\"Document and share these reliable methods\");\n } else if (reliability > 0.6) {\n recommendations.push(\"Continue using successful approaches with caution\");\n recommendations.push(\"Monitor for potential issues\");\n recommendations.push(\"Consider backup strategies\");\n } else if (reliability > 0.4) {\n recommendations.push(\"Review and improve current approaches\");\n recommendations.push(\"Investigate failure patterns\");\n recommendations.push(\"Consider alternative methods\");\n } else {\n recommendations.push(\"Significant changes needed to current approach\");\n recommendations.push(\"Analyze failure causes thoroughly\");\n recommendations.push(\"Seek alternative solutions\");\n }\n\n const failureTypes = new Map<string, number>();\n experiences\n .filter((e) => e.outcome === OutcomeType.NEGATIVE)\n .forEach((e) => {\n const key = e.learning.toLowerCase();\n failureTypes.set(key, (failureTypes.get(key) || 0) + 1);\n });\n\n if (failureTypes.size > 0) {\n const mostCommonFailure = Array.from(failureTypes.entries()).sort((a, b) => b[1] - a[1])[0];\n\n if (mostCommonFailure && mostCommonFailure[1] > 1) {\n recommendations.push(`Address recurring issue: ${mostCommonFailure[0]}`);\n }\n }\n\n const domains = new Set(experiences.map((e) => e.domain));\n if (domains.has(\"shell\")) {\n recommendations.push(\"Verify command syntax and permissions\");\n }\n if (domains.has(\"coding\")) {\n recommendations.push(\"Test thoroughly before deployment\");\n }\n if (domains.has(\"network\")) {\n recommendations.push(\"Implement retry logic and error handling\");\n }\n\n return recommendations.slice(0, 5);\n }\n\n async stop(): Promise<void> {\n logger.info(\"[ExperienceService] Stopping...\");\n\n // Stop the persistence timer\n if (this.persistTimer) {\n clearInterval(this.persistTimer);\n this.persistTimer = null;\n }\n\n // Final persist of all dirty experiences + full save\n const experiencesToSave = Array.from(this.experiences.values());\n let savedCount = 0;\n\n for (const experience of experiencesToSave) {\n try {\n await this.saveExperienceToMemory(experience);\n savedCount++;\n } catch (err) {\n logger.warn(`[ExperienceService] Failed to save experience ${experience.id}: ${err}`);\n }\n }\n\n this.dirtyExperiences.clear();\n logger.info(`[ExperienceService] Saved ${savedCount} experiences`);\n }\n}\n",
|
|
14
14
|
"import type { Experience } from \"../types\";\nimport { ExperienceType } from \"../types\";\n\nexport interface DecayConfig {\n halfLife: number; // Time in milliseconds for confidence to decay by half\n minConfidence: number; // Minimum confidence level (never decays below this)\n decayStartDelay: number; // Time before decay starts (grace period)\n}\n\nconst DEFAULT_DECAY_CONFIG: DecayConfig = {\n halfLife: 30 * 24 * 60 * 60 * 1000, // 30 days\n minConfidence: 0.1, // 10% minimum\n decayStartDelay: 7 * 24 * 60 * 60 * 1000, // 7 days grace period\n};\n\nexport class ConfidenceDecayManager {\n private config: DecayConfig;\n\n constructor(config: Partial<DecayConfig> = {}) {\n this.config = { ...DEFAULT_DECAY_CONFIG, ...config };\n }\n\n /**\n * Calculate the decayed confidence for an experience\n */\n getDecayedConfidence(experience: Experience): number {\n const now = Date.now();\n const age = now - experience.createdAt;\n const specificConfig = this.getDomainSpecificDecay(experience);\n\n // No decay during grace period\n if (age < specificConfig.decayStartDelay) {\n return experience.confidence;\n }\n\n // Calculate decay based on half-life\n const decayTime = age - specificConfig.decayStartDelay;\n const halfLives = decayTime / specificConfig.halfLife;\n const decayFactor = 0.5 ** halfLives;\n\n // Apply decay but respect minimum\n const decayedConfidence = experience.confidence * decayFactor;\n return Math.max(specificConfig.minConfidence, decayedConfidence);\n }\n\n /**\n * Get experiences that need reinforcement (low confidence due to decay)\n */\n getExperiencesNeedingReinforcement(experiences: Experience[], threshold = 0.3): Experience[] {\n return experiences.filter((exp) => {\n const decayed = this.getDecayedConfidence(exp);\n return decayed < threshold && decayed > this.config.minConfidence;\n });\n }\n\n /**\n * Calculate reinforcement boost when an experience is validated\n */\n calculateReinforcementBoost(experience: Experience, validationStrength = 1.0): number {\n const currentConfidence = this.getDecayedConfidence(experience);\n const boost = (1 - currentConfidence) * validationStrength * 0.5;\n return Math.min(1, currentConfidence + boost);\n }\n\n /**\n * Adjust decay rate based on experience type and domain\n */\n getDomainSpecificDecay(experience: Experience): DecayConfig {\n const config = { ...this.config };\n\n // Facts and discoveries decay slower\n if (\n experience.type === ExperienceType.DISCOVERY ||\n experience.type === ExperienceType.LEARNING\n ) {\n config.halfLife *= 2; // Double the half-life\n }\n\n // Warnings and corrections decay slower (important to remember)\n if (\n experience.type === ExperienceType.WARNING ||\n experience.type === ExperienceType.CORRECTION\n ) {\n config.halfLife *= 1.5;\n config.minConfidence = 0.2; // Higher minimum\n }\n\n // Domain-specific adjustments\n switch (experience.domain) {\n case \"security\":\n case \"safety\":\n config.halfLife *= 3; // Security lessons decay very slowly\n config.minConfidence = 0.3;\n break;\n case \"performance\":\n config.halfLife *= 0.5; // Performance insights may change quickly\n break;\n case \"user_preference\":\n config.halfLife *= 0.7; // User preferences can change\n break;\n }\n\n return config;\n }\n\n /**\n * Get confidence trend for an experience over time\n */\n getConfidenceTrend(\n experience: Experience,\n points = 10\n ): Array<{ timestamp: number; confidence: number }> {\n const trend: Array<{ timestamp: number; confidence: number }> = [];\n const now = Date.now();\n const totalTime = now - experience.createdAt;\n const interval = totalTime / (points - 1);\n const specificConfig = this.getDomainSpecificDecay(experience);\n\n for (let i = 0; i < points; i++) {\n const timestamp = experience.createdAt + interval * i;\n const age = timestamp - experience.createdAt;\n\n let confidence: number;\n if (age < specificConfig.decayStartDelay) {\n confidence = experience.confidence;\n } else {\n const decayTime = age - specificConfig.decayStartDelay;\n const halfLives = decayTime / specificConfig.halfLife;\n const decayFactor = 0.5 ** halfLives;\n confidence = Math.max(specificConfig.minConfidence, experience.confidence * decayFactor);\n }\n\n trend.push({ timestamp, confidence });\n }\n\n return trend;\n }\n}\n",
|
|
15
15
|
"import type { UUID } from \"@elizaos/core\";\nimport type { Experience, JsonObject } from \"../types\";\nimport { ExperienceType, OutcomeType } from \"../types\";\n\nexport interface ExperienceChain {\n rootExperience: string; // UUID of the root experience\n chain: string[]; // Ordered list of experience IDs\n strength: number; // How strong the causal relationship is\n validated: boolean; // Whether the chain has been validated\n}\n\nexport interface ExperienceRelationship {\n fromId: string;\n toId: string;\n type: \"causes\" | \"contradicts\" | \"supports\" | \"supersedes\" | \"related\";\n strength: number; // 0-1\n metadata?: JsonObject;\n}\n\nexport class ExperienceRelationshipManager {\n private relationships: Map<string, ExperienceRelationship[]> = new Map();\n\n addRelationship(relationship: ExperienceRelationship): void {\n const { fromId } = relationship;\n if (!this.relationships.has(fromId)) {\n this.relationships.set(fromId, []);\n }\n this.relationships.get(fromId)?.push(relationship);\n }\n\n findRelationships(experienceId: string, type?: string): ExperienceRelationship[] {\n const rels = this.relationships.get(experienceId) || [];\n if (type) {\n return rels.filter((r) => r.type === type);\n }\n return rels;\n }\n\n detectCausalChain(experiences: Experience[]): ExperienceChain[] {\n const chains: ExperienceChain[] = [];\n\n // Sort experiences by timestamp\n const sorted = [...experiences].sort((a, b) => a.createdAt - b.createdAt);\n\n // Look for sequences where validation follows hypothesis\n for (let i = 0; i < sorted.length - 1; i++) {\n const current = sorted[i];\n if (!current) {\n continue;\n }\n\n if (current.type === ExperienceType.HYPOTHESIS) {\n const chain: string[] = [current.id];\n let j = i + 1;\n\n // Look for related experiences\n while (j < sorted.length) {\n const next = sorted[j];\n if (!next) {\n j++;\n continue;\n }\n\n // Check if next experience validates or contradicts the hypothesis\n if (next.relatedExperiences?.includes(current.id) || this.isRelated(current, next)) {\n chain.push(next.id);\n\n // If we found a validation, create a chain\n if (next.type === ExperienceType.VALIDATION) {\n chains.push({\n rootExperience: current.id,\n chain,\n strength: next.confidence,\n validated: next.outcome === OutcomeType.POSITIVE,\n });\n break;\n }\n }\n j++;\n }\n }\n }\n\n return chains;\n }\n\n private isRelated(exp1: Experience, exp2: Experience): boolean {\n // Check domain match\n if (exp1.domain === exp2.domain) {\n // Check temporal proximity (within 5 minutes)\n const timeDiff = Math.abs(exp2.createdAt - exp1.createdAt);\n if (timeDiff < 5 * 60 * 1000) {\n // Check content similarity\n if (this.contentSimilarity(exp1, exp2) > 0.7) {\n return true;\n }\n }\n }\n return false;\n }\n\n private contentSimilarity(exp1: Experience, exp2: Experience): number {\n // Simple keyword overlap for now\n const words1 = new Set(exp1.learning.toLowerCase().split(/\\s+/));\n const words2 = new Set(exp2.learning.toLowerCase().split(/\\s+/));\n\n const intersection = new Set([...words1].filter((x) => words2.has(x)));\n const union = new Set([...words1, ...words2]);\n\n return intersection.size / union.size;\n }\n\n findContradictions(experience: Experience, allExperiences: Experience[]): Experience[] {\n const contradictions: Experience[] = [];\n\n for (const other of allExperiences) {\n if (other.id === experience.id) continue;\n\n // Same action, different outcome\n if (\n other.action === experience.action &&\n other.outcome !== experience.outcome &&\n other.domain === experience.domain\n ) {\n contradictions.push(other);\n }\n\n // Explicit contradiction relationship\n const rels = this.findRelationships(experience.id, \"contradicts\");\n if (rels.some((r) => r.toId === other.id)) {\n contradictions.push(other);\n }\n }\n\n return contradictions;\n }\n\n getExperienceImpact(experienceId: string, allExperiences: Experience[]): number {\n let impact = 0;\n\n for (const exp of allExperiences) {\n if (exp.relatedExperiences?.includes(experienceId as UUID)) {\n impact += exp.importance;\n }\n }\n\n // Add impact from relationships\n const relationships = this.findRelationships(experienceId);\n for (const rel of relationships) {\n if (rel.type === \"causes\") {\n impact += rel.strength;\n }\n }\n\n return impact;\n }\n}\n"
|
|
16
16
|
],
|
|
17
|
-
"mappings": "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",
|
|
17
|
+
"mappings": "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",
|
|
18
18
|
"debugId": "19BED8D33D8C8ECD64756E2164756E21",
|
|
19
19
|
"names": []
|
|
20
20
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"experienceProvider.d.ts","sourceRoot":"","sources":["../../providers/experienceProvider.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EAGd,MAAM,eAAe,CAAC;AAUvB,eAAO,MAAM,kBAAkB,EAAE,QAqDhC,CAAC"}
|