{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "07f255d7", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd \n", "import numpy as np\n", "import os\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "import sys\n", "sys.path.append(\"C:/git/climate-question-answering\")\n", "sys.path.append(\"/mnt/c/git/climate-question-answering\")\n", "\n", "from dotenv import load_dotenv\n", "load_dotenv()" ] }, { "cell_type": "markdown", "id": "4c9258cc-3800-4485-bdd8-889b299b9133", "metadata": {}, "source": [ "# Import objects" ] }, { "cell_type": "code", "execution_count": 2, "id": "6af1a96e", "metadata": { "tags": [] }, "outputs": [], "source": [ "from climateqa.engine.llm import get_llm\n", "llm = get_llm(provider=\"openai\")" ] }, { "cell_type": "code", "execution_count": 53, "id": "a9128bfc-4b24-4b25-b7a7-68423b1124b1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Auto-updated model_name to rerank-english-v3.0 for API provider cohere\n", "Loading APIRanker model rerank-english-v3.0\n" ] } ], "source": [ "from climateqa.engine.reranker import get_reranker\n", "\n", "reranker = get_reranker(\"large\")\n", "# from rerankers import Reranker\n", "# # Specific flashrank model.\n", "# # reranker = Reranker('ms-marco-TinyBERT-L-2-v2', model_type='flashrank')\n", "# # reranker = Reranker('ms-marco-MiniLM-L-12-v2', model_type='flashrank')\n", "# # reranker = Reranker('cross-encoder/ms-marco-MiniLM-L-4-v2', model_type='cross-encoder')\n", "# # reranker = Reranker(\"mixedbread-ai/mxbai-rerank-xsmall-v1\", model_type='cross-encoder')\n", "# # reranker = Reranker(\"mixedbread-ai/mxbai-rerank-xsmall-v1\", model_type='cross-encoder')\n", "# reranker = Reranker(\"cohere\", lang='en', api_key = \"XXX\")" ] }, { "cell_type": "code", "execution_count": 54, "id": "942d2705-22dd-46cf-8c31-6daa127e4743", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: BAAI/bge-base-en-v1.5\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Loading embeddings model: BAAI/bge-base-en-v1.5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: cuda\n" ] } ], "source": [ "from climateqa.engine.vectorstore import get_pinecone_vectorstore\n", "from climateqa.engine.embeddings import get_embeddings_function\n", "from climateqa.engine.retriever import ClimateQARetriever\n", "\n", "embeddings_function = get_embeddings_function()\n", "vectorstore = get_pinecone_vectorstore(embeddings_function)" ] }, { "cell_type": "code", "execution_count": 5, "id": "882811c8-5890-4048-8630-d052c5179d7d", "metadata": {}, "outputs": [], "source": [ "import torch" ] }, { "cell_type": "code", "execution_count": 6, "id": "51aed81d-860b-409a-bae0-f0e1eeb0f120", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "torch.cuda.is_available()" ] }, { "cell_type": "markdown", "id": "16eb91cb-3bfb-4c0c-b29e-753c954c2399", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "# Semantic Routing" ] }, { "cell_type": "code", "execution_count": 3, "id": "1e769371-1f8c-4f34-89c5-c0f9914d47a0", "metadata": { "tags": [] }, "outputs": [], "source": [ "from climateqa.engine.chains.intent_routing import make_intent_router_chain" ] }, { "cell_type": "code", "execution_count": 4, "id": "480ad611-33c7-49ea-b02c-94d6ce1f1d1a", "metadata": { "tags": [] }, "outputs": [], "source": [ "router_chain = make_intent_router_chain(llm)" ] }, { "cell_type": "code", "execution_count": 5, "id": "82cf49d9-d48e-4d5c-8666-bcc95f637371", "metadata": { "tags": [] }, "outputs": [], "source": [ "# for question in SAMPLE_QUESTIONS:\n", "# output = router_chain.invoke({\"input\":question})\n", "# print(question)\n", "# print(output)\n", "# print(\"-\"*100)\n", "# break" ] }, { "cell_type": "code", "execution_count": 6, "id": "d8ef7e0f-ac5f-4323-b02e-753ce2b4afda", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'intent': 'search'}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "router_chain.invoke({\"input\":\"Which industries have the highest GHG emissions?\"})" ] }, { "cell_type": "markdown", "id": "6f50f767-64e9-4f5d-82b4-496530532ad9", "metadata": { "jp-MarkdownHeadingCollapsed": true }, "source": [ "# Query Rewriter" ] }, { "cell_type": "code", "execution_count": 8, "id": "3345a24e-e794-4e84-93ae-98be5ca61af3", "metadata": { "tags": [] }, "outputs": [], "source": [ "from climateqa.engine.chains.query_transformation import make_query_rewriter_chain,make_query_decomposition_chain\n", "from climateqa.engine.chains.translation import make_translation_chain" ] }, { "cell_type": "code", "execution_count": 9, "id": "16bd17cd-f9ea-489c-923f-acd851b09cd8", "metadata": { "tags": [] }, "outputs": [], "source": [ "rewriter_chain = make_query_rewriter_chain(llm)\n", "translation_chain = make_translation_chain(llm)\n", "decomposition_chain = make_query_decomposition_chain(llm)\n", "router_chain = make_intent_router_chain(llm)" ] }, { "cell_type": "code", "execution_count": 10, "id": "3a2147fc-8437-44a3-87ae-52fe5b8f8f87", "metadata": { "tags": [] }, "outputs": [], "source": [ "def transform_query(user_input):\n", " \n", " state = {\"user_input\":user_input}\n", " \n", " # Route\n", " output_router = router_chain.invoke({\"input\":user_input})\n", " if \"language\" not in output_router: output_router[\"language\"] = \"English\"\n", " state.update(output_router)\n", " \n", " # Translation\n", " if output_router[\"language\"].lower() != \"english\":\n", " translation = translation_chain.invoke({\"input\":user_input})\n", " state[\"query\"] = translation[\"translation\"]\n", " else:\n", " state[\"query\"] = user_input\n", " \n", " # Decomposition\n", " decomposition_output = decomposition_chain.invoke({\"input\":state[\"query\"]})\n", " state.update(decomposition_output)\n", " \n", " # Query Analysis\n", " questions = []\n", " for question in state[\"questions\"]:\n", " question_state = {\"question\":question}\n", " analysis_output = rewriter_chain.invoke({\"input\":question})\n", " question_state.update(analysis_output)\n", " questions.append(question_state)\n", " state[\"questions\"] = questions\n", " \n", " return state" ] }, { "cell_type": "code", "execution_count": 11, "id": "4151d2e4-0bfe-4642-a185-2dcb639e6f78", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'user_input': 'What does Morrison argue about IK and LK on internal migration ?',\n", " 'intent': 'search',\n", " 'language': 'English',\n", " 'query': 'What does Morrison argue about IK and LK on internal migration ?',\n", " 'questions': [{'question': 'What does Morrison argue about internal migration?',\n", " 'sources': ['OpenAlex']},\n", " {'question': 'What does Morrison argue about interregional migration?',\n", " 'sources': ['OpenAlex']},\n", " {'question': 'What does Morrison argue about intraregional migration?',\n", " 'sources': ['OpenAlex']}]}" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# question = \"Franchement je sais pas trop de quoi on parle là, qui sont les membres du GIEC en fait ? Et quelles sont leurs dernières publications ?\"\n", "question = \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\"\n", "question = \"I need to search the president of the United States, find their age, then find how old they will be in June 2023.\"\n", "question = \"What does Morrison argue about IK and LK on internal migration ?\"\n", "state = transform_query(question)\n", "state" ] }, { "cell_type": "code", "execution_count": 45, "id": "a322f737-191d-407f-b499-2b79476fac8b", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "'Super thanks, Which industries have the highest GHG emissions?'" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "questions = [\n", " \"Super thanks, Which industries have the highest GHG emissions?\",\n", " \"How do you compare the view on biodiversity between the IPCC and IPBES ?\",\n", " \"Est-ce que l'IA a un impact sur l'environnement ?\",\n", " \"Que dit le GIEC sur l'impact de l'IA\",\n", " \"Franchement je sais pas trop de quoi on parle là, qui sont les membres du GIEC en fait ? Et quelles sont leurs dernières publications ?\",\n", " \"Ok that's nice, but I don't really understand. What is the impact of El Nino ?\",\n", " \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\",\n", " \"Which industries have the highest GHG emissions?\",\n", " \"What are invasive alien species and how do they threaten biodiversity and ecosystems?\",\n", " \"Are human activities causing global warming?\",\n", " \"What is the motivation behind mining the deep seabed?\",\n", " \"Tu peux m'écrire un poème sur le changement climatique ?\",\n", " \"Tu peux m'écrire un poème sur les bonbons ?\",\n", " \"What will be the temperature in 2100 in Strasbourg?\",\n", " \"C'est quoi le lien entre biodiversity and changement climatique ?\",\n", " \"Can you tell me more about ESRS2 ?\"\n", "]\n", "\n", "question = questions[0]\n", "question" ] }, { "cell_type": "code", "execution_count": 46, "id": "fcee82a3-342d-4da1-8c27-a6f6079da4a7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'sources': ['IPCC']}" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "question = \"Very nice thank you, What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\"\n", "output = rewriter_chain.invoke({\"input\":question})\n", "output" ] }, { "cell_type": "code", "execution_count": 47, "id": "d13d6a1a-9fa5-4e47-861e-30a79ea97d05", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Super thanks, Which industries have the highest GHG emissions?\n", "{'user_input': 'Super thanks, Which industries have the highest GHG emissions?', 'intent': 'search', 'language': 'English', 'query': 'Super thanks, Which industries have the highest GHG emissions?', 'questions': [{'question': 'Which industries are the largest contributors to greenhouse gas emissions?', 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "How do you compare the view on biodiversity between the IPCC and IPBES ?\n", "{'user_input': 'How do you compare the view on biodiversity between the IPCC and IPBES ?', 'intent': 'search', 'language': 'English', 'query': 'How do you compare the view on biodiversity between the IPCC and IPBES ?', 'questions': [{'question': 'What is the view on biodiversity according to the IPCC?', 'sources': ['IPCC']}, {'question': 'What is the view on biodiversity according to the IPBES?', 'sources': ['IPBES']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Est-ce que l'IA a un impact sur l'environnement ?\n", "{'user_input': \"Est-ce que l'IA a un impact sur l'environnement ?\", 'intent': 'ai_impact', 'language': 'French', 'query': 'Does AI have an impact on the environment?', 'questions': [{'question': 'What is the impact of AI on the environment?', 'sources': ['IPCC', 'OpenAlex']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Que dit le GIEC sur l'impact de l'IA\n", "{'user_input': \"Que dit le GIEC sur l'impact de l'IA\", 'intent': 'search', 'language': 'French', 'query': 'What does the IPCC say about the impact of AI', 'questions': [{'question': \"What is the IPCC's stance on artificial intelligence and its impact on climate change?\", 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Franchement je sais pas trop de quoi on parle là, qui sont les membres du GIEC en fait ? Et quelles sont leurs dernières publications ?\n", "{'user_input': 'Franchement je sais pas trop de quoi on parle là, qui sont les membres du GIEC en fait ? Et quelles sont leurs dernières publications ?', 'language': 'French', 'intent': 'search', 'query': \"Honestly, I'm not sure what we're talking about here, who are the members of the IPCC actually? And what are their latest publications?\", 'questions': [{'question': 'Who are the members of the IPCC?', 'sources': ['IPCC']}, {'question': 'What are the latest publications of the IPCC?', 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Ok that's nice, but I don't really understand. What is the impact of El Nino ?\n", "{'user_input': \"Ok that's nice, but I don't really understand. What is the impact of El Nino ?\", 'intent': 'ai_impact', 'language': 'English', 'query': \"Ok that's nice, but I don't really understand. What is the impact of El Nino ?\", 'questions': [{'question': 'What is El Nino?', 'sources': ['IPCC']}, {'question': 'What are the impacts of El Nino?', 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\n", "{'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'intent': 'search', 'language': 'English', 'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'questions': [{'question': \"What role do cloud formations play in modulating the Earth's radiative balance?\", 'sources': ['IPCC']}, {'question': 'How are cloud formations represented in current climate models?', 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Which industries have the highest GHG emissions?\n", "{'user_input': 'Which industries have the highest GHG emissions?', 'intent': 'search', 'language': 'English', 'query': 'Which industries have the highest GHG emissions?', 'questions': [{'question': 'What are the industries with the highest greenhouse gas emissions?', 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "What are invasive alien species and how do they threaten biodiversity and ecosystems?\n", "{'user_input': 'What are invasive alien species and how do they threaten biodiversity and ecosystems?', 'intent': 'search', 'language': 'English', 'query': 'What are invasive alien species and how do they threaten biodiversity and ecosystems?', 'questions': [{'question': 'Definition of invasive alien species', 'sources': ['IPBES']}, {'question': 'How do invasive alien species threaten biodiversity and ecosystems?', 'sources': ['IPBES']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Are human activities causing global warming?\n", "{'user_input': 'Are human activities causing global warming?', 'intent': 'search', 'language': 'English', 'query': 'Are human activities causing global warming?', 'questions': [{'question': 'What are the main causes of global warming?', 'sources': ['IPCC']}, {'question': 'How do human activities contribute to global warming?', 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "What is the motivation behind mining the deep seabed?\n", "{'user_input': 'What is the motivation behind mining the deep seabed?', 'intent': 'search', 'language': 'English', 'query': 'What is the motivation behind mining the deep seabed?', 'questions': [{'question': 'What are the reasons for mining the deep seabed?', 'sources': ['IPOS']}, {'question': 'What are the benefits of mining the deep seabed?', 'sources': ['IPOS']}, {'question': 'What are the environmental impacts of mining the deep seabed?', 'sources': ['IPOS']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Tu peux m'écrire un poème sur le changement climatique ?\n", "{'user_input': \"Tu peux m'écrire un poème sur le changement climatique ?\", 'language': 'French', 'intent': 'search', 'query': 'Can you write me a poem about climate change?', 'questions': [{'question': 'What are the key themes and impacts of climate change?', 'sources': ['IPCC']}, {'question': 'How does climate change affect the environment and ecosystems?', 'sources': ['IPCC', 'IPBES']}, {'question': 'What are some common metaphors or symbols used to describe climate change in literature?', 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Tu peux m'écrire un poème sur les bonbons ?\n", "{'user_input': \"Tu peux m'écrire un poème sur les bonbons ?\", 'language': 'French', 'intent': 'search', 'query': 'Can you write me a poem about candies?', 'questions': [{'question': 'What are the key elements of a poem about candies?', 'sources': ['OpenAlex']}, {'question': 'What are some common themes in poems about candies?', 'sources': ['OpenAlex']}, {'question': 'How can I structure a poem about candies?', 'sources': ['OpenAlex']}]}\n", "----------------------------------------------------------------------------------------------------\n", "What will be the temperature in 2100 in Strasbourg?\n", "{'user_input': 'What will be the temperature in 2100 in Strasbourg?', 'intent': 'geo_info', 'language': 'English', 'query': 'What will be the temperature in 2100 in Strasbourg?', 'questions': [{'question': 'What are the projected temperature changes for the year 2100 according to IPCC reports?', 'sources': ['IPCC']}, {'question': 'How does climate change affect temperature projections for the future?', 'sources': ['IPCC']}]}\n", "----------------------------------------------------------------------------------------------------\n", "C'est quoi le lien entre biodiversity and changement climatique ?\n", "{'user_input': \"C'est quoi le lien entre biodiversity and changement climatique ?\", 'intent': 'search', 'language': 'French', 'query': 'What is the link between biodiversity and climate change?', 'questions': [{'question': 'What is biodiversity?', 'sources': ['IPBES']}, {'question': 'How does climate change affect biodiversity?', 'sources': ['IPCC', 'IPBES']}, {'question': 'How does biodiversity affect climate change?', 'sources': ['IPCC', 'IPBES']}]}\n", "----------------------------------------------------------------------------------------------------\n", "Can you tell me more about ESRS2 ?\n", "{'user_input': 'Can you tell me more about ESRS2 ?', 'intent': 'esg', 'language': 'English', 'query': 'Can you tell me more about ESRS2 ?', 'questions': [{'question': 'What is ESRS2?', 'sources': ['OpenAlex']}, {'question': 'What are the key features of ESRS2?', 'sources': ['IPCC']}, {'question': 'How is ESRS2 related to climate change, energy, biodiversity, and nature?', 'sources': ['IPCC', 'IPBES']}]}\n", "----------------------------------------------------------------------------------------------------\n" ] } ], "source": [ "for question in questions:\n", " print(question)\n", " output = transform_query(question)\n", " print(output)\n", " print(\"-\"*100)" ] }, { "cell_type": "code", "execution_count": 54, "id": "7a0d82ad-44e7-40a7-a594-48823429d70e", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'query': 'Industries with highest GHG emissions',\n", " 'sources': ['IPCC'],\n", " 'topics': ['Climate change', 'Decarbonization'],\n", " 'date': '',\n", " 'location': {'country': '', 'location': ''}}" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "rewriter_chain.invoke({\"input\":question})" ] }, { "cell_type": "markdown", "id": "05aeeb92-9408-42b8-9f99-1e907c6a0798", "metadata": {}, "source": [ "# Langgraph\n", "Inspired from https://colab.research.google.com/drive/1WemHvycYcoNTDr33w7p2HL3FF72Nj88i?usp=sharing#scrollTo=YJ77ZCzkiGTL" ] }, { "cell_type": "markdown", "id": "8664f5f1-0db8-4c3d-8229-e1719224cde5", "metadata": {}, "source": [ "## Graph" ] }, { "cell_type": "code", "execution_count": 55, "id": "2376e1d7-5893-4022-a0af-155bb8c1950f", "metadata": {}, "outputs": [], "source": [ "from climateqa.engine.graph import make_graph_agent,display_graph\n", "agent = make_graph_agent(llm,vectorstore,reranker)" ] }, { "cell_type": "code", "execution_count": 56, "id": "a1f78d00-e4a0-40f3-a1e9-61dea83fa6cb", "metadata": {}, "outputs": [ { "data": { "image/jpeg": "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BERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQFzv8Ayfv+ibhf/KXD/wAfULohc7/yfv8Aom4X/wApcP8Ax9Qg6IREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERARabI8roMYij8ZdJNUzb7Cjp28802tb5W+wbG3HTRsbI2FE5s9ySpcTS2e30cezoVdW6STXqJDGaH3Bx+9axjtMazwj750bUw5MnGsLFRVr5Z5d+rWT+KZPLPLv1ayfxTK26juj3a+UzdFlIq18s8u/VrJ/FMnlnl36tZP4pk3Ud0e55TN0WUirXyzy79Wsn8UyeWeXfq1k/imTdR3R7nlM3RzJ/KgcDXZRhVs4k2yDnr7ABRXENG3Po3v8x3/RyPPQeqVxPornH+Tp4HP4n8bYMlroXGxYkWXBz+4PrN7p2b+xzTJ/0YB9JfRnIbpf8qsNxst0t1iq7bcKeSlqYHmbUkb2lrmn7wSoJ4P3Di4eDrgIxewstdXG+pkq6itqjIJZ5HaALuUADTWsaAP7O+8lN1HdHueUzdHSqKtfLPLv1ayfxTJ5Z5d+rWT+KZN1HdHueUzdFlIq18s8u/VrJ/FMnlnl36tZP4pk3Ud0e55TN0WUirXyzy79Wsn8UyeWeXfq1k/imTdR3R7nlM3RZSKt2ZvlUR2+32eoH9htRLET+/kd/sW/x/P6W7VcdDW08tnuUnSOCpcCyc62RFIOjjoE8vR2gTy6G1E4p01rMT+E/pzUvgyUjW0JSiIsXnEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQFrsivcOOWSsuU7S9lPGXCNp06R3c1g363OIA+0rYqE8WHuFmtUX+9S3WmEm+7TSXt/67Wfv0tcVYteInkvSu3aK9UdooZ3yS1te8T3Oq06eXew3vIjZ7I2bIaPvJ25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miAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICrrgrdvpagyp3kD9X/YZFWwdh2HZfSfKW/wA/12UfN22982nb5fScrFUL4YWvNrVR5A3OLxRXiomvVVPa30TA0QW5xb2EL9Rs29o5tnzu/wBJyCaIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiDnn+T+/0RsE++4f8AmFSuhlzz/J/f6I2CffcP/MKldDICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiCtshtVDPx2xK4SZo+318Fsq44sUEum3Bp1zTlvMN9n7eU9/eFZKq7Jbri8PhCYZQVmPVVVlk1qrZKC9s32NLCNdrG7ztbd015p+8K0UBERAREQEREBERAREQEREBERAREQEREBERAREQFVPg92vCbVbM1bg94rbxTzZXcJ7o+tYWmC4uLO3hZuNm2NPLo+d3+k5Wsq64K3b6WoMqd5A/V/2GRVsHYdh2X0nylv8AP9dlHzdtvfNp2+X0nILFREQEREBERAREQEREBERAREQEREBERAREQEREHPP8n9/ojYJ99w/8wqV0Muef5P7/AERsE++4f+YVK6GQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREELu9VmzOKmPwW+jopMEfRVDrpVSEeMR1I12IYOYHlPXfmn7wpoq2yG1UM/HbErhJmj7fXwWyrjixQS6bcGnXNOW8w32ft5T394VkoCIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgKF8MLXm1qo8gbnF4orxUTXqqntb6JgaILc4t7CF+o2be0c2z53f6TlNFVPg92vCbVbM1bg94rbxTzZXcJ7o+tYWmC4uLO3hZuNm2NPLo+d3+k5BayIiAiIgIiICIiAiIgIiICLSZJl9BjLY2T9rU1kwJhoaVvPNKB3kDYDW9w5nENGxs9QopJnmS1JLoLPbqKProVNW+WT7NhrAB9wcfvWsYrTGs6RH3zo2phyZONYWMirXyzy79Wsn8UyeWeXfq1k/imVt1HdHu18pm6LKRVr5Z5d+rWT+KZPLPLv1ayfxTJuo7o9zymbospFWvlnl36tZP4pk8s8u/VrJ/FMm6juj3PKZuiylwx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5DZMIx61Pb3SUtshY/7y4N2T95U0RB+AAAADQHqC/URAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAVf8eeEsXHPhTesInuclogujqftKyKISuY2KojmIDSQNuEfLvfTm3o60bARBzXw3/k9+DXD10M89imyuvj0e3v83bsJ9f6FobGR9jmlTmG10dlzC/0NupIKCigZSsipqaJsccbey7mtaAAPsCttVbW//aBkv3Uv/dKmb/b5fwj/AOquV/FP9pb8vnDKRRXJbrmdHchHYcbs91oeQHxiuvclJJz9djkbSyDXd15vX3Banyg4m/sTjf8A/lE3/wDBXzmzMviIxzMa8PeP3RzjnxDyOx5NimJYvDXivvTKqqnqrXT009VHDAGbbEypkZFtzpBsuJ0GnTSTsRKqzjipQWbHbfcpKiwVtwy+C0U90uVDSOqKqhkpZnkyQwySRtkbIzoWuAPI0kaLmmx71w8q+KdFb6rKqQ4lkFoqny2y441d3TT04cwNeRI+Bg08ba5jmOaQB+7O+qKhnt2O0tde73dZbJd23qGsr6pss004ZI0NkPJrs9Su81gbrQ1r17RasRETD2VyY6VisxGsc+GvX19lXXXixmGGDMcVddYr7fqa+2mzWi819LHHyfSDGFr52RBrHdmS8jQHN5oK2eB2O92DwmblT33JZcpqjh1O9lZNRxUzmt8dlHJyxANI2HEHW9HR3ram+Q8DscymXL5Lg+tkdkz6SWoMcwjdTS0zQ2GSBzWhzHAgO2Seo9mwtbbuE9dgN6qMos1wuea5LNQx2tzcnuzYY/F2yGTYfHTO04E9wbo769dkztVmJiPrkne45rMV4TMdI56R6+nHVaiKADIOJnXeE439n/0om/8A4KzrHec8qbrTxXfFbHb7c4ntqmkv8tRIwaOuWM0jA7roekO/fq0sNmXjnHMceHvH7t9dI2y3fG2PaHsddIw5rhsEcj+hWq4meBZwg4p9rLccRprXcJNn6Qsn8zl5j3uIZ5j3H2va5be4f56xn/2rF/2Hq2V9B4f/AG1Pz+b7L+Ef7X85Vd4O3g/WXwbsHq8YsVxr7nS1VwluL5riWF4e9kbOUcjWjQbEzv3s8x6AgC0URbOyIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICqu/wAdwt+cXuobZrjWU9S2nMc1LDztPLHoje/arURW/lmtqXjWJ/eJ/Rhmw08RScd+Uql+k679nL38J+afSdd+zl7+E/NW0i8/lvDdk+7mfZHhfv8Af/CpfpOu/Zy9/Cfmn0nXfs5e/hPzVtInlvDdk+59keF+/wB/8Kl+k679nL38J+afSdd+zl7+E/NW0ieW8N2T7n2R4X7/AH/wqX6Trv2cvfwn5p9J137OXv4T81bSJ5bw3ZPufZHhfv8Af/Coom3G636wNbYrpTsguDJpJain5GMYGuBJO/tCt1EW/wDLWsUpGkQ6WDBTw1N3j5CIih6BERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQf/2Q==", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "display_graph(agent)" ] }, { "cell_type": "code", "execution_count": 57, "id": "3a07607b-eb02-467f-a255-0c6bcdc6f62c", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "... Analyzing user message\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'intent': 'search', 'language': 'English', 'query': 'What evidence do we have of climate change?'}\n", "... Thinking step by step to answer the question\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'questions': [{'question': 'What are the key indicators of climate change?', 'sources': ['IPCC']}, {'question': 'How do scientists gather evidence of climate change?', 'sources': ['IPCC']}, {'question': 'What data supports the existence of climate change?', 'sources': ['IPCC']}]}\n", "... Searching in the knowledge base\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "The evidence of climate change is supported by a broad range of indicators across various domains, as highlighted in the IPCC and IPBES reports:\n", "\n", "- Surface air temperature and precipitation are key indicators of climate change [Doc 3, Doc 5].\n", "- Monitoring surface temperatures is integral to understanding climate change [Doc 3].\n", "- Upper-air temperatures are crucial indicators of different causal mechanisms underlying climate change [Doc 3].\n", "- Large-scale changes in the global hydrological cycle are monitored through indicators like ocean and land precipitation-evaporation, global precipitation, total column water vapor, surface humidity, and global river runoff [Doc 3].\n", "- A warming world may lead to changes in large-scale circulation patterns such as the Hadley circulation, monsoon systems, and the position and strength of the sub-tropical and polar jets [Doc 3].\n", "- The evidence for climate change is not solely based on increasing surface temperatures but on a variety of indicators across the atmosphere, ocean, cryosphere, and biosphere [Doc 6, Doc 11].\n", "- Scientists use multiple lines of evidence, including paleorecords, contemporary observations, manipulation experiments, and models, to attribute changes in marine ecosystems to climate change [Doc 8, Doc 10].\n", "- Geological and biological materials like corals, trees, glacier ice, and fossil pollen preserve evidence of past climate changes, aiding in understanding climate change over time [Doc 9].\n", "- Multiple data sources, methodologies, and approaches are used to construct climate information, including theoretical understanding, observed data, simulations, and experiments [Doc 7, Doc 13].\n", "- To generate robust information on regional climate change, consistency among data sources is crucial, and observational uncertainty should be considered [Doc 14].\n", "- The evidence base for climate change includes observed changes, model projections, and process-oriented attribution of changes to human interventions [Doc 15].\n", "\n", "Overall, the evidence for climate change is derived from a comprehensive analysis of various indicators and data sources across different domains, providing a coherent picture of a warming world." ] } ], "source": [ "verbose = False\n", "question = \"What evidence do we have of climate change?\"\n", "\n", "steps_display = {\n", " \"categorize_intent\":(\"... Analyzing user message\",True),\n", " \"transform_query\":(\"... Thinking step by step to answer the question\",True),\n", " \"retrieve_documents\":(\"... Searching in the knowledge base\",False),\n", "}\n", "\n", "def display_steps(event):\n", "\n", " for event_name,(event_description,display_output) in steps_display.items():\n", " if event[\"name\"] == event_name:\n", " if event[\"event\"] == \"on_chain_start\":\n", " print(event_description)\n", " elif event[\"event\"] == \"on_chain_end\":\n", " if display_output:\n", " print(event[\"data\"][\"output\"])\n", "\n", "async for event in agent.astream_events({\"user_input\":question,\"sources_input\":[\"auto\"],\"audience\":\"experts\"},version = \"v1\"):\n", "\n", " if verbose:\n", " print(event)\n", " print(\"-\"*50)\n", " else:\n", " \n", " if event[\"event\"] == \"on_chat_model_stream\":\n", " print(event[\"data\"][\"chunk\"].content,end = \"\")\n", "\n", " if event[\"name\"] == \"retrieve_documents\" and event[\"event\"] == \"on_chain_end\":\n", " docs = event[\"data\"][\"output\"][\"documents\"]\n", " \n", " display_steps(event)" ] }, { "cell_type": "code", "execution_count": 50, "id": "a09f58e5-368b-486b-a458-7cfe56445c08", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[Document(page_content='Summary: The image is a graphical representation of human-environment interactions from 1970 to 2020, depicting the substantial increase in global economic growth and its varied environmental impacts across different categories of countries (developed, developing, and least developed countries). This graph shows key indicators such as Gross Domestic Product (GDP), Domestic Material Consumption, Extraction of Living Biomass, Protection of Key Biodiversity Areas (KBAs), Air Pollution, and Fertilizer Use, indicating disparities in economic growth, resource consumption, environmental conservation, and pollution among these groups of countries.', metadata={'chunk_type': 'image', 'document_id': 'document24', 'document_number': 24.0, 'element_id': 'Picture_0_32', 'figure_code': 'N/A', 'file_size': 230.771484375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document24/images/Picture_0_32.png', 'n_pages': 60.0, 'name': 'Summary for Policymakers. Global assessment report on biodiversity and ecosystem services of the IPBES (Version 1)', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 33, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPBES GAR SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3553579/files/ipbes_global_assessment_report_summary_for_policymakers.pdf', 'similarity_score': 0.658392608, 'content': 'Summary: The image is a graphical representation of human-environment interactions from 1970 to 2020, depicting the substantial increase in global economic growth and its varied environmental impacts across different categories of countries (developed, developing, and least developed countries). This graph shows key indicators such as Gross Domestic Product (GDP), Domestic Material Consumption, Extraction of Living Biomass, Protection of Key Biodiversity Areas (KBAs), Air Pollution, and Fertilizer Use, indicating disparities in economic growth, resource consumption, environmental conservation, and pollution among these groups of countries.', 'reranking_score': 0.9946669340133667, 'query_used_for_retrieval': 'What are the key indicators of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='This image is a representation of the four-box model used to communicate the level of scientific confidence in relation to climate change and biodiversity findings. It visually summarizes how confidence is categorized based on the strength of evidence and the degree of consensus among experts. The model categorizes findings into four different types of confidence levels: Inconclusive, Established but Incomplete, Unresolved, and Well Established, each corresponding to different intersections of evidence and agreement. The shading gradient indicates that higher confidence is represented towards the top right corner, which combines a high level of agreement with robust quantity and quality of evidence. This framework is instrumental in communicating scientific assessments from organizations such as IPBES.', metadata={'chunk_type': 'image', 'document_id': 'document34', 'document_number': 34.0, 'element_id': 'Picture_0_47', 'figure_code': 'Figure \\r\\nSPM.A1', 'file_size': 79.890625, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document34/images/Picture_0_47.png', 'n_pages': 52.0, 'name': 'Summary for Policymakers. Regional Assessment Report on Biodiversity and Ecosystem Services for Europe and Central Asia', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 48, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPBES RAR ECA SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3237468/files/ipbes_assessment_spm_eca_EN.pdf', 'similarity_score': 0.659100771, 'content': 'This image is a representation of the four-box model used to communicate the level of scientific confidence in relation to climate change and biodiversity findings. It visually summarizes how confidence is categorized based on the strength of evidence and the degree of consensus among experts. The model categorizes findings into four different types of confidence levels: Inconclusive, Established but Incomplete, Unresolved, and Well Established, each corresponding to different intersections of evidence and agreement. The shading gradient indicates that higher confidence is represented towards the top right corner, which combines a high level of agreement with robust quantity and quality of evidence. This framework is instrumental in communicating scientific assessments from organizations such as IPBES.', 'reranking_score': 0.9927500486373901, 'query_used_for_retrieval': 'How do scientists gather evidence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='by interactions of climate change with other environmental, \\r\\nsociocultural, political and economic drivers and associated \\r\\nunderlying causes. Developing effective responses is also \\r\\nchallenged by incomplete knowledge of climate change \\r\\npatterns and by many gaps in understanding of how climate \\r\\nchange affects sustainability of uses (established but \\r\\nincomplete) {4.2.1.2}.', metadata={'chunk_type': 'text', 'document_id': 'document26', 'document_number': 26.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 44.0, 'name': 'Summary for Policymakers. Summary for policymakers of the thematic assessment of the sustainable use of wild species of the IPBES', 'num_characters': 379.0, 'num_tokens': 75.0, 'num_tokens_approx': 81.0, 'num_words': 61.0, 'page_number': 23, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'B2 The sustainability of the use of wild species \\r\\nis influenced negatively or positively by \\r\\nmultiple drivers.', 'short_name': 'IPBES TAM SW SPM', 'source': 'IPBES', 'toc_level0': 'Table of Contents', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/7411847/files/EN_SPM_SUSTAINABLE%20USE%20OF%20WILD%20SPECIES.pdf', 'similarity_score': 0.624824047, 'content': 'by interactions of climate change with other environmental, \\r\\nsociocultural, political and economic drivers and associated \\r\\nunderlying causes. Developing effective responses is also \\r\\nchallenged by incomplete knowledge of climate change \\r\\npatterns and by many gaps in understanding of how climate \\r\\nchange affects sustainability of uses (established but \\r\\nincomplete) {4.2.1.2}.', 'reranking_score': 0.9903822541236877, 'query_used_for_retrieval': 'What data supports the existence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='Summary: This figure visually represents a comparison of different pathways towards sustainable development, categorized by scenarios such as Green Economy, Low Carbon, and Ecotopian approaches. Each pathway is assessed for its effectiveness in addressing a range of sustainability goals, indicated by varying shades of green. Darker shades correlate with a greater number of goals addressed. The diagram serves as a tool for understanding the spectrum and relative impact of sustainability strategies within scenario archetypes outlined by the IPCC and IPBES reports on climate change and biodiversity. The pathways range from resource sparing to local multifunctionality, highlighting diverse strategies to combat climate change and protect biodiversity.', metadata={'chunk_type': 'image', 'document_id': 'document34', 'document_number': 34.0, 'element_id': 'Picture_0_35', 'figure_code': 'N/A', 'file_size': 66.1787109375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document34/images/Picture_0_35.png', 'n_pages': 52.0, 'name': 'Summary for Policymakers. Regional Assessment Report on Biodiversity and Ecosystem Services for Europe and Central Asia', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 36, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPBES RAR ECA SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3237468/files/ipbes_assessment_spm_eca_EN.pdf', 'similarity_score': 0.657539964, 'content': 'Summary: This figure visually represents a comparison of different pathways towards sustainable development, categorized by scenarios such as Green Economy, Low Carbon, and Ecotopian approaches. Each pathway is assessed for its effectiveness in addressing a range of sustainability goals, indicated by varying shades of green. Darker shades correlate with a greater number of goals addressed. The diagram serves as a tool for understanding the spectrum and relative impact of sustainability strategies within scenario archetypes outlined by the IPCC and IPBES reports on climate change and biodiversity. The pathways range from resource sparing to local multifunctionality, highlighting diverse strategies to combat climate change and protect biodiversity.', 'reranking_score': 0.9874748587608337, 'query_used_for_retrieval': 'What are the key indicators of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='Summary:\\nThe image illustrates the four-box model for qualitative communication of confidence from scientific reports. It showcases a matrix with two axes: \"Level of Agreement\" on the vertical axis, ranging from low to high, and the horizontal axis representing the \"Quantity and Quality of Evidence,\" ranging from robust to low. The four quadrants formed are labeled as \"Established but incomplete,\" \"Well established,\" \"Inconclusive,\" and \"Unresolved,\" indicating various degrees of scientific confidence based on the agreement among experts and the evidence\\'s quality. Additionally, a separate \"Certainty Scale\" bar on the right side of the diagram indicates a continuum from low to high certainty. This model is used for assessing and communicating the confidence in scientific findings related to climate change and biodiversity.', metadata={'chunk_type': 'image', 'document_id': 'document26', 'document_number': 26.0, 'element_id': 'Picture_0_38', 'figure_code': 'N/A', 'file_size': 56.0205078125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document26/images/Picture_0_38.png', 'n_pages': 44.0, 'name': 'Summary for Policymakers. Summary for policymakers of the thematic assessment of the sustainable use of wild species of the IPBES', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 39, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPBES TAM SW SPM', 'source': 'IPBES', 'toc_level0': 'Table of Contents', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/7411847/files/EN_SPM_SUSTAINABLE%20USE%20OF%20WILD%20SPECIES.pdf', 'similarity_score': 0.636326432, 'content': 'Summary:\\nThe image illustrates the four-box model for qualitative communication of confidence from scientific reports. It showcases a matrix with two axes: \"Level of Agreement\" on the vertical axis, ranging from low to high, and the horizontal axis representing the \"Quantity and Quality of Evidence,\" ranging from robust to low. The four quadrants formed are labeled as \"Established but incomplete,\" \"Well established,\" \"Inconclusive,\" and \"Unresolved,\" indicating various degrees of scientific confidence based on the agreement among experts and the evidence\\'s quality. Additionally, a separate \"Certainty Scale\" bar on the right side of the diagram indicates a continuum from low to high certainty. This model is used for assessing and communicating the confidence in scientific findings related to climate change and biodiversity.', 'reranking_score': 0.9869220852851868, 'query_used_for_retrieval': 'How do scientists gather evidence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='by interactions of climate change with other environmental, \\r\\nsociocultural, political and economic drivers and associated \\r\\nunderlying causes. Developing effective responses is also \\r\\nchallenged by incomplete knowledge of climate change \\r\\npatterns and by many gaps in understanding of how climate \\r\\nchange affects sustainability of uses (established but \\r\\nincomplete) {4.2.1.2}.', metadata={'chunk_type': 'text', 'document_id': 'document26', 'document_number': 26.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 44.0, 'name': 'Summary for Policymakers. Summary for policymakers of the thematic assessment of the sustainable use of wild species of the IPBES', 'num_characters': 379.0, 'num_tokens': 75.0, 'num_tokens_approx': 81.0, 'num_words': 61.0, 'page_number': 23, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'B2 The sustainability of the use of wild species \\r\\nis influenced negatively or positively by \\r\\nmultiple drivers.', 'short_name': 'IPBES TAM SW SPM', 'source': 'IPBES', 'toc_level0': 'Table of Contents', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/7411847/files/EN_SPM_SUSTAINABLE%20USE%20OF%20WILD%20SPECIES.pdf', 'similarity_score': 0.653102875, 'content': 'by interactions of climate change with other environmental, \\r\\nsociocultural, political and economic drivers and associated \\r\\nunderlying causes. Developing effective responses is also \\r\\nchallenged by incomplete knowledge of climate change \\r\\npatterns and by many gaps in understanding of how climate \\r\\nchange affects sustainability of uses (established but \\r\\nincomplete) {4.2.1.2}.', 'reranking_score': 0.9700126051902771, 'query_used_for_retrieval': 'What are the key indicators of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='The Assessment is critical today because evidence has \\r\\naccumulated that the multiple threats to biodiversity have \\r\\nintensified since previous reports, and that the sustainable use \\r\\nof nature will be vital for adapting to and mitigating dangerous \\r\\nanthropogenic interference with the climate system, as well as \\r\\nfor achieving many of our most important development goals.\\nThe findings of this Assessment focus on the global scale, \\r\\nspanning the period from the 1970s to 2050. They are based \\r\\non an unprecedented collection of evidence, integrating \\r\\nnatural and social science perspectives, a range of knowledge \\r\\nsystems and multiple dimensions of value. This is the first \\r\\nglobal-level assessment to systematically consider evidence \\r\\nabout the contributions of indigenous and local knowledge \\r\\nand practices, and issues concerning Indigenous Peoples and \\r\\nLocal Communities. All these features result in a more holistic \\r\\nassessment of indirect drivers as root causes of changes \\r\\nin nature and the associated risks to the quality of life of \\r\\nall people.', metadata={'chunk_type': 'text', 'document_id': 'document24', 'document_number': 24.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 60.0, 'name': 'Summary for Policymakers. Global assessment report on biodiversity and ecosystem services of the IPBES (Version 1)', 'num_characters': 1065.0, 'num_tokens': 196.0, 'num_tokens_approx': 225.0, 'num_words': 169.0, 'page_number': 5, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'FOREWORDFOREWORD\\n\\x0c', 'short_name': 'IPBES GAR SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3553579/files/ipbes_global_assessment_report_summary_for_policymakers.pdf', 'similarity_score': 0.651207328, 'content': 'The Assessment is critical today because evidence has \\r\\naccumulated that the multiple threats to biodiversity have \\r\\nintensified since previous reports, and that the sustainable use \\r\\nof nature will be vital for adapting to and mitigating dangerous \\r\\nanthropogenic interference with the climate system, as well as \\r\\nfor achieving many of our most important development goals.\\nThe findings of this Assessment focus on the global scale, \\r\\nspanning the period from the 1970s to 2050. They are based \\r\\non an unprecedented collection of evidence, integrating \\r\\nnatural and social science perspectives, a range of knowledge \\r\\nsystems and multiple dimensions of value. This is the first \\r\\nglobal-level assessment to systematically consider evidence \\r\\nabout the contributions of indigenous and local knowledge \\r\\nand practices, and issues concerning Indigenous Peoples and \\r\\nLocal Communities. All these features result in a more holistic \\r\\nassessment of indirect drivers as root causes of changes \\r\\nin nature and the associated risks to the quality of life of \\r\\nall people.', 'reranking_score': 0.9676424860954285, 'query_used_for_retrieval': 'What are the key indicators of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content=\"Summary: This visual summary presents an assessment of global environmental changes and their impact on nature's capacity to support human well-being between 1970 and the present, indicating overall declines in various ecosystem services across multiple categories. This decline is signalled by downward arrows in categories such as habitat creation, pollination, air and climate regulation, as well as freshwater regulation. The chart differentiates between consistent regional trends and variable outcomes, while also providing indicators for each service that demonstrate the observed changes.\", metadata={'chunk_type': 'image', 'document_id': 'document24', 'document_number': 24.0, 'element_id': 'Picture_0_24', 'figure_code': 'N/A', 'file_size': 620.9736328125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document24/images/Picture_0_24.png', 'n_pages': 60.0, 'name': 'Summary for Policymakers. Global assessment report on biodiversity and ecosystem services of the IPBES (Version 1)', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 25, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPBES GAR SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3553579/files/ipbes_global_assessment_report_summary_for_policymakers.pdf', 'similarity_score': 0.651050925, 'content': \"Summary: This visual summary presents an assessment of global environmental changes and their impact on nature's capacity to support human well-being between 1970 and the present, indicating overall declines in various ecosystem services across multiple categories. This decline is signalled by downward arrows in categories such as habitat creation, pollination, air and climate regulation, as well as freshwater regulation. The chart differentiates between consistent regional trends and variable outcomes, while also providing indicators for each service that demonstrate the observed changes.\", 'reranking_score': 0.9634665846824646, 'query_used_for_retrieval': 'What are the key indicators of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='by interactions of climate change with other environmental, \\r\\nsociocultural, political and economic drivers and associated \\r\\nunderlying causes. Developing effective responses is also \\r\\nchallenged by incomplete knowledge of climate change \\r\\npatterns and by many gaps in understanding of how climate \\r\\nchange affects sustainability of uses (established but \\r\\nincomplete) {4.2.1.2}.', metadata={'chunk_type': 'text', 'document_id': 'document26', 'document_number': 26.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 44.0, 'name': 'Summary for Policymakers. Summary for policymakers of the thematic assessment of the sustainable use of wild species of the IPBES', 'num_characters': 379.0, 'num_tokens': 75.0, 'num_tokens_approx': 81.0, 'num_words': 61.0, 'page_number': 23, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'B2 The sustainability of the use of wild species \\r\\nis influenced negatively or positively by \\r\\nmultiple drivers.', 'short_name': 'IPBES TAM SW SPM', 'source': 'IPBES', 'toc_level0': 'Table of Contents', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/7411847/files/EN_SPM_SUSTAINABLE%20USE%20OF%20WILD%20SPECIES.pdf', 'similarity_score': 0.623599827, 'content': 'by interactions of climate change with other environmental, \\r\\nsociocultural, political and economic drivers and associated \\r\\nunderlying causes. Developing effective responses is also \\r\\nchallenged by incomplete knowledge of climate change \\r\\npatterns and by many gaps in understanding of how climate \\r\\nchange affects sustainability of uses (established but \\r\\nincomplete) {4.2.1.2}.', 'reranking_score': 0.9539093375205994, 'query_used_for_retrieval': 'How do scientists gather evidence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content=\"Summary: The image is a four-box model that represents a framework used by the IPBES to communicate the confidence level of scientific findings related to biodiversity and climate change. It illustrates the relationship between the quantity and quality of evidence and the level of agreement among experts, with confidence increasing from the bottom left corner ('Inconclusive' with low evidence and agreement) to the top right corner ('Well established' with high evidence and agreement). The degree of shading in each box corresponds to the level of certainty, which is also represented by an adjacent certainty scale with 'High' at the top and 'Low' at the bottom. This model serves as a guideline for assessing the degree of confidence in key findings within environmental reports.\", metadata={'chunk_type': 'image', 'document_id': 'document32', 'document_number': 32.0, 'element_id': 'Picture_0_41', 'figure_code': 'Figure \\r\\nSPM.A1', 'file_size': 57.51171875, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document32/images/Picture_0_41.png', 'n_pages': 44.0, 'name': 'Summary for Policymakers. Regional Assessment Report on Biodiversity and Ecosystem Services for Asia and the Pacific', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 42, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPBES RAR AP SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3237383/files/ipbes_assessment_spm_ap_EN.pdf', 'similarity_score': 0.612060189, 'content': \"Summary: The image is a four-box model that represents a framework used by the IPBES to communicate the confidence level of scientific findings related to biodiversity and climate change. It illustrates the relationship between the quantity and quality of evidence and the level of agreement among experts, with confidence increasing from the bottom left corner ('Inconclusive' with low evidence and agreement) to the top right corner ('Well established' with high evidence and agreement). The degree of shading in each box corresponds to the level of certainty, which is also represented by an adjacent certainty scale with 'High' at the top and 'Low' at the bottom. This model serves as a guideline for assessing the degree of confidence in key findings within environmental reports.\", 'reranking_score': 0.9479717016220093, 'query_used_for_retrieval': 'How do scientists gather evidence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='instance, water, energy and shelter provision for the growing \\r\\npopulation at other scales {2.2.1.3, 8.4.2}. Effective means for \\r\\nenhancing such coordination and collaboration include the \\r\\nengagement of scientists with leaders in government, \\r\\nbusiness and civil society to develop the knowledge, tools \\r\\nand practices necessary to integrate social-ecological \\r\\ninteractions into decision-making {1.3.2.1, 2.3.2.2, 6.4.3, \\r\\n6.4.4, 8.2.3}, and cross-disciplinary and multi-actor \\r\\ncollaboration in research, restoration planning and \\r\\nimplementation {6.4.2.3, 6,4,3, 8.2.3}.', metadata={'chunk_type': 'text', 'document_id': 'document36', 'document_number': 36.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 48.0, 'name': 'Summary for Policymakers. Assessment Report on Land Degradation and Restoration', 'num_characters': 575.0, 'num_tokens': 163.0, 'num_tokens_approx': 190.0, 'num_words': 143.0, 'page_number': 37, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'Table SPM 1 Responses to address land degradation, their impacts and outcomes for \\r\\nbiodiversity and ecosystem services. ', 'short_name': 'IPBES AR LDR SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/records/3237411/files/ipbes_assessment_spm_ldra_EN.pdf?download=1', 'similarity_score': 0.605369747, 'content': 'instance, water, energy and shelter provision for the growing \\r\\npopulation at other scales {2.2.1.3, 8.4.2}. Effective means for \\r\\nenhancing such coordination and collaboration include the \\r\\nengagement of scientists with leaders in government, \\r\\nbusiness and civil society to develop the knowledge, tools \\r\\nand practices necessary to integrate social-ecological \\r\\ninteractions into decision-making {1.3.2.1, 2.3.2.2, 6.4.3, \\r\\n6.4.4, 8.2.3}, and cross-disciplinary and multi-actor \\r\\ncollaboration in research, restoration planning and \\r\\nimplementation {6.4.2.3, 6,4,3, 8.2.3}.', 'reranking_score': 0.9426116943359375, 'query_used_for_retrieval': 'How do scientists gather evidence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='20. United Nations Development Programme (2015). Human Development \\r\\nData (1990-2015) Retrieved from http://hdr.undp.org/en/data\\r\\n21. Van der Esch, S., ten Brink, B., Stehfest, E., Bakkenes, M., Sewell, \\r\\nA., Bouwman, A., Meijer, J., Westhoek, H., and van den Berg, M. \\r\\n(2017). Exploring future changes in land use and land condition and \\r\\nthe impacts on food, water, climate change and biodiversity: Scenarios \\r\\nfor the UNCCD Global Land Outlook. The Hague: PBL Netherlands \\r\\nEnvironmental Assessment Agency. Retrieved from http://www.pbl.nl/\\r\\nsites/default/files/cms/publicaties/pbl-2017-exploring-future-changes\\x02in-land-use-and-land-condition-2076.pdf', metadata={'chunk_type': 'text', 'document_id': 'document36', 'document_number': 36.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 48.0, 'name': 'Summary for Policymakers. Assessment Report on Land Degradation and Restoration', 'num_characters': 655.0, 'num_tokens': 184.0, 'num_tokens_approx': 214.0, 'num_words': 161.0, 'page_number': 28, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'Figure SPM 9 Land degradation affects countries of all income levels and at all levels of human \\r\\ndevelopment. ', 'short_name': 'IPBES AR LDR SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/records/3237411/files/ipbes_assessment_spm_ldra_EN.pdf?download=1', 'similarity_score': 0.622500896, 'content': '20. United Nations Development Programme (2015). Human Development \\r\\nData (1990-2015) Retrieved from http://hdr.undp.org/en/data\\r\\n21. Van der Esch, S., ten Brink, B., Stehfest, E., Bakkenes, M., Sewell, \\r\\nA., Bouwman, A., Meijer, J., Westhoek, H., and van den Berg, M. \\r\\n(2017). Exploring future changes in land use and land condition and \\r\\nthe impacts on food, water, climate change and biodiversity: Scenarios \\r\\nfor the UNCCD Global Land Outlook. The Hague: PBL Netherlands \\r\\nEnvironmental Assessment Agency. Retrieved from http://www.pbl.nl/\\r\\nsites/default/files/cms/publicaties/pbl-2017-exploring-future-changes\\x02in-land-use-and-land-condition-2076.pdf', 'reranking_score': 0.8312966823577881, 'query_used_for_retrieval': 'What data supports the existence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='This image is a representation of the four-box model used to communicate the level of scientific confidence in relation to climate change and biodiversity findings. It visually summarizes how confidence is categorized based on the strength of evidence and the degree of consensus among experts. The model categorizes findings into four different types of confidence levels: Inconclusive, Established but Incomplete, Unresolved, and Well Established, each corresponding to different intersections of evidence and agreement. The shading gradient indicates that higher confidence is represented towards the top right corner, which combines a high level of agreement with robust quantity and quality of evidence. This framework is instrumental in communicating scientific assessments from organizations such as IPBES.', metadata={'chunk_type': 'image', 'document_id': 'document34', 'document_number': 34.0, 'element_id': 'Picture_0_47', 'figure_code': 'Figure \\r\\nSPM.A1', 'file_size': 79.890625, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document34/images/Picture_0_47.png', 'n_pages': 52.0, 'name': 'Summary for Policymakers. Regional Assessment Report on Biodiversity and Ecosystem Services for Europe and Central Asia', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 48, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPBES RAR ECA SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3237468/files/ipbes_assessment_spm_eca_EN.pdf', 'similarity_score': 0.621113539, 'content': 'This image is a representation of the four-box model used to communicate the level of scientific confidence in relation to climate change and biodiversity findings. It visually summarizes how confidence is categorized based on the strength of evidence and the degree of consensus among experts. The model categorizes findings into four different types of confidence levels: Inconclusive, Established but Incomplete, Unresolved, and Well Established, each corresponding to different intersections of evidence and agreement. The shading gradient indicates that higher confidence is represented towards the top right corner, which combines a high level of agreement with robust quantity and quality of evidence. This framework is instrumental in communicating scientific assessments from organizations such as IPBES.', 'reranking_score': 0.6637013554573059, 'query_used_for_retrieval': 'What data supports the existence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='biodiversity (well established) {4.2.2.2, 4.2.2.3.1}. Climate \\r\\nchange alone is projected to decrease ocean net primary \\r\\nproduction by between 3 and 10 per cent, and fish biomass \\r\\nby between 3 and 25 per cent (in low and high warming \\r\\nscenarios, respectively) by the end of the century (established \\r\\nbut incomplete) {4.2.2.2.1}. Whether or not the current \\r\\nremoval of nearly 30 per cent of anthropogenic carbon \\r\\ndioxide emissions by terrestrial ecosystems continues into the \\r\\nfuture varies greatly from one scenario to the next and \\r\\ndepends heavily on how climate change, atmospheric carbon \\r\\ndioxide and land-use change interact. Important regulating \\r\\ncontributions of nature, such as coastal and soil protection, \\r\\ncrop pollination and carbon storage, are projected to decline\\r\\n(established but incomplete) {4.2.4, 4.3.2.1}. In contrast, \\r\\nsubstantial increases in food, feed, timber and bioenergy', metadata={'chunk_type': 'text', 'document_id': 'document24', 'document_number': 24.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 60.0, 'name': 'Summary for Policymakers. Global assessment report on biodiversity and ecosystem services of the IPBES (Version 1)', 'num_characters': 908.0, 'num_tokens': 223.0, 'num_tokens_approx': 253.0, 'num_words': 190.0, 'page_number': 39, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': \"Figure SPM 7 Summary of recent status and trends in aspects of nature and nature's \\r\\ncontributions to people that support progress towards achieving selected targets \\r\\nof the Sustainable Development Goals. \", 'short_name': 'IPBES GAR SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3553579/files/ipbes_global_assessment_report_summary_for_policymakers.pdf', 'similarity_score': 0.61879009, 'content': 'biodiversity (well established) {4.2.2.2, 4.2.2.3.1}. Climate \\r\\nchange alone is projected to decrease ocean net primary \\r\\nproduction by between 3 and 10 per cent, and fish biomass \\r\\nby between 3 and 25 per cent (in low and high warming \\r\\nscenarios, respectively) by the end of the century (established \\r\\nbut incomplete) {4.2.2.2.1}. Whether or not the current \\r\\nremoval of nearly 30 per cent of anthropogenic carbon \\r\\ndioxide emissions by terrestrial ecosystems continues into the \\r\\nfuture varies greatly from one scenario to the next and \\r\\ndepends heavily on how climate change, atmospheric carbon \\r\\ndioxide and land-use change interact. Important regulating \\r\\ncontributions of nature, such as coastal and soil protection, \\r\\ncrop pollination and carbon storage, are projected to decline\\r\\n(established but incomplete) {4.2.4, 4.3.2.1}. In contrast, \\r\\nsubstantial increases in food, feed, timber and bioenergy', 'reranking_score': 0.465409517288208, 'query_used_for_retrieval': 'What data supports the existence of climate change?', 'sources_used': ['IPBES']}),\n", " Document(page_content='13. Van der Esch, S., ten Brink, B., Stehfest, E., Bakkenes, M., Sewell, \\r\\nA., Bouwman, A., Meijer, J., Westhoek, H., and van den Berg, M. \\r\\n(2017). Exploring future changes in land use and land condition and \\r\\nthe impacts on food, water, climate change and biodiversity: Scenarios \\r\\nfor the UNCCD Global Land Outlook. The Hague: PBL Netherlands \\r\\nEnvironmental Assessment Agency. Retrieved from http://www.pbl.nl/\\r\\nsites/default/files/cms/publicaties/pbl-2017-exploring-future-changes\\x02in-land-use-and-land-condition-2076.pdf.', metadata={'chunk_type': 'text', 'document_id': 'document36', 'document_number': 36.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 48.0, 'name': 'Summary for Policymakers. Assessment Report on Land Degradation and Restoration', 'num_characters': 526.0, 'num_tokens': 152.0, 'num_tokens_approx': 176.0, 'num_words': 132.0, 'page_number': 25, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'Figure SPM 7 Human activity has changed the surface of the planet in profound and \\r\\nfar-reaching ways. ', 'short_name': 'IPBES AR LDR SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/records/3237411/files/ipbes_assessment_spm_ldra_EN.pdf?download=1', 'similarity_score': 0.616809428, 'content': '13. Van der Esch, S., ten Brink, B., Stehfest, E., Bakkenes, M., Sewell, \\r\\nA., Bouwman, A., Meijer, J., Westhoek, H., and van den Berg, M. \\r\\n(2017). Exploring future changes in land use and land condition and \\r\\nthe impacts on food, water, climate change and biodiversity: Scenarios \\r\\nfor the UNCCD Global Land Outlook. The Hague: PBL Netherlands \\r\\nEnvironmental Assessment Agency. Retrieved from http://www.pbl.nl/\\r\\nsites/default/files/cms/publicaties/pbl-2017-exploring-future-changes\\x02in-land-use-and-land-condition-2076.pdf.', 'reranking_score': 0.19112645089626312, 'query_used_for_retrieval': 'What data supports the existence of climate change?', 'sources_used': ['IPBES']})]" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "docs" ] }, { "cell_type": "code", "execution_count": 19, "id": "9b41f377-b3a9-41eb-acef-fb3ea131c374", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "L'impact environnemental de l'intelligence artificielle (IA) n'est pas couvert spécifiquement par les rapports du GIEC ou de l'IPBES. Cependant, il existe des recherches récentes sur ce sujet. Par exemple, vous pouvez consulter le travail de l'experte en IA et climat, Sasha Luccioni, qui a publié plusieurs articles sur l'empreinte carbone de l'IA, notamment sur le coût énergétique de l'inférence des modèles d'IA et sur l'estimation de l'empreinte carbone de l'entraînement de grands modèles de langage.\n", "\n", "De plus, il existe des outils tels que CodeCarbon et Ecologits qui peuvent vous aider à calculer l'empreinte carbone de vos modèles d'IA. Si vous souhaitez en savoir plus sur l'empreinte carbone de l'IA, je vous recommande de consulter ces ressources et outils. Vous pouvez également visiter cette page pour en apprendre davantage sur l'empreinte carbone de ClimateQ&A : [Lien vers la page sur l'empreinte carbone de ClimateQ&A](https://climateqa.com/docs/carbon-footprint/)\n" ] }, { "data": { "text/plain": [ "{'user_input': \"C'est quoi l'empreinte carbone de l'IA\",\n", " 'language': 'French',\n", " 'intent': 'ai_impact',\n", " 'query': \"C'est quoi l'empreinte carbone de l'IA\",\n", " 'answer': \"L'impact environnemental de l'intelligence artificielle (IA) n'est pas couvert spécifiquement par les rapports du GIEC ou de l'IPBES. Cependant, il existe des recherches récentes sur ce sujet. Par exemple, vous pouvez consulter le travail de l'experte en IA et climat, Sasha Luccioni, qui a publié plusieurs articles sur l'empreinte carbone de l'IA, notamment sur le coût énergétique de l'inférence des modèles d'IA et sur l'estimation de l'empreinte carbone de l'entraînement de grands modèles de langage.\\n\\nDe plus, il existe des outils tels que CodeCarbon et Ecologits qui peuvent vous aider à calculer l'empreinte carbone de vos modèles d'IA. Si vous souhaitez en savoir plus sur l'empreinte carbone de l'IA, je vous recommande de consulter ces ressources et outils. Vous pouvez également visiter cette page pour en apprendre davantage sur l'empreinte carbone de ClimateQ&A : [Lien vers la page sur l'empreinte carbone de ClimateQ&A](https://climateqa.com/docs/carbon-footprint/)\"}" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "output = await agent.ainvoke({\"user_input\":\"C'est quoi l'empreinte carbone de l'IA\"})\n", "output" ] }, { "cell_type": "markdown", "id": "8d89f36b-fc04-4d0c-b9c4-990b489b7fc3", "metadata": {}, "source": [ "## Test simple route chains" ] }, { "cell_type": "code", "execution_count": 36, "id": "1d884bb7-7230-47cb-a778-36cffed1fcde", "metadata": { "tags": [] }, "outputs": [], "source": [ "from climateqa.engine.chains.answer_chitchat import make_chitchat_chain\n", "from climateqa.engine.chains.answer_ai_impact import make_ai_impact_chain\n", "\n", "chitchat_chain = make_chitchat_chain(llm)\n", "ai_impact_chain = make_ai_impact_chain(llm)" ] }, { "cell_type": "code", "execution_count": 37, "id": "586a4ead-6064-42e8-9f3c-8973b8d754c6", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "L'impact environnemental de l'intelligence artificielle n'est pas couvert par les rapports du GIEC ou de l'IPBES. Cependant, il existe des recherches récentes sur ce sujet. Par exemple, vous pouvez consulter le travail de l'experte en IA et climat, Sasha Luccioni, qui a publié des articles sur l'empreinte carbone de l'IA, notamment sur le coût énergétique de l'inférence des modèles d'IA et sur l'estimation de l'empreinte carbone de l'entraînement de grands modèles de langage.\n", "\n", "Si vous souhaitez en savoir plus sur l'empreinte carbone de l'IA, je vous recommande de consulter les liens suivants :\n", "- \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" - https://arxiv.org/abs/2311.16863\n", "- \"Counting Carbon: A Survey of Factors Influencing the Emissions of Machine Learning\" - https://arxiv.org/abs/2302.08476\n", "- \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model\" - https://arxiv.org/abs/2211.02001\n", "\n", "De plus, il existe des outils tels que CodeCarbon (https://github.com/mlco2/codecarbon) pour mesurer l'empreinte carbone de votre code, et Ecologits (https://ecologits.ai/) pour mesurer l'empreinte carbone de l'utilisation des API de grands modèles de langage. Ces ressources pourraient vous aider à mieux comprendre l'impact environnemental de l'IA. Si vous souhaitez en savoir plus sur l'empreinte carbone de ClimateQ&A, vous pouvez consulter cette page : https://climateqa.com/docs/carbon-footprint/." ] } ], "source": [ "async for event in ai_impact_chain.astream_events({\"question\":\"Mais c'est quoi l'empreinte carbone de cet outil, ça doit consommer pas mal ...\"},version = \"v1\"):\n", " if event[\"event\"] == \"on_chain_stream\":\n", " print(event[\"data\"][\"chunk\"],end = \"\")" ] }, { "cell_type": "code", "execution_count": 38, "id": "6f3a1c52-f92a-442b-9442-22415087da8b", "metadata": { "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Je suis désolé, je ne peux répondre qu'aux questions liées à l'environnement et au climat. N'hésitez pas à poser une question sur ces sujets!" ] } ], "source": [ "async for event in chitchat_chain.astream_events({\"question\":\"Vas y blbablablala\"},version = \"v1\"):\n", " if event[\"event\"] == \"on_chain_stream\":\n", " print(event[\"data\"][\"chunk\"],end = \"\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "0e380744-e03d-408d-9282-3fcb6925413b", "metadata": { "tags": [] }, "outputs": [], "source": [ "from langchain.schema import Document\n", "from langgraph.graph import END, StateGraph" ] }, { "cell_type": "markdown", "id": "1788fbb7-90df-41e5-88c4-83c5e59fe23c", "metadata": { "tags": [] }, "source": [ "## Retriever & Reranker" ] }, { "cell_type": "code", "execution_count": 140, "id": "cbe2f9f0-0c0b-46f8-929c-51a94eab5f22", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "96" ] }, "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ "query = \"Is global warming caused by humans?\"\n", "\n", "retriever = ClimateQARetriever(\n", " vectorstore=vectorstore,\n", " sources = [\"IPCC\"],\n", " # reports = ias_reports,\n", " min_size = 200,\n", " k_summary = 5,k_total = 100,\n", " threshold = 0.5,\n", ")\n", "\n", "docs_question = retriever.get_relevant_documents(query)\n", "len(docs_question)" ] }, { "cell_type": "code", "execution_count": 86, "id": "6e6892d2-a5bd-456a-8284-6e844d02af0e", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 1.97 s\n", "Wall time: 681 ms\n" ] } ], "source": [ "%%time\n", "from scipy.special import expit, logit\n", "\n", "def rerank_docs(reranker,docs,query):\n", " \n", " # Get a list of texts from langchain docs\n", " input_docs = [x.page_content for x in docs]\n", " \n", " # Rerank using rerankers library\n", " results = reranker.rank(query=query, docs=input_docs)\n", "\n", " # Prepare langchain list of docs\n", " docs_reranked = []\n", " for result in results.results:\n", " doc_id = result.document.doc_id\n", " doc = docs[doc_id]\n", " doc.metadata[\"rerank_score\"] = result.score\n", " doc.metadata[\"query_used_for_retrieval\"] = query\n", " docs_reranked.append(doc)\n", " return docs_reranked\n", "\n", "docs_reranked = rerank_docs(reranker,docs_question,query)" ] }, { "cell_type": "code", "execution_count": 87, "id": "430209db-5ffb-4017-8ebd-12fee30df327", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "Document(page_content='Observed Warming and its Causes\\nA.1 Human activities, principally through emissions of greenhouse gases, have unequivocally \\r\\ncaused global warming, with global surface temperature reaching 1.1degC above 1850-1900 \\r\\nin 2011-2020. Global greenhouse gas emissions have continued to increase, with unequal \\r\\nhistorical and ongoing contributions arising from unsustainable energy use, land use and \\r\\nland-use change, lifestyles and patterns of consumption and production across regions, \\r\\nbetween and within countries, and among individuals (high confidence). {2.1, Figure 2.1, \\r\\nFigure 2.2}', metadata={'chunk_type': 'text', 'document_id': 'document10', 'document_number': 10.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 36.0, 'name': 'Synthesis report of the IPCC Sixth Assesment Report AR6', 'num_characters': 587.0, 'num_tokens': 130.0, 'num_tokens_approx': 142.0, 'num_words': 107.0, 'page_number': 10, 'release_date': 2023.0, 'report_type': 'SPM', 'section_header': 'Observed Warming and its Causes', 'short_name': 'IPCC AR6 SYR', 'source': 'IPCC', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/syr/downloads/report/IPCC_AR6_SYR_SPM.pdf', 'similarity_score': 0.759439, 'content': 'Observed Warming and its Causes\\nA.1 Human activities, principally through emissions of greenhouse gases, have unequivocally \\r\\ncaused global warming, with global surface temperature reaching 1.1degC above 1850-1900 \\r\\nin 2011-2020. Global greenhouse gas emissions have continued to increase, with unequal \\r\\nhistorical and ongoing contributions arising from unsustainable energy use, land use and \\r\\nland-use change, lifestyles and patterns of consumption and production across regions, \\r\\nbetween and within countries, and among individuals (high confidence). {2.1, Figure 2.1, \\r\\nFigure 2.2}', 'rerank_score': 0.9993778467178345, 'query_used_for_retrieval': 'Is global warming caused by humans?'})" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "docs_reranked[0]" ] }, { "cell_type": "code", "execution_count": 88, "id": "5ed0b677-bcc4-48b0-bc99-2f515f2e7293", "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[5, 5, 5]" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def divide_into_parts(target, parts):\n", " # Base value for each part\n", " base = target // parts\n", " # Remainder to distribute\n", " remainder = target % parts\n", " # List to hold the result\n", " result = []\n", " \n", " for i in range(parts):\n", " if i < remainder:\n", " # These parts get base value + 1\n", " result.append(base + 1)\n", " else:\n", " # The rest get the base value\n", " result.append(base)\n", " \n", " return result\n", "\n", "divide_into_parts(15,3)" ] }, { "cell_type": "code", "execution_count": null, "id": "1886fe98-4a29-4419-b436-adcbdbda35ac", "metadata": {}, "outputs": [], "source": [ "questions = " ] }, { "cell_type": "code", "execution_count": 133, "id": "4fca0c26-cc42-4f40-996a-c915b7c03a85", "metadata": { "tags": [] }, "outputs": [], "source": [ "state = {'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\",\n", " 'questions': [{'question': \"What role do cloud formations play in modulating the Earth's radiative balance?\",\n", " 'sources': ['IPCC']},\n", " {'question': 'How are cloud formations represented in current climate models?',\n", " 'sources': ['IPCC']}]}" ] }, { "cell_type": "code", "execution_count": 177, "id": "28307adf-42bb-4067-a95d-c5c4867d2657", "metadata": { "tags": [] }, "outputs": [], "source": [ "state = {'query': \"What does Morrison argue about the role of IK and LK ?\",\n", " 'questions': [{'question': \"How is the manga One Piece cited in the IPCC\",\n", " 'sources': ['IPCC']}]}" ] }, { "cell_type": "code", "execution_count": 178, "id": "9daa8285-919b-4eab-b071-70ea866d473e", "metadata": { "tags": [] }, "outputs": [], "source": [ "import sys\n", "import os\n", "from contextlib import contextmanager\n", "\n", "@contextmanager\n", "def suppress_output():\n", " # Open a null device\n", " with open(os.devnull, 'w') as devnull:\n", " # Store the original stdout and stderr\n", " old_stdout = sys.stdout\n", " old_stderr = sys.stderr\n", " # Redirect stdout and stderr to the null device\n", " sys.stdout = devnull\n", " sys.stderr = devnull\n", " try:\n", " yield\n", " finally:\n", " # Restore stdout and stderr\n", " sys.stdout = old_stdout\n", " sys.stderr = old_stderr" ] }, { "cell_type": "code", "execution_count": 179, "id": "4fc2efe2-783d-44ba-a246-2472ce6fd19b", "metadata": { "tags": [] }, "outputs": [], "source": [ "def retrieve_documents(state):\n", " \n", " POSSIBLE_SOURCES = [\"IPCC\",\"IPBES\",\"IPOS\",\"OpenAlex\"]\n", " questions = state[\"questions\"]\n", " \n", " # Use sources from the user input or from the LLM detection\n", " sources_input = state[\"sources_input\"] if \"sources_input\" in state else [\"auto\"]\n", " auto_mode = \"auto\" in sources_input\n", " \n", " # Constants\n", " k_final = 15\n", " k_before_reranking = 100\n", " k_summary = 5\n", " rerank_by_question = True\n", " \n", " # There are several options to get the final top k\n", " # Option 1 - Get 100 documents by question and rerank by question\n", " # Option 2 - Get 100/n documents by question and rerank the total\n", " if rerank_by_question:\n", " k_by_question = divide_into_parts(k_final,len(questions))\n", " \n", " docs = []\n", " \n", " for i,q in enumerate(questions):\n", " \n", " sources = q[\"sources\"]\n", " question = q[\"question\"]\n", " \n", " # If auto mode, we use the sources detected by the LLM\n", " if auto_mode:\n", " sources = [x for x in sources if x in POSSIBLE_SOURCES]\n", " \n", " # Otherwise, we use the config\n", " else:\n", " sources = sources_input\n", " \n", " # Search the document store using the retriever\n", " # Configure high top k for further reranking step\n", " retriever = ClimateQARetriever(\n", " vectorstore=vectorstore,\n", " sources = sources,\n", " # reports = ias_reports,\n", " min_size = 200,\n", " k_summary = k_summary,k_total = k_before_reranking,\n", " threshold = 0.5,\n", " )\n", " docs_question = retriever.get_relevant_documents(question)\n", " \n", " # Rerank\n", " with suppress_output():\n", " docs_question = rerank_docs(reranker,docs_question,question)\n", " \n", " # If rerank by question we select the top documents for each question\n", " if rerank_by_question:\n", " docs_question = docs_question[:k_by_question[i]]\n", " \n", " # Add sources used in the metadata\n", " for doc in docs_question:\n", " doc.metadata[\"sources_used\"] = sources\n", " \n", " # Add to the list of docs\n", " docs.extend(docs_question)\n", " \n", " # Sorting the list in descending order by rerank_score\n", " # Then select the top k\n", " docs = sorted(docs, key=lambda x: x.metadata[\"rerank_score\"], reverse=True)\n", " docs = docs[:k_final]\n", " \n", " new_state = {\"documents\":docs}\n", " return new_state\n", "\n", "def search(state):\n", " return {}" ] }, { "cell_type": "code", "execution_count": 180, "id": "299cdae3-2e97-4e47-bad3-98643dfaf4ea", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: total: 1.64 s\n", "Wall time: 3.23 s\n" ] } ], "source": [ "%%time\n", "output = retrieve_documents(state)" ] }, { "cell_type": "code", "execution_count": 181, "id": "638be0ea-bd41-45d7-ac7c-57ed789da3c5", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[0.20497774 0.20197058 0.20149879 0.16000335 0.1522842 0.14817041\n", " 0.14743239 0.1468197 0.14330755 0.13432105 0.12885363 0.12517229\n", " 0.12262824 0.12241826 0.12210386]\n", "0.15079746933333335\n" ] } ], "source": [ "rerank_scores = np.array([doc.metadata[\"rerank_score\"] for doc in output[\"documents\"]])\n", "print(rerank_scores)\n", "print(np.mean(rerank_scores))" ] }, { "cell_type": "code", "execution_count": 182, "id": "69ba19d3-97fb-4a23-99ee-c5827e0664e6", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "page_content='This Technical Summary should be cited as:\\nIPCC, 2019: Technical Summary [H.-O. Portner, D.C. Roberts, V. Masson-Delmotte, P. Zhai, E. Poloczanska, K. Mintenbeck, \\r\\nM. Tignor, A. Alegria, M. Nicolai, A. Okem, J. Petzold, B. Rama, N.M. Weyer (eds.)]. In: IPCC Special Report on the \\r\\nOcean and Cryosphere in a Changing Climate [H.- O. Portner, D.C. Roberts, V. Masson-Delmotte, P. Zhai, M. Tignor, \\r\\nE. Poloczanska, K. Mintenbeck, A. Alegria, M. Nicolai, A. Okem, J. Petzold, B. Rama, N.M. Weyer (eds.)]. Cambridge \\r\\nUniversity Press, Cambridge, UK and New York, NY, USA, pp. 39-69. https://doi.org/10.1017/9781009157964.002' metadata={'chunk_type': 'text', 'document_id': 'document14', 'document_number': 14.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 34.0, 'name': 'Technical Summary. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 623.0, 'num_tokens': 237.0, 'num_tokens_approx': 250.0, 'num_words': 188.0, 'page_number': 4, 'release_date': 2019.0, 'report_type': 'TS', 'section_header': 'This Technical Summary should be cited as:', 'short_name': 'IPCC SR OC TS', 'source': 'IPCC', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/site/assets/uploads/sites/3/2022/03/02_SROCC_TS_FINAL.pdf', 'similarity_score': 0.611846924, 'content': 'This Technical Summary should be cited as:\\nIPCC, 2019: Technical Summary [H.-O. Portner, D.C. Roberts, V. Masson-Delmotte, P. Zhai, E. Poloczanska, K. Mintenbeck, \\r\\nM. Tignor, A. Alegria, M. Nicolai, A. Okem, J. Petzold, B. Rama, N.M. Weyer (eds.)]. In: IPCC Special Report on the \\r\\nOcean and Cryosphere in a Changing Climate [H.- O. Portner, D.C. Roberts, V. Masson-Delmotte, P. Zhai, M. Tignor, \\r\\nE. Poloczanska, K. Mintenbeck, A. Alegria, M. Nicolai, A. Okem, J. Petzold, B. Rama, N.M. Weyer (eds.)]. Cambridge \\r\\nUniversity Press, Cambridge, UK and New York, NY, USA, pp. 39-69. https://doi.org/10.1017/9781009157964.002', 'rerank_score': 0.20497774, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This chapter should be cited as:\\nCabeza, L. F., Q. Bai, P. Bertoldi, J.M. Kihila, A.F.P. Lucena, E. Mata, S. Mirasgedis, A. Novikova, Y. Saheb, 2022: Buildings. \\r\\nIn IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. Contribution of Working Group III to the Sixth \\r\\nAssessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, J. Skea, R. Slade, A. Al Khourdajie, \\r\\nR. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, A. Hasija, G. Lisboa, S. Luz, J. Malley, \\r\\n(eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA. doi: 10.1017/9781009157926.011\\n This chapter should be cited as: \\n\\n953953' metadata={'chunk_type': 'text', 'document_id': 'document9', 'document_number': 9.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 2258.0, 'name': 'Full Report. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 706.0, 'num_tokens': 248.0, 'num_tokens_approx': 261.0, 'num_words': 196.0, 'page_number': 966, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This chapter should be cited as:', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'References', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg3/downloads/report/IPCC_AR6_WGIII_FullReport.pdf', 'similarity_score': 0.603373706, 'content': 'This chapter should be cited as:\\nCabeza, L. F., Q. Bai, P. Bertoldi, J.M. Kihila, A.F.P. Lucena, E. Mata, S. Mirasgedis, A. Novikova, Y. Saheb, 2022: Buildings. \\r\\nIn IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. Contribution of Working Group III to the Sixth \\r\\nAssessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, J. Skea, R. Slade, A. Al Khourdajie, \\r\\nR. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, A. Hasija, G. Lisboa, S. Luz, J. Malley, \\r\\n(eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA. doi: 10.1017/9781009157926.011\\n This chapter should be cited as: \\n\\n953953', 'rerank_score': 0.20197058, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This chapter should be cited as:\\nBashmakov, I.A., L.J. Nilsson, A. Acquaye, C. Bataille, J.M. Cullen, S. de la Rue du Can, M. Fischedick, Y. Geng, K. Tanaka, \\r\\n2022: Industry. In IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. Contribution of Working Group III \\r\\nto the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, J. Skea, R. Slade, \\r\\nA. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, A. Hasija, \\r\\nG. Lisboa, S. Luz, J. Malley, (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA. \\r\\ndoi: 10.1017/9781009157926.013\\n This chapter should be cited as: \\n\\n11611161' metadata={'chunk_type': 'text', 'document_id': 'document9', 'document_number': 9.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 2258.0, 'name': 'Full Report. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 724.0, 'num_tokens': 251.0, 'num_tokens_approx': 264.0, 'num_words': 198.0, 'page_number': 1174, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This chapter should be cited as:', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'Appendix 10.3: Line of Sight for Feasibility\\xa0Assessment', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg3/downloads/report/IPCC_AR6_WGIII_FullReport.pdf', 'similarity_score': 0.619030833, 'content': 'This chapter should be cited as:\\nBashmakov, I.A., L.J. Nilsson, A. Acquaye, C. Bataille, J.M. Cullen, S. de la Rue du Can, M. Fischedick, Y. Geng, K. Tanaka, \\r\\n2022: Industry. In IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. Contribution of Working Group III \\r\\nto the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, J. Skea, R. Slade, \\r\\nA. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, A. Hasija, \\r\\nG. Lisboa, S. Luz, J. Malley, (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA. \\r\\ndoi: 10.1017/9781009157926.013\\n This chapter should be cited as: \\n\\n11611161', 'rerank_score': 0.20149879, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This Annex should be cited as:\\nIPCC, 2022: Annex II: Glossary [Moller, V., R. van Diemen, J.B.R. Matthews, C. Mendez, S. Semenov, J.S. Fuglestvedt, \\r\\nA. Reisinger (eds.)]. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of Working Group II to \\r\\nthe Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Portner, D.C. Roberts, M. Tignor, \\r\\nE.S. Poloczanska, K. Mintenbeck, A. Alegria, M. Craig, S. Langsdorf, S. Loschke, V. Moller, A. Okem, B. Rama (eds.)]. \\r\\nCambridge University Press, Cambridge, UK and New York, NY, USA, pp. 2897-2930, doi:10.1017/9781009325844.029.\\n This Annex should be cited as: \\n\\n28972897' metadata={'chunk_type': 'text', 'document_id': 'document6', 'document_number': 6.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 3068.0, 'name': 'Full Report. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 702.0, 'num_tokens': 239.0, 'num_tokens_approx': 250.0, 'num_words': 188.0, 'page_number': 2909, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This Annex should be cited as:', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Annexes', 'toc_level1': 'Annex II Glossary', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.612448752, 'content': 'This Annex should be cited as:\\nIPCC, 2022: Annex II: Glossary [Moller, V., R. van Diemen, J.B.R. Matthews, C. Mendez, S. Semenov, J.S. Fuglestvedt, \\r\\nA. Reisinger (eds.)]. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of Working Group II to \\r\\nthe Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Portner, D.C. Roberts, M. Tignor, \\r\\nE.S. Poloczanska, K. Mintenbeck, A. Alegria, M. Craig, S. Langsdorf, S. Loschke, V. Moller, A. Okem, B. Rama (eds.)]. \\r\\nCambridge University Press, Cambridge, UK and New York, NY, USA, pp. 2897-2930, doi:10.1017/9781009325844.029.\\n This Annex should be cited as: \\n\\n28972897', 'rerank_score': 0.16000335, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='Annex IX: Contributors \\r\\nto the IPCC WGI Sixth \\r\\nAssessment Report\\nThis annex should be cited as:\\nIPCC, 2021: Annex IX: Contributors to the IPCC Working Group I Sixth Assessment Report. In Climate Change 2021: The \\r\\nPhysical Science Basis. Contribution of Working Group I to the Sixth Assessment Report of the Intergovernmental Panel \\r\\non Climate Change [Masson-Delmotte, V., P. Zhai, A. Pirani, S.L. Connors, C. Pean, S. Berger, N. Caud, Y. Chen, L. Goldfarb, \\r\\nM.I. Gomis, M. Huang, K. Leitzell, E. Lonnoy, J.B.R. Matthews, T.K. Maycock, T. Waterfield, O. Yelekci, R. Yu, and B. Zhou \\r\\n(eds.)]. Cambridge University Press, Cambridge, United Kingdom and New York, NY, USA, pp. 2267-2286.\\n This annex should be cited as: \\n\\n22672267' metadata={'chunk_type': 'text', 'document_id': 'document2', 'document_number': 2.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 2409.0, 'name': 'Full Report. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC', 'num_characters': 766.0, 'num_tokens': 233.0, 'num_tokens_approx': 260.0, 'num_words': 195.0, 'page_number': 2284, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'This annex should be cited as:', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Annex IX: Contributors', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.652021468, 'content': 'Annex IX: Contributors \\r\\nto the IPCC WGI Sixth \\r\\nAssessment Report\\nThis annex should be cited as:\\nIPCC, 2021: Annex IX: Contributors to the IPCC Working Group I Sixth Assessment Report. In Climate Change 2021: The \\r\\nPhysical Science Basis. Contribution of Working Group I to the Sixth Assessment Report of the Intergovernmental Panel \\r\\non Climate Change [Masson-Delmotte, V., P. Zhai, A. Pirani, S.L. Connors, C. Pean, S. Berger, N. Caud, Y. Chen, L. Goldfarb, \\r\\nM.I. Gomis, M. Huang, K. Leitzell, E. Lonnoy, J.B.R. Matthews, T.K. Maycock, T. Waterfield, O. Yelekci, R. Yu, and B. Zhou \\r\\n(eds.)]. Cambridge University Press, Cambridge, United Kingdom and New York, NY, USA, pp. 2267-2286.\\n This annex should be cited as: \\n\\n22672267', 'rerank_score': 0.1522842, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This Summary for Policymakers should be cited as:\\nIPCC, 2019: Summary for Policymakers. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate \\r\\n[H.-O. Portner, D.C. Roberts, V. Masson-Delmotte, P. Zhai, M. Tignor, E. Poloczanska, K. Mintenbeck, A. Alegria, \\r\\nM. Nicolai, A. Okem, J. Petzold, B. Rama, N.M. Weyer (eds.)]. Cambridge University Press, Cambridge, UK and \\r\\nNew York, NY, USA, pp. 3-35. https://doi.org/10.1017/9781009157964.001. \\n This Summary for Policymakers should be cited as: ' metadata={'chunk_type': 'text', 'document_id': 'document13', 'document_number': 13.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 36.0, 'name': 'Summary for Policymakers. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 548.0, 'num_tokens': 183.0, 'num_tokens_approx': 197.0, 'num_words': 148.0, 'page_number': 3, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'This Summary for Policymakers should be cited as:', 'short_name': 'IPCC SR OC SPM', 'source': 'IPCC', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/site/assets/uploads/sites/3/2022/03/01_SROCC_SPM_FINAL.pdf', 'similarity_score': 0.624829769, 'content': 'This Summary for Policymakers should be cited as:\\nIPCC, 2019: Summary for Policymakers. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate \\r\\n[H.-O. Portner, D.C. Roberts, V. Masson-Delmotte, P. Zhai, M. Tignor, E. Poloczanska, K. Mintenbeck, A. Alegria, \\r\\nM. Nicolai, A. Okem, J. Petzold, B. Rama, N.M. Weyer (eds.)]. Cambridge University Press, Cambridge, UK and \\r\\nNew York, NY, USA, pp. 3-35. https://doi.org/10.1017/9781009157964.001. \\n This Summary for Policymakers should be cited as: ', 'rerank_score': 0.14817041, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='Annex VIII: Acronyms\\nThis annex should be cited as:\\nIPCC, 2021: Annex VIII: Acronyms. In Climate Change 2021: The Physical Science Basis. Contribution of Working \\r\\nGroup I to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [Masson-Delmotte, \\r\\nV., P. Zhai, A. Pirani, S.L. Connors, C. Pean, S. Berger, N. Caud, Y. Chen, L. Goldfarb, M.I. Gomis, M. Huang, K. \\r\\nLeitzell, E. Lonnoy, J.B.R. Matthews, T.K. Maycock, T. Waterfield, O. Yelekci, R. Yu, and B. Zhou (eds.)]. Cambridge \\r\\nUniversity Press, Cambridge, United Kingdom and New York, NY, USA, pp. 2257-2266.\\n This annex should be cited as: \\n\\n22572257' metadata={'chunk_type': 'text', 'document_id': 'document2', 'document_number': 2.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 2409.0, 'name': 'Full Report. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC', 'num_characters': 667.0, 'num_tokens': 218.0, 'num_tokens_approx': 238.0, 'num_words': 179.0, 'page_number': 2274, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'land-use-land-use-change-and-forestry-lulucf/reporting-and-accounting\\x02of-lulucf-activities-under-the-kyoto-protocol.', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Annex VIII: Acronyms', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.595291555, 'content': 'Annex VIII: Acronyms\\nThis annex should be cited as:\\nIPCC, 2021: Annex VIII: Acronyms. In Climate Change 2021: The Physical Science Basis. Contribution of Working \\r\\nGroup I to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [Masson-Delmotte, \\r\\nV., P. Zhai, A. Pirani, S.L. Connors, C. Pean, S. Berger, N. Caud, Y. Chen, L. Goldfarb, M.I. Gomis, M. Huang, K. \\r\\nLeitzell, E. Lonnoy, J.B.R. Matthews, T.K. Maycock, T. Waterfield, O. Yelekci, R. Yu, and B. Zhou (eds.)]. Cambridge \\r\\nUniversity Press, Cambridge, United Kingdom and New York, NY, USA, pp. 2257-2266.\\n This annex should be cited as: \\n\\n22572257', 'rerank_score': 0.14743239, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This annex should be cited as:\\nIPCC, 2022: Annex I: Global to Regional Atlas [Portner, H.-O., A. Alegria, V. Moller, E.S. Poloczanska, K. Mintenbeck, \\r\\nS. Gotze (eds.)]. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of Working Group II to \\r\\nthe Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Portner, D.C. Roberts, M. Tignor, \\r\\nE.S. Poloczanska, K. Mintenbeck, A. Alegria, M. Craig, S. Langsdorf, S. Loschke, V. Moller, A. Okem, B. Rama (eds.)]. \\r\\nCambridge University Press, Cambridge, UK and New York, NY, USA, pp. 2811-2896, doi:10.1017/9781009325844.028.\\n This annex should be cited as: \\n\\n28112811' metadata={'chunk_type': 'text', 'document_id': 'document6', 'document_number': 6.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 3068.0, 'name': 'Full Report. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 700.0, 'num_tokens': 235.0, 'num_tokens_approx': 245.0, 'num_words': 184.0, 'page_number': 2823, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This annex should be cited as:', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Annexes', 'toc_level1': 'Annex I Global to Regional Atlas', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.626139402, 'content': 'This annex should be cited as:\\nIPCC, 2022: Annex I: Global to Regional Atlas [Portner, H.-O., A. Alegria, V. Moller, E.S. Poloczanska, K. Mintenbeck, \\r\\nS. Gotze (eds.)]. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of Working Group II to \\r\\nthe Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Portner, D.C. Roberts, M. Tignor, \\r\\nE.S. Poloczanska, K. Mintenbeck, A. Alegria, M. Craig, S. Langsdorf, S. Loschke, V. Moller, A. Okem, B. Rama (eds.)]. \\r\\nCambridge University Press, Cambridge, UK and New York, NY, USA, pp. 2811-2896, doi:10.1017/9781009325844.028.\\n This annex should be cited as: \\n\\n28112811', 'rerank_score': 0.1468197, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This chapter should be cited as:\\nIPCC, 2022: Annex I: Glossary [van Diemen, R., J.B.R. Matthews, V. Moller, J.S. Fuglestvedt, V. Masson-Delmotte, \\r\\nC. Mendez, A. Reisinger, S. Semenov (eds)]. In IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. \\r\\nContribution of Working Group III to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change\\r\\n[P.R. Shukla, J. Skea, R. Slade, A. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, \\r\\nM. Belkacemi, A. Hasija, G. Lisboa, S. Luz, J. Malley, (eds.)]. Cambridge University Press, Cambridge, UK and New York, \\r\\nNY, USA. doi: 10.1017/9781009157926.020' metadata={'chunk_type': 'text', 'document_id': 'document9', 'document_number': 9.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 2258.0, 'name': 'Full Report. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 659.0, 'num_tokens': 235.0, 'num_tokens_approx': 242.0, 'num_words': 182.0, 'page_number': 1806, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This chapter should be cited as:', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '_Hlk111724995', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg3/downloads/report/IPCC_AR6_WGIII_FullReport.pdf', 'similarity_score': 0.608979702, 'content': 'This chapter should be cited as:\\nIPCC, 2022: Annex I: Glossary [van Diemen, R., J.B.R. Matthews, V. Moller, J.S. Fuglestvedt, V. Masson-Delmotte, \\r\\nC. Mendez, A. Reisinger, S. Semenov (eds)]. In IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. \\r\\nContribution of Working Group III to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change\\r\\n[P.R. Shukla, J. Skea, R. Slade, A. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, \\r\\nM. Belkacemi, A. Hasija, G. Lisboa, S. Luz, J. Malley, (eds.)]. Cambridge University Press, Cambridge, UK and New York, \\r\\nNY, USA. doi: 10.1017/9781009157926.020', 'rerank_score': 0.14330755, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This annex should be cited as:\\nIPCC, 2022: Annex III: Acronyms. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of \\r\\nWorking Group II to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Portner, \\r\\nD.C. Roberts, M. Tignor, E.S. Poloczanska, K. Mintenbeck, A. Alegria, M. Craig, S. Langsdorf, S. Loschke, V. Moller, \\r\\nA. Okem, B. Rama (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA, pp. 2931-2938, \\r\\ndoi:10.1017/9781009325844.030. \\n This annex should be cited as: \\n\\n29312931' metadata={'chunk_type': 'text', 'document_id': 'document6', 'document_number': 6.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 3068.0, 'name': 'Full Report. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 597.0, 'num_tokens': 194.0, 'num_tokens_approx': 201.0, 'num_words': 151.0, 'page_number': 2943, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This annex should be cited as:', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Annexes', 'toc_level1': 'Annex III Acronyms', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.598234832, 'content': 'This annex should be cited as:\\nIPCC, 2022: Annex III: Acronyms. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of \\r\\nWorking Group II to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Portner, \\r\\nD.C. Roberts, M. Tignor, E.S. Poloczanska, K. Mintenbeck, A. Alegria, M. Craig, S. Langsdorf, S. Loschke, V. Moller, \\r\\nA. Okem, B. Rama (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA, pp. 2931-2938, \\r\\ndoi:10.1017/9781009325844.030. \\n This annex should be cited as: \\n\\n29312931', 'rerank_score': 0.13432105, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This annex should be cited as:\\nIPCC, 2021: Annex V: Monsoons [Cherchi, A., A. Turner (eds.)]. In Climate Change 2021: The Physical Science Basis. \\r\\nContribution of Working Group I to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change\\r\\n[Masson-Delmotte, V., P. Zhai, A. Pirani, S.L. Connors, C. Pean, S. Berger, N. Caud, Y. Chen, L. Goldfarb, M.I. Gomis, M. Huang, \\r\\nK. Leitzell, E. Lonnoy, J.B.R. Matthews, T.K. Maycock, T. Waterfield, O. Yelekci, R. Yu, and B. Zhou (eds.)]. Cambridge University \\r\\nPress, Cambridge, United Kingdom and New York, NY, USA, pp. 2193-2204, doi:10.1017/9781009157896.019.\\n This annex should be cited as: \\n\\n21932193' metadata={'chunk_type': 'text', 'document_id': 'document2', 'document_number': 2.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 2409.0, 'name': 'Full Report. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC', 'num_characters': 704.0, 'num_tokens': 238.0, 'num_tokens_approx': 260.0, 'num_words': 195.0, 'page_number': 2210, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'This annex should be cited as:', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Annex V: Monsoons', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.621438146, 'content': 'This annex should be cited as:\\nIPCC, 2021: Annex V: Monsoons [Cherchi, A., A. Turner (eds.)]. In Climate Change 2021: The Physical Science Basis. \\r\\nContribution of Working Group I to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change\\r\\n[Masson-Delmotte, V., P. Zhai, A. Pirani, S.L. Connors, C. Pean, S. Berger, N. Caud, Y. Chen, L. Goldfarb, M.I. Gomis, M. Huang, \\r\\nK. Leitzell, E. Lonnoy, J.B.R. Matthews, T.K. Maycock, T. Waterfield, O. Yelekci, R. Yu, and B. Zhou (eds.)]. Cambridge University \\r\\nPress, Cambridge, United Kingdom and New York, NY, USA, pp. 2193-2204, doi:10.1017/9781009157896.019.\\n This annex should be cited as: \\n\\n21932193', 'rerank_score': 0.12885363, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This annex should be cited as:\\nIPCC, 2019: Annex I: Glossary [Weyer, N.M. (ed.)]. In: IPCC Special Report on the Ocean and Cryosphere in a Changing \\r\\nClimate [H.-O. Portner, D.C. Roberts, V. Masson-Delmotte, P. Zhai, M. Tignor, E. Poloczanska, K. Mintenbeck, A. Alegria, M. \\r\\nNicolai, A. Okem, J. Petzold, B. Rama, N.M. Weyer (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, \\r\\nUSA, pp. 677-702. https://doi.org/10.1017/9781009157964.010.\\n This annex should be cited as: \\n\\n677677' metadata={'chunk_type': 'text', 'document_id': 'document22', 'document_number': 22.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 28.0, 'name': 'Annex I: Glossary In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 533.0, 'num_tokens': 188.0, 'num_tokens_approx': 206.0, 'num_words': 155.0, 'page_number': 3, 'release_date': 2019.0, 'report_type': 'Special Report', 'section_header': 'This annex should be cited as:', 'short_name': 'IPCC SR OC A1 G', 'source': 'IPCC', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/site/assets/uploads/sites/3/2022/03/10_SROCC_AnnexI-Glossary_FINAL.pdf', 'similarity_score': 0.644453526, 'content': 'This annex should be cited as:\\nIPCC, 2019: Annex I: Glossary [Weyer, N.M. (ed.)]. In: IPCC Special Report on the Ocean and Cryosphere in a Changing \\r\\nClimate [H.-O. Portner, D.C. Roberts, V. Masson-Delmotte, P. Zhai, M. Tignor, E. Poloczanska, K. Mintenbeck, A. Alegria, M. \\r\\nNicolai, A. Okem, J. Petzold, B. Rama, N.M. Weyer (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, \\r\\nUSA, pp. 677-702. https://doi.org/10.1017/9781009157964.010.\\n This annex should be cited as: \\n\\n677677', 'rerank_score': 0.12517229, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This index should be cited as:\\nIPCC, 2022: Index. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of Working Group II to \\r\\nthe Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Portner, D.C. Roberts, M. Tignor, \\r\\nE.S. Poloczanska, K. Mintenbeck, A. Alegria, M. Craig, S. Langsdorf, S. Loschke, V. Moller, A. Okem, B. Rama (eds.)]. \\r\\nCambridge University Press, Cambridge, UK and New York, NY, USA, pp. 3005-3056, doi:10.1017/9781009325844.033. \\n This index should be cited as: \\n\\n30053005' metadata={'chunk_type': 'text', 'document_id': 'document6', 'document_number': 6.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 3068.0, 'name': 'Full Report. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 581.0, 'num_tokens': 189.0, 'num_tokens_approx': 197.0, 'num_words': 148.0, 'page_number': 3017, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This index should be cited as:', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Index', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.616092443, 'content': 'This index should be cited as:\\nIPCC, 2022: Index. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of Working Group II to \\r\\nthe Sixth Assessment Report of the Intergovernmental Panel on Climate Change [H.-O. Portner, D.C. Roberts, M. Tignor, \\r\\nE.S. Poloczanska, K. Mintenbeck, A. Alegria, M. Craig, S. Langsdorf, S. Loschke, V. Moller, A. Okem, B. Rama (eds.)]. \\r\\nCambridge University Press, Cambridge, UK and New York, NY, USA, pp. 3005-3056, doi:10.1017/9781009325844.033. \\n This index should be cited as: \\n\\n30053005', 'rerank_score': 0.12262824, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This chapter should be cited as:\\nIPCC, 2022: Index. In IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. Contribution of Working \\r\\nGroup III to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, J. Skea, \\r\\nR. Slade, A. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, \\r\\nA. Hasija, G. Lisboa, S. Luz, J. Malley, (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA. \\r\\ndoi: 10.1017/9781009157926.026\\n This chapter should be cited as: \\n\\n19791979' metadata={'chunk_type': 'text', 'document_id': 'document9', 'document_number': 9.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 2258.0, 'name': 'Full Report. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 602.0, 'num_tokens': 199.0, 'num_tokens_approx': 205.0, 'num_words': 154.0, 'page_number': 1992, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This chapter should be cited as:', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'References', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg3/downloads/report/IPCC_AR6_WGIII_FullReport.pdf', 'similarity_score': 0.614085197, 'content': 'This chapter should be cited as:\\nIPCC, 2022: Index. In IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. Contribution of Working \\r\\nGroup III to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, J. Skea, \\r\\nR. Slade, A. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, \\r\\nA. Hasija, G. Lisboa, S. Luz, J. Malley, (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA. \\r\\ndoi: 10.1017/9781009157926.026\\n This chapter should be cited as: \\n\\n19791979', 'rerank_score': 0.12241826, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n", "page_content='This chapter should be cited as:\\nGrubb, M., C. Okereke, J. Arima, V. Bosetti, Y. Chen, J. Edmonds, S. Gupta, A. Koberle, S. Kverndokk, A. Malik, L. Sulistiawati, \\r\\n2022: Introduction and Framing. In IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. Contribution of \\r\\nWorking Group III to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, \\r\\nJ. Skea, R. Slade, A. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, \\r\\nA. Hasija, G. Lisboa, S. Luz, J. Malley, (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA. \\r\\ndoi: 10.1017/9781009157926.003\\n This chapter should be cited as: \\n\\n151151' metadata={'chunk_type': 'text', 'document_id': 'document9', 'document_number': 9.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 2258.0, 'name': 'Full Report. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 741.0, 'num_tokens': 254.0, 'num_tokens_approx': 264.0, 'num_words': 198.0, 'page_number': 164, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'This chapter should be cited as:', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'TS.7 Mitigation in the Context of\\xa0Sustainable\\xa0Development', 'toc_level1': 'Box TS.15 | A Harmonised Approach to Assessing Feasibility', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg3/downloads/report/IPCC_AR6_WGIII_FullReport.pdf', 'similarity_score': 0.603973, 'content': 'This chapter should be cited as:\\nGrubb, M., C. Okereke, J. Arima, V. Bosetti, Y. Chen, J. Edmonds, S. Gupta, A. Koberle, S. Kverndokk, A. Malik, L. Sulistiawati, \\r\\n2022: Introduction and Framing. In IPCC, 2022: Climate Change 2022: Mitigation of Climate Change. Contribution of \\r\\nWorking Group III to the Sixth Assessment Report of the Intergovernmental Panel on Climate Change [P.R. Shukla, \\r\\nJ. Skea, R. Slade, A. Al Khourdajie, R. van Diemen, D. McCollum, M. Pathak, S. Some, P. Vyas, R. Fradera, M. Belkacemi, \\r\\nA. Hasija, G. Lisboa, S. Luz, J. Malley, (eds.)]. Cambridge University Press, Cambridge, UK and New York, NY, USA. \\r\\ndoi: 10.1017/9781009157926.003\\n This chapter should be cited as: \\n\\n151151', 'rerank_score': 0.12210386, 'query_used_for_retrieval': 'How is the manga One Piece cited in the IPCC', 'sources_used': ['IPCC']}\n", "\n" ] } ], "source": [ "for doc in output[\"documents\"]:\n", " print(doc)\n", " print(\"\")" ] }, { "cell_type": "markdown", "id": "5ef9b1be-d913-4dbd-ad67-b87c4e948d11", "metadata": {}, "source": [ "## Create the RAG" ] }, { "cell_type": "code", "execution_count": null, "id": "b4638a7a-08c4-4259-a2de-77d1eb45a47c", "metadata": {}, "outputs": [], "source": [ "\n", "# async def answer_ai_impact(state,config):\n", "# answer = await ai_impact_chain.ainvoke({\"question\":state[\"user_input\"]},config)\n", "# return {\"answer\":answer}\n", " \n", "async def answer_rag(state):\n", " \n", " # Get the docs\n", " docs = state[\"documents\"]\n", " \n", " # Compute the trust average score\n", " rerank_scores = np.array([doc.metadata[\"rerank_score\"] for doc in docs])\n", " trust_score = np.mean(rerank_scores)\n", " \n", " # \n", " answer = \"\\n\".join([x[\"question\"] for x in state[\"questions\"]])\n", " return {\"answer\":answer}" ] }, { "cell_type": "markdown", "id": "827873ee-f74d-4ed6-a4f8-fc8a3ef6aea8", "metadata": { "tags": [] }, "source": [ "## Test the graph" ] }, { "cell_type": "code", "execution_count": 105, "id": "a24b8dd3-54b7-4209-a532-c3d6dfd1530d", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'event': 'on_chain_start', 'run_id': '54411858-94b4-423d-933e-45e86a7d6c4b', 'name': 'LangGraph', 'tags': [], 'metadata': {}, 'data': {'input': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'sources': ['auto']}}}\n", "\n", "{'event': 'on_chain_start', 'name': '__start__', 'run_id': '96e10c35-0088-454b-928c-8eda40e544a9', 'tags': ['graph:step:0', 'langsmith:hidden'], 'metadata': {}, 'data': {'input': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'sources': ['auto']}}}\n", "\n", "{'event': 'on_chain_end', 'name': '__start__', 'run_id': '96e10c35-0088-454b-928c-8eda40e544a9', 'tags': ['graph:step:0', 'langsmith:hidden'], 'metadata': {}, 'data': {'input': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'sources': ['auto']}, 'output': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'sources': ['auto']}}}\n", "\n", "{'event': 'on_chain_start', 'name': 'route_input_message', 'run_id': 'c5328959-b052-4920-a538-fb9a9f482ccb', 'tags': ['graph:step:1'], 'metadata': {}, 'data': {}}\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "CATEGORIZE {'intent': 'search', 'language': 'English'}\n", "{'event': 'on_chain_start', 'name': 'ChannelWrite', 'run_id': '09cda419-7333-4bf6-aeb7-385ee456f1d9', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {}, 'data': {'input': {'intent': 'search', 'language': 'English'}}}\n", "\n", "{'event': 'on_chain_end', 'name': 'ChannelWrite', 'run_id': '09cda419-7333-4bf6-aeb7-385ee456f1d9', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {}, 'data': {'input': {'intent': 'search', 'language': 'English'}, 'output': {'intent': 'search', 'language': 'English'}}}\n", "\n", "{'event': 'on_chain_start', 'name': 'route_entry_point', 'run_id': '478ecc36-08b2-4732-8e70-6efc0fcfc22f', 'tags': ['seq:step:3'], 'metadata': {}, 'data': {'input': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'language': 'English', 'intent': 'search'}}}\n", "\n", "{'event': 'on_chain_end', 'name': 'route_entry_point', 'run_id': '478ecc36-08b2-4732-8e70-6efc0fcfc22f', 'tags': ['seq:step:3'], 'metadata': {}, 'data': {'input': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'language': 'English', 'intent': 'search'}, 'output': 'transform_query'}}\n", "\n", "{'event': 'on_chain_start', 'name': 'ChannelWrite', 'run_id': '32752ceb-d15d-4ae3-aaf6-639f5564f559', 'tags': ['seq:step:3', 'langsmith:hidden'], 'metadata': {}, 'data': {'input': {'intent': 'search', 'language': 'English'}}}\n", "\n", "{'event': 'on_chain_end', 'name': 'ChannelWrite', 'run_id': '32752ceb-d15d-4ae3-aaf6-639f5564f559', 'tags': ['seq:step:3', 'langsmith:hidden'], 'metadata': {}, 'data': {'input': {'intent': 'search', 'language': 'English'}, 'output': {'intent': 'search', 'language': 'English'}}}\n", "\n", "{'event': 'on_chain_stream', 'name': 'route_input_message', 'run_id': 'c5328959-b052-4920-a538-fb9a9f482ccb', 'tags': ['graph:step:1'], 'metadata': {}, 'data': {'chunk': {'intent': 'search', 'language': 'English'}}}\n", "\n", "{'event': 'on_chain_end', 'name': 'route_input_message', 'run_id': 'c5328959-b052-4920-a538-fb9a9f482ccb', 'tags': ['graph:step:1'], 'metadata': {}, 'data': {'input': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': None, 'sources_input': None}, 'output': {'intent': 'search', 'language': 'English'}}}\n", "\n", "{'event': 'on_chain_stream', 'run_id': '54411858-94b4-423d-933e-45e86a7d6c4b', 'tags': [], 'metadata': {}, 'name': 'LangGraph', 'data': {'chunk': {'route_input_message': {'language': 'English', 'intent': 'search'}}}}\n", "\n", "{'event': 'on_chain_start', 'name': 'transform_query', 'run_id': 'debea710-be86-44af-a6ef-094ea95d5a3d', 'tags': ['graph:step:2'], 'metadata': {}, 'data': {}}\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n", "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'event': 'on_chain_start', 'name': 'ChannelWrite', 'run_id': 'f0d11fc9-cdc0-4c51-8576-4fa59b668d17', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {}, 'data': {'input': {'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'questions': [{'question': 'What are the main factors contributing to climate change?', 'sources': ['IPCC']}, {'question': 'How does human activity impact biodiversity?', 'sources': ['IPBES']}, {'question': 'What are the key findings of the latest IPCC report?', 'sources': ['IPCC']}]}}}\n", "\n", "{'event': 'on_chain_end', 'name': 'ChannelWrite', 'run_id': 'f0d11fc9-cdc0-4c51-8576-4fa59b668d17', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {}, 'data': {'input': {'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'questions': [{'question': 'What are the main factors contributing to climate change?', 'sources': ['IPCC']}, {'question': 'How does human activity impact biodiversity?', 'sources': ['IPBES']}, {'question': 'What are the key findings of the latest IPCC report?', 'sources': ['IPCC']}]}, 'output': {'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'questions': [{'question': 'What are the main factors contributing to climate change?', 'sources': ['IPCC']}, {'question': 'How does human activity impact biodiversity?', 'sources': ['IPBES']}, {'question': 'What are the key findings of the latest IPCC report?', 'sources': ['IPCC']}]}}}\n", "\n", "{'event': 'on_chain_stream', 'name': 'transform_query', 'run_id': 'debea710-be86-44af-a6ef-094ea95d5a3d', 'tags': ['graph:step:2'], 'metadata': {}, 'data': {'chunk': {'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'questions': [{'question': 'What are the main factors contributing to climate change?', 'sources': ['IPCC']}, {'question': 'How does human activity impact biodiversity?', 'sources': ['IPBES']}, {'question': 'What are the key findings of the latest IPCC report?', 'sources': ['IPCC']}]}}}\n", "\n", "{'event': 'on_chain_end', 'name': 'transform_query', 'run_id': 'debea710-be86-44af-a6ef-094ea95d5a3d', 'tags': ['graph:step:2'], 'metadata': {}, 'data': {'input': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'language': 'English', 'intent': 'search', 'query': None, 'questions': None, 'answer': None, 'audience': None, 'sources_input': None}, 'output': {'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'questions': [{'question': 'What are the main factors contributing to climate change?', 'sources': ['IPCC']}, {'question': 'How does human activity impact biodiversity?', 'sources': ['IPBES']}, {'question': 'What are the key findings of the latest IPCC report?', 'sources': ['IPCC']}]}}}\n", "\n", "{'event': 'on_chain_stream', 'run_id': '54411858-94b4-423d-933e-45e86a7d6c4b', 'tags': [], 'metadata': {}, 'name': 'LangGraph', 'data': {'chunk': {'transform_query': {'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'questions': [{'question': 'What are the main factors contributing to climate change?', 'sources': ['IPCC']}, {'question': 'How does human activity impact biodiversity?', 'sources': ['IPBES']}, {'question': 'What are the key findings of the latest IPCC report?', 'sources': ['IPCC']}]}}}}\n", "\n", "{'event': 'on_chain_start', 'name': 'retrieve_documents', 'run_id': '6aee01df-8b06-47d5-b338-b774c7b76641', 'tags': ['graph:step:3'], 'metadata': {}, 'data': {}}\n", "\n", "{'event': 'on_chain_end', 'name': 'retrieve_documents', 'run_id': '6aee01df-8b06-47d5-b338-b774c7b76641', 'tags': ['graph:step:3'], 'metadata': {}, 'data': {'input': {'user_input': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'language': 'English', 'intent': 'search', 'query': \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\", 'questions': [{'question': 'What are the main factors contributing to climate change?', 'sources': ['IPCC']}, {'question': 'How does human activity impact biodiversity?', 'sources': ['IPBES']}, {'question': 'What are the key findings of the latest IPCC report?', 'sources': ['IPCC']}], 'answer': None, 'audience': None, 'sources_input': None}, 'output': None}}\n", "\n" ] }, { "ename": "TypeError", "evalue": "argument of type 'NoneType' is not iterable", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "Cell \u001b[1;32mIn[105], line 6\u001b[0m\n\u001b[0;32m 3\u001b[0m question \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mC\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mest quoi l\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimpact de ChatGPT ?\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 4\u001b[0m question \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mI am not really sure what you mean. What role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance, and how are they represented in current climate models?\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m----> 6\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m event \u001b[38;5;129;01min\u001b[39;00m app\u001b[38;5;241m.\u001b[39mastream_events({\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muser_input\u001b[39m\u001b[38;5;124m\"\u001b[39m: question,\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msources\u001b[39m\u001b[38;5;124m\"\u001b[39m:[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mauto\u001b[39m\u001b[38;5;124m\"\u001b[39m]}, version\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mv1\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n\u001b[0;32m 7\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m event[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mevent\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mon_chat_model_stream\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[0;32m 8\u001b[0m token \u001b[38;5;241m=\u001b[39m event[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdata\u001b[39m\u001b[38;5;124m\"\u001b[39m][\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mchunk\u001b[39m\u001b[38;5;124m\"\u001b[39m]\u001b[38;5;241m.\u001b[39mcontent\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\base.py:1131\u001b[0m, in \u001b[0;36mRunnable.astream_events\u001b[1;34m(self, input, config, version, include_names, include_types, include_tags, exclude_names, exclude_types, exclude_tags, **kwargs)\u001b[0m\n\u001b[0;32m 1126\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 1127\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mNotImplementedError\u001b[39;00m(\n\u001b[0;32m 1128\u001b[0m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mOnly versions \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mv1\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m and \u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mv2\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m of the schema is currently supported.\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m 1129\u001b[0m )\n\u001b[1;32m-> 1131\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m event \u001b[38;5;129;01min\u001b[39;00m event_stream:\n\u001b[0;32m 1132\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m event\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\tracers\\event_stream.py:570\u001b[0m, in \u001b[0;36m_astream_events_implementation_v1\u001b[1;34m(runnable, input, config, include_names, include_types, include_tags, exclude_names, exclude_types, exclude_tags, **kwargs)\u001b[0m\n\u001b[0;32m 566\u001b[0m root_name \u001b[38;5;241m=\u001b[39m config\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_name\u001b[39m\u001b[38;5;124m\"\u001b[39m, runnable\u001b[38;5;241m.\u001b[39mget_name())\n\u001b[0;32m 568\u001b[0m \u001b[38;5;66;03m# Ignoring mypy complaint about too many different union combinations\u001b[39;00m\n\u001b[0;32m 569\u001b[0m \u001b[38;5;66;03m# This arises because many of the argument types are unions\u001b[39;00m\n\u001b[1;32m--> 570\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m log \u001b[38;5;129;01min\u001b[39;00m _astream_log_implementation( \u001b[38;5;66;03m# type: ignore[misc]\u001b[39;00m\n\u001b[0;32m 571\u001b[0m runnable,\n\u001b[0;32m 572\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[0;32m 573\u001b[0m config\u001b[38;5;241m=\u001b[39mconfig,\n\u001b[0;32m 574\u001b[0m stream\u001b[38;5;241m=\u001b[39mstream,\n\u001b[0;32m 575\u001b[0m diff\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[0;32m 576\u001b[0m with_streamed_output_list\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[0;32m 577\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[0;32m 578\u001b[0m ):\n\u001b[0;32m 579\u001b[0m run_log \u001b[38;5;241m=\u001b[39m run_log \u001b[38;5;241m+\u001b[39m log\n\u001b[0;32m 581\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m encountered_start_event:\n\u001b[0;32m 582\u001b[0m \u001b[38;5;66;03m# Yield the start event for the root runnable.\u001b[39;00m\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\tracers\\log_stream.py:617\u001b[0m, in \u001b[0;36m_astream_log_implementation\u001b[1;34m(runnable, input, config, stream, diff, with_streamed_output_list, **kwargs)\u001b[0m\n\u001b[0;32m 614\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m 615\u001b[0m \u001b[38;5;66;03m# Wait for the runnable to finish, if not cancelled (eg. by break)\u001b[39;00m\n\u001b[0;32m 616\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 617\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m task\n\u001b[0;32m 618\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mCancelledError:\n\u001b[0;32m 619\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\tracers\\log_stream.py:571\u001b[0m, in \u001b[0;36m_astream_log_implementation..consume_astream\u001b[1;34m()\u001b[0m\n\u001b[0;32m 568\u001b[0m prev_final_output: Optional[Output] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m 569\u001b[0m final_output: Optional[Output] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m--> 571\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m runnable\u001b[38;5;241m.\u001b[39mastream(\u001b[38;5;28minput\u001b[39m, config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 572\u001b[0m prev_final_output \u001b[38;5;241m=\u001b[39m final_output\n\u001b[0;32m 573\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langgraph\\pregel\\__init__.py:1208\u001b[0m, in \u001b[0;36mPregel.astream\u001b[1;34m(self, input, config, stream_mode, output_keys, input_keys, interrupt_before, interrupt_after, debug)\u001b[0m\n\u001b[0;32m 1206\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[0;32m 1207\u001b[0m \u001b[38;5;66;03m# wait for all background tasks to finish\u001b[39;00m\n\u001b[1;32m-> 1208\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mgather(\u001b[38;5;241m*\u001b[39mbg)\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langgraph\\pregel\\__init__.py:1107\u001b[0m, in \u001b[0;36mPregel.astream\u001b[1;34m(self, input, config, stream_mode, output_keys, input_keys, interrupt_before, interrupt_after, debug)\u001b[0m\n\u001b[0;32m 1100\u001b[0m done, inflight \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mwait(\n\u001b[0;32m 1101\u001b[0m futures,\n\u001b[0;32m 1102\u001b[0m return_when\u001b[38;5;241m=\u001b[39masyncio\u001b[38;5;241m.\u001b[39mFIRST_EXCEPTION,\n\u001b[0;32m 1103\u001b[0m timeout\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mstep_timeout,\n\u001b[0;32m 1104\u001b[0m )\n\u001b[0;32m 1106\u001b[0m \u001b[38;5;66;03m# panic on failure or timeout\u001b[39;00m\n\u001b[1;32m-> 1107\u001b[0m \u001b[43m_panic_or_proceed\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdone\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minflight\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstep\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 1109\u001b[0m \u001b[38;5;66;03m# combine pending writes from all tasks\u001b[39;00m\n\u001b[0;32m 1110\u001b[0m pending_writes \u001b[38;5;241m=\u001b[39m deque[\u001b[38;5;28mtuple\u001b[39m[\u001b[38;5;28mstr\u001b[39m, Any]]()\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langgraph\\pregel\\__init__.py:1334\u001b[0m, in \u001b[0;36m_panic_or_proceed\u001b[1;34m(done, inflight, step)\u001b[0m\n\u001b[0;32m 1332\u001b[0m inflight\u001b[38;5;241m.\u001b[39mpop()\u001b[38;5;241m.\u001b[39mcancel()\n\u001b[0;32m 1333\u001b[0m \u001b[38;5;66;03m# raise the exception\u001b[39;00m\n\u001b[1;32m-> 1334\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m exc\n\u001b[0;32m 1336\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m inflight:\n\u001b[0;32m 1337\u001b[0m \u001b[38;5;66;03m# if we got here means we timed out\u001b[39;00m\n\u001b[0;32m 1338\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m inflight:\n\u001b[0;32m 1339\u001b[0m \u001b[38;5;66;03m# cancel all pending tasks\u001b[39;00m\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langgraph\\pregel\\retry.py:111\u001b[0m, in \u001b[0;36marun_with_retry\u001b[1;34m(task, retry_policy, stream)\u001b[0m\n\u001b[0;32m 109\u001b[0m \u001b[38;5;66;03m# run the task\u001b[39;00m\n\u001b[0;32m 110\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m stream:\n\u001b[1;32m--> 111\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m _ \u001b[38;5;129;01min\u001b[39;00m task\u001b[38;5;241m.\u001b[39mproc\u001b[38;5;241m.\u001b[39mastream(task\u001b[38;5;241m.\u001b[39minput, task\u001b[38;5;241m.\u001b[39mconfig):\n\u001b[0;32m 112\u001b[0m \u001b[38;5;28;01mpass\u001b[39;00m\n\u001b[0;32m 113\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\base.py:2769\u001b[0m, in \u001b[0;36mRunnableSequence.astream\u001b[1;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[0;32m 2766\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21minput_aiter\u001b[39m() \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m AsyncIterator[Input]:\n\u001b[0;32m 2767\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m \u001b[38;5;28minput\u001b[39m\n\u001b[1;32m-> 2769\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \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[39matransform(input_aiter(), config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 2770\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m chunk\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\base.py:2752\u001b[0m, in \u001b[0;36mRunnableSequence.atransform\u001b[1;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[0;32m 2746\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21matransform\u001b[39m(\n\u001b[0;32m 2747\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m 2748\u001b[0m \u001b[38;5;28minput\u001b[39m: AsyncIterator[Input],\n\u001b[0;32m 2749\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m 2750\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[0;32m 2751\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m AsyncIterator[Output]:\n\u001b[1;32m-> 2752\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \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[39m_atransform_stream_with_config(\n\u001b[0;32m 2753\u001b[0m \u001b[38;5;28minput\u001b[39m,\n\u001b[0;32m 2754\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_atransform,\n\u001b[0;32m 2755\u001b[0m patch_config(config, run_name\u001b[38;5;241m=\u001b[39m(config \u001b[38;5;129;01mor\u001b[39;00m {})\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrun_name\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname),\n\u001b[0;32m 2756\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs,\n\u001b[0;32m 2757\u001b[0m ):\n\u001b[0;32m 2758\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m chunk\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\base.py:1854\u001b[0m, in \u001b[0;36mRunnable._atransform_stream_with_config\u001b[1;34m(self, input, transformer, config, run_type, **kwargs)\u001b[0m\n\u001b[0;32m 1849\u001b[0m chunk: Output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mcreate_task( \u001b[38;5;66;03m# type: ignore[call-arg]\u001b[39;00m\n\u001b[0;32m 1850\u001b[0m py_anext(iterator), \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[0;32m 1851\u001b[0m context\u001b[38;5;241m=\u001b[39mcontext,\n\u001b[0;32m 1852\u001b[0m )\n\u001b[0;32m 1853\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m-> 1854\u001b[0m chunk \u001b[38;5;241m=\u001b[39m cast(Output, \u001b[38;5;28;01mawait\u001b[39;00m py_anext(iterator))\n\u001b[0;32m 1855\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m chunk\n\u001b[0;32m 1856\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m final_output_supported:\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\tracers\\log_stream.py:238\u001b[0m, in \u001b[0;36mLogStreamCallbackHandler.tap_output_aiter\u001b[1;34m(self, run_id, output)\u001b[0m\n\u001b[0;32m 234\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mtap_output_aiter\u001b[39m(\n\u001b[0;32m 235\u001b[0m \u001b[38;5;28mself\u001b[39m, run_id: UUID, output: AsyncIterator[T]\n\u001b[0;32m 236\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m AsyncIterator[T]:\n\u001b[0;32m 237\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Tap an output async iterator to stream its values to the log.\"\"\"\u001b[39;00m\n\u001b[1;32m--> 238\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m chunk \u001b[38;5;129;01min\u001b[39;00m output:\n\u001b[0;32m 239\u001b[0m \u001b[38;5;66;03m# root run is handled in .astream_log()\u001b[39;00m\n\u001b[0;32m 240\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m run_id \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mroot_id:\n\u001b[0;32m 241\u001b[0m \u001b[38;5;66;03m# if we can't find the run silently ignore\u001b[39;00m\n\u001b[0;32m 242\u001b[0m \u001b[38;5;66;03m# eg. because this run wasn't included in the log\u001b[39;00m\n\u001b[0;32m 243\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m key \u001b[38;5;241m:=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_key_map_by_run_id\u001b[38;5;241m.\u001b[39mget(run_id):\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\base.py:2722\u001b[0m, in \u001b[0;36mRunnableSequence._atransform\u001b[1;34m(self, input, run_manager, config)\u001b[0m\n\u001b[0;32m 2714\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m step \u001b[38;5;129;01min\u001b[39;00m steps:\n\u001b[0;32m 2715\u001b[0m final_pipeline \u001b[38;5;241m=\u001b[39m step\u001b[38;5;241m.\u001b[39matransform(\n\u001b[0;32m 2716\u001b[0m final_pipeline,\n\u001b[0;32m 2717\u001b[0m patch_config(\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 2720\u001b[0m ),\n\u001b[0;32m 2721\u001b[0m )\n\u001b[1;32m-> 2722\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m output \u001b[38;5;129;01min\u001b[39;00m final_pipeline:\n\u001b[0;32m 2723\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m output\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\base.py:1182\u001b[0m, in \u001b[0;36mRunnable.atransform\u001b[1;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[0;32m 1179\u001b[0m final: Input\n\u001b[0;32m 1180\u001b[0m got_first_val \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m-> 1182\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m ichunk \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28minput\u001b[39m:\n\u001b[0;32m 1183\u001b[0m \u001b[38;5;66;03m# The default implementation of transform is to buffer input and\u001b[39;00m\n\u001b[0;32m 1184\u001b[0m \u001b[38;5;66;03m# then call stream.\u001b[39;00m\n\u001b[0;32m 1185\u001b[0m \u001b[38;5;66;03m# It'll attempt to gather all input into a single chunk using\u001b[39;00m\n\u001b[0;32m 1186\u001b[0m \u001b[38;5;66;03m# the `+` operator.\u001b[39;00m\n\u001b[0;32m 1187\u001b[0m \u001b[38;5;66;03m# If the input is not addable, then we'll assume that we can\u001b[39;00m\n\u001b[0;32m 1188\u001b[0m \u001b[38;5;66;03m# only operate on the last chunk,\u001b[39;00m\n\u001b[0;32m 1189\u001b[0m \u001b[38;5;66;03m# and we'll iterate until we get to the last chunk.\u001b[39;00m\n\u001b[0;32m 1190\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m got_first_val:\n\u001b[0;32m 1191\u001b[0m final \u001b[38;5;241m=\u001b[39m ichunk\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\base.py:1200\u001b[0m, in \u001b[0;36mRunnable.atransform\u001b[1;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[0;32m 1197\u001b[0m final \u001b[38;5;241m=\u001b[39m ichunk\n\u001b[0;32m 1199\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m got_first_val:\n\u001b[1;32m-> 1200\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mfor\u001b[39;00m output \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mastream(final, config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[0;32m 1201\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m output\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\base.py:820\u001b[0m, in \u001b[0;36mRunnable.astream\u001b[1;34m(self, input, config, **kwargs)\u001b[0m\n\u001b[0;32m 810\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mastream\u001b[39m(\n\u001b[0;32m 811\u001b[0m \u001b[38;5;28mself\u001b[39m,\n\u001b[0;32m 812\u001b[0m \u001b[38;5;28minput\u001b[39m: Input,\n\u001b[0;32m 813\u001b[0m config: Optional[RunnableConfig] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m 814\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs: Optional[Any],\n\u001b[0;32m 815\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m AsyncIterator[Output]:\n\u001b[0;32m 816\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 817\u001b[0m \u001b[38;5;124;03m Default implementation of astream, which calls ainvoke.\u001b[39;00m\n\u001b[0;32m 818\u001b[0m \u001b[38;5;124;03m Subclasses should override this method if they support streaming output.\u001b[39;00m\n\u001b[0;32m 819\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[1;32m--> 820\u001b[0m \u001b[38;5;28;01myield\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mainvoke(\u001b[38;5;28minput\u001b[39m, config, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langgraph\\utils.py:115\u001b[0m, in \u001b[0;36mRunnableCallable.ainvoke\u001b[1;34m(self, input, config)\u001b[0m\n\u001b[0;32m 111\u001b[0m ret \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mcreate_task(\n\u001b[0;32m 112\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mafunc(\u001b[38;5;28minput\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs), context\u001b[38;5;241m=\u001b[39mcontext\n\u001b[0;32m 113\u001b[0m )\n\u001b[0;32m 114\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 115\u001b[0m ret \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mawait\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mafunc(\u001b[38;5;28minput\u001b[39m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)\n\u001b[0;32m 116\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(ret, Runnable) \u001b[38;5;129;01mand\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrecurse:\n\u001b[0;32m 117\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m ret\u001b[38;5;241m.\u001b[39mainvoke(\u001b[38;5;28minput\u001b[39m, config)\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\site-packages\\langchain_core\\runnables\\config.py:514\u001b[0m, in \u001b[0;36mrun_in_executor\u001b[1;34m(executor_or_config, func, *args, **kwargs)\u001b[0m\n\u001b[0;32m 501\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Run a function in an executor.\u001b[39;00m\n\u001b[0;32m 502\u001b[0m \n\u001b[0;32m 503\u001b[0m \u001b[38;5;124;03mArgs:\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 510\u001b[0m \u001b[38;5;124;03m Output: The output of the function.\u001b[39;00m\n\u001b[0;32m 511\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 512\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m executor_or_config \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(executor_or_config, \u001b[38;5;28mdict\u001b[39m):\n\u001b[0;32m 513\u001b[0m \u001b[38;5;66;03m# Use default executor with context copied from current context\u001b[39;00m\n\u001b[1;32m--> 514\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mget_running_loop()\u001b[38;5;241m.\u001b[39mrun_in_executor(\n\u001b[0;32m 515\u001b[0m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[0;32m 516\u001b[0m cast(Callable[\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;241m.\u001b[39m, T], partial(copy_context()\u001b[38;5;241m.\u001b[39mrun, func, \u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs)),\n\u001b[0;32m 517\u001b[0m )\n\u001b[0;32m 519\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mawait\u001b[39;00m asyncio\u001b[38;5;241m.\u001b[39mget_running_loop()\u001b[38;5;241m.\u001b[39mrun_in_executor(\n\u001b[0;32m 520\u001b[0m executor_or_config, partial(func, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs), \u001b[38;5;241m*\u001b[39margs\n\u001b[0;32m 521\u001b[0m )\n", "File \u001b[1;32m~\\Anaconda3\\envs\\py310\\lib\\concurrent\\futures\\thread.py:58\u001b[0m, in \u001b[0;36m_WorkItem.run\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 55\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m\n\u001b[0;32m 57\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m---> 58\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfn(\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mkwargs)\n\u001b[0;32m 59\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 exc:\n\u001b[0;32m 60\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfuture\u001b[38;5;241m.\u001b[39mset_exception(exc)\n", "Cell \u001b[1;32mIn[89], line 7\u001b[0m, in \u001b[0;36mretrieve_documents\u001b[1;34m(state)\u001b[0m\n\u001b[0;32m 5\u001b[0m questions \u001b[38;5;241m=\u001b[39m state[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mquestions\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[0;32m 6\u001b[0m sources_input \u001b[38;5;241m=\u001b[39m state[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msources_input\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[1;32m----> 7\u001b[0m auto_mode \u001b[38;5;241m=\u001b[39m \u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mauto\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;129;43;01min\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43msources_input\u001b[49m\n\u001b[0;32m 9\u001b[0m k_final \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m15\u001b[39m\n\u001b[0;32m 10\u001b[0m k_before_reranking \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m100\u001b[39m\n", "\u001b[1;31mTypeError\u001b[0m: argument of type 'NoneType' is not iterable" ] } ], "source": [ "# question = \"Tu penses quoi de Shakespeare ?\"\n", "question = \"C'est quoi la recette de la tarte aux pommes ?\"\n", "question = \"C'est quoi l'impact de ChatGPT ?\"\n", "question = \"I am not really sure what you mean. What role do cloud formations play in modulating the Earth's radiative balance, and how are they represented in current climate models?\"\n", "\n", "async for event in app.astream_events({\"user_input\": question,\"sources\":[\"auto\"]}, version=\"v1\"):\n", " if event[\"event\"] == \"on_chat_model_stream\":\n", " token = event[\"data\"][\"chunk\"].content\n", " print(token,end = \"\")\n", " \n", " print(event)\n", " print(\"\")" ] } ], "metadata": { "kernelspec": { "display_name": "climateqa", "language": "python", "name": "climateqa" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.14" } }, "nbformat": 4, "nbformat_minor": 5 }