@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 • 40.2 kB
Source Map (JSON)
{"version":3,"sources":["../../src/message-conversion/gql-to-agui.test.ts"],"sourcesContent":["import { describe, test, expect, vi } from \"vitest\";\nimport * as gql from \"../client\";\nimport { MessageStatusCode } from \"../graphql/@generated/graphql\";\nimport {\n gqlToAGUI,\n gqlTextMessageToAGUIMessage,\n gqlResultMessageToAGUIMessage,\n gqlImageMessageToAGUIMessage,\n} from \"./gql-to-agui\";\n\ndescribe(\"message-conversion\", () => {\n describe(\"gqlTextMessageToAGUIMessage\", () => {\n test(\"should convert developer message\", () => {\n const gqlMessage = new gql.TextMessage({\n id: \"dev-message-id\",\n content: \"Hello from developer\",\n role: gql.Role.Developer,\n });\n\n const result = gqlTextMessageToAGUIMessage(gqlMessage);\n\n expect(result).toEqual({\n id: \"dev-message-id\",\n role: \"developer\",\n content: \"Hello from developer\",\n });\n });\n\n test(\"should convert system message\", () => {\n const gqlMessage = new gql.TextMessage({\n id: \"system-message-id\",\n content: \"System instruction\",\n role: gql.Role.System,\n });\n\n const result = gqlTextMessageToAGUIMessage(gqlMessage);\n\n expect(result).toEqual({\n id: \"system-message-id\",\n role: \"system\",\n content: \"System instruction\",\n });\n });\n\n test(\"should convert assistant message\", () => {\n const gqlMessage = new gql.TextMessage({\n id: \"assistant-message-id\",\n content: \"Assistant response\",\n role: gql.Role.Assistant,\n });\n\n const result = gqlTextMessageToAGUIMessage(gqlMessage);\n\n expect(result).toEqual({\n id: \"assistant-message-id\",\n role: \"assistant\",\n content: \"Assistant response\",\n });\n });\n\n test(\"should throw error for unknown role\", () => {\n const gqlMessage = new gql.TextMessage({\n id: \"unknown-message-id\",\n content: \"Unknown message\",\n role: \"unknown\" as any,\n });\n\n expect(() => gqlTextMessageToAGUIMessage(gqlMessage)).toThrow(\"Unknown message role\");\n });\n });\n\n describe(\"gqlResultMessageToAGUIMessage\", () => {\n test(\"should convert result message to tool message\", () => {\n const gqlMessage = new gql.ResultMessage({\n id: \"result-id\",\n result: \"Function result data\",\n actionExecutionId: \"action-exec-123\",\n actionName: \"testAction\",\n });\n\n const result = gqlResultMessageToAGUIMessage(gqlMessage);\n\n expect(result).toEqual({\n id: \"result-id\",\n role: \"tool\",\n content: \"Function result data\",\n toolCallId: \"action-exec-123\",\n toolName: \"testAction\",\n });\n });\n });\n\n describe(\"gqlToAGUI\", () => {\n test(\"should convert an array of text messages\", () => {\n const gqlMessages = [\n new gql.TextMessage({\n id: \"dev-1\",\n content: \"Hello\",\n role: gql.Role.Developer,\n }),\n new gql.TextMessage({\n id: \"assistant-1\",\n content: \"Hi there\",\n role: gql.Role.Assistant,\n }),\n ];\n\n const result = gqlToAGUI(gqlMessages);\n\n expect(result).toHaveLength(2);\n expect(result[0]).toEqual({\n id: \"dev-1\",\n role: \"developer\",\n content: \"Hello\",\n });\n expect(result[1]).toEqual({\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"Hi there\",\n });\n });\n\n test(\"should handle agent state messages\", () => {\n const gqlMessages = [new gql.AgentStateMessage({ id: \"agent-state-1\" })];\n\n const result = gqlToAGUI(gqlMessages);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toEqual({\n id: \"agent-state-1\",\n role: \"assistant\",\n });\n });\n\n // test(\"should throw error for unknown message type\", () => {\n // // Create a message with unknown type\n // const unknownMessage = new gql.Message({ id: \"unknown-1\" });\n // // Override the type checking methods to simulate unknown type\n // unknownMessage.isTextMessage = () => false as any;\n // unknownMessage.isResultMessage = () => false as any;\n // unknownMessage.isActionExecutionMessage = () => false as any;\n // unknownMessage.isAgentStateMessage = () => false as any;\n // unknownMessage.isImageMessage = () => false as any;\n\n // expect(() => gqlToAGUI([unknownMessage])).toThrow(\"Unknown message type\");\n // });\n\n test(\"should handle a mix of message types\", () => {\n const gqlMessages = [\n new gql.TextMessage({\n id: \"dev-1\",\n content: \"Run action\",\n role: gql.Role.Developer,\n }),\n new gql.TextMessage({\n id: \"assistant-1\",\n content: \"I'll run the action\",\n role: gql.Role.Assistant,\n }),\n new gql.ResultMessage({\n id: \"result-1\",\n result: \"Action result\",\n actionExecutionId: \"action-exec-1\",\n actionName: \"testAction\",\n }),\n ];\n\n const result = gqlToAGUI(gqlMessages);\n\n expect(result).toHaveLength(3);\n expect(result[0]).toEqual({\n id: \"dev-1\",\n role: \"developer\",\n content: \"Run action\",\n });\n expect(result[1]).toEqual({\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"I'll run the action\",\n });\n expect(result[2]).toEqual({\n id: \"result-1\",\n role: \"tool\",\n content: \"Action result\",\n toolCallId: \"action-exec-1\",\n toolName: \"testAction\",\n });\n });\n\n test(\"should handle action execution messages with parent messages\", () => {\n const assistantMsg = new gql.TextMessage({\n id: \"assistant-1\",\n content: \"I'll execute an action\",\n role: gql.Role.Assistant,\n });\n\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n parentMessageId: \"assistant-1\",\n });\n\n const result = gqlToAGUI([assistantMsg, actionExecMsg]);\n\n // Now we expect 2 messages: the original assistant message and the action execution message\n expect(result).toHaveLength(2);\n expect(result[0]).toEqual({\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"I'll execute an action\",\n });\n expect(result[1]).toEqual({\n id: \"action-1\",\n role: \"assistant\",\n name: \"testAction\",\n toolCalls: [\n {\n id: \"action-1\",\n function: {\n name: \"testAction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n type: \"function\",\n },\n ],\n });\n });\n\n test(\"should handle multiple action execution messages for the same parent\", () => {\n const assistantMsg = new gql.TextMessage({\n id: \"assistant-1\",\n content: \"I'll execute multiple actions\",\n role: gql.Role.Assistant,\n });\n\n const action1 = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"firstAction\",\n arguments: { param: \"value1\" },\n parentMessageId: \"assistant-1\",\n });\n\n const action2 = new gql.ActionExecutionMessage({\n id: \"action-2\",\n name: \"secondAction\",\n arguments: { param: \"value2\" },\n parentMessageId: \"assistant-1\",\n });\n\n const result = gqlToAGUI([assistantMsg, action1, action2]);\n\n // Now we expect 3 messages: the original assistant message and 2 separate action execution messages\n expect(result).toHaveLength(3);\n expect(result[0]).toEqual({\n id: \"assistant-1\",\n role: \"assistant\",\n content: \"I'll execute multiple actions\",\n });\n expect(result[1]).toEqual({\n id: \"action-1\",\n role: \"assistant\",\n name: \"firstAction\",\n toolCalls: [\n {\n id: \"action-1\",\n function: {\n name: \"firstAction\",\n arguments: JSON.stringify({ param: \"value1\" }),\n },\n type: \"function\",\n },\n ],\n });\n expect(result[2]).toEqual({\n id: \"action-2\",\n role: \"assistant\",\n name: \"secondAction\",\n toolCalls: [\n {\n id: \"action-2\",\n function: {\n name: \"secondAction\",\n arguments: JSON.stringify({ param: \"value2\" }),\n },\n type: \"function\",\n },\n ],\n });\n });\n\n test(\"should not add toolCalls to non-assistant messages\", () => {\n const developerMsg = new gql.TextMessage({\n id: \"dev-1\",\n content: \"Developer message\",\n role: gql.Role.Developer,\n });\n\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n parentMessageId: \"dev-1\", // This should be ignored since parent is not assistant\n });\n\n const result = gqlToAGUI([developerMsg, actionExecMsg]);\n\n // Now we expect 2 messages: the developer message and the action execution as assistant message\n expect(result).toHaveLength(2);\n expect(result[0]).toEqual({\n id: \"dev-1\",\n role: \"developer\",\n content: \"Developer message\",\n });\n // The action execution becomes its own assistant message regardless of parent\n expect(result[1]).toEqual({\n id: \"action-1\",\n role: \"assistant\",\n name: \"testAction\",\n toolCalls: [\n {\n id: \"action-1\",\n function: {\n name: \"testAction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n type: \"function\",\n },\n ],\n });\n });\n\n test(\"should handle action execution messages without actions context\", () => {\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n });\n\n const result = gqlToAGUI([actionExecMsg]);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toEqual({\n id: \"action-1\",\n role: \"assistant\",\n name: \"testAction\",\n toolCalls: [\n {\n id: \"action-1\",\n function: {\n name: \"testAction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n type: \"function\",\n },\n ],\n });\n // Should not have render functions without actions context\n expect(result[0]).not.toHaveProperty(\"render\");\n expect(result[0]).not.toHaveProperty(\"renderAndWaitForResponse\");\n });\n\n test(\"should handle action execution messages with actions context and render functions\", () => {\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n status: { code: MessageStatusCode.Pending },\n });\n\n const mockRender = vi.fn();\n const mockRenderAndWaitForResponse = (props: any) => \"Test Render With Response\";\n\n const actions = {\n testAction: {\n name: \"testAction\",\n render: mockRender,\n renderAndWaitForResponse: mockRenderAndWaitForResponse,\n },\n };\n\n const result = gqlToAGUI([actionExecMsg], actions);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n id: \"action-1\",\n role: \"assistant\",\n name: \"testAction\",\n content: \"\",\n toolCalls: [\n {\n id: \"action-1\",\n function: {\n name: \"testAction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n type: \"function\",\n },\n ],\n });\n\n // Should have generativeUI function\n expect(result[0]).toHaveProperty(\"generativeUI\");\n expect(typeof (result[0] as any).generativeUI).toBe(\"function\");\n });\n\n test(\"should provide correct status in generativeUI function props\", () => {\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n status: { code: MessageStatusCode.Pending },\n });\n\n const mockRender = vi.fn();\n const actions = {\n testAction: {\n name: \"testAction\",\n render: mockRender,\n },\n };\n\n const result = gqlToAGUI([actionExecMsg], actions);\n\n // Call the generativeUI function\n (result[0] as any).generativeUI?.();\n\n expect(mockRender).toHaveBeenCalledWith({\n status: \"inProgress\",\n args: { param: \"value\" },\n result: undefined,\n respond: expect.any(Function),\n messageId: \"action-1\",\n });\n });\n\n test(\"should provide executing status when not pending\", () => {\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n status: { code: MessageStatusCode.Success },\n });\n\n const mockRender = vi.fn();\n const actions = {\n testAction: {\n name: \"testAction\",\n render: mockRender,\n },\n };\n\n const result = gqlToAGUI([actionExecMsg], actions);\n\n // Call the generativeUI function\n (result[0] as any).generativeUI?.();\n\n expect(mockRender).toHaveBeenCalledWith({\n status: \"executing\",\n args: { param: \"value\" },\n result: undefined,\n respond: expect.any(Function),\n messageId: \"action-1\",\n });\n });\n\n test(\"should provide complete status when result is available\", () => {\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n status: { code: MessageStatusCode.Success },\n });\n\n const resultMsg = new gql.ResultMessage({\n id: \"result-1\",\n result: \"Action completed successfully\",\n actionExecutionId: \"action-1\",\n actionName: \"testAction\",\n });\n\n const mockRender = vi.fn();\n const actions = {\n testAction: {\n name: \"testAction\",\n render: mockRender,\n },\n };\n\n const result = gqlToAGUI([actionExecMsg, resultMsg], actions);\n\n // Find the action execution message result (not the tool result)\n const actionMessage = result.find((msg) => msg.role === \"assistant\" && \"toolCalls\" in msg);\n\n // Call the generativeUI function\n (actionMessage as any)?.generativeUI?.();\n\n expect(mockRender).toHaveBeenCalledWith({\n status: \"complete\",\n args: { param: \"value\" },\n result: \"Action completed successfully\",\n respond: expect.any(Function),\n messageId: \"action-1\",\n });\n });\n\n test(\"should handle generativeUI function props override\", () => {\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n status: { code: MessageStatusCode.Pending },\n });\n\n const mockRender = vi.fn();\n const actions = {\n testAction: {\n name: \"testAction\",\n render: mockRender,\n },\n };\n\n const result = gqlToAGUI([actionExecMsg], actions);\n\n // Call with custom props\n (result[0] as any).generativeUI?.({\n status: \"custom\",\n customProp: \"test\",\n respond: () => \"custom respond\",\n });\n\n expect(mockRender).toHaveBeenCalledWith({\n status: \"custom\",\n args: { param: \"value\" },\n result: undefined,\n respond: expect.any(Function),\n customProp: \"test\",\n messageId: \"action-1\",\n });\n });\n\n test(\"should handle missing render functions gracefully\", () => {\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"testAction\",\n arguments: { param: \"value\" },\n });\n\n const actions = {\n testAction: {\n name: \"testAction\",\n // No render functions provided\n },\n };\n\n const result = gqlToAGUI([actionExecMsg], actions);\n\n expect(result[0]).toMatchObject({\n id: \"action-1\",\n role: \"assistant\",\n name: \"testAction\",\n content: \"\",\n toolCalls: [\n {\n id: \"action-1\",\n function: {\n name: \"testAction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n type: \"function\",\n },\n ],\n });\n\n // Should have undefined generativeUI functions\n expect((result[0] as any).generativeUI).toBeUndefined();\n });\n\n test(\"should handle action not found in actions context\", () => {\n const actionExecMsg = new gql.ActionExecutionMessage({\n id: \"action-1\",\n name: \"unknownAction\",\n arguments: { param: \"value\" },\n });\n\n const actions = {\n testAction: {\n name: \"testAction\",\n render: () => \"Test\",\n },\n };\n\n const result = gqlToAGUI([actionExecMsg], actions);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toEqual({\n id: \"action-1\",\n role: \"assistant\",\n name: \"unknownAction\",\n toolCalls: [\n {\n id: \"action-1\",\n function: {\n name: \"unknownAction\",\n arguments: JSON.stringify({ param: \"value\" }),\n },\n type: \"function\",\n },\n ],\n });\n\n // Should not have generativeUI functions when action not found\n expect(result[0]).not.toHaveProperty(\"generativeUI\");\n });\n\n test(\"should handle agent state messages with coAgentStateRenders\", () => {\n const agentStateMsg = new gql.AgentStateMessage({\n id: \"agent-state-1\",\n agentName: \"testAgent\",\n state: { status: \"running\", data: \"test data\" },\n role: gql.Role.Assistant,\n });\n\n const mockRender = vi.fn();\n const coAgentStateRenders = {\n testAgent: {\n name: \"testAgent\",\n render: mockRender,\n },\n };\n\n const result = gqlToAGUI([agentStateMsg], undefined, coAgentStateRenders);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toEqual({\n id: \"agent-state-1\",\n role: \"assistant\",\n agentName: \"testAgent\",\n state: { status: \"running\", data: \"test data\" },\n generativeUI: expect.any(Function),\n });\n\n // Should have generativeUI function\n expect(result[0]).toHaveProperty(\"generativeUI\");\n expect(typeof (result[0] as any).generativeUI).toBe(\"function\");\n\n // Call the generativeUI function\n (result[0] as any).generativeUI?.();\n\n expect(mockRender).toHaveBeenCalledWith({\n state: { status: \"running\", data: \"test data\" },\n });\n });\n\n test(\"should handle agent state messages without coAgentStateRenders\", () => {\n const agentStateMsg = new gql.AgentStateMessage({\n id: \"agent-state-1\",\n agentName: \"testAgent\",\n state: { status: \"running\", data: \"test data\" },\n role: gql.Role.Assistant,\n });\n\n const result = gqlToAGUI([agentStateMsg]);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toEqual({\n id: \"agent-state-1\",\n role: \"assistant\",\n agentName: \"testAgent\",\n state: { status: \"running\", data: \"test data\" },\n });\n\n // Should not have generativeUI functions without coAgentStateRenders\n expect(result[0]).not.toHaveProperty(\"generativeUI\");\n });\n\n test(\"should handle agent state messages with agent not found in coAgentStateRenders\", () => {\n const agentStateMsg = new gql.AgentStateMessage({\n id: \"agent-state-1\",\n agentName: \"unknownAgent\",\n state: { status: \"running\", data: \"test data\" },\n role: gql.Role.Assistant,\n });\n\n const coAgentStateRenders = {\n testAgent: {\n name: \"testAgent\",\n render: () => \"Test\",\n },\n };\n\n const result = gqlToAGUI([agentStateMsg], undefined, coAgentStateRenders);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toEqual({\n id: \"agent-state-1\",\n role: \"assistant\",\n agentName: \"unknownAgent\",\n state: { status: \"running\", data: \"test data\" },\n });\n\n // Should not have generativeUI functions when agent not found\n expect(result[0]).not.toHaveProperty(\"generativeUI\");\n });\n\n test(\"should handle user role messages\", () => {\n const userMsg = new gql.TextMessage({\n id: \"user-1\",\n content: \"Hello from user\",\n role: gql.Role.User,\n });\n\n const result = gqlToAGUI([userMsg]);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toEqual({\n id: \"user-1\",\n role: \"user\",\n content: \"Hello from user\",\n });\n });\n\n test(\"should handle mixed message types including agent state messages\", () => {\n const textMsg = new gql.TextMessage({\n id: \"text-1\",\n content: \"Hello\",\n role: gql.Role.Assistant,\n });\n\n const agentStateMsg = new gql.AgentStateMessage({\n id: \"agent-state-1\",\n agentName: \"testAgent\",\n state: { status: \"running\" },\n role: gql.Role.Assistant,\n });\n\n const mockRender = vi.fn();\n const coAgentStateRenders = {\n testAgent: {\n name: \"testAgent\",\n render: mockRender,\n },\n };\n\n const result = gqlToAGUI([textMsg, agentStateMsg], undefined, coAgentStateRenders);\n\n expect(result).toHaveLength(2);\n expect(result[0]).toEqual({\n id: \"text-1\",\n role: \"assistant\",\n content: \"Hello\",\n });\n expect(result[1]).toMatchObject({\n id: \"agent-state-1\",\n role: \"assistant\",\n agentName: \"testAgent\",\n state: { status: \"running\" },\n generativeUI: expect.any(Function),\n });\n expect(result[1]).toHaveProperty(\"generativeUI\");\n });\n });\n\n describe(\"gqlImageMessageToAGUIMessage\", () => {\n test(\"should throw error for invalid image format\", () => {\n const invalidImageMsg = new gql.ImageMessage({\n id: \"img-1\",\n format: \"bmp\", // not in VALID_IMAGE_FORMATS\n bytes: \"somebase64string\",\n role: gql.Role.User,\n });\n expect(() => gqlImageMessageToAGUIMessage(invalidImageMsg)).toThrow(\"Invalid image format\");\n });\n\n test(\"should throw error for empty image bytes\", () => {\n const invalidImageMsg = new gql.ImageMessage({\n id: \"img-2\",\n format: \"jpeg\",\n bytes: \"\",\n role: gql.Role.User,\n });\n expect(() => gqlImageMessageToAGUIMessage(invalidImageMsg)).toThrow(\n \"Image bytes must be a non-empty string\",\n );\n });\n\n test(\"should convert valid image message\", () => {\n const validImageMsg = new gql.ImageMessage({\n id: \"img-3\",\n format: \"jpeg\",\n bytes: \"somebase64string\",\n role: gql.Role.User,\n });\n const result = gqlImageMessageToAGUIMessage(validImageMsg);\n expect(result).toMatchObject({\n id: \"img-3\",\n role: \"user\",\n content: \"\",\n image: {\n format: \"jpeg\",\n bytes: \"somebase64string\",\n },\n });\n });\n\n test(\"should convert valid user image message\", () => {\n const validImageMsg = new gql.ImageMessage({\n id: \"img-user-1\",\n format: \"jpeg\",\n bytes: \"userbase64string\",\n role: gql.Role.User,\n });\n const result = gqlImageMessageToAGUIMessage(validImageMsg);\n expect(result).toMatchObject({\n id: \"img-user-1\",\n role: \"user\",\n content: \"\",\n image: {\n format: \"jpeg\",\n bytes: \"userbase64string\",\n },\n });\n });\n\n test(\"should convert valid assistant image message\", () => {\n const validImageMsg = new gql.ImageMessage({\n id: \"img-assistant-1\",\n format: \"png\",\n bytes: \"assistantbase64string\",\n role: gql.Role.Assistant,\n });\n const result = gqlImageMessageToAGUIMessage(validImageMsg);\n expect(result).toMatchObject({\n id: \"img-assistant-1\",\n role: \"assistant\",\n content: \"\",\n image: {\n format: \"png\",\n bytes: \"assistantbase64string\",\n },\n });\n });\n });\n});\n"],"mappings":"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","names":[]}