{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": { "slideshow": { "slide_type": "slide" } }, "source": [ "# Solving Multiple Tasks in a Sequence of Chats\n", "\n", "This notebook showcases how to use the new chat interface of conversational agents in AutoGen: initiate_chats, to conduct a series of tasks. This new interface allows one to pass multiple tasks and their corresponding dedicated agents. Once initiate_chats is invoked, the tasks will be solved sequentially, with the summaries from previous tasks provided to subsequent tasks as context, if the `summary_method` argument is specified.\n", "\n", "\\:\\:\\:info Requirements\n", "\n", "Install `pyautogen`:\n", "```bash\n", "pip install pyautogen\n", "```\n", "\n", "For more information, please refer to the [installation guide](/docs/installation/).\n", "\n", "\\:\\:\\:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import autogen\n", "\n", "config_list = autogen.config_list_from_json(env_or_file=\"OAI_CONFIG_LIST\")\n", "llm_config = {\"config_list\": config_list}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\\:\\:\\:tip\n", "\n", "Learn more about the various ways to configure LLM endpoints [here](/docs/topics/llm_configuration).\n", "\n", "\\:\\:\\:" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Example Tasks\n", "Below are three example tasks, with each task being a string of text describing the request. The completion of later tasks requires or benefits from the results of previous tasks.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "financial_tasks = [\n", " \"\"\"What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\"\"\",\n", " \"\"\"Investigate possible reasons of the stock performance.\"\"\",\n", "]\n", "\n", "writing_tasks = [\"\"\"Develop an engaging blog post using any information provided.\"\"\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Scenario 1: Solve the tasks with a series of chats\n", "\n", "The `initiate_chats` interface can take a list of dictionaries as inputs. Each dictionary preserves the following fields: \n", "- `message`: is a string of text (typically a message containing the task);\n", "- `recipient`: a conversable agent dedicated for the task;\n", "- `summary_method`: A string specifying the method to get a summary from the chat. Currently supported choices include `last_msg`, which takes the last message from the chat history as the summary, and `reflection_with_llm`, which uses an LLM call to reflect on the chat history and summarize a takeaway;\n", "- `summary_prompt`: A string specifying how to instruct an LLM-backed agent (either the recipient or the sender in the chat) to reflect on the chat history and derive a summary. If not otherwise specified, a default prompt will be used when `summary_method` is `reflection_with_llm`.\n", "\"Summarize the takeaway from the conversation. Do not add any introductory phrases. If the intended request is NOT properly addressed, please point it out.\"\n", "- `carryover`: A string or a list of string to specify additional context to be used in the chat. With `initiate_chats`, summary from previous chats will be added as carryover. They will be appended after the carryover provided by the user." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[34mStart a new chat with the following message: \n", "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", "\n", "With the following carryover: \n", "\u001b[0m\n", "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", "\n", "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", "\n", "To get the current stock prices of NVDA (NVIDIA Corporation) and TSLA (Tesla, Inc.), along with their performance over the past month in terms of percentage change, we can use a Python library like `yfinance`. This library allows downloading of historical market data from Yahoo Finance.\n", "\n", "Let's proceed in the following steps:\n", "\n", "1. I will provide you a Python script that utilizes the `yfinance` library to fetch the current stock prices and historical data for the past month for both NVDA and TSLA.\n", "2. The script will then calculate the percentage change in the stock prices over the past month.\n", "\n", "Please make sure that you have `yfinance` installed in your Python environment before running the script. You can install it using `pip install yfinance`.\n", "\n", "Here is the Python code to execute:\n", "\n", "```python\n", "# filename: stock_info.py\n", "import yfinance as yf\n", "from datetime import datetime, timedelta\n", "\n", "# Function to get current stock price\n", "def get_stock_price(stock_ticker):\n", " stock = yf.Ticker(stock_ticker)\n", " todays_data = stock.history(period='1d')\n", " return todays_data['Close'][0]\n", "\n", "# Function to calculate percentage change over the past month\n", "def get_percentage_change(stock_ticker):\n", " stock = yf.Ticker(stock_ticker)\n", " end_date = datetime.now()\n", " start_date = end_date - timedelta(days=30)\n", " historical_data = stock.history(start=start_date, end=end_date)\n", " price_end = historical_data['Close'][-1]\n", " price_start = historical_data['Close'][0]\n", " percent_change = ((price_end - price_start)/price_start) * 100\n", " return percent_change\n", "\n", "# Getting the current price and performance for NVDA and TSLA\n", "nvda_price = get_stock_price('NVDA')\n", "tesla_price = get_stock_price('TSLA')\n", "nvda_change = get_percentage_change('NVDA')\n", "tesla_change = get_percentage_change('TSLA')\n", "\n", "# Output the results\n", "print(f\"NVDA (NVIDIA Corporation) stock price: ${nvda_price:.2f}\")\n", "print(f\"TESLA (Tesla, Inc.) stock price: ${tesla_price:.2f}\")\n", "print(f\"NVDA percentage change over past month: {nvda_change:.2f}%\")\n", "print(f\"TESLA percentage change over past month: {tesla_change:.2f}%\")\n", "```\n", "\n", "Please run this script in your environment and share with me the output. I'll then verify the information.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", "NVDA (NVIDIA Corporation) stock price: $722.48\n", "TESLA (Tesla, Inc.) stock price: $188.13\n", "NVDA percentage change over past month: 28.14%\n", "TESLA percentage change over past month: -14.45%\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", "\n", "The script has executed successfully and provided the following results:\n", "\n", "- The current stock price for NVIDIA Corporation (NVDA) is $722.48.\n", "- The current stock price for Tesla, Inc. (TSLA) is $188.13.\n", "- NVDA has experienced a percentage increase of 28.14% over the past month.\n", "- TSLA has experienced a percentage decrease of -14.45% over the past month.\n", "\n", "These results indicate that over the past month, NVIDIA’s stock has seen a significant increase in value, whereas Tesla’s stock has decreased in value. Keep in mind that stock prices and their performance are subject to rapid change and can vary within minutes.\n", "\n", "If you require any further assistance, please let me know. Otherwise, that concludes our task.\n", "\n", "TERMINATE\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[34mStart a new chat with the following message: \n", "Investigate possible reasons of the stock performance.\n", "\n", "With the following carryover: \n", "The script has executed successfully and provided the following results:\n", "\n", "- The current stock price for NVIDIA Corporation (NVDA) is $722.48.\n", "- The current stock price for Tesla, Inc. (TSLA) is $188.13.\n", "- NVDA has experienced a percentage increase of 28.14% over the past month.\n", "- TSLA has experienced a percentage decrease of -14.45% over the past month.\n", "\n", "These results indicate that over the past month, NVIDIA’s stock has seen a significant increase in value, whereas Tesla’s stock has decreased in value. Keep in mind that stock prices and their performance are subject to rapid change and can vary within minutes.\n", "\n", "If you require any further assistance, please let me know. Otherwise, that concludes our task.\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 script has executed successfully and provided the following results:\n", "\n", "- The current stock price for NVIDIA Corporation (NVDA) is $722.48.\n", "- The current stock price for Tesla, Inc. (TSLA) is $188.13.\n", "- NVDA has experienced a percentage increase of 28.14% over the past month.\n", "- TSLA has experienced a percentage decrease of -14.45% over the past month.\n", "\n", "These results indicate that over the past month, NVIDIA’s stock has seen a significant increase in value, whereas Tesla’s stock has decreased in value. Keep in mind that stock prices and their performance are subject to rapid change and can vary within minutes.\n", "\n", "If you require any further assistance, please let me know. Otherwise, that concludes our task.\n", "\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mResearcher\u001b[0m (to User):\n", "\n", "To investigate the possible reasons behind the differing stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), we would need to consider various factors including their recent earnings reports, any significant news events affecting the companies, industry trends, and broader market conditions that might influence the technology and automotive sectors specifically. \n", "\n", "Here is how I plan to carry out the task:\n", "\n", "1. Check the recent earnings reports of both companies to see if there are any indications of better- or worse-than-expected financial health.\n", "2. Look for any major news announcements from the companies, such as product launches, regulatory approvals or actions, partnerships, or other events that could affect investor perceptions.\n", "3. Analyze industry trends that might affect NVIDIA's GPU market and Tesla's electric vehicle market, respectively, such as supply chain disruptions or changes in consumer demand.\n", "4. Consider broader market conditions, such as economic indicators, interest rate changes, or shifts in investor sentiment that might have a sector-specific impact.\n", "\n", "We can start by using a web search to gather this information. Let's begin by searching for recent news about NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA).\n", "\n", "```python\n", "# filename: fetch_stock_news.py\n", "import webbrowser\n", "\n", "# URLs for news about NVDA and TSLA\n", "nvda_news_url = \"https://www.google.com/search?q=NVIDIA+Corporation+NVDA+stock+news\"\n", "tsla_news_url = \"https://www.google.com/search?q=Tesla+Inc+TSLA+stock+news\"\n", "\n", "# Open the URLs in web browsers\n", "webbrowser.open(nvda_news_url)\n", "webbrowser.open(tsla_news_url)\n", "\n", "print(\"Browser tabs with news about NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) should now be open.\")\n", "```\n", "\n", "This script will use the webbrowser module to open tabs in the user's web browser to search for news about the respective companies. Once you have the news articles, we can analyze the content to understand the stock performance reasons.\n", "\n", "Execute this script to proceed with the task. If there is any additional information from recent news that might shed light on the stock performance, please provide it, and we can continue our investigation.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", "\u001b[33mUser\u001b[0m (to Researcher):\n", "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", "Browser tabs with news about NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) should now be open.\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mResearcher\u001b[0m (to User):\n", "\n", "Great, please review the news articles about both NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA) that opened in your browser tabs. Here's what you should look for in the news:\n", "\n", "1. **Financial Reports**: Check for the most recent quarterly earnings reports, any comments about revenue growth or challenges, and guidance for future quarters.\n", "2. **Product Announcements**: See if there have been any announcements regarding new technology, products, collaborations, or significant updates that could have influenced investor attitudes.\n", "3. **Regulatory News**: Determine if there have been any legislative changes or regulations reported that may impact the companies' operations.\n", "4. **Market Trends**: Look for information about the semiconductor market for NVDA and the electric vehicle market for TSLA, as these could be indicators of industry momentum affecting these stocks.\n", "5. **Executive Moves**: See if there have been any major changes in leadership within either company.\n", "6. **Broader Market Events**: Lastly, look for news about broad market trends or economic factors that might indirectly influence the stock performance of these companies.\n", "\n", "After reviewing the news, you should have a clearer idea of what has been driving the stock prices for NVDA and TSLA. If there are multiple factors influencing the stock performances, the recent news should provide insight into which ones are most significant.\n", "\n", "Since I am unable to browse the web, please summarize your findings based on the review of the news articles.\n", "\n", "If the information is too much to process or you're seeking specific answers, please provide a summary of the key news points, and I can assist further in analyzing them.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mUser\u001b[0m (to Researcher):\n", "\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mResearcher\u001b[0m (to User):\n", "\n", "It appears there may have been a misunderstanding. In order to proceed with the investigation into the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), I would need a summary or at least key points from the recent news articles that you've found in your web browser.\n", "\n", "Since I don't have the capability to browse the web or review external sources, I rely on information provided to me. If you've gathered relevant news, please share this information with me. If there are specific headlines, financial report details, announcements, or other pieces of information that you believe could be related to the stock performance, providing those would be the best way to proceed.\n", "\n", "Once I have that information, I can help interpret the data and provide possible reasons for the stock performance based on your summary.\n", "\n", "Alternatively, if you did not find any relevant information in the news articles or need assistance with another task, please let me know how else I may assist you.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mUser\u001b[0m (to Researcher):\n", "\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mResearcher\u001b[0m (to User):\n", "\n", "It seems there is no new information provided to assess the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). Without specific details, I can suggest possible general factors based on common reasons that typically influence stock performance:\n", "\n", "1. **Earnings Reports**: A company's stock often reacts to earnings reports. NVDA might have had stronger-than-expected earnings and outlook, while TSLA might have reported weaker results or provided disappointing guidance.\n", " \n", "2. **Product and Service Developments**: Any new product launches or updates may have affected these stocks. For example, NVDA could be benefiting from new GPU technologies or partnerships in AI or data centers, while TSLA might be facing a slow rollout of new electric vehicle models.\n", "\n", "3. **Supply Chain and Manufacturing**: Given the global supply chain issues, NVDA could have successfully navigated the challenges, whereas TSLA might have struggled due to dependency on components like batteries.\n", "\n", "4. **Regulatory Environment**: Changes in regulations could impact these companies differently, especially given the industries they operate within. This could include things like semiconductor tariffs or EV subsidies and legislation.\n", "\n", "5. **Market Conditions**: Broader market conditions or shifts in investor sentiment toward the tech sector versus the auto sector could be at play. Rising interest rates or economic downturns can also affect investor behavior.\n", "\n", "6. **Strategic Announcements**: Any significant changes in company strategy, such as mergers, acquisitions, or shifts in business focus, might influence stock prices.\n", "\n", "7. **Leadership Changes**: Executive leadership changes can affect investor confidence and stock performance.\n", "\n", "8. **Global Events**: Macro events like geopolitical tensions, economic policies, or major global events can have wide-ranging effects on the stock market.\n", "\n", "9. **Investor Sentiment**: Sometimes the stock market moves based on sentiment, trends, and investor perceptions, which can sometimes be disconnected from a company's fundamental performance.\n", "\n", "Without the latest news or specific information relating to NVDA and TSLA, this is as specific as the analysis can get. To get a more detailed understanding, you would need to look into the recent events specifically related to both companies.\n", "\n", "If there is no further information or analysis needed at this time, that concludes the investigation. Please let me know if there is anything else I can assist with.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mUser\u001b[0m (to Researcher):\n", "\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mResearcher\u001b[0m (to User):\n", "\n", "Since there doesn't seem to be any further information to process or additional requests for assistance, it looks like we've reached the conclusion of this task. If you need help in the future with similar inquiries or any other questions, feel free to reach out. \n", "\n", "TERMINATE\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[34mStart a new chat with the following message: \n", "Develop an engaging blog post using any information provided.\n", "\n", "With the following carryover: \n", "I want to include a figure or a table of data in the blogpost.\n", "The script has executed successfully and provided the following results:\n", "\n", "- The current stock price for NVIDIA Corporation (NVDA) is $722.48.\n", "- The current stock price for Tesla, Inc. (TSLA) is $188.13.\n", "- NVDA has experienced a percentage increase of 28.14% over the past month.\n", "- TSLA has experienced a percentage decrease of -14.45% over the past month.\n", "\n", "These results indicate that over the past month, NVIDIA’s stock has seen a significant increase in value, whereas Tesla’s stock has decreased in value. Keep in mind that stock prices and their performance are subject to rapid change and can vary within minutes.\n", "\n", "If you require any further assistance, please let me know. Otherwise, that concludes our task.\n", "\n", "\n", "To investigate the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), potential factors to consider include recent earnings reports, significant news events, industry trends, market conditions, and broader macroeconomic factors. Without specific external news or data, generalized potential reasons for NVDA's stock increase and TSLA's stock decrease were provided, including earnings performance, product and service developments, supply chain and manufacturing issues, regulatory environment changes, strategic company announcements, leadership changes, and global events. Further detailed analysis requires external news and data, which wasn't supplied during the conversation. The investigation concludes due to a lack of additional information.\u001b[0m\n", "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[33mUser\u001b[0m (to writer):\n", "\n", "Develop an engaging blog post using any information provided.\n", "Context: \n", "I want to include a figure or a table of data in the blogpost.\n", "The script has executed successfully and provided the following results:\n", "\n", "- The current stock price for NVIDIA Corporation (NVDA) is $722.48.\n", "- The current stock price for Tesla, Inc. (TSLA) is $188.13.\n", "- NVDA has experienced a percentage increase of 28.14% over the past month.\n", "- TSLA has experienced a percentage decrease of -14.45% over the past month.\n", "\n", "These results indicate that over the past month, NVIDIA’s stock has seen a significant increase in value, whereas Tesla’s stock has decreased in value. Keep in mind that stock prices and their performance are subject to rapid change and can vary within minutes.\n", "\n", "If you require any further assistance, please let me know. Otherwise, that concludes our task.\n", "\n", "\n", "To investigate the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), potential factors to consider include recent earnings reports, significant news events, industry trends, market conditions, and broader macroeconomic factors. Without specific external news or data, generalized potential reasons for NVDA's stock increase and TSLA's stock decrease were provided, including earnings performance, product and service developments, supply chain and manufacturing issues, regulatory environment changes, strategic company announcements, leadership changes, and global events. Further detailed analysis requires external news and data, which wasn't supplied during the conversation. The investigation concludes due to a lack of additional information.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mwriter\u001b[0m (to User):\n", "\n", "**Roller Coaster Markets: The Ups and Downs of NVDA and TSLA Stocks**\n", "\n", "The stock market is a melting pot of numbers, emotions, predictions, and ever-changing trends. Just when you think you have it figured out, it takes a sharp turn, leaving many investors bewildered in its wake. This turbulent affair is best exemplified by the recent performances of two high-profile tech titans: NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). In the span of a month, we've witnessed a tale of two very different fortunes, with NVDA soaring and TSLA dropping. Let's dive into these twists and turns with the help of some compelling numbers.\n", "\n", "### A Tale of Two Stocks: NVIDIA vs. Tesla\n", "\n", "First, let's set the scene with the main actors: our current stock prices. As of now, NVIDIA stands at a commanding $722.48, while Tesla has taken a more modest position at $188.13. These figures are not just digits on a screen; they represent the bloodline of the companies in the financial markets. They're the instantly-updatable scorecards telling us how the companies are faring in the eyes of investors.\n", "\n", "But the plot thickens when we look at the performance over the past month. NVIDIA has seen a stellar rise, its stock price ballooning by 28.14%. Conversely, Tesla's numbers tell a somber story, with its value deflating by -14.45%. What could be behind this diverging fate of two tech giants? Before we venture a guess, take a look at the data neatly laid out:\n", "\n", "| Company | Current Stock Price | 1-Month Performance |\n", "|---------|---------------------|---------------------|\n", "| NVDA | $722.48 | +28.14% |\n", "| TSLA | $188.13 | -14.45% |\n", "\n", "### Understanding the Tides of Tech Stocks\n", "\n", "Now, to peel back the layers of these statistics, we need to consider a variety of elements that can influence a stock's allure. For NVIDIA, this commanding uptick could be attributed to several factors. Earnings reports beating expectations, breakthroughs in AI and deep learning technologies, or a bullish semiconductor market overall might all play roles in lifting up the NVDA stock.\n", "\n", "Tesla's journey down the stock price hill could be pinned to a wider range of possibilities—perhaps disappointing earnings, production bottlenecks, or even the CEO's latest Twitter escapade could have investors hedging their bets. The automotive industry is also notoriously sensitive to economic shifts, supply chain issues, and regulatory news, all of which could impact TSLA's value.\n", "\n", "### Weighing the Market's Mood Swings\n", "\n", "As smart as it would be to chalk up NVIDIA's rally and Tesla's slouch entirely to company-specific news, let's not discount broader market conditions and macroeconomic factors. Investor sentiment can be swayed by global events, interest rates, and shifts in technology trends. The market's current darling could quickly become tomorrow's underdog if the winds change direction.\n", "\n", "### A Chapter Yet to Finish\n", "\n", "As much as these numbers paint a vivid picture of the present, it's crucial to remember that the markets are dynamic. What we see today could very well be upended by tomorrow's news, a sudden geopolitical shakeup, or even a tweet. For now, though, NVIDIA shareholders can bask in the green glow of their portfolio screens, while Tesla's faithful must buckle up and ride out the storm, hopeful for smoother roads ahead.\n", "\n", "### Final Thoughts\n", "\n", "Always keep in mind, the stock market's story is a continuing saga, not a short tale. The graph that ascends today might dip tomorrow, and the sagging curve might soon find its uplift. Wise is the investor who looks beyond the immediate drama, focusing on the long-term narrative built on solid fundamentals, effective strategies, and a keen eye for the unpredictable ebb and flow of financial tides.\n", "\n", "Stocks are inherently volatile, and while today's data gives us a snapshot, only time will tell the full story. What we can do is watch, analyze, and perhaps, if we're bold enough, place our bets on the outcome of the next chapter in the thrilling manuscript of the stock market.\n", "\n", "Stay tuned, investors. The market's pen is never at rest.\n", "\n", "TERMINATE\n", "\n", "--------------------------------------------------------------------------------\n" ] } ], "source": [ "financial_assistant = autogen.AssistantAgent(\n", " name=\"Financial_assistant\",\n", " llm_config=llm_config,\n", ")\n", "research_assistant = autogen.AssistantAgent(\n", " name=\"Researcher\",\n", " llm_config=llm_config,\n", ")\n", "writer = autogen.AssistantAgent(\n", " name=\"writer\",\n", " llm_config=llm_config,\n", " system_message=\"\"\"\n", " You are a professional writer, known for\n", " your insightful and engaging articles.\n", " You transform complex concepts into compelling narratives.\n", " Reply \"TERMINATE\" in the end when everything is done.\n", " \"\"\",\n", ")\n", "\n", "user = autogen.UserProxyAgent(\n", " name=\"User\",\n", " human_input_mode=\"NEVER\",\n", " is_termination_msg=lambda x: x.get(\"content\", \"\") and x.get(\"content\", \"\").rstrip().endswith(\"TERMINATE\"),\n", " code_execution_config={\n", " \"last_n_messages\": 1,\n", " \"work_dir\": \"tasks\",\n", " \"use_docker\": False,\n", " }, # Please set use_docker=True if docker is available to run the generated code. Using docker is safer than running the generated code directly.\n", ")\n", "\n", "chat_results = user.initiate_chats(\n", " [\n", " {\n", " \"recipient\": financial_assistant,\n", " \"message\": financial_tasks[0],\n", " \"clear_history\": True,\n", " \"silent\": False,\n", " \"summary_method\": \"last_msg\",\n", " },\n", " {\n", " \"recipient\": research_assistant,\n", " \"message\": financial_tasks[1],\n", " \"summary_method\": \"reflection_with_llm\",\n", " },\n", " {\n", " \"recipient\": writer,\n", " \"message\": writing_tasks[0],\n", " \"carryover\": \"I want to include a figure or a table of data in the blogpost.\",\n", " },\n", " ]\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Check chat results\n", "The `initiate_chat` method returns a `ChatResult` object, which is a dataclass object storing information about the chat. Currently, it includes the following attributes:\n", "\n", "- `chat_history`: a list of chat history.\n", "- `summary`: a string of chat summary. A summary is only available if a summary_method is provided when initiating the chat.\n", "- `cost`: a tuple of (total_cost, total_actual_cost), where total_cost is a dictionary of cost information, and total_actual_cost is a dictionary of information on the actual incurred cost with cache.\n", "- `human_input`: a list of strings of human inputs solicited during the chat. (Note that since we are setting `human_input_mode` to `NEVER` in this notebook, this list is always empty.)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*****0th chat*******:\n", "The script has executed successfully and provided the following results:\n", "\n", "- The current stock price for NVIDIA Corporation (NVDA) is $722.48.\n", "- The current stock price for Tesla, Inc. (TSLA) is $188.13.\n", "- NVDA has experienced a percentage increase of 28.14% over the past month.\n", "- TSLA has experienced a percentage decrease of -14.45% over the past month.\n", "\n", "These results indicate that over the past month, NVIDIA’s stock has seen a significant increase in value, whereas Tesla’s stock has decreased in value. Keep in mind that stock prices and their performance are subject to rapid change and can vary within minutes.\n", "\n", "If you require any further assistance, please let me know. Otherwise, that concludes our task.\n", "\n", "\n", "Human input in the middle: []\n", "Conversation cost: ({'total_cost': 0.08859, 'gpt-4': {'cost': 0.08859, 'prompt_tokens': 1597, 'completion_tokens': 678, 'total_tokens': 2275}}, {'total_cost': 0})\n", "\n", "\n", "\n", "*****1th chat*******:\n", "To investigate the stock performance of NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA), potential factors to consider include recent earnings reports, significant news events, industry trends, market conditions, and broader macroeconomic factors. Without specific external news or data, generalized potential reasons for NVDA's stock increase and TSLA's stock decrease were provided, including earnings performance, product and service developments, supply chain and manufacturing issues, regulatory environment changes, strategic company announcements, leadership changes, and global events. Further detailed analysis requires external news and data, which wasn't supplied during the conversation. The investigation concludes due to a lack of additional information.\n", "Human input in the middle: []\n", "Conversation cost: ({'total_cost': 0.36354, 'gpt-4': {'cost': 0.36354, 'prompt_tokens': 8864, 'completion_tokens': 1627, 'total_tokens': 10491}}, {'total_cost': 0})\n", "\n", "\n", "\n", "*****2th chat*******:\n", "**Roller Coaster Markets: The Ups and Downs of NVDA and TSLA Stocks**\n", "\n", "The stock market is a melting pot of numbers, emotions, predictions, and ever-changing trends. Just when you think you have it figured out, it takes a sharp turn, leaving many investors bewildered in its wake. This turbulent affair is best exemplified by the recent performances of two high-profile tech titans: NVIDIA Corporation (NVDA) and Tesla, Inc. (TSLA). In the span of a month, we've witnessed a tale of two very different fortunes, with NVDA soaring and TSLA dropping. Let's dive into these twists and turns with the help of some compelling numbers.\n", "\n", "### A Tale of Two Stocks: NVIDIA vs. Tesla\n", "\n", "First, let's set the scene with the main actors: our current stock prices. As of now, NVIDIA stands at a commanding $722.48, while Tesla has taken a more modest position at $188.13. These figures are not just digits on a screen; they represent the bloodline of the companies in the financial markets. They're the instantly-updatable scorecards telling us how the companies are faring in the eyes of investors.\n", "\n", "But the plot thickens when we look at the performance over the past month. NVIDIA has seen a stellar rise, its stock price ballooning by 28.14%. Conversely, Tesla's numbers tell a somber story, with its value deflating by -14.45%. What could be behind this diverging fate of two tech giants? Before we venture a guess, take a look at the data neatly laid out:\n", "\n", "| Company | Current Stock Price | 1-Month Performance |\n", "|---------|---------------------|---------------------|\n", "| NVDA | $722.48 | +28.14% |\n", "| TSLA | $188.13 | -14.45% |\n", "\n", "### Understanding the Tides of Tech Stocks\n", "\n", "Now, to peel back the layers of these statistics, we need to consider a variety of elements that can influence a stock's allure. For NVIDIA, this commanding uptick could be attributed to several factors. Earnings reports beating expectations, breakthroughs in AI and deep learning technologies, or a bullish semiconductor market overall might all play roles in lifting up the NVDA stock.\n", "\n", "Tesla's journey down the stock price hill could be pinned to a wider range of possibilities—perhaps disappointing earnings, production bottlenecks, or even the CEO's latest Twitter escapade could have investors hedging their bets. The automotive industry is also notoriously sensitive to economic shifts, supply chain issues, and regulatory news, all of which could impact TSLA's value.\n", "\n", "### Weighing the Market's Mood Swings\n", "\n", "As smart as it would be to chalk up NVIDIA's rally and Tesla's slouch entirely to company-specific news, let's not discount broader market conditions and macroeconomic factors. Investor sentiment can be swayed by global events, interest rates, and shifts in technology trends. The market's current darling could quickly become tomorrow's underdog if the winds change direction.\n", "\n", "### A Chapter Yet to Finish\n", "\n", "As much as these numbers paint a vivid picture of the present, it's crucial to remember that the markets are dynamic. What we see today could very well be upended by tomorrow's news, a sudden geopolitical shakeup, or even a tweet. For now, though, NVIDIA shareholders can bask in the green glow of their portfolio screens, while Tesla's faithful must buckle up and ride out the storm, hopeful for smoother roads ahead.\n", "\n", "### Final Thoughts\n", "\n", "Always keep in mind, the stock market's story is a continuing saga, not a short tale. The graph that ascends today might dip tomorrow, and the sagging curve might soon find its uplift. Wise is the investor who looks beyond the immediate drama, focusing on the long-term narrative built on solid fundamentals, effective strategies, and a keen eye for the unpredictable ebb and flow of financial tides.\n", "\n", "Stocks are inherently volatile, and while today's data gives us a snapshot, only time will tell the full story. What we can do is watch, analyze, and perhaps, if we're bold enough, place our bets on the outcome of the next chapter in the thrilling manuscript of the stock market.\n", "\n", "Stay tuned, investors. The market's pen is never at rest.\n", "\n", "\n", "Human input in the middle: []\n", "Conversation cost: ({'total_cost': 0.06447, 'gpt-4': {'cost': 0.06447, 'prompt_tokens': 371, 'completion_tokens': 889, 'total_tokens': 1260}}, {'total_cost': 0})\n", "\n", "\n", "\n" ] } ], "source": [ "for i, chat_res in enumerate(chat_results):\n", " print(f\"*****{i}th chat*******:\")\n", " print(chat_res.summary)\n", " print(\"Human input in the middle:\", chat_res.human_input)\n", " print(\"Conversation cost: \", chat_res.cost)\n", " print(\"\\n\\n\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Scenario 2: With human inputs revising tasks in the middle\n", "\n", "Since AutoGen agents support soliciting human inputs during a chat if `human_input_mode` is specificed properly, the actual task might be revised in the middle of a chat. \n", "\n", "The example below showcases that even if a task is revised in the middle (for the first task, the human user requests to get Microsoft's stock price information as well, in addition to NVDA and TSLA), the `reflection_with_llm`` summary method can still capture it, as it reflects on the whole conversation instead of just the original request." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[34mStart a new chat with the following message: \n", "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", "\n", "With the following carryover: \n", "\u001b[0m\n", "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", "\n", "What are the current stock prices of NVDA and TESLA, and how is the performance over the past month in terms of percentage change?\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", "\n", "To get the current stock prices of NVDA (NVIDIA Corporation) and TSLA (Tesla, Inc.), along with their performance over the past month in terms of percentage change, we can use a Python library like `yfinance`. This library allows downloading of historical market data from Yahoo Finance.\n", "\n", "Let's proceed in the following steps:\n", "\n", "1. I will provide you a Python script that utilizes the `yfinance` library to fetch the current stock prices and historical data for the past month for both NVDA and TSLA.\n", "2. The script will then calculate the percentage change in the stock prices over the past month.\n", "\n", "Please make sure that you have `yfinance` installed in your Python environment before running the script. You can install it using `pip install yfinance`.\n", "\n", "Here is the Python code to execute:\n", "\n", "```python\n", "# filename: stock_info.py\n", "import yfinance as yf\n", "from datetime import datetime, timedelta\n", "\n", "# Function to get current stock price\n", "def get_stock_price(stock_ticker):\n", " stock = yf.Ticker(stock_ticker)\n", " todays_data = stock.history(period='1d')\n", " return todays_data['Close'][0]\n", "\n", "# Function to calculate percentage change over the past month\n", "def get_percentage_change(stock_ticker):\n", " stock = yf.Ticker(stock_ticker)\n", " end_date = datetime.now()\n", " start_date = end_date - timedelta(days=30)\n", " historical_data = stock.history(start=start_date, end=end_date)\n", " price_end = historical_data['Close'][-1]\n", " price_start = historical_data['Close'][0]\n", " percent_change = ((price_end - price_start)/price_start) * 100\n", " return percent_change\n", "\n", "# Getting the current price and performance for NVDA and TSLA\n", "nvda_price = get_stock_price('NVDA')\n", "tesla_price = get_stock_price('TSLA')\n", "nvda_change = get_percentage_change('NVDA')\n", "tesla_change = get_percentage_change('TSLA')\n", "\n", "# Output the results\n", "print(f\"NVDA (NVIDIA Corporation) stock price: ${nvda_price:.2f}\")\n", "print(f\"TESLA (Tesla, Inc.) stock price: ${tesla_price:.2f}\")\n", "print(f\"NVDA percentage change over past month: {nvda_change:.2f}%\")\n", "print(f\"TESLA percentage change over past month: {tesla_change:.2f}%\")\n", "```\n", "\n", "Please run this script in your environment and share with me the output. I'll then verify the information.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n", "\u001b[31m\n", ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", "\u001b[31m\n", ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", "NVDA (NVIDIA Corporation) stock price: $722.48\n", "TESLA (Tesla, Inc.) stock price: $188.13\n", "NVDA percentage change over past month: 28.14%\n", "TESLA percentage change over past month: -14.45%\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", "\n", "The script has executed successfully and provided the following results:\n", "\n", "- The current stock price for NVIDIA Corporation (NVDA) is $722.48.\n", "- The current stock price for Tesla, Inc. (TSLA) is $188.13.\n", "- NVDA has experienced a percentage increase of 28.14% over the past month.\n", "- TSLA has experienced a percentage decrease of -14.45% over the past month.\n", "\n", "These results indicate that over the past month, NVIDIA’s stock has seen a significant increase in value, whereas Tesla’s stock has decreased in value. Keep in mind that stock prices and their performance are subject to rapid change and can vary within minutes.\n", "\n", "If you require any further assistance, please let me know. Otherwise, that concludes our task.\n", "\n", "TERMINATE\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", "\n", "What about microsoft\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", "\n", "To obtain the current stock price and calculate the performance over the past month for Microsoft Corporation (MSFT), I will provide you with an updated Python script that includes MSFT in addition to the previously fetched data for NVDA and TSLA. You can run this script to obtain the necessary information.\n", "\n", "Please execute the following Python code:\n", "\n", "```python\n", "# filename: microsoft_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 for a stock\n", "def get_stock_info(stock_ticker):\n", " stock = yf.Ticker(stock_ticker)\n", " \n", " # Get current stock price\n", " todays_data = stock.history(period='1d')\n", " current_price = todays_data['Close'][0]\n", " \n", " # Calculate percentage change over the past month\n", " end_date = datetime.now()\n", " start_date = end_date - timedelta(days=30)\n", " historical_data = stock.history(start=start_date, end=end_date)\n", " price_end = historical_data['Close'][-1]\n", " price_start = historical_data['Close'][0]\n", " percent_change = ((price_end - price_start)/price_start) * 100\n", " \n", " return current_price, percent_change\n", "\n", "# Getting the current price and performance for MSFT\n", "msft_price, msft_change = get_stock_info('MSFT')\n", "\n", "# Output the results\n", "print(f\"Microsoft (MSFT) stock price: ${msft_price:.2f}\")\n", "print(f\"Microsoft (MSFT) percentage change over past month: {msft_change:.2f}%\")\n", "```\n", "\n", "Please run the provided script in your Python environment and tell me the output. Once I have the results, I can further assist you with the information.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n", "\u001b[31m\n", ">>>>>>>> USING AUTO REPLY...\u001b[0m\n", "\u001b[31m\n", ">>>>>>>> EXECUTING CODE BLOCK 0 (inferred language is python)...\u001b[0m\n", "\u001b[33mUser\u001b[0m (to Financial_assistant):\n", "\n", "exitcode: 0 (execution succeeded)\n", "Code output: \n", "Microsoft (MSFT) stock price: $415.26\n", "Microsoft (MSFT) percentage change over past month: 6.40%\n", "\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mFinancial_assistant\u001b[0m (to User):\n", "\n", "The script has executed successfully and provided the following results for Microsoft Corporation (MSFT):\n", "\n", "- The current stock price for Microsoft (MSFT) is $415.26.\n", "- Microsoft has experienced a percentage increase of 6.40% over the past month.\n", "\n", "This information indicates that Microsoft's stock price has seen a moderate increase in value over the last month. \n", "\n", "Keep in mind that stock prices are volatile and can change frequently throughout trading hours.\n", "\n", "If you need additional assistance or more financial insights, feel free to ask. Otherwise, this concludes our task.\n", "\n", "TERMINATE\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[31m\n", ">>>>>>>> NO HUMAN INPUT RECEIVED.\u001b[0m\n", "\u001b[34m\n", "********************************************************************************\u001b[0m\n", "\u001b[34mStart a new chat with the following message: \n", "Investigate possible reasons of the stock performance.\n", "\n", "With the following carryover: \n", "The current stock prices and recent performance over the past month for NVDA, TSLA, and MSFT are as follows:\n", "\n", "NVDA (NVIDIA Corporation):\n", "- Stock Price: $722.48\n", "- Performance: +28.14% over the past month\n", "\n", "TSLA (Tesla, Inc.):\n", "- Stock Price: $188.13\n", "- Performance: -14.45% over the past month\n", "\n", "MSFT (Microsoft Corporation):\n", "- Stock Price: $415.26\n", "- Performance: +6.40% over the past month\n", "\n", "These results show that NVIDIA has experienced significant growth in its stock value, Microsoft has seen a moderate increase, and Tesla's stock has declined in the past month.\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 recent performance over the past month for NVDA, TSLA, and MSFT are as follows:\n", "\n", "NVDA (NVIDIA Corporation):\n", "- Stock Price: $722.48\n", "- Performance: +28.14% over the past month\n", "\n", "TSLA (Tesla, Inc.):\n", "- Stock Price: $188.13\n", "- Performance: -14.45% over the past month\n", "\n", "MSFT (Microsoft Corporation):\n", "- Stock Price: $415.26\n", "- Performance: +6.40% over the past month\n", "\n", "These results show that NVIDIA has experienced significant growth in its stock value, Microsoft has seen a moderate increase, and Tesla's stock has declined in the past month.\n", "\n", "--------------------------------------------------------------------------------\n", "\u001b[33mResearcher\u001b[0m (to User):\n", "\n", "To investigate the possible reasons behind the stock performance of NVIDIA (NVDA), Tesla (TSLA), and Microsoft (MSFT), we'll consider several factors that typically affect stock prices:\n", "\n", "1. **Company earnings reports**: Strong earnings often lead to stock price increases, while disappointing earnings can lead to price drops.\n", "\n", "2. **Market trends and economic conditions**: Broader market trends can impact individual stocks. For example, a decline in the automotive sector might negatively affect Tesla.\n", "\n", "3. **News and events**: Company-specific news, such as product launches, regulatory approvals, partnerships, lawsuits, or recalls, can impact stock performance.\n", "\n", "4. **Industry developments**: Developments in the technology sector, automotive industry, and other relevant markets can influence the performance of these companies' stocks.\n", "\n", "5. **Investor sentiment**: Changes in investor confidence, often influenced by analysts' ratings or market commentary, can affect stock prices.\n", "\n", "6. **Technological advancements**: For tech companies like NVIDIA and Microsoft, advancements in technology and successful integration of new technologies can positively influence stock prices.\n", "\n", "7. **Legal and regulatory changes**: Changes in government policy, legal cases, or regulatory issues affecting these companies or their industries can impact their stock performance.\n", "\n", "To begin with, we need to check for recent news, earnings reports, analyst ratings, and any significant events that may explain the stock price movements for these companies. To gather this information efficiently, we can use a combination of web scraping for recent news and extracting financial data from reliable sources such as financial news websites, stock market data providers, and the companies' investor relations pages.\n", "\n", "For the purpose of this task, I will suggest a code to scrape recent news headlines from the web that may contain information explaining the performance of NVDA, TSLA, and MSFT stocks. \n", "\n", "```python\n", "# filename: stock_news_scraper.py\n", "import requests\n", "from bs4 import BeautifulSoup\n", "\n", "# Define a function to get news related to a specific stock symbol\n", "def get_stock_news(stock_symbol):\n", " # URL to scrape the news from Yahoo Finance for the provided stock_symbol\n", " url = f'https://finance.yahoo.com/quote/{stock_symbol}/'\n", " \n", " # Perform a GET request to fetch the page content\n", " response = requests.get(url)\n", " \n", " # Check if the request was successful\n", " if response.status_code == 200:\n", " # Parse the page content using BeautifulSoup\n", " soup = BeautifulSoup(response.text, 'html.parser')\n", " \n", " # Find all news items. Yahoo Finance uses