Spaces:
Running
Running
import logging | |
import sys | |
import traceback | |
import os | |
# Configure basic logging for the orchestration script | |
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
def run_step(step_func, step_name): | |
"""Runs a step and logs its success or failure.""" | |
logging.info(f"--- Starting step: {step_name} ---") | |
try: | |
step_func() | |
logging.info(f"--- Finished step: {step_name} successfully ---") | |
return True | |
except Exception as e: | |
logging.error(f"--- Step failed: {step_name} ---") | |
logging.error(f"Error: {e}") | |
# Log the full traceback for detailed debugging | |
logging.error(traceback.format_exc()) | |
return False | |
def main(): | |
"""Runs the daily update sequence.""" | |
# --- Add script directory to Python path --- | |
script_dir = os.path.dirname(os.path.abspath(__file__)) | |
if script_dir not in sys.path: | |
sys.path.append(script_dir) | |
logging.info(f"Added {script_dir} to sys.path for local imports.") | |
# --- | |
logging.info("=== Starting Daily Model Update Process ===") | |
all_steps_succeeded = True | |
# --- Step 1: Fetch new/updated model descriptions --- | |
try: | |
# Import the script's main function dynamically | |
from huggingface_model_descriptions import main as fetch_models_main | |
if not run_step(fetch_models_main, "Fetch Hugging Face Models"): | |
all_steps_succeeded = False | |
# Decide if we should continue if fetching fails (maybe index can still be built?) | |
# For now, let's stop if the first step fails. | |
logging.error("Stopping update process for this cycle due to failure in fetching models.") | |
return # Exit the main function for this cycle | |
except ImportError: | |
logging.error("Failed to import huggingface_model_descriptions.py. Ensure it's in the same directory or Python path.") | |
all_steps_succeeded = False | |
return # Exit the main function for this cycle | |
except Exception as e: # Catch any unexpected error during import/setup | |
logging.error(f"Unexpected error setting up model fetching step: {e}") | |
logging.error(traceback.format_exc()) | |
all_steps_succeeded = False | |
return # Exit the main function for this cycle | |
# --- Step 2: Add explanations using Gemini --- | |
# Only proceed if the previous step was successful | |
if all_steps_succeeded: | |
try: | |
from add_model_explanations import main as add_explanations_main | |
# Check for API key *before* running the step | |
if not os.getenv("GEMINI_API_KEY"): | |
logging.warning("GEMINI_API_KEY environment variable not set. Explanation step will fail or do nothing.") | |
# Optionally, you could skip this step entirely if the key is missing: | |
# logging.warning("Skipping explanation generation step.") | |
# pass # Move to the next step | |
if not run_step(add_explanations_main, "Generate Model Explanations (Gemini)"): | |
all_steps_succeeded = False | |
# Decide if index building should proceed if explanations fail | |
logging.warning("Explanation generation failed. Index will be built with potentially missing explanations.") | |
# We will continue to the next step in this case | |
except ImportError: | |
logging.error("Failed to import add_model_explanations.py. Ensure it's in the same directory or Python path.") | |
all_steps_succeeded = False | |
# Stop if explanation script is missing | |
return # Exit the main function for this cycle | |
except Exception as e: # Catch any unexpected error during import/setup | |
logging.error(f"Unexpected error setting up explanation generation step: {e}") | |
logging.error(traceback.format_exc()) | |
all_steps_succeeded = False | |
return # Exit the main function for this cycle | |
# --- Step 3: Rebuild the search index --- | |
# Only proceed if fetching models (Step 1) succeeded. Allow proceeding if Step 2 failed. | |
if 'fetch_models_main' in locals() or 'fetch_models_main' in globals(): # Check if Step 1 setup occurred | |
try: | |
from build_index import main as build_index_main | |
if not run_step(build_index_main, "Build Search Index (FAISS)"): | |
all_steps_succeeded = False | |
logging.error("Index building failed. The search index may be outdated or corrupted.") | |
# Stop if index building fails | |
return # Exit the main function for this cycle | |
except ImportError: | |
logging.error("Failed to import build_index.py. Ensure it's in the same directory or Python path.") | |
all_steps_succeeded = False | |
return # Exit the main function for this cycle | |
except Exception as e: # Catch any unexpected error during import/setup | |
logging.error(f"Unexpected error setting up index building step: {e}") | |
logging.error(traceback.format_exc()) | |
all_steps_succeeded = False | |
return # Exit the main function for this cycle | |
logging.info("===========================================") | |
if all_steps_succeeded: | |
logging.info("=== Daily Model Update Process Completed Successfully ===") | |
else: | |
logging.error("=== Daily Model Update Process Completed with Errors ===") | |
if __name__ == "__main__": | |
main() |