🚑 fix(export): Issue exporting Conversation with Assistants (#2769)

* 🚑 fix(export): use content as text if content is present in the message

If the endpoint is assistants, the text of the message goes into content, not message.text.

* refactor(ExportModel): TypeScript, remove unused code

---------

Co-authored-by: Yuichi Ohneda <ohneda@gmail.com>
This commit is contained in:
Danny Avila 2024-05-17 14:10:40 -04:00 committed by GitHub
parent 31479d6a48
commit 53fe2f6453
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 627 additions and 493 deletions

View file

@ -0,0 +1,78 @@
import { useRecoilCallback } from 'recoil';
import type { TMessage } from 'librechat-data-provider';
import store from '~/store';
export default function useBuildMessageTree() {
const getSiblingIdx = useRecoilCallback(
({ snapshot }) =>
async (messageId: string | null | undefined) =>
await snapshot.getPromise(store.messagesSiblingIdxFamily(messageId)),
[],
);
// return an object or an array based on branches and recursive option
// messageId is used to get siblindIdx from recoil snapshot
const buildMessageTree = async ({
messageId,
message,
messages,
branches = false,
recursive = false,
}: {
messageId: string | null | undefined;
message: TMessage | null;
messages: TMessage[] | null;
branches?: boolean;
recursive?: boolean;
}): Promise<TMessage | TMessage[]> => {
let children: TMessage[] = [];
if (messages?.length) {
if (branches) {
for (const message of messages) {
children.push(
(await buildMessageTree({
messageId: message?.messageId,
message: message,
messages: message?.children || [],
branches,
recursive,
})) as TMessage,
);
}
} else {
let message = messages[0];
if (messages?.length > 1) {
const siblingIdx = await getSiblingIdx(messageId);
message = messages[messages.length - siblingIdx - 1];
}
children = [
(await buildMessageTree({
messageId: message?.messageId,
message: message,
messages: message?.children || [],
branches,
recursive,
})) as TMessage,
];
}
}
if (recursive && message) {
return { ...message, children: children };
} else {
let ret: TMessage[] = [];
if (message) {
const _message = { ...message };
delete _message.children;
ret = [_message];
}
for (const child of children) {
ret = ret.concat(child);
}
return ret;
}
};
return buildMessageTree;
}