11import { ChatbotRole } from '@graasp/sdk' ;
22
3- import { ChatbotResponseAppData } from '@/config/appDataTypes' ;
3+ import { ChatbotResponseAppData , ResponseAppData } from '@/config/appDataTypes' ;
44import {
55 DEFAULT_CHATBOT_RESPONSE_APP_DATA ,
66 RESPONSE_MAXIMUM_LENGTH ,
77} from '@/config/constants' ;
8- import { getSingleResponsePrompt } from '@/config/prompts' ;
8+ import {
9+ getSingleResponsePrompt ,
10+ promptForSingleResponse ,
11+ promptForSingleResponseAndProvideResponses ,
12+ } from '@/config/prompts' ;
913import { mutations } from '@/config/queryClient' ;
1014import { AssistantPersona } from '@/interfaces/assistant' ;
1115import { useAppDataContext } from '@/modules/context/AppDataContext' ;
1216import { useSettings } from '@/modules/context/SettingsContext' ;
1317import { useTranslation } from 'react-i18next' ;
18+ import { useActivityContext } from '@/modules/context/ActivityContext' ;
1419
1520interface UseAssistantsValues {
1621 generateSingleResponse : ( ) => Promise < ChatbotResponseAppData | undefined > ;
@@ -24,13 +29,25 @@ interface UseAssistantsValues {
2429 reformulateResponse : (
2530 response : string ,
2631 ) => Promise < ChatbotResponseAppData | undefined > ;
32+ generateResponsesWithEachAssistant : ( ) => Promise <
33+ Promise < ResponseAppData | undefined > [ ]
34+ > ;
2735}
2836
2937const useAssistants = ( ) : UseAssistantsValues => {
30- const { t } = useTranslation ( 'translations' , { keyPrefix : 'PROMPTS' } ) ;
38+ const { t } = useTranslation ( 'prompts' ) ;
3139 const { mutateAsync : postChatBot } = mutations . usePostChatBot ( ) ;
32- const { chatbot, instructions : generalPrompt , assistants } = useSettings ( ) ;
40+ const {
41+ chatbot,
42+ instructions : generalPrompt ,
43+ assistants,
44+ instructions,
45+ } = useSettings ( ) ;
3346 const { postAppDataAsync } = useAppDataContext ( ) ;
47+
48+ const { assistantsResponsesSets, round, allResponses, postResponse } =
49+ useActivityContext ( ) ;
50+
3451 const reformulateResponse = (
3552 response : string ,
3653 ) : Promise < ChatbotResponseAppData | undefined > =>
@@ -86,7 +103,9 @@ const useAssistants = (): UseAssistantsValues => {
86103 ] ) . then ( ( ans ) => {
87104 const a = postAppDataAsync ( {
88105 ...DEFAULT_CHATBOT_RESPONSE_APP_DATA ,
89- data : ans ,
106+ data : {
107+ ...ans ,
108+ } ,
90109 } ) as Promise < ChatbotResponseAppData > ;
91110 return a ;
92111 } ) ;
@@ -104,7 +123,10 @@ const useAssistants = (): UseAssistantsValues => {
104123 ] ) . then ( ( ans ) => {
105124 const a = postAppDataAsync ( {
106125 ...DEFAULT_CHATBOT_RESPONSE_APP_DATA ,
107- data : ans ,
126+ data : {
127+ ans,
128+ assistantId : assistant . id ,
129+ } ,
108130 } ) as Promise < ChatbotResponseAppData > ;
109131 return a ;
110132 } ) ;
@@ -114,11 +136,58 @@ const useAssistants = (): UseAssistantsValues => {
114136 ) : Promise < Promise < ChatbotResponseAppData | undefined > [ ] > =>
115137 assistants . assistants . map ( ( p ) => promptAssistant ( p , prompt ) ) ;
116138
139+ const generateResponsesWithEachAssistant = async ( ) : Promise <
140+ Promise < ResponseAppData | undefined > [ ]
141+ > => {
142+ const responsesAssistants = assistants . assistants
143+ . map ( ( persona ) => {
144+ const assistantSet = assistantsResponsesSets . find (
145+ ( set ) =>
146+ set . data . assistant === persona . id && set . data . round === round - 1 ,
147+ ) ;
148+ if ( assistantSet ) {
149+ const responses = assistantSet . data . responses . map (
150+ ( r ) => allResponses . find ( ( { id } ) => r === id ) ?. data . response || '' ,
151+ ) ;
152+ return promptAssistant (
153+ persona ,
154+ promptForSingleResponseAndProvideResponses (
155+ instructions . title . content ,
156+ responses ,
157+ t ,
158+ ) ,
159+ ) ;
160+ }
161+ return promptAssistant (
162+ persona ,
163+ promptForSingleResponse ( instructions . title . content , t ) ,
164+ ) ;
165+ } )
166+ . map ( ( promise ) =>
167+ promise . then ( ( assistantResponseAppData ) => {
168+ if ( assistantResponseAppData ) {
169+ const { completion : response , assistantId } =
170+ assistantResponseAppData . data ;
171+ return postResponse ( {
172+ response,
173+ round,
174+ bot : true ,
175+ assistantId,
176+ } ) ;
177+ }
178+ return assistantResponseAppData ;
179+ } ) ,
180+ ) ;
181+
182+ return responsesAssistants ;
183+ } ;
184+
117185 return {
118186 generateSingleResponse,
119187 promptAssistant,
120188 promptAllAssistants,
121189 reformulateResponse,
190+ generateResponsesWithEachAssistant,
122191 } ;
123192} ;
124193
0 commit comments