@@ -2,13 +2,15 @@ import Server from "../networking/Server";
22
33import UUIDUtilities from "../utilities/UUIDUtilities" ;
44
5+ import { AssistantState } from "../models/AssistantState" ;
56import { ChatMessage } from "../models/ChatMessage" ;
67import { SessionState } from "../models/SessionState" ;
78import { SLWebSocket , SLWebSocketEventListener } from "../networking/WebSocket" ;
89import { TablePage , isTablePage } from "../models/TableInfo" ;
910
1011export interface SessionControllerEventListener {
1112 onSessionStateUpdated ?: ( sessionState : SessionState , error : string | null ) => void ;
13+ onAssistantStateUpdated ?: ( assistantState : AssistantState ) => void ;
1214 onChatMessagesUpdated ?: ( chatMessages : ChatMessage [ ] ) => void ;
1315 onTablePageReceived ?: ( page : TablePage ) => void ;
1416}
@@ -17,6 +19,7 @@ class SessionController implements SLWebSocketEventListener {
1719 listeners : SessionControllerEventListener [ ] = [ ] ;
1820 projectID : string = "main" ;
1921 sessionState : SessionState = 'initializing' ;
22+ assistantState : AssistantState = 'idle' ;
2023 error : string | null = null ;
2124 authToken : string | null = null ;
2225 chatMessages : ChatMessage [ ] = [ ] ;
@@ -117,24 +120,29 @@ class SessionController implements SLWebSocketEventListener {
117120 const content = json [ 'content' ] ;
118121 const sender = json [ 'sender' ] ;
119122 if ( ! id || ! content || ! sender ) { return ; }
123+ if ( sender == 'assistant' ) {
124+ this . onAssistantStateUpdated ( { assistant_reply_state : 'idle' } )
125+ }
120126 this . addChatMessage ( { id : id , sender : sender , content : content , isEphemeral : false } ) ;
121127 }
122128
123129 onSessionStateUpdated ( json : any ) {
124- const sessionState = json [ 'session_state' ] ;
125- const error = json [ 'error' ] ;
130+ const sessionState : SessionState = json [ 'session_state' ] ;
131+ const error : string | null = json [ 'error' ] ;
126132 if ( ! sessionState ) { return ; }
127133 this . sessionState = sessionState ;
128134 this . error = error ;
129135 console . log ( `Session state: ${ sessionState } ` + ( error ? ` (${ error } )` : '' ) ) ;
130136 this . listeners . forEach ( ( listener ) => listener . onSessionStateUpdated ?.( sessionState , error ) ) ;
131137 }
132138
133- onAssistantStateUpdated ( json : any ) {
134- const state = json [ 'assistant_reply_state' ] ;
135- if ( ! state ) { return ; }
139+ const assistantState : AssistantState = json [ 'assistant_reply_state' ] ;
140+ if ( ! assistantState ) { return ; }
141+ this . assistantState = assistantState ;
142+ this . listeners . forEach ( ( listener ) => listener . onAssistantStateUpdated ?.( assistantState ) ) ;
143+ // Add a matching ephemeral chat message
136144 let message : string | null = null ;
137- switch ( state ) {
145+ switch ( assistantState ) {
138146 case 'idle' : break ;
139147 case 'analyzing-data' : message = 'Analyzing data...' ; break ;
140148 case 'analyzing-task' : message = 'Analyzing task...' ; break ;
0 commit comments