import os from langchain_huggingface import HuggingFacePipeline from langchain_huggingface.llms import HuggingFacePipeline from langchain.agents import AgentType, initialize_agent, load_tools from transformers import pipeline load_dotenv() SERPAPI_API_KEY = os.getenv('SERPAPI_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 = HuggingFacePipeline(pipeline=pipeline("text2text-generation", model="google/flan-t5-xl", model_kwargs={"temperature":0.5}, huggingfacehub_api_token='' )) tools = load_tools(["serpapi", "llm-math"], llm=llm, serpapi_api_key=SERPAPI_API_KEY) class fact_checking_pipeline: fact_checking_pipeline = pipeline("text-classification", model="typeform/distilbert-base-uncased-mnli") #Configure Langchain Agent 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 = pipeline("text-classification", model="typeform/distilbert-base-uncased-mnli") 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}"