diff --git a/autogen/agent_utils.py b/autogen/agent_utils.py index 431d03c78d01..357112374f7d 100644 --- a/autogen/agent_utils.py +++ b/autogen/agent_utils.py @@ -1,8 +1,7 @@ from typing import List, Dict, Tuple -from autogen import Agent -def gather_usage_summary(agents: List[Agent]) -> Tuple[Dict[str, any], Dict[str, any]]: +def gather_usage_summary(agents: List) -> Tuple[Dict[str, any], Dict[str, any]]: """Gather usage summary from all agents. Args: @@ -44,7 +43,7 @@ def aggregate_summary(usage_summary: Dict[str, any], agent_summary: Dict[str, an actual_usage_summary = {"total_cost": 0} for agent in agents: - if agent.client: + if getattr(agent, "client", None): aggregate_summary(total_usage_summary, agent.client.total_usage_summary) aggregate_summary(actual_usage_summary, agent.client.actual_usage_summary) diff --git a/autogen/agentchat/chat.py b/autogen/agentchat/chat.py new file mode 100644 index 000000000000..c40874ccc7ba --- /dev/null +++ b/autogen/agentchat/chat.py @@ -0,0 +1,19 @@ +import logging +from typing import Dict, List +from dataclasses import dataclass + +logger = logging.getLogger(__name__) + + +@dataclass +class ChatResult: + """(Experimental) The result of a chat. Almost certain to be changed.""" + + chat_history: List[Dict[str, any]] = None + """The chat history.""" + summary: str = None + """A summary obtained from the chat.""" + cost: tuple = None # (dict, dict) - (total_cost, actual_cost_with_cache) + """The cost of the chat. a tuple of (total_cost, total_actual_cost), where total_cost is a dictionary of cost information, and total_actual_cost is a dictionary of information on the actual incurred cost with cache.""" + human_input: List[str] = None + """A list of human input solicited during the chat.""" diff --git a/autogen/agentchat/conversable_agent.py b/autogen/agentchat/conversable_agent.py index e4bf538369eb..397ccd699ce4 100644 --- a/autogen/agentchat/conversable_agent.py +++ b/autogen/agentchat/conversable_agent.py @@ -21,6 +21,8 @@ extract_code, infer_lang, ) +from ..agent_utils import gather_usage_summary +from .chat import ChatResult from ..function_utils import get_function_schema, load_basemodels_if_needed, serialize_to_str @@ -60,6 +62,7 @@ class ConversableAgent(Agent): DEFAULT_CONFIG = {} # An empty configuration MAX_CONSECUTIVE_AUTO_REPLY = 100 # maximum number of consecutive auto replies (subject to future change) + DEFAULT_summary_prompt = "Summarize the takeaway from the conversation. Do not add any introductory phrases. If the intended request is NOT properly addressed, please point it out." llm_config: Union[Dict, Literal[False]] def __init__( @@ -172,6 +175,7 @@ def __init__( self._default_auto_reply = default_auto_reply self._reply_func_list = [] self._ignore_async_func_in_sync_chat_list = [] + self._human_input = [] self.reply_at_receive = defaultdict(bool) self.register_reply([Agent, None], ConversableAgent.generate_oai_reply) self.register_reply([Agent, None], ConversableAgent.a_generate_oai_reply, ignore_async_in_sync_chat=True) @@ -410,7 +414,7 @@ def send( recipient: Agent, request_reply: Optional[bool] = None, silent: Optional[bool] = False, - ): + ) -> ChatResult: """Send a message to another agent. Args: @@ -442,6 +446,9 @@ def send( Raises: ValueError: if the message can't be converted into a valid ChatCompletion message. + + Returns: + ChatResult: an ChatResult object. """ # When the agent composes and sends the message, the role of the message is "assistant" # unless it's "function". @@ -453,13 +460,20 @@ def send( "Message can't be converted into a valid ChatCompletion message. Either content or function_call must be provided." ) + chat_result = ChatResult( + chat_history=self.chat_messages[recipient], + cost=gather_usage_summary([self, recipient]), + human_input=self._human_input, + ) + return chat_result + async def a_send( self, message: Union[Dict, str], recipient: Agent, request_reply: Optional[bool] = None, silent: Optional[bool] = False, - ): + ) -> ChatResult: """(async) Send a message to another agent. Args: @@ -491,6 +505,9 @@ async def a_send( Raises: ValueError: if the message can't be converted into a valid ChatCompletion message. + + Returns: + ChatResult: an ChatResult object. """ # When the agent composes and sends the message, the role of the message is "assistant" # unless it's "function". @@ -502,6 +519,13 @@ async def a_send( "Message can't be converted into a valid ChatCompletion message. Either content or function_call must be provided." ) + chat_result = ChatResult( + chat_history=self.chat_messages[recipient], + cost=gather_usage_summary([self, recipient]), + human_input=self._human_input, + ) + return chat_result + def _print_received_message(self, message: Union[Dict, str], sender: Agent): # print the message received print(colored(sender.name, "yellow"), "(to", f"{self.name}):\n", flush=True) @@ -651,6 +675,7 @@ def _prepare_chat(self, recipient: "ConversableAgent", clear_history: bool, prep self.reply_at_receive[recipient] = True if clear_history: self.clear_history(recipient) + self._human_input = [] if prepare_recipient: recipient._prepare_chat(self, clear_history, False) @@ -680,7 +705,7 @@ def initiate_chat( silent: Optional[bool] = False, cache: Optional[Cache] = None, **context, - ): + ) -> ChatResult: """Initiate a chat with the recipient agent. Reset the consecutive auto reply counter. @@ -692,12 +717,26 @@ def initiate_chat( clear_history (bool): whether to clear the chat history with the agent. silent (bool or None): (Experimental) whether to print the messages for this conversation. cache (Cache or None): the cache client to be used for this conversation. - **context: any context information. - "message" needs to be provided if the `generate_init_message` method is not overridden. - Otherwise, input() will be called to get the initial message. + **context: any context information. It has the following reserved fields: + "message": a str of message. Needs to be provided. Otherwise, input() will be called to get the initial message. + "summary_method": a string specify the method to get a summary from the chat. + Supported methods are "last_msg" and "reflection_with_llm". + when set "last_msg", it returns the last message of the dialog as the summary. + when set "reflection_with_llm", it returns a summary extracted using an llm client. + "llm" requires the llm_config to be set in either the sender or the recipient so that an llm client is available. + When both the sender and the recipient have an llm client, the recipient's llm client will be used. + "summary_prompt": a string of text used to prompt a LLM-based agent (the sender or receiver agent) to reflext + on the conversation and extract a summary when summary_method is "reflection_with_llm". + Default is DEFAULT_summary_prompt, i.e., "Summarize takeaway from the conversation. Do not add any introductory phrases. If the intended request is NOT properly addressed, please point it out." + "carryover": a string or a list of string to specify the carryover information to be passed to this chat. It can be a string or a list of string. + If provided, we will combine this carryover with the "message" content when generating the initial chat + message in `generate_init_message`. Raises: RuntimeError: if any async reply functions are registered and not ignored in sync chat. + + Returns: + ChatResult: an ChatResult object. """ for agent in [self, recipient]: agent._raise_exception_on_async_reply_functions() @@ -705,9 +744,22 @@ def initiate_chat( agent.client_cache = cache self._prepare_chat(recipient, clear_history) self.send(self.generate_init_message(**context), recipient, silent=silent) + summary = self._summarize_chat( + context.get("summary_method"), + recipient, + prompt=context.get("summary_prompt"), + cache=cache, + ) for agent in [self, recipient]: agent.client_cache = agent.previous_cache agent.previous_cache = None + chat_result = ChatResult( + chat_history=self.chat_messages[recipient], + summary=summary, + cost=gather_usage_summary([self, recipient]), + human_input=self._human_input, + ) + return chat_result async def a_initiate_chat( self, @@ -716,30 +768,191 @@ async def a_initiate_chat( silent: Optional[bool] = False, cache: Optional[Cache] = None, **context, - ): + ) -> ChatResult: """(async) Initiate a chat with the recipient agent. Reset the consecutive auto reply counter. If `clear_history` is True, the chat history with the recipient agent will be cleared. `a_generate_init_message` is called to generate the initial message for the agent. - Args: - recipient: the recipient agent. - clear_history (bool): whether to clear the chat history with the agent. - silent (bool or None): (Experimental) whether to print the messages for this conversation. - cache (Cache or None): the cache client to be used for this conversation. - **context: any context information. - "message" needs to be provided if the `a_generate_init_message` method is not overridden. - Otherwise, input() will be called to get the initial message. + Args: Please refer to `initiate_chat`. + + Returns: + ChatResult: an ChatResult object. """ self._prepare_chat(recipient, clear_history) for agent in [self, recipient]: agent.previous_cache = agent.client_cache agent.client_cache = cache await self.a_send(await self.a_generate_init_message(**context), recipient, silent=silent) + summary = self._summarize_chat( + context.get("summary_method"), + recipient, + prompt=context.get("summary_prompt"), + cache=cache, + ) for agent in [self, recipient]: agent.client_cache = agent.previous_cache agent.previous_cache = None + chat_result = ChatResult( + chat_history=self.chat_messages[recipient], + summary=summary, + cost=gather_usage_summary([self, recipient]), + human_input=self._human_input, + ) + return chat_result + + def _summarize_chat( + self, + method, + agent: Optional[Agent] = None, + prompt: Optional[str] = None, + cache: Optional[Cache] = None, + ) -> str: + """Get a chat summary from an agent participating in a chat. + + Args: + method (str): the method to get the summary. + agent: the participating agent in a chat. + prompt (str): the prompt used to get a summary when summary_method is "reflection_with_llm". + + Returns: + str: a chat summary from the agent. + """ + agent = self if agent is None else agent + summary = "" + if method == "last_msg": + try: + summary = agent.last_message(self)["content"] + summary = summary.replace("TERMINATE", "") + except (IndexError, AttributeError): + warnings.warn("Cannot extract summary from last message.", UserWarning) + elif method == "reflection_with_llm": + prompt = ConversableAgent.DEFAULT_summary_prompt if prompt is None else prompt + if not isinstance(prompt, str): + raise ValueError("The summary_prompt must be a string.") + msg_list = agent._groupchat.messages if hasattr(agent, "_groupchat") else agent.chat_messages[self] + + summary = self._llm_response_preparer(prompt, msg_list, llm_agent=agent, cache=cache) + else: + warnings.warn("No summary_method provided or summary_method is not supported: ") + return summary + + def _llm_response_preparer( + self, prompt, messages, llm_agent: Optional[Agent] = None, cache: Optional[Cache] = None + ) -> str: + """Default summary preparer with llm + + Args: + prompt (str): The prompt used to extract the final response from the transcript. + messages (list): The messages generated as part of a chat conversation. + """ + + _messages = [ + { + "role": "system", + "content": """Earlier you were asked to fulfill a request. You and your team worked diligently to address that request. Here is a transcript of that conversation:""", + } + ] + for message in messages: + message = copy.deepcopy(message) + message["role"] = "user" + _messages.append(message) + + _messages.append( + { + "role": "system", + "content": prompt, + } + ) + + if llm_agent and llm_agent.client is not None: + llm_client = llm_agent.client + elif self.client is not None: + llm_client = self.client + else: + raise ValueError("No OpenAIWrapper client is found.") + + response = llm_client.create(context=None, messages=_messages, cache=cache) + extracted_response = llm_client.extract_text_or_completion_object(response)[0] + if not isinstance(extracted_response, str) and hasattr(extracted_response, "model_dump"): + return str(extracted_response.model_dump(mode="dict")) + else: + return extracted_response + + def initiate_chats(self, chat_queue: List[Dict[str, Any]]) -> Dict[Agent, ChatResult]: + """(Experimental) Initiate chats with multiple agents. + TODO: add async version of this method. + + Args: + chat_queue (List[Dict]): a list of dictionaries containing the information of the chats. + Each dictionary should contain the following fields: + - "recipient": the recipient agent. + - "context": any context information, e.g., the request message. The following fields are reserved: + "message" needs to be provided if the `generate_init_message` method is not overridden. + Otherwise, input() will be called to get the initial message. + "summary_method" can be used to specify the method to extract a summary from the chat. + Supported methods are "last_msg" and "reflection_with_llm". + when set "last_msg", it returns the last message of the dialog as the summary. + when set "reflection_with_llm", it returns a summary extracted using an llm client. + `llm_config` must be set in either the recipient or sender. + "reflection_with_llm" requires the llm_config to be set in either the sender or the recipient. + "summary_prompt" can be used to specify the prompt used to extract a summary when summary_method is "reflection_with_llm". + Default is None and the following default prompt will be used when "summary_method" is set to "reflection_with_llm": + "Identify and extract the final solution to the originally asked question based on the conversation." + "carryover" can be used to specify the carryover information to be passed to this chat. + If provided, we will combine this carryover with the "message" content when generating the initial chat + message in `generate_init_message`. + + Returns: a dictionary of ChatResult object from the finished chats of particular agents. + """ + receipts_set = set() + for chat_info in chat_queue: + assert "recipient" in chat_info, "recipient must be provided." + receipts_set.add(chat_info["recipient"]) + assert len(receipts_set) == len(chat_queue), "recipients must be different." + + self._chat_queue = chat_queue + self._finished_chats = {} + while self._chat_queue: + chat_info = self._chat_queue.pop(0) + _chat_carryover = chat_info.get("carryover", []) + if isinstance(_chat_carryover, str): + _chat_carryover = [_chat_carryover] + chat_info["carryover"] = _chat_carryover + [r.summary for r in self._finished_chats.values()] + if "message" not in chat_info: + warnings.warn( + "message is not provided in a chat_queue entry. input() will be called to get the initial message.", + UserWarning, + ) + current_agent = chat_info["recipient"] + print_carryover = ( + ("\n").join([t for t in chat_info["carryover"]]) + if isinstance(chat_info["carryover"], list) + else chat_info["carryover"] + ) + print(colored("\n" + "*" * 80, "blue"), flush=True, sep="") + print( + colored( + "Start a new chat with the following message: \n" + + chat_info.get("message") + + "\n\nWith the following carryover: \n" + + print_carryover, + "blue", + ), + flush=True, + ) + print(colored("\n" + "*" * 80, "blue"), flush=True, sep="") + chat_res = self.initiate_chat(**chat_info) + self._finished_chats[current_agent] = chat_res + return self._finished_chats + + def get_chat_results(self, agent: Optional[Agent] = None) -> Union[Dict[Agent, ChatResult], ChatResult]: + """A summary from the finished chats of particular agents.""" + if agent is not None: + return self._finished_chats.get(agent) + else: + return self._finished_chats def reset(self): """Reset the agent.""" @@ -827,8 +1040,11 @@ def generate_oai_reply( extracted_response = client.extract_text_or_completion_object(response)[0] + if extracted_response is None: + warnings.warn("Extracted_response is None.", UserWarning) + return False, None # ensure function and tool calls will be accepted when sent back to the LLM - if not isinstance(extracted_response, str): + if not isinstance(extracted_response, str) and hasattr(extracted_response, "model_dump"): extracted_response = model_dump(extracted_response) if isinstance(extracted_response, dict): if extracted_response.get("function_call"): @@ -1435,6 +1651,7 @@ def get_human_input(self, prompt: str) -> str: str: human input. """ reply = input(prompt) + self._human_input.append(reply) return reply async def a_get_human_input(self, prompt: str) -> str: @@ -1449,6 +1666,7 @@ async def a_get_human_input(self, prompt: str) -> str: str: human input. """ reply = input(prompt) + self._human_inputs.append(reply) return reply def run_code(self, code, **kwargs): @@ -1649,30 +1867,58 @@ async def a_execute_function(self, func_call): def generate_init_message(self, **context) -> Union[str, Dict]: """Generate the initial message for the agent. + TODO: offer a way to customize initial message without overriding this function. Override this function to customize the initial message based on user's request. - If not overridden, "message" needs to be provided in the context. + If not overridden, "message" needs to be provided in the context, or input() will be called to get the initial message. Args: - **context: any context information, and "message" parameter needs to be provided. - If message is not given, prompt for it via input() + **context: any context information. It has the following reserved fields: + "message": a str of message. + "summary_method": a string specify the method to get a summary from the chat. + Supported methods are "last_msg" and "reflection_with_llm". + when set "last_msg", it returns the last message of the dialog as the summary. + when set "reflection_with_llm", it returns a summary extracted using an llm client. + "llm" requires the llm_config to be set in either the sender or the recipient so that an llm client is available. + When both the sender and the recipient have an llm client, the recipient's llm client will be used. + "summary_prompt": a string of text used to prompt a LLM-based agent (the sender or receiver agent) to reflext + on the conversation and extract a summary when summary_method is "reflection_with_llm". + Default is DEFAULT_summary_prompt, i.e., "Summarize takeaway from the conversation. Do not add any introductory phrases. If the intended request is NOT properly addressed, please point it out." + "carryover": a string or a list of string to specify the carryover information to be passed to this chat. It can be a string or a list of string. + If provided, we will combine this carryover with the "message" content when generating the initial chat + message. """ if "message" not in context: context["message"] = self.get_human_input(">") + self._process_carryover(context) return context["message"] + def _process_carryover(self, context): + carryover = context.get("carryover", "") + if carryover: + # if carryover is string + if isinstance(carryover, str): + context["message"] = context["message"] + "\nContext: \n" + carryover + elif isinstance(carryover, list): + context["message"] = context["message"] + "\nContext: \n" + ("\n").join([t for t in carryover]) + else: + raise warnings.warn( + "Carryover should be a string or a list of strings. Not adding carryover to the message." + ) + async def a_generate_init_message(self, **context) -> Union[str, Dict]: """Generate the initial message for the agent. + TODO: offer a way to customize initial message without overriding this function. Override this function to customize the initial message based on user's request. - If not overridden, "message" needs to be provided in the context. + If not overridden, "message" needs to be provided in the context, or input() will be called to get the initial message. Args: - **context: any context information, and "message" parameter needs to be provided. - If message is not given, prompt for it via input() + Please refer to `generate_init_message` for the description of the arguments. """ if "message" not in context: context["message"] = await self.a_get_human_input(">") + self._process_carryover(context) return context["message"] def register_function(self, function_map: Dict[str, Callable]): diff --git a/notebook/agentchat_auto_feedback_from_code_execution.ipynb b/notebook/agentchat_auto_feedback_from_code_execution.ipynb index b052424603ed..f4498c037aee 100644 --- a/notebook/agentchat_auto_feedback_from_code_execution.ipynb +++ b/notebook/agentchat_auto_feedback_from_code_execution.ipynb @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -92,169 +92,77 @@ "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\n", - "First, let's find out today's date. Then, we will fetch the stock prices for META (Facebook) and TESLA and calculate the year-to-date gain for both.\n", - "\n", - "Step 1: Get today's date\n", - "```python\n", - "from datetime import date\n", - "today = date.today()\n", - "print(\"Today's date:\", today)\n", - "```\n", - "\n", - "Step 2: Fetch stock prices for META and TESLA\n", - "We will use the `yfinance` library to fetch the stock prices. If you don't have it installed, please install it using the following command:\n", + "To get the current date, we can use Python's `datetime` module. After that, we will need to retrieve the year-to-date (YTD) gain for both META (Meta Platforms, Inc.) and TESLA (Tesla, Inc.). We can do this by fetching the stock prices from the beginning of the year and the current stock prices, then calculating the percentage change.\n", "\n", - "```sh\n", - "pip install yfinance\n", - "```\n", + "First, let's write a Python script to get the current date:\n", "\n", - "Step 3: Calculate the year-to-date gain for META and TESLA\n", "```python\n", - "import yfinance as yf\n", + "# filename: get_current_date.py\n", + "\n", "from datetime import datetime\n", "\n", - "def get_ytd_gain(ticker):\n", - " stock = yf.Ticker(ticker)\n", - " start_date = datetime(today.year, 1, 1)\n", - " end_date = today\n", - " historical_data = stock.history(start=start_date, end=end_date)\n", - " start_price = historical_data.iloc[0]['Close']\n", - " end_price = historical_data.iloc[-1]['Close']\n", - " ytd_gain = (end_price - start_price) / start_price * 100\n", - " return ytd_gain\n", - "\n", - "meta_ytd_gain = get_ytd_gain(\"FB\")\n", - "tesla_ytd_gain = get_ytd_gain(\"TSLA\")\n", - "\n", - "print(f\"Year-to-date gain for META (Facebook): {meta_ytd_gain:.2f}%\")\n", - "print(f\"Year-to-date gain for TESLA: {tesla_ytd_gain:.2f}%\")\n", + "# Get the current date\n", + "current_date = datetime.now()\n", + "\n", + "# Print the current date in YYYY-MM-DD format\n", + "print(current_date.strftime('%Y-%m-%d'))\n", "```\n", "\n", - "Please execute the code blocks in the order mentioned above.\n", + "Please save the above code in a file named `get_current_date.py` and execute it to get today's date. After that, we will proceed to the next step of fetching the stock data.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", - "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 1 (inferred language is sh)...\u001b[0m\n", - "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 2 (inferred language is python)...\u001b[0m\n", "\u001b[33muser_proxy\u001b[0m (to assistant):\n", "\n", - "exitcode: 1 (execution failed)\n", + "exitcode: 0 (execution succeeded)\n", "Code output: \n", - "Today's date: 2023-08-29\n", - "\n", - "Defaulting to user installation because normal site-packages is not writeable\n", - "Requirement already satisfied: yfinance in /home/vscode/.local/lib/python3.9/site-packages (0.2.26)\n", - "Requirement already satisfied: numpy>=1.16.5 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (1.25.1)\n", - "Requirement already satisfied: requests>=2.31 in /usr/local/lib/python3.9/site-packages (from yfinance) (2.31.0)\n", - "Requirement already satisfied: lxml>=4.9.1 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (4.9.3)\n", - "Requirement already satisfied: pytz>=2022.5 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (2023.3)\n", - "Requirement already satisfied: frozendict>=2.3.4 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (2.3.8)\n", - "Requirement already satisfied: multitasking>=0.0.7 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (0.0.11)\n", - "Requirement already satisfied: beautifulsoup4>=4.11.1 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (4.12.2)\n", - "Requirement already satisfied: pandas>=1.3.0 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (1.3.3)\n", - "Requirement already satisfied: html5lib>=1.1 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (1.1)\n", - "Requirement already satisfied: appdirs>=1.4.4 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (1.4.4)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/vscode/.local/lib/python3.9/site-packages (from beautifulsoup4>=4.11.1->yfinance) (2.4.1)\n", - "Requirement already satisfied: six>=1.9 in /usr/local/lib/python3.9/site-packages (from html5lib>=1.1->yfinance) (1.16.0)\n", - "Requirement already satisfied: webencodings in /home/vscode/.local/lib/python3.9/site-packages (from html5lib>=1.1->yfinance) (0.5.1)\n", - "Requirement already satisfied: python-dateutil>=2.7.3 in /home/vscode/.local/lib/python3.9/site-packages (from pandas>=1.3.0->yfinance) (2.8.2)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/site-packages (from requests>=2.31->yfinance) (2023.5.7)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.9/site-packages (from requests>=2.31->yfinance) (3.2.0)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.9/site-packages (from requests>=2.31->yfinance) (2.0.3)\n", - "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/site-packages (from requests>=2.31->yfinance) (3.4)\n", - "\n", - "Traceback (most recent call last):\n", - " File \"\", line 14, in \n", - " meta_ytd_gain = get_ytd_gain(\"FB\")\n", - " File \"\", line 6, in get_ytd_gain\n", - " start_date = datetime(today.year, 1, 1)\n", - "NameError: name 'today' is not defined\n", + "2024-02-05\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\n", - "Apologies for the error. It seems I forgot to include the `today` variable in the last code block. Here's the corrected code:\n", - "\n", - "```python\n", - "import yfinance as yf\n", - "from datetime import datetime, date\n", - "\n", - "today = date.today()\n", - "\n", - "def get_ytd_gain(ticker):\n", - " stock = yf.Ticker(ticker)\n", - " start_date = datetime(today.year, 1, 1)\n", - " end_date = today\n", - " historical_data = stock.history(start=start_date, end=end_date)\n", - " start_price = historical_data.iloc[0]['Close']\n", - " end_price = historical_data.iloc[-1]['Close']\n", - " ytd_gain = (end_price - start_price) / start_price * 100\n", - " return ytd_gain\n", + "Great, today's date is 2024-02-05. Now, let's proceed to fetch the stock data for META and TESLA to compare their year-to-date gains.\n", "\n", - "meta_ytd_gain = get_ytd_gain(\"FB\")\n", - "tesla_ytd_gain = get_ytd_gain(\"TSLA\")\n", + "We will use Python to fetch the stock data. For this purpose, we can use the `yfinance` library, which allows us to retrieve historical market data from Yahoo Finance. If `yfinance` is not installed, you will need to install it using `pip install yfinance`.\n", "\n", - "print(f\"Year-to-date gain for META (Facebook): {meta_ytd_gain:.2f}%\")\n", - "print(f\"Year-to-date gain for TESLA: {tesla_ytd_gain:.2f}%\")\n", - "```\n", - "\n", - "Please execute this code block to get the year-to-date gain for META and TESLA.\n", - "\n", - "--------------------------------------------------------------------------------\n", - "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", - "\u001b[33muser_proxy\u001b[0m (to assistant):\n", - "\n", - "exitcode: 1 (execution failed)\n", - "Code output: \n", - "FB: No timezone found, symbol may be delisted\n", - "Traceback (most recent call last):\n", - " File \"\", line 16, in \n", - " meta_ytd_gain = get_ytd_gain(\"FB\")\n", - " File \"\", line 11, in get_ytd_gain\n", - " start_price = historical_data.iloc[0]['Close']\n", - " File \"/home/vscode/.local/lib/python3.9/site-packages/pandas/core/indexing.py\", line 931, in __getitem__\n", - " return self._getitem_axis(maybe_callable, axis=axis)\n", - " File \"/home/vscode/.local/lib/python3.9/site-packages/pandas/core/indexing.py\", line 1566, in _getitem_axis\n", - " self._validate_integer(key, axis)\n", - " File \"/home/vscode/.local/lib/python3.9/site-packages/pandas/core/indexing.py\", line 1500, in _validate_integer\n", - " raise IndexError(\"single positional indexer is out-of-bounds\")\n", - "IndexError: single positional indexer is out-of-bounds\n", + "Here's the Python script to fetch the YTD stock data for META and TESLA and calculate their gains:\n", "\n", + "```python\n", + "# filename: compare_ytd_gains.py\n", "\n", - "--------------------------------------------------------------------------------\n", - "\u001b[33massistant\u001b[0m (to user_proxy):\n", + "import yfinance as yf\n", + "from datetime import datetime\n", "\n", - "I apologize for the error. It seems that the \"FB\" ticker symbol is not working as expected. Facebook has changed its parent company name to Meta Platforms, Inc., and its ticker symbol has been changed to \"META\". Let's update the code to use the new ticker symbol:\n", + "# Define the tickers for Meta Platforms, Inc. and Tesla, Inc.\n", + "tickers = [\"META\", \"TSLA\"]\n", "\n", - "```python\n", - "import yfinance as yf\n", - "from datetime import datetime, date\n", + "# Define the start of the year\n", + "start_of_year = datetime(datetime.now().year, 1, 1)\n", "\n", - "today = date.today()\n", + "# Fetch the historical data from the start of the year to the current date\n", + "meta_data = yf.download(tickers[0], start=start_of_year, end=datetime.now())\n", + "tesla_data = yf.download(tickers[1], start=start_of_year, end=datetime.now())\n", "\n", - "def get_ytd_gain(ticker):\n", - " stock = yf.Ticker(ticker)\n", - " start_date = datetime(today.year, 1, 1)\n", - " end_date = today\n", - " historical_data = stock.history(start=start_date, end=end_date)\n", - " start_price = historical_data.iloc[0]['Close']\n", - " end_price = historical_data.iloc[-1]['Close']\n", - " ytd_gain = (end_price - start_price) / start_price * 100\n", - " return ytd_gain\n", + "# Calculate the YTD gain for each stock\n", + "meta_ytd_gain = ((meta_data['Close'][-1] - meta_data['Close'][0]) / meta_data['Close'][0]) * 100\n", + "tesla_ytd_gain = ((tesla_data['Close'][-1] - tesla_data['Close'][0]) / tesla_data['Close'][0]) * 100\n", "\n", - "meta_ytd_gain = get_ytd_gain(\"META\")\n", - "tesla_ytd_gain = get_ytd_gain(\"TSLA\")\n", + "# Print the YTD gains\n", + "print(f\"META YTD Gain: {meta_ytd_gain:.2f}%\")\n", + "print(f\"TESLA YTD Gain: {tesla_ytd_gain:.2f}%\")\n", "\n", - "print(f\"Year-to-date gain for META (Facebook): {meta_ytd_gain:.2f}%\")\n", - "print(f\"Year-to-date gain for TESLA: {tesla_ytd_gain:.2f}%\")\n", + "# Compare the YTD gains\n", + "if meta_ytd_gain > tesla_ytd_gain:\n", + " print(\"META has a higher YTD gain than TESLA.\")\n", + "elif meta_ytd_gain < tesla_ytd_gain:\n", + " print(\"TESLA has a higher YTD gain than META.\")\n", + "else:\n", + " print(\"META and TESLA have the same YTD gain.\")\n", "```\n", "\n", - "Please execute this updated code block to get the year-to-date gain for META and TESLA.\n", + "Please save the above code in a file named `compare_ytd_gains.py` and execute it. The script will output the YTD gains for both META and TESLA and indicate which one is higher.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", @@ -263,19 +171,17 @@ "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", - "Year-to-date gain for META (Facebook): 132.69%\n", - "Year-to-date gain for TESLA: 120.93%\n", + "META YTD Gain: 37.17%\n", + "TESLA YTD Gain: -24.36%\n", + "META has a higher YTD gain than TESLA.\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\n", - "Great! The code executed successfully. Here are the year-to-date gains for META (Facebook) and TESLA:\n", - "\n", - "- Year-to-date gain for META (Facebook): 132.69%\n", - "- Year-to-date gain for TESLA: 120.93%\n", + "The year-to-date (YTD) gain for META (Meta Platforms, Inc.) is 37.17%, while the YTD gain for TESLA (Tesla, Inc.) is -24.36%. This means that so far this year, META has had a higher gain compared to TESLA.\n", "\n", - "Please note that these values are based on the stock market data at the time of execution and may change as the market fluctuates.\n", + "If you need further assistance or have more questions, feel free to ask. Otherwise, if everything is done, please let me know.\n", "\n", "TERMINATE\n", "\n", @@ -288,7 +194,7 @@ "assistant = autogen.AssistantAgent(\n", " name=\"assistant\",\n", " llm_config={\n", - " \"cache_seed\": 42, # seed for caching and reproducibility\n", + " \"cache_seed\": 41, # seed for caching and reproducibility\n", " \"config_list\": config_list, # a list of OpenAI API configurations\n", " \"temperature\": 0, # temperature for sampling\n", " }, # configuration for autogen's enhanced inference API which is compatible with OpenAI API\n", @@ -305,9 +211,10 @@ " },\n", ")\n", "# the assistant receives a message from the user_proxy, which contains the task description\n", - "user_proxy.initiate_chat(\n", + "chat_res = user_proxy.initiate_chat(\n", " assistant,\n", " message=\"\"\"What date is today? Compare the year-to-date gain for META and TESLA.\"\"\",\n", + " summary_method=\"reflection_with_llm\",\n", ")" ] }, @@ -321,6 +228,41 @@ "The whole chat is auto-generated." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Check chat results\n", + "The `initiate_chat` method returns a `ChatResult` object, which is a dataclass object storing information about the chat. Currently, it includes the following attributes:\n", + "\n", + "- `chat_history`: a list of chat history.\n", + "- `summary`: a string of chat summary. A summary is only available if a summary_method is provided when initiating the chat.\n", + "- `cost`: a tuple of (total_cost, total_actual_cost), where total_cost is a dictionary of cost information, and total_actual_cost is a dictionary of information on the actual incurred cost with cache.\n", + "- `human_input`: a list of strings of human inputs solicited during the chat. (Note that since we are setting `human_input_mode` to `NEVER` in this notebook, this list is always empty.)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Chat history: [{'content': 'What date is today? Compare the year-to-date gain for META and TESLA.', 'role': 'assistant'}, {'content': \"To get the current date, we can use Python's `datetime` module. After that, we will need to retrieve the year-to-date (YTD) gain for both META (Meta Platforms, Inc.) and TESLA (Tesla, Inc.). We can do this by fetching the stock prices from the beginning of the year and the current stock prices, then calculating the percentage change.\\n\\nFirst, let's write a Python script to get the current date:\\n\\n```python\\n# filename: get_current_date.py\\n\\nfrom datetime import datetime\\n\\n# Get the current date\\ncurrent_date = datetime.now()\\n\\n# Print the current date in YYYY-MM-DD format\\nprint(current_date.strftime('%Y-%m-%d'))\\n```\\n\\nPlease save the above code in a file named `get_current_date.py` and execute it to get today's date. After that, we will proceed to the next step of fetching the stock data.\", 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\n2024-02-05\\n', 'role': 'assistant'}, {'content': 'Great, today\\'s date is 2024-02-05. Now, let\\'s proceed to fetch the stock data for META and TESLA to compare their year-to-date gains.\\n\\nWe will use Python to fetch the stock data. For this purpose, we can use the `yfinance` library, which allows us to retrieve historical market data from Yahoo Finance. If `yfinance` is not installed, you will need to install it using `pip install yfinance`.\\n\\nHere\\'s the Python script to fetch the YTD stock data for META and TESLA and calculate their gains:\\n\\n```python\\n# filename: compare_ytd_gains.py\\n\\nimport yfinance as yf\\nfrom datetime import datetime\\n\\n# Define the tickers for Meta Platforms, Inc. and Tesla, Inc.\\ntickers = [\"META\", \"TSLA\"]\\n\\n# Define the start of the year\\nstart_of_year = datetime(datetime.now().year, 1, 1)\\n\\n# Fetch the historical data from the start of the year to the current date\\nmeta_data = yf.download(tickers[0], start=start_of_year, end=datetime.now())\\ntesla_data = yf.download(tickers[1], start=start_of_year, end=datetime.now())\\n\\n# Calculate the YTD gain for each stock\\nmeta_ytd_gain = ((meta_data[\\'Close\\'][-1] - meta_data[\\'Close\\'][0]) / meta_data[\\'Close\\'][0]) * 100\\ntesla_ytd_gain = ((tesla_data[\\'Close\\'][-1] - tesla_data[\\'Close\\'][0]) / tesla_data[\\'Close\\'][0]) * 100\\n\\n# Print the YTD gains\\nprint(f\"META YTD Gain: {meta_ytd_gain:.2f}%\")\\nprint(f\"TESLA YTD Gain: {tesla_ytd_gain:.2f}%\")\\n\\n# Compare the YTD gains\\nif meta_ytd_gain > tesla_ytd_gain:\\n print(\"META has a higher YTD gain than TESLA.\")\\nelif meta_ytd_gain < tesla_ytd_gain:\\n print(\"TESLA has a higher YTD gain than META.\")\\nelse:\\n print(\"META and TESLA have the same YTD gain.\")\\n```\\n\\nPlease save the above code in a file named `compare_ytd_gains.py` and execute it. The script will output the YTD gains for both META and TESLA and indicate which one is higher.', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nMETA YTD Gain: 37.17%\\nTESLA YTD Gain: -24.36%\\nMETA has a higher YTD gain than TESLA.\\n', 'role': 'assistant'}, {'content': 'The year-to-date (YTD) gain for META (Meta Platforms, Inc.) is 37.17%, while the YTD gain for TESLA (Tesla, Inc.) is -24.36%. This means that so far this year, META has had a higher gain compared to TESLA.\\n\\nIf you need further assistance or have more questions, feel free to ask. Otherwise, if everything is done, please let me know.\\n\\nTERMINATE', 'role': 'user'}, {'content': 'Plot a chart of their stock price change YTD and save to stock_price_ytd.png.', 'role': 'assistant'}, {'content': 'To plot a chart of the stock price changes YTD for META and TESLA and save it to a file named `stock_price_ytd.png`, we will use Python with the `matplotlib` library for plotting and `yfinance` to fetch the stock data.\\n\\nIf `matplotlib` is not installed, you will need to install it using `pip install matplotlib`.\\n\\nHere\\'s the Python script to plot the chart and save it:\\n\\n```python\\n# filename: plot_stock_price_ytd.py\\n\\nimport yfinance as yf\\nimport matplotlib.pyplot as plt\\nfrom datetime import datetime\\n\\n# Define the tickers for Meta Platforms, Inc. and Tesla, Inc.\\ntickers = [\"META\", \"TSLA\"]\\n\\n# Define the start of the year\\nstart_of_year = datetime(datetime.now().year, 1, 1)\\n\\n# Fetch the historical data from the start of the year to the current date\\nmeta_data = yf.download(tickers[0], start=start_of_year, end=datetime.now())\\ntesla_data = yf.download(tickers[1], start=start_of_year, end=datetime.now())\\n\\n# Normalize the data to compare the percentage change from the start of the year\\nmeta_normalized = (meta_data[\\'Close\\'] / meta_data[\\'Close\\'].iloc[0]) * 100\\ntesla_normalized = (tesla_data[\\'Close\\'] / tesla_data[\\'Close\\'].iloc[0]) * 100\\n\\n# Plot the data\\nplt.figure(figsize=(14, 7))\\nplt.plot(meta_normalized, label=\\'META YTD\\', color=\\'blue\\')\\nplt.plot(tesla_normalized, label=\\'TESLA YTD\\', color=\\'orange\\')\\n\\n# Add titles and labels\\nplt.title(\\'Stock Price Change YTD for META and TESLA\\')\\nplt.xlabel(\\'Date\\')\\nplt.ylabel(\\'Normalized Price (Base 100)\\')\\nplt.legend()\\n\\n# Save the plot to a file\\nplt.savefig(\\'stock_price_ytd.png\\')\\nplt.show()\\n```\\n\\nPlease save the above code in a file named `plot_stock_price_ytd.py` and execute it. The script will display a chart of the stock price changes YTD for META and TESLA and save the chart as `stock_price_ytd.png` in the current directory.', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nFigure(1400x700)\\n', 'role': 'assistant'}, {'content': 'The chart of the stock price changes YTD for META and TESLA has been successfully plotted and saved as `stock_price_ytd.png` in your current directory. You can view this image file to see the visual comparison of the stock performance for both companies since the start of the year.\\n\\nIf you have any more questions or need further assistance, feel free to ask. Otherwise, we have completed the task.\\n\\nTERMINATE', 'role': 'user'}]\n", + "Summary: None\n", + "Cost info: ({'total_cost': 0.28146, 'gpt-4': {'cost': 0.28146, 'prompt_tokens': 6642, 'completion_tokens': 1370, 'total_tokens': 8012}}, {'total_cost': 0})\n" + ] + } + ], + "source": [ + "print(\"Chat history:\", chat_res.chat_history)\n", + "\n", + "print(\"Summary:\", chat_res.summary)\n", + "print(\"Cost info:\", chat_res.cost)" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -345,87 +287,67 @@ "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\n", - "To plot the chart and save it as an image, we will use the `matplotlib` library. If you don't have it installed, please install it using the following command:\n", + "To plot a chart of the stock price changes YTD for META and TESLA and save it to a file named `stock_price_ytd.png`, we will use Python with the `matplotlib` library for plotting and `yfinance` to fetch the stock data.\n", "\n", - "```sh\n", - "pip install matplotlib\n", - "```\n", + "If `matplotlib` is not installed, you will need to install it using `pip install matplotlib`.\n", "\n", - "Now, let's plot the chart of the stock price change YTD for META and TESLA and save it to a file named \"stock_price_ytd.png\":\n", + "Here's the Python script to plot the chart and save it:\n", "\n", "```python\n", "# filename: plot_stock_price_ytd.py\n", "\n", "import yfinance as yf\n", "import matplotlib.pyplot as plt\n", - "from datetime import datetime, date\n", + "from datetime import datetime\n", "\n", - "today = date.today()\n", + "# Define the tickers for Meta Platforms, Inc. and Tesla, Inc.\n", + "tickers = [\"META\", \"TSLA\"]\n", "\n", - "def get_stock_data(ticker):\n", - " stock = yf.Ticker(ticker)\n", - " start_date = datetime(today.year, 1, 1)\n", - " end_date = today\n", - " historical_data = stock.history(start=start_date, end=end_date)\n", - " return historical_data\n", + "# Define the start of the year\n", + "start_of_year = datetime(datetime.now().year, 1, 1)\n", "\n", - "meta_data = get_stock_data(\"META\")\n", - "tesla_data = get_stock_data(\"TSLA\")\n", + "# Fetch the historical data from the start of the year to the current date\n", + "meta_data = yf.download(tickers[0], start=start_of_year, end=datetime.now())\n", + "tesla_data = yf.download(tickers[1], start=start_of_year, end=datetime.now())\n", "\n", - "plt.figure(figsize=(12, 6))\n", - "plt.plot(meta_data.index, meta_data['Close'], label='META (Facebook)')\n", - "plt.plot(tesla_data.index, tesla_data['Close'], label='TESLA')\n", - "plt.xlabel('Date')\n", - "plt.ylabel('Stock Price')\n", + "# Normalize the data to compare the percentage change from the start of the year\n", + "meta_normalized = (meta_data['Close'] / meta_data['Close'].iloc[0]) * 100\n", + "tesla_normalized = (tesla_data['Close'] / tesla_data['Close'].iloc[0]) * 100\n", + "\n", + "# Plot the data\n", + "plt.figure(figsize=(14, 7))\n", + "plt.plot(meta_normalized, label='META YTD', color='blue')\n", + "plt.plot(tesla_normalized, label='TESLA YTD', color='orange')\n", + "\n", + "# Add titles and labels\n", "plt.title('Stock Price Change YTD for META and TESLA')\n", + "plt.xlabel('Date')\n", + "plt.ylabel('Normalized Price (Base 100)')\n", "plt.legend()\n", + "\n", + "# Save the plot to a file\n", "plt.savefig('stock_price_ytd.png')\n", "plt.show()\n", "```\n", "\n", - "Please save the above code in a file named \"plot_stock_price_ytd.py\" and execute it using the following command:\n", - "\n", - "```sh\n", - "python plot_stock_price_ytd.py\n", - "```\n", - "\n", - "This will create a chart of the stock price change YTD for META and TESLA and save it as \"stock_price_ytd.png\" in the same directory where the script is located.\n", + "Please save the above code in a file named `plot_stock_price_ytd.py` and execute it. The script will display a chart of the stock price changes YTD for META and TESLA and save the chart as `stock_price_ytd.png` in the current directory.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is sh)...\u001b[0m\n", - "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 1 (inferred language is python)...\u001b[0m\n", - "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 2 (inferred language is sh)...\u001b[0m\n", + ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", "\u001b[33muser_proxy\u001b[0m (to assistant):\n", "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", - "Defaulting to user installation because normal site-packages is not writeable\n", - "Requirement already satisfied: matplotlib in /home/vscode/.local/lib/python3.9/site-packages (3.7.2)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (4.41.1)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (1.4.4)\n", - "Requirement already satisfied: cycler>=0.10 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (0.11.0)\n", - "Requirement already satisfied: pillow>=6.2.0 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (10.0.0)\n", - "Requirement already satisfied: importlib-resources>=3.2.0 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (6.0.0)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (2.8.2)\n", - "Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (3.0.9)\n", - "Requirement already satisfied: packaging>=20.0 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (23.1)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (1.1.0)\n", - "Requirement already satisfied: numpy>=1.20 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (1.25.1)\n", - "Requirement already satisfied: zipp>=3.1.0 in /home/vscode/.local/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib) (3.16.2)\n", - "Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.9/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n", - "\n", - "Figure(1200x600)\n", - "\n", - "Figure(1200x600)\n", + "Figure(1400x700)\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\n", - "Great! The code executed successfully, and the chart of the stock price change YTD for META and TESLA has been saved as \"stock_price_ytd.png\" in the same directory where the script is located. You can now view the chart by opening the \"stock_price_ytd.png\" file.\n", + "The chart of the stock price changes YTD for META and TESLA has been successfully plotted and saved as `stock_price_ytd.png` in your current directory. You can view this image file to see the visual comparison of the stock performance for both companies since the start of the year.\n", + "\n", + "If you have any more questions or need further assistance, feel free to ask. Otherwise, we have completed the task.\n", "\n", "TERMINATE\n", "\n", @@ -435,12 +357,33 @@ ], "source": [ "# followup of the previous question\n", - "user_proxy.send(\n", + "chat_res = user_proxy.send(\n", " recipient=assistant,\n", " message=\"\"\"Plot a chart of their stock price change YTD and save to stock_price_ytd.png.\"\"\",\n", ")" ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Chat history: [{'content': 'What date is today? Compare the year-to-date gain for META and TESLA.', 'role': 'assistant'}, {'content': \"To get the current date, we can use Python's `datetime` module. After that, we will need to retrieve the year-to-date (YTD) gain for both META (Meta Platforms, Inc.) and TESLA (Tesla, Inc.). We can do this by fetching the stock prices from the beginning of the year and the current stock prices, then calculating the percentage change.\\n\\nFirst, let's write a Python script to get the current date:\\n\\n```python\\n# filename: get_current_date.py\\n\\nfrom datetime import datetime\\n\\n# Get the current date\\ncurrent_date = datetime.now()\\n\\n# Print the current date in YYYY-MM-DD format\\nprint(current_date.strftime('%Y-%m-%d'))\\n```\\n\\nPlease save the above code in a file named `get_current_date.py` and execute it to get today's date. After that, we will proceed to the next step of fetching the stock data.\", 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\n2024-02-05\\n', 'role': 'assistant'}, {'content': 'Great, today\\'s date is 2024-02-05. Now, let\\'s proceed to fetch the stock data for META and TESLA to compare their year-to-date gains.\\n\\nWe will use Python to fetch the stock data. For this purpose, we can use the `yfinance` library, which allows us to retrieve historical market data from Yahoo Finance. If `yfinance` is not installed, you will need to install it using `pip install yfinance`.\\n\\nHere\\'s the Python script to fetch the YTD stock data for META and TESLA and calculate their gains:\\n\\n```python\\n# filename: compare_ytd_gains.py\\n\\nimport yfinance as yf\\nfrom datetime import datetime\\n\\n# Define the tickers for Meta Platforms, Inc. and Tesla, Inc.\\ntickers = [\"META\", \"TSLA\"]\\n\\n# Define the start of the year\\nstart_of_year = datetime(datetime.now().year, 1, 1)\\n\\n# Fetch the historical data from the start of the year to the current date\\nmeta_data = yf.download(tickers[0], start=start_of_year, end=datetime.now())\\ntesla_data = yf.download(tickers[1], start=start_of_year, end=datetime.now())\\n\\n# Calculate the YTD gain for each stock\\nmeta_ytd_gain = ((meta_data[\\'Close\\'][-1] - meta_data[\\'Close\\'][0]) / meta_data[\\'Close\\'][0]) * 100\\ntesla_ytd_gain = ((tesla_data[\\'Close\\'][-1] - tesla_data[\\'Close\\'][0]) / tesla_data[\\'Close\\'][0]) * 100\\n\\n# Print the YTD gains\\nprint(f\"META YTD Gain: {meta_ytd_gain:.2f}%\")\\nprint(f\"TESLA YTD Gain: {tesla_ytd_gain:.2f}%\")\\n\\n# Compare the YTD gains\\nif meta_ytd_gain > tesla_ytd_gain:\\n print(\"META has a higher YTD gain than TESLA.\")\\nelif meta_ytd_gain < tesla_ytd_gain:\\n print(\"TESLA has a higher YTD gain than META.\")\\nelse:\\n print(\"META and TESLA have the same YTD gain.\")\\n```\\n\\nPlease save the above code in a file named `compare_ytd_gains.py` and execute it. The script will output the YTD gains for both META and TESLA and indicate which one is higher.', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nMETA YTD Gain: 37.17%\\nTESLA YTD Gain: -24.36%\\nMETA has a higher YTD gain than TESLA.\\n', 'role': 'assistant'}, {'content': 'The year-to-date (YTD) gain for META (Meta Platforms, Inc.) is 37.17%, while the YTD gain for TESLA (Tesla, Inc.) is -24.36%. This means that so far this year, META has had a higher gain compared to TESLA.\\n\\nIf you need further assistance or have more questions, feel free to ask. Otherwise, if everything is done, please let me know.\\n\\nTERMINATE', 'role': 'user'}, {'content': 'Plot a chart of their stock price change YTD and save to stock_price_ytd.png.', 'role': 'assistant'}, {'content': 'To plot a chart of the stock price changes YTD for META and TESLA and save it to a file named `stock_price_ytd.png`, we will use Python with the `matplotlib` library for plotting and `yfinance` to fetch the stock data.\\n\\nIf `matplotlib` is not installed, you will need to install it using `pip install matplotlib`.\\n\\nHere\\'s the Python script to plot the chart and save it:\\n\\n```python\\n# filename: plot_stock_price_ytd.py\\n\\nimport yfinance as yf\\nimport matplotlib.pyplot as plt\\nfrom datetime import datetime\\n\\n# Define the tickers for Meta Platforms, Inc. and Tesla, Inc.\\ntickers = [\"META\", \"TSLA\"]\\n\\n# Define the start of the year\\nstart_of_year = datetime(datetime.now().year, 1, 1)\\n\\n# Fetch the historical data from the start of the year to the current date\\nmeta_data = yf.download(tickers[0], start=start_of_year, end=datetime.now())\\ntesla_data = yf.download(tickers[1], start=start_of_year, end=datetime.now())\\n\\n# Normalize the data to compare the percentage change from the start of the year\\nmeta_normalized = (meta_data[\\'Close\\'] / meta_data[\\'Close\\'].iloc[0]) * 100\\ntesla_normalized = (tesla_data[\\'Close\\'] / tesla_data[\\'Close\\'].iloc[0]) * 100\\n\\n# Plot the data\\nplt.figure(figsize=(14, 7))\\nplt.plot(meta_normalized, label=\\'META YTD\\', color=\\'blue\\')\\nplt.plot(tesla_normalized, label=\\'TESLA YTD\\', color=\\'orange\\')\\n\\n# Add titles and labels\\nplt.title(\\'Stock Price Change YTD for META and TESLA\\')\\nplt.xlabel(\\'Date\\')\\nplt.ylabel(\\'Normalized Price (Base 100)\\')\\nplt.legend()\\n\\n# Save the plot to a file\\nplt.savefig(\\'stock_price_ytd.png\\')\\nplt.show()\\n```\\n\\nPlease save the above code in a file named `plot_stock_price_ytd.py` and execute it. The script will display a chart of the stock price changes YTD for META and TESLA and save the chart as `stock_price_ytd.png` in the current directory.', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nFigure(1400x700)\\n', 'role': 'assistant'}, {'content': 'The chart of the stock price changes YTD for META and TESLA has been successfully plotted and saved as `stock_price_ytd.png` in your current directory. You can view this image file to see the visual comparison of the stock performance for both companies since the start of the year.\\n\\nIf you have any more questions or need further assistance, feel free to ask. Otherwise, we have completed the task.\\n\\nTERMINATE', 'role': 'user'}]\n", + "Summary: None\n", + "Cost info: ({'total_cost': 0.28146, 'gpt-4': {'cost': 0.28146, 'prompt_tokens': 6642, 'completion_tokens': 1370, 'total_tokens': 8012}}, {'total_cost': 0})\n" + ] + } + ], + "source": [ + "print(\"Chat history:\", chat_res.chat_history)\n", + "print(\"Summary:\", chat_res.summary)\n", + "print(\"Cost info:\", chat_res.cost)" + ] + }, { "attachments": {}, "cell_type": "markdown", @@ -451,19 +394,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABLAAAAJYCAYAAABy5h8aAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hUZdrH8e+k9wQCIRDS6CV06SJgARQRUETBAmIXVl3Luuja67qvdVXUBUEFRFFUVCyA9N4JvQVCS0JJ78mc94/DDMQESJlkkvD7XNdc5+SU59yTREzuPPf9WAzDMBAREREREREREammXJwdgIiIiIiIiIiIyIUogSUiIiIiIiIiItWaElgiIiIiIiIiIlKtKYElIiIiIiIiIiLVmhJYIiIiIiIiIiJSrSmBJSIiIiIiIiIi1ZoSWCIiIiIiIiIiUq0pgSUiIiIiIiIiItWaElgiIiIiIiIiIlKtKYElIiIiIiIiIiLVmhJYIiIiIiIiIiJSrSmBJSIiIiIiIiIi1ZoSWCIiIiIiIiIiUq0pgSUiIiIiIiIiItWaElgiIiIiIiIiIlKtKYElIiIiIiIiIiLVmhJYIiIiIiIiIiJSrSmBJSIiIiIiIiIi1ZoSWCIiIiIiIiIiUq0pgSUiIiIiIiIiItWaElgiIiIiIiIiIlKtKYElIiIiIiIiIiLVmhJYIiIiIiIiIiJSrSmBJSIiIiIiIiIi1ZoSWCIiIiIiIiIiUq0pgSUiIiIiIiIiItWaElgiIiIiIiIiIlKtKYElIiIiIiIiIiLVmhJYIiIiIiIiIiJSrSmBJSIiIiIiIiIi1ZoSWCIiIiIiIiIiUq0pgSUiIiIiIiIiItWaElgiIiIiIiIiIlKtKYElIiIiIiIiIiLVmhJYIiIiIiIiIiJSrSmBJSIiIiIiIiIi1ZoSWCIiIiIiIiIiUq0pgSUiIiIiIiIiItWaElgiIiIiIiIiIlKtKYElIiIiIiIiIiLVmhJYIiIiIiIiIiJSrSmBJSIiIiIiIiIi1ZoSWCIiIiIiIiIiUq0pgSUiIiIiIiIiItWaElgiIiIiIiIiIlKtKYElIiIiIiIiIiLVmhJYIiIiIiIiIiJSrSmBJSIiIiIiIiIi1ZoSWCIiIiIiIiIiUq0pgSUiIlIBixcvxmKx8O233zrl+dOmTcNisXDw4EGnPL80+vXrR0xMjLPDuGRlZGRwzz33EBoaisVi4dFHH3V2SPIXFouFF154wdlhiIiIVGtKYImISI0TGxvLiBEjiIyMxMvLi7CwMK655hr++9//Frnutdde44cffnBOkKVw8OBBLBaL/eXq6kpERATDhw9n8+bNzg7votLS0njxxRfp0KEDfn5+eHt7ExMTw1NPPcWxY8ecHV6VyM/Pp127djRt2pTs7Oxi5w8ePIiPjw8333xzka/1hV6LFy8u9r3h7u5OvXr16NWrF08//TTx8fGljvG1115j2rRpPPjgg3z55ZfccccdjvwUFBMVFYXFYuHqq68u8fz//vc/+/tav369/fgLL7xwwc9LQkIC/fr1K9Xn8Nxk0M6dO7FYLHh5eZGSklKp772ylPV9274GJb0GDRpUZOzly5dz7bXXEhYWhpeXFxEREQwZMoSZM2cWuc5isTBhwoRSx/zRRx9hsVjo3r17hd+/iIgIgJuzAxARESmLlStX0r9/fyIiIrj33nsJDQ3l8OHDrF69mvfee4+//e1v9mtfe+01RowYwbBhw5wXcCmMGjWK6667jsLCQnbu3MmkSZP49ddfWb16NR07drzgvXfccQe33nornp6eVRPsGQcOHODqq68mPj6em2++mfvuuw8PDw+2bt3KlClT+P7779mzZ0+VxuQM7u7ufPrpp/Tu3ZuXX36Z1157rcj5CRMm4OHhwfvvv8/QoUOLnPviiy+YP38+X375ZZHjrVu3tifDbN8bVquV5ORk1q1bx7vvvst7773HlClTuPXWWy8a459//kmPHj14/vnnK/huS8/Ly4tFixaRkJBAaGhokXMzZszAy8uLnJycEu+dNGkSfn5+xY4HBQXxzDPPcM8999iPrVu3jvfff5+nn36a1q1b24+3b9/evj99+nRCQ0NJTk7m22+/LXJ/TVGe992xY0cef/zxYmM1atTIvj979mxuueUWOnbsyCOPPEKdOnWIi4tj6dKl/O9//2P06NHljnnGjBlERUWxdu1a9u3bR7Nmzco9loiICACGiIhIDXLdddcZ9evXN5KTk4udS0xMLPKxr6+vMWbMmEqNZ9GiRQZgzJ49u8z3xsXFGYDxn//8p8jxuXPnGoBx3333nffejIyMMj/PUfLz840OHToYPj4+xrJly4qdT01NNZ5++mn7x3379jXatm1blSFWuQcffNBwd3c3tm3bZj/27bffGoDx0UcflXjP+PHjjfP9KHa+7w3DMIyDBw8aLVq0MDw8PIzNmzdfNLbo6Ghj8ODBpXwnF5efn2/k5uae93xkZKRx1VVXGQEBAca7775b5Nzhw4cNFxcX46abbjIAY926dfZzzz//vAEYJ06cKHUss2fPNgBj0aJFJZ63Wq1GVFSU8dhjjxnDhw83+vXrV+qxqxJgPP/886W+/mLvOzIyslRf8zZt2hht27Yt8ev5139PAWP8+PGliu/AgQMGYMyZM8eoX7++8cILL5TqPhERkQtRCaGIiNQo+/fvp23btgQFBRU7FxISYt+3WCxkZmby+eef20tnxo4daz+/adMmrr32WgICAvDz8+Oqq65i9erVxcZMSUnh73//O1FRUXh6etK4cWPuvPNOTp48ed4Yc3Nzuf766wkMDGTlypVlfo9XXnklAHFxccDZPldLlizhoYceIiQkhMaNGxc599ceWL/++it9+/bF39+fgIAAunbtWqwkaM2aNQwaNIjAwEB8fHzo27cvK1asuGh83333HVu2bOGZZ57h8ssvL3Y+ICCAV199tdjxHTt20L9/f3x8fAgLC+PNN98scj4vL4/nnnuOLl26EBgYiK+vL3369GHRokVFrrOV1/3f//0fn376KU2bNsXT05OuXbuybt26Ys+dPXs2bdq0wcvLi5iYGL7//nvGjh1LVFRUkeusVivvvvsubdu2xcvLiwYNGnD//feTnJx80c/J66+/Tr169XjggQcwDIOMjAweffRRevbsyQMPPHDR+8siMjKSadOmkZeXV+xzeC5bf7a4uDh++eUX+38Htu+VpKQk7r77bho0aICXlxcdOnTg888/LzLGuZ/rd9991/653rFjxwVj9PLy4sYbbyz2PffVV19Rp04dBg4cWL43X0YrVqzg4MGD3Hrrrdx6660sXbqUI0eOlOrerVu3MnbsWJo0aYKXlxehoaGMGzeOU6dOFbnOVvq4b98+xo4dS1BQEIGBgdx1111kZWUVuTY3N5e///3v1K9fH39/f2644YZSx1MZ9u/fT9euXfHw8Ch27tx/T8tqxowZ1KlTh8GDBzNixAhmzJhRkTBFREQAlRCKiEgNExkZyapVq9i2bdsFG4N/+eWX3HPPPXTr1o377rsPgKZNmwKwfft2+vTpQ0BAAP/4xz9wd3fnk08+oV+/fixZssTesyUjI4M+ffqwc+dOxo0bR+fOnTl58iRz587lyJEj1KtXr9hzs7OzGTp0KOvXr2fBggV07dq1zO9x//79AAQHBxc5/tBDD1G/fn2ee+45MjMzz3v/tGnTGDduHG3btmXixIkEBQWxadMmfvvtN3tJ0J9//sm1115Lly5deP7553FxcWHq1KlceeWVLFu2jG7dup13/Llz5wKUqZdScnIygwYN4sYbb2TkyJF8++23PPXUU7Rr145rr70WMHtqTZ48mVGjRnHvvfeSnp7OlClTGDhwIGvXri1WTjlz5kzS09O5//77sVgsvPnmm9x4440cOHAAd3d3AH755RduueUW2rVrx+uvv05ycjJ33303YWFhxWK8//77mTZtGnfddRcPP/wwcXFxfPDBB2zatIkVK1bYxyxJYGAg77//PjfffDOTJ09mx44dJCYm8uuvv2KxWEr9eSqtnj170rRpU+bPn3/ea1q3bs2XX37J3//+dxo3bmwvJ6tfvz7Z2dn069ePffv2MWHCBKKjo5k9ezZjx44lJSWFRx55pMhYU6dOJScnh/vuuw9PT0/q1q170RhHjx7NgAED2L9/v/2/vZkzZzJixIgLfi5Pnz5d7Jibm1uJSeuLmTFjBk2bNqVr167ExMTg4+PDV199xZNPPnnRe+fPn8+BAwe46667CA0NZfv27Xz66ads376d1atXF/u6jhw5kujoaF5//XU2btzI5MmTCQkJ4d///rf9mnvuuYfp06czevRoevXqxZ9//sngwYPL/L5KIz8/v8REu6+vL97e3oD57+nChQs5cuSIPSnuCDNmzODGG2/Ew8ODUaNGMWnSJNatW1eufw9FRETsnD0FTEREpCz++OMPw9XV1XB1dTV69uxp/OMf/zB+//13Iy8vr9i15yshHDZsmOHh4WHs37/ffuzYsWOGv7+/ccUVV9iPPffcc/YymL+yWq2GYRQtIUxPTzf69u1r1KtXz9i0adNF34utTOzFF180Tpw4YSQkJBiLFy82OnXqZADGd999ZxiGYUydOtUAjMsvv9woKCgoMobtXFxcnGEYhpGSkmL4+/sb3bt3N7Kzs0uM2Wq1Gs2bNzcGDhxoP2YYhpGVlWVER0cb11xzzQXj7tSpkxEYGHjR92fTt29fAzC++OIL+7Hc3FwjNDTUuOmmm+zHCgoKipUyJScnGw0aNDDGjRtnP2b7vAUHBxunT5+2H//xxx8NwPjpp5/sx9q1a2c0btzYSE9Ptx9bvHixARiRkZH2Y8uWLTMAY8aMGUWe/9tvv5V4/Hyuv/56IzAw0HB1dTUmTpx4wWvLW0JoM3ToUAMwUlNTL/icksrJ3n33XQMwpk+fbj+Wl5dn9OzZ0/Dz8zPS0tKKxBEQEGAkJSVd8Dl/fV5BQYERGhpqvPzyy4ZhGMaOHTsMwFiyZIn9+7akEsKSXi1btizxWRcqpcvLyzOCg4ONZ555xn5s9OjRRocOHUr1PrKysood++qrrwzAWLp0abG4z/0eNQzDGD58uBEcHGz/ePPmzQZgPPTQQ0WuGz16dKWUEJ7vc/n666/br5syZYoBGB4eHkb//v2NZ5991li2bJlRWFhYbExKWUK4fv16AzDmz59vGIb5703jxo2NRx55pNTvT0REpCQqIRQRkRrlmmuuYdWqVdxwww1s2bKFN998k4EDBxIWFmafGXQhhYWF/PHHHwwbNowmTZrYjzds2JDRo0ezfPly0tLSALNUrkOHDgwfPrzYOH+dfZGamsqAAQPYtWsXixcvvmjz9XM9//zz1K9fn9DQUPr168f+/fv597//zY033ljkunvvvRdXV9cLjjV//nzS09P55z//iZeXV4kxb968mb179zJ69GhOnTrFyZMnOXnyJJmZmVx11VUsXboUq9V63mekpaXh7+9f6vcH4Ofnx+23327/2MPDg27dunHgwAH7MVdXV3spk9Vq5fTp0xQUFHDZZZexcePGYmPecsst1KlTx/5xnz59AOxjHjt2jNjYWO68884iTcH79u1Lu3btiow1e/ZsAgMDueaaa+yfj5MnT9KlSxf8/PyKlTGez4cffkheXh7h4eE8++yzpbqnvGzvKT09vcz3zps3j9DQUEaNGmU/5u7uzsMPP0xGRgZLliwpcv1NN91E/fr1y/QMV1dXRo4cyVdffQWYs3LCw8PtX6fz+e6775g/f36R19SpU8v0bDDLaE+dOlXkPY4aNYotW7awffv2i95vm6UEkJOTw8mTJ+nRowdAid+Pfy0V7dOnD6dOnbL/ezJv3jwAHn744SLXPfroo6V7Q2XUvXv3Yp/H+fPnF/l8jBs3jt9++41+/fqxfPlyXn75Zfr06UPz5s3LVf4M5te5QYMG9O/fHzD/3bnllluYNWsWhYWFDnlvIiJyaVIJoYiI1Dhdu3Zlzpw55OXlsWXLFr7//nveeecdRowYwebNm2nTps157z1x4gRZWVm0bNmy2LnWrVtjtVo5fPgwbdu2Zf/+/dx0002liunRRx8lJyeHTZs20bZt2zK9n/vuu4+bb74ZFxcXgoKCaNu2bYmrCkZHR190LFv54YXKK/fu3QvAmDFjzntNampqkeTQuQICAooknkqjcePGxZJ+derUYevWrUWOff7557z11lvs2rWL/Px8+/GS3ntERESx8QB7z6pDhw4BlLj6WbNmzYokIfbu3Utqaup5+/4kJSWd9739NaaQkBDatm1bJAFSGTIyMgDKnEwE83PTvHlzXFyK/i3TtqKd7XNnU5rvvZKMHj2a999/ny1btjBz5kxuvfXWi5ZUXnHFFSWW55bV9OnTiY6OxtPTk3379gFmGbGPjw8zZswotmLkX50+fZoXX3yRWbNmFfv6p6amFrv+Qt+PAQEBHDp0CBcXF3s5pU1J/xY5Qr169bj66qsvet3AgQMZOHAgWVlZbNiwga+//pqPP/6Y66+/nl27dpWpF1ZhYSGzZs2if//+9h5+YCbT3nrrLRYuXMiAAQPK9X5ERESUwBIRkRrLw8ODrl270rVrV1q0aMFdd93F7Nmzef7556s8lqFDhzJr1izeeOMNvvjii2KJgQtp3rx5qX7RdFRCxDa76j//+c95Z4qdO2Ppr1q1asWmTZs4fPgw4eHhpXrm+WaOGYZh358+fTpjx45l2LBhPPnkk4SEhODq6srrr79uT8yVdczSslqthISEnLfZdFlnH1WFbdu2ERISQkBAQKU/q7zfe927d6dp06Y8+uijxMXF2XuwVba0tDR++ukncnJyaN68ebHzM2fO5NVXX71gMm3kyJGsXLmSJ598ko4dO+Ln54fVamXQoEElzlB05PejM/j4+NCnTx/69OlDvXr1ePHFF/n1118vmOj+qz///JPjx48za9YsZs2aVez8jBkzlMASEZFyUwJLRERqhcsuuwyA48eP24+V9Mtp/fr18fHxYffu3cXO7dq1CxcXF3tSpmnTpmzbtq1Uzx82bBgDBgxg7Nix+Pv7M2nSpPK8jQqzze7Ytm1biTOPzr0mICCgVImzvxoyZAhfffUV06dPZ+LEieUP9i++/fZbmjRpwpw5c4p87cqbkIyMjASwz74511+PNW3alAULFtC7d+9KnznlCKtWrWL//v1FyjLLIjIykq1bt2K1WoskW3ft2mU/7yijRo3ilVdeoXXr1mUqra2IOXPmkJOTw6RJk4rN5tq9ezf/+te/WLFiRYmraII5a2rhwoW8+OKLPPfcc/bjttmL5REZGYnVamX//v1FZl2V9G+Rs5X072lpzJgxg5CQED788MNi5+bMmcP333/Pxx9/XCP+GxMRkepHPbBERKRGWbRoUYkzGmz9Zc79xdDX15eUlJQi17m6ujJgwAB+/PFHDh48aD+emJjIzJkzufzyy+0zWm666SZ7ieJflRTDnXfeyfvvv8/HH3/MU089VZ63V2EDBgzA39+f119/nZycnCLnbDF36dKFpk2b8n//93/2MrRznThx4oLPGDFiBO3atePVV19l1apVxc6np6fzzDPPlDl22wyWcz+3a9asKfEZpdGoUSNiYmL44osvirzPJUuWEBsbW+TakSNHUlhYyMsvv1xsnIKCgmLfR8506NAhxo4di4eHR6lW0yvJddddR0JCAl9//bX9WEFBAf/973/x8/Ojb9++jgqXe+65h+eff5633nrLYWNezPTp02nSpAkPPPAAI0aMKPJ64okn8PPzO+9sOyj5exHg3XffLXdMttU233//fYeNWVELFy4s8XhJ/55eTHZ2NnPmzOH6668v9jkfMWIEEyZMID09vVS9CkVEREqiGVgiIlKj/O1vfyMrK4vhw4fTqlUr8vLyWLlyJV9//TVRUVHcdddd9mu7dOnCggULePvtt2nUqBHR0dF0796dV155hfnz53P55Zfz0EMP4ebmxieffEJubi5vvvmm/f4nn3ySb7/9lptvvplx48bRpUsXTp8+zdy5c/n444/p0KFDsfgmTJhAWloazzzzDIGBgTz99NNV8nmxCQgI4J133uGee+6ha9eujB49mjp16rBlyxaysrL4/PPPcXFxYfLkyVx77bW0bduWu+66i7CwMI4ePcqiRYsICAjgp59+Ou8z3N3dmTNnDldffTVXXHEFI0eOpHfv3ri7u7N9+3ZmzpxJnTp1ePXVV8sU+/XXX8+cOXMYPnw4gwcPJi4ujo8//pg2bdqUmGgrjddee42hQ4fSu3dv7rrrLpKTk/nggw+IiYkpMmbfvn25//77ef3119m8eTMDBgzA3d2dvXv3Mnv2bN577z1GjBhRrhgqYuPGjUyfPh2r1UpKSgrr1q3ju+++w2Kx8OWXX9K+fftyjXvffffxySefMHbsWDZs2EBUVBTffvstK1as4N133y1XX63ziYyM5IUXXij19d9++22JJazXXHMNDRo0uOj9x44dY9GiRcWapdt4enoycOBAZs+ezfvvv4+7u3uxawICArjiiit48803yc/PJywsjD/++KNIX6ey6tixI6NGjeKjjz4iNTWVXr16sXDhwhJnCDrC0aNHmT59erHjfn5+DBs2DDBLn6OjoxkyZAhNmzYlMzOTBQsW8NNPP9G1a1eGDBlS5N7169fzyiuvFBuzX79+HD16lPT0dG644YYS4+nRowf169dnxowZ3HLLLRV/gyIiculx3gKIIiIiZffrr78a48aNM1q1amX4+fkZHh4eRrNmzYy//e1vRmJiYpFrd+3aZVxxxRWGt7e3ARhjxoyxn9u4caMxcOBAw8/Pz/Dx8TH69+9vrFy5stjzTp06ZUyYMMEICwszPDw8jMaNGxtjxowxTp48aRiGYSxatMgAjNmzZxe57x//+IcBGB988MF530tcXJwBGP/5z38u+J6nTp1qAMa6devOey4uLq7I8blz5xq9evUyvL29jYCAAKNbt27GV199VeSaTZs2GTfeeKMRHBxseHp6GpGRkcbIkSONhQsXXjAem+TkZOO5554z2rVrZ/j4+BheXl5GTEyMMXHiROP48eP26/r27Wu0bdu22P1jxowxIiMj7R9brVbjtddeMyIjIw1PT0+jU6dOxs8//1zsugt93gDj+eefL3Js1qxZRqtWrQxPT08jJibGmDt3rnHTTTcZrVq1Knb/p59+anTp0sXw9vY2/P39jXbt2hn/+Mc/jGPHjpXqc2IYhhEZGWkMHjz4oteNHz/eON+PYrb3aHu5ubkZdevWNbp3725MnDjROHToUIXjSUxMNO666y6jXr16hoeHh9GuXTtj6tSpJcZxse/R0jzvXCV9Tz///PNF3vNfX4sWLSo2zuzZs4ude+uttwzggt/H06ZNMwDjxx9/PO81R44cMYYPH24EBQUZgYGBxs0332wcO3as2PeYLe4TJ06U+B7P/W8zOzvbePjhh43g4GDD19fXGDJkiHH48OESv28vpKT3fa7IyMjzfh7P/W/pq6++Mm699VajadOmhre3t+Hl5WW0adPGeOaZZ4y0tLQiY17oa/Pyyy8bQ4YMMby8vIzMzMzzxj127FjD3d3d/u+niIhIWVgMo4Z0lhQRERFxkI4dO1K/fn3mz5/v7FBEREREpBTUA0tERERqrfz8fAoKCoocW7x4MVu2bKFfv37OCUpEREREykwzsERERKTWOnjwIFdffTW33347jRo1YteuXXz88ccEBgaybds2goODnR2iiIiIiJSCmriLiIhIrVWnTh26dOnC5MmTOXHiBL6+vgwePJg33nhDySsRERGRGkQzsEREREREREREpFpTDywREREREREREanWlMASEREREREREZFqTT2wxOGsVivHjh3D398fi8Xi7HBERERERESkljMMg/T0dBo1aoSLi+bq1EZKYInDHTt2jPDwcGeHISIiIiIiIpeYw4cP07hxY2eHIZVACSxxOH9/f8D8hyMgIMDJ0YiIiIiIiEhtl5aWRnh4uP33Ual9lMASh7OVDQYEBCiBJSIiIiIiIlVGbWxqLxWGioiIiIiIiIhItaYEloiIiIiIiIiIVGtKYImIiIiIiIiISLWmHljiNIWFheTn5zs7DBE7Dw8PLbkrIiIiIiJSDSmBJVXOMAwSEhJISUlxdigiRbi4uBAdHY2Hh4ezQxEREREREZFzKIElVc6WvAoJCcHHx0erREi1YLVaOXbsGMePHyciIkLflyIiIiIiItWIElhSpQoLC+3Jq+DgYGeHI1JE/fr1OXbsGAUFBbi7uzs7HBERERERETlDzV6kStl6Xvn4+Dg5EpHibKWDhYWFTo5EREREREREzqUEljiFyrOkOtL3pYiIiIiISPWkBJaIiIiIiIiIiFRrSmCJ1DKnTp0iJCSEgwcPOjsUAPr168ejjz5a6c+Jiori3XffPe/5W2+9lbfeeqvS4xARERERERHHUwJLpBTGjh2LxWLhgQceKHZu/PjxWCwWxo4dW+z6v74GDRrE4sWLSzx37mvx4sUAHDlyBA8PD2JiYkod66uvvsrQoUOJiooC4ODBgyU+4/bbb6/Ip6TG+de//sWrr75Kamqqs0MRERERERGRMtIqhCKlFB4ezqxZs3jnnXfw9vYGICcnh5kzZxIREVHs+kGDBjF16tQixzw9PfH19eX48eP2Y4888ghpaWlFrq1bty4A06ZNY+TIkSxdupQ1a9bQvXv3C8aYlZXFlClT+P3334udW7BgAW3btrV/bHsPl4qYmBiaNm3K9OnTGT9+vLPDERERERERkTLQDCyRUurcuTPh4eHMmTPHfmzOnDlERETQqVOnYtd7enoSGhpa5FWnTh08PDyKHPP29i52rYeHB4ZhMHXqVO644w5Gjx7NlClTLhrjvHnz8PT0pEePHsXOBQcHF3lGYGAg+/fvZ+jQoTRo0AA/Pz+6du3KggULityXm5vLU089RXh4OJ6enjRr1qxILNu2bePaa6/Fz8+PBg0acMcdd3Dy5MkiYxQUFDBhwgQCAwOpV68ezz77LIZh2M8nJydz5513UqdOHXx8fLj22mvZu3dvkTG+++472rZti6enJ1FRURctB5w8eTJBQUEsXLjQfmzIkCHMmjXrop9HERERERERqV6UwBKnMwyDrLyCKn+dm0AprXHjxhWZKfXZZ59x1113OfLTYbdo0SKysrK4+uqruf3225k1axaZmZkXvGfZsmV06dKl1M/IyMjguuuuY+HChWzatIlBgwYxZMgQ4uPj7dfceeedfPXVV7z//vvs3LmTTz75BD8/PwBSUlK48sor6dSpE+vXr+e3334jMTGRkSNHFnnO559/jpubG2vXruW9997j7bffZvLkyfbzY8eOZf369cydO5dVq1ZhGAbXXXcd+fn5AGzYsIGRI0dy6623EhsbywsvvMCzzz7LtGnTSnxfb775Jv/85z/5448/uOqqq+zHu3Xrxtq1a8nNzS3150hEREREREScTyWE4nTZ+YW0ea54yVtl2/HSQHw8yvafwO23387EiRM5dOgQACtWrGDWrFn2nlXn+vnnn+2JHpunn36ap59+ulTPmjJlCrfeeiuurq7ExMTQpEkTZs+eXaTX1l8dOnSIRo0alXiuV69euLiczVkvW7aMTp060aFDB/uxl19+me+//565c+cyYcIE9uzZwzfffMP8+fO5+uqrAWjSpIn9+g8++IBOnTrx2muv2Y999tlnhIeHs2fPHlq0aAGY5ZfvvPMOFouFli1bEhsbyzvvvMO9997L3r17mTt3LitWrKBXr14AzJgxg/DwcH744Qduvvlm3n77ba666iqeffZZAFq0aMGOHTv4z3/+U+zz8dRTT/Hll1+yZMmSIiWTAI0aNSIvL4+EhAQiIyPP+3kUERERERGR6kUJLJEyqF+/PoMHD2batGkYhsHgwYOpV69eidf279+fSZMmFTlm6211MSkpKcyZM4fly5fbj91+++1MmTLlggms7OxsvLy8Sjz39ddf07p1a/vH4eHhZGRk8MILL/DLL79w/PhxCgoKyM7Ots/A2rx5M66urvTt27fEMbds2cKiRYuKJeoA9u/fb09g9ejRA4vFYj/Xs2dP3nrrLQoLC9m5cydubm5F+nsFBwfTsmVLdu7cCcDOnTsZOnRokfF79+7Nu+++S2FhIa6urgC89dZbZGZmsn79+iKJNhtb36+srKwS34+IiIiIVB7DMIr8TCgiUhZKYInTebu7suOlgU55bnmMGzeOCRMmAPDhhx+e9zpfX1+aNWtWrmfMnDmTnJycIkkdwzCwWq1FZjb9Vb169UhOTi7xXHh4eLF4HnnkEebPn8///d//0axZM7y9vRkxYgR5eXnAxRu9Z2RkMGTIEP79738XO9ewYcML3lsZ+vTpwy+//MI333zDP//5z2LnT58+DZiJSBERERGpOhNmbmTrkVSm392diGAfZ4cjIjWQEljidBaLpcylfM40aNAg8vLysFgsDBxYOYm3KVOm8PjjjxebbfXQQw/x2Wef8cYbb5R4X6dOnZg+fXqpn7NixQrGjh3L8OHDATMhdfDgQfv5du3aYbVaWbJkib2E8FydO3fmu+++IyoqCje3838N16xZU+Tj1atX07x5c1xdXWndujUFBQWsWbPGXkJ46tQpdu/eTZs2bQBo3bo1K1asKBZ7ixYt7LOvwOxxNWHCBAYNGoSbmxtPPPFEkXu2bdtG48aNzztrTkREREQcL7/Qyq/bEii0Gtz35XrmPNSrRv38LyLVg5q4i5SRq6srO3fuZMeOHUWSJ3+Vm5tLQkJCkddfV+cryebNm9m4cSP33HMPMTExRV6jRo3i888/p6CgoMR7Bw4cyPbt2887C+uvmjdvzpw5c9i8eTNbtmxh9OjRWK1W+/moqCjGjBnDuHHj+OGHH4iLi2Px4sV88803AIwfP57Tp08zatQo1q1bx/79+/n999+56667KCwstI8THx/PY489xu7du/nqq6/473//yyOPPGKPYejQodx7770sX76cLVu2cPvttxMWFmYvG3z88cdZuHAhL7/8Mnv27OHzzz/ngw8+KJagArPX17x583jxxRd59913i5xbtmwZAwYMKNXnRkREREQc43hKDoVWcwGlXQnpPDl7a7kWVBKRS5sSWCLlEBAQQEBAwAWv+e2332jYsGGR1+WX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RApyYesvJU9sZn37XPM0KxV+esCsD3gIWg92S4giIiIiIiIi9ZkSWCJbfzGN2SObQ58/m22//AMcxfDjvZCXDvFdTQJLRERERERERGqdElgiG743y05j4ML/g8AIOJBkZhzcMh18/OHyd8DHz51RioiIiIiIiNRbSmBJ/VaQC1tmmPWOYyA4CgY8bJ5vLdk+6O8Q19Et4YmIiIiIiIiIElhS3x0/fLBxd7Ot923QINGsN+0N/f/ivvhERERERERERAksqeeOHz5os5l13wC48gPodg384QOw+7grOhEREREREREBfN0dgIjbnDh88HhNe5qHiIiIiIiIiLidKrCk/qpo+KCIiIiIiIiIeBwlsKT+qmj4oIiIiIiIiIh4HCWwpH6yLDiy06yfOHxQRERERERERDyKemBJ/WSzwe3zIG0zNGzn7mhERERERERE5DSUwJL6y2aD2PbujkJEREREREREzkBDCEVERERERERExKMpgSUiIiIiIiIiIh5NCSwREREREREREfFoSmCJiIiIiIiIiIhHUwJLREREREREREQ8mhJYIiIiIiIiIiLi0ZTAEhERERERERERj6YEloiIiIiIiIiIeDQlsOqQBQsWcOmll9K4cWNsNhvff/99uf2WZfHYY4/RqFEjgoKCGDJkCFu3bi13zJEjR7juuusIDw8nMjKScePGkZ2dXYvvQkRERERERESkPCWw6pCcnBy6devGG2+8UeH+5557jldffZW3336bJUuWEBISwrBhw8jLyys95rrrrmP9+vXMnDmTqVOnsmDBAm6//fbaegsiIiIiIiIiIiexWZZluTsIcT2bzcZ3333HmDFjAFN91bhxYx544AEefPBBADIyMoiLi+Ojjz5i7NixbNy4kY4dO7Js2TLOPfdcAKZPn87IkSNJTk6mcePGlbp2ZmYmERERZGRkEB4eXiPvT0RERERERMRJ30PrPlVg1RM7d+4kNTWVIUOGlG6LiIigT58+LF68GIDFixcTGRlZmrwCGDJkCHa7nSVLltR6zCIiIiIiIiIiAL7uDkBqR2pqKgBxcXHltsfFxZXuS01NJTY2ttx+X19foqKiSo+pSH5+Pvn5+aXPMzMzXRW2iIiIiIiIiIgqsKT6JkyYQEREROkjISHB3SGJiIiIiIiISB2iBFY9ER8fD8CBAwfKbT9w4EDpvvj4eA4ePFhuf1FREUeOHCk9piKPPvooGRkZpY+9e/e6OHoRERERERERqc+UwKonEhMTiY+PZ/bs2aXbMjMzWbJkCf369QOgX79+pKens2LFitJj5syZg8PhoE+fPqc8d0BAAOHh4eUeIiIiIiIiIiKuoh5YdUh2djbbtm0rfb5z505Wr15NVFQUzZo147777uNf//oXbdq0ITExkX/+8580bty4dKbCDh06MHz4cG677TbefvttCgsLufvuuxk7dmylZyAUEREREREREXE1JbDqkOXLlzNo0KDS5/fffz8AN910Ex999BEPP/wwOTk53H777aSnp3P++eczffp0AgMDS1/z+eefc/fddzN48GDsdjtXXnklr7766lnFYVkWoGbuIiIiIiIiUjuc3z+d30el7rFZurviYsnJyWrkLiIiIiIiIrVu7969NG3a1N1hSA1QAktczuFwsH//fsLCwrDZbG6NJTMzk4SEBPbu3aveXF5G986z6H54J90376F75b1077yH7pV30n3zXrV97yzLIisri8aNG2O3q913XaQhhOJydrvd4zLeai7vvXTvPIvuh3fSffMeulfeS/fOe+heeSfdN+9Vm/cuIiKiVq4j7qG0pIiIiIiIiIiIeDQlsERERERERERExKMpgSV1WkBAAI8//jgBAQHuDkXOku6dZ9H98E66b95D98p76d55D90r76T75r1078TV1MRdREREREREREQ8miqwRERERERERETEoymBJSIiIiIiIiIiHk0JLBERERERERER8WhKYImIiIiIiIiIiEdTAktq3YQJE+jVqxdhYWHExsYyZswYNm/eXO6YvLw8xo8fT3R0NKGhoVx55ZUcOHCgdP+aNWu45pprSEhIICgoiA4dOvDKK6+UO8evv/7KeeedR3R0NEFBQbRv356XXnrpjPFZlsVjjz1Go0aNCAoKYsiQIWzdurXcMc888wz9+/cnODiYyMjIqn8YXsbb792uXbsYN24ciYmJBAUF0apVKx5//HEKCgqq+cm4h7ffD4DRo0fTrFkzAgMDadSoETfccAP79++vxqfi+erCfXPKz8/nnHPOwWazsXr16rP/MDxcXbhXLVq0wGazlXs8++yz1fhUvENduHcAP/30E3369CEoKIgGDRowZsyYqn0gHszb79W8efNO+jPmfCxbtqyan45n8/Z7B7BlyxYuu+wyYmJiCA8P5/zzz2fu3LnV+FQ8X124bytXruTiiy8mMjKS6Ohobr/9drKzs6vxqYjXsERq2bBhw6wPP/zQSkpKslavXm2NHDnSatasmZWdnV16zB133GElJCRYs2fPtpYvX2717dvX6t+/f+n+Dz74wLrnnnusefPmWdu3b7c+/fRTKygoyHrttddKj1m5cqX1xRdfWElJSdbOnTutTz/91AoODrbeeeed08b37LPPWhEREdb3339vrVmzxho9erSVmJhoHTt2rPSYxx57zJo4caJ1//33WxEREa77cDyct9+7n3/+2br55putGTNmWNu3b7emTJlixcbGWg888ICLP6na4e33w7Isa+LEidbixYutXbt2Wb/99pvVr18/q1+/fi78lDxPXbhvTvfcc481YsQIC7BWrVpV/Q/Hw9SFe9W8eXPrqaeeslJSUkofx8dfV9WFezd58mSrQYMG1ltvvWVt3rzZWr9+vTVp0iQXfkqewdvvVX5+frk/XykpKdatt95qJSYmWg6Hw8Wflmfx9ntnWZbVpk0ba+TIkdaaNWusLVu2WHfddZcVHBxspaSkuPCT8izeft/27dtnNWjQwLrjjjusTZs2WUuXLrX69+9vXXnllS7+pMQTKYElbnfw4EELsObPn29ZlmWlp6dbfn5+1jfffFN6zMaNGy3AWrx48SnPc9ddd1mDBg067bUuv/xy6/rrrz/lfofDYcXHx1vPP/986bb09HQrICDA+vLLL086/sMPP6xXCawTefO9c3ruueesxMTE017bW9SF+zFlyhTLZrNZBQUFp71+XeKt923atGlW+/btrfXr19fZBNaJvPFeNW/e3HrppZfO9NbqPG+7d4WFhVaTJk2s999/v1Lvry7xtnt1ooKCAqthw4bWU089ddpr10Xedu/S0tIswFqwYEHpMZmZmRZgzZw58/Rvtg7xtvv2zjvvWLGxsVZxcXHpMWvXrrUAa+vWrad/s+L1NIRQ3C4jIwOAqKgoAFasWEFhYSFDhgwpPaZ9+/Y0a9aMxYsXn/Y8znNUZNWqVSxatIgLL7zwlMfs3LmT1NTUcteOiIigT58+p712fVUX7t2Zru1NvP1+HDlyhM8//5z+/fvj5+d3ynPXNd543w4cOMBtt93Gp59+SnBw8JnfZB3hjfcK4NlnnyU6Opru3bvz/PPPU1RUdPo3Wgd5271buXIl+/btw2630717dxo1asSIESNISkqq3Bv2Yt52r070ww8/cPjwYW655ZZTnreu8rZ7Fx0dTbt27fjkk0/IycmhqKiId955h9jYWHr27Fm5N10HeNt9y8/Px9/fH7u9LJURFBQEmGGLUrf5ujsAqd8cDgf33Xcf5513Hp07dwYgNTUVf3//k3pLxcXFkZqaWuF5Fi1axKRJk/jpp59O2te0aVPS0tIoKiriiSee4NZbbz1lPM7zx8XFVfra9VVduHfbtm3jtdde44UXXjjleb2FN9+P//u//+P1118nNzeXvn37MnXq1DO+37rCG++bZVncfPPN3HHHHZx77rns2rWrsm/Xq3njvQK455576NGjB1FRUSxatIhHH32UlJQUJk6cWKn3XRd4473bsWMHAE888QQTJ06kRYsWvPjiiwwcOJAtW7bUmf94OZE33qsTffDBBwwbNoymTZue8rx1kTfeO5vNxqxZsxgzZgxhYWHY7XZiY2OZPn06DRo0qPR792beeN8uuugi7r//fp5//nnuvfdecnJyeOSRRwBISUmp3BsXr6UKLHGr8ePHk5SUxFdffVXlcyQlJXHZZZfx+OOPM3To0JP2L1y4kOXLl/P222/z8ssv8+WXXwLw+eefExoaWvpYuHBhlWOoj7z93u3bt4/hw4dz1VVXcdttt1X5PXgKb74fDz30EKtWreKXX37Bx8eHG2+8Ecuyqvw+vIk33rfXXnuNrKwsHn300SrH7I288V4B3H///QwcOJCuXbtyxx138OKLL/Laa6+Rn59f5ffhbbzx3jkcDgD+/ve/c+WVV9KzZ08+/PBDbDYb33zzTZXfh6fzxnt1vOTkZGbMmMG4ceOqHL+38sZ7Z1kW48ePJzY2loULF7J06VLGjBnDpZdeWm8SId543zp16sTHH3/Miy++SHBwMPHx8SQmJhIXF1euKkvqKDcPYZR6bPz48VbTpk2tHTt2lNs+e/ZsC7COHj1abnuzZs2siRMnltu2fv16KzY21vrb3/5WqWs+/fTTVtu2bS3LMmPct27dWvrIzc21tm/fXmEvlwEDBlj33HPPSeerrz2wvP3e7du3z2rTpo11ww03lBs/7628/X4cb+/evRZgLVq0qFJxeDNvvW+XXXaZZbfbLR8fn9IHYPn4+Fg33njjWXwC3sNb71VFkpKSLMDatGlTpeLwdt567+bM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1FSKi4s5cOAA06dPZ8KECYwaNYobb7yRpKQkCgsLee2117j00kv57bffePvtt8udo0WLFmRnZzN79my6detGcHAwbdu25brrruPGG2/kxRdfpHv37qSlpTF79my6du3KJZdc4qZ3LCIiIlJzNAuhiIiISA2YPn06jRo1okWLFgwfPpy5c+fy6quvMmXKFHx8fOjWrRsTJ07kP//5D507d+bzzz9nwoQJ5c7Rv39/7rjjDq6++moaNmzIc889B8CHH37IjTfeyAMPPEC7du0YM2YMy5Yto1mzZu54qyIiIiI1TrMQioiIiIiIiIiIR1MFloiIiIiIiIiIeDQlsERERERERERExKMpgSUiIiIiIiIiIh5NCSwREREREREREfFoSmCJiIiIiIiIiIhHUwJLREREREREREQ8mhJYIiIiIiIiIiLi0ZTAEhERERERERERj6YEloiIiIiIiIiIeDQlsERERERERERExKMpgSUiIiIiIiIiIh5NCSwREREREREREfFoSmCJiIiIiIiIiIhHUwJLREREREREREQ8mhJYIiIiIiIiIiLi0ZTAEhERERERERERj6YEloiIiIiIiIiIeDQlsERERERERERExKMpgSUiIiIiIiIiIh5NCSwREREREREREfFoSmCJiIiIiIiIiIhHUwJLREREREREREQ8mhJYIiIiIiIiIiLi0ZTAEhERERERERERj6YEloiIiIiIiIiIeLT/B8frq38aII6jAAAAAElFTkSuQmCC", + "image/png": "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7t1bs2bNupkyAQBAIcEMXgAAkCcqVKigdevWaefOnddduOvrr7/WQw89pNtuu03Dhw+XJFWpUkWStGvXLrVq1UoBAQF6/vnn5enpqSlTpqhNmzb6448/7D0jY2Nj1apVK+3Zs0dDhgzRrbfeqrNnz+rHH3/U8ePHM51lePnyZd1zzz3atGmTfv/9dzVp0iTH13jo0CFJUrFixdKNP/bYYypRooReffVVXbp0KcvnT58+XUOGDFGdOnU0atQoBQUF6e+//9aSJUvsX7levny5OnfurEaNGmn06NFyc3PTtGnTdOedd2r16tW67bbbsjz/jz/+KEk56uV6/vx5derUST179lTfvn01b948vfDCC6pXr546d+4syezp+8UXX+i+++7TsGHDdPHiRU2dOlUdO3bUX3/9laFdxezZs3Xx4kU9/PDDstlseu+999SzZ0/9888/8vT0lCT9/PPPuvfee1WvXj2NHTtW58+f19ChQ1WmTJkMNT788MOaPn26Bg8erCeffFIRERGaMGGC/v77b61du9Z+zswEBgZq/Pjx6tOnj7744gvt3r1bp06d0uLFi2Wz2bL9c8quZs2aqUqVKlq6dGmWx9SqVUtff/21nnnmGZUtW9b+df0SJUro8uXLatOmjQ4ePKgRI0aoUqVKmjt3rgYNGqQLFy6km3UrSdOmTVN8fLyGDx8ub29vhYSE3LDG+++/Xx06dNChQ4fs//Zmz56t3r17X/dnGRUVlWHMw8Mj0w91bmTWrFmqUqWKmjRporp168rPz0/ffPONnnvuuRs+d+nSpfrnn380ePBghYaGateuXfrss8+0a9curV+/PsPvtW/fvqpUqZLGjh2rLVu26IsvvlDJkiXTzWZ/6KGHNHPmTN1///1q3ry5li9frq5du+b4urIjMTEx0w+iihQpIl9fX0nm++myZct0/Phx+4dGeWHWrFnq2bOnvLy8dN9992nSpEnauHFjrt4PAQBAIWIAAADkgd9++81wd3c33N3djWbNmhnPP/+88euvvxpXrlzJcGyRIkWMgQMHZhjv3r274eXlZRw6dMg+duLECaNo0aLGHXfcYR979dVXDUnGggULMpwjJSXFMAzDWLFihSHJmDt3rnHx4kWjdevWRvHixY2///77htcSERFhSDJee+0148yZM0ZkZKSxcuVK45ZbbjEkGfPnzzcMwzCmTZtmSDJatmxpJCUlpTtH6r6IiAjDMAzjwoULRtGiRY2mTZsaly9fzrTmlJQUo1q1akbHjh3tY4ZhGHFxcUalSpWM9u3bX7fuW265xQgMDLzh9aVq3bq1Icn46quv7GMJCQlGaGio0atXL/tYUlKSkZCQkO6558+fN0qVKmUMGTLEPpb6cytWrJgRFRVlH//hhx8MScaiRYvsY/Xq1TPKli1rXLx40T62cuVKQ5JRoUIF+9jq1asNScasWbPSvf6SJUsyHc/KXXfdZQQGBhru7u7GqFGjrnvs448/bmT1n8mp1/j+++9n+fx77rnHkGRER0df93UqVKhgdO3aNd3Yxx9/bEgyZs6caR+7cuWK0axZM8Pf39+IiYlJV0dAQIBx+vTp677Ota+XlJRkhIaGGm+88YZhGIaxe/duQ5Lxxx9/2P9uN27caH/e6NGjDUmZbjVq1Mj0tebOnWtIMlasWJFh35UrV4xixYoZL730kn3s/vvvNxo0aJCt64iLi8sw9s033xiSjFWrVmWo++q/UcMwjB49ehjFihWzP966dashyXjsscfSHXf//fcbkozRo0dnqy7DuP51G4b5O8jqZzl27Fj7cVOnTjUkGV5eXkbbtm2NV155xVi9erWRnJyc4ZySjMcff/yGtW3atMmQZCxdutQwDPP9pmzZssZTTz2V7esDAACFEy0aAABAnmjfvr3WrVunu+++W9u2bdN7772njh07qkyZMvaZpdeTnJys3377Td27d1flypXt46VLl9b999+vNWvWKCYmRpLZiqBBgwbq0aNHhvNcO3svOjpaHTp00N69e7Vy5cobLo52tdGjR6tEiRIKDQ1VmzZtdOjQIb377rvq2bNnuuOGDRt2w367S5cu1cWLF/Xf//5XPj4+mda8detWHThwQPfff7/OnTuns2fP6uzZs7p06ZLatWunVatWKSUlJcvXiImJUdGiRbN9fZLk7++frh+ol5eXbrvtNv3zzz/2MXd3d/tXxVNSUhQVFaWkpCQ1btxYW7ZsyXDOe++9V8HBwfbHrVq1kiT7OU+cOKEdO3bowQcfTLdoV+vWrVWvXr1055o7d64CAwPVvn17+8/j7NmzatSokfz9/TO0icjKp59+qitXrqhcuXJ65ZVXsvWc3Eq9posXL+b4ub/88otCQ0N133332cc8PT315JNPKjY2Vn/88Ue643v16qUSJUrk6DXc3d3Vt29fffPNN5LMWZ3lypWz/56yMn/+fC1dujTdNm3atBy9tmS2KTl37ly6a7zvvvu0bds27dq164bPT53lKknx8fE6e/asbr/9dknK9O/x2lYcrVq10rlz5+zvJ7/88osk6cknn0x33NNPP529C8qhpk2bZvg5Ll26NN3PY8iQIVqyZInatGmjNWvW6I033lCrVq1UrVq1XLWXkczfc6lSpdS2bVtJ5vvOvffeq2+//VbJycl5cm0AAMAatGgAAAB5pkmTJlqwYIGuXLmibdu2aeHChRo3bpx69+6trVu3XndBqTNnziguLk41atTIsK9WrVpKSUnRsWPHVKdOHR06dEi9evXKVk1PP/204uPj9ffff9sX2cqu4cOHq0+fPnJzc1NQUJDq1Kkjb2/vDMdVqlTphudKbe9wvfYVBw4ckCQNHDgwy2Oio6PThadXCwgISBfMZkfZsmUzhOLBwcHavn17urEZM2boww8/1N69e5WYmGgfz+zay5cvn+F8kuw9c48cOSJJqlq1aobnVq1aNV1Id+DAAUVHR2fZdzS7C06VL19eJUuWVJ06ddIFhPkhNjZWknIctkvmz6ZatWpyc0s/D6NWrVr2/VfLzt9eZu6//36NHz9e27Zt0+zZs9WvX78btqy44447slxkLSdmzpypSpUqydvbWwcPHpRktmnx8/PTrFmz9Pbbb1/3+VFRUXrttdf07bffZvj9R0dHZzj+en+PAQEBOnLkiNzc3OztKlJl9l6UF4oXL67w8PAbHtexY0d17NhRcXFx2rx5s+bMmaPJkyfrrrvu0t69e3PUizc5OVnffvut2rZta+8hLplh84cffqhly5apQ4cOuboeAABgPQJeAACQ57y8vNSkSRM1adJE1atX1+DBgzV37lxLVmu/55579O233+qdd97RV199lSE4u55q1aplK4jJq8AwdXbu+++/n+VM46tnvF6rZs2a+vvvv3Xs2DGVK1cuW6+Z1cxjwzDs92fOnKlBgwape/fueu6551SyZEm5u7tr7Nix9uA6p+fMrpSUFJUsWTLLxaByOnu1IOzcuVMlS5ZUQEBAvr9Wbv/2mjZtqipVqujpp59WRESEvQd0fouJidGiRYsUHx+vatWqZdg/e/ZsvfXWW9cNm/v27as///xTzz33nBo2bCh/f3+lpKSoU6dOmc5wz8u/Ryv4+fmpVatWatWqlYoXL67XXntNixcvvu4HQddavny5Tp48qW+//Vbffvtthv2zZs0i4AUAwIER8AIAgHzVuHFjSdLJkyftY5mFNyVKlJCfn5/27duXYd/evXvl5uZmDy2rVKminTt3Zuv1u3fvrg4dOmjQoEEqWrSoJk2alJvLuGmpswN37tyZ6czVq48JCAjIVrB8rW7duumbb77RzJkzNWrUqNwXe4158+apcuXKWrBgQbrfXW4D+woVKkiSffbm1a4dq1Klin7//Xe1aNEi32fe5oV169bp0KFD6dpe5ESFChW0fft2paSkpPswYu/evfb9eeW+++7Tm2++qVq1auWodcnNWLBggeLj4zVp0qQMs4H37dunl19+WWvXrlXLli0zff758+e1bNkyvfbaa3r11Vft46mz33OjQoUKSklJ0aFDh9LN2s3svchqmb2fZsesWbNUsmRJffrppxn2LViwQAsXLtTkyZMd4t8YAADIiB68AAAgT6xYsSLTGXGp/S2vDk6KFCmiCxcupDvO3d1dHTp00A8//KDDhw/bx0+dOqXZs2erZcuW9hmRvXr1sreAuFZmNTz44IMaP368Jk+erBdeeCE3l3fTOnTooKJFi2rs2LGKj49Pty+15kaNGqlKlSr64IMP7F/zv9qZM2eu+xq9e/dWvXr19NZbb2ndunUZ9l+8eFEvvfRSjmtPnQF59c92w4YNmb5GdoSFhalu3br66quv0l3nH3/8oR07dqQ7tm/fvkpOTtYbb7yR4TxJSUkZ/o6sdOTIEQ0aNEheXl567rnncnWOLl26KDIyUnPmzLGPJSUl6X//+5/8/f3VunXrvCpXDz30kEaPHq0PP/wwz855IzNnzlTlypX1yCOPqHfv3um2//znP/L3989ytraU+d+iJH388ce5rqlz586SpPHjx+fZOW/WsmXLMh3P7P30Ri5fvqwFCxborrvuyvAz7927t0aMGKGLFy9mq1c6AAAonJjBCwAA8sQTTzyhuLg49ejRQzVr1tSVK1f0559/as6cOapYsaIGDx5sP7ZRo0b6/fff9dFHHyksLEyVKlVS06ZN9eabb2rp0qVq2bKlHnvsMXl4eGjKlClKSEjQe++9Z3/+c889p3nz5qlPnz4aMmSIGjVqpKioKP3444+aPHmyGjRokKG+ESNGKCYmRi+99JIC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l1xyiSZPntzo952fn69zzjlHaWlpWr16tf7yl7/ovvvu0/PPP+875tChQ+revbseeughJSUlNbptp6Dv6+97SYqPj9e+fft8y44dOxp9jtaOvq+/7++++24999xzmjNnjr799ltNmjRJ48aN05o1axp9ntYsVPu+srJSHo9H//u//6uRI0fWeUxsbKymTJmi5cuXa9OmTbr77rt1991317o2OBn9X3//P/nkk37X/F27dql9+/a65JJLGn2e1ixU+/7zzz/Xqaeeqrffflvr1q3TxIkTNWHCBH344Ye+Y/i+F7p9L/F9L1T7viW+7zn98//uu+/k9Xr13HPPaePGjXr88cc1d+5c3XnnnUdtd/v27brgggs0fPhwffPNN5o6daquu+46LVq0yHdMUVGR+vXrp6effrpRtQKOZwAb7N+/30gyy5YtM8YYk5ubayIiIsybb77pO2bTpk1Gklm5cmW97dx4441m+PDhtbZfeuml5u677zbTp083/fr1O2otXq/XJCUlmb/85S++bbm5uSYqKsq89tprtY6fN2+eSUhIaOAdWp555hnTrl07U1pa6tv2pz/9yfTp06fO49PS0szjjz/eqLadir6v6ftA2gsG9H1N3ycnJ5unnnrK73UXXXSRueKKKxp1DqcJlb4/3NVXX23GjBnTqGPHjRtnrrzyyoDP4RT0f/3effdd43K5TFZWVsDncIJQ7Ptq559/vpk4cWKd+/i+ZwmVvuf7Xuj2vR3f95z8+VebNWuWSU9PP2rbt99+uznppJNq1TZq1Kg6j5dk3n333aO2CTgdI3hhi7y8PElS+/btJVl/NSwvL/cb8dK3b1917dpVK1euPGo71W1Umzdvnr7//ntNnz69UbVs375d2dnZfudOSEjQwIEDj3ruxli5cqXOPvtsRUZG+raNGjVKmzdv1sGDB4+rbaei7/37vrCwUGlpaUpNTdWYMWO0cePG4zpva0bf1/R9aWlprf890+PxaMWKFcd17tYqVPr+WKxZs0aff/65hg4d2uLnbin0f/1efPFFjRw5UmlpaS1+7pYQyn1fV82hhL73r5nve6HZ93Z83wuGz78x18+VK1fW+r9lRo0aZcu/5UBrEW53AQg9Xq9XU6dO1ZlnnqmTTz5ZkpSdna3IyMhacx4lJiYqOzu7znY+//xz/eMf/9C//vUv37bMzEzdcccd+vTTTxUe3rgf7+r2ExMTG33uxsrOzlZ6enqtdqv3tWvX7rjadxr63r/v+/Tpo5deekmnnnqq8vLy9Mgjj2jw4MHauHGjunTpclznb23oe/++HzVqlB577DGdffbZ6tGjhxYvXqx33nlHlZWVx3Xu1iiU+j4QXbp00Q8//KCKigrdd999uu6661rs3C2J/q/f3r179fHHH+vVV19t0fO2lFDu+zfeeENffvmlnnvuuSZt1ynoe/++5/te6PZ9S3/fC4bPf+vWrZozZ44eeeSRBtuuq938/HwVFxfL4/E0qkYgmDCCFy3upptu0oYNG/T6668fcxsbNmzQmDFjNH36dJ1zzjmSrLnvLr/8ct1///3q3bt3na9bsGCB2rRp41s+/fTTY67hSCeddJKv3fPOO6/J2g0m9L2/QYMGacKECerfv7+GDh2qd955Rx07dgzKXwjpe39PPvmkevXqpb59+yoyMlJTpkzRxIkT5XYH3z/L9H3dPv30U3311VeaO3eunnjiCb322mtNVltrQv/X7+WXX1bbtm3rvBlbMAjVvl+6dKkmTpyoF154IWhunhco+t6/7/m+F5hg6vuW/r7n9M9/z549Ovfcc3XJJZfo97//vW/74e1OmjTp2N4YEAIYwYsWNWXKFH344Ydavny531+sk5KSVFZWptzcXL+/Lubk5NS6EcW3336rESNG6Prrr9fdd9/t215QUKCvvvpKa9as0ZQpUyRZf8U0xig8PFz//ve/9etf/1oDBw70vaZz587at2+f71zJycl+527MnUGrffTRRyovL5ck318Mk5KS/O5QWt1u9b5QQt833PcREREaMGCAtm7d2uhzOwF9X7vvO3bsqPfee08lJSX68ccflZKSojvuuEPdu3dv9LmdINT6PhDVo7xPOeUU5eTk6L777tNll10WcDutGf1fP2OMXnrpJV111VV+07kEi1Dt+2XLlmn06NF6/PHHNWHChEa3GUzo+4b7nu97llDo+5b8vuf0z3/v3r0aPny4Bg8eXOvGs998841vPT4+3ve+6vq+HR8fz+hdhC67Jv9FaPF6veamm24yKSkpZsuWLbX2V0/+/tZbb/m2fffdd7Umf9+wYYPp1KmTue2222q1UVlZadavX++3TJ482fTp08esX7/eFBYW1ltbUlKSeeSRR3zb8vLymvRmS2VlZb5t06ZNC6mbrNH3jet7Y4ypqKgwffr0MTfffHOjztHa0feN7/uysjLTo0cPM23atEado7UL1b4/XCA3Wbv//vtNWlpawOdorej/hvt/6dKlRpJZv359wG23ZqHc90uXLjWxsbG1bqhUF77vWUKx743h+54xodv3zfF9Lxg+/927d5tevXqZ8ePHm4qKika979tvv92cfPLJftsuu+wybrKGkEbAixYxefJkk5CQYDIyMsy+fft8y6FDh3zHTJo0yXTt2tUsWbLEfPXVV2bQoEFm0KBBvv3r1683HTt2NFdeeaVfG/v376/3vI25u6cxxjz00EOmbdu25v333zfr1q0zY8aMMenp6aa4uNh3zI4dO8yaNWvM/fffb9q0aWPWrFlj1qxZYwoKCuptNzc31yQmJpqrrrrKbNiwwbz++usmJibGPPfcc75jSktLfW0lJyebW2+91axZs8ZkZmY2WLcT0Pf19/39999vFi1aZLZt22ZWr15txo8fb6Kjo83GjRsbrNsJ6Pv6+/6LL74wb7/9ttm2bZtZvny5+eUvf2nS09PNwYMHG6zbCUK1740xZuPGjWbNmjVm9OjRZtiwYb7XVXvqqafMBx98YLZs2WK2bNli/vrXv5q4uDhz1113NVi3U9D/9fd/tSuvvNIMHDiwwVqdJlT7fsmSJSYmJsZMmzbNr+Yff/zRdwzf90K37/m+F7p93xLf95z++e/evdv07NnTjBgxwuzevdvv/Efz/fffm5iYGHPbbbeZTZs2maefftqEhYWZhQsX+o4pKCjw9aUk89hjj5k1a9aYHTt2NFg34EQEvGgRkupc5s2b5zumuLjY3HjjjaZdu3YmJibGjBs3zu/CPn369DrbONqop8b+w+P1es0999xjEhMTTVRUlBkxYoTZvHmz3zFXX311nedfunTpUdteu3atGTJkiImKijKdO3c2Dz30kN/+7du319nu0KFDG6zbCej7+vt+6tSppmvXriYyMtIkJiaa888/33z99dcN1uwU9H39fZ+RkWFOPPFEExUVZTp06GCuuuoqs2fPngZrdopQ7vu0tLQ6X1dt9uzZ5qSTTjIxMTEmPj7eDBgwwDzzzDOmsrKywbqdgv6vv/+Nsf4I5PF4zPPPP99grU4Tqn1f32sO/y7H973Q7Xu+74Vu37fE9z2nf/7z5s2r9z00ZOnSpaZ///4mMjLSdO/e3e89V++vq92rr766wbYBJ3IZY4wAAAAAAAAAAI4TfLfrBgAAAAAAAIAQQcALAAAAAAAAAA5FwAsAAAAAAAAADkXACwAAAAAAAAAORcALAAAAAAAAAA5FwAsAAAAAAAAADkXACwAAAAAAAAAORcALAAAAAAAAAA5FwAsAAICQcM0118jlcsnlcikiIkKJiYn61a9+pZdeekler7fR7cyfP19t27ZtvkIBAACAABDwAgAAIGSce+652rdvn7KysvTxxx9r+PDh+uMf/6gLL7xQFRUVdpcHAAAABIyAFwAAACEjKipKSUlJ6ty5s0477TTdeeedev/99/Xxxx9r/vz5kqTHHntMp5xyimJjY5Wamqobb7xRhYWFkqSMjAxNnDhReXl5vtHA9913nySptLRUt956qzp37qzY2FgNHDhQGRkZ9rxRAAAAhAwCXgAAAIS0X/7yl+rXr5/eeecdSZLb7dbs2bO1ceNGvfzyy1qyZIluv/12SdLgwYP1xBNPKD4+Xvv27dO+fft06623SpKmTJmilStX6vXXX9e6det0ySWX6Nxzz1VmZqZt7w0AAADBz2WMMXYXAQAAADS3a665Rrm5uXrvvfdq7Rs/frzWrVunb7/9tta+t956S5MmTdKBAwckWXPwTp06Vbm5ub5jdu7cqe7du2vnzp1KSUnxbR85cqTOOOMM/d///V+Tvx8AAABAksLtLgAAAACwmzFGLpdLkvSf//xHM2fO1Hfffaf8/HxVVFSopKREhw4dUkxMTJ2vX79+vSorK9W7d2+/7aWlperQoUOz1w8AAIDQRcALAACAkLdp0yalp6crKytLF154oSZPnqwZM2aoffv2WrFiha699lqVlZXVG/AWFhYqLCxMq1evVlhYmN++Nm3atMRbAAAAQIgi4AUAAEBIW7JkidavX6+bb75Zq1evltfr1aOPPiq327pdxRtvvOF3fGRkpCorK/22DRgwQJWVldq/f7/OOuusFqsdAAAAIOAFAABAyCgtLVV2drYqKyuVk5OjhQsXaubMmbrwwgs1YcIEbdiwQeXl5ZozZ45Gjx6tzz77THPnzvVro1u3biosLNTixYvVr18/xcTEqHfv3rriiis0YcIEPfrooxowYIB++OEHLV68WKeeeqouuOACm94xAAAAgp3b7gIAAACAlrJw4UIlJyerW7duOvfcc7V06VLNnj1b77//vsLCwtSvXz899thjevjhh3XyySdrwYIFmjlzpl8bgwcP1qRJk3TppZeqY8eOmjVrliRp3rx5mjBhgm655Rb16dNHY8eO1ZdffqmuXbva8VYBAAAQIlzGGGN3EQAAAAAAAACAwDGCFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHIqAFwAAAAAAAAAcioAXAAAAAAAAAByKgBcAAAAAAAAAHOr/Awsd6Lg618B2AAAAAElFTkSuQmCC", "text/plain": [ "" ] }, - "execution_count": 5, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -488,7 +430,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -535,7 +477,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -550,152 +492,49 @@ "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to ipython_user_proxy):\n", "\n", - "First, we need to install the necessary libraries to fetch stock data and plot the chart. Please execute the following code to install the required libraries:\n", + "To plot a chart of META (Facebook's parent company, Meta Platforms, Inc.) and TESLA (Tesla, Inc.) stock price gain year-to-date (YTD), we can use Python with libraries such as `pandas` for data manipulation and `matplotlib` or `plotly` for plotting. We will also use `yfinance` to fetch historical stock data.\n", "\n", - "```python\n", - "!pip install yfinance matplotlib\n", - "```\n", + "Here's the plan:\n", + "1. Install the `yfinance` library if it's not already installed.\n", + "2. Fetch the YTD stock price data for META and TESLA.\n", + "3. Calculate the YTD gain for each stock.\n", + "4. Plot the YTD gain on a chart.\n", "\n", - "After installing the libraries, execute the following code to fetch the stock data and plot the chart:\n", + "First, let's install `yfinance` and import the necessary libraries. Execute the following code:\n", "\n", "```python\n", - "import yfinance as yf\n", - "import matplotlib.pyplot as plt\n", - "import datetime\n", - "\n", - "# Get the current date\n", - "today = datetime.date.today()\n", - "\n", - "# Calculate the start date for YTD\n", - "start_date = datetime.date(today.year, 1, 1)\n", - "\n", - "# Fetch stock data for META (Facebook) and TESLA\n", - "meta = yf.download('FB', start=start_date, end=today)\n", - "tesla = yf.download('TSLA', start=start_date, end=today)\n", - "\n", - "# Calculate the percentage gain for each stock\n", - "meta['Gain'] = (meta['Close'] / meta['Close'][0]) * 100\n", - "tesla['Gain'] = (tesla['Close'] / tesla['Close'][0]) * 100\n", - "\n", - "# Plot the chart\n", - "plt.figure(figsize=(12, 6))\n", - "plt.plot(meta.index, meta['Gain'], label='META (Facebook)')\n", - "plt.plot(tesla.index, tesla['Gain'], label='TESLA')\n", - "plt.xlabel('Date')\n", - "plt.ylabel('Percentage Gain YTD')\n", - "plt.title('META (Facebook) vs TESLA Stock Price Gain YTD')\n", - "plt.legend()\n", - "plt.grid()\n", - "plt.show()\n", - "```\n", - "\n", - "This code will fetch the stock data for META (Facebook) and TESLA from the start of the year to the current date, calculate the percentage gain, and plot the chart.\n", + "# Install yfinance if not already installed\n", + "!pip install yfinance\n", "\n", - "--------------------------------------------------------------------------------\n", - "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", - "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 1 (inferred language is python)...\u001b[0m\n" - ] - }, - { - "ename": "IndexError", - "evalue": "index 0 is out of bounds for axis 0 with size 0", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mIndexError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[7], line 16\u001b[0m\n\u001b[1;32m 13\u001b[0m tesla \u001b[39m=\u001b[39m yf\u001b[39m.\u001b[39mdownload(\u001b[39m'\u001b[39m\u001b[39mTSLA\u001b[39m\u001b[39m'\u001b[39m, start\u001b[39m=\u001b[39mstart_date, end\u001b[39m=\u001b[39mtoday)\n\u001b[1;32m 15\u001b[0m \u001b[39m# Calculate the percentage gain for each stock\u001b[39;00m\n\u001b[0;32m---> 16\u001b[0m meta[\u001b[39m'\u001b[39m\u001b[39mGain\u001b[39m\u001b[39m'\u001b[39m] \u001b[39m=\u001b[39m (meta[\u001b[39m'\u001b[39m\u001b[39mClose\u001b[39m\u001b[39m'\u001b[39m] \u001b[39m/\u001b[39m meta[\u001b[39m'\u001b[39;49m\u001b[39mClose\u001b[39;49m\u001b[39m'\u001b[39;49m][\u001b[39m0\u001b[39;49m]) \u001b[39m*\u001b[39m \u001b[39m100\u001b[39m\n\u001b[1;32m 17\u001b[0m tesla[\u001b[39m'\u001b[39m\u001b[39mGain\u001b[39m\u001b[39m'\u001b[39m] \u001b[39m=\u001b[39m (tesla[\u001b[39m'\u001b[39m\u001b[39mClose\u001b[39m\u001b[39m'\u001b[39m] \u001b[39m/\u001b[39m tesla[\u001b[39m'\u001b[39m\u001b[39mClose\u001b[39m\u001b[39m'\u001b[39m][\u001b[39m0\u001b[39m]) \u001b[39m*\u001b[39m \u001b[39m100\u001b[39m\n\u001b[1;32m 19\u001b[0m \u001b[39m# Plot the chart\u001b[39;00m\n", - "File \u001b[0;32m~/.local/lib/python3.9/site-packages/pandas/core/series.py:939\u001b[0m, in \u001b[0;36mSeries.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 936\u001b[0m key \u001b[39m=\u001b[39m unpack_1tuple(key)\n\u001b[1;32m 938\u001b[0m \u001b[39mif\u001b[39;00m is_integer(key) \u001b[39mand\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mindex\u001b[39m.\u001b[39m_should_fallback_to_positional():\n\u001b[0;32m--> 939\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39;49m\u001b[39m.\u001b[39;49m_values[key]\n\u001b[1;32m 941\u001b[0m \u001b[39melif\u001b[39;00m key_is_scalar:\n\u001b[1;32m 942\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39m_get_value(key)\n", - "\u001b[0;31mIndexError\u001b[0m: index 0 is out of bounds for axis 0 with size 0" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[33mipython_user_proxy\u001b[0m (to assistant):\n", - "\n", - "exitcode: 0 (execution succeeded)\n", - "Code output: \n", - "Defaulting to user installation because normal site-packages is not writeable\n", - "Requirement already satisfied: yfinance in /home/vscode/.local/lib/python3.9/site-packages (0.2.26)\n", - "Requirement already satisfied: matplotlib in /home/vscode/.local/lib/python3.9/site-packages (3.7.2)\n", - "Requirement already satisfied: html5lib>=1.1 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (1.1)\n", - "Requirement already satisfied: pytz>=2022.5 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (2023.3)\n", - "Requirement already satisfied: frozendict>=2.3.4 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (2.3.8)\n", - "Requirement already satisfied: pandas>=1.3.0 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (1.3.3)\n", - "Requirement already satisfied: lxml>=4.9.1 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (4.9.3)\n", - "Requirement already satisfied: numpy>=1.16.5 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (1.25.1)\n", - "Requirement already satisfied: appdirs>=1.4.4 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (1.4.4)\n", - "Requirement already satisfied: beautifulsoup4>=4.11.1 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (4.12.2)\n", - "Requirement already satisfied: requests>=2.31 in /usr/local/lib/python3.9/site-packages (from yfinance) (2.31.0)\n", - "Requirement already satisfied: multitasking>=0.0.7 in /home/vscode/.local/lib/python3.9/site-packages (from yfinance) (0.0.11)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (1.4.4)\n", - "Requirement already satisfied: importlib-resources>=3.2.0 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (6.0.0)\n", - "Requirement already satisfied: pillow>=6.2.0 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (10.0.0)\n", - "Requirement already satisfied: python-dateutil>=2.7 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (2.8.2)\n", - "Requirement already satisfied: fonttools>=4.22.0 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (4.41.1)\n", - "Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (3.0.9)\n", - "Requirement already satisfied: packaging>=20.0 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (23.1)\n", - "Requirement already satisfied: contourpy>=1.0.1 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (1.1.0)\n", - "Requirement already satisfied: cycler>=0.10 in /home/vscode/.local/lib/python3.9/site-packages (from matplotlib) (0.11.0)\n", - "Requirement already satisfied: soupsieve>1.2 in /home/vscode/.local/lib/python3.9/site-packages (from beautifulsoup4>=4.11.1->yfinance) (2.4.1)\n", - "Requirement already satisfied: six>=1.9 in /usr/local/lib/python3.9/site-packages (from html5lib>=1.1->yfinance) (1.16.0)\n", - "Requirement already satisfied: webencodings in /home/vscode/.local/lib/python3.9/site-packages (from html5lib>=1.1->yfinance) (0.5.1)\n", - "Requirement already satisfied: zipp>=3.1.0 in /home/vscode/.local/lib/python3.9/site-packages (from importlib-resources>=3.2.0->matplotlib) (3.16.2)\n", - "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.9/site-packages (from requests>=2.31->yfinance) (3.4)\n", - "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.9/site-packages (from requests>=2.31->yfinance) (2.0.3)\n", - "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.9/site-packages (from requests>=2.31->yfinance) (2023.5.7)\n", - "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.9/site-packages (from requests>=2.31->yfinance) (3.2.0)\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip is available: \u001b[0m\u001b[31;49m23.0.1\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpip install --upgrade pip\u001b[0m\n", - "\n", - "[*********************100%***********************] 1 of 1 completed\n", - "[*********************100%***********************] 1 of 1 completed\n", - "\n", - "1 Failed download:\n", - "['FB']: Exception('%ticker%: No timezone found, symbol may be delisted')\n", - "\n", - "\n", - "--------------------------------------------------------------------------------\n", - "\u001b[33massistant\u001b[0m (to ipython_user_proxy):\n", - "\n", - "It seems that there was an issue with fetching the stock data for META (Facebook) using the ticker symbol 'FB'. The stock symbol for META has been changed to 'META' recently. Let's update the code to use the new symbol and try again:\n", - "\n", - "```python\n", "import yfinance as yf\n", + "import pandas as pd\n", "import matplotlib.pyplot as plt\n", - "import datetime\n", - "\n", - "# Get the current date\n", - "today = datetime.date.today()\n", + "from datetime import datetime\n", "\n", - "# Calculate the start date for YTD\n", - "start_date = datetime.date(today.year, 1, 1)\n", + "# Check if today's date is required or the last trading day\n", + "today = datetime.today().strftime('%Y-%m-%d')\n", "\n", - "# Fetch stock data for META (Facebook) and TESLA\n", - "meta = yf.download('META', start=start_date, end=today)\n", - "tesla = yf.download('TSLA', start=start_date, end=today)\n", + "# Fetch YTD stock data for META and TESLA\n", + "meta_data = yf.download('META', start='2023-01-01', end=today)\n", + "tesla_data = yf.download('TSLA', start='2023-01-01', end=today)\n", "\n", - "# Calculate the percentage gain for each stock\n", - "meta['Gain'] = (meta['Close'] / meta['Close'][0]) * 100\n", - "tesla['Gain'] = (tesla['Close'] / tesla['Close'][0]) * 100\n", + "# Calculate the YTD gain for each stock\n", + "meta_ytd_gain = (meta_data['Close'] - meta_data['Close'].iloc[0]) / meta_data['Close'].iloc[0] * 100\n", + "tesla_ytd_gain = (tesla_data['Close'] - tesla_data['Close'].iloc[0]) / tesla_data['Close'].iloc[0] * 100\n", "\n", - "# Plot the chart\n", - "plt.figure(figsize=(12, 6))\n", - "plt.plot(meta.index, meta['Gain'], label='META (Facebook)')\n", - "plt.plot(tesla.index, tesla['Gain'], label='TESLA')\n", + "# Plot the YTD gain on a chart\n", + "plt.figure(figsize=(14, 7))\n", + "plt.plot(meta_ytd_gain.index, meta_ytd_gain, label='META YTD Gain %')\n", + "plt.plot(tesla_ytd_gain.index, tesla_ytd_gain, label='TESLA YTD Gain %')\n", + "plt.title('META vs TESLA Stock Price Gain YTD')\n", "plt.xlabel('Date')\n", - "plt.ylabel('Percentage Gain YTD')\n", - "plt.title('META (Facebook) vs TESLA Stock Price Gain YTD')\n", + "plt.ylabel('Gain %')\n", "plt.legend()\n", - "plt.grid()\n", + "plt.grid(True)\n", "plt.show()\n", "```\n", "\n", - "Please execute the updated code to fetch the stock data and plot the chart.\n", + "This code will install `yfinance`, fetch the YTD stock data for META and TESLA, calculate the YTD gain, and plot it on a chart. Please execute the code in your IPython environment.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", @@ -704,9 +543,9 @@ }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+4AAAIjCAYAAACd5UFgAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd3hTZfvA8W+S7t3SlkI3e8reW9m8KCrTgaCistz+XK+4xb19nQgoS0FwICggey8ZZY8uRksH3Sttzu+P04SGtjQtadLS+3NdvXJy5p2epHDneZ770SiKoiCEEEIIIYQQQogaSWvvAIQQQgghhBBCCFE+SdyFEEIIIYQQQogaTBJ3IYQQQgghhBCiBpPEXQghhBBCCCGEqMEkcRdCCCGEEEIIIWowSdyFEEIIIYQQQogaTBJ3IYQQQgghhBCiBpPEXQghhBBCCCGEqMEkcRdCCCGEEEIIIWowSdyFEKIOio+Px8XFhW3bttk7lGvauHEjGo2GZcuW2fzar7zyChqNhuTk5GvuN378eMaOHWujqERNZOl7pbpMmjSJiIgIu1y7OsybNw+NRkNMTIy9QxFCiBpDEnchhLCA8T+SGo2GrVu3ltquKAqhoaFoNBr+85//mG0zHlfWzyOPPGJKTi35KWns2LFoNBqeffbZSr+e1157jW7dutGrVy/TukmTJpV73b/++qvS16grnn32WX755RcOHjxo1ziudf9K/kyaNAmA/v37l7tPixYtzM59+PBhRo8eTXh4OC4uLgQHBzNo0CA+++wzs/0iIiJKvf+vZdWqVWg0Gho2bIjBYKjU6/3jjz/o168fgYGBuLm50ahRI8aOHWv2Xr1w4QKvvPIKBw4cqNS5bank3xaNRoOLiwvNmjVjxowZJCYm2ju8CkVHRzNjxgyaNWuGm5sbbm5utGrViunTp3Po0CF7h8eSJUvQaDR8/fXXZW6fOnUqjo6O3H777RZ9fvr37w+U/rx5eHjQqFEjRo8ezS+//FLp97MQQlTEwd4BCCFEbeLi4sKiRYvo3bu32fpNmzZx7tw5nJ2dyzxu0KBBTJw4sdT6Zs2aER4ezo8//mi2/vnnn8fDw4MXX3yxzPNlZGTwxx9/EBERweLFi3n77bdLJfblSUpKYv78+cyfP7/UNmdnZ7777rtS69u1a2fRueuiDh060LlzZz744AN++OEHu8Xx8MMPM3DgQNPz6OhoZs2axUMPPUSfPn1M6xs3bmxaDgkJYfbs2aXO5e3tbVrevn07AwYMICwsjClTphAUFER8fDw7d+7kk08+YebMmVWOeeHChURERBATE8P69evN4r+W999/n2eeeYZ+/frx/PPP4+bmxunTp1m3bh1Llixh6NChgJq4v/rqq0RERNC+ffsqx2kLr732GpGRkeTl5bF161a+/PJLVq1aRVRUFG5ubtc89ttvv7VLorhy5UrGjRuHg4MDd999N+3atUOr1XL8+HGWL1/Ol19+SXR0NOHh4ZU677333sv48ePL/XtaGePHj2f+/Pk899xzjBo1ivr165u27d69m2+++YannnqKe+65hzvvvNO0LSsri6lTp3L77bdzxx13mNaXPL7k38vc3FxiY2P5448/GD16NP379+e3337Dy8vrul+DEEIAoAghhKjQ3LlzFUC54447FH9/f0Wv15ttnzJlitKpUyclPDxcGTFihNk2QJk+fXqlrte6dWulX79+5W7//vvvFUdHR2X9+vUKoGzcuNHic3/44YeKq6urkpmZabb+vvvuU9zd3SsVZ3XbsGGDAihLly61+bVffvllBVCSkpIq3Pf9999X3N3dS/1O7WnPnj0KoMydO7fM7f369VNat25d4XmGDx+uBAQEKJcvXy61LTEx0ex5We//8mRlZSnu7u7Kp59+qnTo0EGZNGmSRcfp9XrFy8tLGTRoUJnbS8ZU0e/AWirzXrma8W/Lnj17zNY/+eSTCqAsWrSo3GOzsrIqfT1rOX36tOLu7q60bNlSuXDhQqnter1e+eSTT5S4uDg7RGcuOjpacXNzUyZMmGBaV1hYqLRv316JiIhQsrOzSx2TlJSkAMrLL79c5jmv9fdy9uzZCqCMHTvWKvELIYSiKIp0lRdCiEqYMGECKSkprF271rSuoKCAZcuWcdddd9ksjoULFzJo0CAGDBhAy5YtWbhwocXH/vrrr3Tr1g0PD49KXXPLli2MGTOGsLAwnJ2dCQ0N5YknniA3N7fUvsePH2fs2LEEBATg6upK8+bNS/UeOH/+PPfffz/169fH2dmZ1q1b8/3335d57aKiIl544QWCgoJwd3fn1ltvJT4+vtR+S5cupVOnTri6uuLv788999zD+fPnS+23fv16+vTpg7u7Oz4+Ptx2220cO3aswt9BbGwsTZo0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cHd35/z580yaNKlSU1EZ973nnnu47777ytznpptuqlR81enOO+9k/vz5LFy4kIcffrjc/S5fvlxuElTSuHHjeP7551m6dCmPP/44P//8M97e3mZJeWBgIAcOHODvv/9m9erVrF69mrlz5zJx4sQyp/GzFScnJ7p06UKXLl1o1qwZkydPZunSpWW27Jbn1KlT7NmzByj9hQyoPUosSdyNvLy8GDRoEIMGDcLR0ZH58+eza9cu+vXrZ/E5rMXS90pZunbtWmEy6ezsXCqZryqDwYBGo2H16tXodLpS26/1xYO3tzcNGjQos+6Bccx7WfUixo4dy/bt23nmmWdo3749Hh4eGAwGhg4datHfkLLihPK/iLQn4++mSZMmdo5ECHGjkMRdCCGq4Pbbb+fhhx9m586dZt2eq5OiKCxatIgBAwYwbdq0Uttff/11Fi5ceM3EPSwsDFdXV1OlaksdPnyYkydPMn/+fLNidFd35W7UqBHANQuZBQQE4OnpSVFRkcW9EE6dOmX2XFEUTp8+bUrwjfNEnzhxwlSN2+jEiROm7SX3u9rx48fx9/c3a20HeO+993BwcGDatGl4enqWOSyisLCQ+Ph4br311gpfS2RkJF27duWnn35ixowZLF++nFGjRpWas9rJyYmRI0cycuRIDAYD06ZN4+uvv+all16qEcmAMcm8ePFipY5buHAhjo6O/Pjjj6USsa1bt/Lpp58SFxdXZuuqJTHNnz/fFFN5PSAsfb9Y8n4uyZL3ii00btyYv//+m9TU1HJb3Rs3boyiKERGRtKsWbNKX2PEiBF899137N69m65du1a4/+XLl/nnn3949dVXmTVrlmn91Z/tG8WPP/6IRqNh0KBB9g5FCHGDkDHuQghRBR4eHnz55Ze88sorjBw50ibX3LZtGzExMUyePJnRo0eX+hk3bhwbNmzgwoUL5Z7D0dGRzp07l5oSqiLGBKtky5aiKKWmJwsICKBv3758//33xMXFmW0zHqvT6bjzzjv55ZdfykyIkpKSSq374YcfzMaKLlu2jIsXLzJs2DBATdgCAwP56quvyM/PN+23evVqjh07xogRIwBo0KAB7du3Z/78+WZVs6OiolizZg3Dhw8vdW2NRsM333zD6NGjue+++8oc13306FHy8vLo2bNnqW1lGTduHDt37uT7778nOTnZrJs8UGp6LK1Wa/qS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/Oc//2HYsGH06NEDgLS0NNzd3c+YOx4WFkZaWlqN11m7di3fffcdf/zxxxmPRUZGcuLECcrLy3nqqaeYNWtWrfFYrh8WFlbn526pmkPbxcfH8/bbb/PKK6/Uel1n4czt8fDDD/POO+9QVFTE4MGDWbhw4Tlfb3PhjO2maRrXX389t912GwMGDODIkSN1fblOzRnbCuCee+6hX79+BAUFsXbtWh555BFSU1N57bXX6vS6mwNnbLvDhw8D8NRTT/Haa68RExPDq6++yujRozl48GCz+cD5dM7YVqf79NNPmTRpEpGRkbVet7lxxnbT6XQsXryYadOm4evri16vJzQ0lL///pvAwMA6v3Zn54xtN3bsWGbPns3LL7/MvffeS2FhIf/3f/8HQGpqat1eOFKczmp33nknu3fvZv78+fW+xu7du7nooot48sknmThx4hmPr1q1is2bN/PBBx/wxhtv8O233wIwd+5cfHx8Kr9WrVpV7xhaImdvu2PHjjF58mQuu+wybr755nq/hqbCmdvjwQcfZNu2bfz777+4uLhw7bXXomlavV+HM3HGdnv77bfJz8/nkUceqXfMzsgZ2wpg9uzZjB49ml69enHbbbfx6quv8vbbb1NaWlrv1+FsnLHtzGYzAI8++ijTp0+nf//+fP755+h0On744Yd6v46mzhnb6lQpKSn8888/3HTTTfWO3xk5Y7tpmsadd95JaGgoq1atYuPGjUybNo0LLrjAquTP2Tlj23Xv3p0vv/ySV199FS8vL8LDw4mNjSUsLKxaL/w51XlQvdDuvPNOLTIyUjt8+HC1+5csWaIB2smTJ6vdHx0drb322mvV7tuzZ48WGhqq/fe//63Tcz777LNap06dNE1T81gOHTpU+VVUVKQlJCTUOFdz5MiR2j333HPG9VrqHHdnb7tjx45pHTt21K655ppq82OclbO3x6mOHj2qAdratWvrFIczc9Z2u+iiizS9Xq+5uLhUfgGai4uLdu2111rxHXAeztpWNdm9e7cGaPv3769THM7OWdtu6dKlGqCtWrWq2jGDBg2qcxzOxlnb6lTPPPOM1qpVqxZVp8VZ223x4sWaXq/XcnP/v727i+nx/+M4/urbn/iSm6xCQ0hmbloOsDYHbtcm82MzGcKc5GbDxAEzOiDMbZk5QFg2a83UgZtN6cDdRqtVqMwUbbmbiYao3v8DP81X8cvW79d1fT0f2/eg6/p0Xe/r814Hr+v69rnqfcZERUVZWlpah+pwO7f27nvPnz+39+/fW0NDg3k8HsvOzu5QHWYsTtchLS0ttnbtWhs8eLBVVVW12f9tQYScnJzWbRUVFW0WRCgvL7ewsDDbvHlzh8+dmppqw4YN+2VtAwcOtP3797duq6+vZ3G6v/lD72pra23UqFGWmJhoTU1NHT6/E/lDP35UU1Njkuz69esdrsVt3N63mpoaKysra/1cvXrVJFlOTo49e/asw7W4gdt71Z6srCzzeDz25s2bDtfiRm7v3befv1+c7vPnzxYWFvaPKzK7jdt79f3Y4cOHu/ZNNb/L7X3Ly8szj8dj79+/9/nd6Oho27VrV4drcSO39649J0+eNK/X2+Zmw68Q3Dtg9erV1rdvXyssLPR5dcaHDx9axyQnJ9vQoUOtoKDA7t271+YVUWVlZRYaGmpLly71OcbLly9bxxw9etTy8vKsqqrKqqqq7MSJExYcHGzbtm37ZX179uyxfv36WW5urpWWltq8efPavD6ipqbGiouLLTU11Xr37m3FxcVWXFzc5o/f37i9d7W1tRYVFWUzZsyw2tpan/O7kdv7cefOHcvIyLDi4mKrrq62/Px8i4uLs5EjR9qnT586ebacw+19+9GTJ0/8dlV5t/fq1q1bdujQISspKbHHjx9bVlaWhYaG+u03I77n9t6Zma1fv94iIiLs6tWrVlFRYatWrbKwsDC/u+niD70y+/oEV5I9fPiwk2bG2dzet1evXtmAAQNswYIFVlJSYpWVlZaSkmLdunWzkpKSTp4tZ3F778zMMjIyrKioyCorK+3o0aPWs2dPO3LkyG/NA8G9AyS1+8nMzGwd8/HjR1uzZo3179/fvF6vzZ8/3ydc7dixo91jfH8HJz093caOHWter9f69OljsbGxduzYsX/8anRLS4tt377dwsPDLSgoyGbMmGGVlZU+Y5YvX97u+f35KaGZ+3uXmZn502twI7f3o7S01KZNm2YhISEWFBRkkZGRlpycbLW1tZ02R07k9r79yJ+Du9t7VVRUZJMnT7a+fftajx49bMyYMbZ7926/vjH2jdt7Z/b1CfumTZssLCzMgoODbebMmVZeXt4p8+Mk/tArM7PFixf7vOfa3/lD3+7evWuzZ8+2kJAQCw4OtilTptilS5c6ZX6czB96t2zZMgsJCbHu3bvbhAkT7OzZs789DwF/TwYAAAAAAHAgVpUHAAAAAMDBCO4AAAAAADgYwR0AAAAAAAcjuAMAAAAA4GAEdwAAAAAAHIzgDgAAAACAgxHcAQAAAABwMII7AAAAAAAORnAHAAAAAMDBCO4AAPzhVqxYoYCAAAUEBKhbt24KDw/XrFmzdOrUKbW0tHT4OKdPn1a/fv3+vUIBAPhDEdwBAIDi4+NVV1en6upqXb58WdOmTdP69euVkJCgpqamri4PAIA/GsEdAAAoKChIAwcOVEREhCZOnKitW7cqNzdXly9f1unTpyVJBw8e1Pjx49WrVy8NGTJEa9asUUNDgySpsLBQK1euVH19fevT+507d0qSGhsblZKSooiICPXq1UuTJ09WYWFh11woAAAuRHAHAADtmj59umJiYnThwgVJksfjUXp6uu7fv68zZ86ooKBAW7ZskSTFxcXp8OHD6tOnj+rq6lRXV6eUlBRJ0rp163T79m2dP39epaWlWrhwoeLj4/Xo0aMuuzYAANwkwMysq4sAAABdZ8WKFXr79q0uXrzYZl9iYqJKS0v14MGDNvtycnKUnJys169fS/r6P+4bNmzQ27dvW8c8ffpUI0aM0NOnTzV48ODW7TNnztSkSZO0e/fuTr8eAAD8zf+6ugAAAOBcZqaAgABJ0rVr15SWlqaKigq9e/dOTU1N+vTpkz58+CCv19vu75eVlam5uVnR0dE+2xsbGzVgwIB/vX4AAPwBwR0AAPzUw4cPNXz4cFVXVyshIUGrV6/Wrl27FBISohs3bmjVqlX6/PnzT4N7Q0ODAgMDVVRUpMDAQJ99vXv3/i8uAQAA1yO4AwCAdhUUFKisrEwbN25UUVGRWlpadODAAXk8X5fIyc7O9hnfvXt3NTc3+2yLjY1Vc3OzXr58qalTp/5ntQMA4E8I7gAAQI2NjXr+/Lmam5v14sULXblyRWlpaUpISFBSUpLKy8v15csXZWRkaO7cubp586aOHz/uc4zIyEg1NDQoPz9fMTEx8nq9io6O1pIlS5SUlKQDBw4oNjZWr169Un5+viZMmKA5c+Z00RUDAOAerCoPAAB05coVDRo0SJGRkYqPj9f169eVnp6u3NxcBQYGKiYmRgcPHtTevXs1btw4nTt3TmlpaT7HiIuLU3JyshYtWqTQ0FDt27dPkpSZmamkpCRt2rRJo0eP1l9//aW7d+9q6NChXXGpAAC4DqvKAwAAAADgYDxxBwAAAADAwQjuAAAAAAA4GMEdAAAAAAAHI7gDAAAAAOBgBHcAAAAAAByM4A4AAAAAgIMR3AEAAAAAcDCCOwAAAAAADkZwBwAAAADAwQjuAAAAAAA4GMEdAAAAAAAH+z81Mv90GwCVKwAAAABJRU5ErkJggg==", + "image/png": "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ZGRk5Du2sB5EeeWLCxYsoFmzZri5udG0aVN+/fXXEufasWNHHn30Ud5++2127doF2LOU4uLimDJlCmZz+f0T3MnJiQ8//JAmTZrw8ccfk5ycXG7nFhGRqkUBIhERkWJERETQqVMnvvnmG8e2RYsWkZyczPDhw4s8LjMzk7Nnzxb4ys7OLvMcTp48yfLly7n77rsBe9Dqhx9+KPFcLi4u3H777SxYsKDA2AULFpCVleW4h6lTp/Lkk0/SpEkT3n//fSZMmECrVq1Yv359medbHIvFUuj7cuEH9jp16vD7779z/Pjxcr32rFmzGDJkCK6urtx9993s37+fjRs3lnhcnTp1AHt5UHp6epHjunXrxpNPPgnAyy+/zNdff83XX3/tKLcbP348Y8eOpWbNmrzzzjsMHTqUzz//nD59+mCxWBznWbJkCd26dWPXrl089dRTvPPOO/To0YOFCxcWee2NGzfSs2dPWrduzaJFiy6pgXVeIKdGjRqObfHx8fTv359WrVrx/vvv06NHj0KPtVqt3HLLLUyYMIE2bdrwzjvv8NRTT5GcnMyOHTsc4x555BGef/55unTpwgcffMD999/PrFmz6Nu3b7734GLp6eksW7aM7t27ExYWVup7yvszGzNmDB999BF9+/blo48+KrT8szCrV6/mscceY/jw4fznP/8hMzOToUOHEh8fX+Kxb731FoGBgTzyyCNER0fzySef8Nxzz9G8efNSz7+0nJycuPvuu0lPTy+0Z5qIiEipVHYKk4iIyNUor8Rs48aNxscff2z4+PgY6enphmEYxp133mn06NHDMIzCy6aAIr+++eabQq9XXInZ22+/bXh4eDjKavbt22cAxvz580u8j99++80AjJ9++inf9gEDBhh169Z1/HzbbbcVWr5SFqUpMSvqfXnrrbcc46ZNm2YAhqurq9GjRw/jH//4h/HHH38UWpZDKUvMNm3aZADGkiVLDMOwl4aFhYUZTz31VKnubeTIkQZgVK9e3bj99tuNt99+29i9e3ep34O4uDjD1dXV6NOnT777+Pjjjw3A+OKLLwzDsJcLRUZGGnXq1DESExPzncNmszleX1hitnr1asPX19cYOHCgkZmZWeK95JWY7d271zhz5oxx6NAh4/PPPzfc3NyM4OBgRxnZTTfdZADGZ599VuAcN910U77n9YsvvjAA49133y0wNm/ef/zxhwEYs2bNyrf/119/LXT7hbZu3WoAxtNPP11gX3x8vHHmzBnH14WliXm/sxd66623DJPJZBw5cqTAe3KhvGfwwIEDBebx0UcfFTnXC/3www8GYPj7+xt169YtdD55LrXELM/8+fMNwPjggw9KNTcREZGLKYNIRESkBMOGDSMjI4OFCxdy7tw5Fi5cWGJ52W233caSJUsKfBWVgVGcWbNmMXDgQEdZTYMGDWjTpk2pSqR69uxJQEAAc+bMcWxLTExkyZIl3HXXXY5t1apV4/jx46XKqLkcHTp0KPR9ycuOAnjggQf49ddf6d69O6tXr2bixIl07dqVBg0a8Oeff17SdWfNmkVwcLDj/TeZTNx11118++23WK3WEo+fPn06H3/8MZGRkcyfP5/nnnuOxo0bc/PNN3PixIkSj1+6dCnZ2dk8/fTT+cqLHnroIXx9ffn5558B2Lx5M4cOHeLpp5+mWrVq+c5RWOPo5cuX07dvX26++WbmzZtXZNP0wjRq1IjAwEAiIyN55JFHqF+/Pj///DOenp6OMW5uboWWKF5s7ty5BAQE8MQTTxTYlzfv77//Hj8/P3r37p0ve6xNmzZ4e3uzfPnyIs+ft7paYZlRdevWJTAw0PH1448/OvZd2CA6LS2Ns2fP0rlzZwzDYPPmzSXeV69evfI1iW7RogW+vr6lXi1t6NChDBgwgISEBD755JN88ylvee/NuXPnKuwaIiJyfdMqZiIiIiUIDAykV69ezJ49m/T0dKxWK3fccUexx4SFhdGrV6/Lvvbu3bvZvHkzI0eO5MCBA47t3bt355NPPiElJQVfX98ij3d2dmbo0KHMnj2brKws3NzcmDdvHhaLJV+A6MUXX2Tp0qW0b9+e+vXr06dPH+65555C++5cjoCAgFK9L3379qVv376kp6cTHR3NnDlz+Oyzz7jlllvYs2dPmXoRWa1Wvv32W3r06OHorwP2YNU777zD77//Tp8+fYo9h9lsZuzYsYwdO5b4+HjWrFnDZ599xqJFixg+fDh//PFHsccfOXIEsAdlLuTq6krdunUd+/PKvJo1a1bifWVmZjJw4EDatGnDd999h7Nz2f5ZN3fuXHx9fXFxcSEsLCxfICRPrVq1Cu0FdbGYmBgaNWpU7Bz2799PcnJykX92cXFxRR6bFxwtrLfS//73PywWC1u3bs3XUwvg6NGjvPbaa/z4448F+hyVpldP7dq1C2yrXr16qXom5WnXrh2//PILbdu2LfUxlyLvvSmsP5OIiEhpKEAkIiJSCvfccw8PPfQQsbGx9O/fv0B2R0WZOXMmAM888wzPPPNMgf1z584tMcNj+PDhfP755yxatIjBgwfz3XffERUVRcuWLR1jGjduzN69e1m4cCG//vorc+fOZfLkybz22mtMmDChfG+qDDw9PenatStdu3YlICCACRMmsGjRIkaNGlXqcyxbtoxTp07x7bff8u233xbYP2vWrBIDRBeqUaMGt956K7feeivdu3dn5cqVHDlyxNGr6Epxc3NjwIAB/O9//+PXX3/llltuKdPx3bp1IyAgoNgx5ZnxYrPZCAoKKjLzLTAwsMhj69evj7Ozc75+RnluuukmgALBKavVSu/evUlISODFF18kKioKLy8vTpw4wejRo7HZbCXO+cKG1xcyDKPEY6+0vPemfv36lTwTERG5VilAJCIiUgq33347jzzyCOvWrctXrlWRDMNg9uzZ9OjRg8cee6zA/okTJzJr1qwSA0TdunUjNDSUOXPmcOONN7Js2TJeeeWVAuO8vLy46667uOuuu8jOzmbIkCG88cYbvPTSS7i7u5fbfV2qvAyMU6dOlem4WbNmERQUxCeffFJg37x585g/fz6fffbZJQVD2rZty8qVKzl16hR16tQptAwMzje63rt3L3Xr1nVsz87O5tChQ46sqrwsnh07dpSYaZW3otdtt93GnXfeyaJFiwqsLHal1KtXj/Xr12OxWHBxcSlyzNKlS+nSpUuZ32svLy9HMO7EiRPUqlWrxGO2b9/Ovn37+PLLL/M1pb5wRcLrhdVqZfbs2Xh6enLjjTdW9nREROQapR5EIiIipeDt7c2nn37K+PHjGTRo0BW55po1azh8+DD3338/d9xxR4Gvu+66i+XLl3Py5Mliz2M2m7njjjv46aef+Prrr8nJyclXXgYUWJXJ1dWVJk2aYBhGsatLVYTff/+90O2//PILULBMqzgZGRnMmzePW265pdD38PHHH+fcuXP5+tZcLDY21rFU+YWys7P5/fffMZvNjqwNLy8vgAJL1/fq1QtXV1c+/PDDfNkn06ZNIzk5mYEDBwJwww03EBkZyfvvv1/gHIVlrbi6ujJv3jzatWvHoEGD2LBhQ6nel/I2dOhQzp49y8cff1xgX968hw0bhtVqZeLEiQXG5OTkFLjfi7322mtYrVbuu+++QkvNLn5/8rJ/LtxuGAYffPBBifdzLbFarTz55JPs3r2bJ598stiSUxERkeIog0hERKSUylLWtG/fPkd52IWCg4Pp3bt3qc4xa9YsnJycHMGDi91666288sorfPvttzz77LPFnuuuu+7io48+4p///CfNmzd3LL2ep0+fPoSEhNClSxeCg4PZvXs3H3/8cb7m2OXhxIkThb4v3t7eDB48GLA3+I6MjGTQoEHUq1ePtLQ0li5dyk8//eQIhFxo06ZNTJo0qcA5u3fvzokTJzh37hy33nprofPp2LEjgYGBzJo1q0DQLM/x48dp3749PXv25OabbyYkJIS4uDi++eYbtm7dytNPP+0o1WrVqhVOTk78+9//Jjk5GTc3N3r27ElQUBAvvfQSEyZMoF+/ftx6663s3buXyZMn065dO+677z7AHsz79NNPGTRoEK1ateL+++8nNDSUPXv2sHPnTn777bcC8/Pw8GDhwoX07NmT/v37s3LlylL1MCpPI0eO5KuvvuLZZ59lw4YNdO3a1fHn9thjj3Hbbbdx00038cgjj/DWW2+xZcsW+vTpg4uLC/v37+f777/ngw8+KLa3V9euXfn444954oknaNCgAffeey9RUVFkZ2ezb98+Zs2ahaurKyEhIQBERUVRr149nnvuOU6cOIGvry9z584tU/+gq01ycrLj9yc9PZ0DBw4wb948YmJiGD58eKHBNxERkVKrrOXTRERErmYXLnNfnLIuc1/UUvYXL3OfnZ1t1KhRw+jatWux14+MjDRat25d4v3YbDYjPDzcAIxJkyYV2P/5558b3bp1M2rUqGG4ubkZ9erVM55//nkjOTm5xHPnuZxl7uvUqeMY98033xjDhw836tWrZ3h4eBju7u5GkyZNjFdeecVISUnJd87i3uuJEycagwYNMtzd3R1Ltxdm9OjRhouLi3H27NlC96ekpBgffPCB0bdvXyMsLMxwcXExfHx8jE6dOhlTp07Nt/y8YRjG1KlTjbp16xpOTk4F3o+PP/7YiIqKMlxcXIzg4GBjzJgxBZazNwz70vW9e/c2fHx8DC8vL6NFixb5lla/cJn7PGfPnjWaNGlihISEGPv37y/yfvOWdD9z5kyRYwyj+GXVL17m3jDsS8q/8sorRmRkpOHi4mKEhIQYd9xxhxETE5Nv3JQpU4w2bdoYHh4eho+Pj9G8eXPjhRdeME6ePFnsfPJs3rzZGDlypFG7dm3D1dXV8f6MGzcu35L0hmEYu3btMnr16mV4e3sbAQEBxkMPPeRYqv7C5eSLWuZ+7NixBa5fp04dY9SoUaWa64XnLun9Ls0y9xc+397e3kaDBg2M++67z1i8eHGp5yMiIlIUk2FchV32RERERERERETkilEPIhERERERERGRKk4BIhERERERERGRKk4BIhERERERERGRKk4BIhERERERERGRKk4BIhERERERERGRKk4BIhERERERERGRKs65sidwNbDZbJw8eRIfHx9MJlNlT0dEREREREREpFwYhsG5c+eoWbMmZnPReUIKEAEnT54kPDy8sqchIiIiIiIiIlIhjh07RlhYWJH7FSACfHx8APub5evrW8mzKZnFYmHx4sX06dMHFxeXyp6OXMP0LElF0zMmFUnPl1wpetakIun5koqk50sAUlJSCA8Pd8Q+iqIAETjKynx9fa+ZAJGnpye+vr76JZfLomdJKpqeMalIer7kStGzJhVJz5dUJD1fcqGSWuqoSbWIiIiIiIiISBWnAJGIiIiIiIiISBWnAJGIiIiIiIiISBWnHkSlZLVasVgslT0NwF5H6uzsTGZmJlartbKnI9cAJycnnJ2dS6w5FRERERERkapJAaJSSE1N5fjx4xiGUdlTAcAwDEJCQjh27Jg+8EupeXp6Ehoaiqura2VPRURERERERK4yChCVwGq1cvz4cTw9PQkMDLwqAjI2m43U1FS8vb0xm1UlKMUzDIPs7GzOnDnDoUOHaNCggZ4bERERERERyUcBohJYLBYMwyAwMBAPD4/Kng5gDxBlZ2fj7u6uD/pSKh4eHri4uHDkyBHHsyMiIiIiIiKSR9GFUroaModELoeCiSIiIiIiIlIUfWIUEREREREREaniFCASEREREREREaniFCASKSczZsygWrVqlT0NERERERERkTJTgOg6NXr0aEwmE48++miBfWPHjsVkMjF69OgC4y/+6tevHytWrCh034VfK1asAOD48eO4urrSrFmzYudnGAa9evWib9++BfZNnjyZatWq0atXr2KvGRERAUD37t0d29zc3KhVqxaDBg1i3rx5pXqvYmNjeeqpp6hfvz7u7u4EBwfTpUsXPv30U9LT00t1DoC77rqLffv2lXp8YQ4fPky3bt3w8vKiW7duHD58ON/+W265hblz517WNUREREREREQupgDRdSw8PJxvv/2WjIwMx7bMzExmz55N7dq1C4zv168fp06dyvf1zTff0Llz53zbhg0bVmBs586dAXsWzbBhw0hJSWH9+vVFzs1kMjF9+nTWr1/P559/7th+6NAhXnjhBT766CPmzp2b7xoA06dPd/y8ceNGx3EPPfQQp06dIiYmhrlz59KkSROGDx/Oww8/XOx7dPDgQVq3bs3ixYt588032bx5M2vXruWFF15g4cKFLF26tHRvNvaVwoKCgko9vjDjxo2jVq1abNmyhdDQUJ577jnHvjlz5mA2mxk6dOhlXUNERERERETkYlrmvowMwyDDYq2Ua3u4OJVpNbUbbriBmJgY5s2bx7333gvAvHnzqF27NpGRkQXGu7m5ERISUui5Ltzu4eFBVlZWgbGGYTB9+nQmT55MWFgY06ZNo0OHDkXOLzw8nA8++IDHH3+cPn36EBERwYMPPkifPn0YMWIEAH5+fvmOqVatWqFz9PT0dGwPCwujY8eOREVF8cADDzBs2DB69epV6Bwee+wxnJ2d2bRpE15eXo7tdevW5bbbbsMwDMe2d999l+nTp3Pw4EH8/f0ZNGgQ//nPf/D29gbswbGnn36apKQkAMaPH8+CBQsYN24c//jHP0hMTKR///5MnToVHx+fQueze/du3n33XRo0aMDo0aMdAaKkpCReffVVli1bVuT7KSIiIiIiInKpFCAqowyLlSav/VYp1971el88Xcv2R/bAAw8wffp0R4Doiy++4P7773eUhJWn5cuXk56eTq9evahVqxadO3fmvffeyxd4udioUaOYP38+DzzwAEOGDGHHjh3s3LmzXOYzatQoxo0bx7x58woNEMXHxzsyh4qa44UBObPZzIcffkhkZCQHDx7kscce44UXXmDy5MlFziEmJoYFCxawcOFCEhMTGTZsGP/617944403Ch3fsmVLli5dSp8+fVi8eDEtWrQA4Pnnn2fs2LGEh4eX5S0QERERERERKRWVmF3n7rvvPlavXs2RI0c4cuQIa9as4b777it07MKFC/H29s739eabb5b6WtOmTWP48OE4OTnRrFkz6taty/fff1/icVOmTGHHjh08/fTTTJkyhcDAwFJfszhms5mGDRsW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KexZtlgs/PLLLwwYMKBAXySR8qBnTCqSni+5UvSsSUXS8yUVSc/Xpdt1MoUBH/5BoI8bG1/pVdnTuSzFxTwupOiCiIiIiIiIiMgFLFaVmImIiIiIiIiIVGlVscRMASIRERERERERkQtk51S9Vcyqzp2KiIiIiIiIiJRCXomZiwJEcjH18pZrnZ5hERERERGR0skrMXNViZnkcXJyAiA7O7uSZyJyedLT0wG0eoGIiIiIiEgJqmKJmXNlT+Bq5+zsjKenJ2fOnMHFxeWqWFbeZrORnZ1NZmbmVTEfuboZhkF6ejpxcXFUq1bNEfQUERERERGRwp0vMas6GUQKEJXAZDIRGhrKoUOHOHLkSGVPB7B/4M/IyMDDwwOTqeo8rHJ5qlWrRkhISGVPQ0RERERE5Kp3fhWzqpOUoQBRKbi6utKgQYOrpszMYrGwatUqunXrpnIhKRUXFxdlDomIiIiIiJSSJbfEzFUBIrmY2WzG3d29sqcB2Psi5eTk4O7urgCRiIiIiIiISDnLzi0xc65CJWZVJxQmIiIiIiIiIlIKWuZeRERERERERKSKy7FWvRKzqnOnIiIiIiIiIiKloBIzEREREREREZEqTiVmIiIiIiIiIiJVXF6JmQJEIiIiIiIiIiJV1PkMIpWYiYiIiIiIiIhUSdkqMRMRERERERERqdpUYiYiIiIiIiIiUsXllZi5OledsEnVuVMRERERERERkVJwLHNvVg8iEREREREREZEqyaISMxERERERERGRqi0nr0m1SsxERERERERERKomxzL3KjETEREREREREamaslViJiIiIiIiIiJStanETERERERERESkilOJmYiIiIiIiIhIFacSMxERERERERGRKk4lZlfYW2+9Rbt27fDx8SEoKIjBgwezd+/efGO6d++OyWTK9/Xoo4/mG3P06FEGDhyIp6cnQUFBPP/88+Tk5FzJWxERERERERGR60RVLDFzrsyLr1y5krFjx9KuXTtycnJ4+eWX6dOnD7t27cLLy8sx7qGHHuL11193/Ozp6el4bbVaGThwICEhIfz555+cOnWKkSNH4uLiwptvvnlF70dERERERERErn2WvBKzKpRBVKkBol9//TXfzzNmzCAoKIjo6Gi6devm2O7p6UlISEih51i8eDG7du1i6dKlBAcH06pVKyZOnMiLL77I+PHjcXV1rdB7EBEREREREZHriyODqAr1IKrUANHFkpOTAfD398+3fdasWcycOZOQkBAGDRrEP/7xD0cW0dq1a2nevDnBwcGO8X379mXMmDHs3LmT1q1bF7hOVlYWWVlZjp9TUlIAsFgsWCyWcr+v8pY3x2thrnJ107MkFU3PmFQkPV9ypehZk4qk50sqkp6vS2fJsQeITIb1mn//Sjt/k2EYRgXPpVRsNhu33norSUlJrF692rF9ypQp1KlTh5o1a7Jt2zZefPFF2rdvz7x58wB4+OGHOXLkCL/99pvjmPT0dLy8vPjll1/o379/gWuNHz+eCRMmFNg+e/bsfOVrIiIiIiIiIlL1vLzRibQcE39vmUPoNR4mSE9P55577iE5ORlfX98ix101GURjx45lx44d+YJDYA8A5WnevDmhoaHcfPPNxMTEUK9evUu61ksvvcSzzz7r+DklJYXw8HD69OlT7Jt1tbBYLCxZsoTevXvj4uJS2dORa5ieJaloesakIun5kitFz5pUJD1fUpH0fF26V/5aBjk53NzjJiJqeJV8wFUsr2qqJFdFgOjxxx9n4cKFrFq1irCwsGLHdujQAYADBw5Qr149QkJC2LBhQ74xp0+fBiiyb5Gbmxtubm4Ftru4uFxTvzTX2nzl6qVnSSqanjGpSHq+5ErRsyYVSc+XVCQ9X2WXY7OXmHm4uV7z711p51+p3ZYMw+Dxxx9n/vz5LFu2jMjIyBKP2bJlCwChoaEAdOrUie3btxMXF+cYs2TJEnx9fWnSpEmFzFtERERERERErl+OVczUpPrKGDt2LLNnz+Z///sfPj4+xMbGAuDn54eHhwcxMTHMnj2bAQMGUKNGDbZt28YzzzxDt27daNGiBQB9+vShSZMmjBgxgv/85z/Exsby6quvMnbs2EKzhEREREREREREimKzGVhtVS9AVKl3+umnn5KcnEz37t0JDQ11fM2ZMwcAV1dXli5dSp8+fYiKimLcuHEMHTqUn376yXEOJycnFi5ciJOTE506deK+++5j5MiRvP7665V1WyIiIiIiIiJyjbLklpcBuDiZKnEmV1alZhCVtIBaeHg4K1euLPE8derU4ZdffimvaYmIiIiIiIhIFZVXXgbKIBIRERERERERqZIsORdmEFWdsEnVuVMRERERERERkRLklZiZTeBkrjolZgoQiYiIiIiIiIjkqoormIECRCIiIiIiIiIiDnklZgoQiYiIiIiIiIhUURZrXoCo6pSXgQJEIiIiIiIiIiIOKjETEREREREREanizmcQVa2QSdW6WxERERERERGRYqjETERERERERESkilOJmYiIiIiIiIhIFZeXQeSsAJGIiIiIiIiISNWUFyByVYmZiIiIiIiIiEjVpBIzEREREREREZEq7nyJmTKIRERERERERESqJC1zLyIiIiIiIiJSxeXklpi5KkAkIiIiIiIiIlI1ZSuDSERERERERESkalMPIhERERERERGRKu78MvdVK2RSte5WRERERERERKQYWuZeRERERERERKSKU4mZiIiIiIiIiEgVp2XuRURERERERESqOMcy985VK2RSte5WRERERERERKQYecvcO5tVYiYiIiIiIiIiUiWpxExEREREREREpIpTiZmIiIiIiIiISBWX7cggUomZiIiIiIiIiEiVZMnNIHI2V62QSdW6WxERERERERGRYuTkZRCpxExEREREREREpGrKa1LtqhIzEREREREREZGqKVslZiIiIiIiIiIiVZslRyVmIiIiIiIiIiJVWo5NJWYiIiIiIiIiIlWaSsxERERERERERKo4lZiJiIiIiIiIiFRxeSVmLioxExERERERERGpmiy5JWYuTlUrZFK17lZEREREREREpBjZeSVmChCJiIiIiIiIiFRNKjETEREREREREani8krMXJVBJCIiIiIiIiJSNeWtYuasAJGIiIiIiIiISNWUbVWJmYiIiIiIiIjIdS09O4e1MfHk5AaCLpZjq5olZs6VPQERERERERERkSshK8fK3VPWsfV4MnUDvXihbxR9mwZjMtmzhaw2A2tugEglZiIiIiIiIiIi16EJP+1i6/FkAA6eSePRmdG8umCHY7/lgqwilZiJiIiIiIiIiFxnvt90jNnrj2IywSf33MCY7vXs26OPO8rN8srLAFyUQSQiIiIiIiIicv3YeTLZkSn09M0NGdgilOf7NMLT1YnsHBuH49OA8yuYgQJEIiIiIiIiIiLXjeR0C4/OjCYrx0aPRoE80bM+AGaziUYhPgDsPnUOOF9iZjaBk1klZiIiIiIiIiIi1zybzeCZ77ZwLCGDcH8P3rurFeYLAj9RIb4A7IlNAcCSW2JW1bKHQAEiEREREREREblOfbL8AMv2xOHmbObTe9tQzdM13/7GofYM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yTFhYWHmySefbPK2FyxYYLp3737FsUVERJg//elPddOKioq4yVgr1pbyVOvo0aNGktm8eXOTxwLHaIv5evfdd42Hh4c5e/Zsk8cCx2gr+bLZbKZnz57m8ccfb/L20bLaStYutWrVKuPr68uJfCvQmvN1KQoi19USGauurjbZ2dn1XjNmzDB9+vQx2dnZl30CLOeP7ouCyE5mzJhhAgMDTWpqar1H417a8sfGxpqoqCizadMms2PHjgaP/c7OzjahoaHm/vvvr7eO06dP1y2zYsUK8+mnn5oDBw6YAwcOmL/+9a/G39/fPPvss1cc36JFi0xQUJBZt26dycrKMhMnTmzwmMKjR4+azMxMs2DBAuPn52cyMzNNZmamKSkpseORQlO4ep7+8Y9/mKSkJJOZmWmOHDliUlJSTExMjLnuuutMeXm5nY8WfipXz1daWppZunSp2bVrlzl48KB59913TWhoqJk6daqdjxSaw9XzVevLL780kszevXvtdGRgb20ha0lJSSYjI8Ps37/frFixwvj4+JhXXnnFjkcJzdXa83XmzBmTmZlp1q9fbySZNWvWmMzMTJOXl1e3TF5ensnMzDSvv/66kWS++uork5mZac6cOWPHI4XmaqmM/bumPMXMGM4f3RUFkZ1IavSVnJxct8yFCxfMzJkzTceOHY2vr6+ZNGlSvX/E4+PjG13Hpf8HYfny5eaGG24wvr6+JiAgwAwaNMi8+uqr9R6R2hibzWaef/55Ex4ebqxWq7nzzjvN/v376y3z4IMPNrp9rvhoea6ep6ysLDNixAgTHBxsrFar6dGjh4mNjTUnTpyw2zFC87l6vjIyMszQoUNNYGCgad++venXr5956aWXKB9bCVfPV60pU6aYmJiYaz4ecJy2kLUHHnjABAcHG29vbzNgwADz9ttv2+XY4Nq19nwlJyc3uu74+Pirbv/SfYDztFTG/l1TCyLOH92TxRjuGAsAAAAAAODOeEQCAAAAAACAm6MgAgAAAAAAcHMURAAAAAAAAG6OgggAAAAAAMDNURABAAAAAAC4OQoiAAAAAAAAN0dBBAAAAAAA4OYoiAAAAAAAANwcBREAAAAAAICboyACAABohmnTpslischiscjLy0vh4eEaPXq03njjDdlstiav580331RQUJDjBgoAANAEFEQAAADNNG7cOOXl5enIkSPasGGDRowYoUcffVTjx49XVVWVs4cHAADQZBREAAAAzWS1WhUREaGuXbtq8ODBeuaZZ7Ru3Tpt2LBBb775piQpMTFRN954ozp06KDIyEjNnDlTpaWlkqTU1FRNnz5dRUVFdVcjvfDCC5KkiooKPfHEE+ratas6dOigoUOHKjU11Tk7CgAA2jwKIgAAADsaOXKkoqOj9cknn0iSPDw8tHz5cu3Zs0dvvfWWNm3apKeeekqSFBMTo2XLlikgIEB5eXnKy8vTE088IUmaPXu20tPTtWbNGmVlZek3v/mNxo0bp9zcXKftGwAAaLssxhjj7EEAAAC4mmnTpqmwsFBr165tMO/ee+9VVlaWvvvuuwbzPv74Y8XGxuqHH36QVHMPoscee0yFhYV1yxw7dky9evXSsWPH1KVLl7rpo0aN0pAhQ/TSSy/ZfX8AAIB7a+fsAQAAALQ1xhhZLBZJ0pdffqmEhATt27dPxcXFqqqqUnl5ucrKyuTr69vo+7Ozs1VdXa3evXvXm15RUaGQkBCHjx8AALgfCiIAAAA727t3r3r27KkjR45o/PjxmjFjhl588UUFBwdr27Zteuihh3Tx4sXLFkSlpaXy9PRURkaGPD09683z8/NriV0AAABuhoIIAADAjjZt2qTs7Gz9/ve/V0ZGhmw2m5YsWSIPj5pbP3744Yf1lvf29lZ1dXW9aYMGDVJ1dbVOnz6t2267rcXGDgAA3BcFEQAAQDNVVFQoPz9f1dXVOnXqlDZu3KiEhASNHz9eU6dOVU5OjiorK5WUlKRf/epX2r59u1auXFlvHT169FBpaalSUlIUHR0tX19f9e7dW7/97W81depULVmyRIMGDVJBQYFSUlI0YMAA3XXXXU7aYwAA0FbxFDMAAIBm2rhxozp37qwePXpo3Lhx2rx5s5YvX65169bJ09NT0dHRSkxM1Msvv6z+/ftr9erVSkhIqLeOmJgYxcbGavLkyQoNDdUf//hHSVJycrKmTp2qxx9/XH369NHdd9+tb7/9VlFRUc7YVQAA0MbxFDMAAAAAAAA3xxVEAAAAAAAAbo6CCAAAAAAAwM1REAEAAAAAALg5CiIAAAAAAAA3R0EEAAAAAADg5iiIAAAAAAAA3BwFEQAAAAAAgJujIAIAAAAAAHBzFEQAAAAAAABujoIIAAAAAADAzVEQAQAAAAAAuLn/D7JH0xh60x8MAAAAAElFTkSuQmCC", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -720,19 +559,68 @@ "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", - "[*********************100%***********************] 1 of 1 completed\n", - "[*********************100%***********************] 1 of 1 completed\n", + "Requirement already satisfied: yfinance in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (0.2.36)\n", + "Requirement already satisfied: pandas>=1.3.0 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.2.0)\n", + "Requirement already satisfied: numpy>=1.16.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.26.3)\n", + "Requirement already satisfied: requests>=2.31 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.31.0)\n", + "Requirement already satisfied: multitasking>=0.0.7 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (0.0.11)\n", + "Requirement already satisfied: lxml>=4.9.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (5.1.0)\n", + "Requirement already satisfied: appdirs>=1.4.4 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.4.4)\n", + "Requirement already satisfied: pytz>=2022.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2023.3.post1)\n", + "Requirement already satisfied: frozendict>=2.3.4 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.4.0)\n", + "Requirement already satisfied: peewee>=3.16.2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (3.17.0)\n", + "Requirement already satisfied: beautifulsoup4>=4.11.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (4.12.3)\n", + "Requirement already satisfied: html5lib>=1.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.1)\n", + "Requirement already satisfied: soupsieve>1.2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from beautifulsoup4>=4.11.1->yfinance) (2.5)\n", + "Requirement already satisfied: six>=1.9 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from html5lib>=1.1->yfinance) (1.16.0)\n", + "Requirement already satisfied: webencodings in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from html5lib>=1.1->yfinance) (0.5.1)\n", + "Requirement already satisfied: python-dateutil>=2.8.2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from pandas>=1.3.0->yfinance) (2.8.2)\n", + "Requirement already satisfied: tzdata>=2022.7 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from pandas>=1.3.0->yfinance) (2023.4)\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from requests>=2.31->yfinance) (3.3.2)\n", + "Requirement already satisfied: idna<4,>=2.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from requests>=2.31->yfinance) (3.6)\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from requests>=2.31->yfinance) (2.1.0)\n", + "Requirement already satisfied: certifi>=2017.4.17 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from requests>=2.31->yfinance) (2023.11.17)\n", + "/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages/yfinance/utils.py:775: FutureWarning: The 'unit' keyword in TimedeltaIndex construction is deprecated and will be removed in a future version. Use pd.to_timedelta instead.\n", + " df.index += _pd.TimedeltaIndex(dst_error_hours, 'h')\n", + "[*********************100%%**********************] 1 of 1 completed\n", + "/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages/yfinance/utils.py:775: FutureWarning: The 'unit' keyword in TimedeltaIndex construction is deprecated and will be removed in a future version. Use pd.to_timedelta instead.\n", + " df.index += _pd.TimedeltaIndex(dst_error_hours, 'h')\n", + "[*********************100%%**********************] 1 of 1 completed\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to ipython_user_proxy):\n", "\n", - "I'm glad the code executed successfully. You should now see a chart comparing the YTD percentage gain of META (Facebook) and TESLA stocks. If you have any further questions or need assistance with another task, feel free to ask.\n", + "The code has executed successfully, and the required libraries are already installed on your system. The warning from `yfinance` about the 'unit' keyword in `TimedeltaIndex` construction is a future deprecation notice and does not affect the execution of the current code.\n", + "\n", + "Since the code has been executed without any errors, you should have seen a plot displaying the YTD gain percentage for both META and TESLA stocks. This plot visually compares the performance of the two stocks since the beginning of the year.\n", + "\n", + "If you have seen the plot and it reflects the YTD gains for both stocks, then the task is complete. If the plot did not display or if there were any issues with the visualization, please let me know so I can assist further.\n", + "\n", + "If everything is in order, this concludes the task.\n", "\n", "TERMINATE\n", "\n", "--------------------------------------------------------------------------------\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/qingyunwu/Documents/github/autogen/autogen/agentchat/conversable_agent.py:790: UserWarning: No summary_method provided or summary_method is not supported: \n", + " warnings.warn(\"No summary_method provided or summary_method is not supported: \")\n" + ] + }, + { + "data": { + "text/plain": [ + "ChatResult(chat_history=[{'content': 'Plot a chart of META and TESLA stock price gain YTD\\nIf you suggest code, the code will be executed in IPython.', 'role': 'assistant'}, {'content': \"To plot a chart of META (Facebook's parent company, Meta Platforms, Inc.) and TESLA (Tesla, Inc.) stock price gain year-to-date (YTD), we can use Python with libraries such as `pandas` for data manipulation and `matplotlib` or `plotly` for plotting. We will also use `yfinance` to fetch historical stock data.\\n\\nHere's the plan:\\n1. Install the `yfinance` library if it's not already installed.\\n2. Fetch the YTD stock price data for META and TESLA.\\n3. Calculate the YTD gain for each stock.\\n4. Plot the YTD gain on a chart.\\n\\nFirst, let's install `yfinance` and import the necessary libraries. Execute the following code:\\n\\n```python\\n# Install yfinance if not already installed\\n!pip install yfinance\\n\\nimport yfinance as yf\\nimport pandas as pd\\nimport matplotlib.pyplot as plt\\nfrom datetime import datetime\\n\\n# Check if today's date is required or the last trading day\\ntoday = datetime.today().strftime('%Y-%m-%d')\\n\\n# Fetch YTD stock data for META and TESLA\\nmeta_data = yf.download('META', start='2023-01-01', end=today)\\ntesla_data = yf.download('TSLA', start='2023-01-01', end=today)\\n\\n# Calculate the YTD gain for each stock\\nmeta_ytd_gain = (meta_data['Close'] - meta_data['Close'].iloc[0]) / meta_data['Close'].iloc[0] * 100\\ntesla_ytd_gain = (tesla_data['Close'] - tesla_data['Close'].iloc[0]) / tesla_data['Close'].iloc[0] * 100\\n\\n# Plot the YTD gain on a chart\\nplt.figure(figsize=(14, 7))\\nplt.plot(meta_ytd_gain.index, meta_ytd_gain, label='META YTD Gain %')\\nplt.plot(tesla_ytd_gain.index, tesla_ytd_gain, label='TESLA YTD Gain %')\\nplt.title('META vs TESLA Stock Price Gain YTD')\\nplt.xlabel('Date')\\nplt.ylabel('Gain %')\\nplt.legend()\\nplt.grid(True)\\nplt.show()\\n```\\n\\nThis code will install `yfinance`, fetch the YTD stock data for META and TESLA, calculate the YTD gain, and plot it on a chart. Please execute the code in your IPython environment.\", 'role': 'user'}, {'content': \"exitcode: 0 (execution succeeded)\\nCode output: \\nRequirement already satisfied: yfinance in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (0.2.36)\\r\\nRequirement already satisfied: pandas>=1.3.0 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.2.0)\\r\\nRequirement already satisfied: numpy>=1.16.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.26.3)\\r\\nRequirement already satisfied: requests>=2.31 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.31.0)\\r\\nRequirement already satisfied: multitasking>=0.0.7 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (0.0.11)\\r\\nRequirement already satisfied: lxml>=4.9.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (5.1.0)\\r\\nRequirement already satisfied: appdirs>=1.4.4 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.4.4)\\r\\nRequirement already satisfied: pytz>=2022.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2023.3.post1)\\r\\nRequirement already satisfied: frozendict>=2.3.4 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.4.0)\\r\\nRequirement already satisfied: peewee>=3.16.2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (3.17.0)\\r\\nRequirement already satisfied: beautifulsoup4>=4.11.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (4.12.3)\\r\\nRequirement already satisfied: html5lib>=1.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.1)\\r\\nRequirement already satisfied: soupsieve>1.2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from beautifulsoup4>=4.11.1->yfinance) (2.5)\\r\\nRequirement already satisfied: six>=1.9 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from html5lib>=1.1->yfinance) (1.16.0)\\r\\nRequirement already satisfied: webencodings in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from html5lib>=1.1->yfinance) (0.5.1)\\r\\nRequirement already satisfied: python-dateutil>=2.8.2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from pandas>=1.3.0->yfinance) (2.8.2)\\r\\nRequirement already satisfied: tzdata>=2022.7 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from pandas>=1.3.0->yfinance) (2023.4)\\r\\nRequirement already satisfied: charset-normalizer<4,>=2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from requests>=2.31->yfinance) (3.3.2)\\r\\nRequirement already satisfied: idna<4,>=2.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from requests>=2.31->yfinance) (3.6)\\r\\nRequirement already satisfied: urllib3<3,>=1.21.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from requests>=2.31->yfinance) (2.1.0)\\r\\nRequirement already satisfied: certifi>=2017.4.17 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from requests>=2.31->yfinance) (2023.11.17)\\r\\n/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages/yfinance/utils.py:775: FutureWarning: The 'unit' keyword in TimedeltaIndex construction is deprecated and will be removed in a future version. Use pd.to_timedelta instead.\\n df.index += _pd.TimedeltaIndex(dst_error_hours, 'h')\\n\\r[*********************100%%**********************] 1 of 1 completed\\n/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages/yfinance/utils.py:775: FutureWarning: The 'unit' keyword in TimedeltaIndex construction is deprecated and will be removed in a future version. Use pd.to_timedelta instead.\\n df.index += _pd.TimedeltaIndex(dst_error_hours, 'h')\\n\\r[*********************100%%**********************] 1 of 1 completed\\n\", 'role': 'assistant'}, {'content': \"The code has executed successfully, and the required libraries are already installed on your system. The warning from `yfinance` about the 'unit' keyword in `TimedeltaIndex` construction is a future deprecation notice and does not affect the execution of the current code.\\n\\nSince the code has been executed without any errors, you should have seen a plot displaying the YTD gain percentage for both META and TESLA stocks. This plot visually compares the performance of the two stocks since the beginning of the year.\\n\\nIf you have seen the plot and it reflects the YTD gains for both stocks, then the task is complete. If the plot did not display or if there were any issues with the visualization, please let me know so I can assist further.\\n\\nIf everything is in order, this concludes the task.\\n\\nTERMINATE\", 'role': 'user'}], summary='', cost=({'total_cost': 0.6175200000000001, 'gpt-4': {'cost': 0.6175200000000001, 'prompt_tokens': 15456, 'completion_tokens': 2564, 'total_tokens': 18020}}, {'total_cost': 0.4973699999999999, 'gpt-4': {'cost': 0.4973699999999999, 'prompt_tokens': 13007, 'completion_tokens': 1786, 'total_tokens': 14793}}))" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -742,6 +630,9 @@ " max_consecutive_auto_reply=10,\n", " is_termination_msg=lambda x: x.get(\"content\", \"\").rstrip().endswith(\"TERMINATE\")\n", " or x.get(\"content\", \"\").rstrip().endswith('\"TERMINATE\".'),\n", + " code_execution_config={\n", + " \"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.\n", + " },\n", ")\n", "# the assistant receives a message from the user, which contains the task description\n", "ipy_user.initiate_chat(\n", diff --git a/notebook/agentchat_multi_task_chats.ipynb b/notebook/agentchat_multi_task_chats.ipynb new file mode 100644 index 000000000000..fecf986727ca --- /dev/null +++ b/notebook/agentchat_multi_task_chats.ipynb @@ -0,0 +1,2017 @@ +{ + "cells": [ + { + "attachments": {}, + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "# Auto Generated Agent Chat: Multi Task Chats\n", + "\n", + "This notebook showcases how to use the new chat interface of conversational agents in AutoGen: initiate_chats, to conduct a series of tasks. This new interface allows one to pass multiple tasks and their corresponding dedicated agents. Once initiate_chats is invoked, the tasks will be solved sequentially, with the summaries from previous tasks provided to subsequent tasks as context, if the `summary_method` argument is specified.\n", + "\n", + "\n", + "## Requirements\n", + "\n", + "AutoGen requires `Python>=3.8`. To run this notebook example, please install:\n", + "```bash\n", + "pip install pyautogen\n", + "```" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Example Tasks\n", + "Below are three example tasks, with each task being a string of text describing the request. The completion of later tasks requires or benefits from the results of previous tasks.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import autogen\n", + "\n", + "config_list = autogen.config_list_from_json(env_or_file=\"OAI_CONFIG_LIST\")\n", + "llm_config = {\"config_list\": config_list}\n", + "\n", + "financial_tasks = [\n", + " \"\"\"What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\"\"\",\n", + " \"\"\"Investigate possible reasons of the stock performance.\"\"\",\n", + "]\n", + "\n", + "writing_tasks = [\"\"\"Develop an engaging blog post using any information provided.\"\"\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scenario 1: Solve the tasks with a series of chats\n", + "\n", + "The `initiate_chats` interface can take a list of dictionaries as inputs. Each dictionary preserves the following fields: \n", + "- `message`: is a string of text (typically a message containing the task);\n", + "- `recipient`: a conversable agent dedicated for the task;\n", + "- `summary_method`: A string specifying the method to get a summary from the chat. Currently supported choices include `last_msg`, which takes the last message from the chat history as the summary, and `reflection_with_llm`, which uses an LLM call to reflect on the chat history and summarize a takeaway;\n", + "- `summary_prompt`: A string specifying how to instruct an LLM-backed agent (either the recipient or the sender in the chat) to reflect on the chat history and derive a summary. If not otherwise specified, a default prompt will be used when `summary_method` is `reflection_with_llm`.\n", + "\"Summarize the takeaway from the conversation. Do not add any introductory phrases. If the intended request is NOT properly addressed, please point it out.\"\n", + "- `carryover`: A string or a list of string to specify additional context to be used in the chat. With `initiate_chats`, summary from previous chats will be added as carryover. They will be appended after the carryover provided by the user." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", + "\n", + "With the following carryover: \n", + "\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", + "\n", + "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", + "\n", + "To get the current stock prices of NVDA (NVIDIA Corporation) and TSLA (Tesla, Inc.), along with their performance over the past month in terms of percentage change, we can use a Python library like `yfinance`. This library allows downloading of historical market data from Yahoo Finance.\n", + "\n", + "Let's proceed in the following steps:\n", + "\n", + "1. I will provide you a Python script that utilizes the `yfinance` library to fetch the current stock prices and historical data for the past month for both NVDA and TSLA.\n", + "2. The script will then calculate the percentage change in the stock prices over the past month.\n", + "\n", + "Please make sure that you have `yfinance` installed in your Python environment before running the script. You can install it using `pip install yfinance`.\n", + "\n", + "Here is the Python code to execute:\n", + "\n", + "```python\n", + "# filename: stock_info.py\n", + "import yfinance as yf\n", + "from datetime import datetime, timedelta\n", + "\n", + "# Function to get current stock price\n", + "def get_stock_price(stock_ticker):\n", + " stock = yf.Ticker(stock_ticker)\n", + " todays_data = stock.history(period='1d')\n", + " return todays_data['Close'][0]\n", + "\n", + "# Function to calculate percentage change over the past month\n", + "def get_percentage_change(stock_ticker):\n", + " stock = yf.Ticker(stock_ticker)\n", + " end_date = datetime.now()\n", + " start_date = end_date - timedelta(days=30)\n", + " historical_data = stock.history(start=start_date, end=end_date)\n", + " price_end = historical_data['Close'][-1]\n", + " price_start = historical_data['Close'][0]\n", + " percent_change = ((price_end - price_start)/price_start) * 100\n", + " return percent_change\n", + "\n", + "# Getting the current price and performance for NVDA and TSLA\n", + "nvda_price = get_stock_price('NVDA')\n", + "tesla_price = get_stock_price('TSLA')\n", + "nvda_change = get_percentage_change('NVDA')\n", + "tesla_change = get_percentage_change('TSLA')\n", + "\n", + "# Output the results\n", + "print(f\"NVDA (NVIDIA Corporation) stock price: ${nvda_price:.2f}\")\n", + "print(f\"TESLA (Tesla, Inc.) stock price: ${tesla_price:.2f}\")\n", + "print(f\"NVDA percentage change over past month: {nvda_change:.2f}%\")\n", + "print(f\"TESLA percentage change over past month: {tesla_change:.2f}%\")\n", + "```\n", + "\n", + "Please run this script in your environment and share with me the output. I'll then verify the information.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", + "\n", + "exitcode: 0 (execution succeeded)\n", + "Code output: \n", + "NVDA (NVIDIA Corporation) stock price: $679.74\n", + "TESLA (Tesla, Inc.) stock price: $177.02\n", + "NVDA percentage change over past month: 30.09%\n", + "TESLA percentage change over past month: -21.85%\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", + "\n", + "The script has been executed successfully and provided us with the current stock prices and the performance over the past month for NVIDIA and Tesla:\n", + "\n", + "- NVDA (NVIDIA Corporation) current stock price: $679.74\n", + "- NVDA percentage change over the past month: +30.09%\n", + "- TSLA (Tesla, Inc.) current stock price: $177.02\n", + "- TSLA percentage change over the past month: -21.85%\n", + "\n", + "According to these results, NVIDIA Corporation's stock (NVDA) has seen an approximate increase of 30.09% over the past month, while Tesla, Inc.'s stock (TSLA) has decreased by about 21.85% in the same period.\n", + "\n", + "Please be aware that stock market prices are volatile and can vary quickly throughout a trading day. The information provided here reflects the stock prices and percentage changes at the time the script was run.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "Investigate possible reasons of the stock performance.\n", + "\n", + "With the following carryover: \n", + "The given Python script successfully fetched the stock prices and percentage changes over the past month for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). NVDA had a significant price increase of approximately 30.09%, while TSLA experienced a notable decline of about 21.85%.\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Researcher):\n", + "\n", + "Investigate possible reasons of the stock performance.\n", + "Context: \n", + "The given Python script successfully fetched the stock prices and percentage changes over the past month for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). NVDA had a significant price increase of approximately 30.09%, while TSLA experienced a notable decline of about 21.85%.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to User):\n", + "\n", + "To investigate the possible reasons behind the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), I would approach it in the following way:\n", + "\n", + "1. Look for recent news articles about both companies that could shed light on significant events influencing investor sentiment and stock prices.\n", + "2. Review any recent earnings reports or financial statements released by the companies that might explain the performance.\n", + "3. Check for any changes in analyst ratings or recommendations that could impact the stock movement.\n", + "4. Research broader market trends in the technology sector and the automotive industry, considering the relevance to NVDA and TSLA.\n", + "5. Examine whether there were any significant legal or regulatory developments affecting these companies.\n", + "6. Consider external factors such as economic indicators, geopolitical events, or supply chain issues that might influence these stocks.\n", + "\n", + "Since I cannot browse the web directly, I will provide you with a Python script that, when executed, will search for recent news headlines related to NVDA and TSLA using the Google News RSS feed. This can give us some insights into relevant events or announcements that may have influenced their stock performances.\n", + "\n", + "To proceed, please run the following Python script to fetch the latest news headlines for NVDA and TSLA:\n", + "\n", + "```python\n", + "# filename: fetch_stock_news.py\n", + "import feedparser\n", + "\n", + "def fetch_news_for_stock(ticker):\n", + " # Construct the Google News RSS URL for the given stock ticker\n", + " url = f'https://news.google.com/rss/search?q={ticker}&hl=en-US&gl=US&ceid=US:en'\n", + " \n", + " # Parse the RSS feed\n", + " feed = feedparser.parse(url)\n", + " \n", + " # Extract and print news headlines\n", + " headlines = []\n", + " for entry in feed.entries:\n", + " headlines.append(entry.title)\n", + " \n", + " return headlines\n", + "\n", + "# Tickers for NVIDIA and Tesla\n", + "tickers = ['NVDA', 'TSLA']\n", + "\n", + "# Fetch and print news for each ticker\n", + "for ticker in tickers:\n", + " print(f\"Recent news headlines for {ticker}:\")\n", + " headlines = fetch_news_for_stock(ticker)\n", + " for headline in headlines:\n", + " print(f\" - {headline}\")\n", + " print(\"\\n\") # Print a new line for better readability between tickers\n", + "\n", + "# Note: Ensure that the 'feedparser' module is installed before running the script.\n", + "# You can install it using the command: `pip install feedparser`\n", + "```\n", + "\n", + "Please execute this script and provide me with the output. Depending on the output, we can analyze the reasons behind the differing stock performances.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Researcher):\n", + "\n", + "exitcode: 0 (execution succeeded)\n", + "Code output: \n", + "Recent news headlines for NVDA:\n", + " - Stocks making the biggest moves premarket: Estee Lauder, Nvidia, McDonald's, Caterpillar and more - CNBC\n", + " - Nvidia adds to recent gains as Goldman Sachs boosts prices target (NVDA) - Seeking Alpha\n", + " - Will Nvidia Stock Deliver Another Stellar Earnings Report? - TheStreet\n", + " - Will Nvidia (NVDA) Beat Estimates Again in Its Next Earnings Report? - Yahoo Finance\n", + " - 3 Promising AI Stocks That Are Cheaper Than Nvidia - The Motley Fool\n", + " - Nvidia is ‘clear beneficiary’ of Meta’s AI spending rush. Its stock is climbing. - MarketWatch\n", + " - January was great for stocks. Our top 5: NVDA, PANW, META, CRM, LLY - CNBC\n", + " - Goldman now sees Nvidia rising to $800 in 12 months - CNBC\n", + " - Wall Street Favorites: 3 Semiconductor Stocks With Strong Buy Ratings - InvestorPlace\n", + " - Nvidia Touches 650 After Meta, Amazon Rally; Is Nvidia A Buy? - Investor's Business Daily\n", + " - NVIDIA Corp (NVDA) is up 2.65% Monday In Premarket Trading - InvestorsObserver\n", + " - NASDAQ, AAPL, AMZN, NVDA, TSLA, GOOGL, META, NFLX, MSFT, Elliott Wave analysis [Video] - FXStreet\n", + " - NVDA Stock Price Predictions: Can Nvidia Really Hit $800 From Here? - InvestorPlace\n", + " - NVIDIA Corp (NVDA)'s Winning Formula: Financial Metrics and Competitive Strengths - GuruFocus.com\n", + " - NVIDIA Stock: A Deep Dive Into Analyst Perspectives (22 Ratings) - NVIDIA (NASDAQ:NVDA) - Benzinga\n", + " - Will Nvidia Be a $2 Trillion Company in 2024? - Yahoo Finance\n", + " - NVDA Stock Outlook 2024: How Much Higher Can Nvidia Go? - InvestorPlace\n", + " - Nvidia: Was My Late-Summer Crash Call Wrong Or Early? (NASDAQ:NVDA) - Seeking Alpha\n", + " - Nvidia Stock Analysis: Why NVDA Remains a Top Pick for 2024 - InvestorPlace\n", + " - Top stocks to buy on Thursday: NVDA, AAPL, MSFT, TGT, TSLA - CNBC\n", + " - Is Nvidia Stock a Buy Now? - The Motley Fool\n", + " - Nvidia stock rises on Bank of America price target boost - Yahoo Finance\n", + " - Nvidia On Path To $800, Goldman Sachs Calls It 'Gold Standard' - Microsoft (NASDAQ:MSFT), Meta Platforms - Benzinga\n", + " - Why Nvidia Stock Joined the Tech Party Today - The Motley Fool\n", + " - Nvidia Stock: AI Revenue Can Reach $330 Billion by 2027, Says Top Analyst. But Is It Overblown? - TipRanks.com - TipRanks\n", + " - NVIDIA target lifted at BofA as AI dominance expected to continue By Investing.com - Investing.com\n", + " - Nvidia (NVDA) Increases Despite Market Slip: Here's What You Need to Know - Yahoo Finance\n", + " - NVDA Stock On Stock Screener Showcasing 39 Stocks To Buy And Watch - Investor's Business Daily\n", + " - Nvidia: Key Implications From AMD's Q4 Earnings (NASDAQ:NVDA) - Seeking Alpha\n", + " - NVDA Stock on Fire: Can Potential Nvidia Investors Still Get In or Will They Get Burned? - InvestorPlace\n", + " - Nvidia Fears? Ignore the Naysayers and Buy NVDA Stock. - InvestorPlace\n", + " - NVIDIA Corp (NVDA) Up 1.42% in Premarket Trading - InvestorsObserver\n", + " - NVDA Stock: Next Stop $750 Per Share? - InvestorPlace\n", + " - At US$597, Is It Time To Put NVIDIA Corporation (NASDAQ:NVDA) On Your Watch List? - Simply Wall St\n", + " - Nvidia Stock's $905 Technical Direction (NASDAQ:NVDA) - Seeking Alpha\n", + " - NVIDIA Corp. stock rises Friday, outperforms market - MarketWatch\n", + " - NVIDIA Corp (NVDA) Up 1.13% in Premarket Trading - InvestorsObserver\n", + " - Nvidia's (NASDAQ:NVDA) AI Chip Takes on Huawei's Ascend 910B in China - TipRanks.com - TipRanks\n", + " - Earnings Growth & Price Strength Make Nvidia (NVDA) a Stock to Watch - Yahoo Finance\n", + " - AMD YTD Stock Return Of 13% Outperforms INTC by 28% and Underperforms NVDA by -11% - Trefis\n", + " - Nancy Pelosi Made $500,000 From Her Nvidia (NASDAQ: NVDA) Bet, Doubling Her Annual Government Salary In Just ... - Yahoo Finance\n", + " - NVDA Stock Prediction: Why Nvidia Will Remain the Chip King in 2024 (and Beyond) - InvestorPlace\n", + " - Riding the Nvidia Rocket: Time to Cash Out or Stay Aboard NVDA Stock? - InvestorPlace\n", + " - Nvidia vs. Huawei: The Battle for AI Supremacy Heats Up as Chip Constraints Redirect Focus - NVIDIA (NASD - Benzinga\n", + " - Nvidia Stock 2025 Prediction: Can NVDA Become a $2 Trillion Company? - Nasdaq\n", + " - NVIDIA Corporation (NVDA) Stock Rocketed Over 200% in 2023 - Yahoo Finance\n", + " - Is NVDA Stock a Buy After 300% Gains? - InvestorPlace\n", + " - Nvidia Stock: Even The Best Companies Are A Sell Sometimes (NASDAQ:NVDA) - Seeking Alpha\n", + " - Magnificent Seven Stocks To Buy And Watch: Tesla Dives On Earnings - Investor's Business Daily\n", + " - NVIDIA (NASDAQ:NVDA) Trading Up 3.1% - MarketBeat\n", + " - 3 Reasons Nvidia Is the Only Semiconductor Stock That Matters - InvestorPlace\n", + " - Nvidia Stock: Be Fearful When Others Are Greedy (NASDAQ:NVDA) - Seeking Alpha\n", + " - Nvidia (NVDA) Beats Stock Market Upswing: What Investors Need to Know - Yahoo Finance\n", + " - AI predicts NVDA stock price for end of 2024 - Finbold - Finance in Bold\n", + " - NVDA Stock Alert: What Nvidia Investors Can Expect in 2024 - InvestorPlace\n", + " - 'A deceptive tactic': Nancy Pelosi disclosed a 7-figure bet on NVIDIA over the Christmas holidays — despite recent ... - Yahoo Finance\n", + " - NVIDIA Corporation (NVDA) Is a Trending Stock: Facts to Know Before Betting on It - Yahoo Finance\n", + " - NVIDIA Sets Conference Call for Fourth-Quarter Financial Results - Yahoo Finance\n", + " - Will Nvidia Be Worth More Than Microsoft by 2030? - The Motley Fool\n", + " - Better Bet Than NVDA Stock: Pay Less Than NVIDIA To Get More From S&P 500 Stock MPWR - Trefis\n", + " - Buying Nvidia Stock? Here Is What Artificial Intelligence (AI) Stock Investors Should Know About the Semiconductor ... - Yahoo Finance\n", + " - These 4 Measures Indicate That NVIDIA (NASDAQ:NVDA) Is Using Debt Safely - Yahoo Finance\n", + " - Is NVIDIA Corporation (NASDAQ:NVDA) Potentially Undervalued? - Yahoo Finance\n", + " - 3 Reasons Why Growth Investors Shouldn't Overlook Nvidia (NVDA) - Yahoo Finance\n", + " - Why Nvidia (NVDA) Stock Just Hit Another All-Time High - InvestorPlace\n", + " - Nvidia (NASDAQ:NVDA) Surges on Home Market Plans - TipRanks.com - TipRanks\n", + " - NVDA Stock Today: This Bull Put Spread Could Achieve An 8.7% Return In 10 Days - Investor's Business Daily\n", + " - NVIDIA Corporation's (NASDAQ:NVDA) Stock Is Going Strong: Is the Market Following Fundamentals? - Yahoo Finance\n", + " - Just how crazy is Nvidia’s price rally? | by Aditya Thakur | Feb, 2024 - Medium\n", + " - Is NVDA Stock Screeching Out of the Fast Lane? Not Quite! - InvestorPlace\n", + " - What's Going On With Nvidia Stock Thursday? - NVIDIA (NASDAQ:NVDA) - Benzinga\n", + " - Wall Street sees more upside for Microsoft, Alphabet, Meta, Nvidia, Costco - CNBC\n", + " - Nvidia (NASDAQ:NVDA) Takes Steps to Avoid Future Chip Troubles - TipRanks.com - TipRanks\n", + " - Nvidia: Don't Chase AI Too Far (NASDAQ:NVDA) - Seeking Alpha\n", + " - Zacks Market Edge Highlights: NVDA, MSFT, SMCI, TSCO and ULTA - Yahoo Finance\n", + " - Nvidia (NVDA) Suffers a Larger Drop Than the General Market: Key Insights - Yahoo Finance\n", + " - Here's Why We Think NVIDIA (NASDAQ:NVDA) Is Well Worth Watching - Yahoo Finance\n", + " - NVDA Stock: Wall Street Raises The Bar For It And Three Other Stocks For 2024 Separator - Investor's Business Daily\n", + " - Market Clubhouse Morning Memo - February 2nd, 2024 (Trade Strategy For SPY, QQQ, AAPL, MSFT, NVDA, GOOGL, - Benzinga\n", + " - Nvidia Stock (NASDAQ:NVDA) Still Looks Cheap Near Highs. Here's Why - TipRanks.com - TipRanks\n", + " - 3 Reasons to Be Cautiously Bullish on NVDA Stock - InvestorPlace\n", + " - Nvidia Stock (NVDA): What to Expect in 2024 - Nasdaq\n", + " - BofAS Lifts Nvidia (NVDA.US) TP to US$800, Rating Buy - AASTOCKS.com\n", + " - Market Clubhouse Morning Memo - February 1st, 2024 (Trade Strategy For SPY, QQQ, AAPL, MSFT, NVDA, GOOGL, - Benzinga\n", + " - NVIDIA Corporation (NVDA) Stock Tripled in 2023 - Yahoo Finance\n", + " - Nvidia: AI Driving The Bull Case Forward (Rating Upgrade) (NASDAQ:NVDA) - Seeking Alpha\n", + " - Nvidia Stock: I Was Wrong (Rating Upgrade) (NASDAQ:NVDA) - Seeking Alpha\n", + " - NVIDIA (NASDAQ:NVDA) Hits New 52-Week High at $633.00 - MarketBeat\n", + " - Nvidia (NVDA) Rises As Market Takes a Dip: Key Facts - Yahoo Finance\n", + " - Nvidia Poised For Expansion, Analyst Highlights AI Innovations And Upcoming B100 Accelerator Launch - NVI - Benzinga\n", + " - [FREE ACCESS] HedgAI Signals: 1/19/2024 (Long NVDA, META, GOOGL) - Hedgeye\n", + " - AMD sees current quarter revenue below estimates (NASDAQ:AMD) - Seeking Alpha\n", + " - Cathie Wood's Largest Holding Isn't Tesla or Nvidia. It's This Tech Pioneer. - The Motley Fool\n", + " - Unusual Options Activity and Flow in Nvidia (NVDA) - Nasdaq\n", + " - Nvidia Is Selling $10 Billion in GPUs to This AI Tech Giant (Hint: It's Not Microsoft) - The Motley Fool\n", + " - 3 Promising AI Stocks That Are Cheaper Than Nvidia - Nasdaq\n", + " - What's Going On With Nvidia Stock Thursday? - MSN\n", + " - Nvidia (NVDA) Shares Skyrocket, What You Need To Know - Yahoo Finance\n", + " - NVIDIA (NVDA) Launches China-Specific Chip Amid US Restrictions - Yahoo Finance\n", + "\n", + "\n", + "Recent news headlines for TSLA:\n", + " - Tesla Runs Afoul of Font-Size Rule in 2.2 Million Electric Cars - Bloomberg\n", + " - Tesla (NASDAQ:TSLA) Faces Potential Recall as NHTSA Intensifies Power Steering Probe - TipRanks.com - TipRanks\n", + " - Tesla Stock Is Falling. Here’s What’s Dragging It Down. - Barron's\n", + " - SAP to stop using Tesla for company fleet, report says - MarketWatch\n", + " - Will AMD Be Worth More Than Tesla by 2025? - The Motley Fool\n", + " - Wall Street sets Tesla stock price for next 12 months - Finbold - Finance in Bold\n", + " - 3 Green Transportation Stocks for Long-Term Growth - InvestorPlace\n", + " - Cathie Wood Blasts Delaware Court's Move To Rescind Elon Musk's $56B Tesla Pay As 'Un-American' - Tesla ( - Benzinga\n", + " - Prediction: These 2 Stocks Hit a $1 Trillion Market Cap By The End Of 2024? - The Motley Fool\n", + " - 3 \"Magnificent Seven\" Stocks With 45% to 84% Upside in 2024, According to Certain Wall Street Analysts - The Motley Fool\n", + " - NASDAQ, AAPL, AMZN, NVDA, TSLA, GOOGL, META, NFLX, MSFT, Elliott Wave analysis [Video] - FXStreet\n", + " - Why Tesla's Not-So-Magnificent Start to 2024 May Be an Opportunity - InvestorPlace\n", + " - Tesla Inc (TSLA) has fallen 1.11% Monday In Premarket Trading - InvestorsObserver\n", + " - After Earnings, Is Tesla Stock a Buy, a Sell, or Fairly Valued? - Morningstar\n", + " - EV Roundup: LI's 106% Y/Y Delivery Growth, TSLA's 2.2M Vehicle Recall & More - Zacks Investment Research\n", + " - Top stocks to buy on Wednesday: AMD, AAPL, TSLA, GOOGL, MSFT - CNBC\n", + " - Magnificent Seven Stocks To Buy And Watch: Tesla Dives On Earnings - Investor's Business Daily\n", + " - Tesla (TSLA) Q4 2023 Earnings: What to Expect - Nasdaq\n", + " - GM or TSLA: Which Is the Better Value Stock Right Now? - Yahoo Finance\n", + " - Tesla's (NASDAQ:TSLA) Texas Move: Elon Musk's Bold Shift after Legal Blow - TipRanks.com - TipRanks\n", + " - Is Tesla Stock A Buy Or A Sell As Shares Slump Ahead Of Q4 Earnings? - Investor's Business Daily\n", + " - TSLA Stock Alert: Tesla Recalls 2.2 Million Vehicles in the U.S. - InvestorPlace\n", + " - Tesla shares close down 12% after automaker warns of slowdown - CNBC\n", + " - Is Stalling TSLA Stock a Buy Under $200 a Share? - InvestorPlace\n", + " - Tesla Bull: TSLA Off 'Best Ideas' Until Musk Does These 10 Things - Investor's Business Daily\n", + " - Tesla shares drop 6% on weak auto revenue, warning of slower growth in 2024 - CNBC\n", + " - Tesla (NASDAQ:TSLA) Pays $1.5M to Settle Toxic Waste Lawsuit - TipRanks.com - TipRanks\n", + " - Tesla (NASDAQ:TSLA) Slips as Musk's Pay Kerfuffle Intensifies - TipRanks.com - TipRanks\n", + " - Tesla's (TSLA) Elon Musk seeks shareholder vote to incorporate in Texas - StreetInsider.com\n", + " - Cathie Wood Buys Tesla Stock as Stock Tumbles 25% This Year - Bloomberg\n", + " - Tesla to Open US Battery Plant With Equipment From China's CATL - Bloomberg\n", + " - Tesla China (TSLA) offers cash discounts on select Model Y EVs - StreetInsider.com\n", + " - Buy The Pullback: Why Tesla Stock Is Likely Heading Higher (NASDAQ:TSLA) - Seeking Alpha\n", + " - Analyst who correctly warned Tesla stock could fall unveils new target - TheStreet\n", + " - Elon Musk Thinks This Warren Buffet-Backed Chinese EV Manufacturer Is Going To 'Demolish Most Other Car ... - Yahoo Finance\n", + " - Tesla Inc (TSLA) Posts Record Vehicle Deliveries and Strong Profitability in 2023 Earnings - Yahoo Finance\n", + " - Top stocks to buy on Tuesday: AMZN, TSLA, GS, CRM, META, SPOT & more - CNBC\n", + " - Tesla (TSLA) Loses -17.32% in 4 Weeks, Here's Why a Trend Reversal May be Around the Corner - Yahoo Finance\n", + " - TSLA Stock Alert: The $56 Billion Reason Why Tesla Is Down Today - InvestorPlace\n", + " - Tesla Earnings Unlikely to Ease Concerns Over Waning Growth - Bloomberg\n", + " - Tesla (TSLA) Loses Its Luster as Weight Loss Drugmaker Lilly (LLY) Overtakes - Bloomberg\n", + " - Tesla (TSLA) continues to fall in pre-market after judge rejects CEO Musk's $56B compensation package - StreetInsider.com\n", + " - Tesla Stock (TSLA) Set for 550% Gain, Fund Manager David Baron Says - Bloomberg\n", + " - Tesla: What Would The Company Be Worth Without Elon Musk? (NASDAQ:TSLA) - Seeking Alpha\n", + " - Ark's Cathie Wood buys Tesla (TSLA) on 12% dip - StreetInsider.com\n", + " - Exploring Analyst Estimates for Tesla (TSLA) Q4 Earnings, Beyond Revenue and EPS - Yahoo Finance\n", + " - Weekly Preview: Earnings To Watch (INTC, NFLX, TSLA) - Nasdaq\n", + " - Tesla's Downfall? Why the Cybertruck Marks the End for TSLA Stock. - InvestorPlace\n", + " - Tesla (TSLA) Drops Minority-Worker Language After Musk's DEI Criticisms - Bloomberg\n", + " - Electric Vehicle Stock Alert: Tesla Inc (TSLA), a Top-Rated Stock in the Auto Manufacturers Industry, Drops -0.26% In a Week - InvestorsObserver\n", + " - Could The Market Be Wrong About Tesla, Inc. (NASDAQ:TSLA) Given Its Attractive Financial Prospects? - Simply Wall St\n", + " - What's Next for Tesla (NASDAQ:TSLA) after Musk's $56B Payday Gets Rejected? - TipRanks.com - TipRanks\n", + " - Is TSLA stock a buy... I bet it is within this extreme dip buying plan - ForexLive\n", + " - Stocks making the biggest moves premarket: Netflix, AT&T, Tesla, EBay, AMD and more - CNBC\n", + " - Earnings Preview: Tesla (TSLA) Q4 Earnings Expected to Decline - Yahoo Finance\n", + " - Weekly Preview: Earnings to Watch (AAPL, MSFT, NVDA, TSLA) - Nasdaq\n", + " - Norway's $1.5 Trillion Wealth Fund Add to EV Bets With Tesla (TSLA), BYD - Bloomberg\n", + " - Stock-Split Watch: Is Tesla Next? - The Motley Fool\n", + " - Massive News for Tesla Stock Investors - Yahoo Finance\n", + " - Massive News for Tesla Stock Investors - The Motley Fool\n", + " - Stocks making the biggest moves midday: Tesla, American Airlines, Boeing, Humana and more - CNBC\n", + " - Tesla, Inc. (NASDAQ:TSLA) Q4 2023 Earnings Call Transcript - Yahoo Finance\n", + " - What's Going on With Tesla Stock? - Yahoo Finance\n", + " - Should You Invest in Tesla Stock After Its Earnings Debacle? - The Motley Fool\n", + " - Tesla (TSLA) Q4 Earnings Fall Short of Estimates, Decline Y/Y - Yahoo Finance\n", + " - Tesla (TSLA) releases Q4 2023 results: slight miss on earnings - Electrek\n", + " - Tesla Inc (TSLA) is lower by 2.71% Wednesday In Premarket Trading - InvestorsObserver\n", + " - Cost Woes to Offset Tesla (TSLA) Record Deliveries in Q4 Earnings? - Yahoo Finance\n", + " - Tesla (TSLA) Misses Q4 EPS by 2c, Vehicle Volume Growth Rate May be Notably Lower - StreetInsider.com\n", + " - Tesla (TSLA) Reports Q4 Earnings: What Key Metrics Have to Say - Yahoo Finance\n", + " - Tesla Inc (TSLA) Up 1.91% in Premarket Trading - InvestorsObserver\n", + " - Tesla Stock News: TSLA rebounds in Friday premarket on lower inflation report - FXStreet\n", + " - Tesla (TSLA) Advances While Market Declines: Some Information for Investors - Yahoo Finance\n", + " - Dow Jones Reverses Lower; Tesla CEO Musk's Comments In Focus After TSLA's Miss - Investor's Business Daily\n", + " - Tesla Skids As Analysts Give Up On Earnings Growth In 2024 - Investor's Business Daily\n", + " - Tesla (TSLA) Q4 Earnings and Revenues Lag Estimates - Yahoo Finance\n", + " - Tesla (TSLA) Slashes Prices of Model 3 & Model Y in China - Yahoo Finance\n", + " - Unusual Options Activity and Flow in Tesla (TSLA) - Nasdaq\n", + " - What Happens If Tesla Reincorporates in Texas Instead of Delaware? - InvestorPlace\n", + " - Auto Roundup: TSLA's Q4 Earnings Miss, GM's $1.4B EV Investment in Brazil & More - Yahoo Finance\n", + " - Tesla, Inc. (TSLA) Q4 2023 Earnings Call Transcript - Seeking Alpha\n", + " - Tesla (NASDAQ:TSLA) Will Recall 200,000 Vehicles in the U.S. - TipRanks.com - TipRanks\n", + " - Do You Believe in the Growth Prospects of Tesla (TSLA)? - Yahoo Finance\n", + " - Hold on! Why It's Not Time to Hit the Breaks on TSLA Stock Just Yet. - InvestorPlace\n", + " - Cybertruck Aero Wheel Cover Deliveries Reportedly Halted By Tesla Amid Sidewall Wear Concerns - Tesla (NA - Benzinga\n", + " - Tesla Inc (TSLA) has gained 2.31% Tuesday In Premarket Trading - InvestorsObserver\n", + " - Investing in Tesla (TSLA) Amidst Musk Compensation Challenges - Value the Markets\n", + " - 2 Super Stocks to Buy Now That Could Help Set You Up for Life - The Globe and Mail\n", + " - Tesla Full Year 2023 Earnings: EPS Beats Expectations - Yahoo Finance\n", + " - Elon Musk Plans to Buy (AMD) AI Chips for Tesla's (TSLA) Dojo Supercomputer - Bloomberg\n", + " - Tesla (NASDAQ:TSLA) Slips after Disappointing Q4 Results - TipRanks.com - TipRanks\n", + " - Big News For Tesla Owners: FSD Beta Transfers Return, Supercharging Perks Extended To This EV Model - Tes - Benzinga\n", + " - Abandon Tesla Stock as It Reels From Tough Competition - InvestorPlace\n", + " - Tesla Stock Faces Major Headwinds In EV Demand In 2024 (NASDAQ:TSLA) - Seeking Alpha\n", + " - Connable Office Inc. Boosts Stake in Tesla, Inc. (NASDAQ:TSLA) - MarketBeat\n", + " - Tesla (NASDAQ:TSLA) Plunges on Planned Pay Raise - TipRanks.com - TipRanks\n", + " - Musk Says He Needs Bigger Tesla Stake to Avoid Being Ousted - Bloomberg\n", + " - Tesla Q4 Earnings Preview: Should You Buy the Dip in TSLA Stock? - Nasdaq\n", + " - Here's Why Tesla (TSLA) Shares Dipped Roughly 3% Yesterday - Yahoo Finance\n", + " - TSLA Stock Alert: Elon Musk Just Issued a BIG Warning - InvestorPlace\n", + "\n", + "\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to User):\n", + "\n", + "From the news headlines, we can infer several potential factors that have been influencing the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA).\n", + "\n", + "**NVIDIA Corporation (NVDA):**\n", + "- **Positive Analysis and Price Targets:** Numerous headlines highlight analyst upgrades, price target boosts, and bullish sentiment (e.g., \"Nvidia adds to recent gains as Goldman Sachs boosts prices target,\" \"Goldman now sees Nvidia rising to $800 in 12 months\").\n", + "- **AI and Growth Expectations:** There is a strong focus on NVIDIA’s artificial intelligence (AI) initiatives and the expected growth in this area (e.g., \"Nvidia is ‘clear beneficiary’ of Meta’s AI spending rush,\" \"3 Promising AI Stocks That Are Cheaper Than Nvidia\").\n", + "- **Solid Earnings Expectations:** Expectations for a strong earnings report and financial performance seem to be indicated (e.g., \"Will Nvidia Stock Deliver Another Stellar Earnings Report?\").\n", + "- **Sector Performance:** NVDA might be benefiting from a broader uptrend in the technology sector, particularly regarding semiconductor stocks (e.g., \"January was great for stocks. Our top 5: NVDA, PANW, META, CRM, LLY\").\n", + "\n", + "**Tesla, Inc. (TSLA):**\n", + "- **Regulatory Challenges and Recalls:** Headlines suggest regulatory scrutiny and potential recalls, which can be concerning to investors (e.g., \"Tesla Runs Afoul of Font-Size Rule in 2.2 Million Electric Cars,\" \"Tesla (NASDAQ:TSLA) Faces Potential Recall as NHTSA Intensifies Power Steering Probe\").\n", + "- **Stock Downgrade and Earnings Concerns:** There seems to be a negative sentiment related to the company's earnings and growth forecasts (e.g., \"Tesla Stock Is Falling. Here’s What’s Dragging It Down,\" \"Tesla shares drop 6% on weak auto revenue, warning of slower growth in 2024\").\n", + "- **Decision on Executive Compensation:** A potential overhang due to the court decision about CEO Elon Musk's compensation package could be worrying investors (e.g., \"Cathie Wood Blasts Delaware Court's Move To Rescind Elon Musk's $56B Tesla Pay As 'Un-American'\").\n", + "- **Wider Industry Trends:** Some headlines point towards the competitive pressure in the electric vehicle industry and any strategic moves by Tesla (e.g., \"Elon Musk Thinks This Warren Buffet-Backed Chinese EV Manufacturer Is Going To 'Demolish Most Other Car ...\").\n", + "\n", + "Overall, NVDA appears to be experiencing a positive sentiment driven by analyst optimism and growth in AI, while TSLA seems to be facing a mix of regulatory challenges, potential recalls, and concerns over financial performance and leadership compensation.\n", + "\n", + "These insights combined with the respective companies' financial reports, investor presentations, and other public disclosures would provide a thorough understanding of the factors responsible for their contrasting stock performances. \n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "Develop an engaging blog post using any information provided.\n", + "\n", + "With the following carryover: \n", + "I want to include a figure or a table of data in the blogpost.\n", + "The given Python script successfully fetched the stock prices and percentage changes over the past month for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). NVDA had a significant price increase of approximately 30.09%, while TSLA experienced a notable decline of about 21.85%.\n", + "NVDA is experiencing positive stock performance due to analyst upgrades, bullish sentiment on AI initiatives and growth, and strong earnings expectations. TSLA, on the other hand, is facing challenges, including regulatory scrutiny, potential recalls, concerns over financial performance and growth forecasts, and issues with CEO Elon Musk's compensation package. These divergent sentiments are influencing the stock performance of each company.\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to writer):\n", + "\n", + "Develop an engaging blog post using any information provided.\n", + "Context: \n", + "I want to include a figure or a table of data in the blogpost.\n", + "The given Python script successfully fetched the stock prices and percentage changes over the past month for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). NVDA had a significant price increase of approximately 30.09%, while TSLA experienced a notable decline of about 21.85%.\n", + "NVDA is experiencing positive stock performance due to analyst upgrades, bullish sentiment on AI initiatives and growth, and strong earnings expectations. TSLA, on the other hand, is facing challenges, including regulatory scrutiny, potential recalls, concerns over financial performance and growth forecasts, and issues with CEO Elon Musk's compensation package. These divergent sentiments are influencing the stock performance of each company.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mwriter\u001b[0m (to User):\n", + "\n", + "### The Tale of Two Tech Giants: NVIDIA and Tesla's Dramatic Stock Movements\n", + "\n", + "In the dynamic theatre that is the stock market, share prices dance to the rhythm of investor sentiment, macroeconomic currents, and corporate narratives. Among the most riveting performances in recent times are those of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). This past month, each has told a dramatically different story through the movement of their stock prices, with NVDA's shares reaching crescendos of growth while TSLA played out a more somber and troubled tune.\n", + "\n", + "#### NVIDIA's Soaring Success\n", + "\n", + "NVIDIA, a company that once found its roots firmly planted in the gaming industry, has soared beyond its original domain, capturing the imagination and investment of those bullish on technology. The stock price's robust ascent by approximately 30.09% over the past month is reflective of a broader narrative of innovation and strategic foresight.\n", + "\n", + "**The Winning Elements for NVIDIA:**\n", + "1. **Analyst Upgrades:** A shower of confidence has rained upon NVIDIA from the analyst community, strengthening the stock's foundation.\n", + "2. **AI Initiatives:** As artificial intelligence continues to infiltrate every corner of technology, NVIDIA's pivotal role in this space has galvanized investor enthusiasm.\n", + "3. **Healthy Earnings:** With strong earnings expectations, NVIDIA is not just promising a bright future – it is delivering solid grounds for optimism in the here and now.\n", + "\n", + "This blend of factors has acted as a catalyst for NVIDIA’s sprightly price performance, but numbers speak volumes, so let's let the data tell the tale:\n", + "\n", + "| Company | Stock Price Increase (%) | Influencing Factors |\n", + "|---------|--------------------------|-----------------------------|\n", + "| NVDA | +30.09% | Analyst Upgrades, AI Initiatives, Earnings Expectations |\n", + "| TSLA | -21.85% | Regulatory Scrutiny, Recall Concerns, Financial Performance Issues |\n", + "\n", + "#### Tesla's Troubled Times\n", + "\n", + "Tesla, the trailblazing titan of electric vehicles, has found itself on a rocky road, with stock prices declining by a stark 21.85%. While TSLA's story is complex, key themes have emerged from its recent chapters:\n", + "\n", + "1. **Regulatory Scrutiny:** Tesla's vehicles, once the toast of the town, are now under the watchful eye of regulators, sparking investor anxiety.\n", + "2. **Potential Recalls:** The specter of recalls haunts the company, a troubling consideration for shareholders.\n", + "3. **Financial Challenges:** Concerns over Tesla’s financial performance and growth forecasts further dilute the company’s appeal among the investing public.\n", + "4. **CEO Compensation Package:** Tesla's CEO, Elon Musk, remains a figure of intense focus, with his compensation package causing ripples of uncertainty.\n", + "\n", + "Unlike the throngs of devotees eagerly betting on Tesla's promising future, recent investors have taken a more critical stance, leading to a visible retreat in the company's stock valuation.\n", + "\n", + "#### The Investors' Crossroad\n", + "\n", + "The distinct paths NVIDIA and Tesla have taken provide a snapshot of the high stakes and swift currents that define the tech sector in the stock market. While both companies continue to pioneer their respective industries, their current trajectories underscore the impact of corporate strategy, leadership, and market conditions on investor decisions.\n", + "\n", + "This crossroad at which two tech behemoths stand serves as a compelling reminder: whether in sunny or stormy weather, the market's favor can be both a company's windfall and downfall. As shareholders of NVDA bask in the glow of a surging valuation, those holding TSLA are bracing against the current, perhaps anticipating a turn in the tides that will once again lift all boats – or in this case, cars and GPUs.\n", + "\n", + "One thing is for certain: the contrasting fortunes of NVIDIA and Tesla will continue to captivate audiences in the financial markets, offering a narrative rife with lessons for the savvy investor. Whether you're drawn to the crescendo of a stock on the rise or the fortissimo of a setback, these are the stories that underscore the vibrant, pulsating life of the stock market symphony.\n", + "\n", + "Stay tuned, investors – the next act is bound to be just as enthralling.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n" + ] + } + ], + "source": [ + "financial_assistant = autogen.AssistantAgent(\n", + " name=\"Financial_assistant\",\n", + " llm_config=llm_config,\n", + ")\n", + "research_assistant = autogen.AssistantAgent(\n", + " name=\"Researcher\",\n", + " llm_config=llm_config,\n", + ")\n", + "writer = autogen.AssistantAgent(\n", + " name=\"writer\",\n", + " llm_config=llm_config,\n", + " system_message=\"\"\"\n", + " You are a professional writer, known for\n", + " your insightful and engaging articles.\n", + " You transform complex concepts into compelling narratives.\n", + " Reply \"TERMINATE\" in the end when everything is done.\n", + " \"\"\",\n", + ")\n", + "\n", + "user = autogen.UserProxyAgent(\n", + " name=\"User\",\n", + " human_input_mode=\"NEVER\",\n", + " is_termination_msg=lambda x: x.get(\"content\", \"\") and x.get(\"content\", \"\").rstrip().endswith(\"TERMINATE\"),\n", + " code_execution_config={\n", + " \"last_n_messages\": 1,\n", + " \"work_dir\": \"tasks\",\n", + " \"use_docker\": False,\n", + " }, # Please set use_docker=True if docker is available to run the generated code. Using docker is safer than running the generated code directly.\n", + ")\n", + "\n", + "chat_results = user.initiate_chats(\n", + " [\n", + " {\n", + " \"recipient\": financial_assistant,\n", + " \"message\": financial_tasks[0],\n", + " \"clear_history\": True,\n", + " \"silent\": False,\n", + " \"summary_method\": \"reflection_with_llm\",\n", + " },\n", + " {\n", + " \"recipient\": research_assistant,\n", + " \"message\": financial_tasks[1],\n", + " \"summary_method\": \"reflection_with_llm\",\n", + " },\n", + " {\n", + " \"recipient\": writer,\n", + " \"message\": writing_tasks[0],\n", + " \"carryover\": \"I want to include a figure or a table of data in the blogpost.\",\n", + " \"summary_method\": \"last_msg\",\n", + " },\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Check chat results\n", + "The `initiate_chat` method returns a `ChatResult` object, which is a dataclass object storing information about the chat. Currently, it includes the following attributes:\n", + "\n", + "- `chat_history`: a list of chat history.\n", + "- `summary`: a string of chat summary. A summary is only available if a summary_method is provided when initiating the chat.\n", + "- `cost`: a tuple of (total_cost, total_actual_cost), where total_cost is a dictionary of cost information, and total_actual_cost is a dictionary of information on the actual incurred cost with cache.\n", + "- `human_input`: a list of strings of human inputs solicited during the chat. (Note that since we are setting `human_input_mode` to `NEVER` in this notebook, this list is always empty.)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conversation summary with Financial_assistant:\n", + "The given Python script successfully fetched the stock prices and percentage changes over the past month for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). NVDA had a significant price increase of approximately 30.09%, while TSLA experienced a notable decline of about 21.85%.\n", + "Human input in the middle: []\n", + "Conversation cost: ({'total_cost': 0.12056999999999998, 'gpt-4': {'cost': 0.12056999999999998, 'prompt_tokens': 2485, 'completion_tokens': 767, 'total_tokens': 3252}}, {'total_cost': 0.07446, 'gpt-4': {'cost': 0.07446, 'prompt_tokens': 1984, 'completion_tokens': 249, 'total_tokens': 2233}})\n", + "\n", + "\n", + "\n", + "Conversation summary with Researcher:\n", + "NVDA is experiencing positive stock performance due to analyst upgrades, bullish sentiment on AI initiatives and growth, and strong earnings expectations. TSLA, on the other hand, is facing challenges, including regulatory scrutiny, potential recalls, concerns over financial performance and growth forecasts, and issues with CEO Elon Musk's compensation package. These divergent sentiments are influencing the stock performance of each company.\n", + "Human input in the middle: []\n", + "Conversation cost: ({'total_cost': 0.43938, 'gpt-4': {'cost': 0.43938, 'prompt_tokens': 12278, 'completion_tokens': 1184, 'total_tokens': 13462}}, {'total_cost': 0.43938, 'gpt-4': {'cost': 0.43938, 'prompt_tokens': 12278, 'completion_tokens': 1184, 'total_tokens': 13462}})\n", + "\n", + "\n", + "\n", + "Conversation summary with writer:\n", + "### The Tale of Two Tech Giants: NVIDIA and Tesla's Dramatic Stock Movements\n", + "\n", + "In the dynamic theatre that is the stock market, share prices dance to the rhythm of investor sentiment, macroeconomic currents, and corporate narratives. Among the most riveting performances in recent times are those of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). This past month, each has told a dramatically different story through the movement of their stock prices, with NVDA's shares reaching crescendos of growth while TSLA played out a more somber and troubled tune.\n", + "\n", + "#### NVIDIA's Soaring Success\n", + "\n", + "NVIDIA, a company that once found its roots firmly planted in the gaming industry, has soared beyond its original domain, capturing the imagination and investment of those bullish on technology. The stock price's robust ascent by approximately 30.09% over the past month is reflective of a broader narrative of innovation and strategic foresight.\n", + "\n", + "**The Winning Elements for NVIDIA:**\n", + "1. **Analyst Upgrades:** A shower of confidence has rained upon NVIDIA from the analyst community, strengthening the stock's foundation.\n", + "2. **AI Initiatives:** As artificial intelligence continues to infiltrate every corner of technology, NVIDIA's pivotal role in this space has galvanized investor enthusiasm.\n", + "3. **Healthy Earnings:** With strong earnings expectations, NVIDIA is not just promising a bright future – it is delivering solid grounds for optimism in the here and now.\n", + "\n", + "This blend of factors has acted as a catalyst for NVIDIA’s sprightly price performance, but numbers speak volumes, so let's let the data tell the tale:\n", + "\n", + "| Company | Stock Price Increase (%) | Influencing Factors |\n", + "|---------|--------------------------|-----------------------------|\n", + "| NVDA | +30.09% | Analyst Upgrades, AI Initiatives, Earnings Expectations |\n", + "| TSLA | -21.85% | Regulatory Scrutiny, Recall Concerns, Financial Performance Issues |\n", + "\n", + "#### Tesla's Troubled Times\n", + "\n", + "Tesla, the trailblazing titan of electric vehicles, has found itself on a rocky road, with stock prices declining by a stark 21.85%. While TSLA's story is complex, key themes have emerged from its recent chapters:\n", + "\n", + "1. **Regulatory Scrutiny:** Tesla's vehicles, once the toast of the town, are now under the watchful eye of regulators, sparking investor anxiety.\n", + "2. **Potential Recalls:** The specter of recalls haunts the company, a troubling consideration for shareholders.\n", + "3. **Financial Challenges:** Concerns over Tesla’s financial performance and growth forecasts further dilute the company’s appeal among the investing public.\n", + "4. **CEO Compensation Package:** Tesla's CEO, Elon Musk, remains a figure of intense focus, with his compensation package causing ripples of uncertainty.\n", + "\n", + "Unlike the throngs of devotees eagerly betting on Tesla's promising future, recent investors have taken a more critical stance, leading to a visible retreat in the company's stock valuation.\n", + "\n", + "#### The Investors' Crossroad\n", + "\n", + "The distinct paths NVIDIA and Tesla have taken provide a snapshot of the high stakes and swift currents that define the tech sector in the stock market. While both companies continue to pioneer their respective industries, their current trajectories underscore the impact of corporate strategy, leadership, and market conditions on investor decisions.\n", + "\n", + "This crossroad at which two tech behemoths stand serves as a compelling reminder: whether in sunny or stormy weather, the market's favor can be both a company's windfall and downfall. As shareholders of NVDA bask in the glow of a surging valuation, those holding TSLA are bracing against the current, perhaps anticipating a turn in the tides that will once again lift all boats – or in this case, cars and GPUs.\n", + "\n", + "One thing is for certain: the contrasting fortunes of NVIDIA and Tesla will continue to captivate audiences in the financial markets, offering a narrative rife with lessons for the savvy investor. Whether you're drawn to the crescendo of a stock on the rise or the fortissimo of a setback, these are the stories that underscore the vibrant, pulsating life of the stock market symphony.\n", + "\n", + "Stay tuned, investors – the next act is bound to be just as enthralling.\n", + "\n", + "\n", + "Human input in the middle: []\n", + "Conversation cost: ({'total_cost': 0.05831999999999999, 'gpt-4': {'cost': 0.05831999999999999, 'prompt_tokens': 222, 'completion_tokens': 861, 'total_tokens': 1083}}, {'total_cost': 0.05831999999999999, 'gpt-4': {'cost': 0.05831999999999999, 'prompt_tokens': 222, 'completion_tokens': 861, 'total_tokens': 1083}})\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for agent, chat_res in chat_results.items():\n", + " print(f\"Conversation summary with {agent.name}:\")\n", + " print(chat_res.summary)\n", + " print(\"Human input in the middle:\", chat_res.human_input)\n", + " print(\"Conversation cost: \", chat_res.cost)\n", + " print(\"\\n\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scenario 2: With human inputs revising tasks in the middle\n", + "\n", + "Since AutoGen agents support soliciting human inputs during a chat if `human_input_mode` is specificed properly, the actual task might be revised in the middle of a chat. \n", + "\n", + "The example below showcases that even if a task is revised in the middle (for the first task, the human user requests to get Microsoft's stock price information as well, in addition to NVDA and TSLA), the `reflection_with_llm`` summary method can still capture it, as it reflects on the whole conversation instead of just the original request." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", + "\n", + "With the following carryover: \n", + "\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", + "\n", + "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", + "\n", + "To get the current stock prices of NVDA (NVIDIA Corporation) and TSLA (Tesla, Inc.), along with their performance over the past month in terms of percentage change, we can use a Python library like `yfinance`. This library allows downloading of historical market data from Yahoo Finance.\n", + "\n", + "Let's proceed in the following steps:\n", + "\n", + "1. I will provide you a Python script that utilizes the `yfinance` library to fetch the current stock prices and historical data for the past month for both NVDA and TSLA.\n", + "2. The script will then calculate the percentage change in the stock prices over the past month.\n", + "\n", + "Please make sure that you have `yfinance` installed in your Python environment before running the script. You can install it using `pip install yfinance`.\n", + "\n", + "Here is the Python code to execute:\n", + "\n", + "```python\n", + "# filename: stock_info.py\n", + "import yfinance as yf\n", + "from datetime import datetime, timedelta\n", + "\n", + "# Function to get current stock price\n", + "def get_stock_price(stock_ticker):\n", + " stock = yf.Ticker(stock_ticker)\n", + " todays_data = stock.history(period='1d')\n", + " return todays_data['Close'][0]\n", + "\n", + "# Function to calculate percentage change over the past month\n", + "def get_percentage_change(stock_ticker):\n", + " stock = yf.Ticker(stock_ticker)\n", + " end_date = datetime.now()\n", + " start_date = end_date - timedelta(days=30)\n", + " historical_data = stock.history(start=start_date, end=end_date)\n", + " price_end = historical_data['Close'][-1]\n", + " price_start = historical_data['Close'][0]\n", + " percent_change = ((price_end - price_start)/price_start) * 100\n", + " return percent_change\n", + "\n", + "# Getting the current price and performance for NVDA and TSLA\n", + "nvda_price = get_stock_price('NVDA')\n", + "tesla_price = get_stock_price('TSLA')\n", + "nvda_change = get_percentage_change('NVDA')\n", + "tesla_change = get_percentage_change('TSLA')\n", + "\n", + "# Output the results\n", + "print(f\"NVDA (NVIDIA Corporation) stock price: ${nvda_price:.2f}\")\n", + "print(f\"TESLA (Tesla, Inc.) stock price: ${tesla_price:.2f}\")\n", + "print(f\"NVDA percentage change over past month: {nvda_change:.2f}%\")\n", + "print(f\"TESLA percentage change over past month: {tesla_change:.2f}%\")\n", + "```\n", + "\n", + "Please run this script in your environment and share with me the output. I'll then verify the information.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n", + "\u001b[31m\n", + ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", + "\u001b[31m\n", + ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", + "\n", + "exitcode: 0 (execution succeeded)\n", + "Code output: \n", + "NVDA (NVIDIA Corporation) stock price: $677.43\n", + "TESLA (Tesla, Inc.) stock price: $176.10\n", + "NVDA percentage change over past month: 29.64%\n", + "TESLA percentage change over past month: -26.76%\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", + "\n", + "Based on the executed script, here is the information you requested:\n", + "\n", + "- The current stock price of NVDA (NVIDIA Corporation) is approximately $677.43.\n", + "- The current stock price of TSLA (Tesla, Inc.) is approximately $176.10.\n", + "- NVDA has had a percentage increase of approximately 29.64% over the past month.\n", + "- TSLA has had a percentage decrease of approximately -26.76% over the past month.\n", + "\n", + "These figures represent the stock prices at the moment the script was executed and the performance over the past month from that date.\n", + "\n", + "Please note that stock prices fluctuate frequently during trading hours. The output reflects the data at the time the script was run and may have changed since then.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", + "\n", + "What about Microsoft?\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", + "\n", + "We can follow a similar approach to get the current stock price of Microsoft Corporation (MSFT) and its performance over the past month in terms of percentage change. I will provide you with a Python script to fetch this data using the `yfinance` library.\n", + "\n", + "Execute the following Python code:\n", + "\n", + "```python\n", + "# filename: msft_stock_info.py\n", + "import yfinance as yf\n", + "from datetime import datetime, timedelta\n", + "\n", + "# Function to get current stock price and percentage change over the past month\n", + "def get_stock_info(stock_ticker):\n", + " stock = yf.Ticker(stock_ticker)\n", + " # Get the current stock price\n", + " todays_data = stock.history(period='1d')\n", + " current_price = todays_data['Close'][0]\n", + "\n", + " # Calculate the percentage change over the past month\n", + " end_date = datetime.now()\n", + " start_date = end_date - timedelta(days=30)\n", + " historical_data = stock.history(start=start_date, end=end_date)\n", + " price_end = historical_data['Close'][-1]\n", + " price_start = historical_data['Close'][0]\n", + " percent_change = ((price_end - price_start)/price_start) * 100\n", + "\n", + " return current_price, percent_change\n", + "\n", + "# Getting the current price and performance for MSFT\n", + "msft_price, msft_change = get_stock_info('MSFT')\n", + "\n", + "# Output the results\n", + "print(f\"Microsoft (MSFT) stock price: ${msft_price:.2f}\")\n", + "print(f\"Microsoft (MSFT) percentage change over past month: {msft_change:.2f}%\")\n", + "```\n", + "\n", + "Please run this script, and it will print out the current price of Microsoft's stock and the percentage change over the past month. Share the output with me, and I'll verify the information.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n", + "\u001b[31m\n", + ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", + "\u001b[31m\n", + ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", + "\n", + "exitcode: 0 (execution succeeded)\n", + "Code output: \n", + "Microsoft (MSFT) stock price: $404.79\n", + "Microsoft (MSFT) percentage change over past month: 8.03%\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", + "\n", + "Based on the executed script, the information for Microsoft Corporation (MSFT) is:\n", + "\n", + "- The current stock price of MSFT (Microsoft Corporation) is approximately $404.79.\n", + "- MSFT has had a percentage increase of approximately 8.03% over the past month.\n", + "\n", + "As with the other stock prices, please note these figures are accurate as of the time the script was run and may have fluctuated since then.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "Investigate possible reasons of the stock performance.\n", + "\n", + "With the following carryover: \n", + "The current stock prices and the past month's performance in percentage change for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) were as follows:\n", + "\n", + "- NVDA: $677.43 with a 29.64% increase.\n", + "- TSLA: $176.10 with a 26.76% decrease.\n", + "- MSFT: $404.79 with an 8.03% increase.\n", + "\n", + "The stock prices reflect the values at the time the Python script using the `yfinance` library was executed, and the performance is based on the past 30 days from that date. Stock prices are subject to frequent fluctuations during trading hours.\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Researcher):\n", + "\n", + "Investigate possible reasons of the stock performance.\n", + "Context: \n", + "The current stock prices and the past month's performance in percentage change for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) were as follows:\n", + "\n", + "- NVDA: $677.43 with a 29.64% increase.\n", + "- TSLA: $176.10 with a 26.76% decrease.\n", + "- MSFT: $404.79 with an 8.03% increase.\n", + "\n", + "The stock prices reflect the values at the time the Python script using the `yfinance` library was executed, and the performance is based on the past 30 days from that date. Stock prices are subject to frequent fluctuations during trading hours.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to User):\n", + "\n", + "To investigate possible reasons for the stock performance of NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT), we can do the following:\n", + "\n", + "1. Collect recent news articles, press releases or financial reports related to these companies for any events that could have impacted their stock prices. We're looking for product launches, earnings reports, changes in leadership, strategic partnerships, etc.\n", + "2. Look at the overall market trends or news to see if there's a broader economic factor affecting these stocks.\n", + "3. Check if there were any significant changes in analyst ratings or price targets for these stocks.\n", + "4. Compare the performance with direct competitors to see if the changes were industry-specific.\n", + "5. Examine the volume of trading for signs of buying or selling trends.\n", + "\n", + "However, as an AI, I can't browse the web, access the latest news, or retrieve financial data directly from various sources that are not preprogrammed into my capabilities. Instead, I can provide Python code using the `yfinance` library to download historical stock data that might give us insights into trading volume trends or significant price changes on specific dates.\n", + "\n", + "Here's Python code to get the historical stock data of NVDA, TSLA, and MSFT for the past 30 days, and calculate the average volume for comparison which might give us some clues:\n", + "\n", + "```python\n", + "# filename: stock_volume_analysis.py\n", + "import yfinance as yf\n", + "from datetime import datetime, timedelta\n", + "\n", + "# Define the tickers we are interested in\n", + "tickers = ['NVDA', 'TSLA', 'MSFT']\n", + "\n", + "# Calculate the date 30 days ago from today\n", + "end_date = datetime.now()\n", + "start_date = end_date - timedelta(30)\n", + "\n", + "# Dictionary to hold our data\n", + "stock_data = {}\n", + "\n", + "# Fetch the historical stock data for each ticker\n", + "for ticker in tickers:\n", + " data = yf.download(ticker, start=start_date, end=end_date)\n", + " stock_data[ticker] = data\n", + "\n", + "# Calculate and print the average volume for each ticker\n", + "for ticker, data in stock_data.items():\n", + " average_volume = data['Volume'].mean()\n", + " print(f\"{ticker} average volume over the past 30 days: {average_volume}\")\n", + "\n", + "# Optional: Check the biggest single-day percent change in the past 30 days\n", + "for ticker, data in stock_data.items():\n", + " data['Percent Change'] = data['Close'].pct_change() * 100\n", + " max_percent_change = data['Percent Change'].abs().max()\n", + " print(f\"{ticker} biggest single-day percent change over the past 30 days: {max_percent_change:.2f}%\")\n", + "```\n", + "\n", + "Please run this script to get insights on trading volume trends and daily percent changes for each company, which might help us understand their stock performances. Let me know the output.\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n", + "\u001b[31m\n", + ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", + "\u001b[31m\n", + ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Researcher):\n", + "\n", + "exitcode: 0 (execution succeeded)\n", + "Code output: \n", + "NVDA average volume over the past 30 days: 46935388.95\n", + "TSLA average volume over the past 30 days: 111862500.0\n", + "MSFT average volume over the past 30 days: 25209642.1\n", + "NVDA biggest single-day percent change over the past 30 days: 4.97%\n", + "TSLA biggest single-day percent change over the past 30 days: 12.13%\n", + "MSFT biggest single-day percent change over the past 30 days: 2.69%\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to User):\n", + "\n", + "The output from the Python script provides the following insights:\n", + "\n", + "- The average trading volume over the past 30 days for NVIDIA (NVDA) is approximately 46.9 million shares. The largest single-day percentage change was around 4.97%.\n", + "- For Tesla (TSLA), the average trading volume is significantly higher at roughly 111.9 million shares, with the largest single-day percentage movement being 12.13%, indicating a volatile period.\n", + "- Microsoft (MSFT) has an average volume of about 25.2 million shares, with the maximum single-day percent change at a more modest 2.69%.\n", + "\n", + "The high volume of trading for TSLA and NVDA indicates there was considerable investor interest or reaction to events. Tesla's high volatility, as shown by the 12.13% biggest single-day percent change, and the overall decrease of 26.76%, may suggest a negative response to specific news or market conditions.\n", + "\n", + "NVIDIA's and Microsoft's stock prices increased over the 30-day period, which may have been influenced by positive news or favorable market conditions for these companies.\n", + "\n", + "While these figures reveal the trading activity and recent price volatility, for a more comprehensive understanding of the stock performances, one should review recent news, financial analyses, and market trends specifically related to NVDA, TSLA, and MSFT during this timeframe. This would typically involve:\n", + "\n", + "- Examining financial news websites and company press releases.\n", + "- Analyzing recent earnings reports and guidance from the companies.\n", + "- Reviewing market analysts' reports and updates.\n", + "- Considering broader market trends, including technology sector performance, interest rates, and economic indicators.\n", + "\n", + "These tasks would require web searches, reading financial publications, and potentially accessing proprietary financial databases—all of which fall outside the scope of what can be performed through this interaction.\n", + "\n", + "If you wish to investigate further, these steps would typically be carried out by a user through a web browser and utilizing financial data services or news outlets for the latest information. Remember, stock prices are influenced by a multitude of factors, including company performance, investor sentiment, external market conditions, and broader economic trends.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "Develop an engaging blog post using any information provided.\n", + "\n", + "With the following carryover: \n", + "The current stock prices and the past month's performance in percentage change for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) were as follows:\n", + "\n", + "- NVDA: $677.43 with a 29.64% increase.\n", + "- TSLA: $176.10 with a 26.76% decrease.\n", + "- MSFT: $404.79 with an 8.03% increase.\n", + "\n", + "The stock prices reflect the values at the time the Python script using the `yfinance` library was executed, and the performance is based on the past 30 days from that date. Stock prices are subject to frequent fluctuations during trading hours.\n", + "The Python script provided average trading volumes and the biggest single-day percentage changes for NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT) over the past 30 days. NVDA had an average volume of approximately 46.9 million shares and a max one-day change of 4.97%, TSLA had an average volume of roughly 111.9 million shares with a max one-day change of 12.13%, indicating high volatility and a decrease in stock price, and MSFT had an average volume of about 25.2 million shares with a max one-day change of 2.69%. These figures suggest investor interest and reaction to events, but a complete analysis requires examining recent news, financial reports, and market trends related to each company, tasks which fall outside the AI's capabilities.\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to writer):\n", + "\n", + "Develop an engaging blog post using any information provided.\n", + "Context: \n", + "The current stock prices and the past month's performance in percentage change for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) were as follows:\n", + "\n", + "- NVDA: $677.43 with a 29.64% increase.\n", + "- TSLA: $176.10 with a 26.76% decrease.\n", + "- MSFT: $404.79 with an 8.03% increase.\n", + "\n", + "The stock prices reflect the values at the time the Python script using the `yfinance` library was executed, and the performance is based on the past 30 days from that date. Stock prices are subject to frequent fluctuations during trading hours.\n", + "The Python script provided average trading volumes and the biggest single-day percentage changes for NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT) over the past 30 days. NVDA had an average volume of approximately 46.9 million shares and a max one-day change of 4.97%, TSLA had an average volume of roughly 111.9 million shares with a max one-day change of 12.13%, indicating high volatility and a decrease in stock price, and MSFT had an average volume of about 25.2 million shares with a max one-day change of 2.69%. These figures suggest investor interest and reaction to events, but a complete analysis requires examining recent news, financial reports, and market trends related to each company, tasks which fall outside the AI's capabilities.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mwriter\u001b[0m (to User):\n", + "\n", + "The Highs and Lows of Tech Stocks: A Tale of NVIDIA, Tesla, and Microsoft\n", + "\n", + "In the fast-paced world of tech stocks, fortunes can change in the blink of an eye—or the click of a \"buy\" button. The past month has seen some staggering movements in the share prices of some of the biggest names in the industry, namely NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT). These shifts tell tales of triumph, turbulence, and steady tides in the market, providing a snapshot of the ever-evolving technology landscape.\n", + "\n", + "**Into the Stratosphere: NVIDIA's Skyward Surge**\n", + "\n", + "Take a moment to absorb this number: 29.64%. That's the astounding one-month percentage increase for NVIDIA, a titan of the graphics processing world. With their stock price touching the celestial price point of $677.43, it seems investors have found their darling in the Silicon Valley chipmaker. Known for powering everything from sizzling gaming experiences to robust AI applications, NVIDIA's meteoric rise might just be a testament to the company's integral role in driving future technologies. And the market has taken notice, with an impressive average volume of approximately 46.9 million shares exchanging hands over the 30-day period.\n", + "\n", + "**A Volatile Journey: Tesla's Roller Coaster**\n", + "\n", + "Conversely, Tesla's shares have been on a less celebratory trajectory. The electric vehicle (EV) maverick has seen a 26.76% decrease in its stock price, shaking some investor confidence as shares adjusted to $176.10. Why the downtrend for such a high-profile company? The answer isn't straightforward, but Tesla isn't just any company; it's a narrative on wheels, a direct reflection of the public's perception of the future of transportation. With an astonishingly high average trading volume of about 111.9 million shares and a max one-day change of 12.13%, the story here is as much about volatility as it is about vehicular innovation.\n", + "\n", + "**The Stability of an Empire: Microsoft's Measured Gains**\n", + "\n", + "Amidst the wild swings of its tech counterparts, Microsoft stands as a beacon of stability. The global software behemoth has shown an 8.03% increase in its stock value over the past month, with shares priced at $404.79. Microsoft's consistent growth is a nod to its deep roots in the industry and its successful diversification—from cloud computing to business software. Trading at an average volume of approximately 25.2 million shares and seeing a max one-day change of 2.69%, Microsoft may not make headlines with dramatic spikes, but it offers a storyline of solid, sustained progress.\n", + "\n", + "**Between the Lines: Reading the Market**\n", + "\n", + "These figures, as vivid as they might be, represent far more than mere digits—they embody investor sentiment, industry developments, and the pure, unadulterated drama of the stock market. It's not just about the magnitude of movement; it's about the why behind the buy (or sell). NVIDIA's ascension signifies the burgeoning demand for chips as AI and gaming skyrocket. Tesla's wild ride might point to concerns over production or perhaps the mercurial nature of the EV market itself. Microsoft's steady climb? A reflection of investor trust in a company that has weathered tech storms for decades.\n", + "\n", + "Yet, these narratives are not to be taken at face value. True to the nature of investing, they are interwoven with company news, global economic indicators, and technical analysis. It's this complex tapestry that draws investors to the screens day after day, searching for patterns in the chaos, hoping to find the signal in the noise.\n", + "\n", + "In a landscape where data reigns supreme, remember this: Volatility can be as much an opportunity as it is a risk. NVIDIA shines brightly today; Tesla contends with the shadows of uncertainty, while Microsoft charts its steady course. On Wall Street, change is the only constant, and the stories of these tech giants are still being written, one trade at a time.\n", + "\n", + "As the market continues its inexorable dance, keep your eyes on the horizon—where the next chapter of the tech stock saga awaits. And for those looking to take part in this thrilling narrative, caution and strategy should be the co-authors of your investment tale.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/qingyunwu/Documents/github/autogen/autogen/agentchat/conversable_agent.py:798: UserWarning: No summary_method provided or summary_method is not supported: \n", + " warnings.warn(\"No summary_method provided or summary_method is not supported: \")\n" + ] + } + ], + "source": [ + "user = autogen.UserProxyAgent(\n", + " name=\"User\",\n", + " human_input_mode=\"ALWAYS\", # ask human for input at each step\n", + " is_termination_msg=lambda x: x.get(\"content\", \"\") and x.get(\"content\", \"\").rstrip().endswith(\"TERMINATE\"),\n", + " code_execution_config={\n", + " \"last_n_messages\": 1,\n", + " \"work_dir\": \"tasks\",\n", + " \"use_docker\": False,\n", + " }, # Please set use_docker=True if docker is available to run the generated code. Using docker is safer than running the generated code directly.\n", + ")\n", + "\n", + "chat_results = user.initiate_chats(\n", + " [\n", + " {\n", + " \"recipient\": financial_assistant,\n", + " \"message\": financial_tasks[0],\n", + " \"clear_history\": True,\n", + " \"silent\": False,\n", + " \"summary_method\": \"reflection_with_llm\",\n", + " },\n", + " {\n", + " \"recipient\": research_assistant,\n", + " \"message\": financial_tasks[1],\n", + " \"summary_method\": \"reflection_with_llm\",\n", + " },\n", + " {\n", + " \"recipient\": writer,\n", + " \"message\": writing_tasks[0],\n", + " },\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Check chat results" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Conversation summary with Financial_assistant:\n", + "The current stock prices and the past month's performance in percentage change for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) were as follows:\n", + "\n", + "- NVDA: $677.43 with a 29.64% increase.\n", + "- TSLA: $176.10 with a 26.76% decrease.\n", + "- MSFT: $404.79 with an 8.03% increase.\n", + "\n", + "The stock prices reflect the values at the time the Python script using the `yfinance` library was executed, and the performance is based on the past 30 days from that date. Stock prices are subject to frequent fluctuations during trading hours.\n", + "All chat history: [{'content': 'What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?', 'role': 'assistant'}, {'content': 'To get the current stock prices of NVDA (NVIDIA Corporation) and TSLA (Tesla, Inc.), along with their performance over the past month in terms of percentage change, we can use a Python library like `yfinance`. This library allows downloading of historical market data from Yahoo Finance.\\n\\nLet\\'s proceed in the following steps:\\n\\n1. I will provide you a Python script that utilizes the `yfinance` library to fetch the current stock prices and historical data for the past month for both NVDA and TSLA.\\n2. The script will then calculate the percentage change in the stock prices over the past month.\\n\\nPlease make sure that you have `yfinance` installed in your Python environment before running the script. You can install it using `pip install yfinance`.\\n\\nHere is the Python code to execute:\\n\\n```python\\n# filename: stock_info.py\\nimport yfinance as yf\\nfrom datetime import datetime, timedelta\\n\\n# Function to get current stock price\\ndef get_stock_price(stock_ticker):\\n stock = yf.Ticker(stock_ticker)\\n todays_data = stock.history(period=\\'1d\\')\\n return todays_data[\\'Close\\'][0]\\n\\n# Function to calculate percentage change over the past month\\ndef get_percentage_change(stock_ticker):\\n stock = yf.Ticker(stock_ticker)\\n end_date = datetime.now()\\n start_date = end_date - timedelta(days=30)\\n historical_data = stock.history(start=start_date, end=end_date)\\n price_end = historical_data[\\'Close\\'][-1]\\n price_start = historical_data[\\'Close\\'][0]\\n percent_change = ((price_end - price_start)/price_start) * 100\\n return percent_change\\n\\n# Getting the current price and performance for NVDA and TSLA\\nnvda_price = get_stock_price(\\'NVDA\\')\\ntesla_price = get_stock_price(\\'TSLA\\')\\nnvda_change = get_percentage_change(\\'NVDA\\')\\ntesla_change = get_percentage_change(\\'TSLA\\')\\n\\n# Output the results\\nprint(f\"NVDA (NVIDIA Corporation) stock price: ${nvda_price:.2f}\")\\nprint(f\"TESLA (Tesla, Inc.) stock price: ${tesla_price:.2f}\")\\nprint(f\"NVDA percentage change over past month: {nvda_change:.2f}%\")\\nprint(f\"TESLA percentage change over past month: {tesla_change:.2f}%\")\\n```\\n\\nPlease run this script in your environment and share with me the output. I\\'ll then verify the information.', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nNVDA (NVIDIA Corporation) stock price: $677.43\\nTESLA (Tesla, Inc.) stock price: $176.10\\nNVDA percentage change over past month: 29.64%\\nTESLA percentage change over past month: -26.76%\\n', 'role': 'assistant'}, {'content': 'Based on the executed script, here is the information you requested:\\n\\n- The current stock price of NVDA (NVIDIA Corporation) is approximately $677.43.\\n- The current stock price of TSLA (Tesla, Inc.) is approximately $176.10.\\n- NVDA has had a percentage increase of approximately 29.64% over the past month.\\n- TSLA has had a percentage decrease of approximately -26.76% over the past month.\\n\\nThese figures represent the stock prices at the moment the script was executed and the performance over the past month from that date.\\n\\nPlease note that stock prices fluctuate frequently during trading hours. The output reflects the data at the time the script was run and may have changed since then.\\n\\nTERMINATE', 'role': 'user'}, {'content': 'What about Microsoft?', 'role': 'assistant'}, {'content': 'We can follow a similar approach to get the current stock price of Microsoft Corporation (MSFT) and its performance over the past month in terms of percentage change. I will provide you with a Python script to fetch this data using the `yfinance` library.\\n\\nExecute the following Python code:\\n\\n```python\\n# filename: msft_stock_info.py\\nimport yfinance as yf\\nfrom datetime import datetime, timedelta\\n\\n# Function to get current stock price and percentage change over the past month\\ndef get_stock_info(stock_ticker):\\n stock = yf.Ticker(stock_ticker)\\n # Get the current stock price\\n todays_data = stock.history(period=\\'1d\\')\\n current_price = todays_data[\\'Close\\'][0]\\n\\n # Calculate the percentage change over the past month\\n end_date = datetime.now()\\n start_date = end_date - timedelta(days=30)\\n historical_data = stock.history(start=start_date, end=end_date)\\n price_end = historical_data[\\'Close\\'][-1]\\n price_start = historical_data[\\'Close\\'][0]\\n percent_change = ((price_end - price_start)/price_start) * 100\\n\\n return current_price, percent_change\\n\\n# Getting the current price and performance for MSFT\\nmsft_price, msft_change = get_stock_info(\\'MSFT\\')\\n\\n# Output the results\\nprint(f\"Microsoft (MSFT) stock price: ${msft_price:.2f}\")\\nprint(f\"Microsoft (MSFT) percentage change over past month: {msft_change:.2f}%\")\\n```\\n\\nPlease run this script, and it will print out the current price of Microsoft\\'s stock and the percentage change over the past month. Share the output with me, and I\\'ll verify the information.', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nMicrosoft (MSFT) stock price: $404.79\\nMicrosoft (MSFT) percentage change over past month: 8.03%\\n', 'role': 'assistant'}, {'content': 'Based on the executed script, the information for Microsoft Corporation (MSFT) is:\\n\\n- The current stock price of MSFT (Microsoft Corporation) is approximately $404.79.\\n- MSFT has had a percentage increase of approximately 8.03% over the past month.\\n\\nAs with the other stock prices, please note these figures are accurate as of the time the script was run and may have fluctuated since then.\\n\\nTERMINATE', 'role': 'user'}]\n", + "Human input in the middle: ['', 'What about Microsoft?', '', '']\n", + "Conversation cost: ({'total_cost': 0.25197, 'gpt-4': {'cost': 0.25197, 'prompt_tokens': 5887, 'completion_tokens': 1256, 'total_tokens': 7143}}, {'total_cost': 0.20586, 'gpt-4': {'cost': 0.20586, 'prompt_tokens': 5386, 'completion_tokens': 738, 'total_tokens': 6124}})\n", + "\n", + "\n", + "\n", + "Conversation summary with Researcher:\n", + "The Python script provided average trading volumes and the biggest single-day percentage changes for NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT) over the past 30 days. NVDA had an average volume of approximately 46.9 million shares and a max one-day change of 4.97%, TSLA had an average volume of roughly 111.9 million shares with a max one-day change of 12.13%, indicating high volatility and a decrease in stock price, and MSFT had an average volume of about 25.2 million shares with a max one-day change of 2.69%. These figures suggest investor interest and reaction to events, but a complete analysis requires examining recent news, financial reports, and market trends related to each company, tasks which fall outside the AI's capabilities.\n", + "All chat history: [{'content': \"Investigate possible reasons of the stock performance.\\nContext: \\nThe current stock prices and the past month's performance in percentage change for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) were as follows:\\n\\n- NVDA: $677.43 with a 29.64% increase.\\n- TSLA: $176.10 with a 26.76% decrease.\\n- MSFT: $404.79 with an 8.03% increase.\\n\\nThe stock prices reflect the values at the time the Python script using the `yfinance` library was executed, and the performance is based on the past 30 days from that date. Stock prices are subject to frequent fluctuations during trading hours.\", 'role': 'assistant'}, {'content': 'To investigate possible reasons for the stock performance of NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT), we can do the following:\\n\\n1. Collect recent news articles, press releases or financial reports related to these companies for any events that could have impacted their stock prices. We\\'re looking for product launches, earnings reports, changes in leadership, strategic partnerships, etc.\\n2. Look at the overall market trends or news to see if there\\'s a broader economic factor affecting these stocks.\\n3. Check if there were any significant changes in analyst ratings or price targets for these stocks.\\n4. Compare the performance with direct competitors to see if the changes were industry-specific.\\n5. Examine the volume of trading for signs of buying or selling trends.\\n\\nHowever, as an AI, I can\\'t browse the web, access the latest news, or retrieve financial data directly from various sources that are not preprogrammed into my capabilities. Instead, I can provide Python code using the `yfinance` library to download historical stock data that might give us insights into trading volume trends or significant price changes on specific dates.\\n\\nHere\\'s Python code to get the historical stock data of NVDA, TSLA, and MSFT for the past 30 days, and calculate the average volume for comparison which might give us some clues:\\n\\n```python\\n# filename: stock_volume_analysis.py\\nimport yfinance as yf\\nfrom datetime import datetime, timedelta\\n\\n# Define the tickers we are interested in\\ntickers = [\\'NVDA\\', \\'TSLA\\', \\'MSFT\\']\\n\\n# Calculate the date 30 days ago from today\\nend_date = datetime.now()\\nstart_date = end_date - timedelta(30)\\n\\n# Dictionary to hold our data\\nstock_data = {}\\n\\n# Fetch the historical stock data for each ticker\\nfor ticker in tickers:\\n data = yf.download(ticker, start=start_date, end=end_date)\\n stock_data[ticker] = data\\n\\n# Calculate and print the average volume for each ticker\\nfor ticker, data in stock_data.items():\\n average_volume = data[\\'Volume\\'].mean()\\n print(f\"{ticker} average volume over the past 30 days: {average_volume}\")\\n\\n# Optional: Check the biggest single-day percent change in the past 30 days\\nfor ticker, data in stock_data.items():\\n data[\\'Percent Change\\'] = data[\\'Close\\'].pct_change() * 100\\n max_percent_change = data[\\'Percent Change\\'].abs().max()\\n print(f\"{ticker} biggest single-day percent change over the past 30 days: {max_percent_change:.2f}%\")\\n```\\n\\nPlease run this script to get insights on trading volume trends and daily percent changes for each company, which might help us understand their stock performances. Let me know the output.\\n', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nNVDA average volume over the past 30 days: 46935388.95\\nTSLA average volume over the past 30 days: 111862500.0\\nMSFT average volume over the past 30 days: 25209642.1\\nNVDA biggest single-day percent change over the past 30 days: 4.97%\\nTSLA biggest single-day percent change over the past 30 days: 12.13%\\nMSFT biggest single-day percent change over the past 30 days: 2.69%\\n', 'role': 'assistant'}, {'content': \"The output from the Python script provides the following insights:\\n\\n- The average trading volume over the past 30 days for NVIDIA (NVDA) is approximately 46.9 million shares. The largest single-day percentage change was around 4.97%.\\n- For Tesla (TSLA), the average trading volume is significantly higher at roughly 111.9 million shares, with the largest single-day percentage movement being 12.13%, indicating a volatile period.\\n- Microsoft (MSFT) has an average volume of about 25.2 million shares, with the maximum single-day percent change at a more modest 2.69%.\\n\\nThe high volume of trading for TSLA and NVDA indicates there was considerable investor interest or reaction to events. Tesla's high volatility, as shown by the 12.13% biggest single-day percent change, and the overall decrease of 26.76%, may suggest a negative response to specific news or market conditions.\\n\\nNVIDIA's and Microsoft's stock prices increased over the 30-day period, which may have been influenced by positive news or favorable market conditions for these companies.\\n\\nWhile these figures reveal the trading activity and recent price volatility, for a more comprehensive understanding of the stock performances, one should review recent news, financial analyses, and market trends specifically related to NVDA, TSLA, and MSFT during this timeframe. This would typically involve:\\n\\n- Examining financial news websites and company press releases.\\n- Analyzing recent earnings reports and guidance from the companies.\\n- Reviewing market analysts' reports and updates.\\n- Considering broader market trends, including technology sector performance, interest rates, and economic indicators.\\n\\nThese tasks would require web searches, reading financial publications, and potentially accessing proprietary financial databases—all of which fall outside the scope of what can be performed through this interaction.\\n\\nIf you wish to investigate further, these steps would typically be carried out by a user through a web browser and utilizing financial data services or news outlets for the latest information. Remember, stock prices are influenced by a multitude of factors, including company performance, investor sentiment, external market conditions, and broader economic trends.\\n\\nTERMINATE\", 'role': 'user'}]\n", + "Human input in the middle: ['', '']\n", + "Conversation cost: ({'total_cost': 0.16941, 'gpt-4': {'cost': 0.16941, 'prompt_tokens': 3313, 'completion_tokens': 1167, 'total_tokens': 4480}}, {'total_cost': 0.16941, 'gpt-4': {'cost': 0.16941, 'prompt_tokens': 3313, 'completion_tokens': 1167, 'total_tokens': 4480}})\n", + "\n", + "\n", + "\n", + "Conversation summary with writer:\n", + "\n", + "All chat history: [{'content': \"Develop an engaging blog post using any information provided.\\nContext: \\nThe current stock prices and the past month's performance in percentage change for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) were as follows:\\n\\n- NVDA: $677.43 with a 29.64% increase.\\n- TSLA: $176.10 with a 26.76% decrease.\\n- MSFT: $404.79 with an 8.03% increase.\\n\\nThe stock prices reflect the values at the time the Python script using the `yfinance` library was executed, and the performance is based on the past 30 days from that date. Stock prices are subject to frequent fluctuations during trading hours.\\nThe Python script provided average trading volumes and the biggest single-day percentage changes for NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT) over the past 30 days. NVDA had an average volume of approximately 46.9 million shares and a max one-day change of 4.97%, TSLA had an average volume of roughly 111.9 million shares with a max one-day change of 12.13%, indicating high volatility and a decrease in stock price, and MSFT had an average volume of about 25.2 million shares with a max one-day change of 2.69%. These figures suggest investor interest and reaction to events, but a complete analysis requires examining recent news, financial reports, and market trends related to each company, tasks which fall outside the AI's capabilities.\", 'role': 'assistant'}, {'content': 'The Highs and Lows of Tech Stocks: A Tale of NVIDIA, Tesla, and Microsoft\\n\\nIn the fast-paced world of tech stocks, fortunes can change in the blink of an eye—or the click of a \"buy\" button. The past month has seen some staggering movements in the share prices of some of the biggest names in the industry, namely NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT). These shifts tell tales of triumph, turbulence, and steady tides in the market, providing a snapshot of the ever-evolving technology landscape.\\n\\n**Into the Stratosphere: NVIDIA\\'s Skyward Surge**\\n\\nTake a moment to absorb this number: 29.64%. That\\'s the astounding one-month percentage increase for NVIDIA, a titan of the graphics processing world. With their stock price touching the celestial price point of $677.43, it seems investors have found their darling in the Silicon Valley chipmaker. Known for powering everything from sizzling gaming experiences to robust AI applications, NVIDIA\\'s meteoric rise might just be a testament to the company\\'s integral role in driving future technologies. And the market has taken notice, with an impressive average volume of approximately 46.9 million shares exchanging hands over the 30-day period.\\n\\n**A Volatile Journey: Tesla\\'s Roller Coaster**\\n\\nConversely, Tesla\\'s shares have been on a less celebratory trajectory. The electric vehicle (EV) maverick has seen a 26.76% decrease in its stock price, shaking some investor confidence as shares adjusted to $176.10. Why the downtrend for such a high-profile company? The answer isn\\'t straightforward, but Tesla isn\\'t just any company; it\\'s a narrative on wheels, a direct reflection of the public\\'s perception of the future of transportation. With an astonishingly high average trading volume of about 111.9 million shares and a max one-day change of 12.13%, the story here is as much about volatility as it is about vehicular innovation.\\n\\n**The Stability of an Empire: Microsoft\\'s Measured Gains**\\n\\nAmidst the wild swings of its tech counterparts, Microsoft stands as a beacon of stability. The global software behemoth has shown an 8.03% increase in its stock value over the past month, with shares priced at $404.79. Microsoft\\'s consistent growth is a nod to its deep roots in the industry and its successful diversification—from cloud computing to business software. Trading at an average volume of approximately 25.2 million shares and seeing a max one-day change of 2.69%, Microsoft may not make headlines with dramatic spikes, but it offers a storyline of solid, sustained progress.\\n\\n**Between the Lines: Reading the Market**\\n\\nThese figures, as vivid as they might be, represent far more than mere digits—they embody investor sentiment, industry developments, and the pure, unadulterated drama of the stock market. It\\'s not just about the magnitude of movement; it\\'s about the why behind the buy (or sell). NVIDIA\\'s ascension signifies the burgeoning demand for chips as AI and gaming skyrocket. Tesla\\'s wild ride might point to concerns over production or perhaps the mercurial nature of the EV market itself. Microsoft\\'s steady climb? A reflection of investor trust in a company that has weathered tech storms for decades.\\n\\nYet, these narratives are not to be taken at face value. True to the nature of investing, they are interwoven with company news, global economic indicators, and technical analysis. It\\'s this complex tapestry that draws investors to the screens day after day, searching for patterns in the chaos, hoping to find the signal in the noise.\\n\\nIn a landscape where data reigns supreme, remember this: Volatility can be as much an opportunity as it is a risk. NVIDIA shines brightly today; Tesla contends with the shadows of uncertainty, while Microsoft charts its steady course. On Wall Street, change is the only constant, and the stories of these tech giants are still being written, one trade at a time.\\n\\nAs the market continues its inexorable dance, keep your eyes on the horizon—where the next chapter of the tech stock saga awaits. And for those looking to take part in this thrilling narrative, caution and strategy should be the co-authors of your investment tale.\\n\\nTERMINATE', 'role': 'user'}]\n", + "Human input in the middle: ['']\n", + "Conversation cost: ({'total_cost': 0.06405, 'gpt-4': {'cost': 0.06405, 'prompt_tokens': 375, 'completion_tokens': 880, 'total_tokens': 1255}}, {'total_cost': 0.06405, 'gpt-4': {'cost': 0.06405, 'prompt_tokens': 375, 'completion_tokens': 880, 'total_tokens': 1255}})\n", + "\n", + "\n", + "\n" + ] + } + ], + "source": [ + "for agent, chat_res in chat_results.items():\n", + " print(f\"Conversation summary with {agent.name}:\")\n", + " print(chat_res.summary)\n", + " print(\"All chat history:\", chat_res.chat_history)\n", + " print(\"Human input in the middle:\", chat_res.human_input)\n", + " print(\"Conversation cost: \", chat_res.cost)\n", + " print(\"\\n\\n\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Scenario 3: Solve the tasks with a series of chats involving group chat" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", + "\n", + "With the following carryover: \n", + "\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Researcher):\n", + "\n", + "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to User):\n", + "\n", + "To get the current stock prices of NVDA (NVIDIA Corporation) and TSLA (Tesla, Inc.), along with their performance over the past month in terms of percentage change, we can use a Python library like `yfinance`. This library allows downloading of historical market data from Yahoo Finance.\n", + "\n", + "Let's proceed in the following steps:\n", + "\n", + "1. I will provide you a Python script that utilizes the `yfinance` library to fetch the current stock prices and historical data for the past month for both NVDA and TSLA.\n", + "2. The script will then calculate the percentage change in the stock prices over the past month.\n", + "\n", + "Please make sure that you have `yfinance` installed in your Python environment before running the script. You can install it using `pip install yfinance`.\n", + "\n", + "Here is the Python code to execute:\n", + "\n", + "```python\n", + "# filename: stock_info.py\n", + "import yfinance as yf\n", + "from datetime import datetime, timedelta\n", + "\n", + "# Function to get current stock price\n", + "def get_stock_price(stock_ticker):\n", + " stock = yf.Ticker(stock_ticker)\n", + " todays_data = stock.history(period='1d')\n", + " return todays_data['Close'][0]\n", + "\n", + "# Function to calculate percentage change over the past month\n", + "def get_percentage_change(stock_ticker):\n", + " stock = yf.Ticker(stock_ticker)\n", + " end_date = datetime.now()\n", + " start_date = end_date - timedelta(days=30)\n", + " historical_data = stock.history(start=start_date, end=end_date)\n", + " price_end = historical_data['Close'][-1]\n", + " price_start = historical_data['Close'][0]\n", + " percent_change = ((price_end - price_start)/price_start) * 100\n", + " return percent_change\n", + "\n", + "# Getting the current price and performance for NVDA and TSLA\n", + "nvda_price = get_stock_price('NVDA')\n", + "tesla_price = get_stock_price('TSLA')\n", + "nvda_change = get_percentage_change('NVDA')\n", + "tesla_change = get_percentage_change('TSLA')\n", + "\n", + "# Output the results\n", + "print(f\"NVDA (NVIDIA Corporation) stock price: ${nvda_price:.2f}\")\n", + "print(f\"TESLA (Tesla, Inc.) stock price: ${tesla_price:.2f}\")\n", + "print(f\"NVDA percentage change over past month: {nvda_change:.2f}%\")\n", + "print(f\"TESLA percentage change over past month: {tesla_change:.2f}%\")\n", + "```\n", + "\n", + "Please run this script in your environment and share with me the output. I'll then verify the information.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Researcher):\n", + "\n", + "exitcode: 0 (execution succeeded)\n", + "Code output: \n", + "NVDA (NVIDIA Corporation) stock price: $661.60\n", + "TESLA (Tesla, Inc.) stock price: $187.91\n", + "NVDA percentage change over past month: 26.61%\n", + "TESLA percentage change over past month: -21.85%\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to User):\n", + "\n", + "The script executed successfully and provided the following information:\n", + "\n", + "- NVIDIA Corporation (NVDA) current stock price: $661.60\n", + "- Tesla, Inc. (TSLA) current stock price: $187.91\n", + "- NVDA percentage change over the past month: 26.61%\n", + "- TSLA percentage change over the past month: -21.85%\n", + "\n", + "To summarize, NVDA has seen an increase of approximately 26.61% in its stock price over the past month, while TSLA has experienced a decrease of approximately -21.85% in the same period.\n", + "\n", + "Please note that stock prices are volatile and the reported prices are specific to the moment the data was retrieved. The percentage change reflects the stock performance over the past 30 days from the most recent closing price.\n", + "\n", + "If you need any further assistance or another task, feel free to ask. Otherwise, this concludes your request.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "Investigate possible reasons of the stock performance.\n", + "\n", + "With the following carryover: \n", + "The script executed successfully and provided the following information:\n", + "\n", + "- NVIDIA Corporation (NVDA) current stock price: $661.60\n", + "- Tesla, Inc. (TSLA) current stock price: $187.91\n", + "- NVDA percentage change over the past month: 26.61%\n", + "- TSLA percentage change over the past month: -21.85%\n", + "\n", + "To summarize, NVDA has seen an increase of approximately 26.61% in its stock price over the past month, while TSLA has experienced a decrease of approximately -21.85% in the same period.\n", + "\n", + "Please note that stock prices are volatile and the reported prices are specific to the moment the data was retrieved. The percentage change reflects the stock performance over the past 30 days from the most recent closing price.\n", + "\n", + "If you need any further assistance or another task, feel free to ask. Otherwise, this concludes your request.\n", + "\n", + "\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Research_manager):\n", + "\n", + "Investigate possible reasons of the stock performance.\n", + "Context: \n", + "The script executed successfully and provided the following information:\n", + "\n", + "- NVIDIA Corporation (NVDA) current stock price: $661.60\n", + "- Tesla, Inc. (TSLA) current stock price: $187.91\n", + "- NVDA percentage change over the past month: 26.61%\n", + "- TSLA percentage change over the past month: -21.85%\n", + "\n", + "To summarize, NVDA has seen an increase of approximately 26.61% in its stock price over the past month, while TSLA has experienced a decrease of approximately -21.85% in the same period.\n", + "\n", + "Please note that stock prices are volatile and the reported prices are specific to the moment the data was retrieved. The percentage change reflects the stock performance over the past 30 days from the most recent closing price.\n", + "\n", + "If you need any further assistance or another task, feel free to ask. Otherwise, this concludes your request.\n", + "\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to Research_manager):\n", + "\n", + "In order to investigate the possible reasons behind the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), we need to consider a variety of factors that could influence the stock prices. Here is a multi-step plan, where each step will use either code or language skills to find possible explanations:\n", + "\n", + "1. **Company-specific news**: Look for recent news articles or press releases about each company to see if there have been any significant events that could impact the stock price.\n", + "2. **Industry trends**: Determine if there are any broader industry trends that might be affecting these companies differently. For example, semiconductor shortages might impact NVDA differently than TSLA.\n", + "3. **Financial Performance**: Check the most recent quarterly earnings reports for each company for any signs of financial performance that could lead to a change in stock price.\n", + "4. **Analyst Ratings**: Look at recent analyst ratings and reports for each company, as these can heavily influence investor sentiment and stock prices.\n", + "5. **Market sentiment**: Investigate investor sentiment and broader market trends using websites that track this, such as StockTwits, Twitter, or financial news aggregators.\n", + "\n", + "**Step 1: Collecting News about Each Company**\n", + "Since I cannot browse the web directly, I'll provide Python code to search for recent news articles about NVDA and TSLA using the Google News RSS feed. Please execute this code:\n", + "\n", + "```python\n", + "# filename: fetch_news.py\n", + "\n", + "import feedparser\n", + "\n", + "# Function to fetch news for a given ticker symbol\n", + "def fetch_news(ticker):\n", + " url = f\"https://news.google.com/rss/search?q={ticker}&hl=en-US&gl=US&ceid=US:en\"\n", + " feed = feedparser.parse(url)\n", + " return feed.entries\n", + "\n", + "# Fetch and display news for NVIDIA Corporation (NVDA)\n", + "nvda_news = fetch_news('NVIDIA Corporation')\n", + "print(\"Recent news for NVIDIA Corporation (NVDA):\")\n", + "for entry in nvda_news[:5]: # Limit to 5 articles for brevity\n", + " print(f\"- {entry.title} (Source: {entry.source.title}) on {entry.published}\")\n", + "\n", + "# Fetch and display news for Tesla, Inc. (TSLA)\n", + "tsla_news = fetch_news('Tesla, Inc.')\n", + "print(\"\\nRecent news for Tesla, Inc. (TSLA):\")\n", + "for entry in tsla_news[:5]: # Limit to 5 articles for brevity\n", + " print(f\"- {entry.title} (Source: {entry.source.title}) on {entry.published}\")\n", + "\n", + "# Note: In production, you should handle potential exceptions and errors.\n", + "```\n", + "\n", + "The output will include the most recent articles about each company from Google News. We can use that information to analyze possible impact on the stock prices. Keep in mind that the code provided fetches the most recent articles which might not be the direct cause for stock performance, but it could give insights into the recent activities surrounding each company.\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[31m\n", + ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", + "\u001b[33mUser_proxy\u001b[0m (to Research_manager):\n", + "\n", + "exitcode: 1 (execution failed)\n", + "Code output: \n", + "Traceback (most recent call last):\n", + " File \"fetch_news.py\", line 12, in \n", + " nvda_news = fetch_news('NVIDIA Corporation')\n", + " File \"fetch_news.py\", line 8, in fetch_news\n", + " feed = feedparser.parse(url)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages/feedparser/api.py\", line 216, in parse\n", + " data = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages/feedparser/api.py\", line 115, in _open_resource\n", + " return http.get(url_file_stream_or_string, etag, modified, agent, referrer, handlers, request_headers, result)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages/feedparser/http.py\", line 171, in get\n", + " f = opener.open(request)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/urllib/request.py\", line 519, in open\n", + " response = self._open(req, data)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/urllib/request.py\", line 536, in _open\n", + " result = self._call_chain(self.handle_open, protocol, protocol +\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/urllib/request.py\", line 496, in _call_chain\n", + " result = func(*args)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/urllib/request.py\", line 1391, in https_open\n", + " return self.do_open(http.client.HTTPSConnection, req,\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/urllib/request.py\", line 1348, in do_open\n", + " h.request(req.get_method(), req.selector, req.data, headers,\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/http/client.py\", line 1283, in request\n", + " self._send_request(method, url, body, headers, encode_chunked)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/http/client.py\", line 1294, in _send_request\n", + " self.putrequest(method, url, **skips)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/http/client.py\", line 1128, in putrequest\n", + " self._validate_path(url)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/http/client.py\", line 1228, in _validate_path\n", + " raise InvalidURL(f\"URL can't contain control characters. {url!r} \"\n", + "http.client.InvalidURL: URL can't contain control characters. '/rss/search?q=NVIDIA Corporation&hl=en-US&gl=US&ceid=US:en' (found at least ' ')\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mCritic\u001b[0m (to Research_manager):\n", + "\n", + "The code provided for fetching news articles returned an error because the URL included spaces which are considered control characters in HTTP URLs. The ticker symbol `\"NVIDIA Corporation\"` was directly used in the URL without proper URL encoding.\n", + "\n", + "To remedy this, we'll need to update the code to use URL encoding for the company names in the query parameters. The `urllib.parse` module in Python can be used to safely encode these parameters. Here is the corrected Python code snippet:\n", + "\n", + "```python\n", + "# filename: fetch_news.py\n", + "\n", + "import feedparser\n", + "from urllib.parse import urlencode\n", + "\n", + "# Function to fetch news for a given company\n", + "def fetch_news(company_name):\n", + " params = urlencode({'q': company_name, 'hl': 'en-US', 'gl': 'US', 'ceid': 'US:en'})\n", + " url = f\"https://news.google.com/rss/search?{params}\"\n", + " feed = feedparser.parse(url)\n", + " return feed.entries\n", + "\n", + "# Fetch and display news for NVIDIA Corporation (NVDA)\n", + "nvda_news = fetch_news('NVIDIA Corporation')\n", + "print(\"Recent news for NVIDIA Corporation (NVDA):\")\n", + "for entry in nvda_news[:5]: # Limit to 5 articles for brevity\n", + " print(f\"- {entry.title} (Source: {entry.source.title}) on {entry.published}\")\n", + "\n", + "# Fetch and display news for Tesla, Inc. (TSLA)\n", + "tsla_news = fetch_news('Tesla, Inc.')\n", + "print(\"\\nRecent news for Tesla, Inc. (TSLA):\")\n", + "for entry in tsla_news[:5]: # Limit to 5 articles for brevity\n", + " print(f\"- {entry.title} (Source: {entry.source.title}) on {entry.published}\")\n", + "\n", + "# Note: In production, you should handle potential exceptions and errors.\n", + "```\n", + "\n", + "Replace `fetch_news('NVIDIA Corporation')` and `fetch_news('Tesla, Inc.')` with the corrected calls using the updated code. The error should no longer occur, and you should be able to retrieve the news articles for each company.\n", + "\n", + "Once the corrected code is executed, you should review the output (the recent news articles) as this will provide information that might likely explain the stock performance for both NVDA and TSLA. \n", + "\n", + "Please remember to check the dates of the articles and correlate them with the timeline of stock performance to determine if the article content might have had a direct impact on the stock price movements.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[34mStart a new chat with the following message: \n", + "Develop an engaging blog post using any information provided.\n", + "\n", + "With the following carryover: \n", + "The script executed successfully and provided the following information:\n", + "\n", + "- NVIDIA Corporation (NVDA) current stock price: $661.60\n", + "- Tesla, Inc. (TSLA) current stock price: $187.91\n", + "- NVDA percentage change over the past month: 26.61%\n", + "- TSLA percentage change over the past month: -21.85%\n", + "\n", + "To summarize, NVDA has seen an increase of approximately 26.61% in its stock price over the past month, while TSLA has experienced a decrease of approximately -21.85% in the same period.\n", + "\n", + "Please note that stock prices are volatile and the reported prices are specific to the moment the data was retrieved. The percentage change reflects the stock performance over the past 30 days from the most recent closing price.\n", + "\n", + "If you need any further assistance or another task, feel free to ask. Otherwise, this concludes your request.\n", + "\n", + "\n", + "The code snippet provided to fetch news articles failed due to an HTTP URL error. Spaces included in company names were not URL-encoded, causing the `InvalidURL` error. To solve this, the code should be updated with URL encoding using Python's `urllib.parse` module for the company names in the query parameters. Once corrected, the code is expected to work properly to fetch news articles that may explain the stock performance for both NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA).\u001b[0m\n", + "\u001b[34m\n", + "********************************************************************************\u001b[0m\n", + "\u001b[33mUser\u001b[0m (to Writing_manager):\n", + "\n", + "Develop an engaging blog post using any information provided.\n", + "Context: \n", + "The script executed successfully and provided the following information:\n", + "\n", + "- NVIDIA Corporation (NVDA) current stock price: $661.60\n", + "- Tesla, Inc. (TSLA) current stock price: $187.91\n", + "- NVDA percentage change over the past month: 26.61%\n", + "- TSLA percentage change over the past month: -21.85%\n", + "\n", + "To summarize, NVDA has seen an increase of approximately 26.61% in its stock price over the past month, while TSLA has experienced a decrease of approximately -21.85% in the same period.\n", + "\n", + "Please note that stock prices are volatile and the reported prices are specific to the moment the data was retrieved. The percentage change reflects the stock performance over the past 30 days from the most recent closing price.\n", + "\n", + "If you need any further assistance or another task, feel free to ask. Otherwise, this concludes your request.\n", + "\n", + "\n", + "The code snippet provided to fetch news articles failed due to an HTTP URL error. Spaces included in company names were not URL-encoded, causing the `InvalidURL` error. To solve this, the code should be updated with URL encoding using Python's `urllib.parse` module for the company names in the query parameters. Once corrected, the code is expected to work properly to fetch news articles that may explain the stock performance for both NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA).\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mWriter\u001b[0m (to Writing_manager):\n", + "\n", + "# Riding the Wave or Caught in the Storm? A Tale of Two Stocks\n", + "\n", + "The world of stock investments is a thrilling ride filled with highs and lows, successes, and surprises. But what makes one company's stock surge while another's stumbles? Let's dive into the current state of two headline-grabbing giants, NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), and unravel the threads that might compose their contrasting financial tapestries.\n", + "\n", + "## NVIDIA: The Glow of Green\n", + "\n", + "Starting with the brighter side of the market, NVIDIA, renowned for its powerful graphics processing units (GPUs) and deep learning technologies, has witnessed its stock price flourish by a remarkable 26.61% over the past month, with shares now trading at $661.60. It's a lush green signal for investors and stands as a testament to the company's current market strength and potential.\n", + "\n", + "So, what's the secret ingredient in NVIDIA's recipe for success? While the biotechnical details are beyond the scope of our conversation today, some speculate that the increase could be attributed to several promising factors. Perhaps they've announced groundbreaking innovations, secured profitable partnerships, or simply surfed the wave of a market trend that favors tech growth. Whatever the case, NVIDIA proves that it knows how to capitalize on its strengths and catch the right market currents.\n", + "\n", + "## Tesla: A Shock to the System\n", + "\n", + "On the flip side, we have the electric automotive pioneer, Tesla. The past month has seen its stock battered by a 21.85% decline, bringing the price down to $187.91 a share. For Tesla admirers, this downturn might come as a jarring buzz that's hard to ignore. Tesla, a company once almost synonymous with market disruption and lucrative returns, is facing a stormy season.\n", + "\n", + "Why the swerve off course? The factors are nebulous—potentially a cocktail of internal company dynamics, shifts in consumer confidence, global economic headwinds, or even simply the weather patterns of an unpredictable market. It goes to show that not even the giants can steer completely clear of volatility. However, Tesla has been known for its resilience and ability to charge back with a vengeance. The question remains: will they do it again?\n", + "\n", + "## The Matter of Fetching News\n", + "\n", + "As our story unfolds, we face a technical glitch that could have offered us more insight. The code intended to gather news articles to pinpoint the whys and hows of these stock movements hit an HTTP URL error. The culprit? A simple oversight of not encoding spaces with Python’s `urllib.parse` module. Fortunately, this is a bug that's as fixable as a typo in a manuscript. Once patched, we could have access to a broader narrative that may explain the recent market performances of NVDA and TSLA.\n", + "\n", + "## Looking Forward\n", + "\n", + "As investors, enthusiasts, or casual market observers, we must understand that stock prices are as changeable as the clouds in the sky. They present a momentary snapshot influenced by an array of factors both within and beyond a company’s control. NVIDIA's current upsurge and Tesla's downturn might shift in an instant with the next big news or global event.\n", + "\n", + "What we witness here is more than just numbers fluctuating on a screen; it's a reflection of the vibrant, ever-evolving narrative of industry and innovation. So, whether you’re considering riding the crest of NVIDIA's wave or eyeing the storm around Tesla for a brave investment, keep your eyes peeled, mind open, and strategies flexible. The market, after all, is a grand tale in the making, and its next chapter is always just around the corner.\n", + "\n", + "This is a snapshot in a long, complex journey. For up-to-the-minute analysis, make sure you're equipped with the most current data and insights, remembering that past performance is not necessarily indicative of future results.\n", + "\n", + "Happy investing – may your decisions be as informed as they are bold.\n", + "\n", + "TERMINATE\n", + "\n", + "--------------------------------------------------------------------------------\n" + ] + } + ], + "source": [ + "user_proxy = autogen.UserProxyAgent(\n", + " name=\"User_proxy\",\n", + " system_message=\"A human admin.\",\n", + " human_input_mode=\"NEVER\",\n", + " is_termination_msg=lambda x: x.get(\"content\", \"\") and x.get(\"content\", \"\").rstrip().endswith(\"TERMINATE\"),\n", + " code_execution_config={\n", + " \"last_n_messages\": 1,\n", + " \"work_dir\": \"groupchat\",\n", + " \"use_docker\": False,\n", + " },\n", + ")\n", + "\n", + "research_assistant = autogen.AssistantAgent(\n", + " name=\"Researcher\",\n", + " llm_config={\"config_list\": config_list},\n", + " is_termination_msg=lambda x: x.get(\"content\", \"\") and x.get(\"content\", \"\").rstrip().endswith(\"TERMINATE\"),\n", + ")\n", + "\n", + "writer = autogen.AssistantAgent(\n", + " name=\"Writer\",\n", + " llm_config={\"config_list\": config_list},\n", + " system_message=\"\"\"\n", + " You are a professional writer, known for\n", + " your insightful and engaging articles.\n", + " You transform complex concepts into compelling narratives.\n", + " Reply \"TERMINATE\" in the end when everything is done.\n", + " \"\"\",\n", + ")\n", + "\n", + "critic = autogen.AssistantAgent(\n", + " name=\"Critic\",\n", + " system_message=\"\"\"Critic. Double check plan, claims, code from other agents and provide feedback. Check whether the plan includes adding verifiable info such as source URL.\n", + " Reply \"TERMINATE\" in the end when everything is done.\n", + " \"\"\",\n", + " llm_config={\"config_list\": config_list},\n", + ")\n", + "\n", + "groupchat_1 = autogen.GroupChat(agents=[user_proxy, research_assistant, critic], messages=[], max_round=50)\n", + "\n", + "groupchat_2 = autogen.GroupChat(agents=[user_proxy, writer, critic], messages=[], max_round=50)\n", + "\n", + "manager_1 = autogen.GroupChatManager(\n", + " groupchat=groupchat_1,\n", + " name=\"Research_manager\",\n", + " llm_config={\"config_list\": config_list},\n", + " is_termination_msg=lambda x: x.get(\"content\", \"\").find(\"TERMINATE\") >= 0,\n", + " code_execution_config={\n", + " \"last_n_messages\": 1,\n", + " \"work_dir\": \"groupchat\",\n", + " \"use_docker\": False,\n", + " },\n", + ")\n", + "manager_2 = autogen.GroupChatManager(\n", + " groupchat=groupchat_2,\n", + " name=\"Writing_manager\",\n", + " llm_config={\"config_list\": config_list},\n", + " is_termination_msg=lambda x: x.get(\"content\", \"\").find(\"TERMINATE\") >= 0,\n", + " code_execution_config={\n", + " \"last_n_messages\": 1,\n", + " \"work_dir\": \"groupchat\",\n", + " \"use_docker\": False,\n", + " },\n", + ")\n", + "\n", + "user = autogen.UserProxyAgent(\n", + " name=\"User\",\n", + " human_input_mode=\"NEVER\",\n", + " is_termination_msg=lambda x: x.get(\"content\", \"\").find(\"TERMINATE\") >= 0,\n", + " code_execution_config={\n", + " \"last_n_messages\": 1,\n", + " \"work_dir\": \"tasks\",\n", + " \"use_docker\": False,\n", + " }, # Please set use_docker=True if docker is available to run the generated code. Using docker is safer than running the generated code directly.\n", + ")\n", + "user.initiate_chats(\n", + " [\n", + " {\"recipient\": research_assistant, \"message\": financial_tasks[0], \"summary_method\": \"last_msg\"},\n", + " {\"recipient\": manager_1, \"message\": financial_tasks[1], \"summary_method\": \"reflection_with_llm\"},\n", + " {\"recipient\": manager_2, \"message\": writing_tasks[0]},\n", + " ]\n", + ")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + }, + "vscode": { + "interpreter": { + "hash": "949777d72b0d2535278d3dc13498b2535136f6dfe0678499012e853ee9abcab1" + } + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "2d910cfd2d2a4fc49fc30fbbdc5576a7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "454146d0f7224f038689031002906e6f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_e4ae2b6f5a974fd4bafb6abb9d12ff26", + "IPY_MODEL_577e1e3cc4db4942b0883577b3b52755", + "IPY_MODEL_b40bdfb1ac1d4cffb7cefcb870c64d45" + ], + "layout": "IPY_MODEL_dc83c7bff2f241309537a8119dfc7555", + "tabbable": null, + "tooltip": null + } + }, + "577e1e3cc4db4942b0883577b3b52755": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_allow_html": false, + "layout": "IPY_MODEL_2d910cfd2d2a4fc49fc30fbbdc5576a7", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_74a6ba0c3cbc4051be0a83e152fe1e62", + "tabbable": null, + "tooltip": null, + "value": 1 + } + }, + "6086462a12d54bafa59d3c4566f06cb2": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "74a6ba0c3cbc4051be0a83e152fe1e62": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "7d3f3d9e15894d05a4d188ff4f466554": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "background": null, + "description_width": "", + "font_size": null, + "text_color": null + } + }, + "b40bdfb1ac1d4cffb7cefcb870c64d45": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HTMLView", + "description": "", + "description_allow_html": false, + "layout": "IPY_MODEL_f1355871cc6f4dd4b50d9df5af20e5c8", + "placeholder": "​", + "style": "IPY_MODEL_ca245376fd9f4354af6b2befe4af4466", + "tabbable": null, + "tooltip": null, + "value": " 1/1 [00:00<00:00, 44.69it/s]" + } + }, + "ca245376fd9f4354af6b2befe4af4466": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "StyleView", + "background": null, + "description_width": "", + "font_size": null, + "text_color": null + } + }, + "dc83c7bff2f241309537a8119dfc7555": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e4ae2b6f5a974fd4bafb6abb9d12ff26": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "2.0.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "2.0.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "2.0.0", + "_view_name": "HTMLView", + "description": "", + "description_allow_html": false, + "layout": "IPY_MODEL_6086462a12d54bafa59d3c4566f06cb2", + "placeholder": "​", + "style": "IPY_MODEL_7d3f3d9e15894d05a4d188ff4f466554", + "tabbable": null, + "tooltip": null, + "value": "100%" + } + }, + "f1355871cc6f4dd4b50d9df5af20e5c8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "2.0.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "2.0.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "2.0.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border_bottom": null, + "border_left": null, + "border_right": null, + "border_top": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/test/agentchat/test_chats.py b/test/agentchat/test_chats.py new file mode 100644 index 000000000000..b6fd39c695e9 --- /dev/null +++ b/test/agentchat/test_chats.py @@ -0,0 +1,202 @@ +from autogen import AssistantAgent, UserProxyAgent +from autogen import GroupChat, GroupChatManager +from test_assistant_agent import KEY_LOC, OAI_CONFIG_LIST +import pytest +from conftest import skip_openai +import autogen + + +@pytest.mark.skipif(skip_openai, reason="requested to skip openai tests") +def test_chats_group(): + config_list = autogen.config_list_from_json( + OAI_CONFIG_LIST, + file_location=KEY_LOC, + ) + financial_tasks = [ + """What are the full names of NVDA and TESLA.""", + """Pros and cons of the companies I'm interested in. Keep it short.""", + ] + + writing_tasks = ["""Develop a short but engaging blog post using any information provided."""] + + user_proxy = UserProxyAgent( + name="User_proxy", + system_message="A human admin.", + human_input_mode="NEVER", + code_execution_config={ + "last_n_messages": 1, + "work_dir": "groupchat", + "use_docker": False, + }, + is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").rstrip().endswith("TERMINATE"), + ) + + financial_assistant = AssistantAgent( + name="Financial_assistant", + llm_config={"config_list": config_list}, + ) + + writer = AssistantAgent( + name="Writer", + llm_config={"config_list": config_list}, + 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. + """, + ) + + critic = AssistantAgent( + name="Critic", + system_message="""Critic. Double check plan, claims, code from other agents and provide feedback. Check whether the plan includes adding verifiable info such as source URL. + Reply "TERMINATE" in the end when everything is done. + """, + llm_config={"config_list": config_list}, + ) + + groupchat_1 = GroupChat(agents=[user_proxy, financial_assistant, critic], messages=[], max_round=50) + + groupchat_2 = GroupChat(agents=[user_proxy, writer, critic], messages=[], max_round=50) + + manager_1 = GroupChatManager( + groupchat=groupchat_1, + name="Research_manager", + llm_config={"config_list": config_list}, + code_execution_config={ + "last_n_messages": 1, + "work_dir": "groupchat", + "use_docker": False, + }, + is_termination_msg=lambda x: x.get("content", "").find("TERMINATE") >= 0, + ) + manager_2 = GroupChatManager( + groupchat=groupchat_2, + name="Writing_manager", + llm_config={"config_list": config_list}, + code_execution_config={ + "last_n_messages": 1, + "work_dir": "groupchat", + "use_docker": False, + }, + is_termination_msg=lambda x: x.get("content", "").find("TERMINATE") >= 0, + ) + + user = UserProxyAgent( + name="User", + human_input_mode="NEVER", + is_termination_msg=lambda x: x.get("content", "") and x.get("content", "").rstrip().endswith("TERMINATE"), + 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. + ) + chat_res = user.initiate_chats( + [ + { + "recipient": financial_assistant, + "message": financial_tasks[0], + "summary_method": "last_msg", + }, + { + "recipient": manager_1, + "message": financial_tasks[1], + "summary_method": "reflection_with_llm", + }, + {"recipient": manager_2, "message": writing_tasks[0]}, + ] + ) + + chat_w_manager = chat_res[manager_2] + print(chat_w_manager.chat_history, chat_w_manager.summary, chat_w_manager.cost) + + manager_2_res = user.get_chat_results(manager_2) + all_res = user.get_chat_results() + print(manager_2_res.summary, manager_2_res.cost) + print(all_res[financial_assistant].human_input) + print(all_res[manager_1].summary) + + +@pytest.mark.skipif(skip_openai, reason="requested to skip openai tests") +def test_chats(): + config_list = autogen.config_list_from_json( + OAI_CONFIG_LIST, + file_location=KEY_LOC, + ) + + financial_tasks = [ + """What are the full names of NVDA and TESLA.""", + """Pros and cons of the companies I'm interested in. 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}, + ) + financial_assistant_2 = AssistantAgent( + name="Financial_assistant_2", + llm_config={"config_list": config_list}, + ) + writer = AssistantAgent( + name="Writer", + llm_config={"config_list": config_list}, + 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. + ) + + chat_res = user.initiate_chats( + [ + { + "recipient": financial_assistant_1, + "message": financial_tasks[0], + "clear_history": True, + "silent": False, + "summary_method": "last_msg", + }, + { + "recipient": financial_assistant_2, + "message": financial_tasks[1], + "summary_method": "reflection_with_llm", + }, + { + "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", + }, + ] + ) + + chat_w_writer = chat_res[writer] + print(chat_w_writer.chat_history, chat_w_writer.summary, chat_w_writer.cost) + + writer_res = user.get_chat_results(writer) + all_res = user.get_chat_results() + print(writer_res.summary, writer_res.cost) + print(all_res[financial_assistant_1].human_input) + print(all_res[financial_assistant_1].summary) + # print(blogpost.summary, insights_and_blogpost) + + +if __name__ == "__main__": + # test_chats() + test_chats_group() diff --git a/website/docs/Examples.md b/website/docs/Examples.md index 7a829fe2063b..7d07b133b41b 100644 --- a/website/docs/Examples.md +++ b/website/docs/Examples.md @@ -23,7 +23,8 @@ Links to notebook examples: - Automated Task Solving with agents divided into 2 groups - [View Notebook](https://github.com/microsoft/autogen/blob/main/notebook/agentchat_hierarchy_flow_using_select_speaker.ipynb) - Automated Task Solving with transition paths specified in a graph - [View Notebook](https://github.com/microsoft/autogen/blob/main/notebook/agentchat_graph_modelling_language_using_select_speaker.ipynb) - Running a group chat as an inner-monolgue via the SocietyOfMindAgent - [View Notebook](https://github.com/microsoft/autogen/blob/main/notebook/agentchat_society_of_mind.ipynb) - +1. **Sequential Multi-Agent Chats** + - Automated Sequential Multi-Agent Chats - [View Notebook](https://github.com/microsoft/autogen/blob/main/notebook/agentchat_multi_task_chats.ipynb) 1. **Applications** - Automated Chess Game Playing & Chitchatting by GPT-4 Agents - [View Notebook](https://github.com/microsoft/autogen/blob/main/notebook/agentchat_chess.ipynb)