@ai.ntellect/core 0.1.97 → 0.1.98

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.
@@ -1,10 +1,26 @@
1
1
  import { Orchestrator } from "../llm/orchestrator";
2
2
  import { CacheMemory } from "../memory/cache";
3
3
  import { PersistentMemory } from "../memory/persistent";
4
- import { AgentEvent, User } from "../types";
4
+ import { ActionSchema, AgentEvent, QueueResult, User } from "../types";
5
+ export type State = {
6
+ behavior: {
7
+ role: string;
8
+ language: string;
9
+ guidelines: {
10
+ important: string[];
11
+ warnings: string[];
12
+ steps?: string[];
13
+ };
14
+ };
15
+ userRequest: string;
16
+ actions: ActionSchema[];
17
+ results: QueueResult[];
18
+ examplesMessages?: {
19
+ role: string;
20
+ content: string;
21
+ }[];
22
+ };
5
23
  export declare class Agent {
6
- private readonly SIMILARITY_THRESHOLD;
7
- private readonly MAX_RESULTS;
8
24
  private readonly actionHandler;
9
25
  private readonly user;
10
26
  private readonly orchestrator;
@@ -22,7 +38,7 @@ export declare class Agent {
22
38
  stream: boolean;
23
39
  maxEvaluatorIteration: number;
24
40
  });
25
- process(prompt: string, contextualizedPrompt: string, events: AgentEvent): Promise<any>;
41
+ process(prompt: string, events: AgentEvent): Promise<any>;
26
42
  private handleActions;
27
43
  private handleActionResults;
28
44
  private transformActions;
@@ -9,8 +9,6 @@ const sanitize_results_1 = require("../utils/sanitize-results");
9
9
  const ActionHandler_1 = require("./handlers/ActionHandler");
