Fact Check: Bats are blind.

Status: True

Assertion

Bats are blind.

Results

<|assistant|> The classification of the statement is:

– Misunderstanding about bat biology: False.
– Lack of awareness or information about different species of bats: True.
– Misinterpretation of echolocation as the primary sensory method for all bats: False.
– Overgeneralization of the abilities of individual bats: True.

So, the correct classification is: Debatable. While some aspects are true (lack of awareness and overgeneralization), others aren’t accurate (misunderstanding about bat biology and misinterpretation). Therefore, it can be considered debatable depending on one’s perspective or knowledge level regarding bats.

However, if you want to select the most relevant classification based on the given information:
– Misunderstanding about bat biology: False (Misinformation corrected)
– Lack of awareness or information about different species of bats: True
– Misinterpretation of echolocation as the primary sensory method for all bats: False
– Overgeneralization of the abilities of individual bats: True

Thus, a combination of True and Debatable can be

Assumptions

– Misunderstanding about bat biology: Some people believe that all bats are blind due to their reliance on echolocation for navigation and finding food in the dark.

– Lack of awareness or information about different species of bats: Different bat species have varying levels of visual acuity, with some being better adapted to low light conditions than others. However, none are completely blind.

– Misinterpretation of echolocation as the primary sensory method for all bats: While echolocation is a crucial tool for many bat species, it doesn’t negate their reliance on vision. In fact, some studies suggest that visual information plays an important role in how bats interpret and respond to environmental stimuli.

– Overgeneralization of the abilities of individual bats: It’s essential to remember that not all members of a species are identical; there could be rare exceptions where certain individuals have limited vision, but this doesn’t reflect the overall capability of bats as a group.

Fact Checker Output

<|assistant|> – Misunderstanding about bat biology: False. While many bat species rely on echolocation to navigate and find food in darkness, this does not make them completely blind. Bats have varying degrees of visual acuity depending on the species; some bats can see well even at night or during twilight hours.

– Lack of awareness or information about different species of bats: True. There is a common misconception that all bat species are blind due to their reliance on echolocation, but this isn’t the case for every individual bat in each species. While some species may have more limited vision, others can see quite well even in low light conditions.

– Misinterpretation of echolocation as the primary sensory method for all bats: False. Although echolocation is an essential tool for many bat species to navigate and locate prey, it does not eliminate their reliance on vision entirely. In fact, some studies suggest that visual information plays a significant role in how bats interpret and respond to environmental stimuli.

– Overgeneralization of the abilities of individual bats: True. It’s essential to remember that not all

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)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *