EchoTruth / app.py
lightmate's picture
Update app.py
1190b8e verified
raw
history blame
3.49 kB
import gradio as gr
from newspaper import Article
from modules.online_search import search_online
from modules.validation import calculate_truthfulness_score
from modules.knowledge_graph import search_kg
from dotenv import load_dotenv
import os
# Load environment variables from .env file
load_dotenv()
# Constants
KG_INDEX_PATH="KG/news_category_index.faiss"
KG_DATASET_PATH="KG/News_Category_Dataset_v3.json"
SEARCH_API_KEY = os.getenv("SEARCH_API_KEY")
SEARCH_BASE_URL = os.getenv("SEARCH_BASE_URL")
SEARCH_MODEL = os.getenv("SEARCH_MODEL")
# Function to process input and evaluate truthfulness
def evaluate_news(news_input):
# Display loading message
yield "**Processing... Please wait while we analyze the information.** ⏳"
# Handle URL input
if news_input.startswith("http"):
try:
article = Article(news_input)
article.download()
article.parse()
news_text = article.title + ". " + article.text
except Exception as e:
yield f"**Error processing the URL:** {str(e)}"
return
else:
# Direct text input
news_text = news_input
try:
# Retrieve relevant info from FAISS knowledge graph
kg_content = search_kg(query=news_text, index_path=KG_INDEX_PATH, dataset_path=KG_DATASET_PATH)
# Search online for additional context
online_search_results = search_online(
query=news_text,
api_key=SEARCH_API_KEY,
base_url=SEARCH_BASE_URL,
model=SEARCH_MODEL
)
# Combine context from KG and online search
context = online_search_results['message_content'] + '\n' + kg_content
# Calculate truth score
truth_score = calculate_truthfulness_score(info=news_text, context=context)
# Generate explanation based on score
if truth_score > 0.7:
status = "likely true"
recommendation = "You can reasonably trust this information, but further verification is always recommended for critical decisions."
elif truth_score > 0.4:
status = "uncertain"
recommendation = "This information might be partially true, but additional investigation is required before accepting it as fact."
else:
status = "unlikely to be true"
recommendation = "It is recommended to verify this information through multiple reliable sources before trusting it."
# Final Output
result = f"**News**: \"{news_text[:300]}...\"\n\n"
result += f"**Truthfulness Score**: {truth_score:.2f} (**{status.capitalize()}**)\n\n"
result += f"**Analysis**: {recommendation}\n\n"
yield result
except Exception as e:
yield f"**Error occurred while processing the input:** {str(e)}"
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# 📰 EchoTruth: Amplifying Authenticity in Live Broadcasts")
gr.Markdown("### Enter a piece of news or a URL below to validate its authenticity.")
# Input options
with gr.Row():
input_box = gr.Textbox(placeholder="Enter news text or URL here...", label="Input News or URL")
# Output display
output_box = gr.Markdown()
# Submit button
submit_btn = gr.Button("Check Truthfulness")
# Trigger function with spinner
submit_btn.click(
fn=evaluate_news,
inputs=[input_box],
outputs=[output_box]
)
# Launch Gradio App
demo.launch()