@@ -2,13 +2,15 @@ import Server from "../networking/Server";
2
2
3
3
import UUIDUtilities from "../utilities/UUIDUtilities" ;
4
4
5
+ import { AssistantState } from "../models/AssistantState" ;
5
6
import { ChatMessage } from "../models/ChatMessage" ;
6
7
import { SessionState } from "../models/SessionState" ;
7
8
import { SLWebSocket , SLWebSocketEventListener } from "../networking/WebSocket" ;
8
9
import { TablePage , isTablePage } from "../models/TableInfo" ;
9
10
10
11
export interface SessionControllerEventListener {
11
12
onSessionStateUpdated ?: ( sessionState : SessionState , error : string | null ) => void ;
13
+ onAssistantStateUpdated ?: ( assistantState : AssistantState ) => void ;
12
14
onChatMessagesUpdated ?: ( chatMessages : ChatMessage [ ] ) => void ;
13
15
onTablePageReceived ?: ( page : TablePage ) => void ;
14
16
}
@@ -17,6 +19,7 @@ class SessionController implements SLWebSocketEventListener {
17
19
listeners : SessionControllerEventListener [ ] = [ ] ;
18
20
projectID : string = "main" ;
19
21
sessionState : SessionState = 'initializing' ;
22
+ assistantState : AssistantState = 'idle' ;
20
23
error : string | null = null ;
21
24
authToken : string | null = null ;
22
25
chatMessages : ChatMessage [ ] = [ ] ;
@@ -117,24 +120,29 @@ class SessionController implements SLWebSocketEventListener {
117
120
const content = json [ 'content' ] ;
118
121
const sender = json [ 'sender' ] ;
119
122
if ( ! id || ! content || ! sender ) { return ; }
123
+ if ( sender == 'assistant' ) {
124
+ this . onAssistantStateUpdated ( { assistant_reply_state : 'idle' } )
125
+ }
120
126
this . addChatMessage ( { id : id , sender : sender , content : content , isEphemeral : false } ) ;
121
127
}
122
128
123
129
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' ] ;
126
132
if ( ! sessionState ) { return ; }
127
133
this . sessionState = sessionState ;
128
134
this . error = error ;
129
135
console . log ( `Session state: ${ sessionState } ` + ( error ? ` (${ error } )` : '' ) ) ;
130
136
this . listeners . forEach ( ( listener ) => listener . onSessionStateUpdated ?.( sessionState , error ) ) ;
131
137
}
132
138
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
136
144
let message : string | null = null ;
137
- switch ( state ) {
145
+ switch ( assistantState ) {
138
146
case 'idle' : break ;
139
147
case 'analyzing-data' : message = 'Analyzing data...' ; break ;
140
148
case 'analyzing-task' : message = 'Analyzing task...' ; break ;
0 commit comments