@assistant-ui/react
Version:
TypeScript/React library for AI Chat
85 lines • 3.07 kB
JavaScript
import { fromThreadMessageLike } from "../runtime-cores/external-store/ThreadMessageLike.js";
import { isJSONValue } from "../../utils/json/is-json.js";
export const auiV0Encode = (message) => {
// TODO attachments are currently intentionally ignored
// info: ID and createdAt are ignored (we use the server value instead)
return {
role: message.role,
content: message.content.map((part) => {
const type = part.type;
switch (type) {
case "text": {
return {
type: "text",
text: part.text,
};
}
case "reasoning": {
return {
type: "reasoning",
text: part.text,
};
}
case "source": {
return {
type: "source",
sourceType: part.sourceType,
id: part.id,
url: part.url,
...(part.title ? { title: part.title } : undefined),
};
}
case "tool-call": {
if (!isJSONValue(part.result)) {
console.warn(`tool-call result is not JSON! ${JSON.stringify(part)}`);
}
return {
type: "tool-call",
toolCallId: part.toolCallId,
toolName: part.toolName,
...(JSON.stringify(part.args) === part.argsText
? {
args: part.args,
}
: { argsText: part.argsText }),
...(part.result
? { result: part.result }
: {}),
...(part.isError ? { isError: true } : {}),
};
}
default: {
const unhandledType = type;
throw new Error(`Message part type not supported by aui/v0: ${unhandledType}`);
}
}
}),
metadata: message.metadata,
...(message.status
? {
status: message.status?.type === "running"
? {
type: "incomplete",
reason: "cancelled",
}
: message.status,
}
: undefined),
};
};
export const auiV0Decode = (cloudMessage) => {
const payload = cloudMessage.content;
const message = fromThreadMessageLike({
id: cloudMessage.id,
createdAt: cloudMessage.created_at,
...payload,
}, cloudMessage.id, {
type: "complete",
reason: "unknown",
});
return {
parentId: cloudMessage.parent_id,
message,
};
};
//# sourceMappingURL=auiV0.js.map