@@ -48,7 +48,7 @@ import { useUIStatus } from "../../ui-context";
48
48
import { QueueEntry } from "../../types/playground" ;
49
49
import { AIHelpLanding } from "./landing" ;
50
50
import {
51
- SORRY_BACKEND ,
51
+ SORRY_BACKEND_PREFIX ,
52
52
SORRY_FRONTEND ,
53
53
MESSAGE_SEARCHING ,
54
54
MESSAGE_ANSWERING ,
@@ -288,6 +288,10 @@ function AIHelpAssistantResponse({
288
288
289
289
let sample = 0 ;
290
290
291
+ const isOffTopic =
292
+ message . role === MessageRole . Assistant &&
293
+ message . content ?. startsWith ( SORRY_BACKEND_PREFIX ) ;
294
+
291
295
function messageForStatus ( status : MessageStatus ) {
292
296
switch ( status ) {
293
297
case MessageStatus . Errored :
@@ -314,33 +318,7 @@ function AIHelpAssistantResponse({
314
318
315
319
return (
316
320
< >
317
- < div
318
- className = { [
319
- "ai-help-message-progress" ,
320
- message . status === MessageStatus . Pending && "active" ,
321
- ]
322
- . filter ( Boolean )
323
- . join ( " " ) }
324
- >
325
- { message . status === MessageStatus . Pending
326
- ? MESSAGE_SEARCHING
327
- : MESSAGE_SEARCHED }
328
- </ div >
329
- { message . sources && message . sources . length > 0 && (
330
- < ul className = "ai-help-message-sources" >
331
- { message . sources . map ( ( { url, title } , index ) => (
332
- < li key = { index } >
333
- < InternalLink
334
- to = { url }
335
- onClick = { ( ) => gleanClick ( `${ AI_HELP } : link source -> ${ url } ` ) }
336
- target = "_blank"
337
- >
338
- { title }
339
- </ InternalLink >
340
- </ li >
341
- ) ) }
342
- </ ul >
343
- ) }
321
+ { ! isOffTopic && < AIHelpAssistantResponseSources message = { message } /> }
344
322
{ ( message . content ||
345
323
message . status === MessageStatus . InProgress ||
346
324
message . status === MessageStatus . Errored ) && (
@@ -509,34 +487,83 @@ function AIHelpAssistantResponse({
509
487
} ,
510
488
} }
511
489
>
512
- { message . content ?. replace ( SORRY_BACKEND , SORRY_FRONTEND ) }
490
+ { isOffTopic ? SORRY_FRONTEND : message . content }
513
491
</ ReactMarkdown >
514
- { message . status === "complete" &&
515
- ! message . content ?. includes ( SORRY_BACKEND ) && (
516
- < >
517
- < section className = "ai-help-feedback" >
492
+ { ( message . status === "complete" || isOffTopic ) && (
493
+ < >
494
+ < section className = "ai-help-feedback" >
495
+ { ! isOffTopic && (
518
496
< GleanThumbs
519
497
feature = "ai-help-answer"
520
498
featureKey = { message . messageId }
521
499
question = { "Was this answer useful?" }
522
500
upLabel = { "Yes, this answer was useful." }
523
501
downLabel = { "No, this answer was not useful." }
524
502
/>
525
- < ReportIssueOnGitHubLink
526
- messages = { messages }
527
- currentMessage = { message }
528
- >
529
- Report an issue with this answer on GitHub
530
- </ ReportIssueOnGitHubLink >
531
- </ section >
532
- </ >
533
- ) }
503
+ ) }
504
+ < ReportIssueOnGitHubLink
505
+ messages = { messages }
506
+ currentMessage = { {
507
+ ...message ,
508
+ ...( isOffTopic
509
+ ? {
510
+ content : SORRY_FRONTEND ,
511
+ sources : [ ] ,
512
+ }
513
+ : { } ) ,
514
+ } }
515
+ >
516
+ Report an issue with this answer on GitHub
517
+ </ ReportIssueOnGitHubLink >
518
+ </ section >
519
+ </ >
520
+ ) }
534
521
</ div >
535
522
) }
536
523
</ >
537
524
) ;
538
525
}
539
526
527
+ function AIHelpAssistantResponseSources ( {
528
+ message,
529
+ } : {
530
+ message : Pick < Message , "status" | "sources" > ;
531
+ } ) {
532
+ const gleanClick = useGleanClick ( ) ;
533
+
534
+ return (
535
+ < >
536
+ < div
537
+ className = { [
538
+ "ai-help-message-progress" ,
539
+ message . status !== MessageStatus . Pending && "complete" ,
540
+ ]
541
+ . filter ( Boolean )
542
+ . join ( " " ) }
543
+ >
544
+ { message . status === MessageStatus . Pending
545
+ ? MESSAGE_SEARCHING
546
+ : MESSAGE_SEARCHED }
547
+ </ div >
548
+ { message . sources && message . sources . length > 0 && (
549
+ < ul className = "ai-help-message-sources" >
550
+ { message . sources . map ( ( { url, title } , index ) => (
551
+ < li key = { index } >
552
+ < InternalLink
553
+ to = { url }
554
+ onClick = { ( ) => gleanClick ( `${ AI_HELP } : link source -> ${ url } ` ) }
555
+ target = "_blank"
556
+ >
557
+ { title }
558
+ </ InternalLink >
559
+ </ li >
560
+ ) ) }
561
+ </ ul >
562
+ ) }
563
+ </ >
564
+ ) ;
565
+ }
566
+
540
567
export function AIHelpInner ( ) {
541
568
const formRef = useRef < HTMLFormElement > ( null ) ;
542
569
const inputRef = useRef < HTMLTextAreaElement > ( null ) ;
0 commit comments