Spaces:
Sleeping
Sleeping
import os | |
import gradio as gr | |
import requests | |
from newspaper import Article | |
import time | |
from langdetect import detect | |
import nltk | |
# Download the 'punkt' tokenizer | |
nltk.download('punkt') | |
# Load environment variables from .env file | |
API_KEY = os.getenv('API_KEY') | |
print(f"API_KEY: {'Loaded' if API_KEY else 'Not Loaded'}") | |
# Ensure the API key is loaded | |
if not API_KEY: | |
raise ValueError("API_KEY is missing. Please set it in the secret variables in the Hugging Face Spaces settings.") | |
# Define the Hugging Face API URL | |
API_URL = "https://api-inference.huggingface.co/models/facebook/bart-large-cnn" | |
# Set up headers for the API request | |
headers = {"Authorization": f"Bearer {API_KEY}"} | |
# Function to query the Hugging Face API | |
def query(payload): | |
for _ in range(5): # Try 5 times | |
response = requests.post(API_URL, headers=headers, json=payload) | |
result = response.json() | |
if 'error' in result and 'currently loading' in result['error']: | |
time.sleep(5) # Wait for 5 seconds before retrying | |
else: | |
return result | |
return {"error": "Model is still loading. Please try again later."} | |
# Function to summarize text | |
def summarize(text, minL=20, maxL=300): | |
output = query({ | |
"inputs": text, | |
"parameters": { | |
"min_length": minL, | |
"max_length": maxL | |
} | |
}) | |
if "error" in output: | |
return f"Error: {output['error']}" | |
if not isinstance(output, list) or not output: | |
return "Error: Unexpected response format." | |
if "summary_text" not in output[0]: | |
return "Error: 'summary_text' key not found in the response." | |
return output[0]['summary_text'] | |
def Choices(choice, input_text, minL, maxL): | |
if choice == "URL": | |
try: | |
article = Article(input_text, language="en") | |
article.download() | |
article.parse() | |
article.nlp() | |
text = article.text | |
except Exception as e: | |
return f"Error: Unable to fetch article. {str(e)}" | |
else: | |
text = input_text | |
return summarize(text, minL, maxL) | |
# Create Gradio interface | |
demo = gr.Interface( | |
fn=Choices, | |
inputs=[ | |
gr.Radio(choices=["URL", "Paragraph"], label="Input Type", value="URL"), | |
gr.Textbox(lines=10, placeholder="Enter text here..."), | |
gr.Number(value=20, label="Minimum Length"), | |
gr.Number(value=300, label="Maximum Length"), | |
], | |
outputs="textbox", | |
title="Text Summarizer", | |
description="Enter text to summarize using Hugging Face BART model." | |
) | |
# Launch the interface | |
demo.launch() | |