@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;" />
1 lines • 33.8 kB
Source Map (JSON)
{"version":3,"sources":["../../src/message-conversion/agui-to-gql.test.ts"],"sourcesContent":["import { describe, test, expect } from \"vitest\";\nimport * as gql from \"../client\";\nimport agui from \"@copilotkit/shared\";\nimport {\n aguiToGQL,\n aguiTextMessageToGQLMessage,\n aguiToolCallToGQLActionExecution,\n aguiToolMessageToGQLResultMessage,\n aguiMessageWithRenderToGQL,\n aguiMessageWithImageToGQLMessage,\n} from \"./agui-to-gql\";\n\ndescribe(\"agui-to-gql\", () => {\n describe(\"aguiTextMessageToGQLMessage\", () => {\n test(\"should convert developer message\", () => {\n const aguiMessage: agui.Message = {\n id: \"dev-message-id\",\n role: \"developer\",\n content: \"Hello from developer\",\n };\n\n const result = aguiTextMessageToGQLMessage(aguiMessage);\n\n expect(result).toBeInstanceOf(gql.TextMessage);\n expect(result.id).toBe(\"dev-message-id\");\n expect(result.content).toBe(\"Hello from developer\");\n expect(result.role).toBe(gql.Role.Developer);\n });\n\n test(\"should convert system message\", () => {\n const aguiMessage: agui.Message = {\n id: \"system-message-id\",\n role: \"system\",\n content: \"System instruction\",\n };\n\n const result = aguiTextMessageToGQLMessage(aguiMessage);\n\n expect(result).toBeInstanceOf(gql.TextMessage);\n expect(result.id).toBe(\"system-message-id\");\n expect(result.content).toBe(\"System instruction\");\n expect(result.role).toBe(gql.Role.System);\n });\n\n test(\"should convert assistant message\", () => {\n const aguiMessage: agui.Message = {\n id: \"assistant-message-id\",\n role: \"assistant\",\n content: \"Assistant response\",\n };\n\n const result = aguiTextMessageToGQLMessage(aguiMessage);\n\n expect(result).toBeInstanceOf(gql.TextMessage);\n expect(result.id).toBe(\"assistant-message-id\");\n expect(result.content).toBe(\"Assistant response\");\n expect(result.role).toBe(gql.Role.Assistant);\n });\n\n test(\"should convert user message\", () => {\n const aguiMessage: agui.Message = {\n id: \"user-message-id\",\n role: \"user\",\n content: \"User input\",\n };\n\n const result = aguiTextMessageToGQLMessage(aguiMessage);\n\n expect(result).toBeInstanceOf(gql.TextMessage);\n expect(result.id).toBe(\"user-message-id\");\n expect(result.content).toBe(\"User input\");\n expect(result.role).toBe(gql.Role.User);\n });\n\n test(\"should throw error for unsupported role\", () => {\n const aguiMessage: agui.Message = {\n id: \"tool-message-id\",\n role: \"tool\",\n content: \"Tool response\",\n toolCallId: \"tool-call-id\",\n };\n\n expect(() => aguiTextMessageToGQLMessage(aguiMessage)).toThrow(\n \"Cannot convert message with role tool to TextMessage\",\n );\n });\n\n test(\"should handle undefined content\", () => {\n const aguiMessage: agui.Message = {\n id: \"assistant-message-id\",\n role: \"assistant\",\n content: undefined,\n } as any;\n\n const result = aguiTextMessageToGQLMessage(aguiMessage);\n\n expect(result.content).toBe(\"\");\n });\n });\n\n describe(\"aguiToolCallToGQLActionExecution\", () => {\n test(\"should convert function tool call to action execution message\", () => {\n const toolCall: agui.ToolCall = {\n id: \"tool-call-id\",\n type: \"function\",\n function: {\n name: \"testFunction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n };\n\n const result = aguiToolCallToGQLActionExecution(toolCall, \"parent-message-id\");\n\n expect(result).toBeInstanceOf(gql.ActionExecutionMessage);\n expect(result.id).toBe(\"tool-call-id\");\n expect(result.name).toBe(\"testFunction\");\n expect(result.arguments).toEqual({ param: \"value\" });\n expect(result.parentMessageId).toBe(\"parent-message-id\");\n });\n\n test(\"should throw error for unsupported tool call type\", () => {\n const toolCall = {\n id: \"tool-call-id\",\n type: \"unsupported-type\",\n function: {\n name: \"testFunction\",\n arguments: \"{}\",\n },\n } as any;\n\n expect(() => aguiToolCallToGQLActionExecution(toolCall, \"parent-id\")).toThrow(\n \"Unsupported tool call type\",\n );\n });\n });\n\n describe(\"aguiToolMessageToGQLResultMessage\", () => {\n test(\"should convert tool message to result message\", () => {\n const aguiMessage: agui.Message = {\n id: \"tool-message-id\",\n role: \"tool\",\n content: \"Tool execution result\",\n toolCallId: \"tool-call-id\",\n };\n\n const toolCallNames = { \"tool-call-id\": \"testFunction\" };\n const result = aguiToolMessageToGQLResultMessage(aguiMessage, toolCallNames);\n\n expect(result).toBeInstanceOf(gql.ResultMessage);\n expect(result.id).toBe(\"tool-message-id\");\n expect(result.result).toBe(\"Tool execution result\");\n expect(result.actionExecutionId).toBe(\"tool-call-id\");\n expect(result.actionName).toBe(\"testFunction\");\n });\n\n test(\"should throw error for non-tool message\", () => {\n const aguiMessage: agui.Message = {\n id: \"assistant-message-id\",\n role: \"assistant\",\n content: \"Assistant response\",\n };\n\n expect(() => aguiToolMessageToGQLResultMessage(aguiMessage, {})).toThrow(\n \"Cannot convert message with role assistant to ResultMessage\",\n );\n });\n\n test(\"should throw error for tool message without toolCallId\", () => {\n const aguiMessage = {\n id: \"tool-message-id\",\n role: \"tool\",\n content: \"Tool execution result\",\n } as any;\n\n expect(() => aguiToolMessageToGQLResultMessage(aguiMessage, {})).toThrow(\n \"Tool message must have a toolCallId\",\n );\n });\n\n test(\"should handle undefined content\", () => {\n const aguiMessage: agui.Message = {\n id: \"tool-message-id\",\n role: \"tool\",\n content: undefined,\n toolCallId: \"tool-call-id\",\n } as any;\n\n const toolCallNames = { \"tool-call-id\": \"testFunction\" };\n const result = aguiToolMessageToGQLResultMessage(aguiMessage, toolCallNames);\n\n expect(result.result).toBe(\"\");\n expect(result.actionName).toBe(\"testFunction\");\n });\n });\n\n describe(\"aguiToGQL\", () => {\n test(\"should convert an array of text messages\", () => {\n const aguiMessages: agui.Message[] = [\n {\n id: \"dev-1\",\n role: \"developer\",\n content: \"Hello\",\n },\n {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"Hi there\",\n },\n ];\n\n const result = aguiToGQL(aguiMessages);\n\n expect(result).toHaveLength(2);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect(result[0].id).toBe(\"dev-1\");\n expect((result[0] as gql.TextMessage).content).toBe(\"Hello\");\n expect((result[0] as gql.TextMessage).role).toBe(gql.Role.Developer);\n\n expect(result[1]).toBeInstanceOf(gql.TextMessage);\n expect(result[1].id).toBe(\"assistant-1\");\n expect((result[1] as gql.TextMessage).content).toBe(\"Hi there\");\n expect((result[1] as gql.TextMessage).role).toBe(gql.Role.Assistant);\n });\n\n test(\"should convert an array of text messages including user messages\", () => {\n const aguiMessages: agui.Message[] = [\n {\n id: \"user-1\",\n role: \"user\",\n content: \"Hello from user\",\n },\n {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"Hi there\",\n },\n {\n id: \"user-2\",\n role: \"user\",\n content: \"Another user message\",\n },\n ];\n\n const result = aguiToGQL(aguiMessages);\n\n expect(result).toHaveLength(3);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect(result[0].id).toBe(\"user-1\");\n expect((result[0] as gql.TextMessage).content).toBe(\"Hello from user\");\n expect((result[0] as gql.TextMessage).role).toBe(gql.Role.User);\n\n expect(result[1]).toBeInstanceOf(gql.TextMessage);\n expect(result[1].id).toBe(\"assistant-1\");\n expect((result[1] as gql.TextMessage).content).toBe(\"Hi there\");\n expect((result[1] as gql.TextMessage).role).toBe(gql.Role.Assistant);\n\n expect(result[2]).toBeInstanceOf(gql.TextMessage);\n expect(result[2].id).toBe(\"user-2\");\n expect((result[2] as gql.TextMessage).content).toBe(\"Another user message\");\n expect((result[2] as gql.TextMessage).role).toBe(gql.Role.User);\n });\n\n test(\"should handle assistant messages with tool calls\", () => {\n const aguiMessages: agui.Message[] = [\n {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"I'll execute a function\",\n toolCalls: [\n {\n id: \"tool-call-1\",\n type: \"function\",\n function: {\n name: \"testFunction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n },\n ],\n },\n ];\n\n const result = aguiToGQL(aguiMessages);\n\n expect(result).toHaveLength(2);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect(result[0].id).toBe(\"assistant-1\");\n\n expect(result[1]).toBeInstanceOf(gql.ActionExecutionMessage);\n expect(result[1].id).toBe(\"tool-call-1\");\n expect((result[1] as gql.ActionExecutionMessage).name).toBe(\"testFunction\");\n expect((result[1] as gql.ActionExecutionMessage).arguments).toEqual({ param: \"value\" });\n expect((result[1] as gql.ActionExecutionMessage).parentMessageId).toBe(\"assistant-1\");\n });\n\n test(\"should handle multiple tool calls in assistant message\", () => {\n const aguiMessages: agui.Message[] = [\n {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"I'll execute multiple functions\",\n toolCalls: [\n {\n id: \"tool-call-1\",\n type: \"function\",\n function: {\n name: \"firstFunction\",\n arguments: JSON.stringify({ param: \"value1\" }),\n },\n },\n {\n id: \"tool-call-2\",\n type: \"function\",\n function: {\n name: \"secondFunction\",\n arguments: JSON.stringify({ param: \"value2\" }),\n },\n },\n ],\n },\n ];\n\n const result = aguiToGQL(aguiMessages);\n\n expect(result).toHaveLength(3);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n\n expect(result[1]).toBeInstanceOf(gql.ActionExecutionMessage);\n expect(result[1].id).toBe(\"tool-call-1\");\n expect((result[1] as gql.ActionExecutionMessage).name).toBe(\"firstFunction\");\n\n expect(result[2]).toBeInstanceOf(gql.ActionExecutionMessage);\n expect(result[2].id).toBe(\"tool-call-2\");\n expect((result[2] as gql.ActionExecutionMessage).name).toBe(\"secondFunction\");\n });\n\n test(\"should convert tool messages to result messages\", () => {\n const aguiMessages: agui.Message[] = [\n {\n id: \"tool-1\",\n role: \"tool\",\n content: \"Tool result\",\n toolCallId: \"tool-call-1\",\n },\n ];\n\n const result = aguiToGQL(aguiMessages);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(gql.ResultMessage);\n expect(result[0].id).toBe(\"tool-1\");\n expect((result[0] as gql.ResultMessage).result).toBe(\"Tool result\");\n expect((result[0] as gql.ResultMessage).actionExecutionId).toBe(\"tool-call-1\");\n });\n\n test(\"should handle a mix of message types\", () => {\n const aguiMessages: agui.Message[] = [\n {\n id: \"dev-1\",\n role: \"developer\",\n content: \"Can you run a function?\",\n },\n {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"Yes, I'll run it\",\n toolCalls: [\n {\n id: \"tool-call-1\",\n type: \"function\",\n function: {\n name: \"testFunction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n },\n ],\n },\n {\n id: \"tool-1\",\n role: \"tool\",\n content: \"Function result\",\n toolCallId: \"tool-call-1\",\n },\n ];\n\n const result = aguiToGQL(aguiMessages);\n\n expect(result).toHaveLength(4);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect(result[0].id).toBe(\"dev-1\");\n\n expect(result[1]).toBeInstanceOf(gql.TextMessage);\n expect(result[1].id).toBe(\"assistant-1\");\n\n expect(result[2]).toBeInstanceOf(gql.ActionExecutionMessage);\n expect(result[2].id).toBe(\"tool-call-1\");\n\n expect(result[3]).toBeInstanceOf(gql.ResultMessage);\n expect(result[3].id).toBe(\"tool-1\");\n });\n\n test(\"should handle a mix of message types including user messages\", () => {\n const aguiMessages: agui.Message[] = [\n {\n id: \"user-1\",\n role: \"user\",\n content: \"Can you help me?\",\n },\n {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"Yes, I'll help you\",\n toolCalls: [\n {\n id: \"tool-call-1\",\n type: \"function\",\n function: {\n name: \"helpFunction\",\n arguments: JSON.stringify({ query: \"help\" }),\n },\n },\n ],\n },\n {\n id: \"tool-1\",\n role: \"tool\",\n content: \"Help result\",\n toolCallId: \"tool-call-1\",\n },\n {\n id: \"user-2\",\n role: \"user\",\n content: \"Thank you!\",\n },\n ];\n\n const result = aguiToGQL(aguiMessages);\n\n expect(result).toHaveLength(5);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect(result[0].id).toBe(\"user-1\");\n expect((result[0] as gql.TextMessage).role).toBe(gql.Role.User);\n\n expect(result[1]).toBeInstanceOf(gql.TextMessage);\n expect(result[1].id).toBe(\"assistant-1\");\n expect((result[1] as gql.TextMessage).role).toBe(gql.Role.Assistant);\n\n expect(result[2]).toBeInstanceOf(gql.ActionExecutionMessage);\n expect(result[2].id).toBe(\"tool-call-1\");\n\n expect(result[3]).toBeInstanceOf(gql.ResultMessage);\n expect(result[3].id).toBe(\"tool-1\");\n\n expect(result[4]).toBeInstanceOf(gql.TextMessage);\n expect(result[4].id).toBe(\"user-2\");\n expect((result[4] as gql.TextMessage).role).toBe(gql.Role.User);\n });\n });\n\n describe(\"aguiMessageWithRenderToGQL\", () => {\n test(\"should handle assistant message with tool calls and render function\", () => {\n const mockRender = () => \"Test Render\";\n const aguiMessage: agui.Message = {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"I'll execute a function\",\n toolCalls: [\n {\n id: \"tool-call-1\",\n type: \"function\",\n function: {\n name: \"testFunction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n },\n ],\n generativeUI: mockRender,\n };\n\n const actions: Record<string, any> = {\n testFunction: {\n name: \"testFunction\",\n },\n };\n\n const result = aguiMessageWithRenderToGQL(aguiMessage, actions);\n\n expect(result).toHaveLength(2);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect(result[1]).toBeInstanceOf(gql.ActionExecutionMessage);\n\n // Check that the render function was preserved in actions\n expect(actions.testFunction.render).toBe(mockRender);\n });\n\n test(\"should handle assistant message with render function but no tool calls\", () => {\n const mockRender = () => \"Agent State Render\";\n const aguiMessage: agui.Message = {\n id: \"agent-state-1\",\n role: \"assistant\",\n generativeUI: mockRender,\n };\n\n const coAgentStateRenders: Record<string, any> = {};\n\n const result = aguiMessageWithRenderToGQL(aguiMessage, undefined, coAgentStateRenders);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(gql.AgentStateMessage);\n expect((result[0] as gql.AgentStateMessage).agentName).toBe(\"unknown\");\n\n // Check that the render function was preserved in coAgentStateRenders\n expect(coAgentStateRenders.unknown.render).toBe(mockRender);\n });\n\n test(\"should handle regular assistant message without render function\", () => {\n const aguiMessage: agui.Message = {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"Regular assistant message\",\n };\n\n const result = aguiMessageWithRenderToGQL(aguiMessage);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect((result[0] as gql.TextMessage).content).toBe(\"Regular assistant message\");\n });\n\n test(\"should handle non-assistant messages normally\", () => {\n const aguiMessage: agui.Message = {\n id: \"user-1\",\n role: \"user\",\n content: \"User message\",\n };\n\n const result = aguiMessageWithRenderToGQL(aguiMessage);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect((result[0] as gql.TextMessage).role).toBe(gql.Role.User);\n });\n\n test(\"should handle multiple tool calls with render functions\", () => {\n const mockRender1 = () => \"Render 1\";\n const mockRender2 = () => \"Render 2\";\n const aguiMessage: agui.Message = {\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"I'll execute multiple functions\",\n toolCalls: [\n {\n id: \"tool-call-1\",\n type: \"function\",\n function: {\n name: \"firstFunction\",\n arguments: JSON.stringify({ param: \"value1\" }),\n },\n },\n {\n id: \"tool-call-2\",\n type: \"function\",\n function: {\n name: \"secondFunction\",\n arguments: JSON.stringify({ param: \"value2\" }),\n },\n },\n ],\n generativeUI: mockRender1,\n };\n\n const actions: Record<string, any> = {\n firstFunction: { name: \"firstFunction\" },\n secondFunction: { name: \"secondFunction\" },\n };\n\n const result = aguiMessageWithRenderToGQL(aguiMessage, actions);\n\n expect(result).toHaveLength(3);\n expect(result[0]).toBeInstanceOf(gql.TextMessage);\n expect(result[1]).toBeInstanceOf(gql.ActionExecutionMessage);\n expect(result[2]).toBeInstanceOf(gql.ActionExecutionMessage);\n\n // Assert that all actions receive the render function\n Object.values(actions).forEach((action) => {\n expect(action.render).toBe(mockRender1);\n });\n });\n });\n\n describe(\"aguiImageMessageToGQLMessage\", () => {\n test(\"should throw error for missing format or bytes in image message\", () => {\n const aguiMessage: agui.Message = {\n id: \"image-1\",\n role: \"assistant\",\n content: \"Image message\",\n } as any;\n\n expect(() => aguiMessageWithImageToGQLMessage(aguiMessage)).toThrow(\n \"Cannot convert message to ImageMessage: missing format or bytes\",\n );\n });\n\n test(\"should convert valid assistant image message\", () => {\n const aguiMessage: agui.Message = {\n id: \"image-2\",\n role: \"assistant\",\n image: {\n format: \"jpeg\",\n bytes: \"base64stringdata\",\n },\n };\n\n const result = aguiMessageWithImageToGQLMessage(aguiMessage);\n expect(result).toBeInstanceOf(gql.ImageMessage);\n expect(result.id).toBe(\"image-2\");\n expect(result.format).toBe(\"jpeg\");\n expect(result.bytes).toBe(\"base64stringdata\");\n expect(result.role).toBe(gql.Role.Assistant);\n });\n\n test(\"should convert valid user image message\", () => {\n const aguiMessage: agui.Message = {\n id: \"image-3\",\n role: \"user\",\n content: \"\",\n image: {\n format: \"png\",\n bytes: \"anotherbase64string\",\n },\n };\n\n const result = aguiMessageWithImageToGQLMessage(aguiMessage);\n expect(result).toBeInstanceOf(gql.ImageMessage);\n expect(result.id).toBe(\"image-3\");\n expect(result.format).toBe(\"png\");\n expect(result.bytes).toBe(\"anotherbase64string\");\n expect(result.role).toBe(gql.Role.User);\n });\n });\n});\n"],"mappings":"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","names":[]}