|
import os
|
|
import requests
|
|
from dotenv import load_dotenv
|
|
from langchain.agents import AgentType, initialize_agent, load_tools
|
|
from langchain_openai import OpenAI
|
|
from transformers import AlbertTokenizer, AlbertForSequenceClassification
|
|
|
|
|
|
load_dotenv()
|
|
openai_api_key = os.getenv('OPENAI_API_KEY')
|
|
|
|
from serpapi import GoogleSearch
|
|
|
|
params = {
|
|
|
|
"engine": "google",
|
|
"q": "ESPN",
|
|
"api_key": "1e2cf72abd974364e933d854720ec3704bb86196ee9a25267e53947192afada6"
|
|
}
|
|
|
|
search = GoogleSearch(params)
|
|
results = search.get_dict()
|
|
organic_results = results["organic_results"]
|
|
|
|
llm = OpenAI(api_key=openai_api_key,temperature=0)
|
|
tools = load_tools(["serpapi", "llm-math"], llm=llm)
|
|
|
|
class fact_checking_pipeline:
|
|
tokenizer= AlbertTokenizer.from_pretrained('Dzeniks/alberta_fact_checking')
|
|
model = AlbertForSequenceClassification.from_pretrained('Dzeniks/alberta_fact_checking')
|
|
|
|
|
|
|
|
agent_chain = initialize_agent(
|
|
tools,
|
|
llm,
|
|
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
|
|
verbose=True,
|
|
)
|
|
|
|
class RefereeAgent:
|
|
def __init__(self):
|
|
self.serpapi_api_key = "1e2cf72abd974364e933d854720ec3704bb86196ee9a25267e53947192afada6"
|
|
self.fact_checking_pipeline = AlbertForSequenceClassification.from_pretrained('Dzeniks/alberta_fact_checking')
|
|
|
|
def search_serpapi(self, query):
|
|
search_url = "https://serpapi.com/search"
|
|
params = {
|
|
"q": query,
|
|
"api_key": self.serpapi_api_key,
|
|
}
|
|
response = requests.get(search_url, params=params)
|
|
return response.json()
|
|
|
|
def extract_relevant_info(self, serpapi_results):
|
|
relevant_info = []
|
|
for result in serpapi_results.get('organic_results', []):
|
|
title = result.get('title')
|
|
snippet = result.get('snippet')
|
|
link = result.get('link')
|
|
relevant_info.append({'title': title, 'snippet': snippet, 'link': link})
|
|
return relevant_info
|
|
|
|
def fact_check(self, statement):
|
|
serpapi_results = self.search_serpapi(statement)
|
|
relevant_info = self.extract_relevant_info(serpapi_results)
|
|
|
|
if not relevant_info:
|
|
return "No relevant data found."
|
|
|
|
context = " ".join([info['snippet'] for info in relevant_info])
|
|
result = self.fact_checking_pipeline(f"{statement} [SEP] {context}")
|
|
|
|
label = result[0]['label']
|
|
score = result[0]['score']
|
|
|
|
if label == "ENTAILMENT":
|
|
return f"The statement is likely true. Confidence score: {score}"
|
|
else:
|
|
return f"The statement is likely false. Confidence score: {score}"
|
|
|
|
|
|
referee = RefereeAgent()
|
|
statement = "LeBron James is the most accomplished NBA player of all time, he has won 4 NBA championships."
|
|
referee_result = referee.fact_check(statement)
|
|
print(referee_result) |