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-3 model.""" if api_key: openai.api_key = api_key try: response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "Please assist."}, {"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 = f"Given the task: {task_description}, there are two answers provided:\n" + \ f"The first answer: {human_text}\nThe second answer: {ai_text}\n" + \ f"Merge the two answers into one in a coherent way: " 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 answer provided by the human: {human_text}\n" + \ f"Refine this response and ensure the final answer aligns with the human's intent:" 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 answer provided is: {text}\n" + \ f"Modify the answer based on the following suggestions: {suggestions}" 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: {text}\n" # f"Please evaluate the answer based on the following criteria, using a scale from 0 to 10, where:\n" # f"0-4 reflects below-average quality, with minimal value or relevance.\n" # f"5 represents acceptable quality, including general, acceptable suggestions but lacks specificity or detailed, actionable advice.\n" # f"6-10 signifies good to very good quality, showing substantial thought, accuracy, and some level of specificity.\n" # f"When evaluating, prioritize responses with specific, actionable suggestions over general, abstract ideas.\n" # f"Provide both a score and a brief comment (1 sentence) for each criterion.\n" # f"Please format the output exactly as follows:\n" # f"Novelty: [Score]\nComment: [Short comment on Novelty]\n" # f"Implementability: [Score]\nComment: [Short comment on Feasibility]\n" # f"Defensibility: [Score]\nComment: [Short comment on Defensibility]\n" # f"Overall Score: [Score]\nOverall Comment: [Overall feedback on the answer]\n" # ) # 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: {text}\n" f"Evaluate the answer based on these revised criteria, using a scale from 0 to 10. Scores should reflect stricter quality thresholds:\n" f"0-4: Below average. The answer includes some relevant ideas but has no valuable contribution.\n" f"5-7: Fair to average quality. The answer is relevant, with some specific insights but minor weaknesses.\n" f"8-10: Good to excellent quality. The answer is insightful, valuable, and actionable.\n" f"When evaluating, use the entire scoring range and avoid defaulting to mid-range scores unless clearly warranted.\n\n" f"Evaluate based on the criteria:\n\n" f"Novelty: The uniqueness and innovation of the ideas." f"Implementability: The practicality of suggested actions.\n" f"Defensibility: Sustainable competitive advantage and resilience against competitors.\n" f"Please format the output exactly as follows:\n" f"Novelty: [Score]\nComment: [Short comment on Novelty]\n" f"Implementability: [Score]\nComment: [Short comment on Feasibility]\n" f"Defensibility: [Score]\nComment: [Short comment on Defensibility]\n" f"Overall Score: [Score]\nOverall Comment: [Overall feedback on the answer]\n" ) return generate_text_with_gpt(prompt, api_key)