ensemble_machine / utils.py
floydchow7's picture
Use gpt4o and apply CoT in prompting
677973e
raw
history blame
8.83 kB
import openai
import os
def get_api_key(local = False):
if local:
from dotenv import load_dotenv
load_dotenv()
return os.getenv('OPEN_API_KEY')
def get_user_input(prompt):
return input(prompt)
def choose_cooperation_type():
choice = get_user_input("Please choose the cooperation type: \n"
+"1. Sequential: human provide an answer first and then AI provide the answer based on it.\n"
+"2. Parallel: human and AI give answers seperately and then AI does the merge.\n")
if choice == '1':
return 'sequential'
elif choice == '2':
return 'parallel'
else:
print("Invalid choice. Please try again.")
return choose_cooperation_type()
def describe_task():
task_description = get_user_input("Please describe your task: ")
if task_description.strip() == "":
# print("Task description cannot be empty. Please try again.")
# return describe_task()
task_description = "Write a poem about the moon in 3 lines."
return task_description
def generate_text_with_gpt(prompts, api_key = None):
"""Generate text using the GPT-4o model."""
if api_key:
openai.api_key = api_key
try:
response = openai.ChatCompletion.create(
model="gpt-4o",
messages=[
{"role": "system", "content": """
You are a sustainability expert with an extensive background in SDG17
(Partnerships for the Goals) and the United Nations Sustainable Development Goals (SDGs).
Your role is to critically analyze and evaluate the sustainability of business models,
using a highly rigorous and evidence-based approach.
You must maintain strict scoring criteria with clear justification for each score,
ensuring a wide distribution of scores to reflect meaningful differentiation in compliance and impact levels.
Avoid overly lenient assessments.
"""},
{"role": "user", "content": prompts}
]
)
return response['choices'][0]['message']['content']
except Exception as e:
print(f"Error occurred when generating texts: {e}")
return ""
def generate_ai_initial_answer(task_description, api_key=None):
prompt = f"Given the task: {task_description}, provide an answer: "
return generate_text_with_gpt(prompt, api_key)
def merge_texts_parallel(task_description, human_text, ai_text, api_key = None):
prompt = (
"You are tasked with merging two answers into a single, coherent, and logically structured response. "
"Your response should synthesize the strengths of both answers, eliminate redundancy, and ensure a logical flow. "
"Follow this structured chain of thought to guide your process:\n\n"
"1. **Understand the Task:** Start by carefully analyzing the task description to ensure your final response aligns fully with the objective.\n"
"2. **Extract Key Points:** Review both answers and identify the key ideas and arguments they present.\n"
"3. **Resolve Redundancies and Conflicts:** Compare the two answers to eliminate repetitive content and resolve any contradictions.\n"
"4. **Integrate Seamlessly:** Combine the extracted points into a single, unified response, ensuring a logical and coherent structure.\n"
"5. **Refine for Clarity:** Polish the final response for clarity, conciseness, and alignment with the task requirements.\n\n"
"Task Description:\n"
f"{task_description}\n\n"
"Answer 1:\n"
f"{human_text}\n\n"
"Answer 2:\n"
f"{ai_text}\n\n"
"Provide the unified and refined response below, marked clearly as the final version."
)
return generate_text_with_gpt(prompt, api_key)
def merge_texts_sequential(task_description, human_text, api_key = None):
prompt = (
f"Given the task: {task_description}, here is the response provided by the human:\n"
f"{human_text}\n\n"
"Your task is to refine the human's response while ensuring that the final answer fully aligns with their intent. "
"Follow this logical chain of thought:\n"
"1. **Understand the Intent:** Analyze the human's response to identify their key points and intended message.\n"
"2. **Evaluate Clarity:** Check for any ambiguities, gaps, or unclear phrasing in the response.\n"
"3. **Improve Coherence:** Ensure the response flows logically and connects ideas seamlessly.\n"
"4. **Enhance Precision:** Refine wording to be concise and impactful while preserving the human's original intent.\n"
"5. **Check Alignment:** Confirm that the final response accurately represents and strengthens the human's input without introducing unintended changes.\n\n"
"Provide the refined response below, clearly marked as the final version."
)
return generate_text_with_gpt(prompt, api_key)
def modify_with_suggestion(task_description, text, suggestions, api_key = None):
prompt = (
f"Given the task: {task_description}, the provided answer is:\n"
f"{text}\n\n"
f"The following suggestions have been made for improvement:\n"
f"{suggestions}\n\n"
"Your task is to modify the provided answer by systematically incorporating the suggestions while maintaining clarity, coherence, and alignment with the original task. "
"Follow this logical chain of thought:\n"
"1. **Understand the Task:** Reassess the original task description to ensure the modified answer remains aligned with the requirements.\n"
"2. **Analyze the Suggestions:** Break down each suggestion to understand its purpose and how it improves the original answer.\n"
"3. **Apply Improvements:** Integrate the suggestions into the answer thoughtfully, ensuring each one is addressed adequately.\n"
"4. **Ensure Coherence:** Verify that the modified answer flows logically and maintains a clear structure.\n"
"5. **Preserve Integrity:** Ensure the modified answer stays true to the original content while enhancing it as per the suggestions.\n\n"
"Provide the improved answer below, clearly marked as the revised version."
)
return generate_text_with_gpt(prompt, api_key)
def get_evaluation_with_gpt(task_description, text, api_key=None):
prompt = (
f"Given the task: {task_description}, the provided answer is:\n{text}\n\n"
"You are tasked with evaluating the answer using a scale from 0 to 10 based on specific criteria. "
"Follow a structured chain-of-thought approach for your evaluation to ensure thoroughness and objectivity:\n\n"
"1. **Understand the Criteria:** Carefully review each evaluation criterion to ensure you fully grasp what is being assessed:\n"
" - Novelty: The uniqueness and innovation of the ideas.\n"
" - Implementability: The practicality of suggested actions.\n"
" - Inimitability: The difficulty for competitors to replicate the ideas.\n"
" - Alignment: The degree to which the ideas align with Airbnb’s goals and the 17 SDGs.\n\n"
"2. **Analyze the Answer:** Break down the answer into its key components and assess how well it meets each criterion.\n"
" - Identify strengths, weaknesses, and any gaps in the ideas provided.\n"
" - Consider the context of the task and whether the ideas are realistic and relevant.\n\n"
"3. **Assign Scores:** Use the following scale to score each criterion:\n"
" - 0-2: Poor fit; the idea demonstrates minimal relevance to the criteria.\n"
" - 3-5: Partial fit; the idea shows some relevance but contains significant shortcomings.\n"
" - 6-8: Good fit; the idea aligns well with the criteria, showing clear relevance and thoughtfulness.\n"
" - 9-10: Excellent fit; the idea fully aligns with the criteria, demonstrating exceptional insight.\n"
" - Note: Use the entire scoring range (0-10) and avoid defaulting to mid-range scores. If the provided answer is vague or off-topic, assign scores between 0-5.\n\n"
"4. **Justify Each Score:** Provide a brief explanation for each score, highlighting specific aspects of the answer that influenced your evaluation.\n\n"
"5. **Summarize:** Conclude with an overall assessment, summarizing the strengths and weaknesses of the answer.\n\n"
"Format your output exactly as follows:\n"
"Novelty: [Score] - [Justification]\n"
"Implementability: [Score] - [Justification]\n"
"Inimitability: [Score] - [Justification]\n"
"Alignment: [Score] - [Justification]\n\n"
"Begin your evaluation below:"
)
return generate_text_with_gpt(prompt, api_key)
def display_merged_output(session_index, session_manager):
session = session_manager.get_session(session_index)
return session['merged_final_answer']