arahrooh commited on
Commit
589ce95
·
1 Parent(s): a2f2523

Fix: Refactor demo creation into function for better error handling

Browse files
Files changed (1) hide show
  1. app.py +66 -55
app.py CHANGED
@@ -921,40 +921,39 @@ IS_SPACES = (
921
  os.getenv("HF_SPACE_ID") is not None
922
  )
923
 
924
- # Create demo at module level (like HF docs example)
925
- # Initialize demo variable to None first (safety measure)
926
  demo = None
927
 
928
- # Create demo at module level (like HF docs example)
929
- # This ensures Spaces can always find it when importing the module
930
- try:
931
- if IS_SPACES:
932
- logger.info("Initializing for Hugging Face Spaces...")
933
- else:
934
- logger.info("Initializing for local execution...")
935
-
936
- # Initialize with default args
937
- parser = argparse.ArgumentParser()
938
- parser.add_argument('--model', type=str, default='meta-llama/Llama-3.2-3B-Instruct')
939
- parser.add_argument('--vector-db-dir', default='./chroma_db')
940
- parser.add_argument('--data-dir', default='./Data Resources')
941
- parser.add_argument('--max-new-tokens', type=int, default=1024)
942
- parser.add_argument('--temperature', type=float, default=0.2)
943
- parser.add_argument('--top-p', type=float, default=0.9)
944
- parser.add_argument('--repetition-penalty', type=float, default=1.1)
945
- parser.add_argument('--k', type=int, default=5)
946
- parser.add_argument('--skip-indexing', action='store_true', default=True)
947
- parser.add_argument('--verbose', action='store_true', default=False)
948
- parser.add_argument('--share', action='store_true', default=False)
949
- parser.add_argument('--server-name', type=str, default='0.0.0.0')
950
- parser.add_argument('--server-port', type=int, default=7860)
951
- parser.add_argument('--seed', type=int, default=42)
952
-
953
- args = parser.parse_args([]) # Empty args
954
- args.skip_model_loading = IS_SPACES # Skip model loading on Spaces, use Inference API
955
-
956
- # Create bot - handle initialization errors gracefully
957
  try:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
958
  bot = RAGBot(args)
959
 
960
  if bot.vector_retriever is None:
@@ -966,18 +965,20 @@ try:
966
  logger.warning("Vector database is empty. The chatbot may not find relevant documents.")
967
  logger.warning("This is OK for initial deployment - documents can be indexed later.")
968
 
 
969
  # Create the demo interface directly at module level (like HF docs example)
970
  demo = create_interface(bot, use_inference_api=IS_SPACES)
971
  logger.info(f"Demo created successfully: {type(demo)}")
 
 
972
  except Exception as bot_error:
973
- logger.error(f"Error initializing RAGBot: {bot_error}", exc_info=True)
974
  import traceback
975
  error_trace = traceback.format_exc()
976
  logger.error(f"Full traceback: {error_trace}")
977
 
978
  # Create a demo that shows the error but still allows the interface to load
979
- # This is critical - we MUST create a demo object for Spaces
980
- with gr.Blocks(title="CGT-LLM-Beta RAG Chatbot") as demo:
981
  gr.Markdown(f"""
982
  # ⚠️ Initialization Error
983
 
@@ -995,31 +996,41 @@ try:
995
  - Make sure HF_TOKEN is set as a secret
996
  - Check the logs tab for detailed error messages
997
 
998
- Please check the logs for more details.
 
 
 
999
  """)
1000
- logger.info(f"Error demo created: {type(demo)}")
1001
- # Don't re-raise - let the demo be created so users can see the error
1002
-
1003
- # Verify demo was created
1004
- if demo is None:
1005
- logger.error("Demo is None after creation attempt!")
1006
- with gr.Blocks(title="CGT-LLM-Beta RAG Chatbot") as demo:
1007
- gr.Markdown("# Error: Demo was not created\n\nPlease check the logs.")
1008
- elif not isinstance(demo, (gr.Blocks, gr.Interface)):
1009
- logger.error(f"Demo is not a valid Gradio object: {type(demo)}")
1010
- with gr.Blocks(title="CGT-LLM-Beta RAG Chatbot") as demo:
1011
- gr.Markdown(f"# Error: Invalid demo type\n\nType: {type(demo)}\n\nPlease check the logs.")
1012
- else:
1013
- logger.info(f"Demo created successfully: {type(demo)}")
1014
- logger.info("Demo validation passed - ready for Spaces")
1015
  except Exception as e:
1016
- logger.error(f"Error creating demo: {e}", exc_info=True)
1017
  import traceback
1018
- logger.error(f"Traceback: {traceback.format_exc()}")
 
1019
  # Create a fallback error demo so Spaces doesn't show blank
1020
- with gr.Blocks() as demo:
1021
- gr.Markdown(f"# Error Initializing Chatbot\n\nAn error occurred while initializing the chatbot.\n\nError: {str(e)}\n\nPlease check the logs for details.")
1022
- logger.info(f"Error demo created: {type(demo)}")
 
 
 
 
 
 
 
 
 
 
 
 
 