10
10
  class Agent {
11
11
  constructor({ user, orchestrator, persistentMemory, cacheMemory, stream, maxEvaluatorIteration = 1, }) {
12
- this.SIMILARITY_THRESHOLD = 95;
13
- this.MAX_RESULTS = 1;
14
12
  this.evaluatorIteration = 0;
15
13
  this.accumulatedResults = [];
16
14
  this.user = user;
@@ -22,37 +20,25 @@ class Agent {
22
20
  this.actionHandler = new ActionHandler_1.ActionHandler();
23
21
  this.accumulatedResults = [];
24
22
  }
25
- async process(prompt, contextualizedPrompt, events) {
26
- let actions = undefined;
27
- let isSimilar = false;
28
- if (this.cacheMemory) {
29
- const similarActions = await this.cacheMemory.findSimilarQueries(prompt, {
30
- similarityThreshold: this.SIMILARITY_THRESHOLD,
31
- maxResults: this.MAX_RESULTS,
32
- userId: this.user.id,
33
- scope: types_1.MemoryScope.GLOBAL,
34
- });
35
- if (similarActions.length > 0) {
36
- actions = queue_item_transformer_1.QueueItemTransformer.transformActionsToQueueItems(similarActions[0].data);
37
- isSimilar = true;
38
- }
39
- }
40
- if (!actions?.length && !isSimilar) {
41
- console.log("No similar actions found in cache for query: ", prompt);
42
- console.log("Requesting orchestrator for actions..");
43
- const request = await this.orchestrator.process(contextualizedPrompt);
44
- events.onMessage?.(request);
45
- actions = request.actions;
23
+ async process(prompt, events) {
24
+ console.log("Requesting orchestrator for actions..");
25
+ const request = await this.orchestrator.process(prompt, this.accumulatedResults);
26
+ events.onMessage?.(request);
27
+ const isOnChainAction = request.actions.some((action) => action.type === "on-chain");
28
+ if (isOnChainAction) {
29
+ return {
30
+ data: this.accumulatedResults,
31
+ initialPrompt: prompt,
32
+ };
46
33
  }
47
- return actions && actions.length > 0
34
+ return request.actions.length > 0
48
35
  ? this.handleActions({
49
36
  initialPrompt: prompt,
50
- contextualizedPrompt: contextualizedPrompt,
51
- actions: actions,
37
+ actions: request.actions,
52
38
  }, events)
53
39
  : undefined;
54
40
  }
55
- async handleActions({ initialPrompt, contextualizedPrompt, actions, }, events) {
41
+ async handleActions({ initialPrompt, actions, }, events) {
56
42
  const queueItems = this.transformActions(actions);
57
43
  const actionsResult = await this.actionHandler.executeActions(queueItems, this.orchestrator.tools, {
58
44
  onQueueStart: events.onQueueStart,
@@ -74,23 +60,16 @@ class Agent {
74
60
  const evaluator = new evaluator_1.Evaluator(this.orchestrator.tools, this.persistentMemory);
75
61
  console.log("Accumulated results:");
76
62
  console.dir(this.accumulatedResults, { depth: null });
77
- const sanitizedResults = sanitize_results_1.ResultSanitizer.sanitize(this.accumulatedResults);
78
- const evaluation = await evaluator.process(initialPrompt, contextualizedPrompt, sanitizedResults);
63
+ // const sanitizedResults = ResultSanitizer.sanitize(this.accumulatedResults);
64
+ const evaluation = await evaluator.process(initialPrompt, this.accumulatedResults);
79
65
  events.onMessage?.(evaluation);
80
66
  if (evaluation.isNextActionNeeded) {
81
67
  this.evaluatorIteration++;
82
68
  return this.handleActions({
83
- initialPrompt: contextualizedPrompt,
84
- contextualizedPrompt: initialPrompt,
69
+ initialPrompt: initialPrompt,
85
70
  actions: evaluation.nextActionsNeeded,
86
71
  }, events);
87
72
  }
88
- if (!this.actionHandler.hasNonPrepareActions(this.accumulatedResults)) {
89
- return {
90
- data: this.accumulatedResults,
91
- initialPrompt,
92
- };
93
- }
94
73
  return this.handleActionResults({
95
74
  data: this.accumulatedResults,
96
75
  initialPrompt,
@@ -101,19 +80,22 @@ class Agent {
101
80
  const sanitizedResults = sanitize_results_1.ResultSanitizer.sanitize(this.accumulatedResults);
102
81
  const summaryData = JSON.stringify({
103
82
  result: sanitizedResults,
104
- initialPrompt: actionsResult.initialPrompt,
105
83
  });
106
84
  this.accumulatedResults = [];
107
85
  this.evaluatorIteration = 0;
108
- await this.cacheMemory?.createMemory({
109
- content: actionsResult.initialPrompt,
110
- data: actionsResult.data,
111
- scope: types_1.MemoryScope.GLOBAL,
112
- type: types_1.MemoryType.ACTION,
113
- });
86
+ for (const action of actionsResult.data) {
87
+ if (!action.error) {
88
+ await this.cacheMemory?.createMemory({
89
+ content: actionsResult.initialPrompt,
90
+ data: action.result,
91
+ scope: types_1.MemoryScope.GLOBAL,
92
+ type: types_1.MemoryType.ACTION,
93
+ });
94
+ }
95
+ }
114
96
  return this.stream
115
- ? (await synthesizer.streamProcess(summaryData)).toDataStreamResponse()
116
- : await synthesizer.process(summaryData);
97
+ ? (await synthesizer.streamProcess(actionsResult.initialPrompt, summaryData)).toDataStreamResponse()
98
+ : await synthesizer.process(actionsResult.initialPrompt, this.accumulatedResults);
117
99
  }
118
100
  transformActions(actions) {
119
101
  let predefinedActions = queue_item_transformer_1.QueueItemTransformer.transformActionsToQueueItems(actions) || [];
@@ -1,9 +1,11 @@
1
- import { ActionSchema } from "../../types";
2
1
  export declare const evaluatorContext: {
3
- role: string;
4
- guidelines: {
5
- important: string[];
6
- warnings: string[];
2
+ behavior: {
3
+ language: string;
4
+ role: string;
5
+ guidelines: {
6
+ important: string[];
7
+ warnings: string[];
8
+ steps: string[];
9
+ };
7
10
  };
8
- compose: (goal: string, results: string, tools: ActionSchema[]) => string;
9
11
  };
@@ -1,38 +1,31 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.evaluatorContext = void 0;
4
- const inject_actions_1 = require("../../utils/inject-actions");
5
4
  exports.evaluatorContext = {
6
- role: "You are the evaluator agent. Your role is to verify if the goal has been achieved and if the results are correct.",
7
- guidelines: {
8
- important: [
9
- "Verify if all required actions were executed successfully",
10
- "Check if the results match the initial goal",
11
- "Identify any missing or incomplete information",
12
- "Extra and relevant information they don't have be stored in the memory: link symbol to token address, name to wallet, etc.",
13
- ],
14
- warnings: [
15
- "NEVER modify the results directly",
16
- "NEVER make assumptions about missing data",
17
- "NEVER repeat the same action if you already did it",
18
- ],
19
- },
20
- compose: (goal, results, tools) => {
21
- return `
22
- ${JSON.stringify(exports.evaluatorContext.guidelines)}
23
-
24
- ACTIONS COMPLETED: ${results}
25
-
26
- Initial Goal: ${goal} (You must use the same language)
27
-
28
- The actions available are: ${(0, inject_actions_1.injectActions)(tools)}
29
-
30
- Evaluate if the goal has been achieved and provide:
31
- 1. Success status with explanation (no action needed)
32
- 2. Next actions needed (if any)
33
- 3. Why you are doing the next actions or why you are not doing them
34
- 4. Extract relevant information to remember
35
- 5. For each facts, generate a memoryType (3 memory types: episodic, semantic, procedural)
36
- `;
5
+ behavior: {
6
+ language: "user_language",
7
+ role: "Your role is to verify if the goal has been achieved and make a response or suggest next actions.",
8
+ guidelines: {
9
+ important: [
10
+ "Verify if all required actions were executed successfully.",
11
+ "Check if the results align with the initial goal.",
12
+ "Identify and extract additional relevant information naturally during the process. Examples:",
13
+ " - Link a token symbol (e.g., 'USDC') to its address (e.g., '0xA0b8...6EB48').",
14
+ " - Associate a wallet address (e.g., '0x1234...abcd') to a user-friendly name (e.g., 'Work Wallet').",
15
+ " - Map a token address (e.g., '0x6B17...71d0F') back to its symbol or name (e.g., 'DAI').",
16
+ "Store these facts in memory with their type (episodic, semantic, or procedural).",
17
+ ],
18
+ warnings: [
19
+ "NEVER modify the results directly.",
20
+ "NEVER make assumptions about missing data.",
21
+ "NEVER repeat actions already completed unless explicitly required.",
22
+ ],
23
+ steps: [
24
+ "Verify success: Confirm if the goal has been fully or partially achieved. If partially, describe what's missing.",
25
+ "Recommend next actions: Clearly state what needs to be done next (if applicable) and why.",
26
+ "Store key facts: Store any relevant information in memory with their type (episodic, semantic, or procedural).",
27
+ "Be clear, concise, and prioritize storing key facts that may help improve future interactions.",
28
+ ],
29
+ },
37
30
  },
38
31
  };
@@ -1,9 +1,11 @@
1
+ import { State } from "../../agent";
1
2
  import { PersistentMemory } from "../../memory/persistent";
2
- import { ActionSchema } from "../../types";
3
+ import { ActionSchema, QueueResult } from "../../types";
3
4
  export declare class Evaluator {
4
5
  private readonly model;
5
6
  tools: ActionSchema[];
6
7
  private memory;
7
8
  constructor(tools: ActionSchema[], memory: PersistentMemory);
8
- process(prompt: string, goal: string, results: string): Promise<any>;
9
+ composeContext(state: State): string;
10
+ process(prompt: string, results: QueueResult[]): Promise<any>;
9
11
  }
@@ -5,6 +5,7 @@ const openai_1 = require("@ai-sdk/openai");
5
5
  const ai_1 = require("ai");
6
6
  const zod_1 = require("zod");
7
7
  const types_1 = require("../../types");
8
+ const inject_actions_1 = require("../../utils/inject-actions");
8
9
  const context_1 = require("./context");
9
10
  class Evaluator {
10
11
  constructor(tools, memory) {
@@ -12,24 +13,56 @@ class Evaluator {
12
13
  this.tools = tools;
13
14
  this.memory = memory;
14
15
  }
15
- async process(prompt, goal, results) {
16
+ composeContext(state) {
17
+ const { behavior, userRequest, actions, results } = state;
18
+ const { role, language, guidelines } = behavior;
19
+ const { important, warnings, steps } = guidelines;
20
+ const context = `
21
+ # ROLE: ${role}
22
+ # LANGUAGE: ${language}
23
+ # IMPORTANT: ${important.join("\n")}
24
+ # NEVER: ${warnings.join("\n")}
25
+ # USER_REQUEST: ${userRequest}
26
+ # ACTIONS AVAILABLE: ${(0, inject_actions_1.injectActions)(actions)}
27
+ # CURRENT_RESULTS: ${results.map((r) => r.result).join(", ")}
28
+ # STEPS: ${steps?.join("\n") || ""}
29
+ `;
30
+ return context;
31
+ }
32
+ async process(prompt, results) {
16
33
  try {
34
+ const context = this.composeContext({
35
+ behavior: context_1.evaluatorContext.behavior,
36
+ userRequest: prompt,
37
+ actions: this.tools,
38
+ results: results,
39
+ });
40
+ console.log("\nšŸ” Evaluator processing");
41
+ console.log("Goal:", prompt);
42
+ console.log("Results to evaluate:", JSON.stringify(results, null, 2));
17
43
  const response = await (0, ai_1.generateObject)({
18
44
  model: this.model,
19
45
  schema: zod_1.z.object({
20
46
  isRemindNeeded: zod_1.z.boolean(),
21
- extraInformationsToRemember: zod_1.z.array(zod_1.z.object({
47
+ importantToRemembers: zod_1.z.array(zod_1.z.object({
22
48
  memoryType: zod_1.z.string(),
23
49
  content: zod_1.z.string(),
24
50
  data: zod_1.z.string(),
25
51
  })),
26
52
  response: zod_1.z.string(),
27
53
  isNextActionNeeded: zod_1.z.boolean(),
28
- nextActionsNeeded: types_1.ActionSchema,
54
+ nextActionsNeeded: zod_1.z.array(zod_1.z.object({
55
+ name: zod_1.z.string(),
56
+ parameters: zod_1.z.array(zod_1.z.object({
57
+ name: zod_1.z.string(),
58
+ value: zod_1.z.any(),
59
+ })),
60
+ })),
29
61
  why: zod_1.z.string(),
30
62
  }),
31
63
  prompt: prompt,
32
- system: context_1.evaluatorContext.compose(goal, results, this.tools),
64
+ system: context,
65
+ temperature: 0,
33
66
  });
34
67
  const validatedResponse = {
35
68
  ...response.object,
@@ -39,44 +72,42 @@ class Evaluator {
39
72
  })),
40
73
  };
41
74
  if (validatedResponse.isRemindNeeded) {
42
- for (const item of validatedResponse.extraInformationsToRemember) {
43
- // Check if the item is already in the memory
75
+ console.log("\nšŸ’­ Processing important memories to store", validatedResponse);
76
+ for (const item of validatedResponse.importantToRemembers) {
77
+ console.log("\nšŸ“ Processing memory item:");
78
+ console.log("Type:", item.memoryType);
79
+ console.log("Content:", item.content);
44
80
  const memories = await this.memory.searchSimilarQueries(item.content, {
45
81
  similarityThreshold: 95,
46
82
  });
47
83
  if (memories.length > 0) {
48
- console.log("Similar memorie found, no need to remember", {
49
- memories,
50
- });
84
+ console.log("šŸ”„ Similar memory already exists - skipping");
51
85
  continue;
52
86
  }
53
- if (memories.length === 0) {
54
- console.log("Adding to memory", {
55
- query: item.content,
56
- data: item.data,
57
- });
58
- await this.memory.createMemory({
59
- id: crypto.randomUUID(),
60
- purpose: item.memoryType,
61
- query: item.content,
62
- data: item.data,
63
- scope: types_1.MemoryScope.GLOBAL,
64
- createdAt: new Date(),
65
- });
66
- }
87
+ console.log("✨ Storing new memory");
88
+ await this.memory.createMemory({
89
+ id: crypto.randomUUID(),
90
+ purpose: item.memoryType,
91
+ query: item.content,
92
+ data: item.data,
93
+ scope: types_1.MemoryScope.GLOBAL,
94
+ createdAt: new Date(),
95
+ });
67
96
  }
68
97
  }
69
- console.log("Evaluator response");
70
- console.dir(validatedResponse, { depth: null });
98
+ console.log("\nāœ… Evaluation completed");
99
+ console.log("─".repeat(50));
100
+ console.log("Results:", JSON.stringify(validatedResponse, null, 2));
71
101
  return validatedResponse;
72
102
  }
73
103
  catch (error) {
104
+ console.error("\nāŒ Evaluator error:", error.message);
74
105
  if (error) {
75
106
  console.log("Evaluator error");
76
107
  console.dir(error.value, { depth: null });
77
108
  console.error(error.message);
78
- if (error.value.extraInformationsToRemember.length > 0) {
79
- for (const item of error.value.extraInformationsToRemember) {
109
+ if (error.value.importantToRemembers.length > 0) {
110
+ for (const item of error.value.importantToRemembers) {
80
111
  // Check if the item is already in the memory
81
112
  const memories = await this.memory.searchSimilarQueries(item.content);
82
113
  if (memories.length === 0) {
@@ -1,9 +1,10 @@
1
- import { ActionSchema } from "../../types";
2
1
  export declare const orchestratorContext: {
3
- role: string;
4
- guidelines: {
5
- important: string[];
6
- warnings: string[];
2
+ behavior: {
3
+ language: string;
4
+ role: string;
5
+ guidelines: {
6
+ important: string[];
7
+ warnings: never[];
8
+ };
7
9
  };
8
- compose: (tools: ActionSchema[]) => string;
9
10
  };
@@ -1,23 +1,20 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.orchestratorContext = void 0;
4
- const inject_actions_1 = require("../../utils/inject-actions");
5
4
  exports.orchestratorContext = {
6
- role: "You are the orchestrator agent. Your role is to determine what actions are needed to achieve the user goal.",
7
- guidelines: {
8
- important: [
9
- "If there is no action to do, you must answer in the 'answer' field.",
10
- "If some parameters are not clear or missing, don't add the action, YOU MUST ask the user for them.",
11
- "ALWAYS use the same language as user request. (If it's English, use English, if it's French, use French, etc.)",
12
- "For QUESTIONS or ANALYSIS, BEFORE executing ANY actions, you MUST search in memory for similar queries AS THE ONLY ACTION TO EXECUTE.",
13
- ],
14
- warnings: ["NEVER repeat same actions if the user doesn't ask for it."],
15
- },
16
- compose: (tools) => {
17
- return `
18
- ${JSON.stringify(exports.orchestratorContext.guidelines)}
19
-
20
- The actions are: ${(0, inject_actions_1.injectActions)(tools)}
21
- `;
5
+ behavior: {
6
+ language: "user_language",
7
+ role: "You are the orchestrator agent. Your role is to determine what actions are needed to achieve the user goal.",
8
+ guidelines: {
9
+ important: [
10
+ "If there is no action to do, you must answer in the 'answer' field.",
11
+ "If some parameters are not clear or missing, don't add the action, YOU MUST ask the user for them.",
12
+ "ALWAYS use the same language as user request. (If it's English, use English, if it's French, use French, etc.)",
13
+ "For ON-CHAIN actions, just use the useful actions.",
14
+ "For QUESTIONS or ANALYSIS, you CAN search in memory and internal knowledge base.",
15
+ "NEVER repeat same actions if the user doesn't ask for it.",
16
+ ],
17
+ warnings: [],
18
+ },
22
19
  },
23
20
  };
@@ -1,9 +1,26 @@
1
+ import { State } from "../../agent";
2
+ import { CacheMemory } from "../../memory/cache";
1
3
  import { PersistentMemory } from "../../memory/persistent";
2
- import { ActionSchema, BaseLLM } from "../../types";
3
- export declare class Orchestrator implements BaseLLM {
4
+ import { ActionSchema, QueueResult } from "../../types";
5
+ export declare class Orchestrator {
4
6
  private readonly model;
5
7
  tools: ActionSchema[];
6
8
  private memory;
7
- constructor(tools: ActionSchema[], memory: PersistentMemory);
8
- process(prompt: string): Promise<any>;
9
+ private id;
10
+ constructor(id: string, tools: ActionSchema[], memory: {
11
+ persistent: PersistentMemory;
12
+ cache: CacheMemory;
13
+ });
14
+ composeContext(state: State): string;
15
+ process(prompt: string, results: QueueResult[]): Promise<{
16
+ actions: {
17
+ name: string;
18
+ type: string;
19
+ parameters: {
20
+ name: string;
21
+ value: any;
22
+ }[];
23
+ }[];
24
+ answer: string;
25
+ }>;
9
26
  }
@@ -5,24 +5,42 @@ const openai_1 = require("@ai-sdk/openai");
5
5
  const ai_1 = require("ai");
6
6
  const zod_1 = require("zod");
7
7
  const types_1 = require("../../types");
8
+ const inject_actions_1 = require("../../utils/inject-actions");
8
9
  const context_1 = require("./context");
9
10
  class Orchestrator {
10
- constructor(tools, memory) {
11
+ constructor(id, tools, memory) {
11
12
  this.model = (0, openai_1.openai)("gpt-4o");
13
+ this.id = id;
12
14
  this.memory = memory;
13
15
  this.tools = [
14
16
  ...tools,
15
17
  {
16
- name: "search_memory",
18
+ name: "search_internal_knowledge_base",
17
19
  description: "Search for relevant information in the internal knowledge base",
18
20
  parameters: zod_1.z.object({
19
21
  query: zod_1.z.string(),
20
22
  }),
21
23
  execute: async ({ query }) => {
22
- const memories = await this.memory.searchSimilarQueries(query, {
23
- similarityThreshold: 95,
24
+ const persistentMemories = await this.memory.persistent.searchSimilarQueries(query, {
25
+ similarityThreshold: 70,
24
26
  });
25
- return memories;
27
+ return persistentMemories;
28
+ },
29
+ },
30
+ {
31
+ name: "search_cache_memory",
32
+ description: "Search for relevant information in the cache",
33
+ parameters: zod_1.z.object({
34
+ query: zod_1.z.string(),
35
+ }),
36
+ execute: async ({ query }) => {
37
+ const cacheMemories = await this.memory.cache.findSimilarQueries(query, {
38
+ similarityThreshold: 70,
39
+ maxResults: 1,
40
+ userId: this.id,
41
+ scope: types_1.MemoryScope.GLOBAL,
42
+ });
43
+ return cacheMemories;
26
44
  },
27
45
  },
28
46
  {
@@ -37,7 +55,7 @@ class Orchestrator {
37
55
  whyStored: zod_1.z.string(),
38
56
  }),
39
57
  execute: async ({ query, purpose, data, scope, userId, }) => {
40
- const memories = await this.memory.createMemory({
58
+ const memories = await this.memory.persistent.createMemory({
41
59
  query,
42
60
  purpose,
43
61
  data,
@@ -51,38 +69,79 @@ class Orchestrator {
51
69
  },
52
70
  ];
53
71
  }
54
- async process(prompt) {
72
+ composeContext(state) {
73
+ const { behavior, userRequest, actions, results } = state;
74
+ const { role, language, guidelines } = behavior;
75
+ const { important, warnings } = guidelines;
76
+ const context = `
77
+ # ROLE: ${role}
78
+ # LANGUAGE: ${language}
79
+ # IMPORTANT: ${important.join("\n")}
80
+ # USER_REQUEST: ${userRequest}
81
+ # ACTIONS_AVAILABLES: ${(0, inject_actions_1.injectActions)(actions)} (NEVER REPEAT ACTIONS)
82
+ # CURRENT_RESULTS: ${results.map((r) => r.result).join(", ")}
83
+ `.trim();
84
+ return context;
85
+ }
86
+ async process(prompt, results) {
87
+ const state = this.composeContext({
88
+ behavior: context_1.orchestratorContext.behavior,
89
+ userRequest: prompt,
90
+ actions: this.tools,
91
+ results: results,
92
+ });
55
93
  try {
94
+ console.log("\nšŸŽ­ Orchestrator processing");
95
+ console.log("Prompt:", prompt);
56
96
  const response = await (0, ai_1.generateObject)({
57
97
  model: this.model,
58
98
  schema: zod_1.z.object({
59
- actions: types_1.ActionSchema,
99
+ actions: zod_1.z.array(zod_1.z.object({
100
+ name: zod_1.z.string(),
101
+ type: zod_1.z.enum(["on-chain", "off-chain", "question", "analysis"]),
102
+ parameters: zod_1.z.array(zod_1.z.object({
103
+ name: zod_1.z.string(),
104
+ value: zod_1.z.any(),
105
+ })),
106
+ })),
60
107
  answer: zod_1.z.string(),
61
108
  }),
62
109
  prompt: prompt,
63
- system: context_1.orchestratorContext.compose(this.tools),
110
+ system: state,
111
+ temperature: 0,
64
112
  });
65
113
  const validatedResponse = {
66
114
  ...response.object,
67
115
  actions: response.object.actions.map((action) => ({
68
116
  ...action,
69
- parameters: action.parameters || {},
117
+ parameters: Array.isArray(action.parameters)
118
+ ? action.parameters.map((param) => ({
119
+ name: param.name,
120
+ value: param.value ?? null,
121
+ }))
122
+ : Object.entries(action.parameters || {}).map(([name, value]) => ({
123
+ name,
124
+ value: value ?? null,
125
+ })),
70
126
  })),
71
127
  };
72
- console.log("Orchestrator response");
73
- console.dir(validatedResponse, { depth: null });
128
+ console.log("\nāœ… Orchestration completed");
129
+ console.log("─".repeat(50));
130
+ console.log("Actions determined:", validatedResponse.actions.map((a) => {
131
+ return `${a.name} (${a.type})`;
132
+ }));
133
+ if (validatedResponse.answer) {
134
+ console.log("Response:", validatedResponse.answer);
135
+ }
74
136
  return validatedResponse;
75
137
  }
76
138
  catch (error) {
77
- if (error) {
78
- console.log("Orchestrator response");
79
- console.dir(error.value, { depth: null });
80
- console.error(error.message);
81
- return {
82
- ...error.value,
83
- };
139
+ console.error("\nāŒ Orchestrator error:", error.message);
140
+ if (error?.value) {
141
+ console.log("Partial response:", JSON.stringify(error.value, null, 2));
142
+ return { ...error.value };
84
143
  }
85
- // throw error;
144
+ throw error;
86
145
  }
87
146
  }
88
147
  }