File size: 2,499 Bytes
5a00e55
24572ab
 
421eaab
 
 
 
24572ab
ecab5c8
a6eeda1
421eaab
 
 
 
 
 
 
24572ab
421eaab
b651447
421eaab
 
 
 
 
b651447
421eaab
 
 
 
 
 
 
 
 
 
 
 
 
 
b651447
24572ab
 
421eaab
 
 
 
 
 
 
24572ab
 
ecab5c8
 
 
421eaab
 
 
 
 
 
 
 
ecab5c8
421eaab
 
 
 
 
ecab5c8
24572ab
a2c48df
c4edab0
b651447
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import torch
import gradio as gr
from transformers import pipeline
import logging

# Set up logging
logging.basicConfig(level=logging.INFO)

# Use a pipeline as a high-level helper
device = 0 if torch.cuda.is_available() else -1
text_summary = pipeline("summarization", model="facebook/bart-large-cnn", device=device, torch_dtype=torch.bfloat16)

# Function for summarization with enhancements
def summary(input, summary_type="medium"):
    # Check for empty input
    if not input.strip():
        return "Error: Please provide some text to summarize."

    # Calculate input length
    input_length = len(input.split())
    logging.info(f"Input length: {input_length} words")

    # Handle input that's too short
    if input_length < 10:
        return "Error: Input is too short. Please provide at least 10 words."

    # Handle input that's too long for the model
    if input_length > 512:
        return "Warning: Input exceeds the model's limit of 512 tokens. Please shorten the input text."

    # Adjust max/min lengths based on the summary type
    if summary_type == "short":
        max_output_tokens = max(10, input_length // 4)
    elif summary_type == "medium":
        max_output_tokens = max(20, input_length // 2)
    elif summary_type == "long":
        max_output_tokens = max(30, (3 * input_length) // 4)
    min_output_tokens = max(10, input_length // 6)

    # Generate summary
    output = text_summary(input, max_length=max_output_tokens, min_length=min_output_tokens, truncation=True)
    return output[0]['summary_text']

# Gradio interface
def save_output(summary_text):
    """Save the summarized text to a file."""
    with open("summary_output.txt", "w") as file:
        file.write(summary_text)
    return "Summary saved to 'summary_output.txt'."

gr.close_all()

# Create the Gradio interface
demo = gr.Interface(
    fn=summary,
    inputs=[
        gr.Textbox(label="INPUT THE PASSAGE TO SUMMARIZE", lines=15, placeholder="Paste your text here."),
        gr.Dropdown(["short", "medium", "long"], label="SUMMARY LENGTH", value="medium")
    ],
    outputs=[
        gr.Textbox(label="SUMMARIZED TEXT", lines=10, placeholder="Your summarized text will appear here."),
        gr.Button("Download Summary")
    ],
    title="PAVISHINI @ GenAI Project 1: Text Summarizer",
    description=(
        "This application summarizes input text. "
        "The output length can be short, medium, or long based on your selection."
    ),
    live=True
)

demo.launch()