mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 17:00:15 +01:00
* 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
94 lines
2.3 KiB
JavaScript
94 lines
2.3 KiB
JavaScript
const { FileSources } = require('librechat-data-provider');
|
|
const {
|
|
getFirebaseURL,
|
|
prepareImageURL,
|
|
saveURLToFirebase,
|
|
deleteFirebaseFile,
|
|
saveBufferToFirebase,
|
|
uploadFileToFirebase,
|
|
uploadImageToFirebase,
|
|
processFirebaseAvatar,
|
|
} = require('./Firebase');
|
|
const {
|
|
// saveLocalFile,
|
|
getLocalFileURL,
|
|
saveFileFromURL,
|
|
saveLocalBuffer,
|
|
deleteLocalFile,
|
|
uploadLocalFile,
|
|
uploadLocalImage,
|
|
prepareImagesLocal,
|
|
processLocalAvatar,
|
|
} = require('./Local');
|
|
const { uploadOpenAIFile, deleteOpenAIFile } = require('./OpenAI');
|
|
|
|
/**
|
|
* Firebase Storage Strategy Functions
|
|
*
|
|
* */
|
|
const firebaseStrategy = () => ({
|
|
// saveFile:
|
|
saveURL: saveURLToFirebase,
|
|
getFileURL: getFirebaseURL,
|
|
deleteFile: deleteFirebaseFile,
|
|
saveBuffer: saveBufferToFirebase,
|
|
prepareImagePayload: prepareImageURL,
|
|
processAvatar: processFirebaseAvatar,
|
|
handleFileUpload: uploadFileToFirebase,
|
|
handleImageUpload: uploadImageToFirebase,
|
|
});
|
|
|
|
/**
|
|
* Local Server Storage Strategy Functions
|
|
*
|
|
* */
|
|
const localStrategy = () => ({
|
|
// saveFile: saveLocalFile,
|
|
saveURL: saveFileFromURL,
|
|
getFileURL: getLocalFileURL,
|
|
saveBuffer: saveLocalBuffer,
|
|
deleteFile: deleteLocalFile,
|
|
processAvatar: processLocalAvatar,
|
|
handleFileUpload: uploadLocalFile,
|
|
handleImageUpload: uploadLocalImage,
|
|
prepareImagePayload: prepareImagesLocal,
|
|
});
|
|
|
|
/**
|
|
* OpenAI Strategy Functions
|
|
*
|
|
* Note: null values mean that the strategy is not supported.
|
|
* */
|
|
const openAIStrategy = () => ({
|
|
/** @type {typeof saveFileFromURL | null} */
|
|
saveURL: null,
|
|
/** @type {typeof getLocalFileURL | null} */
|
|
getFileURL: null,
|
|
/** @type {typeof saveLocalBuffer | null} */
|
|
saveBuffer: null,
|
|
/** @type {typeof processLocalAvatar | null} */
|
|
processAvatar: null,
|
|
/** @type {typeof uploadLocalImage | null} */
|
|
handleImageUpload: null,
|
|
/** @type {typeof prepareImagesLocal | null} */
|
|
prepareImagePayload: null,
|
|
deleteFile: deleteOpenAIFile,
|
|
handleFileUpload: uploadOpenAIFile,
|
|
});
|
|
|
|
// Strategy Selector
|
|
const getStrategyFunctions = (fileSource) => {
|
|
if (fileSource === FileSources.firebase) {
|
|
return firebaseStrategy();
|
|
} else if (fileSource === FileSources.local) {
|
|
return localStrategy();
|
|
} else if (fileSource === FileSources.openai) {
|
|
return openAIStrategy();
|
|
} else {
|
|
throw new Error('Invalid file source');
|
|
}
|
|
};
|
|
|
|
module.exports = {
|
|
getStrategyFunctions,
|
|
};
|