import gradio as gr
from transformers import pipeline
import torch

# Check if CUDA is available and set device
device = "cuda" if torch.cuda.is_available() else "cpu"

# Initialize the model with device setting
model = pipeline("summarization", 
                model="luisotorres/bart-finetuned-samsum",
                device=device)

def summarize_text(text):
    try:
        # Dynamically set max_length based on input length
        input_length = len(text.split())
        max_length = min(130, max(30, input_length // 2))
        
        summary = model(text, 
                       max_length=max_length, 
                       min_length=30,
                       do_sample=False)  # Deterministic generation
        return summary[0]["summary_text"]
    except Exception as e:
        return f"Error: {str(e)}"

# Create Gradio interface
iface = gr.Interface(
    fn=summarize_text,
    inputs=gr.Textbox(
        label="Input Text",
        lines=5,
        placeholder="Enter the text you want to summarize..."
    ),
    outputs=gr.Textbox(label="Summary"),
    title="Text Summarization",
    description="Enter your text to generate a concise summary. The summary length will automatically adjust based on your input length.",
    examples=[
        ["Sarah: Do you think it's a good idea to invest in Bitcoin?\nEmily: I'm skeptical. The market is very volatile, and you could lose money.\nSarah: True. But there's also a high upside, right?"],
        ["John: Hey, can you help me with the project?\nMary: Sure, what do you need?\nJohn: I'm stuck on the database design.\nMary: OK, let's schedule a call tomorrow morning.\nJohn: Perfect, thanks!"]
    ],
    allow_flagging="never"
)

# Launch the interface without share parameter
iface.launch(
    server_name="0.0.0.0",  # Required for Spaces
    server_port=7860,       # Standard port for Spaces
    show_error=True
)