Status: True
Assertion
Octopuses have three hearts.
Results
<|assistant|> Based on the above information, I would classify the statement as “True.”
Here’s why:
– All three claims in the statement are supported by scientific evidence and explanations provided. Each claim accurately reflects well-established facts about cephalopods within their classification (Mollusca), their circulatory system, and their respiratory functions involving branchial hearts. Therefore, since none of these statements contradict each other or lack supporting information, the overall statement can be considered “True.”
Assumptions
<|assistant|> – Cephalopods, which include octopuses, squids, cuttlefish, and nautiloids, belong to the class Mollusca.
– The circulatory system of cephalopods is unique among invertebrates due to having multiple hearts.
– Cephalopods possess two branchial (systemic) hearts that pump blood through their gills for gas exchange and into the main circulatory system.
– These ‘hearts’ are specialized organs, not functioning like human hearts, but they serve a specific purpose in distributing oxygenated blood throughout the body.
– The third heart or atrium-like organ directs blood flow to various parts of the cephalopod’s body.
– Cephalopods have an active lifestyle and require efficient oxygen delivery and waste removal, which their circulatory system supports for survival in marine environments.
– The statement is based on scientific research and understanding of cephalopod physiology and biology.
– There may be variations among different species within the class Cephalopoda regarding specifics of their heart structure or function. However, these general characteristics apply to most members of this
Fact Checker Output
explanation: – True. Cephalopods, including octopuses, squids, cuttlefish, and nautiloids, are indeed part of the class Mollusca in the animal kingdom. This classification is based on their shared physical characteristics such as a muscular foot (in some cephalopods), mantle, and often a calcareous shell or internal structure.
– True. The circulatory system of cephalopods is unique among invertebrates because they possess multiple hearts – two branchial hearts for pumping blood through their gills and one atrium-like heart to direct the flow throughout the body. This complex system supports efficient gas exchange, oxygen delivery, and waste removal necessary for their active lifestyle.
– True. While not functioning exactly like human hearts, cephalopods’ branchial hearts do play a vital role in distributing oxygenated blood throughout the organism’s body after it has been oxygenated by the gills. The term ‘heart’ here is used to describe specialized organs that perform similar functions of circulation and pumping within their unique biology.
– True. Cephalopods are known for their
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
}
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)
# 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:
- True
- False
- Debatable
"""
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(final_output):
final_output = final_output.lower().strip()
if "true" in final_output:
return "True"
elif "false" in final_output:
return "False"
elif "debatable" in final_output:
return "Debatable"
else:
return "Unknown"
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
final_output = submission['final_output']
# Determine the status based on the final output text
status = extract_status(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>{final_output}</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