naman1102 commited on
Commit
35e8a45
Β·
1 Parent(s): e297e4a

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -48
app.py CHANGED
@@ -406,13 +406,13 @@ def create_ui() -> gr.Blocks:
406
  # Progress bar for batch analysis
407
  with gr.Row():
408
  analysis_progress = gr.Progress()
409
- progress_display = gr.Textbox(
410
- label="πŸ“Š Batch Analysis Progress",
411
- interactive=False,
412
- lines=2,
413
- visible=False,
414
- info="Shows progress when analyzing all repositories"
415
- )
416
 
417
  with gr.Row(equal_height=True):
418
  # with gr.Column():
@@ -422,13 +422,14 @@ def create_ui() -> gr.Blocks:
422
  # show_copy_button=True,
423
  # info="Raw content extracted from the repository"
424
  # )
425
- with gr.Column():
426
- summary_output = gr.Textbox(
427
- label="🎯 AI Analysis Summary",
428
- lines=20,
429
- show_copy_button=True,
430
- info="Detailed analysis and insights from AI"
431
- )
 
432
 
433
  gr.Markdown("### πŸ“Š Results Dashboard")
434
  gr.Markdown("πŸ’‘ **Tip:** Click on any repository name to explore it in detail!")
@@ -559,12 +560,12 @@ def create_ui() -> gr.Blocks:
559
  requirements = "\n".join([f"- {msg}" for msg in user_messages if msg.strip()])
560
  return requirements
561
 
562
- def handle_analyze_next(repo_ids: List[str], current_idx: int, user_requirements: str) -> Tuple[str, pd.DataFrame, int, str]:
563
  """Analyzes the next repository in the list."""
564
  if not repo_ids:
565
- return "", pd.DataFrame(), 0, "Status: No repositories to analyze. Please submit repo IDs first."
566
  if current_idx >= len(repo_ids):
567
- return "", read_csv_to_dataframe(), current_idx, "Status: All repositories have been analyzed."
568
 
569
  repo_id_to_analyze = repo_ids[current_idx]
570
  status = f"Status: Analyzing repository {current_idx + 1}/{len(repo_ids)}: {repo_id_to_analyze}"
@@ -577,7 +578,7 @@ def create_ui() -> gr.Blocks:
577
  if next_idx >= len(repo_ids):
578
  status += "\n\nFinished all analyses."
579
 
580
- return summary, df, next_idx, status
581
 
582
  def handle_user_message(user_message: str, history: List[Dict[str, str]]) -> Tuple[List[Dict[str, str]], str]:
583
  """Appends the user's message to the history, preparing for the bot's response."""
@@ -675,19 +676,17 @@ def create_ui() -> gr.Blocks:
675
 
676
  return "", gr.update(visible=False), gr.update()
677
 
678
- def handle_analyze_all_repos(repo_ids: List[str], user_requirements: str, progress=gr.Progress()) -> Tuple[pd.DataFrame, str, str]:
679
  """Analyzes all repositories in the CSV file with progress tracking."""
680
  if not repo_ids:
681
- return pd.DataFrame(), "Status: No repositories to analyze. Please submit repo IDs first.", ""
682
 
683
  total_repos = len(repo_ids)
684
- progress_text = f"Starting batch analysis of {total_repos} repositories..."
685
 
686
  try:
687
  # Start the progress tracking
688
  progress(0, desc="Initializing batch analysis...")
689
 
690
- all_summaries = []
691
  successful_analyses = 0
692
  failed_analyses = 0
693
  csv_update_failures = 0
@@ -718,7 +717,6 @@ def create_ui() -> gr.Blocks:
718
  break
719
 
720
  if repo_updated:
721
- all_summaries.append(f"βœ… {repo_id}: Analysis completed & CSV updated")
722
  successful_analyses += 1
723
  else:
724
  # CSV update failed - try once more
@@ -747,10 +745,8 @@ def create_ui() -> gr.Blocks:
747
  break
748
 
749
  if retry_success:
750
- all_summaries.append(f"βœ… {repo_id}: Analysis completed & CSV updated (retry)")
751
  successful_analyses += 1
752
  else:
753
- all_summaries.append(f"⚠️ {repo_id}: Analysis completed but CSV update failed")
754
  csv_update_failures += 1
755
 
756
  # Longer delay to prevent file conflicts
@@ -758,7 +754,6 @@ def create_ui() -> gr.Blocks:
758
 
759
  except Exception as e:
760
  logger.error(f"Error analyzing {repo_id}: {e}")
