From b3681bf68196c22753785c3a0d3b64d2d0d90ffa Mon Sep 17 00:00:00 2001 From: Brian Peiris <79419+brianpeiris@users.noreply.github.com> Date: Sun, 14 Jul 2024 18:24:49 -0400 Subject: [PATCH] fix: DataCloneError when using FunctionTool (#1037) --- .changeset/short-plants-sip.md | 6 +++++ .../src/global/settings/callback-manager.ts | 4 +--- packages/core/tests/event-system.test.ts | 22 +++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 .changeset/short-plants-sip.md diff --git a/.changeset/short-plants-sip.md b/.changeset/short-plants-sip.md new file mode 100644 index 000000000..91d2a1f03 --- /dev/null +++ b/.changeset/short-plants-sip.md @@ -0,0 +1,6 @@ +--- +"@llamaindex/core": patch +"llamaindex": patch +--- + +fix: DataCloneError when using FunctionTool diff --git a/packages/core/src/global/settings/callback-manager.ts b/packages/core/src/global/settings/callback-manager.ts index 53c87db66..e8f6750f7 100644 --- a/packages/core/src/global/settings/callback-manager.ts +++ b/packages/core/src/global/settings/callback-manager.ts @@ -105,9 +105,7 @@ export class CallbackManager { } queueMicrotask(() => { cbs.forEach((handler) => - handler( - LlamaIndexCustomEvent.fromEvent(event, structuredClone(detail)), - ), + handler(LlamaIndexCustomEvent.fromEvent(event, { ...detail })), ); }); } diff --git a/packages/core/tests/event-system.test.ts b/packages/core/tests/event-system.test.ts index 657391219..b24f32d95 100644 --- a/packages/core/tests/event-system.test.ts +++ b/packages/core/tests/event-system.test.ts @@ -6,6 +6,9 @@ declare module "@llamaindex/core/global" { test: { value: number; }; + functionTest: { + fn: ({ x }: { x: number }) => string; + }; } } @@ -42,6 +45,25 @@ describe("event system", () => { expect(callback).toHaveBeenCalledTimes(1); }); + test("dispatch function tool event", async () => { + const testFunction = ({ x }: { x: number }) => `${x * 2}`; + let callback; + Settings.callbackManager.on( + "functionTest", + (callback = vi.fn((event) => { + const data = event.detail; + expect(data.fn).toBe(testFunction); + })), + ); + + Settings.callbackManager.dispatchEvent("functionTest", { + fn: testFunction, + }); + expect(callback).toHaveBeenCalledTimes(0); + await new Promise((resolve) => process.nextTick(resolve)); + expect(callback).toHaveBeenCalledTimes(1); + }); + // rollup doesn't support decorators for now // test('wrap event caller', async () => { // class A { -- GitLab