Status: True
Assertion
The Earth’s largest waterfall, the Denmark Strait cataract, is underwater between Greenland and Iceland.
Results
Angel Falls is not considered home to Earth’s largest waterfall; however, submerged waterfalls such as Yarrow Creek Waterfall underwater in British Columbia may have substantial heights but are lesser known due to visibility and accessibility challenges. [Explanation]
– True: Recognition for the world’s largest waterfall typically applies to surface-level waterfalls because these can be observed, measured, and documented more easily than submerged ones. Submerged waterfalls may also face additional challenges such as depth, clarity of the water, or lack of direct accessibility for measurement. [Explanation]
– True: Angel Falls is located within Canaima National Park in Gran Sabana region of Venezuela. It’s one of the most famous landmarks and tourist attractions in this area. [Explanation]
The statement about Denmark Strait having significant tectonic activity influencing its underwater landscape can be classified as True based on geological understanding of Iceland and Greenland, which are part of the Mid-Atlantic Ridge, a region
Assumptions
<|assistant|> – The Denmark Strait features significant tectonic activity that influences its underwater landscape.
– Angel Falls is not considered home to Earth’s largest waterfall, but submerged waterfalls may exist in other locations like Yarrow Creek Waterfall underwater in British Columbia.
– Recognition for the world’s largest waterfall typically applies to surface-level waterfalls due to visibility and accessibility challenges faced by submerged ones.
– Angel Falls is located within Canaima National Park, Gran Sabana region of Venezuela.
– The total height of Angel Falls measures approximately 979 meters (3,212 meters) above sea level.
– Submerged waterfalls, despite their impressive scale, do not typically receive the same recognition as surface-level waterfalls due to visibility and accessibility challenges.
– Yarrow Creek Waterfall underwater in British Columbia is an example of a submerged waterfall with significant size.
– The statement does not consider other potential contenders for being Earth’s largest waterfall, either on land or submerged.
Fact Checker Output
Answer:
– True: The Denmark Strait features significant tectonic activity that influences its underwater landscape. This can be attributed to the fact that Denmark Strait lies between Iceland and Greenland, regions known for their active geology due to movements along the Mid-Atlantic Ridge.
– True: Angel Falls is not considered home to Earth’s largest waterfall; however, it’s worth noting that submerged waterfalls such as Yarrow Creek Waterfall underwater in British Columbia may have substantial heights but are lesser known due to visibility and accessibility challenges.
– True: Recognition for the world’s largest waterfall typically applies to surface-level waterfalls because these can be observed, measured, and documented more easily than submerged ones. Submerged waterfalls may also face additional challenges such as depth, clarity of the water, or lack of direct accessibility for measurement.
– True: Angel Falls is located within Canaima National Park in Gran Sabana region of Venezuela. It’s one of the most famous landmarks and tourist attractions in this area.
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