UNPKG

@copilotkit/runtime-client-gql

Version:

<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />

219 lines (218 loc) • 7 kB
import { aguiToGQL } from "../chunk-YNQMTL2P.mjs"; import { gqlToAGUI } from "../chunk-MTD2RJDJ.mjs"; import { describe, globalExpect, test, vi } from "../chunk-2R7M2FWR.mjs"; import "../chunk-7ECCT6PK.mjs"; import "../chunk-PAQ6AHHC.mjs"; import "../chunk-X2UAP3QY.mjs"; import "../chunk-HEODM5TW.mjs"; import "../chunk-4KTMZMM2.mjs"; import "../chunk-P2AUSQOK.mjs"; import { ActionExecutionMessage, AgentStateMessage, ImageMessage, ResultMessage, Role, TextMessage } from "../chunk-ROUIRR4B.mjs"; import "../chunk-WM3ARNBD.mjs"; import "../chunk-DELDZXUX.mjs"; // src/message-conversion/roundtrip-conversion.test.ts function stripFunctions(obj) { if (typeof obj === "function") return void 0; if (Array.isArray(obj)) return obj.map(stripFunctions); if (obj && typeof obj === "object") { const out = {}; for (const k in obj) { if (typeof obj[k] !== "function") { out[k] = stripFunctions(obj[k]); } } return out; } return obj; } describe("roundtrip message conversion", () => { test("text message AGUI -> GQL -> AGUI", () => { const aguiMsg = { id: "user-1", role: "user", content: "Hello!" }; const gqlMsgs = aguiToGQL(aguiMsg); const aguiMsgs2 = gqlToAGUI(gqlMsgs); globalExpect(stripFunctions(aguiMsgs2[0])).toEqual(stripFunctions(aguiMsg)); }); test("text message GQL -> AGUI -> GQL", () => { const gqlMsg = new TextMessage({ id: "assistant-1", content: "Hi!", role: Role.Assistant }); const aguiMsgs = gqlToAGUI(gqlMsg); const gqlMsgs2 = aguiToGQL(aguiMsgs); globalExpect(gqlMsgs2[0].id).toBe(gqlMsg.id); globalExpect(gqlMsgs2[0].content).toBe(gqlMsg.content); globalExpect(gqlMsgs2[0].role).toBe(gqlMsg.role); }); test("tool message AGUI -> GQL -> AGUI", () => { const aguiMsg = { id: "tool-1", role: "tool", content: "Tool result", toolCallId: "tool-call-1", toolName: "testAction" }; const gqlMsgs = aguiToGQL(aguiMsg); const aguiMsgs2 = gqlToAGUI(gqlMsgs); globalExpect(stripFunctions(aguiMsgs2[0])).toEqual(stripFunctions(aguiMsg)); }); test("tool message GQL -> AGUI -> GQL", () => { const gqlMsg = new ResultMessage({ id: "tool-1", result: "Tool result", actionExecutionId: "tool-call-1", actionName: "testAction" }); const aguiMsgs = gqlToAGUI(gqlMsg); const gqlMsgs2 = aguiToGQL(aguiMsgs); globalExpect(gqlMsgs2[0].id).toBe(gqlMsg.id); globalExpect(gqlMsgs2[0].result).toBe(gqlMsg.result); globalExpect(gqlMsgs2[0].actionExecutionId).toBe(gqlMsg.actionExecutionId); }); test("action execution AGUI -> GQL -> AGUI", () => { const aguiMsg = { id: "assistant-1", role: "assistant", content: "Running action", toolCalls: [ { id: "tool-call-1", type: "function", function: { name: "doSomething", arguments: JSON.stringify({ foo: "bar" }) } } ] }; const gqlMsgs = aguiToGQL(aguiMsg); const aguiMsgs2 = gqlToAGUI(gqlMsgs); globalExpect(aguiMsgs2[0].role).toBe("assistant"); globalExpect(aguiMsgs2[1].role).toBe("assistant"); if ("toolCalls" in aguiMsgs2[1]) { globalExpect(aguiMsgs2[1].toolCalls[0].function.name).toBe("doSomething"); } }); test("action execution GQL -> AGUI -> GQL", () => { const actionExecMsg = new ActionExecutionMessage({ id: "tool-call-1", name: "doSomething", arguments: { foo: "bar" }, parentMessageId: "assistant-1" }); const aguiMsgs = gqlToAGUI([actionExecMsg]); const gqlMsgs2 = aguiToGQL(aguiMsgs); globalExpect(gqlMsgs2[1].id).toBe("tool-call-1"); globalExpect(gqlMsgs2[1].name).toBe("doSomething"); globalExpect(gqlMsgs2[1].arguments).toEqual({ foo: "bar" }); }); test("agent state GQL -> AGUI -> GQL", () => { const agentStateMsg = new AgentStateMessage({ id: "agent-state-1", agentName: "testAgent", state: { status: "running" }, role: Role.Assistant }); const aguiMsgs = gqlToAGUI([agentStateMsg]); const gqlMsgs2 = aguiToGQL(aguiMsgs); globalExpect(gqlMsgs2[0].id).toBe("agent-state-1"); globalExpect(gqlMsgs2[0].agentName).toBe("testAgent"); }); test("action execution with render function roundtrip", () => { const mockRender = vi.fn(); const aguiMsg = { id: "assistant-1", role: "assistant", content: "Running action", toolCalls: [ { id: "tool-call-1", type: "function", function: { name: "doSomething", arguments: JSON.stringify({ foo: "bar" }) } } ], generativeUI: mockRender }; const actions = { doSomething: { name: "doSomething" } }; const gqlMsgs = aguiToGQL(aguiMsg, actions); const aguiMsgs2 = gqlToAGUI(gqlMsgs, actions); globalExpect(typeof actions.doSomething.render).toBe("function"); if ("toolCalls" in aguiMsgs2[1]) { globalExpect(aguiMsgs2[1].toolCalls[0].function.name).toBe("doSomething"); } }); test("image message GQL -> AGUI -> GQL", () => { const gqlMsg = new ImageMessage({ id: "img-1", format: "jpeg", bytes: "somebase64string", role: Role.User }); const aguiMsgs = gqlToAGUI(gqlMsg); const gqlMsgs2 = aguiToGQL(aguiMsgs); globalExpect(gqlMsgs2[0].id).toBe(gqlMsg.id); globalExpect(gqlMsgs2[0].format).toBe(gqlMsg.format); globalExpect(gqlMsgs2[0].bytes).toBe(gqlMsg.bytes); globalExpect(gqlMsgs2[0].role).toBe(gqlMsg.role); }); test("image message AGUI -> GQL -> AGUI (assistant and user)", () => { const aguiAssistantImageMsg = { id: "img-assistant-1", role: "assistant", image: { format: "jpeg", bytes: "assistantbase64data" }, content: "" // required for type }; const gqlAssistantMsgs = aguiToGQL(aguiAssistantImageMsg); const aguiAssistantMsgs2 = gqlToAGUI(gqlAssistantMsgs); globalExpect(aguiAssistantMsgs2[0].id).toBe(aguiAssistantImageMsg.id); globalExpect(aguiAssistantMsgs2[0].role).toBe("assistant"); globalExpect(aguiAssistantMsgs2[0].image.format).toBe("jpeg"); globalExpect(aguiAssistantMsgs2[0].image.bytes).toBe("assistantbase64data"); const aguiUserImageMsg = { id: "img-user-1", role: "user", image: { format: "png", bytes: "userbase64data" }, content: "" // required for type }; const gqlUserMsgs = aguiToGQL(aguiUserImageMsg); const aguiUserMsgs2 = gqlToAGUI(gqlUserMsgs); globalExpect(aguiUserMsgs2[0].id).toBe(aguiUserImageMsg.id); globalExpect(aguiUserMsgs2[0].role).toBe("user"); globalExpect(aguiUserMsgs2[0].image.format).toBe("png"); globalExpect(aguiUserMsgs2[0].image.bytes).toBe("userbase64data"); }); }); //# sourceMappingURL=roundtrip-conversion.test.mjs.map