refactor: embedding messages format

This commit is contained in:
jialin
2026-03-26 17:59:33 +08:00
committed by jialin
parent bb3cef89c1
commit c74118e913
7 changed files with 186 additions and 112 deletions
@@ -50,11 +50,21 @@ const normalizeEmbeddingToCanvas = (
self.onmessage = (
event: MessageEvent<{
embeddings: any[];
fileList: { text: string; name: string; uid: number | string }[];
textList: { text: string; name: string; uid: number | string }[];
fileList: {
content: string;
imgs?: { uid: number | string; dataUrl: string }[];
name: string;
uid: number | string;
}[];
textList: {
content: string;
imgs?: { uid: number | string; dataUrl: string }[];
name: string;
uid: number | string;
}[];
}>
) => {
const { embeddings, fileList, textList } = event.data;
const { embeddings, fileList = [], textList } = event.data;
try {
const dataList = embeddings.map((item) => {
@@ -71,8 +81,12 @@ self.onmessage = (
const pcadata = pca.predict(dataList, { nComponents: 2 }).to2DArray();
const input = [
...textList.map((item) => item.text).filter((item) => item),
...fileList.map((item) => item.text).filter((item) => item)
...textList
.map((item) => item.content || (item.imgs?.length ? `[image]` : ''))
.filter((item) => item),
...fileList
.map((item) => item.content || (item.imgs?.length ? `[image]` : ''))
.filter((item) => item)
];
const list = pcadata.map((item: number[], index: number) => {
@@ -83,7 +97,7 @@ self.onmessage = (
};
});
const embeddingJson = embeddings.map((o, index) => {
const embeddingJson = embeddings.map((o) => {
const item = _.cloneDeep(o);
item.embedding = item.embedding.slice(0, 5);
item.embedding.push(null);
+24 -2
View File
@@ -49,9 +49,13 @@ export const formatMessageParams = (messageList: any[]) => {
return result;
};
export const generateMessagesByListContent = (messageList: any[]) => {
export const generateMessagesByListContent = (
messageList: any[],
multimodal?: boolean
) => {
if (!messageList.length) return [];
return messageList.map((item: MessageItem) => {
// image
if (item.imgs?.length || item.audio?.length) {
const content: any[] = [];
// image
@@ -90,7 +94,25 @@ export const generateMessagesByListContent = (messageList: any[]) => {
};
}
return _.omit(item, ['uid', 'imgs', 'audio']);
// for multimodal model, if there is text content but no image or audio, also send as multimodal format
if (
multimodal &&
item.content &&
!item.imgs?.length &&
!item.audio?.length
) {
return {
role: item.role,
content: [
{
type: 'text',
text: item.content
}
]
};
}
return _.omit(item, ['uid', 'imgs', 'audio', 'name']);
});
};