LibreChat/api/app/citeText.js

30 lines
821 B
JavaScript
Raw Normal View History

2023-03-09 18:07:36 -05:00
const citationRegex = /\[\^\d+?\^]/g;
2023-03-09 16:09:53 -05:00
2023-03-09 18:07:36 -05:00
const citeText = (res, noLinks = false) => {
let result = res.text || res;
const citations = Array.from(new Set(result.match(citationRegex)));
if (citations?.length === 0) return result;
2023-03-09 16:09:53 -05:00
2023-03-09 18:07:36 -05:00
if (noLinks) {
citations.forEach((citation) => {
const digit = citation.match(/\d+?/g)[0];
2023-03-09 18:42:36 -05:00
result = result.replaceAll(citation, `<sup>[${digit}](#) </sup>`);
2023-03-09 18:07:36 -05:00
});
return result;
}
2023-03-09 16:09:53 -05:00
let sources = res.details.sourceAttributions;
2023-03-09 18:07:36 -05:00
if (sources?.length === 0) return result;
2023-03-09 16:09:53 -05:00
sources = sources.map((source) => source.seeMoreUrl);
2023-03-09 18:07:36 -05:00
citations.forEach((citation) => {
const digit = citation.match(/\d+?/g)[0];
2023-03-09 18:42:36 -05:00
result = result.replaceAll(citation, `<sup>[${digit}](${sources[digit - 1]}) </sup>`);
2023-03-09 18:07:36 -05:00
});
return result;
2023-03-09 16:09:53 -05:00
};
2023-03-09 18:07:36 -05:00
module.exports = citeText;