761
- all_summaries.append(f"❌ {repo_id}: Error - {str(e)[:100]}...")
762
  failed_analyses += 1
763
  # Still wait to prevent rapid failures
764
  time.sleep(0.2)
@@ -771,34 +766,23 @@ def create_ui() -> gr.Blocks:
771
  if csv_update_failures > 0:
772
  final_status += f"\n⚠️ CSV Update Issues: {csv_update_failures}/{total_repos}"
773
 
774
- # Create progress summary
775
- progress_summary = "\n".join(all_summaries[-15:]) # Show last 15 entries
776
- if len(all_summaries) > 15:
777
- progress_summary = f"... (showing last 15 of {len(all_summaries)} repositories)\n" + progress_summary
778
-
779
  # Get final updated dataframe
780
  updated_df = read_csv_to_dataframe()
781
 
782
  logger.info(f"Batch analysis completed: {successful_analyses} successful, {failed_analyses} failed, {csv_update_failures} CSV update issues")
783
- return updated_df, final_status, progress_summary
784
 
785
  except Exception as e:
786
  logger.error(f"Error in batch analysis: {e}")
787
  error_status = f"❌ Batch analysis failed: {e}"
788
- return read_csv_to_dataframe(), error_status, ""
789
 
790
  def handle_visit_repo(repo_id: str) -> Tuple[Any, str]:
791
  """Handle visiting the Hugging Face Space for the repository."""
792
  if repo_id and repo_id.strip():
793
  hf_url = f"https://huggingface.co/spaces/{repo_id.strip()}"
794
  logger.info(f"User chose to visit: {hf_url}")
795
- # Use JavaScript to open URL in new tab
796
- js_code = f"""
797
- <script>
798
- window.open('{hf_url}', '_blank');
799
- </script>
800
- """
801
- return gr.update(visible=False), f"🌐 Opening: {hf_url}"
802
  return gr.update(visible=False), ""
803
 
804
  def handle_explore_repo(repo_id: str) -> Tuple[Any, Any, str]:
@@ -836,18 +820,15 @@ def create_ui() -> gr.Blocks:
836
  analyze_next_btn.click(
837
  fn=handle_analyze_next,
838
  inputs=[repo_ids_state, current_repo_idx_state, user_requirements_state],
839
- outputs=[summary_output, df_output, current_repo_idx_state, status_box_analysis]
840
  )
841
  analyze_all_btn.click(
842
- fn=lambda: gr.update(visible=True), # Show progress display
843
- outputs=[progress_display]
844
  ).then(
845
  fn=handle_analyze_all_repos,
846
  inputs=[repo_ids_state, user_requirements_state],
847
- outputs=[df_output, status_box_analysis, progress_display]
848
- ).then(
849
- fn=lambda: gr.update(visible=True), # Keep progress display visible with results
850
- outputs=[progress_display]
851
  )
852
 
853
  # Chatbot Tab
@@ -891,7 +872,8 @@ def create_ui() -> gr.Blocks:
891
  visit_repo_btn.click(
892
  fn=handle_visit_repo,
893
  inputs=[selected_repo_display],
894
- outputs=[repo_action_modal, selected_repo_display]
 
895
  )
