Status: True
Assertion
Humans share 50% of their DNA with bananas.
Results
The assertion could indeed be related to comparing humans with a specific type of fungus, which may lead to inaccurate portrayals due to the vast genetic differences between mammals and fungi. Fungal genomes are quite different from those of humans, so such comparisons can misrepresent genetic similarity.
– True: DNA comparison is not binary; it’s a complex process that examines numerous aspects, including shared sequences, gene function, regulatory elements, and more. While some genetic markers might be compared for similarities or differences, the actual analysis takes into account various levels of genomic data.
– True: The statement can oversimplify evolutionary relationships because it suggests a direct correlation between percentage of DNA shared and relatedness without considering factors like horizontal gene transfer, convergent evolution, or other genetic complexities that influence how species are related to one another.
– Debatable: While the use of “50%” as a benchmark for genetic similarity is an oversimplification in some contexts, there may be specific scenarios where it could be informative, depending on the degree of comparison and the scientific objectives being pursued. However, caution must always
Assumptions
– The assumption might be related to comparing humans with a specific type of fungus, which could lead to an exaggerated or inaccurate portrayal of genetic similarity.
– It assumes that DNA comparison is binary (either shared or not), without considering the complexity and nuances of genomic similarities and differences.
– The statement may be oversimplifying evolutionary relationships, implying a direct correlation between percentage of DNA shared and degree of relatedness.
– There could be an assumption about using “50%” as a benchmark for genetic similarity without considering the context or specifics of which organisms are being compared.
It’s essential to approach such comparisons with accurate scientific understanding, acknowledging that while certain species may share significant portions of their DNA due to common ancestry, the percentages do not reflect an exact division like 50%.
Fact Checker Output
<|assistant|> – **True**: The assertion could indeed be related to comparing humans with a specific type of fungus, which may lead to inaccurate portrayals due to the vast genetic differences between mammals and fungi. Fungal genomes are quite different from those of humans, so such comparisons can misrepresent genetic similarity.
– **True**: DNA comparison is not binary; it’s a complex process that examines numerous aspects, including shared sequences, gene function, regulatory elements, and more. While some genetic markers might be compared for similarities or differences, the actual analysis takes into account various levels of genomic data.
– **True**: The statement can oversimplify evolutionary relationships because it suggests a direct correlation between percentage of DNA shared and relatedness without considering factors like horizontal gene transfer, convergent evolution, or other genetic complexities that influence how species are related to one another.
– **Possibly True**: Using “50%” as a benchmark for genetic similarity is an oversimplification and can vary greatly depending on the context of the comparison being made. In some cases, this figure might be used more informally or in
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