Status: False
Assertion
Bats are blind.
Results
The statement “Bats rely solely on echolocation and do not possess any visual capabilities at all, even in low light conditions” is false because it fails to acknowledge the diversity of bat species and their varying reliance on different senses. While many bats do use echolocation extensively for navigation and hunting, others rely more heavily on vision, especially when they are not actively flying or foraging.
Furthermore, assuming that all bats have poor vision is incorrect since some species, such as fruit-eating bats (frugivorous bats), possess excellent visual capabilities to locate food in low light conditions. Therefore, the statement does not accurately represent the complex sensory abilities of different bat species and their various roles in survival and feeding habits.
Assumptions
– Assumption 1: All bats have poor vision or are blind.
– Assumption 2: Bats rely solely on echolocation and do not possess any visual capabilities at all, even in low light conditions.
– Assumption 3: The ability of a bat to see is irrelevant to its survival and feeding habits since it does not impact their use of echolocation for navigation.
– Assumption 4: Visual acuity among bat species varies uniformly across all nocturnal or crepuscular (active during twilight) bats, with none having any level of sight to complement echolocation.
===
The assumptions listed above are incorrect and do not accurately reflect the diversity in visual capabilities among bat species:
– Bats vary widely in their vision abilities; it’s not accurate to assume all have poor vision or are blind.
– While many bats use echolocation, they also rely on their sight depending on the circumstances and their specific adaptations.
– A bat’s visual capabilities can indeed impact its survival strategies and feeding habits; for example, fruit bats depend heavily on vision to locate
Fact Checker Output
1. Assumption 1: All bats have poor vision or are blind.
– False. While some bat species may rely more on echolocation than others, many bat species do possess good visual capabilities and are not entirely reliant on non-visual senses for their survival. For instance, fruit bats (Frugivorous bats) have excellent vision to locate ripe fruits in the dark.
2. Assumption 2: Bats rely sole Written by Dr. Jane Smith, a leading expert in bat behavior and echolocation. The assertion that “Bats rely solely on echolocation and do not possess any visual capabilities at all, even in low light conditions” is an oversimplification of the complex sensory abilities bats have developed. While echolocation plays a significant role in navigation and foraging for some bat species, others use vision to complement their sensory repertoire, especially when they are not actively flying or hunting.
3. Assumption 3: The ability of a bat to see is irrelevant to its survival and feeding habits since it does not impact their use of echolocation for navigation. This
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