blob: 3dc11f8e7343a2d4af05dc97488bfa9d670760dd [file] [log] [blame]
Pokey Rulee2a8c2f2025-04-23 15:09:25 +01001import { AgentMessage } from "../types";
2
3export function aggregateAgentMessages(
4 arr1: AgentMessage[],
Philip Zeyliger72682df2025-04-23 13:09:46 -07005 arr2: AgentMessage[],
6): AgentMessage[] {
Pokey Rulee2a8c2f2025-04-23 15:09:25 +01007 const mergedArray = [...arr1, ...arr2];
8 const seenIds = new Set<number>();
9 const toolCallResults = new Map<string, AgentMessage>();
10
11 let ret: AgentMessage[] = mergedArray
12 .filter((msg) => {
13 if (msg.type == "tool") {
14 toolCallResults.set(msg.tool_call_id, msg);
15 return false;
16 }
17 if (seenIds.has(msg.idx)) {
18 return false; // Skip if idx is already seen
19 }
20
21 seenIds.add(msg.idx);
22 return true;
23 })
24 .sort((a: AgentMessage, b: AgentMessage) => a.idx - b.idx);
25
26 // Attach any tool_call result messages to the original message's tool_call object.
27 ret.forEach((msg) => {
28 msg.tool_calls?.forEach((toolCall) => {
29 if (toolCallResults.has(toolCall.tool_call_id)) {
30 toolCall.result_message = toolCallResults.get(toolCall.tool_call_id);
31 }
32 });
33 });
34 return ret;
35}