mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-09-22 08:12:00 +02:00
🔧 fix: Handle Web API Streams in File Download Route for OpenAI Assistants (#9200)
This commit is contained in:
parent
43add11b05
commit
b75b799e34
1 changed files with 11 additions and 8 deletions
|
@ -31,6 +31,7 @@ const { getAssistant } = require('~/models/Assistant');
|
||||||
const { getAgent } = require('~/models/Agent');
|
const { getAgent } = require('~/models/Agent');
|
||||||
const { getLogStores } = require('~/cache');
|
const { getLogStores } = require('~/cache');
|
||||||
const { logger } = require('~/config');
|
const { logger } = require('~/config');
|
||||||
|
const { Readable } = require('stream');
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
|
@ -325,11 +326,6 @@ router.get('/download/:userId/:file_id', fileAccess, async (req, res) => {
|
||||||
res.setHeader('X-File-Metadata', JSON.stringify(file));
|
res.setHeader('X-File-Metadata', JSON.stringify(file));
|
||||||
};
|
};
|
||||||
|
|
||||||
/** @type {{ body: import('stream').PassThrough } | undefined} */
|
|
||||||
let passThrough;
|
|
||||||
/** @type {ReadableStream | undefined} */
|
|
||||||
let fileStream;
|
|
||||||
|
|
||||||
if (checkOpenAIStorage(file.source)) {
|
if (checkOpenAIStorage(file.source)) {
|
||||||
req.body = { model: file.model };
|
req.body = { model: file.model };
|
||||||
const endpointMap = {
|
const endpointMap = {
|
||||||
|
@ -342,12 +338,19 @@ router.get('/download/:userId/:file_id', fileAccess, async (req, res) => {
|
||||||
overrideEndpoint: endpointMap[file.source],
|
overrideEndpoint: endpointMap[file.source],
|
||||||
});
|
});
|
||||||
logger.debug(`Downloading file ${file_id} from OpenAI`);
|
logger.debug(`Downloading file ${file_id} from OpenAI`);
|
||||||
passThrough = await getDownloadStream(file_id, openai);
|
const passThrough = await getDownloadStream(file_id, openai);
|
||||||
setHeaders();
|
setHeaders();
|
||||||
logger.debug(`File ${file_id} downloaded from OpenAI`);
|
logger.debug(`File ${file_id} downloaded from OpenAI`);
|
||||||
passThrough.body.pipe(res);
|
|
||||||
|
// Handle both Node.js and Web streams
|
||||||
|
const stream =
|
||||||
|
passThrough.body && typeof passThrough.body.getReader === 'function'
|
||||||
|
? Readable.fromWeb(passThrough.body)
|
||||||
|
: passThrough.body;
|
||||||
|
|
||||||
|
stream.pipe(res);
|
||||||
} else {
|
} else {
|
||||||
fileStream = await getDownloadStream(req, file.filepath);
|
const fileStream = await getDownloadStream(req, file.filepath);
|
||||||
|
|
||||||
fileStream.on('error', (streamError) => {
|
fileStream.on('error', (streamError) => {
|
||||||
logger.error('[DOWNLOAD ROUTE] Stream error:', streamError);
|
logger.error('[DOWNLOAD ROUTE] Stream error:', streamError);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue