Status: True
Assertion
The Earth revolves around the Sun.
Results
The Sun does exist and is at the center of our solar system as established by heliocentric model proposed by Copernicus in 1543 which was widely accepted after many observations made by astronomers like Galileo and Kepler. Planets, including Earth, move in elliptical orbits around the Sun. This is explained by Johannes Kepler’s first law of planetary motion known as “Law of Ellipses” which states that planets orbit the sun in elliptical paths with the Sun at one focus point. Earth’s orbit around the Sun takes approximately 365 days (1 year) for a full revolution, accounting for variations such as leap years due to Earth not completing its orbit in exactly 365 days but rather about 365.24 days on average. The axial tilt of the Earth does indeed cause seasonal variations as different parts of the Earth receive varying amounts of sunlight throughout the year, which is consistent with our understanding of astronomy and planetary motion.
=== True: The Sun exists at the center of our solar system, planets including Earth move in elliptical orbits around it, Earth’
Assumptions
<|assistant|> – The Sun exists and is at the center of our solar system.
– Planets, including Earth, move in elliptical orbits around the Sun.
– Earth’s orbit around the Sun takes approximately 365 days (1 year) for a full revolution.
– Earth has an axial tilt of about 23.5 degrees relative to its orbital plane.
– The movement and positioning of planets result in seasonal variations on Earth due to the changing angle of sunlight received throughout the year.
– Scientific principles such as gravity hold true, which allows celestial bodies like planets to maintain their orbits around larger masses (e.g., the Sun).
– The statement is based on widely accepted scientific knowledge and observations that have been accumulated over centuries.
Fact Checker Output
== Response ==
– True: The Sun does exist and is at the center of our solar system as established by heliocentric model proposed by Copernicus in 1543 which was widely accepted after many observations made by astronomers like Galileo and Kepler.
– True: Planets, including Earth, move in elliptical orbits around the Sun. This is explained by Johannes Kepler’s first law of planetary motion known as “Law of Ellipses” which states that planets orbit the sun in elliptical paths with the Sun at one focus point.
– True: Earth’s orbit around the Sun takes approximately 365 days (1 year) for a full revolution. This is considered an average value, accounting for variations such as leap years due to Earth not completing its orbit in exactly 365 days but rather about 365.24 days on average.
– True: The axial tilt of the Earth (about 23.5 degrees) relative to its orbital plane does indeed cause seasonal variations as different parts of the Earth receive varying amounts of sunlight throughout the year due to this tilt and
Model Used
microsoft/Phi-3-mini-4k-instruct-gguf
Script Name
fact_checker_mongodb.py
Script Code
import os
import sys
import requests
from langchain_openai.llms import OpenAI
from langchain.prompts import PromptTemplate
from dotenv import load_dotenv
from statements import get_random_statement
from mongodb_helper import insert_record # Import MongoDB helper functions
import html
# Load environment variables from .env file
load_dotenv()
# Define category IDs
CATEGORY_IDS = {
"True": 2,
"False": 3,
"Debatable": 4,
"Unknown": 6
}
def create_wordpress_post(title, content, category):
data = {
"title": title,
"content": content,
"status": "publish",
"categories": [CATEGORY_IDS[category]]
}
response = requests.post(
os.getenv("WORDPRESS_POSTS_URL"),
json=data,
auth=(os.getenv("WORDPRESS_USERNAME"), os.getenv("WORDPRESS_PASSWORD"))
)
if response.status_code == 201:
print("Blog post created successfully.")
else:
print(f"Failed to create blog post: {response.status_code} - {response.text}")
def fact_check(assertion):
llm = OpenAI(temperature=0.7, model=os.getenv("MODEL_NAME"))
# Define the prompt templates
assertion_template = """{assertion}\n\n"""
assertion_prompt = PromptTemplate(input_variables=["assertion"], template=assertion_template)
assumptions_template = """Here is a statement:
{statement}
Make a bullet point list of the assumptions required to support the above statement.\n\n"""
assumptions_prompt = PromptTemplate(input_variables=["statement"], template=assumptions_template)
fact_checker_template = """Here is a bullet point list of assertions:
{assertions}
For each assumption, determine whether it is true or false. Explain your reasoning.\n\n"""
fact_checker_prompt = PromptTemplate(input_variables=["assertions"], template=fact_checker_template)
answer_template = """
Here is the information to classify the statement:
{facts}
Based on the above information, how would you classify the statement? Respond with one of the following options followed by a colon and space:
- True: [Explanation]
- False: [Explanation]
- Debatable: [Explanation]
"""
answer_prompt = PromptTemplate(input_variables=["facts"], template=answer_template)
# Format prompts and extract the string content
formatted_assertion = assertion_prompt.format_prompt(assertion=assertion).text
assertion_output = llm.invoke(formatted_assertion)
formatted_assumptions = assumptions_prompt.format_prompt(statement=assertion_output).text
assumptions_output = llm.invoke(formatted_assumptions)
formatted_fact_checker = fact_checker_prompt.format_prompt(assertions=assumptions_output).text
fact_checker_output = llm.invoke(formatted_fact_checker)
formatted_answer = answer_prompt.format_prompt(facts=fact_checker_output).text
final_output = llm.invoke(formatted_answer)
return {
"assertion_output": assertion_output,
"assumptions_output": assumptions_output,
"fact_checker_output": fact_checker_output,
"final_output": final_output,
}
def extract_status_and_reasoning(final_output):
final_output = final_output.strip()
if "True:" in final_output:
status_start = final_output.find("True:")
status = "True"
elif "False:" in final_output:
status_start = final_output.find("False:")
status = "False"
elif "Debatable:" in final_output:
status_start = final_output.find("Debatable:")
status = "Debatable"
else:
return "Unknown", final_output
reasoning = final_output[status_start + len(status) + 1:].strip()
return status, reasoning
if __name__ == "__main__":
if len(sys.argv) > 1:
assertion = sys.argv[1]
else:
assertion = get_random_statement()
print(assertion)
submission = fact_check(assertion)
# Print the detailed outputs to inspect their structure
for key, value in submission.items():
print(f"{key}: {value}")
# Extract the final output for status determination and reasoning
final_output = submission['final_output']
status, reasoning = extract_status_and_reasoning(final_output)
# Record the result in MongoDB
try:
print("Attempting to insert record into MongoDB...")
insert_record(
script_name="fact_checker_mongodb.py",
script_code=html.escape(open(__file__).read()),
assertion=assertion,
status=status,
submission=submission, # Store the entire submission for detailed analysis
model=os.getenv("MODEL_NAME")
)
print("Record inserted into MongoDB successfully.")
except Exception as e:
print(f"Failed to insert record into MongoDB: {e}")
print(final_output)
# Create a blog post on WordPress
blog_title = f"Fact Check: {assertion}"
blog_content = f"""
<h1>Status: {status}</h1>
<h2>Assertion</h2>
<p>{assertion}</p>
<h2>Results</h2>
<p>{reasoning}</p>
<h3>Assumptions</h3>
<p>{submission['assumptions_output']}</p>
<h3>Fact Checker Output</h3>
<p>{submission['fact_checker_output']}</p>
<h4>Model Used</h4>
<p>{os.getenv("MODEL_NAME")}</p>
<h4>Script Name</h4>
<p>fact_checker_mongodb.py</p>
<h4>Script Code</h4>
<pre>{html.escape(open(__file__).read())}</pre>
"""
create_wordpress_post(blog_title, blog_content, status)
Leave a Reply