🩺 refactor: Surface Descriptive OCR Error Messages to Client (#12344)

* fix: pass along error message when OCR fails

Right now, if OCR fails, it just says "Error processing file" which
isn't very helpful.

The `error.message` does has helpful information in it, but our
filter wasn't including the right case to pass it along. Now it does!

* fix: extract shared upload error filter, apply to images route

The 'Unable to extract text from' error was only allowlisted in the
files route but not the images route, which also calls
processAgentFileUpload. Extract the duplicated error filter logic
into a shared resolveUploadErrorMessage utility in packages/api so
both routes stay in sync.

---------

Co-authored-by: Dan Lew <daniel@mightyacorn.com>
This commit is contained in:
Danny Avila 2026-03-20 17:10:25 -04:00 committed by GitHub
parent 676d297cb4
commit 365a0dc0f6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 91 additions and 25 deletions

View file

@ -2,7 +2,7 @@ const fs = require('fs').promises;
const express = require('express');
const { EnvVar } = require('@librechat/agents');
const { logger } = require('@librechat/data-schemas');
const { verifyAgentUploadPermission } = require('@librechat/api');
const { verifyAgentUploadPermission, resolveUploadErrorMessage } = require('@librechat/api');
const {
Time,
isUUID,
@ -394,21 +394,9 @@ router.post('/', async (req, res) => {
return await processAgentFileUpload({ req, res, metadata });
} catch (error) {
let message = 'Error processing file';
const message = resolveUploadErrorMessage(error);
logger.error('[/files] Error processing file:', error);
if (error.message?.includes('file_ids')) {
message += ': ' + error.message;
}
if (
error.message?.includes('Invalid file format') ||
error.message?.includes('No OCR result') ||
error.message?.includes('exceeds token limit')
) {
message = error.message;
}
try {
await fs.unlink(req.file.path);
cleanup = false;

View file

@ -2,7 +2,7 @@ const path = require('path');
const fs = require('fs').promises;
const express = require('express');
const { logger } = require('@librechat/data-schemas');
const { verifyAgentUploadPermission } = require('@librechat/api');
const { verifyAgentUploadPermission, resolveUploadErrorMessage } = require('@librechat/api');
const { isAssistantsEndpoint } = require('librechat-data-provider');
const {
processAgentFileUpload,
@ -43,15 +43,7 @@ router.post('/', async (req, res) => {
// TODO: delete remote file if it exists
logger.error('[/files/images] Error processing file:', error);
let message = 'Error processing file';
if (
error.message?.includes('Invalid file format') ||
error.message?.includes('No OCR result') ||
error.message?.includes('exceeds token limit')
) {
message = error.message;
}
const message = resolveUploadErrorMessage(error);
try {
const filepath = path.join(