File size: 3,494 Bytes
1190b8e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53f4669
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
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()