diff --git "a/sandbox/20240310 - CQA - Semantic Routing 1.ipynb" "b/sandbox/20240310 - CQA - Semantic Routing 1.ipynb" new file mode 100644--- /dev/null +++ "b/sandbox/20240310 - CQA - Semantic Routing 1.ipynb" @@ -0,0 +1,2358 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 2, + "id": "07f255d7", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 2, + "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": "code", + "execution_count": 3, + "id": "6af1a96e", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from climateqa.engine.llm import get_llm\n", + "llm = get_llm(provider=\"openai\")" + ] + }, + { + "cell_type": "markdown", + "id": "16eb91cb-3bfb-4c0c-b29e-753c954c2399", + "metadata": {}, + "source": [ + "# Semantic Routing" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1e769371-1f8c-4f34-89c5-c0f9914d47a0", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from climateqa.engine.chains.intent_routing import make_intent_router_chain,SAMPLE_QUESTIONS" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "480ad611-33c7-49ea-b02c-94d6ce1f1d1a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "router_chain = make_intent_router_chain(llm)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "82cf49d9-d48e-4d5c-8666-bcc95f637371", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Est-ce que l'IA a un impact sur l'environnement ?\n", + "{'language': 'French', 'intent': 'ai_impact'}\n", + "----------------------------------------------------------------------------------------------------\n" + ] + } + ], + "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": 7, + "id": "d8ef7e0f-ac5f-4323-b02e-753ce2b4afda", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'intent': 'search'}" + ] + }, + "execution_count": 7, + "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": {}, + "source": [ + "# Query Rewriter" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "3345a24e-e794-4e84-93ae-98be5ca61af3", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from climateqa.engine.chains.query_rewriting 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": 112, + "id": "4151d2e4-0bfe-4642-a185-2dcb639e6f78", + "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", + "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" + ] + }, + { + "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": 112, + "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": "8d89f36b-fc04-4d0c-b9c4-990b489b7fc3", + "metadata": {}, + "source": [ + "## Test simple route chains" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "1d884bb7-7230-47cb-a778-36cffed1fcde", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from climateqa.engine.chains.route_chitchat import make_chitchat_chain\n", + "from climateqa.engine.chains.route_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": 15, + "id": "586a4ead-6064-42e8-9f3c-8973b8d754c6", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "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 le 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 cet outil spécifique, je vous recommande de consulter les outils tels que CodeCarbon pour mesurer l'empreinte carbone de votre code, ou Ecologits pour mesurer l'empreinte carbone de l'utilisation des API de modèles de langage. De plus, vous pouvez visiter cette page pour en apprendre davantage sur l'empreinte carbone de ClimateQ&A : [Lien vers l'empreinte carbone de ClimateQ&A](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": 366, + "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é, mais je ne comprends pas la question. Pouvez-vous poser une question sur l'environnement ou le climat ?" + ] + } + ], + "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": "markdown", + "id": "0f917a1d-fca1-4e6d-9a24-19a14868d155", + "metadata": {}, + "source": [ + "## Graph definition" + ] + }, + { + "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": "code", + "execution_count": 58, + "id": "345c7f3a-e1f3-4b13-b33f-ac58f93a0b95", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from typing_extensions import TypedDict\n", + "from typing import List\n", + "\n", + "### State\n", + "\n", + "class GraphState(TypedDict):\n", + " \"\"\"\n", + " Represents the state of our graph.\n", + " \"\"\"\n", + " user_input : str\n", + " language : str\n", + " intent : str\n", + " query: str\n", + " questions : List[dict]\n", + " answer: str\n", + " audience: str\n", + " sources_input: str\n", + " documents: List[Document]" + ] + }, + { + "cell_type": "markdown", + "id": "56cae016-ca44-422a-a7a9-b8cb600652f1", + "metadata": {}, + "source": [ + "## Functions definition" + ] + }, + { + "cell_type": "code", + "execution_count": 130, + "id": "9104f33a-5150-401f-b9a3-27d4b97f0b77", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# NODES\n", + "def route_input_message(state):\n", + " output = router_chain.invoke({\"input\":state[\"user_input\"]})\n", + " if \"language\" not in output: output[\"language\"] = \"English\"\n", + " output[\"query\"] = state[\"user_input\"]\n", + " return output\n", + "\n", + "def translate_query(state):\n", + " user_input = state[\"user_input\"]\n", + " translation = translation_chain.invoke({\"input\":user_input})\n", + " return {\"query\":translation[\"translation\"]}\n", + " \n", + "def transform_query(state):\n", + " \n", + " new_state = {}\n", + " \n", + " # Decomposition\n", + " decomposition_output = decomposition_chain.invoke({\"input\":state[\"query\"]})\n", + " new_state.update(decomposition_output)\n", + " \n", + " # Query Analysis\n", + " questions = []\n", + " for question in new_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", + " new_state[\"questions\"] = questions\n", + " \n", + " return new_state\n", + "\n", + "\n", + "async def answer_chitchat(state,config):\n", + " answer = await chitchat_chain.ainvoke({\"question\":state[\"user_input\"]},config)\n", + " return {\"answer\":answer}\n", + "\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", + "def answer_rag(state):\n", + " answer = \"\\n\".join([x[\"question\"] for x in state[\"questions\"]])\n", + " return {\"answer\":answer}" + ] + }, + { + "cell_type": "code", + "execution_count": 132, + "id": "49473d76-fe32-4197-97ab-b806e6364adb", + "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", + "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" + ] + }, + { + "data": { + "text/plain": [ + "{'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']}]}" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state = {\n", + " \"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", + "}\n", + "\n", + "output = transform_query(state)\n", + "state.update(output)\n", + "state" + ] + }, + { + "cell_type": "markdown", + "id": "1788fbb7-90df-41e5-88c4-83c5e59fe23c", + "metadata": { + "tags": [] + }, + "source": [ + "## Retriever & Reranker" + ] + }, + { + "cell_type": "code", + "execution_count": 158, + "id": "fbaaaa6b-2020-4713-93aa-371e34897f2d", + "metadata": { + "tags": [] + }, + "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": [ + "Auto-updated model_name to rerank-english-v3.0 for API provider cohere\n", + "Loading APIRanker model rerank-english-v3.0\n", + "Loading embeddings model: BAAI/bge-base-en-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\theo.alvesdacosta\\Anaconda3\\envs\\py310\\lib\\site-packages\\huggingface_hub\\file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n", + " warnings.warn(\n", + "INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: cpu\n" + ] + } + ], + "source": [ + "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 = \"ZpTzfMXLsHfICzYrST2fPmk8ep9javfIUPWD2Ovw\")\n", + "\n", + "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": 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": "80c16e2f-67c7-4029-94b9-ecda0a1bfe82", + "metadata": {}, + "source": [ + "## Create the nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 125, + "id": "7746307d-fbe2-4184-a973-ad3ca065d160", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# GRAPH\n", + "\n", + "\n", + "workflow = StateGraph(GraphState)\n", + "\n", + "# Define the nodes\n", + "workflow.add_node(\"route_input_message\", route_input_message) # categorize email\n", + "workflow.add_node(\"search\", search) # web search\n", + "workflow.add_node(\"transform_query\", transform_query) # web search\n", + "workflow.add_node(\"translate_query\", translate_query) # web search\n", + "workflow.add_node(\"answer_chitchat\", answer_chitchat)\n", + "workflow.add_node(\"answer_ai_impact\", answer_ai_impact)\n", + "workflow.add_node(\"retrieve_documents\",retrieve_documents)\n", + "workflow.add_node(\"answer_rag\",answer_rag)" + ] + }, + { + "cell_type": "markdown", + "id": "6e3595a1-c055-4313-9166-99cb20ddde87", + "metadata": {}, + "source": [ + "## Create the edges" + ] + }, + { + "cell_type": "code", + "execution_count": 126, + "id": "d0bbf204-569a-467e-b83c-90bcb7eaef04", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# CONDITIONAL EDGES\n", + "\n", + "def route_entry_point(state):\n", + " intent = state[\"intent\"]\n", + " if intent in [\"chitchat\",\"esg\"]:\n", + " return \"answer_chitchat\"\n", + " elif intent == \"ai_impact\":\n", + " return \"answer_ai_impact\"\n", + " else:\n", + " # Search route\n", + " return \"search\"\n", + " \n", + "def route_translation(state):\n", + " if state[\"language\"].lower() == \"english\":\n", + " return \"transform_query\"\n", + " else:\n", + " return \"translate_query\"" + ] + }, + { + "cell_type": "code", + "execution_count": 127, + "id": "63dff57d-c3a6-46a3-aeb8-d973733d0424", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "workflow.set_entry_point(\"route_input_message\")\n", + "\n", + "def make_id_dict(values):\n", + " return {k:k for k in values}\n", + "\n", + "workflow.add_conditional_edges(\n", + " \"route_input_message\",\n", + " route_entry_point,\n", + " make_id_dict([\"answer_chitchat\",\"answer_ai_impact\",\"search\"])\n", + ")\n", + "\n", + "workflow.add_conditional_edges(\n", + " \"search\",\n", + " route_translation,\n", + " make_id_dict([\"translate_query\",\"transform_query\"])\n", + ")\n", + "\n", + "workflow.add_edge(\"translate_query\", \"transform_query\")\n", + "workflow.add_edge(\"transform_query\", \"retrieve_documents\")\n", + "workflow.add_edge(\"retrieve_documents\", \"answer_rag\")\n", + "workflow.add_edge(\"answer_rag\", END)\n", + "workflow.add_edge(\"answer_chitchat\", END)\n", + "workflow.add_edge(\"answer_ai_impact\", END)" + ] + }, + { + "cell_type": "markdown", + "id": "cef52a0b-7698-4481-bb5f-23585d8e426a", + "metadata": {}, + "source": [ + "## Compile and visualize the graph" + ] + }, + { + "cell_type": "code", + "execution_count": 128, + "id": "fa093ca6-59d3-4682-9af7-0b272bc1af86", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Compile\n", + "app = workflow.compile()\n", + "\n", + "from langchain_core.runnables.graph import CurveStyle, NodeColors, MermaidDrawMethod\n", + "from IPython.display import display, HTML, Image\n", + "\n", + "display(\n", + " Image(\n", + " app.get_graph(xray = True).draw_mermaid_png(\n", + " draw_method=MermaidDrawMethod.API,\n", + " )\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "827873ee-f74d-4ed6-a4f8-fc8a3ef6aea8", + "metadata": { + "tags": [] + }, + "source": [ + "## Test the graph" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7578ffac-0bbd-425c-aeb1-e5a7c190f558", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "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(\"\")" + ] + }, + { + "cell_type": "markdown", + "id": "6641ed5d", + "metadata": {}, + "source": [ + "# Retriever" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "id": "e7b74a25", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading embeddings model: BAAI/bge-base-en-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\theo.alvesdacosta\\Anaconda3\\envs\\py310\\lib\\site-packages\\huggingface_hub\\file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n", + " warnings.warn(\n", + "C:\\Users\\theo.alvesdacosta\\Anaconda3\\envs\\py310\\lib\\site-packages\\huggingface_hub\\file_download.py:1132: FutureWarning: `resume_download` is deprecated and will be removed in version 1.0.0. Downloads always resume when possible. If you want to force a new download, use `force_download=True`.\n", + " warnings.warn(\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)\n", + "# retriever = ClimateQARetriever(vectorstore=vectorstore,\n", + "# sources = [\"IPCC\"],\n", + "# # reports = ias_reports,\n", + "# min_size = 200,\n", + "# k_summary = 5,k_total = 100,\n", + "# threshold = 0.5)" + ] + }, + { + "cell_type": "code", + "execution_count": 282, + "id": "f1fe3448", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# query = \"What is the impact of El Nino on climate change ?\"\n", + "# query = \"Are human activities causing global warming?\"\n", + "# query = \"What does Morrison argue about indegenous knowledge (IK) and local knowledge (LK) on internal migration ?\"\n", + "query = \"What does Morrison argue about IK and LK on internal migration ?\"" + ] + }, + { + "cell_type": "code", + "execution_count": 283, + "id": "c1684d42", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "7b7b78a45db645b6a52c66c8298683bf", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Batches: 0%| | 0/1 [00:00 Introduction '}, 'index': 43, 'relevance_score': 0.05051767}, {'document': {'text': \"FAQ 10.3 (continued)\\nIn climate-sensitive livelihoods, an integrated approach informed by science that examines multiple stressors, along \\r\\nwith IKLK, appears to be of immense value. For instance, in building farmers' resilience, enhancing CCA, ensuring \\r\\ncross-cultural communication and promoting local skills, Indigenous People's intuitive thinking processes and \\r\\ngeographic knowledge of remote areas are very important.\\nThere is also a widespread recognition that IKLK are important in ensuring successful ecosystem-based adaptation \\r\\n(EbA). However, this recognition requires more practical application and translation into IKLK-driven EbA projects. \\r\\nFor instance, in the Coral Triangle region, creating historical timelines and mapping seasonal calendars can help to \\r\\ncapture IKLK while also feeding this information into climate science and climate adaptation planning. Identifying \\r\\nindigenous crop species for agriculture by using IKLK is already identified as an important way to localise climate \\r\\nadaptation: an example is Bali's vital contribution of moral economies to food systems which have long built \\r\\nresilience among groups of communities in terms of food security and sovereignty, even with the challenges faced \\r\\ndue to modernising of local food systems.\"}, 'index': 47, 'relevance_score': 0.05033063}, {'document': {'text': 'contextualisation is greatly needed. IK and LK will shape perceptions \\r\\nwhich are vital to managing climate risk in day-to-day activities and \\r\\nlonger-term actions.\\n 1.3.2.3 Indigenous Knowledge and Local Knowledge '}, 'index': 48, 'relevance_score': 0.04822634}, {'document': {'text': 'et al., 2020). There are examples of integrating IK and LK into resource \\r\\nmanagement systems and school curricula and in local institutions with \\r\\nexisting decision-making process to strengthen their capacity to address'}, 'index': 31, 'relevance_score': 0.03890198}, {'document': {'text': 'Humans create, use, and adapt knowledge systems to interact with \\r\\ntheir environment (Agrawal, 1995; Escobar, 2001; Sillitoe, 2007), and \\r\\nto observe and respond to change (Huntington, 2000; Gearheard et al., \\r\\n2013; Maldonado et al., 2016; Yeh, 2016). Indigenous knowledge \\r\\n(IK) refers to the understandings, skills, and philosophies developed \\r\\nby societies with long histories of interaction with their natural \\r\\nsurroundings. It is passed on from generation to generation, flexible, \\r\\nand adaptive in changing conditions, and increasingly challenged \\r\\nin the context of contemporary climate change. Local knowledge \\r\\n(LK) is what non-Indigenous communities, both rural and urban, \\r\\nuse on a daily and lifelong basis. It is multi-generational, embedded \\r\\nin community practices and cultures and adaptive to changing \\r\\nconditions (FAO, 2018). Each chapter of SROCC cites examples of IK \\r\\nand LK related to ocean and cryosphere change.'}, 'index': 40, 'relevance_score': 0.026205413}, {'document': {'text': 'In some specific contexts, climate change will also imply no-analogue \\r\\nchanges, such as rapid ice-melt and changing conditions in the Arctic \\r\\nthat have no precedent in the modern era, and could thus limit the \\r\\nrelevance of IK and LK in efforts to address significantly different \\r\\ncircumstances. Except in these specific situations, the literature \\n373373'}, 'index': 19, 'relevance_score': 0.020685459}, {'document': {'text': 'Observations: IK and LK observations document glacier and sea ice dynamics, permafrost dynamics, coastal processes, etc. \\r\\n(Sections 2.3.2.2.2, 2.5, 3.2.2, 3.4.1.1, 3.4.1.1, 3.4.1.2, 4.3.2.4.2, 5.2.3 and Box 2.4), and how they interact with social-cultural factors \\r\\n(West and Hovelsrud, 2010). Researchers have begun documenting IK and LK observations only recently (Sections 2.3.1.1, 3.2, 3.4, \\r\\n3.5, Box 4.4, 5.4.2.2.1).'}, 'index': 17, 'relevance_score': 0.01665704}, {'document': {'text': \"The understandings, skills and philosophies developed by societies \\r\\nwith long histories of interaction with their natural surroundings. \\r\\nFor many indigenous peoples, IK informs decision making about \\r\\nfundamental aspects of life, from day-to-day activities to longer term \\r\\nactions. This knowledge is integral to cultural complexes, which also \\r\\nencompass language, systems of classification, resource use practices, \\r\\nsocial interactions, values, ritual and spirituality. These distinctive \\r\\nways of knowing are important facets of the world's cultural diversity \\r\\n(UNESCO, 2018). See also Local knowledge (LK).\\n Indigenous knowledge (IK) \\n\\nIndustrial revolution \\nA period of rapid industrial growth with far-reaching social and eco\\x02nomic consequences, beginning in Britain during the second half of \\n Industrial revolution \\n\\nJustice Justice\\n\\x0c\\nis concerned with ensuring that people get what is due to them setting \\r\\nout the moral or legal principles of fairness and equity in the way \\r\\npeople are treated, often based on the ethics and values of society. \\n Justice Justice\\n\\x0c \\n\\nInternal variability \\nSee Climate variability.\"}, 'index': 46, 'relevance_score': 0.0062170783}, {'document': {'text': 'IKLK are crucial determinants of adaptation in agriculture for many \\r\\ncommunities globally. Indigenous Peoples have intimate knowledge \\r\\nabout their surrounding environment and are attentive observers of \\r\\nclimate changes. As a result, they are often best placed to enact successful \\r\\nadaptation measures, including shifting to different crops, changing \\r\\ncropping times or returning to traditional varieties (Mugambiwa, 2018; \\r\\nKamara et al., 2019; Nelson et al., 2019) (Section 4.8.4).'}, 'index': 36, 'relevance_score': 0.006168995}, {'document': {'text': 'Box 9.9 (continued)\\nMigration is a common response (Sitati et al., 2021) and may be an effective adaptive response to climate-induced conflict. Bosetti et al. \\r\\n(2018) find that countries with high emigration propensity display lower sensitivity of conflict to temperature, with no evidence of \\r\\ndetrimental impacts on the destination countries. IK has also been applied to enable adaptation amidst conflict, for example, in Libya, to \\r\\ndeal with erratic rainfall (Biagetti, 2017).'}, 'index': 20, 'relevance_score': 0.0056200363}, {'document': {'text': 'Internal migration, displacement and urbanisation\\nClimate change can have opposing influences on migration flows. Deteriorating economic conditions caused by climate hazards can \\r\\nencourage out-migration (Wiederkehr et al., 2018). However, these same economic losses undermine household resources needed to \\r\\nmigrate (Cattaneo and Peri, 2016). The net effect of these two forces leads to mixed results across study methodologies and contexts \\r\\n(Carleton and Hsiang, 2016; Borderon et al., 2019; Cattaneo et al., 2019; Hoffmann et al., 2020).'}, 'index': 9, 'relevance_score': 0.0040385914}, {'document': {'text': 'Small-scale climate-induced displacement within Europe occurs in the \\r\\naftermath of flood and drought disasters and over short distances \\r\\n(Cattaneo et al., 2019). The unequal distribution of future climate risks \\r\\n(Section 13.1) and adaptive capacity across European regions may \\r\\nincrease pressure for internal migration (Williges et al., 2017; Forzieri \\r\\net al., 2018). For instance, projected SLR (Section 13.2.1; Cross-Chapter \\r\\nBox SLR in Chapter 3) may result in planned relocation of coastal \\r\\nsettlements and inland migration in the UK, the Netherlands and the \\r\\nnorthern Mediterranean (Mulligan et al., 2014; Antonioli et al., 2017). \\r\\nThe number of people living in areas at risk in Europe is projected to \\r\\nincrease with future SSPs increasing exposure (Merkens et al., 2016; \\r\\nByers et al., 2018; Harrison et al., 2019).\\nA number of livelihoods maintaining unique cultures in Europe are'}, 'index': 44, 'relevance_score': 0.0019877742}, {'document': {'text': 'agreement that slow-onset climatic events (such as droughts and sea \\r\\nlevel rise) lead to long-distance internal displacement, more so than \\r\\nlocal or international migration (Kaczan and Orgill-Meyer, 2020; Silja, \\r\\n2017), while sea level rise is expected to lead to the displacement of \\r\\ncommunities along coastal zones, such as in Florida in the USA (Hauer, \\r\\n2017; Butler, Deyle and Mutnansky, 2016).'}, 'index': 24, 'relevance_score': 0.0013670257}, {'document': {'text': 'building from the framework outlined in SROCC (Crate et al., 2019), \\r\\nscientific, Indigenous knowledge (IK) and local knowledge (LK) systems \\r\\nare included in this assessment. Importantly, Indigenous authors led \\r\\nthe assessment of the impacts, adaptation and governance of climate \\r\\nchange for Indigenous Peoples, which is an important advance since \\r\\nAR5 and represents an important step towards Indigenous self\\x02determination in international assessment processes (Ford et al., 2012; \\r\\nFord et al., 2016; Hill et al., 2020).'}, 'index': 34, 'relevance_score': 0.00090044667}, {'document': {'text': 'Climate-related internal migration has been associated with the \\r\\nexperience of violence by migrants, the prolongation of conflicts in migrant \\r\\nreceiving areas and civil unrest in urban areas (medium agreement, low \\r\\nevidence). Research points to the potential for conflict to serve as an \\r\\nintervening factor between climate and migration. However, the nature \\r\\nof the relationship is diverse and context specific. For example, displaced \\r\\npeople and migrants may be associated with heightened social tensions \\n10871087'}, 'index': 22, 'relevance_score': 0.0006986757}, {'document': {'text': 'IK systems are diverse among and within Arctic Indigenous Peoples, and reflect deep and rich knowledge that situates and contextualises \\r\\nvalues, traditions, governance and practical ways of adapting to the ecosystem over millennia (Raymond-Yakoubian et al., 2017; Brattland \\r\\nand Mustonen, 2018). IK is a valuable source of knowledge; a method to detect change, evaluate risk and inform adaptation approaches; \\r\\nand a cultural ecological service (Brattland and Mustonen, 2018; Crate et al., 2019; Meredith et al., 2019) that is critical for decision \\r\\nmaking (Mustonen and Mustonen, 2016; Huntington et al., 2017). For instance, Kalaallit knowledge in Greenland has been used to detect \\r\\nand attribute long-term (over 50 years) marine change that reaches beyond scientific instrumental data (Mustonen et al., 2018b).'}, 'index': 27, 'relevance_score': 0.0006719278}, {'document': {'text': 'There is medium evidence (low agreement) about the effectiveness of \\r\\nmigration and planned relocation in reducing risk exposure. Evidence \\r\\non climate-driven internal migration shows that moving has mixed \\r\\noutcomes on risk reduction and adaptive capacity. On one hand, \\r\\nmigration can improve adaptive capacity by increasing incomes and \\r\\nremittances as well as diversifying livelihoods (Maharjan et al., 2020); \\r\\non the other, migration can expose migrants to new risks. For example, \\r\\nin Bangalore (India), migrants often face high exposure to localised \\r\\nflooding, insecure and unsafe livelihoods, and social exclusion, which \\r\\ncollectively shape their vulnerability (Michael et al., 2018; Singh and \\r\\nBasu, 2020). In greater Manila (the Philippines) and Chennai (India), \\r\\nplanned relocations to reduce disaster risk have often exacerbated \\r\\nvulnerability, due to relocation sites being in environmentally sensitive \\r\\nareas, inadequate livelihood opportunities and exposure to new risks \\r\\n(Meerow, 2017; Ajibade, 2019; Jain et al., 2021).'}, 'index': 29, 'relevance_score': 0.00036829791}, {'document': {'text': 'Migration, displacement and resettlement each play a foundational \\r\\nrole in differentiated vulnerability (see Cross-Chapter Box MIGRATE \\r\\nin Chapter 7). The relationship between migration and vulnerability \\r\\nis complex (robust evidence, high agreement), and is the first of the \\r\\nthree components discussed within this section. Climate change, as a \\r\\npush factor, is only one among multiple drivers (political, economic and \\r\\nsocial) related to environmental migration (Heslin et al., 2019; Planitz, \\r\\n2019; Luetz and Merson, 2019). There is consensus that it is difficult \\r\\nto pin climate change as the sole driver of internal (within national \\r\\nboundaries) rural to urban migration decisions owing to, among other \\r\\nfactors, the disconnect between national and international policies \\r\\n(Wilkinson et al., 2016), the lack of unifying theoretical frameworks \\r\\nand the complex interactions between climatic and other drivers \\r\\n(social, demographic, economic and political) at multiple scales'}, 'index': 26, 'relevance_score': 0.0001535624}, {'document': {'text': \"be designed to anticipate and address climate-induced internal mobility \\r\\n(Schwan and Yu, 2017). For instance, it does not offer a solution for \\r\\nmaintaining Indigenous cultures which are often strongly affected by, \\r\\nor even disrupted by, climate change (Olsson, 2014). Hence, an effective \\r\\napproach needs to combine different policy instruments to support \\r\\nprotection, adaptation and migration (O'Brien et al., 2018).\"}, 'index': 11, 'relevance_score': 0.00013032975}, {'document': {'text': 'Gemenne, F. and J. Blocher, 2017: How can migration serve adaptation to \\r\\nclimate change? Challenges to fleshing out a policy ideal. Geogr. J., 183(4), \\r\\n336-347, doi:10.1111/geoj.12205.\\nGemenne, F. and P. Brucker, 2015: From the guiding principles on internal \\r\\ndisplacement to the Nansen initiative: What the governance of'}, 'index': 13, 'relevance_score': 5.9209164e-05}, {'document': {'text': 'facilitate adaptive migration in the region in response to natural \\r\\nhazards including SLR (Burson and Bedford, 2015). There have been \\r\\ncases presented at the Immigration and Protection Tribunal of New \\r\\nZealand testing refugee claims associated with climate change from \\r\\nTuvaluan and i-Kiribati applicants, both citing environmental change \\r\\non their home islands as grounds for remaining in New Zealand. \\r\\nOne applicant was successful in the quest to remain in New Zealand \\r\\non humanitarian grounds, but not on the grounds of refugee status \\r\\n(Farbotko et al., 2016).\\n 4.4.2.6.6 Governance of retreat '}, 'index': 42, 'relevance_score': 4.5753914e-05}, {'document': {'text': 'while these traditional economies have undergone rapid change due \\r\\nto non-climate drivers, their land uses, observational frameworks and \\r\\ncultural matrixes remain of high importance in the context of climate \\r\\nchange. Endemic responses (self-agency from within the culture) \\r\\nand Indigenous governance enable adaptation to the rapid and \\r\\naccelerating changes under way (Mustonen et al., 2018a). Therefore, \\r\\ncommunity-based monitoring and inclusion of IK in dialogue with \\r\\nscience has been an effective mechanism to detect and respond to \\r\\nclimate change.'}, 'index': 45, 'relevance_score': 3.734357e-05}, {'document': {'text': \"migration (Ober, 2019). Importantly, there is low agreement on projected numbers (see Boas et al., 2019) with uncertainties around how \\r\\nlocal policies and individual behaviours will shape migration choices. Even in high-risk places, people might choose to stay or be unable \\r\\nto move, resulting in 'trapped' populations (Zickgraf, 2019; Ayeb-Karlsson et al., 2020). There is currently inadequate evidence to ascertain \\r\\nthe nature and numbers of trapped populations currently or in the future.\"}, 'index': 28, 'relevance_score': 1.9988918e-05}, {'document': {'text': 'Key messages on migration in this report\\r\\nMigration is a universal strategy that individuals and households undertake to improve well-being and livelihoods in response to \\r\\neconomic uncertainty, political instability and environmental change (high confidence). Migration, displacement and immobility that \\r\\noccur in response to climate hazards are assessed in general in Chapter 7, with specific sectoral and regional dimensions of climate\\x02related migration assessed in sectoral and regional Chapters 5 to 15 (Table MIGRATE.1 in Chapter 7) and involuntary immobility and \\r\\ndisplacement being identified as representative key risks in Chapter 16 (Sections 16.2.3.8, 16.5.2.3.8). Since AR5 there has been a \\r\\nconsiderable expansion in research on climate-migration linkages, with five key messages from the present assessment report warranting \\r\\nemphasis.'}, 'index': 16, 'relevance_score': 1.76402e-05}, {'document': {'text': 'Migration has been highly politicised, and climate-related immigration has been conceptualised in public and media discourse as a \\r\\npotential threat which limits adaptation feasibility (Telford, 2018; Honarmand Ebrahimi and Ossewaarde, 2019; McLeman, 2019; Wiegel \\r\\net al., 2019; Hauer et al., 2020). Existing international agreements provide potential frameworks for climate-related migration to benefit \\r\\nadaptive capacity and sustainable development (Warner, 2018; Kalin, 2019). However, agreements to facilitate temporary or circular \\r\\nmigration and remittances are often informal and limited in scope (Webber and Donner, 2017b; Margaret and Matias, 2020) and migrant \\r\\nreceiving areas, particularly urban areas, can be better assisted to prepare for population change (Deshpande et al., 2019; Adger et al., \\r\\n2020; Hauer et al., 2020). Policies and planning are lacking that would ensure that positive migration outcomes for sending and receiving'}, 'index': 39, 'relevance_score': 1.5567455e-05}, {'document': {'text': 'A.5.7 Changes in climate can amplify environmentally induced migration both within countries and across borders (medium \\r\\nconfidence), reflecting multiple drivers of mobility and available adaptation measures (high confidence). Extreme weather \\r\\nand climate or slow-onset events may lead to increased displacement, disrupted food chains, threatened livelihoods (high \\r\\nconfidence), and contribute to exacerbated stresses for conflict (medium confidence). {3.4.2, 4.7.3, 5.2.3, 5.2.4, 5.2.5, 5.8.2, \\r\\n7.2.2, 7.3.1}'}, 'index': 4, 'relevance_score': 1.4971084e-05}, {'document': {'text': \"C.2.12 Increasing adaptive capacities minimises the negative impacts of climate-related displacement and involuntary migration for migrants \\r\\nand sending and receiving areas (high confidence). This improves the degree of choice under which migration decisions are made, \\r\\nensuring safe and orderly movements of people within and between countries (high confidence). Some development reduces underlying \\r\\nvulnerabilities associated with conflict, and adaptation contributes by reducing the impacts of climate change on climate sensitive \\r\\ndrivers of conflict (high confidence). Risks to peace are reduced, for example, by supporting people in climate-sensitive economic \\r\\nactivities (medium confidence) and advancing women's empowerment (high confidence). {7.4, Box 9.8, Box 10.2, 12.5, CCB FEASIB, \\r\\nCCB MIGRATE}\\nSPMSPM\\n\\x0c\\n45 The term 'response' is used here instead of adaptation because some responses, such as retreat, may or may not be considered to be adaptation.\\n2525\"}, 'index': 3, 'relevance_score': 1.2805474e-05}, {'document': {'text': 'For cross-cutting options, the main knowledge gaps identified are socio-cultural acceptability for social safety nets. While the evidence on \\r\\nresettlement, relocation and migration is large and growing, there is disagreement on several indicators, marking the need for more evidence \\r\\nsynthesis. Geophysical feasibility for resettlement, relocation and migration has limited evidence, but is an emerging area of research.\\nIn general, throughout most of the options, there is significantly less literature from the regions of Central and South America, and West \\r\\nand Central Asia, as compared with other world regions.'}, 'index': 30, 'relevance_score': 8.8011e-06}, {'document': {'text': \"The success of climate-related migration as an adaptive response is \\r\\nshaped by how migrants are perceived and how policy discussions \\r\\nare framed (high agreement, medium evidence). The possibility that \\r\\nclimate change may enlarge international migrant flows has in some \\r\\npolicy discussions been interpreted as a potential threat to the security \\r\\nof destination countries (Sow et al., 2016; Telford, 2018), but there is \\r\\nlittle empirical evidence in peer-reviewed literature assessed for this \\r\\nchapter of climate migrants posing significant threats to security at \\r\\nstate or international levels. There is also an inconsistency between \\r\\nframing in some policy discussions of undocumented migration \\r\\n(climate-related and other forms) as being 'illegal' and the objectives \\r\\nof the Global Compact on Safe, Orderly and Regular Migration and \\r\\nthe Global Compact on Refugees (McLeman, 2019). Although climate\\x02related migrants are not officially recognised as refugees under the \\r\\n1951 Convention relating to the Status of Refugees, terms such as \\r\\n'climate refugees' are common in popular media and some policy\"}, 'index': 23, 'relevance_score': 8.267873e-06}, {'document': {'text': 'Figure SPM.2 (continued): Migration refers to an increase or decrease in net migration, not to beneficial/adverse value. Impacts on tourism refer \\r\\nto the operating conditions for the tourism sector. Cultural services include cultural identity, sense of home, and spiritual, intrinsic and aesthetic \\r\\nvalues, as well as contributions from glacier archaeology. The underlying information is given for land regions in tables SM2.6, SM2.7, SM2.8, SM3.8, \\r\\nSM3.9, and SM3.10, and for ocean regions in tables SM5.10, SM5.11, SM3.8, SM3.9, and SM3.10. {2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.3.6, 2.3.7,'}, 'index': 1, 'relevance_score': 5.2144983e-06}, {'document': {'text': '2 including Hindu Kush, Karakoram, Hengduan Shan, and Tien Shan; 3\\r\\n tropical Andes, Mexico, eastern Africa, and Indonesia; 4 includes Finland, Norway, and Sweden; 5 includes adjacent areas in Yukon Territory and British Columbia, Canada; 6 Migration refers to an \\r\\n increase or decrease in net migration, not to beneficial/adverse value.'}, 'index': 0, 'relevance_score': 5.173919e-06}, {'document': {'text': 'Singh, C. and R. Basu, 2020: Moving in and out of vulnerability: Interrogating \\r\\nmigration as an adaptation strategy along a rural-urban continuum in India. \\r\\nGeogr J, 186(1), 87-102, doi:10.1111/geoj.12328.\\n25332533'}, 'index': 37, 'relevance_score': 3.7853251e-06}, {'document': {'text': 'AR5 (Adger and Pulhin, 2014) found links between climate change \\r\\nand migration in general (medium evidence, high agreement), but \\r\\nprovided no assessment of climate-induced hydrological changes and \\r\\nmigration specifically. Likewise, SRCCL (Mirzabaev et al., 2019; Olsson \\r\\net al., 2020) and SROCC (Hock et al., 2019b) noted that migration is \\r\\ncomplex and that migration decisions and outcomes are influenced \\r\\nby a combination of social, demographic, economic, environmental \\r\\nand political factors and contexts (see Cross-Chapter Box MIGRATE in \\r\\nChapter 7). This chapter confirms this evidence, focusing on climate\\x02induced hydrological changes.'}, 'index': 35, 'relevance_score': 2.769406e-06}, {'document': {'text': 'A.7.3 Arctic residents, especially Indigenous peoples, have adjusted the timing of activities to respond \\r\\nto changes in seasonality and safety of land, ice, and snow travel conditions. Municipalities and industry are beginning \\r\\nto address infrastructure failures associated with flooding and thawing permafrost and some coastal communities \\r\\nhave planned for relocation (high confidence). Limited funding, skills, capacity, and institutional support to engage \\r\\nmeaningfully in planning processes have challenged adaptation (high confidence). {3.5.2, 3.5.4, Cross-Chapter Box 9}'}, 'index': 2, 'relevance_score': 4.0525455e-07}], 'meta': {'api_version': {'version': '1'}, 'billed_units': {'search_units': 1}}}\n", + "CPU times: total: 391 ms\n", + "Wall time: 790 ms\n" + ] + } + ], + "source": [ + "%%time\n", + "results = ranker.rank(query=query, docs=input_docs)" + ] + }, + { + "cell_type": "code", + "execution_count": 291, + "id": "3b758eaf-631e-4d8b-9069-7bc376b67bec", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from scipy.special import expit, logit" + ] + }, + { + "cell_type": "code", + "execution_count": 293, + "id": "7e485d5c-3edc-453a-a2c6-a5a6d8401944", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Attention to IK and LK in understanding global change is relatively recent, but important (high confidence). For instance, in 1980, \n", + "Alaskan Inuit formed the Alaska Eskimo Whaling Commission in response to the International Whaling Commission's science that \n", + "underestimated the Bowhead whale population and, in 1977, banned whaling as a result (Huntington, 1992). The Commission \n", + "facilitated an improved population count using a study design based on IK, which indicated a harvestable population (Huntington, \n", + "2000). There are various approaches for utilising multiple knowledge systems. For example, the Mi'kmaw Elders' concept of Two Eyed \n", + "Seeing: which is 'learning to see from one eye with the strengths of Indigenous knowledges, and from the other eye with the strengths \n", + "of Western [scientific] knowledges, and to use both together, for the benefit of all' (Bartlett et al., 2012), to preserve the distinctiveness \n", + "of each, while allowing for fuller understandings and actions (Bartlett et al., 2012: 334).\n", + "Knowledge Co-production\n", + ".. DOC - 38 VS 0\n", + ".. SCORE - 0.31795546 VS 0.559207737\n", + "--------------------------------------------------\n", + "Both IK and LK are increasingly used in climate change research \n", + "and policy efforts to engage affected communities to facilitate \n", + "site-specific understandings of, and responses to, the local effects of \n", + "climate change (Hiwasaki et al., 2014; Hou et al., 2017; Mekonnen \n", + "et al., 2017). IK and LK enrich CRDPs particularly by engaging \n", + "multiple stakeholders and the diversity of socioeconomic, cultural \n", + "and linguistic contexts of populations affected by changes in the \n", + "ocean and cryosphere (Cross-Chapter Box 4 in Chapter 1).\n", + ".. DOC - 6 VS 1\n", + ".. SCORE - 0.20402454 VS 0.598627627\n", + "--------------------------------------------------\n", + "Knowledge Holders' Recommendations for Utilising IK and LK in Assessment Reports\n", + "Perspectives from the Himalayas: IK and LK holders in the Himalayas have conducted long-term systematic observations in these remote \n", + "areas for centuries. Contemporary IK details change in phenology, weather patterns, and flora and fauna species, which enriches scientific \n", + "knowledge of glacial retreat and potential glacial lake outbursts (Sherpa, 2014). The scientific community can close many knowledge gaps \n", + "by engaging IK and LK holders as counterparts. Suggestions towards this objective are to work with affected communities to elicit their \n", + "knowledge of change, especially IK and LK holders with more specialised knowledge (farmers, herders, mountain guides, etc.), and use \n", + "location- and culture-specific approaches to share scientific knowledge and use it with IK and LK.\n", + ".. DOC - 5 VS 2\n", + ".. SCORE - 0.18111832 VS 0.604172826\n", + "--------------------------------------------------\n", + "IK and LK stand on their own, and also enrich and complement each \n", + "other and scientific knowledge. For example, Australian Aboriginal \n", + "groups' Indigenous oral history provides empirical corroboration of \n", + "the sea level rise 7,000 years ago (Nunn and Reid, 2016), and their \n", + "seasonal calendars direct hunting, fishing, planting, conservation and \n", + "detection of unusual changes today (Green et al., 2010). LK works in \n", + "tandem with scientific knowledge, for example, as coastal Australian \n", + "communities consider the impacts and trade-offs of sea level rise \n", + "(O'Neill and Graham, 2016).\n", + "1.8.3 The Role of Knowledge in People's Responses \n", + "to Climate, Ocean and Cryosphere Change\n", + ".. DOC - 25 VS 3\n", + ".. SCORE - 0.16451646 VS 0.5696823\n", + "--------------------------------------------------\n", + "use of IK and LK to be protected and validated by Indigenous Peoples \n", + "themselves and their inclusion as active participants in the assessment \n", + "(Klenk et al., 2017). Paying special attention to the mechanism \n", + "whereby some forms of knowledge have been excluded in previous \n", + "reports--such as the use of technical knowledge or acronyms, or the \n", + "deployment of discipline-specific validation mechanism--is a first step\n", + ".. DOC - 14 VS 4\n", + ".. SCORE - 0.16344544 VS 0.581110835\n", + "--------------------------------------------------\n", + "Responses: Either IK or LK alone (Yager, 2015), or used with scientific knowledge (Nusser and Schmidt, 2017) inform responses \n", + "(Sections 2.3.1.3.2, 2.3.2.2.2, 3.5.2, 3.5.4, 4.4.2, Box 4.4, 5.5.2, 6.8.4, 6.9.2). Utilising multiple knowledge systems requires continued \n", + "development, accumulation, and transmission of IK, LK and scientific knowledge towards understanding the ecological and cultural\n", + "context of diverse peoples (Crate and Fedorov, 2013; Jones et al., 2016), resulting in the incorporation of relevant priorities and \n", + "contexts into adaptation responses (Sections 3.5.2, 3.5.4, 4.4.4, 5.5.2, 6.8.4, 6.9.2, Box 2.3).\n", + ".. DOC - 15 VS 5\n", + ".. SCORE - 0.1603975 VS 0.579450667\n", + "--------------------------------------------------\n", + "Scientific knowledge, IK and LK can complement one another by engaging both quantitative data and qualitative information, \n", + "including people's observations, responses and values (Huntington, 2000; Crate and Fedorov, 2013; Burnham et al., 2016; Figure CB4.1). \n", + "However, this process of knowledge co-production is complex (Jasanoff, 2004) and IK and LK possess uncertainties of a different\n", + "nature from those of scientific knowledge (Kahneman and Egan, 2011), often resulting in the dominance of scientific knowledge over \n", + "IK and LK in policy, governance and management (Mistry and Berardi, 2016). Working across disciplines (interdisciplinarity; Strang, \n", + "2009), and/or engaging multiple stakeholders (transdisciplinarity; Klenk and Meehan, 2015; Crate et al., 2017), are approaches used \n", + "to bridge knowledge systems. The use of all knowledge relevant to a specific challenge can involve approaches such as: scenario\n", + ".. DOC - 12 VS 6\n", + ".. SCORE - 0.15090263 VS 0.584264696\n", + "--------------------------------------------------\n", + "While scientific knowledge is vital, IK and LK are also necessary for \n", + "understanding and acting effectively on climate risk (IPCC, 2014a; IPCC, \n", + "2019b, SROCC Chapter 1; see also Section 2.4). Indigenous knowledge\n", + "refers to the understandings, skills and philosophies developed by \n", + "societies with long histories of interaction with their natural surroundings \n", + "(IPCC, 2019a). Local knowledge is defined as the understandings and \n", + "skills developed by individuals and populations, specific to the places \n", + "where they live (IPCC, 2019a). These definitions relate to the debates on \n", + "the world's cultural diversity (UNESCO, 2018a), which are increasingly \n", + "connected to climate change debates (UNESCO, 2018b). However, there \n", + "is agreement that, in the same way that there is not a unique definition \n", + "of Indigenous Peoples because it depends on self-determination (see \n", + "below), there is not a single definition of neither IK and LK. Therefore,\n", + ".. DOC - 18 VS 7\n", + ".. SCORE - 0.13730095 VS 0.576038122\n", + "--------------------------------------------------\n", + "Framing and Context of the Report\n", + "natural systems (Wohling, 2009). Some forms of IK and LK are \n", + "also not amenable to being captured in peer-reviewed articles or \n", + "published reports, and efforts to translate IK and LK into qualitative \n", + "or quantitative data may mute the multidimensional, dynamic and \n", + "nuanced features that give IK and LK meaning (DeWalt, 1994; \n", + "Roncoli et al., 2009; Goldman and Lovell, 2017). Nonetheless, efforts \n", + "to collaborate with IK and LK knowledge holders (Baptiste et al., \n", + "2017; Karki et al., 2017; Lavrillier and Gabyshev, 2017; Roue et al., \n", + "2017; David-Chavez and Gavin, 2018) and to systematically assess \n", + "published IK and LK literature in parallel with scientific knowledge \n", + "result in increasingly effective usage of the multiple knowledge \n", + "systems to better characterise and address ocean and cryosphere\n", + ".. DOC - 32 VS 8\n", + ".. SCORE - 0.13523208 VS 0.563068\n", + "--------------------------------------------------\n", + "Cavedon-Capdeville, 2017; Amar-Amar et al., 2019; Gemenne et al., \n", + "2020). In migration or displacement driven by climate effects, women \n", + "are prone to lose their leadership, autonomy and voice, especially in \n", + "new organisational structures imposed by authorities. This is especially \n", + "the case in temporary accommodation camps created after disasters, \n", + "exacerbating existing differentiated vulnerabilities (Aldunce Ide et al., \n", + "2020). International migration has become more dangerous and \n", + "difficult as border controls have become stricter, but programmes \n", + "such as one to help temporary agricultural workers from Guatemala \n", + "to Canada have proven successful (Gabriel and Macdonald, 2018). At \n", + "the same time, emigration may lead to the loss of IKLK for adaptation \n", + "(Moreno et al., 2020b).\n", + ".. DOC - 33 VS 9\n", + ".. SCORE - 0.12721826 VS 0.562679946\n", + "--------------------------------------------------\n", + "Cross-Chapter Box 4 (continued)\n", + "IK and LK in the Pacific: Historically, Pacific communities, who depend on marine resources for essential protein (Pratchett et al., 2011), \n", + "use LK for management systems to determine access to, and closure of, fishing grounds, the latter to respect community deaths, sacred \n", + "sites, and customary feasts. Today a hybrid system, Locally Managed Marine Protected Areas (LMMAs), is common and integrates local \n", + "governance with NGO or government agency interventions (Jupiter et al., 2014). The expected benefits of these management systems\n", + "support climate change adaptation through sustainable resource management (Roberts et al., 2017) and mitigation through improved \n", + "carbon storage (Vierros, 2017). The challenges to wider use include both how to upscale LMMAs (Roberts et al., 2017; Vierros, 2017), \n", + "and how to assess them as climate change adaptation and mitigation solutions (Rohe et al., 2017; Section 5.4).\n", + ".. DOC - 21 VS 10\n", + ".. SCORE - 0.12074951 VS 0.574164033\n", + "--------------------------------------------------\n", + "suggests that the loss of IK and LK, and related social norms and \n", + "mechanisms, will increase populations' exposure and vulnerability to \n", + "SLR impacts (Nakashima et al., 2012). The literature notably points \n", + "out that modern, externally-driven socioeconomic dynamics, such as \n", + "the introduction of imported food (noodles, rice, canned meat and \n", + "fish, etc.), diminish the cultural importance of IK-based practices and \n", + "diets locally, together with introducing dependency on monetisation \n", + "and external markets (Hay, 2013; Campbell, 2015).\n", + ".. DOC - 10 VS 11\n", + ".. SCORE - 0.11436853 VS 0.58656317\n", + "--------------------------------------------------\n", + "Indigenous knowledge and local knowledge (IK and LK) can \n", + "provide important understanding for acting effectively on \n", + "climate risk and can help diversify knowledge that may enrich \n", + "adaptation policy and practice (high confidence). Indigenous \n", + "Peoples have been faced with adaptation challenges for centuries and \n", + "have developed strategies for resilience in changing environments \n", + "that can enrich and strengthen current and future adaptation efforts. \n", + "Valuing IK and LK is also important for recognition, a key component \n", + "of climate justice. {1.3.2.3}\n", + "Monitoring and evaluation (M&E) of adaptation refers to a \n", + "broad range of activities necessary for tracking adaptation \n", + "progress over time, improving adaptation effectiveness and \n", + "successful iterative risk management. Monitoring usually refers \n", + "to continuous information gathering, whereas evaluation denotes \n", + "more comprehensive assessments of effectiveness and equity, often \n", + "resulting in recommendations for decision makers. In some literatures, \n", + "M&E refers solely to efforts undertaken after implementation. In\n", + ".. DOC - 41 VS 12\n", + ".. SCORE - 0.09790669 VS 0.55755043\n", + "--------------------------------------------------\n", + "Governance: Using IK and LK in climate decision and policy making includes customary Indigenous and local institutions (Karlsson and \n", + "Hovelsrud, 2015), as in the case when Indigenous communities are engaged in an integrated approach for disaster risk reduction in \n", + "response to cryosphere hazards (Carey et al., 2015). The effective engagement of communities and stakeholders in decisions requires \n", + "using the multiple knowledge systems available (Chilisa, 2011; Sections 2.3.1.3.2, 2.3.2.3, 3.5.4, 4.4.4, Table 4.4, 5.5.2, 6.8.4, 6.9.2; \n", + "Sections 2.3.1.3.2, 2.3.2.3, 3.5.4, 4.4.4, Table 4.9, 5.5.2, 6.8.4, 6.9.2).\n", + "104104\n", + ".. DOC - 7 VS 13\n", + ".. SCORE - 0.090896755 VS 0.596558452\n", + "--------------------------------------------------\n", + "Enhancing Adaptive Capacity through IK and LK and CBA: Lessons Learned\n", + "Useful lessons can be drawn from experience to effectively incorporate IK, LK and CBA in adaptation strategies. A number of barriers \n", + "to adaptation have also been recognised (Figure Box CCP7.1.1). Considering that IK and LK is increasingly threatened by colonisation, \n", + "acculturation, dispossession of land rights, and environmental and social change, among others [AR5 WGII Section 12.3.3 (Adger et al. \n", + "2014); SR15Section 4.3.5 (de Coninck et al. 2018)] Seppala (2009) highlighted the importance of supporting community efforts to \n", + "document, vitalise and protect it. It is essential to consider goals, identity and livelihood priorities of Indigenous Peoples and local \n", + "communities, including those beyond natural resource management (Reid et al., 2009; Diamond and Ansharyani, 2018; Zavaleta et al., \n", + "2018). Adaptation processes are more likely to be transformational when they are locally driven (medium confidence: medium evidence,\n", + ".. DOC - 8 VS 14\n", + ".. SCORE - 0.073430054 VS 0.590297639\n", + "--------------------------------------------------\n", + "Introduction\n", + "This Cross-Chapter Box describes how Indigenous knowledge (IK) and local knowledge (LK) are different and unique sources \n", + "of knowledge, which are critical to observing, responding to, and governing the ocean and cryosphere in a changing climate (See SROCC \n", + "Annex I: Glossary for definitions). International organisations recognise the importance of IK and LK in global assessments, including\n", + "UN Environment, UNDP, UNESCO, IPBES, and the World Bank. IK and LK are referenced throughout SROCC, understanding that \n", + "many climate change impacts affect, and will require responses from, local communities (both Indigenous and non-Indigenous) who\n", + "maintain a close connection with the ocean and/or cryosphere.\n", + " Introduction \n", + ".. DOC - 43 VS 15\n", + ".. SCORE - 0.05051767 VS 0.556687832\n", + "--------------------------------------------------\n", + "FAQ 10.3 (continued)\n", + "In climate-sensitive livelihoods, an integrated approach informed by science that examines multiple stressors, along \n", + "with IKLK, appears to be of immense value. For instance, in building farmers' resilience, enhancing CCA, ensuring \n", + "cross-cultural communication and promoting local skills, Indigenous People's intuitive thinking processes and \n", + "geographic knowledge of remote areas are very important.\n", + "There is also a widespread recognition that IKLK are important in ensuring successful ecosystem-based adaptation \n", + "(EbA). However, this recognition requires more practical application and translation into IKLK-driven EbA projects. \n", + "For instance, in the Coral Triangle region, creating historical timelines and mapping seasonal calendars can help to \n", + "capture IKLK while also feeding this information into climate science and climate adaptation planning. Identifying \n", + "indigenous crop species for agriculture by using IKLK is already identified as an important way to localise climate \n", + "adaptation: an example is Bali's vital contribution of moral economies to food systems which have long built \n", + "resilience among groups of communities in terms of food security and sovereignty, even with the challenges faced \n", + "due to modernising of local food systems.\n", + ".. DOC - 47 VS 16\n", + ".. SCORE - 0.05033063 VS 0.555101871\n", + "--------------------------------------------------\n", + "contextualisation is greatly needed. IK and LK will shape perceptions \n", + "which are vital to managing climate risk in day-to-day activities and \n", + "longer-term actions.\n", + " 1.3.2.3 Indigenous Knowledge and Local Knowledge \n", + ".. DOC - 48 VS 17\n", + ".. SCORE - 0.04822634 VS 0.554959059\n", + "--------------------------------------------------\n", + "et al., 2020). There are examples of integrating IK and LK into resource \n", + "management systems and school curricula and in local institutions with \n", + "existing decision-making process to strengthen their capacity to address\n", + ".. DOC - 31 VS 18\n", + ".. SCORE - 0.03890198 VS 0.563686252\n", + "--------------------------------------------------\n", + "Humans create, use, and adapt knowledge systems to interact with \n", + "their environment (Agrawal, 1995; Escobar, 2001; Sillitoe, 2007), and \n", + "to observe and respond to change (Huntington, 2000; Gearheard et al., \n", + "2013; Maldonado et al., 2016; Yeh, 2016). Indigenous knowledge \n", + "(IK) refers to the understandings, skills, and philosophies developed \n", + "by societies with long histories of interaction with their natural \n", + "surroundings. It is passed on from generation to generation, flexible, \n", + "and adaptive in changing conditions, and increasingly challenged \n", + "in the context of contemporary climate change. Local knowledge \n", + "(LK) is what non-Indigenous communities, both rural and urban, \n", + "use on a daily and lifelong basis. It is multi-generational, embedded \n", + "in community practices and cultures and adaptive to changing \n", + "conditions (FAO, 2018). Each chapter of SROCC cites examples of IK \n", + "and LK related to ocean and cryosphere change.\n", + ".. DOC - 40 VS 19\n", + ".. SCORE - 0.026205413 VS 0.557900667\n", + "--------------------------------------------------\n", + "In some specific contexts, climate change will also imply no-analogue \n", + "changes, such as rapid ice-melt and changing conditions in the Arctic \n", + "that have no precedent in the modern era, and could thus limit the \n", + "relevance of IK and LK in efforts to address significantly different \n", + "circumstances. Except in these specific situations, the literature \n", + "373373\n", + ".. DOC - 19 VS 20\n", + ".. SCORE - 0.020685459 VS 0.574387312\n", + "--------------------------------------------------\n", + "Observations: IK and LK observations document glacier and sea ice dynamics, permafrost dynamics, coastal processes, etc. \n", + "(Sections 2.3.2.2.2, 2.5, 3.2.2, 3.4.1.1, 3.4.1.1, 3.4.1.2, 4.3.2.4.2, 5.2.3 and Box 2.4), and how they interact with social-cultural factors \n", + "(West and Hovelsrud, 2010). Researchers have begun documenting IK and LK observations only recently (Sections 2.3.1.1, 3.2, 3.4, \n", + "3.5, Box 4.4, 5.4.2.2.1).\n", + ".. DOC - 17 VS 21\n", + ".. SCORE - 0.01665704 VS 0.576289952\n", + "--------------------------------------------------\n", + "The understandings, skills and philosophies developed by societies \n", + "with long histories of interaction with their natural surroundings. \n", + "For many indigenous peoples, IK informs decision making about \n", + "fundamental aspects of life, from day-to-day activities to longer term \n", + "actions. This knowledge is integral to cultural complexes, which also \n", + "encompass language, systems of classification, resource use practices, \n", + "social interactions, values, ritual and spirituality. These distinctive \n", + "ways of knowing are important facets of the world's cultural diversity \n", + "(UNESCO, 2018). See also Local knowledge (LK).\n", + " Indigenous knowledge (IK) \n", + "\n", + "Industrial revolution \n", + "A period of rapid industrial growth with far-reaching social and eco\u0002nomic consequences, beginning in Britain during the second half of \n", + " Industrial revolution \n", + "\n", + "Justice Justice\n", + "\f", + "\n", + "is concerned with ensuring that people get what is due to them setting \n", + "out the moral or legal principles of fairness and equity in the way \n", + "people are treated, often based on the ethics and values of society. \n", + " Justice Justice\n", + "\f", + " \n", + "\n", + "Internal variability \n", + "See Climate variability.\n", + ".. DOC - 46 VS 22\n", + ".. SCORE - 0.0062170783 VS 0.555593371\n", + "--------------------------------------------------\n", + "IKLK are crucial determinants of adaptation in agriculture for many \n", + "communities globally. Indigenous Peoples have intimate knowledge \n", + "about their surrounding environment and are attentive observers of \n", + "climate changes. As a result, they are often best placed to enact successful \n", + "adaptation measures, including shifting to different crops, changing \n", + "cropping times or returning to traditional varieties (Mugambiwa, 2018; \n", + "Kamara et al., 2019; Nelson et al., 2019) (Section 4.8.4).\n", + ".. DOC - 36 VS 23\n", + ".. SCORE - 0.006168995 VS 0.559936762\n", + "--------------------------------------------------\n", + "Box 9.9 (continued)\n", + "Migration is a common response (Sitati et al., 2021) and may be an effective adaptive response to climate-induced conflict. Bosetti et al. \n", + "(2018) find that countries with high emigration propensity display lower sensitivity of conflict to temperature, with no evidence of \n", + "detrimental impacts on the destination countries. IK has also been applied to enable adaptation amidst conflict, for example, in Libya, to \n", + "deal with erratic rainfall (Biagetti, 2017).\n", + ".. DOC - 20 VS 24\n", + ".. SCORE - 0.0056200363 VS 0.574316561\n", + "--------------------------------------------------\n", + "Internal migration, displacement and urbanisation\n", + "Climate change can have opposing influences on migration flows. Deteriorating economic conditions caused by climate hazards can \n", + "encourage out-migration (Wiederkehr et al., 2018). However, these same economic losses undermine household resources needed to \n", + "migrate (Cattaneo and Peri, 2016). The net effect of these two forces leads to mixed results across study methodologies and contexts \n", + "(Carleton and Hsiang, 2016; Borderon et al., 2019; Cattaneo et al., 2019; Hoffmann et al., 2020).\n", + ".. DOC - 9 VS 25\n", + ".. SCORE - 0.0040385914 VS 0.587096512\n", + "--------------------------------------------------\n", + "Small-scale climate-induced displacement within Europe occurs in the \n", + "aftermath of flood and drought disasters and over short distances \n", + "(Cattaneo et al., 2019). The unequal distribution of future climate risks \n", + "(Section 13.1) and adaptive capacity across European regions may \n", + "increase pressure for internal migration (Williges et al., 2017; Forzieri \n", + "et al., 2018). For instance, projected SLR (Section 13.2.1; Cross-Chapter \n", + "Box SLR in Chapter 3) may result in planned relocation of coastal \n", + "settlements and inland migration in the UK, the Netherlands and the \n", + "northern Mediterranean (Mulligan et al., 2014; Antonioli et al., 2017). \n", + "The number of people living in areas at risk in Europe is projected to \n", + "increase with future SSPs increasing exposure (Merkens et al., 2016; \n", + "Byers et al., 2018; Harrison et al., 2019).\n", + "A number of livelihoods maintaining unique cultures in Europe are\n", + ".. DOC - 44 VS 26\n", + ".. SCORE - 0.0019877742 VS 0.556478\n", + "--------------------------------------------------\n", + "agreement that slow-onset climatic events (such as droughts and sea \n", + "level rise) lead to long-distance internal displacement, more so than \n", + "local or international migration (Kaczan and Orgill-Meyer, 2020; Silja, \n", + "2017), while sea level rise is expected to lead to the displacement of \n", + "communities along coastal zones, such as in Florida in the USA (Hauer, \n", + "2017; Butler, Deyle and Mutnansky, 2016).\n", + ".. DOC - 24 VS 27\n", + ".. SCORE - 0.0013670257 VS 0.569957197\n", + "--------------------------------------------------\n", + "building from the framework outlined in SROCC (Crate et al., 2019), \n", + "scientific, Indigenous knowledge (IK) and local knowledge (LK) systems \n", + "are included in this assessment. Importantly, Indigenous authors led \n", + "the assessment of the impacts, adaptation and governance of climate \n", + "change for Indigenous Peoples, which is an important advance since \n", + "AR5 and represents an important step towards Indigenous self\u0002determination in international assessment processes (Ford et al., 2012; \n", + "Ford et al., 2016; Hill et al., 2020).\n", + ".. DOC - 34 VS 28\n", + ".. SCORE - 0.00090044667 VS 0.562424958\n", + "--------------------------------------------------\n", + "Climate-related internal migration has been associated with the \n", + "experience of violence by migrants, the prolongation of conflicts in migrant \n", + "receiving areas and civil unrest in urban areas (medium agreement, low \n", + "evidence). Research points to the potential for conflict to serve as an \n", + "intervening factor between climate and migration. However, the nature \n", + "of the relationship is diverse and context specific. For example, displaced \n", + "people and migrants may be associated with heightened social tensions \n", + "10871087\n", + ".. DOC - 22 VS 29\n", + ".. SCORE - 0.0006986757 VS 0.573805273\n", + "--------------------------------------------------\n", + "IK systems are diverse among and within Arctic Indigenous Peoples, and reflect deep and rich knowledge that situates and contextualises \n", + "values, traditions, governance and practical ways of adapting to the ecosystem over millennia (Raymond-Yakoubian et al., 2017; Brattland \n", + "and Mustonen, 2018). IK is a valuable source of knowledge; a method to detect change, evaluate risk and inform adaptation approaches; \n", + "and a cultural ecological service (Brattland and Mustonen, 2018; Crate et al., 2019; Meredith et al., 2019) that is critical for decision \n", + "making (Mustonen and Mustonen, 2016; Huntington et al., 2017). For instance, Kalaallit knowledge in Greenland has been used to detect \n", + "and attribute long-term (over 50 years) marine change that reaches beyond scientific instrumental data (Mustonen et al., 2018b).\n", + ".. DOC - 27 VS 30\n", + ".. SCORE - 0.0006719278 VS 0.568047702\n", + "--------------------------------------------------\n", + "There is medium evidence (low agreement) about the effectiveness of \n", + "migration and planned relocation in reducing risk exposure. Evidence \n", + "on climate-driven internal migration shows that moving has mixed \n", + "outcomes on risk reduction and adaptive capacity. On one hand, \n", + "migration can improve adaptive capacity by increasing incomes and \n", + "remittances as well as diversifying livelihoods (Maharjan et al., 2020); \n", + "on the other, migration can expose migrants to new risks. For example, \n", + "in Bangalore (India), migrants often face high exposure to localised \n", + "flooding, insecure and unsafe livelihoods, and social exclusion, which \n", + "collectively shape their vulnerability (Michael et al., 2018; Singh and \n", + "Basu, 2020). In greater Manila (the Philippines) and Chennai (India), \n", + "planned relocations to reduce disaster risk have often exacerbated \n", + "vulnerability, due to relocation sites being in environmentally sensitive \n", + "areas, inadequate livelihood opportunities and exposure to new risks \n", + "(Meerow, 2017; Ajibade, 2019; Jain et al., 2021).\n", + ".. DOC - 29 VS 31\n", + ".. SCORE - 0.00036829791 VS 0.566495597\n", + "--------------------------------------------------\n", + "Migration, displacement and resettlement each play a foundational \n", + "role in differentiated vulnerability (see Cross-Chapter Box MIGRATE \n", + "in Chapter 7). The relationship between migration and vulnerability \n", + "is complex (robust evidence, high agreement), and is the first of the \n", + "three components discussed within this section. Climate change, as a \n", + "push factor, is only one among multiple drivers (political, economic and \n", + "social) related to environmental migration (Heslin et al., 2019; Planitz, \n", + "2019; Luetz and Merson, 2019). There is consensus that it is difficult \n", + "to pin climate change as the sole driver of internal (within national \n", + "boundaries) rural to urban migration decisions owing to, among other \n", + "factors, the disconnect between national and international policies \n", + "(Wilkinson et al., 2016), the lack of unifying theoretical frameworks \n", + "and the complex interactions between climatic and other drivers \n", + "(social, demographic, economic and political) at multiple scales\n", + ".. DOC - 26 VS 32\n", + ".. SCORE - 0.0001535624 VS 0.568792522\n", + "--------------------------------------------------\n", + "be designed to anticipate and address climate-induced internal mobility \n", + "(Schwan and Yu, 2017). For instance, it does not offer a solution for \n", + "maintaining Indigenous cultures which are often strongly affected by, \n", + "or even disrupted by, climate change (Olsson, 2014). Hence, an effective \n", + "approach needs to combine different policy instruments to support \n", + "protection, adaptation and migration (O'Brien et al., 2018).\n", + ".. DOC - 11 VS 33\n", + ".. SCORE - 0.00013032975 VS 0.584740281\n", + "--------------------------------------------------\n", + "Gemenne, F. and J. Blocher, 2017: How can migration serve adaptation to \n", + "climate change? Challenges to fleshing out a policy ideal. Geogr. J., 183(4), \n", + "336-347, doi:10.1111/geoj.12205.\n", + "Gemenne, F. and P. Brucker, 2015: From the guiding principles on internal \n", + "displacement to the Nansen initiative: What the governance of\n", + ".. DOC - 13 VS 34\n", + ".. SCORE - 5.9209164e-05 VS 0.582682252\n", + "--------------------------------------------------\n", + "facilitate adaptive migration in the region in response to natural \n", + "hazards including SLR (Burson and Bedford, 2015). There have been \n", + "cases presented at the Immigration and Protection Tribunal of New \n", + "Zealand testing refugee claims associated with climate change from \n", + "Tuvaluan and i-Kiribati applicants, both citing environmental change \n", + "on their home islands as grounds for remaining in New Zealand. \n", + "One applicant was successful in the quest to remain in New Zealand \n", + "on humanitarian grounds, but not on the grounds of refugee status \n", + "(Farbotko et al., 2016).\n", + " 4.4.2.6.6 Governance of retreat \n", + ".. DOC - 42 VS 35\n", + ".. SCORE - 4.5753914e-05 VS 0.55679971\n", + "--------------------------------------------------\n", + "while these traditional economies have undergone rapid change due \n", + "to non-climate drivers, their land uses, observational frameworks and \n", + "cultural matrixes remain of high importance in the context of climate \n", + "change. Endemic responses (self-agency from within the culture) \n", + "and Indigenous governance enable adaptation to the rapid and \n", + "accelerating changes under way (Mustonen et al., 2018a). Therefore, \n", + "community-based monitoring and inclusion of IK in dialogue with \n", + "science has been an effective mechanism to detect and respond to \n", + "climate change.\n", + ".. DOC - 45 VS 36\n", + ".. SCORE - 3.734357e-05 VS 0.555856168\n", + "--------------------------------------------------\n", + "migration (Ober, 2019). Importantly, there is low agreement on projected numbers (see Boas et al., 2019) with uncertainties around how \n", + "local policies and individual behaviours will shape migration choices. Even in high-risk places, people might choose to stay or be unable \n", + "to move, resulting in 'trapped' populations (Zickgraf, 2019; Ayeb-Karlsson et al., 2020). There is currently inadequate evidence to ascertain \n", + "the nature and numbers of trapped populations currently or in the future.\n", + ".. DOC - 28 VS 37\n", + ".. SCORE - 1.9988918e-05 VS 0.567273736\n", + "--------------------------------------------------\n", + "Key messages on migration in this report\n", + "Migration is a universal strategy that individuals and households undertake to improve well-being and livelihoods in response to \n", + "economic uncertainty, political instability and environmental change (high confidence). Migration, displacement and immobility that \n", + "occur in response to climate hazards are assessed in general in Chapter 7, with specific sectoral and regional dimensions of climate\u0002related migration assessed in sectoral and regional Chapters 5 to 15 (Table MIGRATE.1 in Chapter 7) and involuntary immobility and \n", + "displacement being identified as representative key risks in Chapter 16 (Sections 16.2.3.8, 16.5.2.3.8). Since AR5 there has been a \n", + "considerable expansion in research on climate-migration linkages, with five key messages from the present assessment report warranting \n", + "emphasis.\n", + ".. DOC - 16 VS 38\n", + ".. SCORE - 1.76402e-05 VS 0.577121377\n", + "--------------------------------------------------\n", + "Migration has been highly politicised, and climate-related immigration has been conceptualised in public and media discourse as a \n", + "potential threat which limits adaptation feasibility (Telford, 2018; Honarmand Ebrahimi and Ossewaarde, 2019; McLeman, 2019; Wiegel \n", + "et al., 2019; Hauer et al., 2020). Existing international agreements provide potential frameworks for climate-related migration to benefit \n", + "adaptive capacity and sustainable development (Warner, 2018; Kalin, 2019). However, agreements to facilitate temporary or circular \n", + "migration and remittances are often informal and limited in scope (Webber and Donner, 2017b; Margaret and Matias, 2020) and migrant \n", + "receiving areas, particularly urban areas, can be better assisted to prepare for population change (Deshpande et al., 2019; Adger et al., \n", + "2020; Hauer et al., 2020). Policies and planning are lacking that would ensure that positive migration outcomes for sending and receiving\n", + ".. DOC - 39 VS 39\n", + ".. SCORE - 1.5567455e-05 VS 0.559005141\n", + "--------------------------------------------------\n", + "A.5.7 Changes in climate can amplify environmentally induced migration both within countries and across borders (medium \n", + "confidence), reflecting multiple drivers of mobility and available adaptation measures (high confidence). Extreme weather \n", + "and climate or slow-onset events may lead to increased displacement, disrupted food chains, threatened livelihoods (high \n", + "confidence), and contribute to exacerbated stresses for conflict (medium confidence). {3.4.2, 4.7.3, 5.2.3, 5.2.4, 5.2.5, 5.8.2, \n", + "7.2.2, 7.3.1}\n", + ".. DOC - 4 VS 40\n", + ".. SCORE - 1.4971084e-05 VS 0.502163529\n", + "--------------------------------------------------\n", + "C.2.12 Increasing adaptive capacities minimises the negative impacts of climate-related displacement and involuntary migration for migrants \n", + "and sending and receiving areas (high confidence). This improves the degree of choice under which migration decisions are made, \n", + "ensuring safe and orderly movements of people within and between countries (high confidence). Some development reduces underlying \n", + "vulnerabilities associated with conflict, and adaptation contributes by reducing the impacts of climate change on climate sensitive \n", + "drivers of conflict (high confidence). Risks to peace are reduced, for example, by supporting people in climate-sensitive economic \n", + "activities (medium confidence) and advancing women's empowerment (high confidence). {7.4, Box 9.8, Box 10.2, 12.5, CCB FEASIB, \n", + "CCB MIGRATE}\n", + "SPMSPM\n", + "\f", + "\n", + "45 The term 'response' is used here instead of adaptation because some responses, such as retreat, may or may not be considered to be adaptation.\n", + "2525\n", + ".. DOC - 3 VS 41\n", + ".. SCORE - 1.2805474e-05 VS 0.505755424\n", + "--------------------------------------------------\n", + "For cross-cutting options, the main knowledge gaps identified are socio-cultural acceptability for social safety nets. While the evidence on \n", + "resettlement, relocation and migration is large and growing, there is disagreement on several indicators, marking the need for more evidence \n", + "synthesis. Geophysical feasibility for resettlement, relocation and migration has limited evidence, but is an emerging area of research.\n", + "In general, throughout most of the options, there is significantly less literature from the regions of Central and South America, and West \n", + "and Central Asia, as compared with other world regions.\n", + ".. DOC - 30 VS 42\n", + ".. SCORE - 8.8011e-06 VS 0.566225469\n", + "--------------------------------------------------\n", + "The success of climate-related migration as an adaptive response is \n", + "shaped by how migrants are perceived and how policy discussions \n", + "are framed (high agreement, medium evidence). The possibility that \n", + "climate change may enlarge international migrant flows has in some \n", + "policy discussions been interpreted as a potential threat to the security \n", + "of destination countries (Sow et al., 2016; Telford, 2018), but there is \n", + "little empirical evidence in peer-reviewed literature assessed for this \n", + "chapter of climate migrants posing significant threats to security at \n", + "state or international levels. There is also an inconsistency between \n", + "framing in some policy discussions of undocumented migration \n", + "(climate-related and other forms) as being 'illegal' and the objectives \n", + "of the Global Compact on Safe, Orderly and Regular Migration and \n", + "the Global Compact on Refugees (McLeman, 2019). Although climate\u0002related migrants are not officially recognised as refugees under the \n", + "1951 Convention relating to the Status of Refugees, terms such as \n", + "'climate refugees' are common in popular media and some policy\n", + ".. DOC - 23 VS 43\n", + ".. SCORE - 8.267873e-06 VS 0.570940733\n", + "--------------------------------------------------\n", + "Figure SPM.2 (continued): Migration refers to an increase or decrease in net migration, not to beneficial/adverse value. Impacts on tourism refer \n", + "to the operating conditions for the tourism sector. Cultural services include cultural identity, sense of home, and spiritual, intrinsic and aesthetic \n", + "values, as well as contributions from glacier archaeology. The underlying information is given for land regions in tables SM2.6, SM2.7, SM2.8, SM3.8, \n", + "SM3.9, and SM3.10, and for ocean regions in tables SM5.10, SM5.11, SM3.8, SM3.9, and SM3.10. {2.3.1, 2.3.2, 2.3.3, 2.3.4, 2.3.5, 2.3.6, 2.3.7,\n", + ".. DOC - 1 VS 44\n", + ".. SCORE - 5.2144983e-06 VS 0.522298038\n", + "--------------------------------------------------\n", + "2 including Hindu Kush, Karakoram, Hengduan Shan, and Tien Shan; 3\n", + " tropical Andes, Mexico, eastern Africa, and Indonesia; 4 includes Finland, Norway, and Sweden; 5 includes adjacent areas in Yukon Territory and British Columbia, Canada; 6 Migration refers to an \n", + " increase or decrease in net migration, not to beneficial/adverse value.\n", + ".. DOC - 0 VS 45\n", + ".. SCORE - 5.173919e-06 VS 0.543566763\n", + "--------------------------------------------------\n", + "Singh, C. and R. Basu, 2020: Moving in and out of vulnerability: Interrogating \n", + "migration as an adaptation strategy along a rural-urban continuum in India. \n", + "Geogr J, 186(1), 87-102, doi:10.1111/geoj.12328.\n", + "25332533\n", + ".. DOC - 37 VS 46\n", + ".. SCORE - 3.7853251e-06 VS 0.559662342\n", + "--------------------------------------------------\n", + "AR5 (Adger and Pulhin, 2014) found links between climate change \n", + "and migration in general (medium evidence, high agreement), but \n", + "provided no assessment of climate-induced hydrological changes and \n", + "migration specifically. Likewise, SRCCL (Mirzabaev et al., 2019; Olsson \n", + "et al., 2020) and SROCC (Hock et al., 2019b) noted that migration is \n", + "complex and that migration decisions and outcomes are influenced \n", + "by a combination of social, demographic, economic, environmental \n", + "and political factors and contexts (see Cross-Chapter Box MIGRATE in \n", + "Chapter 7). This chapter confirms this evidence, focusing on climate\u0002induced hydrological changes.\n", + ".. DOC - 35 VS 47\n", + ".. SCORE - 2.769406e-06 VS 0.560757101\n", + "--------------------------------------------------\n", + "A.7.3 Arctic residents, especially Indigenous peoples, have adjusted the timing of activities to respond \n", + "to changes in seasonality and safety of land, ice, and snow travel conditions. Municipalities and industry are beginning \n", + "to address infrastructure failures associated with flooding and thawing permafrost and some coastal communities \n", + "have planned for relocation (high confidence). Limited funding, skills, capacity, and institutional support to engage \n", + "meaningfully in planning processes have challenged adaptation (high confidence). {3.5.2, 3.5.4, Cross-Chapter Box 9}\n", + ".. DOC - 2 VS 48\n", + ".. SCORE - 4.0525455e-07 VS 0.509702742\n", + "--------------------------------------------------\n" + ] + } + ], + "source": [ + "from scipy.special import expit, logit\n", + "\n", + "for i,result in enumerate(results.results[:50]):\n", + " print(result.document.text)\n", + " print(\".. DOC - \",result.document.doc_id, \" VS \",i)\n", + " print(\".. SCORE - \",result.score, \" VS \",docs[result.document.doc_id].metadata[\"similarity_score\"])\n", + " print(\"-\"*50)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "d7a7fe7f", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content=\"This image is a graphical representation of the contributing factors to observed global warming from 2010-2019 compared to the pre-industrial baseline of 1850-1900. It includes three bar graphs: (a) shows the total observed warming, (b) breaks down the aggregated contributions to warming, with human influence being a significant factor, and (c) details individual contributions by various greenhouse gases, aerosols, and other factors based on radiative forcing studies. The graphs illustrate that while greenhouse gases have led to warming, aerosol cooling has partly offset this effect. The collective scientific data provides evidence of human activities' impact on climate change, offering critical insights for policymakers and stakeholders in addressing the warming climate.\", metadata={'chunk_type': 'image', 'document_id': 'document1', 'document_number': 1.0, 'element_id': 'Picture_0_6', 'figure_code': 'Figure SPM.2', 'file_size': 141.70703125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document1/images/Picture_0_6.png', 'n_pages': 32.0, 'name': 'Summary for Policymakers. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 7, 'release_date': 2021.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGI SPM', 'source': 'IPCC', 'toc_level0': 'A. The Current State of the Climate', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg1/downloads/report/IPCC_AR6_WGI_SPM.pdf', 'similarity_score': 0.700658858, 'content': \"This image is a graphical representation of the contributing factors to observed global warming from 2010-2019 compared to the pre-industrial baseline of 1850-1900. It includes three bar graphs: (a) shows the total observed warming, (b) breaks down the aggregated contributions to warming, with human influence being a significant factor, and (c) details individual contributions by various greenhouse gases, aerosols, and other factors based on radiative forcing studies. The graphs illustrate that while greenhouse gases have led to warming, aerosol cooling has partly offset this effect. The collective scientific data provides evidence of human activities' impact on climate change, offering critical insights for policymakers and stakeholders in addressing the warming climate.\"})]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "images = [doc for doc in docs if doc.metadata[\"chunk_type\"] == \"image\"]\n", + "images" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "b7be28b5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(page_content=\"This image is a graphical representation of the contributing factors to observed global warming from 2010-2019 compared to the pre-industrial baseline of 1850-1900. It includes three bar graphs: (a) shows the total observed warming, (b) breaks down the aggregated contributions to warming, with human influence being a significant factor, and (c) details individual contributions by various greenhouse gases, aerosols, and other factors based on radiative forcing studies. The graphs illustrate that while greenhouse gases have led to warming, aerosol cooling has partly offset this effect. The collective scientific data provides evidence of human activities' impact on climate change, offering critical insights for policymakers and stakeholders in addressing the warming climate.\", metadata={'chunk_type': 'image', 'document_id': 'document1', 'document_number': 1.0, 'element_id': 'Picture_0_6', 'figure_code': 'Figure SPM.2', 'file_size': 141.70703125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document1/images/Picture_0_6.png', 'n_pages': 32.0, 'name': 'Summary for Policymakers. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 6, 'release_date': 2021.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGI SPM', 'source': 'IPCC', 'toc_level0': 'A. The Current State of the Climate', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg1/downloads/report/IPCC_AR6_WGI_SPM.pdf', 'similarity_score': 0.700658858, 'content': \"This image is a graphical representation of the contributing factors to observed global warming from 2010-2019 compared to the pre-industrial baseline of 1850-1900. It includes three bar graphs: (a) shows the total observed warming, (b) breaks down the aggregated contributions to warming, with human influence being a significant factor, and (c) details individual contributions by various greenhouse gases, aerosols, and other factors based on radiative forcing studies. The graphs illustrate that while greenhouse gases have led to warming, aerosol cooling has partly offset this effect. The collective scientific data provides evidence of human activities' impact on climate change, offering critical insights for policymakers and stakeholders in addressing the warming climate.\"})]" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "image_docs = [doc for doc in docs if doc.metadata[\"chunk_type\"]==\"image\"]\n", + "image_docs" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "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.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}