@@ -30,6 +30,7 @@ import { baseURL, maxScroll } from 'store/constant'
30
30
31
31
import robotPNG from 'assets/images/robot.png'
32
32
import userPNG from 'assets/images/account.png'
33
+ import { isValidURL } from 'utils/genericHelper'
33
34
34
35
export const ChatMessage = ( { open, chatflowid, isDialog } ) => {
35
36
const theme = useTheme ( )
@@ -59,6 +60,24 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => {
59
60
setSourceDialogOpen ( true )
60
61
}
61
62
63
+ const onURLClick = ( data ) => {
64
+ window . open ( data , '_blank' )
65
+ }
66
+
67
+ const removeDuplicateURL = ( message ) => {
68
+ const visitedURLs = [ ]
69
+ const newSourceDocuments = [ ]
70
+ message . sourceDocuments . forEach ( ( source ) => {
71
+ if ( isValidURL ( source . metadata . source ) && ! visitedURLs . includes ( source . metadata . source ) ) {
72
+ visitedURLs . push ( source . metadata . source )
73
+ newSourceDocuments . push ( source )
74
+ } else if ( ! isValidURL ( source . metadata . source ) ) {
75
+ newSourceDocuments . push ( source )
76
+ }
77
+ } )
78
+ return newSourceDocuments
79
+ }
80
+
62
81
const scrollToBottom = ( ) => {
63
82
if ( ps . current ) {
64
83
ps . current . scrollTo ( { top : maxScroll } )
@@ -319,17 +338,24 @@ export const ChatMessage = ({ open, chatflowid, isDialog }) => {
319
338
</ div >
320
339
{ message . sourceDocuments && (
321
340
< div style = { { display : 'block' , flexDirection : 'row' , width : '100%' } } >
322
- { message . sourceDocuments . map ( ( source , index ) => {
341
+ { removeDuplicateURL ( message ) . map ( ( source , index ) => {
342
+ const URL = isValidURL ( source . metadata . source )
323
343
return (
324
344
< Chip
325
345
size = 'small'
326
346
key = { index }
327
- label = { `${ source . pageContent . substring ( 0 , 15 ) } ...` }
347
+ label = {
348
+ URL
349
+ ? `${ ( URL . hostname + URL . pathname ) . substring ( 0 , 15 ) } ...`
350
+ : `${ source . pageContent . substring ( 0 , 15 ) } ...`
351
+ }
328
352
component = 'a'
329
353
sx = { { mr : 1 , mb : 1 } }
330
354
variant = 'outlined'
331
355
clickable
332
- onClick = { ( ) => onSourceDialogClick ( source ) }
356
+ onClick = { ( ) =>
357
+ URL ? onURLClick ( source . metadata . source ) : onSourceDialogClick ( source )
358
+ }
333
359
/>
334
360
)
335
361
} ) }
0 commit comments