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)