@assistant-ui/react
Version:
Typescript/React library for AI Chat
143 lines • 4.06 kB
JavaScript
// src/runtimes/edge/converters/toLanguageModelMessages.ts
var assistantMessageSplitter = () => {
const stash = [];
let assistantMessage = {
role: "assistant",
content: []
};
let toolMessage = {
role: "tool",
content: []
};
return {
addTextContentPart: (part) => {
if (toolMessage.content.length > 0) {
stash.push(assistantMessage);
stash.push(toolMessage);
assistantMessage = {
role: "assistant",
content: []
};
toolMessage = {
role: "tool",
content: []
};
}
assistantMessage.content.push(part);
},
addToolCallPart: (part) => {
assistantMessage.content.push({
type: "tool-call",
toolCallId: part.toolCallId,
toolName: part.toolName,
args: part.args
});
toolMessage.content.push({
type: "tool-result",
toolCallId: part.toolCallId,
toolName: part.toolName,
..."artifact" in part ? { artifact: part.artifact } : {},
result: part.result === void 0 ? "Error: tool is has no configured code to run" : part.result,
isError: part.isError ?? part.result === void 0
});
},
getMessages: () => {
if (toolMessage.content.length > 0) {
return [...stash, assistantMessage, toolMessage];
}
return [...stash, assistantMessage];
}
};
};
function toLanguageModelMessages(message, options = {}) {
const includeId = options.unstable_includeId ?? false;
return message.flatMap((message2) => {
const role = message2.role;
switch (role) {
case "system": {
return [
{
...includeId ? { unstable_id: message2.id } : {},
role: "system",
content: message2.content[0].text
}
];
}
case "user": {
const attachments = "attachments" in message2 ? message2.attachments : [];
const content = [
...message2.content,
...attachments.map((a) => a.content).flat()
];
const msg = {
...includeId ? { unstable_id: message2.id } : {},
role: "user",
content: content.map(
(part) => {
const type = part.type;
switch (type) {
case "text": {
return part;
}
case "image": {
return {
type: "image",
image: new URL(part.image)
};
}
case "file": {
return {
type: "file",
data: new URL(part.data),
mimeType: part.mimeType
};
}
default: {
const unhandledType = type;
throw new Error(
`Unspported content part type: ${unhandledType}`
);
}
}
}
)
};
return [msg];
}
case "assistant": {
const splitter = assistantMessageSplitter();
for (const part of message2.content) {
const type = part.type;
switch (type) {
case "reasoning":
case "source":
case "file": {
break;
}
case "text": {
splitter.addTextContentPart(part);
break;
}
case "tool-call": {
splitter.addToolCallPart(part);
break;
}
default: {
const unhandledType = type;
throw new Error(`Unhandled content part type: ${unhandledType}`);
}
}
}
return splitter.getMessages();
}
default: {
const unhandledRole = role;
throw new Error(`Unknown message role: ${unhandledRole}`);
}
}
});
}
export {
toLanguageModelMessages
};
//# sourceMappingURL=toLanguageModelMessages.mjs.map