ehtyalee's picture
Upload 3 files
3c8bf54 verified
raw
history blame contribute delete
3.93 kB
# -*- 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()