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()