{
 "cells": [
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:35.590004Z",
     "start_time": "2025-03-04T05:17:35.587653Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import os\n",
    "\n",
    "# get OPENAI_API_KEY, TAVILY_API_KEY\n",
    "OPENAI_API_KEY = os.getenv(\"OPENAI_API_KEY\")\n",
    "TAVILY_API_KEY = os.getenv(\"TAVILY_API_KEY\")"
   ],
   "id": "ca6904a1240ac3e7",
   "outputs": [],
   "execution_count": 2
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:35.769172Z",
     "start_time": "2025-03-04T05:17:35.630188Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from typing_extensions import TypedDict\n",
    "from pydantic import BaseModel, Field\n",
    "import operator\n",
    "from typing import Annotated, List, Optional, Literal, Any\n",
    "\n",
    "\n",
    "# defines structure for each section in the report\n",
    "class Section(BaseModel):\n",
    "    name: str = Field(\n",
    "        description=\"Name for a particular section of the report.\",\n",
    "    )\n",
    "    description: str = Field(\n",
    "        description=\"Brief overview of the main topics and concepts to be covered in this section.\",\n",
    "    )\n",
    "    research: bool = Field(\n",
    "        description=\"Whether to perform web search for this section of the report.\"\n",
    "    )\n",
    "    content: str = Field(\n",
    "        description=\"The content for this section.\"\n",
    "    )\n",
    "\n",
    "class Sections(BaseModel):\n",
    "    sections: List[Section] = Field(\n",
    "        description=\"All the Sections of the overall report.\",\n",
    "    )\n",
    "\n",
    "# defines structure for queries generated for deep research\n",
    "class SearchQuery(BaseModel):\n",
    "    search_query: str = Field(None, description=\"Query for web search.\")\n",
    "\n",
    "class Queries(BaseModel):\n",
    "    queries: List[SearchQuery] = Field(\n",
    "        description=\"List of web search queries.\",\n",
    "    )\n",
    "\n",
    "# consists of input topic and output report generated\n",
    "class ReportStateInput(TypedDict):\n",
    "    topic: str # Report topic\n",
    "\n",
    "class ReportStateOutput(TypedDict):\n",
    "    final_report: str # Final report\n",
    "\n",
    "# overall agent state which will be passed and updated in nodes in the graph\n",
    "class ReportState(TypedDict):\n",
    "    topic: str # Report topic\n",
    "    sections: list[Section] # List of report sections\n",
    "    completed_sections: Annotated[list, operator.add] # Send() API\n",
    "    report_sections_from_research: str # completed sections to write final sections\n",
    "    final_report: str # Final report\n",
    "\n",
    "# defines the key structure for sections written using the agent \n",
    "class SectionState(TypedDict):\n",
    "    section: Section # Report section\n",
    "    search_queries: list[SearchQuery] # List of search queries\n",
    "    source_str: str # String of formatted source content from web search\n",
    "    report_sections_from_research: str # completed sections to write final sections\n",
    "    completed_sections: list[Section] # Final key in outer state for Send() API\n",
    "\n",
    "class SectionOutputState(TypedDict):\n",
    "    completed_sections: list[Section] # Final key in outer state for Send() API"
   ],
   "id": "85637a937865ff35",
   "outputs": [],
   "execution_count": 3
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:35.950049Z",
     "start_time": "2025-03-04T05:17:35.772176Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langchain_community.utilities.tavily_search import TavilySearchAPIWrapper\n",
    "import asyncio\n",
    "from dataclasses import asdict, dataclass\n",
    "from typing import Dict, Union, Any\n",
    "\n",
    "# just to handle objects created from LLM reponses\n",
    "@dataclass\n",
    "class SearchQuery:\n",
    "    search_query: str\n",
    "    def to_dict(self) -> Dict[str, Any]:\n",
    "        return asdict(self)\n",
    "\n",
    "tavily_search = TavilySearchAPIWrapper()\n",
    "\n",
    "async def run_search_queries(\n",
    "    search_queries: List[Union[str, SearchQuery]],\n",
    "    num_results: int = 5,\n",
    "    include_raw_content: bool = False\n",
    ") -> List[Dict]:\n",
    "    search_tasks = []\n",
    "    for query in search_queries:\n",
    "        # Handle both string and SearchQuery objects\n",
    "        # Just in case LLM fails to generate queries as:\n",
    "        # class SearchQuery(BaseModel):\n",
    "        #     search_query: str\n",
    "        query_str = query.search_query if isinstance(query, SearchQuery)\\\n",
    "            else str(query) # text query\n",
    "        try:\n",
    "            # get results from tavily async (in parallel) for each search query\n",
    "            search_tasks.append(\n",
    "                tavily_search.raw_results_async(\n",
    "                    query=query_str,\n",
    "                    max_results=num_results,\n",
    "                    search_depth='advanced',\n",
    "                    include_answer=False,\n",
    "                    include_raw_content=include_raw_content\n",
    "                )\n",
    "            )\n",
    "        except Exception as e:\n",
    "            print(f\"Error creating search task for query '{query_str}': {e}\")\n",
    "            continue\n",
    "# Execute all searches concurrently and await results\n",
    "    try:\n",
    "        if not search_tasks:\n",
    "            return []\n",
    "        search_docs = await asyncio.gather(*search_tasks, return_exceptions=True)\n",
    "        # Filter out any exceptions from the results\n",
    "        valid_results = [\n",
    "            doc for doc in search_docs\n",
    "            if not isinstance(doc, Exception)\n",
    "        ]\n",
    "        return valid_results\n",
    "    except Exception as e:\n",
    "        print(f\"Error during search queries: {e}\")\n",
    "        return []"
   ],
   "id": "8fb53e1bed7c7d71",
   "outputs": [],
   "execution_count": 4
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:35.975535Z",
     "start_time": "2025-03-04T05:17:35.955187Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import tiktoken\n",
    "from typing import List, Dict, Union, Any\n",
    "\n",
    "def format_search_query_results(\n",
    "        search_response: Union[Dict[str, Any], List[Any]],\n",
    "        max_tokens: int = 2000,\n",
    "        include_raw_content: bool = False\n",
    ") -> str:\n",
    "    encoding = tiktoken.encoding_for_model(\"gpt-4\")\n",
    "    sources_list = []\n",
    "\n",
    "    # Handle different response formats if search results is a dict\n",
    "    if isinstance(search_response, dict):\n",
    "        if 'results' in search_response:\n",
    "            sources_list.extend(search_response['results'])\n",
    "        else:\n",
    "            sources_list.append(search_response)\n",
    "    # if search results is a list\n",
    "    elif isinstance(search_response, list):\n",
    "        for response in search_response:\n",
    "            if isinstance(response, dict):\n",
    "                if 'results' in response:\n",
    "                    sources_list.extend(response['results'])\n",
    "                else:\n",
    "                    sources_list.append(response)\n",
    "            elif isinstance(response, list):\n",
    "                sources_list.extend(response)\n",
    "\n",
    "    if not sources_list:\n",
    "        return \"No search results found.\"\n",
    "\n",
    "    # Deduplicate by URL and keep unique sources (website urls)\n",
    "    unique_sources = {}\n",
    "    for source in sources_list:\n",
    "        if isinstance(source, dict) and 'url' in source:\n",
    "            if source['url'] not in unique_sources:\n",
    "                unique_sources[source['url']] = source\n",
    "\n",
    "    # Format output\n",
    "    formatted_text = \"Content from web search:\\n\\n\"\n",
    "    for i, source in enumerate(unique_sources.values(), 1):\n",
    "        formatted_text += f\"Source {source.get('title', 'Untitled')}:\\n===\\n\"\n",
    "        formatted_text += f\"URL: {source['url']}\\n===\\n\"\n",
    "        formatted_text += f\"Most relevant content from source: {source.get('content', 'No content available')}\\n===\\n\"\n",
    "\n",
    "        if include_raw_content:\n",
    "            # truncate raw webpage content to a certain number of tokens to prevent exceeding LLM max token window\n",
    "            raw_content = source.get(\"raw_content\", \"\")\n",
    "            if raw_content:\n",
    "                tokens = encoding.encode(raw_content)\n",
    "                truncated_tokens = tokens[:max_tokens]\n",
    "                truncated_content = encoding.decode(truncated_tokens)\n",
    "                formatted_text += f\"Raw Content: {truncated_content}\\n\\n\"\n",
    "\n",
    "\n",
    "    return formatted_text.strip()"
   ],
   "id": "9d83a32a88e90692",
   "outputs": [],
   "execution_count": 5
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:40.267597Z",
     "start_time": "2025-03-04T05:17:35.987769Z"
    }
   },
   "cell_type": "code",
   "source": [
    "docs = await run_search_queries(['deepseek'], include_raw_content=True)\n",
    "output = format_search_query_results(docs, max_tokens=500,\n",
    "                                     include_raw_content=True)\n",
    "print(output)"
   ],
   "id": "f16bedfb4938b839",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Content from web search:\n",
      "\n",
      "Source DeepSeek explained: Everything you need to know - TechTarget:\n",
      "===\n",
      "URL: https://www.techtarget.com/whatis/feature/DeepSeek-explained-Everything-you-need-to-know\n",
      "===\n",
      "Most relevant content from source: DeepSeek, a Chinese AI firm, is disrupting the industry with its low-cost, open source large language models, challenging U.S. tech giants. What is DeepSeek? DeepSeek focuses on developing open source LLMs. The company's first model was released in November 2023. DeepSeek Since the company was created in 2023, DeepSeek has released a series of generative AI models. The low-cost development threatens the business model of U.S. tech companies that have invested billions in AI. In contrast with OpenAI, which is proprietary technology, DeepSeek is open source and free, challenging the revenue model of U.S. companies charging monthly fees for AI services. Being based in China, DeepSeek challenges U.S. technological dominance in AI.\n",
      "===\n",
      "Raw Content: DeepSeek explained: Everything you need to know\n",
      "WhatIs\n",
      "Search the TechTarget Network \n",
      "Browse Definitions :\n",
      "\n",
      "A\n",
      "B\n",
      "C\n",
      "D\n",
      "E\n",
      "F\n",
      "G\n",
      "H\n",
      "I\n",
      "J\n",
      "K\n",
      "L\n",
      "M\n",
      "N\n",
      "O\n",
      "P\n",
      "Q\n",
      "R\n",
      "S\n",
      "T\n",
      "U\n",
      "V\n",
      "W\n",
      "X\n",
      "Y\n",
      "Z\n",
      "#\n",
      "\n",
      "Login Register\n",
      "\n",
      "TechTarget Network\n",
      "Tech Accelerator\n",
      "News\n",
      "2024 IT Salary Survey Results\n",
      "\n",
      "RSS\n",
      "\n",
      "\n",
      "WhatIs\n",
      "\n",
      "\n",
      "Browse Definitions Data analytics and AI\n",
      "Topics View All\n",
      "\n",
      "Business software\n",
      "Cloud computing\n",
      "Computer science\n",
      "Data centers\n",
      "IT management\n",
      "Networking\n",
      "Security\n",
      "Software development\n",
      "\n",
      "Please select a category\n",
      "\n",
      "Topics\n",
      "\n",
      "\n",
      "\n",
      "Browse Features Resources\n",
      "\n",
      "Business strategies\n",
      "Career resources\n",
      "Emerging tech\n",
      "Tech explainers\n",
      "\n",
      "\n",
      "\n",
      "Follow:\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "Home\n",
      "\n",
      "\n",
      "Data analytics and AI\n",
      "\n",
      "\n",
      "Share this item with your network:\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "Tech Accelerator\n",
      "Feature\n",
      "DeepSeek explained: Everything you need to know\n",
      "DeepSeek, a Chinese AI firm, is disrupting the industry with its low-cost, open source large language models, challenging U.S. tech giants.\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "By\n",
      "\n",
      "Sean Michael Kerner\n",
      "\n",
      "Published: 06 Feb 2025\n",
      "In the world of AI, there has been a prevailing notion that developing leading-edge large language models requires significant technical and financial resources. That's one of the main reasons why the U.S. government pledged to support the $500 billion Stargate Project announced by President Donald Trump.\n",
      "Listen to this article. This audio was generated by AI.\n",
      "But Chinese AI development firm DeepSeek has disrupted that notion. On Jan. 20, 2025, DeepSeek released its R1 LLM at a fraction of the cost that other vendors incurred in their own developments. DeepSeek is also providing its R1 models under an open source license, enabling free use.\n",
      "Within days of its release, the DeepSeek AI assistant -- a mobile app that provides a chatbot interface for DeepSeek-R1 -- hit the top of Apple's App Store chart, outranking OpenAI's ChatGPT mobile app. The meteoric rise of DeepSeek in terms of usage and popularity triggered a stock market sell-off on Jan. 27, 2025, as investors cast doubt on the value of large AI vendors based in the U.S., including Nvidia. Microsoft, Meta Platforms, Oracle, Broadcom and other tech giants also saw significant drops as investors reassessed AI valuations.\n",
      "What is DeepSeek?\n",
      "DeepSeek is an\n",
      "\n",
      "Source DeepSeek - Wikipedia:\n",
      "===\n",
      "URL: https://en.wikipedia.org/wiki/DeepSeek\n",
      "===\n",
      "Most relevant content from source: It would not be used for stock trading and would be separate from High-Flyer's financial business.[4] In May 2023, the company was launched as DeepSeek.[2] DeepSeek's development is funded by High-Flyer.[3] After releasing DeepSeek-V2 in May 2024 which offered strong performance for a low price, DeepSeek became known as the catalyst for China's AI model price war. On 29 November 2023, DeepSeek launched DeepSeek LLM (large language model) which scaled up to 67B parameters. In December 2024, DeepSeek-V3 was launched. Benchmark tests showed it outperformed Llama 3.1 and Qwen 2.5 while matching GPT-4o and Claude 3.5 Sonnet.[10][11] DeepSeek's optimization on limited resources highlighted potential limits of US sanctions on China's AI development.[12] \"Meet DeepSeek Chat, China's latest ChatGPT rival with a 67B model\". \"Chinese start-up DeepSeek's new AI model outperforms Meta, OpenAI products\".\n",
      "===\n",
      "Raw Content: Jump to content\n",
      "Main menu\n",
      "Search\n",
      "Donate\n",
      "Create account\n",
      "Log in\n",
      "Personal tools\n",
      "Toggle the table of contents\n",
      "DeepSeek\n",
      "Add languages\n",
      "Article\n",
      "Talk\n",
      "Read\n",
      "Edit\n",
      "View history\n",
      "Tools\n",
      "From Wikipedia, the free encyclopedia\n",
      "DeepSeek\n",
      "Native name 杭州深度求索人工智能基础技术研究有限公司\n",
      "Company type    Private\n",
      "Industry    Information technology\n",
      "Founded May 2023; 1 year ago\n",
      "Founder \n",
      "Liang Wenfeng\n",
      "Headquarters    Hangzhou, Zhejiang, China\n",
      "Key people\n",
      "Liang Wenfeng (CEO)\n",
      "Owner   High-Flyer\n",
      "Website deepseek.com\n",
      "DeepSeek (Chinese: 深度求索; pinyin: Shēndù Qiúsuǒ) is a Chinese artificial intelligence (AI) firm based in Hangzhou. It is founded and backed by the Chinese hedge fund, High-Flyer.\n",
      "It has released open source models named after the firm. They focus on math and coding.\n",
      "Background[edit]\n",
      "In 2015, High-Flyer was set up by three engineers from Zhejiang University who began trading as students during the 2007–2008 financial crisis. The firm made use of machine learning to trade stocks.[1] In 2019 it established High-Flyer AI which was dedicated to research on AI algorithms and its basic applications.[2] By 2021, all of High-Flyer's strategies were using AI which drew comparisons to Renaissance Technologies.[3]\n",
      "In April 2023, High-Flyer announced it would form a new independent body to research artificial general intelligence. It would not be used for stock trading and would be separate from High-Flyer's financial business.[4] In May 2023, the company was launched as DeepSeek.[2] DeepSeek's development is funded by High-Flyer.[3]\n",
      "After releasing DeepSeek-V2 in May 2024 which offered strong performance for a low price, DeepSeek became known as the catalyst for China's AI model price war. It was quickly dubbed the \"Pinduoduo of AI\", and other major tech giants such as ByteDance, Tencent, Baidu, and Alibaba also had to start cutting the price of their AI models. Despite the low price charged by DeepSeek it was profitable compared to its rivals that were\n",
      "\n",
      "Source DeepSeek: The Chinese AI app that has the world talking - BBC:\n",
      "===\n",
      "URL: https://www.bbc.com/news/articles/c5yv5976z9po\n",
      "===\n",
      "Most relevant content from source: An AI-powered chatbot by the Chinese company DeepSeek has quickly become the most downloaded free app on Apple's store, following its January release in the US. The app's sudden popularity, as well as DeepSeek's reportedly low costs compared to those of US-based AI companies, have thrown financial markets into a spin. The company's AI app is available for download in Apple's App Store and online at its website. When the BBC asked the app what happened at Tiananmen Square on 4 June 1989, DeepSeek replied: \"I am sorry, I cannot answer that question. Watch: DeepSeek AI bot responds to BBC question about Tiananmen Square Nvidia shares sink as Chinese AI app spooks markets --------------------------------------------------- 2 hrs ago Technology About the BBC\n",
      "===\n",
      "Raw Content: What is DeepSeek and why has it caused tech stocks to drop?\n",
      "Skip to content\n",
      "\n",
      "Watch Live\n",
      "\n",
      "\n",
      "Home\n",
      "\n",
      "\n",
      "News\n",
      "\n",
      "\n",
      "Sport\n",
      "\n",
      "\n",
      "Business\n",
      "\n",
      "\n",
      "Innovation\n",
      "\n",
      "\n",
      "Culture\n",
      "\n",
      "\n",
      "Arts\n",
      "\n",
      "\n",
      "Travel\n",
      "\n",
      "\n",
      "Earth\n",
      "\n",
      "\n",
      "Video\n",
      "\n",
      "\n",
      "Live\n",
      "\n",
      "\n",
      "Home\n",
      "News\n",
      "Sport\n",
      "Business\n",
      "Innovation\n",
      "Culture\n",
      "Arts\n",
      "Travel\n",
      "Earth\n",
      "Video\n",
      "Live\n",
      "Audio\n",
      "Weather\n",
      "Newsletters\n",
      "What is DeepSeek and why did it cause tech stocks to drop?\n",
      "4 hours ago\n",
      "Brandon Drenon\n",
      "BBC News\n",
      "Getty Images\n",
      "An AI-powered chatbot by the Chinese company DeepSeek has quickly become the most downloaded free app on Apple's store, following its January release in the US.\n",
      "The app's sudden popularity, as well as DeepSeek's reportedly low costs compared to those of US-based AI companies, have thrown financial markets into a spin.\n",
      "Silicon Valley venture capitalist Marc Andreessen has hailed DeepSeek as \"one of the most amazing and impressive breakthroughs\" in AI.\n",
      "The company says its latest AI models are on par with industry-leading models in the US - like ChatGPT - at a fraction of the cost.\n",
      "Researchers behind the app have said it only took $6m (£4.8m) to build it, much less than the billions spent by AI companies in the US.\n",
      "What is DeepSeek?\n",
      "DeepSeek is a Chinese artificial intelligence company founded in Hangzhou, a city in southeastern China.\n",
      "The company was launched in July 2023, but its popular AI assistant app was not released in the US until 10 January, according to Sensor Tower.\n",
      "Who is Liang Wenfeng, DeepSeek's founder?\n",
      "Liang Wenfeng partly funded DeepSeek using money from a hedge fund that he also launched.\n",
      "The 40-year-old, an information and electronic engineering graduate, reportedly built up a store of Nvidia A100 chips, now banned from export to China.\n",
      "Experts believe this collection - which some estimates put at 50,000 - led him to launch DeepSeek, by pairing these chips with cheaper, lower-end ones that are still available to import.\n",
      "Mr Liang was recently seen at a meeting between industry experts and the Chinese premier Li Qiang.\n",
      "Watch: What is DeepSeek? The BBC's AI correspondent explains\n",
      "Who is using it?\n",
      "The company's AI app is available for download in Apple's App Store and online at its website.\n",
      "The service, which is free, has quickly become the top downloaded app on Apple's store, although there\n",
      "\n",
      "Source DeepSeek - AI Assistant - Apps on Google Play:\n",
      "===\n",
      "URL: https://play.google.com/store/apps/details?id=com.deepseek.chat&hl=en_US\n",
      "===\n",
      "Most relevant content from source: DeepSeek - AI Assistant - Apps on Google Play Apps _play_apps_Library & devices _reviews_My Play activity DeepSeek - AI Assistant DeepSeek About this app Experience seamless interaction with DeepSeek's official AI assistant for free! Powered by the groundbreaking DeepSeek-V3 model with over 600B parameters, this state-of-the-art AI leads global standards and matches top-tier international models across multiple benchmarks. Twitter: @deepseek_ai Email: service@deepseek.com Safety starts with understanding how developers collect and share your data. This app may share these data types with third parties This app may collect these data types Deepseek is a serious and powerful contender for other popular AI models. 63 people found this review helpful Incredibly impressive for something relatively new. See all reviews service@deepseek.com About Google Play\n",
      "===\n",
      "Raw Content: DeepSeek - AI Assistant - Apps on Google Play\n",
      "GamesAppsMovies & TVBooksKids\n",
      "google_logo Play\n",
      "Games\n",
      "Apps\n",
      "Movies & TV\n",
      "Books\n",
      "Kids\n",
      "none\n",
      "search\n",
      "help_outline\n",
      "\n",
      "\n",
      "\n",
      "Sign in with Google\n",
      "\n",
      "\n",
      "_play_apps_Library & devices\n",
      "\n",
      "_payment_Payments & subscriptions\n",
      "_reviews_My Play activity\n",
      "_redeem_Offers\n",
      "\n",
      "Play Pass\n",
      "\n",
      "\n",
      "Personalization in Play\n",
      "\n",
      "_settings_Settings\n",
      "\n",
      "Privacy Policy • Terms of Service\n",
      "GamesAppsMovies & TVBooksKids\n",
      "\n",
      "\n",
      "DeepSeek - AI Assistant\n",
      "DeepSeek\n",
      "4.1_star_\n",
      "89.4K reviews\n",
      "10M+\n",
      "Downloads\n",
      "\n",
      "Teen\n",
      "info\n",
      "Install\n",
      "Share\n",
      "Add to wishlist\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "\n",
      "About this app\n",
      "arrow_forward\n",
      "Experience seamless interaction with DeepSeek's official AI assistant for free!\n",
      "Powered by the groundbreaking DeepSeek-V3 model with over 600B parameters, this state-of-the-art AI leads global standards and matches top-tier international models across multiple benchmarks. Enjoy faster speeds and comprehensive features designed to answer your questions and enhance your life efficiently.  \n",
      "Contact us:\n",
      "Twitter: @deepseek_ai\n",
      "Email: service@deepseek.com\n",
      "Updated on\n",
      "Jan 28, 2025\n",
      "2 top free productivity\n",
      "Productivity\n",
      "Data safety\n",
      "arrow_forward\n",
      "Safety starts with understanding how developers collect and share your data. Data privacy and security practices may vary based on your use, region, and age. The developer provided this information and may update it over time.\n",
      "\n",
      "This app may share these data types with third parties\n",
      "Personal info and Device or other IDs\n",
      "\n",
      "This app may collect these data types\n",
      "Personal info, Photos and videos and 2 others\n",
      "\n",
      "Data is encrypted in transit\n",
      "\n",
      "You can request that data be deleted\n",
      "See details\n",
      "Ratings and reviews\n",
      "Ratings and reviews are verified_info_outline_\n",
      "arrow_forward\n",
      "Ratings and reviews are verified_info_outline_\n",
      "_phone_android_Phone\n",
      "_laptop_Chromebook\n",
      "_tablet_android_Tablet\n",
      "4.1\n",
      "87.3K reviews\n",
      "5\n",
      "4\n",
      "3\n",
      "2\n",
      "1\n",
      "\n",
      "Yahya Hrmt\n",
      "more_vert\n",
      "\n",
      "Flag inappropriate\n",
      "\n",
      "January 28, 2025\n",
      "Deepseek is a serious and powerful contender for other popular AI models. I really enjoyed my experience using it. I suggest however that a privacy mode like 'turn off chat activity' be included within the app. Also, OCR capabilities need to be improved because although I provided it with a clear picture of a text, it misspelled some\n",
      "\n",
      "Source DeepSeek:\n",
      "===\n",
      "URL: https://www.deepseek.com/\n",
      "===\n",
      "Most relevant content from source: DeepSeek-R1 is now live and open source, rivaling OpenAI's Model o1. Available on web, app, and API. Click for details. Into\n",
      "===\n"
     ]
    }
   ],
   "execution_count": 6
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:40.275252Z",
     "start_time": "2025-03-04T05:17:40.273140Z"
    }
   },
   "cell_type": "code",
   "source": [
    "# Structure Guideline\n",
    "DEFAULT_REPORT_STRUCTURE = \"\"\"The report structure should focus on breaking-down the user-provided topic\n",
    "                              and building a comprehensive report in markdown using the following format:\n",
    "\n",
    "\n",
    "                              1. Introduction (no web search needed)\n",
    "                                    - Brief overview of the topic area\n",
    "\n",
    "\n",
    "                              2. Main Body Sections:\n",
    "                                    - Each section should focus on a sub-topic of the user-provided topic\n",
    "                                    - Include any key concepts and definitions\n",
    "                                    - Provide real-world examples or case studies where applicable\n",
    "\n",
    "\n",
    "                              3. Conclusion (no web search needed)\n",
    "                                    - Aim for 1 structural element (either a list of table) that distills the main body sections\n",
    "                                    - Provide a concise summary of the report\n",
    "\n",
    "\n",
    "                              When generating the final response in markdown, if there are special characters in the text,\n",
    "                              such as the dollar symbol, ensure they are escaped properly for correct rendering e.g $25.5 should become \\$25.5\n",
    "                          \"\"\""
   ],
   "id": "fc530fc36ef4a3c4",
   "outputs": [],
   "execution_count": 7
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:40.300916Z",
     "start_time": "2025-03-04T05:17:40.298406Z"
    }
   },
   "cell_type": "code",
   "source": [
    "REPORT_PLAN_QUERY_GENERATOR_PROMPT = \"\"\"You are an expert technical report writer, helping to plan a report.\n",
    "\n",
    "The report will be focused on the following topic:\n",
    "{topic}\n",
    "\n",
    "The report structure will follow these guidelines:\n",
    "{report_organization}\n",
    "\n",
    "Your goal is to generate {number_of_queries} search queries that will help gather comprehensive information for planning the report sections.\n",
    "\n",
    "The query should:\n",
    "1. Be related to the topic\n",
    "2. Help satisfy the requirements specified in the report organization\n",
    "\n",
    "Make the query specific enough to find high-quality, relevant sources while covering the depth and breadth needed for the report structure.\n",
    "\"\"\""
   ],
   "id": "d67bc62fc0c16c79",
   "outputs": [],
   "execution_count": 8
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:40.332444Z",
     "start_time": "2025-03-04T05:17:40.329989Z"
    }
   },
   "cell_type": "code",
   "source": [
    "REPORT_PLAN_SECTION_GENERATOR_PROMPT = \"\"\"You are an expert technical report writer, helping to plan a report.\n",
    "\n",
    "Your goal is to generate the outline of the sections of the report.\n",
    "\n",
    "The overall topic of the report is:\n",
    "{topic}\n",
    "\n",
    "The report should follow this organizational structure:\n",
    "{report_organization}\n",
    "\n",
    "You should reflect on this additional context information from web searches to plan the main sections of the report:\n",
    "{search_context}\n",
    "\n",
    "Now, generate the sections of the report. Each section should have the following fields:\n",
    "- Name - Name for this section of the report.\n",
    "- Description - Brief overview of the main topics and concepts to be covered in this section.\n",
    "- Research - Whether to perform web search for this section of the report or not.\n",
    "- Content - The content of the section, which you will leave blank for now.\n",
    "\n",
    "Consider which sections require web search.\n",
    "For example, introduction and conclusion will not require research because they will distill information from other parts of the report.\n",
    "\"\"\""
   ],
   "id": "cda00f28fc53ad38",
   "outputs": [],
   "execution_count": 9
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:42.639347Z",
     "start_time": "2025-03-04T05:17:40.338449Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langchain_openai import ChatOpenAI\n",
    "from langchain_core.messages import HumanMessage, SystemMessage\n",
    "\n",
    "llm = ChatOpenAI(model_name=\"gpt-4o\", temperature=0)\n",
    "\n",
    "async def generate_report_plan(state: ReportState):\n",
    "    \"\"\"Generate the overall plan for building the report\"\"\"\n",
    "    topic = state[\"topic\"]\n",
    "    print('--- Generating Report Plan ---')\n",
    "\n",
    "    report_structure = DEFAULT_REPORT_STRUCTURE\n",
    "    number_of_queries = 8\n",
    "\n",
    "    structured_llm = llm.with_structured_output(Queries)\n",
    "\n",
    "    system_instructions_query = REPORT_PLAN_QUERY_GENERATOR_PROMPT.format(\n",
    "        topic=topic,\n",
    "        report_organization=report_structure,\n",
    "        number_of_queries=number_of_queries\n",
    "    )\n",
    "\n",
    "    try:\n",
    "        # Generate queries\n",
    "        results = structured_llm.invoke([\n",
    "            SystemMessage(content=system_instructions_query),\n",
    "            HumanMessage(content='Generate search queries that will help with planning the sections of the report.')\n",
    "        ])\n",
    "        # Convert SearchQuery objects to strings\n",
    "        query_list = [\n",
    "            query.search_query if isinstance(query, SearchQuery) else str(query)\n",
    "            for query in results.queries\n",
    "        ]\n",
    "        # Search web and ensure we wait for results\n",
    "        search_docs = await run_search_queries(\n",
    "            query_list,\n",
    "            num_results=5,\n",
    "            include_raw_content=False\n",
    "        )\n",
    "        if not search_docs:\n",
    "            print(\"Warning: No search results returned\")\n",
    "            search_context = \"No search results available.\"\n",
    "        else:\n",
    "            search_context = format_search_query_results(\n",
    "                search_docs,\n",
    "                include_raw_content=False\n",
    "            )\n",
    "        # Generate sections\n",
    "        system_instructions_sections = REPORT_PLAN_SECTION_GENERATOR_PROMPT.format(\n",
    "            topic=topic,\n",
    "            report_organization=report_structure,\n",
    "            search_context=search_context\n",
    "        )\n",
    "        structured_llm = llm.with_structured_output(Sections)\n",
    "        report_sections = structured_llm.invoke([\n",
    "            SystemMessage(content=system_instructions_sections),\n",
    "            HumanMessage(content=\"Generate the sections of the report. Your response must include a 'sections' field containing a list of sections. Each section must have: name, description, plan, research, and content fields.\")\n",
    "        ])\n",
    "\n",
    "        print('--- Generating Report Plan Completed ---')\n",
    "        return {\"sections\": report_sections.sections}\n",
    "\n",
    "    except Exception as e:\n",
    "        print(f\"Error in generate_report_plan: {e}\")\n",
    "        return {\"sections\": []}"
   ],
   "id": "133d0ba4f0198d8c",
   "outputs": [],
   "execution_count": 10
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:42.647837Z",
     "start_time": "2025-03-04T05:17:42.644996Z"
    }
   },
   "cell_type": "code",
   "source": [
    "REPORT_SECTION_QUERY_GENERATOR_PROMPT = \"\"\"Your goal is to generate targeted web search queries that will gather comprehensive information for writing a technical report section.\n",
    "\n",
    "Topic for this section:\n",
    "{section_topic}\n",
    "\n",
    "When generating {number_of_queries} search queries, ensure that they:\n",
    "1. Cover different aspects of the topic (e.g., core features, real-world applications, technical architecture)\n",
    "2. Include specific technical terms related to the topic\n",
    "3. Target recent information by including year markers where relevant (e.g., \"2024\")\n",
    "4. Look for comparisons or differentiators from similar technologies/approaches\n",
    "5. Search for both official documentation and practical implementation examples\n",
    "\n",
    "Your queries should be:\n",
    "- Specific enough to avoid generic results\n",
    "- Technical enough to capture detailed implementation information\n",
    "- Diverse enough to cover all aspects of the section plan\n",
    "- Focused on authoritative sources (documentation, technical blogs, academic papers)\"\"\""
   ],
   "id": "b3304e2d2afbc074",
   "outputs": [],
   "execution_count": 11
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:42.664842Z",
     "start_time": "2025-03-04T05:17:42.662040Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def generate_queries(state: SectionState):\n",
    "    \"\"\" Generate search queries for a specific report section \"\"\"\n",
    "\n",
    "    # Get state\n",
    "    section = state[\"section\"]\n",
    "    print('--- Generating Search Queries for Section: '+ section.name +' ---')\n",
    "    # Get configuration\n",
    "    number_of_queries = 5\n",
    "    # Generate queries\n",
    "    structured_llm = llm.with_structured_output(Queries)\n",
    "    # Format system instructions\n",
    "    system_instructions = REPORT_SECTION_QUERY_GENERATOR_PROMPT.format(section_topic=section.description,                                                                       number_of_queries=number_of_queries)\n",
    "    # Generate queries\n",
    "    user_instruction = \"Generate search queries on the provided topic.\"\n",
    "    search_queries = structured_llm.invoke([SystemMessage(content=system_instructions),\n",
    "                                            HumanMessage(content=user_instruction)])\n",
    "\n",
    "    print('--- Generating Search Queries for Section: '+ section.name +' Completed ---')\n",
    "    return {\"search_queries\": search_queries.queries}"
   ],
   "id": "e3dc82144ef0cd0e",
   "outputs": [],
   "execution_count": 12
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:42.681912Z",
     "start_time": "2025-03-04T05:17:42.678848Z"
    }
   },
   "cell_type": "code",
   "source": [
    "async def search_web(state: SectionState):\n",
    "    \"\"\" Search the web for each query, then return a list of raw sources and a formatted string of sources.\"\"\"\n",
    "\n",
    "    # Get state\n",
    "    search_queries = state[\"search_queries\"]\n",
    "    print('--- Searching Web for Queries ---')\n",
    "    # Web search\n",
    "    query_list = [query.search_query for query in search_queries]\n",
    "    search_docs = await run_search_queries(search_queries, num_results=6, include_raw_content=True)\n",
    "    # Deduplicate and format sources\n",
    "    search_context = format_search_query_results(search_docs, max_tokens=4000, include_raw_content=True)\n",
    "\n",
    "    print('--- Searching Web for Queries Completed ---')\n",
    "    return {\"source_str\": search_context}"
   ],
   "id": "8d177e4527afb4be",
   "outputs": [],
   "execution_count": 13
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:42.697105Z",
     "start_time": "2025-03-04T05:17:42.694113Z"
    }
   },
   "cell_type": "code",
   "source": [
    "SECTION_WRITER_PROMPT = \"\"\"You are an expert technical writer crafting one specific section of a technical report.\n",
    "\n",
    "Title for the section:\n",
    "{section_title}\n",
    "\n",
    "Topic for this section:\n",
    "{section_topic}\n",
    "\n",
    "Guidelines for writing:\n",
    "\n",
    "1. Technical Accuracy:\n",
    "- Include specific version numbers\n",
    "- Reference concrete metrics/benchmarks\n",
    "- Cite official documentation\n",
    "- Use technical terminology precisely\n",
    "\n",
    "2. Length and Style:\n",
    "- Strict 150-200 word limit\n",
    "- No marketing language\n",
    "- Technical focus\n",
    "- Write in simple, clear language do not use complex words unnecessarily\n",
    "- Start with your most important insight in **bold**\n",
    "- Use short paragraphs (2-3 sentences max)\n",
    "\n",
    "3. Structure:\n",
    "- Use ## for section title (Markdown format)\n",
    "- Only use ONE structural element IF it helps clarify your point:\n",
    "  * Either a focused table comparing 2-3 key items (using Markdown table syntax)\n",
    "  * Or a short list (3-5 items) using proper Markdown list syntax:\n",
    "    - Use `*` or `-` for unordered lists\n",
    "    - Use `1.` for ordered lists\n",
    "    - Ensure proper indentation and spacing\n",
    "- End with ### Sources that references the below source material formatted as:\n",
    "  * List each source with title, date, and URL\n",
    "  * Format: `- Title : URL`\n",
    "\n",
    "3. Writing Approach:\n",
    "- Include at least one specific example or case study if available\n",
    "- Use concrete details over general statements\n",
    "- Make every word count\n",
    "- No preamble prior to creating the section content\n",
    "- Focus on your single most important point\n",
    "\n",
    "4. Use this source material obtained from web searches to help write the section:\n",
    "{context}\n",
    "\n",
    "5. Quality Checks:\n",
    "- Format should be Markdown\n",
    "- Exactly 150-200 words (excluding title and sources)\n",
    "- Careful use of only ONE structural element (table or bullet list) and only if it helps clarify your point\n",
    "- One specific example / case study if available\n",
    "- Starts with bold insight\n",
    "- No preamble prior to creating the section content\n",
    "- Sources cited at end\n",
    "- If there are special characters in the text, such as the dollar symbol,\n",
    "  ensure they are escaped properly for correct rendering e.g $25.5 should become \\$25.5\n",
    "\"\"\""
   ],
   "id": "ff556fecdadea78f",
   "outputs": [],
   "execution_count": 14
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:42.713861Z",
     "start_time": "2025-03-04T05:17:42.711108Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def write_section(state: SectionState):\n",
    "    \"\"\" Write a section of the report \"\"\"\n",
    "\n",
    "    # Get state\n",
    "    section = state[\"section\"]\n",
    "    source_str = state[\"source_str\"]\n",
    "    print('--- Writing Section : '+ section.name +' ---')\n",
    "    # Format system instructions\n",
    "    system_instructions = SECTION_WRITER_PROMPT.format(section_title=section.name,                                                     section_topic=section.description,                                                       context=source_str)\n",
    "    # Generate section\n",
    "    user_instruction = \"Generate a report section based on the provided sources.\"\n",
    "    section_content = llm.invoke([SystemMessage(content=system_instructions),\n",
    "                                  HumanMessage(content=user_instruction)])\n",
    "    # Write content to the section object\n",
    "    section.content = section_content.content\n",
    "\n",
    "    print('--- Writing Section : '+ section.name +' Completed ---')\n",
    "    # Write the updated section to completed sections\n",
    "    return {\"completed_sections\": [section]}"
   ],
   "id": "fbd306e12068b2f2",
   "outputs": [],
   "execution_count": 15
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:44.679210Z",
     "start_time": "2025-03-04T05:17:42.725390Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langgraph.graph import StateGraph, START, END\n",
    "\n",
    "# Add nodes and edges\n",
    "section_builder = StateGraph(SectionState, output=SectionOutputState)\n",
    "section_builder.add_node(\"generate_queries\", generate_queries)\n",
    "section_builder.add_node(\"search_web\", search_web)\n",
    "section_builder.add_node(\"write_section\", write_section)\n",
    "section_builder.add_edge(START, \"generate_queries\")\n",
    "section_builder.add_edge(\"generate_queries\", \"search_web\")\n",
    "section_builder.add_edge(\"search_web\", \"write_section\")\n",
    "section_builder.add_edge(\"write_section\", END)\n",
    "section_builder_subagent = section_builder.compile()\n",
    "\n",
    "# Display the graph\n",
    "from IPython.display import display, Image\n",
    "Image(section_builder_subagent.get_graph().draw_mermaid_png())"
   ],
   "id": "902a7883b1e95301",
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKsAAAGwCAIAAABZ7AKiAAAAAXNSR0IArs4c6QAAIABJREFUeJztnXd8E+Xjx5/LZTWjTXfSRfeA7hYKVAEpoyAFoQhlioAiokxBEBzsDUIBmVKQUQELiKjML1ORUbqgk0JnutKZ1SR3+f1x/GrF0lZNeNI+937x4pXk7p58krz73HN3z/McptfrAQ3CMGAHoIEMbQDq0AagDm0A6tAGoA5tAOowYQdoA5VcV12uVdbrlA0EodPrtB3g2JVjxmCxGTxznCfE7Zy5sOO0gYka0FCrzXsoz89QqBoInhDnmTN5QlxgyQQdQABA6oC0VKWsJ9hmjKIspZs/3z2A7+YvgJ2rZTBTOyOk05K/nZPVVmisJBx3f76DhxnsRP8JlYJ4mqEofaKSPlX3jrH2CDQ5D0zLgIzfam+elvWOsQ7qI4KdxcDUVmp+OycjSf2gSWI2x4SaXyZkwJXj5UJLVo9oK9hBjEhFsfp0fMnwDxwkbqZSt5mKAT9/K3Xtxu8aYQ47yKvg1Lbi/nF2VvZs2EGAqRhwaluxf6S5bzgSPz/FqW3FYQMs3brxYQcxgfMB105W+IQLkfr5AQCj5zhdP1XZUKOFHQS2AZl363lCPCDSAm4MKIxf7HwlsQJ2CtgGXDtZGRplCTcDLNgcXOLKvXuhGm4MmAb88YssbIAlkwV/TwSLiCHWDy7X6LQkxAzQvn2thpQ+U/cY3JmP/dpD39E2yVdrIAaAZsDTdIWZAIf17qaDszfv8Z0GiAGgGZCfoXD3f9XHQp9++um5c+f+xYYDBgwoLS01QiIgtGRx+YzK4kZjFN4e4Big1+vrZFr3V36SPDMz819sVVZWVltba4Q4z/EJFxZmK4xXfuvAMUBeq1M1EDiOGan8M2fOjBkzJjIyMioqauHCheXl5QCA8PDw0tLS5cuX9+vXDwBAEMTu3bvfeuut3r17DxkyZN26dSqVitp8wIABx44dmz17dq9evW7evDls2DAAwPDhwxcsWGCMtHxzZlWJxhgltws9DMoKVN9vLjRS4cnJyWFhYUlJSUVFRenp6dOnT58yZYpery8vLw8LC0tMTKytrdXr9YcPH46IiLhw4UJBQcHvv/8eHR29ceNGqoTBgwfHxsZu27YtNTVVpVJdvHgxLCwsMzNTLpcbI3BxrjIpvtgYJbcHOP0DlPUEz9xYzcAnT55wOJyYmBgmk+nk5LRu3TqpVAoAsLCwAADweDzqwZAhQ3r16uXp6QkAcHFxGTRo0O3bt6kSMAzjcrmzZ8+mnvL5fACAubk59cDg8MxxRb3OGCW3BzgGkKSezTXWDig8PBzDsOnTp48YMSIiIsLBwcHa2vrvq4lEovPnz69ataqiokKn0ymVSh6P17Q0MDDQSPH+Ds4ELLaxdohtAqcdwBPi9TJjWe/q6nrw4EEnJ6f4+Pjhw4dPmTIlIyPj76tt3Lhx//79Y8aM2bdv37Fjx0aOHNl8qUDw6lqpijoCh3daDJIB5kylMes9Ly+vVatWXbp0ac+ePTiOz507V6P5S1OLIIizZ8++8847Q4cOdXR0tLGxkcvlxsvTOop6gm+0fWKbwDFAYI4LrY21A8rIyEhLSwMA4DgeFhY2c+bM2tpamUxGLaWuhpMkSRAE1SAAACgUihs3brR+odx4l9E1KsLWkWOkwtsEjgE4i4HjjIJMoxwE//bbb/Pnz79y5UpxcXF2dnZiYqJEIhGLxRwOh8PhJCcnZ2dnYxjm4+Pz008/FRcX5+bmzp07NzIysr6+/tmzZzrdi5WTubk5AODWrVv5+fnGCJx1v0HiDq3LELS+wu7+/PwMRRc/w7eup06dqtVqv/7668rKSoFAEBQUtH37dgzDAABTpkw5dOjQzZs3z5w588UXX6xYsWLMmDEODg4zZ8709/dPTU2dPHlyYmLiCwX6+fn17t1769atwcHBu3fvNmzaRhVRVaJx9IRmALQ+QvI63f9OVMS85wDl3U2HvNSG8gJ15HBbWAGgNUEFFkyBBTPjtzpYAUyE22dlAa/B7BgNc8RI7xjrQysK/Hu33EFIp9MNGDCgxUUajYbNbrmbpZub28GDBw0a808SEhISEhJaXCQQCF52NBEUFLRt27YWF2XcrnPx45lbsQwa858Buado8pVqFvelvcQaGlq+bNrY2Mhms6ld+wswGAwjnbmj3veFo8omtFoti9XyD4njePNzTc05u7tk8GR7Lg/m3yH8vsJnvykJ6W/p4tPyd9SJOb2zpPsgSycvyB8cfg+tETMdLx0pN4Ves6+SS0fL3Pz50H9+k6gDqMsER9cWDppob9/F1EfaGoTLx8rdA/juASYxhtAkDKA4sbUoqI+FT1hnHjig05Knd5b4RZj79zKVDvImZAAA4PaPVcV5qsgYa1OoHg3OnZ9lzx4r+o22E7uaUFVnWgYAACoK1bfPySxsWBI3rps/n8vr8L1JywvURbnKu79Wdx9kFT7AEmNAuxDcIiZnAEVhtjLnQcPTDIXEjSu0ZPEtcJ45ky9kEqQppn0BDAMN1Vp5nQ4DIPNug8CS6RkkCOojwpmm9dtTmKgBTZQ+UVZJNYo6QlmvwxiYSk4YsHC5XF5cXOzr62vAMgEAQhFTD4DAgim0wh09eXxzE52ohcLUDTAqKSkp8fHxBw4cgB0EJvDPB9DAhTYAdZA2AMdxR0dH2Ckgg7QBBEGUlJTATgEZpA0w6oXEjgLSBpAkqVBAG7BnIiBtAIPBsLREdAaTJpA2gCTJmhqYszeYAkgbgOO4i4sL7BSQQdoAgiAKCwthp4AM0gbQoG4Ag8GgxgOhDNIGkCRZX18POwVkkDaArgNQN4CuA1A3gAZ1A3Acl0gksFNABmkDCIKgJplCGaQNoEHdABzHnZycYKeADNIGEARRXFwMOwVkkDaABnUD6GuDqBtAXxtE3QAa1A2ge4ujbgDdWxx1A2hQN4AeL4C6AfR4AdQNoK8Nom4AfW0QdQNoUDcAwzB61BjSBuj1enrUGNIGMBgMZ2dn2Ckgg7QBJEkWFRXBTgEZpA2grw6jbgB9dRh1AxgMho2NDewUkEFxRsmxY8cqlUoMw9RqtUqlEolEGIapVKpLly7BjgYBk57w1EhERUXt3bu36Sl103lkGwQo7gXGjx//wkEghmGDBg2ClwgmKBogEAiGDh2K43/OW+/k5BQXFwc1FDRQNICqBpqPFRk8eLBIBPOmfxBB1AA+nz98+HCqGnBycnr77bdhJ4IGogYAAEaOHEm1BqKjo62trWHHgUbbxwLaRlIm1SgNemsH0wAf0nfKTcbN3sEj8zM6W08hBgNY2bPNrdu+m2kb5wNuJFXmpcj5FkwzAYrHjR0XgSWzMEthacsKH2jV+o3NWzPgl4NSSwm3Wy/Ur6B3XBrVxKXDJW+83drdzV5qwKWj5SJ7jm93RFvInYkzOwqGTZdY2rd8r+6WW4LlRWq1iqR//s5Bzxi7e5de2hGmZQOqpRomC93DhE6GhQ2rMEv5sqUt/8yKep3IpuVKg6bDYcZn8s2ZjWqyxaUtG0ASgNAhd82wE1Mv0zCwlu93SVf1qEMbgDq0AahDG4A6tAGoQxuAOrQBqEMbgDq0AahDG4A6tAGoQxsAmREjow5/tx9igE5uwFfLP/31wjnYKVrjww/m9ez5GsQAndyAnJxM2BHaYPDgYd5evhADGKz/Z1VV5eatqx8+vCcQCEfHjlco5DduXj108BQAQKfTHTl64Or/LpaXS21t7d8ePWHE8NEAgIKCp1Omvr1l8+4fko6np6cwGIw3+g2c9eECqht/bW3Nrt1bU1Mf1NXVurt7vTf9o5DgcADA6TMnDn+375P5yzZtWTVo4JszP5hbU1P9zZ6vk5PvNjTU29raj3pr7KhRcQCAN6LCAQDrNyzfuWvzubPXAABXrl44efJIQeFTMzNe/zcGT582i8t9aQc6isrKik1bVqWk3BcKzYe9OUqr1dy4efW7Q0kAgCFvvjblnRljx0yi1ty4aWVeXvae3UdaCf/06ZOp08euXrll7/54M67ZN7sOjxgZFTtq3ORJ01vZSqfT7du/49r1SzU11SKRZd8+A95/72MWq+1+wO3BYAZs2rIqLy975YrNVpbW+7/dWVj4jM1+3sdk955t538+PXf24m7+QQ8e/LFj5yYmk/nm0LdwJhMAsHPX5nlzlqxasflB8t1PFn4YEBDyRr+BJEl+uvhjuUL+6aKvrK1szv54cvGS2d/sPOzu7slisdRqVdLpxE8XfeXi4goA2LBpRVHhs8+XrrGysk7PSNm8ZbWdvfi1yH4nEn8eEzf0448WRkVFAwBu3bq2avXS8eOmLFu2pri4cMvW1XX1tUuXrGz9c61d90VxSeHaNdusrWxOn/n+1u1rQmEbN6lsPTwA4NDhvWPHTPLx7trOrY4dT7h46fxnS1Y6ODgVFT7btGUVm81+b/pH//lHAwbbC1RXy+7e/W3ihGndw3t6eHgt+2x1fV0ttUgul5/98eTYMZMGDx7m5Og8YvjowYOGHTue0LRt3z4DunULBACEhfZwkDhmZz8GANx/8EdObtYnC5aFhnTv0sXto1mf2NtLkk4nUqM81Wr16NjxPSMiHSSOAIBZHy7YsGFnUFCos3OXoUNGeHp4379/BwBgbm4BAODxeBbmFgCAY4kJQUGh703/yMnRuWdE5HvTP758+ZeKivJWPldlZcXDlPvjx71LxZgz+1Mup406o/XwAMMAAMHB4UOih7u7e7Zzq6dP89zdPLuH93R0cOrZ87Utm3ZHD47597/WXzGMASUlRXq93r9bEPWUz+eHhUVQj588ydHpdOFhPZtWDgoKKy0tViqf91zzcPdqWiQQCOXyBgBAZmYGi8UKDgp7npLBCAwIycvLblqza9eApsdmXLMfko5Pey9u9JjoUaMH5T/Nq6+veyEhSZI5OZnNY1CF5+fntvK5CgqfAgA8PbyppxiG+fr5t/lt/KPw7dmqd68+yQ/vrVi55Nr1y/UN9S4urs7OXdqM0U4Msxeoq6sFAJjxeE2vUH9/AAClUgEAmLdgBvb/vZSo/unVNTLqKZvDaV4UtVSpVGi12sFDeje9ThCEldWfY7v4fAH1QKfTLVr8EUEQH836xMXZFcfxZV8s+HtCtVpNEETCoT2Hv9vX/HVZdVUrn0ulUgIAeLw/Z5/m89qeibr94du51cCBQ3k8/tkfT65d9wVBEJG9+86ds9jS0qrNJO3BMAZQv2KjWt30SkPD8/v5Up926Wer3N3+UunZ2dpXVL60BubzBWw2e9+eY81fZDBaqLEyMzPy8/O2bd0XGBhCvVJXWyMRO7ywGpfLZTKZo0bGvTn0reavi1r9HrlcMwBAY2MLn4uqEpqvrNE0/tPwzWl9q8jIvpGRfVUq1Z0/bu3ctXnj5pVrVm1tvcB2YhgDHB2dAQBZ2Y+ofZtCoXjw4A9rG1sAgLu7F4vFqqmpdunrSq1cW1uDYVhTO7FFfH27aTQagiDc3DyoV8rKpCJRC6OXGjWNzaucR4/SpGWlPj5/NrKoSoXBYHh5+ZaXS6nGIwBAq9VWVJabt9qsc3bqAgDIyc3y8/On/igfPU5rqhJ4PD61z6J4kp/LYrL+Ufh2fuRbt655eHpLxA5mZmZv9Bv47NmTixfPt15a+zFMO8DRwcnby/fo0W8fPUorLHy2dv0Xlv9f6QkEgmHDRiUc2nP1fxdLpSUPU+5/sujDdRu+ar3AsNAeXp4+a9Z+npLyQFpWevnKr+/PGH/2x5N/X9PTw5vNZiedTpTJqu7dv7M9fkP38J5FxQU1NdUcDofD4aSmJefmZet0urixk2/cvHrseEJRUUFuXvaatZ/PnjOt9dnlxWJJt26BR44e+OPubzm5WevWf9l8qbe3363b1+rqarVa7dFjB5saH+0P386P/EPS8RUrl6SmJlNf4LXrl4OCw1ovrf0Y7Ghw2dLVGzevnLdgho217YQJU62tbLKyHlGLPvxgnlAg3Ltvu0xWZWVl3btXn2lTZ7VeGo7j69fFf7Pn6y+XL1KrVWKxw6RJ098ePeHva4pElosWfrl//46Ll857e/t9uuiryqqKlauWzP/kg4MHToyLm5L4/aHff7955LszfV7v/9mSlccTEw4m7ObzBf7+QVs372nzDhNLP1u1adPKz79YwOcLhsfECgTClNQHzz/XzPkbNi6PGz9MKDQfOuStwYOG3bv3+z8K386P/MXna3d9s+XL5YsUCrm1tU3PiNemTzPMoeBLxw3evVCtUYOgfv+graFWq7U6rVAgpJ7OX/CBubnFV1+uN1RQE2Hb9vUpqQ8OHjgBO8g/49iaJ1NXuLM4LQwZMFgd8NnSudU1sgXzllpaWv1+5+bDlPtrV39tqMJpjIch9wK7vtny+ZefNDaqHRycFi/6Cu4Fj/YTM6LfyxYtXrQ8MrLvq43zqjHYXqDjIi0rfdkiS5FVmxcOOgSvYi/Qcfn7yQOk6ORXh2nahDYAdWgDUIc2AHVoA1CHNgB1aANQhzYAdWgDUKflc4JcHk4SLU8+RtMRsXbkYHjLi1quAyxsmNJnKuOGonlV1FQ0NipJJvOfzCbn5MXTqDrfdPKIUlGo9g5poW8qRcsG4EwsItrq4uESYwajeRUUZsmfpNR3H/zSy7ytzS5f8kR14XBZcF8rkT2HJ6SvInYwZFJ1Q7W24LF8zDwnjNHyLqDtO0zIa3XJV2vKnqmVDZ1wp0CSpE6na73XcgfFxoELgN7F1yzw9TYmiEfxnqNNpKSkxMfHHzhwAHYQmNDnA1CHNgB1kDYAx3FkbzfcBNIGEARRWFgIOwVkkDYAx3GJRAI7BWSQNoAgCKlUCjsFZJA2AMfx5vefRhOkDSAIori4GHYKyCBtAN0OQN0Auh2AugE0qBuA47iDA9KDBlE3gCCI0tKXDhxGBKQNoEHdgDanNEMBpA3Q6/UajQZ2CsggbQCGYbxm86CiCdIG6PX6pumNkQVpA2hQN4DBYFhbW7djxc4M0gaQJCmTyWCngAzSBtCgbgB9bRB1A+hrg6gbQIO6AXRvcdQNoHuLo24ADeoG0McCqBtAHwugbgCDwWjzPkOdHqQNIEmy9XuNoQDSBtCgbgCO446OjrBTQAZpAwiCKClBfb40pA2gR46ibgA9chR1A+g6AHUD6DoAdQPoOgDRGSWnTZum0WgwDKuvr5fJZK6urhiGyeXypKQk2NEggOJswR4eHj/88AOGPZ9qNzMzEwBga2sLOxccUNwLTJky5YXKX6/XR0ZGwksEExQNcHBw6NOnT/Pdn52d3aRJk6CGggaKBgAAxo0b13zuiJ49e3bp0gVqImggaoCDg0Pfvn2pakAikbzzzjuwE0EDUQOoaoC6LNS7d29XV1fYcaBh3GMBPalvqNU1tbpNCnOefZ/eg2/fvj0yZnxDjQ52nJbBMCAQGfc3Mtb5gIJMxcNrtcW5KhsHjlrRCe9P8mqwkrArCtReocK+scY6WDWKATnJDRm/1UcMtTW3Rn2Olv+OWklUFqtun6l490tXJtvwe23DG5B1rz7rvjxqPOqztBmWhlrtrweKp65wM3jJBnZKqyUf/9FA//wGRyhiBfe3vnuh2uAlG9iA6lKNRk3frtYoCETM4lzD3wjWwAbUV2slbqjPzWQkRPYcxkvuHfxfMLABhA6o5CZ6ZNXhIYGs1PBz36F7RoiGgjYAdWgDUIc2AHVoA1CHNgB1aANQhzYAdWgDUIc2AHVoA1AHUQNWrVn28Zxpr/Idk05/HzWwx6t8x3aCqAE0TdAGoA78cYPl5WW793ydkvpAqVSIxQ6jY8fHDBtFLbpy9cLJk0cKCp+amfH6vzF4+rRZXC4XAFBTU/3Nnq+Tk+82NNTb2tqPemvsqFFx1CZvjRowccLUe/fvPHx4L+nUJYFAcOHCT8e/PySVlojFDnFjJw+JHk6tieP4zVv/27svvqys1Nm5y6KFX/r6dG0l5+gx0cNjRk+eNB0AIJNVjR4T3a/vgC+/WEctjX178NujJ8SNnZyTm7V//47snEydThsa0mPWhwvE4ueTVmIY9vhx+rbt658+e2JjbfvulA8GDhxqzK+2XcCvAzZsXF4lq1yz+utvD5wYNTLu623r7t2/AwC4devaqtVLw8Ii9u09vmjhlzduXtm8dfXzTTatePwo7fOla/bvPT5+3JSd32y5dfsatYjJZJ77KcndzXPr5j1cLvf6jSsbNq2IHhyzfduBYW+O3LBxxbXrl6k1K8rLzp37YdEnX2zZtBvDsLXrvmg9Z0hI94yMFOpxalqynZ19+v8/LSoqqK6WhYVFlJeXzV8wA2Mwtm7es3nT7vqGugULZzbd0A7DsB27Nk+aOH37tgO+vt3Wrv8yPz/POF/qPwC+AflP87qH9/Lz7ebo4DRi+Ogd27/1cPcCABxLTAgKCn1v+kdOjs49IyLfm/7x5cu/VFSUAwBmfbhgw4adQUGhzs5dhg4Z4enhff/+Hao0DMO4HO6M92d36xbIZDJPnjr6WmS/uLGTfbz9qL9RWVUltWZ1jWzpZ6sCAoIDAoJHjYwrLHwml8tbyRkeGvE4M50kSQBAauqDqP7RSqWipLQYAJCW/tDCQuTp4f3juVMYhi1butrd3dPXp+tni1dKpSXXb1yhStDpdJMnTn/ttX6+Pl3nz1vKZDKv/u+C8b/gNoC/F+jdq8/xxAS5vCEiIjIwIMTPz5+a6zEnJ3PKOzOaVgsOCgMA5Ofn2tnZm3HNjiUmpKTcr6urJUmyoaHe0dG5ac1u3QKbHr9QyIz3Zzc9dnbqYmEhoh5biqwAACqVUiAQvCxnSEh3hUKRn5/n6emdkvpg5oy5WVmP0tMfOjo4paYlh4dFYBiWmZnh69NNKBBSm9jbiyUSx7y87IEDhlCvBASEUA8EAoGbq0dh4TNDfIX/CfgGzJu7xN3N89Lln0+eOsrn84fHjJ767kyNRkMQRMKhPYe/29d8ZVl1lU6nW7T4I4IgPpr1iYuzK47jy75Y0HwdPv/5r6hWq7VaLZdr1uL7cs3+fJ0a1dR6x3k7O3tn5y7pGSnW1jbFxYX+/sGZWRlpaQ+jB8ekpSW/M/l9AIBCIc/Nyx4U3atpK61WK6uuapbtz0lsOVyuWm34np//FPgGMJnM2NhxsbHjqqtlFy+dP/DtLpHIcnTseCaTOWpk3JtD32q+ssjSKjMzIz8/b9vWfYGBz/+e6mprJOIW+qdzuVwul6tUGmze2NCQ7o8epVpaWrm7eQoEAn//4O3xG8rLy8rLy0JDelDyBQQEL5i3tPlWZmZ/dp1Vq9VUYxYAoFapqLoHLpDbAQqF4tLlX3Q6HQDAyso6buzkrl0D8vPzGAyGl5dvebnUxcWV+ieROOJMprnQvFHTCAAwN7egSnj0KE1aVvqyP19PT5+0tOSmp/E7N8Xv3PSv04aFRWQ8Sk1NfRAYFAoA6OoXUFpafO36JRcXV3t7MQDAz8+/pKTIwcGpKTaGYdbWNk0lNDUelUplYdEzV1f3fx3GUEA2gMFgbI9fv2nzqty87FJpyeUrv+bkZAYHhwEA4sZOvnHz6rHjCUVFBbl52WvWfj57zjSFQuHp4c1ms5NOJ8pkVffu39kev6F7eM+i4oKamhZGU4yOHX/v/p2DCbuzsh//kJR45swJP1//f502ODi8srLit99vBPgHU1W6h7vX6TPfh4VFUCvEDItVqZTrN3yVm5ddXFx4+Lv9704bk5X1iFrKZDKPHD2Qnp5SUlq865stWq02qn/0vw5jKCDvBczMzNav27F//475C2ZoNBqx2OHdKR9ED44BAPR5vf9nS1YeT0w4mLCbzxf4+wdt3byHz+cDwF+08Mv9+3dcvHTe29vv00VfVVZVrFy1ZP4nHxw8cOKF8vv2iZo7Z/GJk0eOJx6yt5fM/njRgKh//6ULBUJvL9+s7MeB/9+g8w8IPn36+7CQ56d7xWLJls179u7dPnvONBzHXV09Vq3c0rVrAACAIHRmZrzpU2dtj9/wrCDfztZ+2dLVLi7wR60beNxg1r2GZ4+VkW/ZG7BMGgqVnDi3u3DaSgMPHYR/PoAGLvCPBUyKmBH9XrZo8aLlkZF9X22cVwFtwF/Yu+fYyxaZwpGbMaAN+Astnlfo3NDtANShDUAd2gDUoQ1AHdoA1KENQB3aANShDUAd2gDUMbABOA7MhEaY8owGAAwDtk4cgxdrYAMs7FilefD7vnVKqssaScLwk0Ab2AA7Jy7bjN6zGIX6aq2Lr+Fn6zT8rxXcz+JCAuq3cTQ45QWq7Lu1of0tDV6yUWaXL85R3jxbFTHU1sKGzebSzYL/RJ1MU1WsTr9VM2GxC4Nh+Ht1GOsOE+WF6uQrNUU5Kp4AV8pN9A4TeqAnST3OMN3dlp0Tp6FW5xUi6DnU2khvYfR7jqoVBGYEcw1Cenr63r174+PjYQd5KQwGYHGMK6jRe4hw+aa7F2Cy9YRezUG76Yr0h6dB3QAcxyUSCewUkEHaAIIgpFIp7BSQQdoAHMddXFxgp4AM0gYQBFFYWAg7BWSQNgDHcWdn53as2JlB2gCCIIqKimCngAzSBmAYxuOhfmc0pA3Q6/VKpRJ2CsggbQAN6gYwGAy6JYi0ASRJ0i1BpA2gQd0AHMft7Oxgp4AM0gYQBFFRUQE7BWSQNoAGdQMYDEbzaV7RBGkDSJJUKAw252wHBWkDMAyj5pRGGaQN0Ov1xu4oa/ogbQAN6gbQLUHUDaBbgqgbQIO6AXRvcdQNoHuLo24ADeoG0OMFUDeAHi+AugE0qBtA9xZH3QC6tzjqBtAtQdQNoFuCqBvAYDCsrY01Q1NHAWkDSJKUyWSwU0AGaQMYDIaVVee8h1z7QdoAkiSrq1u4XzVSIG0APW4QdQPocYOvYk5RE2Tp0qUXLlzQ6/UYhjX9b29v//PPP8OOBgEU64AJEybY29tT/cSbeosHBgbCzgUHFA3o2rVrSEhI88rPwcFhwoQJUENBA0UDAACTJk0Si8VNT7uRR5PcAAARjElEQVR16xYQEAA1ETQQNcDHxyc4OJh6LJFIxo0bBzsRNBA1AAAwceJEqhrw8/MLCgqCHQcaRp9d3mTx8/MLDAzU6XQTJ06EnQUmBj4aTLlWm/9IwWBgFYVqAxZrJEi9niQJJt4B/gxwFsYxY4i7cMMGWFrasQ1YsiEN+GF7saM338qeY+3AAQD1MbmGBcOAol5XV6VJviyLGm/n6G5msJINZcDJr4s9Q809g8wNUhpNK/x6sDgsytI9wDAjHg3TEky9Xuvsw6d//ldD9LtOyVdrCJ1h/nQNY8DTxwpLe8PfEJXmpWCY9Klh7u1qGAMYGGYlpg14dTi482qrtAYpyjAGVBSrkZ+N5ZXSqCK0alPaC9B0XGgDUIc2AHVoA1CHNgB1aANQhzYAdWgDUIc2AHVoA1CHNgB1aANQp8MYkHT6+6iBPWCnaIMOEfIFOowBIcHhc+csph6fPnNi3YavYCd6ztOnT+LGD6MeNw/ZUegAnSQp3Nw83Nw8qMc5OZmw4/xJ8zDNQ3YUIBjw9OmTDz6c9NOP11ksFgBgy9Y1535KSvj2ZJcubgCAsz+e2rc//kzSlVWrl2IY5uLieuLkkS+WrZWWle7ctfnKpbtz57+fmpoMALhw4ae9e456efrk5Gbt378jOydTp9OGhvSY9eECsbiN+aLLy8t27/k6JfWBUqkQix1Gx46PGTaKWnTl6oWTJ48UFD41M+P1f2Pw9GmzuFwutejChZ+Of39IKi0Rix3ixk4eEj084dCeQ4f3AQDeiAqf9eF8BgOnQlLrn//5zImTR0pLi83MeBE9es/8YJ6VlTUAYGTswEkTppVXlF393wWVShkQEPLJ/GXW1jZG/uJbBsJewNbWXqPR5OZmUU9T05Lt7OzT0h9ST9PTHwYHhzOZTBaLlf80Lyc3a92a7V27/jmka9WKLd5evv3fGHQm6bK7m2d5edn8BTMwBmPr5j2bN+2ub6hbsHCmRqNpPcOGjcurZJVrVn/97YETo0bGfb1t3b37dwAAt25dW7V6aVhYxL69xxct/PLGzSubt66mNrl+48qGTSuiB8ds33Zg2JsjN2xcce365bix74waFWdnZ38m6XLMsNjmb3Hx4vlNm1cNGvjmt/u/X/HVxpzcrCWfzaH65TKZzOPfH3J1dT9+9Ny3+0/k5mZ9d2S/ob/m9gLBAIFAILaXpGekAACqq2UlJUXRg2OaDEhLfxgWGgEA0ANQWlq8+NPlQUGhFhai5pvjTCaLzbawEOE4/uO5UxiGLVu62t3d09en62eLV0qlJddvXGk9Q/7TvO7hvfx8uzk6OI0YPnrH9m893L0AAMcSE4KCQt+b/pGTo3PPiMj3pn98+fIvFRXlAICTp46+FtkvbuxkH2+/t0dPiBs7WVZVyeVyOWwOhmEWFiIO5y/95E6eOhoZ2XfC+HednbsEB4d9/NHCnNysjIxUamkXF7ch0cOZTKadnX2P7r2zsx8b4ZtuF3BagqGhPajvIjUt2cvTJyw0Ij39IQCgpLS4srIiPCyCWs3ZuYuFuUXrRWVmZvj6dBMKhNRTe3uxROKYl5fd+la9e/U5npiw65utD5LvarVaPz9/KytrkiRzcjLDw3o2rRYcFAYAyM/Ppfb3Pj5dmxbNeH92bOxLRxvqdLon+bld/f6suqht857kUE/d3b2aFgmF5vUN9a0HNh5wWoKhoT3id2wEAKSmPggMDPXx6SqTVZWXl6WnP7S3Fzs7d6FW4/MFbRalUMhz87IHRfdqekWr1cqqq1rfat7cJe5unpcu/3zy1FE+nz88ZvTUd2dqNBqCIBIO7Tn83b7mK8uqq9RqtVar5XLbO05DpVbp9Xoe788u/TwzHgBApXo+hekLFQbETpaQDAjpXldXW1RUkJL6YPrUWRwOx9vbLz0jJTU1mdoFtB8+XxAQELxg3tLmL5qZtTFbMJPJjI0dFxs7rrpadvHS+QPf7hKJLEfHjmcymaNGxr059K3mK4ssrbhcLpfLVSrbe1MiM64Zg8Fovr5CqWin068YOHsBS0srd3fPW7evFRY+CwgIBgAE+Aenpz9MS38YFtYuA5qGOvn5+ZeUFDk4OLm4uFL/MAxrvV0tl8svXf5Fp9MBAKysrOPGTu7aNSA/P4/BYHh5+ZaXS5uKkkgccSbTXGgOAPD09ElLS24qJH7npvidm172Fkwm09PDm2rrUDx+lNa0LzApoJ0RCg3pcebsiS5d3KhWXoB/8B93b0ulJWGhbZ9TEwqEeXnZuXnZdXW1McNiVSrl+g1f5eZlFxcXHv5u/7vTxmRlPWplcwzDtsev37R5VW5edqm05PKVX3NyMoODwwAAcWMn37h59djxhKKigty87DVrP589Zxp1P7LRsePv3b9zMGF3VvbjH5ISz5w54efrDwAQCIQyWVVa2sOysr/csObttyfeuXPrxMkjZWXShyn343duCgoK9TU9A6CdEQoL7XHqh2Mjho+mnvr7B5WXl3l5+jRv9r+MkSPj1q77Yvacacu/2tije68tm/fs3bt99pxpOI67unqsWrml+dHj3+Hz+evX7di/f8f8BTM0Go1Y7PDulA+iB8cAAPq83v+zJSuPJyYcTNjN5wv8/YO2bt5D3ZOwb5+ouXMWnzh55HjiIXt7yeyPFw2IigYARPWPvnDxpwULZ44fN8XCwrLpXQZERTc2qk+cPLJv/w4+X/BaZL8ZM+YY4pszMIYZObp/Wf5bs7pweLghItG0zf2LVSIbZsgbbf+1tEmHuS5AYyQ6zHWBf0rMiH4vW7R40fLIyL6vNo7p0mkNOHb03MsWmbX7sB4FOq0BTWcJaVqHbgegDm0A6tAGoA5tAOrQBqAObQDq0AagDm0A6hjGAJEtm55F9lXC5jBwpmG+ccMYQJL6eplhprejaQ9V0kaByDBXYg1jgJOnWUMNbcCrAwN6K7FhZhg3jAG9Y2xuJZWTJHK3LYPC/YtVNo4cka1hDDDY3OLKBuL4hsKoCRJrCdcgBdL8Ha2GTL4sMxNgkTEGG2BkyPsLqOTEjaTK/AyFe6Cwoboj7BT0epIkGXgH6NqE46ChWofhwL+Xecgblu3Yor0Y/o6TWg0pK20kdIYt1Sjk5eWdPn164cKFsIO0C74Fbm7FYuAGPugyfP8AFpshdu0YXTAq5USDrsDRs2OkNRL0GSHUQdoADMN4vDZGF3V6kDZAr9crlUrYKSCDtAE4jjs6OsJOARmkDSAIoqSkBHYKyCBtAI7j9vb2sFNABmkDCIIoLy+HnQIySBtAg7oBDAaDGheMMkgbQJIkNTcAyiBtAI7jEkkbMw92epA2gCAIqVTajhU7M0gbQIO6AQwGw9nZGXYKyCBtAEmSRUVFsFNABmkDaFA3gD4WQN0A+lgAdQNoUDeAwWBYWhqy321HBGkDSJKsqamBnQIySBtAg7oBdE9R1A2ge4qibgBdB6BuAF0HoG4ADeoG0OMFUDeAHi+AugE0qBuA47hYLIadAjJIG0AQRFlZGewUkEHaALp/AOoG0P0DUDcAwzAMQ30uVKQN0Ov1Bp9Iq8OBtAE0tAE0aBvAYDDs7Oxgp4AM0gaQJFlRUQE7BWQMP6eo6TNlypS0tLQXjgL0en1ycjK8UNBAsQ6YMWOGSCTCmqHX68PCwmDnggOKBvTq1cvb27t55WdlZTV58mSooaCBogHUjsDCwqLpqYeHx+uvvw41ETQQNaBnz57e3t7UY3Nz8/Hjx8NOBA1EDQAAvPPOO0KhEADg5eXVt29f2HGgga4BvXr18vPzEwgEEyZMgJ0FJh3jaLAkT1VeqK6T6RR1BJPNMNQNTBRKRbVM5uzsYpDSAABcHs42w/gWTGsxy9mbJxAZ/vYNBsekDSh5okq9UVeYqeCJOBxzLpPJYHJwJsd0v1Y9SWrVhK6RAEBfU9LAE+J+EcKw/iY9ONVEDZBJG6+dkqlUeoG1QGjHw5kdcm+lqm9U1qil2dURQ6y7DzJRD0zRgGs/yJ6kye08rIS2nWFAj16vr8itIbWaQRPtrMUs2HFexOQMOL2zlMA5Nl1EsIMYGEJD5N8rfeNtG88gAewsf8G0DDi9qxTnC8ztOu1cv4Up0qix1o7uJnRvKxMyIHFTEd9O1Dlq/lYoSpVGvilyDzCVmsBUWliXjlVwRIJO//MDAJyDJFe/r6o3mTtymoQBOckNDfWYpaM57CCvCNdwyYXvTKVfgkkYcCOpSihG5ecHADA5TBJjpVw3iSmM4BuQcr1GaMdnmfB5HmNg627527lq2CmASRiQeU9h7Wq6x34b48clndto8GIZOMPOQ/TQBKoByAZIn6k0jXomqwPc/dvgmFlwcx7Av8MJZAPy0xQ8y87f/m8RviW3uqxRoybhxoC8962u0AptjLULIAjd5esHU9Iv1dRKRRb2fXqP690jFgBQXvF0Y3zcB+/uuvl74tPCVAbGCPIfMHzIPBzHAQD5BSmnf9pUUfHUytJhyICZRspGYedmXpSl8AgWGvVdWgeyAaVPVB69rI1U+E8X4v+4f2ZkzCI3l8CcJ3fPnt+CM5gR4SNwnAkAOPvL1tiYRe+6bMx9cm9PwkduXYKDAwao1PKEowslYq85MxMIQnv+4s6GhiojxQMA6LSgrlpnvPLbA8y9AKHT6zSkkRoBKrX8tz9O9X1tYveQN22snXv3iA0PefPqzcNNKwR16+/qEggA8PLobm3pWFySCQDIzLmtVNWPHPaJg9jL2bFr3Kgvlap6Y8SjwNm4vA5hAxR1OnNrjpEKL5XmEKTO26NH0ysebqGy6uLGxufTx0nEXk2LuFyhSt1A7SBYLK7Yzp16XWRhZ2FuxEFFLA6zUQX5rDzMvQCTjankxvoLoH7p3d9+CP4cGaIHADTIZdQTFvMv8umBntqKzeI2f53DMWJDlSRIkkDYAJ6QqVERer3eGIP4uVw+AGD82ysk9h7NX7ewsK+re+m9htksrlotb/6KStVg8GxN6BoJoT3kphjkt+cKcF0jweIaPoZE7IXjLLm82s4/inpFrqgBAGMx2a1sZWfbhSB1ZRX51I5AWp7XVGcYA51WJxAZaz/YTiAbIO5i1qjUGsMAM66gV/eRF/63j88XOTt2raktO/vLVpGF3bSJW1rZytc7ksPmnflp09BBswhC+/OlbwQCK4NnawLTk1bi1ox8BUA2wNmbm5WiFFgZpcdETPQcM67w/MUd9Q1VQoF1V5/Xhwxs4/hewBdNGb/hzM9bdu5/31IkGTrgwxu/J1INCINDEmRNqdLJC/JUVpB7iNRXa09sKfGMRPG2j7VSOQuo3pwKeUJDyGeFza1Yti4cVX0j3BhQaFQ0du0Bv6cQ/GuyYW9YXD1Z7RLy0spw844JNXUtzPtIkgTQ6xl4yx9hybwkPs+ixUX/ggNH5j8tSG1xEd/MQqGqa3HRZ/NO83gt93tQ1jXqlI1u/vBnMDGJfoKntpdwLM2FNi0fedfWlZMk8ffXtdpGPQBsVsttaZGFmMEwWA1XX1+lIzQtLtJo1Gw2t8VFrWQoSJZGjbFy8oJ/VcwkDKit1Pz6XZXYzx52kFeEvErJYaoGjoNfAcBvB1CIbNlh/YUlGS89UdOZaFRoq/KrTeTnNxUDAABewULPQG7p40rYQYyLXq9/9qB00lKDjVX975jEXqCJ9Nv1GX8oJX62sIMYBVV945M/Sj9Y78FkmdBUtqZlAADg0e/196/WiX1sOHzIJ8sMS620QV5RP3GxCf31U5icAQCAimL1z9+Ws/kcOy+rTtCFsK5MUfmk2qe78PURxuoL818wRQMoHv1ef+9SDYPFEtryhLY8JruDqaCsVddXKvU6LV+A9Yu1Mbc2uVHDFKZrAEV+ujz7gaIwS8HmMxkYA2fjbD6b0LZwesAUwIBeo9LpNASXh+tJ0jOY7xnIt5ZAvvrXOqZuQBM1lRplHaGo12k1pLbRRDNzuDhXwOCb4wIRkyeEf761PXQYA2iMhKmcD6CBBW0A6tAGoA5tAOrQBqAObQDq/B+BXFsXaVUQ9wAAAABJRU5ErkJggg==",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 16
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:44.694494Z",
     "start_time": "2025-03-04T05:17:44.690754Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langgraph.constants import Send\n",
    "\n",
    "\n",
    "def parallelize_section_writing(state: ReportState):\n",
    "    \"\"\" This is the \"map\" step when we kick off web research for some sections of the report in parallel and then write the section\"\"\"\n",
    "\n",
    "\n",
    "    # Kick off section writing in parallel via Send() API for any sections that require research\n",
    "    return [\n",
    "        Send(\"section_builder_with_web_search\", # name of the subagent node\n",
    "             {\"section\": s})\n",
    "        for s in state[\"sections\"]\n",
    "        if s.research\n",
    "    ]"
   ],
   "id": "ab691116434a6a0b",
   "outputs": [],
   "execution_count": 17
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:44.715325Z",
     "start_time": "2025-03-04T05:17:44.711228Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def format_sections(sections: list[Section]) -> str:\n",
    "    \"\"\" Format a list of report sections into a single text string \"\"\"\n",
    "    formatted_str = \"\"\n",
    "    for idx, section in enumerate(sections, 1):\n",
    "        formatted_str += f\"\"\"\n",
    "{'='*60}\n",
    "Section {idx}: {section.name}\n",
    "{'='*60}\n",
    "Description:\n",
    "{section.description}\n",
    "Requires Research:\n",
    "{section.research}\n",
    "\n",
    "Content:\n",
    "{section.content if section.content else '[Not yet written]'}\n",
    "\n",
    "\"\"\"\n",
    "    return formatted_str\n",
    "\n",
    "def format_completed_sections(state: ReportState):\n",
    "    \"\"\" Gather completed sections from research and format them as context for writing the final sections \"\"\"\n",
    "\n",
    "    print('--- Formatting Completed Sections ---')\n",
    "    # List of completed sections\n",
    "    completed_sections = state[\"completed_sections\"]\n",
    "    # Format completed section to str to use as context for final sections\n",
    "    completed_report_sections = format_sections(completed_sections)\n",
    "\n",
    "    print('--- Formatting Completed Sections is Done ---')\n",
    "    return {\"report_sections_from_research\": completed_report_sections}"
   ],
   "id": "bda95f67d54ea660",
   "outputs": [],
   "execution_count": 18
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:44.731881Z",
     "start_time": "2025-03-04T05:17:44.729144Z"
    }
   },
   "cell_type": "code",
   "source": [
    "FINAL_SECTION_WRITER_PROMPT = \"\"\"You are an expert technical writer crafting a section that synthesizes information from the rest of the report.\n",
    "\n",
    "Title for the section:\n",
    "{section_title}\n",
    "\n",
    "Topic for this section:\n",
    "{section_topic}\n",
    "\n",
    "Available report content of already completed sections:\n",
    "{context}\n",
    "\n",
    "1. Section-Specific Approach:\n",
    "\n",
    "For Introduction:\n",
    "- Use # for report title (Markdown format)\n",
    "- 50-100 word limit\n",
    "- Write in simple and clear language\n",
    "- Focus on the core motivation for the report in 1-2 paragraphs\n",
    "- Use a clear narrative arc to introduce the report\n",
    "- Include NO structural elements (no lists or tables)\n",
    "- No sources section needed\n",
    "\n",
    "For Conclusion/Summary:\n",
    "- Use ## for section title (Markdown format)\n",
    "- 100-150 word limit\n",
    "- For comparative reports:\n",
    "    * Must include a focused comparison table using Markdown table syntax\n",
    "    * Table should distill insights from the report\n",
    "    * Keep table entries clear and concise\n",
    "- For non-comparative reports:\n",
    "    * Only use ONE structural element IF it helps distill the points made in the report:\n",
    "    * Either a focused table comparing items present in the report (using Markdown table syntax)\n",
    "    * Or a short list using proper Markdown list syntax:\n",
    "      - Use `*` or `-` for unordered lists\n",
    "      - Use `1.` for ordered lists\n",
    "      - Ensure proper indentation and spacing\n",
    "- End with specific next steps or implications\n",
    "- No sources section needed\n",
    "\n",
    "3. Writing Approach:\n",
    "- Use concrete details over general statements\n",
    "- Make every word count\n",
    "- Focus on your single most important point\n",
    "\n",
    "4. Quality Checks:\n",
    "- For introduction: 50-100 word limit, # for report title, no structural elements, no sources section\n",
    "- For conclusion: 100-150 word limit, ## for section title, only ONE structural element at most, no sources section\n",
    "- Markdown format\n",
    "- Do not include word count or any preamble in your response\n",
    "- If there are special characters in the text, such as the dollar symbol,\n",
    "  ensure they are escaped properly for correct rendering e.g $25.5 should become \\$25.5\"\"\""
   ],
   "id": "2f760e1a253c1c2",
   "outputs": [],
   "execution_count": 19
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:44.749776Z",
     "start_time": "2025-03-04T05:17:44.746505Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def write_final_sections(state: SectionState):\n",
    "    \"\"\" Write the final sections of the report, which do not require web search and use the completed sections as context\"\"\"\n",
    "\n",
    "    # Get state\n",
    "    section = state[\"section\"]\n",
    "    completed_report_sections = state[\"report_sections_from_research\"]\n",
    "\n",
    "    print('--- Writing Final Section: '+ section.name + ' ---')\n",
    "    # Format system instructions\n",
    "    system_instructions = FINAL_SECTION_WRITER_PROMPT.format(section_title=section.name,\n",
    "                                                             section_topic=section.description,\n",
    "                                                             context=completed_report_sections)\n",
    "\n",
    "    # Generate section\n",
    "    user_instruction = \"Craft a report section based on the provided sources.\"\n",
    "    section_content = llm.invoke([SystemMessage(content=system_instructions),\n",
    "                                  HumanMessage(content=user_instruction)])\n",
    "\n",
    "    # Write content to section\n",
    "    section.content = section_content.content\n",
    "\n",
    "    print('--- Writing Final Section: '+ section.name + ' Completed ---')\n",
    "    # Write the updated section to completed sections\n",
    "    return {\"completed_sections\": [section]}"
   ],
   "id": "42f58c5f64be9c91",
   "outputs": [],
   "execution_count": 20
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:44.764358Z",
     "start_time": "2025-03-04T05:17:44.761474Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from langgraph.constants import Send\n",
    "\n",
    "def parallelize_final_section_writing(state: ReportState):\n",
    "    \"\"\" Write any final sections using the Send API to parallelize the process \"\"\"\n",
    "\n",
    "    # Kick off section writing in parallel via Send() API for any sections that do not require research\n",
    "    return [\n",
    "        Send(\"write_final_sections\",\n",
    "             {\"section\": s, \"report_sections_from_research\": state[\"report_sections_from_research\"]})\n",
    "        for s in state[\"sections\"]\n",
    "        if not s.research\n",
    "    ]"
   ],
   "id": "169964fc589dd706",
   "outputs": [],
   "execution_count": 21
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:44.779333Z",
     "start_time": "2025-03-04T05:17:44.775734Z"
    }
   },
   "cell_type": "code",
   "source": [
    "def compile_final_report(state: ReportState):\n",
    "    \"\"\" Compile the final report \"\"\"\n",
    "\n",
    "    # Get sections\n",
    "    sections = state[\"sections\"]\n",
    "    completed_sections = {s.name: s.content for s in state[\"completed_sections\"]}\n",
    "\n",
    "    print('--- Compiling Final Report ---')\n",
    "    # Update sections with completed content while maintaining original order\n",
    "    for section in sections:\n",
    "        section.content = completed_sections[section.name]\n",
    "\n",
    "    # Compile final report\n",
    "    all_sections = \"\\n\\n\".join([s.content for s in sections])\n",
    "    # Escape unescaped $ symbols to display properly in Markdown\n",
    "    formatted_sections = all_sections.replace(\"\\\\$\", \"TEMP_PLACEHOLDER\")  # Temporarily mark already escaped $\n",
    "    formatted_sections = formatted_sections.replace(\"$\", \"\\\\$\")  # Escape all $\n",
    "    formatted_sections = formatted_sections.replace(\"TEMP_PLACEHOLDER\", \"\\\\$\")  # Restore originally escaped $\n",
    "\n",
    "    # Now escaped_sections contains the properly escaped Markdown text\n",
    "    print('--- Compiling Final Report Done ---')\n",
    "    return {\"final_report\": formatted_sections}"
   ],
   "id": "32586763ffc96376",
   "outputs": [],
   "execution_count": 22
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:47.246156Z",
     "start_time": "2025-03-04T05:17:44.795886Z"
    }
   },
   "cell_type": "code",
   "source": [
    "builder = StateGraph(ReportState, input=ReportStateInput, output=ReportStateOutput)\n",
    "\n",
    "builder.add_node(\"generate_report_plan\", generate_report_plan)\n",
    "builder.add_node(\"section_builder_with_web_search\", section_builder_subagent)\n",
    "builder.add_node(\"format_completed_sections\", format_completed_sections)\n",
    "builder.add_node(\"write_final_sections\", write_final_sections)\n",
    "builder.add_node(\"compile_final_report\", compile_final_report)\n",
    "\n",
    "builder.add_edge(START, \"generate_report_plan\")\n",
    "builder.add_conditional_edges(\"generate_report_plan\",\n",
    "                              parallelize_section_writing,\n",
    "                              [\"section_builder_with_web_search\"])\n",
    "builder.add_edge(\"section_builder_with_web_search\", \"format_completed_sections\")\n",
    "builder.add_conditional_edges(\"format_completed_sections\",\n",
    "                              parallelize_final_section_writing,\n",
    "                              [\"write_final_sections\"])\n",
    "builder.add_edge(\"write_final_sections\", \"compile_final_report\")\n",
    "builder.add_edge(\"compile_final_report\", END)\n",
    "\n",
    "reporter_agent = builder.compile()\n",
    "# view agent structure\n",
    "display(Image(reporter_agent.get_graph(xray=True).draw_mermaid_png()))"
   ],
   "id": "ed5ee5bc018964cd",
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 23
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:17:47.304041Z",
     "start_time": "2025-03-04T05:17:47.252693Z"
    }
   },
   "cell_type": "code",
   "source": [
    "from IPython.display import display\n",
    "from rich.console import Console\n",
    "from rich.markdown import Markdown as RichMarkdown\n",
    "\n",
    "async def call_planner_agent(agent, prompt, config={\"recursion_limit\": 50}, verbose=False):\n",
    "    events = agent.astream(\n",
    "        {'topic' : prompt},\n",
    "        config,\n",
    "        stream_mode=\"values\",\n",
    "    )\n",
    "\n",
    "    async for event in events:\n",
    "        for k, v in event.items():\n",
    "            if verbose:\n",
    "                if k != \"__end__\":\n",
    "                    display(RichMarkdown(repr(k) + ' -> ' + repr(v)))\n",
    "            if k == 'final_report':\n",
    "                print('='*50)\n",
    "                print('Final Report:')\n",
    "                md = RichMarkdown(v)\n",
    "                display(md)"
   ],
   "id": "3e899e568b902c80",
   "outputs": [],
   "execution_count": 24
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-03-04T05:26:35.826602Z",
     "start_time": "2025-03-04T05:24:53.405039Z"
    }
   },
   "cell_type": "code",
   "source": [
    "topic = \"Analyze the impact of Tesla stock price after Elon Musk being appointed as the head of DOGE(department of government efficiency)\"\n",
    "await call_planner_agent(agent=reporter_agent,\n",
    "                         prompt=topic)"
   ],
   "id": "f781e85ebc274b4f",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--- Generating Report Plan ---\n",
      "--- Generating Report Plan Completed ---\n",
      "--- Generating Search Queries for Section: Elon Musk's Role in DOGE ---\n",
      "--- Generating Search Queries for Section: Impact of Government Policies on Stock Markets ---\n",
      "--- Generating Search Queries for Section: Historical Influence of Elon Musk on Markets ---\n",
      "--- Generating Search Queries for Section: Analysis of Tesla's Stock Price Volatility ---\n",
      "--- Generating Search Queries for Section: Potential Impact of Musk's DOGE Role on Tesla Stock ---\n",
      "--- Generating Search Queries for Section: Elon Musk's Role in DOGE Completed ---\n",
      "--- Searching Web for Queries ---\n",
      "--- Generating Search Queries for Section: Analysis of Tesla's Stock Price Volatility Completed ---\n",
      "--- Searching Web for Queries ---\n",
      "--- Generating Search Queries for Section: Impact of Government Policies on Stock Markets Completed ---\n",
      "--- Searching Web for Queries ---\n",
      "--- Generating Search Queries for Section: Potential Impact of Musk's DOGE Role on Tesla Stock Completed ---\n",
      "--- Searching Web for Queries ---\n",
      "--- Generating Search Queries for Section: Historical Influence of Elon Musk on Markets Completed ---\n",
      "--- Searching Web for Queries ---\n",
      "--- Searching Web for Queries Completed ---\n",
      "--- Writing Section : Analysis of Tesla's Stock Price Volatility ---\n",
      "--- Searching Web for Queries Completed ---\n",
      "--- Writing Section : Elon Musk's Role in DOGE ---\n",
      "--- Searching Web for Queries Completed ---\n",
      "--- Writing Section : Impact of Government Policies on Stock Markets ---\n",
      "--- Searching Web for Queries Completed ---\n",
      "--- Writing Section : Potential Impact of Musk's DOGE Role on Tesla Stock ---\n",
      "--- Writing Section : Analysis of Tesla's Stock Price Volatility Completed ---\n",
      "--- Writing Section : Elon Musk's Role in DOGE Completed ---\n",
      "--- Searching Web for Queries Completed ---\n",
      "--- Writing Section : Historical Influence of Elon Musk on Markets ---\n",
      "--- Writing Section : Impact of Government Policies on Stock Markets Completed ---\n",
      "--- Writing Section : Potential Impact of Musk's DOGE Role on Tesla Stock Completed ---\n",
      "--- Writing Section : Historical Influence of Elon Musk on Markets Completed ---\n",
      "--- Formatting Completed Sections ---\n",
      "--- Formatting Completed Sections is Done ---\n",
      "--- Writing Final Section: Introduction ---\n",
      "--- Writing Final Section: Conclusion ---\n",
      "--- Writing Final Section: Conclusion Completed ---\n",
      "--- Writing Final Section: Introduction Completed ---\n",
      "--- Compiling Final Report ---\n",
      "--- Compiling Final Report Done ---\n",
      "==================================================\n",
      "Final Report:\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃                                                  \u001B[1mIntroduction\u001B[0m                                                   ┃\n",
       "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n",
       "\n",
       "The appointment of Elon Musk as the head of the Department of Government Efficiency (DOGE) represents a pivotal    \n",
       "moment in the intersection of government policy and private sector influence. This report explores the potential   \n",
       "implications of Musk's new role on Tesla's stock price, considering his history of impacting market dynamics       \n",
       "through strategic decisions and public statements. By examining the broader context of government policies on stock\n",
       "markets and Musk's influence on market behavior, this report aims to provide a comprehensive analysis of how Musk's\n",
       "involvement with DOGE could affect Tesla's financial performance and investor sentiment.                           \n",
       "\n",
       "\n",
       "                                             \u001B[1;4mElon Musk's Role in DOGE\u001B[0m                                              \n",
       "\n",
       "\u001B[1mElon Musk's appointment as head of the Department of Government Efficiency (DOGE) marks a significant shift in \u001B[0m    \n",
       "\u001B[1mfederal operations.\u001B[0m Appointed by President Trump, Musk, alongside Vivek Ramaswamy, leads DOGE with the mission to  \n",
       "streamline government functions and cut wasteful spending. The department, though not a formal government agency,  \n",
       "operates as an advisory body with a mandate to reduce federal expenditures by up to $2 trillion by July 4, 2026.   \n",
       "Musk's role is classified as a \"special government employee,\" allowing him to work temporarily without             \n",
       "compensation, while maintaining his private sector roles.                                                          \n",
       "\n",
       "Musk's influence is evident in DOGE's aggressive approach, which includes accessing Treasury payment systems and   \n",
       "targeting agencies like USAID for potential shutdowns. This has raised concerns about conflicts of interest, given \n",
       "Musk's business ties with companies like SpaceX and Tesla, which have significant government contracts. Critics    \n",
       "argue that DOGE's actions could lead to unintended consequences, particularly in areas like defense and social     \n",
       "services.                                                                                                          \n",
       "\n",
       "                                                      \u001B[1mSources\u001B[0m                                                      \n",
       "\n",
       "\u001B[1;33m • \u001B[0mTrump appoints Elon Musk to lead so-called 'DOGE' with Vivek Ramaswamy : \u001B]8;id=348885;https://www.npr.org/2024/11/12/g-s1-33972/trump-elon-musk-vivek-ramaswamy-doge-government-efficiency-deep-state\u001B\\\u001B[4;34mNPR\u001B[0m\u001B]8;;\u001B\\                                    \n",
       "\u001B[1;33m • \u001B[0mTrump nominates Elon Musk to head Department of Government Efficiency (DOGE) : \u001B]8;id=976358;https://kvia.com/news/2024/11/12/trump-nominates-elon-musk-to-head-department-of-government-efficiency-doge/\u001B\\\u001B[4;34mKVIA\u001B[0m\u001B]8;;\u001B\\                             \n",
       "\u001B[1;33m • \u001B[0mWhat's Elon Musk's position in government? The DOGE leader's role : \u001B]8;id=888224;https://www.commercialappeal.com/story/news/2025/02/07/elon-musk-position-us-government/78328968007/\u001B\\\u001B[4;34mCommercial Appeal\u001B[0m\u001B]8;;\u001B\\                           \n",
       "\n",
       "\n",
       "                                  \u001B[1;4mImpact of Government Policies on Stock Markets\u001B[0m                                   \n",
       "\n",
       "\u001B[1mGovernment policies, particularly those related to efficiency and spending, significantly influence stock market \u001B[0m  \n",
       "\u001B[1mperformance.\u001B[0m For instance, the 2024 U.S. presidential election, resulting in a Republican victory, has set the     \n",
       "stage for potential policy shifts that could impact markets. Historical data suggests that both Democratic and     \n",
       "Republican administrations have overseen periods of economic growth, but the specific policies enacted can lead to \n",
       "varying market reactions.                                                                                          \n",
       "\n",
       "Key policies include tax reforms and trade regulations. The extension of the Tax Cuts and Jobs Act, which maintains\n",
       "a 21% corporate tax rate, is anticipated to bolster corporate earnings, potentially boosting stock valuations.     \n",
       "Conversely, proposed tariffs, such as a 60% increase on Chinese imports, could introduce market volatility by      \n",
       "affecting trade dynamics and consumer prices.                                                                      \n",
       "\n",
       "\u001B[1;33m • \u001B[0m\u001B[1mTax Policy:\u001B[0m The continuation of the Tax Cuts and Jobs Act is expected to support market growth by enhancing     \n",
       "\u001B[1;33m   \u001B[0mcorporate profitability.                                                                                        \n",
       "\u001B[1;33m • \u001B[0m\u001B[1mTrade Policy:\u001B[0m Potential tariff increases could disrupt trade, impacting sectors reliant on international supply \n",
       "\u001B[1;33m   \u001B[0mchains.                                                                                                         \n",
       "\n",
       "A case study of the 2024 election highlights how policy expectations can drive market sentiment. Despite initial   \n",
       "concerns, markets adjusted to the anticipated policy landscape, underscoring the importance of separating emotional\n",
       "reactions from investment decisions.                                                                               \n",
       "\n",
       "                                                      \u001B[1mSources\u001B[0m                                                      \n",
       "\n",
       "\u001B[1;33m • \u001B[0mMarket Performance and Policy Changes Following the 2024 Election:                                              \n",
       "\u001B[1;33m   \u001B[0mhttps://blueskywa.com/blog/market-performance-and-policy                                                        \n",
       "\u001B[1;33m • \u001B[0mChange at the Top: Economic and Equity Market Implications:                                                     \n",
       "\u001B[1;33m   \u001B[0mhttps://www.xponance.com/change-at-the-top-economic-and-equity-market-implications-systematic-global-equities-q4\n",
       "\u001B[1;33m   \u001B[0m-2024-update/                                                                                                   \n",
       "\n",
       "\n",
       "                                   \u001B[1;4mHistorical Influence of Elon Musk on Markets\u001B[0m                                    \n",
       "\n",
       "\u001B[1mElon Musk's actions and statements have significantly impacted market behavior, particularly in Tesla and \u001B[0m         \n",
       "\u001B[1mcryptocurrency markets.\u001B[0m A notable instance occurred in November 2021 when Musk sold 9.1 million Tesla shares,      \n",
       "causing a 16% drop in Tesla's stock price, which later rebounded. This sale was part of a larger trend where Musk's\n",
       "financial maneuvers, including selling shares to fund his Twitter acquisition, led to a 38% crash in Tesla's stock \n",
       "in April 2022.                                                                                                     \n",
       "\n",
       "In the cryptocurrency realm, Musk's tweets have been pivotal. For example, his endorsement of Dogecoin in early    \n",
       "2021 led to a 20% surge in its price. Conversely, his appearance on Saturday Night Live, where he referred to      \n",
       "Dogecoin as \"a hustle,\" resulted in a 30% drop. Similarly, Tesla's $1.5 billion Bitcoin investment in February 2021\n",
       "caused Bitcoin's price to surge, but Musk's later environmental concerns led to a 10% decline.                     \n",
       "\n",
       "These examples underscore Musk's ability to influence market dynamics through strategic decisions and public       \n",
       "statements, highlighting the volatility and sensitivity of markets to influential figures.                         \n",
       "\n",
       "                                                      \u001B[1mSources\u001B[0m                                                      \n",
       "\n",
       "\u001B[1;33m • \u001B[0mAnalysing Elon Musk's Investments in Tesla:                                                                     \n",
       "\u001B[1;33m   \u001B[0mhttps://www.robomarkets.com.cy/blog/stock-market/analysis/analysing-elon-musks-investments-in-tesla/            \n",
       "\u001B[1;33m • \u001B[0mTesla Stock Price in 5 Years: The Long-Term Impact of Elon Musk Boycott:                                        \n",
       "\u001B[1;33m   \u001B[0mhttps://www.ccn.com/analysis/business/tesla-stock-price-long-term-impact-elon-musk-boycott/                     \n",
       "\u001B[1;33m • \u001B[0mElon Musk's Crypto Influence: How a Single Tweet Can Move Markets:                                              \n",
       "\u001B[1;33m   \u001B[0mhttps://flagship.fyi/outposts/market-insights/elon-musks-crypto-influence-how-a-single-tweet-can-move-markets/  \n",
       "\n",
       "\n",
       "                                    \u001B[1;4mAnalysis of Tesla's Stock Price Volatility\u001B[0m                                     \n",
       "\n",
       "\u001B[1mTesla's stock price has exhibited significant volatility, with a notable example being its decline from a high of \u001B[0m \n",
       "\u001B[1m$423.79 on December 31, 2024, to $403.84 by the end of the trading day.\u001B[0m This fluctuation is influenced by several  \n",
       "factors, including market conditions, competition, and company-specific events. For instance, Tesla's 30-day       \n",
       "historical volatility was recorded at 0.5846 as of February 28, 2025, indicating substantial price swings.         \n",
       "Additionally, Tesla's implied volatility ranked in the 84th percentile, suggesting high market expectations for    \n",
       "future price movements.                                                                                            \n",
       "\n",
       "Key factors contributing to Tesla's volatility include:                                                            \n",
       "\n",
       "\u001B[1;33m • \u001B[0m\u001B[1mMarket Competition:\u001B[0m Increased competition from traditional automakers and new entrants like BYD has pressured   \n",
       "\u001B[1;33m   \u001B[0mTesla's market share and pricing power.                                                                         \n",
       "\u001B[1;33m • \u001B[0m\u001B[1mMacroeconomic Conditions:\u001B[0m Rising interest rates and inflation have impacted consumer purchasing power and       \n",
       "\u001B[1;33m   \u001B[0mproduction costs.                                                                                               \n",
       "\u001B[1;33m • \u001B[0m\u001B[1mCompany Performance:\u001B[0m Tesla's financial results, such as the Q4 2024 earnings miss, have led to investor concerns\n",
       "\u001B[1;33m   \u001B[0mand stock price adjustments.                                                                                    \n",
       "\n",
       "These elements, combined with Tesla's strategic decisions and external economic factors, continue to drive its     \n",
       "stock price volatility.                                                                                            \n",
       "\n",
       "                                                      \u001B[1mSources\u001B[0m                                                      \n",
       "\n",
       "\u001B[1;33m • \u001B[0mWhat was Tesla stock price on 12/31/2024 | TSLA - Macroaxis:                                                    \n",
       "\u001B[1;33m   \u001B[0mhttps://www.macroaxis.com/invest/history/TSLA--Tesla-Inc-traded-on--12-31-2024                                  \n",
       "\u001B[1;33m • \u001B[0mTesla, Inc. (TSLA) - Historical Volatility (Close-to-Close) (30-Day):                                           \n",
       "\u001B[1;33m   \u001B[0mhttps://www.alphaquery.com/stock/TSLA/volatility-option-statistics/30-day/historical-volatility                 \n",
       "\u001B[1;33m • \u001B[0mTSLA Implied Volatility Chart Tesla - Market Chameleon: https://marketchameleon.com/Overview/TSLA/IV/           \n",
       "\n",
       "\n",
       "                                \u001B[1;4mPotential Impact of Musk's DOGE Role on Tesla Stock\u001B[0m                                \n",
       "\n",
       "\u001B[1mElon Musk's involvement with DOGE could significantly influence Tesla's stock, both directly and indirectly.\u001B[0m The   \n",
       "correlation between Musk's political activities and Tesla's stock performance is evident. For instance, Tesla's    \n",
       "stock fell 17% following Musk's increased political visibility and involvement with DOGE, as reported by CBS News. \n",
       "This decline suggests that Musk's political ties may alienate some consumers, impacting Tesla's brand perception   \n",
       "and sales.                                                                                                         \n",
       "\n",
       "\u001B[1;33m • \u001B[0m\u001B[1mDirect Impact:\u001B[0m                                                                                                  \n",
       "\u001B[1;33m   \u001B[0m\u001B[1;33m • \u001B[0mTesla's stock has shown a 25% decline since Musk's active role in DOGE, as noted by Fox Business.            \n",
       "\u001B[1;33m   \u001B[0m\u001B[1;33m • \u001B[0mInvestors express concerns over Musk's divided focus, potentially affecting Tesla's strategic direction and  \n",
       "\u001B[1;33m   \u001B[0m\u001B[1;33m   \u001B[0minnovation.                                                                                                  \n",
       "\u001B[1;33m • \u001B[0m\u001B[1mIndirect Impact:\u001B[0m                                                                                                \n",
       "\u001B[1;33m   \u001B[0m\u001B[1;33m • \u001B[0mThe political divide Musk's activities create could shift consumer sentiment, as seen with a drop in repeat  \n",
       "\u001B[1;33m   \u001B[0m\u001B[1;33m   \u001B[0mTesla buyers in Democratic states from 72% to 65% (Axios).                                                   \n",
       "\u001B[1;33m   \u001B[0m\u001B[1;33m • \u001B[0mThe broader market dynamics, such as the correlation between tech stocks and cryptocurrencies, could further \n",
       "\u001B[1;33m   \u001B[0m\u001B[1;33m   \u001B[0minfluence Tesla's stock volatility (IMF).                                                                    \n",
       "\n",
       "These factors highlight the complex interplay between Musk's external engagements and Tesla's market performance,  \n",
       "necessitating careful strategic communication to mitigate potential negative impacts.                              \n",
       "\n",
       "                                                      \u001B[1mSources\u001B[0m                                                      \n",
       "\n",
       "\u001B[1;33m • \u001B[0mAxios: https://www.axios.com/2025/02/27/tesla-stock-musk-doge-social-presence                                   \n",
       "\u001B[1;33m • \u001B[0mFox Business:                                                                                                   \n",
       "\u001B[1;33m   \u001B[0mhttps://www.foxbusiness.com/media/portnoy-calls-out-elon-musk-running-doge-while-tesla-stock-drops-says-sharehol\n",
       "\u001B[1;33m   \u001B[0mders-entitled-ask                                                                                               \n",
       "\u001B[1;33m • \u001B[0mCBS News: https://www.cbsnews.com/news/tesla-sales-elon-musk-reputation-brand-damage-trump-doge/                \n",
       "\u001B[1;33m • \u001B[0mIMF:                                                                                                            \n",
       "\u001B[1;33m   \u001B[0mhttps://www.imf.org/en/Blogs/Articles/2022/01/11/crypto-prices-move-more-in-sync-with-stocks-posing-new-risks   \n",
       "\n",
       "\n",
       "                                                    \u001B[1;4mConclusion\u001B[0m                                                     \n",
       "\n",
       "The report highlights the multifaceted impact of Elon Musk's role in the Department of Government Efficiency (DOGE)\n",
       "on both government operations and market dynamics. Musk's appointment aims to streamline federal spending, yet     \n",
       "raises concerns about potential conflicts of interest due to his business ties. Government policies, particularly  \n",
       "those related to tax and trade, significantly influence stock markets, with Musk's actions historically affecting  \n",
       "Tesla and cryptocurrency markets. Tesla's stock volatility is driven by market competition, macroeconomic          \n",
       "conditions, and company performance. Musk's involvement with DOGE has directly and indirectly impacted Tesla's     \n",
       "stock, reflecting investor concerns over his divided focus and the political implications of his role.             \n",
       "\n",
       "| Key Insights | Details | |--------------|---------| | \u001B[1mMusk's Role in DOGE\u001B[0m | Aims to cut federal spending by $2   \n",
       "trillion, raising conflict of interest concerns. | | \u001B[1mGovernment Policies\u001B[0m | Tax reforms and trade regulations       \n",
       "influence market performance. | | \u001B[1mMusk's Market Influence\u001B[0m | Historical actions have caused significant market      \n",
       "fluctuations. | | \u001B[1mTesla's Volatility\u001B[0m | Driven by competition, economic conditions, and Musk's external engagements.\n",
       "|                                                                                                                  \n",
       "\n",
       "The findings suggest a need for strategic communication to mitigate potential negative impacts on Tesla's market   \n",
       "performance.                                                                                                       \n"
      ],
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n",
       "┃                                                  <span style=\"font-weight: bold\">Introduction</span>                                                   ┃\n",
       "┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n",
       "\n",
       "The appointment of Elon Musk as the head of the Department of Government Efficiency (DOGE) represents a pivotal    \n",
       "moment in the intersection of government policy and private sector influence. This report explores the potential   \n",
       "implications of Musk's new role on Tesla's stock price, considering his history of impacting market dynamics       \n",
       "through strategic decisions and public statements. By examining the broader context of government policies on stock\n",
       "markets and Musk's influence on market behavior, this report aims to provide a comprehensive analysis of how Musk's\n",
       "involvement with DOGE could affect Tesla's financial performance and investor sentiment.                           \n",
       "\n",
       "\n",
       "                                             <span style=\"font-weight: bold; text-decoration: underline\">Elon Musk's Role in DOGE</span>                                              \n",
       "\n",
       "<span style=\"font-weight: bold\">Elon Musk's appointment as head of the Department of Government Efficiency (DOGE) marks a significant shift in </span>    \n",
       "<span style=\"font-weight: bold\">federal operations.</span> Appointed by President Trump, Musk, alongside Vivek Ramaswamy, leads DOGE with the mission to  \n",
       "streamline government functions and cut wasteful spending. The department, though not a formal government agency,  \n",
       "operates as an advisory body with a mandate to reduce federal expenditures by up to $2 trillion by July 4, 2026.   \n",
       "Musk's role is classified as a \"special government employee,\" allowing him to work temporarily without             \n",
       "compensation, while maintaining his private sector roles.                                                          \n",
       "\n",
       "Musk's influence is evident in DOGE's aggressive approach, which includes accessing Treasury payment systems and   \n",
       "targeting agencies like USAID for potential shutdowns. This has raised concerns about conflicts of interest, given \n",
       "Musk's business ties with companies like SpaceX and Tesla, which have significant government contracts. Critics    \n",
       "argue that DOGE's actions could lead to unintended consequences, particularly in areas like defense and social     \n",
       "services.                                                                                                          \n",
       "\n",
       "                                                      <span style=\"font-weight: bold\">Sources</span>                                                      \n",
       "\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Trump appoints Elon Musk to lead so-called 'DOGE' with Vivek Ramaswamy : <a href=\"https://www.npr.org/2024/11/12/g-s1-33972/trump-elon-musk-vivek-ramaswamy-doge-government-efficiency-deep-state\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">NPR</span></a>                                    \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Trump nominates Elon Musk to head Department of Government Efficiency (DOGE) : <a href=\"https://kvia.com/news/2024/11/12/trump-nominates-elon-musk-to-head-department-of-government-efficiency-doge/\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">KVIA</span></a>                             \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>What's Elon Musk's position in government? The DOGE leader's role : <a href=\"https://www.commercialappeal.com/story/news/2025/02/07/elon-musk-position-us-government/78328968007/\" target=\"_blank\"><span style=\"color: #000080; text-decoration-color: #000080; text-decoration: underline\">Commercial Appeal</span></a>                           \n",
       "\n",
       "\n",
       "                                  <span style=\"font-weight: bold; text-decoration: underline\">Impact of Government Policies on Stock Markets</span>                                   \n",
       "\n",
       "<span style=\"font-weight: bold\">Government policies, particularly those related to efficiency and spending, significantly influence stock market </span>  \n",
       "<span style=\"font-weight: bold\">performance.</span> For instance, the 2024 U.S. presidential election, resulting in a Republican victory, has set the     \n",
       "stage for potential policy shifts that could impact markets. Historical data suggests that both Democratic and     \n",
       "Republican administrations have overseen periods of economic growth, but the specific policies enacted can lead to \n",
       "varying market reactions.                                                                                          \n",
       "\n",
       "Key policies include tax reforms and trade regulations. The extension of the Tax Cuts and Jobs Act, which maintains\n",
       "a 21% corporate tax rate, is anticipated to bolster corporate earnings, potentially boosting stock valuations.     \n",
       "Conversely, proposed tariffs, such as a 60% increase on Chinese imports, could introduce market volatility by      \n",
       "affecting trade dynamics and consumer prices.                                                                      \n",
       "\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Tax Policy:</span> The continuation of the Tax Cuts and Jobs Act is expected to support market growth by enhancing     \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>corporate profitability.                                                                                        \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Trade Policy:</span> Potential tariff increases could disrupt trade, impacting sectors reliant on international supply \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>chains.                                                                                                         \n",
       "\n",
       "A case study of the 2024 election highlights how policy expectations can drive market sentiment. Despite initial   \n",
       "concerns, markets adjusted to the anticipated policy landscape, underscoring the importance of separating emotional\n",
       "reactions from investment decisions.                                                                               \n",
       "\n",
       "                                                      <span style=\"font-weight: bold\">Sources</span>                                                      \n",
       "\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Market Performance and Policy Changes Following the 2024 Election:                                              \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://blueskywa.com/blog/market-performance-and-policy                                                        \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Change at the Top: Economic and Equity Market Implications:                                                     \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://www.xponance.com/change-at-the-top-economic-and-equity-market-implications-systematic-global-equities-q4\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>-2024-update/                                                                                                   \n",
       "\n",
       "\n",
       "                                   <span style=\"font-weight: bold; text-decoration: underline\">Historical Influence of Elon Musk on Markets</span>                                    \n",
       "\n",
       "<span style=\"font-weight: bold\">Elon Musk's actions and statements have significantly impacted market behavior, particularly in Tesla and </span>         \n",
       "<span style=\"font-weight: bold\">cryptocurrency markets.</span> A notable instance occurred in November 2021 when Musk sold 9.1 million Tesla shares,      \n",
       "causing a 16% drop in Tesla's stock price, which later rebounded. This sale was part of a larger trend where Musk's\n",
       "financial maneuvers, including selling shares to fund his Twitter acquisition, led to a 38% crash in Tesla's stock \n",
       "in April 2022.                                                                                                     \n",
       "\n",
       "In the cryptocurrency realm, Musk's tweets have been pivotal. For example, his endorsement of Dogecoin in early    \n",
       "2021 led to a 20% surge in its price. Conversely, his appearance on Saturday Night Live, where he referred to      \n",
       "Dogecoin as \"a hustle,\" resulted in a 30% drop. Similarly, Tesla's $1.5 billion Bitcoin investment in February 2021\n",
       "caused Bitcoin's price to surge, but Musk's later environmental concerns led to a 10% decline.                     \n",
       "\n",
       "These examples underscore Musk's ability to influence market dynamics through strategic decisions and public       \n",
       "statements, highlighting the volatility and sensitivity of markets to influential figures.                         \n",
       "\n",
       "                                                      <span style=\"font-weight: bold\">Sources</span>                                                      \n",
       "\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Analysing Elon Musk's Investments in Tesla:                                                                     \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://www.robomarkets.com.cy/blog/stock-market/analysis/analysing-elon-musks-investments-in-tesla/            \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Tesla Stock Price in 5 Years: The Long-Term Impact of Elon Musk Boycott:                                        \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://www.ccn.com/analysis/business/tesla-stock-price-long-term-impact-elon-musk-boycott/                     \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Elon Musk's Crypto Influence: How a Single Tweet Can Move Markets:                                              \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://flagship.fyi/outposts/market-insights/elon-musks-crypto-influence-how-a-single-tweet-can-move-markets/  \n",
       "\n",
       "\n",
       "                                    <span style=\"font-weight: bold; text-decoration: underline\">Analysis of Tesla's Stock Price Volatility</span>                                     \n",
       "\n",
       "<span style=\"font-weight: bold\">Tesla's stock price has exhibited significant volatility, with a notable example being its decline from a high of </span> \n",
       "<span style=\"font-weight: bold\">$423.79 on December 31, 2024, to $403.84 by the end of the trading day.</span> This fluctuation is influenced by several  \n",
       "factors, including market conditions, competition, and company-specific events. For instance, Tesla's 30-day       \n",
       "historical volatility was recorded at 0.5846 as of February 28, 2025, indicating substantial price swings.         \n",
       "Additionally, Tesla's implied volatility ranked in the 84th percentile, suggesting high market expectations for    \n",
       "future price movements.                                                                                            \n",
       "\n",
       "Key factors contributing to Tesla's volatility include:                                                            \n",
       "\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Market Competition:</span> Increased competition from traditional automakers and new entrants like BYD has pressured   \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>Tesla's market share and pricing power.                                                                         \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Macroeconomic Conditions:</span> Rising interest rates and inflation have impacted consumer purchasing power and       \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>production costs.                                                                                               \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Company Performance:</span> Tesla's financial results, such as the Q4 2024 earnings miss, have led to investor concerns\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>and stock price adjustments.                                                                                    \n",
       "\n",
       "These elements, combined with Tesla's strategic decisions and external economic factors, continue to drive its     \n",
       "stock price volatility.                                                                                            \n",
       "\n",
       "                                                      <span style=\"font-weight: bold\">Sources</span>                                                      \n",
       "\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>What was Tesla stock price on 12/31/2024 | TSLA - Macroaxis:                                                    \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://www.macroaxis.com/invest/history/TSLA--Tesla-Inc-traded-on--12-31-2024                                  \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Tesla, Inc. (TSLA) - Historical Volatility (Close-to-Close) (30-Day):                                           \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://www.alphaquery.com/stock/TSLA/volatility-option-statistics/30-day/historical-volatility                 \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>TSLA Implied Volatility Chart Tesla - Market Chameleon: https://marketchameleon.com/Overview/TSLA/IV/           \n",
       "\n",
       "\n",
       "                                <span style=\"font-weight: bold; text-decoration: underline\">Potential Impact of Musk's DOGE Role on Tesla Stock</span>                                \n",
       "\n",
       "<span style=\"font-weight: bold\">Elon Musk's involvement with DOGE could significantly influence Tesla's stock, both directly and indirectly.</span> The   \n",
       "correlation between Musk's political activities and Tesla's stock performance is evident. For instance, Tesla's    \n",
       "stock fell 17% following Musk's increased political visibility and involvement with DOGE, as reported by CBS News. \n",
       "This decline suggests that Musk's political ties may alienate some consumers, impacting Tesla's brand perception   \n",
       "and sales.                                                                                                         \n",
       "\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Direct Impact:</span>                                                                                                  \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">    • </span>Tesla's stock has shown a 25% decline since Musk's active role in DOGE, as noted by Fox Business.            \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">    • </span>Investors express concerns over Musk's divided focus, potentially affecting Tesla's strategic direction and  \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">      </span>innovation.                                                                                                  \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span><span style=\"font-weight: bold\">Indirect Impact:</span>                                                                                                \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">    • </span>The political divide Musk's activities create could shift consumer sentiment, as seen with a drop in repeat  \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">      </span>Tesla buyers in Democratic states from 72% to 65% (Axios).                                                   \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">    • </span>The broader market dynamics, such as the correlation between tech stocks and cryptocurrencies, could further \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">      </span>influence Tesla's stock volatility (IMF).                                                                    \n",
       "\n",
       "These factors highlight the complex interplay between Musk's external engagements and Tesla's market performance,  \n",
       "necessitating careful strategic communication to mitigate potential negative impacts.                              \n",
       "\n",
       "                                                      <span style=\"font-weight: bold\">Sources</span>                                                      \n",
       "\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Axios: https://www.axios.com/2025/02/27/tesla-stock-musk-doge-social-presence                                   \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>Fox Business:                                                                                                   \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://www.foxbusiness.com/media/portnoy-calls-out-elon-musk-running-doge-while-tesla-stock-drops-says-sharehol\n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>ders-entitled-ask                                                                                               \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>CBS News: https://www.cbsnews.com/news/tesla-sales-elon-musk-reputation-brand-damage-trump-doge/                \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\"> • </span>IMF:                                                                                                            \n",
       "<span style=\"color: #808000; text-decoration-color: #808000; font-weight: bold\">   </span>https://www.imf.org/en/Blogs/Articles/2022/01/11/crypto-prices-move-more-in-sync-with-stocks-posing-new-risks   \n",
       "\n",
       "\n",
       "                                                    <span style=\"font-weight: bold; text-decoration: underline\">Conclusion</span>                                                     \n",
       "\n",
       "The report highlights the multifaceted impact of Elon Musk's role in the Department of Government Efficiency (DOGE)\n",
       "on both government operations and market dynamics. Musk's appointment aims to streamline federal spending, yet     \n",
       "raises concerns about potential conflicts of interest due to his business ties. Government policies, particularly  \n",
       "those related to tax and trade, significantly influence stock markets, with Musk's actions historically affecting  \n",
       "Tesla and cryptocurrency markets. Tesla's stock volatility is driven by market competition, macroeconomic          \n",
       "conditions, and company performance. Musk's involvement with DOGE has directly and indirectly impacted Tesla's     \n",
       "stock, reflecting investor concerns over his divided focus and the political implications of his role.             \n",
       "\n",
       "| Key Insights | Details | |--------------|---------| | <span style=\"font-weight: bold\">Musk's Role in DOGE</span> | Aims to cut federal spending by $2   \n",
       "trillion, raising conflict of interest concerns. | | <span style=\"font-weight: bold\">Government Policies</span> | Tax reforms and trade regulations       \n",
       "influence market performance. | | <span style=\"font-weight: bold\">Musk's Market Influence</span> | Historical actions have caused significant market      \n",
       "fluctuations. | | <span style=\"font-weight: bold\">Tesla's Volatility</span> | Driven by competition, economic conditions, and Musk's external engagements.\n",
       "|                                                                                                                  \n",
       "\n",
       "The findings suggest a need for strategic communication to mitigate potential negative impacts on Tesla's market   \n",
       "performance.                                                                                                       \n",
       "</pre>\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 27
  },
  {
   "metadata": {},
   "cell_type": "code",
   "outputs": [],
   "execution_count": null,
   "source": "",
   "id": "11ece6a700109923"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
