Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save ritwickbhargav80/7b811d177d8df156be727f040c5d1877 to your computer and use it in GitHub Desktop.

Select an option

Save ritwickbhargav80/7b811d177d8df156be727f040c5d1877 to your computer and use it in GitHub Desktop.
AutoGen Dual Agents [News Retrieval & Summarization].ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": []
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/github/ritwickbhargav80/autogen-agent-playground/blob/main/Dual%20Agents/News%20Retrieval%20%26%20Summarization/AutoGen_Dual_Agents_%5BNews_Retrieval_%26_Summarization%5D.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"# Installing AutoGen\n",
"\n",
"AutoGen supports Python version >= 3.8 and < 3.13. In the below cell we are installing `pyautogen` through pip."
],
"metadata": {
"id": "MOULUNtHQqjs"
}
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "fH8GuSrVPnJt",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "e89d7af5-5470-4786-a55b-ff380b860224"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Requirement already satisfied: pyautogen in /usr/local/lib/python3.11/dist-packages (0.9.0)\n",
"Requirement already satisfied: anyio<5.0.0,>=3.0.0 in /usr/local/lib/python3.11/dist-packages (from pyautogen) (4.9.0)\n",
"Requirement already satisfied: asyncer==0.0.8 in /usr/local/lib/python3.11/dist-packages (from pyautogen) (0.0.8)\n",
"Requirement already satisfied: diskcache in /usr/local/lib/python3.11/dist-packages (from pyautogen) (5.6.3)\n",
"Requirement already satisfied: docker in /usr/local/lib/python3.11/dist-packages (from pyautogen) (7.1.0)\n",
"Requirement already satisfied: httpx<1,>=0.28.1 in /usr/local/lib/python3.11/dist-packages (from pyautogen) (0.28.1)\n",
"Requirement already satisfied: packaging in /usr/local/lib/python3.11/dist-packages (from pyautogen) (24.2)\n",
"Requirement already satisfied: pydantic<3,>=2.6.1 in /usr/local/lib/python3.11/dist-packages (from pyautogen) (2.11.5)\n",
"Requirement already satisfied: python-dotenv in /usr/local/lib/python3.11/dist-packages (from pyautogen) (1.1.0)\n",
"Requirement already satisfied: termcolor in /usr/local/lib/python3.11/dist-packages (from pyautogen) (3.1.0)\n",
"Requirement already satisfied: tiktoken in /usr/local/lib/python3.11/dist-packages (from pyautogen) (0.9.0)\n",
"Requirement already satisfied: idna>=2.8 in /usr/local/lib/python3.11/dist-packages (from anyio<5.0.0,>=3.0.0->pyautogen) (3.10)\n",
"Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.11/dist-packages (from anyio<5.0.0,>=3.0.0->pyautogen) (1.3.1)\n",
"Requirement already satisfied: typing_extensions>=4.5 in /usr/local/lib/python3.11/dist-packages (from anyio<5.0.0,>=3.0.0->pyautogen) (4.14.0)\n",
"Requirement already satisfied: certifi in /usr/local/lib/python3.11/dist-packages (from httpx<1,>=0.28.1->pyautogen) (2025.4.26)\n",
"Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.11/dist-packages (from httpx<1,>=0.28.1->pyautogen) (1.0.9)\n",
"Requirement already satisfied: h11>=0.16 in /usr/local/lib/python3.11/dist-packages (from httpcore==1.*->httpx<1,>=0.28.1->pyautogen) (0.16.0)\n",
"Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic<3,>=2.6.1->pyautogen) (0.7.0)\n",
"Requirement already satisfied: pydantic-core==2.33.2 in /usr/local/lib/python3.11/dist-packages (from pydantic<3,>=2.6.1->pyautogen) (2.33.2)\n",
"Requirement already satisfied: typing-inspection>=0.4.0 in /usr/local/lib/python3.11/dist-packages (from pydantic<3,>=2.6.1->pyautogen) (0.4.1)\n",
"Requirement already satisfied: requests>=2.26.0 in /usr/local/lib/python3.11/dist-packages (from docker->pyautogen) (2.32.3)\n",
"Requirement already satisfied: urllib3>=1.26.0 in /usr/local/lib/python3.11/dist-packages (from docker->pyautogen) (2.4.0)\n",
"Requirement already satisfied: regex>=2022.1.18 in /usr/local/lib/python3.11/dist-packages (from tiktoken->pyautogen) (2024.11.6)\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests>=2.26.0->docker->pyautogen) (3.4.2)\n"
]
}
],
"source": [
"!pip install pyautogen"
]
},
{
"cell_type": "markdown",
"source": [
"# Setting Up The Environment\n",
"\n",
"Here we're using the configuration of GPT-3.5 Turbo model from Azure OpenAI and storing the News API key in environment variable.\n",
"\n",
"GPT Configuration is taken from the Google Colab Secrets.\n",
"\n",
"> **NOTE:** We want to prevent the sensitive News API key from directly being exposed to the LLM model. However, we want code generated by LLM to still have access to the News API Key. Thus, environmental variables are best suited."
],
"metadata": {
"id": "Pf97CYzxnJNe"
}
},
{
"cell_type": "code",
"source": [
"from google.colab import userdata\n",
"import os\n",
"\n",
"config_list = [\n",
" {\n",
" \"model\": \"gpt-4\",\n",
" \"base_url\": userdata.get(\"AZURE_OPENAI_ENDPOINT\"),\n",
" \"api_key\": userdata.get(\"AZURE_OPENAI_API_KEY\"),\n",
" \"api_type\": \"azure\",\n",
" \"api_version\": \"2024-02-15-preview\"\n",
" }\n",
"]\n",
"\n",
"os.environ[\"NEWS_API_KEY\"] = \"<NEWSORG_API_KEY>\""
],
"metadata": {
"id": "M_XUczHOPqjA"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"# Creating AI Agents\n",
"\n",
"This is where our agents gets defined. Here we are creating two agents:\n",
"\n",
"1. **AssistantAgent:** It acts as an AI model. It can use LLM to generate responses. It can even write code, check the results and suggest fixes.\n",
"2. **UserProxyAgent:** It can mimic the user's interaction. Here, we have provided the UserProxyAgent the capability to perform code execution. With options like \"code_execution_config\" and \"llm_config\", you can regulate code execution and LLM utilization for response generation."
],
"metadata": {
"id": "A1s04UYNn6Br"
}
},
{
"cell_type": "code",
"source": [
"from autogen import AssistantAgent, UserProxyAgent\n",
"from autogen.coding import LocalCommandLineCodeExecutor\n",
"\n",
"llm_config = {\n",
" \"cache_seed\": 41,\n",
" \"config_list\": config_list,\n",
" \"temperature\": 0\n",
" }\n",
"\n",
"# defining initalizer agent to initiate chat and also responsible for executing code generated by coder agent\n",
"initializer_agent = UserProxyAgent(\n",
" name=\"Initializer\",\n",
" human_input_mode=\"NEVER\",\n",
" max_consecutive_auto_reply=10,\n",
" is_termination_msg=lambda x: x.get(\"content\", \"\").rstrip().endswith(\"TERMINATE\"),\n",
" code_execution_config={ \"executor\": LocalCommandLineCodeExecutor(work_dir=\"coding\") },\n",
" default_auto_reply=\"Reply 'TERMINATE' if the task is done.\"\n",
")\n",
"\n",
"# defining coder agent for generating code\n",
"coder_agent = AssistantAgent(\n",
" name=\"Coder\",\n",
" llm_config=llm_config,\n",
")\n",
"\n",
"# defining summarizer agent to summarize based on the user input and previous agent chat output\n",
"summarizer_agent = AssistantAgent(\n",
" name=\"Summarizer\",\n",
" llm_config=llm_config,\n",
" system_message=\"\"\"\n",
" You are an experienced technology news editor with expertise in analyzing and synthesizing technical information. Your task is to:\n",
"\n",
" 1. Carefully review the provided content\n",
" 2. Create concise, well-structured summary that highlight:\n",
" - Key technological breakthroughs or announcements\n",
" - Impact on the industry or users\n",
" - Notable companies, products, or researchers involved\n",
" - Timeline and context if relevant\n",
"\n",
" Write clear, engaging summary that help readers quickly understand the most important tech news developments.\n",
" Focus on accuracy, relevance, and readability. The newspaper article should be informative enough and concise enough for busy professionals.\n",
"\n",
" Format your output as organized news article with clear headline and essential details.\n",
" Generate a single organized news article with a well-curated catchy headline followed by a two-paragraph summary that synthesizes all 10 news articles into one cohesive overview.\n",
" The summary should contain all the essential information a professional needs to stay informed about the latest tech developments.\n",
" Format the output in Markdown with just the main headline and summarized content paragraphs - no subheadings or additional structure.\n",
"\n",
" Do not provide any supporting text.\n",
" \"\"\",\n",
" human_input_mode=\"NEVER\",\n",
" is_termination_msg=lambda x: x.get(\"content\", \"\").rstrip().endswith(\"TERMINATE\"),\n",
" default_auto_reply=\"Reply 'TERMINATE' if the task is done.\"\n",
")"
],
"metadata": {
"id": "OMYnFyu9P4dL"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"# Setting Up Multi-Agent Collaboration\n",
"\n",
"This is where we setup the multi-agent collaboration using AutoGen's GroupChat functionality. We create a GroupChat with our three specialized agents (initializer, coder, and summarizer), establish a GroupChatManager to orchestrate their interactions, and initiate the conversation with instructions to retrieve and summarize tech news from TechCrunch using the NewsAPI."
],
"metadata": {
"id": "wodqel70oP81"
}
},
{
"cell_type": "code",
"source": [
"from autogen import GroupChat, GroupChatManager\n",
"\n",
"# defining group chat and group chat manager\n",
"groupchat = GroupChat(agents=[initializer_agent, coder_agent, summarizer_agent], messages=[], max_round=10)\n",
"manager = GroupChatManager(groupchat=groupchat, llm_config=llm_config)\n",
"\n",
"# initiation of the chat by initializer user proxy agent\n",
"chat_result = initializer_agent.initiate_chat(\n",
" manager,\n",
" message=\"\"\"\n",
" Do you know about newsapi.org?\n",
" Can you use that to retrieve the top 10 tech news headlines and the content from techcrunch.com?\n",
" Your API KEY for newsapi.org is stored in os.environ[\"NEWS_API_KEY\"].\n",
"\n",
" INSTRUCTIONS:\n",
" - Write code to print just the 10 tech news headlines and content\n",
" - Execute the code which will result in the output with headlines, content getting printed\n",
" - Summarize the tech news in in a professional, concise format and focus on keeping digestible insights\n",
" - After summarizing, say \"TERMINATE\" and then stop responding\n",
" \"\"\"\n",
")"
],
"metadata": {
"id": "ba4zf8xwQIuC",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "05a22beb-bf7e-4058-dc3a-0e50842d7277"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Initializer (to chat_manager):\n",
"\n",
"\n",
" Do you know about newsapi.org?\n",
" Can you use that to retrieve the top 10 tech news headlines and the content from techcrunch.com?\n",
" Your API KEY for newsapi.org is stored in os.environ[\"NEWS_API_KEY\"].\n",
"\n",
" INSTRUCTIONS:\n",
" - Write code to print just the 10 tech news headlines and content\n",
" - Execute the code which will result in the output with headlines, content getting printed\n",
" - Summarize the tech news in in a professional, concise format and focus on keeping digestible insights\n",
" - After summarizing, say \"TERMINATE\" and then stop responding\n",
" \n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Next speaker: Coder\n",
"\n",
"Coder (to chat_manager):\n",
"\n",
"To retrieve the top 10 tech news headlines and content from TechCrunch using the NewsAPI, I will write Python code that utilizes the `requests` library to interact with the NewsAPI endpoint. The code will fetch the data, extract the required information, and print the headlines and content.\n",
"\n",
"Here is the code:\n",
"\n",
"```python\n",
"# filename: fetch_tech_news.py\n",
"import os\n",
"import requests\n",
"\n",
"def fetch_tech_news():\n",
" # Retrieve the API key from environment variables\n",
" api_key = os.environ.get(\"NEWS_API_KEY\")\n",
" if not api_key:\n",
" print(\"Error: NEWS_API_KEY is not set in environment variables.\")\n",
" return\n",
"\n",
" # Define the endpoint and parameters\n",
" url = \"https://newsapi.org/v2/top-headlines\"\n",
" params = {\n",
" \"sources\": \"techcrunch\",\n",
" \"category\": \"technology\",\n",
" \"pageSize\": 10, # Limit to top 10 articles\n",
" \"apiKey\": api_key\n",
" }\n",
"\n",
" # Make the API request\n",
" response = requests.get(url, params=params)\n",
" if response.status_code != 200:\n",
" print(f\"Error: Failed to fetch news (status code {response.status_code})\")\n",
" return\n",
"\n",
" # Parse the response JSON\n",
" data = response.json()\n",
" if \"articles\" not in data:\n",
" print(\"Error: No articles found in the response.\")\n",
" return\n",
"\n",
" # Extract and print the headlines and content\n",
" articles = data[\"articles\"]\n",
" for i, article in enumerate(articles, start=1):\n",
" print(f\"{i}. {article['title']}\")\n",
" print(f\"Content: {article['content']}\\n\")\n",
"\n",
"# Execute the function\n",
"fetch_tech_news()\n",
"```\n",
"\n",
"Please execute the code, and once the output is printed, I will summarize the tech news in a professional and concise format.\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Next speaker: Initializer\n",
"\n",
"\n",
">>>>>>>> EXECUTING CODE BLOCK (inferred language is python)...\n",
"Initializer (to chat_manager):\n",
"\n",
"exitcode: 0 (execution succeeded)\n",
"Code output: Error: Failed to fetch news (status code 400)\n",
"\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Next speaker: Coder\n",
"\n",
"Coder (to chat_manager):\n",
"\n",
"The error indicates that the request to the NewsAPI endpoint failed with a status code of 400, which typically means there is an issue with the request parameters. I will revise the code to ensure the parameters are correct and compatible with the NewsAPI.\n",
"\n",
"Here is the updated code:\n",
"\n",
"```python\n",
"# filename: fetch_tech_news.py\n",
"import os\n",
"import requests\n",
"\n",
"def fetch_tech_news():\n",
" # Retrieve the API key from environment variables\n",
" api_key = os.environ.get(\"NEWS_API_KEY\")\n",
" if not api_key:\n",
" print(\"Error: NEWS_API_KEY is not set in environment variables.\")\n",
" return\n",
"\n",
" # Define the endpoint and parameters\n",
" url = \"https://newsapi.org/v2/everything\"\n",
" params = {\n",
" \"domains\": \"techcrunch.com\", # Specify TechCrunch domain\n",
" \"pageSize\": 10, # Limit to top 10 articles\n",
" \"apiKey\": api_key\n",
" }\n",
"\n",
" # Make the API request\n",
" response = requests.get(url, params=params)\n",
" if response.status_code != 200:\n",
" print(f\"Error: Failed to fetch news (status code {response.status_code})\")\n",
" return\n",
"\n",
" # Parse the response JSON\n",
" data = response.json()\n",
" if \"articles\" not in data:\n",
" print(\"Error: No articles found in the response.\")\n",
" return\n",
"\n",
" # Extract and print the headlines and content\n",
" articles = data[\"articles\"]\n",
" for i, article in enumerate(articles, start=1):\n",
" print(f\"{i}. {article['title']}\")\n",
" print(f\"Content: {article['content']}\\n\")\n",
"\n",
"# Execute the function\n",
"fetch_tech_news()\n",
"```\n",
"\n",
"Please execute this updated code. Once the output is printed, I will summarize the tech news in a professional and concise format.\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Next speaker: Initializer\n",
"\n",
"\n",
">>>>>>>> EXECUTING CODE BLOCK (inferred language is python)...\n",
"Initializer (to chat_manager):\n",
"\n",
"exitcode: 0 (execution succeeded)\n",
"Code output: 1. Superblocks CEO: How to find a unicorn idea by studying AI system prompts | TechCrunch\n",
"Content: Brad Menezes, CEO of enterprise vibe coding startup Superblocks, believes the next crop of billion-dollar startup ideas are hiding in almost plain sight: the system prompts used by existing unicorn A… [+4356 chars]\n",
"\n",
"2. After its data was wiped, KiranaPro's co-founder cannot rule out an external hack | TechCrunch\n",
"Content: Indian grocery delivery startup KiranaPro’s recent data loss story has more holes than Swiss cheese, as the startup remains unclear whether the incident was an internal breach or an external hack.\n",
"L… [+5317 chars]\n",
"\n",
"3. Meet the Finalists: VivaTech's 5 Most Visionary Startups of 2025 | TechCrunch\n",
"Content: Narrowing down the 30 most visionary startups of the year to just five finalists was no easy feat. VivaTech’s Innovation of the Year attracted an extraordinary pool of applicantsstartups tackling mas… [+3582 chars]\n",
"\n",
"4. Building More Scalable GenAI Applications for Startups and Developers | TechCrunch\n",
"Content: In this TechCrunch Sessions: AI event, Oracle shares a rundown of how MySQL HeatWave empowers you in building AI-based solutions in areas such as personal productivity, automating workflows for compl… [+832 chars]\n",
"\n",
"5. Building Your AI Engine: How OpenAI Works with Startups | TechCrunch\n",
"Content: In the rapidly evolving AI landscape, startups can gain a competitive edge by collaborating closely with model providers. Join Hao Sang from OpenAI’s Startups Team demystifies OpenAI’s resources for … [+303 chars]\n",
"\n",
"6. Trump fast-tracks supersonic travel, amid spate of flight-related executive orders | TechCrunch\n",
"Content: President Donald Trump signed an executive order Friday that directs the Federal Aviation Administration to lift the 52-year ban on supersonic flight over U.S. soil, marking a major policy shift that… [+1251 chars]\n",
"\n",
"7. TechCrunch Mobility: How Jony Ive’s LoveFrom helped Rivian and what Uber’s next-generation playbook looks like | TechCrunch\n",
"Content: Welcome back to TechCrunch Mobility your central hub for news and insights on the future of transportation. Sign up here for free just click TechCrunch Mobility!\n",
"Ive spent a decade covering Tesla an… [+7153 chars]\n",
"\n",
"8. Omada Health IPO signals healthier market, avoids 'down-round' trend | TechCrunch\n",
"Content: The IPO market is starting to feel healthier.\n",
"Omada Health, a 14-year-old company providing virtual care for chronic conditions like diabetes and hypertension between office visits, closed its first… [+1813 chars]\n",
"\n",
"9. 2025 will be a 'pivotal year' for Meta’s augmented and virtual reality, says CTO | TechCrunch\n",
"Content: Meta CTO Andrew Boz Bosworth, who was one of the companys first 15 engineers, published a memo earlier this year forecasting that 2025 could be the year of greatness for Reality Labs, the company’s a… [+2299 chars]\n",
"\n",
"10. AI startups take to the stage to pitch their companies to a panel of judges | TechCrunch\n",
"Content: During the So You Think You Can Pitch? event at TechCrunch Sessions: AI, three AI companies Fluix AI, Clicka, and Narada AI had four minutes apiece to impress judges from Initiate Ventures, Felicis, … [+160 chars]\n",
"\n",
"\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Next speaker: Summarizer\n",
"\n",
"Summarizer (to chat_manager):\n",
"\n",
"**AI Innovations, Supersonic Travel, and IPO Milestones Shape Tech Landscape**\n",
"\n",
"Recent developments in technology highlight transformative advancements across AI, transportation, and healthcare. Superblocks CEO Brad Menezes emphasizes the potential of AI system prompts to inspire billion-dollar startup ideas, while OpenAI collaborates with startups to enhance AI engines. At TechCrunch Sessions: AI, companies like Fluix AI and Narada AI showcased their innovations, reflecting the growing momentum in generative AI applications. Meanwhile, Oracle's MySQL HeatWave is enabling scalable AI solutions for developers, and Meta's CTO predicts 2025 as a pivotal year for augmented and virtual reality breakthroughs.\n",
"\n",
"In transportation, President Trump fast-tracked supersonic travel by lifting a decades-old ban, signaling a shift in aviation policy. Rivian's collaboration with Jony Ive's LoveFrom and Uber's next-gen strategies further underscore mobility advancements. On the healthcare front, Omada Health's IPO marks a healthier market trend, avoiding down-round pitfalls. Additionally, VivaTech spotlighted visionary startups tackling global challenges, and KiranaPro's data breach raises cybersecurity concerns. These developments collectively illustrate the dynamic evolution of technology across industries.\n",
"\n",
"TERMINATE\n",
"\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Next speaker: Initializer\n",
"\n",
"\n",
">>>>>>>> TERMINATING RUN (b42c8425-f304-4cec-90ad-68fef157b746): Termination message condition on agent 'Initializer' met\n",
"\n",
">>>>>>>> TERMINATING RUN (8a7097b9-4078-4e1b-b1ab-623e3a8a2d28): No reply generated\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# Displaying the Final News Summary\n",
"\n",
"This is where we extract and display the final generated news summary from the multi-agent conversation."
],
"metadata": {
"id": "mgHGwv6kVFBr"
}
},
{
"cell_type": "code",
"source": [
"from IPython.display import Markdown, display\n",
"\n",
"md_content = chat_result.chat_history[-1]['content'].replace(\"TERMINATE\", \"\")\n",
"display(Markdown(md_content))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 215
},
"id": "LqHXKrcdK2m8",
"outputId": "8fbb99fd-7498-48bc-ee60-877e99d2165c"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<IPython.core.display.Markdown object>"
],
"text/markdown": "**AI Innovations, Supersonic Travel, and IPO Milestones Shape Tech Landscape**\n\nRecent developments in technology highlight transformative advancements across AI, transportation, and healthcare. Superblocks CEO Brad Menezes emphasizes the potential of AI system prompts to inspire billion-dollar startup ideas, while OpenAI collaborates with startups to enhance AI engines. At TechCrunch Sessions: AI, companies like Fluix AI and Narada AI showcased their innovations, reflecting the growing momentum in generative AI applications. Meanwhile, Oracle's MySQL HeatWave is enabling scalable AI solutions for developers, and Meta's CTO predicts 2025 as a pivotal year for augmented and virtual reality breakthroughs.\n\nIn transportation, President Trump fast-tracked supersonic travel by lifting a decades-old ban, signaling a shift in aviation policy. Rivian's collaboration with Jony Ive's LoveFrom and Uber's next-gen strategies further underscore mobility advancements. On the healthcare front, Omada Health's IPO marks a healthier market trend, avoiding down-round pitfalls. Additionally, VivaTech spotlighted visionary startups tackling global challenges, and KiranaPro's data breach raises cybersecurity concerns. These developments collectively illustrate the dynamic evolution of technology across industries.\n\n"
},
"metadata": {}
}
]
},
{
"cell_type": "markdown",
"source": [
"# Voila!\n",
"\n",
"Congratulations on creating your first groupchat of AutoGen agents to retrieve news from techcrunch.com and getting it summarized into professional tech briefings!"
],
"metadata": {
"id": "EuFUUDEEonPa"
}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment