| const fs = require('fs').promises; |
| const { logger } = require('@librechat/data-schemas'); |
| const { getImporter } = require('./importers'); |
|
|
| |
| |
| |
| |
| const importConversations = async (job) => { |
| const { filepath, requestUserId } = job; |
| try { |
| logger.debug(`user: ${requestUserId} | Importing conversation(s) from file...`); |
|
|
| |
| const fileInfo = await fs.stat(filepath); |
| if (fileInfo.size > process.env.CONVERSATION_IMPORT_MAX_FILE_SIZE_BYTES) { |
| throw new Error( |
| `File size is ${fileInfo.size} bytes. It exceeds the maximum limit of ${process.env.CONVERSATION_IMPORT_MAX_FILE_SIZE_BYTES} bytes.`, |
| ); |
| } |
|
|
| const fileData = await fs.readFile(filepath, 'utf8'); |
| const jsonData = JSON.parse(fileData); |
| const importer = getImporter(jsonData); |
| await importer(jsonData, requestUserId); |
| logger.debug(`user: ${requestUserId} | Finished importing conversations`); |
| } catch (error) { |
| logger.error(`user: ${requestUserId} | Failed to import conversation: `, error); |
| throw error; |
| } finally { |
| try { |
| await fs.unlink(filepath); |
| } catch (error) { |
| logger.error(`user: ${requestUserId} | Failed to delete file: ${filepath}`, error); |
| } |
| } |
| }; |
|
|
| module.exports = importConversations; |
|
|