ciyidogan commited on
Commit
e23064b
·
verified ·
1 Parent(s): 03a688e

Update flare-ui/src/app/services/conversation-manager.service.ts

Browse files
flare-ui/src/app/services/conversation-manager.service.ts CHANGED
@@ -239,101 +239,106 @@ export class ConversationManagerService implements OnDestroy {
239
  }
240
 
241
  private handleMessage(message: any): void {
242
- try {
243
- switch (message.type) {
244
- case 'transcription':
245
- // SADECE final transcription'ları işle. Interim transcription'ları işlemiyoruz
246
- if (message['is_final']) {
247
- const messages = this.messagesSubject.value;
248
- const lastMessage = messages[messages.length - 1];
249
- if (!lastMessage || lastMessage.role !== 'user' || lastMessage.text !== message['text']) {
250
- this.addMessage('user', message['text']);
251
- }
252
- }
253
- break;
254
-
255
- case 'assistant_response':
256
- // Welcome mesajı veya normal yanıt
257
- const isWelcome = message['is_welcome'] || false;
258
- this.addMessage('assistant', message['text']);
259
-
260
- if (isWelcome) {
261
- console.log('📢 Welcome message received:', message['text']);
262
- }
263
- break;
264
-
265
- case 'tts_audio':
266
- this.handleTTSAudio(message);
267
- break;
268
-
269
- case 'tts_error':
270
- // TTS hatası durumunda kullanıcıya bilgi ver
271
- console.error('TTS Error:', message['message']);
272
- this.addSystemMessage(message['message']);
273
- break;
274
-
275
- case 'control':
276
- if (message['action'] === 'stop_playback') {
277
- this.stopAudioPlayback();
278
- }
279
- break;
280
-
281
- case 'error':
282
- this.handleServerError(message);
283
- break;
284
-
285
- case 'session_config':
286
- // Update configuration from server
287
- if (message['config']) {
288
- this.conversationConfig = { ...this.conversationConfig, ...message['config'] };
289
  }
290
- break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
291
 
292
- case 'session_started':
293
- // Session başladı, STT durumunu kontrol et
294
- console.log('📢 Session started:', message);
295
- if (!message['stt_initialized']) {
296
- this.addSystemMessage('Speech recognition failed to initialize. Voice input will not be available.');
297
- }
298
- break;
299
-
300
- case 'stt_ready':
301
- console.log('✅ [ConversationManager] STT ready signal received');
302
- // ✅ STT hazır, recording'i başlat
303
- if (!this.audioService.isRecording()) {
304
- this.audioService.startRecording().then(() => {
305
- console.log('🎤 [ConversationManager] Audio recording started');
306
- }).catch(error => {
307
- console.error('❌ Failed to start recording:', error);
308
- this.handleAudioError(error);
309
- });
310
- }
311
- break;
 
 
 
 
 
 
 
312
 
313
- case 'state_change':
314
- // Backend'den gelen state'i frontend state'ine map et
315
- const backendState = message['to'] || message['state'];
316
- const mappedState = this.mapBackendStateToFrontend(backendState);
317
- if (mappedState) {
318
- this.currentStateSubject.next(mappedState);
319
- }
320
- break;
321
-
322
- case 'conversation_started':
323
- // Conversation başladığında log at
324
- console.log('📢 Conversation started:', message);
325
- break;
326
- }
327
- } catch (error) {
328
- console.error('Error handling message:', error);
329
- this.errorSubject.next({
330
- type: 'unknown',
331
- message: 'Failed to process message',
332
- details: error,
333
- timestamp: new Date()
334
- });
335
  }
 
 
 
 
 
 
 
 
336
  }
 
337
 
338
  private mapBackendStateToFrontend(backendState: string): ConversationState | null {
339
  const stateMap: { [key: string]: ConversationState } = {
 
239
  }
240
 
241
  private handleMessage(message: any): void {
242
+ try {
243
+ switch (message.type) {
244
+ case 'transcription':
245
+ // SADECE final transcription'ları işle. Interim transcription'ları işlemiyoruz
246
+ if (message['is_final']) {
247
+ const messages = this.messagesSubject.value;
248
+ const lastMessage = messages[messages.length - 1];
249
+ if (!lastMessage || lastMessage.role !== 'user' || lastMessage.text !== message['text']) {
250
+ this.addMessage('user', message['text']);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
251
  }
252
+ }
253
+ break;
254
+
255
+ case 'assistant_response':
256
+ // Welcome mesajı veya normal yanıt
257
+ const isWelcome = message['is_welcome'] || false;
258
+ this.addMessage('assistant', message['text']);
259
+
260
+ if (isWelcome) {
261
+ console.log('📢 Welcome message received:', message['text']);
262
+ }
263
+ break;
264
+
265
+ case 'tts_audio':
266
+ this.handleTTSAudio(message);
267
+ break;
268
+
269
+ case 'tts_error':
270
+ // TTS hatası durumunda kullanıcıya bilgi ver
271
+ console.error('TTS Error:', message['message']);
272
+ this.addSystemMessage(message['message']);
273
+ break;
274
+
275
+ case 'control':
276
+ if (message['action'] === 'stop_playback') {
277
+ this.stopAudioPlayback();
278
+ }
279
+ break;
280
+
281
+ case 'error':
282
+ this.handleServerError(message);
283
+ break;
284
+
285
+ case 'session_config':
286
+ // Update configuration from server
287
+ if (message['config']) {
288
+ this.conversationConfig = { ...this.conversationConfig, ...message['config'] };
289
+ }
290
+ break;
291
 
292
+ case 'session_started':
293
+ // Session başladı, STT durumunu kontrol et
294
+ console.log('📢 Session started:', message);
295
+ if (!message['stt_initialized']) {
296
+ this.addSystemMessage('Speech recognition failed to initialize. Voice input will not be available.');
297
+ }
298
+ break;
299
+
300
+ case 'stt_ready':
301
+ console.log('✅ [ConversationManager] STT ready signal received');
302
+ // ✅ STT hazır, recording'i başlat
303
+ if (!this.audioService.isRecording()) {
304
+ this.audioService.startRecording().then(() => {
305
+ console.log('🎤 [ConversationManager] Audio recording started');
306
+ }).catch(error => {
307
+ console.error('❌ Failed to start recording:', error);
308
+ this.handleAudioError(error);
309
+ });
310
+ }
311
+ break;
312
+
313
+ case 'state_change':
314
+ // Backend'den gelen state'i frontend state'ine map et
315
+ const backendState = message['to'] || message['state'];
316
+ const mappedState = this.mapBackendStateToFrontend(backendState);
317
+ if (mappedState) {
318
+ this.currentStateSubject.next(mappedState);
319
 
320
+ // Log state changes with better format
321
+ console.log(`📊 Backend state: ${backendState} → Frontend state: ${mappedState}`);
322
+ } else {
323
+ console.warn(`⚠️ Unknown backend state: ${backendState}`);
324
+ }
325
+ break;
326
+
327
+ case 'conversation_started':
328
+ // Conversation başladığında log at
329
+ console.log('📢 Conversation started:', message);
330
+ break;
 
 
 
 
 
 
 
 
 
 
 
331
  }
332
+ } catch (error) {
333
+ console.error('Error handling message:', error);
334
+ this.errorSubject.next({
335
+ type: 'unknown',
336
+ message: 'Failed to process message',
337
+ details: error,
338
+ timestamp: new Date()
339
+ });
340
  }
341
+ }
342
 
343
  private mapBackendStateToFrontend(backendState: string): ConversationState | null {
344
  const stateMap: { [key: string]: ConversationState } = {