fix: knowledge citations (#4988)

This commit is contained in:
Chen Tao 2025-04-17 15:43:30 +08:00 committed by GitHub
parent f8f808c9f4
commit c5580f5b71
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -153,7 +153,8 @@ const MessageContent: React.FC<Props> = ({ message: _message, model }) => {
message.metadata?.citations || message.metadata?.citations ||
message.metadata?.webSearch || message.metadata?.webSearch ||
message.metadata?.webSearchInfo || message.metadata?.webSearchInfo ||
message.metadata?.annotations message.metadata?.annotations ||
message.metadata?.knowledge
) )
) { ) {
return message.content return message.content
@ -161,20 +162,26 @@ const MessageContent: React.FC<Props> = ({ message: _message, model }) => {
let content = message.content let content = message.content
const searchResultsCitations = message?.metadata?.webSearch?.results?.map((result) => result.url) || [] const websearchResultsCitations = message?.metadata?.webSearch?.results?.map((result) => result.url) || []
const knowledgeResultsCitations = message?.metadata?.knowledge?.map((result) => result.sourceUrl) || []
const searchResultsCitations = [...websearchResultsCitations, ...knowledgeResultsCitations]
const citations = message?.metadata?.citations || searchResultsCitations const citations = message?.metadata?.citations || searchResultsCitations
// Convert [n] format to superscript numbers and make them clickable // Convert [n] format to superscript numbers and make them clickable
// Use <sup> tag for superscript and make it a link with citation data // Use <sup> tag for superscript and make it a link with citation data
if (message.metadata?.webSearch || message.metadata.knowledge) { if (message.metadata?.webSearch || message.metadata?.knowledge) {
content = content.replace(/\[\[(\d+)\]\]|\[(\d+)\]/g, (match, num1, num2) => { content = content.replace(/\[\[(\d+)\]\]|\[(\d+)\]/g, (match, num1, num2) => {
const num = num1 || num2 const num = num1 || num2
const index = parseInt(num) - 1 const index = parseInt(num) - 1
if (index >= 0 && index < citations.length) { if (index >= 0 && index < citations.length) {
const link = citations[index] const link = citations[index]
const isWebLink = link && (link.startsWith('http://') || link.startsWith('https://'))
const citationData = link ? encodeHTML(JSON.stringify(citationsData.get(link) || { url: link })) : null const citationData = link ? encodeHTML(JSON.stringify(citationsData.get(link) || { url: link })) : null
return link ? `[<sup data-citation='${citationData}'>${num}</sup>](${link})` : `<sup>${num}</sup>` return link && isWebLink
? `[<sup data-citation='${citationData}'>${num}</sup>](${link})`
: `<sup>${num}</sup>`
} }
return match return match
}) })
@ -188,6 +195,7 @@ const MessageContent: React.FC<Props> = ({ message: _message, model }) => {
}, [ }, [
message.metadata?.citations, message.metadata?.citations,
message.metadata?.webSearch, message.metadata?.webSearch,
message.metadata?.knowledge,
message.metadata?.webSearchInfo, message.metadata?.webSearchInfo,
message.metadata?.annotations, message.metadata?.annotations,
message.content, message.content,