@@ -109,28 +109,50 @@ export function useSessionMessages(session?: UseSessionReturn): UseSessionMessag
109109
110110 const receivedMessages = React . useMemo ( ( ) => {
111111 const merged : Array < ReceivedMessage > = [ ...transcriptionMessages , ...chat . chatMessages ] ;
112- return merged . sort ( ( a , b ) => a . timestamp - b . timestamp ) ;
112+ return merged ;
113113 } , [ transcriptionMessages , chat . chatMessages ] ) ;
114114
115+ const messageFirstReceivedTimeMapRef = React . useRef ( new Map < ReceivedMessage [ 'id' ] , Date > ( ) ) ;
116+ const sortedReceivedMessages = React . useMemo ( ( ) => {
117+ const now = new Date ( ) ;
118+ for ( const message of receivedMessages ) {
119+ if ( messageFirstReceivedTimeMapRef . current . has ( message . id ) ) {
120+ continue ;
121+ }
122+
123+ messageFirstReceivedTimeMapRef . current . set ( message . id , now ) ;
124+ }
125+
126+ return receivedMessages . sort ( ( a , b ) => {
127+ const aFirstReceivedAt = messageFirstReceivedTimeMapRef . current . get ( a . id ) ;
128+ const bFirstReceivedAt = messageFirstReceivedTimeMapRef . current . get ( b . id ) ;
129+ if ( typeof aFirstReceivedAt === 'undefined' || typeof bFirstReceivedAt === 'undefined' ) {
130+ return 0 ;
131+ }
132+
133+ return aFirstReceivedAt . getTime ( ) - bFirstReceivedAt . getTime ( ) ;
134+ } ) ;
135+ } , [ receivedMessages ] ) ;
136+
115137 const previouslyReceivedMessageIdsRef = React . useRef ( new Set ( ) ) ;
116138 React . useEffect ( ( ) => {
117- for ( const message of receivedMessages ) {
139+ for ( const message of sortedReceivedMessages ) {
118140 if ( previouslyReceivedMessageIdsRef . current . has ( message . id ) ) {
119141 continue ;
120142 }
121143
122144 previouslyReceivedMessageIdsRef . current . add ( message . id ) ;
123145 emitter . emit ( MessagesEvent . MessageReceived , message ) ;
124146 }
125- } , [ receivedMessages ] ) ;
147+ } , [ sortedReceivedMessages ] ) ;
126148
127149 return React . useMemo (
128150 ( ) => ( {
129- messages : receivedMessages ,
151+ messages : sortedReceivedMessages ,
130152 send : chat . send ,
131153 isSending : chat . isSending ,
132154 internal : { emitter } ,
133155 } ) ,
134- [ receivedMessages , chat . send , chat . isSending ] ,
156+ [ sortedReceivedMessages , chat . send , chat . isSending ] ,
135157 ) ;
136158}
0 commit comments