169 lines
5.8 KiB
JavaScript
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
|