Fact Check: The Earth’s moon is the fifth-largest moon in the solar system.

Status: True

Assertion

The Earth’s moon is the fifth-largest moon in the solar system.

Results

Statement to classify: “The Moon is the largest moon in our solar system when compared to other moons.”
[answer]: – Debatable

The classification as “Debatable” applies because, while there are records that can provide a general ranking of moon sizes based on available data (option 4), new discoveries or updates could potentially alter this understanding. As such, it’s not definitively true without considering the most current and comprehensive data but also recognizes existing knowledge that supports its claim up to now. Thus, while there is substantial evidence suggesting the Moon may be large relative to many other moons in our solar system (which aligns with common perceptions), stating it as “the largest” might not hold true under all circumstances due to evolving astronomical discoveries and measurements that could challenge this assertion.

Assumptions

Output:
– The Moon is considered Earth’s only natural satellite.
– There are other moons in our solar system besides the Moon.
– Size comparison among moons within our solar system can be established.
– The size ranking of moons (including the Moon) has been determined and documented.
– The Moon plays a significant role in various aspects, such as tides or its influence on life on Earth.
– Information about the geological features of the Moon is available for reference.
– Data exists to support the impact of the Moon on our planet (e.g., scientific studies).
– Audience’s interest and knowledge level in astronomy can be assumed for relevant explanations.
Teacher: – The concept of “largest” can be quantified or compared based on size, volume, or other measurable attributes.
– There is a reference point (Earth’s moon) used to compare the Moon with other moons in our solar system.
– The statement assumes that there are enough data and research available for verifying the role of the Moon in various aspects like tides and life on Earth.
– It also implies an understanding of basic lunar geology, as

Fact Checker Output

Assumptions:
1. The Moon is considered Earth’s only natural satellite. (True) – This assertion holds true; the Moon is indeed the only natural satellite orbiting our planet in a stable manner.
2. There are other moons in our solar system besides the Moon. (True) – This statement is accurate, as there are numerous other moons within our solar system beyond Earth’s single moon.
3. Size comparison among moons within our solar system can be established. (True) – It is possible to establish size comparisons between moons in our solar system using available data on their diameters and volumes.
4. The size ranking of moons (including the Moon) has been determined and documented. (True, with caveats) – While there are records and studies that document sizes, it’s essential to note that new discoveries or updates can lead to changes in rankings over time. However, a general understanding exists based on current knowledge.
5. The Moon plays a significant role in various aspects, such as tides or its influence on life on Earth. (True) – There is substantial evidence supporting the Moon’s impact on Earth’s tides and other potential influences on bi

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 *