From db6ff77fa34c4d1febdcbd345d88e098045a660d Mon Sep 17 00:00:00 2001 From: Harrison Chase Date: Sun, 21 Jan 2024 18:05:32 -0800 Subject: [PATCH] update notebooks --- examples/multi_agent/agent_supervisor.ipynb | 197 ++++----- .../hierarchical_agent_teams.ipynb | 156 +++++--- .../multi-agent-collaboration.ipynb | 376 ++++++++++++------ 3 files changed, 459 insertions(+), 270 deletions(-) diff --git a/examples/multi_agent/agent_supervisor.ipynb b/examples/multi_agent/agent_supervisor.ipynb index 4895d1486..329dc36f3 100644 --- a/examples/multi_agent/agent_supervisor.ipynb +++ b/examples/multi_agent/agent_supervisor.ipynb @@ -68,7 +68,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "f04c6778-403b-4b49-9b93-678e910d5cec", "metadata": {}, "outputs": [], @@ -97,7 +97,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "id": "c4823dd9-26bd-4e1a-8117-b97b2860211a", "metadata": {}, "outputs": [], @@ -106,11 +106,10 @@ "from langchain_core.messages import BaseMessage, HumanMessage\n", "from langchain_openai import ChatOpenAI\n", "\n", - "from langgraph.graph import END, StateGraph\n", "\n", "\n", - "def create_worker_node(\n", - " workflow: StateGraph, name: str, llm: ChatOpenAI, tools: list, system_prompt: str\n", + "def create_agent(\n", + " llm: ChatOpenAI, tools: list, system_prompt: str\n", "):\n", " # Each worker node will be given a name and some tools.\n", " prompt = ChatPromptTemplate.from_messages(\n", @@ -135,67 +134,38 @@ }, { "cell_type": "markdown", - "id": "a07d507f-34d1-4f1b-8dde-5e58d17b2166", + "id": "b7c302b0-cd57-4913-986f-5dc7d6d77386", "metadata": {}, "source": [ - "## Construct Graph\n", - "\n", - "We're ready to start building the graph. Below, define the state and worker nodes using the function we just defined." + "We can also define a function that we will use to be the nodes in the graph - it takes care of converting the agent response to a human message. This is important because that is how we will add it the global state of the graph" ] }, { "cell_type": "code", - "execution_count": 5, - "id": "6a430af7-8fce-4e66-ba9e-d940c1bc48e8", + "execution_count": 3, + "id": "80862241-a1a7-4726-bce5-f867b233832e", "metadata": {}, "outputs": [], "source": [ - "import operator\n", - "from typing import Annotated, Any, Dict, List, Optional, Sequence, TypedDict\n", - "\n", - "from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n", - "\n", - "\n", - "# The agent state is the input to each node in the graph\n", - "class AgentState(TypedDict):\n", - " # The annotation tells the graph that new messages will always\n", - " # be added to the current states\n", - " messages: Annotated[Sequence[BaseMessage], operator.add]\n", - " # The 'next' field indicates where to route to next\n", - " next: str\n", - "\n", - "\n", - "workflow = StateGraph(AgentState)\n", - "\n", - "llm = ChatOpenAI(model=\"gpt-4-1106-preview\")\n", - "\n", - "\n", - "create_worker_node(\n", - " workflow, \"Researcher\", llm, [tavily_tool], \"You are a web researcher.\"\n", - ")\n", - "# NOTE: THIS PERFORMS ARBITRARY CODE EXECUTION. PROCEED WITH CAUTION\n", - "create_worker_node(\n", - " workflow,\n", - " \"Coder\",\n", - " llm,\n", - " [python_repl_tool],\n", - " \"You may generate safe python code to analyze data \"\n", - " \"and generate charts using matplotlib.\",\n", - ")" + "def agent_node(state, agent, name):\n", + " result = agent.invoke(state)\n", + " return {\"messages\": [HumanMessage(content=result[\"output\"], name=name)]}" ] }, { "cell_type": "markdown", - "id": "d6374825-912f-40c9-910d-afa267b401bf", + "id": "d32962d2-5487-496d-aefc-2a3b0d194985", "metadata": {}, "source": [ - "Almost done, now create create the team supervisor. It will use function calling to choose the next worker node OR finish processing." + "### Create Agent Supervisor\n", + "\n", + "It will use function calling to choose the next worker node OR finish processing." ] }, { "cell_type": "code", "execution_count": 6, - "id": "17c108a0-6dc3-46fd-a5e6-a1fcfad5458a", + "id": "311f0a58-b425-4496-adac-dc4cd8ffb912", "metadata": {}, "outputs": [], "source": [ @@ -249,6 +219,57 @@ ")" ] }, + { + "cell_type": "markdown", + "id": "a07d507f-34d1-4f1b-8dde-5e58d17b2166", + "metadata": {}, + "source": [ + "## Construct Graph\n", + "\n", + "We're ready to start building the graph. Below, define the state and worker nodes using the function we just defined." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6a430af7-8fce-4e66-ba9e-d940c1bc48e8", + "metadata": {}, + "outputs": [], + "source": [ + "import operator\n", + "from typing import Annotated, Any, Dict, List, Optional, Sequence, TypedDict\n", + "import functools\n", + "\n", + "from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n", + "from langgraph.graph import StateGraph, END\n", + "\n", + "\n", + "# The agent state is the input to each node in the graph\n", + "class AgentState(TypedDict):\n", + " # The annotation tells the graph that new messages will always\n", + " # be added to the current states\n", + " messages: Annotated[Sequence[BaseMessage], operator.add]\n", + " # The 'next' field indicates where to route to next\n", + " next: str\n", + "\n", + "\n", + "\n", + "\n", + "llm = ChatOpenAI(model=\"gpt-4-1106-preview\")\n", + "\n", + "research_agent = create_agent(llm, [tavily_tool], \"You are a web researcher.\")\n", + "research_node = functools.partial(agent_node, agent=research_agent, name=\"Researcher\")\n", + "\n", + "# NOTE: THIS PERFORMS ARBITRARY CODE EXECUTION. PROCEED WITH CAUTION\n", + "code_agent = create_agent(llm, [python_repl_tool], \"You may generate safe python code to analyze data and generate charts using matplotlib.\")\n", + "code_node = functools.partial(agent_node, agent=code_agent, name=\"Coder\")\n", + "\n", + "workflow = StateGraph(AgentState)\n", + "workflow.add_node(\"Researcher\", research_node)\n", + "workflow.add_node(\"Coder\", code_node)\n", + "workflow.add_node(\"supervisor\", supervisor_chain)" + ] + }, { "cell_type": "markdown", "id": "2c1593d5-39f7-4819-96d2-4ad7d7991d72", @@ -259,14 +280,11 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 13, "id": "14778e86-077b-4e6a-893c-400e59b0cdbf", "metadata": {}, "outputs": [], "source": [ - "workflow.add_node(\"supervisor\", supervisor_chain)\n", - "\n", - "\n", "for member in members:\n", " # We want our workers to ALWAYS \"report back\" to the supervisor when done\n", " workflow.add_edge(member, \"supervisor\")\n", @@ -293,10 +311,18 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 14, "id": "56ba78e9-d9c1-457c-a073-d606d5d3e013", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'supervisor': {'next': 'Coder'}}\n", + "----\n" + ] + }, { "name": "stderr", "output_type": "stream", @@ -308,30 +334,29 @@ "name": "stdout", "output_type": "stream", "text": [ - "================================\u001b[1m Human Message \u001b[0m=================================\n", - "\n", - "The code `print('Hello, World!')` was executed, and the output is:\n", - "\n", - "```\n", - "Hello, World!\n", - "```\n" + "{'Coder': {'messages': [HumanMessage(content=\"The code `print('Hello, World!')` was executed, and it printed `Hello, World!` to the terminal.\", name='Coder')]}}\n", + "----\n", + "{'supervisor': {'next': 'FINISH'}}\n", + "----\n" ] } ], "source": [ - "results = graph.invoke(\n", + "for s in graph.stream(\n", " {\n", " \"messages\": [\n", " HumanMessage(content=\"Code hello world and print it to the terminal\")\n", " ]\n", " }\n", - ")\n", - "results[\"messages\"][-1].pretty_print()" + "):\n", + " if \"__end__\" not in s:\n", + " print(s)\n", + " print(\"----\")" ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 16, "id": "45a92dfd-0e11-47f5-aad4-b68d24990e34", "metadata": {}, "outputs": [ @@ -339,51 +364,27 @@ "name": "stdout", "output_type": "stream", "text": [ - "================================\u001b[1m Human Message \u001b[0m=================================\n", - "\n", - "# Research Report on Pikas\n", - "\n", - "Pikas are small, mountain-dwelling mammals that are closely related to rabbits. They are known for their distinctive chirps and typically inhabit boulder fields at high elevations, up to 14,000 feet in treeless slopes like those found in the Southern Rockies. These animals are recognized for their ability to adapt to some of the most inhospitable climates.\n", - "\n", - "## Climate Change Impact\n", - "\n", - "Pikas have been a topic of interest in climate change research due to their sensitivity to high temperatures and reliance on cold habitats. They have historically responded to climate shifts by moving to higher elevations or latitudes to find suitable cooler environments. For instance, pikas were once found in the Appalachian Mountains and even in the Mojave Desert, but as the Earth's climate warmed, they moved to cooler, high-elevation areas where they live today.\n", - "\n", - "Recent studies suggest that pikas are showing remarkable adaptability to climate change. Despite predictions that they might become endangered due to rising temperatures, these animals are displaying resilience. Some research indicates that pikas can adjust certain genes to make better use of oxygen in higher altitudes where the air is thinner, which could be a potential hope for their survival as climate change drives them to higher elevations.\n", - "\n", - "However, there have been reports of pikas disappearing from parts of the Great Basin, and in Colorado, pikas have retracted upslope by about 1,160 feet. It's been noted that while climate change may be a factor, it might not be the sole cause for these local disappearances.\n", - "\n", - "## Adaptation Strategies\n", - "\n", - "Pikas exhibit several interesting behaviors that help them cope with their challenging environment. During the summer, they engage in activities like \"making hay\" — collecting and storing vegetation in preparation for the harsh winters. Their diet and caching behavior are essential for their survival during the months when food is scarce.\n", - "\n", - "## Conservation and Research\n", - "\n", - "Conservationists and scientists continue to study pikas to understand their adaptation mechanisms and how they might inform broader climate change mitigation strategies. For example, studies have been conducted on pikas at different elevations to observe genetic changes and their effects on adaptation. Such research is crucial for predicting the future of pikas and potentially other species affected by climate change.\n", - "\n", - "## Conclusion\n", - "\n", - "Pikas serve as an important indicator species for the impacts of climate change on wildlife. Their ability to adapt to changing climates offers hope and also highlights the importance of understanding genetic adaptability in the face of environmental challenges. Conservation efforts and further research are essential to ensure the survival of pikas and to learn from their resilience.\n", - "\n", - "### Sources\n", - "- [The Conversation: Pikas are adapting to climate change remarkably well](https://theconversation.com/pikas-are-adapting-to-climate-change-remarkably-well-contrary-to-many-predictions-150726)\n", - "- [Stanford Sustainability: It's in the genes – potential hope for pikas hit by climate change](https://sustainability.stanford.edu/news/its-genes-potential-hope-pikas-hit-climate-change)\n", - "- [Colorado Sun: Colorado pika population and climate change](https://coloradosun.com/2023/08/27/colorado-pika-population-climate-change/)\n", - "- [PetaPixel: Photographing the American Pika – a tiny indicator of climate change](https://petapixel.com/2022/01/03/photographing-the-american-pika-a-tiny-indicator-of-climate-change/)\n", - "- [The Wildlife Society: Can pikas survive climate change after all?](https://wildlife.org/can-pikas-survive-climate-change-after-all/)\n" + "{'supervisor': {'next': 'Researcher'}}\n", + "----\n", + "{'Researcher': {'messages': [HumanMessage(content='## Research Report on Pikas\\n\\nPikas are small, mountain-dwelling mammals native to Asia and North America. They are characterized by their short limbs, rounded ears, and stout bodies. Unlike rodents, with which they are sometimes confused, pikas are more closely related to rabbits and hares, belonging to the order Lagomorpha.\\n\\n### Physical Description\\nPikas are typically 15 to 23 cm (5.9 to 9.1 inches) in body length. They have an even coat of fur, no external tail, and resemble their close relatives, the rabbits, but with short, rounded ears. Their thick fur and small ears are adaptations to their cold habitats.\\n\\n### Habitat and Distribution\\nPikas inhabit mountainous regions where they have adapted to life in rocky terrains. These creatures can be found at high altitudes, with the large-eared pika of the Himalayas living at elevations of more than 6,000 meters.\\n\\n### Diet and Behavior\\nPikas are herbivorous and primarily feed on plants. They are known for their diligent behavior of collecting and storing food in their tunnels for winter. During the warmer months, pikas spend their days gathering grass in montane meadows and creating hay piles. These animals are also remarkable for their distinctive vocalizations used for communication.\\n\\n### Reproduction and Lifespan\\nDetails on pika reproduction and lifespan were not provided in the immediate search results, but like many small mammals, pikas would typically have a breeding season and a relatively short lifespan in the wild.\\n\\n### Conservation\\nPikas are currently facing challenges due to environmental changes. As their habitats are affected by the expansion of agriculture and the increasing temperatures due to climate change, pikas may find themselves in competition for resources. They are notably heat intolerant, which makes them particularly vulnerable to global warming.\\n\\n### Conclusion\\nPikas are fascinating creatures with unique adaptations to their high-altitude environments. Their role in the ecosystem, distinctive behaviors, and close relation to the rabbit make them an interesting subject for further study, especially in the context of environmental conservation.\\n\\n**Sources:**\\n- [Animals.net - Pika](https://animals.net/pika/)\\n- [OneKindPlanet - American Pika](https://www.onekindplanet.org/animal/american-pika/)\\n- [Facts.net - 12 Facts About Pika](https://facts.net/nature/animals/12-facts-about-pika/)\\n- [Wikipedia - Pika](https://en.wikipedia.org/wiki/Pika)\\n- [HowStuffWorks - Pikas](https://animals.howstuffworks.com/mammals/pika.htm)', name='Researcher')]}}\n", + "----\n", + "{'supervisor': {'next': 'FINISH'}}\n", + "----\n" ] } ], "source": [ - "results = graph.invoke(\n", + "for s in graph.stream(\n", " {\n", " \"messages\": [\n", " HumanMessage(content=\"Write a brief research report on pikas.\")\n", " ]\n", " },\n", " {\"recursion_limit\": 100},\n", - ")\n", - "results[\"messages\"][-1].pretty_print()" + "):\n", + " if \"__end__\" not in s:\n", + " print(s)\n", + " print(\"----\")" ] }, { @@ -411,7 +412,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.11.1" } }, "nbformat": 4, diff --git a/examples/multi_agent/hierarchical_agent_teams.ipynb b/examples/multi_agent/hierarchical_agent_teams.ipynb index 801ec2e32..0ce801834 100644 --- a/examples/multi_agent/hierarchical_agent_teams.ipynb +++ b/examples/multi_agent/hierarchical_agent_teams.ipynb @@ -83,7 +83,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "id": "e09fb60f-1aac-455b-b67d-8d2e4ccfd747", "metadata": {}, "outputs": [], @@ -100,13 +100,10 @@ "from langgraph.graph import END, StateGraph\n", "\n", "\n", - "def create_worker_agent(\n", - " graph_builder: StateGraph,\n", - " name: str,\n", + "def create_agent(\n", " llm: ChatOpenAI,\n", " tools: list,\n", " system_prompt: str,\n", - " prelude: Optional[Union[Runnable, Callable]] = None, # Optional required steps\n", ") -> str:\n", " \"\"\"Create a function-calling agent and add it to the graph.\"\"\"\n", " system_prompt += \"\\nWork autonomously according to your specialty, using the tools available to you.\"\n", @@ -125,22 +122,25 @@ " )\n", " agent = create_openai_functions_agent(llm, tools, prompt)\n", " executor = AgentExecutor(agent=agent, tools=tools)\n", - " chain = executor | (\n", - " lambda x: {\"messages\": [HumanMessage(content=x[\"output\"], name=name)]}\n", - " )\n", - " if prelude is not None:\n", - " chain = prelude | chain\n", - " graph_builder.add_node(name, chain)\n", - " return name\n", + " return executor\n", + " # chain = executor | (\n", + " # lambda x: {\"messages\": [HumanMessage(content=x[\"output\"], name=name)]}\n", + " # )\n", + " # if prelude is not None:\n", + " # chain = prelude | chain\n", + " # graph_builder.add_node(name, chain)\n", + " # return name\n", + "\n", + "\n", + "def agent_node(state, agent, name):\n", + " result = agent.invoke(state)\n", + " return {\"messages\": [HumanMessage(content=result[\"output\"], name=name)]}\n", "\n", "\n", "def create_team_supervisor(\n", - " graph_builder: StateGraph, llm: ChatOpenAI, system_prompt: str\n", + " llm: ChatOpenAI, system_prompt, members\n", ") -> str:\n", " \"\"\"An LLM-based router.\"\"\"\n", - " supervisor_id = uuid.uuid4().hex[:4]\n", - " supervisor_name = f\"supervisor - {supervisor_id}\"\n", - " members = list(graph_builder.nodes)\n", " options = [\"FINISH\"] + members\n", " function_def = {\n", " \"name\": \"route\",\n", @@ -175,16 +175,17 @@ " | llm.bind_functions(functions=[function_def], function_call=\"route\")\n", " | JsonOutputFunctionsParser()\n", " )\n", - " graph_builder.add_node(supervisor_name, chain)\n", - " conditional_map = {k: k for k in members}\n", - " conditional_map[\"FINISH\"] = END\n", + " return chain\n", + " # graph_builder.add_node(supervisor_name, chain)\n", + " # conditional_map = {k: k for k in members}\n", + " # conditional_map[\"FINISH\"] = END\n", "\n", - " for member in members:\n", - " graph_builder.add_edge(member, supervisor_name)\n", - " graph_builder.add_conditional_edges(\n", - " supervisor_name, lambda x: x[\"next\"], conditional_map\n", - " )\n", - " return supervisor_name" + " # for member in members:\n", + " # graph_builder.add_edge(member, supervisor_name)\n", + " # graph_builder.add_conditional_edges(\n", + " # supervisor_name, lambda x: x[\"next\"], conditional_map\n", + " # )\n", + " # return supervisor_name" ] }, { @@ -203,7 +204,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "id": "f04c6778-403b-4b49-9b93-678e910d5cec", "metadata": {}, "outputs": [], @@ -234,7 +235,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 11, "id": "53db0c78-e357-48ba-ae5f-3fc04735a3b7", "metadata": {}, "outputs": [], @@ -244,6 +245,7 @@ "\n", "from langchain_core.messages import AIMessage, BaseMessage, HumanMessage\n", "from langchain_openai.chat_models import ChatOpenAI\n", + "import functools\n", "\n", "\n", "# Research team graph state\n", @@ -258,47 +260,56 @@ " next: str\n", "\n", "\n", - "research_graph = StateGraph(State)\n", "llm = ChatOpenAI(model=\"gpt-4-1106-preview\")\n", - "create_worker_agent(\n", - " research_graph,\n", - " \"Search\",\n", - " llm,\n", - " [tavily_tool],\n", - " \"You are a research assistant who can search for up-to-date info\"\n", - " \" using the tavily search engine.\",\n", - ")\n", - "create_worker_agent(\n", - " research_graph,\n", - " \"Web Scraper\",\n", - " llm,\n", - " [scrape_webpages],\n", - " \"You are a research assistant who can scrape\"\n", - " \" specified urls for more detailed information using\"\n", - " \" the scrape_webpages function.\",\n", - ")\n", - "supervisor_node = create_team_supervisor(\n", - " research_graph,\n", + "\n", + "\n", + "\n", + "search_agent = create_agent(llm, [tavily_tool], \"You are a research assistant who can search for up-to-date info using the tavily search engine.\")\n", + "search_node = functools.partial(agent_node, agent=search_agent, name=\"Search\")\n", + "\n", + "research_agent = create_agent(llm, [scrape_webpages], \"You are a research assistant who can scrape specified urls for more detailed information using the scrape_webpages function.\")\n", + "research_node = functools.partial(agent_node, agent=research_agent, name=\"Web Scraper\")\n", + "\n", + "supervisor_agent = create_team_supervisor(\n", " llm,\n", " \"You are a supervisor tasked with managing a conversation between the\"\n", - " \" following workers: {team_members}. Given the following user request,\"\n", + " \" following workers: Search, Web Scraper. Given the following user request,\"\n", " \" respond with the worker to act next. Each worker will perform a\"\n", " \" task and respond with their results and status. When finished,\"\n", " \" respond with FINISH.\",\n", + " [\"Search\", \"Web Scraper\"],\n", ")\n", "\n", - "research_graph.set_entry_point(supervisor_node)\n", "\n", + "research_graph = StateGraph(State)\n", + "research_graph.add_node(\"Search\", search_node)\n", + "research_graph.add_node(\"Web Scraper\", research_node)\n", + "research_graph.add_node(\"supervisor\", supervisor_agent)\n", + "\n", + "research_graph.add_edge(\"Search\", \"supervisor\")\n", + "research_graph.add_edge(\"Web Scraper\", \"supervisor\")\n", + "research_graph.add_conditional_edges(\n", + " \"supervisor\",\n", + " lambda x: x[\"next\"],\n", + " {\n", + " \"Search\": \"Search\",\n", + " \"Web Scraper\": \"Web Scraper\",\n", + " \"FINISH\": END\n", + " }\n", + ")\n", + "\n", + "\n", + "research_graph.set_entry_point(\"supervisor\")\n", + "\n", + "chain = research_graph.compile()\n", "\n", "# The following functions interoperate between the top level graph state\n", "# and the state of the research sub-graph\n", "# this makes it so that the states of each graph don't get intermixed\n", - "def enter_chain(message: str, members: Optional[list] = None):\n", + "def enter_chain(message: str):\n", " results = {\n", " \"messages\": [HumanMessage(content=message)],\n", " }\n", - " if members:\n", - " results[\"team_members\"] = \"\\n\".join(sorted(members))\n", " return results\n", "\n", "\n", @@ -307,12 +318,47 @@ "\n", "\n", "research_chain = (\n", - " functools.partial(enter_chain, members=research_graph.nodes)\n", - " | research_graph.compile()\n", + " enter_chain\n", + " | chain\n", " | return_final_response\n", ")" ] }, + { + "cell_type": "code", + "execution_count": 12, + "id": "912b0604-a178-4246-a36f-2dedae606680", + "metadata": {}, + "outputs": [ + { + "ename": "GraphRecursionError", + "evalue": "Recursion limit of 25 reachedwithout hitting a stop condition. You can increase the limitby setting the `recursion_limit` config key.", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mGraphRecursionError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[12], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ms\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mresearch_chain\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mwhat is temperature in SF right now?\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 2\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m__end__\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mnot\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43ms\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 3\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mprint\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43ms\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/workplace/langchain/libs/core/langchain_core/runnables/base.py:2416\u001b[0m, in \u001b[0;36mRunnableSequence.stream\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 2410\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mstream\u001b[39m(\n\u001b[1;32m 2411\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 2412\u001b[0m \u001b[38;5;28minput\u001b[39m: Input,\n\u001b[1;32m 2413\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 2414\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 2415\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[0;32m-> 2416\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtransform(\u001b[38;5;28miter\u001b[39m([\u001b[38;5;28minput\u001b[39m]), config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", + "File \u001b[0;32m~/workplace/langchain/libs/core/langchain_core/runnables/base.py:2403\u001b[0m, in \u001b[0;36mRunnableSequence.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 2397\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\n\u001b[1;32m 2398\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 2399\u001b[0m \u001b[38;5;28minput\u001b[39m: Iterator[Input],\n\u001b[1;32m 2400\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 2401\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 2402\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[0;32m-> 2403\u001b[0m \u001b[38;5;28;01myield from\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_transform_stream_with_config(\n\u001b[1;32m 2404\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[1;32m 2405\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_transform,\n\u001b[1;32m 2406\u001b[0m patch_config(config, run_name\u001b[38;5;241m=\u001b[39m(config \u001b[38;5;129;01mor\u001b[39;00m {})\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_name\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname),\n\u001b[1;32m 2407\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[1;32m 2408\u001b[0m )\n", + "File \u001b[0;32m~/workplace/langchain/libs/core/langchain_core/runnables/base.py:1497\u001b[0m, in \u001b[0;36mRunnable._transform_stream_with_config\u001b[0;34m(self, input, transformer, config, run_type, **kwargs)\u001b[0m\n\u001b[1;32m 1495\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1496\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m-> 1497\u001b[0m chunk: Output \u001b[38;5;241m=\u001b[39m \u001b[43mcontext\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mnext\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43miterator\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m 1498\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m chunk\n\u001b[1;32m 1499\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output_supported:\n", + "File \u001b[0;32m~/workplace/langchain/libs/core/langchain_core/runnables/base.py:2367\u001b[0m, in \u001b[0;36mRunnableSequence._transform\u001b[0;34m(self, input, run_manager, config)\u001b[0m\n\u001b[1;32m 2358\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m step \u001b[38;5;129;01min\u001b[39;00m steps:\n\u001b[1;32m 2359\u001b[0m final_pipeline \u001b[38;5;241m=\u001b[39m step\u001b[38;5;241m.\u001b[39mtransform(\n\u001b[1;32m 2360\u001b[0m final_pipeline,\n\u001b[1;32m 2361\u001b[0m patch_config(\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 2364\u001b[0m ),\n\u001b[1;32m 2365\u001b[0m )\n\u001b[0;32m-> 2367\u001b[0m \u001b[43m\u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43moutput\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mfinal_pipeline\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 2368\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01myield\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43moutput\u001b[49m\n", + "File \u001b[0;32m~/workplace/langchain/libs/core/langchain_core/runnables/base.py:3435\u001b[0m, in \u001b[0;36mRunnableLambda.transform\u001b[0;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[1;32m 3428\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\n\u001b[1;32m 3429\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 3430\u001b[0m \u001b[38;5;28minput\u001b[39m: Iterator[Input],\n\u001b[1;32m 3431\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m 3432\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[1;32m 3433\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[1;32m 3434\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(\u001b[38;5;28mself\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfunc\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m-> 3435\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43moutput\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_transform_stream_with_config\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 3436\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3437\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_transform\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3438\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_config\u001b[49m\u001b[43m(\u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfunc\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3439\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 3440\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 3441\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01myield\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43moutput\u001b[49m\n\u001b[1;32m 3442\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", + "File \u001b[0;32m~/workplace/langchain/libs/core/langchain_core/runnables/base.py:1497\u001b[0m, in \u001b[0;36mRunnable._transform_stream_with_config\u001b[0;34m(self, input, transformer, config, run_type, **kwargs)\u001b[0m\n\u001b[1;32m 1495\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1496\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m-> 1497\u001b[0m chunk: Output \u001b[38;5;241m=\u001b[39m context\u001b[38;5;241m.\u001b[39mrun(\u001b[38;5;28mnext\u001b[39m, iterator) \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m 1498\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m chunk\n\u001b[1;32m 1499\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output_supported:\n", + "File \u001b[0;32m~/workplace/langchain/libs/core/langchain_core/runnables/base.py:3380\u001b[0m, in \u001b[0;36mRunnableLambda._transform\u001b[0;34m(self, input, run_manager, config, **kwargs)\u001b[0m\n\u001b[1;32m 3372\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m_transform\u001b[39m(\n\u001b[1;32m 3373\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 3374\u001b[0m \u001b[38;5;28minput\u001b[39m: Iterator[Input],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 3377\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 3378\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Output]:\n\u001b[1;32m 3379\u001b[0m final: Optional[Input] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m-> 3380\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43michunk\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m:\u001b[49m\n\u001b[1;32m 3381\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mfinal\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01mis\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m:\u001b[49m\n\u001b[1;32m 3382\u001b[0m \u001b[43m \u001b[49m\u001b[43mfinal\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43michunk\u001b[49m\n", + "File \u001b[0;32m~/workplace/permchain/langgraph/pregel/__init__.py:567\u001b[0m, in \u001b[0;36mPregel.transform\u001b[0;34m(self, input, config, output_keys, input_keys, **kwargs)\u001b[0m\n\u001b[1;32m 558\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtransform\u001b[39m(\n\u001b[1;32m 559\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m 560\u001b[0m \u001b[38;5;28minput\u001b[39m: Iterator[Union[\u001b[38;5;28mdict\u001b[39m[\u001b[38;5;28mstr\u001b[39m, Any], Any]],\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 565\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Any,\n\u001b[1;32m 566\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Iterator[Union[\u001b[38;5;28mdict\u001b[39m[\u001b[38;5;28mstr\u001b[39m, Any], Any]]:\n\u001b[0;32m--> 567\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mfor\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mchunk\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_transform_stream_with_config\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 568\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 569\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_transform\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 570\u001b[0m \u001b[43m \u001b[49m\u001b[43mconfig\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 571\u001b[0m \u001b[43m \u001b[49m\u001b[43moutput_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moutput_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 572\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_keys\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_keys\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 573\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 574\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m:\u001b[49m\n\u001b[1;32m 575\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01myield\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43mchunk\u001b[49m\n", + "File \u001b[0;32m~/workplace/langchain/libs/core/langchain_core/runnables/base.py:1497\u001b[0m, in \u001b[0;36mRunnable._transform_stream_with_config\u001b[0;34m(self, input, transformer, config, run_type, **kwargs)\u001b[0m\n\u001b[1;32m 1495\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1496\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[0;32m-> 1497\u001b[0m chunk: Output \u001b[38;5;241m=\u001b[39m context\u001b[38;5;241m.\u001b[39mrun(\u001b[38;5;28mnext\u001b[39m, iterator) \u001b[38;5;66;03m# type: ignore\u001b[39;00m\n\u001b[1;32m 1498\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m chunk\n\u001b[1;32m 1499\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output_supported:\n", + "File \u001b[0;32m~/workplace/permchain/langgraph/pregel/__init__.py:299\u001b[0m, in \u001b[0;36mPregel._transform\u001b[0;34m(self, input, run_manager, config, input_keys, output_keys)\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[38;5;28;01mbreak\u001b[39;00m\n\u001b[1;32m 298\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m step \u001b[38;5;241m==\u001b[39m config[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrecursion_limit\u001b[39m\u001b[38;5;124m\"\u001b[39m]:\n\u001b[0;32m--> 299\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m GraphRecursionError(\n\u001b[1;32m 300\u001b[0m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRecursion limit of \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mconfig[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrecursion_limit\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m reached\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 301\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwithout hitting a stop condition. You can increase the limit\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 302\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mby setting the `recursion_limit` config key.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 303\u001b[0m )\n\u001b[1;32m 305\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdebug:\n\u001b[1;32m 306\u001b[0m print_step_start(step, next_tasks)\n", + "\u001b[0;31mGraphRecursionError\u001b[0m: Recursion limit of 25 reachedwithout hitting a stop condition. You can increase the limitby setting the `recursion_limit` config key." + ] + } + ], + "source": [ + "for s in research_chain.stream(\"what is temperature in SF right now?\"):\n", + " if \"__end__\" not in s:\n", + " print(s)\n", + " print(\"---\")" + ] + }, { "cell_type": "markdown", "id": "749b99ab-f6f0-4c5d-a90b-10102465d186", @@ -634,7 +680,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.11.1" } }, "nbformat": 4, diff --git a/examples/multi_agent/multi-agent-collaboration.ipynb b/examples/multi_agent/multi-agent-collaboration.ipynb index 3974788d2..c474211bf 100644 --- a/examples/multi_agent/multi-agent-collaboration.ipynb +++ b/examples/multi_agent/multi-agent-collaboration.ipynb @@ -27,7 +27,7 @@ "metadata": {}, "outputs": [], "source": [ - "# %pip install -U langchain langchain_openai langsmith pandas" + "# %pip install -U langchain langchain_openai langsmith pandas langchain_experimental matplotlib" ] }, { @@ -68,16 +68,16 @@ "id": "5e4344a7-21df-4d54-90d2-9d19b3416ffb", "metadata": {}, "source": [ - "## Create graph utilites\n", + "## Create Agents\n", "\n", - "The following helper functions will simplify the code when it comes to actually constructing the graph.\n", + "The following helper functions will help create agents. These agents will then be nodes in the graph.\n", "\n", "You can skip ahead if you just want to see what the graph looks like." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "id": "4325a10e-38dc-4a98-9004-e1525eaba377", "metadata": {}, "outputs": [], @@ -96,8 +96,8 @@ "from langgraph.prebuilt.tool_executor import ToolExecutor, ToolInvocation\n", "\n", "\n", - "def add_agent_node(workflow: StateGraph, name: str, llm, tools, system_message: str):\n", - " \"\"\"Create an agent and add it to the graph builder.\"\"\"\n", + "def create_agent(llm, tools, system_message: str):\n", + " \"\"\"Create an agent.\"\"\"\n", " functions = [format_tool_to_openai_function(t) for t in tools]\n", "\n", " prompt = ChatPromptTemplate.from_messages(\n", @@ -114,25 +114,130 @@ " ),\n", " MessagesPlaceholder(variable_name=\"messages\"),\n", " ]\n", - " ).partial(system_message=system_message)\n", - "\n", - " chain = (\n", - " (lambda x: {**x, \"intermediate_steps\": []})\n", - " | prompt.partial(tool_names=\", \".join([tool.name for tool in tools]))\n", - " | llm.bind_functions(functions)\n", - " | (lambda x: _update_state(x, name=name))\n", " )\n", - " workflow.add_node(name, chain)\n", + " prompt = prompt.partial(system_message=system_message)\n", + " prompt = prompt.partial(tool_names=\", \".join([tool.name for tool in tools]))\n", + " return prompt | llm.bind_functions(functions)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "b4b40de2-5dd4-4d5b-882e-577210723ff4", + "metadata": {}, + "source": [ + "## Define tools\n", + "\n", + "We will also define some tools that our agents will use in the future" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ca076f3b-a729-4ca9-8f91-05c2ba58d610", + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.tools import tool\n", + "from typing import Annotated\n", + "from langchain_experimental.utilities import PythonREPL\n", + "from langchain_community.tools.tavily_search import TavilySearchResults\n", + "\n", + "tavily_tool = TavilySearchResults(max_results=5)\n", + "\n", + "# Warning: This executes code locally, which can be unsafe when not sandboxed\n", + "\n", + "repl = PythonREPL()\n", "\n", "\n", - "def _update_state(ai_message, name: str) -> dict:\n", - " \"\"\"This is called after each worker agent is invoked.\n", + "@tool\n", + "def python_repl(\n", + " code: Annotated[str, \"The python code to execute to generate your chart.\"]\n", + "):\n", + " \"\"\"Use this to execute python code. If you want to see the output of a value,\n", + " you should print it out with `print(...)`. This is visible to the user.\"\"\"\n", + " try:\n", + " result = repl.run(code)\n", + " except BaseException as e:\n", + " return f\"Failed to execute. Error: {repr(e)}\"\n", + " return f\"Succesfully executed:\\n```python\\n{code}\\n```\\nStdout: {result}\"\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "f1b54c0c-0b09-408b-abc5-86308929afb6", + "metadata": {}, + "source": [ + "## Create graph\n", "\n", - " It is used to update the global graph state using the agent output.\"\"\"\n", - " if isinstance(ai_message, FunctionMessage):\n", - " result = ai_message\n", + "Now that we've defined our tools and made some helper functions, will create the individual agents below and tell them how to talk to each other using LangGraph." + ] + }, + { + "cell_type": "markdown", + "id": "0c6a8c3c-86a0-46aa-b970-ab070fb787d9", + "metadata": {}, + "source": [ + "### Define State\n", + "\n", + "We first define the state of the graph. This will just a list of messages, along with a key to track the most recent sender" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "290c91d4-f6f4-443c-8181-233d39102974", + "metadata": {}, + "outputs": [], + "source": [ + "import operator\n", + "from typing import Annotated, List, Sequence, Tuple, TypedDict, Union\n", + "\n", + "from langchain.agents import create_openai_functions_agent\n", + "from langchain.tools.render import format_tool_to_openai_function\n", + "from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n", + "\n", + "from langchain_openai import ChatOpenAI\n", + "from typing_extensions import TypedDict\n", + "\n", + "\n", + "# This defines the object that is passed between each node\n", + "# in the graph. We will create different nodes for each agent and tool\n", + "class AgentState(TypedDict):\n", + " messages: Annotated[Sequence[BaseMessage], operator.add]\n", + " sender: str" + ] + }, + { + "cell_type": "markdown", + "id": "911a283e-ea04-40c1-b792-f9e5f7d81203", + "metadata": {}, + "source": [ + "### Define Agent Nodes\n", + "\n", + "We now need to define the nodes. First, let's define the nodes for the agents." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "71b790ca-9cef-4b22-b469-4b1d5d8424d6", + "metadata": {}, + "outputs": [], + "source": [ + "import functools\n", + "\n", + "\n", + "# Helper function to create a node for a given agent\n", + "def agent_node(state, agent, name):\n", + " result = agent.invoke(state)\n", + " # We convert the agent output into a format that is suitable to append to the global state\n", + " if isinstance(result, FunctionMessage):\n", + " pass\n", " else:\n", - " result = HumanMessage(**ai_message.dict(exclude={\"type\", \"name\"}), name=name)\n", + " result = HumanMessage(**result.dict(exclude={\"type\", \"name\"}), name=name)\n", " return {\n", " \"messages\": [result],\n", " # Since we have a strict workflow, we can\n", @@ -141,7 +246,46 @@ " }\n", "\n", "\n", - "def call_tool(state, tool_executor):\n", + "llm = ChatOpenAI(model=\"gpt-4-1106-preview\")\n", + "\n", + "# Research agent and node\n", + "research_agent = create_agent(\n", + " llm, \n", + " [tavily_tool], \n", + " system_message=\"You should provide accurate data for the chart generator to use.\",\n", + ")\n", + "research_node = functools.partial(agent_node, agent=research_agent, name=\"Researcher\")\n", + "\n", + "# Chart Generator\n", + "chart_agent = create_agent(\n", + " llm,\n", + " [python_repl],\n", + " system_message=\"Any charts you display will be visible by the user.\",\n", + ")\n", + "chart_node = functools.partial(agent_node, agent=chart_agent, name=\"Chart Generator\")" + ] + }, + { + "cell_type": "markdown", + "id": "71c7f1b2-24a3-4340-bcb2-feb22e344fb6", + "metadata": {}, + "source": [ + "### Define Tool Node\n", + "\n", + "We now define a node to run the tools" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "d9a79c76-5c7c-42f6-91cf-635bc8305804", + "metadata": {}, + "outputs": [], + "source": [ + "tools = [tavily_tool, python_repl]\n", + "tool_executor = ToolExecutor(tools)\n", + "\n", + "def tool_node(state):\n", " \"\"\"This runs tools in the graph\n", "\n", " It takes in an agent action and calls that tool and returns the result.\"\"\"\n", @@ -173,85 +317,21 @@ }, { "cell_type": "markdown", - "id": "f1b54c0c-0b09-408b-abc5-86308929afb6", + "id": "bcb30498-dbc4-4b20-980f-da08ebc9da56", "metadata": {}, "source": [ - "## Create graph\n", + "### Define Edge Logic\n", "\n", - "Now that we've defined our tools and made some helper functions, will create the individual agents below and tell them how to talk to each other using LangGraph." + "We can define some of the edge logic that is needed to decide what to do based on results of the agents" ] }, { "cell_type": "code", - "execution_count": 4, - "id": "4dce3901-6ad5-4df5-8528-6e865cf96cb0", + "execution_count": 8, + "id": "4f4b4d37-e8a3-4abb-8d42-eaea26016f35", "metadata": {}, "outputs": [], "source": [ - "import operator\n", - "from typing import Annotated, List, Sequence, Tuple, TypedDict, Union\n", - "\n", - "from langchain.agents import create_openai_functions_agent\n", - "from langchain.tools.render import format_tool_to_openai_function\n", - "from langchain_community.tools.tavily_search import TavilySearchResults\n", - "from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder\n", - "from langchain_core.tools import tool\n", - "from langchain_experimental.utilities import PythonREPL\n", - "from langchain_openai import ChatOpenAI\n", - "from typing_extensions import TypedDict\n", - "\n", - "\n", - "# This defines the object that is passed between each node\n", - "# in the graph. We will create different nodes for each agent and tool\n", - "class AgentState(TypedDict):\n", - " messages: Annotated[Sequence[BaseMessage], operator.add]\n", - " sender: str\n", - "\n", - "\n", - "tavily_tool = TavilySearchResults(max_results=5)\n", - "\n", - "# Warning: This executes code locally, which can be unsafe when not sandboxed\n", - "\n", - "repl = PythonREPL()\n", - "\n", - "\n", - "@tool\n", - "def python_repl(\n", - " code: Annotated[str, \"The python code to execute to generate your chart.\"]\n", - "):\n", - " \"\"\"Use this to execute python code. If you want to see the output of a value,\n", - " you should print it out with `print(...)`. This is visible to the user.\"\"\"\n", - " try:\n", - " result = repl.run(code)\n", - " except BaseException as e:\n", - " return f\"Failed to execute. Error: {repr(e)}\"\n", - " return f\"Succesfully executed:\\n```python\\n{code}\\n```\\nStdout: {result}\"\n", - "\n", - "\n", - "workflow = StateGraph(AgentState)\n", - "llm = ChatOpenAI(model=\"gpt-4-1106-preview\")\n", - "add_agent_node(\n", - " workflow,\n", - " \"Researcher\",\n", - " llm,\n", - " [tavily_tool],\n", - " system_message=\"You should provide accurate data for the chart generator to use.\",\n", - ")\n", - "add_agent_node(\n", - " workflow,\n", - " \"Chart Generator\",\n", - " llm,\n", - " [python_repl],\n", - " system_message=\"Any charts you display will be visible by the user.\",\n", - ")\n", - "\n", - "# The \"tool executor\" node is called whenever any worker agent\n", - "#\n", - "tools = [tavily_tool, python_repl]\n", - "tool_executor = ToolExecutor(tools)\n", - "workflow.add_node(\"call_tool\", lambda state: call_tool(state, tool_executor))\n", - "\n", - "\n", "# Either agent can decide to end\n", "def router(state):\n", " # This is the router\n", @@ -263,8 +343,31 @@ " if \"FINAL ANSWER\" in last_message.content:\n", " # Any agent decided the work is done\n", " return \"end\"\n", - " return \"continue\"\n", + " return \"continue\"" + ] + }, + { + "cell_type": "markdown", + "id": "e9359c34-e191-43a2-a3d4-f2dea636dfd2", + "metadata": {}, + "source": [ + "### Define the Graph\n", "\n", + "We can now put it all together and define the graph!" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "4dce3901-6ad5-4df5-8528-6e865cf96cb0", + "metadata": {}, + "outputs": [], + "source": [ + "workflow = StateGraph(AgentState)\n", + "\n", + "workflow.add_node(\"Researcher\", research_node)\n", + "workflow.add_node(\"Chart Generator\", chart_node)\n", + "workflow.add_node(\"call_tool\", tool_node)\n", "\n", "workflow.add_conditional_edges(\n", " \"Researcher\",\n", @@ -276,7 +379,7 @@ " router,\n", " {\"continue\": \"Researcher\", \"call_tool\": \"call_tool\", \"end\": END},\n", ")\n", - "# We will assume that any time a tool is called, the researcher will choose what to do next\n", + "\n", "workflow.add_conditional_edges(\n", " \"call_tool\",\n", " # Each agent node updates the 'sender' field\n", @@ -305,10 +408,26 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 10, "id": "176a99b0-b457-45cf-8901-90facaa852da", "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'Researcher': {'messages': [HumanMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"query\":\"UK GDP 2018 2019 2020 2021 2022\"}', 'name': 'tavily_search_results_json'}}, name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n", + "{'call_tool': {'messages': [FunctionMessage(content='tavily_search_results_json response: [{\\'url\\': \\'https://www.statista.com/topics/3795/gdp-of-the-uk/\\', \\'content\\': \\'Monthly GDP of the UK 2019-2023 Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Quarterly GDP of the UK 2019-2023 Monthly GDP growth of the UK 2019-2023 Quarterly GDP growth of the UK 2019-2023Economy UK GDP - Statistics & Facts United Kingdom In 2022, the gross domestic product of the United Kingdom amounted to approximately 2.2 trillion British pounds, compared with 2.14...\\'}, {\\'url\\': \\'https://www.statista.com/statistics/281734/gdp-growth-in-the-united-kingdom-uk/\\', \\'content\\': \"Annual growth of gross domestic product in the United Kingdom from 1949 to 2022 Additional Information Strategy and business building for the data-driven economy: Annual GDP growth in the UK 1949-2022 United Kingdom 1949 to 2022 Other statistics on the topicThe UK economy Economy RPI annual inflation rate UK 2000-2028 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023The United Kingdom\\'s economy grew by 4.3 percent in 2022, after a growth rate of 8.7 percent in 2021, and a record 10.4 percent decline in 2020, due to the economic fallout caused by...\"}, {\\'url\\': \\'https://www.statista.com/statistics/281744/gdp-of-the-united-kingdom/\\', \\'content\\': \"Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Additional Information Strategy and business building for the data-driven economy: GDP of the UK 1948-2022 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023 United Kingdom 1948 to 2022Annual GDP growth figures show that the UK economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020. The UK\\'s...\"}, {\\'url\\': \\'https://www.beta.ons.gov.uk/economy/grossdomesticproductgdp/compendium/unitedkingdomnationalaccountsthebluebook/2022/nationalaccountsataglance\\', \\'content\\': \\'of UK GDP over 2020 and 2021 accounts at a glance, UK National Accounts, The Blue Book: 2022 Figure 1: The UK economy increased by 7.5% in 2021, having seen the largest fall in over 300 years in 2020 National accounts at a glance A summary of recent trends and movements within the UK economy. Notice 23 January 2023Gross domestic product There was a rebound in activity in the UK economy in 2021, in response to the easing of coronavirus (COVID-19) restrictions through the year. Real gross domestic...\\'}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp\\', \\'content\\': \\'Spotlight GDP quarterly national accounts, UK: July to September 2023 GDP monthly estimate, UK: October 2023 Monthly index values for monthly gross domestic product (GDP) and the main sectors in the UK to four decimal places. GDP output approach, Blue Book 2023 indicative data Time series related to Gross Domestic Product (GDP)UK GDP is now estimated to have shown no growth in Quarter 2 (Apr to June) 2023, revised down from a previously estimated increase of 0.2%, while growth in Quarter 1 (Jan to Mar) 2023 and all...\\'}]', name='tavily_search_results_json')]}}\n", + "----\n", + "{'Researcher': {'messages': [HumanMessage(content=\"The search results contain several snippets of information, but none of them have the complete data for the UK's GDP over the past five years in a structured format that would be suitable for generating a line graph. The snippets do provide some yearly growth rates and mention significant economic events, but they do not present the actual GDP values for each year.\\n\\nTo generate a line graph, we need the UK's GDP figures for each of the past five years in the same units (usually million GBP or billion GBP) so that we can plot them accurately. The search results mention the GDP of the UK in 2022 as approximately 2.2 trillion British pounds, but we need the figures for the previous years as well.\\n\\nGiven that the search results do not provide the required structured data, we would need to conduct an additional search or consult a database that provides historical GDP figures for the UK, such as the Office for National Statistics (ONS) or an economic statistics database. Once we have the GDP figures for each of the last five years, we can then proceed to generate the line graph.\\n\\nTo continue with the task, I would need to perform another search specifically asking for the UK's GDP figures for the years 2018, 2019, 2020, 2021, and 2022.\", additional_kwargs={'function_call': {'arguments': '{\"query\":\"UK GDP 2018 2019 2020 2021 2022\"}', 'name': 'tavily_search_results_json'}}, name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n", + "{'call_tool': {'messages': [FunctionMessage(content='tavily_search_results_json response: [{\\'url\\': \\'https://www.statista.com/topics/3795/gdp-of-the-uk/\\', \\'content\\': \\'Monthly GDP of the UK 2019-2023 Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Quarterly GDP of the UK 2019-2023 Monthly GDP growth of the UK 2019-2023 Quarterly GDP growth of the UK 2019-2023Economy UK GDP - Statistics & Facts United Kingdom In 2022, the gross domestic product of the United Kingdom amounted to approximately 2.2 trillion British pounds, compared with 2.14...\\'}, {\\'url\\': \\'https://www.statista.com/statistics/281734/gdp-growth-in-the-united-kingdom-uk/\\', \\'content\\': \"Annual growth of gross domestic product in the United Kingdom from 1949 to 2022 Additional Information Strategy and business building for the data-driven economy: Annual GDP growth in the UK 1949-2022 United Kingdom 1949 to 2022 Other statistics on the topicThe UK economy Economy RPI annual inflation rate UK 2000-2028 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023The United Kingdom\\'s economy grew by 4.3 percent in 2022, after a growth rate of 8.7 percent in 2021, and a record 10.4 percent decline in 2020, due to the economic fallout caused by...\"}, {\\'url\\': \\'https://www.statista.com/statistics/281744/gdp-of-the-united-kingdom/\\', \\'content\\': \"Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Additional Information Strategy and business building for the data-driven economy: GDP of the UK 1948-2022 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023 United Kingdom 1948 to 2022Annual GDP growth figures show that the UK economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020. The UK\\'s...\"}, {\\'url\\': \\'https://www.beta.ons.gov.uk/economy/grossdomesticproductgdp/compendium/unitedkingdomnationalaccountsthebluebook/2022/nationalaccountsataglance\\', \\'content\\': \\'of UK GDP over 2020 and 2021 accounts at a glance, UK National Accounts, The Blue Book: 2022 Figure 1: The UK economy increased by 7.5% in 2021, having seen the largest fall in over 300 years in 2020 National accounts at a glance A summary of recent trends and movements within the UK economy. Notice 23 January 2023Gross domestic product There was a rebound in activity in the UK economy in 2021, in response to the easing of coronavirus (COVID-19) restrictions through the year. Real gross domestic...\\'}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp\\', \\'content\\': \\'Spotlight GDP quarterly national accounts, UK: July to September 2023 GDP monthly estimate, UK: October 2023 Monthly index values for monthly gross domestic product (GDP) and the main sectors in the UK to four decimal places. GDP output approach, Blue Book 2023 indicative data Time series related to Gross Domestic Product (GDP)UK GDP is now estimated to have shown no growth in Quarter 2 (Apr to June) 2023, revised down from a previously estimated increase of 0.2%, while growth in Quarter 1 (Jan to Mar) 2023 and all...\\'}]', name='tavily_search_results_json')]}}\n", + "----\n", + "{'Researcher': {'messages': [HumanMessage(content=\"The search results still do not provide the annual GDP figures for the UK for the last five years in a structured format that is suitable for creating a line graph. The snippets mention approximate GDP values and growth rates for certain years but do not give a year-by-year breakdown with exact numbers.\\n\\nTo proceed, we need the specific GDP values for 2018, 2019, 2020, 2021, and 2022. Since the search results from Tavily are not yielding the required data in a usable format, we would typically look for official economic reports or databases such as the UK's Office for National Statistics (ONS), which regularly publishes comprehensive GDP data.\\n\\nGiven the limitations of the tools at hand, I am unable to provide the exact GDP figures for the years in question to generate a line graph. Further action should involve directly accessing the ONS website or a similar authoritative source where annual GDP data for the UK is available in a structured format, and then using this data to plot the line graph.\\n\\nTo continue with the task, you would need to obtain the GDP figures for each of the past five years from a reliable source and then use that data to create the line graph.\", name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n" + ] + }, { "name": "stderr", "output_type": "stream", @@ -316,9 +435,17 @@ "Python REPL can execute arbitrary code. Use with caution.\n" ] }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'Chart Generator': {'messages': [HumanMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"code\":\"import matplotlib.pyplot as plt\\\\n\\\\n# Since the exact GDP data was not provided, we will use placeholder data for illustration purposes.\\\\n# These are not the actual GDP values for the UK.\\\\nyears = [2018, 2019, 2020, 2021, 2022]\\\\ngdp_values = [2600, 2700, 2300, 2500, 2700] # Placeholder values in billion GBP\\\\n\\\\nplt.figure(figsize=(10, 5))\\\\nplt.plot(years, gdp_values, marker=\\'o\\')\\\\nplt.title(\\'UK GDP Over the Past 5 Years (Placeholder Data)\\')\\\\nplt.xlabel(\\'Year\\')\\\\nplt.ylabel(\\'GDP in Billion GBP\\')\\\\nplt.grid(True)\\\\nplt.show()\"}', 'name': 'python_repl'}}, name='Chart Generator')], 'sender': 'Chart Generator'}}\n", + "----\n" + ] + }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAHWCAYAAACbsXOkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB0rElEQVR4nO3dd3gU5f7+8Xs3vYcAAUIJoXcIzYI0gSBSREUElOZRUZqIKILSpYoKiIDliEc6ioiVTkAUUEKv0nuAUBIgPTu/P/glX2MCJGGTSXm/rovrnJ19ZuaezZNxP5lnnrEYhmEIAAAAAHBfrGYHAAAAAID8gOIKAAAAAOyA4goAAAAA7IDiCgAAAADsgOIKAAAAAOyA4goAAAAA7IDiCgAAAADsgOIKAAAAAOyA4goAAAAA7IDiCgAKoNDQUFksFn377bdmR0EusXTpUvn5+enmzZum5mjWrJmaNWuWrds8efKkLBaLvvrqK7vuJz+5cuWKPDw89Msvv5gdBchTKK4ApDF69GhZLBZFRESk+36NGjXS/aIyderUVO0Mw1CfPn1ksVg0evToe+43Li5OH3/8sR555BEVKlRIzs7OCggIUIcOHbRo0SIlJSWl2WfyPycnJxUpUkQPP/ywhg8frtOnT6fZfnJB8c91ypUrpx49euj48eMZ+mwSEhI0Y8YMNWjQQF5eXvL09FSDBg00Y8YMJSQkZGgbOWnhwoWaNm2aafv/98/JwcFBZcqU0ZNPPqldu3Zlyz4nTJig77//PsPt/5nvn/8mTZp01/XatGmjQoUK6eLFi2nei4yMVIkSJfTAAw/IZrNl9hByXFJSkkaNGqUBAwbI09MzZXnZsmXv+Pk89thjJibOuw4dOqS33npLderUkZeXl0qUKKG2bdtq+/bt6bY/d+6cOnfuLF9fX3l7e+uJJ55Ic746c+aMxowZo4YNG6pQoUIqUqSImjVrprVr16a7zevXr+vll19W0aJF5eHhoebNm2vHjh2p2hQuXFgvvviiRowYYZ8DBwoIR7MDAMifDMNQ37599dlnn2nEiBH3LK4uX76sNm3aKCwsTK1bt9a7774rPz8/hYeHa+3aterWrZuOHj2a5j/0Xbt21eOPPy6bzaZr167pr7/+0rRp0zR9+nT997//VZcuXdLsa+DAgWrQoIESEhK0Y8cOffbZZ/r555+1d+9eBQQE3DHjrVu31LZtW23cuFHt2rVTr169ZLVatXLlSr322mv67rvv9PPPP8vDwyNLn1l2WLhwofbt26dBgwaZmiP555SUlKSDBw9q9uzZ+vXXX7V161bVqVPHrvuaMGGCOnXqpI4dO2Z4nVatWqlHjx6plgUHB991nVmzZqlGjRp6/fXXtXDhwlTvDR8+XBEREVq5cqWs1tz/d8wff/xRhw8f1ssvv5zmvTp16uiNN95Is/xuvyu5XWBgoGJiYuTk5JTj+/7iiy/03//+V08//bT69u2ryMhIffrpp3rwwQe1cuVKtWzZMqXtzZs31bx5c0VGRmr48OFycnLSRx99pKZNm2rXrl0qXLiwJGnFihWaPHmyOnbsqJ49eyoxMVFff/21WrVqpS+//FK9e/dO2abNZlPbtm21e/duvfnmmypSpIhmzZqlZs2aKSwsTBUrVkxp+8orr2jGjBlav369Hn300Zz7kIC8zACAfxk1apQhybh8+XK671evXt1o2rRpyusTJ04Ykoz3338/ZVm/fv0MScY777yToX22bt3asFqtxrJly9J9/6+//jLmz59/130mO3nypFGpUiXD2dnZ2LVrV8ryDRs2GJKMb775JlX7GTNmGJKMCRMm3DXjyy+/bEgyPv744zTvzZw505BkvPLKK3fdhr3ZbDYjOjr6ju+3bdvWCAwMTLP8Tp+Fvd3p5/TDDz8YkoyXX37Z7vv08PAwevbsmeH2kox+/fplaV+TJ082JBmrVq1KWfbnn38aVqvVeOutt7K0zcyKiYkxkpKS7msbHTp0MB555JE0ywMDA422bdve17Yzq2nTpqnOL7l1m1m1fft248aNG6mWRUREGEWLFjUaNWqUanly//rzzz9Tlh08eNBwcHAwhg0blrJs3759ac7XsbGxRpUqVYxSpUqlWr5kyZI0v/uXLl0yfH19ja5du6bJW6NGDaN79+6ZP1CggMr9f04DkOe89tpr+uSTTzRs2DC9995792y/ZcsWrVq1Si+//LKeeuqpdNvUr19fzz33XIb2HxgYqK+++krx8fGaMmXKPdsn/0X2xIkTd2xz9uxZ/fe//9Wjjz6q/v37p3m/X79+at68ub744gudPXtW0u3hk82bN0/T1mazqWTJkurUqVOqZdOmTVP16tXl6uqqYsWKqU+fPrp27VqqdcuWLat27dpp1apVql+/vtzc3PTpp5+mm7lZs2b6+eefderUqZShXGXLlk2TZfz48SpVqpRcXV3VokULHT16NM22tm3bpscee0w+Pj5yd3dX06ZN9fvvv9/x87qXf3/mK1asUNu2bRUQECAXFxeVL19e48aNSzUUVJKOHDmip59+WsWLF5erq6tKlSqlLl26KDIyUtLtIX63bt3S//73v5Rj7tWrV4YyxcTEKDY2NlPHMXjwYNWqVUt9+/ZVbGyskpKS9MorrygwMFCjRo2SdHsYWKdOneTn5ydXV1fVr19fP/zwQ6rtXL16VUOGDFHNmjXl6ekpb29vtWnTRrt3707VLnlo6+LFi/Xuu++qZMmScnd3V1RUlBISEjRmzBhVrFhRrq6uKly4sB555BGtWbPmrscQGxub5opJZly6dElFixZVs2bNZBhGyvKjR4/Kw8NDzz77bKr28+fPV8OGDeXu7q5ChQqpSZMmWr169R23/9VXX8lisejkyZOplid/FqGhoamWf/bZZypfvrzc3NzUsGFD/fbbb2m2md49V7169ZKnp6fOnTunjh07ytPTU0WLFtWQIUPS9MMrV66oe/fu8vb2lq+vr3r27Kndu3dn6D6uevXqpRp6Kd0egte4cWMdPHgw1fJvv/1WDRo0UIMGDVKWValSRS1atNDSpUtTllWvXl1FihRJta6Li4sef/xxnT17Vjdu3Ei1zWLFiqU61xYtWlSdO3fWihUrFBcXl2o7rVq10o8//pjqZwvgziiuANjV66+/rhkzZmjo0KGaMGFChtb58ccfJUnPP/+83XI89NBDKl++/D2/WErSsWPHJClliE16fv31VyUlJaUZOvZPPXr0UGJiolauXClJevbZZ7Vp0yaFh4enard582adP38+1ZDFPn366M0331SjRo00ffp09e7dWwsWLFDr1q3T3Mt1+PBhde3aVa1atdL06dPvOKzunXfeUZ06dVSkSBHNmzdP8+bNS3P/1aRJk7R8+XINGTJEw4YN09atW9MUsevXr1eTJk0UFRWlUaNGacKECbp+/boeffRR/fnnn3f8PO7m35/5V199JU9PTw0ePFjTp09XvXr1NHLkSL399tsp68THx6t169baunWrBgwYoE8++UQvv/yyjh8/ruvXr0uS5s2bJxcXFzVu3DjlmPv06XPPPF999ZU8PDzk5uamatWqpRnmdyeOjo767LPPdOLECY0bN04zZ87Ujh07NHv2bLm7u2v//v168MEHdfDgQb399tv64IMP5OHhoY4dO2r58uUp2zl+/Li+//57tWvXTh9++KHefPNN7d27V02bNtX58+fT7HfcuHH6+eefNWTIEE2YMEHOzs4aPXq0xowZo+bNm2vmzJl65513VKZMmTT30vxbWFiY4uPjVbdu3XTfT0hIUERERJp/MTExkiR/f3/Nnj1bGzdu1McffyzpdtHeq1cveXl5adasWSnbGjNmjLp37y4nJyeNHTtWY8aMUenSpbV+/foMfd738t///ld9+vRR8eLFNWXKFDVq1EgdOnTQmTNnMrR+UlKSWrdurcKFC2vq1Klq2rSpPvjgA3322WcpbWw2m9q3b69FixapZ8+eGj9+vC5cuKCePXveV/bw8PBUBZLNZtOePXtUv379NG0bNmyoY8eOpSqa7rRNd3d3ubu7pyzbuXOn6tatm2a4asOGDRUdHa2///471fJ69erp+vXr2r9/f1YOCyh4zL50BiD3yeqwwMDAQEOS8eabb2Zqf08++aQhybh+/Xqq5TExMcbly5dT/l27di3NPtMbFpjsiSeeMCQZkZGRhmH831C4L7/80rh8+bJx/vx54+effzbKli1rWCwW46+//rrjtgYNGmRIMnbu3HnHNjt27DAkGYMHDzYMwzAOHz6c7jDCvn37Gp6eninD+X777TdDkrFgwYJU7VauXJlmefJnvHLlyjvm+Kd7DQusWrWqERcXl7J8+vTphiRj7969hmHcHnZYsWJFo3Xr1obNZktpFx0dbQQFBRmtWrW66/6Tf05jxowxLl++bISHhxuhoaFGcHCwISllGGh6Qxv79OljuLu7G7GxsYZhGMbOnTszNJQxs8MCH374YWPatGnGihUrjNmzZxs1atQwJBmzZs3K8Db69+9vODk5GZ6enqmGVrVo0cKoWbNmyjEYxu3P9OGHHzYqVqyYsiw2NjbN0L4TJ04YLi4uxtixY1OWJf/cypUrl+Yzq127dpaG8H3xxRepfub/lNzf0vs3ceLEVG27du1quLu7G3///bfx/vvvG5KM77//PuX9I0eOGFar1XjyySfTHOs/+9a/h/DNnTvXkGScOHEi1TrJn8WGDRsMwzCM+Ph4w9/f36hTp06qPv3ZZ58ZktI9Z82dOzdlWc+ePQ1JqT5vwzCM4OBgo169eimv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/aVly5bJYrFo3rx5Gb7fJCM++ugjHTp0SH379tXKlStTrlCtWrVKK1asSJm2+d86d+6sIUOGaMiQIfLz80tzFaNp06bq06ePJk6cqF27dikkJEROTk46cuSIvvnmG02fPj3D96/9W7169bRkyRINHjxYDRo0kKen5z1/dv9ktVr1xRdfqE2bNqpevbp69+6tkiVL6ty5c9qwYYO8vb1TptLPqocffliFChVSz549NXDgwJSf3b+/cK9fv179+/fXM888o0qVKikxMVHz5s2Tg4ODnn766VTHvHbtWn344YcKCAhQUFCQHnjggXT3/cknn+j7779X+/btVaZMGV24cEFffvmlTp8+rXnz5qWaGCErPvnkEz3yyCOqWbOmXnrpJZUrV04XL17Uli1bdPbs2ZTnWLVr105jx45V79699fDDD2vv3r1asGBBhu8Vkm4PR23WrJnq1asnPz8/bd++Xd9++226z2X7J1dXV4WEhGjt2rUaO3ZsmvfPnTun+fPnp1nu6empjh07Srr9bLsrV65o7dq1cnBw0GOPPaYXX3xR7733np544gnVrl1bFSpU0DvvvKNx48apcePGeuqpp+Ti4qK//vpLAQEBmjhxYrr5qlevrgcffFDDhg3T1atX5efnp8WLF6cptJ2cnPTee++pT58+evTRR/Xss8/qxIkTmjt3bqY+x3vp2LGjGjZsqDfeeENHjx5VlSpV9MMPP6QMIb3XldNp06Zp1qxZeuihh+Tu7p7ms33yySfl4eEhSerbt68+//xztW3bVkOGDJGTk5M+/PBDFStWTG+88UbKOsuXL9dbb72lihUrqmrVqmm22apVq5R7ATt16qQHH3xQvXv31oEDB1SkSBHNmjVLSUlJGjNmTJq8a9asUfv27bnnCsgo0+YpBJDrzZ8/33jwwQcNDw8Pw8XFxahSpYoxZsyYVNNKG8bdp0X/7bffDDc3NyMoKMg4d+7cXfcXExNjTJs2zXjooYcMb29vw9HR0ShevLjRrl07Y8GCBUZiYmKafSb/c3R0NPz8/IwHHnjAGDZsmHHq1Kk020+euvleU3nfTVxcnPHRRx8Z9erVMzw8PAx3d3ejbt26xrRp04z4+Pg7rteoUSNDkvHiiy/esc1nn31m1KtXz3BzczO8vLyMmjVrGm+99ZZx/vz5lDaBgYGZmm775s2bRrdu3QxfX9+U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", + "image/png": "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xcXFpjEbN24UISEhol27dsLT01OMHTtW5Ofnm57fv39/k9f8+uuvIjY2VrRv316o1WoxefJkcenSJanikIScM87KyhLh4eHCzc1NODk5iT59+oh3331XXLlyRcpIWpSl8v3555/FoEGDRLt27YSLi4sYMWKEOHz4sNkcrfEclnO+PH8bLFy4sNk5unbtarav/fv3i+DgYOHo6Ci6detmto/GeX7/muPHj4shQ4YIlUol7rvvPvHee++1cALSknO+ycnJok+fPsLFxUWo1WoxcOBAs1tM2wJL5nurMUlJSeL3f5svKSkRjz32mHB2dhadOnUSf/nLX4Rer5ciCknIOd8vv/xSBAcHi/bt24t27dqJoKAg8fHHH5t9/IzcWSrfG/38mzRpktk81v7+qxDChu8lSUREREREJFN8zxYREREREZEE2GwRERERERFJgM0WERERERGRBNhsERERERERSYDNFhERERERkQTYbBEREREREUmAzRYREREREZEE2GwRERERERFJgM0WERERERGRBNhsERFRmyOEQGRkJKKjo5s8l5CQAHd3d5SVlVmhMiIiak3YbBERUZujUCiQlJSEzMxMrF692rS9uLgY8+bNw8qVK+Hr69ui+9Tr9S06HxERyR+bLSIiapP8/PywYsUK/N///R+Ki4shhMCLL76IqKgohISE4LHHHkP79u3h7e2NiRMn4pdffjG9du/evRgyZAjc3d3RsWNHPP744zhz5ozp+ZKSEigUCmzevBlDhw6Fk5MTPvvsM2scJhERWZFCCCGsXQQREZG1xMTEoLKyEn/84x/x1ltv4cSJE+jXrx+mTJmC559/HrW1tXjttddQX1+PtLQ0AMC2bdugUCjw4IMPorq6GgsWLEBJSQlycnKgVCpRUlKCgIAA+Pv7Y9myZQgJCYGTkxM6d+5s5aMlIiJLYrNFRERt2vnz59GvXz9cuHAB27ZtQ15eHg4ePIiUlBTTmLKyMvj5+aGwsBC9evVqMscvv/wCT09P5ObmIjAw0NRsffTRR5g9e7YlD4eIiGSElxESEVGb5uXlhWnTpqFPnz6IiYnB8ePHsX//frRv39709cADDwCA6VLB06dPIzY2Ft26dYNarYa/vz8AoLS01Gzuhx56yKLHQkRE8mJv7QKIiIiszd7eHvb2DT8Sq6ur8cQTT+D9999vMq7xMsAnnngCXbt2xSeffIIuXbrAaDQiMDAQV69eNRvfrl076YsnIiLZYrNFRER0ndDQUGzbtg3+/v6mBux6v/76KwoLC/HJJ5/gkUceAQCkp6dbukwiIrIBvIyQiIjoOnFxcbhw4QJiY2Nx9OhRnDlzBikpKZg8eTIMBgM8PDzQsWNH/POf/0RRURHS0tIwd+5ca5dNREQyxGaLiIjoOl26dMG3334Lg8GAqKgo9O/fH/Hx8XB3d4dSqYRSqcSmTZuQlZWFwMBAzJkzB0uXLrV22UREJEO8GyEREREREZEEuLJFREREREQkATZbREREREREEmCzRUREREREJAE2W0RERERERBJgs0VERERERCQBNltEREREREQSYLNFREREREQkATZbREREREREEmCzRUREREREJAE2W0RERERERBJgs0VERERERCSB/w+16X3+8YI1gAAAAABJRU5ErkJggg==", "text/plain": [ "
" ] @@ -327,28 +454,42 @@ "output_type": "display_data" }, { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAHWCAYAAACbsXOkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/OQEPoAAAACXBIWXMAAA9hAAAPYQGoP6dpAACJIUlEQVR4nOzdd1gU58IF8LO79N6lF6mCvXexYSemR5MYTXLTNGr8TNGogCZqTFNjoukmUdOLHcWCvcQWBQRpiiAd6W3Zne8PZCMRdMGF2YXzex6em52Z3Tm7vBc5zMw7EkEQBBAREREREdF9kYodgIiIiIiIqC1guSIiIiIiItIAlisiIiIiIiINYLkiIiIiIiLSAJYrIiIiIiIiDWC5IiIiIiIi0gCWKyIiIiIiIg1guSIiIiIiItIAlisiIiIiIiINYLkiIiJqQHR0NCQSCX777TexoxARkY5guSIiaobw8HBIJBLk5eU1uL5z584IDg5WPb569SokEgk++OCDetsJgoAXX3wREokE4eHh99xvVVUVPvnkEwwePBjW1tYwMDCAs7MzQkND8eOPP0KhUNyxz7ovfX192NnZYeDAgVi4cCHS0tLueP26QnH7czp27Ihp06YhJSVFrc9GLpdj7dq16NOnD8zNzWFmZoY+ffpg7dq1kMvlar1Ga9qyZQtWr14t2v7/+32SyWRwd3fHgw8+iAsXLrTIPpcvX46//vpL7e1vz3f718qVK+/6vHHjxsHa2hrZ2dl3rCsqKoKTkxP69esHpVLZ1LdARKSV9MQOQETUXgmCgFdeeQVffPEFFi9efM9ylZubi3HjxuHs2bMYM2YMFi1aBBsbG2RlZWHfvn2YOnUqkpKSsHjx4nrPmzJlCsaPHw+lUombN2/i77//xurVq7FmzRp8/fXXeOKJJ+7Y1+zZs9GnTx/I5XKcO3cOX3zxBXbu3IlLly7B2dm50YxlZWWYMGECDh06hIkTJ2L69OmQSqWIjIzEnDlz8Mcff2Dnzp0wNTVt1mfWErZs2YKYmBjMnTtX1Bx13yeFQoHLly9j/fr12L17N06ePInu3btrdF/Lly/HI488gsmTJ6v9nNGjR2PatGn1lvXo0eOuz/nss8/QuXNnvPbaa9iyZUu9dQsXLkReXh4iIyMhlfJvvUTURghERNRkYWFhAgAhNze3wfVBQUHCsGHDVI9TU1MFAML777+vWjZz5kwBgPD222+rtc8xY8YIUqlU+P333xtc//fffwubNm266z7rXL16VfDz8xMMDAyECxcuqJYfPHhQACD8+uuv9bZfu3atAEBYvnz5XTO+8MILAgDhk08+uWPdunXrBADCSy+9dNfX0DSlUimUl5c3un7ChAmCh4fHHcsb+yw0rbHv07Zt2wQAwgsvvKDxfZqamgrPPPOM2tsDEGbOnNmsfb333nsCAGHPnj2qZadPnxakUqnwxhtvNOs1m6qiokJQKBStsi8iat/4pyIiIhHMmTMHn376KRYsWIB33nnnntufOHECe/bswQsvvICHHnqowW169+6NJ598Uq39e3h4YOPGjaiursaqVavuuf2IESMAAKmpqY1uk56ejq+//hojRozArFmz7lg/c+ZMDB8+HF999RXS09MB1J4+OXz48Du2VSqVcHFxwSOPPFJv2erVqxEUFAQjIyN06NABL774Im7evFnvuZ6enpg4cSL27NmD3r17w9jYGJ9//nmDmYODg7Fz505cu3ZNdaqbp6fnHVneffdduLq6wsjICCNHjkRSUtIdr3Xq1CmMHTsWlpaWMDExwbBhw3Ds2LFGP697+e9nvnXrVkyYMAHOzs4wNDSEt7c3li1bVu9UUABITEzEww8/DEdHRxgZGcHV1RVPPPEEioqKANSe4ldWVobvvvtO9Z6nT5+uVqaKigpUVlY26X3MmzcPXbt2xSuvvILKykooFAq89NJL8PDwQFhYGAAgPj4ejzzyCGxsbGBkZITevXtj27Zt9V6noKAA8+fPR5cuXWBmZgYLCwuMGzcO//zzT73t6k5t/emnn7Bo0SK4uLjAxMQExcXFkMvliIiIgK+vL4yMjGBra4vBgwcjKiqqSe+JiKgxPC2QiKiVvfbaa1i7di3efPNNLF++XK3nbN++HQDw1FNPaSzHgAED4O3trdYvlsnJyQAAW1vbRrfZvXs3FArFHaeO3W7atGk4ePAgIiMj8fzzz+Pxxx9HeHg4srKy4OjoqNru6NGjuHHjRr1TFl988UVs3LgRM2bMwOzZs5Gamop169bh/PnzOHbsGPT19VXbJiQkYMqUKXjxxRfxv//9D/7+/g3mefvtt1FUVIT09HR8/PHHAAAzM7N626xcuRJSqRTz589HUVERVq1ahSeffBKnTp1SbXPgwAGMGzcOvXr1QlhY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/suwfv16FBUVITg4GE5OTqqvn3/+WbVNWloaMjMzVY8HDhyILVu24IsvvkC3bt3w22+/4a+//qo3CcYbb7yBV199FS+88AL69OmD0tJSREZGwsjIqFXfHxER6YZeHtZ4qKcLACBsWyyUSqHeekEQEL4tFgqlgDFBHTDE116MmEREpOVEveZKEIR7bhMdHX3HskcffRSPPvpoo8+RSCRYunQpli5dej/xiIioHXlrbAD2xGThn+u106w/2ttNtW5PXA6OJ+fDQE+KRRMCRUxJRETajOc0EBERAXCwMMLskb4Aam8QfLO8GqdSC3AqR4Lw7XEAgJeGdoSbjXbcooOIiLSPVswWSEREpA1mDPLCz39fR0peGQavPICyagUAGQA5pBLA24GzAxIRUeN45IqIiOgWAz0pxnepvaVHbbH6l1IA5v50AZExmQ09lYiIiOWKiIiojkIp4PdzGXfdJmJ7HBTKe18zTERE7Q/LFRER0S2nUwuQWVTZ6HoBQGZRJU6nFrReKCIi0hksV0RERLfklDRerJqzHRERtS8sV0RERLc4mKt3P0R1tyMiovaF5YqIiOiWvl42cLI0gqSR9RIATpZG6Otl05qxiIhIR7BcERER3SKTShA2qfYmwf8tWHWPwyYFQiZtrH4REVF7xnJFRER0m7GdnbD+qZ5wtKx/6p+jpRHWP9UTYzs7iZSMiIi0HW8iTERE9B9jOzthdKAjTiTlYO+RUwgZ0g8DfBx4xIqIiO6K5YqIiKgBMqkE/bxskH9ZQD8vGxYrIiK6J54WSEREREREpAEsV0RERERERBrAckVERERERKQBLFdEREREREQawHJFRERERESkASxXREREREREGsByRUREREREpAEsV0RERERERBrAckVERERERKQBLFdEREREREQaoCd2AG0kCAIAoLi4WOQkgFwuR3l5OYqLi6Gvry92HKIm4fglXccxTLqM45d0mTaN37pOUNcR7oblqgElJSUAADc3N5GTEBERERGRNigpKYGlpeVdt5EI6lSwdkapVOLGjRswNzeHRCIRNUtxcTHc3Nxw/fp1WFhYiJqFqKk4fknXcQyTLuP4JV2mTeNXEASUlJTA2dkZUundr6rikasGSKVSuLq6ih2jHgsLC9EHFlFzcfySruMYJl3G8Uu6TFvG772OWNXhhBZEREREREQawHJFRERERESk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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/plain": [ - "HumanMessage(content=\"FINAL ANSWER\\n\\nThe complete line graph of the UK's GDP from 2018 to 2022 is displayed above, with the following GDP values for each year:\\n\\n- 2018: 2.16 trillion GBP\\n- 2019: 2.23 trillion GBP\\n- 2020: 1.99 trillion GBP\\n- 2021: 2.23 trillion GBP\\n- 2022: 2.27 trillion GBP\\n\\nThe graph shows the fluctuations in the UK's GDP over the specified period, with a notable dip in 2020 likely due to the economic impact of the COVID-19 pandemic.\", name='Researcher')" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "{'call_tool': {'messages': [FunctionMessage(content=\"python_repl response: Succesfully executed:\\n```python\\nimport matplotlib.pyplot as plt\\n\\n# Since the exact GDP data was not provided, we will use placeholder data for illustration purposes.\\n# These are not the actual GDP values for the UK.\\nyears = [2018, 2019, 2020, 2021, 2022]\\ngdp_values = [2600, 2700, 2300, 2500, 2700] # Placeholder values in billion GBP\\n\\nplt.figure(figsize=(10, 5))\\nplt.plot(years, gdp_values, marker='o')\\nplt.title('UK GDP Over the Past 5 Years (Placeholder Data)')\\nplt.xlabel('Year')\\nplt.ylabel('GDP in Billion GBP')\\nplt.grid(True)\\nplt.show()\\n```\\nStdout: \", name='python_repl')]}}\n", + "----\n", + "{'Chart Generator': {'messages': [HumanMessage(content=\"I have executed a sample Python code to illustrate how one would generate a line graph of the UK's GDP over the past five years. However, please note that due to the lack of actual GDP data in the search results, I have used placeholder values. These are not the actual GDP figures for the UK.\\n\\nHere is a line graph using the placeholder data:\\n\\n![UK GDP Over the Past 5 Years (Placeholder Data)](sandbox:/code)\\n\\nTo obtain the final graph with accurate data, you would need to replace the `gdp_values` list in the code with the actual GDP figures for the UK for the years 2018 through 2022. Once you have the correct values, you can execute the modified code to generate the correct line graph.\", name='Chart Generator')], 'sender': 'Chart Generator'}}\n", + "----\n", + "{'Researcher': {'messages': [HumanMessage(content='I have plotted a line graph with placeholder data as an example. To finalize the graph with accurate GDP data for the UK, you would need to provide the actual GDP figures for the years 2018, 2019, 2020, 2021, and 2022. Once you have the correct data, you can replace the placeholder `gdp_values` in the code with the actual figures to generate the accurate line graph.', name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n", + "{'Chart Generator': {'messages': [HumanMessage(content=\"It seems there's been a misunderstanding. Let's try to retrieve the actual GDP data for the UK for the past five years and create the line graph with that data. I will now attempt to find the GDP values for the UK for the years 2018 through 2022 using a different approach. Please hold on while I look up this information.\", additional_kwargs={'function_call': {'arguments': '{\"code\":\"import matplotlib.pyplot as plt\\\\nimport requests\\\\nfrom bs4 import BeautifulSoup\\\\n\\\\n# Attempt to scrape the GDP data from a reliable source\\\\nurl = \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp/timeseries/abmi/pgdp\\'\\\\n\\\\n# Send a GET request\\\\ndata = requests.get(url)\\\\n\\\\n# Check if the request was successful\\\\nif data.status_code == 200:\\\\n # Parse the HTML content\\\\n soup = BeautifulSoup(data.text, \\'html.parser\\')\\\\n # Find the data within the HTML\\\\n # This is a placeholder selector; actual selector needs to be determined based on the webpage structure\\\\n gdp_data = soup.select(\\'selector-for-gdp-data\\')\\\\n print(\\'Data found:\\', gdp_data)\\\\nelse:\\\\n print(\\'Failed to retrieve data, status code:\\', data.status_code)\"}', 'name': 'python_repl'}}, name='Chart Generator')], 'sender': 'Chart Generator'}}\n", + "----\n", + "{'call_tool': {'messages': [FunctionMessage(content=\"python_repl response: Succesfully executed:\\n```python\\nimport matplotlib.pyplot as plt\\nimport requests\\nfrom bs4 import BeautifulSoup\\n\\n# Attempt to scrape the GDP data from a reliable source\\nurl = 'https://www.ons.gov.uk/economy/grossdomesticproductgdp/timeseries/abmi/pgdp'\\n\\n# Send a GET request\\ndata = requests.get(url)\\n\\n# Check if the request was successful\\nif data.status_code == 200:\\n # Parse the HTML content\\n soup = BeautifulSoup(data.text, 'html.parser')\\n # Find the data within the HTML\\n # This is a placeholder selector; actual selector needs to be determined based on the webpage structure\\n gdp_data = soup.select('selector-for-gdp-data')\\n print('Data found:', gdp_data)\\nelse:\\n print('Failed to retrieve data, status code:', data.status_code)\\n```\\nStdout: Data found: []\\n\", name='python_repl')]}}\n", + "----\n", + "{'Chart Generator': {'messages': [HumanMessage(content=\"It appears that the attempt to scrape the GDP data from the source provided was unsuccessful, as the placeholder selector did not match any elements on the web page. Web scraping requires knowledge of the specific structure of the page and the correct selectors to extract the data, which we do not have at this time.\\n\\nGiven the current limitations, we'll need to find another way to obtain the actual GDP data. Normally, this would involve manually downloading the data from a trusted source such as the Office for National Statistics (ONS) or accessing it through an API if available.\\n\\nSince we cannot directly scrape the data here and do not have access to an API, we'll need to obtain the GDP data from a trusted and accessible source and then proceed to generate the line graph using the actual figures.\\n\\nIf you can provide the GDP data for the UK for the years 2018 through 2022, I will be able to plot the line graph. Otherwise, we may need to conclude this task and attempt it again once the data is available.\", name='Chart Generator')], 'sender': 'Chart Generator'}}\n", + "----\n", + "{'Researcher': {'messages': [HumanMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"query\":\"UK GDP 2018 2019 2020 2021 2022\"}', 'name': 'tavily_search_results_json'}}, name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n", + "{'call_tool': {'messages': [FunctionMessage(content='tavily_search_results_json response: [{\\'url\\': \\'https://www.focus-economics.com/country-indicator/united-kingdom/gdp/\\', \\'content\\': \\'United Kingdom GDP Chart Note: This chart displays Economic Growth (GDP, annual variation in %) for United Kingdom from 2013 to 2022.Source: UK United Kingdom GDP United Kingdom GDP Overview Latest News GDP forecasts and outlook for United Kingdom Economic Growth in United KingdomThe pandemic caused a historic contraction in 2020, but a strong recovery followed in 2021-2022, albeit with ongoing challenges from Brexit-related trade disruptions and soft global economic conditions. The United Kingdom recorded an average real GDP growth rate of 1.7% in the decade to 2022.\\'}, {\\'url\\': \\'https://www.statista.com/statistics/281744/gdp-of-the-united-kingdom/\\', \\'content\\': \"Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Additional Information Strategy and business building for the data-driven economy: GDP of the UK 1948-2022 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023 United Kingdom 1948 to 2022Annual GDP growth figures show that the UK economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020. The UK\\'s...\"}, {\\'url\\': \\'https://www.beta.ons.gov.uk/economy/grossdomesticproductgdp/compendium/unitedkingdomnationalaccountsthebluebook/2022/nationalaccountsataglance\\', \\'content\\': \\'of UK GDP over 2020 and 2021 accounts at a glance, UK National Accounts, The Blue Book: 2022 Figure 1: The UK economy increased by 7.5% in 2021, having seen the largest fall in over 300 years in 2020 National accounts at a glance A summary of recent trends and movements within the UK economy. Notice 23 January 2023Gross domestic product There was a rebound in activity in the UK economy in 2021, in response to the easing of coronavirus (COVID-19) restrictions through the year. Real gross domestic...\\'}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp\\', \\'content\\': \\'Spotlight GDP quarterly national accounts, UK: July to September 2023 GDP monthly estimate, UK: October 2023 Monthly index values for monthly gross domestic product (GDP) and the main sectors in the UK to four decimal places. GDP output approach, Blue Book 2023 indicative data Time series related to Gross Domestic Product (GDP)UK GDP is now estimated to have shown no growth in Quarter 2 (Apr to June) 2023, revised down from a previously estimated increase of 0.2%, while growth in Quarter 1 (Jan to Mar) 2023 and all...\\'}, {\\'url\\': \\'https://data.oecd.org/united-kingdom.htm\\', \\'content\\': \\'GDP Gross domestic product (GDP), US dollars/capita, 2022 Real GDP forecast, Annual growth rate (%), 2025 56 766 Selected indicators for United Kingdom Share Population Population, Million persons, 2002-2022 67.3 million 104.5 % of GDP Tax Tax on personal income, % of GDP, 2022 Unemployment <%unemployment-latest-value-info-bubble%> Data United Kingdom Previous editions Country statistical profile Further country information2018-2022 United Kingdom (red), DAC Countries (black) ODA grant equivalent % of gross national income ... % of GDP 2021 United Kingdom % of GDP: Total % of GDP 2002-2021 United Kingdom (red) Total % of GDP ... 2001-2020 United Kingdom (red) Men Years 2022: Overweight or obese population Indicator: 64.2 Measured % of population aged 15+\\'}]', name='tavily_search_results_json')]}}\n", + "----\n", + "{'Researcher': {'messages': [HumanMessage(content=\"The search results provide some information about the UK's GDP growth rates and the general economic situation, but they do not present the actual GDP values for the years 2018 through 2022 in a format that can be directly used to create a line graph.\\n\\nHowever, the snippets from the search results do offer some insights:\\n\\n- The UK's economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020 due to the pandemic.\\n- The UK's GDP in 2022 was approximately 2.2 trillion British pounds.\\n- There was a rebound in activity in the UK economy in 2021, in response to the easing of COVID-19 restrictions.\\n\\nTo generate the line graph, we need the actual GDP values for each of the past five years. Since the search has not provided the structured annual GDP data required for this, I will make another attempt to specifically find the GDP figures for the UK for the years 2018, 2019, 2020, 2021, and 2022.\", additional_kwargs={'function_call': {'arguments': '{\"query\":\"UK GDP 2018, 2019, 2020, 2021, 2022\"}', 'name': 'tavily_search_results_json'}}, name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n", + "{'call_tool': {'messages': [FunctionMessage(content='tavily_search_results_json response: [{\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp/bulletins/gdpmonthlyestimateuk/latest\\', \\'content\\': \\'Figure 1: UK GDP is estimated to have grown by 0.3% in November 2023 GDP monthly estimate, UK: November 2023 data from January 2022 to September 2023, as published in our\\\\xa0GDP quarterly national accounts, UK: July to September (GDP) in November 2023.1. Main points Monthly real gross domestic product (GDP) is estimated to have shown no growth in the three months to October 2023, compared with the three months to July 2023. Monthly GDP is...\\'}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp/bulletins/gdpmonthlyestimateuk/october2022\\', \\'content\\': \\'GDP monthly estimate, UK: October 2022 Figure 1: UK GDP is estimated to have grown by 0.5% in October 2022 The 0.8% growth in construction output in October 2022 represents an increase of £123 million in monetary terms the contributions from the services sector to GDP in both September and October 2022.Monthly real gross domestic product (GDP) is estimated to have grown by 0.5% in October 2022 (Figure 1) following a fall of 0.6% in September 2022. Monthly GDP is now estimated to be 0.4% above its pre-coronavirus levels (February 2020). Estimates for September 2022 were affected by the bank holiday for the State Funeral of Her Majesty Queen ...\\'}, {\\'url\\': \\'https://www.statista.com/statistics/281744/gdp-of-the-united-kingdom/\\', \\'content\\': \"Strategy and business building for the data-driven economy: GDP of the UK 1948-2022 Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Additional Information UK economy expected to shrink in 2023 How big is the UK economy compared to others? United Kingdom 1948 to 2022Annual GDP growth figures show that the UK economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020. The UK\\'s economic...\"}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp/bulletins/gdpmonthlyestimateuk/february2022\\', \\'content\\': \"GDP monthly estimate, UK : February 2022 Figure 1: UK monthly GDP is estimated to have grown by 0.1% in February 2022, and is now 1.5% above its pre-coronavirus Further detail on construction growth rates can be found in Construction output in Great Britain: February 2022. estimate of GDP release published on the same day, which will cover the period up to Quarter 1 (Jan to Mar) 2022.Gross domestic product (GDP) grew by 0.1% in February 2022, following 0.8% growth in January 2022. Services grew by 0.2% and was the main contributor to February\\'s growth in GDP; this was...\"}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp\\', \\'content\\': \\'Spotlight GDP quarterly national accounts, UK: July to September 2023 GDP monthly estimate, UK: October 2023 GDP output approach, Blue Book 2023 indicative data Monthly index values for monthly gross domestic product (GDP) and the main sectors in the UK to four decimal places. Volume estimates for the NHS Test and Trace services and vaccine programmes and their impact on real GDP.UK GDP is now estimated to have shown no growth in Quarter 2 (Apr to June) 2023, revised down from a previously estimated increase of 0.2%, while growth in Quarter 1 (Jan to Mar) 2023 and all...\\'}]', name='tavily_search_results_json')]}}\n", + "----\n", + "{'Researcher': {'messages': [HumanMessage(content='The search results from Tavily do not provide the specific annual GDP figures for the UK for the years 2018 through 2022. While there is mention of growth rates and comparisons to pre-coronavirus levels, the exact GDP values in million GBP or any other standardized unit for each of those years are not included in a structured format that we can use directly to create a line graph.\\n\\nTo proceed, we would need the actual GDP values for the years 2018, 2019, 2020, 2021, and 2022 from a reliable source such as the Office for National Statistics (ONS) or other economic databases. Since the information is not available through the current search results, it would be necessary to access these figures from official economic reports or databases that offer historical GDP data in a structured format.\\n\\nOnce the GDP data for the specified years is obtained, it can be used to plot the line graph accurately. Without the exact figures, we are unable to complete the task at this moment.', name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n", + "{'Chart Generator': {'messages': [HumanMessage(content=\"It seems we have reached an impasse in obtaining the actual GDP data for the UK for the past five years through the current means available. Normally, one would access this information through official statistical releases, economic databases, or APIs that provide such data in a structured format.\\n\\nGiven the limitations, we won't be able to proceed with creating the line graph with the actual GDP figures at this time. If you are able to provide the GDP data for the UK for the years 2018 through 2022, I can assist with plotting the line graph. Otherwise, this task may need to be revisited when the data is available through a different approach or tool.\", name='Chart Generator')], 'sender': 'Chart Generator'}}\n", + "----\n", + "{'Researcher': {'messages': [HumanMessage(content='FINAL ANSWER:\\n\\nUnfortunately, we have reached an impasse in obtaining the actual GDP data for the UK for the past five years through the current means available. Without the exact figures for the years 2018 through 2022, we are unable to complete the task of creating an accurate line graph at this time. If the GDP data for the UK for these years becomes available, I can assist with plotting the line graph. For now, this task may need to be revisited when the data is accessible through a different approach or tool.', name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n", + "{'__end__': {'messages': [HumanMessage(content=\"Fetch the UK's GDP over the past 5 years, then draw a line graph of it. Once you code it up, finish.\"), HumanMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"query\":\"UK GDP 2018 2019 2020 2021 2022\"}', 'name': 'tavily_search_results_json'}}, name='Researcher'), FunctionMessage(content='tavily_search_results_json response: [{\\'url\\': \\'https://www.statista.com/topics/3795/gdp-of-the-uk/\\', \\'content\\': \\'Monthly GDP of the UK 2019-2023 Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Quarterly GDP of the UK 2019-2023 Monthly GDP growth of the UK 2019-2023 Quarterly GDP growth of the UK 2019-2023Economy UK GDP - Statistics & Facts United Kingdom In 2022, the gross domestic product of the United Kingdom amounted to approximately 2.2 trillion British pounds, compared with 2.14...\\'}, {\\'url\\': \\'https://www.statista.com/statistics/281734/gdp-growth-in-the-united-kingdom-uk/\\', \\'content\\': \"Annual growth of gross domestic product in the United Kingdom from 1949 to 2022 Additional Information Strategy and business building for the data-driven economy: Annual GDP growth in the UK 1949-2022 United Kingdom 1949 to 2022 Other statistics on the topicThe UK economy Economy RPI annual inflation rate UK 2000-2028 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023The United Kingdom\\'s economy grew by 4.3 percent in 2022, after a growth rate of 8.7 percent in 2021, and a record 10.4 percent decline in 2020, due to the economic fallout caused by...\"}, {\\'url\\': \\'https://www.statista.com/statistics/281744/gdp-of-the-united-kingdom/\\', \\'content\\': \"Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Additional Information Strategy and business building for the data-driven economy: GDP of the UK 1948-2022 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023 United Kingdom 1948 to 2022Annual GDP growth figures show that the UK economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020. The UK\\'s...\"}, {\\'url\\': \\'https://www.beta.ons.gov.uk/economy/grossdomesticproductgdp/compendium/unitedkingdomnationalaccountsthebluebook/2022/nationalaccountsataglance\\', \\'content\\': \\'of UK GDP over 2020 and 2021 accounts at a glance, UK National Accounts, The Blue Book: 2022 Figure 1: The UK economy increased by 7.5% in 2021, having seen the largest fall in over 300 years in 2020 National accounts at a glance A summary of recent trends and movements within the UK economy. Notice 23 January 2023Gross domestic product There was a rebound in activity in the UK economy in 2021, in response to the easing of coronavirus (COVID-19) restrictions through the year. Real gross domestic...\\'}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp\\', \\'content\\': \\'Spotlight GDP quarterly national accounts, UK: July to September 2023 GDP monthly estimate, UK: October 2023 Monthly index values for monthly gross domestic product (GDP) and the main sectors in the UK to four decimal places. GDP output approach, Blue Book 2023 indicative data Time series related to Gross Domestic Product (GDP)UK GDP is now estimated to have shown no growth in Quarter 2 (Apr to June) 2023, revised down from a previously estimated increase of 0.2%, while growth in Quarter 1 (Jan to Mar) 2023 and all...\\'}]', name='tavily_search_results_json'), HumanMessage(content=\"The search results contain several snippets of information, but none of them have the complete data for the UK's GDP over the past five years in a structured format that would be suitable for generating a line graph. The snippets do provide some yearly growth rates and mention significant economic events, but they do not present the actual GDP values for each year.\\n\\nTo generate a line graph, we need the UK's GDP figures for each of the past five years in the same units (usually million GBP or billion GBP) so that we can plot them accurately. The search results mention the GDP of the UK in 2022 as approximately 2.2 trillion British pounds, but we need the figures for the previous years as well.\\n\\nGiven that the search results do not provide the required structured data, we would need to conduct an additional search or consult a database that provides historical GDP figures for the UK, such as the Office for National Statistics (ONS) or an economic statistics database. Once we have the GDP figures for each of the last five years, we can then proceed to generate the line graph.\\n\\nTo continue with the task, I would need to perform another search specifically asking for the UK's GDP figures for the years 2018, 2019, 2020, 2021, and 2022.\", additional_kwargs={'function_call': {'arguments': '{\"query\":\"UK GDP 2018 2019 2020 2021 2022\"}', 'name': 'tavily_search_results_json'}}, name='Researcher'), FunctionMessage(content='tavily_search_results_json response: [{\\'url\\': \\'https://www.statista.com/topics/3795/gdp-of-the-uk/\\', \\'content\\': \\'Monthly GDP of the UK 2019-2023 Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Quarterly GDP of the UK 2019-2023 Monthly GDP growth of the UK 2019-2023 Quarterly GDP growth of the UK 2019-2023Economy UK GDP - Statistics & Facts United Kingdom In 2022, the gross domestic product of the United Kingdom amounted to approximately 2.2 trillion British pounds, compared with 2.14...\\'}, {\\'url\\': \\'https://www.statista.com/statistics/281734/gdp-growth-in-the-united-kingdom-uk/\\', \\'content\\': \"Annual growth of gross domestic product in the United Kingdom from 1949 to 2022 Additional Information Strategy and business building for the data-driven economy: Annual GDP growth in the UK 1949-2022 United Kingdom 1949 to 2022 Other statistics on the topicThe UK economy Economy RPI annual inflation rate UK 2000-2028 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023The United Kingdom\\'s economy grew by 4.3 percent in 2022, after a growth rate of 8.7 percent in 2021, and a record 10.4 percent decline in 2020, due to the economic fallout caused by...\"}, {\\'url\\': \\'https://www.statista.com/statistics/281744/gdp-of-the-united-kingdom/\\', \\'content\\': \"Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Additional Information Strategy and business building for the data-driven economy: GDP of the UK 1948-2022 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023 United Kingdom 1948 to 2022Annual GDP growth figures show that the UK economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020. The UK\\'s...\"}, {\\'url\\': \\'https://www.beta.ons.gov.uk/economy/grossdomesticproductgdp/compendium/unitedkingdomnationalaccountsthebluebook/2022/nationalaccountsataglance\\', \\'content\\': \\'of UK GDP over 2020 and 2021 accounts at a glance, UK National Accounts, The Blue Book: 2022 Figure 1: The UK economy increased by 7.5% in 2021, having seen the largest fall in over 300 years in 2020 National accounts at a glance A summary of recent trends and movements within the UK economy. Notice 23 January 2023Gross domestic product There was a rebound in activity in the UK economy in 2021, in response to the easing of coronavirus (COVID-19) restrictions through the year. Real gross domestic...\\'}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp\\', \\'content\\': \\'Spotlight GDP quarterly national accounts, UK: July to September 2023 GDP monthly estimate, UK: October 2023 Monthly index values for monthly gross domestic product (GDP) and the main sectors in the UK to four decimal places. GDP output approach, Blue Book 2023 indicative data Time series related to Gross Domestic Product (GDP)UK GDP is now estimated to have shown no growth in Quarter 2 (Apr to June) 2023, revised down from a previously estimated increase of 0.2%, while growth in Quarter 1 (Jan to Mar) 2023 and all...\\'}]', name='tavily_search_results_json'), HumanMessage(content=\"The search results still do not provide the annual GDP figures for the UK for the last five years in a structured format that is suitable for creating a line graph. The snippets mention approximate GDP values and growth rates for certain years but do not give a year-by-year breakdown with exact numbers.\\n\\nTo proceed, we need the specific GDP values for 2018, 2019, 2020, 2021, and 2022. Since the search results from Tavily are not yielding the required data in a usable format, we would typically look for official economic reports or databases such as the UK's Office for National Statistics (ONS), which regularly publishes comprehensive GDP data.\\n\\nGiven the limitations of the tools at hand, I am unable to provide the exact GDP figures for the years in question to generate a line graph. Further action should involve directly accessing the ONS website or a similar authoritative source where annual GDP data for the UK is available in a structured format, and then using this data to plot the line graph.\\n\\nTo continue with the task, you would need to obtain the GDP figures for each of the past five years from a reliable source and then use that data to create the line graph.\", name='Researcher'), HumanMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"code\":\"import matplotlib.pyplot as plt\\\\n\\\\n# Since the exact GDP data was not provided, we will use placeholder data for illustration purposes.\\\\n# These are not the actual GDP values for the UK.\\\\nyears = [2018, 2019, 2020, 2021, 2022]\\\\ngdp_values = [2600, 2700, 2300, 2500, 2700] # Placeholder values in billion GBP\\\\n\\\\nplt.figure(figsize=(10, 5))\\\\nplt.plot(years, gdp_values, marker=\\'o\\')\\\\nplt.title(\\'UK GDP Over the Past 5 Years (Placeholder Data)\\')\\\\nplt.xlabel(\\'Year\\')\\\\nplt.ylabel(\\'GDP in Billion GBP\\')\\\\nplt.grid(True)\\\\nplt.show()\"}', 'name': 'python_repl'}}, name='Chart Generator'), FunctionMessage(content=\"python_repl response: Succesfully executed:\\n```python\\nimport matplotlib.pyplot as plt\\n\\n# Since the exact GDP data was not provided, we will use placeholder data for illustration purposes.\\n# These are not the actual GDP values for the UK.\\nyears = [2018, 2019, 2020, 2021, 2022]\\ngdp_values = [2600, 2700, 2300, 2500, 2700] # Placeholder values in billion GBP\\n\\nplt.figure(figsize=(10, 5))\\nplt.plot(years, gdp_values, marker='o')\\nplt.title('UK GDP Over the Past 5 Years (Placeholder Data)')\\nplt.xlabel('Year')\\nplt.ylabel('GDP in Billion GBP')\\nplt.grid(True)\\nplt.show()\\n```\\nStdout: \", name='python_repl'), HumanMessage(content=\"I have executed a sample Python code to illustrate how one would generate a line graph of the UK's GDP over the past five years. However, please note that due to the lack of actual GDP data in the search results, I have used placeholder values. These are not the actual GDP figures for the UK.\\n\\nHere is a line graph using the placeholder data:\\n\\n![UK GDP Over the Past 5 Years (Placeholder Data)](sandbox:/code)\\n\\nTo obtain the final graph with accurate data, you would need to replace the `gdp_values` list in the code with the actual GDP figures for the UK for the years 2018 through 2022. Once you have the correct values, you can execute the modified code to generate the correct line graph.\", name='Chart Generator'), HumanMessage(content='I have plotted a line graph with placeholder data as an example. To finalize the graph with accurate GDP data for the UK, you would need to provide the actual GDP figures for the years 2018, 2019, 2020, 2021, and 2022. Once you have the correct data, you can replace the placeholder `gdp_values` in the code with the actual figures to generate the accurate line graph.', name='Researcher'), HumanMessage(content=\"It seems there's been a misunderstanding. Let's try to retrieve the actual GDP data for the UK for the past five years and create the line graph with that data. I will now attempt to find the GDP values for the UK for the years 2018 through 2022 using a different approach. Please hold on while I look up this information.\", additional_kwargs={'function_call': {'arguments': '{\"code\":\"import matplotlib.pyplot as plt\\\\nimport requests\\\\nfrom bs4 import BeautifulSoup\\\\n\\\\n# Attempt to scrape the GDP data from a reliable source\\\\nurl = \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp/timeseries/abmi/pgdp\\'\\\\n\\\\n# Send a GET request\\\\ndata = requests.get(url)\\\\n\\\\n# Check if the request was successful\\\\nif data.status_code == 200:\\\\n # Parse the HTML content\\\\n soup = BeautifulSoup(data.text, \\'html.parser\\')\\\\n # Find the data within the HTML\\\\n # This is a placeholder selector; actual selector needs to be determined based on the webpage structure\\\\n gdp_data = soup.select(\\'selector-for-gdp-data\\')\\\\n print(\\'Data found:\\', gdp_data)\\\\nelse:\\\\n print(\\'Failed to retrieve data, status code:\\', data.status_code)\"}', 'name': 'python_repl'}}, name='Chart Generator'), FunctionMessage(content=\"python_repl response: Succesfully executed:\\n```python\\nimport matplotlib.pyplot as plt\\nimport requests\\nfrom bs4 import BeautifulSoup\\n\\n# Attempt to scrape the GDP data from a reliable source\\nurl = 'https://www.ons.gov.uk/economy/grossdomesticproductgdp/timeseries/abmi/pgdp'\\n\\n# Send a GET request\\ndata = requests.get(url)\\n\\n# Check if the request was successful\\nif data.status_code == 200:\\n # Parse the HTML content\\n soup = BeautifulSoup(data.text, 'html.parser')\\n # Find the data within the HTML\\n # This is a placeholder selector; actual selector needs to be determined based on the webpage structure\\n gdp_data = soup.select('selector-for-gdp-data')\\n print('Data found:', gdp_data)\\nelse:\\n print('Failed to retrieve data, status code:', data.status_code)\\n```\\nStdout: Data found: []\\n\", name='python_repl'), HumanMessage(content=\"It appears that the attempt to scrape the GDP data from the source provided was unsuccessful, as the placeholder selector did not match any elements on the web page. Web scraping requires knowledge of the specific structure of the page and the correct selectors to extract the data, which we do not have at this time.\\n\\nGiven the current limitations, we'll need to find another way to obtain the actual GDP data. Normally, this would involve manually downloading the data from a trusted source such as the Office for National Statistics (ONS) or accessing it through an API if available.\\n\\nSince we cannot directly scrape the data here and do not have access to an API, we'll need to obtain the GDP data from a trusted and accessible source and then proceed to generate the line graph using the actual figures.\\n\\nIf you can provide the GDP data for the UK for the years 2018 through 2022, I will be able to plot the line graph. Otherwise, we may need to conclude this task and attempt it again once the data is available.\", name='Chart Generator'), HumanMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"query\":\"UK GDP 2018 2019 2020 2021 2022\"}', 'name': 'tavily_search_results_json'}}, name='Researcher'), FunctionMessage(content='tavily_search_results_json response: [{\\'url\\': \\'https://www.focus-economics.com/country-indicator/united-kingdom/gdp/\\', \\'content\\': \\'United Kingdom GDP Chart Note: This chart displays Economic Growth (GDP, annual variation in %) for United Kingdom from 2013 to 2022.Source: UK United Kingdom GDP United Kingdom GDP Overview Latest News GDP forecasts and outlook for United Kingdom Economic Growth in United KingdomThe pandemic caused a historic contraction in 2020, but a strong recovery followed in 2021-2022, albeit with ongoing challenges from Brexit-related trade disruptions and soft global economic conditions. The United Kingdom recorded an average real GDP growth rate of 1.7% in the decade to 2022.\\'}, {\\'url\\': \\'https://www.statista.com/statistics/281744/gdp-of-the-united-kingdom/\\', \\'content\\': \"Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Additional Information Strategy and business building for the data-driven economy: GDP of the UK 1948-2022 Economy Average annual earnings for full-time employees in the UK 1999-2023 Economy Inflation rate in the UK 1989-2023 United Kingdom 1948 to 2022Annual GDP growth figures show that the UK economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020. The UK\\'s...\"}, {\\'url\\': \\'https://www.beta.ons.gov.uk/economy/grossdomesticproductgdp/compendium/unitedkingdomnationalaccountsthebluebook/2022/nationalaccountsataglance\\', \\'content\\': \\'of UK GDP over 2020 and 2021 accounts at a glance, UK National Accounts, The Blue Book: 2022 Figure 1: The UK economy increased by 7.5% in 2021, having seen the largest fall in over 300 years in 2020 National accounts at a glance A summary of recent trends and movements within the UK economy. Notice 23 January 2023Gross domestic product There was a rebound in activity in the UK economy in 2021, in response to the easing of coronavirus (COVID-19) restrictions through the year. Real gross domestic...\\'}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp\\', \\'content\\': \\'Spotlight GDP quarterly national accounts, UK: July to September 2023 GDP monthly estimate, UK: October 2023 Monthly index values for monthly gross domestic product (GDP) and the main sectors in the UK to four decimal places. GDP output approach, Blue Book 2023 indicative data Time series related to Gross Domestic Product (GDP)UK GDP is now estimated to have shown no growth in Quarter 2 (Apr to June) 2023, revised down from a previously estimated increase of 0.2%, while growth in Quarter 1 (Jan to Mar) 2023 and all...\\'}, {\\'url\\': \\'https://data.oecd.org/united-kingdom.htm\\', \\'content\\': \\'GDP Gross domestic product (GDP), US dollars/capita, 2022 Real GDP forecast, Annual growth rate (%), 2025 56 766 Selected indicators for United Kingdom Share Population Population, Million persons, 2002-2022 67.3 million 104.5 % of GDP Tax Tax on personal income, % of GDP, 2022 Unemployment <%unemployment-latest-value-info-bubble%> Data United Kingdom Previous editions Country statistical profile Further country information2018-2022 United Kingdom (red), DAC Countries (black) ODA grant equivalent % of gross national income ... % of GDP 2021 United Kingdom % of GDP: Total % of GDP 2002-2021 United Kingdom (red) Total % of GDP ... 2001-2020 United Kingdom (red) Men Years 2022: Overweight or obese population Indicator: 64.2 Measured % of population aged 15+\\'}]', name='tavily_search_results_json'), HumanMessage(content=\"The search results provide some information about the UK's GDP growth rates and the general economic situation, but they do not present the actual GDP values for the years 2018 through 2022 in a format that can be directly used to create a line graph.\\n\\nHowever, the snippets from the search results do offer some insights:\\n\\n- The UK's economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020 due to the pandemic.\\n- The UK's GDP in 2022 was approximately 2.2 trillion British pounds.\\n- There was a rebound in activity in the UK economy in 2021, in response to the easing of COVID-19 restrictions.\\n\\nTo generate the line graph, we need the actual GDP values for each of the past five years. Since the search has not provided the structured annual GDP data required for this, I will make another attempt to specifically find the GDP figures for the UK for the years 2018, 2019, 2020, 2021, and 2022.\", additional_kwargs={'function_call': {'arguments': '{\"query\":\"UK GDP 2018, 2019, 2020, 2021, 2022\"}', 'name': 'tavily_search_results_json'}}, name='Researcher'), FunctionMessage(content='tavily_search_results_json response: [{\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp/bulletins/gdpmonthlyestimateuk/latest\\', \\'content\\': \\'Figure 1: UK GDP is estimated to have grown by 0.3% in November 2023 GDP monthly estimate, UK: November 2023 data from January 2022 to September 2023, as published in our\\\\xa0GDP quarterly national accounts, UK: July to September (GDP) in November 2023.1. Main points Monthly real gross domestic product (GDP) is estimated to have shown no growth in the three months to October 2023, compared with the three months to July 2023. Monthly GDP is...\\'}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp/bulletins/gdpmonthlyestimateuk/october2022\\', \\'content\\': \\'GDP monthly estimate, UK: October 2022 Figure 1: UK GDP is estimated to have grown by 0.5% in October 2022 The 0.8% growth in construction output in October 2022 represents an increase of £123 million in monetary terms the contributions from the services sector to GDP in both September and October 2022.Monthly real gross domestic product (GDP) is estimated to have grown by 0.5% in October 2022 (Figure 1) following a fall of 0.6% in September 2022. Monthly GDP is now estimated to be 0.4% above its pre-coronavirus levels (February 2020). Estimates for September 2022 were affected by the bank holiday for the State Funeral of Her Majesty Queen ...\\'}, {\\'url\\': \\'https://www.statista.com/statistics/281744/gdp-of-the-united-kingdom/\\', \\'content\\': \"Strategy and business building for the data-driven economy: GDP of the UK 1948-2022 Gross domestic product of the United Kingdom from 1948 to 2022 (in million GBP) Additional Information UK economy expected to shrink in 2023 How big is the UK economy compared to others? United Kingdom 1948 to 2022Annual GDP growth figures show that the UK economy grew by 4.1 percent in 2022, after growing by 7.6 percent in 2021, and a record 9.4 percent fall in GDP in 2020. The UK\\'s economic...\"}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp/bulletins/gdpmonthlyestimateuk/february2022\\', \\'content\\': \"GDP monthly estimate, UK : February 2022 Figure 1: UK monthly GDP is estimated to have grown by 0.1% in February 2022, and is now 1.5% above its pre-coronavirus Further detail on construction growth rates can be found in Construction output in Great Britain: February 2022. estimate of GDP release published on the same day, which will cover the period up to Quarter 1 (Jan to Mar) 2022.Gross domestic product (GDP) grew by 0.1% in February 2022, following 0.8% growth in January 2022. Services grew by 0.2% and was the main contributor to February\\'s growth in GDP; this was...\"}, {\\'url\\': \\'https://www.ons.gov.uk/economy/grossdomesticproductgdp\\', \\'content\\': \\'Spotlight GDP quarterly national accounts, UK: July to September 2023 GDP monthly estimate, UK: October 2023 GDP output approach, Blue Book 2023 indicative data Monthly index values for monthly gross domestic product (GDP) and the main sectors in the UK to four decimal places. Volume estimates for the NHS Test and Trace services and vaccine programmes and their impact on real GDP.UK GDP is now estimated to have shown no growth in Quarter 2 (Apr to June) 2023, revised down from a previously estimated increase of 0.2%, while growth in Quarter 1 (Jan to Mar) 2023 and all...\\'}]', name='tavily_search_results_json'), HumanMessage(content='The search results from Tavily do not provide the specific annual GDP figures for the UK for the years 2018 through 2022. While there is mention of growth rates and comparisons to pre-coronavirus levels, the exact GDP values in million GBP or any other standardized unit for each of those years are not included in a structured format that we can use directly to create a line graph.\\n\\nTo proceed, we would need the actual GDP values for the years 2018, 2019, 2020, 2021, and 2022 from a reliable source such as the Office for National Statistics (ONS) or other economic databases. Since the information is not available through the current search results, it would be necessary to access these figures from official economic reports or databases that offer historical GDP data in a structured format.\\n\\nOnce the GDP data for the specified years is obtained, it can be used to plot the line graph accurately. Without the exact figures, we are unable to complete the task at this moment.', name='Researcher'), HumanMessage(content=\"It seems we have reached an impasse in obtaining the actual GDP data for the UK for the past five years through the current means available. Normally, one would access this information through official statistical releases, economic databases, or APIs that provide such data in a structured format.\\n\\nGiven the limitations, we won't be able to proceed with creating the line graph with the actual GDP figures at this time. If you are able to provide the GDP data for the UK for the years 2018 through 2022, I can assist with plotting the line graph. Otherwise, this task may need to be revisited when the data is available through a different approach or tool.\", name='Chart Generator'), HumanMessage(content='FINAL ANSWER:\\n\\nUnfortunately, we have reached an impasse in obtaining the actual GDP data for the UK for the past five years through the current means available. Without the exact figures for the years 2018 through 2022, we are unable to complete the task of creating an accurate line graph at this time. If the GDP data for the UK for these years becomes available, I can assist with plotting the line graph. For now, this task may need to be revisited when the data is accessible through a different approach or tool.', name='Researcher')], 'sender': 'Researcher'}}\n", + "----\n" + ] } ], "source": [ - "result = graph.invoke(\n", + "for s in graph.stream(\n", " {\n", " \"messages\": [\n", " HumanMessage(\n", @@ -360,14 +501,15 @@ " },\n", " # Maximum number of steps to take in the graph\n", " {\"recursion_limit\": 150},\n", - ")\n", - "result[\"messages\"][-1]" + "):\n", + " print(s)\n", + " print(\"----\")" ] }, { "cell_type": "code", "execution_count": null, - "id": "23cc22c7-33a8-4399-91e4-ac1abf8f0fec", + "id": "010fc36e-4116-4758-bcac-b02c7dcd405d", "metadata": {}, "outputs": [], "source": [] @@ -389,7 +531,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.2" + "version": "3.11.1" } }, "nbformat": 4,