Spaces:
Sleeping
Sleeping
import gradio as gr | |
import os | |
import openai | |
import requests | |
import re | |
from newspaper import Article | |
import transformers | |
from transformers import GPT2Tokenizer | |
# Silence transformers backend warnings | |
transformers.logging.set_verbosity_error() | |
def text_prompt(request: str, page_url: str, api_key: str, temp: float): | |
# Fetch & parse | |
try: | |
headers = {'User-Agent': 'Chrome/83.0.4103.106'} | |
resp = requests.get(page_url, headers=headers, timeout=10) | |
resp.raise_for_status() | |
page = Article('') | |
page.set_html(resp.text) | |
page.parse() | |
except Exception as e: | |
return "", f"Error fetching URL: {e}", "" | |
# Tokenize & truncate to ~1800 GPT-2 tokens | |
tokenizer = GPT2Tokenizer.from_pretrained("gpt2") | |
sentences = page.text.split('.') | |
tokens_accum, truncated_text = [], "" | |
for sent in sentences: | |
toks = tokenizer.tokenize(sent + ".") | |
if len(tokens_accum) + len(toks) > 1800: | |
break | |
tokens_accum += toks | |
truncated_text += sent + ". " | |
num_input_tokens = len(tokens_accum) | |
if num_input_tokens < 10: | |
return page.text, f"Not enough text ({num_input_tokens} tokens)", num_input_tokens | |
# Call GPT-4o mini via ChatCompletion | |
openai.api_key = api_key | |
try: | |
chat_resp = openai.ChatCompletion.create( | |
model="gpt-4o-mini", | |
messages=[ | |
{"role": "system", "content": "You are a helpful assistant."}, | |
{"role": "user", "content": request + "\n\n>>\n" + truncated_text + "\n<<"} | |
], | |
temperature=temp, | |
max_tokens=2048, | |
top_p=0.9, | |
) | |
ai_text = re.sub(r'\s+', ' ', chat_resp.choices[0].message.content).strip() | |
total_tokens = chat_resp.usage.total_tokens | |
return page.text, ai_text, total_tokens | |
except Exception as e: | |
return page.text, f"OpenAI API error: {e}", num_input_tokens | |
if __name__ == "__main__": | |
iface = gr.Interface( | |
fn=text_prompt, | |
inputs=[ | |
gr.Textbox(label="Prompt:"), | |
gr.Textbox(label="URL to parse:"), | |
gr.Textbox(label="API-Key:", type="password"), | |
gr.Slider(0.0,1.0,value=0.3, label="Temperature:") | |
], | |
outputs=[ | |
gr.Textbox(label="Input Text:"), | |
gr.Textbox(label="AI Output:"), | |
gr.Textbox(label="Total Tokens:") | |
], | |
title="GPT-4o-mini URL Summarizer", | |
description="Uses GPT-4o-mini via ChatCompletion to summarize webpage text." | |
) | |
try: | |
iface.queue() | |
iface.launch() | |
except Exception as e: | |
print("Failed to launch:", e) |