mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 08:50:15 +01:00
🗃️ feat: General File Support for OpenAI, Azure, Custom, Anthropic and Google (RAG) (#2143)
* refactor: re-purpose `resendImages` as `resendFiles` * refactor: re-purpose `resendImages` as `resendFiles` * feat: upload general files * feat: embed file during upload * feat: delete file embeddings on file deletion * chore(fileConfig): add epub+zip type * feat(encodeAndFormat): handle non-image files * feat(createContextHandlers): build context prompt from file attachments and successful RAG * fix: prevent non-temp files as well as embedded files to be deleted on new conversation * fix: remove temp_file_id on usage, prevent non-temp files as well as embedded files to be deleted on new conversation * fix: prevent non-temp files as well as embedded files to be deleted on new conversation * feat(OpenAI/Anthropic/Google): basic RAG support * fix: delete `resendFiles` only when true (Default) * refactor(RAG): update endpoints and pass JWT * fix(resendFiles): default values * fix(context/processFile): query unique ids only * feat: rag-api.yaml * feat: file upload improved ux for longer uploads * chore: await embed call and catch embedding errors * refactor: store augmentedPrompt in Client * refactor(processFileUpload): throw error if not assistant file upload * fix(useFileHandling): handle markdown empty mimetype issue * chore: necessary compose file changes
This commit is contained in:
parent
af347cccde
commit
f7761df52c
38 changed files with 683 additions and 261 deletions
|
|
@ -39,6 +39,11 @@ async function encodeAndFormat(req, files, endpoint) {
|
|||
for (let file of files) {
|
||||
const source = file.source ?? FileSources.local;
|
||||
|
||||
if (!file.height) {
|
||||
promises.push([file, null]);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!encodingMethods[source]) {
|
||||
const { prepareImagePayload } = getStrategyFunctions(source);
|
||||
if (!prepareImagePayload) {
|
||||
|
|
@ -70,6 +75,24 @@ async function encodeAndFormat(req, files, endpoint) {
|
|||
};
|
||||
|
||||
for (const [file, imageContent] of formattedImages) {
|
||||
const fileMetadata = {
|
||||
type: file.type,
|
||||
file_id: file.file_id,
|
||||
filepath: file.filepath,
|
||||
filename: file.filename,
|
||||
embedded: !!file.embedded,
|
||||
};
|
||||
|
||||
if (file.height && file.width) {
|
||||
fileMetadata.height = file.height;
|
||||
fileMetadata.width = file.width;
|
||||
}
|
||||
|
||||
if (!imageContent) {
|
||||
result.files.push(fileMetadata);
|
||||
continue;
|
||||
}
|
||||
|
||||
const imagePart = {
|
||||
type: 'image_url',
|
||||
image_url: {
|
||||
|
|
@ -93,15 +116,7 @@ async function encodeAndFormat(req, files, endpoint) {
|
|||
}
|
||||
|
||||
result.image_urls.push(imagePart);
|
||||
|
||||
result.files.push({
|
||||
file_id: file.file_id,
|
||||
// filepath: file.filepath,
|
||||
// filename: file.filename,
|
||||
// type: file.type,
|
||||
// height: file.height,
|
||||
// width: file.width,
|
||||
});
|
||||
result.files.push(fileMetadata);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue