@@ -2,7 +2,7 @@ import { Authorization } from '@/constants/authorization';
2
2
import { LanguageTranslationMap } from '@/constants/common' ;
3
3
import { Pagination } from '@/interfaces/common' ;
4
4
import { ResponseType } from '@/interfaces/database/base' ;
5
- import { IAnswer } from '@/interfaces/database/chat' ;
5
+ import { IAnswer , Message } from '@/interfaces/database/chat' ;
6
6
import { IKnowledgeFile } from '@/interfaces/database/knowledge' ;
7
7
import { IChangeParserConfigRequestBody } from '@/interfaces/request/document' ;
8
8
import { IClientConversation } from '@/pages/chat/interface' ;
@@ -23,6 +23,7 @@ import {
23
23
} from 'react' ;
24
24
import { useTranslation } from 'react-i18next' ;
25
25
import { useDispatch } from 'umi' ;
26
+ import { v4 as uuid } from 'uuid' ;
26
27
import { useSetModalState , useTranslate } from './common-hooks' ;
27
28
import { useSetDocumentParser } from './document-hooks' ;
28
29
import { useSetPaginationParams } from './route-hook' ;
@@ -336,6 +337,77 @@ export const useRemoveMessageById = (
336
337
return { removeMessageById } ;
337
338
} ;
338
339
340
+ export const useRemoveMessagesAfterCurrentMessage = (
341
+ setCurrentConversation : (
342
+ callback : ( state : IClientConversation ) => IClientConversation ,
343
+ ) => void ,
344
+ ) => {
345
+ const removeMessagesAfterCurrentMessage = useCallback (
346
+ ( messageId : string ) => {
347
+ setCurrentConversation ( ( pre ) => {
348
+ const index = pre . message ?. findIndex ( ( x ) => x . id === messageId ) ;
349
+ if ( index !== - 1 ) {
350
+ let nextMessages = pre . message ?. slice ( 0 , index + 2 ) ?? [ ] ;
351
+ const latestMessage = nextMessages . at ( - 1 ) ;
352
+ nextMessages = latestMessage
353
+ ? [
354
+ ...nextMessages . slice ( 0 , - 1 ) ,
355
+ {
356
+ ...latestMessage ,
357
+ content : '' ,
358
+ reference : undefined ,
359
+ prompt : undefined ,
360
+ } ,
361
+ ]
362
+ : nextMessages ;
363
+ return {
364
+ ...pre ,
365
+ message : nextMessages ,
366
+ } ;
367
+ }
368
+ return pre ;
369
+ } ) ;
370
+ } ,
371
+ [ setCurrentConversation ] ,
372
+ ) ;
373
+
374
+ return { removeMessagesAfterCurrentMessage } ;
375
+ } ;
376
+
377
+ export interface IRegenerateMessage {
378
+ regenerateMessage ( message : Message ) : void ;
379
+ }
380
+
381
+ export const useRegenerateMessage = ( {
382
+ removeMessagesAfterCurrentMessage,
383
+ sendMessage,
384
+ messages,
385
+ } : {
386
+ removeMessagesAfterCurrentMessage ( messageId : string ) : void ;
387
+ sendMessage ( { message } : { message : Message ; messages ?: Message [ ] } ) : void ;
388
+ messages : Message [ ] ;
389
+ } ) => {
390
+ const regenerateMessage = useCallback (
391
+ async ( message : Message ) => {
392
+ if ( message . id ) {
393
+ removeMessagesAfterCurrentMessage ( message . id ) ;
394
+ const index = messages . findIndex ( ( x ) => x . id === message . id ) ;
395
+ let nextMessages ;
396
+ if ( index !== - 1 ) {
397
+ nextMessages = messages . slice ( 0 , index ) ;
398
+ }
399
+ sendMessage ( {
400
+ message : { ...message , id : uuid ( ) } ,
401
+ messages : nextMessages ,
402
+ } ) ;
403
+ }
404
+ } ,
405
+ [ removeMessagesAfterCurrentMessage , sendMessage , messages ] ,
406
+ ) ;
407
+
408
+ return { regenerateMessage } ;
409
+ } ;
410
+
339
411
// #endregion
340
412
341
413
/**
0 commit comments