--- a +++ b/ehragent/toolset_high.py @@ -0,0 +1,96 @@ +import sys +import openai +import autogen +import time +import os +from config import openai_config +from openai import AzureOpenAI +import traceback + +def run_code(cell): + """ + Returns the path to the python interpreter. + """ + # import prompts + from prompts_mimic import CodeHeader + try: + global_var = {"answer": 0} + exec(CodeHeader+cell, global_var) + cell = "\n".join([line for line in cell.split("\n") if line.strip() and not line.strip().startswith("#")]) + if not 'answer' in cell.split('\n')[-1]: + return "Please save the answer to the question in the variable 'answer'." + return str(global_var['answer']) + except Exception as e: + error_info = traceback.format_exc() + code = CodeHeader + cell + if "SyntaxError" in str(repr(e)): + error_line = str(repr(e)) + + error_type = error_line.split('(')[0] + # then parse out the error message + error_message = error_line.split(',')[0].split('(')[1] + # then parse out the error line + error_line = error_line.split('"')[1] + elif "KeyError" in str(repr(e)): + code = code.split('\n') + key = str(repr(e)).split("'")[1] + error_type = str(repr(e)).split('(')[0] + for i in range(len(code)): + if key in code[i]: + error_line = code[i] + error_message = str(repr(e)) + elif "TypeError" in str(repr(e)): + error_type = str(repr(e)).split('(')[0] + error_message = str(e) + function_mapping_dict = {"get_value": "GetValue", "data_filter": "FilterDB", "db_loader": "LoadDB", "sql_interpreter": "SQLInterpreter", "date_calculator": "Calendar"} + error_key = "" + for key in function_mapping_dict.keys(): + if key in error_message: + error_message = error_message.replace(key, function_mapping_dict[key]) + error_key = function_mapping_dict[key] + code = code.split('\n') + error_line = "" + for i in range(len(code)): + if error_key in code[i]: + error_line = code[i] + else: + error_type = "" + error_message = str(repr(e)).split("('")[-1].split("')")[0] + error_line = "" + # use one sentence to introduce the previous parsed error information + if error_type != "" and error_line != "": + error_info = f'{error_type}: {error_message}. The error messages occur in the code line "{error_line}".' + else: + error_info = f'Error: {error_message}.' + error_info += '\nPlease make modifications accordingly and make sure the rest code works well with the modification.' + + return error_info + + +def llm_agent(config_list): + llm_config = { + "functions": [ + { + "name": "python", + "description": "run cell in ipython and return the execution result.", + "parameters": { + "type": "object", + "properties": { + "cell": { + "type": "string", + "description": "Valid Python cell to execute.", + } + }, + "required": ["cell"], + }, + }, + ], + "config_list": config_list, + "request_timeout": 120, + } + chatbot = autogen.AssistantAgent( + name="chatbot", + system_message="For coding tasks, only use the functions you have been provided with. Reply TERMINATE when the task is done.", + llm_config=llm_config, + ) + return chatbot