@@ -45,6 +45,7 @@ import type {
4545 ChatMessageBase ,
4646 ChatMessageErrorProps ,
4747 ChatMessageLoaderProps ,
48+ ChatMessageProps ,
4849 ChatMessagesTranslations ,
4950 ChatPromptProps ,
5051 ChatPromptTranslations ,
@@ -315,7 +316,16 @@ type ChatWrapperProps = {
315316 actionsComponent :
316317 | ( ( props : { actions : ChatMessageActionProps [ ] } ) => JSX . Element )
317318 | undefined ;
319+ assistantMessageProps : {
320+ leadingComponent : ChatMessageProps [ 'leadingComponent' ] ;
321+ footerComponent : ChatMessageProps [ 'footerComponent' ] ;
322+ } ;
323+ userMessageProps : {
324+ leadingComponent : ChatMessageProps [ 'leadingComponent' ] ;
325+ footerComponent : ChatMessageProps [ 'footerComponent' ] ;
326+ } ;
318327 translations : Partial < ChatMessagesTranslations > ;
328+ messageTranslations : Partial < ChatMessageProps [ 'translations' ] > ;
319329 } ;
320330 promptProps : {
321331 layoutComponent : ComponentProps < typeof Chat > [ 'promptComponent' ] ;
@@ -402,7 +412,10 @@ function ChatWrapper({
402412 loaderComponent : messagesProps . loaderComponent ,
403413 errorComponent : messagesProps . errorComponent ,
404414 actionsComponent : messagesProps . actionsComponent ,
415+ assistantMessageProps : messagesProps . assistantMessageProps ,
416+ userMessageProps : messagesProps . userMessageProps ,
405417 translations : messagesProps . translations ,
418+ messageTranslations : messagesProps . messageTranslations ,
406419 } }
407420 promptProps = { {
408421 promptRef : promptProps . promptRef ,
@@ -444,6 +457,7 @@ const createRenderer = <THit extends RecordWithObjectID = RecordWithObjectID>({
444457 const state = createLocalState ( ) ;
445458 const promptRef = { current : null as HTMLTextAreaElement | null } ;
446459
460+ // eslint-disable-next-line complexity
447461 return ( props , isFirstRendering ) => {
448462 const {
449463 indexUiState,
@@ -613,6 +627,71 @@ const createRenderer = <THit extends RecordWithObjectID = RecordWithObjectID>({
613627 regenerateLabel : templates . messages ?. regenerateLabelText ,
614628 } ) ;
615629
630+ const assistantMessageTemplateProps = prepareTemplateProps ( {
631+ defaultTemplates : { } as unknown as NonNullable <
632+ Required < ChatTemplates < THit > [ 'assistantMessage' ] >
633+ > ,
634+ templatesConfig : instantSearchInstance . templatesConfig ,
635+ templates : templates . assistantMessage ,
636+ } ) as PreparedTemplateProps < ChatTemplates < THit > > ;
637+ const assistantMessageLeadingComponent = templates . assistantMessage ?. leading
638+ ? ( ) => {
639+ return (
640+ < TemplateComponent
641+ { ...assistantMessageTemplateProps }
642+ templateKey = "leading"
643+ rootTagName = "fragment"
644+ />
645+ ) ;
646+ }
647+ : undefined ;
648+ const assistantMessageFooterComponent = templates . assistantMessage ?. footer
649+ ? ( ) => {
650+ return (
651+ < TemplateComponent
652+ { ...assistantMessageTemplateProps }
653+ templateKey = "footer"
654+ rootTagName = "fragment"
655+ />
656+ ) ;
657+ }
658+ : undefined ;
659+
660+ const messageTranslations = getDefinedProperties ( {
661+ actionsLabel : templates . message ?. actionsLabelText ,
662+ messageLabel : templates . message ?. messageLabelText ,
663+ } ) ;
664+
665+ const userMessageTemplateProps = prepareTemplateProps ( {
666+ defaultTemplates : { } as unknown as NonNullable <
667+ Required < ChatTemplates < THit > [ 'userMessage' ] >
668+ > ,
669+ templatesConfig : instantSearchInstance . templatesConfig ,
670+ templates : templates . userMessage ,
671+ } ) as PreparedTemplateProps < ChatTemplates < THit > > ;
672+ const userMessageLeadingComponent = templates . userMessage ?. leading
673+ ? ( ) => {
674+ return (
675+ < TemplateComponent
676+ { ...userMessageTemplateProps }
677+ templateKey = "leading"
678+ rootTagName = "fragment"
679+ />
680+ ) ;
681+ }
682+ : undefined ;
683+ const userMessageFooterComponent = templates . userMessage ?. footer
684+ ? ( ) => {
685+ return (
686+ < TemplateComponent
687+ { ...userMessageTemplateProps }
688+ templateKey = "footer"
689+ rootTagName = "fragment"
690+ />
691+ ) ;
692+ }
693+ : undefined ;
694+
616695 const promptTemplateProps = prepareTemplateProps ( {
617696 defaultTemplates : { } as unknown as NonNullable <
618697 Required < ChatTemplates < THit > [ 'prompt' ] >
@@ -746,7 +825,16 @@ const createRenderer = <THit extends RecordWithObjectID = RecordWithObjectID>({
746825 loaderComponent : messagesLoaderComponent ,
747826 errorComponent : messagesErrorComponent ,
748827 actionsComponent,
828+ assistantMessageProps : {
829+ leadingComponent : assistantMessageLeadingComponent ,
830+ footerComponent : assistantMessageFooterComponent ,
831+ } ,
832+ userMessageProps : {
833+ leadingComponent : userMessageLeadingComponent ,
834+ footerComponent : userMessageFooterComponent ,
835+ } ,
749836 translations : messagesTranslations ,
837+ messageTranslations,
750838 } }
751839 promptProps = { {
752840 layoutComponent : promptLayoutComponent ,
@@ -868,6 +956,48 @@ export type ChatTemplates<THit extends NonNullable<object> = BaseHit> =
868956 regenerateLabelText ?: string ;
869957 } > ;
870958
959+ /**
960+ * Templates to use for each message.
961+ */
962+ message : Partial < {
963+ /**
964+ * Label for the message actions
965+ */
966+ actionsLabelText ?: string ;
967+ /**
968+ * Label for the message container
969+ */
970+ messageLabelText ?: string ;
971+ } > ;
972+
973+ /**
974+ * Templates to use for the assistant message.
975+ */
976+ assistantMessage : Partial < {
977+ /**
978+ * Template to use for the assistant message leading content.
979+ */
980+ leading : Template ;
981+ /**
982+ * Template to use for the assistant message footer content.
983+ */
984+ footer : Template ;
985+ } > ;
986+
987+ /**
988+ * Templates to use for the user message.
989+ */
990+ userMessage : Partial < {
991+ /**
992+ * Template to use for the user message leading content.
993+ */
994+ leading : Template ;
995+ /**
996+ * Template to use for the user message footer content.
997+ */
998+ footer : Template ;
999+ } > ;
1000+
8711001 /**
8721002 * Templates to use for the prompt.
8731003 */
0 commit comments