Pulastya B commited on
Commit
a0e15f1
Β·
1 Parent(s): 8154116

Fix infinite thinking when no file uploaded - properly handle analysis_failed SSE event

Browse files
FRRONTEEEND/components/ChatInterface.tsx CHANGED
@@ -224,6 +224,22 @@ export const ChatInterface: React.FC<{ onBack: () => void }> = ({ onBack }) => {
224
  } else if (data.type === 'token_update') {
225
  // Optional: Display token budget updates
226
  console.log('πŸ’° Token update:', data.message);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
227
  } else if (data.type === 'analysis_complete') {
228
  console.log('βœ… Analysis completed', data.result);
229
  setIsTyping(false);
 
224
  } else if (data.type === 'token_update') {
225
  // Optional: Display token budget updates
226
  console.log('πŸ’° Token update:', data.message);
227
+ } else if (data.type === 'analysis_failed') {
228
+ console.log('❌ Analysis failed', data);
229
+ setIsTyping(false);
230
+
231
+ // Show error message to user
232
+ setMessages((prev) => [
233
+ ...prev,
234
+ {
235
+ id: Date.now().toString(),
236
+ role: 'assistant',
237
+ content: data.message || data.error || '❌ Analysis failed',
238
+ session_id: activeSessionId,
239
+ },
240
+ ]);
241
+
242
+ setCurrentStep('');
243
  } else if (data.type === 'analysis_complete') {
244
  console.log('βœ… Analysis completed', data.result);
245
  setIsTyping(false);
src/api/app.py CHANGED
@@ -474,13 +474,22 @@ def run_analysis_background(file_path: str, task_description: str, target_col: O
474
 
475
  logger.info(f"[BACKGROUND] Analysis completed for session {session_id[:8]}...")
476
 
477
- # Send completion event
478
- progress_manager.emit(session_id, {
479
- "type": "analysis_complete",
480
- "status": result.get("status"),
481
- "message": "βœ… Analysis completed successfully!",
482
- "result": result
483
- })
 
 
 
 
 
 
 
 
 
484
 
485
  except Exception as e:
486
  logger.error(f"[BACKGROUND] Analysis failed for session {session_id[:8]}...: {e}")
@@ -667,12 +676,20 @@ async def run_analysis(
667
 
668
  logger.info(f"Follow-up analysis completed: {result.get('status')}")
669
 
670
- # Send completion event via SSE using actual session UUID
671
- progress_manager.emit(actual_session_id, {
672
- "type": "analysis_complete",
673
- "status": result.get("status"),
674
- "message": "βœ… Analysis completed successfully!"
675
- })
 
 
 
 
 
 
 
 
676
 
677
  # Make result JSON serializable
678
  def make_json_serializable(obj):
@@ -760,12 +777,20 @@ async def run_analysis(
760
 
761
  logger.info(f"Analysis completed: {result.get('status')}")
762
 
763
- # Send completion event via SSE using actual session UUID
764
- progress_manager.emit(actual_session_id, {
765
- "type": "analysis_complete",
766
- "status": result.get("status"),
767
- "message": "βœ… Analysis completed successfully!"
768
- })
 
 
 
 
 
 
 
 
769
 
770
  # Filter out non-JSON-serializable objects (like matplotlib/plotly Figures)
771
  def make_json_serializable(obj):
 
474
 
475
  logger.info(f"[BACKGROUND] Analysis completed for session {session_id[:8]}...")
476
 
477
+ # Send appropriate completion event based on status
478
+ if result.get("status") == "error":
479
+ progress_manager.emit(session_id, {
480
+ "type": "analysis_failed",
481
+ "status": "error",
482
+ "message": result.get("summary", "❌ Analysis failed"),
483
+ "error": result.get("error", "Analysis error"),
484
+ "result": result
485
+ })
486
+ else:
487
+ progress_manager.emit(session_id, {
488
+ "type": "analysis_complete",
489
+ "status": result.get("status"),
490
+ "message": "βœ… Analysis completed successfully!",
491
+ "result": result
492
+ })
493
 
494
  except Exception as e:
495
  logger.error(f"[BACKGROUND] Analysis failed for session {session_id[:8]}...: {e}")
 
676
 
677
  logger.info(f"Follow-up analysis completed: {result.get('status')}")
678
 
679
+ # Send appropriate completion event based on status
680
+ if result.get("status") == "error":
681
+ progress_manager.emit(actual_session_id, {
682
+ "type": "analysis_failed",
683
+ "status": "error",
684
+ "message": result.get("summary", "❌ Analysis failed"),
685
+ "error": result.get("error", "No dataset available")
686
+ })
687
+ else:
688
+ progress_manager.emit(actual_session_id, {
689
+ "type": "analysis_complete",
690
+ "status": result.get("status"),
691
+ "message": "βœ… Analysis completed successfully!"
692
+ })
693
 
694
  # Make result JSON serializable
695
  def make_json_serializable(obj):
 
777
 
778
  logger.info(f"Analysis completed: {result.get('status')}")
779
 
780
+ # Send appropriate completion event based on status
781
+ if result.get("status") == "error":
782
+ progress_manager.emit(actual_session_id, {
783
+ "type": "analysis_failed",
784
+ "status": "error",
785
+ "message": result.get("summary", "❌ Analysis failed"),
786
+ "error": result.get("error", "Analysis error")
787
+ })
788
+ else:
789
+ progress_manager.emit(actual_session_id, {
790
+ "type": "analysis_complete",
791
+ "status": result.get("status"),
792
+ "message": "βœ… Analysis completed successfully!"
793
+ })
794
 
795
  # Filter out non-JSON-serializable objects (like matplotlib/plotly Figures)
796
  def make_json_serializable(obj):