@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
JavaScript
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