896
  explore_repo_btn.click(
897
  fn=handle_explore_repo,
 
406
  # Progress bar for batch analysis
407
  with gr.Row():
408
  analysis_progress = gr.Progress()
409
+ # progress_display = gr.Textbox(
410
+ # label="πŸ“Š Batch Analysis Progress",
411
+ # interactive=False,
412
+ # lines=2,
413
+ # visible=False,
414
+ # info="Shows progress when analyzing all repositories"
415
+ # )
416
 
417
  with gr.Row(equal_height=True):
418
  # with gr.Column():
 
422
  # show_copy_button=True,
423
  # info="Raw content extracted from the repository"
424
  # )
425
+ # with gr.Column():
426
+ # summary_output = gr.Textbox(
427
+ # label="🎯 AI Analysis Summary",
428
+ # lines=20,
429
+ # show_copy_button=True,
430
+ # info="Detailed analysis and insights from AI"
431
+ # )
432
+ pass
433
 
434
  gr.Markdown("### πŸ“Š Results Dashboard")
435
  gr.Markdown("πŸ’‘ **Tip:** Click on any repository name to explore it in detail!")
 
560
  requirements = "\n".join([f"- {msg}" for msg in user_messages if msg.strip()])
561
  return requirements
562
 
563
+ def handle_analyze_next(repo_ids: List[str], current_idx: int, user_requirements: str) -> Tuple[pd.DataFrame, int, str]:
564
  """Analyzes the next repository in the list."""
565
  if not repo_ids:
566
+ return pd.DataFrame(), 0, "Status: No repositories to analyze. Please submit repo IDs first."
567
  if current_idx >= len(repo_ids):
568
+ return read_csv_to_dataframe(), current_idx, "Status: All repositories have been analyzed."
569
 
570
  repo_id_to_analyze = repo_ids[current_idx]
571
  status = f"Status: Analyzing repository {current_idx + 1}/{len(repo_ids)}: {repo_id_to_analyze}"
 
578
  if next_idx >= len(repo_ids):
579
  status += "\n\nFinished all analyses."
580
 
581
+ return df, next_idx, status
582
 
583
  def handle_user_message(user_message: str, history: List[Dict[str, str]]) -> Tuple[List[Dict[str, str]], str]:
584
  """Appends the user's message to the history, preparing for the bot's response."""
 
676
 
677
  return "", gr.update(visible=False), gr.update()
678
 
679
+ def handle_analyze_all_repos(repo_ids: List[str], user_requirements: str, progress=gr.Progress()) -> Tuple[pd.DataFrame, str]:
680
  """Analyzes all repositories in the CSV file with progress tracking."""
681
  if not repo_ids:
682
+ return pd.DataFrame(), "Status: No repositories to analyze. Please submit repo IDs first."
683
 
684
  total_repos = len(repo_ids)
 
685
 
686
  try:
687
  # Start the progress tracking
688
  progress(0, desc="Initializing batch analysis...")
689
 
 
690
  successful_analyses = 0
691
  failed_analyses = 0
692
  csv_update_failures = 0
 
717
  break
718
 
719
  if repo_updated:
 
720
  successful_analyses += 1
721
  else:
722
  # CSV update failed - try once more
 
745
  break
746
 
747
  if retry_success:
 
748
  successful_analyses += 1
749
  else:
 
750
  csv_update_failures += 1
751
 
752
  # Longer delay to prevent file conflicts
 
754
 
755
  except Exception as e:
756
  logger.error(f"Error analyzing {repo_id}: {e}")
 
757
  failed_analyses += 1
758
  # Still wait to prevent rapid failures
759
  time.sleep(0.2)
 
766
  if csv_update_failures > 0:
767
  final_status += f"\n⚠️ CSV Update Issues: {csv_update_failures}/{total_repos}"
768
 
 
 
 
 
 
769
  # Get final updated dataframe
770
  updated_df = read_csv_to_dataframe()
771
 
772
  logger.info(f"Batch analysis completed: {successful_analyses} successful, {failed_analyses} failed, {csv_update_failures} CSV update issues")
773
+ return updated_df, final_status
774
 
775
  except Exception as e:
776
  logger.error(f"Error in batch analysis: {e}")
777
  error_status = f"❌ Batch analysis failed: {e}"
778
+ return read_csv_to_dataframe(), error_status
779
 
780
  def handle_visit_repo(repo_id: str) -> Tuple[Any, str]:
781
  """Handle visiting the Hugging Face Space for the repository."""
782
  if repo_id and repo_id.strip():
783
  hf_url = f"https://huggingface.co/spaces/{repo_id.strip()}"
784
  logger.info(f"User chose to visit: {hf_url}")
785
+ return gr.update(visible=False), hf_url
 
 
 
 
 
 
786
  return gr.update(visible=False), ""
787
 
788
  def handle_explore_repo(repo_id: str) -> Tuple[Any, Any, str]:
 
820
  analyze_next_btn.click(
821
  fn=handle_analyze_next,
822
  inputs=[repo_ids_state, current_repo_idx_state, user_requirements_state],
823
+ outputs=[df_output, current_repo_idx_state, status_box_analysis]
824
  )
825
  analyze_all_btn.click(
826
+ fn=lambda: None, # No need to show progress display since it's commented out
827
+ outputs=[]
828
  ).then(
829
  fn=handle_analyze_all_repos,
830
  inputs=[repo_ids_state, user_requirements_state],
831
+ outputs=[df_output, status_box_analysis]
 
 
 
832
  )
833
 
834
  # Chatbot Tab
 
872
  visit_repo_btn.click(
873
  fn=handle_visit_repo,
874
  inputs=[selected_repo_display],
875
+ outputs=[repo_action_modal, selected_repo_display],
876
+ js="(repo_id) => { if(repo_id && repo_id.trim()) { window.open('https://huggingface.co/spaces/' + repo_id.trim(), '_blank'); } }"
877
  )
878
  explore_repo_btn.click(
879
  fn=handle_explore_repo,