Skip to content

Commit

Permalink
fix(langgraph): Dedupe input (right-side) messages in messageStateRed…
Browse files Browse the repository at this point in the history
…ucer (#846)
  • Loading branch information
jacoblee93 authored Feb 6, 2025
1 parent d63df56 commit ae6e5b2
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 1 deletion.
5 changes: 4 additions & 1 deletion libs/langgraph/src/graph/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export function messagesStateReducer(
const leftMessages = (leftArray as BaseMessageLike[]).map(
coerceMessageLikeToMessage
);
const rightMessages = (rightArray as BaseMessageLike[]).map(
let rightMessages = (rightArray as BaseMessageLike[]).map(
coerceMessageLikeToMessage
);
// assign missing ids
Expand All @@ -36,12 +36,15 @@ export function messagesStateReducer(
m.lc_kwargs.id = m.id;
}
}
const dedupeMap = new Map();
for (const m of rightMessages) {
if (m.id === null || m.id === undefined) {
m.id = v4();
m.lc_kwargs.id = m.id;
}
dedupeMap.set(m.id, m);
}
rightMessages = Array.from(dedupeMap.values());
// merge
const leftIdxById = new Map(leftMessages.map((m, i) => [m.id, i]));
const merged = [...leftMessages];
Expand Down
21 changes: 21 additions & 0 deletions libs/langgraph/src/tests/prebuilt.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -791,3 +791,24 @@ describe("MessagesAnnotation", () => {
expect(res2.messages.length).toEqual(1);
});
});

describe("messagesStateReducer", () => {
it("should dedupe messages", () => {
const deduped = messagesStateReducer(
[new HumanMessage({ id: "foo", content: "bar" })],
[new HumanMessage({ id: "foo", content: "bar2" })]
);
expect(deduped.length).toEqual(1);
expect(deduped[0].content).toEqual("bar2");
});

it("should dedupe messages if there are dupes on the right", () => {
const messages = [
new HumanMessage({ id: "foo", content: "bar" }),
new HumanMessage({ id: "foo", content: "bar2" }),
];
const deduped = messagesStateReducer([], messages);
expect(deduped.length).toEqual(1);
expect(deduped[0].content).toEqual("bar2");
});
});

0 comments on commit ae6e5b2

Please sign in to comment.