Spaces:
Sleeping
Sleeping
| # -*- coding: utf-8 -*- | |
| """app.ipynb | |
| Automatically generated by Colab. | |
| Original file is located at | |
| https://colab.research.google.com/drive/1EyjV73NmmvRi7U_r_GxUjz4X-5-6yMgE | |
| """ | |
| # load_and_run_pkl_model.py | |
| # This script ONLY loads a pre-saved PKL file and runs a Gradio interface for it. | |
| import gradio as gr | |
| import pickle | |
| import os | |
| # --- Dependencies required ONLY for the class definition used by pickle --- | |
| # We are NOT calling pipeline() here to load models from Hugging Face. | |
| # Pickle just needs to know the *structure* of the saved object. | |
| from transformers import pipeline | |
| import torch | |
| # --- Define the Class Structure --- | |
| # IMPORTANT: This MUST exactly match the class definition used when | |
| # the .pkl file was SAVED. Pickle needs this to reconstruct the object. | |
| # --- Configuration: Path to your saved PKL file --- | |
| PICKLE_FILENAME = "combined_analyzer.pkl" | |
| MODEL_DIR = "saved_model" # Directory where the PKL file is located | |
| PICKLE_FILEPATH = os.path.join(MODEL_DIR, PICKLE_FILENAME) | |
| # --- Global Variable to hold the loaded analyzer --- | |
| LOADED_ANALYZER = None | |
| LOAD_ERROR_MESSAGE = None | |
| # --- Load the Saved Model from PKL File --- | |
| print("-" * 40) | |
| print(f"Attempting to load analyzer object from: {PICKLE_FILEPATH}") | |
| try: | |
| # Security Note: Only unpickle files you trust. | |
| if not os.path.exists(PICKLE_FILEPATH): | |
| raise FileNotFoundError(f"Cannot find the model file at '{PICKLE_FILEPATH}'. Make sure it exists.") | |
| with open(PICKLE_FILEPATH, 'rb') as f: | |
| # The actual loading happens here | |
| LOADED_ANALYZER = pickle.load(f) | |
| # Validate the loaded object (basic check) | |
| if not isinstance(LOADED_ANALYZER, CombinedAnalyzer) or not callable(getattr(LOADED_ANALYZER, 'analyze', None)): | |
| LOADED_ANALYZER = None # Invalidate if it's not the right type or lacks the method | |
| raise TypeError("The loaded object from the PKL file is not a valid 'CombinedAnalyzer' instance or is corrupted.") | |
| else: | |
| print(">>> Successfully loaded analyzer object from PKL file.") | |
| except Exception as e: | |
| LOAD_ERROR_MESSAGE = f"ERROR: Failed to load model from '{PICKLE_FILEPATH}'.\nDetails: {e}" | |
| print(LOAD_ERROR_MESSAGE) | |
| LOADED_ANALYZER = None # Ensure it's None if any error occurred | |
| print("-" * 40) | |
| # --- Gradio Function (Uses the globally loaded object) --- | |
| def perform_analysis(input_text): | |
| """This function is called by the Gradio interface.""" | |
| if LOADED_ANALYZER is None: | |
| # If loading failed earlier, return the error message | |
| return LOAD_ERROR_MESSAGE or "Error: Analyzer model is not loaded." | |
| if not input_text or not input_text.strip(): | |
| return "Please enter some text to analyze." | |
| # Use the 'analyze' method of the object loaded from the PKL file | |
| try: | |
| results = LOADED_ANALYZER.analyze(input_text) | |
| return results | |
| except Exception as e: | |
| # Catch errors during the analysis itself | |
| print(f"Error during analysis execution: {e}") | |
| return f"An error occurred during analysis:\n{e}" | |
| # --- Create the Gradio Interface --- | |
| gradio_app_description = f"Enter text to analyze using the model loaded from `{PICKLE_FILEPATH}`." | |
| if LOADED_ANALYZER is None: | |
| gradio_app_description += "\n\n**WARNING: Model failed to load. Analysis will not function.**" | |
| interface = gr.Interface( | |
| fn=perform_analysis, # The function that runs the analysis | |
| inputs=gr.Textbox(lines=8, placeholder="Enter text here...", label="Input Text"), | |
| outputs=gr.Textbox(lines=8, label="Analysis Results", interactive=False), | |
| title="Analyze Text with Saved Model", | |
| description=gradio_app_description, | |
| allow_flagging='never' | |
| ) | |
| # --- Launch the Gradio App --- | |
| if __name__ == "__main__": | |
| print("Launching Gradio interface...") | |
| if LOADED_ANALYZER is None: | |
| print("!!! Warning: Launching interface, but model loading failed. Check errors above. !!!") | |
| interface.launch() |