diff --git "a/test.ipynb" "b/test.ipynb" --- "a/test.ipynb" +++ "b/test.ipynb" @@ -1,21 +1,57 @@ { "cells": [ { - "cell_type": "markdown", - "id": "d0cc4adf", "metadata": {}, - "source": [ - "### Question data" - ] + "cell_type": "markdown", + "source": "# Setup", + "id": "94ccd7635ea1a327" }, { + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:12.781103Z", + "start_time": "2025-05-11T20:49:11.773286Z" + } + }, "cell_type": "code", - "id": "14e3f417", + "source": [ + "import os\n", + "from dotenv import load_dotenv\n", + "from langchain_huggingface import HuggingFaceEmbeddings\n", + "from langchain_community.vectorstores import SupabaseVectorStore\n", + "from supabase.client import Client, create_client\n", + "\n", + "load_dotenv()" + ], + "id": "d3a0e620344270b7", + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 1 + }, + { + "metadata": {}, + "cell_type": "markdown", + "source": "### Question data", + "id": "d0cc4adf" + }, + { "metadata": { - "jupyter": { - "is_executing": true + "ExecuteTime": { + "end_time": "2025-05-11T20:49:13.736975Z", + "start_time": "2025-05-11T20:49:13.730142Z" } }, + "cell_type": "code", "source": [ "# Load metadata.jsonl\n", "import json\n", @@ -28,47 +64,19 @@ " json_data = json.loads(json_str)\n", " json_QA.append(json_data)" ], + "id": "14e3f417", "outputs": [], - "execution_count": null + "execution_count": 2 }, { "cell_type": "code", - "execution_count": 3, "id": "5e2da6fc", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "==================================================\n", - "Task ID: ed58682d-bc52-4baa-9eb0-4eb81e1edacc\n", - "Question: What is the last word before the second chorus of the King of Pop's fifth single from his sixth studio album?\n", - "Level: 2\n", - "Final Answer: stare\n", - "Annotator Metadata: \n", - " ├── Steps: \n", - " │ ├── 1. Google searched \"King of Pop\".\n", - " │ ├── 2. Clicked on Michael Jackson's Wikipedia.\n", - " │ ├── 3. Scrolled down to \"Discography\".\n", - " │ ├── 4. Clicked on the sixth album, \"Thriller\".\n", - " │ ├── 5. Looked under \"Singles from Thriller\".\n", - " │ ├── 6. Clicked on the fifth single, \"Human Nature\".\n", - " │ ├── 7. Google searched \"Human Nature Michael Jackson Lyrics\".\n", - " │ ├── 8. Looked at the opening result with full lyrics sourced by Musixmatch.\n", - " │ ├── 9. Looked for repeating lyrics to determine the chorus.\n", - " │ ├── 10. Determined the chorus begins with \"If they say\" and ends with \"Does he do me that way?\"\n", - " │ ├── 11. Found the second instance of the chorus within the lyrics.\n", - " │ ├── 12. Noted the last word before the second chorus - \"stare\".\n", - " ├── Number of steps: 12\n", - " ├── How long did this take?: 20 minutes\n", - " ├── Tools:\n", - " │ ├── Web Browser\n", - " └── Number of tools: 1\n", - "==================================================\n" - ] + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:13.821410Z", + "start_time": "2025-05-11T20:49:13.817222Z" } - ], + }, "source": [ "# randomly select 3 samples\n", "# {\"task_id\": \"c61d22de-5f6c-4958-a7f6-5e9707bd3466\", \"Question\": \"A paper about AI regulation that was originally submitted to arXiv.org in June 2022 shows a figure with three axes, where each axis has a label word at both ends. Which of these words is used to describe a type of society in a Physics and Society article submitted to arXiv.org on August 11, 2016?\", \"Level\": 2, \"Final answer\": \"egalitarian\", \"file_name\": \"\", \"Annotator Metadata\": {\"Steps\": \"1. Go to arxiv.org and navigate to the Advanced Search page.\\n2. Enter \\\"AI regulation\\\" in the search box and select \\\"All fields\\\" from the dropdown.\\n3. Enter 2022-06-01 and 2022-07-01 into the date inputs, select \\\"Submission date (original)\\\", and submit the search.\\n4. Go through the search results to find the article that has a figure with three axes and labels on each end of the axes, titled \\\"Fairness in Agreement With European Values: An Interdisciplinary Perspective on AI Regulation\\\".\\n5. Note the six words used as labels: deontological, egalitarian, localized, standardized, utilitarian, and consequential.\\n6. Go back to arxiv.org\\n7. Find \\\"Physics and Society\\\" and go to the page for the \\\"Physics and Society\\\" category.\\n8. Note that the tag for this category is \\\"physics.soc-ph\\\".\\n9. Go to the Advanced Search page.\\n10. Enter \\\"physics.soc-ph\\\" in the search box and select \\\"All fields\\\" from the dropdown.\\n11. Enter 2016-08-11 and 2016-08-12 into the date inputs, select \\\"Submission date (original)\\\", and submit the search.\\n12. Search for instances of the six words in the results to find the paper titled \\\"Phase transition from egalitarian to hierarchical societies driven by competition between cognitive and social constraints\\\", indicating that \\\"egalitarian\\\" is the correct answer.\", \"Number of steps\": \"12\", \"How long did this take?\": \"8 minutes\", \"Tools\": \"1. Web browser\\n2. Image recognition tools (to identify and parse a figure with three axes)\", \"Number of tools\": \"2\"}}\n", @@ -93,38 +101,83 @@ " print(f\" │ ├── {tool}\")\n", " print(f\" └── Number of tools: {sample['Annotator Metadata']['Number of tools']}\")\n", "print(\"=\" * 50)" - ] + ], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "==================================================\n", + "Task ID: 33d8ea3b-6c6b-4ff1-803d-7e270dea8a57\n", + "Question: What is the minimum number of page links a person must click on to go from the english Wikipedia page on The Lord of the Rings (the book) to the english Wikipedia page on A Song of Ice and Fire (the book series)? In your count, include each link you would click on to get to the page. Use the pages as they appeared at the end of the day on July 3, 2023.\n", + "Level: 2\n", + "Final Answer: 2\n", + "Annotator Metadata: \n", + " ├── Steps: \n", + " │ ├── 1. Search the web for “lord of the rings wikipedia”.\n", + " │ ├── 2. Click on Wikipedia result.\n", + " │ ├── 3. Click “View history” to see if the page has been edited since July 3, 2023.\n", + " │ ├── 4. Since it hasn’t been, return to the current revision.\n", + " │ ├── 5. Ctrl-F for “song” to see if A Song of Ice and Fire is linked to on this page.\n", + " │ ├── 6. Not seeing A Song of Ice and Fire on the current page, search for a link to a page that will likely mention A Song of Ice and Fire.\n", + " │ ├── 7. Click the link for “High fantasy”.\n", + " │ ├── 8. Click “View history” to see if the page has been edited since July 3, 2023.\n", + " │ ├── 9. Since it hasn’t been, return to the current revision.\n", + " │ ├── 10. Ctrl-F for “song”, and find a link to A Song of Ice and Fire.\n", + " │ ├── 11. Count the links: the High fantasy page and the A Song of Ice and Fire page make two.\n", + " ├── Number of steps: 11\n", + " ├── How long did this take?: 5 minutes\n", + " ├── Tools:\n", + " │ ├── 1. Search engine\n", + " │ ├── 2. Web browser\n", + " │ ├── 3. Counter\n", + " └── Number of tools: 3\n", + "==================================================\n" + ] + } + ], + "execution_count": 3 }, { "cell_type": "code", - "execution_count": 56, "id": "4bb02420", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:24.124607Z", + "start_time": "2025-05-11T20:49:13.931181Z" + } + }, "source": [ "### build a vector database based on the metadata.jsonl\n", "# https://python.langchain.com/docs/integrations/vectorstores/supabase/\n", - "import os\n", - "from dotenv import load_dotenv\n", - "from langchain_huggingface import HuggingFaceEmbeddings\n", - "from langchain_community.vectorstores import SupabaseVectorStore\n", - "from supabase.client import Client, create_client\n", - "\n", "\n", - "load_dotenv()\n", "embeddings = HuggingFaceEmbeddings(model_name=\"sentence-transformers/all-mpnet-base-v2\") # dim=768\n", "\n", "supabase_url = os.environ.get(\"SUPABASE_URL\")\n", "supabase_key = os.environ.get(\"SUPABASE_SERVICE_KEY\")\n", "supabase: Client = create_client(supabase_url, supabase_key)" - ] + ], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/aleixlopezpascual/final_assignment_v3/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "execution_count": 4 }, { "cell_type": "code", - "execution_count": null, "id": "a070b955", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:37.260220Z", + "start_time": "2025-05-11T20:49:24.134086Z" + } + }, "source": [ "# wrap the metadata.jsonl's questions and answers into a list of document\n", "from langchain.schema import Document\n", @@ -138,8 +191,861 @@ " },\n", " \"embedding\" : embeddings.embed_query(content),\n", " }\n", - " docs.append(doc)\n", - "\n", + " docs.append(doc)" + ], + "outputs": [], + "execution_count": 5 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:37.275217Z", + "start_time": "2025-05-11T20:49:37.271232Z" + } + }, + "cell_type": "code", + "source": "docs[0].keys()", + "id": "94ad3a742a0f9ad6", + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['content', 'metadata', 'embedding'])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 6 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:37.306764Z", + "start_time": "2025-05-11T20:49:37.299400Z" + } + }, + "cell_type": "code", + "source": "docs[0]", + "id": "366b7f9e2200fddd", + "outputs": [ + { + "data": { + "text/plain": [ + "{'content': 'Question : A paper about AI regulation that was originally submitted to arXiv.org in June 2022 shows a figure with three axes, where each axis has a label word at both ends. Which of these words is used to describe a type of society in a Physics and Society article submitted to arXiv.org on August 11, 2016?\\n\\nFinal answer : egalitarian',\n", + " 'metadata': {'source': 'c61d22de-5f6c-4958-a7f6-5e9707bd3466'},\n", + " 'embedding': [-0.002634669654071331,\n", + " 0.02306019514799118,\n", + " -0.01757298782467842,\n", + " -0.013291980139911175,\n", + " -0.020390372723340988,\n", + " -0.016542401164770126,\n", + " 0.040015820413827896,\n", + " 0.017529122531414032,\n", + " 0.023523375391960144,\n", + " -0.028402695432305336,\n", + " 0.05848900228738785,\n", + " 0.03848639503121376,\n", + " -0.036033838987350464,\n", + " 0.05896377190947533,\n", + " -0.02319096401333809,\n", + " -0.04314032942056656,\n", + " 0.0205579474568367,\n", + " 0.042271874845027924,\n", + " -0.015511706471443176,\n", + " 0.011203325353562832,\n", + " -0.02394339069724083,\n", + " 0.008462891913950443,\n", + " 0.034201279282569885,\n", + " 0.014322657138109207,\n", + " 0.032600849866867065,\n", + " 0.018118279054760933,\n", + " 0.03146226331591606,\n", + " -0.011441514827311039,\n", + " 0.024735553190112114,\n", + " -0.01013961248099804,\n", + " 0.06563965231180191,\n", + " 0.06661009788513184,\n", + " 0.010979978367686272,\n", + " 0.022725064307451248,\n", + " 2.0829186269111233e-06,\n", + " -0.031171612441539764,\n", + " -0.01904902420938015,\n", + " 0.015555020421743393,\n", + " 0.047359585762023926,\n", + " -0.0333370566368103,\n", + " -0.005494444631040096,\n", + " -0.02123098075389862,\n", + " -0.03431028872728348,\n", + " -0.002660144818946719,\n", + " -0.014628139324486256,\n", + " -0.013374630361795425,\n", + " 0.0523875467479229,\n", + " -0.0076402281410992146,\n", + " -0.032536085695028305,\n", + " -0.03356455639004707,\n", + " 0.01338665746152401,\n", + " -0.050998616963624954,\n", + " -0.02948424220085144,\n", + " -0.010373082011938095,\n", + " -0.0038178032264113426,\n", + " 0.017957346513867378,\n", + " 0.01585584320127964,\n", + " -0.006808921694755554,\n", + " -0.008414482697844505,\n", + " 0.07390625774860382,\n", + " -0.036274828016757965,\n", + " 0.02431362494826317,\n", + " 0.008123979903757572,\n", + " -0.0169353187084198,\n", + " 0.10557392984628677,\n", + " 0.0014651010278612375,\n", + " 0.007015349809080362,\n", + " -0.031939949840307236,\n", + " 0.004718571901321411,\n", + " 0.050509411841630936,\n", + " 0.19570530951023102,\n", + " 0.032000474631786346,\n", + " 0.02874969132244587,\n", + " 0.03275604173541069,\n", + " -0.037697359919548035,\n", + " 0.027806980535387993,\n", + " 0.013025457970798016,\n", + " -0.016645951196551323,\n", + " -0.0022332428488880396,\n", + " -0.05041703209280968,\n", + " 0.031642232090234756,\n", + " 0.07753070443868637,\n", + " -0.030744211748242378,\n", + " 0.039764177054166794,\n", + " -0.07469252496957779,\n", + " 0.06995853036642075,\n", + " -0.015405813232064247,\n", + " 0.04118141531944275,\n", + " -0.07314331084489822,\n", + " -0.04045465216040611,\n", + " -0.01070796325802803,\n", + " -0.011583046987652779,\n", + " 0.04243302345275879,\n", + " 0.003167223185300827,\n", + " 0.03560613468289375,\n", + " 0.0006528274388983846,\n", + " 0.017188072204589844,\n", + " -0.028718432411551476,\n", + " 0.04235910624265671,\n", + " 0.008073941804468632,\n", + " -0.021448951214551926,\n", + " 0.0021353664342314005,\n", + " 0.06783191114664078,\n", + " 0.04190478101372719,\n", + " 0.08950210362672806,\n", + " -0.015146220102906227,\n", + " 0.025773515924811363,\n", + " 0.025072839111089706,\n", + " 0.0004630378680303693,\n", + " 0.03552567958831787,\n", + " 0.00731520913541317,\n", + " 0.005610407330095768,\n", + " -0.01574847847223282,\n", + " 0.019460951909422874,\n", + " 0.02298450842499733,\n", + " -0.030836662277579308,\n", + " -0.01115537341684103,\n", + " 0.003158163744956255,\n", + " -0.027984654530882835,\n", + " 0.010117919184267521,\n", + " 0.008425284177064896,\n", + " 0.007076774723827839,\n", + " -0.010571558028459549,\n", + " 0.003734617494046688,\n", + " -0.04684477299451828,\n", + " 0.005750927142798901,\n", + " -0.048839982599020004,\n", + " 0.014760443940758705,\n", + " 0.022710323333740234,\n", + " -0.0036049659829586744,\n", + " 0.012393668293952942,\n", + " -0.005000544246286154,\n", + " 0.013414066284894943,\n", + " -0.0019753400702029467,\n", + " -0.029460519552230835,\n", + " 0.006208211649209261,\n", + " 0.04327663034200668,\n", + " -0.03282609209418297,\n", + " 0.04128726199269295,\n", + " -0.019187811762094498,\n", + " -0.0217770766466856,\n", + " -0.014756876043975353,\n", + " -0.03367876634001732,\n", + " 0.013694753870368004,\n", + " 0.04465927183628082,\n", + " 0.016151439398527145,\n", + " -0.010275059379637241,\n", + " -0.05972592532634735,\n", + " -0.0006707482971251011,\n", + " 0.007330778986215591,\n", + " -0.026784345507621765,\n", + " 0.01738477125763893,\n", + " -0.011121990159153938,\n", + " -0.00012587881064973772,\n", + " 0.06454270333051682,\n", + " 0.011582930572330952,\n", + " 0.0014504488790407777,\n", + " -0.024454830214381218,\n", + " 0.04665408283472061,\n", + " -0.058933790773153305,\n", + " 0.05982406437397003,\n", + " -0.0017024473054334521,\n", + " 0.06395535171031952,\n", + " -0.028132759034633636,\n", + " -0.0041860067285597324,\n", + " -0.004693467635661364,\n", + " 0.010822162963449955,\n", + " 0.012119379825890064,\n", + " -0.09304259717464447,\n", + " -0.007465425878763199,\n", + " 0.006266313139349222,\n", + " 0.037737902253866196,\n", + " 0.001667196862399578,\n", + " -0.011089840903878212,\n", + " 0.00018215955060441047,\n", + " 0.07960068434476852,\n", + " -0.023905958980321884,\n", + " 0.006395317148417234,\n", + " -0.06851709634065628,\n", + " -0.0015304097905755043,\n", + " -0.03926253691315651,\n", + " -0.01127888634800911,\n", + " -0.018586838617920876,\n", + " 0.010915996506810188,\n", + " 0.004558028653264046,\n", + " -0.003672333899885416,\n", + " -0.022555243223905563,\n", + " -0.08584657311439514,\n", + " -0.002170275431126356,\n", + " -0.046697210520505905,\n", + " -0.03249267488718033,\n", + " 0.0024579528253525496,\n", + " 0.03412649407982826,\n", + " -0.02661522664129734,\n", + " 0.04064067825675011,\n", + " -0.013811669312417507,\n", + " -0.007690237369388342,\n", + " -0.06591427326202393,\n", + " -0.01812717691063881,\n", + " 0.057792723178863525,\n", + " -0.029163463041186333,\n", + " -0.025660233572125435,\n", + " 0.05507468804717064,\n", + " 0.004354835953563452,\n", + " -0.014392134733498096,\n", + " -0.02543715015053749,\n", + " 0.037940073758363724,\n", + " -0.0036121318116784096,\n", + " 0.024686165153980255,\n", + " 0.08713246136903763,\n", + " 0.11850911378860474,\n", + " 0.014539483934640884,\n", + " -0.10350408405065536,\n", + " -0.0011429855367168784,\n", + " -0.04701121151447296,\n", + " 0.004175751470029354,\n", + " 0.004833280108869076,\n", + " 0.02364792488515377,\n", + " -0.05049735680222511,\n", + " -0.01391701027750969,\n", + " -0.005414949264377356,\n", + " 0.04862183704972267,\n", + " -0.0471501424908638,\n", + " -0.015768753364682198,\n", + " -0.034204281866550446,\n", + " 0.024975717067718506,\n", + " -0.02073042094707489,\n", + " -0.005536919925361872,\n", + " -0.002433228772133589,\n", + " -0.019266029819846153,\n", + " -0.027966758236289024,\n", + " 0.0505487360060215,\n", + " -0.00184740056283772,\n", + " -0.01213296689093113,\n", + " -0.03668725863099098,\n", + " -0.0016338287387043238,\n", + " 0.0092572420835495,\n", + " 0.09900709986686707,\n", + " -0.039930928498506546,\n", + " -0.0662119910120964,\n", + " 0.013620669022202492,\n", + " 0.04497472196817398,\n", + " 0.06800892949104309,\n", + " 0.005037286318838596,\n", + " 0.057961344718933105,\n", + " 0.010218670591711998,\n", + " -0.01156136766076088,\n", + " -0.04696835204958916,\n", + " -0.01949932426214218,\n", + " 0.025157760828733444,\n", + " 0.014092723838984966,\n", + " -0.028074178844690323,\n", + " -0.026051081717014313,\n", + " -0.018629243597388268,\n", + " 0.009198138490319252,\n", + " -0.006104218307882547,\n", + " -0.08197355270385742,\n", + " 0.015044000931084156,\n", + " 0.04467941075563431,\n", + " -0.014608283527195454,\n", + " 0.08819227665662766,\n", + " 0.007509428542107344,\n", + " -0.010414468124508858,\n", + " 0.007954941131174564,\n", + " -0.0069016460329294205,\n", + " -0.010237660259008408,\n", + " -0.017175210639834404,\n", + " 0.06531468033790588,\n", + " 0.010659008286893368,\n", + " 0.006931719370186329,\n", + " -0.035468921065330505,\n", + " -0.04003450646996498,\n", + " -0.03174721822142601,\n", + " -0.003177952952682972,\n", + " 0.013706344179809093,\n", + " 0.04051642119884491,\n", + " 0.0406000129878521,\n", + " 0.02013508975505829,\n", + " -0.011152448132634163,\n", + " 0.04112039506435394,\n", + " -0.010956496000289917,\n", + " -0.027334880083799362,\n", + " -0.01467766985297203,\n", + " 0.007155789062380791,\n", + " -0.031312908977270126,\n", + " -0.006655262317508459,\n", + " 0.033579859882593155,\n", + " 0.013021055608987808,\n", + " -0.017468370497226715,\n", + " -0.020633157342672348,\n", + " -0.08207091689109802,\n", + " -0.01639452949166298,\n", + " -0.007760942447930574,\n", + " 0.004679321777075529,\n", + " 0.008204430341720581,\n", + " 0.04054716229438782,\n", + " -0.0024841029662638903,\n", + " 0.01282365620136261,\n", + " 0.023797696456313133,\n", + " 0.07248759269714355,\n", + " 0.008883222006261349,\n", + " 0.06543925404548645,\n", + " 0.00713002122938633,\n", + " -0.03407192602753639,\n", + " -0.04935158044099808,\n", + " 0.04824000969529152,\n", + " 0.06606534868478775,\n", + " -0.03373231366276741,\n", + " 0.013552390038967133,\n", + " 0.048465143889188766,\n", + " 0.04611079394817352,\n", + " 0.0007207902963273227,\n", + " -0.03279798850417137,\n", + " 0.05367812514305115,\n", + " -0.0400458499789238,\n", + " -0.0030804122798144817,\n", + " -0.053869858384132385,\n", + " -0.0165878739207983,\n", + " -0.0013762515736743808,\n", + " 0.028720157220959663,\n", + " 0.03315956890583038,\n", + " 0.009932303801178932,\n", + " -0.02591826394200325,\n", + " 0.04119397699832916,\n", + " 0.024423252791166306,\n", + " -0.01496956404298544,\n", + " -0.0323435477912426,\n", + " -0.006731743924319744,\n", + " 0.029446495696902275,\n", + " 0.007287610322237015,\n", + " 0.007918152958154678,\n", + " -0.010146072134375572,\n", + " -0.02243207022547722,\n", + " -0.01578712835907936,\n", + " 0.021029800176620483,\n", + " 0.015946924686431885,\n", + " -0.06597908586263657,\n", + " 0.00529048265889287,\n", + " -0.040850117802619934,\n", + " 0.014579784125089645,\n", + " -0.04942426085472107,\n", + " -0.04702606797218323,\n", + " 0.01150251179933548,\n", + " -0.0040593561716377735,\n", + " 0.04321623221039772,\n", + " 0.059940144419670105,\n", + " 0.02743799053132534,\n", + " -0.023821605369448662,\n", + " -0.036525800824165344,\n", + " 0.0227236095815897,\n", + " -0.0036396614741533995,\n", + " 0.06745504587888718,\n", + " -0.03718177601695061,\n", + " 0.017290111631155014,\n", + " -0.0517282634973526,\n", + " 0.01951291225850582,\n", + " 0.04273047298192978,\n", + " 0.03246920183300972,\n", + " -0.010021774098277092,\n", + " -0.024396777153015137,\n", + " -0.045648202300071716,\n", + " 0.049896176904439926,\n", + " 0.005997159983962774,\n", + " 0.043423186987638474,\n", + " 0.03193819150328636,\n", + " -0.024819960817694664,\n", + " 0.02547491528093815,\n", + " -0.02625952661037445,\n", + " 0.016126662492752075,\n", + " -0.024077417328953743,\n", + " -0.00981255155056715,\n", + " -0.01745862513780594,\n", + " 0.029219385236501694,\n", + " 0.025041963905096054,\n", + " -0.0028992712032049894,\n", + " 0.00762314023450017,\n", + " 0.0104047367349267,\n", + " 0.024380790069699287,\n", + " -0.022016024217009544,\n", + " 0.057698704302310944,\n", + " 0.0028469872195273638,\n", + " -0.05271538347005844,\n", + " 0.08039356768131256,\n", + " -0.008950183168053627,\n", + " -0.03587312996387482,\n", + " -0.008277269080281258,\n", + " -0.04787948355078697,\n", + " -0.03413078933954239,\n", + " 0.07828041166067123,\n", + " -0.015157248824834824,\n", + " 0.013794142752885818,\n", + " -0.04388789087533951,\n", + " -0.04338032007217407,\n", + " -0.00860451441258192,\n", + " 0.03069683164358139,\n", + " 0.019598200917243958,\n", + " -0.04912331700325012,\n", + " -0.021822135895490646,\n", + " 0.021404210478067398,\n", + " 0.008655610494315624,\n", + " 0.012699274346232414,\n", + " 0.020988276228308678,\n", + " 0.03923216462135315,\n", + " 0.023639455437660217,\n", + " -0.04992711916565895,\n", + " 0.020371155813336372,\n", + " -0.05075705796480179,\n", + " 0.04057437926530838,\n", + " -0.07911901921033859,\n", + " -0.013172636739909649,\n", + " 0.0148845249786973,\n", + " -0.009725064039230347,\n", + " -0.04076891392469406,\n", + " -0.009122541174292564,\n", + " -0.014479629695415497,\n", + " -0.041023194789886475,\n", + " -0.018188422545790672,\n", + " -0.025831039994955063,\n", + " -0.009083966724574566,\n", + " 0.011243901215493679,\n", + " 0.01151696965098381,\n", + " -0.008685738779604435,\n", + " 0.022748306393623352,\n", + " -0.023368874564766884,\n", + " -0.041385382413864136,\n", + " -0.06283857673406601,\n", + " -0.002584814326837659,\n", + " 0.022721314802765846,\n", + " 0.030795304104685783,\n", + " -0.03788352012634277,\n", + " 0.016235800459980965,\n", + " -0.06886465847492218,\n", + " -0.038395028561353683,\n", + " 0.015214100480079651,\n", + " -0.004891248419880867,\n", + " -0.02435111068189144,\n", + " -0.033054452389478683,\n", + " 0.009785245172679424,\n", + " -0.04958034306764603,\n", + " -0.03816225007176399,\n", + " -0.05870545282959938,\n", + " -0.018539980053901672,\n", + " 0.008465869352221489,\n", + " 0.003877372248098254,\n", + " -0.09126294404268265,\n", + " 0.04571693763136864,\n", + " 0.00016745622269809246,\n", + " -0.03706406056880951,\n", + " -0.07265326380729675,\n", + " 0.014030824415385723,\n", + " 0.024624047800898552,\n", + " 0.02048208937048912,\n", + " -0.030132416635751724,\n", + " -0.01138361543416977,\n", + " 0.06956106424331665,\n", + " -0.07716278731822968,\n", + " 0.013762407936155796,\n", + " 0.05541941151022911,\n", + " -0.01262593362480402,\n", + " 0.029387187212705612,\n", + " 0.00174358778167516,\n", + " 0.018247557803988457,\n", + " -0.03690752387046814,\n", + " -0.011039257049560547,\n", + " 0.03380611538887024,\n", + " 0.02804289385676384,\n", + " 0.016133427619934082,\n", + " 0.04428141191601753,\n", + " 0.0032634520903229713,\n", + " -0.0597325824201107,\n", + " -0.008179830387234688,\n", + " -0.05102973058819771,\n", + " -0.0070448811165988445,\n", + " 0.022384706884622574,\n", + " -0.004133657552301884,\n", + " -0.06725755333900452,\n", + " -0.045094408094882965,\n", + " -0.041803989559412,\n", + " 0.00109894631896168,\n", + " -0.03332516551017761,\n", + " -0.039469774812459946,\n", + " -0.0017720567993819714,\n", + " -0.00361104728654027,\n", + " -0.059613220393657684,\n", + " 0.001255390583537519,\n", + " -0.06421744078397751,\n", + " 0.01338503509759903,\n", + " -0.004155253060162067,\n", + " 0.01147147361189127,\n", + " -0.09563890844583511,\n", + " 0.025757789611816406,\n", + " -0.07686460018157959,\n", + " -0.05221434310078621,\n", + " 0.09785885363817215,\n", + " 0.02696821466088295,\n", + " 0.05433380976319313,\n", + " -0.009211809374392033,\n", + " 0.04775456711649895,\n", + " 0.008341927081346512,\n", + " 0.00861097127199173,\n", + " -0.033195339143276215,\n", + " -0.019128751009702682,\n", + " 0.0020651966333389282,\n", + " 0.04897334426641464,\n", + " -0.029391389340162277,\n", + " 0.07149279117584229,\n", + " 0.028995925560593605,\n", + " 0.03145631030201912,\n", + " -0.027793746441602707,\n", + " -0.0053723398596048355,\n", + " -0.019301636144518852,\n", + " 0.029584547504782677,\n", + " -0.053522318601608276,\n", + " -0.0004233938525430858,\n", + " -0.026527035981416702,\n", + " 0.015348592773079872,\n", + " -0.04437144100666046,\n", + " 0.02870798483490944,\n", + " -0.0051371087320148945,\n", + " 0.0335332453250885,\n", + " -0.031830381602048874,\n", + " -0.01568051055073738,\n", + " -0.019446898251771927,\n", + " 0.025255724787712097,\n", + " 0.02709783986210823,\n", + " 0.06026000902056694,\n", + " 0.004336720798164606,\n", + " 0.027517449110746384,\n", + " -0.017239315435290337,\n", + " -0.009114130400121212,\n", + " 0.06143210828304291,\n", + " -0.0005590535583905876,\n", + " -0.010370689444243908,\n", + " 0.01375425886362791,\n", + " -0.012423936277627945,\n", + " 0.030062643811106682,\n", + " -0.007364360615611076,\n", + " -0.08027222752571106,\n", + " 0.0093068927526474,\n", + " -0.016336064785718918,\n", + " -0.07673550397157669,\n", + " 0.009538617916405201,\n", + " -0.008824382908642292,\n", + " 0.06418278813362122,\n", + " 0.003448690054938197,\n", + " 0.039837419986724854,\n", + " -0.02834644354879856,\n", + " -0.002781536430120468,\n", + " -0.008697469718754292,\n", + " -0.09088705480098724,\n", + " -0.02555425837635994,\n", + " 0.016010088846087456,\n", + " -0.10316161811351776,\n", + " 0.029621800407767296,\n", + " 0.046320658177137375,\n", + " -6.857137562294363e-33,\n", + " -0.021621961146593094,\n", + " -0.04817189276218414,\n", + " 0.03901229053735733,\n", + " -0.004985841456800699,\n", + " -0.06144525483250618,\n", + " -0.01748894713819027,\n", + " 0.01322949305176735,\n", + " -0.013633494265377522,\n", + " -0.0712985023856163,\n", + " -0.039634332060813904,\n", + " 0.015939820557832718,\n", + " 0.029119368642568588,\n", + " 0.002637868979945779,\n", + " -0.0168831218034029,\n", + " 0.038217607885599136,\n", + " -0.0069684372283518314,\n", + " -0.031115831807255745,\n", + " -0.06426054239273071,\n", + " 0.029238536953926086,\n", + " 0.0021622050553560257,\n", + " -0.028495190665125847,\n", + " -0.007963829673826694,\n", + " 0.04967361316084862,\n", + " -0.06907685846090317,\n", + " 0.06746205687522888,\n", + " 0.006055401172488928,\n", + " 0.014288611710071564,\n", + " -0.0017710536485537887,\n", + " -0.005548357963562012,\n", + " 0.006638750433921814,\n", + " -0.00446308683604002,\n", + " 0.005751179531216621,\n", + " -0.0012957042781636119,\n", + " -0.06199806556105614,\n", + " -0.0031614224426448345,\n", + " 0.04475956782698631,\n", + " 0.011398843489587307,\n", + " -0.051305949687957764,\n", + " -0.03810010105371475,\n", + " 0.010065917856991291,\n", + " -0.015065459534525871,\n", + " -0.019240137189626694,\n", + " 0.000947606167756021,\n", + " 0.005156329367309809,\n", + " -0.0343010313808918,\n", + " -0.0683659240603447,\n", + " 0.02917490154504776,\n", + " -0.01754322461783886,\n", + " 0.011155392043292522,\n", + " 0.03554486483335495,\n", + " 0.02509222738444805,\n", + " 0.01401441264897585,\n", + " -0.04801076650619507,\n", + " 0.034625984728336334,\n", + " -0.03269793465733528,\n", + " -0.013363421894609928,\n", + " 0.04138528183102608,\n", + " 0.06476683169603348,\n", + " -0.0839647650718689,\n", + " 0.03774556890130043,\n", + " -0.020632807165384293,\n", + " -0.04145556315779686,\n", + " 0.001201158156618476,\n", + " -0.006138276774436235,\n", + " 0.027654238045215607,\n", + " -0.00046422448940575123,\n", + " 0.010759720578789711,\n", + " 0.0474126972258091,\n", + " -0.05066175386309624,\n", + " -0.06622277945280075,\n", + " 0.02703370898962021,\n", + " 0.07353314012289047,\n", + " 0.009069688618183136,\n", + " -0.03359762951731682,\n", + " -0.0110212042927742,\n", + " -0.06042158231139183,\n", + " 0.0026825100649148226,\n", + " 0.006839897483587265,\n", + " 0.04937922582030296,\n", + " 0.014604314230382442,\n", + " -0.008908428251743317,\n", + " -0.028015436604619026,\n", + " -0.048934705555438995,\n", + " 0.010803699493408203,\n", + " -0.03307461366057396,\n", + " -0.06739415228366852,\n", + " -0.010912865400314331,\n", + " 0.024999726563692093,\n", + " -0.007953696884214878,\n", + " -0.015193399973213673,\n", + " 0.06553444266319275,\n", + " 0.011256423778831959,\n", + " -0.0042674052529037,\n", + " -0.024528928101062775,\n", + " -0.10101453959941864,\n", + " 0.011371267028152943,\n", + " 0.04396237060427666,\n", + " -0.007721093017607927,\n", + " -0.008544344455003738,\n", + " -0.016210244968533516,\n", + " -0.012711049988865852,\n", + " -0.000701909651979804,\n", + " -0.005274559371173382,\n", + " 0.06531921774148941,\n", + " -0.0068701161071658134,\n", + " -0.023475592955946922,\n", + " -0.05590588226914406,\n", + " -0.018033042550086975,\n", + " -0.04487154260277748,\n", + " 0.0025067764800041914,\n", + " 0.030465416610240936,\n", + " -0.04786740988492966,\n", + " 0.05252247676253319,\n", + " -0.007882999256253242,\n", + " -0.0013190893223509192,\n", + " -0.006703077349811792,\n", + " 0.044160548597574234,\n", + " 0.017661869525909424,\n", + " 0.021562816575169563,\n", + " 0.07617024332284927,\n", + " 0.01589404232800007,\n", + " 0.04167177528142929,\n", + " -0.07404530793428421,\n", + " 0.036653485149145126,\n", + " 0.022879356518387794,\n", + " 0.03443761169910431,\n", + " 0.016310250386595726,\n", + " 0.0664006918668747,\n", + " 0.039904676377773285,\n", + " -0.023147499188780785,\n", + " 0.014191867783665657,\n", + " -0.05034564435482025,\n", + " 2.813728201545018e-07,\n", + " -0.0014307472156360745,\n", + " 0.03852580487728119,\n", + " -0.008815601468086243,\n", + " 0.014900598675012589,\n", + " 0.053684670478105545,\n", + " -0.0030945059843361378,\n", + " -0.0010258249239996076,\n", + " 0.07511196285486221,\n", + " -0.03321100398898125,\n", + " -0.002297262428328395,\n", + " 0.05685383826494217,\n", + " -0.01852419413626194,\n", + " 0.015919240191578865,\n", + " -0.010373836383223534,\n", + " 0.036995530128479004,\n", + " -0.011069325730204582,\n", + " -0.057145752012729645,\n", + " -0.0070942845195531845,\n", + " -0.0010367470094934106,\n", + " 0.013445760123431683,\n", + " 0.022497881203889847,\n", + " -0.026446551084518433,\n", + " 0.010870615020394325,\n", + " 0.036760736256837845,\n", + " -0.047007717192173004,\n", + " -0.0026127346791327,\n", + " -0.008976787328720093,\n", + " -0.02328304946422577,\n", + " 0.03197775408625603,\n", + " 0.01989900693297386,\n", + " -0.041343893855810165,\n", + " -0.014990942552685738,\n", + " 0.024322882294654846,\n", + " -0.016868771985173225,\n", + " 0.02178443968296051,\n", + " -0.011080385185778141,\n", + " 0.020172378048300743,\n", + " 0.06485244631767273,\n", + " -0.0027855837251991034,\n", + " 0.11754929274320602,\n", + " 0.012095569632947445,\n", + " 0.0075214821845293045,\n", + " -0.0046376571990549564,\n", + " 0.026846403256058693,\n", + " 0.03498966619372368,\n", + " 0.027564022690057755,\n", + " -0.009943321347236633,\n", + " -0.018119869753718376,\n", + " -0.031100401654839516,\n", + " 0.025304147973656654,\n", + " 0.07492371648550034,\n", + " -0.01309086475521326,\n", + " -0.048150286078453064,\n", + " -0.004847416654229164,\n", + " 0.014715524390339851,\n", + " 0.008357856422662735,\n", + " 0.052254095673561096,\n", + " 0.003934715874493122,\n", + " 0.03689158335328102,\n", + " 0.01333687361329794,\n", + " -0.015352764166891575,\n", + " -0.005101861897855997,\n", + " -0.019899796694517136,\n", + " -0.0077162571251392365,\n", + " 0.02962283231317997,\n", + " 0.04794803634285927,\n", + " -0.030213722959160805,\n", + " 2.8779818749836593e-34,\n", + " 0.00043316834489814937,\n", + " -0.038739610463380814,\n", + " -0.05394865199923515,\n", + " -0.019675668329000473,\n", + " 0.01223861612379551,\n", + " -0.001877678674645722,\n", + " 0.04158131033182144,\n", + " -0.028788113966584206,\n", + " -0.00927739217877388,\n", + " -0.01771310530602932,\n", + " 0.014376083388924599]}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 7 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:37.348286Z", + "start_time": "2025-05-11T20:49:37.345302Z" + } + }, + "cell_type": "code", + "source": "len(docs[1]['embedding'])", + "id": "f38edb7db76bad31", + "outputs": [ + { + "data": { + "text/plain": [ + "768" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 8 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:38.218482Z", + "start_time": "2025-05-11T20:49:37.370274Z" + } + }, + "cell_type": "code", + "source": [ "# upload the documents to the vector database\n", "try:\n", " response = (\n", @@ -154,14 +1060,20 @@ "# import pandas as pd\n", "# df = pd.DataFrame(docs)\n", "# df.to_csv('supabase_docs.csv', index=False)" - ] + ], + "id": "e274a83872ca484f", + "outputs": [], + "execution_count": 9 }, { "cell_type": "code", - "execution_count": 54, "id": "77fb9dbb", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:38.242010Z", + "start_time": "2025-05-11T20:49:38.239199Z" + } + }, "source": [ "# add items to vector database\n", "vector_store = SupabaseVectorStore(\n", @@ -171,47 +1083,89 @@ " query_name=\"match_documents_langchain\",\n", ")\n", "retriever = vector_store.as_retriever()" - ] + ], + "outputs": [], + "execution_count": 10 }, { "cell_type": "code", - "execution_count": 55, "id": "12a05971", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:38.405624Z", + "start_time": "2025-05-11T20:49:38.266565Z" + } + }, + "source": [ + "query = \"On June 6, 2023, an article by Carolyn Collins Petersen was published in Universe Today. This article mentions a team that produced a paper about their observations, linked at the bottom of the article. Find this paper. Under what NASA award number was the work performed by R. G. Arendt supported by?\"\n", + "matched_docs = vector_store.similarity_search(query, 2)" + ], + "outputs": [], + "execution_count": 11 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:38.577821Z", + "start_time": "2025-05-11T20:49:38.439276Z" + } + }, + "cell_type": "code", + "source": "docs = retriever.invoke(query)", + "id": "deb58a8cee3954a2", + "outputs": [], + "execution_count": 12 + }, + { + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:38.600250Z", + "start_time": "2025-05-11T20:49:38.597008Z" + } + }, + "cell_type": "code", + "source": "docs[0]", + "id": "e6f3da34e4ed8543", "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...\n", - "To disable this warning, you can either:\n", - "\t- Avoid using `tokenizers` before the fork if possible\n", - "\t- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)\n" - ] - }, { "data": { "text/plain": [ "Document(metadata={'source': '840bfca7-4f7b-481a-8794-c560c340185d'}, page_content='Question : On June 6, 2023, an article by Carolyn Collins Petersen was published in Universe Today. This article mentions a team that produced a paper about their observations, linked at the bottom of the article. Find this paper. Under what NASA award number was the work performed by R. G. Arendt supported by?\\n\\nFinal answer : 80GSFC21M0002')" ] }, - "execution_count": 55, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], - "source": [ - "query = \"On June 6, 2023, an article by Carolyn Collins Petersen was published in Universe Today. This article mentions a team that produced a paper about their observations, linked at the bottom of the article. Find this paper. Under what NASA award number was the work performed by R. G. Arendt supported by?\"\n", - "# matched_docs = vector_store.similarity_search(query, 2)\n", - "docs = retriever.invoke(query)\n", - "docs[0]" - ] + "execution_count": 13 }, { "cell_type": "code", - "execution_count": 31, "id": "1eae5ba4", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:38.628232Z", + "start_time": "2025-05-11T20:49:38.622911Z" + } + }, + "source": [ + "# list of the tools used in all the samples\n", + "from collections import Counter, OrderedDict\n", + "\n", + "tools = []\n", + "for sample in json_QA:\n", + " for tool in sample['Annotator Metadata']['Tools'].split('\\n'):\n", + " tool = tool[2:].strip().lower()\n", + " if tool.startswith(\"(\"):\n", + " tool = tool[11:].strip()\n", + " tools.append(tool)\n", + "tools_counter = OrderedDict(Counter(tools))\n", + "print(\"List of tools used in all samples:\")\n", + "print(\"Total number of tools used:\", len(tools_counter))\n", + "for tool, count in tools_counter.items():\n", + " print(f\" ├── {tool}: {count}\")" + ], "outputs": [ { "name": "stdout", @@ -305,38 +1259,17 @@ ] } ], - "source": [ - "# list of the tools used in all the samples\n", - "from collections import Counter, OrderedDict\n", - "\n", - "tools = []\n", - "for sample in json_QA:\n", - " for tool in sample['Annotator Metadata']['Tools'].split('\\n'):\n", - " tool = tool[2:].strip().lower()\n", - " if tool.startswith(\"(\"):\n", - " tool = tool[11:].strip()\n", - " tools.append(tool)\n", - "tools_counter = OrderedDict(Counter(tools))\n", - "print(\"List of tools used in all samples:\")\n", - "print(\"Total number of tools used:\", len(tools_counter))\n", - "for tool, count in tools_counter.items():\n", - " print(f\" ├── {tool}: {count}\")" - ] - }, - { - "cell_type": "markdown", - "id": "5efee12a", - "metadata": {}, - "source": [ - "#### Graph" - ] + "execution_count": 14 }, { "cell_type": "code", - "execution_count": 55, "id": "7fe573cc", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:38.658749Z", + "start_time": "2025-05-11T20:49:38.655483Z" + } + }, "source": [ "system_prompt = \"\"\"\n", "You are a helpful assistant tasked with answering questions using a set of tools.\n", @@ -353,13 +1286,25 @@ "# save the system_prompt to a file\n", "with open('system_prompt.txt', 'w') as f:\n", " f.write(system_prompt)" - ] + ], + "outputs": [], + "execution_count": 15 }, { "cell_type": "code", - "execution_count": 56, "id": "d6beb0da", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:38.679706Z", + "start_time": "2025-05-11T20:49:38.676787Z" + } + }, + "source": [ + "# load the system prompt from the file\n", + "with open('system_prompt.txt', 'r') as f:\n", + " system_prompt = f.read()\n", + "print(system_prompt)" + ], "outputs": [ { "name": "stdout", @@ -372,34 +1317,24 @@ "==========================\n", "Here is a few examples showing you how to answer the question step by step.\n", "\n", - "Question 1: In terms of geographical distance between capital cities, which 2 countries are the furthest from each other within the ASEAN bloc according to wikipedia? Answer using a comma separated list, ordering the countries by alphabetical order.\n", + "Question 1: What is the minimum number of page links a person must click on to go from the english Wikipedia page on The Lord of the Rings (the book) to the english Wikipedia page on A Song of Ice and Fire (the book series)? In your count, include each link you would click on to get to the page. Use the pages as they appeared at the end of the day on July 3, 2023.\n", "Steps:\n", - "1. Search the web for \"ASEAN bloc\".\n", - "2. Click the Wikipedia result for the ASEAN Free Trade Area.\n", - "3. Scroll down to find the list of member states.\n", - "4. Click into the Wikipedia pages for each member state, and note its capital.\n", - "5. Search the web for the distance between the first two capitals. The results give travel distance, not geographic distance, which might affect the answer.\n", - "6. Thinking it might be faster to judge the distance by looking at a map, search the web for \"ASEAN bloc\" and click into the images tab.\n", - "7. View a map of the member countries. Since they're clustered together in an arrangement that's not very linear, it's difficult to judge distances by eye.\n", - "8. Return to the Wikipedia page for each country. Click the GPS coordinates for each capital to get the coordinates in decimal notation.\n", - "9. Place all these coordinates into a spreadsheet.\n", - "10. Write formulas to calculate the distance between each capital.\n", - "11. Write formula to get the largest distance value in the spreadsheet.\n", - "12. Note which two capitals that value corresponds to: Jakarta and Naypyidaw.\n", - "13. Return to the Wikipedia pages to see which countries those respective capitals belong to: Indonesia, Myanmar.\n", + "1. Search the web for “lord of the rings wikipedia”.\n", + "2. Click on Wikipedia result.\n", + "3. Click “View history” to see if the page has been edited since July 3, 2023.\n", + "4. Since it hasn’t been, return to the current revision.\n", + "5. Ctrl-F for “song” to see if A Song of Ice and Fire is linked to on this page.\n", + "6. Not seeing A Song of Ice and Fire on the current page, search for a link to a page that will likely mention A Song of Ice and Fire.\n", + "7. Click the link for “High fantasy”.\n", + "8. Click “View history” to see if the page has been edited since July 3, 2023.\n", + "9. Since it hasn’t been, return to the current revision.\n", + "10. Ctrl-F for “song”, and find a link to A Song of Ice and Fire.\n", + "11. Count the links: the High fantasy page and the A Song of Ice and Fire page make two.\n", "Tools:\n", "1. Search engine\n", "2. Web browser\n", - "3. Microsoft Excel / Google Sheets\n", - "Final Answer: Indonesia, Myanmar\n", - "\n", - "Question 2: Review the chess position provided in the image. It is black's turn. Provide the correct next move for black which guarantees a win. Please provide your response in algebraic notation.\n", - "Steps:\n", - "Step 1: Evaluate the position of the pieces in the chess position\n", - "Step 2: Report the best move available for black: \"Rd5\"\n", - "Tools:\n", - "1. Image recognition tools\n", - "Final Answer: Rd5\n", + "3. Counter\n", + "Final Answer: 2\n", "\n", "==========================\n", "Now, please answer the following question step by step.\n", @@ -407,19 +1342,17 @@ ] } ], - "source": [ - "# load the system prompt from the file\n", - "with open('system_prompt.txt', 'r') as f:\n", - " system_prompt = f.read()\n", - "print(system_prompt)" - ] + "execution_count": 16 }, { "cell_type": "code", - "execution_count": null, "id": "42fde0f8", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:49:42.495164Z", + "start_time": "2025-05-11T20:49:38.700537Z" + } + }, "source": [ "import dotenv\n", "from langgraph.graph import MessagesState, START, StateGraph\n", @@ -578,14 +1511,19 @@ "\n", "llm = ChatGoogleGenerativeAI(model=\"gemini-2.0-flash\")\n", "llm_with_tools = llm.bind_tools(tools)" - ] + ], + "outputs": [], + "execution_count": 17 }, { "cell_type": "code", - "execution_count": null, "id": "7dd0716c", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:50:46.746362Z", + "start_time": "2025-05-11T20:50:46.741222Z" + } + }, "source": [ "# load the system prompt from the file\n", "with open('system_prompt.txt', 'r') as f:\n", @@ -615,42 +1553,135 @@ "\n", "# Compile graph\n", "graph = builder.compile()\n" - ] + ], + "outputs": [], + "execution_count": 20 }, { "cell_type": "code", - "execution_count": 49, "id": "f4e77216", - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:53:08.787733Z", + "start_time": "2025-05-11T20:50:47.586719Z" } - ], + }, "source": [ "from IPython.display import Image, display\n", "\n", "display(Image(graph.get_graph(xray=True).draw_mermaid_png()))" - ] + ], + "outputs": [ + { + "ename": "ValueError", + "evalue": "Failed to reach https://mermaid.ink/ API while trying to render your graph after 1 retries. To resolve this issue:\n1. Check your internet connection and try again\n2. Try with higher retry settings: `draw_mermaid_png(..., max_retries=5, retry_delay=2.0)`\n3. Use the Pyppeteer rendering method which will render your graph locally in a browser: `draw_mermaid_png(..., draw_method=MermaidDrawMethod.PYPPETEER)`", + "output_type": "error", + "traceback": [ + "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[0;31mTimeoutError\u001B[0m Traceback (most recent call last)", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/connection.py:198\u001B[0m, in \u001B[0;36mHTTPConnection._new_conn\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 197\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 198\u001B[0m sock \u001B[38;5;241m=\u001B[39m \u001B[43mconnection\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mcreate_connection\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 199\u001B[0m \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[43m_dns_host\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[43mport\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 200\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mtimeout\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 201\u001B[0m \u001B[43m \u001B[49m\u001B[43msource_address\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msource_address\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 202\u001B[0m \u001B[43m \u001B[49m\u001B[43msocket_options\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msocket_options\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 203\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 204\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m socket\u001B[38;5;241m.\u001B[39mgaierror \u001B[38;5;28;01mas\u001B[39;00m e:\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/util/connection.py:85\u001B[0m, in \u001B[0;36mcreate_connection\u001B[0;34m(address, timeout, source_address, socket_options)\u001B[0m\n\u001B[1;32m 84\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m---> 85\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m err\n\u001B[1;32m 86\u001B[0m \u001B[38;5;28;01mfinally\u001B[39;00m:\n\u001B[1;32m 87\u001B[0m \u001B[38;5;66;03m# Break explicitly a reference cycle\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/util/connection.py:73\u001B[0m, in \u001B[0;36mcreate_connection\u001B[0;34m(address, timeout, source_address, socket_options)\u001B[0m\n\u001B[1;32m 72\u001B[0m sock\u001B[38;5;241m.\u001B[39mbind(source_address)\n\u001B[0;32m---> 73\u001B[0m \u001B[43msock\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mconnect\u001B[49m\u001B[43m(\u001B[49m\u001B[43msa\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 74\u001B[0m \u001B[38;5;66;03m# Break explicitly a reference cycle\u001B[39;00m\n", + "\u001B[0;31mTimeoutError\u001B[0m: timed out", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001B[0;31mConnectTimeoutError\u001B[0m Traceback (most recent call last)", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:787\u001B[0m, in \u001B[0;36mHTTPConnectionPool.urlopen\u001B[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001B[0m\n\u001B[1;32m 786\u001B[0m \u001B[38;5;66;03m# Make the request on the HTTPConnection object\u001B[39;00m\n\u001B[0;32m--> 787\u001B[0m response \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_make_request\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 788\u001B[0m \u001B[43m \u001B[49m\u001B[43mconn\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 789\u001B[0m \u001B[43m \u001B[49m\u001B[43mmethod\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 790\u001B[0m \u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 791\u001B[0m \u001B[43m \u001B[49m\u001B[43mtimeout\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mtimeout_obj\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 792\u001B[0m \u001B[43m \u001B[49m\u001B[43mbody\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mbody\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 793\u001B[0m \u001B[43m \u001B[49m\u001B[43mheaders\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mheaders\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 794\u001B[0m \u001B[43m \u001B[49m\u001B[43mchunked\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mchunked\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 795\u001B[0m \u001B[43m \u001B[49m\u001B[43mretries\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mretries\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 796\u001B[0m \u001B[43m \u001B[49m\u001B[43mresponse_conn\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mresponse_conn\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 797\u001B[0m \u001B[43m \u001B[49m\u001B[43mpreload_content\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mpreload_content\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 798\u001B[0m \u001B[43m \u001B[49m\u001B[43mdecode_content\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mdecode_content\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 799\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mresponse_kw\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 800\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 802\u001B[0m \u001B[38;5;66;03m# Everything went great!\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:488\u001B[0m, in \u001B[0;36mHTTPConnectionPool._make_request\u001B[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001B[0m\n\u001B[1;32m 487\u001B[0m new_e \u001B[38;5;241m=\u001B[39m _wrap_proxy_error(new_e, conn\u001B[38;5;241m.\u001B[39mproxy\u001B[38;5;241m.\u001B[39mscheme)\n\u001B[0;32m--> 488\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m new_e\n\u001B[1;32m 490\u001B[0m \u001B[38;5;66;03m# conn.request() calls http.client.*.request, not the method in\u001B[39;00m\n\u001B[1;32m 491\u001B[0m \u001B[38;5;66;03m# urllib3.request. It also calls makefile (recv) on the socket.\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:464\u001B[0m, in \u001B[0;36mHTTPConnectionPool._make_request\u001B[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001B[0m\n\u001B[1;32m 463\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 464\u001B[0m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_validate_conn\u001B[49m\u001B[43m(\u001B[49m\u001B[43mconn\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 465\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m (SocketTimeout, BaseSSLError) \u001B[38;5;28;01mas\u001B[39;00m e:\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:1093\u001B[0m, in \u001B[0;36mHTTPSConnectionPool._validate_conn\u001B[0;34m(self, conn)\u001B[0m\n\u001B[1;32m 1092\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m conn\u001B[38;5;241m.\u001B[39mis_closed:\n\u001B[0;32m-> 1093\u001B[0m \u001B[43mconn\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mconnect\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1095\u001B[0m \u001B[38;5;66;03m# TODO revise this, see https://github.com/urllib3/urllib3/issues/2791\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/connection.py:704\u001B[0m, in \u001B[0;36mHTTPSConnection.connect\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 703\u001B[0m sock: socket\u001B[38;5;241m.\u001B[39msocket \u001B[38;5;241m|\u001B[39m ssl\u001B[38;5;241m.\u001B[39mSSLSocket\n\u001B[0;32m--> 704\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39msock \u001B[38;5;241m=\u001B[39m sock \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_new_conn\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 705\u001B[0m server_hostname: \u001B[38;5;28mstr\u001B[39m \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mhost\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/connection.py:207\u001B[0m, in \u001B[0;36mHTTPConnection._new_conn\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 206\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m SocketTimeout \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[0;32m--> 207\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m ConnectTimeoutError(\n\u001B[1;32m 208\u001B[0m \u001B[38;5;28mself\u001B[39m,\n\u001B[1;32m 209\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mConnection to \u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mhost\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m timed out. (connect timeout=\u001B[39m\u001B[38;5;132;01m{\u001B[39;00m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mtimeout\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m)\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[1;32m 210\u001B[0m ) \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01me\u001B[39;00m\n\u001B[1;32m 212\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mOSError\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m e:\n", + "\u001B[0;31mConnectTimeoutError\u001B[0m: (, 'Connection to mermaid.ink timed out. (connect timeout=10)')", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001B[0;31mMaxRetryError\u001B[0m Traceback (most recent call last)", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/requests/adapters.py:667\u001B[0m, in \u001B[0;36mHTTPAdapter.send\u001B[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001B[0m\n\u001B[1;32m 666\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 667\u001B[0m resp \u001B[38;5;241m=\u001B[39m \u001B[43mconn\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43murlopen\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 668\u001B[0m \u001B[43m \u001B[49m\u001B[43mmethod\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mrequest\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mmethod\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 669\u001B[0m \u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 670\u001B[0m \u001B[43m \u001B[49m\u001B[43mbody\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mrequest\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbody\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 671\u001B[0m \u001B[43m \u001B[49m\u001B[43mheaders\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mrequest\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mheaders\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 672\u001B[0m \u001B[43m \u001B[49m\u001B[43mredirect\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[1;32m 673\u001B[0m \u001B[43m \u001B[49m\u001B[43massert_same_host\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[1;32m 674\u001B[0m \u001B[43m \u001B[49m\u001B[43mpreload_content\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[1;32m 675\u001B[0m \u001B[43m \u001B[49m\u001B[43mdecode_content\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mFalse\u001B[39;49;00m\u001B[43m,\u001B[49m\n\u001B[1;32m 676\u001B[0m \u001B[43m \u001B[49m\u001B[43mretries\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mmax_retries\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 677\u001B[0m \u001B[43m \u001B[49m\u001B[43mtimeout\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mtimeout\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 678\u001B[0m \u001B[43m \u001B[49m\u001B[43mchunked\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mchunked\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 679\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 681\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m (ProtocolError, \u001B[38;5;167;01mOSError\u001B[39;00m) \u001B[38;5;28;01mas\u001B[39;00m err:\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/connectionpool.py:841\u001B[0m, in \u001B[0;36mHTTPConnectionPool.urlopen\u001B[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001B[0m\n\u001B[1;32m 839\u001B[0m new_e \u001B[38;5;241m=\u001B[39m ProtocolError(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mConnection aborted.\u001B[39m\u001B[38;5;124m\"\u001B[39m, new_e)\n\u001B[0;32m--> 841\u001B[0m retries \u001B[38;5;241m=\u001B[39m \u001B[43mretries\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mincrement\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 842\u001B[0m \u001B[43m \u001B[49m\u001B[43mmethod\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43merror\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mnew_e\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m_pool\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43m_stacktrace\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43msys\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mexc_info\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;241;43m2\u001B[39;49m\u001B[43m]\u001B[49m\n\u001B[1;32m 843\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 844\u001B[0m retries\u001B[38;5;241m.\u001B[39msleep()\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/urllib3/util/retry.py:519\u001B[0m, in \u001B[0;36mRetry.increment\u001B[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001B[0m\n\u001B[1;32m 518\u001B[0m reason \u001B[38;5;241m=\u001B[39m error \u001B[38;5;129;01mor\u001B[39;00m ResponseError(cause)\n\u001B[0;32m--> 519\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m MaxRetryError(_pool, url, reason) \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01mreason\u001B[39;00m \u001B[38;5;66;03m# type: ignore[arg-type]\u001B[39;00m\n\u001B[1;32m 521\u001B[0m log\u001B[38;5;241m.\u001B[39mdebug(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mIncremented Retry for (url=\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;132;01m%s\u001B[39;00m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124m): \u001B[39m\u001B[38;5;132;01m%r\u001B[39;00m\u001B[38;5;124m\"\u001B[39m, url, new_retry)\n", + "\u001B[0;31mMaxRetryError\u001B[0m: HTTPSConnectionPool(host='mermaid.ink', port=443): Max retries exceeded with url: /img/LS0tCmNvbmZpZzoKICBmbG93Y2hhcnQ6CiAgICBjdXJ2ZTogbGluZWFyCi0tLQpncmFwaCBURDsKCV9fc3RhcnRfXyhbPHA+X19zdGFydF9fPC9wPl0pOjo6Zmlyc3QKCWFzc2lzdGFudChhc3Npc3RhbnQpCgl0b29scyh0b29scykKCV9fZW5kX18oWzxwPl9fZW5kX188L3A+XSk6OjpsYXN0CglfX3N0YXJ0X18gLS0+IGFzc2lzdGFudDsKCWFzc2lzdGFudCAtLi0+IF9fZW5kX187Cglhc3Npc3RhbnQgLS4tPiB0b29sczsKCXRvb2xzIC0tPiBhc3Npc3RhbnQ7CgljbGFzc0RlZiBkZWZhdWx0IGZpbGw6I2YyZjBmZixsaW5lLWhlaWdodDoxLjIKCWNsYXNzRGVmIGZpcnN0IGZpbGwtb3BhY2l0eTowCgljbGFzc0RlZiBsYXN0IGZpbGw6I2JmYjZmYwo=?type=png&bgColor=!white (Caused by ConnectTimeoutError(, 'Connection to mermaid.ink timed out. (connect timeout=10)'))", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001B[0;31mConnectTimeout\u001B[0m Traceback (most recent call last)", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/runnables/graph_mermaid.py:430\u001B[0m, in \u001B[0;36m_render_mermaid_using_api\u001B[0;34m(mermaid_syntax, output_file_path, background_color, file_type, max_retries, retry_delay)\u001B[0m\n\u001B[1;32m 429\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 430\u001B[0m response \u001B[38;5;241m=\u001B[39m \u001B[43mrequests\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget\u001B[49m\u001B[43m(\u001B[49m\u001B[43mimage_url\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mtimeout\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;241;43m10\u001B[39;49m\u001B[43m)\u001B[49m\n\u001B[1;32m 431\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m response\u001B[38;5;241m.\u001B[39mstatus_code \u001B[38;5;241m==\u001B[39m requests\u001B[38;5;241m.\u001B[39mcodes\u001B[38;5;241m.\u001B[39mok:\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/requests/api.py:73\u001B[0m, in \u001B[0;36mget\u001B[0;34m(url, params, **kwargs)\u001B[0m\n\u001B[1;32m 63\u001B[0m \u001B[38;5;250m\u001B[39m\u001B[38;5;124mr\u001B[39m\u001B[38;5;124;03m\"\"\"Sends a GET request.\u001B[39;00m\n\u001B[1;32m 64\u001B[0m \n\u001B[1;32m 65\u001B[0m \u001B[38;5;124;03m:param url: URL for the new :class:`Request` object.\u001B[39;00m\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 70\u001B[0m \u001B[38;5;124;03m:rtype: requests.Response\u001B[39;00m\n\u001B[1;32m 71\u001B[0m \u001B[38;5;124;03m\"\"\"\u001B[39;00m\n\u001B[0;32m---> 73\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mrequest\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mget\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mparams\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mparams\u001B[49m\u001B[43m,\u001B[49m\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", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/requests/api.py:59\u001B[0m, in \u001B[0;36mrequest\u001B[0;34m(method, url, **kwargs)\u001B[0m\n\u001B[1;32m 58\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m sessions\u001B[38;5;241m.\u001B[39mSession() \u001B[38;5;28;01mas\u001B[39;00m session:\n\u001B[0;32m---> 59\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43msession\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mrequest\u001B[49m\u001B[43m(\u001B[49m\u001B[43mmethod\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mmethod\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43murl\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43murl\u001B[49m\u001B[43m,\u001B[49m\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", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/requests/sessions.py:589\u001B[0m, in \u001B[0;36mSession.request\u001B[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001B[0m\n\u001B[1;32m 588\u001B[0m send_kwargs\u001B[38;5;241m.\u001B[39mupdate(settings)\n\u001B[0;32m--> 589\u001B[0m resp \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mprep\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43msend_kwargs\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 591\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m resp\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/requests/sessions.py:703\u001B[0m, in \u001B[0;36mSession.send\u001B[0;34m(self, request, **kwargs)\u001B[0m\n\u001B[1;32m 702\u001B[0m \u001B[38;5;66;03m# Send the request\u001B[39;00m\n\u001B[0;32m--> 703\u001B[0m r \u001B[38;5;241m=\u001B[39m \u001B[43madapter\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msend\u001B[49m\u001B[43m(\u001B[49m\u001B[43mrequest\u001B[49m\u001B[43m,\u001B[49m\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 705\u001B[0m \u001B[38;5;66;03m# Total elapsed time of the request (approximately)\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/requests/adapters.py:688\u001B[0m, in \u001B[0;36mHTTPAdapter.send\u001B[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001B[0m\n\u001B[1;32m 687\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(e\u001B[38;5;241m.\u001B[39mreason, NewConnectionError):\n\u001B[0;32m--> 688\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m ConnectTimeout(e, request\u001B[38;5;241m=\u001B[39mrequest)\n\u001B[1;32m 690\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(e\u001B[38;5;241m.\u001B[39mreason, ResponseError):\n", + "\u001B[0;31mConnectTimeout\u001B[0m: HTTPSConnectionPool(host='mermaid.ink', port=443): Max retries exceeded with url: /img/LS0tCmNvbmZpZzoKICBmbG93Y2hhcnQ6CiAgICBjdXJ2ZTogbGluZWFyCi0tLQpncmFwaCBURDsKCV9fc3RhcnRfXyhbPHA+X19zdGFydF9fPC9wPl0pOjo6Zmlyc3QKCWFzc2lzdGFudChhc3Npc3RhbnQpCgl0b29scyh0b29scykKCV9fZW5kX18oWzxwPl9fZW5kX188L3A+XSk6OjpsYXN0CglfX3N0YXJ0X18gLS0+IGFzc2lzdGFudDsKCWFzc2lzdGFudCAtLi0+IF9fZW5kX187Cglhc3Npc3RhbnQgLS4tPiB0b29sczsKCXRvb2xzIC0tPiBhc3Npc3RhbnQ7CgljbGFzc0RlZiBkZWZhdWx0IGZpbGw6I2YyZjBmZixsaW5lLWhlaWdodDoxLjIKCWNsYXNzRGVmIGZpcnN0IGZpbGwtb3BhY2l0eTowCgljbGFzc0RlZiBsYXN0IGZpbGw6I2JmYjZmYwo=?type=png&bgColor=!white (Caused by ConnectTimeoutError(, 'Connection to mermaid.ink timed out. (connect timeout=10)'))", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001B[0;31mValueError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[0;32mIn[21], line 3\u001B[0m\n\u001B[1;32m 1\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01mIPython\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mdisplay\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m Image, display\n\u001B[0;32m----> 3\u001B[0m display(Image(\u001B[43mgraph\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget_graph\u001B[49m\u001B[43m(\u001B[49m\u001B[43mxray\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43;01mTrue\u001B[39;49;00m\u001B[43m)\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mdraw_mermaid_png\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m))\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/runnables/graph.py:685\u001B[0m, in \u001B[0;36mGraph.draw_mermaid_png\u001B[0;34m(self, curve_style, node_colors, wrap_label_n_words, output_file_path, draw_method, background_color, padding, max_retries, retry_delay, frontmatter_config)\u001B[0m\n\u001B[1;32m 677\u001B[0m \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01mlangchain_core\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mrunnables\u001B[39;00m\u001B[38;5;21;01m.\u001B[39;00m\u001B[38;5;21;01mgraph_mermaid\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;28;01mimport\u001B[39;00m draw_mermaid_png\n\u001B[1;32m 679\u001B[0m mermaid_syntax \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mdraw_mermaid(\n\u001B[1;32m 680\u001B[0m curve_style\u001B[38;5;241m=\u001B[39mcurve_style,\n\u001B[1;32m 681\u001B[0m node_colors\u001B[38;5;241m=\u001B[39mnode_colors,\n\u001B[1;32m 682\u001B[0m wrap_label_n_words\u001B[38;5;241m=\u001B[39mwrap_label_n_words,\n\u001B[1;32m 683\u001B[0m frontmatter_config\u001B[38;5;241m=\u001B[39mfrontmatter_config,\n\u001B[1;32m 684\u001B[0m )\n\u001B[0;32m--> 685\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mdraw_mermaid_png\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 686\u001B[0m \u001B[43m \u001B[49m\u001B[43mmermaid_syntax\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mmermaid_syntax\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 687\u001B[0m \u001B[43m \u001B[49m\u001B[43moutput_file_path\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43moutput_file_path\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 688\u001B[0m \u001B[43m \u001B[49m\u001B[43mdraw_method\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mdraw_method\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 689\u001B[0m \u001B[43m \u001B[49m\u001B[43mbackground_color\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mbackground_color\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 690\u001B[0m \u001B[43m \u001B[49m\u001B[43mpadding\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mpadding\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 691\u001B[0m \u001B[43m \u001B[49m\u001B[43mmax_retries\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mmax_retries\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 692\u001B[0m \u001B[43m \u001B[49m\u001B[43mretry_delay\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mretry_delay\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 693\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/runnables/graph_mermaid.py:293\u001B[0m, in \u001B[0;36mdraw_mermaid_png\u001B[0;34m(mermaid_syntax, output_file_path, draw_method, background_color, padding, max_retries, retry_delay)\u001B[0m\n\u001B[1;32m 287\u001B[0m img_bytes \u001B[38;5;241m=\u001B[39m asyncio\u001B[38;5;241m.\u001B[39mrun(\n\u001B[1;32m 288\u001B[0m _render_mermaid_using_pyppeteer(\n\u001B[1;32m 289\u001B[0m mermaid_syntax, output_file_path, background_color, padding\n\u001B[1;32m 290\u001B[0m )\n\u001B[1;32m 291\u001B[0m )\n\u001B[1;32m 292\u001B[0m \u001B[38;5;28;01melif\u001B[39;00m draw_method \u001B[38;5;241m==\u001B[39m MermaidDrawMethod\u001B[38;5;241m.\u001B[39mAPI:\n\u001B[0;32m--> 293\u001B[0m img_bytes \u001B[38;5;241m=\u001B[39m \u001B[43m_render_mermaid_using_api\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 294\u001B[0m \u001B[43m \u001B[49m\u001B[43mmermaid_syntax\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 295\u001B[0m \u001B[43m \u001B[49m\u001B[43moutput_file_path\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43moutput_file_path\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 296\u001B[0m \u001B[43m \u001B[49m\u001B[43mbackground_color\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mbackground_color\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 297\u001B[0m \u001B[43m \u001B[49m\u001B[43mmax_retries\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mmax_retries\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 298\u001B[0m \u001B[43m \u001B[49m\u001B[43mretry_delay\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mretry_delay\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 299\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 300\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 301\u001B[0m supported_methods \u001B[38;5;241m=\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124m, \u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;241m.\u001B[39mjoin([m\u001B[38;5;241m.\u001B[39mvalue \u001B[38;5;28;01mfor\u001B[39;00m m \u001B[38;5;129;01min\u001B[39;00m MermaidDrawMethod])\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/runnables/graph_mermaid.py:462\u001B[0m, in \u001B[0;36m_render_mermaid_using_api\u001B[0;34m(mermaid_syntax, output_file_path, background_color, file_type, max_retries, retry_delay)\u001B[0m\n\u001B[1;32m 457\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 458\u001B[0m msg \u001B[38;5;241m=\u001B[39m (\n\u001B[1;32m 459\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mFailed to reach https://mermaid.ink/ API while trying to render \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 460\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124myour graph after \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mmax_retries\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m retries. \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 461\u001B[0m ) \u001B[38;5;241m+\u001B[39m error_msg_suffix\n\u001B[0;32m--> 462\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(msg) \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01me\u001B[39;00m\n\u001B[1;32m 464\u001B[0m \u001B[38;5;66;03m# This should not be reached, but just in case\u001B[39;00m\n\u001B[1;32m 465\u001B[0m msg \u001B[38;5;241m=\u001B[39m (\n\u001B[1;32m 466\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mFailed to reach https://mermaid.ink/ API while trying to render \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 467\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124myour graph after \u001B[39m\u001B[38;5;132;01m{\u001B[39;00mmax_retries\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m retries. \u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 468\u001B[0m ) \u001B[38;5;241m+\u001B[39m error_msg_suffix\n", + "\u001B[0;31mValueError\u001B[0m: Failed to reach https://mermaid.ink/ API while trying to render your graph after 1 retries. To resolve this issue:\n1. Check your internet connection and try again\n2. Try with higher retry settings: `draw_mermaid_png(..., max_retries=5, retry_delay=2.0)`\n3. Use the Pyppeteer rendering method which will render your graph locally in a browser: `draw_mermaid_png(..., draw_method=MermaidDrawMethod.PYPPETEER)`" + ] + } + ], + "execution_count": 21 }, { "cell_type": "code", - "execution_count": null, "id": "5987d58c", - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-05-11T20:54:35.397719Z", + "start_time": "2025-05-11T20:54:35.168899Z" + } + }, "source": [ - "question = \"\"\n", + "question = \"On June 6, 2023, an article by Carolyn Collins Petersen was published in Universe Today. This article mentions a team that produced a paper about their observations, linked at the bottom of the article. Find this paper. Under what NASA award number was the work performed by R. G. Arendt supported by?\"\n", "messages = [HumanMessage(content=question)]\n", "messages = graph.invoke({\"messages\": messages})" - ] + ], + "outputs": [ + { + "ename": "ChatGoogleGenerativeAIError", + "evalue": "Invalid argument provided to Gemini: 400 * GenerateContentRequest.tools[0].function_declarations[8].name: Invalid function name. Must start with a letter or an underscore. Must be alphameric (a-z, A-Z, 0-9), underscores (_), dots (.) or dashes (-), with a maximum length of 64.\n", + "output_type": "error", + "traceback": [ + "\u001B[0;31m---------------------------------------------------------------------------\u001B[0m", + "\u001B[0;31mInvalidArgument\u001B[0m Traceback (most recent call last)", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_google_genai/chat_models.py:192\u001B[0m, in \u001B[0;36m_chat_with_retry.._chat_with_retry\u001B[0;34m(**kwargs)\u001B[0m\n\u001B[1;32m 191\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 192\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mgeneration_method\u001B[49m\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 193\u001B[0m \u001B[38;5;66;03m# Do not retry for these errors.\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/google/ai/generativelanguage_v1beta/services/generative_service/client.py:868\u001B[0m, in \u001B[0;36mGenerativeServiceClient.generate_content\u001B[0;34m(self, request, model, contents, retry, timeout, metadata)\u001B[0m\n\u001B[1;32m 867\u001B[0m \u001B[38;5;66;03m# Send the request.\u001B[39;00m\n\u001B[0;32m--> 868\u001B[0m response \u001B[38;5;241m=\u001B[39m \u001B[43mrpc\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 869\u001B[0m \u001B[43m \u001B[49m\u001B[43mrequest\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 870\u001B[0m \u001B[43m \u001B[49m\u001B[43mretry\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mretry\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 871\u001B[0m \u001B[43m \u001B[49m\u001B[43mtimeout\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mtimeout\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 872\u001B[0m \u001B[43m \u001B[49m\u001B[43mmetadata\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mmetadata\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 873\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 875\u001B[0m \u001B[38;5;66;03m# Done; return the response.\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/google/api_core/gapic_v1/method.py:131\u001B[0m, in \u001B[0;36m_GapicCallable.__call__\u001B[0;34m(self, timeout, retry, compression, *args, **kwargs)\u001B[0m\n\u001B[1;32m 129\u001B[0m kwargs[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mcompression\u001B[39m\u001B[38;5;124m\"\u001B[39m] \u001B[38;5;241m=\u001B[39m compression\n\u001B[0;32m--> 131\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mwrapped_func\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\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", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/google/api_core/retry/retry_unary.py:293\u001B[0m, in \u001B[0;36mRetry.__call__..retry_wrapped_func\u001B[0;34m(*args, **kwargs)\u001B[0m\n\u001B[1;32m 290\u001B[0m sleep_generator \u001B[38;5;241m=\u001B[39m exponential_sleep_generator(\n\u001B[1;32m 291\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_initial, \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_maximum, multiplier\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_multiplier\n\u001B[1;32m 292\u001B[0m )\n\u001B[0;32m--> 293\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mretry_target\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 294\u001B[0m \u001B[43m \u001B[49m\u001B[43mtarget\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 295\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_predicate\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 296\u001B[0m \u001B[43m \u001B[49m\u001B[43msleep_generator\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 297\u001B[0m \u001B[43m \u001B[49m\u001B[43mtimeout\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_timeout\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 298\u001B[0m \u001B[43m \u001B[49m\u001B[43mon_error\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mon_error\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 299\u001B[0m \u001B[43m\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/google/api_core/retry/retry_unary.py:153\u001B[0m, in \u001B[0;36mretry_target\u001B[0;34m(target, predicate, sleep_generator, timeout, on_error, exception_factory, **kwargs)\u001B[0m\n\u001B[1;32m 151\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mException\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m exc:\n\u001B[1;32m 152\u001B[0m \u001B[38;5;66;03m# defer to shared logic for handling errors\u001B[39;00m\n\u001B[0;32m--> 153\u001B[0m \u001B[43m_retry_error_helper\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 154\u001B[0m \u001B[43m \u001B[49m\u001B[43mexc\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 155\u001B[0m \u001B[43m \u001B[49m\u001B[43mdeadline\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 156\u001B[0m \u001B[43m \u001B[49m\u001B[43msleep\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 157\u001B[0m \u001B[43m \u001B[49m\u001B[43merror_list\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 158\u001B[0m \u001B[43m \u001B[49m\u001B[43mpredicate\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 159\u001B[0m \u001B[43m \u001B[49m\u001B[43mon_error\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 160\u001B[0m \u001B[43m \u001B[49m\u001B[43mexception_factory\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 161\u001B[0m \u001B[43m \u001B[49m\u001B[43mtimeout\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 162\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 163\u001B[0m \u001B[38;5;66;03m# if exception not raised, sleep before next attempt\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/google/api_core/retry/retry_base.py:212\u001B[0m, in \u001B[0;36m_retry_error_helper\u001B[0;34m(exc, deadline, next_sleep, error_list, predicate_fn, on_error_fn, exc_factory_fn, original_timeout)\u001B[0m\n\u001B[1;32m 207\u001B[0m final_exc, source_exc \u001B[38;5;241m=\u001B[39m exc_factory_fn(\n\u001B[1;32m 208\u001B[0m error_list,\n\u001B[1;32m 209\u001B[0m RetryFailureReason\u001B[38;5;241m.\u001B[39mNON_RETRYABLE_ERROR,\n\u001B[1;32m 210\u001B[0m original_timeout,\n\u001B[1;32m 211\u001B[0m )\n\u001B[0;32m--> 212\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m final_exc \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01msource_exc\u001B[39;00m\n\u001B[1;32m 213\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m on_error_fn \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/google/api_core/retry/retry_unary.py:144\u001B[0m, in \u001B[0;36mretry_target\u001B[0;34m(target, predicate, sleep_generator, timeout, on_error, exception_factory, **kwargs)\u001B[0m\n\u001B[1;32m 143\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 144\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[43mtarget\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 145\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m inspect\u001B[38;5;241m.\u001B[39misawaitable(result):\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/google/api_core/timeout.py:130\u001B[0m, in \u001B[0;36mTimeToDeadlineTimeout.__call__..func_with_timeout\u001B[0;34m(*args, **kwargs)\u001B[0m\n\u001B[1;32m 128\u001B[0m kwargs[\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mtimeout\u001B[39m\u001B[38;5;124m\"\u001B[39m] \u001B[38;5;241m=\u001B[39m remaining_timeout\n\u001B[0;32m--> 130\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mfunc\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\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", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/google/api_core/grpc_helpers.py:78\u001B[0m, in \u001B[0;36m_wrap_unary_errors..error_remapped_callable\u001B[0;34m(*args, **kwargs)\u001B[0m\n\u001B[1;32m 77\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m grpc\u001B[38;5;241m.\u001B[39mRpcError \u001B[38;5;28;01mas\u001B[39;00m exc:\n\u001B[0;32m---> 78\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m exceptions\u001B[38;5;241m.\u001B[39mfrom_grpc_error(exc) \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01mexc\u001B[39;00m\n", + "\u001B[0;31mInvalidArgument\u001B[0m: 400 * GenerateContentRequest.tools[0].function_declarations[8].name: Invalid function name. Must start with a letter or an underscore. Must be alphameric (a-z, A-Z, 0-9), underscores (_), dots (.) or dashes (-), with a maximum length of 64.\n", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001B[0;31mChatGoogleGenerativeAIError\u001B[0m Traceback (most recent call last)", + "Cell \u001B[0;32mIn[23], line 3\u001B[0m\n\u001B[1;32m 1\u001B[0m question \u001B[38;5;241m=\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mOn June 6, 2023, an article by Carolyn Collins Petersen was published in Universe Today. This article mentions a team that produced a paper about their observations, linked at the bottom of the article. Find this paper. Under what NASA award number was the work performed by R. G. Arendt supported by?\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 2\u001B[0m messages \u001B[38;5;241m=\u001B[39m [HumanMessage(content\u001B[38;5;241m=\u001B[39mquestion)]\n\u001B[0;32m----> 3\u001B[0m messages \u001B[38;5;241m=\u001B[39m \u001B[43mgraph\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43minvoke\u001B[49m\u001B[43m(\u001B[49m\u001B[43m{\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mmessages\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m:\u001B[49m\u001B[43m \u001B[49m\u001B[43mmessages\u001B[49m\u001B[43m}\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langgraph/pregel/__init__.py:2823\u001B[0m, in \u001B[0;36mPregel.invoke\u001B[0;34m(self, input, config, stream_mode, output_keys, interrupt_before, interrupt_after, checkpoint_during, debug, **kwargs)\u001B[0m\n\u001B[1;32m 2820\u001B[0m chunks: \u001B[38;5;28mlist\u001B[39m[Union[\u001B[38;5;28mdict\u001B[39m[\u001B[38;5;28mstr\u001B[39m, Any], Any]] \u001B[38;5;241m=\u001B[39m []\n\u001B[1;32m 2821\u001B[0m interrupts: \u001B[38;5;28mlist\u001B[39m[Interrupt] \u001B[38;5;241m=\u001B[39m []\n\u001B[0;32m-> 2823\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m chunk \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mstream(\n\u001B[1;32m 2824\u001B[0m \u001B[38;5;28minput\u001B[39m,\n\u001B[1;32m 2825\u001B[0m config,\n\u001B[1;32m 2826\u001B[0m stream_mode\u001B[38;5;241m=\u001B[39mstream_mode,\n\u001B[1;32m 2827\u001B[0m output_keys\u001B[38;5;241m=\u001B[39moutput_keys,\n\u001B[1;32m 2828\u001B[0m interrupt_before\u001B[38;5;241m=\u001B[39minterrupt_before,\n\u001B[1;32m 2829\u001B[0m interrupt_after\u001B[38;5;241m=\u001B[39minterrupt_after,\n\u001B[1;32m 2830\u001B[0m checkpoint_during\u001B[38;5;241m=\u001B[39mcheckpoint_during,\n\u001B[1;32m 2831\u001B[0m debug\u001B[38;5;241m=\u001B[39mdebug,\n\u001B[1;32m 2832\u001B[0m \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs,\n\u001B[1;32m 2833\u001B[0m ):\n\u001B[1;32m 2834\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m stream_mode \u001B[38;5;241m==\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mvalues\u001B[39m\u001B[38;5;124m\"\u001B[39m:\n\u001B[1;32m 2835\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m (\n\u001B[1;32m 2836\u001B[0m \u001B[38;5;28misinstance\u001B[39m(chunk, \u001B[38;5;28mdict\u001B[39m)\n\u001B[1;32m 2837\u001B[0m \u001B[38;5;129;01mand\u001B[39;00m (ints \u001B[38;5;241m:=\u001B[39m chunk\u001B[38;5;241m.\u001B[39mget(INTERRUPT)) \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[1;32m 2838\u001B[0m ):\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langgraph/pregel/__init__.py:2461\u001B[0m, in \u001B[0;36mPregel.stream\u001B[0;34m(self, input, config, stream_mode, output_keys, interrupt_before, interrupt_after, checkpoint_during, debug, subgraphs)\u001B[0m\n\u001B[1;32m 2455\u001B[0m \u001B[38;5;66;03m# Similarly to Bulk Synchronous Parallel / Pregel model\u001B[39;00m\n\u001B[1;32m 2456\u001B[0m \u001B[38;5;66;03m# computation proceeds in steps, while there are channel updates.\u001B[39;00m\n\u001B[1;32m 2457\u001B[0m \u001B[38;5;66;03m# Channel updates from step N are only visible in step N+1\u001B[39;00m\n\u001B[1;32m 2458\u001B[0m \u001B[38;5;66;03m# channels are guaranteed to be immutable for the duration of the step,\u001B[39;00m\n\u001B[1;32m 2459\u001B[0m \u001B[38;5;66;03m# with channel updates applied only at the transition between steps.\u001B[39;00m\n\u001B[1;32m 2460\u001B[0m \u001B[38;5;28;01mwhile\u001B[39;00m loop\u001B[38;5;241m.\u001B[39mtick(input_keys\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39minput_channels):\n\u001B[0;32m-> 2461\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m _ \u001B[38;5;129;01min\u001B[39;00m runner\u001B[38;5;241m.\u001B[39mtick(\n\u001B[1;32m 2462\u001B[0m loop\u001B[38;5;241m.\u001B[39mtasks\u001B[38;5;241m.\u001B[39mvalues(),\n\u001B[1;32m 2463\u001B[0m timeout\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mstep_timeout,\n\u001B[1;32m 2464\u001B[0m retry_policy\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mretry_policy,\n\u001B[1;32m 2465\u001B[0m get_waiter\u001B[38;5;241m=\u001B[39mget_waiter,\n\u001B[1;32m 2466\u001B[0m ):\n\u001B[1;32m 2467\u001B[0m \u001B[38;5;66;03m# emit output\u001B[39;00m\n\u001B[1;32m 2468\u001B[0m \u001B[38;5;28;01myield from\u001B[39;00m output()\n\u001B[1;32m 2469\u001B[0m \u001B[38;5;66;03m# emit output\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langgraph/pregel/runner.py:153\u001B[0m, in \u001B[0;36mPregelRunner.tick\u001B[0;34m(self, tasks, reraise, timeout, retry_policy, get_waiter)\u001B[0m\n\u001B[1;32m 151\u001B[0m t \u001B[38;5;241m=\u001B[39m tasks[\u001B[38;5;241m0\u001B[39m]\n\u001B[1;32m 152\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 153\u001B[0m \u001B[43mrun_with_retry\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 154\u001B[0m \u001B[43m \u001B[49m\u001B[43mt\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 155\u001B[0m \u001B[43m \u001B[49m\u001B[43mretry_policy\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 156\u001B[0m \u001B[43m \u001B[49m\u001B[43mconfigurable\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43m{\u001B[49m\n\u001B[1;32m 157\u001B[0m \u001B[43m \u001B[49m\u001B[43mCONFIG_KEY_CALL\u001B[49m\u001B[43m:\u001B[49m\u001B[43m \u001B[49m\u001B[43mpartial\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 158\u001B[0m \u001B[43m \u001B[49m\u001B[43m_call\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 159\u001B[0m \u001B[43m \u001B[49m\u001B[43mweakref\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mref\u001B[49m\u001B[43m(\u001B[49m\u001B[43mt\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 160\u001B[0m \u001B[43m \u001B[49m\u001B[43mretry\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mretry_policy\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 161\u001B[0m \u001B[43m \u001B[49m\u001B[43mfutures\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mweakref\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mref\u001B[49m\u001B[43m(\u001B[49m\u001B[43mfutures\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 162\u001B[0m \u001B[43m \u001B[49m\u001B[43mschedule_task\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mschedule_task\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 163\u001B[0m \u001B[43m \u001B[49m\u001B[43msubmit\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43msubmit\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 164\u001B[0m \u001B[43m \u001B[49m\u001B[43mreraise\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mreraise\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 165\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 166\u001B[0m \u001B[43m \u001B[49m\u001B[43m}\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 167\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 168\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mcommit(t, \u001B[38;5;28;01mNone\u001B[39;00m)\n\u001B[1;32m 169\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mException\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m exc:\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langgraph/pregel/retry.py:40\u001B[0m, in \u001B[0;36mrun_with_retry\u001B[0;34m(task, retry_policy, configurable)\u001B[0m\n\u001B[1;32m 38\u001B[0m task\u001B[38;5;241m.\u001B[39mwrites\u001B[38;5;241m.\u001B[39mclear()\n\u001B[1;32m 39\u001B[0m \u001B[38;5;66;03m# run the task\u001B[39;00m\n\u001B[0;32m---> 40\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mtask\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mproc\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43minvoke\u001B[49m\u001B[43m(\u001B[49m\u001B[43mtask\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43minput\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mconfig\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 41\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m ParentCommand \u001B[38;5;28;01mas\u001B[39;00m exc:\n\u001B[1;32m 42\u001B[0m ns: \u001B[38;5;28mstr\u001B[39m \u001B[38;5;241m=\u001B[39m config[CONF][CONFIG_KEY_CHECKPOINT_NS]\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langgraph/utils/runnable.py:623\u001B[0m, in \u001B[0;36mRunnableSeq.invoke\u001B[0;34m(self, input, config, **kwargs)\u001B[0m\n\u001B[1;32m 621\u001B[0m \u001B[38;5;66;03m# run in context\u001B[39;00m\n\u001B[1;32m 622\u001B[0m \u001B[38;5;28;01mwith\u001B[39;00m set_config_context(config, run) \u001B[38;5;28;01mas\u001B[39;00m context:\n\u001B[0;32m--> 623\u001B[0m \u001B[38;5;28minput\u001B[39m \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[43mstep\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43minvoke\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43minput\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mconfig\u001B[49m\u001B[43m,\u001B[49m\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 624\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 625\u001B[0m \u001B[38;5;28minput\u001B[39m \u001B[38;5;241m=\u001B[39m step\u001B[38;5;241m.\u001B[39minvoke(\u001B[38;5;28minput\u001B[39m, config)\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langgraph/utils/runnable.py:377\u001B[0m, in \u001B[0;36mRunnableCallable.invoke\u001B[0;34m(self, input, config, **kwargs)\u001B[0m\n\u001B[1;32m 375\u001B[0m run_manager\u001B[38;5;241m.\u001B[39mon_chain_end(ret)\n\u001B[1;32m 376\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[0;32m--> 377\u001B[0m ret \u001B[38;5;241m=\u001B[39m \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[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\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 378\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mrecurse \u001B[38;5;129;01mand\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(ret, Runnable):\n\u001B[1;32m 379\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m ret\u001B[38;5;241m.\u001B[39minvoke(\u001B[38;5;28minput\u001B[39m, config)\n", + "Cell \u001B[0;32mIn[20], line 12\u001B[0m, in \u001B[0;36massistant\u001B[0;34m(state)\u001B[0m\n\u001B[1;32m 10\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21massistant\u001B[39m(state: MessagesState):\n\u001B[1;32m 11\u001B[0m \u001B[38;5;250m \u001B[39m\u001B[38;5;124;03m\"\"\"Assistant node\"\"\"\u001B[39;00m\n\u001B[0;32m---> 12\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m {\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mmessages\u001B[39m\u001B[38;5;124m\"\u001B[39m: [\u001B[43mllm_with_tools\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43minvoke\u001B[49m\u001B[43m(\u001B[49m\u001B[43m[\u001B[49m\u001B[43msys_msg\u001B[49m\u001B[43m]\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m+\u001B[39;49m\u001B[43m \u001B[49m\u001B[43mstate\u001B[49m\u001B[43m[\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mmessages\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m]\u001B[49m\u001B[43m)\u001B[49m]}\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/runnables/base.py:5416\u001B[0m, in \u001B[0;36mRunnableBindingBase.invoke\u001B[0;34m(self, input, config, **kwargs)\u001B[0m\n\u001B[1;32m 5409\u001B[0m \u001B[38;5;129m@override\u001B[39m\n\u001B[1;32m 5410\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21minvoke\u001B[39m(\n\u001B[1;32m 5411\u001B[0m \u001B[38;5;28mself\u001B[39m,\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 5414\u001B[0m \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs: Optional[Any],\n\u001B[1;32m 5415\u001B[0m ) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m Output:\n\u001B[0;32m-> 5416\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mbound\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43minvoke\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 5417\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43minput\u001B[39;49m\u001B[43m,\u001B[49m\n\u001B[1;32m 5418\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_merge_configs\u001B[49m\u001B[43m(\u001B[49m\u001B[43mconfig\u001B[49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 5419\u001B[0m \u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43m{\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mkwargs\u001B[49m\u001B[43m,\u001B[49m\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\u001B[43m,\u001B[49m\n\u001B[1;32m 5420\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_google_genai/chat_models.py:1199\u001B[0m, in \u001B[0;36mChatGoogleGenerativeAI.invoke\u001B[0;34m(self, input, config, code_execution, stop, **kwargs)\u001B[0m\n\u001B[1;32m 1194\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 1195\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(\n\u001B[1;32m 1196\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mTools are already defined.\u001B[39m\u001B[38;5;124m\"\u001B[39m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mcode_execution tool can\u001B[39m\u001B[38;5;124m'\u001B[39m\u001B[38;5;124mt be defined\u001B[39m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 1197\u001B[0m )\n\u001B[0;32m-> 1199\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43msuper\u001B[39;49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43minvoke\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43minput\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mconfig\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstop\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mstop\u001B[49m\u001B[43m,\u001B[49m\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", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/language_models/chat_models.py:370\u001B[0m, in \u001B[0;36mBaseChatModel.invoke\u001B[0;34m(self, input, config, stop, **kwargs)\u001B[0m\n\u001B[1;32m 358\u001B[0m \u001B[38;5;129m@override\u001B[39m\n\u001B[1;32m 359\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21minvoke\u001B[39m(\n\u001B[1;32m 360\u001B[0m \u001B[38;5;28mself\u001B[39m,\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 365\u001B[0m \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs: Any,\n\u001B[1;32m 366\u001B[0m ) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m BaseMessage:\n\u001B[1;32m 367\u001B[0m config \u001B[38;5;241m=\u001B[39m ensure_config(config)\n\u001B[1;32m 368\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m cast(\n\u001B[1;32m 369\u001B[0m \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mChatGeneration\u001B[39m\u001B[38;5;124m\"\u001B[39m,\n\u001B[0;32m--> 370\u001B[0m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mgenerate_prompt\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 371\u001B[0m \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[43m_convert_input\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;28;43minput\u001B[39;49m\u001B[43m)\u001B[49m\u001B[43m]\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 372\u001B[0m \u001B[43m \u001B[49m\u001B[43mstop\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mstop\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 373\u001B[0m \u001B[43m \u001B[49m\u001B[43mcallbacks\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mconfig\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mcallbacks\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 374\u001B[0m \u001B[43m \u001B[49m\u001B[43mtags\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mconfig\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mtags\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 375\u001B[0m \u001B[43m \u001B[49m\u001B[43mmetadata\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mconfig\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mmetadata\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 376\u001B[0m \u001B[43m \u001B[49m\u001B[43mrun_name\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mconfig\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mget\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mrun_name\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 377\u001B[0m \u001B[43m \u001B[49m\u001B[43mrun_id\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mconfig\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mpop\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[38;5;124;43mrun_id\u001B[39;49m\u001B[38;5;124;43m\"\u001B[39;49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01mNone\u001B[39;49;00m\u001B[43m)\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 378\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 379\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\u001B[38;5;241m.\u001B[39mgenerations[\u001B[38;5;241m0\u001B[39m][\u001B[38;5;241m0\u001B[39m],\n\u001B[1;32m 380\u001B[0m )\u001B[38;5;241m.\u001B[39mmessage\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/language_models/chat_models.py:947\u001B[0m, in \u001B[0;36mBaseChatModel.generate_prompt\u001B[0;34m(self, prompts, stop, callbacks, **kwargs)\u001B[0m\n\u001B[1;32m 938\u001B[0m \u001B[38;5;129m@override\u001B[39m\n\u001B[1;32m 939\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21mgenerate_prompt\u001B[39m(\n\u001B[1;32m 940\u001B[0m \u001B[38;5;28mself\u001B[39m,\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 944\u001B[0m \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs: Any,\n\u001B[1;32m 945\u001B[0m ) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m LLMResult:\n\u001B[1;32m 946\u001B[0m prompt_messages \u001B[38;5;241m=\u001B[39m [p\u001B[38;5;241m.\u001B[39mto_messages() \u001B[38;5;28;01mfor\u001B[39;00m p \u001B[38;5;129;01min\u001B[39;00m prompts]\n\u001B[0;32m--> 947\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mgenerate\u001B[49m\u001B[43m(\u001B[49m\u001B[43mprompt_messages\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstop\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mstop\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mcallbacks\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mcallbacks\u001B[49m\u001B[43m,\u001B[49m\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", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/language_models/chat_models.py:766\u001B[0m, in \u001B[0;36mBaseChatModel.generate\u001B[0;34m(self, messages, stop, callbacks, tags, metadata, run_name, run_id, **kwargs)\u001B[0m\n\u001B[1;32m 763\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m i, m \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28menumerate\u001B[39m(input_messages):\n\u001B[1;32m 764\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[1;32m 765\u001B[0m results\u001B[38;5;241m.\u001B[39mappend(\n\u001B[0;32m--> 766\u001B[0m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_generate_with_cache\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 767\u001B[0m \u001B[43m \u001B[49m\u001B[43mm\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 768\u001B[0m \u001B[43m \u001B[49m\u001B[43mstop\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mstop\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 769\u001B[0m \u001B[43m \u001B[49m\u001B[43mrun_manager\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mrun_managers\u001B[49m\u001B[43m[\u001B[49m\u001B[43mi\u001B[49m\u001B[43m]\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01mif\u001B[39;49;00m\u001B[43m \u001B[49m\u001B[43mrun_managers\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;28;43;01melse\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 770\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 771\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 772\u001B[0m )\n\u001B[1;32m 773\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mBaseException\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[1;32m 774\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m run_managers:\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_core/language_models/chat_models.py:1012\u001B[0m, in \u001B[0;36mBaseChatModel._generate_with_cache\u001B[0;34m(self, messages, stop, run_manager, **kwargs)\u001B[0m\n\u001B[1;32m 1010\u001B[0m result \u001B[38;5;241m=\u001B[39m generate_from_stream(\u001B[38;5;28miter\u001B[39m(chunks))\n\u001B[1;32m 1011\u001B[0m \u001B[38;5;28;01melif\u001B[39;00m inspect\u001B[38;5;241m.\u001B[39msignature(\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_generate)\u001B[38;5;241m.\u001B[39mparameters\u001B[38;5;241m.\u001B[39mget(\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mrun_manager\u001B[39m\u001B[38;5;124m\"\u001B[39m):\n\u001B[0;32m-> 1012\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m_generate\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 1013\u001B[0m \u001B[43m \u001B[49m\u001B[43mmessages\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mstop\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mstop\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[43mrun_manager\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mrun_manager\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkwargs\u001B[49m\n\u001B[1;32m 1014\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1015\u001B[0m \u001B[38;5;28;01melse\u001B[39;00m:\n\u001B[1;32m 1016\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_generate(messages, stop\u001B[38;5;241m=\u001B[39mstop, \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs)\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_google_genai/chat_models.py:1275\u001B[0m, in \u001B[0;36mChatGoogleGenerativeAI._generate\u001B[0;34m(self, messages, stop, run_manager, tools, functions, safety_settings, tool_config, generation_config, cached_content, tool_choice, **kwargs)\u001B[0m\n\u001B[1;32m 1249\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21m_generate\u001B[39m(\n\u001B[1;32m 1250\u001B[0m \u001B[38;5;28mself\u001B[39m,\n\u001B[1;32m 1251\u001B[0m messages: List[BaseMessage],\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 1262\u001B[0m \u001B[38;5;241m*\u001B[39m\u001B[38;5;241m*\u001B[39mkwargs: Any,\n\u001B[1;32m 1263\u001B[0m ) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m ChatResult:\n\u001B[1;32m 1264\u001B[0m request \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_prepare_request(\n\u001B[1;32m 1265\u001B[0m messages,\n\u001B[1;32m 1266\u001B[0m stop\u001B[38;5;241m=\u001B[39mstop,\n\u001B[0;32m (...)\u001B[0m\n\u001B[1;32m 1273\u001B[0m tool_choice\u001B[38;5;241m=\u001B[39mtool_choice,\n\u001B[1;32m 1274\u001B[0m )\n\u001B[0;32m-> 1275\u001B[0m response: GenerateContentResponse \u001B[38;5;241m=\u001B[39m \u001B[43m_chat_with_retry\u001B[49m\u001B[43m(\u001B[49m\n\u001B[1;32m 1276\u001B[0m \u001B[43m \u001B[49m\u001B[43mrequest\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mrequest\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1277\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 1278\u001B[0m \u001B[43m \u001B[49m\u001B[43mgeneration_method\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mclient\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mgenerate_content\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1279\u001B[0m \u001B[43m \u001B[49m\u001B[43mmetadata\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mdefault_metadata\u001B[49m\u001B[43m,\u001B[49m\n\u001B[1;32m 1280\u001B[0m \u001B[43m \u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 1281\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m _response_to_result(response)\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_google_genai/chat_models.py:210\u001B[0m, in \u001B[0;36m_chat_with_retry\u001B[0;34m(generation_method, **kwargs)\u001B[0m\n\u001B[1;32m 207\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mException\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[1;32m 208\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m e\n\u001B[0;32m--> 210\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43m_chat_with_retry\u001B[49m\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", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/tenacity/__init__.py:338\u001B[0m, in \u001B[0;36mBaseRetrying.wraps..wrapped_f\u001B[0;34m(*args, **kw)\u001B[0m\n\u001B[1;32m 336\u001B[0m copy \u001B[38;5;241m=\u001B[39m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mcopy()\n\u001B[1;32m 337\u001B[0m wrapped_f\u001B[38;5;241m.\u001B[39mstatistics \u001B[38;5;241m=\u001B[39m copy\u001B[38;5;241m.\u001B[39mstatistics \u001B[38;5;66;03m# type: ignore[attr-defined]\u001B[39;00m\n\u001B[0;32m--> 338\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[43mcopy\u001B[49m\u001B[43m(\u001B[49m\u001B[43mf\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\u001B[43m \u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43mkw\u001B[49m\u001B[43m)\u001B[49m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/tenacity/__init__.py:477\u001B[0m, in \u001B[0;36mRetrying.__call__\u001B[0;34m(self, fn, *args, **kwargs)\u001B[0m\n\u001B[1;32m 475\u001B[0m retry_state \u001B[38;5;241m=\u001B[39m RetryCallState(retry_object\u001B[38;5;241m=\u001B[39m\u001B[38;5;28mself\u001B[39m, fn\u001B[38;5;241m=\u001B[39mfn, args\u001B[38;5;241m=\u001B[39margs, kwargs\u001B[38;5;241m=\u001B[39mkwargs)\n\u001B[1;32m 476\u001B[0m \u001B[38;5;28;01mwhile\u001B[39;00m \u001B[38;5;28;01mTrue\u001B[39;00m:\n\u001B[0;32m--> 477\u001B[0m do \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43miter\u001B[49m\u001B[43m(\u001B[49m\u001B[43mretry_state\u001B[49m\u001B[38;5;241;43m=\u001B[39;49m\u001B[43mretry_state\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 478\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(do, DoAttempt):\n\u001B[1;32m 479\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/tenacity/__init__.py:378\u001B[0m, in \u001B[0;36mBaseRetrying.iter\u001B[0;34m(self, retry_state)\u001B[0m\n\u001B[1;32m 376\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n\u001B[1;32m 377\u001B[0m \u001B[38;5;28;01mfor\u001B[39;00m action \u001B[38;5;129;01min\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39miter_state\u001B[38;5;241m.\u001B[39mactions:\n\u001B[0;32m--> 378\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[43maction\u001B[49m\u001B[43m(\u001B[49m\u001B[43mretry_state\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 379\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m result\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/tenacity/__init__.py:400\u001B[0m, in \u001B[0;36mBaseRetrying._post_retry_check_actions..\u001B[0;34m(rs)\u001B[0m\n\u001B[1;32m 398\u001B[0m \u001B[38;5;28;01mdef\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21m_post_retry_check_actions\u001B[39m(\u001B[38;5;28mself\u001B[39m, retry_state: \u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mRetryCallState\u001B[39m\u001B[38;5;124m\"\u001B[39m) \u001B[38;5;241m-\u001B[39m\u001B[38;5;241m>\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m:\n\u001B[1;32m 399\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m (\u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39miter_state\u001B[38;5;241m.\u001B[39mis_explicit_retry \u001B[38;5;129;01mor\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39miter_state\u001B[38;5;241m.\u001B[39mretry_run_result):\n\u001B[0;32m--> 400\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_add_action_func(\u001B[38;5;28;01mlambda\u001B[39;00m rs: \u001B[43mrs\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43moutcome\u001B[49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43mresult\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m)\n\u001B[1;32m 401\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m\n\u001B[1;32m 403\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39mafter \u001B[38;5;129;01mis\u001B[39;00m \u001B[38;5;129;01mnot\u001B[39;00m \u001B[38;5;28;01mNone\u001B[39;00m:\n", + "File \u001B[0;32m~/.pyenv/versions/3.10.9/lib/python3.10/concurrent/futures/_base.py:451\u001B[0m, in \u001B[0;36mFuture.result\u001B[0;34m(self, timeout)\u001B[0m\n\u001B[1;32m 449\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m CancelledError()\n\u001B[1;32m 450\u001B[0m \u001B[38;5;28;01melif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_state \u001B[38;5;241m==\u001B[39m FINISHED:\n\u001B[0;32m--> 451\u001B[0m \u001B[38;5;28;01mreturn\u001B[39;00m \u001B[38;5;28;43mself\u001B[39;49m\u001B[38;5;241;43m.\u001B[39;49m\u001B[43m__get_result\u001B[49m\u001B[43m(\u001B[49m\u001B[43m)\u001B[49m\n\u001B[1;32m 453\u001B[0m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_condition\u001B[38;5;241m.\u001B[39mwait(timeout)\n\u001B[1;32m 455\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_state \u001B[38;5;129;01min\u001B[39;00m [CANCELLED, CANCELLED_AND_NOTIFIED]:\n", + "File \u001B[0;32m~/.pyenv/versions/3.10.9/lib/python3.10/concurrent/futures/_base.py:403\u001B[0m, in \u001B[0;36mFuture.__get_result\u001B[0;34m(self)\u001B[0m\n\u001B[1;32m 401\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_exception:\n\u001B[1;32m 402\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 403\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;28mself\u001B[39m\u001B[38;5;241m.\u001B[39m_exception\n\u001B[1;32m 404\u001B[0m \u001B[38;5;28;01mfinally\u001B[39;00m:\n\u001B[1;32m 405\u001B[0m \u001B[38;5;66;03m# Break a reference cycle with the exception in self._exception\u001B[39;00m\n\u001B[1;32m 406\u001B[0m \u001B[38;5;28mself\u001B[39m \u001B[38;5;241m=\u001B[39m \u001B[38;5;28;01mNone\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/tenacity/__init__.py:480\u001B[0m, in \u001B[0;36mRetrying.__call__\u001B[0;34m(self, fn, *args, **kwargs)\u001B[0m\n\u001B[1;32m 478\u001B[0m \u001B[38;5;28;01mif\u001B[39;00m \u001B[38;5;28misinstance\u001B[39m(do, DoAttempt):\n\u001B[1;32m 479\u001B[0m \u001B[38;5;28;01mtry\u001B[39;00m:\n\u001B[0;32m--> 480\u001B[0m result \u001B[38;5;241m=\u001B[39m \u001B[43mfn\u001B[49m\u001B[43m(\u001B[49m\u001B[38;5;241;43m*\u001B[39;49m\u001B[43margs\u001B[49m\u001B[43m,\u001B[49m\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 481\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mBaseException\u001B[39;00m: \u001B[38;5;66;03m# noqa: B902\u001B[39;00m\n\u001B[1;32m 482\u001B[0m retry_state\u001B[38;5;241m.\u001B[39mset_exception(sys\u001B[38;5;241m.\u001B[39mexc_info()) \u001B[38;5;66;03m# type: ignore[arg-type]\u001B[39;00m\n", + "File \u001B[0;32m~/final_assignment_v3/.venv/lib/python3.10/site-packages/langchain_google_genai/chat_models.py:204\u001B[0m, in \u001B[0;36m_chat_with_retry.._chat_with_retry\u001B[0;34m(**kwargs)\u001B[0m\n\u001B[1;32m 201\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m \u001B[38;5;167;01mValueError\u001B[39;00m(error_msg)\n\u001B[1;32m 203\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m google\u001B[38;5;241m.\u001B[39mapi_core\u001B[38;5;241m.\u001B[39mexceptions\u001B[38;5;241m.\u001B[39mInvalidArgument \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[0;32m--> 204\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m ChatGoogleGenerativeAIError(\n\u001B[1;32m 205\u001B[0m \u001B[38;5;124mf\u001B[39m\u001B[38;5;124m\"\u001B[39m\u001B[38;5;124mInvalid argument provided to Gemini: \u001B[39m\u001B[38;5;132;01m{\u001B[39;00me\u001B[38;5;132;01m}\u001B[39;00m\u001B[38;5;124m\"\u001B[39m\n\u001B[1;32m 206\u001B[0m ) \u001B[38;5;28;01mfrom\u001B[39;00m\u001B[38;5;250m \u001B[39m\u001B[38;5;21;01me\u001B[39;00m\n\u001B[1;32m 207\u001B[0m \u001B[38;5;28;01mexcept\u001B[39;00m \u001B[38;5;167;01mException\u001B[39;00m \u001B[38;5;28;01mas\u001B[39;00m e:\n\u001B[1;32m 208\u001B[0m \u001B[38;5;28;01mraise\u001B[39;00m e\n", + "\u001B[0;31mChatGoogleGenerativeAIError\u001B[0m: Invalid argument provided to Gemini: 400 * GenerateContentRequest.tools[0].function_declarations[8].name: Invalid function name. Must start with a letter or an underscore. Must be alphameric (a-z, A-Z, 0-9), underscores (_), dots (.) or dashes (-), with a maximum length of 64.\n" + ] + } + ], + "execution_count": 23 }, { "cell_type": "code", @@ -662,6 +1693,14 @@ "for m in messages['messages']:\n", " m.pretty_print()" ] + }, + { + "metadata": {}, + "cell_type": "code", + "outputs": [], + "execution_count": null, + "source": "", + "id": "837ae65dab259cd6" } ], "metadata": {