#2328 Auto-regenerate corrupt vector indices
This commit is contained in:
parent
d350dbf0d7
commit
097894308e
|
@ -304,6 +304,35 @@ function getSourceSettings(source, request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a request to regenerate the index if it is corrupted.
|
||||||
|
* @param {import('express').Request} req Express request object
|
||||||
|
* @param {import('express').Response} res Express response object
|
||||||
|
* @param {Error} error Error object
|
||||||
|
* @returns {Promise<any>} Promise
|
||||||
|
*/
|
||||||
|
async function regenerateCorruptedIndexErrorHandler(req, res, error) {
|
||||||
|
if (error instanceof SyntaxError && !req.query.regenerated) {
|
||||||
|
const collectionId = String(req.body.collectionId);
|
||||||
|
const source = String(req.body.source) || 'transformers';
|
||||||
|
|
||||||
|
if (collectionId && source) {
|
||||||
|
const index = await getIndex(req.user.directories, collectionId, source, false);
|
||||||
|
const exists = await index.isIndexCreated();
|
||||||
|
|
||||||
|
if (exists) {
|
||||||
|
const path = index.folderPath;
|
||||||
|
console.error(`Corrupted index detected at ${path}, regenerating...`);
|
||||||
|
await index.deleteIndex();
|
||||||
|
return res.redirect(307, req.originalUrl + '?regenerated=true');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
console.error(error);
|
||||||
|
return res.sendStatus(500);
|
||||||
|
}
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
router.post('/query', jsonParser, async (req, res) => {
|
router.post('/query', jsonParser, async (req, res) => {
|
||||||
|
@ -322,8 +351,7 @@ router.post('/query', jsonParser, async (req, res) => {
|
||||||
const results = await queryCollection(req.user.directories, collectionId, source, sourceSettings, searchText, topK, threshold);
|
const results = await queryCollection(req.user.directories, collectionId, source, sourceSettings, searchText, topK, threshold);
|
||||||
return res.json(results);
|
return res.json(results);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
return regenerateCorruptedIndexErrorHandler(req, res, error);
|
||||||
return res.sendStatus(500);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -343,8 +371,7 @@ router.post('/query-multi', jsonParser, async (req, res) => {
|
||||||
const results = await multiQueryCollection(req.user.directories, collectionIds, source, sourceSettings, searchText, topK, threshold);
|
const results = await multiQueryCollection(req.user.directories, collectionIds, source, sourceSettings, searchText, topK, threshold);
|
||||||
return res.json(results);
|
return res.json(results);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
return regenerateCorruptedIndexErrorHandler(req, res, error);
|
||||||
return res.sendStatus(500);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -362,8 +389,7 @@ router.post('/insert', jsonParser, async (req, res) => {
|
||||||
await insertVectorItems(req.user.directories, collectionId, source, sourceSettings, items);
|
await insertVectorItems(req.user.directories, collectionId, source, sourceSettings, items);
|
||||||
return res.sendStatus(200);
|
return res.sendStatus(200);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
return regenerateCorruptedIndexErrorHandler(req, res, error);
|
||||||
return res.sendStatus(500);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -379,8 +405,7 @@ router.post('/list', jsonParser, async (req, res) => {
|
||||||
const hashes = await getSavedHashes(req.user.directories, collectionId, source);
|
const hashes = await getSavedHashes(req.user.directories, collectionId, source);
|
||||||
return res.json(hashes);
|
return res.json(hashes);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
return regenerateCorruptedIndexErrorHandler(req, res, error);
|
||||||
return res.sendStatus(500);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -397,8 +422,7 @@ router.post('/delete', jsonParser, async (req, res) => {
|
||||||
await deleteVectorItems(req.user.directories, collectionId, source, hashes);
|
await deleteVectorItems(req.user.directories, collectionId, source, hashes);
|
||||||
return res.sendStatus(200);
|
return res.sendStatus(200);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error);
|
return regenerateCorruptedIndexErrorHandler(req, res, error);
|
||||||
return res.sendStatus(500);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue