diff --git a/autogen/agentchat/conversable_agent.py b/autogen/agentchat/conversable_agent.py index 287476387068..a82b4c82a969 100644 --- a/autogen/agentchat/conversable_agent.py +++ b/autogen/agentchat/conversable_agent.py @@ -63,7 +63,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." + DEFAULT_summary_prompt = "Summarize the takeaway from the conversation. Do not add any introductory phrases." llm_config: Union[Dict, Literal[False]] def __init__( @@ -822,66 +822,51 @@ def _summarize_chat( """ 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": + if 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] try: - summary = self._llm_response_preparer(prompt, msg_list, llm_agent=agent, cache=cache) + summary = self._reflection_with_llm(prompt, msg_list, llm_agent=agent, cache=cache) except BadRequestError as e: warnings.warn(f"Cannot extract summary using reflection_with_llm: {e}", UserWarning) + elif method == "last_msg" or method is None: + try: + summary = agent.last_message(self)["content"].replace("TERMINATE", "") + except (IndexError, AttributeError) as e: + warnings.warn(f"Cannot extract summary using last_msg: {e}", UserWarning) else: - warnings.warn("No summary_method provided or summary_method is not supported: ") + warnings.warn(f"Unsupported summary method: {method}", UserWarning) return summary - def _llm_response_preparer( + def _reflection_with_llm( self, prompt, messages, llm_agent: Optional[Agent] = None, cache: Optional[Cache] = None ) -> str: - """Default summary preparer with llm + """Get a chat summary using reflection with an llm client based on the conversation history. Args: - prompt (str): The prompt used to extract the final response from the transcript. + prompt (str): The prompt (in this method it is used as system prompt) used to get the summary. messages (list): The messages generated as part of a chat conversation. + llm_agent: the agent with an llm client. + cache (Cache or None): the cache client to be used for this 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( + system_msg = [ { "role": "system", "content": prompt, } - ) + ] + messages = messages + system_msg 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 + response = self._generate_oai_reply_from_client(llm_client=llm_client, messages=messages, cache=cache) + return response def initiate_chats(self, chat_queue: List[Dict[str, Any]]) -> Dict[Agent, ChatResult]: """(Experimental) Initiate chats with multiple agents. @@ -1021,7 +1006,12 @@ def generate_oai_reply( return False, None if messages is None: messages = self._oai_messages[sender] + extracted_response = self._generate_oai_reply_from_client( + client, self._oai_system_message + messages, self.client_cache + ) + return True, extracted_response + def _generate_oai_reply_from_client(self, llm_client, messages, cache): # unroll tool_responses all_messages = [] for message in messages: @@ -1035,13 +1025,12 @@ def generate_oai_reply( all_messages.append(message) # TODO: #1143 handle token limit exceeded error - response = client.create( + response = llm_client.create( context=messages[-1].pop("context", None), - messages=self._oai_system_message + all_messages, - cache=self.client_cache, + messages=all_messages, + cache=cache, ) - - extracted_response = client.extract_text_or_completion_object(response)[0] + extracted_response = llm_client.extract_text_or_completion_object(response)[0] if extracted_response is None: warnings.warn("Extracted_response is None.", UserWarning) @@ -1056,7 +1045,7 @@ def generate_oai_reply( ) for tool_call in extracted_response.get("tool_calls") or []: tool_call["function"]["name"] = self._normalize_name(tool_call["function"]["name"]) - return True, extracted_response + return extracted_response async def a_generate_oai_reply( self, diff --git a/notebook/agentchat_auto_feedback_from_code_execution.ipynb b/notebook/agentchat_auto_feedback_from_code_execution.ipynb index f4498c037aee..19758868b927 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": 1, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -48,9 +48,9 @@ "\n", "config_list = autogen.config_list_from_json(\n", " \"OAI_CONFIG_LIST\",\n", - " filter_dict={\n", - " \"model\": [\"gpt-4\", \"gpt-4-0314\", \"gpt4\", \"gpt-4-32k\", \"gpt-4-32k-0314\", \"gpt-4-32k-v0314\"],\n", - " },\n", + " # filter_dict={\n", + " # \"model\": [\"gpt-4\", \"gpt-4-0314\", \"gpt4\", \"gpt-4-32k\", \"gpt-4-32k-0314\", \"gpt-4-32k-v0314\"],\n", + " # },\n", ")" ] }, @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -117,20 +117,28 @@ "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", - "2024-02-05\n", + "2024-02-07\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\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", + "Great, today's date is 2024-02-07. Now, let's move on to the next step, which is to fetch the stock prices for META and TESLA.\n", + "\n", + "We will use Python to retrieve the stock data. There are several financial data APIs available, but for this example, we'll use `yfinance`, which is a popular library that allows us to fetch historical market data from Yahoo Finance.\n", + "\n", + "First, we need to install the `yfinance` package. You can do this by running the following command:\n", + "\n", + "```sh\n", + "pip install yfinance\n", + "```\n", "\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", + "After installing `yfinance`, we will write a Python script to fetch the YTD stock prices for META and TESLA and calculate the YTD gain. The YTD gain is calculated by comparing the current stock price to the stock price at the beginning of the year.\n", "\n", - "Here's the Python script to fetch the YTD stock data for META and TESLA and calculate their gains:\n", + "Here's the Python script to do that:\n", "\n", "```python\n", - "# filename: compare_ytd_gains.py\n", + "# filename: ytd_stock_comparison.py\n", "\n", "import yfinance as yf\n", "from datetime import datetime\n", @@ -141,7 +149,7 @@ "# Define the start of the year\n", "start_of_year = datetime(datetime.now().year, 1, 1)\n", "\n", - "# Fetch the historical data from the start of the year to the current date\n", + "# Fetch the stock data\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", @@ -149,39 +157,54 @@ "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", - "# Print the YTD gains\n", + "# Print the YTD gain for each stock\n", "print(f\"META YTD Gain: {meta_ytd_gain:.2f}%\")\n", "print(f\"TESLA YTD Gain: {tesla_ytd_gain:.2f}%\")\n", - "\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 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", + "Please save the above code in a file named `ytd_stock_comparison.py` and execute it. This script will output the YTD gain for both META and TESLA stocks.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\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[33muser_proxy\u001b[0m (to assistant):\n", "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", - "META YTD Gain: 37.17%\n", - "TESLA YTD Gain: -24.36%\n", - "META has a higher YTD gain than TESLA.\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", + "\n", + "META YTD Gain: 31.31%\n", + "TESLA YTD Gain: -25.49%\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\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", + "The year-to-date (YTD) gain for META (Meta Platforms, Inc.) is 31.31%, indicating an increase in its stock price since the beginning of the year. On the other hand, TESLA (Tesla, Inc.) has experienced a YTD loss of -25.49%, indicating a decrease in its stock price since the beginning of the year.\n", "\n", - "If you need further assistance or have more questions, feel free to ask. Otherwise, if everything is done, please let me know.\n", + "These percentages reflect the performance of each company's stock from the start of the year to today's date, 2024-02-07.\n", "\n", "TERMINATE\n", "\n", @@ -243,16 +266,16 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 9, "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" + "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-07\\n', 'role': 'assistant'}, {'content': 'Great, today\\'s date is 2024-02-07. Now, let\\'s move on to the next step, which is to fetch the stock prices for META and TESLA.\\n\\nWe will use Python to retrieve the stock data. There are several financial data APIs available, but for this example, we\\'ll use `yfinance`, which is a popular library that allows us to fetch historical market data from Yahoo Finance.\\n\\nFirst, we need to install the `yfinance` package. You can do this by running the following command:\\n\\n```sh\\npip install yfinance\\n```\\n\\nAfter installing `yfinance`, we will write a Python script to fetch the YTD stock prices for META and TESLA and calculate the YTD gain. The YTD gain is calculated by comparing the current stock price to the stock price at the beginning of the year.\\n\\nHere\\'s the Python script to do that:\\n\\n```python\\n# filename: ytd_stock_comparison.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 stock data\\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 gain for each stock\\nprint(f\"META YTD Gain: {meta_ytd_gain:.2f}%\")\\nprint(f\"TESLA YTD Gain: {tesla_ytd_gain:.2f}%\")\\n```\\n\\nPlease save the above code in a file named `ytd_stock_comparison.py` and execute it. This script will output the YTD gain for both META and TESLA stocks.', '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)\\nRequirement already satisfied: pandas>=1.3.0 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.2.0)\\nRequirement already satisfied: numpy>=1.16.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.26.3)\\nRequirement already satisfied: requests>=2.31 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.31.0)\\nRequirement already satisfied: multitasking>=0.0.7 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (0.0.11)\\nRequirement already satisfied: lxml>=4.9.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (5.1.0)\\nRequirement already satisfied: appdirs>=1.4.4 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.4.4)\\nRequirement already satisfied: pytz>=2022.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2023.3.post1)\\nRequirement already satisfied: frozendict>=2.3.4 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (2.4.0)\\nRequirement already satisfied: peewee>=3.16.2 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (3.17.0)\\nRequirement already satisfied: beautifulsoup4>=4.11.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (4.12.3)\\nRequirement already satisfied: html5lib>=1.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from yfinance) (1.1)\\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)\\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)\\nRequirement already satisfied: webencodings in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from html5lib>=1.1->yfinance) (0.5.1)\\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)\\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)\\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)\\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)\\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)\\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)\\n\\nMETA YTD Gain: 31.31%\\nTESLA YTD Gain: -25.49%\\n', 'role': 'assistant'}, {'content': \"The year-to-date (YTD) gain for META (Meta Platforms, Inc.) is 31.31%, indicating an increase in its stock price since the beginning of the year. On the other hand, TESLA (Tesla, Inc.) has experienced a YTD loss of -25.49%, indicating a decrease in its stock price since the beginning of the year.\\n\\nThese percentages reflect the performance of each company's stock from the start of the year to today's date, 2024-02-07.\\n\\nTERMINATE\", 'role': 'user'}]\n", + "Summary: The year-to-date gain for META is 31.31%, while TESLA has a year-to-date loss of -25.49% as of February 7, 2024.\n", + "Cost info: ({'total_cost': 0.20895, 'gpt-4': {'cost': 0.20895, 'prompt_tokens': 5355, 'completion_tokens': 805, 'total_tokens': 6160}}, {'total_cost': 0.18321, 'gpt-4': {'cost': 0.18321, 'prompt_tokens': 4865, 'completion_tokens': 621, 'total_tokens': 5486}})\n" ] } ], @@ -273,7 +296,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -287,11 +310,15 @@ "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\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", + "To plot a chart of the YTD stock price changes 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", + "First, ensure that `matplotlib` is installed by running the following command:\n", "\n", - "If `matplotlib` is not installed, you will need to install it using `pip install matplotlib`.\n", + "```sh\n", + "pip install matplotlib\n", + "```\n", "\n", - "Here's the Python script to plot the chart and save it:\n", + "Next, here's the Python script to fetch the stock data, plot the chart, and save it:\n", "\n", "```python\n", "# filename: plot_stock_price_ytd.py\n", @@ -306,21 +333,21 @@ "# Define the start of the year\n", "start_of_year = datetime(datetime.now().year, 1, 1)\n", "\n", - "# Fetch the historical data from the start of the year to the current date\n", + "# Fetch the stock data\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", - "# Normalize the data to compare the percentage change from the start of the year\n", + "# Normalize the data to compare the percentage change\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", + "plt.plot(meta_normalized, label='META YTD')\n", + "plt.plot(tesla_normalized, label='TESLA YTD')\n", "\n", "# Add titles and labels\n", - "plt.title('Stock Price Change YTD for META and TESLA')\n", + "plt.title('YTD Stock Price Change for META and TESLA')\n", "plt.xlabel('Date')\n", "plt.ylabel('Normalized Price (Base 100)')\n", "plt.legend()\n", @@ -330,24 +357,36 @@ "plt.show()\n", "```\n", "\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", + "Please save the above code in a file named `plot_stock_price_ytd.py` and execute it. This script will create a chart showing the normalized YTD stock price changes for META and TESLA, and save the chart as `stock_price_ytd.png`. The normalization sets the initial stock prices to 100 to compare the relative changes in stock prices over time.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", - ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\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[33muser_proxy\u001b[0m (to assistant):\n", "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", + "Requirement already satisfied: matplotlib in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (3.8.2)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (1.2.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (0.12.1)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (4.47.2)\n", + "Requirement already satisfied: kiwisolver>=1.3.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (1.4.5)\n", + "Requirement already satisfied: numpy<2,>=1.21 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (1.26.3)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (23.2)\n", + "Requirement already satisfied: pillow>=8 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (10.2.0)\n", + "Requirement already satisfied: pyparsing>=2.3.1 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (3.1.1)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from matplotlib) (2.8.2)\n", + "Requirement already satisfied: six>=1.5 in /Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0)\n", + "\n", "Figure(1400x700)\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33massistant\u001b[0m (to user_proxy):\n", "\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", + "The chart showing the year-to-date (YTD) stock price changes for META and TESLA has been successfully created and saved as `stock_price_ytd.png`. The chart should now be available in the directory where the script was executed.\n", "\n", "TERMINATE\n", "\n", @@ -477,7 +516,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [ { @@ -543,7 +582,7 @@ }, { "data": { - "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", + "image/png": "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822bO+4///zTAIwZM2bkWb9w4cICl19o27ZtBmA89dRT+dYlJiYaJ0+edHxdWJqY+zN7oQkTJhgmk8k4dOhQvntyodxncP/+/fnG8dFHHxU61gv9+OOPBmD4+/sbkZGRBY4n16WWmOWaM2eOARgffPBBicYmIiJyMWUQiYiIFGPIkCGcO3eO+fPnc+bMGebPn19sednNN9/M4sWL830VloFRlBkzZjBgwABHWU2DBg1o06ZNiUqkevToQWBgILNmzXIsO336NIsXL+bOO+90LPPz8yMuLq5EGTWXo3379gXel9zsKIAHHniAhQsX0q1bN1auXMn48ePp0qULDRo0YPXq1Zd03hkzZhAcHOy4/yaTiTvvvJPvvvsOq9Va7P7Tpk3j448/JiIigjlz5vDss8/SuHFjbrzxRo4ePVrs/kuWLCErK4unnnoqT3nRyJEj8fX15ZdffgFgy5YtxMbG8tRTT+Hn55fnGAU1jv7999/p06cPN954I7Nnzy60aXpBGjVqRI0aNYiIiOCRRx6hfv36/PLLL3h6ejq2cXNzK7BE8WI//fQTgYGB/OMf/8i3LnfcP/zwA9WqVaNXr155ssfatGmDt7c3v//+e6HHz51draDMqMjISGrUqOH4+t///udYd2GD6LS0NE6dOkWnTp0wDIMtW7YUe109e/bM0yS6efPm+Pr6lni2tNtuu43+/fuTlJTEJ598kmc8ZS333pw5c6bcziEiIpWbZjETEREpRo0aNejZsyczZ84kPT0dq9XK7bffXuQ+YWFh9OzZ87LPvWvXLrZs2cLw4cPZv3+/Y3m3bt345JNPSE1NxdfXt9D9nZ2due2225g5cyaZmZm4ubkxe/ZsLBZLngDRCy+8wJIlS7juuuuoX78+vXv35u677y6w787lCAwMLNF96dOnD3369CE9PZ1NmzYxa9YsPvvsMwYOHMju3btL1YvIarXy3Xff0b17d0d/HbAHq9555x2WLl1K7969izyG2Wxm9OjRjB49msTERFatWsVnn33GggULGDp0KH/++WeR+x86dAiwB2Uu5OrqSmRkpGN9bplX06ZNi72ujIwMBgwYQJs2bfj+++9xdi7dn3U//fQTvr6+uLi4EBYWlicQkqtWrVoF9oK6WExMDI0aNSpyDPv27SMlJaXQf7uEhIRC980NjhbUW+nnn3/GYrGwbdu2PD21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ErJUYlYo3RERERERERERqRKybSoxK4zuiIiIiIiIiIhUCRarSswKowCRiIiIiIiIiFQJKjErnO6IiIiIiIiIiFQJKjErnO6IiIiIiIiIiFQJlmyVmBVGASIRERERERERqRLO9yBSOORiuiMiIiIiIiIiUiVYVGJWKN0REREREREREakSckvMnFVilo8CRCIiIiIiIiJSJeSWmLkqgygf3RERERERERERqRJyS8yczQqHXEx3RERERERERESqBMcsZs4qMbuYAkQiIiIiIiIiUiWoxKxwuiMiIiIiIiIiUiWcLzFTBtHFFCASERERERERkSrhfImZwiEXq9A7MmHCBNq1a4ePjw9BQUHccsst7NmzJ8823bp1w2Qy5fl69NFH82xz+PBhBgwYgKenJ0FBQTz33HNkZ2dfyUsRERERERERkatcdk4GkYtKzPJxrsiTL1++nNGjR9OuXTuys7N56aWX6N27Nzt37sTLy8ux3ciRI3nttdcc7z09PR2vrVYrAwYMICQkhNWrV3P8+HGGDx+Oi4sLb7755hW9HhERERERERG5euX2IHJxUonZxSo0QLRw4cI876dPn05QUBCbNm2ia9eujuWenp6EhIQUeIxFixaxc+dOlixZQnBwMC1btmT8+PG88MILjB07FldX13K9BhERERERERG5NmTllpgpgyifCg0QXSwlJQUAf3//PMtnzJjBN998Q0hICIMGDeJf//qXI4tozZo1NGvWjODgYMf2ffr04bHHHmPHjh20atUq33kyMzPJzMx0vE9NTQXAYrFgsVjK/LrKWu4Yr4WxytVLz5GUFz1bUh70XMmVoOdMyoueLSkPeq4uTW4Gkdkwqsy9K+l1mgzDMMp5LCVis9m46aabSE5OZuXKlY7lkydPpk6dOtSsWZO//vqLF154geuuu47Zs2cD8PDDD3Po0CF+++03xz7p6el4eXnx66+/0q9fv3znGjt2LOPGjcu3fObMmXnK10RERERERESk8nj7LyeOpJl4OMpKk+pXRTik3KWnp3P33XeTkpKCr69vodtdNRlEo0ePZvv27XmCQ2APAOVq1qwZoaGh3HjjjcTExFCvXr1LOteLL77IM88843ifmppKeHg4vXv3LvJmXS0sFguLFy+mV69euLi4VPRw5Bql50jKi54tKQ96ruRK0HMm5UXPlpQHPVeX5tMDqyHtLB3bX8f19QMqejhXRG7VVHGuigDR448/zvz581mxYgVhYWFFbtu+fXsA9u/fT7169QgJCWH9+vV5tjlx4gRAoX2L3NzccHNzy7fcxcXlmvrButbGK1cnPUdSXvRsSXnQcyVXgp4zKS96tqQ86LkqneycpCEPt6pz30p6nRXalckwDB5//HHmzJnDsmXLiIiIKHafrVu3AhAaGgpAx44d+fvvv0lISHBss3jxYnx9fYmOji6XcYuIiIiIiIjItUezmBWuQjOIRo8ezcyZM/n555/x8fEhPj4egGrVquHh4UFMTAwzZ86kf//+BAQE8Ndff/H000/TtWtXmjdvDkDv3r2Jjo5m2LBhvPXWW8THx/PKK68wevToArOERERERERERKRqsmgWs0JV6B359NNPSUlJoVu3boSGhjq+Zs2aBYCrqytLliyhd+/eREVFMWbMGG677TbmzZvnOIaTkxPz58/HycmJjh07cu+99zJ8+HBee+21irosEREREREREbkKWWz2GjNnswJEF6vQDKLiJlALDw9n+fLlxR6nTp06/Prrr2U1LBERERERERGphHJLzFydVWJ2MYXMRERERERERKRKyLbaE1VUYpaf7oiIiIiIiIiIVAlZORlEzgoQ5aM7IiIiIiIiIiJVgmYxK5wCRCIiIiIiIiJS6VltBrmtkF2VQZSP7oiIiIiIiIiIVHq52UOgErOC6I6IiIiIiIiISKWXdUGASCVm+SlAJCIiIiIiIiKVXu4MZgAuZoVDLqY7IiIiIiIiIiKVXm6JmZPZhNmsDKKLKUAkIiIiIiIiIpVeVrZmMCuKAkQiIiIiIiIiUull2+wlZi5qUF0g3RURERERERERqfRyS8wUICqY7oqIiIiIiIiIVHoqMSuaAkQiIiIiIiIiUunllpg5awazAumuiIiIiIiIiEill1ti5uqsUEhBdFdEREREREREpNI734NIJWYFUYBIRERERERERCo9i1UlZkXRXRERERERERGRSs+S26RaJWYF0l0RERERERERkUov25bTg0glZgVSgEhEREREREREKr0slZgVSXdFRERERERERCo9lZgVTXdFRERERERERCo9lZgVTQEiEREREREREan0VGJWNN0VEREREREREan0VGJWNN0VEREREREREan0ckvMXFRiViAFiERERERERESk0rPklJi5qMSsQLor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MGzqOg4nppdo3+V7T5KUlkWgtxsjOtUt03FJ5aMSMxEREREREZFSMAyDB77cwIGTaTQI8iYtMxuAwa3CyuV8Xm7OTBvRjjsnrWXPiTPcM3Ut3z7Yrtj95myxl73d0rImzk7KD5Gi6QkRERERERERKYU9J85w4KS9CfW+hLMcS8nAw8WJvk1Dyu2cfp6ufP3gddT29+RI0jke+HIzaZbCt09Jt7BkZwIAg1uXT+BKKhcFiERERERERERKYcnOEwB0jAzg7va1MZlgeKc6eLmVb5FOkK873zzYniAfN/YmnGXSbidH9tLF5v99jCyrjagQH6Jr+pbruKRyUIBIREREREREpBQW5wSIbmpZkzdvbcbu8X35Z9+oK3Lu2gGefP1ge6p5OHPorIlR324lM9uab7s5m+19kQa3rnVFxiXXPgWIREREREREREroRGoG2+JSMJngxsZBgL2RtMlkumJjaBTiw+fDWuNqNlgdk8ST324l22pzrN+fcJaNh05jNsHNLRUgkpJRgEhERERERESkhHKzh1qG+xHk415h42gZ7sdDjWy4OJlYuCOel+b8jWEY2GwGL835G4AeUUEE+1bcGOXaolnMREREREREREooN0DUKzq4gkcCjfwM3rujOU/M2sb3G+PwdXchrLoH62OT8HR14t+DmlT0EOUaogwiERERERERkRI4m5nNmphEAHo1rvgAEUCfJsH857bmAHy+Mpbxv+wC4MV+UYT7e1bk0OQaowCRiIiIiIiISAn8vPUoWVYbdQM8qR/kXdHDcRjSNpxXBjQGwGoz6BgZwD3t61TwqORaoxIzERERERERkWKkZWbz/pJ9ANzXqe4VbUpdEg91icRsMrF870neuLUpZvPVNT65+ilAJCIiIiIiIlKMz/+M5eSZTGr7e1612TkPXB/BA9dHVPQw5BqlEjMREREREREpMZvNqOghXHEnz2QyaUUMAM/3bYSrsz5KS+Wjp1pERERERERKZNaGwzR+dSGTlsdU9FCuqA+W7iU9y0qLsGoMaBZa0cMRKRcKEImIiIiIiEixbDaDT36PITPbxoQFu3nz110YRuXPJoo5eZZv1x8B4MX+ja+63kMiZUUBIhEREREREcln9uY4+n/wJ8v3ngRg7YFEDiel4+pk/xg5ecUBnv/xL7KttoocZrl7a+FurDaDno2D6BAZUNHDESk3ChCJ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3apmzWr31Z7vhrgRziCyg8mTJystLU2rV6+u8zrS0tL00EMPKS4uTkOGDKm2fOvWrdq9e7eWLVumRYsWadWqVZKklStXys/Pr/K1devWOtcAx3LmHL3wwgtKTU3Vl19+KXd3d40bN07GmDrvB2zLWbMVGxur+++/X926dVNMTIwWLFigJUuWqLi4uM77Adty1mxVOHv2rL744gs9+eSTda4f9uWMGevSpYveffddLViwQL6+vgoLC1P79u0VGhpa5awiOJYzZgvOwV7ZKisr06OPPqrZs2erU6dO1/0c2cItc/Q1bk3N5MmTTbt27czx48erjCclJV33uuCIiAiTkJBQZezgwYOmVatW5qWXXqrVNl999VXTqVMnY4wxeXl5Jj09vfJVWFhojh07dt3rlu+77z4zderUauvjOlPHawo5qnDmzBkjySQnJ9eqDthXU8pWWlqakWQOHz5cqzpgX00hW3PmzDEhISHcM62RagoZy8zMNPn5+aagoMC4ubmZjz76qFZ1wL4aY7auxT2InJc9s3X58mUjybi7u1e+LBZL5VhSUhLfDXHLaBDZiNVqNZMnTzZt2rQxR48erba84kZkn3zySeXY4cOHq92ILC0tzbRq1cq88MILtd727NmzTWRk5A1rCwsLM3/9618rx3Jzc7kRWSPUlHJU4dSpU0aS2bx5c61rge01xWytWLHCuLm5mUuXLtW6FtheU8mW1Wo17du3N88991ytt4+G0VQydq3ly5cbX19fvsw7WGPO1rVoEDmfhshWWVmZOXDgQJXXxIkTTefOnc2BAwdqfNIr3w1xIzSIbGTixIkmICDAbNmypcqjcq/9F4CYmBgTERFhNm3aZHbv3l3t8d8HDhwwISEhZuzYsVXWkZ2dXTln6dKlZt26debo0aPm6NGj5h//+Idp0aKFefnll29Y37x580xgYKBZu3at2b9/v3nooYeqPcrw1KlTJjU11cyePdv4+fmZ1NRUk5qaavLz8214pHAjzp6jb7/91ixZssSkpqaakydPmqSkJBMdHW1uv/12U1RUZOOjhVvh7NlKTk42CxcuNHv37jXHjh0zK1asMCEhIWbcuHE2PlK4Vc6erQobN240ksyhQ4dsdGRgK00hY0uWLDEpKSnmyJEjZunSpcbHx8e8/vrrNjxKqIvGnq2LFy+a1NRUs379eiPJrF692qSmppqMjIzKORkZGSY1NdW89dZbRpL55ptvTGpqqrl48aINjxRuVUNl6+dq8xQzY/huiJrRILIRSdd9JSYmVs65cuWKmTRpkmnZsqXx9fU1o0aNqvIHPi4u7rrruPZfFxYvXmy6dOlifH19jb+/v+nZs6d54403qjw69XqsVqv505/+ZEJDQ42Xl5f51a9+ZY4cOVJlzvjx46+7fc78aDjOnqP9+/ebgQMHmqCgIOPl5WWioqJMTEyMOXv2rM2OEerG2bOVkpJi+vbtawICAoy3t7e58847zdy5c2k8NgLOnq0KY8aMMdHR0fU+HrC9ppCxxx9/3AQFBRlPT0/TrVs3895779nk2KB+Gnu2EhMTr7vuuLi4m27/2n1Aw2uobP1cbRtEfDdETSzGcOdYAAAAAAAAV8ajEwAAAAAAAFwcDSIAAAAAAAAXR4MIAAAAAADAxdEgAgAAAAAAcHE0iAAAAAAAAFwcDSIAAAAAAAAXR4MIAAAAAADAxdEgAgAAAAAAcHE0iAAAAAAAAFwcDSIAAIA6eOKJJ2SxWGSxWOTh4aHQ0FANHjxYb7/9tqxWa63X88477ygwMNB+hQIAANQCDSIAAIA6GjZsmDIyMnTy5El9/vnnGjhwoJ555hkNHz5cpaWlji4PAACg1mgQAQAA1JGXl5fCwsLUtm1b9erVSy+99JLWrl2rzz//XO+8844kKSEhQXfffbeaN2+u8PBwTZo0SQUFBZKkLVu2aMKECcrNza08G2nWrFmSpOLiYj3//PNq27atmjdvrr59+2rLli2O2VEAANDk0SACAACwoQceeEDdu3fXmjVrJElubm5avHixDh48qHfffVebNm3Siy++KEmKjo7WokWL5O/vr4yMDGVkZOj555+XJE2ZMkU7duzQ6tWrtX//fj3yyCMaNmyY0tPTHbZvAACg6bIYY4yjiwAAAHA2TzzxhHJycvTpp59WW/a73/1O+/fv1/fff19t2SeffKKYmBhduHBBUvk9iKZNm6acnJzKOadPn1aHDh10+vRptWnTpnJ80KBBuueeezR37lyb7w8AAHBtzRxdAAAAQFNjjJHFYpEkbdy4UfHx8Tp8+LDy8vJUWlqqoqIiFRYWytfX97qfP3DggMrKytSpU6cq48XFxQoODrZ7/QAAwPXQIAIAALCxQ4cOqX379jp58qSGDx+uiRMn6rXXXlNQUJC2bdumJ598UlevXq2xQVRQUCB3d3elpKTI3d29yjI/P7+G2AUAAOBiaBABAADY0KZNm3TgwAE9++yzSklJkdVq1YIFC+TmVn7rx48++qjKfE9PT5WVlVUZ69mzp8rKypSdna0BAwY0WO0AAMB10SACAACoo+LiYmVmZqqsrExZWVnasGGD4uPjNXz4cI0bN05paWkqKSnRkiVL9Nvf/lbbt2/XsmXLqqwjKipKBQUFSkpKUvfu3eXr66tOnTrpscce07hx47RgwQL17NlT58+fV1JSkrp166YHH3zQQXsMAACaKp5iBgAAUEcbNmxQ69atFRUVpWHDhmnz5s1avHix1q5dK3d3d3Xv3l0JCQn685//rK5du2rlypWKj4+vso7o6GjFxMRo9OjRCgkJ0V/+8hdJUmJiosaNG6fnnntOnTt31siRI7Vr1y5FREQ4YlcBAEATx1PMAAAAAAAAXBxnEAEAAAAAALg4GkQAAAAAAAAujgYRAAAAAACAi6NBBAAAAAAA4OJoEAEAAAAAALg4GkQAAAAAAAAujgYRAAAAAACAi6NBBAAAAAAA4OJoEAEAAAAAALg4GkQAAAAAAAAujgYRAAAAAACAi/v/58dvYBN343YAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -608,17 +647,17 @@ "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" + "/Users/qingyunwu/Documents/github/autogen/autogen/agentchat/conversable_agent.py:793: UserWarning: No summary_method provided or summary_method is not supported: \n", + " cache=cache,\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}}))" + "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.5330100000000001, 'gpt-4': {'cost': 0.5330100000000001, 'prompt_tokens': 13771, 'completion_tokens': 1998, 'total_tokens': 15769}}, {'total_cost': 0.38469000000000003, 'gpt-4': {'cost': 0.38469000000000003, 'prompt_tokens': 10553, 'completion_tokens': 1135, 'total_tokens': 11688}}), human_input=None)" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } diff --git a/notebook/agentchat_function_call_currency_calculator.ipynb b/notebook/agentchat_function_call_currency_calculator.ipynb index b8934e99e091..0a73620c5561 100644 --- a/notebook/agentchat_function_call_currency_calculator.ipynb +++ b/notebook/agentchat_function_call_currency_calculator.ipynb @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "dca301a4", "metadata": {}, "outputs": [], @@ -122,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "id": "9fb85afb", "metadata": {}, "outputs": [], @@ -249,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 3, "id": "d5518947", "metadata": {}, "outputs": [ @@ -264,9 +264,9 @@ "--------------------------------------------------------------------------------\n", "\u001b[33mchatbot\u001b[0m (to user_proxy):\n", "\n", - "\u001b[32m***** Suggested tool Call (call_ubo7cKE3TKumGHkqGjQtZisy): currency_calculator *****\u001b[0m\n", + "\u001b[32m***** Suggested tool Call (call_Ak49uR4cwLWyPKs5T2gK9bMg): currency_calculator *****\u001b[0m\n", "Arguments: \n", - "{\"base_amount\":123.45,\"base_currency\":\"USD\",\"quote_currency\":\"EUR\"}\n", + "{\"base_amount\":123.45}\n", "\u001b[32m************************************************************************************\u001b[0m\n", "\n", "--------------------------------------------------------------------------------\n", @@ -276,7 +276,7 @@ "\n", "\u001b[33muser_proxy\u001b[0m (to chatbot):\n", "\n", - "\u001b[32m***** Response from calling tool \"call_ubo7cKE3TKumGHkqGjQtZisy\" *****\u001b[0m\n", + "\u001b[32m***** Response from calling tool \"call_Ak49uR4cwLWyPKs5T2gK9bMg\" *****\u001b[0m\n", "112.22727272727272 EUR\n", "\u001b[32m**********************************************************************\u001b[0m\n", "\n", @@ -302,12 +302,29 @@ "source": [ "with Cache.disk():\n", " # start the conversation\n", - " user_proxy.initiate_chat(\n", - " chatbot,\n", - " message=\"How much is 123.45 USD in EUR?\",\n", + " res = user_proxy.initiate_chat(\n", + " chatbot, message=\"How much is 123.45 USD in EUR?\", summary_method=\"reflection_with_llm\"\n", " )" ] }, + { + "cell_type": "code", + "execution_count": 4, + "id": "4b5a0edc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Chat summary: 123.45 USD is equivalent to approximately 112.23 EUR.\n" + ] + } + ], + "source": [ + "print(\"Chat summary:\", res.summary)" + ] + }, { "cell_type": "markdown", "id": "bd9d61cf", @@ -326,7 +343,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "id": "7b3d8b58", "metadata": {}, "outputs": [], @@ -432,7 +449,7 @@ "--------------------------------------------------------------------------------\n", "\u001b[33mchatbot\u001b[0m (to user_proxy):\n", "\n", - "\u001b[32m***** Suggested tool Call (call_0VuU2rATuOgYrGmcBnXzPXlh): currency_calculator *****\u001b[0m\n", + "\u001b[32m***** Suggested tool Call (call_G64JQKQBT2rI4vnuA4iz1vmE): currency_calculator *****\u001b[0m\n", "Arguments: \n", "{\"base\":{\"currency\":\"EUR\",\"amount\":112.23},\"quote_currency\":\"USD\"}\n", "\u001b[32m************************************************************************************\u001b[0m\n", @@ -444,14 +461,14 @@ "\n", "\u001b[33muser_proxy\u001b[0m (to chatbot):\n", "\n", - "\u001b[32m***** Response from calling tool \"call_0VuU2rATuOgYrGmcBnXzPXlh\" *****\u001b[0m\n", + "\u001b[32m***** Response from calling tool \"call_G64JQKQBT2rI4vnuA4iz1vmE\" *****\u001b[0m\n", "{\"currency\":\"USD\",\"amount\":123.45300000000002}\n", "\u001b[32m**********************************************************************\u001b[0m\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mchatbot\u001b[0m (to user_proxy):\n", "\n", - "112.23 Euros is approximately 123.45 US Dollars.\n", + "112.23 Euros is equivalent to approximately 123.45 US Dollars.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33muser_proxy\u001b[0m (to chatbot):\n", @@ -470,15 +487,32 @@ "source": [ "with Cache.disk():\n", " # start the conversation\n", - " user_proxy.initiate_chat(\n", - " chatbot,\n", - " message=\"How much is 112.23 Euros in US Dollars?\",\n", + " res = user_proxy.initiate_chat(\n", + " chatbot, message=\"How much is 112.23 Euros in US Dollars?\", summary_method=\"reflection_with_llm\"\n", " )" ] }, { "cell_type": "code", "execution_count": 10, + "id": "4799f60c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Chat summary: 112.23 Euros is approximately 123.45 US Dollars.\n" + ] + } + ], + "source": [ + "print(\"Chat summary:\", res.summary)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, "id": "0064d9cd", "metadata": {}, "outputs": [ @@ -493,7 +527,7 @@ "--------------------------------------------------------------------------------\n", "\u001b[33mchatbot\u001b[0m (to user_proxy):\n", "\n", - "\u001b[32m***** Suggested tool Call (call_A6lqMu7s5SyDvftTSeQTtPcj): currency_calculator *****\u001b[0m\n", + "\u001b[32m***** Suggested tool Call (call_qv2SwJHpKrG73btxNzUnYBoR): currency_calculator *****\u001b[0m\n", "Arguments: \n", "{\"base\":{\"currency\":\"USD\",\"amount\":123.45},\"quote_currency\":\"EUR\"}\n", "\u001b[32m************************************************************************************\u001b[0m\n", @@ -505,7 +539,7 @@ "\n", "\u001b[33muser_proxy\u001b[0m (to chatbot):\n", "\n", - "\u001b[32m***** Response from calling tool \"call_A6lqMu7s5SyDvftTSeQTtPcj\" *****\u001b[0m\n", + "\u001b[32m***** Response from calling tool \"call_qv2SwJHpKrG73btxNzUnYBoR\" *****\u001b[0m\n", "{\"currency\":\"EUR\",\"amount\":112.22727272727272}\n", "\u001b[32m**********************************************************************\u001b[0m\n", "\n", @@ -531,7 +565,7 @@ "source": [ "with Cache.disk():\n", " # start the conversation\n", - " user_proxy.initiate_chat(\n", + " res = user_proxy.initiate_chat(\n", " chatbot,\n", " message=\"How much is 123.45 US Dollars in Euros?\",\n", " )" @@ -539,11 +573,21 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "06137f23", + "execution_count": 15, + "id": "80b2b42c", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Chat history: [{'content': 'How much is 123.45 US Dollars in Euros?', 'role': 'assistant'}, {'tool_calls': [{'id': 'call_qv2SwJHpKrG73btxNzUnYBoR', 'function': {'arguments': '{\"base\":{\"currency\":\"USD\",\"amount\":123.45},\"quote_currency\":\"EUR\"}', 'name': 'currency_calculator'}, 'type': 'function'}], 'content': None, 'role': 'assistant'}, {'content': '{\"currency\":\"EUR\",\"amount\":112.22727272727272}', 'tool_responses': [{'tool_call_id': 'call_qv2SwJHpKrG73btxNzUnYBoR', 'role': 'tool', 'content': '{\"currency\":\"EUR\",\"amount\":112.22727272727272}'}], 'role': 'tool'}, {'content': '123.45 US Dollars is approximately 112.23 Euros.', 'role': 'user'}, {'content': '', 'role': 'assistant'}, {'content': 'TERMINATE', 'role': 'user'}]\n" + ] + } + ], + "source": [ + "print(\"Chat history:\", res.chat_history)" + ] } ], "metadata": { diff --git a/notebook/agentchat_multi_task_chats.ipynb b/notebook/agentchat_multi_task_chats.ipynb index fecf986727ca..203ce7b1618c 100644 --- a/notebook/agentchat_multi_task_chats.ipynb +++ b/notebook/agentchat_multi_task_chats.ipynb @@ -67,7 +67,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -145,25 +145,25 @@ "\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", + "NVDA (NVIDIA Corporation) stock price: $682.23\n", + "TESLA (Tesla, Inc.) stock price: $185.10\n", + "NVDA percentage change over past month: 30.56%\n", + "TESLA percentage change over past month: -23.02%\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", + "The output indicates the following:\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", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\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", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\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", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", "\n", "TERMINATE\n", "\n", @@ -174,65 +174,81 @@ "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", + "The output indicates the following:\n", + "\n", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\n", + "\n", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\n", + "\n", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", + "\n", + "\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", + "The output indicates the following:\n", + "\n", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\n", + "\n", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\n", + "\n", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", + "\n", + "\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", + "To investigate reasons for the recent performance of NVDA (NVIDIA Corporation) and TSLA (Tesla, Inc.), we should look into various factors that could affect stock prices. These factors can include earnings reports, company news, industry trends, overall market trends, analyst ratings, and economic indicators. Here is a plan to gather the necessary information:\n", + "\n", + "1. Look into the most recent earnings reports for both NVDA and TSLA.\n", + "2. Search for any major news or announcements from both companies in the past month.\n", + "3. Examine the trends in the technology sector and automobile industry which may affect these companies.\n", + "4. Review the overall stock market performance to understand if there were any broader market movements affecting stock prices.\n", + "5. Check for any changes in analyst ratings or forecasts for NVDA and TSLA.\n", + "6. Assess any relevant economic indicators that could influence market behavior, such as interest rate changes, inflation data, or employment reports.\n", + "\n", + "I will start by searching for recent news articles and announcements for both companies to see if there are any obvious triggers for the stock performance. To proceed with this, I'll need you to run code to perform a web search. Would you like me to provide you with the code to search for this information?\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mUser\u001b[0m (to Researcher):\n", + "\n", + "\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", + "\u001b[33mResearcher\u001b[0m (to User):\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", + "To gather recent news articles and announcements for both NVDA (NVIDIA Corporation) and TSLA (Tesla, Inc.), we can programmatically access a news API that provides latest news items. However, since an API key is often required and setting up such access would be beyond the scope of this interaction, we will proceed by providing guidance on how to search for this information using Python's `webbrowser` module.\n", "\n", - "To proceed, please run the following Python script to fetch the latest news headlines for NVDA and TSLA:\n", + "The `webbrowser` module in Python can be used to open the web browser and automatically navigate to a search engine query for news about the specific stocks. You will need to run the following code to search for recent news articles for NVDA and TSLA:\n", "\n", "```python\n", - "# filename: fetch_stock_news.py\n", - "import feedparser\n", + "# filename: stock_news_search.py\n", + "import webbrowser\n", + "\n", + "# Search for news related to NVDA and TSLA\n", + "nvda_news_url = \"https://www.google.com/search?q=NVIDIA+Corporation+NVDA+stock+recent+news\"\n", + "tsla_news_url = \"https://www.google.com/search?q=Tesla+Inc+TSLA+stock+recent+news\"\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", + "# Open web browser tabs with search results\n", + "webbrowser.open(nvda_news_url, new=2)\n", + "webbrowser.open(tsla_news_url, new=2)\n", + "\n", + "print(\"Searches initiated for recent news on NVDA and TSLA.\")\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", + "After running this script, review the headlines and summaries from reliable financial news sources such as Bloomberg, CNBC, Reuters, or the official stock exchange announcements to identify any significant events that could have influenced the stock performances of NVDA and TSLA.\n", + "\n", + "Please run this code on your local machine, and it should open tabs in your default web browser with the search results. Once you have the search results, you can manually scan through the news articles for any relevant information.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", @@ -241,233 +257,39 @@ "\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", + "Searches initiated for recent news on NVDA and TSLA.\n", + "\n", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to User):\n", + "\n", + "The code execution was successful, and it initiated searches for recent news on both NVDA and TSLA. You should now have browser tabs open with search results presenting recent news articles and analyses related to NVIDIA Corporation and Tesla, Inc.\n", + "\n", + "Please review the available news on those tabs to identify any significant events or announcements that could explain the recent stock performance of both companies. Look for elements such as:\n", + "\n", + "- NVDA and TSLA earnings reports and whether they beat or missed expectations.\n", + "- Announcements about product launches, partnerships, or regulatory changes.\n", + "- Comments or actions by company executives that could impact investor sentiment.\n", + "- Any major macroeconomic events or technological sector shifts.\n", + "- Impacts of global market conditions or changes in investor risk appetite.\n", "\n", + "These factors often play a crucial role in influencing the performance of a company's stock in the market. Sometimes, a company's performance can be influenced by its internal developments, while other times it may be more affected by industry-wide or economic trends.\n", "\n", + "If you were able to identify specific news events that likely affected the stock prices, you can use this information to understand the context behind the stock performance for NVDA and TSLA.\n", "\n", + "If you need further analysis or have another task in mind, please let me know. If you're finished with the investigation, we can conclude this session.\n", "\n", "--------------------------------------------------------------------------------\n", - "\u001b[33mResearcher\u001b[0m (to User):\n", + "\u001b[33mUser\u001b[0m (to Researcher):\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", + "\u001b[33mResearcher\u001b[0m (to User):\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", + "If you've finished reviewing the news and no further analysis is needed, then it appears we have completed the task of investigating possible reasons for the stock performance of NVDA and TSLA. You should now have a better understanding of what could have influenced their stock prices over the past month, based on the recent news and the data provided.\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", + "If you need assistance with another task or have more questions, feel free to ask. Otherwise, we can conclude this session.\n", "\n", "TERMINATE\n", "\n", @@ -479,8 +301,19 @@ "\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", + "The output indicates the following:\n", + "\n", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\n", + "\n", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\n", + "\n", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", + "\n", + "\n", + "The recent performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) stocks could be influenced by factors such as earnings reports, company news, industry trends, overall market trends, analyst ratings, and economic indicators. The stock price of NVDA showed a significant increase of 30.56% over the past month, while TSLA's stock price decreased by -23.02%. To investigate the reasons behind these changes, guidance was provided on using Python's `webbrowser` module to initiate a search for recent news articles about both companies, allowing for a manual review of news headlines and summaries to identify significant events that may have impacted their stock performance. If further information is needed or another query arises, assistance is available upon request.\u001b[0m\n", "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[33mUser\u001b[0m (to writer):\n", @@ -488,52 +321,59 @@ "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", + "The output indicates the following:\n", + "\n", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\n", + "\n", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\n", + "\n", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", + "\n", + "\n", + "The recent performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) stocks could be influenced by factors such as earnings reports, company news, industry trends, overall market trends, analyst ratings, and economic indicators. The stock price of NVDA showed a significant increase of 30.56% over the past month, while TSLA's stock price decreased by -23.02%. To investigate the reasons behind these changes, guidance was provided on using Python's `webbrowser` module to initiate a search for recent news articles about both companies, allowing for a manual review of news headlines and summaries to identify significant events that may have impacted their stock performance. If further information is needed or another query arises, assistance is available upon request.\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", + "# NVIDIA vs. Tesla: A Tale of Two Stocks in Turbulent Times\n", + "\n", + "Investing in the stock market can often feel like riding a rollercoaster, and recent trends in the world of technology stocks have only underscored this reality. Two giants in their respective fields, NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), have demonstrated just how dramatically the fortunes of companies can diverge. If you’ve been following these stocks or considering an investment, the past month's performance might have either raised your spirits or tested your resolve. Let's delve into the numbers and attempt to understand the story behind them.\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", + "## Current Snapshot\n", "\n", - "#### NVIDIA's Soaring Success\n", + "The latest figures have become a topic of intense discussion among investors and market analysts. As of the latest reports, the current stock price of NVIDIA stands at a buoyant $682.23, representing a strong 30.56% climb over the past month. Conversely, Tesla's share price has taken a detour in the opposite direction, falling to $185.10, a notable decrease of 23.02% over the same time frame.\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", + "### Stock Performance at a Glance:\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", + "| Company | Current Stock Price | 1-Month Percentage Change |\n", + "|---------|---------------------|---------------------------|\n", + "| NVIDIA (NVDA) | $682.23 | +30.56% |\n", + "| Tesla (TSLA) | $185.10 | -23.02% |\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", + "These figures provide an immediate sense of the contrasting trajectories of these two market players. But what could be driving such divergent paths? Let’s peel back the layers and consider some potential factors.\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", + "## Unpacking the Performance\n", "\n", - "#### Tesla's Troubled Times\n", + "The stark difference in the fortunes of NVDA and TSLA could be due to a myriad of factors including, but not limited to, earnings reports, new product announcements, shifts in leadership, or a change in investor sentiment. Earnings reports, in particular, can dramatically affect stock prices as they provide a snapshot of a company's financial health and future outlook. Could NVIDIA be basking in the glow of a positive earnings surprise? Or perhaps Tesla has faced headwinds from global supply chain issues or regulatory challenges?\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", + "In the dynamic tech sector, news coverage is crucial for understanding these shifts. NVIDIA's bold advances in gaming, cloud computing, AI, and data centers might receive favorable analysts' outlooks, leading to higher investor confidence in the stock. Meanwhile, Tesla's stock could be reacting to any number of factors, from production numbers to the ever-volatile electric vehicle market and competition.\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", + "To gather more insights, we could easily turn to a Python script utilizing the `webbrowser` module, prompting it to open various news sources unpacking recent events concerning both companies. By reviewing news headlines and summaries, we can piece together the intricate puzzle of market movements and what may have driven investors to display such contrasting levels of confidence.\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", + "## What Lies Ahead\n", "\n", - "#### The Investors' Crossroad\n", + "Despite the chasm in their recent stock performances, both NVIDIA and Tesla remain heavily scrutinized by the market. Investors keen on technology and growth will certainly keep an eye on these two stocks as they consider their potential for rebound, growth, or even further decline.\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", + "As we look to the horizon, it’s worth remembering that stock prices fluctuate constantly, and today's snapshot is just a frame in the larger motion picture of the financial markets. While historical performance may give us clues, it is not a definitive guide to future outcomes. So, whether you’re captivated by NVIDIA’s ascent or are curious about Tesla's resilience in the face of decline, diligence and a keen eye on emerging trends will be your most reliable allies.\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", + "Investing is a nuanced dance with risk and reward – no one knows this better than shareholders of NVDA and TSLA. As you navigate your next move, stay informed and vigilant, considering not just the figures above but also the complex tapestry of information that gives context to these numbers. The dance floor remains open, and the music is still playing. Will you lead, follow, or step aside to watch a little longer?\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", + "Remember, stock prices are subject to change throughout the trading day, and the percentage change is based on the most recent closing prices. Always ensure you have the latest information before making any investment decisions. \n", "\n", - "Stay tuned, investors – the next act is bound to be just as enthralling.\n", + "And as always, stay savvy, stay informed, and keep your eye on the market horizons.\n", "\n", "TERMINATE\n", "\n", @@ -579,7 +419,7 @@ " \"message\": financial_tasks[0],\n", " \"clear_history\": True,\n", " \"silent\": False,\n", - " \"summary_method\": \"reflection_with_llm\",\n", + " \"summary_method\": \"last_msg\",\n", " },\n", " {\n", " \"recipient\": research_assistant,\n", @@ -590,7 +430,6 @@ " \"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", ")" @@ -611,7 +450,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -619,64 +458,71 @@ "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", + "The output indicates the following:\n", + "\n", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\n", + "\n", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\n", + "\n", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", + "\n", + "\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", + "Conversation cost: ({'total_cost': 0.08900999999999999, 'gpt-4': {'cost': 0.08900999999999999, 'prompt_tokens': 1597, 'completion_tokens': 685, 'total_tokens': 2282}}, {'total_cost': 0})\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", + "The recent performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) stocks could be influenced by factors such as earnings reports, company news, industry trends, overall market trends, analyst ratings, and economic indicators. The stock price of NVDA showed a significant increase of 30.56% over the past month, while TSLA's stock price decreased by -23.02%. To investigate the reasons behind these changes, guidance was provided on using Python's `webbrowser` module to initiate a search for recent news articles about both companies, allowing for a manual review of news headlines and summaries to identify significant events that may have impacted their stock performance. If further information is needed or another query arises, assistance is available upon request.\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", + "Conversation cost: ({'total_cost': 0.23840999999999998, 'gpt-4': {'cost': 0.23840999999999998, 'prompt_tokens': 5683, 'completion_tokens': 1132, 'total_tokens': 6815}}, {'total_cost': 0.23840999999999998, 'gpt-4': {'cost': 0.23840999999999998, 'prompt_tokens': 5683, 'completion_tokens': 1132, 'total_tokens': 6815}})\n", "\n", "\n", "\n", "Conversation summary with writer:\n", - "### The Tale of Two Tech Giants: NVIDIA and Tesla's Dramatic Stock Movements\n", + "# NVIDIA vs. Tesla: A Tale of Two Stocks in Turbulent Times\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", + "Investing in the stock market can often feel like riding a rollercoaster, and recent trends in the world of technology stocks have only underscored this reality. Two giants in their respective fields, NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), have demonstrated just how dramatically the fortunes of companies can diverge. If you’ve been following these stocks or considering an investment, the past month's performance might have either raised your spirits or tested your resolve. Let's delve into the numbers and attempt to understand the story behind them.\n", "\n", - "#### NVIDIA's Soaring Success\n", + "## Current Snapshot\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", + "The latest figures have become a topic of intense discussion among investors and market analysts. As of the latest reports, the current stock price of NVIDIA stands at a buoyant $682.23, representing a strong 30.56% climb over the past month. Conversely, Tesla's share price has taken a detour in the opposite direction, falling to $185.10, a notable decrease of 23.02% over the same time frame.\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", + "### Stock Performance at a Glance:\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", + "| Company | Current Stock Price | 1-Month Percentage Change |\n", + "|---------|---------------------|---------------------------|\n", + "| NVIDIA (NVDA) | $682.23 | +30.56% |\n", + "| Tesla (TSLA) | $185.10 | -23.02% |\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", + "These figures provide an immediate sense of the contrasting trajectories of these two market players. But what could be driving such divergent paths? Let’s peel back the layers and consider some potential factors.\n", "\n", - "#### Tesla's Troubled Times\n", + "## Unpacking the Performance\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", + "The stark difference in the fortunes of NVDA and TSLA could be due to a myriad of factors including, but not limited to, earnings reports, new product announcements, shifts in leadership, or a change in investor sentiment. Earnings reports, in particular, can dramatically affect stock prices as they provide a snapshot of a company's financial health and future outlook. Could NVIDIA be basking in the glow of a positive earnings surprise? Or perhaps Tesla has faced headwinds from global supply chain issues or regulatory challenges?\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", + "In the dynamic tech sector, news coverage is crucial for understanding these shifts. NVIDIA's bold advances in gaming, cloud computing, AI, and data centers might receive favorable analysts' outlooks, leading to higher investor confidence in the stock. Meanwhile, Tesla's stock could be reacting to any number of factors, from production numbers to the ever-volatile electric vehicle market and competition.\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", + "To gather more insights, we could easily turn to a Python script utilizing the `webbrowser` module, prompting it to open various news sources unpacking recent events concerning both companies. By reviewing news headlines and summaries, we can piece together the intricate puzzle of market movements and what may have driven investors to display such contrasting levels of confidence.\n", "\n", - "#### The Investors' Crossroad\n", + "## What Lies Ahead\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", + "Despite the chasm in their recent stock performances, both NVIDIA and Tesla remain heavily scrutinized by the market. Investors keen on technology and growth will certainly keep an eye on these two stocks as they consider their potential for rebound, growth, or even further decline.\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", + "As we look to the horizon, it’s worth remembering that stock prices fluctuate constantly, and today's snapshot is just a frame in the larger motion picture of the financial markets. While historical performance may give us clues, it is not a definitive guide to future outcomes. So, whether you’re captivated by NVIDIA’s ascent or are curious about Tesla's resilience in the face of decline, diligence and a keen eye on emerging trends will be your most reliable allies.\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", + "Investing is a nuanced dance with risk and reward – no one knows this better than shareholders of NVDA and TSLA. As you navigate your next move, stay informed and vigilant, considering not just the figures above but also the complex tapestry of information that gives context to these numbers. The dance floor remains open, and the music is still playing. Will you lead, follow, or step aside to watch a little longer?\n", "\n", - "Stay tuned, investors – the next act is bound to be just as enthralling.\n", + "Remember, stock prices are subject to change throughout the trading day, and the percentage change is based on the most recent closing prices. Always ensure you have the latest information before making any investment decisions. \n", + "\n", + "And as always, stay savvy, stay informed, and keep your eye on the market horizons.\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", + "Conversation cost: ({'total_cost': 0.0648, 'gpt-4': {'cost': 0.0648, 'prompt_tokens': 400, 'completion_tokens': 880, 'total_tokens': 1280}}, {'total_cost': 0.0648, 'gpt-4': {'cost': 0.0648, 'prompt_tokens': 400, 'completion_tokens': 880, 'total_tokens': 1280}})\n", "\n", "\n", "\n" @@ -705,7 +551,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -787,71 +633,72 @@ "\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", + "NVDA (NVIDIA Corporation) stock price: $682.23\n", + "TESLA (Tesla, Inc.) stock price: $185.10\n", + "NVDA percentage change over past month: 30.56%\n", + "TESLA percentage change over past month: -23.02%\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", + "The output indicates the following:\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", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\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", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\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", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", "\n", "TERMINATE\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", "\n", - "What about Microsoft?\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", + "To obtain information regarding Microsoft's stock, which is traded under the ticker symbol MSFT, I will provide a Python script similar to the previous one. This script will use the `yfinance` library to fetch the current stock price of Microsoft and its performance over the past month in terms of percentage change.\n", "\n", - "Execute the following Python code:\n", + "The script will be as follows:\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", + "# Function to get current stock price\n", + "def get_stock_price(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", + " return todays_data['Close'][0]\n", "\n", - " # Calculate the percentage change over the past month\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", - " 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", + "# Getting the current price and performance for MSFT (Microsoft)\n", + "msft_price = get_stock_price('MSFT')\n", + "msft_change = get_percentage_change('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", + "print(f\"Microsoft 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", + "Please run the script and provide me with the output. Then, I'll be able to verify the information.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", @@ -864,19 +711,21 @@ "\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", + "Microsoft (MSFT) stock price: $405.49\n", + "Microsoft percentage change over past month: 8.22%\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", + "The output indicates the following for Microsoft Corporation (MSFT):\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", + "- The current stock price of Microsoft (MSFT) is $405.49.\n", + "- The percentage change in the stock price of MSFT over the past month is an increase of 8.22%.\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", + "This shows that Microsoft has had a positive performance with an increase in stock price over the past month.\n", + "\n", + "Please remember that the stock market is volatile, and prices can fluctuate within seconds during trading hours. The provided figures are reflective of the stock's performance up to the time the script was executed.\n", "\n", "TERMINATE\n", "\n", @@ -889,76 +738,73 @@ "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", + "The current stock prices and their respective percentage change over the past month are 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", + "- NVIDIA Corporation (NVDA): Stock price is $682.23 with a 30.56% increase.\n", + "- Tesla, Inc. (TSLA): Stock price is $185.10 with a 23.02% decrease.\n", + "- Microsoft Corporation (MSFT): Stock price is $405.49 with an 8.22% 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", + "The stock prices are based on the most recent trading data available at the time of the query. Stock prices are subject to fluctuate 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", + "The current stock prices and their respective percentage change over the past month are 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", + "- NVIDIA Corporation (NVDA): Stock price is $682.23 with a 30.56% increase.\n", + "- Tesla, Inc. (TSLA): Stock price is $185.10 with a 23.02% decrease.\n", + "- Microsoft Corporation (MSFT): Stock price is $405.49 with an 8.22% 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 stock prices are based on the most recent trading data available at the time of the query. Stock prices are subject to fluctuate 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", + "To investigate the possible reasons for the performance of each stock (NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT)), we would usually look at several different types of information including:\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", + "1. Recent news or press releases by these companies or about these sectors.\n", + "2. Financial reports and earnings updates.\n", + "3. Analyst ratings and stock market analyst commentaries.\n", + "4. Broader market trends, and industry-specific trends.\n", + "5. Any major geopolitical events or economic policy changes that might affect these companies.\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", + "The task would first involve collecting recent news articles, financial data, and expert analyses related to each company. I'll start by helping you fetch the recent news articles about each company to see if there are any recent developments that might have influenced their stock performance.\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", + "Please execute the following Python code to retrieve the latest news headlines for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) using Google News RSS feed:\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", + "# filename: fetch_stock_news.py\n", + "import feedparser\n", + "import requests\n", + "\n", + "def fetch_news(rss_url):\n", + " try:\n", + " response = requests.get(rss_url)\n", + " response.raise_for_status()\n", + " feed = feedparser.parse(response.content)\n", + " print(f\"Top headlines for {feed.feed.title}:\\n\")\n", + " for entry in feed.entries[:5]: # Limit to top 5 headlines\n", + " print(f\"Title: {entry.title}\")\n", + " print(f\"Link: {entry.link}\\n\")\n", + " except requests.exceptions.HTTPError as err:\n", + " print(f\"HTTP error occurred: {err}\")\n", + " except Exception as e:\n", + " print(f\"An error occurred: {e}\")\n", + "\n", + "# URLs to Google News RSS for each company\n", + "rss_urls = {\n", + " 'NVDA': 'https://news.google.com/rss/search?q=NVIDIA+Corporation+stock&hl=en-US&gl=US&ceid=US:en',\n", + " 'TSLA': 'https://news.google.com/rss/search?q=Tesla+Inc+stock&hl=en-US&gl=US&ceid=US:en',\n", + " 'MSFT': 'https://news.google.com/rss/search?q=Microsoft+Corporation+stock&hl=en-US&gl=US&ceid=US:en'\n", + "}\n", + "\n", + "for company, url in rss_urls.items():\n", + " fetch_news(url)\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", + "This script will print out the top 5 recent news headlines from Google News RSS feeds for each company. After checking the news articles, we can start to piece together a picture of what might be driving the stock performances. Remember that the news links output by the script can be visited for more detailed reading on each headline.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", @@ -971,37 +817,73 @@ "\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", + "Top headlines for \"NVIDIA Corporation stock\" - Google News:\n", "\n", + "Title: Nvidia (NVDA) Stock Drops Despite Market Gains: Important Facts to Note - Yahoo Finance\n", + "Link: https://news.google.com/rss/articles/CBMiTWh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy9udmlkaWEtbnZkYS1zdG9jay1kcm9wcy1kZXNwaXRlLTIyNDUxNzMyNC5odG1s0gEA?oc=5\n", "\n", - "--------------------------------------------------------------------------------\n", - "\u001b[33mResearcher\u001b[0m (to User):\n", + "Title: Nvidia’s stock could ride to $800, says Goldman Sachs. Here’s its path. - MarketWatch\n", + "Link: https://news.google.com/rss/articles/CBMibGh0dHBzOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9zdG9yeS9udmlkaWFzLXN0b2NrLWNvdWxkLXJpZGUtdG8tODAwLXNheXMtZ29sZG1hbi1zYWNocy1oZXJlcy1pdHMtcGF0aC1lMmE4YWRjM9IBcGh0dHBzOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9hbXAvc3RvcnkvbnZpZGlhcy1zdG9jay1jb3VsZC1yaWRlLXRvLTgwMC1zYXlzLWdvbGRtYW4tc2FjaHMtaGVyZXMtaXRzLXBhdGgtZTJhOGFkYzM?oc=5\n", + "\n", + "Title: Nvidia: Near All-Time Highs, Yet Reasonably Valued With Widening AI Tailwinds (NVDA) - Seeking Alpha\n", + "Link: https://news.google.com/rss/articles/CBMidGh0dHBzOi8vc2Vla2luZ2FscGhhLmNvbS9hcnRpY2xlLzQ2Njc4ODEtbnZpZGlhLW5lYXItYWxsLXRpbWUtaGlnaHMteWV0LXJlYXNvbmFibHktdmFsdWVkLXdpdGgtd2lkZW5pbmctYWktdGFpbHdpbmRz0gEA?oc=5\n", + "\n", + "Title: Nvidia Stock Headed To $800, Goldman Sachs Calls It 'Gold Standard' - Microsoft (NASDAQ:MSFT), Meta Platf - Benzinga\n", + "Link: https://news.google.com/rss/articles/CBMimQFodHRwczovL3d3dy5iZW56aW5nYS5jb20vYW5hbHlzdC1yYXRpbmdzL2FuYWx5c3QtY29sb3IvMjQvMDIvMzY5MzM1NDgvbnZpZGlhLXN0b2NrLW9uLXBhdGgtdG8tODAwLWdvbGRtYW4tc2FjaHMtc2F5cy1pbmR1c3RyeS1nb2xkLXN0YW5kYXJkLWZvci10aGUtZnV0dXLSAS1odHRwczovL3d3dy5iZW56aW5nYS5jb20vYW1wL2NvbnRlbnQvMzY5MzM1NDg?oc=5\n", + "\n", + "Title: Trending tickers: Nvidia, Alibaba, BP, Coinbase - Yahoo Finance UK\n", + "Link: https://news.google.com/rss/articles/CBMiXGh0dHBzOi8vdWsuZmluYW5jZS55YWhvby5jb20vbmV3cy9udmlkaWEtYWxpYmFiYS1icC1jb2luYmFzZS10cmVuZGluZy10aWNrZXJzLTEwMjY0ODgwNC5odG1s0gEA?oc=5\n", + "\n", + "Top headlines for \"Tesla Inc stock\" - Google News:\n", + "\n", + "Title: Tesla Stock Is Down Again. Downgrades and Rates Aren’t Helping. - Barron's\n", + "Link: https://news.google.com/rss/articles/CBMiQWh0dHBzOi8vd3d3LmJhcnJvbnMuY29tL2FydGljbGVzL3Rlc2xhLXN0b2NrLXByaWNlLXRvZGF5LTJhMTM1NjAx0gEA?oc=5\n", + "\n", + "Title: Tesla’s stock is downgraded, more for Elon Musk’s issues than ‘tough’ EV demand - MarketWatch\n", + "Link: https://news.google.com/rss/articles/CBMidWh0dHBzOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9zdG9yeS90ZXNsYXMtc3RvY2staXMtZG93bmdyYWRlZC1tb3JlLWZvci1lbG9uLW11c2tzLWlzc3Vlcy10aGFuLXRvdWdoLWV2LWRlbWFuZC1kZjU1MDA1ZdIBeWh0dHBzOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9hbXAvc3RvcnkvdGVzbGFzLXN0b2NrLWlzLWRvd25ncmFkZWQtbW9yZS1mb3ItZWxvbi1tdXNrcy1pc3N1ZXMtdGhhbi10b3VnaC1ldi1kZW1hbmQtZGY1NTAwNWU?oc=5\n", + "\n", + "Title: Tesla Rebound Bets Have Option Traders Turning to Leveraged ETF - Bloomberg\n", + "Link: https://news.google.com/rss/articles/CBMicWh0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTAyLTA1L29wdGlvbnMtdHJhZGVycy1iZXR0aW5nLW9uLXRlc2xhLXJlYm91bmQtdHVybi10by1sZXZlcmFnZWQtZXRm0gEA?oc=5\n", + "\n", + "Title: Tesla stock drops as investors scrutinize board’s close personal ties to Elon Musk - CNN\n", + "Link: https://news.google.com/rss/articles/CBMiTmh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wMi8wNS9idXNpbmVzcy90ZXNsYS1zdG9jay1lbG9uLW11c2stYm9hcmQvaW5kZXguaHRtbNIBUmh0dHBzOi8vYW1wLmNubi5jb20vY25uLzIwMjQvMDIvMDUvYnVzaW5lc3MvdGVzbGEtc3RvY2stZWxvbi1tdXNrLWJvYXJkL2luZGV4Lmh0bWw?oc=5\n", "\n", - "The output from the Python script provides the following insights:\n", + "Title: Tesla Stock: 13-Point Countdown Supports My Buy Upgrade (NASDAQ:TSLA) - Seeking Alpha\n", + "Link: https://news.google.com/rss/articles/CBMiX2h0dHBzOi8vc2Vla2luZ2FscGhhLmNvbS9hcnRpY2xlLzQ2Njc1NjQtdGVzbGEtc3RvY2stMTMtcG9pbnQtY291bnRkb3duLXN1cHBvcnRzLW15LWJ1eS11cGdyYWRl0gEA?oc=5\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", + "Top headlines for \"Microsoft Corporation stock\" - Google News:\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", + "Title: How To Earn $500 Per Month From Microsoft Stock - Yahoo Finance\n", + "Link: https://news.google.com/rss/articles/CBMiSmh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy9lYXJuLTUwMC1wZXItbW9udGgtbWljcm9zb2Z0LTE4MjYyMzE0NS5odG1s0gEA?oc=5\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", + "Title: Microsoft Corp. stock underperforms Tuesday when compared to competitors - MarketWatch\n", + "Link: https://news.google.com/rss/articles/CBMigwFodHRwczovL3d3dy5tYXJrZXR3YXRjaC5jb20vZGF0YS1uZXdzL21pY3Jvc29mdC1jb3JwLXN0b2NrLXVuZGVycGVyZm9ybXMtdHVlc2RheS13aGVuLWNvbXBhcmVkLXRvLWNvbXBldGl0b3JzLTYyZWI3YTRhLTc2MTgyZDgyNmM1MtIBhwFodHRwczovL3d3dy5tYXJrZXR3YXRjaC5jb20vYW1wL2RhdGEtbmV3cy9taWNyb3NvZnQtY29ycC1zdG9jay11bmRlcnBlcmZvcm1zLXR1ZXNkYXktd2hlbi1jb21wYXJlZC10by1jb21wZXRpdG9ycy02MmViN2E0YS03NjE4MmQ4MjZjNTI?oc=5\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", + "Title: Microsoft Corp. stock underperforms Tuesday when compared to competitors - msnNOW\n", + "Link: https://news.google.com/rss/articles/CBMie2h0dHBzOi8vd3d3Lm1zbi5jb20vZW4tdXMvbW9uZXkvbWFya2V0cy9taWNyb3NvZnQtY29ycC1zdG9jay11bmRlcnBlcmZvcm1zLXR1ZXNkYXktd2hlbi1jb21wYXJlZC10by1jb21wZXRpdG9ycy9hci1CQjFoU0tqSdIBAA?oc=5\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", + "Title: Is Microsoft (MSFT) Stock Outpacing Its Computer and Technology Peers This Year? - Yahoo Finance\n", + "Link: https://news.google.com/rss/articles/CBMiVWh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy9taWNyb3NvZnQtbXNmdC1zdG9jay1vdXRwYWNpbmctY29tcHV0ZXItMTQ0MDA5MzMyLmh0bWzSAQA?oc=5\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", + "Title: Those who invested in Microsoft (NASDAQ:MSFT) five years ago are up 310% - Yahoo Finance\n", + "Link: https://news.google.com/rss/articles/CBMiUmh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy90aG9zZS1pbnZlc3RlZC1taWNyb3NvZnQtbmFzZGFxLW1zZnQtMTEwMDE1MzUyLmh0bWzSAQA?oc=5\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", + "\n", + "--------------------------------------------------------------------------------\n", + "\u001b[33mResearcher\u001b[0m (to User):\n", + "\n", + "Based on the headlines retrieved, here is a potential analysis of the stock performances for each company:\n", + "\n", + "1. **NVIDIA Corporation (NVDA)**: The headlines suggest that NVIDIA’s stock has experienced a drop despite overall market gains, which emphasizes the volatility of the stock. However, there is also mention of positive outlooks from financial institutions like Goldman Sachs anticipating an increase in NVIDIA’s stock value, possibly due to its positioning in the marketplace as the 'Gold Standard' and growing AI tailwinds. This mixed sentiment may contribute to the observed increase over the past month, reflecting investor confidence in the long-term value of the company, particularly in the context of AI advancements.\n", + "\n", + "2. **Tesla, Inc. (TSLA)**: Tesla's stock seems to be under pressure from several factors. Analyst downgrades and concerns over interest rates are affecting the stock. Furthermore, headlines suggest that Elon Musk's personal issues might be influencing investor sentiment. Issues with the company's board and its close ties to Musk also appear to be a possible reason for the stock's decrease. Despite these challenges, some investors seem to be betting on a rebound, as indicated by options trading in leveraged ETFs.\n", + "\n", + "3. **Microsoft Corporation (MSFT)**: The news for Microsoft indicates a more mixed or stable performance. There is mention of underperformance compared to competitors on a particular day, but longer-term investors have seen substantial gains over the past five years. Additionally, there is a suggestion of how investors might generate income from Microsoft stock, implying investor interest in holding the stock for passive income. The overall increase over the past month may reflect steady confidence in Microsoft's market position and its performance relative to peers within the technology sector.\n", + "\n", + "It's important to note that stock performance can be influenced by a wide array of factors, including earnings reports, industry trends, and macroeconomic indicators, which are not fully captured by the headlines. For more comprehensive insight, investors often review detailed financial analysis reports, earnings results, and market research about each company and their respective industries, in addition to staying updated with global economic conditions and trends.\n", + "\n", + "For further investigation, one could look into each company's recent quarterly earnings reports, check for any significant changes in their financial statements, or announcements that may have impacted investor sentiment. Additionally, it's advisable to consider broader market trends, such as shifts in technology, automotive, or AI sectors for these companies, along with policies and regulations that could affect their business.\n", "\n", "TERMINATE\n", "\n", @@ -1014,57 +896,61 @@ "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", + "The current stock prices and their respective percentage change over the past month are 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", + "- NVIDIA Corporation (NVDA): Stock price is $682.23 with a 30.56% increase.\n", + "- Tesla, Inc. (TSLA): Stock price is $185.10 with a 23.02% decrease.\n", + "- Microsoft Corporation (MSFT): Stock price is $405.49 with an 8.22% 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", + "The stock prices are based on the most recent trading data available at the time of the query. Stock prices are subject to fluctuate during trading hours.\n", + "The performance of NVIDIA, Tesla, and Microsoft's stocks can be attributed to several factors based on recent headlines. NVIDIA has seen a significant increase in stock price, which could be related to positive analyst projections and its standing in AI developments despite some market volatility. Tesla's stock has decreased, potentially due to analyst downgrades, heightened scrutiny of Elon Musk's personal issues, and concerns over the company's board governance. Microsoft's stock has shown a moderate increase, with long-term gains for investors and discussions around income generation from the stock, despite some underperformance compared to competitors on specific days. Overall stock performance is likely influenced by a mix of company-specific news, financial reports, industry trends, and broader economic conditions.\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", + "The current stock prices and their respective percentage change over the past month are 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", + "- NVIDIA Corporation (NVDA): Stock price is $682.23 with a 30.56% increase.\n", + "- Tesla, Inc. (TSLA): Stock price is $185.10 with a 23.02% decrease.\n", + "- Microsoft Corporation (MSFT): Stock price is $405.49 with an 8.22% 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", + "The stock prices are based on the most recent trading data available at the time of the query. Stock prices are subject to fluctuate during trading hours.\n", + "The performance of NVIDIA, Tesla, and Microsoft's stocks can be attributed to several factors based on recent headlines. NVIDIA has seen a significant increase in stock price, which could be related to positive analyst projections and its standing in AI developments despite some market volatility. Tesla's stock has decreased, potentially due to analyst downgrades, heightened scrutiny of Elon Musk's personal issues, and concerns over the company's board governance. Microsoft's stock has shown a moderate increase, with long-term gains for investors and discussions around income generation from the stock, despite some underperformance compared to competitors on specific days. Overall stock performance is likely influenced by a mix of company-specific news, financial reports, industry trends, and broader economic conditions.\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", + "### The Stock Market Saga: NVIDIA Soars, Tesla Sputers, and Microsoft Steadily Climbs\n", + "\n", + "In the grand tapestry of the stock market, each thread tells a story. Some offer tales of meteoric ascents, others of vertiginous plummets, and then there are those that speak of steadfast progress amid tumultuous winds. Today, let's unravel the recent stories of three tech titans – NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) – all of whom reflect the dynamic nature of the stock market and the different factors that can influence investor sentiment and share price.\n", + "\n", + "**NVIDIA's Electrifying Ascent**\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", + "Leading the charge, we have NVIDIA, with a stock price sitting regally at $682.23, reflecting a whopping 30.56% climb over the past month. What's fueling this jet-propelled ascension? A glance at the headlines suggests a host of factors at play. Positive analyst projections have painted a rosy hue, suggesting that investors are betting big on the company's prospects. A key player in artificial intelligence and deep learning, NVIDIA's chips are the silent workhorses powering revolutionary tech from data centers to autonomous vehicles.\n", "\n", - "**Into the Stratosphere: NVIDIA's Skyward Surge**\n", + "Despite the capricious whims of market volatility, NVIDIA's steadfast dedication to innovation and dominance in AI developments has shone through, and the market seems to be rewarding them for it. But will this growth trajectory continue to point skyward? Only time will tell.\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", + "**Tesla's Bumpy Ride**\n", "\n", - "**A Volatile Journey: Tesla's Roller Coaster**\n", + "Meanwhile, at Tesla, the electric car behemoth has hit a bit of a rough patch, with shares dipping to $185.10, marking a 23.02% decrease from the previous month. What's put the brakes on Tesla's stock? The company, synonymous not just with electric vehicles but also with its enigmatic CEO, has driven into some turbulence. Analyst downgrades have undoubtedly cast a shadow over its valuation.\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", + "In the driver’s seat, Elon Musk's personal pursuits, including his adventurous foray into social media platforms, might have created more waves of uncertainty, leading investors to question the management's focus. Furthermore, concerns over Tesla's board governance have risen, potentially eroding investor confidence in oversight and long-term strategy. In the stock market race, Tesla has taken a pit stop, and investors are eagerly watching to see if they'll emerge with renewed vigor or if there's more roadwork ahead.\n", "\n", - "**The Stability of an Empire: Microsoft's Measured Gains**\n", + "**Microsoft's Measured Climb**\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", + "Amidst this spectrum, we find Microsoft, a legacy tech powerhouse that's been threading a path of modest yet noticeable growth. The stock price stands at a comfortable $405.49, marking an uplift of 8.22%. While this may not seem as heady as NVIDIA's leap or as striking as Tesla's stumble, Microsoft's rise is nonetheless significant.\n", "\n", - "**Between the Lines: Reading the Market**\n", + "Investors relish stability, and Microsoft has provided just that, with long-term gains that often spell out rewarding investments. Talks around income generation buzz in the hallowed halls of market analysts, though, on some days, the stock underperforms when pitted against its feistier competitors. Still, its resilience amid market conditions and the ability to steadily add value over time have likely contributed to its overall favorable position.\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", + "**The Stock Market's Woven Narrative**\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", + "As these tech giants trace their financial storylines, their performance is embroidered into the broader fabric of economic conditions, industry trends, and corporate news. Every surge, dip, and steady climb is a testament to the market's ebb and flow where fortunes can change in the blink of an eye.\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", + "Investors looking to read between the lines would do well to heed the multitude of factors at play. NVIDIA's sprint might inspire dreams of quick gains, whereas Microsoft's gradual ascent calls to mind the virtues of patience. And with Tesla, the narrative has become a cautionary tale reciting the importance of governance and leadership focus.\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", + "As the market continues to evolve, the stories of NVIDIA, Tesla, and Microsoft will undoubtedly develop further, providing investors with more chapters to scrutinize, absorb, and muse upon. After all, in the stock market's ever-turning pages, today's valuations are but a paragraph in an epic tome of financial endeavor.\n", "\n", "TERMINATE\n", "\n", @@ -1072,14 +958,6 @@ "\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": [ @@ -1133,32 +1011,62 @@ "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", + "The current stock prices and their respective percentage change over the past month are 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", + "- NVIDIA Corporation (NVDA): Stock price is $682.23 with a 30.56% increase.\n", + "- Tesla, Inc. (TSLA): Stock price is $185.10 with a 23.02% decrease.\n", + "- Microsoft Corporation (MSFT): Stock price is $405.49 with an 8.22% 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", + "The stock prices are based on the most recent trading data available at the time of the query. Stock prices are subject to fluctuate 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: $682.23\\nTESLA (Tesla, Inc.) stock price: $185.10\\nNVDA percentage change over past month: 30.56%\\nTESLA percentage change over past month: -23.02%\\n', 'role': 'assistant'}, {'content': 'The output indicates the following:\\n\\n- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\\n- The stock price of Tesla, Inc. (TSLA) is $185.10.\\n- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\\n- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\\n\\nThese figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\\n\\nPlease note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\\n\\nTERMINATE', 'role': 'user'}, {'content': 'What about Microsoft', 'role': 'assistant'}, {'content': 'To obtain information regarding Microsoft\\'s stock, which is traded under the ticker symbol MSFT, I will provide a Python script similar to the previous one. This script will use the `yfinance` library to fetch the current stock price of Microsoft and its performance over the past month in terms of percentage change.\\n\\nThe script will be as follows:\\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\\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 MSFT (Microsoft)\\nmsft_price = get_stock_price(\\'MSFT\\')\\nmsft_change = get_percentage_change(\\'MSFT\\')\\n\\n# Output the results\\nprint(f\"Microsoft (MSFT) stock price: ${msft_price:.2f}\")\\nprint(f\"Microsoft percentage change over past month: {msft_change:.2f}%\")\\n```\\n\\nPlease run the script and provide me with the output. Then, I\\'ll be able to verify the information.', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nMicrosoft (MSFT) stock price: $405.49\\nMicrosoft percentage change over past month: 8.22%\\n', 'role': 'assistant'}, {'content': \"The output indicates the following for Microsoft Corporation (MSFT):\\n\\n- The current stock price of Microsoft (MSFT) is $405.49.\\n- The percentage change in the stock price of MSFT over the past month is an increase of 8.22%.\\n\\nThis shows that Microsoft has had a positive performance with an increase in stock price over the past month.\\n\\nPlease remember that the stock market is volatile, and prices can fluctuate within seconds during trading hours. The provided figures are reflective of the stock's performance up to the time the script was executed.\\n\\nTERMINATE\", 'role': 'user'}]\n", + "Human input in the middle: ['', 'What about Microsoft', '', '']\n", + "Conversation cost: ({'total_cost': 0.34214999999999995, 'gpt-4': {'cost': 0.34214999999999995, 'prompt_tokens': 7489, 'completion_tokens': 1958, 'total_tokens': 9447}}, {'total_cost': 0.16413, 'gpt-4': {'cost': 0.16413, 'prompt_tokens': 4295, 'completion_tokens': 588, 'total_tokens': 4883}})\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", + "The performance of NVIDIA, Tesla, and Microsoft's stocks can be attributed to several factors based on recent headlines. NVIDIA has seen a significant increase in stock price, which could be related to positive analyst projections and its standing in AI developments despite some market volatility. Tesla's stock has decreased, potentially due to analyst downgrades, heightened scrutiny of Elon Musk's personal issues, and concerns over the company's board governance. Microsoft's stock has shown a moderate increase, with long-term gains for investors and discussions around income generation from the stock, despite some underperformance compared to competitors on specific days. Overall stock performance is likely influenced by a mix of company-specific news, financial reports, industry trends, and broader economic conditions.\n", + "All chat history: [{'content': 'Investigate possible reasons of the stock performance.\\nContext: \\nThe current stock prices and their respective percentage change over the past month are as follows:\\n\\n- NVIDIA Corporation (NVDA): Stock price is $682.23 with a 30.56% increase.\\n- Tesla, Inc. (TSLA): Stock price is $185.10 with a 23.02% decrease.\\n- Microsoft Corporation (MSFT): Stock price is $405.49 with an 8.22% increase.\\n\\nThe stock prices are based on the most recent trading data available at the time of the query. Stock prices are subject to fluctuate during trading hours.', 'role': 'assistant'}, {'content': 'To investigate the possible reasons for the performance of each stock (NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT)), we would usually look at several different types of information including:\\n\\n1. Recent news or press releases by these companies or about these sectors.\\n2. Financial reports and earnings updates.\\n3. Analyst ratings and stock market analyst commentaries.\\n4. Broader market trends, and industry-specific trends.\\n5. Any major geopolitical events or economic policy changes that might affect these companies.\\n\\nThe task would first involve collecting recent news articles, financial data, and expert analyses related to each company. I\\'ll start by helping you fetch the recent news articles about each company to see if there are any recent developments that might have influenced their stock performance.\\n\\nPlease execute the following Python code to retrieve the latest news headlines for NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) using Google News RSS feed:\\n\\n```python\\n# filename: fetch_stock_news.py\\nimport feedparser\\nimport requests\\n\\ndef fetch_news(rss_url):\\n try:\\n response = requests.get(rss_url)\\n response.raise_for_status()\\n feed = feedparser.parse(response.content)\\n print(f\"Top headlines for {feed.feed.title}:\\\\n\")\\n for entry in feed.entries[:5]: # Limit to top 5 headlines\\n print(f\"Title: {entry.title}\")\\n print(f\"Link: {entry.link}\\\\n\")\\n except requests.exceptions.HTTPError as err:\\n print(f\"HTTP error occurred: {err}\")\\n except Exception as e:\\n print(f\"An error occurred: {e}\")\\n\\n# URLs to Google News RSS for each company\\nrss_urls = {\\n \\'NVDA\\': \\'https://news.google.com/rss/search?q=NVIDIA+Corporation+stock&hl=en-US&gl=US&ceid=US:en\\',\\n \\'TSLA\\': \\'https://news.google.com/rss/search?q=Tesla+Inc+stock&hl=en-US&gl=US&ceid=US:en\\',\\n \\'MSFT\\': \\'https://news.google.com/rss/search?q=Microsoft+Corporation+stock&hl=en-US&gl=US&ceid=US:en\\'\\n}\\n\\nfor company, url in rss_urls.items():\\n fetch_news(url)\\n```\\n\\nThis script will print out the top 5 recent news headlines from Google News RSS feeds for each company. After checking the news articles, we can start to piece together a picture of what might be driving the stock performances. Remember that the news links output by the script can be visited for more detailed reading on each headline.', 'role': 'user'}, {'content': 'exitcode: 0 (execution succeeded)\\nCode output: \\nTop headlines for \"NVIDIA Corporation stock\" - Google News:\\n\\nTitle: Nvidia (NVDA) Stock Drops Despite Market Gains: Important Facts to Note - Yahoo Finance\\nLink: https://news.google.com/rss/articles/CBMiTWh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy9udmlkaWEtbnZkYS1zdG9jay1kcm9wcy1kZXNwaXRlLTIyNDUxNzMyNC5odG1s0gEA?oc=5\\n\\nTitle: Nvidia’s stock could ride to $800, says Goldman Sachs. Here’s its path. - MarketWatch\\nLink: https://news.google.com/rss/articles/CBMibGh0dHBzOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9zdG9yeS9udmlkaWFzLXN0b2NrLWNvdWxkLXJpZGUtdG8tODAwLXNheXMtZ29sZG1hbi1zYWNocy1oZXJlcy1pdHMtcGF0aC1lMmE4YWRjM9IBcGh0dHBzOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9hbXAvc3RvcnkvbnZpZGlhcy1zdG9jay1jb3VsZC1yaWRlLXRvLTgwMC1zYXlzLWdvbGRtYW4tc2FjaHMtaGVyZXMtaXRzLXBhdGgtZTJhOGFkYzM?oc=5\\n\\nTitle: Nvidia: Near All-Time Highs, Yet Reasonably Valued With Widening AI Tailwinds (NVDA) - Seeking Alpha\\nLink: https://news.google.com/rss/articles/CBMidGh0dHBzOi8vc2Vla2luZ2FscGhhLmNvbS9hcnRpY2xlLzQ2Njc4ODEtbnZpZGlhLW5lYXItYWxsLXRpbWUtaGlnaHMteWV0LXJlYXNvbmFibHktdmFsdWVkLXdpdGgtd2lkZW5pbmctYWktdGFpbHdpbmRz0gEA?oc=5\\n\\nTitle: Nvidia Stock Headed To $800, Goldman Sachs Calls It \\'Gold Standard\\' - Microsoft (NASDAQ:MSFT), Meta Platf - Benzinga\\nLink: https://news.google.com/rss/articles/CBMimQFodHRwczovL3d3dy5iZW56aW5nYS5jb20vYW5hbHlzdC1yYXRpbmdzL2FuYWx5c3QtY29sb3IvMjQvMDIvMzY5MzM1NDgvbnZpZGlhLXN0b2NrLW9uLXBhdGgtdG8tODAwLWdvbGRtYW4tc2FjaHMtc2F5cy1pbmR1c3RyeS1nb2xkLXN0YW5kYXJkLWZvci10aGUtZnV0dXLSAS1odHRwczovL3d3dy5iZW56aW5nYS5jb20vYW1wL2NvbnRlbnQvMzY5MzM1NDg?oc=5\\n\\nTitle: Trending tickers: Nvidia, Alibaba, BP, Coinbase - Yahoo Finance UK\\nLink: https://news.google.com/rss/articles/CBMiXGh0dHBzOi8vdWsuZmluYW5jZS55YWhvby5jb20vbmV3cy9udmlkaWEtYWxpYmFiYS1icC1jb2luYmFzZS10cmVuZGluZy10aWNrZXJzLTEwMjY0ODgwNC5odG1s0gEA?oc=5\\n\\nTop headlines for \"Tesla Inc stock\" - Google News:\\n\\nTitle: Tesla Stock Is Down Again. Downgrades and Rates Aren’t Helping. - Barron\\'s\\nLink: https://news.google.com/rss/articles/CBMiQWh0dHBzOi8vd3d3LmJhcnJvbnMuY29tL2FydGljbGVzL3Rlc2xhLXN0b2NrLXByaWNlLXRvZGF5LTJhMTM1NjAx0gEA?oc=5\\n\\nTitle: Tesla’s stock is downgraded, more for Elon Musk’s issues than ‘tough’ EV demand - MarketWatch\\nLink: https://news.google.com/rss/articles/CBMidWh0dHBzOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9zdG9yeS90ZXNsYXMtc3RvY2staXMtZG93bmdyYWRlZC1tb3JlLWZvci1lbG9uLW11c2tzLWlzc3Vlcy10aGFuLXRvdWdoLWV2LWRlbWFuZC1kZjU1MDA1ZdIBeWh0dHBzOi8vd3d3Lm1hcmtldHdhdGNoLmNvbS9hbXAvc3RvcnkvdGVzbGFzLXN0b2NrLWlzLWRvd25ncmFkZWQtbW9yZS1mb3ItZWxvbi1tdXNrcy1pc3N1ZXMtdGhhbi10b3VnaC1ldi1kZW1hbmQtZGY1NTAwNWU?oc=5\\n\\nTitle: Tesla Rebound Bets Have Option Traders Turning to Leveraged ETF - Bloomberg\\nLink: https://news.google.com/rss/articles/CBMicWh0dHBzOi8vd3d3LmJsb29tYmVyZy5jb20vbmV3cy9hcnRpY2xlcy8yMDI0LTAyLTA1L29wdGlvbnMtdHJhZGVycy1iZXR0aW5nLW9uLXRlc2xhLXJlYm91bmQtdHVybi10by1sZXZlcmFnZWQtZXRm0gEA?oc=5\\n\\nTitle: Tesla stock drops as investors scrutinize board’s close personal ties to Elon Musk - CNN\\nLink: https://news.google.com/rss/articles/CBMiTmh0dHBzOi8vd3d3LmNubi5jb20vMjAyNC8wMi8wNS9idXNpbmVzcy90ZXNsYS1zdG9jay1lbG9uLW11c2stYm9hcmQvaW5kZXguaHRtbNIBUmh0dHBzOi8vYW1wLmNubi5jb20vY25uLzIwMjQvMDIvMDUvYnVzaW5lc3MvdGVzbGEtc3RvY2stZWxvbi1tdXNrLWJvYXJkL2luZGV4Lmh0bWw?oc=5\\n\\nTitle: Tesla Stock: 13-Point Countdown Supports My Buy Upgrade (NASDAQ:TSLA) - Seeking Alpha\\nLink: https://news.google.com/rss/articles/CBMiX2h0dHBzOi8vc2Vla2luZ2FscGhhLmNvbS9hcnRpY2xlLzQ2Njc1NjQtdGVzbGEtc3RvY2stMTMtcG9pbnQtY291bnRkb3duLXN1cHBvcnRzLW15LWJ1eS11cGdyYWRl0gEA?oc=5\\n\\nTop headlines for \"Microsoft Corporation stock\" - Google News:\\n\\nTitle: How To Earn $500 Per Month From Microsoft Stock - Yahoo Finance\\nLink: https://news.google.com/rss/articles/CBMiSmh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy9lYXJuLTUwMC1wZXItbW9udGgtbWljcm9zb2Z0LTE4MjYyMzE0NS5odG1s0gEA?oc=5\\n\\nTitle: Microsoft Corp. stock underperforms Tuesday when compared to competitors - MarketWatch\\nLink: https://news.google.com/rss/articles/CBMigwFodHRwczovL3d3dy5tYXJrZXR3YXRjaC5jb20vZGF0YS1uZXdzL21pY3Jvc29mdC1jb3JwLXN0b2NrLXVuZGVycGVyZm9ybXMtdHVlc2RheS13aGVuLWNvbXBhcmVkLXRvLWNvbXBldGl0b3JzLTYyZWI3YTRhLTc2MTgyZDgyNmM1MtIBhwFodHRwczovL3d3dy5tYXJrZXR3YXRjaC5jb20vYW1wL2RhdGEtbmV3cy9taWNyb3NvZnQtY29ycC1zdG9jay11bmRlcnBlcmZvcm1zLXR1ZXNkYXktd2hlbi1jb21wYXJlZC10by1jb21wZXRpdG9ycy02MmViN2E0YS03NjE4MmQ4MjZjNTI?oc=5\\n\\nTitle: Microsoft Corp. stock underperforms Tuesday when compared to competitors - msnNOW\\nLink: https://news.google.com/rss/articles/CBMie2h0dHBzOi8vd3d3Lm1zbi5jb20vZW4tdXMvbW9uZXkvbWFya2V0cy9taWNyb3NvZnQtY29ycC1zdG9jay11bmRlcnBlcmZvcm1zLXR1ZXNkYXktd2hlbi1jb21wYXJlZC10by1jb21wZXRpdG9ycy9hci1CQjFoU0tqSdIBAA?oc=5\\n\\nTitle: Is Microsoft (MSFT) Stock Outpacing Its Computer and Technology Peers This Year? - Yahoo Finance\\nLink: https://news.google.com/rss/articles/CBMiVWh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy9taWNyb3NvZnQtbXNmdC1zdG9jay1vdXRwYWNpbmctY29tcHV0ZXItMTQ0MDA5MzMyLmh0bWzSAQA?oc=5\\n\\nTitle: Those who invested in Microsoft (NASDAQ:MSFT) five years ago are up 310% - Yahoo Finance\\nLink: https://news.google.com/rss/articles/CBMiUmh0dHBzOi8vZmluYW5jZS55YWhvby5jb20vbmV3cy90aG9zZS1pbnZlc3RlZC1taWNyb3NvZnQtbmFzZGFxLW1zZnQtMTEwMDE1MzUyLmh0bWzSAQA?oc=5\\n\\n', 'role': 'assistant'}, {'content': \"Based on the headlines retrieved, here is a potential analysis of the stock performances for each company:\\n\\n1. **NVIDIA Corporation (NVDA)**: The headlines suggest that NVIDIA’s stock has experienced a drop despite overall market gains, which emphasizes the volatility of the stock. However, there is also mention of positive outlooks from financial institutions like Goldman Sachs anticipating an increase in NVIDIA’s stock value, possibly due to its positioning in the marketplace as the 'Gold Standard' and growing AI tailwinds. This mixed sentiment may contribute to the observed increase over the past month, reflecting investor confidence in the long-term value of the company, particularly in the context of AI advancements.\\n\\n2. **Tesla, Inc. (TSLA)**: Tesla's stock seems to be under pressure from several factors. Analyst downgrades and concerns over interest rates are affecting the stock. Furthermore, headlines suggest that Elon Musk's personal issues might be influencing investor sentiment. Issues with the company's board and its close ties to Musk also appear to be a possible reason for the stock's decrease. Despite these challenges, some investors seem to be betting on a rebound, as indicated by options trading in leveraged ETFs.\\n\\n3. **Microsoft Corporation (MSFT)**: The news for Microsoft indicates a more mixed or stable performance. There is mention of underperformance compared to competitors on a particular day, but longer-term investors have seen substantial gains over the past five years. Additionally, there is a suggestion of how investors might generate income from Microsoft stock, implying investor interest in holding the stock for passive income. The overall increase over the past month may reflect steady confidence in Microsoft's market position and its performance relative to peers within the technology sector.\\n\\nIt's important to note that stock performance can be influenced by a wide array of factors, including earnings reports, industry trends, and macroeconomic indicators, which are not fully captured by the headlines. For more comprehensive insight, investors often review detailed financial analysis reports, earnings results, and market research about each company and their respective industries, in addition to staying updated with global economic conditions and trends.\\n\\nFor further investigation, one could look into each company's recent quarterly earnings reports, check for any significant changes in their financial statements, or announcements that may have impacted investor sentiment. Additionally, it's advisable to consider broader market trends, such as shifts in technology, automotive, or AI sectors for these companies, along with policies and regulations that could affect their business.\\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", + "Conversation cost: ({'total_cost': 0.55797, 'gpt-4': {'cost': 0.55797, 'prompt_tokens': 13963, 'completion_tokens': 2318, 'total_tokens': 16281}}, {'total_cost': 0.55797, 'gpt-4': {'cost': 0.55797, 'prompt_tokens': 13963, 'completion_tokens': 2318, 'total_tokens': 16281}})\n", "\n", "\n", "\n", "Conversation summary with writer:\n", + "### The Stock Market Saga: NVIDIA Soars, Tesla Sputers, and Microsoft Steadily Climbs\n", + "\n", + "In the grand tapestry of the stock market, each thread tells a story. Some offer tales of meteoric ascents, others of vertiginous plummets, and then there are those that speak of steadfast progress amid tumultuous winds. Today, let's unravel the recent stories of three tech titans – NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) – all of whom reflect the dynamic nature of the stock market and the different factors that can influence investor sentiment and share price.\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", + "**NVIDIA's Electrifying Ascent**\n", + "\n", + "Leading the charge, we have NVIDIA, with a stock price sitting regally at $682.23, reflecting a whopping 30.56% climb over the past month. What's fueling this jet-propelled ascension? A glance at the headlines suggests a host of factors at play. Positive analyst projections have painted a rosy hue, suggesting that investors are betting big on the company's prospects. A key player in artificial intelligence and deep learning, NVIDIA's chips are the silent workhorses powering revolutionary tech from data centers to autonomous vehicles.\n", + "\n", + "Despite the capricious whims of market volatility, NVIDIA's steadfast dedication to innovation and dominance in AI developments has shone through, and the market seems to be rewarding them for it. But will this growth trajectory continue to point skyward? Only time will tell.\n", + "\n", + "**Tesla's Bumpy Ride**\n", + "\n", + "Meanwhile, at Tesla, the electric car behemoth has hit a bit of a rough patch, with shares dipping to $185.10, marking a 23.02% decrease from the previous month. What's put the brakes on Tesla's stock? The company, synonymous not just with electric vehicles but also with its enigmatic CEO, has driven into some turbulence. Analyst downgrades have undoubtedly cast a shadow over its valuation.\n", + "\n", + "In the driver’s seat, Elon Musk's personal pursuits, including his adventurous foray into social media platforms, might have created more waves of uncertainty, leading investors to question the management's focus. Furthermore, concerns over Tesla's board governance have risen, potentially eroding investor confidence in oversight and long-term strategy. In the stock market race, Tesla has taken a pit stop, and investors are eagerly watching to see if they'll emerge with renewed vigor or if there's more roadwork ahead.\n", + "\n", + "**Microsoft's Measured Climb**\n", + "\n", + "Amidst this spectrum, we find Microsoft, a legacy tech powerhouse that's been threading a path of modest yet noticeable growth. The stock price stands at a comfortable $405.49, marking an uplift of 8.22%. While this may not seem as heady as NVIDIA's leap or as striking as Tesla's stumble, Microsoft's rise is nonetheless significant.\n", + "\n", + "Investors relish stability, and Microsoft has provided just that, with long-term gains that often spell out rewarding investments. Talks around income generation buzz in the hallowed halls of market analysts, though, on some days, the stock underperforms when pitted against its feistier competitors. Still, its resilience amid market conditions and the ability to steadily add value over time have likely contributed to its overall favorable position.\n", + "\n", + "**The Stock Market's Woven Narrative**\n", + "\n", + "As these tech giants trace their financial storylines, their performance is embroidered into the broader fabric of economic conditions, industry trends, and corporate news. Every surge, dip, and steady climb is a testament to the market's ebb and flow where fortunes can change in the blink of an eye.\n", + "\n", + "Investors looking to read between the lines would do well to heed the multitude of factors at play. NVIDIA's sprint might inspire dreams of quick gains, whereas Microsoft's gradual ascent calls to mind the virtues of patience. And with Tesla, the narrative has become a cautionary tale reciting the importance of governance and leadership focus.\n", + "\n", + "As the market continues to evolve, the stories of NVIDIA, Tesla, and Microsoft will undoubtedly develop further, providing investors with more chapters to scrutinize, absorb, and muse upon. After all, in the stock market's ever-turning pages, today's valuations are but a paragraph in an epic tome of financial endeavor.\n", + "\n", + "\n", + "All chat history: [{'content': \"Develop an engaging blog post using any information provided.\\nContext: \\nThe current stock prices and their respective percentage change over the past month are as follows:\\n\\n- NVIDIA Corporation (NVDA): Stock price is $682.23 with a 30.56% increase.\\n- Tesla, Inc. (TSLA): Stock price is $185.10 with a 23.02% decrease.\\n- Microsoft Corporation (MSFT): Stock price is $405.49 with an 8.22% increase.\\n\\nThe stock prices are based on the most recent trading data available at the time of the query. Stock prices are subject to fluctuate during trading hours.\\nThe performance of NVIDIA, Tesla, and Microsoft's stocks can be attributed to several factors based on recent headlines. NVIDIA has seen a significant increase in stock price, which could be related to positive analyst projections and its standing in AI developments despite some market volatility. Tesla's stock has decreased, potentially due to analyst downgrades, heightened scrutiny of Elon Musk's personal issues, and concerns over the company's board governance. Microsoft's stock has shown a moderate increase, with long-term gains for investors and discussions around income generation from the stock, despite some underperformance compared to competitors on specific days. Overall stock performance is likely influenced by a mix of company-specific news, financial reports, industry trends, and broader economic conditions.\", 'role': 'assistant'}, {'content': \"### The Stock Market Saga: NVIDIA Soars, Tesla Sputers, and Microsoft Steadily Climbs\\n\\nIn the grand tapestry of the stock market, each thread tells a story. Some offer tales of meteoric ascents, others of vertiginous plummets, and then there are those that speak of steadfast progress amid tumultuous winds. Today, let's unravel the recent stories of three tech titans – NVIDIA Corporation (NVDA), Tesla, Inc. (TSLA), and Microsoft Corporation (MSFT) – all of whom reflect the dynamic nature of the stock market and the different factors that can influence investor sentiment and share price.\\n\\n**NVIDIA's Electrifying Ascent**\\n\\nLeading the charge, we have NVIDIA, with a stock price sitting regally at $682.23, reflecting a whopping 30.56% climb over the past month. What's fueling this jet-propelled ascension? A glance at the headlines suggests a host of factors at play. Positive analyst projections have painted a rosy hue, suggesting that investors are betting big on the company's prospects. A key player in artificial intelligence and deep learning, NVIDIA's chips are the silent workhorses powering revolutionary tech from data centers to autonomous vehicles.\\n\\nDespite the capricious whims of market volatility, NVIDIA's steadfast dedication to innovation and dominance in AI developments has shone through, and the market seems to be rewarding them for it. But will this growth trajectory continue to point skyward? Only time will tell.\\n\\n**Tesla's Bumpy Ride**\\n\\nMeanwhile, at Tesla, the electric car behemoth has hit a bit of a rough patch, with shares dipping to $185.10, marking a 23.02% decrease from the previous month. What's put the brakes on Tesla's stock? The company, synonymous not just with electric vehicles but also with its enigmatic CEO, has driven into some turbulence. Analyst downgrades have undoubtedly cast a shadow over its valuation.\\n\\nIn the driver’s seat, Elon Musk's personal pursuits, including his adventurous foray into social media platforms, might have created more waves of uncertainty, leading investors to question the management's focus. Furthermore, concerns over Tesla's board governance have risen, potentially eroding investor confidence in oversight and long-term strategy. In the stock market race, Tesla has taken a pit stop, and investors are eagerly watching to see if they'll emerge with renewed vigor or if there's more roadwork ahead.\\n\\n**Microsoft's Measured Climb**\\n\\nAmidst this spectrum, we find Microsoft, a legacy tech powerhouse that's been threading a path of modest yet noticeable growth. The stock price stands at a comfortable $405.49, marking an uplift of 8.22%. While this may not seem as heady as NVIDIA's leap or as striking as Tesla's stumble, Microsoft's rise is nonetheless significant.\\n\\nInvestors relish stability, and Microsoft has provided just that, with long-term gains that often spell out rewarding investments. Talks around income generation buzz in the hallowed halls of market analysts, though, on some days, the stock underperforms when pitted against its feistier competitors. Still, its resilience amid market conditions and the ability to steadily add value over time have likely contributed to its overall favorable position.\\n\\n**The Stock Market's Woven Narrative**\\n\\nAs these tech giants trace their financial storylines, their performance is embroidered into the broader fabric of economic conditions, industry trends, and corporate news. Every surge, dip, and steady climb is a testament to the market's ebb and flow where fortunes can change in the blink of an eye.\\n\\nInvestors looking to read between the lines would do well to heed the multitude of factors at play. NVIDIA's sprint might inspire dreams of quick gains, whereas Microsoft's gradual ascent calls to mind the virtues of patience. And with Tesla, the narrative has become a cautionary tale reciting the importance of governance and leadership focus.\\n\\nAs the market continues to evolve, the stories of NVIDIA, Tesla, and Microsoft will undoubtedly develop further, providing investors with more chapters to scrutinize, absorb, and muse upon. After all, in the stock market's ever-turning pages, today's valuations are but a paragraph in an epic tome of financial endeavor.\\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", + "Conversation cost: ({'total_cost': 0.12647999999999998, 'gpt-4': {'cost': 0.12647999999999998, 'prompt_tokens': 728, 'completion_tokens': 1744, 'total_tokens': 2472}}, {'total_cost': 0.12647999999999998, 'gpt-4': {'cost': 0.12647999999999998, 'prompt_tokens': 728, 'completion_tokens': 1744, 'total_tokens': 2472}})\n", "\n", "\n", "\n" @@ -1184,7 +1092,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -1262,27 +1170,25 @@ "\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", + "NVDA (NVIDIA Corporation) stock price: $682.23\n", + "TESLA (Tesla, Inc.) stock price: $185.10\n", + "NVDA percentage change over past month: 30.56%\n", + "TESLA percentage change over past month: -23.02%\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mResearcher\u001b[0m (to User):\n", "\n", - "The script executed successfully and provided the following information:\n", + "The output indicates the following:\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", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\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", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\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", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", "\n", "TERMINATE\n", "\n", @@ -1293,18 +1199,16 @@ "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", + "The output indicates the following:\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", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\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", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\n", "\n", - "If you need any further assistance or another task, feel free to ask. Otherwise, this concludes your request.\n", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\n", "\n", "\u001b[0m\n", "\u001b[34m\n", @@ -1313,62 +1217,71 @@ "\n", "Investigate possible reasons of the stock performance.\n", "Context: \n", - "The script executed successfully and provided the following information:\n", + "The output indicates the following:\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", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\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", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\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", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\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", + "To investigate the possible reasons for the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), we'd look for information in several areas such as recent company news, earnings reports, industry trends, and major events that might have impacted the technology and automotive sectors, respectively. Additionally, market sentiment, analyst ratings, and any significant changes in the overall stock market or economic conditions can also influence stock performance.\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", + "Since we need recent news and reports, we can use code to fetch the latest headlines and the stock price performance for both companies. We can start by getting the recent news for each company, which will require using an API that provides financial news or scraping websites that offer up-to-date news on stocks.\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", + "Let's use Python code for the news retrieval task and analyze the data step by step.\n", "\n", - "```python\n", - "# filename: fetch_news.py\n", + "First, let's fetch recent news headlines for both NVDA and TSLA using a financial news API:\n", "\n", - "import feedparser\n", + "(Note: Typically, to access a financial news API, you'd need an API key issued by the news provider. For the purpose of this example, I'll use a fictional API provider and a generic API key. In a real-world scenario, you would need to register with a financial news API provider to obtain a valid API key.)\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", + "```python\n", + "# filename: fetch_news.py\n", + "import requests\n", + "import json\n", + "\n", + "# Define the function to fetch news for a given stock symbol\n", + "def fetch_stock_news(symbol):\n", + " api_key = 'your_api_key' # Replace with your actual API key\n", + " url = f'https://financialnewsapi.com/api/v1/news?symbol={symbol}&apikey={api_key}'\n", + " response = requests.get(url)\n", + " if response.status_code == 200:\n", + " return json.loads(response.content.decode('utf-8'))\n", + " else:\n", + " print(f\"Failed to fetch news for {symbol}: Status code {response.status_code}\")\n", + " return None\n", + "\n", + "# Fetch news for NVDA and TSLA\n", + "nvda_news = fetch_stock_news('NVDA')\n", + "tsla_news = fetch_stock_news('TSLA')\n", + "\n", + "# Print the recent news headlines\n", + "if nvda_news:\n", + " print(\"Recent news for NVDA:\")\n", + " for news_item in nvda_news['articles']:\n", + " print(f\"- {news_item['title']}\")\n", + "else:\n", + " print(\"No news fetched for NVDA.\")\n", + "\n", + "if tsla_news:\n", + " print(\"\\nRecent news for TSLA:\")\n", + " for news_item in tsla_news['articles']:\n", + " print(f\"- {news_item['title']}\")\n", + "else:\n", + " print(\"No news fetched for TSLA.\")\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", + "Run this script to retrieve the latest news for both companies. After reviewing the news, we can better understand recent events that might have influenced their stock performance. If this news retrieval is successful, we will then move on to analyze the information obtained in the news articles. If not, we will have to alter our approach to fetch the necessary information.\n", + "\n", + "Please execute the script I provided and show me the output.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", @@ -1378,77 +1291,49 @@ "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", + " File \"fetch_news.py\", line 17, in \n", + " nvda_news = fetch_stock_news('NVDA')\n", + " File \"fetch_news.py\", line 11, in fetch_stock_news\n", + " return json.loads(response.content.decode('utf-8'))\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/json/__init__.py\", line 346, in loads\n", + " return _default_decoder.decode(s)\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/json/decoder.py\", line 337, in decode\n", + " obj, end = self.raw_decode(s, idx=_w(s, 0).end())\n", + " File \"/Users/qingyunwu/miniconda3/envs/ag2/lib/python3.10/json/decoder.py\", line 355, in raw_decode\n", + " raise JSONDecodeError(\"Expecting value\", s, err.value) from None\n", + "json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)\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", + "It appears there was an issue with the execution of the code that led to a `JSONDecodeError`. This indicates that the response from the supposed financial news API did not return valid JSON, which is typically the result of either a bad request or an unexpected response from the API.\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", + "The reason for this error could be one of the following:\n", "\n", - "```python\n", - "# filename: fetch_news.py\n", + "1. Invalid API endpoint or request parameters: The URL used to access the API could be incorrect, or the parameters may not be what the API expects.\n", + "2. Invalid API key: The API key included in the code is a placeholder and not an actual valid key. To execute the API request properly, a valid API key from the news provider is necessary.\n", + "3. Service downtime or issues: The API service might be down or experiencing issues, resulting in a response that is not JSON-formatted data.\n", + "4. API rate limits: If the script has been run multiple times, it might have hit the API's rate limits.\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", + "To troubleshoot this issue, you would need to:\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", + "1. Ensure that the API endpoint URL is correct and that the financial news API you're planning to use exists and is operational.\n", + "2. Register for a valid API key from the news service provider and replace the placeholder with the actual key.\n", + "3. Check the API's documentation to make sure the request is formatted correctly and adheres to the expected schema.\n", + "4. Verify the API service status and ensure there are no ongoing issues or outages.\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", + "To investigate the stock performance without access to an actual financial news API, you can manually search for recent news about NVDA and TSLA from reliable financial news websites, such as Bloomberg, CNBC, or Reuters. Look for the following types of information:\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", + "- Recent earnings reports and any forward-looking statements from the companies.\n", + "- Announcements of new products or services.\n", + "- Partnerships, mergers, or acquisitions.\n", + "- Analyst upgrades or downgrades.\n", + "- Industry-wide news affecting the tech and automotive sectors.\n", + "- Regulatory changes or legal issues affecting the companies.\n", + "- General market trends or macroeconomic factors.\n", + "\n", + "Once you have gathered the relevant information, analyze it to identify any factors that could explain the increase in NVDA's stock and the decrease in TSLA's stock over the past month.\n", "\n", "TERMINATE\n", "\n", @@ -1459,80 +1344,85 @@ "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", + "The output indicates the following:\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", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\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", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\n", "\n", - "If you need any further assistance or another task, feel free to ask. Otherwise, this concludes your request.\n", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\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", + "The stocks for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) have shown different performance trends, with NVDA increasing by 30.56% and TSLA decreasing by -23.02% over the past month. To investigate the reasons behind these stock performances, it would be necessary to look at recent company news, earnings reports, industry trends, and major events. An attempt to retrieve the latest news using a Python script and a financial news API resulted in an execution failure due to a `JSONDecodeError`, likely because of an invalid API key or endpoint, indicating that the script could not successfully fetch the news from the financial news API. To resolve this, one should ensure a valid API key, correct API endpoint, and adherence to the API's request formatting rules. In the absence of API access, manual research on financial news websites to analyze the relevant information is recommended to understand the changes in stock prices for NVDA and 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", + "The output indicates the following:\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", + "- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\n", + "- The stock price of Tesla, Inc. (TSLA) is $185.10.\n", + "- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\n", + "- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\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", + "These figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\n", "\n", - "If you need any further assistance or another task, feel free to ask. Otherwise, this concludes your request.\n", + "Please note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\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", + "The stocks for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) have shown different performance trends, with NVDA increasing by 30.56% and TSLA decreasing by -23.02% over the past month. To investigate the reasons behind these stock performances, it would be necessary to look at recent company news, earnings reports, industry trends, and major events. An attempt to retrieve the latest news using a Python script and a financial news API resulted in an execution failure due to a `JSONDecodeError`, likely because of an invalid API key or endpoint, indicating that the script could not successfully fetch the news from the financial news API. To resolve this, one should ensure a valid API key, correct API endpoint, and adherence to the API's request formatting rules. In the absence of API access, manual research on financial news websites to analyze the relevant information is recommended to understand the changes in stock prices for NVDA and 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", + "**NVIDIA vs Tesla: A Tale of Two Stocks**\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", + "In the fast-paced world of stocks and shares, the dance of numbers on the trading floor paints a compelling narrative. Today, we're spinning a tale of two powerhouses—NVIDIA Corporation (NVDA) with its gilded ascent, and Tesla, Inc. (TSLA), navigating a turbulent descent. The stock market is a reflection of a myriad of intertwined stories, a blend of resilience, innovation, and the inevitable ebb and flow of investor sentiment. Let's dive into the current landscape framed by these two tech titans.\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", + "**NVIDIA's Graphic Ascent**\n", + "With NVIDIA's stock price standing tall at $682.23, there's an undeniable buzz surrounding this Silicon Valley denizen. Over the past month alone, NVDA has witnessed an electrifying surge of 30.56% in its stock value. This is the kind of growth that sends a surge of excitement through investors and market analysts alike. But what could be fueling this skyrocketing trajectory?\n", "\n", - "## Tesla: A Shock to the System\n", + "NVIDIA, traditionally known for its dominating presence in the graphics processing unit (GPU) market, might have several factors playing to its advantage. From the progressive adoption of cloud gaming to the rise of AI and deep learning, where GPUs are indispensable, NVIDIA seems well-positioned to ride the wave of technological advancements.\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", + "In addition, strategic partnerships, innovative product launches, or favorable market conditions could contribute to the company's resounding success. Without accessing the latest financial news through the API (it seems we hit a glitch there!), we can only speculate based on industry trends and NVIDIA's storied history of strong performance.\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", + "**Tesla's Twist in the Road**\n", + "On the other side of the spectrum, we find Tesla, Inc., trading at $185.10, nursing the bruises of a 23.02% decrease in stock price over the month. For a company that's become synonymous with the future of transportation, such a dip inevitably raises eyebrows and questions.\n", "\n", - "## The Matter of Fetching News\n", + "Is it the global economic headwinds, or perhaps production concerns, or could it even be the erratic dance of supply chain disruptions? Tesla is more than just cars; it's an embodiment of an electric dream, the promise of a greener tomorrow. Yet, the entanglements of international markets and maybe even the personal escapades of its charismatic leader, Elon Musk, could exert unexpected pressures on the company's financial standing.\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", + "It's important to remember the roller coaster nature of the stock market. While it sometimes feels like the fates are playing darts with share prices, the reality is often woven from the tangible threads of economic policies, consumer behavior, and, yes, even the social media musings of influential CEOs.\n", "\n", - "## Looking Forward\n", + "**Facts and Failures: Seeking the Story Behind the Stocks**\n", + "Traditionally, financial analysts and interested observers would turn to APIs to mine the rich veins of data that financial news offers. Unfortunately, when technology stumbles—as indicated by the 'JSONDecodeError' that cropped up in our attempts to fetch the news—the mystery remains cloaked. Such errors hint at incorrect keys, misguided end points, or a slip in the API's request formatting rules.\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", + "But fret not, for the modern speculator is versatile and resourceful. In lieu of API assistance and the digital convenience of instantaneous news retrieval, there remains the stalwart practice of manual research. By scouring financial news websites, parsing expert commentaries, and comparing industry reports, one can weave together a tapestry that explains the movements of these stock market inhabitants.\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", + "In these contrasting fortunes of NVDA and TSLA, a mosaic of market dynamics comes to life. Whether you're a casual observer engaging in coffee table conversations or an investor poring over portfolios by lamplight, the essence of the story remains the same—the stock market is a narrative in numbers, reflecting human ambition, potential, and the relentless march of progress.\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", + "Are you ready to hitch a ride on the next turn of the stock market wheel? Keep your eyes peeled, your mind sharp, and who knows—maybe the key to unlock the API will reveal itself in the fullness of time.\n", "\n", "TERMINATE\n", "\n", "--------------------------------------------------------------------------------\n" ] + }, + { + "data": { + "text/plain": [ + "{: ChatResult(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: $682.23\\nTESLA (Tesla, Inc.) stock price: $185.10\\nNVDA percentage change over past month: 30.56%\\nTESLA percentage change over past month: -23.02%\\n', 'role': 'assistant'}, {'content': 'The output indicates the following:\\n\\n- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\\n- The stock price of Tesla, Inc. (TSLA) is $185.10.\\n- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\\n- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\\n\\nThese figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\\n\\nPlease note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\\n\\nTERMINATE', 'role': 'user'}], summary='The output indicates the following:\\n\\n- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\\n- The stock price of Tesla, Inc. (TSLA) is $185.10.\\n- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\\n- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\\n\\nThese figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\\n\\nPlease note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\\n\\n', cost=({'total_cost': 0.08900999999999999, 'gpt-4': {'cost': 0.08900999999999999, 'prompt_tokens': 1597, 'completion_tokens': 685, 'total_tokens': 2282}}, {'total_cost': 0}), human_input=[]),\n", + " : ChatResult(chat_history=[{'content': 'Investigate possible reasons of the stock performance.\\nContext: \\nThe output indicates the following:\\n\\n- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\\n- The stock price of Tesla, Inc. (TSLA) is $185.10.\\n- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\\n- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\\n\\nThese figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\\n\\nPlease note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\\n\\n', 'role': 'assistant'}], summary=\"The stocks for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) have shown different performance trends, with NVDA increasing by 30.56% and TSLA decreasing by -23.02% over the past month. To investigate the reasons behind these stock performances, it would be necessary to look at recent company news, earnings reports, industry trends, and major events. An attempt to retrieve the latest news using a Python script and a financial news API resulted in an execution failure due to a `JSONDecodeError`, likely because of an invalid API key or endpoint, indicating that the script could not successfully fetch the news from the financial news API. To resolve this, one should ensure a valid API key, correct API endpoint, and adherence to the API's request formatting rules. In the absence of API access, manual research on financial news websites to analyze the relevant information is recommended to understand the changes in stock prices for NVDA and TSLA.\", cost=({'total_cost': 0.1371, 'gpt-4': {'cost': 0.1371, 'prompt_tokens': 4164, 'completion_tokens': 203, 'total_tokens': 4367}}, {'total_cost': 0.1371, 'gpt-4': {'cost': 0.1371, 'prompt_tokens': 4164, 'completion_tokens': 203, 'total_tokens': 4367}}), human_input=[]),\n", + " : ChatResult(chat_history=[{'content': \"Develop an engaging blog post using any information provided.\\nContext: \\nThe output indicates the following:\\n\\n- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\\n- The stock price of Tesla, Inc. (TSLA) is $185.10.\\n- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\\n- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\\n\\nThese figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\\n\\nPlease note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\\n\\n\\nThe stocks for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) have shown different performance trends, with NVDA increasing by 30.56% and TSLA decreasing by -23.02% over the past month. To investigate the reasons behind these stock performances, it would be necessary to look at recent company news, earnings reports, industry trends, and major events. An attempt to retrieve the latest news using a Python script and a financial news API resulted in an execution failure due to a `JSONDecodeError`, likely because of an invalid API key or endpoint, indicating that the script could not successfully fetch the news from the financial news API. To resolve this, one should ensure a valid API key, correct API endpoint, and adherence to the API's request formatting rules. In the absence of API access, manual research on financial news websites to analyze the relevant information is recommended to understand the changes in stock prices for NVDA and TSLA.\", 'role': 'assistant'}], summary=\"Develop an engaging blog post using any information provided.\\nContext: \\nThe output indicates the following:\\n\\n- The current stock price of NVIDIA Corporation (NVDA) is $682.23.\\n- The stock price of Tesla, Inc. (TSLA) is $185.10.\\n- The percentage change in the stock price of NVDA over the past month is an increase of 30.56%.\\n- The percentage change in the stock price of TSLA over the past month is a decrease of -23.02%.\\n\\nThese figures reflect the performance of NVDA and TSLA stocks over the past month and their current prices at the time of the query.\\n\\nPlease note that stock prices are subject to change throughout the trading day, and the percentage change is based on the closing price of the stock on the day 30 days ago compared to the most recent closing price.\\n\\n\\nThe stocks for NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) have shown different performance trends, with NVDA increasing by 30.56% and TSLA decreasing by -23.02% over the past month. To investigate the reasons behind these stock performances, it would be necessary to look at recent company news, earnings reports, industry trends, and major events. An attempt to retrieve the latest news using a Python script and a financial news API resulted in an execution failure due to a `JSONDecodeError`, likely because of an invalid API key or endpoint, indicating that the script could not successfully fetch the news from the financial news API. To resolve this, one should ensure a valid API key, correct API endpoint, and adherence to the API's request formatting rules. In the absence of API access, manual research on financial news websites to analyze the relevant information is recommended to understand the changes in stock prices for NVDA and TSLA.\", cost=({'total_cost': 0.018029999999999997, 'gpt-4': {'cost': 0.018029999999999997, 'prompt_tokens': 599, 'completion_tokens': 1, 'total_tokens': 600}}, {'total_cost': 0.018029999999999997, 'gpt-4': {'cost': 0.018029999999999997, 'prompt_tokens': 599, 'completion_tokens': 1, 'total_tokens': 600}}), human_input=[])}" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ diff --git a/test/agentchat/test_agent_usage.py b/test/agentchat/test_agent_usage.py index d5188cc561b8..dac13aeb8e4c 100644 --- a/test/agentchat/test_agent_usage.py +++ b/test/agentchat/test_agent_usage.py @@ -108,10 +108,12 @@ def test_agent_usage(): ) math_problem = "$x^3=125$. What is x?" - ai_user_proxy.initiate_chat( + res = ai_user_proxy.initiate_chat( assistant, message=math_problem, + summary_method="reflection_with_llm", ) + print("Result summary:", res.summary) # test print captured_output = io.StringIO() diff --git a/test/agentchat/test_assistant_agent.py b/test/agentchat/test_assistant_agent.py index 3cb112bd6ea3..63cfff5e22a5 100644 --- a/test/agentchat/test_assistant_agent.py +++ b/test/agentchat/test_assistant_agent.py @@ -55,11 +55,12 @@ def test_ai_user_proxy_agent(): assistant.reset() math_problem = "$x^3=125$. What is x?" - ai_user_proxy.initiate_chat( + res = ai_user_proxy.initiate_chat( assistant, message=math_problem, ) print(conversations) + print("Result summary:", res.summary) @pytest.mark.skipif(skip, reason="openai not installed OR requested to skip") @@ -149,7 +150,7 @@ def test_create_execute_script(human_input_mode="NEVER", max_consecutive_auto_re max_consecutive_auto_reply=max_consecutive_auto_reply, is_termination_msg=lambda x: x.get("content", "").rstrip().endswith("TERMINATE"), ) - user.initiate_chat( + res = user.initiate_chat( assistant, message="""Create a temp.py file with the following content: ``` @@ -157,12 +158,14 @@ def test_create_execute_script(human_input_mode="NEVER", max_consecutive_auto_re ```""", ) print(conversations) + print("Result summary:", res.summary) # autogen.ChatCompletion.print_usage_summary() # autogen.ChatCompletion.start_logging(compact=False) - user.send("""Execute temp.py""", assistant) + res = user.send("""Execute temp.py""", assistant) # print(autogen.ChatCompletion.logged_history) # autogen.ChatCompletion.print_usage_summary() # autogen.ChatCompletion.stop_logging() + print("Execution result summary:", res.summary) @pytest.mark.skipif(skip, reason="openai not installed OR requested to skip") diff --git a/test/agentchat/test_async.py b/test/agentchat/test_async.py index 496b73f7b58d..1e270b46e3f0 100644 --- a/test/agentchat/test_async.py +++ b/test/agentchat/test_async.py @@ -153,14 +153,18 @@ async def add_data_reply(recipient, messages, sender, config): user_proxy.register_reply(autogen.AssistantAgent, add_data_reply, position=2, config={"news_stream": data}) - await user_proxy.a_initiate_chat( - assistant, - message="""Give me investment suggestion in 3 bullet points.""", + chat_res = await user_proxy.a_initiate_chat( + assistant, message="""Give me investment suggestion in 3 bullet points.""", summary_method="reflection_with_llm" ) + + print("Chat summary:", chat_res.summary) + print("Chat cost:", chat_res.cost) + while not data_task.done() and not data_task.cancelled(): reply = await user_proxy.a_generate_reply(sender=assistant) if reply is not None: - await user_proxy.a_send(reply, assistant) + res = await user_proxy.a_send(reply, assistant) + print("Chat summary and cost:", res.summary, res.cost) if __name__ == "__main__": diff --git a/test/agentchat/test_async_get_human_input.py b/test/agentchat/test_async_get_human_input.py index 7af4237fc86f..fe81daf26e8b 100644 --- a/test/agentchat/test_async_get_human_input.py +++ b/test/agentchat/test_async_get_human_input.py @@ -38,6 +38,12 @@ async def test_async_get_human_input(): await user_proxy.a_initiate_chat(assistant, clear_history=True, message="Hello.") # Test without message - await user_proxy.a_initiate_chat(assistant, clear_history=True) + res = await user_proxy.a_initiate_chat(assistant, clear_history=True, summary_method="reflection_with_llm") # Assert that custom a_get_human_input was called at least once user_proxy.a_get_human_input.assert_called() + print("Result summary:", res.summary) + print("Human input:", res.human_input) + + +if __name__ == "__main__": + asyncio.run(test_async_get_human_input()) diff --git a/test/agentchat/test_function_call.py b/test/agentchat/test_function_call.py index df482fe1c378..52430c70bcb3 100644 --- a/test/agentchat/test_function_call.py +++ b/test/agentchat/test_function_call.py @@ -234,23 +234,27 @@ def test_update_function(): }, is_remove=False, ) - user_proxy.initiate_chat( + res1 = user_proxy.initiate_chat( assistant, message="What functions do you know about in the context of this conversation? End your response with 'TERMINATE'.", + summary_method="reflection_with_llm", ) messages1 = assistant.chat_messages[user_proxy][-1]["content"] print(messages1) + print("Chat summary and cost", res1.summary, res1.cost) assistant.update_function_signature("greet_user", is_remove=True) - user_proxy.initiate_chat( + res2 = user_proxy.initiate_chat( assistant, message="What functions do you know about in the context of this conversation? End your response with 'TERMINATE'.", + summary_method="reflection_with_llm", ) messages2 = assistant.chat_messages[user_proxy][-1]["content"] print(messages2) # The model should know about the function in the context of the conversation assert "greet_user" in messages1 assert "greet_user" not in messages2 + print("Chat summary and cost", res2.summary, res2.cost) if __name__ == "__main__": diff --git a/test/agentchat/test_function_call_groupchat.py b/test/agentchat/test_function_call_groupchat.py index 43ce508a4cc7..40944b200e02 100644 --- a/test/agentchat/test_function_call_groupchat.py +++ b/test/agentchat/test_function_call_groupchat.py @@ -95,10 +95,14 @@ def get_random_number(self): manager = autogen.GroupChatManager(groupchat=groupchat, llm_config=llm_config_no_function) if sync: - observer.initiate_chat(manager, message="Let's start the game!") + res = observer.initiate_chat(manager, message="Let's start the game!", summary_method="reflection_with_llm") else: - await observer.a_initiate_chat(manager, message="Let's start the game!") + res = await observer.a_initiate_chat( + manager, message="Let's start the game!", summary_method="reflection_with_llm" + ) assert func.call_count >= 1, "The function get_random_number should be called at least once." + print("Chat summary:", res.summary) + print("Chat cost:", res.cost) def test_no_function_map(): diff --git a/test/agentchat/test_groupchat.py b/test/agentchat/test_groupchat.py index 7744916af27c..b11c371bba07 100644 --- a/test/agentchat/test_groupchat.py +++ b/test/agentchat/test_groupchat.py @@ -606,12 +606,15 @@ def test_clear_agents_history(): # testing pure "clear history" statement with mock.patch.object(builtins, "input", lambda _: "clear history. How you doing?"): - agent1.initiate_chat(group_chat_manager, message="hello") + res = agent1.initiate_chat(group_chat_manager, message="hello", summary_method="last_msg") agent1_history = list(agent1._oai_messages.values())[0] agent2_history = list(agent2._oai_messages.values())[0] assert agent1_history == [{"content": "How you doing?", "name": "sam", "role": "user"}] assert agent2_history == [{"content": "How you doing?", "name": "sam", "role": "user"}] assert groupchat.messages == [{"content": "How you doing?", "name": "sam", "role": "user"}] + print("Chat summary", res.summary) + print("Chat cost", res.cost) + print("Chat history", res.chat_history) # testing clear history for defined agent with mock.patch.object(builtins, "input", lambda _: "clear history bob. How you doing?"): diff --git a/test/agentchat/test_human_input.py b/test/agentchat/test_human_input.py index 837044feaaeb..b9e8fba96740 100644 --- a/test/agentchat/test_human_input.py +++ b/test/agentchat/test_human_input.py @@ -34,9 +34,14 @@ def test_get_human_input(): user_proxy.register_reply([autogen.Agent, None], autogen.ConversableAgent.a_check_termination_and_human_reply) - user_proxy.initiate_chat(assistant, clear_history=True, message="Hello.") + res = user_proxy.initiate_chat(assistant, clear_history=True, message="Hello.") + print("Result summary:", res.summary) + print("Human input:", res.human_input) + # Test without supplying messages parameter - user_proxy.initiate_chat(assistant, clear_history=True) + res = user_proxy.initiate_chat(assistant, clear_history=True) + print("Result summary:", res.summary) + print("Human input:", res.human_input) # Assert that custom_a_get_human_input was called at least once user_proxy.get_human_input.assert_called() diff --git a/test/agentchat/test_math_user_proxy_agent.py b/test/agentchat/test_math_user_proxy_agent.py index c81449cec428..a8a333ec63f5 100644 --- a/test/agentchat/test_math_user_proxy_agent.py +++ b/test/agentchat/test_math_user_proxy_agent.py @@ -55,8 +55,10 @@ def test_math_user_proxy_agent(): # message=mathproxyagent.generate_init_message(math_problem), # sender=mathproxyagent, # ) - mathproxyagent.initiate_chat(assistant, problem=math_problem) + res = mathproxyagent.initiate_chat(assistant, problem=math_problem) print(conversations) + print("Chat summary:", res.summary) + print("Chat history:", res.chat_history) def test_add_remove_print(): diff --git a/test/agentchat/test_tool_calls.py b/test/agentchat/test_tool_calls.py index f440a5b26f6c..55e891fc59c5 100644 --- a/test/agentchat/test_tool_calls.py +++ b/test/agentchat/test_tool_calls.py @@ -165,23 +165,29 @@ def test_update_tool(): }, is_remove=False, ) - user_proxy.initiate_chat( + res = user_proxy.initiate_chat( assistant, message="What functions do you know about in the context of this conversation? End your response with 'TERMINATE'.", ) messages1 = assistant.chat_messages[user_proxy][-1]["content"] - print(messages1) + print("Message:", messages1) + print("Summary:", res.summary) + assert ( + messages1.replace("TERMINATE", "") == res.summary + ), "Message (removing TERMINATE) and summary should be the same" assistant.update_tool_signature("greet_user", is_remove=True) - user_proxy.initiate_chat( + res = user_proxy.initiate_chat( assistant, message="What functions do you know about in the context of this conversation? End your response with 'TERMINATE'.", + summary_method="reflection_with_llm", ) messages2 = assistant.chat_messages[user_proxy][-1]["content"] - print(messages2) + print("Message2:", messages2) # The model should know about the function in the context of the conversation assert "greet_user" in messages1 assert "greet_user" not in messages2 + print("Summary2:", res.summary) @pytest.mark.skipif(not TOOL_ENABLED, reason="openai>=1.1.0 not installed") @@ -366,7 +372,7 @@ async def a_echo(str): if __name__ == "__main__": - # test_update_tool() + test_update_tool() # test_eval_math_responses() # test_multi_tool_call() - test_eval_math_responses_api_style_function() + # test_eval_math_responses_api_style_function()