forked from open-webui/open-webui
feat: include only last images
This commit is contained in:
parent
f70e6caf0e
commit
6c7c35ad12
2 changed files with 77 additions and 38 deletions
|
@ -316,27 +316,45 @@
|
||||||
// Scroll down
|
// Scroll down
|
||||||
window.scrollTo({ top: document.body.scrollHeight });
|
window.scrollTo({ top: document.body.scrollHeight });
|
||||||
|
|
||||||
|
const messagesBody = [
|
||||||
|
$settings.system
|
||||||
|
? {
|
||||||
|
role: 'system',
|
||||||
|
content: $settings.system
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
...messages
|
||||||
|
]
|
||||||
|
.filter((message) => message)
|
||||||
|
.map((message, idx, arr) => ({
|
||||||
|
role: message.role,
|
||||||
|
content: arr.length - 2 !== idx ? message.content : message?.raContent ?? message.content,
|
||||||
|
...(message.files && {
|
||||||
|
images: message.files
|
||||||
|
.filter((file) => file.type === 'image')
|
||||||
|
.map((file) => file.url.slice(file.url.indexOf(',') + 1))
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
|
||||||
|
let lastImageIndex = -1;
|
||||||
|
|
||||||
|
// Find the index of the last object with images
|
||||||
|
messagesBody.forEach((item, index) => {
|
||||||
|
if (item.images) {
|
||||||
|
lastImageIndex = index;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove images from all but the last one
|
||||||
|
messagesBody.forEach((item, index) => {
|
||||||
|
if (index !== lastImageIndex) {
|
||||||
|
delete item.images;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const [res, controller] = await generateChatCompletion(localStorage.token, {
|
const [res, controller] = await generateChatCompletion(localStorage.token, {
|
||||||
model: model,
|
model: model,
|
||||||
messages: [
|
messages: messagesBody,
|
||||||
$settings.system
|
|
||||||
? {
|
|
||||||
role: 'system',
|
|
||||||
content: $settings.system
|
|
||||||
}
|
|
||||||
: undefined,
|
|
||||||
...messages
|
|
||||||
]
|
|
||||||
.filter((message) => message)
|
|
||||||
.map((message, idx, arr) => ({
|
|
||||||
role: message.role,
|
|
||||||
content: arr.length - 2 !== idx ? message.content : message?.raContent ?? message.content,
|
|
||||||
...(message.files && {
|
|
||||||
images: message.files
|
|
||||||
.filter((file) => file.type === 'image')
|
|
||||||
.map((file) => file.url.slice(file.url.indexOf(',') + 1))
|
|
||||||
})
|
|
||||||
})),
|
|
||||||
options: {
|
options: {
|
||||||
...($settings.options ?? {})
|
...($settings.options ?? {})
|
||||||
},
|
},
|
||||||
|
|
|
@ -330,27 +330,45 @@
|
||||||
// Scroll down
|
// Scroll down
|
||||||
window.scrollTo({ top: document.body.scrollHeight });
|
window.scrollTo({ top: document.body.scrollHeight });
|
||||||
|
|
||||||
|
const messagesBody = [
|
||||||
|
$settings.system
|
||||||
|
? {
|
||||||
|
role: 'system',
|
||||||
|
content: $settings.system
|
||||||
|
}
|
||||||
|
: undefined,
|
||||||
|
...messages
|
||||||
|
]
|
||||||
|
.filter((message) => message)
|
||||||
|
.map((message, idx, arr) => ({
|
||||||
|
role: message.role,
|
||||||
|
content: arr.length - 2 !== idx ? message.content : message?.raContent ?? message.content,
|
||||||
|
...(message.files && {
|
||||||
|
images: message.files
|
||||||
|
.filter((file) => file.type === 'image')
|
||||||
|
.map((file) => file.url.slice(file.url.indexOf(',') + 1))
|
||||||
|
})
|
||||||
|
}));
|
||||||
|
|
||||||
|
let lastImageIndex = -1;
|
||||||
|
|
||||||
|
// Find the index of the last object with images
|
||||||
|
messagesBody.forEach((item, index) => {
|
||||||
|
if (item.images) {
|
||||||
|
lastImageIndex = index;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove images from all but the last one
|
||||||
|
messagesBody.forEach((item, index) => {
|
||||||
|
if (index !== lastImageIndex) {
|
||||||
|
delete item.images;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const [res, controller] = await generateChatCompletion(localStorage.token, {
|
const [res, controller] = await generateChatCompletion(localStorage.token, {
|
||||||
model: model,
|
model: model,
|
||||||
messages: [
|
messages: messagesBody,
|
||||||
$settings.system
|
|
||||||
? {
|
|
||||||
role: 'system',
|
|
||||||
content: $settings.system
|
|
||||||
}
|
|
||||||
: undefined,
|
|
||||||
...messages
|
|
||||||
]
|
|
||||||
.filter((message) => message)
|
|
||||||
.map((message, idx, arr) => ({
|
|
||||||
role: message.role,
|
|
||||||
content: arr.length - 2 !== idx ? message.content : message?.raContent ?? message.content,
|
|
||||||
...(message.files && {
|
|
||||||
images: message.files
|
|
||||||
.filter((file) => file.type === 'image')
|
|
||||||
.map((file) => file.url.slice(file.url.indexOf(',') + 1))
|
|
||||||
})
|
|
||||||
})),
|
|
||||||
options: {
|
options: {
|
||||||
...($settings.options ?? {})
|
...($settings.options ?? {})
|
||||||
},
|
},
|
||||||
|
@ -358,6 +376,8 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res && res.ok) {
|
if (res && res.ok) {
|
||||||
|
console.log('controller', controller);
|
||||||
|
|
||||||
const reader = res.body
|
const reader = res.body
|
||||||
.pipeThrough(new TextDecoderStream())
|
.pipeThrough(new TextDecoderStream())
|
||||||
.pipeThrough(splitStream('\n'))
|
.pipeThrough(splitStream('\n'))
|
||||||
|
@ -375,6 +395,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
currentRequestId = null;
|
currentRequestId = null;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue