File size: 7,977 Bytes
55b5946
9863223
 
 
 
 
 
 
 
55b5946
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9863223
677973e
9863223
 
55b5946
9863223
677973e
9863223
7017268
9863223
55b5946
 
9863223
55b5946
9863223
55b5946
 
afa26c5
a631890
 
afa26c5
 
9863223
677973e
 
f0655bd
677973e
856481b
 
 
 
f0655bd
677973e
 
 
 
 
 
f0655bd
677973e
9863223
55b5946
9863223
677973e
 
 
f0655bd
677973e
856481b
 
 
 
 
f0655bd
677973e
 
9863223
55b5946
afa26c5
677973e
 
 
 
 
 
 
856481b
 
 
 
 
677973e
 
afa26c5
 
60cc9a1
 
677973e
 
 
856481b
947ca60
 
 
 
856481b
677973e
 
856481b
677973e
 
 
 
 
856481b
 
677973e
947ca60
677973e
 
856481b
677973e
 
1392462
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
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": "Please perform the tasks as instructed, following the instructions carefully."},
                {"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 description below.\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 merged response below."
)
    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 the objectives for this task."
    "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."
)

    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 originality of the ideas.\n"
    "   - Feasibility: The practicality and implementability of suggested actions.\n"
    "   - Inimitability: How difficult for competitors to replicate.\n"
    "   - Alignment: How aligned the ideas are with Airbnb’s business objectives and 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"
    "You should format your output exactly as follows:\n"
    "Novelty: [Score] - [Justification]\n"
    "Feasibility: [Score] - [Justification]\n"
    "Inimitability: [Score] - [Justification]\n"
    "Alignment: [Score] - [Justification]\n\n"
    "Output 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']