| | const fs = require('fs'); |
| | const { sleep } = require('@librechat/agents'); |
| | const { logger } = require('@librechat/data-schemas'); |
| | const { FilePurpose } = require('librechat-data-provider'); |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | async function uploadOpenAIFile({ req, file, openai }) { |
| | const { height, width } = req.body; |
| | const isImage = height && width; |
| | const uploadedFile = await openai.files.create({ |
| | file: fs.createReadStream(file.path), |
| | purpose: isImage ? FilePurpose.Vision : FilePurpose.Assistants, |
| | }); |
| |
|
| | logger.debug( |
| | `[uploadOpenAIFile] User ${req.user.id} successfully uploaded file to OpenAI`, |
| | uploadedFile, |
| | ); |
| |
|
| | if (uploadedFile.status !== 'processed') { |
| | const sleepTime = 2500; |
| | logger.debug( |
| | `[uploadOpenAIFile] File ${ |
| | uploadedFile.id |
| | } is not yet processed. Waiting for it to be processed (${sleepTime / 1000}s)...`, |
| | ); |
| | await sleep(sleepTime); |
| | } |
| |
|
| | return isImage ? { ...uploadedFile, height, width } : uploadedFile; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | async function deleteOpenAIFile(req, file, openai) { |
| | try { |
| | const res = await openai.files.del(file.file_id); |
| | if (!res.deleted) { |
| | throw new Error('OpenAI returned `false` for deleted status'); |
| | } |
| | logger.debug( |
| | `[deleteOpenAIFile] User ${req.user.id} successfully deleted file "${file.file_id}" from OpenAI`, |
| | ); |
| | } catch (error) { |
| | logger.error('[deleteOpenAIFile] Error deleting file from OpenAI: ' + error.message); |
| | throw error; |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | async function getOpenAIFileStream(file_id, openai) { |
| | try { |
| | return await openai.files.content(file_id); |
| | } catch (error) { |
| | logger.error('Error getting OpenAI file download stream:', error); |
| | throw error; |
| | } |
| | } |
| |
|
| | module.exports = { uploadOpenAIFile, deleteOpenAIFile, getOpenAIFileStream }; |
| |
|