1023
 
1024
  # Final verification - ensure demo exists and is valid
1025
  # This is CRITICAL for Spaces - the demo variable MUST exist and be a valid Gradio object
 
921
  os.getenv("HF_SPACE_ID") is not None
922
  )
923
 
924
+ # CRITICAL: Initialize demo variable FIRST before any try/except
925
+ # This ensures it always exists, even if initialization fails
926
  demo = None
927
 
928
+ def _create_demo():
929
+ """Create the demo - separated into function for better error handling"""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
930
  try:
931
+ logger.info("=" * 80)
932
+ logger.info("Starting demo creation...")
933
+ logger.info(f"IS_SPACES: {IS_SPACES}")
934
+
935
+ # Initialize with default args
936
+ parser = argparse.ArgumentParser()
937
+ parser.add_argument('--model', type=str, default='meta-llama/Llama-3.2-3B-Instruct')
938
+ parser.add_argument('--vector-db-dir', default='./chroma_db')
939
+ parser.add_argument('--data-dir', default='./Data Resources')
940
+ parser.add_argument('--max-new-tokens', type=int, default=1024)
941
+ parser.add_argument('--temperature', type=float, default=0.2)
942
+ parser.add_argument('--top-p', type=float, default=0.9)
943
+ parser.add_argument('--repetition-penalty', type=float, default=1.1)
944
+ parser.add_argument('--k', type=int, default=5)
945
+ parser.add_argument('--skip-indexing', action='store_true', default=True)
946
+ parser.add_argument('--verbose', action='store_true', default=False)
947
+ parser.add_argument('--share', action='store_true', default=False)
948
+ parser.add_argument('--server-name', type=str, default='0.0.0.0')
949
+ parser.add_argument('--server-port', type=int, default=7860)
950
+ parser.add_argument('--seed', type=int, default=42)
951
+
952
+ args = parser.parse_args([]) # Empty args
953
+ args.skip_model_loading = IS_SPACES # Skip model loading on Spaces, use Inference API
954
+
955
+ logger.info("Creating RAGBot...")
956
+ # Create bot - handle initialization errors gracefully
957
  bot = RAGBot(args)
958
 
959
  if bot.vector_retriever is None:
 
965
  logger.warning("Vector database is empty. The chatbot may not find relevant documents.")
966
  logger.warning("This is OK for initial deployment - documents can be indexed later.")
967
 
968
+ logger.info("Creating interface...")
969
  # Create the demo interface directly at module level (like HF docs example)
970
  demo = create_interface(bot, use_inference_api=IS_SPACES)
971
  logger.info(f"Demo created successfully: {type(demo)}")
972
+ return demo
973
+
974
  except Exception as bot_error:
975
+ logger.error(f"Error initializing: {bot_error}", exc_info=True)
976
  import traceback
977
  error_trace = traceback.format_exc()
978
  logger.error(f"Full traceback: {error_trace}")
979
 
980
  # Create a demo that shows the error but still allows the interface to load
981
+ with gr.Blocks(title="CGT-LLM-Beta RAG Chatbot") as error_demo:
 
982
  gr.Markdown(f"""
983
  # ⚠️ Initialization Error
984
 
 
996
  - Make sure HF_TOKEN is set as a secret
997
  - Check the logs tab for detailed error messages
998
 
999
+ **Error Details:**
1000
+ ```
1001
+ {error_trace[:1000]}...
1002
+ ```
1003
  """)
1004
+ logger.info(f"Error demo created: {type(error_demo)}")
1005
+ return error_demo
1006
+
1007
+ # Create demo at module level (like HF docs example)
1008
+ # This ensures Spaces can always find it when importing the module
1009
+ try:
1010
+ demo = _create_demo()
1011
+ logger.info("Demo creation completed")
 
 
 
 
 
 
 
1012
  except Exception as e:
1013
+ logger.error(f"CRITICAL: Error in demo creation wrapper: {e}", exc_info=True)
1014
  import traceback
1015
+ error_trace = traceback.format_exc()
1016
+ logger.error(f"Full traceback: {error_trace}")
1017
  # Create a fallback error demo so Spaces doesn't show blank
1018
+ with gr.Blocks(title="CGT-LLM-Beta RAG Chatbot") as demo:
1019
+ gr.Markdown(f"""
1020
+ # Error Initializing Chatbot
1021
+
1022
+ A critical error occurred while initializing the chatbot.
1023
+
1024
+ **Error:** {str(e)}
1025
+
1026
+ **Traceback:**
1027
+ ```
1028
+ {error_trace[:1500]}...
1029
+ ```
1030
+
1031
+ Please check the logs for more details.
1032
+ """)
1033
+ logger.info(f"Fallback error demo created: {type(demo)}")
1034
 
1035
  # Final verification - ensure demo exists and is valid
1036
  # This is CRITICAL for Spaces - the demo variable MUST exist and be a valid Gradio object