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