@ai.ntellect/core 0.1.84 → 0.1.89
Sign up to get free protection for your applications and to get access to all the features.
- package/agent/index.ts +7 -3
- package/llm/evaluator/context.ts +29 -23
- package/llm/synthesizer/context.ts +18 -3
- package/llm/synthesizer/index.ts +4 -2
- package/package.json +1 -1
package/agent/index.ts
CHANGED
@@ -186,7 +186,6 @@ export class Agent {
|
|
186
186
|
const sanitizedResults = ResultSanitizer.sanitize(this.accumulatedResults);
|
187
187
|
const summaryData = JSON.stringify({
|
188
188
|
result: sanitizedResults,
|
189
|
-
initialPrompt: actionsResult.initialPrompt,
|
190
189
|
});
|
191
190
|
|
192
191
|
this.accumulatedResults = [];
|
@@ -200,8 +199,13 @@ export class Agent {
|
|
200
199
|
});
|
201
200
|
|
202
201
|
return this.stream
|
203
|
-
? (
|
204
|
-
|
202
|
+
? (
|
203
|
+
await synthesizer.streamProcess(
|
204
|
+
actionsResult.initialPrompt,
|
205
|
+
summaryData
|
206
|
+
)
|
207
|
+
).toDataStreamResponse()
|
208
|
+
: await synthesizer.process(actionsResult.initialPrompt, summaryData);
|
205
209
|
}
|
206
210
|
|
207
211
|
private transformActions(actions: ActionSchema[]) {
|
package/llm/evaluator/context.ts
CHANGED
@@ -1,37 +1,43 @@
|
|
1
1
|
import { ActionSchema } from "../../types";
|
2
2
|
import { injectActions } from "../../utils/inject-actions";
|
3
|
-
|
4
3
|
export const evaluatorContext = {
|
5
4
|
role: "You are the evaluator agent. Your role is to verify if the goal has been achieved and if the results are correct.",
|
6
5
|
guidelines: {
|
7
6
|
important: [
|
8
|
-
"Verify if all required actions were executed successfully",
|
9
|
-
"Check if the results
|
10
|
-
"Identify
|
11
|
-
"
|
7
|
+
"Verify if all required actions were executed successfully.",
|
8
|
+
"Check if the results align with the initial goal.",
|
9
|
+
"Identify and extract additional relevant information naturally during the process. Examples:",
|
10
|
+
" - Link a token symbol (e.g., 'USDC') to its address (e.g., '0xA0b8...6EB48').",
|
11
|
+
" - Associate a wallet address (e.g., '0x1234...abcd') to a user-friendly name (e.g., 'Work Wallet').",
|
12
|
+
" - Map a token address (e.g., '0x6B17...71d0F') back to its symbol or name (e.g., 'DAI').",
|
13
|
+
"Store these facts in memory with their type (episodic, semantic, or procedural).",
|
12
14
|
],
|
13
15
|
warnings: [
|
14
|
-
"NEVER modify the results directly",
|
15
|
-
"NEVER make assumptions about missing data",
|
16
|
-
"NEVER repeat
|
16
|
+
"NEVER modify the results directly.",
|
17
|
+
"NEVER make assumptions about missing data.",
|
18
|
+
"NEVER repeat actions already completed unless explicitly required.",
|
17
19
|
],
|
18
20
|
},
|
19
21
|
compose: (goal: string, results: string, tools: ActionSchema[]) => {
|
20
22
|
return `
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
23
|
+
You are evaluating if the following goal has been achieved: "${goal}".
|
24
|
+
|
25
|
+
COMPLETED ACTIONS: ${results}
|
26
|
+
|
27
|
+
The tools available are: ${injectActions(tools)}
|
28
|
+
|
29
|
+
Follow these steps to evaluate:
|
30
|
+
1. Verify success: Confirm if the goal has been fully or partially achieved. If partially, describe what's missing.
|
31
|
+
2. Recommend next actions: Clearly state what needs to be done next (if applicable) and why.
|
32
|
+
3. Extract relevant information:
|
33
|
+
- Example: Link token symbols to addresses, map wallet names to addresses, or connect tokens to specific networks.
|
34
|
+
- For each fact, specify its memory type:
|
35
|
+
- **Episodic**: Record specific events. Format: [{"type": "episodic", "query": "query", "event": "event", "description": "description"}]
|
36
|
+
- **Semantic**: Store general knowledge. Format: [{"knowledge": "knowledge", "link": "link", "type": "semantic", "description": "description"}]
|
37
|
+
- **Procedural**: Save recurring workflows. Format: [{"type": "procedural", "actions": [{"name": "action_name", "parameters": {"param1": "value1", "param2": "value2"}}]]
|
38
|
+
4. Provide a final assessment: Explain if the user's goal is achievable with the tools and data available.
|
39
|
+
|
40
|
+
Be clear, concise, and prioritize storing key facts that may help improve future interactions.
|
41
|
+
`;
|
36
42
|
},
|
37
43
|
};
|
@@ -25,10 +25,12 @@ export const synthesizerContext = {
|
|
25
25
|
"NEVER explain technical errors or issues. Just say retry later.",
|
26
26
|
],
|
27
27
|
},
|
28
|
-
compose: (
|
28
|
+
compose: (initialPrompt: string, summaryData?: string) => {
|
29
29
|
return `
|
30
30
|
${JSON.stringify(synthesizerContext.guidelines)}
|
31
|
-
|
31
|
+
|
32
|
+
Initial prompt: ${initialPrompt} (Speak in the same language as the initial prompt)
|
33
|
+
Results: ${summaryData}
|
32
34
|
|
33
35
|
1. FOR ALL ANALYSIS OF SPECIFIC TOKEN, RESPECT THE FOLLOWING FORMAT:
|
34
36
|
--------------------------------
|
@@ -44,8 +46,21 @@ export const synthesizerContext = {
|
|
44
46
|
|
45
47
|
STOP AFTER TECHNICAL ANALYSIS SECTION WITHOUT ANY CONCLUDING STATEMENT OR DISCLAIMER OR ADDITIONAL COMMENTS
|
46
48
|
--------------------------------
|
49
|
+
|
50
|
+
2. FOR SECURITY CHECKS, USE THE FOLLOWING FORMAT:
|
51
|
+
--------------------------------
|
52
|
+
## Security check of x/y:
|
53
|
+
|
54
|
+
### Good:
|
55
|
+
Speak about the good points of the security check. If there is no good point, say "No good point found"
|
56
|
+
|
57
|
+
### Bad:
|
58
|
+
Speak about the bad points of the security check. If there is no bad point, say "No bad point found"
|
59
|
+
|
60
|
+
STOP AFTER SECURITY CHECK SECTION WITHOUT ANY CONCLUDING STATEMENT OR DISCLAIMER OR ADDITIONAL COMMENTS
|
61
|
+
--------------------------------
|
47
62
|
|
48
|
-
|
63
|
+
3. OTHERWISE FOR OTHER REQUESTS, USE THE FORMAT YOU WANT.
|
49
64
|
`;
|
50
65
|
},
|
51
66
|
};
|
package/llm/synthesizer/index.ts
CHANGED
@@ -9,6 +9,7 @@ export class Synthesizer implements BaseLLM {
|
|
9
9
|
|
10
10
|
async process(
|
11
11
|
prompt: string,
|
12
|
+
summaryData?: string,
|
12
13
|
onFinish?: (event: any) => void
|
13
14
|
): Promise<
|
14
15
|
| {
|
@@ -32,7 +33,7 @@ export class Synthesizer implements BaseLLM {
|
|
32
33
|
),
|
33
34
|
response: z.string(),
|
34
35
|
}),
|
35
|
-
prompt: synthesizerContext.compose(prompt),
|
36
|
+
prompt: synthesizerContext.compose(prompt, summaryData || ""),
|
36
37
|
system: synthesizerContext.role,
|
37
38
|
});
|
38
39
|
console.log("Synthesizer");
|
@@ -43,11 +44,12 @@ export class Synthesizer implements BaseLLM {
|
|
43
44
|
|
44
45
|
async streamProcess(
|
45
46
|
prompt: string,
|
47
|
+
summaryData?: string,
|
46
48
|
onFinish?: (event: any) => void
|
47
49
|
): Promise<StreamTextResult<Record<string, any>>> {
|
48
50
|
const result = await streamText({
|
49
51
|
model: this.model,
|
50
|
-
prompt: synthesizerContext.compose(prompt),
|
52
|
+
prompt: synthesizerContext.compose(prompt, summaryData || ""),
|
51
53
|
onFinish: onFinish,
|
52
54
|
system: synthesizerContext.role,
|
53
55
|
});
|