news_verification / application.py
pmkhanh7890's picture
1st
22e1b62
raw
history blame
4.97 kB
import os
import gradio as gr
import openai
import requests
from PIL import Image
import re
from src.application.url_reader import URLReader
OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
openai.api_key = os.getenv('OPENAI_API_KEY')
GOOGLE_API_KEY = os.getenv('GOOGLE_API_KEY')
SEARCH_ENGINE_ID = os.getenv('SEARCH_ENGINE_ID')
def load_url(url):
"""
Load content from the given URL.
"""
content = URLReader(url)
image = None
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'}
try:
response = requests.get(
url,
headers = header,
stream = True
)
response.raise_for_status() # Raise an exception for bad status codes
image_response = requests.get(content.top_image, stream=True)
try:
image = Image.open(image_response.raw)
except:
print(f"Error loading image from {content.top_image}")
except (requests.exceptions.RequestException, FileNotFoundError) as e:
print(f"Error fetching image: {e}")
return content.title, content.text, image
def replace_terms(text, input_term, destination_term):
# Replace input_term with destination_term in the text
modified_text = re.sub(input_term, destination_term, text)
return modified_text
def generate_content(model1, model2, title, content):
# Generate text using the selected models
full_content = ""
input_type = ""
if title and content:
full_content = title + "\n" + content
input_type = "title and content"
elif title:
full_content = title
input_type = "title"
elif content:
full_content = title
input_type = "content"
def generate_text(model, full_context, input_type):
# Generate text using the selected model
if input_type == "":
prompt = "Generate a random fake news article"
else:
prompt = f"Generate a fake news article (title and content) based on the following {input_type}: {full_context}"
try:
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "user", "content": prompt}
]
)
return response.choices[0].message.content
except openai.error.OpenAIError as e:
print(f"Error interacting with OpenAI API: {e}")
return "An error occurred while processing your request."
# Define the GUI
with gr.Blocks() as demo:
gr.Markdown("# Fake News Detection")
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("## Settings")
gr.Markdown("This tool generates fake news by modifying the content of a given URL.")
with gr.Accordion("1. Enter a URL"):
#gr.Markdown(" 1. Enter a URL.")
url_input = gr.Textbox(
label="URL",
value="https://bbc.com/future/article/20250110-how-often-you-should-wash-your-towels-according-to-science",
)
load_button = gr.Button("Load an URL...")
with gr.Accordion("2. Select a content-generation model", open=True):
with gr.Row():
model1_dropdown = gr.Dropdown(choices=["GPT 4o", "GPT 4o-mini"], label="Text-generation model")
model2_dropdown = gr.Dropdown(choices=["Dall-e", "Stable Diffusion"], label="Image-generation model")
generate_button = gr.Button("Random generation...")
with gr.Accordion("3. Replace any terms", open=True):
with gr.Row():
input_term_box = gr.Textbox(label="Input Term")
destination_term_box = gr.Textbox(label="Destination Term")
replace_button = gr.Button("Replace term...")
process_button = gr.Button("Process")
with gr.Column(scale=2):
gr.Markdown("## News contents")
title_input = gr.Textbox(label="Title", value="")
with gr.Row():
image_view = gr.Image(label="Image")
content_input = gr.Textbox(label="Content", value="", lines=15)
# Connect events
load_button.click(
load_url,
inputs=url_input,
outputs=[title_input, content_input, image_view]
)
replace_button.click(replace_terms,
inputs=[content_input, input_term_box, destination_term_box],
outputs=content_input)
process_button.click(generate_text,
inputs=[url_input, model1_dropdown, model2_dropdown, input_term_box, destination_term_box, title_input, content_input],
outputs=[title_input, content_input])
#url_input.change(load_image, inputs=url_input, outputs=image_view)
demo.launch()