| const citationRegex = /\[\^\d+?\^\]/g; |
| const regex = / \[.*?]\(.*?\)/g; |
|
|
| const getCitations = (res) => { |
| const adaptiveCards = res.details.adaptiveCards; |
| const textBlocks = adaptiveCards && adaptiveCards[0].body; |
| if (!textBlocks) { |
| return ''; |
| } |
| let links = textBlocks[textBlocks.length - 1]?.text.match(regex); |
| if (links?.length === 0 || !links) { |
| return ''; |
| } |
| links = links.map((link) => link.trim()); |
| return links.join('\n - '); |
| }; |
|
|
| 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; |
| } |
|
|
| if (noLinks) { |
| citations.forEach((citation) => { |
| const digit = citation.match(/\d+?/g)[0]; |
| |
| result = result.replaceAll(citation, `[^${digit}^](#)`); |
| }); |
|
|
| return result; |
| } |
|
|
| let sources = res.details.sourceAttributions; |
| if (sources?.length === 0) { |
| return result; |
| } |
| sources = sources.map((source) => source.seeMoreUrl); |
|
|
| citations.forEach((citation) => { |
| const digit = citation.match(/\d+?/g)[0]; |
| result = result.replaceAll(citation, `[^${digit}^](${sources[digit - 1]})`); |
| |
| }); |
|
|
| return result; |
| }; |
|
|
| module.exports = { getCitations, citeText }; |
|
|