#!/usr/bin/env python3 -m pytest import asyncio import os import sys import pytest from test_assistant_agent import KEY_LOC, OAI_CONFIG_LIST import autogen from autogen import AssistantAgent, UserProxyAgent sys.path.append(os.path.join(os.path.dirname(__file__), "..")) from conftest import skip_openai # noqa: E402 @pytest.mark.skipif(skip_openai, reason="requested to skip openai tests") @pytest.mark.asyncio async def test_async_chats(): config_list_35 = autogen.config_list_from_json( OAI_CONFIG_LIST, file_location=KEY_LOC, filter_dict={"tags": ["gpt-3.5-turbo"]}, ) financial_tasks = [ """What are the full names of NVDA and TESLA.""", """Get their stock price.""", """Analyze pros and cons. Keep it short.""", ] writing_tasks = ["""Develop a short but engaging blog post using any information provided."""] financial_assistant_1 = AssistantAgent( name="Financial_assistant_1", llm_config={"config_list": config_list_35}, system_message="You are a knowledgeable AI Assistant. Reply TERMINATE when everything is done.", ) financial_assistant_2 = AssistantAgent( name="Financial_assistant_2", llm_config={"config_list": config_list_35}, ) writer = AssistantAgent( name="Writer", llm_config={"config_list": config_list_35}, is_termination_msg=lambda x: x.get("content", "").find("TERMINATE") >= 0, system_message=""" You are a professional writer, known for your insightful and engaging articles. You transform complex concepts into compelling narratives. Reply "TERMINATE" in the end when everything is done. """, ) user = UserProxyAgent( name="User", human_input_mode="NEVER", is_termination_msg=lambda x: x.get("content", "").find("TERMINATE") >= 0, code_execution_config={ "last_n_messages": 1, "work_dir": "tasks", "use_docker": False, }, # Please set use_docker=True if docker is available to run the generated code. Using docker is safer than running the generated code directly. ) def my_summary_method(recipient, sender, summary_args): return recipient.chat_messages[sender][1].get("content", "") chat_res = await user.a_initiate_chats( [ { "chat_id": 1, "recipient": financial_assistant_1, "message": financial_tasks[0], "silent": False, "summary_method": my_summary_method, "max_turns": 1, }, { "chat_id": 2, "prerequisites": [1], "recipient": financial_assistant_2, "message": financial_tasks[1], "silent": True, "summary_method": "reflection_with_llm", "max_turns": 3, }, { "chat_id": 3, "prerequisites": [1, 2], "recipient": financial_assistant_1, "message": financial_tasks[2], "summary_method": "last_msg", "clear_history": False, "max_turns": 1, }, { "chat_id": 4, "prerequisites": [1, 2, 3], "recipient": writer, "message": writing_tasks[0], "carryover": "I want to include a figure or a table of data in the blogpost.", "summary_method": "last_msg", "max_turns": 2, }, ] ) last_chat_id = 4 chat_w_writer = chat_res[last_chat_id] print(chat_w_writer.chat_history, chat_w_writer.summary, chat_w_writer.cost) all_res = user.get_chat_results() writer_res = user.get_chat_results(last_chat_id) # print(blogpost.summary, insights_and_blogpost) print(writer_res.summary, writer_res.cost) print(all_res[1].human_input) print(all_res[1].summary) print(all_res[1].chat_history) print(all_res[2].summary) if __name__ == "__main__": asyncio.run(test_async_chats())