rdesign/frontend/node_modules/@copilotkit/runtime-client-gql/dist/message-conversion/gql-to-agui.cjs

169 lines
5.8 KiB
JavaScript

const require_graphql = require('../graphql/@generated/graphql.cjs');
const require_types = require('../client/types.cjs');
//#region src/message-conversion/gql-to-agui.ts
const VALID_IMAGE_FORMATS = [
"jpeg",
"png",
"webp",
"gif"
];
function validateImageFormat(format) {
return VALID_IMAGE_FORMATS.includes(format);
}
function gqlToAGUI(messages, actions, coAgentStateRenders) {
let aguiMessages = [];
messages = Array.isArray(messages) ? messages : [messages];
const actionResults = /* @__PURE__ */ new Map();
for (const message of messages) if (message.isResultMessage()) actionResults.set(message.actionExecutionId, message.result);
for (const message of messages) if (message.isTextMessage()) aguiMessages.push(gqlTextMessageToAGUIMessage(message));
else if (message.isResultMessage()) aguiMessages.push(gqlResultMessageToAGUIMessage(message));
else if (message.isActionExecutionMessage()) aguiMessages.push(gqlActionExecutionMessageToAGUIMessage(message, actions, actionResults));
else if (message.isAgentStateMessage()) aguiMessages.push(gqlAgentStateMessageToAGUIMessage(message, coAgentStateRenders));
else if (message.isImageMessage()) aguiMessages.push(gqlImageMessageToAGUIMessage(message));
else throw new Error("Unknown message type");
return aguiMessages;
}
function gqlActionExecutionMessageToAGUIMessage(message, actions, actionResults) {
const hasSpecificAction = actions && Object.values(actions).some((action) => action.name === message.name);
const hasWildcardAction = actions && Object.values(actions).some((action) => action.name === "*");
if (!actions || !hasSpecificAction && !hasWildcardAction) return {
id: message.id,
role: "assistant",
toolCalls: [actionExecutionMessageToAGUIMessage(message)],
name: message.name
};
const action = Object.values(actions).find((action) => action.name === message.name) || Object.values(actions).find((action) => action.name === "*");
const createRenderWrapper = (originalRender) => {
if (!originalRender) return void 0;
return (props) => {
let actionResult = actionResults?.get(message.id);
let status = "inProgress";
if (actionResult !== void 0) status = "complete";
else if (message.status?.code !== require_graphql.MessageStatusCode.Pending) status = "executing";
if (typeof props?.result === "string") try {
props.result = JSON.parse(props.result);
} catch (e) {}
if (typeof actionResult === "string") try {
actionResult = JSON.parse(actionResult);
} catch (e) {}
const baseProps = {
status: props?.status || status,
args: message.arguments || {},
result: props?.result || actionResult || void 0,
messageId: message.id
};
if (action.name === "*") return originalRender({
...baseProps,
...props,
name: message.name
});
else {
const respond = props?.respond ?? (() => {});
return originalRender({
...baseProps,
...props,
respond
});
}
};
};
return {
id: message.id,
role: "assistant",
content: "",
toolCalls: [actionExecutionMessageToAGUIMessage(message)],
generativeUI: createRenderWrapper(action.render),
name: message.name
};
}
function gqlAgentStateMessageToAGUIMessage(message, coAgentStateRenders) {
if (coAgentStateRenders && Object.values(coAgentStateRenders).some((render) => render.name === message.agentName)) {
const render = Object.values(coAgentStateRenders).find((render) => render.name === message.agentName);
const createRenderWrapper = (originalRender) => {
if (!originalRender) return void 0;
return (props) => {
return originalRender({ state: message.state });
};
};
return {
id: message.id,
role: "assistant",
generativeUI: createRenderWrapper(render.render),
agentName: message.agentName,
state: message.state
};
}
return {
id: message.id,
role: "assistant",
agentName: message.agentName,
state: message.state
};
}
function actionExecutionMessageToAGUIMessage(actionExecutionMessage) {
return {
id: actionExecutionMessage.id,
function: {
name: actionExecutionMessage.name,
arguments: JSON.stringify(actionExecutionMessage.arguments)
},
type: "function"
};
}
function gqlTextMessageToAGUIMessage(message) {
switch (message.role) {
case require_types.Role.Developer: return {
id: message.id,
role: "developer",
content: message.content
};
case require_types.Role.System: return {
id: message.id,
role: "system",
content: message.content
};
case require_types.Role.Assistant: return {
id: message.id,
role: "assistant",
content: message.content
};
case require_types.Role.User: return {
id: message.id,
role: "user",
content: message.content
};
default: throw new Error("Unknown message role");
}
}
function gqlResultMessageToAGUIMessage(message) {
return {
id: message.id,
role: "tool",
content: message.result,
toolCallId: message.actionExecutionId,
toolName: message.actionName
};
}
function gqlImageMessageToAGUIMessage(message) {
if (!validateImageFormat(message.format)) throw new Error(`Invalid image format: ${message.format}. Supported formats are: ${VALID_IMAGE_FORMATS.join(", ")}`);
if (!message.bytes || typeof message.bytes !== "string" || message.bytes.trim() === "") throw new Error("Image bytes must be a non-empty string");
const role = message.role === require_types.Role.Assistant ? "assistant" : "user";
return {
id: message.id,
role,
content: "",
image: {
format: message.format,
bytes: message.bytes
}
};
}
//#endregion
exports.gqlActionExecutionMessageToAGUIMessage = gqlActionExecutionMessageToAGUIMessage;
exports.gqlImageMessageToAGUIMessage = gqlImageMessageToAGUIMessage;
exports.gqlResultMessageToAGUIMessage = gqlResultMessageToAGUIMessage;
exports.gqlTextMessageToAGUIMessage = gqlTextMessageToAGUIMessage;
exports.gqlToAGUI = gqlToAGUI;
//# sourceMappingURL=gql-to-agui.cjs.map