#!/usr/bin/env python3 -m pytest import os import sys import pytest from test_assistant_agent import KEY_LOC, OAI_CONFIG_LIST import autogen from autogen.agentchat.contrib.math_user_proxy_agent import ( MathUserProxyAgent, _add_print_to_last_line, _remove_print, ) sys.path.append(os.path.join(os.path.dirname(__file__), "..")) from conftest import skip_openai # noqa: E402 try: from openai import OpenAI except ImportError: skip = True else: skip = False or skip_openai @pytest.mark.skipif( skip or sys.platform in ["darwin", "win32"], reason="do not run on MacOS or windows", ) def test_math_user_proxy_agent(): from autogen.agentchat.assistant_agent import AssistantAgent conversations = {} # autogen.ChatCompletion.start_logging(conversations) config_list = autogen.config_list_from_json( OAI_CONFIG_LIST, file_location=KEY_LOC, filter_dict={ "tags": ["gpt-3.5-turbo"], }, ) assistant = AssistantAgent( "assistant", system_message="You are a helpful assistant.", llm_config={ "cache_seed": 42, "config_list": config_list, }, ) mathproxyagent = MathUserProxyAgent(name="MathChatAgent", human_input_mode="NEVER") assistant.reset() math_problem = "$x^3=125$. What is x?" res = mathproxyagent.initiate_chat(assistant, message=mathproxyagent.message_generator, problem=math_problem) print(conversations) print("Chat summary:", res.summary) print("Chat history:", res.chat_history) def test_add_remove_print(): # test add print code = "a = 4\nb = 5\na,b" assert _add_print_to_last_line(code) == "a = 4\nb = 5\nprint(a,b)" # test remove print code = """print("hello")\na = 4*5\nprint("world")""" assert _remove_print(code) == "a = 4*5" # test remove print. Only remove prints without indentation code = "if 4 > 5:\n\tprint('True')" assert _remove_print(code) == code @pytest.mark.skipif( sys.platform in ["darwin", "win32"], reason="do not run on MacOS or windows", ) def test_execute_one_python_code(): mathproxyagent = MathUserProxyAgent(name="MathChatAgent", human_input_mode="NEVER") # no output found 1 code = "x=3" assert mathproxyagent.execute_one_python_code(code)[0] == "No output found. Make sure you print the results." # no output found 2 code = "if 4 > 5:\n\tprint('True')" assert mathproxyagent.execute_one_python_code(code)[0] == "No output found." # return error code = "2+'2'" assert "Error:" in mathproxyagent.execute_one_python_code(code)[0] # save previous status mathproxyagent.execute_one_python_code("x=3\ny=x*2") assert mathproxyagent.execute_one_python_code("print(y)")[0].strip() == "6" code = "print('*'*2001)" assert ( mathproxyagent.execute_one_python_code(code)[0] == "Your requested query response is too long. You might have made a mistake. Please revise your reasoning and query." ) def test_execute_one_wolfram_query(): mathproxyagent = MathUserProxyAgent(name="MathChatAgent", human_input_mode="NEVER") code = "2x=3" try: mathproxyagent.execute_one_wolfram_query(code)[0] except ValueError: print("Wolfram API key not found. Skip test.") def test_generate_prompt(): mathproxyagent = MathUserProxyAgent(name="MathChatAgent", human_input_mode="NEVER") assert "customized" in mathproxyagent.message_generator( mathproxyagent, None, {"problem": "2x=4", "prompt_type": "python", "customized_prompt": "customized"} ) if __name__ == "__main__": # test_add_remove_print() # test_execute_one_python_code() # test_generate_prompt() test_math_user_proxy_agent()