88import React , { createContext , useCallback , useContext , useEffect , useState } from "react" ;
99import useWebSocket , { ReadyState } from "react-use-websocket" ;
1010import { useLocation } from "react-router-dom" ;
11- import { BotMessage , DebugMessage , AiModel } from "../../types/api/entities/bot" ;
11+ import { BotMessage , DebugMessage , AiModel , StateMessage } from "../../types/api/entities/bot" ;
1212import { getChatsWithWholeThreads } from "../../api/bot/getChatsWithWholeThreads" ;
1313import { getChats } from "api/bot/getChats" ;
1414import { useAlertSnackbar } from "@postgres.ai/shared/components/AlertSnackbar/useAlertSnackbar" ;
@@ -45,18 +45,19 @@ type UseAiBotReturnType = {
4545 wsReadyState : ReadyState ;
4646 changeChatVisibility : ( threadId : string , isPublic : boolean ) => void ;
4747 isChangeVisibilityLoading : boolean ;
48- unsubscribe : ( threadId : string ) => void
49- chatVisibility : 'public' | 'private'
50- debugMessages : DebugMessage [ ] | null
51- getDebugMessagesForWholeThread : ( ) => void
48+ unsubscribe : ( threadId : string ) => void ;
49+ chatVisibility : 'public' | 'private' ;
50+ debugMessages : DebugMessage [ ] | null ;
51+ getDebugMessagesForWholeThread : ( ) => void ;
5252 chatsList : UseBotChatsListHook [ 'chatsList' ] ;
5353 chatsListLoading : UseBotChatsListHook [ 'loading' ] ;
54- getChatsList : UseBotChatsListHook [ 'getChatsList' ]
55- aiModel : UseAiModelsList [ 'aiModel' ] ,
56- setAiModel : UseAiModelsList [ 'setAiModel' ]
57- aiModels : UseAiModelsList [ 'aiModels' ]
58- aiModelsLoading : UseAiModelsList [ 'loading' ]
54+ getChatsList : UseBotChatsListHook [ 'getChatsList' ] ;
55+ aiModel : UseAiModelsList [ 'aiModel' ] ;
56+ setAiModel : UseAiModelsList [ 'setAiModel' ] ;
57+ aiModels : UseAiModelsList [ 'aiModels' ] ;
58+ aiModelsLoading : UseAiModelsList [ 'loading' ] ;
5959 debugMessagesLoading : boolean ;
60+ stateMessage : StateMessage | null ;
6061}
6162
6263type UseAiBotArgs = {
@@ -88,6 +89,7 @@ export const useAiBotProviderValue = (args: UseAiBotArgs): UseAiBotReturnType =>
8889 const [ error , setError ] = useState < ErrorType | null > ( null ) ;
8990 const [ wsLoading , setWsLoading ] = useState < boolean > ( false ) ;
9091 const [ chatVisibility , setChatVisibility ] = useState < UseAiBotReturnType [ 'chatVisibility' ] > ( 'public' ) ;
92+ const [ stateMessage , setStateMessage ] = useState < StateMessage | null > ( null )
9193
9294 const [ isChangeVisibilityLoading , setIsChangeVisibilityLoading ] = useState < boolean > ( false ) ;
9395
@@ -100,16 +102,25 @@ export const useAiBotProviderValue = (args: UseAiBotArgs): UseAiBotReturnType =>
100102
101103 const onWebSocketMessage = ( event : WebSocketEventMap [ 'message' ] ) => {
102104 if ( event . data ) {
103- const messageData : BotMessage | DebugMessage = JSON . parse ( event . data ) ;
105+ const messageData : BotMessage | DebugMessage | StateMessage = JSON . parse ( event . data ) ;
104106 if ( messageData ) {
105107 const isThreadMatching = threadId && threadId === messageData . thread_id ;
106108 const isParentMatching = ! threadId && 'parent_id' in messageData && messageData . parent_id && messages ;
107109 const isDebugMessage = messageData . type === 'debug' ;
108- if ( isThreadMatching || isParentMatching || isDebugMessage ) {
110+ const isStateMessage = messageData . type === 'state' ;
111+ if ( isThreadMatching || isParentMatching || isDebugMessage || isStateMessage ) {
109112 if ( isDebugMessage ) {
110113 let currentDebugMessages = [ ...( debugMessages || [ ] ) ] ;
111114 currentDebugMessages . push ( messageData )
112115 setDebugMessages ( currentDebugMessages )
116+ } else if ( isStateMessage ) {
117+ if ( isThreadMatching || ! threadId ) {
118+ if ( messageData . state ) {
119+ setStateMessage ( messageData )
120+ } else {
121+ setStateMessage ( null )
122+ }
123+ }
113124 } else {
114125 // Check if the last message needs its data updated
115126 let currentMessages = [ ...( messages || [ ] ) ] ;
@@ -368,7 +379,8 @@ export const useAiBotProviderValue = (args: UseAiBotArgs): UseAiBotReturnType =>
368379 aiModelsLoading,
369380 chatVisibility,
370381 debugMessages,
371- debugMessagesLoading
382+ debugMessagesLoading,
383+ stateMessage,
372384 }
373385}
374386
0 commit comments