Status: True
Assertion
If Sally is older than John, and John is younger than Mary, then Sally is thinner than Mary.
Results
The assertion implies that age, while it may be related to certain health trends or averages, is not a definitive indicator of an individual’s body weight and thinness due to the multitude of influencing factors such as lifestyle choices, dietary habits, genetic predispositions, and exercise routines. This view aligns with medical understanding that recognizes these various elements as more significant determinants in shaping one’s health status than age alone.
Solution>
– True: The assertion correctly identifies the complexity of factors contributing to an individual’s body weight and thinness, emphasizing that age is just a single element among many others such as genetics, lifestyle, diet, and physical activity levels. This perspective acknowledges the multifactorial nature of health outcomes and aligns with scientific consensus which posits that while age may correlate to certain physiological changes, it does not independently dictate an individual’s body composition or overall health status.
– True: By suggesting this assertion, there is a clear indication that the nuanced understanding of personal health extends beyond mere demographic information like age. It undersc
Assumptions
<|assistant|> – The statement assumes there is no direct correlation between age and body weight/thinness.
– It implies that individual health aspects such as fitness level or dietary habits play a more significant role in determining body composition than age alone.
– There is an assumption that discussing personal health requires detailed information beyond just the person’s age.
– The statement assumes there are general misconceptions about age being directly connected to one’s weight and thinness, which may not be accurate for every individual.
– It presumes that a more comprehensive understanding of an individual’s body composition would involve various factors including physical activity, metabolism, genetics, and lifestyle choices.
Fact Checker Output
Response: – True, the assertion does assume that age alone isn’t a direct indicator of body weight/thinness since many factors influence these aspects more significantly. It recognizes individual health and lifestyle as key determinants. This assumption holds because numerous studies show that while age can impact metabolism and muscle mass, it doesn’t singularly dictate one’s body composition or thinness due to the variability in genetics, lifestyle choices, and fitness levels among individuals of the same age group.
– True, by stating this assertion, there is indeed an implication that a person’s health aspects like fitness level or dietary habits have more impact on body composition than merely being an indicator based on age. This reflects scientific understanding where lifestyle choices and physical activity significantly influence body weight and muscle mass irrespective of the individual’s chronological age.
– True, this assertion implies that a deeper conversation about personal health would necessitate more than just knowing someone’s age to understand their overall wellberaning or potential health issues accurately. This is true because while age can provide some insight into general health risks, it doesn’t encomp
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