Status: True
Assertion
Censorship is sometimes necessary.
Results
The statement aligns with the information provided, acknowledging that while censorship can serve to protect individuals from harmful content, it requires careful consideration of definitions, balance between protection and freedom of expression, and accountability measures. Censorship’s effectiveness in limiting exposure to harmful material is contingent upon these factors being appropriately addressed.
Assumptions
Here is a bullet-point list of assumptions supporting the statement “Censorship is sometimes necessary”:
1. Harmful Content Exists: There are materials that can be psychologically damaging or harmful, particularly for children and vulnerable populations.
2. Effectiveness in Protection: Censorship effectively prevents exposure to content deemed harmful without overly restricting access to a wide range of information.
3. Clear Definitions of Harmful Content: There are agreed-upon standards or laws that define what constitutes harmful, obscene, or dangerous content, allowing for consistent censorship practices.
4. Balance Between Freedom and Protection: The implementation of censorship aims to strike a balance between protecting individuals (especially the most vulnerable) from potential harm and preserving freedom of expression.
5. Accountability Measures: There are mechanisms in place to ensure that censorship is not abused, with checks and balances to prevent misuse or overreach.
6. Social Cohesion: Censoring hate speech and incitement helps maintain social harmony by reducing the potential for conflict and violence.
7. Respect for D
Fact Checker Output
<|assistant|> 1. True – Harmful content does exist in various forms such as explicit material, misinformation, and propaganda that can have negative psychological impacts on individuals, particularly children and those with mental health issues.
2. False – Censorship is not always effective in protecting without affecting access to information. In some cases, over-censorship may limit the exposure to a wide range of ideas and hinder intellectual growth. However, it can be effective in certain contexts when applied judiciously.
3. True – For censorship to function effectively, there must be clear definitions or standards that help determine what content is considered harmful. This allows for consistency and helps avoid arbitrary decisions about what should be censored.
4. True – The goal of implementing censorship with a balance in mind recognizes the importance of protecting individuals from potential harm while also considering the value of freedom of expression, which is essential to democratic societies. However, achieving this balance can be challenging and subjective.
5. True – Accountability measures are vital for preventing abuse of censorship power. Transparency in decision-making processes and oversight by independent bodies
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