import gradio as gr import logging from transformers import pipeline from services.text_input_handler import handle_text_input from services.file_input_handler import read_text_file, read_pdf_file, read_docx_file from services.audio_input_handler import audio_to_text from utils.logging_utils import setup_logging class TextSummarizer: def __init__(self, model_name="t5-small"): self.summarizer = pipeline("summarization", model=model_name) def summarize(self, text): if not text: return "No text to summarize." summary = self.summarizer(text, max_length=150, min_length=30, do_sample=False) return summary[0]['summary_text'] def process_input(input_type, input_data): try: logging.info(f"Processing input type: {input_type}") if input_type == "Text": processed_text = handle_text_input(input_data) elif input_type == "Text File": processed_text = read_text_file(input_data) elif input_type == "PDF": processed_text = read_pdf_file(input_data) elif input_type == "DOCX": processed_text = read_docx_file(input_data) elif input_type == "Audio": processed_text = audio_to_text(input_data) else: return "Invalid input type." if processed_text: summary = summarizer.summarize(processed_text) logging.info(f"{input_type} processed successfully.") return summary else: logging.error(f"Failed to process {input_type}.") return "Failed to process the input. Check logs for more details." except Exception as e: logging.error(f"Error during summarization: {e}") return "An error occurred during summarization. Please check the logs for more details." def update_input_type(input_type): if input_type == "Text": return gr.update(value="", placeholder="Type your text here...") elif input_type == "Text File": return gr.update(value=None, type="file", label="Upload your text file") elif input_type == "PDF": return gr.update(value=None, type="file", label="Upload your PDF file") elif input_type == "DOCX": return gr.update(value=None, type="file", label="Upload your DOCX file") elif input_type == "Audio": return gr.update(value=None, type="file", label="Upload your audio file") else: return gr.update(value="", placeholder="Invalid input type") def main(): # Setup logging setup_logging() logging.info("Starting GenAI Lab Report Analyzer with Gradio.") # Initialize summarizer global summarizer summarizer = TextSummarizer() # Gradio interface input_type = gr.inputs.Radio(choices=["Text", "Text File", "PDF", "DOCX", "Audio"], label="Select Input Type") input_data = gr.inputs.Textbox(lines=5, label="Enter your text here") # Default for text input def interface_fn(input_type, input_data): updated_input = update_input_type(input_type) return process_input(input_type, input_data), updated_input interface = gr.Interface( fn=interface_fn, inputs=[input_type, input_data], outputs=[gr.outputs.Textbox(label="Report Result"), input_data], title="GenAI Lab Report Analyzer", description="Upload a file, record audio, or type text to generate a summary. Select the appropriate input type and provide the input.", live=True, theme="default", layout="vertical", allow_flagging="never" ) interface.launch() if __name__ == "__main__": main()