diff --git a/app.py b/app.py index d65d52a13c37a916be68bf4012d6b76ecf301202..d62c847aa1b02a859de6dcb75bada2f7837f25bd 100644 --- a/app.py +++ b/app.py @@ -1,13 +1,12 @@ from climateqa.engine.embeddings import get_embeddings_function embeddings_function = get_embeddings_function() -from climateqa.knowledge.openalex import OpenAlex from sentence_transformers import CrossEncoder # reranker = CrossEncoder("mixedbread-ai/mxbai-rerank-xsmall-v1") -oa = OpenAlex() import gradio as gr +from gradio_modal import Modal import pandas as pd import numpy as np import os @@ -29,7 +28,9 @@ from utils import create_user_id from gradio_modal import Modal +from PIL import Image +from langchain_core.runnables.schema import StreamEvent # ClimateQ&A imports from climateqa.engine.llm import get_llm @@ -39,13 +40,15 @@ from climateqa.engine.reranker import get_reranker from climateqa.engine.embeddings import get_embeddings_function from climateqa.engine.chains.prompts import audience_prompts from climateqa.sample_questions import QUESTIONS -from climateqa.constants import POSSIBLE_REPORTS +from climateqa.constants import POSSIBLE_REPORTS, OWID_CATEGORIES from climateqa.utils import get_image_from_azure_blob_storage -from climateqa.engine.keywords import make_keywords_chain -# from climateqa.engine.chains.answer_rag import make_rag_papers_chain -from climateqa.engine.graph import make_graph_agent,display_graph +from climateqa.engine.graph import make_graph_agent +from climateqa.engine.embeddings import get_embeddings_function +from climateqa.engine.chains.retrieve_papers import find_papers + +from front.utils import serialize_docs,process_figures -from front.utils import make_html_source, make_html_figure_sources,parse_output_llm_with_sources,serialize_docs,make_toolbox +from climateqa.event_handler import init_audience, handle_retrieved_documents, stream_answer,handle_retrieved_owid_graphs # Load environment variables in local mode try: @@ -54,6 +57,8 @@ try: except Exception as e: pass +import requests + # Set up Gradio Theme theme = gr.themes.Base( primary_hue="blue", @@ -104,52 +109,47 @@ CITATION_TEXT = r"""@misc{climateqa, # Create vectorstore and retriever -vectorstore = get_pinecone_vectorstore(embeddings_function) -llm = get_llm(provider="openai",max_tokens = 1024,temperature = 0.0) -reranker = get_reranker("large") -agent = make_graph_agent(llm,vectorstore,reranker) +vectorstore = get_pinecone_vectorstore(embeddings_function, index_name = os.getenv("PINECONE_API_INDEX")) +vectorstore_graphs = get_pinecone_vectorstore(embeddings_function, index_name = os.getenv("PINECONE_API_INDEX_OWID"), text_key="description") +llm = get_llm(provider="openai",max_tokens = 1024,temperature = 0.0) +reranker = get_reranker("nano") +agent = make_graph_agent(llm=llm, vectorstore_ipcc=vectorstore, vectorstore_graphs=vectorstore_graphs, reranker=reranker) +def update_config_modal_visibility(config_open): + new_config_visibility_status = not config_open + return gr.update(visible=new_config_visibility_status), new_config_visibility_status -async def chat(query,history,audience,sources,reports): +async def chat(query, history, audience, sources, reports, relevant_content_sources, search_only): """taking a query and a message history, use a pipeline (reformulation, retriever, answering) to yield a tuple of: (messages in gradio format, messages in langchain format, source documents)""" date_now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") print(f">> NEW QUESTION ({date_now}) : {query}") - if audience == "Children": - audience_prompt = audience_prompts["children"] - elif audience == "General public": - audience_prompt = audience_prompts["general"] - elif audience == "Experts": - audience_prompt = audience_prompts["experts"] - else: - audience_prompt = audience_prompts["experts"] + audience_prompt = init_audience(audience) # Prepare default values - if len(sources) == 0: - sources = ["IPCC"] + if sources is None or len(sources) == 0: + sources = ["IPCC", "IPBES", "IPOS"] - # if len(reports) == 0: # TODO - reports = [] + if reports is None or len(reports) == 0: + reports = [] - inputs = {"user_input": query,"audience": audience_prompt,"sources_input":sources} + inputs = {"user_input": query,"audience": audience_prompt,"sources_input":sources, "relevant_content_sources" : relevant_content_sources, "search_only": search_only} result = agent.astream_events(inputs,version = "v1") - - # path_reformulation = "/logs/reformulation/final_output" - # path_keywords = "/logs/keywords/final_output" - # path_retriever = "/logs/find_documents/final_output" - # path_answer = "/logs/answer/streamed_output_str/-" + docs = [] + used_figures=[] + related_contents = [] docs_html = "" output_query = "" output_language = "" output_keywords = "" - gallery = [] start_streaming = False + graphs_html = "" figures = '

' steps_display = { @@ -166,36 +166,29 @@ async def chat(query,history,audience,sources,reports): node = event["metadata"]["langgraph_node"] if event["event"] == "on_chain_end" and event["name"] == "retrieve_documents" :# when documents are retrieved - try: - docs = event["data"]["output"]["documents"] - docs_html = [] - textual_docs = [d for d in docs if d.metadata["chunk_type"] == "text"] - for i, d in enumerate(textual_docs, 1): - if d.metadata["chunk_type"] == "text": - docs_html.append(make_html_source(d, i)) - - used_documents = used_documents + [f"{d.metadata['short_name']} - {d.metadata['name']}" for d in docs] - history[-1].content = "Adding sources :\n\n - " + "\n - ".join(np.unique(used_documents)) - - docs_html = "".join(docs_html) - - except Exception as e: - print(f"Error getting documents: {e}") - print(event) - + docs, docs_html, history, used_documents, related_contents = handle_retrieved_documents(event, history, used_documents) + + elif event["event"] == "on_chain_end" and node == "categorize_intent" and event["name"] == "_write": # when the query is transformed + + intent = event["data"]["output"]["intent"] + if "language" in event["data"]["output"]: + output_language = event["data"]["output"]["language"] + else : + output_language = "English" + history[-1].content = f"Language identified : {output_language} \n Intent identified : {intent}" + + elif event["name"] in steps_display.keys() and event["event"] == "on_chain_start": #display steps - event_description,display_output = steps_display[node] + event_description, display_output = steps_display[node] if not hasattr(history[-1], 'metadata') or history[-1].metadata["title"] != event_description: # if a new step begins history.append(ChatMessage(role="assistant", content = "", metadata={'title' :event_description})) elif event["name"] != "transform_query" and event["event"] == "on_chat_model_stream" and node in ["answer_rag", "answer_search","answer_chitchat"]:# if streaming answer - if start_streaming == False: - start_streaming = True - history.append(ChatMessage(role="assistant", content = "")) - answer_message_content += event["data"]["chunk"].content - answer_message_content = parse_output_llm_with_sources(answer_message_content) - history[-1] = ChatMessage(role="assistant", content = answer_message_content) - # history.append(ChatMessage(role="assistant", content = new_message_content)) + history, start_streaming, answer_message_content = stream_answer(history, event, start_streaming, answer_message_content) + + elif event["name"] in ["retrieve_graphs", "retrieve_graphs_ai"] and event["event"] == "on_chain_end": + graphs_html = handle_retrieved_owid_graphs(event, graphs_html) + if event["name"] == "transform_query" and event["event"] =="on_chain_end": if hasattr(history[-1],"content"): @@ -204,7 +197,7 @@ async def chat(query,history,audience,sources,reports): if event["name"] == "categorize_intent" and event["event"] == "on_chain_start": print("X") - yield history,docs_html,output_query,output_language,gallery, figures #,output_query,output_keywords + yield history, docs_html, output_query, output_language, related_contents , graphs_html, #,output_query,output_keywords except Exception as e: print(event, "has failed") @@ -232,68 +225,7 @@ async def chat(query,history,audience,sources,reports): print(f"Error logging on Azure Blob Storage: {e}") raise gr.Error(f"ClimateQ&A Error: {str(e)[:100]} - The error has been noted, try another question and if the error remains, you can contact us :)") - - - - # image_dict = {} - # for i,doc in enumerate(docs): - - # if doc.metadata["chunk_type"] == "image": - # try: - # key = f"Image {i+1}" - # image_path = doc.metadata["image_path"].split("documents/")[1] - # img = get_image_from_azure_blob_storage(image_path) - - # # Convert the image to a byte buffer - # buffered = BytesIO() - # img.save(buffered, format="PNG") - # img_str = base64.b64encode(buffered.getvalue()).decode() - - # # Embedding the base64 string in Markdown - # markdown_image = f"![Alt text](data:image/png;base64,{img_str})" - # image_dict[key] = {"img":img,"md":markdown_image,"short_name": doc.metadata["short_name"],"figure_code":doc.metadata["figure_code"],"caption":doc.page_content,"key":key,"figure_code":doc.metadata["figure_code"], "img_str" : img_str} - # except Exception as e: - # print(f"Skipped adding image {i} because of {e}") - - # if len(image_dict) > 0: - - # gallery = [x["img"] for x in list(image_dict.values())] - # img = list(image_dict.values())[0] - # img_md = img["md"] - # img_caption = img["caption"] - # img_code = img["figure_code"] - # if img_code != "N/A": - # img_name = f"{img['key']} - {img['figure_code']}" - # else: - # img_name = f"{img['key']}" - - # history.append(ChatMessage(role="assistant", content = f"\n\n{img_md}\n

{img_name} - {img_caption}

")) - - docs_figures = [d for d in docs if d.metadata["chunk_type"] == "image"] - for i, doc in enumerate(docs_figures): - if doc.metadata["chunk_type"] == "image": - try: - key = f"Image {i+1}" - - image_path = doc.metadata["image_path"].split("documents/")[1] - img = get_image_from_azure_blob_storage(image_path) - - # Convert the image to a byte buffer - buffered = BytesIO() - img.save(buffered, format="PNG") - img_str = base64.b64encode(buffered.getvalue()).decode() - - figures = figures + make_html_figure_sources(doc, i, img_str) - - gallery.append(img) - - except Exception as e: - print(f"Skipped adding image {i} because of {e}") - - - - - yield history,docs_html,output_query,output_language,gallery, figures#,output_query,output_keywords + yield history, docs_html, output_query, output_language, related_contents, graphs_html def save_feedback(feed: str, user_id): @@ -317,29 +249,9 @@ def log_on_azure(file, logs, share_client): file_client.upload_file(logs) -def generate_keywords(query): - chain = make_keywords_chain(llm) - keywords = chain.invoke(query) - keywords = " AND ".join(keywords["keywords"]) - return keywords -papers_cols_widths = { - "doc":50, - "id":100, - "title":300, - "doi":100, - "publication_year":100, - "abstract":500, - "rerank_score":100, - "is_oa":50, -} - -papers_cols = list(papers_cols_widths.keys()) -papers_cols_widths = list(papers_cols_widths.values()) - - # -------------------------------------------------------------------- # Gradio # -------------------------------------------------------------------- @@ -370,10 +282,23 @@ def vote(data: gr.LikeData): else: print(data) +def save_graph(saved_graphs_state, embedding, category): + print(f"\nCategory:\n{saved_graphs_state}\n") + if category not in saved_graphs_state: + saved_graphs_state[category] = [] + if embedding not in saved_graphs_state[category]: + saved_graphs_state[category].append(embedding) + return saved_graphs_state, gr.Button("Graph Saved") + with gr.Blocks(title="Climate Q&A", css_paths=os.getcwd()+ "/style.css", theme=theme,elem_id = "main-component") as demo: + chat_completed_state = gr.State(0) + current_graphs = gr.State([]) + saved_graphs = gr.State({}) + config_open = gr.State(False) + with gr.Tab("ClimateQ&A"): with gr.Row(elem_id="chatbot-row"): @@ -396,12 +321,16 @@ with gr.Blocks(title="Climate Q&A", css_paths=os.getcwd()+ "/style.css", theme=t with gr.Row(elem_id = "input-message"): textbox=gr.Textbox(placeholder="Ask me anything here!",show_label=False,scale=7,lines = 1,interactive = True,elem_id="input-textbox") - + + config_button = gr.Button("",elem_id="config-button") + # config_checkbox_button = gr.Checkbox(label = '⚙️', value="show",visible=True, interactive=True, elem_id="checkbox-config") + + - with gr.Column(scale=1, variant="panel",elem_id = "right-panel"): + with gr.Column(scale=2, variant="panel",elem_id = "right-panel"): - with gr.Tabs() as tabs: + with gr.Tabs(elem_id = "right_panel_tab") as tabs: with gr.TabItem("Examples",elem_id = "tab-examples",id = 0): examples_hidden = gr.Textbox(visible = False) @@ -427,91 +356,210 @@ with gr.Blocks(title="Climate Q&A", css_paths=os.getcwd()+ "/style.css", theme=t ) samples.append(group_examples) + + # with gr.Tab("Configuration", id = 10, ) as tab_config: + # # gr.Markdown("Reminders: You can talk in any language, ClimateQ&A is multi-lingual!") + # pass + + # with gr.Row(): + + # dropdown_sources = gr.CheckboxGroup( + # ["IPCC", "IPBES","IPOS"], + # label="Select source", + # value=["IPCC"], + # interactive=True, + # ) + # dropdown_external_sources = gr.CheckboxGroup( + # ["IPCC figures","OpenAlex", "OurWorldInData"], + # label="Select database to search for relevant content", + # value=["IPCC figures"], + # interactive=True, + # ) + + # dropdown_reports = gr.Dropdown( + # POSSIBLE_REPORTS, + # label="Or select specific reports", + # multiselect=True, + # value=None, + # interactive=True, + # ) + + # search_only = gr.Checkbox(label="Search only without chating", value=False, interactive=True, elem_id="checkbox-chat") + + + # dropdown_audience = gr.Dropdown( + # ["Children","General public","Experts"], + # label="Select audience", + # value="Experts", + # interactive=True, + # ) + + + # after = gr.Slider(minimum=1950,maximum=2023,step=1,value=1960,label="Publication date",show_label=True,interactive=True,elem_id="date-papers", visible=False) + - with gr.Tab("Sources",elem_id = "tab-citations",id = 1): - sources_textbox = gr.HTML(show_label=False, elem_id="sources-textbox") - docs_textbox = gr.State("") - - - + # output_query = gr.Textbox(label="Query used for retrieval",show_label = True,elem_id = "reformulated-query",lines = 2,interactive = False, visible= False) + # output_language = gr.Textbox(label="Language",show_label = True,elem_id = "language",lines = 1,interactive = False, visible= False) - # with Modal(visible = False) as config_modal: - with gr.Tab("Configuration",elem_id = "tab-config",id = 2): - gr.Markdown("Reminder: You can talk in any language, ClimateQ&A is multi-lingual!") + # dropdown_external_sources.change(lambda x: gr.update(visible = True ) if "OpenAlex" in x else gr.update(visible=False) , inputs=[dropdown_external_sources], outputs=[after]) + # # dropdown_external_sources.change(lambda x: gr.update(visible = True ) if "OpenAlex" in x else gr.update(visible=False) , inputs=[dropdown_external_sources], outputs=[after], visible=True) - dropdown_sources = gr.CheckboxGroup( - ["IPCC", "IPBES","IPOS"], - label="Select source", - value=["IPCC"], - interactive=True, - ) + with gr.Tab("Sources",elem_id = "tab-sources",id = 1) as tab_sources: + sources_textbox = gr.HTML(show_label=False, elem_id="sources-textbox") + + + + with gr.Tab("Recommended content", elem_id="tab-recommended_content",id=2) as tab_recommended_content: + with gr.Tabs(elem_id = "group-subtabs") as tabs_recommended_content: + + with gr.Tab("Figures",elem_id = "tab-figures",id = 3) as tab_figures: + sources_raw = gr.State() + + with Modal(visible=False, elem_id="modal_figure_galery") as figure_modal: + gallery_component = gr.Gallery(object_fit='scale-down',elem_id="gallery-component", height="80vh") + + show_full_size_figures = gr.Button("Show figures in full size",elem_id="show-figures",interactive=True) + show_full_size_figures.click(lambda : Modal(visible=True),None,figure_modal) + + figures_cards = gr.HTML(show_label=False, elem_id="sources-figures") + + + + with gr.Tab("Papers",elem_id = "tab-citations",id = 4) as tab_papers: + # btn_summary = gr.Button("Summary") + # Fenêtre simulée pour le Summary + with gr.Accordion(visible=True, elem_id="papers-summary-popup", label= "See summary of relevant papers", open= False) as summary_popup: + papers_summary = gr.Markdown("", visible=True, elem_id="papers-summary") + + # btn_relevant_papers = gr.Button("Relevant papers") + # Fenêtre simulée pour les Relevant Papers + with gr.Accordion(visible=True, elem_id="papers-relevant-popup",label= "See relevant papers", open= False) as relevant_popup: + papers_html = gr.HTML(show_label=False, elem_id="papers-textbox") + + btn_citations_network = gr.Button("Explore papers citations network") + # Fenêtre simulée pour le Citations Network + with Modal(visible=False) as papers_modal: + citations_network = gr.HTML("

Citations Network Graph

", visible=True, elem_id="papers-citations-network") + btn_citations_network.click(lambda: Modal(visible=True), None, papers_modal) + + + + with gr.Tab("Graphs", elem_id="tab-graphs", id=5) as tab_graphs: + + graphs_container = gr.HTML("

There are no graphs to be displayed at the moment. Try asking another question.

",elem_id="graphs-container") + current_graphs.change(lambda x : x, inputs=[current_graphs], outputs=[graphs_container]) + + with Modal(visible=False,elem_id="modal-config") as config_modal: + gr.Markdown("Reminders: You can talk in any language, ClimateQ&A is multi-lingual!") - dropdown_reports = gr.Dropdown( - POSSIBLE_REPORTS, - label="Or select specific reports", - multiselect=True, - value=None, - interactive=True, - ) + + # with gr.Row(): + + dropdown_sources = gr.CheckboxGroup( + ["IPCC", "IPBES","IPOS"], + label="Select source (by default search in all sources)", + value=["IPCC"], + interactive=True, + ) + + dropdown_reports = gr.Dropdown( + POSSIBLE_REPORTS, + label="Or select specific reports", + multiselect=True, + value=None, + interactive=True, + ) + + dropdown_external_sources = gr.CheckboxGroup( + ["IPCC figures","OpenAlex", "OurWorldInData"], + label="Select database to search for relevant content", + value=["IPCC figures"], + interactive=True, + ) - dropdown_audience = gr.Dropdown( - ["Children","General public","Experts"], - label="Select audience", - value="Experts", - interactive=True, - ) + search_only = gr.Checkbox(label="Search only for recommended content without chating", value=False, interactive=True, elem_id="checkbox-chat") - output_query = gr.Textbox(label="Query used for retrieval",show_label = True,elem_id = "reformulated-query",lines = 2,interactive = False) - output_language = gr.Textbox(label="Language",show_label = True,elem_id = "language",lines = 1,interactive = False) + dropdown_audience = gr.Dropdown( + ["Children","General public","Experts"], + label="Select audience", + value="Experts", + interactive=True, + ) + + + after = gr.Slider(minimum=1950,maximum=2023,step=1,value=1960,label="Publication date",show_label=True,interactive=True,elem_id="date-papers", visible=False) + - with gr.Tab("Figures",elem_id = "tab-figures",id = 3): - with Modal(visible=False, elem_id="modal_figure_galery") as modal: - gallery_component = gr.Gallery(object_fit='scale-down',elem_id="gallery-component", height="80vh") - - show_full_size_figures = gr.Button("Show figures in full size",elem_id="show-figures",interactive=True) - show_full_size_figures.click(lambda : Modal(visible=True),None,modal) + output_query = gr.Textbox(label="Query used for retrieval",show_label = True,elem_id = "reformulated-query",lines = 2,interactive = False, visible= False) + output_language = gr.Textbox(label="Language",show_label = True,elem_id = "language",lines = 1,interactive = False, visible= False) - figures_cards = gr.HTML(show_label=False, elem_id="sources-figures") - + dropdown_external_sources.change(lambda x: gr.update(visible = True ) if "OpenAlex" in x else gr.update(visible=False) , inputs=[dropdown_external_sources], outputs=[after]) + + close_config_modal = gr.Button("Validate and Close",elem_id="close-config-modal") + close_config_modal.click(fn=update_config_modal_visibility, inputs=[config_open], outputs=[config_modal, config_open]) + # dropdown_external_sources.change(lambda x: gr.update(visible = True ) if "OpenAlex" in x else gr.update(visible=False) , inputs=[dropdown_external_sources], outputs=[after], visible=True) + + + config_button.click(fn=update_config_modal_visibility, inputs=[config_open], outputs=[config_modal, config_open]) + + # with gr.Tab("OECD",elem_id = "tab-oecd",id = 6): + # oecd_indicator = "RIVER_FLOOD_RP100_POP_SH" + # oecd_topic = "climate" + # oecd_latitude = "46.8332" + # oecd_longitude = "5.3725" + # oecd_zoom = "5.6442" + # # Create the HTML content with the iframe + # iframe_html = f""" + # + # """ + # oecd_textbox = gr.HTML(iframe_html, show_label=False, elem_id="oecd-textbox") + #--------------------------------------------------------------------------------------- # OTHER TABS #--------------------------------------------------------------------------------------- + # with gr.Tab("Settings",elem_id = "tab-config",id = 2): - # with gr.Tab("Figures",elem_id = "tab-images",elem_classes = "max-height other-tabs"): - # gallery_component = gr.Gallery(object_fit='cover') + # gr.Markdown("Reminder: You can talk in any language, ClimateQ&A is multi-lingual!") - # with gr.Tab("Papers (beta)",elem_id = "tab-papers",elem_classes = "max-height other-tabs"): - # with gr.Row(): - # with gr.Column(scale=1): - # query_papers = gr.Textbox(placeholder="Question",show_label=False,lines = 1,interactive = True,elem_id="query-papers") - # keywords_papers = gr.Textbox(placeholder="Keywords",show_label=False,lines = 1,interactive = True,elem_id="keywords-papers") - # after = gr.Slider(minimum=1950,maximum=2023,step=1,value=1960,label="Publication date",show_label=True,interactive=True,elem_id="date-papers") - # search_papers = gr.Button("Search",elem_id="search-papers",interactive=True) + # dropdown_sources = gr.CheckboxGroup( + # ["IPCC", "IPBES","IPOS", "OpenAlex"], + # label="Select source", + # value=["IPCC"], + # interactive=True, + # ) - # with gr.Column(scale=7): + # dropdown_reports = gr.Dropdown( + # POSSIBLE_REPORTS, + # label="Or select specific reports", + # multiselect=True, + # value=None, + # interactive=True, + # ) - # with gr.Tab("Summary",elem_id="papers-summary-tab"): - # papers_summary = gr.Markdown(visible=True,elem_id="papers-summary") + # dropdown_audience = gr.Dropdown( + # ["Children","General public","Experts"], + # label="Select audience", + # value="Experts", + # interactive=True, + # ) - # with gr.Tab("Relevant papers",elem_id="papers-results-tab"): - # papers_dataframe = gr.Dataframe(visible=True,elem_id="papers-table",headers = papers_cols) - # with gr.Tab("Citations network",elem_id="papers-network-tab"): - # citations_network = gr.HTML(visible=True,elem_id="papers-citations-network") + # output_query = gr.Textbox(label="Query used for retrieval",show_label = True,elem_id = "reformulated-query",lines = 2,interactive = False) + # output_language = gr.Textbox(label="Language",show_label = True,elem_id = "language",lines = 1,interactive = False) - with gr.Tab("About",elem_classes = "max-height other-tabs"): with gr.Row(): with gr.Column(scale=1): @@ -519,13 +567,15 @@ with gr.Blocks(title="Climate Q&A", css_paths=os.getcwd()+ "/style.css", theme=t - gr.Markdown(""" -### More info -- See more info at [https://climateqa.com](https://climateqa.com/docs/intro/) -- Feedbacks on this [form](https://forms.office.com/e/1Yzgxm6jbp) - -### Citation -""") + gr.Markdown( + """ + ### More info + - See more info at [https://climateqa.com](https://climateqa.com/docs/intro/) + - Feedbacks on this [form](https://forms.office.com/e/1Yzgxm6jbp) + + ### Citation + """ + ) with gr.Accordion(CITATION_LABEL,elem_id="citation", open = False,): # # Display citation label and text) gr.Textbox( @@ -538,25 +588,61 @@ with gr.Blocks(title="Climate Q&A", css_paths=os.getcwd()+ "/style.css", theme=t - def start_chat(query,history): - # history = history + [(query,None)] - # history = [tuple(x) for x in history] + def start_chat(query,history,search_only): history = history + [ChatMessage(role="user", content=query)] - return (gr.update(interactive = False),gr.update(selected=1),history) + if search_only: + return (gr.update(interactive = False),gr.update(selected=1),history) + else: + return (gr.update(interactive = False),gr.update(selected=2),history) def finish_chat(): - return (gr.update(interactive = True,value = "")) + return gr.update(interactive = True,value = "") + + # Initialize visibility states + summary_visible = False + relevant_visible = False + + # Functions to toggle visibility + def toggle_summary_visibility(): + global summary_visible + summary_visible = not summary_visible + return gr.update(visible=summary_visible) + + def toggle_relevant_visibility(): + global relevant_visible + relevant_visible = not relevant_visible + return gr.update(visible=relevant_visible) + + def change_completion_status(current_state): + current_state = 1 - current_state + return current_state + + def update_sources_number_display(sources_textbox, figures_cards, current_graphs, papers_html): + sources_number = sources_textbox.count("

") + figures_number = figures_cards.count("

") + graphs_number = current_graphs.count("") + sources_notif_label = f"Sources ({sources_number})" + figures_notif_label = f"Figures ({figures_number})" + graphs_notif_label = f"Graphs ({graphs_number})" + papers_notif_label = f"Papers ({papers_number})" + recommended_content_notif_label = f"Recommended content ({figures_number + graphs_number + papers_number})" + + return gr.update(label = recommended_content_notif_label), gr.update(label = sources_notif_label), gr.update(label = figures_notif_label), gr.update(label = graphs_notif_label), gr.update(label = papers_notif_label) + (textbox - .submit(start_chat, [textbox,chatbot], [textbox,tabs,chatbot],queue = False,api_name = "start_chat_textbox") - .then(chat, [textbox,chatbot,dropdown_audience, dropdown_sources,dropdown_reports], [chatbot,sources_textbox,output_query,output_language,gallery_component,figures_cards],concurrency_limit = 8,api_name = "chat_textbox") + .submit(start_chat, [textbox,chatbot, search_only], [textbox,tabs,chatbot],queue = False,api_name = "start_chat_textbox") + .then(chat, [textbox,chatbot,dropdown_audience, dropdown_sources,dropdown_reports, dropdown_external_sources, search_only] ,[chatbot,sources_textbox,output_query,output_language, sources_raw, current_graphs],concurrency_limit = 8,api_name = "chat_textbox") .then(finish_chat, None, [textbox],api_name = "finish_chat_textbox") + # .then(update_sources_number_display, [sources_textbox, figures_cards, current_graphs,papers_html],[tab_sources, tab_figures, tab_graphs, tab_papers] ) ) (examples_hidden - .change(start_chat, [examples_hidden,chatbot], [textbox,tabs,chatbot],queue = False,api_name = "start_chat_examples") - .then(chat, [examples_hidden,chatbot,dropdown_audience, dropdown_sources,dropdown_reports], [chatbot,sources_textbox,output_query,output_language,gallery_component, figures_cards],concurrency_limit = 8,api_name = "chat_examples") + .change(start_chat, [examples_hidden,chatbot, search_only], [textbox,tabs,chatbot],queue = False,api_name = "start_chat_examples") + .then(chat, [examples_hidden,chatbot,dropdown_audience, dropdown_sources,dropdown_reports, dropdown_external_sources, search_only] ,[chatbot,sources_textbox,output_query,output_language, sources_raw, current_graphs],concurrency_limit = 8,api_name = "chat_textbox") .then(finish_chat, None, [textbox],api_name = "finish_chat_examples") + # .then(update_sources_number_display, [sources_textbox, figures_cards, current_graphs,papers_html],[tab_sources, tab_figures, tab_graphs, tab_papers] ) ) @@ -567,9 +653,23 @@ with gr.Blocks(title="Climate Q&A", css_paths=os.getcwd()+ "/style.css", theme=t return [gr.update(visible=visible_bools[i]) for i in range(len(samples))] + sources_raw.change(process_figures, inputs=[sources_raw], outputs=[figures_cards, gallery_component]) + + # update sources numbers + sources_textbox.change(update_sources_number_display, [sources_textbox, figures_cards, current_graphs,papers_html],[tab_recommended_content, tab_sources, tab_figures, tab_graphs, tab_papers]) + figures_cards.change(update_sources_number_display, [sources_textbox, figures_cards, current_graphs,papers_html],[tab_recommended_content, tab_sources, tab_figures, tab_graphs, tab_papers]) + current_graphs.change(update_sources_number_display, [sources_textbox, figures_cards, current_graphs,papers_html],[tab_recommended_content, tab_sources, tab_figures, tab_graphs, tab_papers]) + papers_html.change(update_sources_number_display, [sources_textbox, figures_cards, current_graphs,papers_html],[tab_recommended_content, tab_sources, tab_figures, tab_graphs, tab_papers]) + # other questions examples dropdown_samples.change(change_sample_questions,dropdown_samples,samples) + # search for papers + textbox.submit(find_papers,[textbox,after, dropdown_external_sources], [papers_html,citations_network,papers_summary]) + examples_hidden.change(find_papers,[examples_hidden,after,dropdown_external_sources], [papers_html,citations_network,papers_summary]) + + # btn_summary.click(toggle_summary_visibility, outputs=summary_popup) + # btn_relevant_papers.click(toggle_relevant_visibility, outputs=relevant_popup) demo.queue() diff --git a/climateqa/constants.py b/climateqa/constants.py index 64649915ac197140ca7310cb41b7190922c18a4f..379c75e4b5d282eff9188976b4c9596bcd1d6bd7 100644 --- a/climateqa/constants.py +++ b/climateqa/constants.py @@ -42,4 +42,25 @@ POSSIBLE_REPORTS = [ "IPBES IAS A C5", "IPBES IAS A C6", "IPBES IAS A SPM" -] \ No newline at end of file +] + +OWID_CATEGORIES = ['Access to Energy', 'Agricultural Production', + 'Agricultural Regulation & Policy', 'Air Pollution', + 'Animal Welfare', 'Antibiotics', 'Biodiversity', 'Biofuels', + 'Biological & Chemical Weapons', 'CO2 & Greenhouse Gas Emissions', + 'COVID-19', 'Clean Water', 'Clean Water & Sanitation', + 'Climate Change', 'Crop Yields', 'Diet Compositions', + 'Electricity', 'Electricity Mix', 'Energy', 'Energy Efficiency', + 'Energy Prices', 'Environmental Impacts of Food Production', + 'Environmental Protection & Regulation', 'Famines', 'Farm Size', + 'Fertilizers', 'Fish & Overfishing', 'Food Supply', 'Food Trade', + 'Food Waste', 'Food and Agriculture', 'Forests & Deforestation', + 'Fossil Fuels', 'Future Population Growth', + 'Hunger & Undernourishment', 'Indoor Air Pollution', 'Land Use', + 'Land Use & Yields in Agriculture', 'Lead Pollution', + 'Meat & Dairy Production', 'Metals & Minerals', + 'Natural Disasters', 'Nuclear Energy', 'Nuclear Weapons', + 'Oil Spills', 'Outdoor Air Pollution', 'Ozone Layer', 'Pandemics', + 'Pesticides', 'Plastic Pollution', 'Renewable Energy', 'Soil', + 'Transport', 'Urbanization', 'Waste Management', 'Water Pollution', + 'Water Use & Stress', 'Wildfires'] \ No newline at end of file diff --git a/climateqa/engine/chains/answer_chitchat.py b/climateqa/engine/chains/answer_chitchat.py index 02ecf91a00c5bb17f88fc6162a9feb4e174d60a5..c291de4651c88b9a06fe55c20261d6cf2a2f17ca 100644 --- a/climateqa/engine/chains/answer_chitchat.py +++ b/climateqa/engine/chains/answer_chitchat.py @@ -45,8 +45,12 @@ def make_chitchat_node(llm): chitchat_chain = make_chitchat_chain(llm) async def answer_chitchat(state,config): + print("---- Answer chitchat ----") + answer = await chitchat_chain.ainvoke({"question":state["user_input"]},config) - return {"answer":answer} + state["answer"] = answer + return state + # return {"answer":answer} return answer_chitchat diff --git a/climateqa/engine/chains/answer_rag.py b/climateqa/engine/chains/answer_rag.py index 028551148ffcc1994128580cadccb5d92f09a9cd..7b448b96cee8972130e9f6207e2319d10c7563ca 100644 --- a/climateqa/engine/chains/answer_rag.py +++ b/climateqa/engine/chains/answer_rag.py @@ -7,6 +7,9 @@ from langchain_core.prompts.base import format_document from climateqa.engine.chains.prompts import answer_prompt_template,answer_prompt_without_docs_template,answer_prompt_images_template from climateqa.engine.chains.prompts import papers_prompt_template +import time +from ..utils import rename_chain, pass_values + DEFAULT_DOCUMENT_PROMPT = PromptTemplate.from_template(template="{page_content}") @@ -40,6 +43,7 @@ def make_rag_chain(llm): prompt = ChatPromptTemplate.from_template(answer_prompt_template) chain = ({ "context":lambda x : _combine_documents(x["documents"]), + "context_length":lambda x : print("CONTEXT LENGTH : " , len(_combine_documents(x["documents"]))), "query":itemgetter("query"), "language":itemgetter("language"), "audience":itemgetter("audience"), @@ -51,7 +55,6 @@ def make_rag_chain_without_docs(llm): chain = prompt | llm | StrOutputParser() return chain - def make_rag_node(llm,with_docs = True): if with_docs: @@ -60,7 +63,17 @@ def make_rag_node(llm,with_docs = True): rag_chain = make_rag_chain_without_docs(llm) async def answer_rag(state,config): + print("---- Answer RAG ----") + start_time = time.time() + answer = await rag_chain.ainvoke(state,config) + + end_time = time.time() + elapsed_time = end_time - start_time + print("RAG elapsed time: ", elapsed_time) + print("Answer size : ", len(answer)) + # print(f"\n\nAnswer:\n{answer}") + return {"answer":answer} return answer_rag @@ -68,32 +81,32 @@ def make_rag_node(llm,with_docs = True): -# def make_rag_papers_chain(llm): +def make_rag_papers_chain(llm): -# prompt = ChatPromptTemplate.from_template(papers_prompt_template) -# input_documents = { -# "context":lambda x : _combine_documents(x["docs"]), -# **pass_values(["question","language"]) -# } + prompt = ChatPromptTemplate.from_template(papers_prompt_template) + input_documents = { + "context":lambda x : _combine_documents(x["docs"]), + **pass_values(["question","language"]) + } -# chain = input_documents | prompt | llm | StrOutputParser() -# chain = rename_chain(chain,"answer") + chain = input_documents | prompt | llm | StrOutputParser() + chain = rename_chain(chain,"answer") -# return chain + return chain -# def make_illustration_chain(llm): +def make_illustration_chain(llm): -# prompt_with_images = ChatPromptTemplate.from_template(answer_prompt_images_template) + prompt_with_images = ChatPromptTemplate.from_template(answer_prompt_images_template) -# input_description_images = { -# "images":lambda x : _combine_documents(get_image_docs(x["docs"])), -# **pass_values(["question","audience","language","answer"]), -# } + input_description_images = { + "images":lambda x : _combine_documents(get_image_docs(x["docs"])), + **pass_values(["question","audience","language","answer"]), + } -# illustration_chain = input_description_images | prompt_with_images | llm | StrOutputParser() -# return illustration_chain \ No newline at end of file + illustration_chain = input_description_images | prompt_with_images | llm | StrOutputParser() + return illustration_chain diff --git a/climateqa/engine/chains/chitchat_categorization.py b/climateqa/engine/chains/chitchat_categorization.py new file mode 100644 index 0000000000000000000000000000000000000000..bc7171e6b2a49b0409377176b2f748dda1a2987c --- /dev/null +++ b/climateqa/engine/chains/chitchat_categorization.py @@ -0,0 +1,43 @@ + +from langchain_core.pydantic_v1 import BaseModel, Field +from typing import List +from typing import Literal +from langchain.prompts import ChatPromptTemplate +from langchain_core.utils.function_calling import convert_to_openai_function +from langchain.output_parsers.openai_functions import JsonOutputFunctionsParser + + +class IntentCategorizer(BaseModel): + """Analyzing the user message input""" + + environment: bool = Field( + description="Return 'True' if the question relates to climate change, the environment, nature, etc. (Example: should I eat fish?). Return 'False' if the question is just chit chat or not related to the environment or climate change.", + ) + + +def make_chitchat_intent_categorization_chain(llm): + + openai_functions = [convert_to_openai_function(IntentCategorizer)] + llm_with_functions = llm.bind(functions = openai_functions,function_call={"name":"IntentCategorizer"}) + + prompt = ChatPromptTemplate.from_messages([ + ("system", "You are a helpful assistant, you will analyze, translate and reformulate the user input message using the function provided"), + ("user", "input: {input}") + ]) + + chain = prompt | llm_with_functions | JsonOutputFunctionsParser() + return chain + + +def make_chitchat_intent_categorization_node(llm): + + categorization_chain = make_chitchat_intent_categorization_chain(llm) + + def categorize_message(state): + output = categorization_chain.invoke({"input": state["user_input"]}) + print(f"\n\nChit chat output intent categorization: {output}\n") + state["search_graphs_chitchat"] = output["environment"] + print(f"\n\nChit chat output intent categorization: {state}\n") + return state + + return categorize_message diff --git a/climateqa/engine/chains/graph_retriever.py b/climateqa/engine/chains/graph_retriever.py new file mode 100644 index 0000000000000000000000000000000000000000..56747bc5e49e34b69b3e39c344c0fcb5239d62ac --- /dev/null +++ b/climateqa/engine/chains/graph_retriever.py @@ -0,0 +1,128 @@ +import sys +import os +from contextlib import contextmanager + +from ..reranker import rerank_docs +from ..graph_retriever import retrieve_graphs # GraphRetriever +from ...utils import remove_duplicates_keep_highest_score + + +def divide_into_parts(target, parts): + # Base value for each part + base = target // parts + # Remainder to distribute + remainder = target % parts + # List to hold the result + result = [] + + for i in range(parts): + if i < remainder: + # These parts get base value + 1 + result.append(base + 1) + else: + # The rest get the base value + result.append(base) + + return result + + +@contextmanager +def suppress_output(): + # Open a null device + with open(os.devnull, 'w') as devnull: + # Store the original stdout and stderr + old_stdout = sys.stdout + old_stderr = sys.stderr + # Redirect stdout and stderr to the null device + sys.stdout = devnull + sys.stderr = devnull + try: + yield + finally: + # Restore stdout and stderr + sys.stdout = old_stdout + sys.stderr = old_stderr + + +def make_graph_retriever_node(vectorstore, reranker, rerank_by_question=True, k_final=15, k_before_reranking=100): + + async def node_retrieve_graphs(state): + print("---- Retrieving graphs ----") + + POSSIBLE_SOURCES = ["IEA", "OWID"] + questions = state["remaining_questions"] if state["remaining_questions"] is not None and state["remaining_questions"]!=[] else [state["query"]] + # sources_input = state["sources_input"] + sources_input = ["auto"] + + auto_mode = "auto" in sources_input + + # There are several options to get the final top k + # Option 1 - Get 100 documents by question and rerank by question + # Option 2 - Get 100/n documents by question and rerank the total + if rerank_by_question: + k_by_question = divide_into_parts(k_final,len(questions)) + + docs = [] + + for i,q in enumerate(questions): + + question = q["question"] if isinstance(q, dict) else q + + print(f"Subquestion {i}: {question}") + + # If auto mode, we use all sources + if auto_mode: + sources = POSSIBLE_SOURCES + # Otherwise, we use the config + else: + sources = sources_input + + if any([x in POSSIBLE_SOURCES for x in sources]): + + sources = [x for x in sources if x in POSSIBLE_SOURCES] + + # Search the document store using the retriever + docs_question = await retrieve_graphs( + query = question, + vectorstore = vectorstore, + sources = sources, + k_total = k_before_reranking, + threshold = 0.5, + ) + # docs_question = retriever.get_relevant_documents(question) + + # Rerank + if reranker is not None and docs_question!=[]: + with suppress_output(): + docs_question = rerank_docs(reranker,docs_question,question) + else: + # Add a default reranking score + for doc in docs_question: + doc.metadata["reranking_score"] = doc.metadata["similarity_score"] + + # If rerank by question we select the top documents for each question + if rerank_by_question: + docs_question = docs_question[:k_by_question[i]] + + # Add sources used in the metadata + for doc in docs_question: + doc.metadata["sources_used"] = sources + + print(f"{len(docs_question)} graphs retrieved for subquestion {i + 1}: {docs_question}") + + docs.extend(docs_question) + + else: + print(f"There are no graphs which match the sources filtered on. Sources filtered on: {sources}. Sources available: {POSSIBLE_SOURCES}.") + + # Remove duplicates and keep the duplicate document with the highest reranking score + docs = remove_duplicates_keep_highest_score(docs) + + # Sorting the list in descending order by rerank_score + # Then select the top k + docs = sorted(docs, key=lambda x: x.metadata["reranking_score"], reverse=True) + docs = docs[:k_final] + + return {"recommended_content": docs} + + return node_retrieve_graphs \ No newline at end of file diff --git a/climateqa/engine/chains/intent_categorization.py b/climateqa/engine/chains/intent_categorization.py index 0606de7280f7e4ac8e44df3ab00c9ad00a617f58..9aff32a2bc61ef223b9518a6aa7388f84f1fdf67 100644 --- a/climateqa/engine/chains/intent_categorization.py +++ b/climateqa/engine/chains/intent_categorization.py @@ -17,8 +17,8 @@ class IntentCategorizer(BaseModel): intent: str = Field( enum=[ "ai_impact", - "geo_info", - "esg", + # "geo_info", + # "esg", "search", "chitchat", ], @@ -28,11 +28,12 @@ class IntentCategorizer(BaseModel): Examples: - ai_impact = Environmental impacts of AI: "What are the environmental impacts of AI", "How does AI affect the environment" - - geo_info = Geolocated info about climate change: Any question where the user wants to know localized impacts of climate change, eg: "What will be the temperature in Marseille in 2050" - - esg = Any question about the ESG regulation, frameworks and standards like the CSRD, TCFD, SASB, GRI, CDP, etc. - search = Searching for any quesiton about climate change, energy, biodiversity, nature, and everything we can find the IPCC or IPBES reports or scientific papers, - chitchat = Any general question that is not related to the environment or climate change or just conversational, or if you don't think searching the IPCC or IPBES reports would be relevant """, + # - geo_info = Geolocated info about climate change: Any question where the user wants to know localized impacts of climate change, eg: "What will be the temperature in Marseille in 2050" + # - esg = Any question about the ESG regulation, frameworks and standards like the CSRD, TCFD, SASB, GRI, CDP, etc. + ) @@ -43,7 +44,7 @@ def make_intent_categorization_chain(llm): llm_with_functions = llm.bind(functions = openai_functions,function_call={"name":"IntentCategorizer"}) prompt = ChatPromptTemplate.from_messages([ - ("system", "You are a helpful assistant, you will analyze, translate and reformulate the user input message using the function provided"), + ("system", "You are a helpful assistant, you will analyze, translate and categorize the user input message using the function provided. Categorize the user input as ai ONLY if it is related to Artificial Intelligence, search if it is related to the environment, climate change, energy, biodiversity, nature, etc. and chitchat if it is just general conversation."), ("user", "input: {input}") ]) @@ -56,7 +57,10 @@ def make_intent_categorization_node(llm): categorization_chain = make_intent_categorization_chain(llm) def categorize_message(state): - output = categorization_chain.invoke({"input":state["user_input"]}) + print("---- Categorize_message ----") + + output = categorization_chain.invoke({"input": state["user_input"]}) + print(f"\n\nOutput intent categorization: {output}\n") if "language" not in output: output["language"] = "English" output["query"] = state["user_input"] return output diff --git a/climateqa/engine/chains/prompts.py b/climateqa/engine/chains/prompts.py index 98f5ccda5da992a0cb7eb5336cd872bf34b57551..8d277be50d075ac75b4027e7cf4d4084bc175912 100644 --- a/climateqa/engine/chains/prompts.py +++ b/climateqa/engine/chains/prompts.py @@ -147,4 +147,27 @@ audience_prompts = { "children": "6 year old children that don't know anything about science and climate change and need metaphors to learn", "general": "the general public who know the basics in science and climate change and want to learn more about it without technical terms. Still use references to passages.", "experts": "expert and climate scientists that are not afraid of technical terms", -} \ No newline at end of file +} + + +answer_prompt_graph_template = """ +Given the user question and a list of graphs which are related to the question, rank the graphs based on relevance to the user question. ALWAYS follow the guidelines given below. + +### Guidelines ### +- Keep all the graphs that are given to you. +- NEVER modify the graph HTML embedding, the category or the source leave them exactly as they are given. +- Return the ranked graphs as a list of dictionaries with keys 'embedding', 'category', and 'source'. +- Return a valid JSON output. + +----------------------- +User question: +{query} + +Graphs and their HTML embedding: +{recommended_content} + +----------------------- +{format_instructions} + +Output the result as json with a key "graphs" containing a list of dictionaries of the relevant graphs with keys 'embedding', 'category', and 'source'. Do not modify the graph HTML embedding, the category or the source. Do not put any message or text before or after the JSON output. +""" \ No newline at end of file diff --git a/climateqa/engine/chains/query_transformation.py b/climateqa/engine/chains/query_transformation.py index 386ec4396c4125682d53b4f0ac4bdb4c392d3b1f..44b636be01a893c90991396544eaab8169e73d29 100644 --- a/climateqa/engine/chains/query_transformation.py +++ b/climateqa/engine/chains/query_transformation.py @@ -69,15 +69,15 @@ class QueryAnalysis(BaseModel): # """ # ) - sources: List[Literal["IPCC", "IPBES", "IPOS","OpenAlex"]] = Field( + sources: List[Literal["IPCC", "IPBES", "IPOS"]] = Field( #,"OpenAlex"]] = Field( ..., description=""" Given a user question choose which documents would be most relevant for answering their question, - IPCC is for questions about climate change, energy, impacts, and everything we can find the IPCC reports - IPBES is for questions about biodiversity and nature - IPOS is for questions about the ocean and deep sea mining - - OpenAlex is for any other questions that are not in the previous categories but could be found in the scientific litterature """, + # - OpenAlex is for any other questions that are not in the previous categories but could be found in the scientific litterature ) # topics: List[Literal[ # "Climate change", @@ -138,6 +138,8 @@ def make_query_transform_node(llm,k_final=15): rewriter_chain = make_query_rewriter_chain(llm) def transform_query(state): + print("---- Transform query ----") + if "sources_auto" not in state or state["sources_auto"] is None or state["sources_auto"] is False: auto_mode = False @@ -158,6 +160,12 @@ def make_query_transform_node(llm,k_final=15): for question in new_state["questions"]: question_state = {"question":question} analysis_output = rewriter_chain.invoke({"input":question}) + + # TODO WARNING llm should always return smthg + # The case when the llm does not return any sources + if not analysis_output["sources"] or not all(source in ["IPCC", "IPBS", "IPOS"] for source in analysis_output["sources"]): + analysis_output["sources"] = ["IPCC", "IPBES", "IPOS"] + question_state.update(analysis_output) questions.append(question_state) diff --git a/climateqa/engine/chains/retrieve_documents.py b/climateqa/engine/chains/retrieve_documents.py index 6b445ebbfa56a0308b69bb32d6a95fc2c84ad882..1fa89be763eb36773ef0150513bb05918a580b4d 100644 --- a/climateqa/engine/chains/retrieve_documents.py +++ b/climateqa/engine/chains/retrieve_documents.py @@ -8,10 +8,13 @@ from langchain_core.runnables import RunnableParallel, RunnablePassthrough from langchain_core.runnables import RunnableLambda from ..reranker import rerank_docs -from ...knowledge.retriever import ClimateQARetriever +# from ...knowledge.retriever import ClimateQARetriever from ...knowledge.openalex import OpenAlexRetriever from .keywords_extraction import make_keywords_extraction_chain from ..utils import log_event +from langchain_core.vectorstores import VectorStore +from typing import List +from langchain_core.documents.base import Document @@ -57,105 +60,244 @@ def query_retriever(question): """Just a dummy tool to simulate the retriever query""" return question +def _add_sources_used_in_metadata(docs,sources,question,index): + for doc in docs: + doc.metadata["sources_used"] = sources + doc.metadata["question_used"] = question + doc.metadata["index_used"] = index + return docs +def _get_k_summary_by_question(n_questions): + if n_questions == 0: + return 0 + elif n_questions == 1: + return 5 + elif n_questions == 2: + return 3 + elif n_questions == 3: + return 2 + else: + return 1 + +def _get_k_images_by_question(n_questions): + if n_questions == 0: + return 0 + elif n_questions == 1: + return 7 + elif n_questions == 2: + return 5 + elif n_questions == 3: + return 2 + else: + return 1 + +def _add_metadata_and_score(docs: List) -> Document: + # Add score to metadata + docs_with_metadata = [] + for i,(doc,score) in enumerate(docs): + doc.page_content = doc.page_content.replace("\r\n"," ") + doc.metadata["similarity_score"] = score + doc.metadata["content"] = doc.page_content + doc.metadata["page_number"] = int(doc.metadata["page_number"]) + 1 + # doc.page_content = f"""Doc {i+1} - {doc.metadata['short_name']}: {doc.page_content}""" + docs_with_metadata.append(doc) + return docs_with_metadata +async def get_IPCC_relevant_documents( + query: str, + vectorstore:VectorStore, + sources:list = ["IPCC","IPBES","IPOS"], + search_figures:bool = False, + reports:list = [], + threshold:float = 0.6, + k_summary:int = 3, + k_total:int = 10, + k_images: int = 5, + namespace:str = "vectors", + min_size:int = 200, + search_only:bool = False, +) : + # Check if all elements in the list are either IPCC or IPBES + assert isinstance(sources,list) + assert sources + assert all([x in ["IPCC","IPBES","IPOS"] for x in sources]) + assert k_total > k_summary, "k_total should be greater than k_summary" + # Prepare base search kwargs + filters = {} + if len(reports) > 0: + filters["short_name"] = {"$in":reports} + else: + filters["source"] = { "$in": sources} -def make_retriever_node(vectorstore,reranker,llm,rerank_by_question=True, k_final=15, k_before_reranking=100, k_summary=5): + # INIT + docs_summaries = [] + docs_full = [] + docs_images = [] - # The chain callback is not necessary, but it propagates the langchain callbacks to the astream_events logger to display intermediate results - @chain - async def retrieve_documents(state,config): - - keywords_extraction = make_keywords_extraction_chain(llm) - - current_question = state["remaining_questions"][0] - remaining_questions = state["remaining_questions"][1:] - - # ToolMessage(f"Retrieving documents for question: {current_question['question']}",tool_call_id = "retriever") + if search_only: + # Only search for images if search_only is True + if search_figures: + filters_image = { + **filters, + "chunk_type":"image" + } + docs_images = vectorstore.similarity_search_with_score(query=query,filter = filters_image,k = k_images) + docs_images = _add_metadata_and_score(docs_images) + else: + # Regular search flow for text and optionally images + # Search for k_summary documents in the summaries dataset + filters_summaries = { + **filters, + "chunk_type":"text", + "report_type": { "$in":["SPM"]}, + } + docs_summaries = vectorstore.similarity_search_with_score(query=query,filter = filters_summaries,k = k_summary) + docs_summaries = [x for x in docs_summaries if x[1] > threshold] - # # There are several options to get the final top k - # # Option 1 - Get 100 documents by question and rerank by question - # # Option 2 - Get 100/n documents by question and rerank the total - # if rerank_by_question: - # k_by_question = divide_into_parts(k_final,len(questions)) - if "documents" in state and state["documents"] is not None: - docs = state["documents"] - else: - docs = [] - - - - k_by_question = k_final // state["n_questions"] - - sources = current_question["sources"] - question = current_question["question"] - index = current_question["index"] + # Search for k_total - k_summary documents in the full reports dataset + filters_full = { + **filters, + "chunk_type":"text", + "report_type": { "$nin":["SPM"]}, + } + k_full = k_total - len(docs_summaries) + docs_full = vectorstore.similarity_search_with_score(query=query,filter = filters_full,k = k_full) + if search_figures: + # Images + filters_image = { + **filters, + "chunk_type":"image" + } + docs_images = vectorstore.similarity_search_with_score(query=query,filter = filters_image,k = k_images) - await log_event({"question":question,"sources":sources,"index":index},"log_retriever",config) + docs_summaries, docs_full, docs_images = _add_metadata_and_score(docs_summaries), _add_metadata_and_score(docs_full), _add_metadata_and_score(docs_images) + + # Filter if length are below threshold + docs_summaries = [x for x in docs_summaries if len(x.page_content) > min_size] + docs_full = [x for x in docs_full if len(x.page_content) > min_size] + + return { + "docs_summaries" : docs_summaries, + "docs_full" : docs_full, + "docs_images" : docs_images, + } - if index == "Vector": - - # Search the document store using the retriever - # Configure high top k for further reranking step - retriever = ClimateQARetriever( - vectorstore=vectorstore, - sources = sources, - min_size = 200, - k_summary = k_summary, - k_total = k_before_reranking, - threshold = 0.5, - ) - docs_question = await retriever.ainvoke(question,config) - elif index == "OpenAlex": +# The chain callback is not necessary, but it propagates the langchain callbacks to the astream_events logger to display intermediate results +# @chain +async def retrieve_documents(state,config, vectorstore,reranker,llm,rerank_by_question=True, k_final=15, k_before_reranking=100, k_summary=5, k_images=5): + """ + Retrieve and rerank documents based on the current question in the state. + + Args: + state (dict): The current state containing documents, related content, relevant content sources, remaining questions and n_questions. + config (dict): Configuration settings for logging and other purposes. + vectorstore (object): The vector store used to retrieve relevant documents. + reranker (object): The reranker used to rerank the retrieved documents. + llm (object): The language model used for processing. + rerank_by_question (bool, optional): Whether to rerank documents by question. Defaults to True. + k_final (int, optional): The final number of documents to retrieve. Defaults to 15. + k_before_reranking (int, optional): The number of documents to retrieve before reranking. Defaults to 100. + k_summary (int, optional): The number of summary documents to retrieve. Defaults to 5. + k_images (int, optional): The number of image documents to retrieve. Defaults to 5. + Returns: + dict: The updated state containing the retrieved and reranked documents, related content, and remaining questions. + """ + print("---- Retrieve documents ----") + + # Get the documents from the state + if "documents" in state and state["documents"] is not None: + docs = state["documents"] + else: + docs = [] + # Get the related_content from the state + if "related_content" in state and state["related_content"] is not None: + related_content = state["related_content"] + else: + related_content = [] + + search_figures = "IPCC figures" in state["relevant_content_sources"] + search_only = state["search_only"] - keywords = keywords_extraction.invoke(question)["keywords"] - openalex_query = " AND ".join(keywords) + # Get the current question + current_question = state["remaining_questions"][0] + remaining_questions = state["remaining_questions"][1:] + + k_by_question = k_final // state["n_questions"] + k_summary_by_question = _get_k_summary_by_question(state["n_questions"]) + k_images_by_question = _get_k_images_by_question(state["n_questions"]) + + sources = current_question["sources"] + question = current_question["question"] + index = current_question["index"] + + print(f"Retrieve documents for question: {question}") + await log_event({"question":question,"sources":sources,"index":index},"log_retriever",config) - print(f"... OpenAlex query: {openalex_query}") - retriever_openalex = OpenAlexRetriever( - min_year = state.get("min_year",1960), - max_year = state.get("max_year",None), - k = k_before_reranking - ) - docs_question = await retriever_openalex.ainvoke(openalex_query,config) + if index == "Vector": # always true for now + docs_question_dict = await get_IPCC_relevant_documents( + query = question, + vectorstore=vectorstore, + search_figures = search_figures, + sources = sources, + min_size = 200, + k_summary = k_summary_by_question, + k_total = k_before_reranking, + k_images = k_images_by_question, + threshold = 0.5, + search_only = search_only, + ) - else: - raise Exception(f"Index {index} not found in the routing index") - - # Rerank - if reranker is not None: - with suppress_output(): - docs_question = rerank_docs(reranker,docs_question,question) - else: - # Add a default reranking score - for doc in docs_question: - doc.metadata["reranking_score"] = doc.metadata["similarity_score"] - - # If rerank by question we select the top documents for each question - if rerank_by_question: - docs_question = docs_question[:k_by_question] - - # Add sources used in the metadata + + # Rerank + if reranker is not None: + with suppress_output(): + docs_question_summary_reranked = rerank_docs(reranker,docs_question_dict["docs_summaries"],question) + docs_question_fulltext_reranked = rerank_docs(reranker,docs_question_dict["docs_full"],question) + docs_question_images_reranked = rerank_docs(reranker,docs_question_dict["docs_images"],question) + if rerank_by_question: + docs_question_summary_reranked = sorted(docs_question_summary_reranked, key=lambda x: x.metadata["reranking_score"], reverse=True) + docs_question_fulltext_reranked = sorted(docs_question_fulltext_reranked, key=lambda x: x.metadata["reranking_score"], reverse=True) + docs_question_images_reranked = sorted(docs_question_images_reranked, key=lambda x: x.metadata["reranking_score"], reverse=True) + else: + docs_question = docs_question_dict["docs_summaries"] + docs_question_dict["docs_full"] + # Add a default reranking score for doc in docs_question: - doc.metadata["sources_used"] = sources - doc.metadata["question_used"] = question - doc.metadata["index_used"] = index - - # Add to the list of docs - docs.extend(docs_question) + doc.metadata["reranking_score"] = doc.metadata["similarity_score"] + + docs_question = docs_question_summary_reranked + docs_question_fulltext_reranked + docs_question = docs_question[:k_by_question] + images_question = docs_question_images_reranked[:k_images] - # Sorting the list in descending order by rerank_score - docs = sorted(docs, key=lambda x: x.metadata["reranking_score"], reverse=True) - new_state = {"documents":docs,"remaining_questions":remaining_questions} - return new_state + if reranker is not None and rerank_by_question: + docs_question = sorted(docs_question, key=lambda x: x.metadata["reranking_score"], reverse=True) + + # Add sources used in the metadata + docs_question = _add_sources_used_in_metadata(docs_question,sources,question,index) + images_question = _add_sources_used_in_metadata(images_question,sources,question,index) + + # Add to the list of docs + docs.extend(docs_question) + related_content.extend(images_question) + new_state = {"documents":docs, "related_contents": related_content,"remaining_questions":remaining_questions} + return new_state - return retrieve_documents + + +def make_retriever_node(vectorstore,reranker,llm,rerank_by_question=True, k_final=15, k_before_reranking=100, k_summary=5): + @chain + async def retrieve_docs(state, config): + state = await retrieve_documents(state,config, vectorstore,reranker,llm,rerank_by_question, k_final, k_before_reranking, k_summary) + return state + + return retrieve_docs + + diff --git a/climateqa/engine/chains/retrieve_papers.py b/climateqa/engine/chains/retrieve_papers.py new file mode 100644 index 0000000000000000000000000000000000000000..e42893f57757d929b8d11a3d3c46ff2440613bc0 --- /dev/null +++ b/climateqa/engine/chains/retrieve_papers.py @@ -0,0 +1,95 @@ +from climateqa.engine.keywords import make_keywords_chain +from climateqa.engine.llm import get_llm +from climateqa.knowledge.openalex import OpenAlex +from climateqa.engine.chains.answer_rag import make_rag_papers_chain +from front.utils import make_html_papers +from climateqa.engine.reranker import get_reranker + +oa = OpenAlex() + +llm = get_llm(provider="openai",max_tokens = 1024,temperature = 0.0) +reranker = get_reranker("nano") + + +papers_cols_widths = { + "id":100, + "title":300, + "doi":100, + "publication_year":100, + "abstract":500, + "is_oa":50, +} + +papers_cols = list(papers_cols_widths.keys()) +papers_cols_widths = list(papers_cols_widths.values()) + + + +def generate_keywords(query): + chain = make_keywords_chain(llm) + keywords = chain.invoke(query) + keywords = " AND ".join(keywords["keywords"]) + return keywords + + +async def find_papers(query,after, relevant_content_sources, reranker= reranker): + if "OpenAlex" in relevant_content_sources: + summary = "" + keywords = generate_keywords(query) + df_works = oa.search(keywords,after = after) + + print(f"Found {len(df_works)} papers") + + if not df_works.empty: + df_works = df_works.dropna(subset=["abstract"]) + df_works = df_works[df_works["abstract"] != ""].reset_index(drop = True) + df_works = oa.rerank(query,df_works,reranker) + df_works = df_works.sort_values("rerank_score",ascending=False) + docs_html = [] + for i in range(10): + docs_html.append(make_html_papers(df_works, i)) + docs_html = "".join(docs_html) + G = oa.make_network(df_works) + + height = "750px" + network = oa.show_network(G,color_by = "rerank_score",notebook=False,height = height) + network_html = network.generate_html() + + network_html = network_html.replace("'", "\"") + css_to_inject = "" + network_html = network_html + css_to_inject + + + network_html = f"""""" + + + docs = df_works["content"].head(10).tolist() + + df_works = df_works.reset_index(drop = True).reset_index().rename(columns = {"index":"doc"}) + df_works["doc"] = df_works["doc"] + 1 + df_works = df_works[papers_cols] + + yield docs_html, network_html, summary + + chain = make_rag_papers_chain(llm) + result = chain.astream_log({"question": query,"docs": docs,"language":"English"}) + path_answer = "/logs/StrOutputParser/streamed_output/-" + + async for op in result: + + op = op.ops[0] + + if op['path'] == path_answer: # reforulated question + new_token = op['value'] # str + summary += new_token + else: + continue + yield docs_html, network_html, summary + else : + print("No papers found") + else : + yield "","", "" diff --git a/climateqa/engine/chains/retriever.py b/climateqa/engine/chains/retriever.py new file mode 100644 index 0000000000000000000000000000000000000000..67c454ca461153e41b3d1e71271dd41f9cd82521 --- /dev/null +++ b/climateqa/engine/chains/retriever.py @@ -0,0 +1,126 @@ +# import sys +# import os +# from contextlib import contextmanager + +# from ..reranker import rerank_docs +# from ...knowledge.retriever import ClimateQARetriever + + + + +# def divide_into_parts(target, parts): +# # Base value for each part +# base = target // parts +# # Remainder to distribute +# remainder = target % parts +# # List to hold the result +# result = [] + +# for i in range(parts): +# if i < remainder: +# # These parts get base value + 1 +# result.append(base + 1) +# else: +# # The rest get the base value +# result.append(base) + +# return result + + +# @contextmanager +# def suppress_output(): +# # Open a null device +# with open(os.devnull, 'w') as devnull: +# # Store the original stdout and stderr +# old_stdout = sys.stdout +# old_stderr = sys.stderr +# # Redirect stdout and stderr to the null device +# sys.stdout = devnull +# sys.stderr = devnull +# try: +# yield +# finally: +# # Restore stdout and stderr +# sys.stdout = old_stdout +# sys.stderr = old_stderr + + + +# def make_retriever_node(vectorstore,reranker,rerank_by_question=True, k_final=15, k_before_reranking=100, k_summary=5): + +# def retrieve_documents(state): + +# POSSIBLE_SOURCES = ["IPCC","IPBES","IPOS"] # ,"OpenAlex"] +# questions = state["questions"] + +# # Use sources from the user input or from the LLM detection +# if "sources_input" not in state or state["sources_input"] is None: +# sources_input = ["auto"] +# else: +# sources_input = state["sources_input"] +# auto_mode = "auto" in sources_input + +# # There are several options to get the final top k +# # Option 1 - Get 100 documents by question and rerank by question +# # Option 2 - Get 100/n documents by question and rerank the total +# if rerank_by_question: +# k_by_question = divide_into_parts(k_final,len(questions)) + +# docs = [] + +# for i,q in enumerate(questions): + +# sources = q["sources"] +# question = q["question"] + +# # If auto mode, we use the sources detected by the LLM +# if auto_mode: +# sources = [x for x in sources if x in POSSIBLE_SOURCES] + +# # Otherwise, we use the config +# else: +# sources = sources_input + +# # Search the document store using the retriever +# # Configure high top k for further reranking step +# retriever = ClimateQARetriever( +# vectorstore=vectorstore, +# sources = sources, +# # reports = ias_reports, +# min_size = 200, +# k_summary = k_summary, +# k_total = k_before_reranking, +# threshold = 0.5, +# ) +# docs_question = retriever.get_relevant_documents(question) + +# # Rerank +# if reranker is not None: +# with suppress_output(): +# docs_question = rerank_docs(reranker,docs_question,question) +# else: +# # Add a default reranking score +# for doc in docs_question: +# doc.metadata["reranking_score"] = doc.metadata["similarity_score"] + +# # If rerank by question we select the top documents for each question +# if rerank_by_question: +# docs_question = docs_question[:k_by_question[i]] + +# # Add sources used in the metadata +# for doc in docs_question: +# doc.metadata["sources_used"] = sources + +# # Add to the list of docs +# docs.extend(docs_question) + +# # Sorting the list in descending order by rerank_score +# # Then select the top k +# docs = sorted(docs, key=lambda x: x.metadata["reranking_score"], reverse=True) +# docs = docs[:k_final] + +# new_state = {"documents":docs} +# return new_state + +# return retrieve_documents + diff --git a/climateqa/engine/chains/set_defaults.py b/climateqa/engine/chains/set_defaults.py new file mode 100644 index 0000000000000000000000000000000000000000..2844bc399c7ca75c869eb122273bd7f5c91723d5 --- /dev/null +++ b/climateqa/engine/chains/set_defaults.py @@ -0,0 +1,13 @@ +def set_defaults(state): + print("---- Setting defaults ----") + + if not state["audience"] or state["audience"] is None: + state.update({"audience": "experts"}) + + sources_input = state["sources_input"] if "sources_input" in state else ["auto"] + state.update({"sources_input": sources_input}) + + # if not state["sources_input"] or state["sources_input"] is None: + # state.update({"sources_input": ["auto"]}) + + return state \ No newline at end of file diff --git a/climateqa/engine/chains/translation.py b/climateqa/engine/chains/translation.py index d1159d82da78a8fb8251540564145e1947b0e0c4..1b8db6f94c9dbd31f9b1ce8774867c6d4e6a5757 100644 --- a/climateqa/engine/chains/translation.py +++ b/climateqa/engine/chains/translation.py @@ -30,10 +30,11 @@ def make_translation_chain(llm): def make_translation_node(llm): - translation_chain = make_translation_chain(llm) def translate_query(state): + print("---- Translate query ----") + user_input = state["user_input"] translation = translation_chain.invoke({"input":user_input}) return {"query":translation["translation"]} diff --git a/climateqa/engine/graph.py b/climateqa/engine/graph.py index 3d2316bd80f37098382d17b4a5010c95f43931d6..790e2e9e46734b9127d2fe20a31ffbce80bc76be 100644 --- a/climateqa/engine/graph.py +++ b/climateqa/engine/graph.py @@ -7,7 +7,7 @@ from langgraph.graph import END, StateGraph from langchain_core.runnables.graph import CurveStyle, MermaidDrawMethod from typing_extensions import TypedDict -from typing import List +from typing import List, Dict from IPython.display import display, HTML, Image @@ -18,6 +18,9 @@ from .chains.translation import make_translation_node from .chains.intent_categorization import make_intent_categorization_node from .chains.retrieve_documents import make_retriever_node from .chains.answer_rag import make_rag_node +from .chains.graph_retriever import make_graph_retriever_node +from .chains.chitchat_categorization import make_chitchat_intent_categorization_node +# from .chains.set_defaults import set_defaults class GraphState(TypedDict): """ @@ -26,16 +29,21 @@ class GraphState(TypedDict): user_input : str language : str intent : str + search_graphs_chitchat : bool query: str remaining_questions : List[dict] n_questions : int answer: str audience: str = "experts" sources_input: List[str] = ["IPCC","IPBES"] + relevant_content_sources: List[str] = ["IPCC figures"] sources_auto: bool = True min_year: int = 1960 max_year: int = None documents: List[Document] + related_contents : Dict[str,Document] + recommended_content : List[Document] + search_only : bool = False def search(state): #TODO return state @@ -52,6 +60,13 @@ def route_intent(state): else: # Search route return "search" + +def chitchat_route_intent(state): + intent = state["search_graphs_chitchat"] + if intent is True: + return "retrieve_graphs_chitchat" + elif intent is False: + return END def route_translation(state): if state["language"].lower() == "english": @@ -66,11 +81,18 @@ def route_based_on_relevant_docs(state,threshold_docs=0.2): else: return "answer_rag_no_docs" +def route_retrieve_documents(state): + if state["search_only"] : + return END + elif len(state["remaining_questions"]) > 0: + return "retrieve_documents" + else: + return "answer_search" def make_id_dict(values): return {k:k for k in values} -def make_graph_agent(llm,vectorstore,reranker,threshold_docs = 0.2): +def make_graph_agent(llm, vectorstore_ipcc, vectorstore_graphs, reranker, threshold_docs=0.2): workflow = StateGraph(GraphState) @@ -80,21 +102,26 @@ def make_graph_agent(llm,vectorstore,reranker,threshold_docs = 0.2): translate_query = make_translation_node(llm) answer_chitchat = make_chitchat_node(llm) answer_ai_impact = make_ai_impact_node(llm) - retrieve_documents = make_retriever_node(vectorstore,reranker,llm) - answer_rag = make_rag_node(llm,with_docs=True) - answer_rag_no_docs = make_rag_node(llm,with_docs=False) + retrieve_documents = make_retriever_node(vectorstore_ipcc, reranker, llm) + retrieve_graphs = make_graph_retriever_node(vectorstore_graphs, reranker) + answer_rag = make_rag_node(llm, with_docs=True) + answer_rag_no_docs = make_rag_node(llm, with_docs=False) + chitchat_categorize_intent = make_chitchat_intent_categorization_node(llm) # Define the nodes + # workflow.add_node("set_defaults", set_defaults) workflow.add_node("categorize_intent", categorize_intent) workflow.add_node("search", search) workflow.add_node("answer_search", answer_search) workflow.add_node("transform_query", transform_query) workflow.add_node("translate_query", translate_query) workflow.add_node("answer_chitchat", answer_chitchat) - # workflow.add_node("answer_ai_impact", answer_ai_impact) - workflow.add_node("retrieve_documents",retrieve_documents) - workflow.add_node("answer_rag",answer_rag) - workflow.add_node("answer_rag_no_docs",answer_rag_no_docs) + workflow.add_node("chitchat_categorize_intent", chitchat_categorize_intent) + workflow.add_node("retrieve_graphs", retrieve_graphs) + workflow.add_node("retrieve_graphs_chitchat", retrieve_graphs) + workflow.add_node("retrieve_documents", retrieve_documents) + workflow.add_node("answer_rag", answer_rag) + workflow.add_node("answer_rag_no_docs", answer_rag_no_docs) # Entry point workflow.set_entry_point("categorize_intent") @@ -106,6 +133,12 @@ def make_graph_agent(llm,vectorstore,reranker,threshold_docs = 0.2): make_id_dict(["answer_chitchat","search"]) ) + workflow.add_conditional_edges( + "chitchat_categorize_intent", + chitchat_route_intent, + make_id_dict(["retrieve_graphs_chitchat", END]) + ) + workflow.add_conditional_edges( "search", route_translation, @@ -113,8 +146,9 @@ def make_graph_agent(llm,vectorstore,reranker,threshold_docs = 0.2): ) workflow.add_conditional_edges( "retrieve_documents", - lambda state : "retrieve_documents" if len(state["remaining_questions"]) > 0 else "answer_search", - make_id_dict(["retrieve_documents","answer_search"]) + # lambda state : "retrieve_documents" if len(state["remaining_questions"]) > 0 else "answer_search", + route_retrieve_documents, + make_id_dict([END,"retrieve_documents","answer_search"]) ) workflow.add_conditional_edges( @@ -122,14 +156,21 @@ def make_graph_agent(llm,vectorstore,reranker,threshold_docs = 0.2): lambda x : route_based_on_relevant_docs(x,threshold_docs=threshold_docs), make_id_dict(["answer_rag","answer_rag_no_docs"]) ) + workflow.add_conditional_edges( + "transform_query", + lambda state : "retrieve_graphs" if "OurWorldInData" in state["relevant_content_sources"] else END, + make_id_dict(["retrieve_graphs", END]) + ) # Define the edges workflow.add_edge("translate_query", "transform_query") workflow.add_edge("transform_query", "retrieve_documents") + + workflow.add_edge("retrieve_graphs", END) workflow.add_edge("answer_rag", END) workflow.add_edge("answer_rag_no_docs", END) - workflow.add_edge("answer_chitchat", END) - # workflow.add_edge("answer_ai_impact", END) + workflow.add_edge("answer_chitchat", "chitchat_categorize_intent") + # Compile app = workflow.compile() @@ -146,4 +187,4 @@ def display_graph(app): draw_method=MermaidDrawMethod.API, ) ) - ) \ No newline at end of file + ) diff --git a/climateqa/engine/graph_retriever.py b/climateqa/engine/graph_retriever.py new file mode 100644 index 0000000000000000000000000000000000000000..ed7349995c9989f6159a57c263df2611556bade3 --- /dev/null +++ b/climateqa/engine/graph_retriever.py @@ -0,0 +1,88 @@ +from langchain_core.retrievers import BaseRetriever +from langchain_core.documents.base import Document +from langchain_core.vectorstores import VectorStore +from langchain_core.callbacks.manager import CallbackManagerForRetrieverRun + +from typing import List + +# class GraphRetriever(BaseRetriever): +# vectorstore:VectorStore +# sources:list = ["OWID"] # plus tard ajouter OurWorldInData # faudra integrate avec l'autre retriever +# threshold:float = 0.5 +# k_total:int = 10 + +# def _get_relevant_documents( +# self, query: str, *, run_manager: CallbackManagerForRetrieverRun +# ) -> List[Document]: + +# # Check if all elements in the list are IEA or OWID +# assert isinstance(self.sources,list) +# assert self.sources +# assert any([x in ["OWID"] for x in self.sources]) + +# # Prepare base search kwargs +# filters = {} + +# filters["source"] = {"$in": self.sources} + +# docs = self.vectorstore.similarity_search_with_score(query=query, filter=filters, k=self.k_total) + +# # Filter if scores are below threshold +# docs = [x for x in docs if x[1] > self.threshold] + +# # Remove duplicate documents +# unique_docs = [] +# seen_docs = [] +# for i, doc in enumerate(docs): +# if doc[0].page_content not in seen_docs: +# unique_docs.append(doc) +# seen_docs.append(doc[0].page_content) + +# # Add score to metadata +# results = [] +# for i,(doc,score) in enumerate(unique_docs): +# doc.metadata["similarity_score"] = score +# doc.metadata["content"] = doc.page_content +# results.append(doc) + +# return results + +async def retrieve_graphs( + query: str, + vectorstore:VectorStore, + sources:list = ["OWID"], # plus tard ajouter OurWorldInData # faudra integrate avec l'autre retriever + threshold:float = 0.5, + k_total:int = 10, +)-> List[Document]: + + # Check if all elements in the list are IEA or OWID + assert isinstance(sources,list) + assert sources + assert any([x in ["OWID"] for x in sources]) + + # Prepare base search kwargs + filters = {} + + filters["source"] = {"$in": sources} + + docs = vectorstore.similarity_search_with_score(query=query, filter=filters, k=k_total) + + # Filter if scores are below threshold + docs = [x for x in docs if x[1] > threshold] + + # Remove duplicate documents + unique_docs = [] + seen_docs = [] + for i, doc in enumerate(docs): + if doc[0].page_content not in seen_docs: + unique_docs.append(doc) + seen_docs.append(doc[0].page_content) + + # Add score to metadata + results = [] + for i,(doc,score) in enumerate(unique_docs): + doc.metadata["similarity_score"] = score + doc.metadata["content"] = doc.page_content + results.append(doc) + + return results \ No newline at end of file diff --git a/climateqa/engine/keywords.py b/climateqa/engine/keywords.py index 0101d6fba957bf981fd3b282b4808be98c6eec07..4a1758d7d5cbbf5af730842b6c513670b9b67aae 100644 --- a/climateqa/engine/keywords.py +++ b/climateqa/engine/keywords.py @@ -11,10 +11,12 @@ class KeywordsOutput(BaseModel): keywords: list = Field( description=""" - Generate 1 or 2 relevant keywords from the user query to ask a search engine for scientific research papers. + Generate 1 or 2 relevant keywords from the user query to ask a search engine for scientific research papers. Answer only with English keywords. + Do not use special characters or accents. Example: - "What is the impact of deep sea mining ?" -> ["deep sea mining"] + - "Quel est l'impact de l'exploitation minière en haute mer ?" -> ["deep sea mining"] - "How will El Nino be impacted by climate change" -> ["el nino"] - "Is climate change a hoax" -> [Climate change","hoax"] """ diff --git a/climateqa/engine/reranker.py b/climateqa/engine/reranker.py index 149614b0b2470de16ee12c60b59fc6206b2c7aaf..ecc20e7996e4e7890aef74781fbb2b603dff1af1 100644 --- a/climateqa/engine/reranker.py +++ b/climateqa/engine/reranker.py @@ -1,11 +1,14 @@ import os +from dotenv import load_dotenv from scipy.special import expit, logit from rerankers import Reranker +from sentence_transformers import CrossEncoder +load_dotenv() -def get_reranker(model = "nano",cohere_api_key = None): +def get_reranker(model = "nano", cohere_api_key = None): - assert model in ["nano","tiny","small","large"] + assert model in ["nano","tiny","small","large", "jina"] if model == "nano": reranker = Reranker('ms-marco-TinyBERT-L-2-v2', model_type='flashrank') @@ -17,11 +20,18 @@ def get_reranker(model = "nano",cohere_api_key = None): if cohere_api_key is None: cohere_api_key = os.environ["COHERE_API_KEY"] reranker = Reranker("cohere", lang='en', api_key = cohere_api_key) + elif model == "jina": + # Reached token quota so does not work + reranker = Reranker("jina-reranker-v2-base-multilingual", api_key = os.getenv("JINA_RERANKER_API_KEY")) + # marche pas sans gpu ? et anyways returns with another structure donc faudrait changer le code du retriever node + # reranker = CrossEncoder("jinaai/jina-reranker-v2-base-multilingual", automodel_args={"torch_dtype": "auto"}, trust_remote_code=True,) return reranker def rerank_docs(reranker,docs,query): + if docs == []: + return [] # Get a list of texts from langchain docs input_docs = [x.page_content for x in docs] diff --git a/climateqa/engine/vectorstore.py b/climateqa/engine/vectorstore.py index fcb0770043f1011647028496dd4d0a4453843501..670a84c765cf9a5eed39b3af2f5acc4ee85ccc8d 100644 --- a/climateqa/engine/vectorstore.py +++ b/climateqa/engine/vectorstore.py @@ -4,6 +4,7 @@ import os from pinecone import Pinecone from langchain_community.vectorstores import Pinecone as PineconeVectorstore +from langchain_chroma import Chroma # LOAD ENVIRONMENT VARIABLES try: @@ -13,7 +14,12 @@ except: pass -def get_pinecone_vectorstore(embeddings,text_key = "content"): +def get_chroma_vectorstore(embedding_function, persist_directory="/home/dora/climate-question-answering/data/vectorstore"): + vectorstore = Chroma(persist_directory=persist_directory, embedding_function=embedding_function) + return vectorstore + + +def get_pinecone_vectorstore(embeddings,text_key = "content", index_name = os.getenv("PINECONE_API_INDEX")): # # initialize pinecone # pinecone.init( @@ -27,7 +33,7 @@ def get_pinecone_vectorstore(embeddings,text_key = "content"): # return vectorstore pc = Pinecone(api_key=os.getenv("PINECONE_API_KEY")) - index = pc.Index(os.getenv("PINECONE_API_INDEX")) + index = pc.Index(index_name) vectorstore = PineconeVectorstore( index, embeddings, text_key, diff --git a/climateqa/event_handler.py b/climateqa/event_handler.py new file mode 100644 index 0000000000000000000000000000000000000000..cd0b5d6f3be39f0d5c06252cee28b4d8a32f4026 --- /dev/null +++ b/climateqa/event_handler.py @@ -0,0 +1,123 @@ +from langchain_core.runnables.schema import StreamEvent +from gradio import ChatMessage +from climateqa.engine.chains.prompts import audience_prompts +from front.utils import make_html_source,parse_output_llm_with_sources,serialize_docs,make_toolbox,generate_html_graphs +import numpy as np + +def init_audience(audience :str) -> str: + if audience == "Children": + audience_prompt = audience_prompts["children"] + elif audience == "General public": + audience_prompt = audience_prompts["general"] + elif audience == "Experts": + audience_prompt = audience_prompts["experts"] + else: + audience_prompt = audience_prompts["experts"] + return audience_prompt + +def handle_retrieved_documents(event: StreamEvent, history : list[ChatMessage], used_documents : list[str]) -> tuple[str, list[ChatMessage], list[str]]: + """ + Handles the retrieved documents and returns the HTML representation of the documents + + Args: + event (StreamEvent): The event containing the retrieved documents + history (list[ChatMessage]): The current message history + used_documents (list[str]): The list of used documents + + Returns: + tuple[str, list[ChatMessage], list[str]]: The updated HTML representation of the documents, the updated message history and the updated list of used documents + """ + try: + docs = event["data"]["output"]["documents"] + docs_html = [] + textual_docs = [d for d in docs if d.metadata["chunk_type"] == "text"] + for i, d in enumerate(textual_docs, 1): + if d.metadata["chunk_type"] == "text": + docs_html.append(make_html_source(d, i)) + + used_documents = used_documents + [f"{d.metadata['short_name']} - {d.metadata['name']}" for d in docs] + if used_documents!=[]: + history[-1].content = "Adding sources :\n\n - " + "\n - ".join(np.unique(used_documents)) + + docs_html = "".join(docs_html) + + related_contents = event["data"]["output"]["related_contents"] + + except Exception as e: + print(f"Error getting documents: {e}") + print(event) + return docs, docs_html, history, used_documents, related_contents + +def stream_answer(history: list[ChatMessage], event : StreamEvent, start_streaming : bool, answer_message_content : str)-> tuple[list[ChatMessage], bool, str]: + """ + Handles the streaming of the answer and updates the history with the new message content + + Args: + history (list[ChatMessage]): The current message history + event (StreamEvent): The event containing the streamed answer + start_streaming (bool): A flag indicating if the streaming has started + new_message_content (str): The content of the new message + + Returns: + tuple[list[ChatMessage], bool, str]: The updated history, the updated streaming flag and the updated message content + """ + if start_streaming == False: + start_streaming = True + history.append(ChatMessage(role="assistant", content = "")) + answer_message_content += event["data"]["chunk"].content + answer_message_content = parse_output_llm_with_sources(answer_message_content) + history[-1] = ChatMessage(role="assistant", content = answer_message_content) + # history.append(ChatMessage(role="assistant", content = new_message_content)) + return history, start_streaming, answer_message_content + +def handle_retrieved_owid_graphs(event :StreamEvent, graphs_html: str) -> str: + """ + Handles the retrieved OWID graphs and returns the HTML representation of the graphs + + Args: + event (StreamEvent): The event containing the retrieved graphs + graphs_html (str): The current HTML representation of the graphs + + Returns: + str: The updated HTML representation + """ + try: + recommended_content = event["data"]["output"]["recommended_content"] + + unique_graphs = [] + seen_embeddings = set() + + for x in recommended_content: + embedding = x.metadata["returned_content"] + + # Check if the embedding has already been seen + if embedding not in seen_embeddings: + unique_graphs.append({ + "embedding": embedding, + "metadata": { + "source": x.metadata["source"], + "category": x.metadata["category"] + } + }) + # Add the embedding to the seen set + seen_embeddings.add(embedding) + + + categories = {} + for graph in unique_graphs: + category = graph['metadata']['category'] + if category not in categories: + categories[category] = [] + categories[category].append(graph['embedding']) + + + for category, embeddings in categories.items(): + graphs_html += f"

{category}

" + for embedding in embeddings: + graphs_html += f"
{embedding}
" + + + except Exception as e: + print(f"Error getting graphs: {e}") + + return graphs_html \ No newline at end of file diff --git a/climateqa/knowledge/openalex.py b/climateqa/knowledge/openalex.py index cc61cf9e2c108c4e549902b4b15d176731064cf8..66bd207f646a5895131c7a2f6a0f64aef29fa7bf 100644 --- a/climateqa/knowledge/openalex.py +++ b/climateqa/knowledge/openalex.py @@ -41,6 +41,10 @@ class OpenAlex(): break df_works = pd.DataFrame(page) + + if df_works.empty: + return df_works + df_works = df_works.dropna(subset = ["title"]) df_works["primary_location"] = df_works["primary_location"].map(replace_nan_with_empty_dict) df_works["abstract"] = df_works["abstract_inverted_index"].apply(lambda x: self.get_abstract_from_inverted_index(x)).fillna("") @@ -51,8 +55,9 @@ class OpenAlex(): df_works["num_tokens"] = df_works["content"].map(lambda x : num_tokens_from_string(x)) df_works = df_works.drop(columns = ["abstract_inverted_index"]) - # df_works["subtitle"] = df_works["title"] + " - " + df_works["primary_location"]["source"]["display_name"] + " - " + df_works["publication_year"] - + df_works["display_name"] = df_works["primary_location"].apply(lambda x :x["source"] if type(x) == dict and 'source' in x else "").apply(lambda x : x["display_name"] if type(x) == dict and "display_name" in x else "") + df_works["subtitle"] = df_works["title"].astype(str) + " - " + df_works["display_name"].astype(str) + " - " + df_works["publication_year"].astype(str) + return df_works else: raise Exception("Keywords must be a string") @@ -62,11 +67,10 @@ class OpenAlex(): scores = reranker.rank( query, - df["content"].tolist(), - top_k = len(df), + df["content"].tolist() ) - scores.sort(key = lambda x : x["corpus_id"]) - scores = [x["score"] for x in scores] + scores = sorted(scores.results, key = lambda x : x.document.doc_id) + scores = [x.score for x in scores] df["rerank_score"] = scores return df diff --git a/climateqa/knowledge/retriever.py b/climateqa/knowledge/retriever.py index d2cf9359dbfab61321a325dd31f14d05972cfef9..6d57f67b50b7a6a98464a9f2fdb276831c1ce523 100644 --- a/climateqa/knowledge/retriever.py +++ b/climateqa/knowledge/retriever.py @@ -1,81 +1,102 @@ -# https://github.com/langchain-ai/langchain/issues/8623 - -import pandas as pd - -from langchain_core.retrievers import BaseRetriever -from langchain_core.vectorstores import VectorStoreRetriever -from langchain_core.documents.base import Document -from langchain_core.vectorstores import VectorStore -from langchain_core.callbacks.manager import CallbackManagerForRetrieverRun - -from typing import List -from pydantic import Field - -class ClimateQARetriever(BaseRetriever): - vectorstore:VectorStore - sources:list = ["IPCC","IPBES","IPOS"] - reports:list = [] - threshold:float = 0.6 - k_summary:int = 3 - k_total:int = 10 - namespace:str = "vectors", - min_size:int = 200, - - - def _get_relevant_documents( - self, query: str, *, run_manager: CallbackManagerForRetrieverRun - ) -> List[Document]: - - # Check if all elements in the list are either IPCC or IPBES - assert isinstance(self.sources,list) - assert all([x in ["IPCC","IPBES","IPOS"] for x in self.sources]) - assert self.k_total > self.k_summary, "k_total should be greater than k_summary" - - # Prepare base search kwargs - filters = {} - - if len(self.reports) > 0: - filters["short_name"] = {"$in":self.reports} - else: - filters["source"] = { "$in":self.sources} - - # Search for k_summary documents in the summaries dataset - filters_summaries = { - **filters, - "report_type": { "$in":["SPM"]}, - } - - docs_summaries = self.vectorstore.similarity_search_with_score(query=query,filter = filters_summaries,k = self.k_summary) - docs_summaries = [x for x in docs_summaries if x[1] > self.threshold] - - # Search for k_total - k_summary documents in the full reports dataset - filters_full = { - **filters, - "report_type": { "$nin":["SPM"]}, - } - k_full = self.k_total - len(docs_summaries) - docs_full = self.vectorstore.similarity_search_with_score(query=query,filter = filters_full,k = k_full) - - # Concatenate documents - docs = docs_summaries + docs_full - - # Filter if scores are below threshold - docs = [x for x in docs if len(x[0].page_content) > self.min_size] - # docs = [x for x in docs if x[1] > self.threshold] - - # Add score to metadata - results = [] - for i,(doc,score) in enumerate(docs): - doc.page_content = doc.page_content.replace("\r\n"," ") - doc.metadata["similarity_score"] = score - doc.metadata["content"] = doc.page_content - doc.metadata["page_number"] = int(doc.metadata["page_number"]) + 1 - # doc.page_content = f"""Doc {i+1} - {doc.metadata['short_name']}: {doc.page_content}""" - results.append(doc) - - # Sort by score - # results = sorted(results,key = lambda x : x.metadata["similarity_score"],reverse = True) - - return results - - +# # https://github.com/langchain-ai/langchain/issues/8623 + +# import pandas as pd + +# from langchain_core.retrievers import BaseRetriever +# from langchain_core.vectorstores import VectorStoreRetriever +# from langchain_core.documents.base import Document +# from langchain_core.vectorstores import VectorStore +# from langchain_core.callbacks.manager import CallbackManagerForRetrieverRun + +# from typing import List +# from pydantic import Field + +# def _add_metadata_and_score(docs: List) -> Document: +# # Add score to metadata +# docs_with_metadata = [] +# for i,(doc,score) in enumerate(docs): +# doc.page_content = doc.page_content.replace("\r\n"," ") +# doc.metadata["similarity_score"] = score +# doc.metadata["content"] = doc.page_content +# doc.metadata["page_number"] = int(doc.metadata["page_number"]) + 1 +# # doc.page_content = f"""Doc {i+1} - {doc.metadata['short_name']}: {doc.page_content}""" +# docs_with_metadata.append(doc) +# return docs_with_metadata + +# class ClimateQARetriever(BaseRetriever): +# vectorstore:VectorStore +# sources:list = ["IPCC","IPBES","IPOS"] +# reports:list = [] +# threshold:float = 0.6 +# k_summary:int = 3 +# k_total:int = 10 +# namespace:str = "vectors", +# min_size:int = 200, + + + +# def _get_relevant_documents( +# self, query: str, *, run_manager: CallbackManagerForRetrieverRun +# ) -> List[Document]: + +# # Check if all elements in the list are either IPCC or IPBES +# assert isinstance(self.sources,list) +# assert self.sources +# assert all([x in ["IPCC","IPBES","IPOS"] for x in self.sources]) +# assert self.k_total > self.k_summary, "k_total should be greater than k_summary" + +# # Prepare base search kwargs +# filters = {} + +# if len(self.reports) > 0: +# filters["short_name"] = {"$in":self.reports} +# else: +# filters["source"] = { "$in":self.sources} + +# # Search for k_summary documents in the summaries dataset +# filters_summaries = { +# **filters, +# "chunk_type":"text", +# "report_type": { "$in":["SPM"]}, +# } + +# docs_summaries = self.vectorstore.similarity_search_with_score(query=query,filter = filters_summaries,k = self.k_summary) +# docs_summaries = [x for x in docs_summaries if x[1] > self.threshold] +# # docs_summaries = [] + +# # Search for k_total - k_summary documents in the full reports dataset +# filters_full = { +# **filters, +# "chunk_type":"text", +# "report_type": { "$nin":["SPM"]}, +# } +# k_full = self.k_total - len(docs_summaries) +# docs_full = self.vectorstore.similarity_search_with_score(query=query,filter = filters_full,k = k_full) + +# # Images +# filters_image = { +# **filters, +# "chunk_type":"image" +# } +# docs_images = self.vectorstore.similarity_search_with_score(query=query,filter = filters_image,k = k_full) + +# # docs_images = [] + +# # Concatenate documents +# # docs = docs_summaries + docs_full + docs_images + +# # Filter if scores are below threshold +# # docs = [x for x in docs if x[1] > self.threshold] + +# docs_summaries, docs_full, docs_images = _add_metadata_and_score(docs_summaries), _add_metadata_and_score(docs_full), _add_metadata_and_score(docs_images) + +# # Filter if length are below threshold +# docs_summaries = [x for x in docs_summaries if len(x.page_content) > self.min_size] +# docs_full = [x for x in docs_full if len(x.page_content) > self.min_size] + + +# return { +# "docs_summaries" : docs_summaries, +# "docs_full" : docs_full, +# "docs_images" : docs_images, +# } diff --git a/climateqa/utils.py b/climateqa/utils.py index 4c7691f67d945dd03609d48ef962088000204acf..b2829169402e4e78cff5cccd2a4e9e12b2bb90d4 100644 --- a/climateqa/utils.py +++ b/climateqa/utils.py @@ -20,3 +20,16 @@ def get_image_from_azure_blob_storage(path): file_object = get_file_from_azure_blob_storage(path) image = Image.open(file_object) return image + +def remove_duplicates_keep_highest_score(documents): + unique_docs = {} + + for doc in documents: + doc_id = doc.metadata.get('doc_id') + if doc_id in unique_docs: + if doc.metadata['reranking_score'] > unique_docs[doc_id].metadata['reranking_score']: + unique_docs[doc_id] = doc + else: + unique_docs[doc_id] = doc + + return list(unique_docs.values()) diff --git a/front/utils.py b/front/utils.py index f2db7720af17e7d836530b72e54882d67e585412..b2c5ea0c2e3608afda39b6e0e25a8ee3de6f23d2 100644 --- a/front/utils.py +++ b/front/utils.py @@ -1,12 +1,19 @@ import re +from collections import defaultdict +from climateqa.utils import get_image_from_azure_blob_storage +from climateqa.engine.chains.prompts import audience_prompts +from PIL import Image +from io import BytesIO +import base64 -def make_pairs(lst): + +def make_pairs(lst:list)->list: """from a list of even lenght, make tupple pairs""" return [(lst[i], lst[i + 1]) for i in range(0, len(lst), 2)] -def serialize_docs(docs): +def serialize_docs(docs:list)->list: new_docs = [] for doc in docs: new_doc = {} @@ -17,7 +24,7 @@ def serialize_docs(docs): -def parse_output_llm_with_sources(output): +def parse_output_llm_with_sources(output:str)->str: # Split the content into a list of text and "[Doc X]" references content_parts = re.split(r'\[(Doc\s?\d+(?:,\s?Doc\s?\d+)*)\]', output) parts = [] @@ -32,6 +39,119 @@ def parse_output_llm_with_sources(output): content_parts = "".join(parts) return content_parts +def process_figures(docs:list)->tuple: + gallery=[] + used_figures =[] + figures = '

' + docs_figures = [d for d in docs if d.metadata["chunk_type"] == "image"] + for i, doc in enumerate(docs_figures): + if doc.metadata["chunk_type"] == "image": + if doc.metadata["figure_code"] != "N/A": + title = f"{doc.metadata['figure_code']} - {doc.metadata['short_name']}" + else: + title = f"{doc.metadata['short_name']}" + + + if title not in used_figures: + used_figures.append(title) + try: + key = f"Image {i+1}" + + image_path = doc.metadata["image_path"].split("documents/")[1] + img = get_image_from_azure_blob_storage(image_path) + + # Convert the image to a byte buffer + buffered = BytesIO() + max_image_length = 500 + img_resized = img.resize((max_image_length, int(max_image_length * img.size[1]/img.size[0]))) + img_resized.save(buffered, format="PNG") + + img_str = base64.b64encode(buffered.getvalue()).decode() + + figures = figures + make_html_figure_sources(doc, i, img_str) + gallery.append(img) + except Exception as e: + print(f"Skipped adding image {i} because of {e}") + + return figures, gallery + + +def generate_html_graphs(graphs:list)->str: + # Organize graphs by category + categories = defaultdict(list) + for graph in graphs: + category = graph['metadata']['category'] + categories[category].append(graph['embedding']) + + # Begin constructing the HTML + html_code = ''' + + + + + + Graphs by Category + + + + +
+ ''' + + # Add buttons for each category + for i, category in enumerate(categories.keys()): + active_class = 'active' if i == 0 else '' + html_code += f'' + + html_code += '
' + + # Add content for each category + for i, (category, embeds) in enumerate(categories.items()): + active_class = 'active' if i == 0 else '' + html_code += f'
' + for embed in embeds: + html_code += embed + html_code += '
' + + html_code += ''' + + + ''' + + return html_code + + def make_html_source(source,i): meta = source.metadata @@ -108,6 +228,31 @@ def make_html_source(source,i): return card +def make_html_papers(df,i): + title = df['title'][i] + content = df['abstract'][i] + url = df['doi'][i] + publication_date = df['publication_year'][i] + subtitle = df['subtitle'][i] + + card = f""" +
+
+

Doc {i+1} - {title}

+

{content}

+
+ +
+ """ + + return card + + def make_html_figure_sources(source,i,img_str): meta = source.metadata content = source.page_content.strip() diff --git a/sandbox/20240310 - CQA - Semantic Routing 1.ipynb b/sandbox/20240310 - CQA - Semantic Routing 1.ipynb index 39c609cbcccf58d778c595da809e7d880c7b44da..5b8a8dd93b3084216ac9186b84494c9572bf3039 100644 --- a/sandbox/20240310 - CQA - Semantic Routing 1.ipynb +++ b/sandbox/20240310 - CQA - Semantic Routing 1.ipynb @@ -2,27 +2,19 @@ "cells": [ { "cell_type": "code", - "execution_count": 8, + "execution_count": 1, "id": "07f255d7", "metadata": { "tags": [] }, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "The autoreload extension is already loaded. To reload it, use:\n", - " %reload_ext autoreload\n" - ] - }, { "data": { "text/plain": [ "True" ] }, - "execution_count": 8, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -54,7 +46,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 2, "id": "6af1a96e", "metadata": { "tags": [] @@ -70,56 +62,32 @@ }, { "cell_type": "code", - "execution_count": 25, - "id": "148b7cf0", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'object': 'list',\n", - " 'data': [{'id': 'gpt-3.5-turbo-0125',\n", - " 'object': 'model',\n", - " 'created': 1706048358,\n", - " 'owned_by': 'system'},\n", - " {'id': 'gpt-4o-mini',\n", - " 'object': 'model',\n", - " 'created': 1721172741,\n", - " 'owned_by': 'system'}]}" - ] - }, - "execution_count": 25, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import requests\n", - "res = requests.get(\"https://api.openai.com/v1/models\",\n", - " headers = {\"Authorization\": f\"Bearer {os.getenv('OPENAI_API_KEY')}\"})\n", - "res.json()" - ] - }, - { - "cell_type": "code", - "execution_count": 15, + "execution_count": 3, "id": "a9128bfc-4b24-4b25-b7a7-68423b1124b1", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tim/anaconda3/envs/climateqa/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + }, { "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 FlashRankRanker model ms-marco-TinyBERT-L-2-v2\n", + "Loading model FlashRank model ms-marco-TinyBERT-L-2-v2...\n" ] } ], "source": [ "from climateqa.engine.reranker import get_reranker\n", "\n", - "reranker = get_reranker(\"large\")\n", - "# reranker = get_reranker(\"nano\")\n", + "# reranker = get_reranker(\"large\")\n", + "reranker = get_reranker(\"nano\")\n", "# from rerankers import Reranker\n", "# # Specific flashrank model.\n", "# # reranker = Reranker('ms-marco-TinyBERT-L-2-v2', model_type='flashrank')\n", @@ -132,10 +100,17 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 4, "id": "942d2705-22dd-46cf-8c31-6daa127e4743", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: BAAI/bge-base-en-v1.5\n" + ] + }, { "name": "stdout", "output_type": "stream", @@ -147,9 +122,8 @@ "name": "stderr", "output_type": "stream", "text": [ - "INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: BAAI/bge-base-en-v1.5\n", "INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: cpu\n", - "/home/tim/ai4s/climate_qa/climate-question-answering/climateqa/engine/vectorstore.py:32: LangChainDeprecationWarning: The class `Pinecone` was deprecated in LangChain 0.0.18 and will be removed in 0.3.0. An updated version of the class exists in the langchain-pinecone package and should be used instead. To use it run `pip install -U langchain-pinecone` and import as `from langchain_pinecone import Pinecone`.\n", + "/home/tim/ai4s/climate_qa/climate-question-answering/climateqa/engine/vectorstore.py:38: LangChainDeprecationWarning: The class `Pinecone` was deprecated in LangChain 0.0.18 and will be removed in 0.3.0. An updated version of the class exists in the langchain-pinecone package and should be used instead. To use it run `pip install -U langchain-pinecone` and import as `from langchain_pinecone import Pinecone`.\n", " vectorstore = PineconeVectorstore(\n" ] } @@ -163,140 +137,6 @@ "vectorstore = get_pinecone_vectorstore(embeddings_function)" ] }, - { - "cell_type": "code", - "execution_count": 24, - "id": "bdc875a5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[Document(metadata={'chunk_type': 'image', 'document_id': 'document7', 'document_number': 7.0, 'element_id': 'Picture_0_12', 'figure_code': 'N/A', 'file_size': 164.2392578125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document7/images/Picture_0_12.png', 'n_pages': 50.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII 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': 13, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGIII SPM', 'source': 'IPCC', 'toc_level0': '_Hlk99620068', '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_SummaryForPolicymakers.pdf', 'similarity_score': 0.54172045, 'content': \"The image is a statistical graph that provides a visual representation of global net anthropogenic greenhouse gas (GHG) emissions by region from 1990 to 2019. It highlights the contribution of different regions to overall GHG emissions, including emissions linked to fossil fuels and industry (CO2-FFI), net CO2 emissions resulting from land use, land-use change, and forestry (CO2-LULUCF), and other GHG emissions. Each region's percentage share of global emissions is indicated for selected years, showing trends and distribution of GHG emissions over time. This graph is useful for understanding regional disparities in emission levels and their changes over the past decades, contributing to the assessment of climate change impacts and regional responsibilities.\"}, page_content=\"The image is a statistical graph that provides a visual representation of global net anthropogenic greenhouse gas (GHG) emissions by region from 1990 to 2019. It highlights the contribution of different regions to overall GHG emissions, including emissions linked to fossil fuels and industry (CO2-FFI), net CO2 emissions resulting from land use, land-use change, and forestry (CO2-LULUCF), and other GHG emissions. Each region's percentage share of global emissions is indicated for selected years, showing trends and distribution of GHG emissions over time. This graph is useful for understanding regional disparities in emission levels and their changes over the past decades, contributing to the assessment of climate change impacts and regional responsibilities.\"),\n", - " Document(metadata={'chunk_type': 'image', 'document_id': 'document7', 'document_number': 7.0, 'element_id': 'Picture_1_12', 'figure_code': 'N/A', 'file_size': 108.8359375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document7/images/Picture_1_12.png', 'n_pages': 50.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII 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': 13, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGIII SPM', 'source': 'IPCC', 'toc_level0': '_Hlk99620068', '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_SummaryForPolicymakers.pdf', 'similarity_score': 0.522807181, 'content': 'The image presents two bar graphs related to greenhouse gas emissions. The left graph illustrates the global net anthropogenic CO2 emissions by region from 1990 to 2019, highlighting the significant contributions from North America, Europe, Eastern Asia, and other regions, in decreasing order. The right graph compares net anthropogenic GHG emissions per capita to the total population per region as of the year 2019, showcasing the emissions relative to population size for regions such as North America, Europe, and others. Both graphs serve to convey the disparities in emissions between different global regions, emphasizing regional differences in both total and per capita emissions. This information is critical for understanding regional contributions to climate change and informing policy decisions for mitigating greenhouse gas emissions.'}, page_content='The image presents two bar graphs related to greenhouse gas emissions. The left graph illustrates the global net anthropogenic CO2 emissions by region from 1990 to 2019, highlighting the significant contributions from North America, Europe, Eastern Asia, and other regions, in decreasing order. The right graph compares net anthropogenic GHG emissions per capita to the total population per region as of the year 2019, showcasing the emissions relative to population size for regions such as North America, Europe, and others. Both graphs serve to convey the disparities in emissions between different global regions, emphasizing regional differences in both total and per capita emissions. This information is critical for understanding regional contributions to climate change and informing policy decisions for mitigating greenhouse gas emissions.'),\n", - " Document(metadata={'chunk_type': 'image', 'document_id': 'document1', 'document_number': 1.0, 'element_id': 'Picture_0_12', 'figure_code': 'N/A', 'file_size': 50.4736328125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document1/images/Picture_0_12.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': 13, 'release_date': 2021.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGI SPM', 'source': 'IPCC', 'toc_level0': 'B. Possible Climate Futures', '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.517367482, 'content': 'This image is a graph depicting future annual emissions of CO2 and key non-CO2 drivers across five different illustrative scenarios. The five scenarios, indicated by SSP1-1.9, SSP1-2.6, SSP2-4.5, SSP3-7.0, and SSP5-8.5, represent varying trajectories of greenhouse gas emissions from 2015 to 2100, influencing future climate conditions. The lines on the graph, each corresponding to a scenario, illustrate the potential increase or decrease in emissions over time, which will affect the global surface temperature change by the end of the 21st century compared to pre-industrial levels. The image serves as a visual summary of projected emission pathways and their implications for long-term climate change.'}, page_content='This image is a graph depicting future annual emissions of CO2 and key non-CO2 drivers across five different illustrative scenarios. The five scenarios, indicated by SSP1-1.9, SSP1-2.6, SSP2-4.5, SSP3-7.0, and SSP5-8.5, represent varying trajectories of greenhouse gas emissions from 2015 to 2100, influencing future climate conditions. The lines on the graph, each corresponding to a scenario, illustrate the potential increase or decrease in emissions over time, which will affect the global surface temperature change by the end of the 21st century compared to pre-industrial levels. The image serves as a visual summary of projected emission pathways and their implications for long-term climate change.'),\n", - " Document(metadata={'chunk_type': 'image', 'document_id': 'document7', 'document_number': 7.0, 'element_id': 'Picture_0_28', 'figure_code': 'N/A', 'file_size': 398.6806640625, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document7/images/Picture_0_28.png', 'n_pages': 50.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII 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': 29, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGIII SPM', 'source': 'IPCC', 'toc_level0': '_Hlk99447836', '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_SummaryForPolicymakers.pdf', 'similarity_score': 0.51093781, 'content': 'Summary:\\nThe image presents a set of four graphs depicting modelled mitigation pathways with the objective of limiting global warming to 1.5 degrees Celsius and 2 degrees Celsius. Each graph illustrates different aspects of greenhouse gas (GHG) emissions: (a) the net global GHG emissions, (b) the net global carbon dioxide (CO2) emissions, (c) the net global methane (CH4) emissions, and (d) the net global nitrous oxide (N2O) emissions. The charts reflect deep, rapid, and sustained emissions reductions, showing past emissions, the model range for 2015 emissions, and projections up to the year 2100 under various scenarios, including current policies, pledges, and pathways designed to limit warming. The colored areas represent the very likely ranges of emissions for different climate scenarios, and markers indicate the year of net-zero GHG or CO2 emissions for each scenario. The graphs collectively underscore the need for diverse strategies and immediate action to achieve the targeted temperature goals and reduce emissions to combat climate change effectively.'}, page_content='Summary:\\nThe image presents a set of four graphs depicting modelled mitigation pathways with the objective of limiting global warming to 1.5 degrees Celsius and 2 degrees Celsius. Each graph illustrates different aspects of greenhouse gas (GHG) emissions: (a) the net global GHG emissions, (b) the net global carbon dioxide (CO2) emissions, (c) the net global methane (CH4) emissions, and (d) the net global nitrous oxide (N2O) emissions. The charts reflect deep, rapid, and sustained emissions reductions, showing past emissions, the model range for 2015 emissions, and projections up to the year 2100 under various scenarios, including current policies, pledges, and pathways designed to limit warming. The colored areas represent the very likely ranges of emissions for different climate scenarios, and markers indicate the year of net-zero GHG or CO2 emissions for each scenario. The graphs collectively underscore the need for diverse strategies and immediate action to achieve the targeted temperature goals and reduce emissions to combat climate change effectively.'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document11', 'document_number': 11.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 24.0, 'name': 'Summary for Policymakers. In: Global Warming of 1.5°C. An IPCC Special Report on the impacts of global warming of 1.5°C above pre-industrial levels and related global greenhouse gas emission pathways, in the context of strengthening the global response to the threat of climate change, sustainable development, and efforts to eradicate poverty', 'num_characters': 968.0, 'num_tokens': 210.0, 'num_tokens_approx': 233.0, 'num_words': 175.0, 'page_number': 13, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'Non-CO2 emissions relative to 2010', 'short_name': 'IPCC SR GW 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/2/2022/06/SPM_version_report_LR.pdf', 'similarity_score': 0.509297669, 'content': 'Figure SPM.3a | Global emissions pathway characteristics. The main panel shows global net anthropogenic CO2 emissions in pathways limiting global warming to 1.5degC with no or limited (less than 0.1degC) overshoot and pathways with higher overshoot. The shaded area shows the full range for pathways analysed in this Report. The panels on the right show non-CO2 emissions ranges for three compounds with large historical forcing and a substantial portion of emissions coming from sources distinct from those central to CO2 mitigation. Shaded areas in these panels show the 5-95% (light shading) and interquartile (dark shading) ranges of pathways limiting global warming to 1.5degC with no or limited overshoot. Box and whiskers at the bottom of the figure show the timing of pathways reaching global net zero CO2 emission levels, and a comparison with pathways limiting global warming to 2degC with at least 66% probability. Four illustrative model pathways'}, page_content='Figure SPM.3a | Global emissions pathway characteristics. The main panel shows global net anthropogenic CO2 emissions in pathways limiting global warming to 1.5degC with no or limited (less than 0.1degC) overshoot and pathways with higher overshoot. The shaded area shows the full range for pathways analysed in this Report. The panels on the right show non-CO2 emissions ranges for three compounds with large historical forcing and a substantial portion of emissions coming from sources distinct from those central to CO2 mitigation. Shaded areas in these panels show the 5-95% (light shading) and interquartile (dark shading) ranges of pathways limiting global warming to 1.5degC with no or limited overshoot. Box and whiskers at the bottom of the figure show the timing of pathways reaching global net zero CO2 emission levels, and a comparison with pathways limiting global warming to 2degC with at least 66% probability. Four illustrative model pathways'),\n", - " Document(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': 797.0, 'num_tokens': 161.0, 'num_tokens_approx': 170.0, 'num_words': 128.0, 'page_number': 1208, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Aluminium and other non-ferrous metals', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '11.4 Sector Mitigation Pathways and Cross-sector Implications', 'toc_level1': 'Box\\xa011.2 |\\xa0Plastics and Climate Change', '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.547677815, 'content': 'The use of low- and zero-GHG electricity (e.g., historically from hydropower) can reduce the indirect emissions associated with making aluminium. A public-private partnership with financial support from the province of Quebec and the Canadian federal government has recently announced a fundamental modification to the Hall-Heroult process by which the graphite electrode process emissions can be eliminated by substitution of inert electrodes. This technology is slated to be available in 2024 and is potentially retrofittable to existing facilities (Saevarsdottir et al. 2020).\\nSmelting and otherwise processing of other non-ferrous metals like nickel, zinc, copper, magnesium and titanium with less overall emissions have relatively similar emissions reduction strategies'}, page_content='The use of low- and zero-GHG electricity (e.g., historically from hydropower) can reduce the indirect emissions associated with making aluminium. A public-private partnership with financial support from the province of Quebec and the Canadian federal government has recently announced a fundamental modification to the Hall-Heroult process by which the graphite electrode process emissions can be eliminated by substitution of inert electrodes. This technology is slated to be available in 2024 and is potentially retrofittable to existing facilities (Saevarsdottir et al. 2020).\\nSmelting and otherwise processing of other non-ferrous metals like nickel, zinc, copper, magnesium and titanium with less overall emissions have relatively similar emissions reduction strategies'),\n", - " Document(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': 858.0, 'num_tokens': 196.0, 'num_tokens_approx': 213.0, 'num_words': 160.0, 'page_number': 280, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Emissions Trends and Drivers ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '2.7 Emissions Associated With Existing and\\xa0Planned Long-lived Infrastructure', 'toc_level1': '2.7.2 Estimates of Future CO2 Emissions From\\xa0Long-lived Infrastructures', '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.530359745, 'content': 'Figure 2.26 | Future CO2 emissions from existing and currently planned fossil fuel infrastructure in the context of Paris carbon budgets in GtCO2 based on historic patterns of infrastructure lifetimes and capacity utilisation. Future CO2 emissions estimates of existing infrastructure for the electricity sector as well as all other sectors (industry, transport, buildings, other fossil fuel infrastructures) and of proposed infrastructures for coal power as well as gas and oil power. Grey bars on the right depict the range (5th-95th percentile) in overall cumulative net CO2 emissions until reaching net zero CO2 in pathways that limit warming to 1.5degC with no or limited overshoot (1.5degC scenarios), and in pathways that limit warming to 2degC (<67%) (2degC scenarios). Source: based on Edenhofer et al. (2018) and Tong et al. (2019). \\n267267'}, page_content='Figure 2.26 | Future CO2 emissions from existing and currently planned fossil fuel infrastructure in the context of Paris carbon budgets in GtCO2 based on historic patterns of infrastructure lifetimes and capacity utilisation. Future CO2 emissions estimates of existing infrastructure for the electricity sector as well as all other sectors (industry, transport, buildings, other fossil fuel infrastructures) and of proposed infrastructures for coal power as well as gas and oil power. Grey bars on the right depict the range (5th-95th percentile) in overall cumulative net CO2 emissions until reaching net zero CO2 in pathways that limit warming to 1.5degC with no or limited overshoot (1.5degC scenarios), and in pathways that limit warming to 2degC (<67%) (2degC scenarios). Source: based on Edenhofer et al. (2018) and Tong et al. (2019). \\n267267'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document8', 'document_number': 8.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 102.0, 'name': 'Technical Summary. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 796.0, 'num_tokens': 176.0, 'num_tokens_approx': 197.0, 'num_words': 148.0, 'page_number': 22, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'Technical Summary\\r\\ne fallen, ', 'short_name': 'IPCC AR6 WGIII TS', '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/wg3/downloads/report/IPCC_AR6_WGIII_TechnicalSummary.pdf', 'similarity_score': 0.530267477, 'content': 'Figure TS.8 | Future CO2 emissions from existing and currently planned fossil fuel infrastructure in the context of the Paris Agreement carbon budgets in GtCO2 based on historic patterns of infrastructure lifetimes and Future CO2 emissions estimates of existing infrastructure for the electricity sector as well as all other sectors (industry, transport, buildings, other fossil fuel infrastructures) and of proposed infrastructures for coal power as well as gas and oil power. Grey bars on the right depict the range (5-95th percentile) in overall cumulative net CO2 emissions until reaching net zero CO2 in pathways that limit warming to 1.5degC (>50%) with no or limited overshoot (1.5degC scenarios), and in pathways that limit warming to 2degC (>67%) (2degC scenarios). {Figure 2.26}'}, page_content='Figure TS.8 | Future CO2 emissions from existing and currently planned fossil fuel infrastructure in the context of the Paris Agreement carbon budgets in GtCO2 based on historic patterns of infrastructure lifetimes and Future CO2 emissions estimates of existing infrastructure for the electricity sector as well as all other sectors (industry, transport, buildings, other fossil fuel infrastructures) and of proposed infrastructures for coal power as well as gas and oil power. Grey bars on the right depict the range (5-95th percentile) in overall cumulative net CO2 emissions until reaching net zero CO2 in pathways that limit warming to 1.5degC (>50%) with no or limited overshoot (1.5degC scenarios), and in pathways that limit warming to 2degC (>67%) (2degC scenarios). {Figure 2.26}'),\n", - " Document(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': 796.0, 'num_tokens': 176.0, 'num_tokens_approx': 197.0, 'num_words': 148.0, 'page_number': 81, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Technical Summary\\r\\ne fallen, ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'TS.3 Emission Trends and Drivers', 'toc_level1': 'Box TS.2 | Greenhouse Gas (GHG) Emission Metrics Provide Simplified Information About\\xa0the\\xa0Effects of Different Greenhouse Gases', '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.530267477, 'content': 'Figure TS.8 | Future CO2 emissions from existing and currently planned fossil fuel infrastructure in the context of the Paris Agreement carbon budgets in GtCO2 based on historic patterns of infrastructure lifetimes and Future CO2 emissions estimates of existing infrastructure for the electricity sector as well as all other sectors (industry, transport, buildings, other fossil fuel infrastructures) and of proposed infrastructures for coal power as well as gas and oil power. Grey bars on the right depict the range (5-95th percentile) in overall cumulative net CO2 emissions until reaching net zero CO2 in pathways that limit warming to 1.5degC (>50%) with no or limited overshoot (1.5degC scenarios), and in pathways that limit warming to 2degC (>67%) (2degC scenarios). {Figure 2.26}'}, page_content='Figure TS.8 | Future CO2 emissions from existing and currently planned fossil fuel infrastructure in the context of the Paris Agreement carbon budgets in GtCO2 based on historic patterns of infrastructure lifetimes and Future CO2 emissions estimates of existing infrastructure for the electricity sector as well as all other sectors (industry, transport, buildings, other fossil fuel infrastructures) and of proposed infrastructures for coal power as well as gas and oil power. Grey bars on the right depict the range (5-95th percentile) in overall cumulative net CO2 emissions until reaching net zero CO2 in pathways that limit warming to 1.5degC (>50%) with no or limited overshoot (1.5degC scenarios), and in pathways that limit warming to 2degC (>67%) (2degC scenarios). {Figure 2.26}'),\n", - " Document(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': 455.0, 'num_tokens': 110.0, 'num_tokens_approx': 126.0, 'num_words': 95.0, 'page_number': 6, 'release_date': 2019.0, 'report_type': 'Special Report', 'section_header': 'Black carbon (BC) ', '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.528814554, 'content': 'Black carbon (BC) \\nA relatively pure form of carbon, also known as soot, arising from the incomplete combustion of fossil fuels, biofuel and biomass. It only stays in the atmosphere for days or weeks. BC is a climate forcing agent with strong warming effect, both in the atmosphere and when deposited on snow or ice. See also Aerosol, Albedo, Forcing and Short-lived climate forcers (SLCF).\\n Black carbon (BC) '}, page_content='Black carbon (BC) \\nA relatively pure form of carbon, also known as soot, arising from the incomplete combustion of fossil fuels, biofuel and biomass. It only stays in the atmosphere for days or weeks. BC is a climate forcing agent with strong warming effect, both in the atmosphere and when deposited on snow or ice. See also Aerosol, Albedo, Forcing and Short-lived climate forcers (SLCF).\\n Black carbon (BC) '),\n", - " Document(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': 1040.0, 'num_tokens': 238.0, 'num_tokens_approx': 258.0, 'num_words': 194.0, 'page_number': 717, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': '5.2.1.5 CO2 Budget', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '5: Global Carbon and Other Biogeochemical Cycles and Feedbacks', 'toc_level1': '5.2 Historical Trends, Variability and Budgets of CO2, CH4 and N2O', 'toc_level2': '5.2.2 Methane (CH4): Trends, Variability and Budget', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.522113144, 'content': 'Figure 5.12 | Global carbon (CO2) budget (2010-2019). Yellow arrows represent annual carbon fluxes (in PgC yr-1) associated with the natural carbon cycle, estimated for the time prior to the industrial era, around 1750. Pink arrows represent anthropogenic fluxes averaged over the period 2010-2019. The rate of carbon accumulation in the atmosphere is equal to net land-use change emissions, including land management (called LULUCF in the main text) plus fossil fuel emissions, minus land and ocean net sinks (plus a small budget imbalance, Table 5.1). Circles with yellow numbers represent pre-industrial carbon stocks in PgC. Circles with pink numbers represent anthropogenic changes to these stocks (cumulative anthropogenic fluxes) since 1750. Anthropogenic net fluxes are reproduced from Friedlingstein et al. (2020). The relative change of gross photosynthesis since pre-industrial times is based on 15 DGVMs used in Friedlingstein et al. (2020). The corresponding emissions by total respiration and fire are those required'}, page_content='Figure 5.12 | Global carbon (CO2) budget (2010-2019). Yellow arrows represent annual carbon fluxes (in PgC yr-1) associated with the natural carbon cycle, estimated for the time prior to the industrial era, around 1750. Pink arrows represent anthropogenic fluxes averaged over the period 2010-2019. The rate of carbon accumulation in the atmosphere is equal to net land-use change emissions, including land management (called LULUCF in the main text) plus fossil fuel emissions, minus land and ocean net sinks (plus a small budget imbalance, Table 5.1). Circles with yellow numbers represent pre-industrial carbon stocks in PgC. Circles with pink numbers represent anthropogenic changes to these stocks (cumulative anthropogenic fluxes) since 1750. Anthropogenic net fluxes are reproduced from Friedlingstein et al. (2020). The relative change of gross photosynthesis since pre-industrial times is based on 15 DGVMs used in Friedlingstein et al. (2020). The corresponding emissions by total respiration and fire are those required'),\n", - " Document(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': 264.0, 'num_tokens': 66.0, 'num_tokens_approx': 77.0, 'num_words': 58.0, 'page_number': 438, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Introduction', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '4.2 Accelerating Mitigation Actions Across Scales', 'toc_level1': 'Cross-Chapter Box\\xa04\\xa0| Comparison of NDCs and current policies with the 2030 GHG Emissions from Long-term Temperature Pathways', '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.507944763, 'content': 'Cross-Chapter Box 4 (continued)\\nCross-Chapter Box 4, Figure 1 (continued): Global GHG emissions of modelled pathways (funnels in Panel a, and associated bars in Panels b, c, d) and projected emission outcomes from near-term policy assessments for 2030 (Panel b).'}, page_content='Cross-Chapter Box 4 (continued)\\nCross-Chapter Box 4, Figure 1 (continued): Global GHG emissions of modelled pathways (funnels in Panel a, and associated bars in Panels b, c, d) and projected emission outcomes from near-term policy assessments for 2030 (Panel b).'),\n", - " Document(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': 1229.0, 'num_tokens': 250.0, 'num_tokens_approx': 293.0, 'num_words': 220.0, 'page_number': 1809, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Anthropogenic Resulting from or produced by human activities.', '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.507337511, 'content': 'Black carbon (BC) A relatively pure form of carbon, also known as soot, arising from the incomplete combustion of fossil fuels, biofuel, and biomass. It only stays in the atmosphere for days or weeks. BC is a climate forcing agent with strong warming effect, both in the atmosphere and when deposited on snow or ice. See also Aerosol.\\nBlue carbon Biologically-driven carbon fluxes and storage in marine systems that are amenable to management. Coastal blue carbon focuses on rooted vegetation in the coastal zone, such as tidal marshes, mangroves and seagrasses. These ecosystems have high carbon burial rates on a per unit area basis and accumulate carbon in their soils and sediments. They provide many non-climatic benefits and can contribute to ecosystem-based adaptation. If degraded or lost, coastal blue carbon ecosystems are likely to release most of their carbon back to the atmosphere. There is current debate regarding the application of the blue carbon concept to other coastal and non-coastal processes and ecosystems, including the open ocean. See also Sequestration.\\n Blue infrastructure See Infrastructure. \\n\\nBlue infrastructure See Infrastructure.'}, page_content='Black carbon (BC) A relatively pure form of carbon, also known as soot, arising from the incomplete combustion of fossil fuels, biofuel, and biomass. It only stays in the atmosphere for days or weeks. BC is a climate forcing agent with strong warming effect, both in the atmosphere and when deposited on snow or ice. See also Aerosol.\\nBlue carbon Biologically-driven carbon fluxes and storage in marine systems that are amenable to management. Coastal blue carbon focuses on rooted vegetation in the coastal zone, such as tidal marshes, mangroves and seagrasses. These ecosystems have high carbon burial rates on a per unit area basis and accumulate carbon in their soils and sediments. They provide many non-climatic benefits and can contribute to ecosystem-based adaptation. If degraded or lost, coastal blue carbon ecosystems are likely to release most of their carbon back to the atmosphere. There is current debate regarding the application of the blue carbon concept to other coastal and non-coastal processes and ecosystems, including the open ocean. See also Sequestration.\\n Blue infrastructure See Infrastructure. \\n\\nBlue infrastructure See Infrastructure.'),\n", - " Document(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': 1057.0, 'num_tokens': 239.0, 'num_tokens_approx': 265.0, 'num_words': 199.0, 'page_number': 394, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Mitigation Pathways Compatible with Long-term Goals ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '3.8 Feasibility of Socio/Techno/Economic Transitions', 'toc_level1': '3.8.2 Feasibility Appraisal of Low-carbon Scenarios', '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.506243169, 'content': 'Mitigation Pathways Compatible with Long-term Goals \\nFigure 3.43 | Feasibility characteristics of the Paris-consistent scenarios in the AR6 scenarios database : Feasibility corridors for the AR6 scenarios database, applying the methodology by (Brutschin et al. 2021). (a) The fraction of scenarios falling within three categories of feasibility concerns (plausible, best case, unprecedented), for different times (2030, 2050, 2100), different climate categories consistent with the Paris Agreement and five dimensions. (b) Composite feasibility score (obtained by geometric mean of underlying indicators) over time for scenarios with immediate and delayed global mitigation efforts, for different climate categories (C1, C2, C3. Note: no C1 scenario has delayed participation). (c) The fraction of scenarios which in any point in time over the century exceed the feasibility concerns, for C1 and C3 climate categories. Overlayed are the Illustrative Mitigation Pathways (IMP-LP, IMP-SP, IMP-Ren: C1 category; IMP-Neg, IMP-GS: C3 category).\\n381381'}, page_content='Mitigation Pathways Compatible with Long-term Goals \\nFigure 3.43 | Feasibility characteristics of the Paris-consistent scenarios in the AR6 scenarios database : Feasibility corridors for the AR6 scenarios database, applying the methodology by (Brutschin et al. 2021). (a) The fraction of scenarios falling within three categories of feasibility concerns (plausible, best case, unprecedented), for different times (2030, 2050, 2100), different climate categories consistent with the Paris Agreement and five dimensions. (b) Composite feasibility score (obtained by geometric mean of underlying indicators) over time for scenarios with immediate and delayed global mitigation efforts, for different climate categories (C1, C2, C3. Note: no C1 scenario has delayed participation). (c) The fraction of scenarios which in any point in time over the century exceed the feasibility concerns, for C1 and C3 climate categories. Overlayed are the Illustrative Mitigation Pathways (IMP-LP, IMP-SP, IMP-Ren: C1 category; IMP-Neg, IMP-GS: C3 category).\\n381381'),\n", - " Document(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': 469.0, 'num_tokens': 98.0, 'num_tokens_approx': 106.0, 'num_words': 80.0, 'page_number': 1477, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '14.3.2 Elements of the Paris Agreement Relevant \\r\\nto Mitigation ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '14.3 The UNFCCC and the Paris Agreement ', 'toc_level1': '14.3.2 Elements of the Paris Agreement Relevant to\\xa0Mitigation ', '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.506143391, 'content': 'with its internationally inscribed targets and timetable for emissions reduction for developed countries, the Paris Agreement contains Nationally Determined Contributions embedded in an international system of transparency and accountability for all countries (Doelle 2016; Maljean-Dubois and Wemaere 2016) accompanied by a shared global goal, in particular in relation to a temperature limit. \\n 14.3.2.1 Context and Purpose '}, page_content='with its internationally inscribed targets and timetable for emissions reduction for developed countries, the Paris Agreement contains Nationally Determined Contributions embedded in an international system of transparency and accountability for all countries (Doelle 2016; Maljean-Dubois and Wemaere 2016) accompanied by a shared global goal, in particular in relation to a temperature limit. \\n 14.3.2.1 Context and Purpose '),\n", - " Document(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': 1109.0, 'num_tokens': 213.0, 'num_tokens_approx': 241.0, 'num_words': 181.0, 'page_number': 1808, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Anthropogenic Resulting from or produced by human activities.', '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.505911, 'content': 'Avoid, Shift, Improve (ASI) Reducing greenhouse gas emissions by avoiding the use of an emissions-producing service entirely, shifting to the lowest-emission mode of providing the service, and/or improving the technologies and systems for providing the service in ways that reduce emissions.\\nBaseline/reference See Reference period and Reference scenario. Baseline period See Reference period.\\nBiochar Relatively stable, carbon-rich material produced by heating biomass in an oxygen-limited environment. Biochar is distinguished from charcoal by its application: biochar is used as a soil amendment with the intention to improve soil functions and to reduce greenhouse gas emissions from biomass that would otherwise decompose rapidly (IBI 2018). See also Anthropogenic removals and Carbon dioxide removal (CDR).\\nBiodiversity Biodiversity or biological diversity means the variability among living organisms from all sources including, among other things, terrestrial, marine and other aquatic ecosystems, and the ecological complexes of which they are part; this includes diversity'}, page_content='Avoid, Shift, Improve (ASI) Reducing greenhouse gas emissions by avoiding the use of an emissions-producing service entirely, shifting to the lowest-emission mode of providing the service, and/or improving the technologies and systems for providing the service in ways that reduce emissions.\\nBaseline/reference See Reference period and Reference scenario. Baseline period See Reference period.\\nBiochar Relatively stable, carbon-rich material produced by heating biomass in an oxygen-limited environment. Biochar is distinguished from charcoal by its application: biochar is used as a soil amendment with the intention to improve soil functions and to reduce greenhouse gas emissions from biomass that would otherwise decompose rapidly (IBI 2018). See also Anthropogenic removals and Carbon dioxide removal (CDR).\\nBiodiversity Biodiversity or biological diversity means the variability among living organisms from all sources including, among other things, terrestrial, marine and other aquatic ecosystems, and the ecological complexes of which they are part; this includes diversity'),\n", - " Document(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': 1080.0, 'num_tokens': 215.0, 'num_tokens_approx': 237.0, 'num_words': 178.0, 'page_number': 1476, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'International Cooperation ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '14.3 The UNFCCC and the Paris Agreement ', 'toc_level1': '14.3.2 Elements of the Paris Agreement Relevant to\\xa0Mitigation ', '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.505601704, 'content': \"Figure 14.1 | Key features of the Paris Agreement. Arrows illustrate the interrelationship between the different features of the Paris Agreement, in particular between the Agreement's goals, required actions through NDCs, support (finance, technology and capacity building), transparency framework and global stocktake process. The figure also represents points of interconnection with domestic mitigation measures, whether taken by state Parties or by non-state actors (NSAs). This figure is illustrative rather than exhaustive of the features and interconnections.\\n14631463\\n\\x0c\\nIt is in the context of this complex, multipolar and highly differentiated world - with a heterogeneity of interests, constraints and capacities, increased contestations over shares of the carbon and development space, as well as diffused leadership - that the Paris Agreement was negotiated. This context fundamentally influenced the shape of the Paris Agreement, in particular on issues relating to its architecture, 'legalisation' (Karlas 2017) and differentiation (Bodansky et al.\"}, page_content=\"Figure 14.1 | Key features of the Paris Agreement. Arrows illustrate the interrelationship between the different features of the Paris Agreement, in particular between the Agreement's goals, required actions through NDCs, support (finance, technology and capacity building), transparency framework and global stocktake process. The figure also represents points of interconnection with domestic mitigation measures, whether taken by state Parties or by non-state actors (NSAs). This figure is illustrative rather than exhaustive of the features and interconnections.\\n14631463\\n\\x0c\\nIt is in the context of this complex, multipolar and highly differentiated world - with a heterogeneity of interests, constraints and capacities, increased contestations over shares of the carbon and development space, as well as diffused leadership - that the Paris Agreement was negotiated. This context fundamentally influenced the shape of the Paris Agreement, in particular on issues relating to its architecture, 'legalisation' (Karlas 2017) and differentiation (Bodansky et al.\"),\n", - " Document(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': 876.0, 'num_tokens': 230.0, 'num_tokens_approx': 221.0, 'num_words': 166.0, 'page_number': 1477, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '14.3.2 Elements of the Paris Agreement Relevant \\r\\nto Mitigation ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '14.3 The UNFCCC and the Paris Agreement ', 'toc_level1': '14.3.2 Elements of the Paris Agreement Relevant to\\xa0Mitigation ', '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.503208339, 'content': \"Figure 14.1 illustrates graphically the key features of the Paris Agreement. The Paris Agreement is based on a set of binding procedural obligations requiring Parties to 'prepare, communicate, and maintain' 'Nationally Determined Contributions' (NDCs) (UNFCCC 2015a, Art. 4.2) every five years (UNFCCC 2015a, Art. 4.9). These obligations are complemented by: (1) an 'ambition cycle' that expects Parties, informed by five-yearly global stocktakes (Art. 14), to submit successive NDCs representing a progression on their previous NDCs (UNFCCC 2015a; Bodansky et al. 2017b), and (2) an 'enhanced transparency framework' that places extensive informational demands on Parties, tailored to capacities, and establishes review processes to enable tracking of progress towards achievement of NDCs (Oberthur and Bodle 2016). In contrast to the Kyoto Protocol\"}, page_content=\"Figure 14.1 illustrates graphically the key features of the Paris Agreement. The Paris Agreement is based on a set of binding procedural obligations requiring Parties to 'prepare, communicate, and maintain' 'Nationally Determined Contributions' (NDCs) (UNFCCC 2015a, Art. 4.2) every five years (UNFCCC 2015a, Art. 4.9). These obligations are complemented by: (1) an 'ambition cycle' that expects Parties, informed by five-yearly global stocktakes (Art. 14), to submit successive NDCs representing a progression on their previous NDCs (UNFCCC 2015a; Bodansky et al. 2017b), and (2) an 'enhanced transparency framework' that places extensive informational demands on Parties, tailored to capacities, and establishes review processes to enable tracking of progress towards achievement of NDCs (Oberthur and Bodle 2016). In contrast to the Kyoto Protocol\"),\n", - " Document(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': 702.0, 'num_tokens': 227.0, 'num_tokens_approx': 173.0, 'num_words': 130.0, 'page_number': 2008, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'demand-side measures* 122, 527-535, 528, ', '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.501794696, 'content': 'biochar 790 carbon pricing policies 1385 energy efficiency 1387 fossil fuel subsidy removal 1387 illustrative pathways (IP) 309, 312 institutions and governance 1358 international aviation and shipping 1506-1508 international cooperation 1467, 1506-1508 Kyoto Protocol 1475 legislation for 1361-1363, 1362 market mechanisms 1359 models/modelling methods 1856 net zero targets 1407-1408 Paris Agreement 1467, 1476-1477 policy attribution 1479-1481 targets 1460 voluntary for offset credits 1386 regional contributions 9, 10-11 reporting 239 residual emissions 268-269, 268, 671, 692-693 scenarios 21-23 sectoral 6, 8, 194 sectoral contributions 247-254, 248, 249, 250, 252, 253'}, page_content='biochar 790 carbon pricing policies 1385 energy efficiency 1387 fossil fuel subsidy removal 1387 illustrative pathways (IP) 309, 312 institutions and governance 1358 international aviation and shipping 1506-1508 international cooperation 1467, 1506-1508 Kyoto Protocol 1475 legislation for 1361-1363, 1362 market mechanisms 1359 models/modelling methods 1856 net zero targets 1407-1408 Paris Agreement 1467, 1476-1477 policy attribution 1479-1481 targets 1460 voluntary for offset credits 1386 regional contributions 9, 10-11 reporting 239 residual emissions 268-269, 268, 671, 692-693 scenarios 21-23 sectoral 6, 8, 194 sectoral contributions 247-254, 248, 249, 250, 252, 253'),\n", - " Document(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': 725.0, 'num_tokens': 225.0, 'num_tokens_approx': 197.0, 'num_words': 148.0, 'page_number': 695, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Remaining Carbon Budgets to Climate Stabilization', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '5: Global Carbon and Other Biogeochemical Cycles and Feedbacks', 'toc_level1': 'Executive Summary', 'toc_level2': 'Climate Change Commitment and Change Beyond 2100', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.501357496, 'content': 'Mitigation requirements over this century for limiting maximum warming to specific levels can be quantified using a carbon budget that relates cumulative CO2 emissions to global mean temperature increase (high confidence). For the period 1850-2019, a total of 655 +- 65 PgC (2390 +- 240 GtCO2, likely range) of anthropogenic CO2 has been emitted. Remaining carbon budgets (starting from 1 January 2020) for limiting warming to 1.5degC, 1.7degC, and 2.0degC are 140 PgC (500 GtCO2), 230 PgC (850 GtCO2) and 370 PgC (1350 GtCO2), respectively, based on the 50th percentile of TCRE. For the 67th percentile, the respective values are 110 PgC (400 GtCO2), 190 PgC (700 GtCO2) and 310 PgC (1150 GtCO2). These'}, page_content='Mitigation requirements over this century for limiting maximum warming to specific levels can be quantified using a carbon budget that relates cumulative CO2 emissions to global mean temperature increase (high confidence). For the period 1850-2019, a total of 655 +- 65 PgC (2390 +- 240 GtCO2, likely range) of anthropogenic CO2 has been emitted. Remaining carbon budgets (starting from 1 January 2020) for limiting warming to 1.5degC, 1.7degC, and 2.0degC are 140 PgC (500 GtCO2), 230 PgC (850 GtCO2) and 370 PgC (1350 GtCO2), respectively, based on the 50th percentile of TCRE. For the 67th percentile, the respective values are 110 PgC (400 GtCO2), 190 PgC (700 GtCO2) and 310 PgC (1150 GtCO2). These'),\n", - " Document(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': 567.0, 'num_tokens': 211.0, 'num_tokens_approx': 178.0, 'num_words': 134.0, 'page_number': 2029, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Indexindex\\n\\x0c', '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.501089036, 'content': 'see also Nationally Determined Contributions (NDCs) Paris Committee on Capacity-building (PCCB) 1687 participatory governance* 461-462, 525, 556, 564, 1304, 1406 particulate matter (PM)* 441, 873, 1077, 1491, 1740 path dependence* 188, 350-351, 696, 697-698, 1767 pathways* 17-37, 156, 174 accelerated action 298, 356-358, 357 accelerating sustainable transitions 1739-1742 carbon dioxide removal (CDR) in 24-25 climate-resilient pathways* 1401, 1757, 1758 cross-sector linkages 336-341 following NDCs 298, 327, 349, 351, 352, 353, 355-356, 358'}, page_content='see also Nationally Determined Contributions (NDCs) Paris Committee on Capacity-building (PCCB) 1687 participatory governance* 461-462, 525, 556, 564, 1304, 1406 particulate matter (PM)* 441, 873, 1077, 1491, 1740 path dependence* 188, 350-351, 696, 697-698, 1767 pathways* 17-37, 156, 174 accelerated action 298, 356-358, 357 accelerating sustainable transitions 1739-1742 carbon dioxide removal (CDR) in 24-25 climate-resilient pathways* 1401, 1757, 1758 cross-sector linkages 336-341 following NDCs 298, 327, 349, 351, 352, 353, 355-356, 358'),\n", - " Document(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': 1239.0, 'num_tokens': 216.0, 'num_tokens_approx': 242.0, 'num_words': 182.0, 'page_number': 1972, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Atlas.2.3 Accessibility, Reproducibility and \\r\\nReusability (FAIR Principles)', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Atlas', 'toc_level1': 'Atlas.2 The Online ‘Interactive Atlas’', 'toc_level2': 'Atlas.2.3 Accessibility, Reproducibility and Reusability (FAIR Principles)', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.500684083, 'content': \"Figure Atlas.10 | Schematic representation of the Interactive Atlas workflow, from database description, subsetting and data transformation to final graphical product generation (maps and plots). Product-dependent workflow steps are depicted with dashed borders. METACLIP specifically considers the different intermediate steps consisting of various data transformations, bias adjustment, climate index calculation and graphical product generation, providing a semantic description of each stage and the different elements involved. The different controlled vocabularies describing each stage are indicated by the colours, with gradients indicating several vocabularies involved, usually meaning that specific individual instances are defined in 'ipcc_terms' extending generic classes of 'datasource'. These two vocabularies, dealing with the primary data sources have specific annotation properties linking their own features with the CMIP5, CMIP6 and CORDEX Data Reference Syntax, taking as reference their respective controlled vocabularies. All products generated by the Interactive Atlas provide a METACLIP provenance description, including a persistent link to a reproducible source code under version control.\\n19551955\"}, page_content=\"Figure Atlas.10 | Schematic representation of the Interactive Atlas workflow, from database description, subsetting and data transformation to final graphical product generation (maps and plots). Product-dependent workflow steps are depicted with dashed borders. METACLIP specifically considers the different intermediate steps consisting of various data transformations, bias adjustment, climate index calculation and graphical product generation, providing a semantic description of each stage and the different elements involved. The different controlled vocabularies describing each stage are indicated by the colours, with gradients indicating several vocabularies involved, usually meaning that specific individual instances are defined in 'ipcc_terms' extending generic classes of 'datasource'. These two vocabularies, dealing with the primary data sources have specific annotation properties linking their own features with the CMIP5, CMIP6 and CORDEX Data Reference Syntax, taking as reference their respective controlled vocabularies. All products generated by the Interactive Atlas provide a METACLIP provenance description, including a persistent link to a reproducible source code under version control.\\n19551955\"),\n", - " Document(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': 708.0, 'num_tokens': 184.0, 'num_tokens_approx': 198.0, 'num_words': 149.0, 'page_number': 2237, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Canopy temperature The temperature within the canopy of \\r\\na vegetation structure.', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Annex VII: Glossary', '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.500672281, 'content': 'Carbon cycle The flow of carbon (in various forms, e.g., as carbon dioxide (CO2), carbon in biomass, and carbon dissolved in the ocean as carbonate and bicarbonate) through the atmosphere, hydrosphere, terrestrial and marine biosphere and lithosphere. In this report, the reference unit for the global carbon cycle is GtCO2 or GtC (one Gigatonne = 1 Gt = 1015 grams; 1 GtC corresponds to 3.664 GtCO2). See also Ocean carbon cycle.\\nCarbon dioxide (CO2) A naturally occurring gas, CO2 is also a by-product of burning fossil fuels (such as oil, gas and coal), of burning biomass, of land-use change (LUC) and of industrial processes (e.g., cement production). It is the principal anthropogenic'}, page_content='Carbon cycle The flow of carbon (in various forms, e.g., as carbon dioxide (CO2), carbon in biomass, and carbon dissolved in the ocean as carbonate and bicarbonate) through the atmosphere, hydrosphere, terrestrial and marine biosphere and lithosphere. In this report, the reference unit for the global carbon cycle is GtCO2 or GtC (one Gigatonne = 1 Gt = 1015 grams; 1 GtC corresponds to 3.664 GtCO2). See also Ocean carbon cycle.\\nCarbon dioxide (CO2) A naturally occurring gas, CO2 is also a by-product of burning fossil fuels (such as oil, gas and coal), of burning biomass, of land-use change (LUC) and of industrial processes (e.g., cement production). It is the principal anthropogenic'),\n", - " Document(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': 345.0, 'num_tokens': 111.0, 'num_tokens_approx': 112.0, 'num_words': 84.0, 'page_number': 36, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Box SPM.1 | Assessment of Modelled Global Emission Scenarios', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '_Hlk99447836', '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.499774247, 'content': 'C.2.1 Modelled global pathways limiting warming to 1.5degC (>50%) with no or limited overshoot are associated with projected cumulative net CO2 emissions50 until the time of net zero CO2 of 510 [330-710] GtCO2. Pathways limiting warming to 2degC (>67%) are associated with 890 [640-1160] GtCO2 (Table SPM.2). (high confidence) {3.3, Box 3.4}'}, page_content='C.2.1 Modelled global pathways limiting warming to 1.5degC (>50%) with no or limited overshoot are associated with projected cumulative net CO2 emissions50 until the time of net zero CO2 of 510 [330-710] GtCO2. Pathways limiting warming to 2degC (>67%) are associated with 890 [640-1160] GtCO2 (Table SPM.2). (high confidence) {3.3, Box 3.4}'),\n", - " Document(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': 647.0, 'num_tokens': 219.0, 'num_tokens_approx': 228.0, 'num_words': 171.0, 'page_number': 1429, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'National and Sub-national Policies and Institutions', '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.499582261, 'content': 'Bataille, C. et al., 2018a: a review of technology and policy deep decarbonization pathway options for making energy-intensive industry production consistent with the Paris Agreement. J. Clean. Prod., 187, 960-973, doi:10.1016/j.jclepro.2018.03.107. Bataille, C., C. Guivarch, S. Hallegatte, J. Rogelj, and H. Waisman, 2018b: Carbon prices across countries. Nat. Clim. Change, 8, 648-650, doi:10.1038/s41558-018-0239-1. Bataille, C.G.F., 2020: Physical and policy pathways to net-zero emissions industry. WIREs Clim. Change, 11(2), e633, doi:10.1002/wcc.633. Batstrand, S., 2015: More than Markets: a Comparative Study of Nine'}, page_content='Bataille, C. et al., 2018a: a review of technology and policy deep decarbonization pathway options for making energy-intensive industry production consistent with the Paris Agreement. J. Clean. Prod., 187, 960-973, doi:10.1016/j.jclepro.2018.03.107. Bataille, C., C. Guivarch, S. Hallegatte, J. Rogelj, and H. Waisman, 2018b: Carbon prices across countries. Nat. Clim. Change, 8, 648-650, doi:10.1038/s41558-018-0239-1. Bataille, C.G.F., 2020: Physical and policy pathways to net-zero emissions industry. WIREs Clim. Change, 11(2), e633, doi:10.1002/wcc.633. Batstrand, S., 2015: More than Markets: a Comparative Study of Nine'),\n", - " Document(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': 372.0, 'num_tokens': 89.0, 'num_tokens_approx': 88.0, 'num_words': 66.0, 'page_number': 1666, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Innovation, Technology Development and Transfer', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '16.2 Elements, Drivers and Modelling of\\xa0Technology Innovation', 'toc_level1': 'Cross-Chapter Box\\xa011 |\\xa0Digitalisation: Efficiency Potentials and Governance Considerations', '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.49823752, 'content': 'Cross-Chapter Box 11, Table 1 | Selected sector approaches for reducing GHG emissions that are supported by new digital technologies. Contributions of digitalisation include a) supporting role (+), b) necessary role in mix of tools (++), c) necessary unique contribution (+++), but digitalisation may also increase emissions (-). (Chapters 5, 8, 9 and 11).\\n16531055'}, page_content='Cross-Chapter Box 11, Table 1 | Selected sector approaches for reducing GHG emissions that are supported by new digital technologies. Contributions of digitalisation include a) supporting role (+), b) necessary role in mix of tools (++), c) necessary unique contribution (+++), but digitalisation may also increase emissions (-). (Chapters 5, 8, 9 and 11).\\n16531055'),\n", - " Document(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': 567.0, 'num_tokens': 135.0, 'num_tokens_approx': 156.0, 'num_words': 117.0, 'page_number': 771, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'h\\r\\n For assessment of cross-sector fluxes related to the food sector, see Chapter 12.', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '7.2 Historical and Current Trends in GHG Emission and Removals; Their Uncertainties and Implications for Assessing Collective Climate Progress', 'toc_level1': '7.2.2 Flux of CO2 from AFOLU, and the Non-anthropogenic Land Sink', '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.49778223, 'content': 'regrowth of forests following wood harvest or abandonment of agriculture, grassland management, agricultural management. Emissions from peat burning and draining are added from external datasets (see text). Both the DGVM and bookkeeping global data is available at: https://www.icos-cp.eu/science-and-impact/global-carbon-budget/2020 (accessed on 4 October 2021). Data consistent with IPCC AR6 WGI Chapter 5. Dotted lines denote the linear regression from 2000 to 2019. Trends are statistically significant (P <0.05) with exception for the NGHGI trend (P <0.01).'}, page_content='regrowth of forests following wood harvest or abandonment of agriculture, grassland management, agricultural management. Emissions from peat burning and draining are added from external datasets (see text). Both the DGVM and bookkeeping global data is available at: https://www.icos-cp.eu/science-and-impact/global-carbon-budget/2020 (accessed on 4 October 2021). Data consistent with IPCC AR6 WGI Chapter 5. Dotted lines denote the linear regression from 2000 to 2019. Trends are statistically significant (P <0.05) with exception for the NGHGI trend (P <0.01).'),\n", - " Document(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': 783.0, 'num_tokens': 198.0, 'num_tokens_approx': 216.0, 'num_words': 162.0, 'page_number': 332, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Cumulative CO2 emissions and temperature goals', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '3.3 Emission Pathways, Including Socio-economic, Carbon Budget and Climate Responses Uncertainties', 'toc_level1': 'Box\\xa03.3 | The Likelihood of High-end Emissions Scenarios', '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.497723401, 'content': 'substantial for stringent warming limits. For 1.5degC pathways, variations in non-CO2 warming across different emission scenarios have been found to vary the remaining carbon budget by approximately 220 GtCO2 (AR6 WGI Chapter 5, Section 5.5.2.2). In addition to reaching net zero CO2 emissions, a strong reduction in methane emissions is the most critical component in non-CO2 mitigation to keep the Paris climate goals in reach (Collins et al. 2018; van Vuuren et al. 2018) (see also AR6 WGI, Chapters 5, 6 and 7). It should be noted that the temperature categories (C1-C7) generally aligned with the horizontal axis, except for the end\\x02of-century values for C1 and C2 that coincide.\\n Cumulative CO2 emissions and temperature goals '}, page_content='substantial for stringent warming limits. For 1.5degC pathways, variations in non-CO2 warming across different emission scenarios have been found to vary the remaining carbon budget by approximately 220 GtCO2 (AR6 WGI Chapter 5, Section 5.5.2.2). In addition to reaching net zero CO2 emissions, a strong reduction in methane emissions is the most critical component in non-CO2 mitigation to keep the Paris climate goals in reach (Collins et al. 2018; van Vuuren et al. 2018) (see also AR6 WGI, Chapters 5, 6 and 7). It should be noted that the temperature categories (C1-C7) generally aligned with the horizontal axis, except for the end\\x02of-century values for C1 and C2 that coincide.\\n Cumulative CO2 emissions and temperature goals '),\n", - " Document(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': 471.0, 'num_tokens': 105.0, 'num_tokens_approx': 109.0, 'num_words': 82.0, 'page_number': 523, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Demand, Services and Social Aspects of Mitigation ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '5.1 Introduction', 'toc_level1': 'Box\\xa05.1 | Bibliometric Foundation of Demand-side Climate Change Mitigation', '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.497199416, 'content': 'with social change to integrate Improving ways of living, Shifting modalities and Avoiding certain kinds of emissions altogether (Section 5.6).\\nSocial practice theory emphasises that material stocks and social relations are key in forming and maintaining habits (Reckwitz 2002; Haberl et al. 2021). This chapter reflects these insights by assessing the role of infrastructures and social norms in GHG emission-intensive or low-carbon lifestyles (Section 5.4).'}, page_content='with social change to integrate Improving ways of living, Shifting modalities and Avoiding certain kinds of emissions altogether (Section 5.6).\\nSocial practice theory emphasises that material stocks and social relations are key in forming and maintaining habits (Reckwitz 2002; Haberl et al. 2021). This chapter reflects these insights by assessing the role of infrastructures and social norms in GHG emission-intensive or low-carbon lifestyles (Section 5.4).'),\n", - " Document(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': 493.0, 'num_tokens': 120.0, 'num_tokens_approx': 125.0, 'num_words': 94.0, 'page_number': 1822, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Multi-level governance See Governance.', '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.495357603, 'content': 'Note 2: Under the Paris Rulebook (Decision 18/CMA.1, annex, paragraph 37), parties have agreed to use GWP100 values from the IPCC AR5 or GWP100 values from a subsequent IPCC Assessment Report to report aggregate emissions and removals of GHGs. In addition, parties may use other metrics to report supplemental information on aggregate emissions and removals of GHGs.]\\nSee also Greenhouse gas neutrality, Net-zero CO2 emissions, and Land use, land-use change and forestry (LULUCF).'}, page_content='Note 2: Under the Paris Rulebook (Decision 18/CMA.1, annex, paragraph 37), parties have agreed to use GWP100 values from the IPCC AR5 or GWP100 values from a subsequent IPCC Assessment Report to report aggregate emissions and removals of GHGs. In addition, parties may use other metrics to report supplemental information on aggregate emissions and removals of GHGs.]\\nSee also Greenhouse gas neutrality, Net-zero CO2 emissions, and Land use, land-use change and forestry (LULUCF).'),\n", - " Document(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': 745.0, 'num_tokens': 231.0, 'num_tokens_approx': 241.0, 'num_words': 181.0, 'page_number': 796, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'References', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '5: Global Carbon and Other Biogeochemical Cycles and Feedbacks', 'toc_level1': 'References', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.4952043, 'content': 'Allen, G.H. and T.M. Pavelsky, 2018: Global extent of rivers and streams. Science, 361(6402), 585-588, doi:10.1126/science.aat0636. Allen, M.R. et al., 2009: Warming caused by cumulative carbon emissions towards the trillionth tonne. Nature, 458(7242), 1163-1166, doi:10.1038/nature08019. Allen, M.R. et al., 2018: Framing and Context. In: Global Warming of 1.5degC. An IPCC Special Report on the impacts of global warming of 1.5degC above pre\\x02industrial levels and related global greenhouse gas emission pathways, in the context of strengthening the global response to the threat of climate change, sustainable development, and efforts to eradicate poverty [Masson-Delmotte, V., P. Zhai, H.-O. Portner, D. Roberts, J. Skea,'}, page_content='Allen, G.H. and T.M. Pavelsky, 2018: Global extent of rivers and streams. Science, 361(6402), 585-588, doi:10.1126/science.aat0636. Allen, M.R. et al., 2009: Warming caused by cumulative carbon emissions towards the trillionth tonne. Nature, 458(7242), 1163-1166, doi:10.1038/nature08019. Allen, M.R. et al., 2018: Framing and Context. In: Global Warming of 1.5degC. An IPCC Special Report on the impacts of global warming of 1.5degC above pre\\x02industrial levels and related global greenhouse gas emission pathways, in the context of strengthening the global response to the threat of climate change, sustainable development, and efforts to eradicate poverty [Masson-Delmotte, V., P. Zhai, H.-O. Portner, D. Roberts, J. Skea,'),\n", - " Document(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': 1016.0, 'num_tokens': 233.0, 'num_tokens_approx': 266.0, 'num_words': 200.0, 'page_number': 437, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Introduction', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '4.2 Accelerating Mitigation Actions Across Scales', 'toc_level1': 'Cross-Chapter Box\\xa04\\xa0| Comparison of NDCs and current policies with the 2030 GHG Emissions from Long-term Temperature Pathways', '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.495102525, 'content': \"Introduction\\nThe Paris Agreement (PA) sets a long-term goal of holding the increase of global average temperature to 'well below 2degC above pre\\x02industrial levels' and pursuing efforts to limit the temperature increase to 1.5degC above pre-industrial levels. This is underpinned by the 'aim to reach global peaking of greenhouse gas emissions as soon as possible' and 'achieve a balance between anthropogenic emissions by sources and removals by sinks of GHG in the second half of this century' (UNFCCC 2015a). The PA adopts a bottom-up approach in which countries determine their contribution to reach the PA's long-term goal. These national targets, plans and measures are called 'nationally determined contributions' or NDCs.\\n Introduction \\n\\nCross-Chapter Box 4, Figure 1 | Global GHG emissions of modelled pathways (funnels in Panel a, and associated bars in Panels b, c, d) and projected emission outcomes from near-term policy assessments for 2030 (Panel b).\\n424424\"}, page_content=\"Introduction\\nThe Paris Agreement (PA) sets a long-term goal of holding the increase of global average temperature to 'well below 2degC above pre\\x02industrial levels' and pursuing efforts to limit the temperature increase to 1.5degC above pre-industrial levels. This is underpinned by the 'aim to reach global peaking of greenhouse gas emissions as soon as possible' and 'achieve a balance between anthropogenic emissions by sources and removals by sinks of GHG in the second half of this century' (UNFCCC 2015a). The PA adopts a bottom-up approach in which countries determine their contribution to reach the PA's long-term goal. These national targets, plans and measures are called 'nationally determined contributions' or NDCs.\\n Introduction \\n\\nCross-Chapter Box 4, Figure 1 | Global GHG emissions of modelled pathways (funnels in Panel a, and associated bars in Panels b, c, d) and projected emission outcomes from near-term policy assessments for 2030 (Panel b).\\n424424\"),\n", - " Document(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': 1023.0, 'num_tokens': 229.0, 'num_tokens_approx': 258.0, 'num_words': 194.0, 'page_number': 69, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'TS.2 The Changed Global Context, Signs \\r\\nof Progress and Continuing Challenges', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'TS.2 The Changed Global Context, Signs of Progress and Continuing Challenges', '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.494557917, 'content': \"Figure TS.1 | Sustainable development pathways towards fulfilling the Sustainable Development Goals. The graph shows global average per-capita GHG emissions (vertical axis) and relative 'Historic Index of Human Development' (HIHD) levels (horizonal) have increased globally since the industrial revolution (grey line). The bubbles on the graph show regional per-capita GHG emissions and human development levels in the year 2015, illustrating large disparities. Pathways towards fulfilling the Paris Agreement (and SDG 13) involve global average per-capita GHG emissions below about 5 tCO2-eq by 2030. Likewise, to fulfil SDGs 3, 4 and 8, HIHD levels (see footnote 7 in Chapter 1) need to be at least 0.5 or greater. This suggests a 'sustainable development zone' for year 2030 (in pale brown); the in-figure text also suggests a 'sustainable development corridor', where countries limit per-capita GHG emissions while improving levels of human development over time. The emphasis of pathways into the sustainable\"}, page_content=\"Figure TS.1 | Sustainable development pathways towards fulfilling the Sustainable Development Goals. The graph shows global average per-capita GHG emissions (vertical axis) and relative 'Historic Index of Human Development' (HIHD) levels (horizonal) have increased globally since the industrial revolution (grey line). The bubbles on the graph show regional per-capita GHG emissions and human development levels in the year 2015, illustrating large disparities. Pathways towards fulfilling the Paris Agreement (and SDG 13) involve global average per-capita GHG emissions below about 5 tCO2-eq by 2030. Likewise, to fulfil SDGs 3, 4 and 8, HIHD levels (see footnote 7 in Chapter 1) need to be at least 0.5 or greater. This suggests a 'sustainable development zone' for year 2030 (in pale brown); the in-figure text also suggests a 'sustainable development corridor', where countries limit per-capita GHG emissions while improving levels of human development over time. The emphasis of pathways into the sustainable\"),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document8', 'document_number': 8.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 102.0, 'name': 'Technical Summary. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 1023.0, 'num_tokens': 229.0, 'num_tokens_approx': 258.0, 'num_words': 194.0, 'page_number': 10, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'TS.2 The Changed Global Context, Signs \\r\\nof Progress and Continuing Challenges', 'short_name': 'IPCC AR6 WGIII TS', '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/wg3/downloads/report/IPCC_AR6_WGIII_TechnicalSummary.pdf', 'similarity_score': 0.494557917, 'content': \"Figure TS.1 | Sustainable development pathways towards fulfilling the Sustainable Development Goals. The graph shows global average per-capita GHG emissions (vertical axis) and relative 'Historic Index of Human Development' (HIHD) levels (horizonal) have increased globally since the industrial revolution (grey line). The bubbles on the graph show regional per-capita GHG emissions and human development levels in the year 2015, illustrating large disparities. Pathways towards fulfilling the Paris Agreement (and SDG 13) involve global average per-capita GHG emissions below about 5 tCO2-eq by 2030. Likewise, to fulfil SDGs 3, 4 and 8, HIHD levels (see footnote 7 in Chapter 1) need to be at least 0.5 or greater. This suggests a 'sustainable development zone' for year 2030 (in pale brown); the in-figure text also suggests a 'sustainable development corridor', where countries limit per-capita GHG emissions while improving levels of human development over time. The emphasis of pathways into the sustainable\"}, page_content=\"Figure TS.1 | Sustainable development pathways towards fulfilling the Sustainable Development Goals. The graph shows global average per-capita GHG emissions (vertical axis) and relative 'Historic Index of Human Development' (HIHD) levels (horizonal) have increased globally since the industrial revolution (grey line). The bubbles on the graph show regional per-capita GHG emissions and human development levels in the year 2015, illustrating large disparities. Pathways towards fulfilling the Paris Agreement (and SDG 13) involve global average per-capita GHG emissions below about 5 tCO2-eq by 2030. Likewise, to fulfil SDGs 3, 4 and 8, HIHD levels (see footnote 7 in Chapter 1) need to be at least 0.5 or greater. This suggests a 'sustainable development zone' for year 2030 (in pale brown); the in-figure text also suggests a 'sustainable development corridor', where countries limit per-capita GHG emissions while improving levels of human development over time. The emphasis of pathways into the sustainable\"),\n", - " Document(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': 488.0, 'num_tokens': 104.0, 'num_tokens_approx': 117.0, 'num_words': 88.0, 'page_number': 312, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Mitigation Pathways Compatible with Long-term Goals ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'Executive Summary', '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.493661374, 'content': 'Stringent emissions reductions at the level required for 2degC (>67%) or lower are achieved through increased direct electrification of buildings, transport, and industry, resulting in increased electricity generation in all pathways (high confidence). Nearly all electricity in pathways limiting warming to 2degC (>67%) or lower is from low- or no-carbon technologies, with different shares of nuclear, biomass, non-biomass renewables, and fossil CCS across pathways. {3.4}'}, page_content='Stringent emissions reductions at the level required for 2degC (>67%) or lower are achieved through increased direct electrification of buildings, transport, and industry, resulting in increased electricity generation in all pathways (high confidence). Nearly all electricity in pathways limiting warming to 2degC (>67%) or lower is from low- or no-carbon technologies, with different shares of nuclear, biomass, non-biomass renewables, and fossil CCS across pathways. {3.4}'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 482.0, 'num_tokens': 202.0, 'num_tokens_approx': 236.0, 'num_words': 177.0, 'page_number': 61, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'Health, well-being, migration and displacement', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.D Contribution of Adaptation to Solutions', 'toc_level1': 'Adaptation progress and gaps', 'toc_level2': 'Health, well-being, migration and displacement', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.49267152, 'content': 'adaptation of social infrastructure (e.g., community facilities, services and networks) and failure to address complex interconnected risks for example in the food-energy-water-health nexus or the inter\\x02relationships of air quality and climate risk (medium confidence). {2.6.7, 4.6.4, 4.7.1, 5.12.5, 5.14.1, 6.3.1, 6.4.3, 6.4.5, 6.4.5, 6.4.5, 7.4.2, 9.10.3, 10.4.7, 11.3.6, 12.5.6, Table 12.9, 13.7.2, Figure 13.25, 14.5.6, Table 14.5, CCB GENDER, CCB HEALTH, CCB NATURAL}'}, page_content='adaptation of social infrastructure (e.g., community facilities, services and networks) and failure to address complex interconnected risks for example in the food-energy-water-health nexus or the inter\\x02relationships of air quality and climate risk (medium confidence). {2.6.7, 4.6.4, 4.7.1, 5.12.5, 5.14.1, 6.3.1, 6.4.3, 6.4.5, 6.4.5, 6.4.5, 7.4.2, 9.10.3, 10.4.7, 11.3.6, 12.5.6, Table 12.9, 13.7.2, Figure 13.25, 14.5.6, Table 14.5, CCB GENDER, CCB HEALTH, CCB NATURAL}'),\n", - " Document(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': 482.0, 'num_tokens': 202.0, 'num_tokens_approx': 236.0, 'num_words': 177.0, 'page_number': 107, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Health, well-being, migration and displacement', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Technical Summary ', '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.49267152, 'content': 'adaptation of social infrastructure (e.g., community facilities, services and networks) and failure to address complex interconnected risks for example in the food-energy-water-health nexus or the inter\\x02relationships of air quality and climate risk (medium confidence). {2.6.7, 4.6.4, 4.7.1, 5.12.5, 5.14.1, 6.3.1, 6.4.3, 6.4.5, 6.4.5, 6.4.5, 7.4.2, 9.10.3, 10.4.7, 11.3.6, 12.5.6, Table 12.9, 13.7.2, Figure 13.25, 14.5.6, Table 14.5, CCB GENDER, CCB HEALTH, CCB NATURAL}'}, page_content='adaptation of social infrastructure (e.g., community facilities, services and networks) and failure to address complex interconnected risks for example in the food-energy-water-health nexus or the inter\\x02relationships of air quality and climate risk (medium confidence). {2.6.7, 4.6.4, 4.7.1, 5.12.5, 5.14.1, 6.3.1, 6.4.3, 6.4.5, 6.4.5, 6.4.5, 7.4.2, 9.10.3, 10.4.7, 11.3.6, 12.5.6, Table 12.9, 13.7.2, Figure 13.25, 14.5.6, Table 14.5, CCB GENDER, CCB HEALTH, CCB NATURAL}'),\n", - " Document(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': 796.0, 'num_tokens': 206.0, 'num_tokens_approx': 217.0, 'num_words': 163.0, 'page_number': 6, 'release_date': 2019.0, 'report_type': 'Special Report', 'section_header': 'Biomass Biomass\\n\\x0c', '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.49226135, 'content': 'Biomass Biomass\\n\\x0c\\nOrganic material excluding the material that is fossilised or embed\\x02ded in geological formations. Biomass may refer to the mass of organic matter in a specific area (ISO, 2014).\\n Biomass Biomass\\n\\x0c \\n\\nCarbon cycle \\nThe flow of carbon (in various forms, e.g., as carbon dioxide (CO2 ), carbon in biomass, and carbon dissolved in the ocean as carbonate and bicarbonate) through the atmosphere, hydrosphere, ocean, terrestrial and marine biosphere and lithosphere. In this Special Report, the refer\\x02ence unit for the global carbon cycle is GtCO2 or GtC (one Gigatonne = 1 Gt = 1015 grams; 1 GtC corresponds to 3.667 GtCO2 ). See also Atmo\\x02sphere, Blue carbon and Ocean acidification (OA).\\n Carbon cycle '}, page_content='Biomass Biomass\\n\\x0c\\nOrganic material excluding the material that is fossilised or embed\\x02ded in geological formations. Biomass may refer to the mass of organic matter in a specific area (ISO, 2014).\\n Biomass Biomass\\n\\x0c \\n\\nCarbon cycle \\nThe flow of carbon (in various forms, e.g., as carbon dioxide (CO2 ), carbon in biomass, and carbon dissolved in the ocean as carbonate and bicarbonate) through the atmosphere, hydrosphere, ocean, terrestrial and marine biosphere and lithosphere. In this Special Report, the refer\\x02ence unit for the global carbon cycle is GtCO2 or GtC (one Gigatonne = 1 Gt = 1015 grams; 1 GtC corresponds to 3.667 GtCO2 ). See also Atmo\\x02sphere, Blue carbon and Ocean acidification (OA).\\n Carbon cycle '),\n", - " Document(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': 619.0, 'num_tokens': 226.0, 'num_tokens_approx': 192.0, 'num_words': 144.0, 'page_number': 2027, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Japan\\x0c', '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.49118942, 'content': 'Paris Agreement 1465-1466 pathways and scenarios 18-20, 23-24, 23, 25, 27 remaining carbon budgets and temperature goals 320-322 renewable energy penetration and fossil fuel phase-out 1742-1744, 1743 sectoral emissions strategies 337, 339 timescales 1262-1263 timing of 322, 324, 337, 339, 352, 354 transport 1109-1110 net-zero GHG emissions* 162, 174, 191, 325, 327-329, 430-432, 431-432, 433, 435, 441, 914-915 buildings 31 carbon dioxide capture and utilisation (CCU) 1186 degree to which possible 1260 energy systems 671-672 hydrogen, role of 1184 industry 29, 1166, 1167, 1184, 1196, 1754'}, page_content='Paris Agreement 1465-1466 pathways and scenarios 18-20, 23-24, 23, 25, 27 remaining carbon budgets and temperature goals 320-322 renewable energy penetration and fossil fuel phase-out 1742-1744, 1743 sectoral emissions strategies 337, 339 timescales 1262-1263 timing of 322, 324, 337, 339, 352, 354 transport 1109-1110 net-zero GHG emissions* 162, 174, 191, 325, 327-329, 430-432, 431-432, 433, 435, 441, 914-915 buildings 31 carbon dioxide capture and utilisation (CCU) 1186 degree to which possible 1260 energy systems 671-672 hydrogen, role of 1184 industry 29, 1166, 1167, 1184, 1196, 1754'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document3', 'document_number': 3.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 112.0, 'name': 'Technical Summary. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC', 'num_characters': 865.0, 'num_tokens': 198.0, 'num_tokens_approx': 226.0, 'num_words': 170.0, 'page_number': 21, 'release_date': 2021.0, 'report_type': 'TS', 'section_header': 'TS.1.3.1 Climate Change Scenarios', 'short_name': 'IPCC AR6 WGI TS', 'source': 'IPCC', 'toc_level0': 'TS.1 A Changing Climate', 'toc_level1': 'TS.1.3 Assessing Future Climate Change', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg1/downloads/report/IPCC_AR6_WGI_TS.pdf', 'similarity_score': 0.490351677, 'content': \"Figure TS.4 | The climate change cause-effect chain: The intent of this figure is to illustrate the process chain starting from anthropogenic emissions, to changes in atmospheric concentration, to changes in Earth's energy balance ('forcing'), to changes in global climate and ultimately regional climate and climatic impact-drivers. Shown is the core set of five Shared Socio-economic Pathway (SSP) scenarios as well as emissions and concentration ranges for the previous Representative Concentration Pathway (RCP) scenarios in year 2100; carbon dioxide (CO2) emissions (GtCO2 yr-1), panel top left; methane (CH4) emissions (middle) and sulphur dioxide (SO2), nitrogen oxide (NOx) emissions (all in Mt yr-1), top right; concentrations of atmospheric CO2 (ppm) and CH4 (ppb), second row left and right; effective radiative forcing for both anthropogenic and\"}, page_content=\"Figure TS.4 | The climate change cause-effect chain: The intent of this figure is to illustrate the process chain starting from anthropogenic emissions, to changes in atmospheric concentration, to changes in Earth's energy balance ('forcing'), to changes in global climate and ultimately regional climate and climatic impact-drivers. Shown is the core set of five Shared Socio-economic Pathway (SSP) scenarios as well as emissions and concentration ranges for the previous Representative Concentration Pathway (RCP) scenarios in year 2100; carbon dioxide (CO2) emissions (GtCO2 yr-1), panel top left; methane (CH4) emissions (middle) and sulphur dioxide (SO2), nitrogen oxide (NOx) emissions (all in Mt yr-1), top right; concentrations of atmospheric CO2 (ppm) and CH4 (ppb), second row left and right; effective radiative forcing for both anthropogenic and\"),\n", - " Document(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': 865.0, 'num_tokens': 198.0, 'num_tokens_approx': 226.0, 'num_words': 170.0, 'page_number': 70, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'TS.1.3.1 Climate Change Scenarios', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Technical Summary', 'toc_level1': 'TS.1 A Changing Climate', 'toc_level2': 'TS.1.3 Assessing Future Climate Change', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.490351677, 'content': \"Figure TS.4 | The climate change cause-effect chain: The intent of this figure is to illustrate the process chain starting from anthropogenic emissions, to changes in atmospheric concentration, to changes in Earth's energy balance ('forcing'), to changes in global climate and ultimately regional climate and climatic impact-drivers. Shown is the core set of five Shared Socio-economic Pathway (SSP) scenarios as well as emissions and concentration ranges for the previous Representative Concentration Pathway (RCP) scenarios in year 2100; carbon dioxide (CO2) emissions (GtCO2 yr-1), panel top left; methane (CH4) emissions (middle) and sulphur dioxide (SO2), nitrogen oxide (NOx) emissions (all in Mt yr-1), top right; concentrations of atmospheric CO2 (ppm) and CH4 (ppb), second row left and right; effective radiative forcing for both anthropogenic and\"}, page_content=\"Figure TS.4 | The climate change cause-effect chain: The intent of this figure is to illustrate the process chain starting from anthropogenic emissions, to changes in atmospheric concentration, to changes in Earth's energy balance ('forcing'), to changes in global climate and ultimately regional climate and climatic impact-drivers. Shown is the core set of five Shared Socio-economic Pathway (SSP) scenarios as well as emissions and concentration ranges for the previous Representative Concentration Pathway (RCP) scenarios in year 2100; carbon dioxide (CO2) emissions (GtCO2 yr-1), panel top left; methane (CH4) emissions (middle) and sulphur dioxide (SO2), nitrogen oxide (NOx) emissions (all in Mt yr-1), top right; concentrations of atmospheric CO2 (ppm) and CH4 (ppb), second row left and right; effective radiative forcing for both anthropogenic and\"),\n", - " Document(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': 809.0, 'num_tokens': 173.0, 'num_tokens_approx': 188.0, 'num_words': 141.0, 'page_number': 2919, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Emission scenario\\r\\nSee Scenario.', '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.490338027, 'content': 'Emission scenario See Scenario.\\nEmission scenario See Scenario.\\n Emission scenario See Scenario. \\n\\nEmissionsEmissions\\n\\x0c\\nAnthropogenic emissions\\nEmissions of greenhouse gases (GHGs), precursors of GHGs and aerosols caused by human activities. These activities include the burning of fossil fuels, deforestation, land use and land-use changes (LULUC), livestock production, fertilisation, waste management and industrial processes.\\n Anthropogenic emissions \\n\\nFossil-fuel emissions\\nEmissions of greenhouse gases (in particular, carbon dioxide), other trace gases and aerosols resulting from the combustion of fuels from fossil carbon deposits such as oil, gas and coal.\\n Fossil-fuel emissions '}, page_content='Emission scenario See Scenario.\\nEmission scenario See Scenario.\\n Emission scenario See Scenario. \\n\\nEmissionsEmissions\\n\\x0c\\nAnthropogenic emissions\\nEmissions of greenhouse gases (GHGs), precursors of GHGs and aerosols caused by human activities. These activities include the burning of fossil fuels, deforestation, land use and land-use changes (LULUC), livestock production, fertilisation, waste management and industrial processes.\\n Anthropogenic emissions \\n\\nFossil-fuel emissions\\nEmissions of greenhouse gases (in particular, carbon dioxide), other trace gases and aerosols resulting from the combustion of fuels from fossil carbon deposits such as oil, gas and coal.\\n Fossil-fuel emissions '),\n", - " Document(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': 875.0, 'num_tokens': 207.0, 'num_tokens_approx': 209.0, 'num_words': 157.0, 'page_number': 2237, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Biogeophysical potential See Mitigation potential.', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Annex VII: Glossary', '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.49016729, 'content': 'circulation on multi-millennial scales (Mix et al., 1986), later named bipolar seesaw and applied to millennial scales (Broecker, 1998) with a similar thermohaline mechanism (Stocker and Johnsen, 2003). See also Meridional overturning circulation (MOC) and Deglacial or deglaciation or glacial termination.\\nBlack carbon (BC) A relatively pure form of carbon, also known as soot, arising from the incomplete combustion of fossil fuels, biofuel, and biomass. It only stays in the atmosphere for days or weeks. BC is a climate forcing agent with strong warming effect, both in the atmosphere and when deposited on snow or ice. See also Aerosol and Atmosphere.\\nBlocking Associated with persistent, slow-moving high-pressure systems that obstruct the prevailing westerly winds in the middle and high latitudes and the normal eastward progress of extratropical'}, page_content='circulation on multi-millennial scales (Mix et al., 1986), later named bipolar seesaw and applied to millennial scales (Broecker, 1998) with a similar thermohaline mechanism (Stocker and Johnsen, 2003). See also Meridional overturning circulation (MOC) and Deglacial or deglaciation or glacial termination.\\nBlack carbon (BC) A relatively pure form of carbon, also known as soot, arising from the incomplete combustion of fossil fuels, biofuel, and biomass. It only stays in the atmosphere for days or weeks. BC is a climate forcing agent with strong warming effect, both in the atmosphere and when deposited on snow or ice. See also Aerosol and Atmosphere.\\nBlocking Associated with persistent, slow-moving high-pressure systems that obstruct the prevailing westerly winds in the middle and high latitudes and the normal eastward progress of extratropical'),\n", - " Document(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': 780.0, 'num_tokens': 182.0, 'num_tokens_approx': 192.0, 'num_words': 144.0, 'page_number': 97, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Net zero CO2 and net zero GHG emissions are possible through different modelled mitigation pathways. ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'TS.4 Mitigation and Development Pathways', 'toc_level1': 'Box TS.5 | Illustrative Mitigation Pathways (IMPs), and Shared Socio-economic Pathways (SSPs)', '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.489677697, 'content': 'Stringent emissions reductions at the level required for 2degC or 1.5degC are achieved through the increased electrification of buildings, transport, and industry, consequently all pathways entail increased electricity generation (high confidence). Nearly all electricity in pathways limiting warming to 2degC (>67%) or 1.5degC (>50%) is also from low- or no-carbon technologies, with different shares across pathways of: nuclear, biomass, non-biomass renewables, and fossil fuels in combination with CCS. {3.4} Measures required to limit warming to 2degC (>67%) or below can result in large-scale transformation of the land surface (high confidence). These pathways are projected to reach net zero CO2 emissions in the AFOLU sector between the 2020s and 2070.'}, page_content='Stringent emissions reductions at the level required for 2degC or 1.5degC are achieved through the increased electrification of buildings, transport, and industry, consequently all pathways entail increased electricity generation (high confidence). Nearly all electricity in pathways limiting warming to 2degC (>67%) or 1.5degC (>50%) is also from low- or no-carbon technologies, with different shares across pathways of: nuclear, biomass, non-biomass renewables, and fossil fuels in combination with CCS. {3.4} Measures required to limit warming to 2degC (>67%) or below can result in large-scale transformation of the land surface (high confidence). These pathways are projected to reach net zero CO2 emissions in the AFOLU sector between the 2020s and 2070.'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document8', 'document_number': 8.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 102.0, 'name': 'Technical Summary. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 780.0, 'num_tokens': 182.0, 'num_tokens_approx': 192.0, 'num_words': 144.0, 'page_number': 38, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'Net zero CO2 and net zero GHG emissions are possible through different modelled mitigation pathways. ', 'short_name': 'IPCC AR6 WGIII TS', '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/wg3/downloads/report/IPCC_AR6_WGIII_TechnicalSummary.pdf', 'similarity_score': 0.489677697, 'content': 'Stringent emissions reductions at the level required for 2degC or 1.5degC are achieved through the increased electrification of buildings, transport, and industry, consequently all pathways entail increased electricity generation (high confidence). Nearly all electricity in pathways limiting warming to 2degC (>67%) or 1.5degC (>50%) is also from low- or no-carbon technologies, with different shares across pathways of: nuclear, biomass, non-biomass renewables, and fossil fuels in combination with CCS. {3.4} Measures required to limit warming to 2degC (>67%) or below can result in large-scale transformation of the land surface (high confidence). These pathways are projected to reach net zero CO2 emissions in the AFOLU sector between the 2020s and 2070.'}, page_content='Stringent emissions reductions at the level required for 2degC or 1.5degC are achieved through the increased electrification of buildings, transport, and industry, consequently all pathways entail increased electricity generation (high confidence). Nearly all electricity in pathways limiting warming to 2degC (>67%) or 1.5degC (>50%) is also from low- or no-carbon technologies, with different shares across pathways of: nuclear, biomass, non-biomass renewables, and fossil fuels in combination with CCS. {3.4} Measures required to limit warming to 2degC (>67%) or below can result in large-scale transformation of the land surface (high confidence). These pathways are projected to reach net zero CO2 emissions in the AFOLU sector between the 2020s and 2070.'),\n", - " Document(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': 1015.0, 'num_tokens': 213.0, 'num_tokens_approx': 226.0, 'num_words': 170.0, 'page_number': 1025, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '9.9.4 Financing Mechanisms and Business Models \\r\\nfor Reducing Energy Demand', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '9.9 Sectoral Barriers and Policies', 'toc_level1': '9.9.4 Financing Mechanisms and Business Models for\\xa0Reducing Energy Demand', '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.489442825, 'content': \"Carbon finance, started under the Kyoto Protocol with the flexible mechanisms and further enhanced under the Paris Agreement (Michaelowa et al. 2019), is an activity based on 'carbon emission rights' and its derivatives (Liu et al. 2015a). Carbon finance can promote low\\x02cost emission reductions (Zhou and Li 2019). Under Emission Trading Schemes or other carbon pricing mechanisms, auctioning carbon allowances creates a new revenue stream. Revenues from auctioning could be used to finance energy efficiency projects in buildings with grants, zero interest loans or guarantees (Wiese et al. 2020).\\nCrowdfunding is a new and rapidly growing form of financial intermediation that channels funds from investors to borrowers (individuals or companies) or users of equity capital (companies) without involving traditional financial organisations such as banks (Miller and Carriveau 2018). Typically, it involves internet-based platforms that link savers directly with borrowers (European Union\"}, page_content=\"Carbon finance, started under the Kyoto Protocol with the flexible mechanisms and further enhanced under the Paris Agreement (Michaelowa et al. 2019), is an activity based on 'carbon emission rights' and its derivatives (Liu et al. 2015a). Carbon finance can promote low\\x02cost emission reductions (Zhou and Li 2019). Under Emission Trading Schemes or other carbon pricing mechanisms, auctioning carbon allowances creates a new revenue stream. Revenues from auctioning could be used to finance energy efficiency projects in buildings with grants, zero interest loans or guarantees (Wiese et al. 2020).\\nCrowdfunding is a new and rapidly growing form of financial intermediation that channels funds from investors to borrowers (individuals or companies) or users of equity capital (companies) without involving traditional financial organisations such as banks (Miller and Carriveau 2018). Typically, it involves internet-based platforms that link savers directly with borrowers (European Union\"),\n", - " Document(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': 605.0, 'num_tokens': 194.0, 'num_tokens_approx': 165.0, 'num_words': 124.0, 'page_number': 2003, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Indexindex\\n\\x0c', '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.489302039, 'content': 'cobalt 1744 collective action 506, 555, 556-557, 1765 Colombia 434, 437, 567, 815, 1376 combined global temperature change potential (CGTP) 227 committed emissions 355, 697, 919, 923, 1208-1209, 1743 communication see information and communication technology community forest management (CFM) 817-818, 817 community-wide infrastructure supply chain footprinting (CIF) 872 complex system theories 182 compressed air energy storage (CAES) 655 Computable General Equilibrium (CGE) models 1845, 1855-1856 concentrating solar power (CSP) 12, 258, 627, 630-632, 631, 633, 634, 1302-1303'}, page_content='cobalt 1744 collective action 506, 555, 556-557, 1765 Colombia 434, 437, 567, 815, 1376 combined global temperature change potential (CGTP) 227 committed emissions 355, 697, 919, 923, 1208-1209, 1743 communication see information and communication technology community forest management (CFM) 817-818, 817 community-wide infrastructure supply chain footprinting (CIF) 872 complex system theories 182 compressed air energy storage (CAES) 655 Computable General Equilibrium (CGE) models 1845, 1855-1856 concentrating solar power (CSP) 12, 258, 627, 630-632, 631, 633, 634, 1302-1303'),\n", - " Document(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': 508.0, 'num_tokens': 111.0, 'num_tokens_approx': 120.0, 'num_words': 90.0, 'page_number': 987, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Cooling energy demand ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '9.3 New Developments in Emission Trends\\xa0and Drivers', 'toc_level1': 'Box\\xa09.3 | Emerging Energy Demand Trends in Residential Buildings', '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.488707185, 'content': 'emissions (Campbell 2018; Shah et al. 2015, 2019; UNEP and IEA 2020). The installation of highly efficient technological solutions with low global warming potential (GWP), as part of the implementation of the Kigali amendment to the Montreal Protocol, is the second step towards reducing GHG emissions from cooling. Developing renewable energy solutions integrated to buildings is another track to follow to reduce GHG emissions from cooling. \\n Cooling energy demand '}, page_content='emissions (Campbell 2018; Shah et al. 2015, 2019; UNEP and IEA 2020). The installation of highly efficient technological solutions with low global warming potential (GWP), as part of the implementation of the Kigali amendment to the Montreal Protocol, is the second step towards reducing GHG emissions from cooling. Developing renewable energy solutions integrated to buildings is another track to follow to reduce GHG emissions from cooling. \\n Cooling energy demand '),\n", - " Document(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': 1029.0, 'num_tokens': 228.0, 'num_tokens_approx': 258.0, 'num_words': 194.0, 'page_number': 192, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '1.6.3 Climate Mitigation, Equity and the Sustainable \\r\\nDevelopment Goals (SDGs)', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '1.6 Achieving Mitigation in the Context of\\xa0Sustainable Development', 'toc_level1': '1.6.3 Climate Mitigation, Equity and the Sustainable Development Goals (SDGs)', '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.488219678, 'content': \"Figure 1.6 | Sustainable development pathways towards fulfilling the Sustainable Development Goals (SDGs). The graph shows global average per-capita GHG emissions (vertical axis) and relative 'Historic Index of Human Development' (HIHD) levels (horizontal) have increased globally since the industrial revolution (grey line). The bubbles on the graph show regional per-capita GHG emissions and human development levels in the year 2015, illustrating large disparities. Pathways towards fulfilling the Paris Agreement (and SDG 13) involve global average per-capita GHG emissions below about 5 tCO2-eq by 2030. Likewise, to fulfil SDGs 3, 4 and 8, HIHD levels (see footnote 7) need to be at least 0.5 or greater. This suggests a 'sustainable development zone' for year 2030 (in pale brown); the in-figure text also suggests a 'sustainable development corridor', where countries limit per-capita GHG emissions while improving levels of human development over time. The emphasis of pathways into the sustainable development\"}, page_content=\"Figure 1.6 | Sustainable development pathways towards fulfilling the Sustainable Development Goals (SDGs). The graph shows global average per-capita GHG emissions (vertical axis) and relative 'Historic Index of Human Development' (HIHD) levels (horizontal) have increased globally since the industrial revolution (grey line). The bubbles on the graph show regional per-capita GHG emissions and human development levels in the year 2015, illustrating large disparities. Pathways towards fulfilling the Paris Agreement (and SDG 13) involve global average per-capita GHG emissions below about 5 tCO2-eq by 2030. Likewise, to fulfil SDGs 3, 4 and 8, HIHD levels (see footnote 7) need to be at least 0.5 or greater. This suggests a 'sustainable development zone' for year 2030 (in pale brown); the in-figure text also suggests a 'sustainable development corridor', where countries limit per-capita GHG emissions while improving levels of human development over time. The emphasis of pathways into the sustainable development\"),\n", - " Document(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': 429.0, 'num_tokens': 128.0, 'num_tokens_approx': 109.0, 'num_words': 82.0, 'page_number': 1908, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Brown, T., J. Horsch, and D. Schlachtberger, 2018: PyPSA: Python for Power \\r\\nSystem Analysis. J. Open Res. Softw., 6, doi:10.5334/jors.188.', '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.488059491, 'content': 'Duerinck, J. et al., 2008: Assessment and improvement of methodologies used for Greenhouse Gas projections. Vlaamse Instelling voor Technologisch Onderzoek Mol, Belgium, Oko-Institut e.V., Berlin, Germany, and Institute for European Environmental Policy, Brussels, Belgium, https://ec.europa. eu/clima/document/download/1cf69fe3-f5c6-40a0-b5f1-efb9e2b2d8df_ en?filename=assessing_methodologies_for_ghg_projections_en.pdf.'}, page_content='Duerinck, J. et al., 2008: Assessment and improvement of methodologies used for Greenhouse Gas projections. Vlaamse Instelling voor Technologisch Onderzoek Mol, Belgium, Oko-Institut e.V., Berlin, Germany, and Institute for European Environmental Policy, Brussels, Belgium, https://ec.europa. eu/clima/document/download/1cf69fe3-f5c6-40a0-b5f1-efb9e2b2d8df_ en?filename=assessing_methodologies_for_ghg_projections_en.pdf.'),\n", - " Document(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': 791.0, 'num_tokens': 204.0, 'num_tokens_approx': 201.0, 'num_words': 151.0, 'page_number': 281, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Emissions Trends and Drivers ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '2.7 Emissions Associated With Existing and\\xa0Planned Long-lived Infrastructure', 'toc_level1': '2.7.3 Synthesis\\xa0– Comparison with Estimates of\\xa0Residual Fossil Fuel CO2 Emissions', '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.487939537, 'content': \"Few quantifications of carbon lock-in from urban infrastructure, in particular urban form, have been attempted, in part because they also relate to behaviours that are closely tied to routines and norms that co-evolve with 'hard infrastructures' and technologies, as well as 'soft infrastructure' such as social networks and markets (Seto et al. 2016). There are some notable exceptions providing early attempts (Guivarch and Hallegatte 2011; Driscoll 2014; Seto et al.2014; Lucon et al. 2014; Erickson and Tempest 2015; Creutzig et al. 2016). Creutzig et al. (2016) attempt a synthesis of this literature and estimate the total cumulative future CO2 emissions from existing urban infrastructure at 210 Gt, and from new infrastructures at 495 Gt for the period 2010-2030.\"}, page_content=\"Few quantifications of carbon lock-in from urban infrastructure, in particular urban form, have been attempted, in part because they also relate to behaviours that are closely tied to routines and norms that co-evolve with 'hard infrastructures' and technologies, as well as 'soft infrastructure' such as social networks and markets (Seto et al. 2016). There are some notable exceptions providing early attempts (Guivarch and Hallegatte 2011; Driscoll 2014; Seto et al.2014; Lucon et al. 2014; Erickson and Tempest 2015; Creutzig et al. 2016). Creutzig et al. (2016) attempt a synthesis of this literature and estimate the total cumulative future CO2 emissions from existing urban infrastructure at 210 Gt, and from new infrastructures at 495 Gt for the period 2010-2030.\"),\n", - " Document(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': 1140.0, 'num_tokens': 220.0, 'num_tokens_approx': 268.0, 'num_words': 201.0, 'page_number': 2261, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Gross primary production (GPP)', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Annex VII: Glossary', '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.487916321, 'content': 'Gross primary production (GPP)\\nThe total amount of carbon fixed by photosynthesis over a specified time period.\\n Gross primary production (GPP) \\n\\nNet primary production (NPP)\\nNet primary production (NPP) The amount of carbon fixed by photosynthesis minus the amount lost by respiration over a specified time period.\\n Net primary production (NPP) \\n\\nProbability density function (PDF) A probability density function is a function that indicates the relative chances of occurrence of different outcomes of a variable. The function integrates to unity over the domain for which it is defined and has the property that the integral over a sub-domain equals the probability that the outcome of the variable lies within that sub-domain. For example, the probability that a temperature anomaly defined in a particular way is greater than zero is obtained from its PDF by integrating the PDF over all possible temperature anomalies greater than zero. Probability density functions that describe two or more variables simultaneously are similarly defined.'}, page_content='Gross primary production (GPP)\\nThe total amount of carbon fixed by photosynthesis over a specified time period.\\n Gross primary production (GPP) \\n\\nNet primary production (NPP)\\nNet primary production (NPP) The amount of carbon fixed by photosynthesis minus the amount lost by respiration over a specified time period.\\n Net primary production (NPP) \\n\\nProbability density function (PDF) A probability density function is a function that indicates the relative chances of occurrence of different outcomes of a variable. The function integrates to unity over the domain for which it is defined and has the property that the integral over a sub-domain equals the probability that the outcome of the variable lies within that sub-domain. For example, the probability that a temperature anomaly defined in a particular way is greater than zero is obtained from its PDF by integrating the PDF over all possible temperature anomalies greater than zero. Probability density functions that describe two or more variables simultaneously are similarly defined.'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document8', 'document_number': 8.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 102.0, 'name': 'Technical Summary. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 1004.0, 'num_tokens': 243.0, 'num_tokens_approx': 261.0, 'num_words': 196.0, 'page_number': 17, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'Technical Summary', 'short_name': 'IPCC AR6 WGIII TS', '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/wg3/downloads/report/IPCC_AR6_WGIII_TechnicalSummary.pdf', 'similarity_score': 0.487734348, 'content': 'Figure TS.4 (continued): Emissions have grown in most regions, although some countries have achieved sustained emission reductions in line with 2degC scenarios. Change in regional GHG emissions and rates of change compatible with warming targets. Panel (a): Regional GHG emission trends (in GtCO2-eq yr -1 (GWP100; AR6) for the time period 1990-2019. Panel (b): Historical GHG emissions change by region (2010-2019). Circles depict countries, scaled by total emissions in 2019, short horizontal lines depict the average change by region. Also shown are global rates of reduction over the period 2020-2040 in scenarios assessed in AR6 that limit global warming to 1.5degC and 2degC with different probabilities. The 5-95th percentile range of emissions changes for scenarios below 1.5degC with no or limited overshoot (scenario category C1) and scenarios below 2degC (>67%) with immediate action (scenario category C3a) are shown as a shaded area with a horizontal line at the mean value. Panel b'}, page_content='Figure TS.4 (continued): Emissions have grown in most regions, although some countries have achieved sustained emission reductions in line with 2degC scenarios. Change in regional GHG emissions and rates of change compatible with warming targets. Panel (a): Regional GHG emission trends (in GtCO2-eq yr -1 (GWP100; AR6) for the time period 1990-2019. Panel (b): Historical GHG emissions change by region (2010-2019). Circles depict countries, scaled by total emissions in 2019, short horizontal lines depict the average change by region. Also shown are global rates of reduction over the period 2020-2040 in scenarios assessed in AR6 that limit global warming to 1.5degC and 2degC with different probabilities. The 5-95th percentile range of emissions changes for scenarios below 1.5degC with no or limited overshoot (scenario category C1) and scenarios below 2degC (>67%) with immediate action (scenario category C3a) are shown as a shaded area with a horizontal line at the mean value. Panel b'),\n", - " Document(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': 1004.0, 'num_tokens': 243.0, 'num_tokens_approx': 261.0, 'num_words': 196.0, 'page_number': 76, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Technical Summary', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'TS.3 Emission Trends and Drivers', 'toc_level1': 'Box TS.2 | Greenhouse Gas (GHG) Emission Metrics Provide Simplified Information About\\xa0the\\xa0Effects of Different Greenhouse Gases', '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.487734348, 'content': 'Figure TS.4 (continued): Emissions have grown in most regions, although some countries have achieved sustained emission reductions in line with 2degC scenarios. Change in regional GHG emissions and rates of change compatible with warming targets. Panel (a): Regional GHG emission trends (in GtCO2-eq yr -1 (GWP100; AR6) for the time period 1990-2019. Panel (b): Historical GHG emissions change by region (2010-2019). Circles depict countries, scaled by total emissions in 2019, short horizontal lines depict the average change by region. Also shown are global rates of reduction over the period 2020-2040 in scenarios assessed in AR6 that limit global warming to 1.5degC and 2degC with different probabilities. The 5-95th percentile range of emissions changes for scenarios below 1.5degC with no or limited overshoot (scenario category C1) and scenarios below 2degC (>67%) with immediate action (scenario category C3a) are shown as a shaded area with a horizontal line at the mean value. Panel b'}, page_content='Figure TS.4 (continued): Emissions have grown in most regions, although some countries have achieved sustained emission reductions in line with 2degC scenarios. Change in regional GHG emissions and rates of change compatible with warming targets. Panel (a): Regional GHG emission trends (in GtCO2-eq yr -1 (GWP100; AR6) for the time period 1990-2019. Panel (b): Historical GHG emissions change by region (2010-2019). Circles depict countries, scaled by total emissions in 2019, short horizontal lines depict the average change by region. Also shown are global rates of reduction over the period 2020-2040 in scenarios assessed in AR6 that limit global warming to 1.5degC and 2degC with different probabilities. The 5-95th percentile range of emissions changes for scenarios below 1.5degC with no or limited overshoot (scenario category C1) and scenarios below 2degC (>67%) with immediate action (scenario category C3a) are shown as a shaded area with a horizontal line at the mean value. Panel b'),\n", - " Document(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': 907.0, 'num_tokens': 232.0, 'num_tokens_approx': 234.0, 'num_words': 176.0, 'page_number': 1809, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Blue infrastructure See Infrastructure.', '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.487722784, 'content': 'Carbon cycle The flow of carbon (in various forms, e.g., as carbon dioxide (CO2 ), carbon in biomass, and carbon dissolved in the ocean as carbonate and bicarbonate) through the atmosphere, hydrosphere, terrestrial and marine biosphere and lithosphere. In this report, the reference unit for the global carbon cycle is GtCO2 or GtC (one Gigatonne = 1 Gt = 1015 grams; 1GtC corresponds to 3.664 GtCO2).\\nCarbon dioxide capture and utilisation (CCU) A process in which carbon dioxide (CO2 ) is captured and the carbon then used in a product. The climate effect of CCU depends on the product lifetime, the product it displaces, and the CO2 source (fossil, biomass or atmosphere). CCU is sometimes referred to as Carbon Dioxide Capture and Use, or Carbon Capture and Utilisation. See also Anthropogenic removals, Carbon dioxide capture and storage (CCS), and Carbon dioxide removal (CDR).'}, page_content='Carbon cycle The flow of carbon (in various forms, e.g., as carbon dioxide (CO2 ), carbon in biomass, and carbon dissolved in the ocean as carbonate and bicarbonate) through the atmosphere, hydrosphere, terrestrial and marine biosphere and lithosphere. In this report, the reference unit for the global carbon cycle is GtCO2 or GtC (one Gigatonne = 1 Gt = 1015 grams; 1GtC corresponds to 3.664 GtCO2).\\nCarbon dioxide capture and utilisation (CCU) A process in which carbon dioxide (CO2 ) is captured and the carbon then used in a product. The climate effect of CCU depends on the product lifetime, the product it displaces, and the CO2 source (fossil, biomass or atmosphere). CCU is sometimes referred to as Carbon Dioxide Capture and Use, or Carbon Capture and Utilisation. See also Anthropogenic removals, Carbon dioxide capture and storage (CCS), and Carbon dioxide removal (CDR).'),\n", - " Document(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': 925.0, 'num_tokens': 232.0, 'num_tokens_approx': 257.0, 'num_words': 193.0, 'page_number': 97, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Box TS.5 | The Carbon Cycle', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Technical Summary', 'toc_level1': 'TS.2 Large-scale Climate Change: Mean Climate, Variability and Extremes', 'toc_level2': 'Box TS.5 | The Carbon Cycle', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.487294823, 'content': 'Based on multiple lines of evidence using interhemispheric gradients of CO2 concentrations, isotopes, and inventory data, it is unequivocal that the growth in CO2 in the atmosphere since 1750 (see Section TS.2.2) is due to the direct emissions from human activities. The combustion of fossil fuels and land-use change for the period 1750-2019 resulted in the release of 700 +- 75 PgC (likely range, 1 PgC = 1015 g of carbon) to the atmosphere, of which about 41% +- 11% remains in the atmosphere today (high confidence). Of the total anthropogenic CO2 emissions, the combustion of fossil fuels was responsible for about 64% +- 15%, growing to an 86% +- 14% contribution over the past 10 years. The remainder resulted from land-use change. During the last decade (2010-2019), average annual anthropogenic CO2 emissions reached the highest levels in human history at 10.9 +- 0.9 PgC yr -1 (high confidence). Of these'}, page_content='Based on multiple lines of evidence using interhemispheric gradients of CO2 concentrations, isotopes, and inventory data, it is unequivocal that the growth in CO2 in the atmosphere since 1750 (see Section TS.2.2) is due to the direct emissions from human activities. The combustion of fossil fuels and land-use change for the period 1750-2019 resulted in the release of 700 +- 75 PgC (likely range, 1 PgC = 1015 g of carbon) to the atmosphere, of which about 41% +- 11% remains in the atmosphere today (high confidence). Of the total anthropogenic CO2 emissions, the combustion of fossil fuels was responsible for about 64% +- 15%, growing to an 86% +- 14% contribution over the past 10 years. The remainder resulted from land-use change. During the last decade (2010-2019), average annual anthropogenic CO2 emissions reached the highest levels in human history at 10.9 +- 0.9 PgC yr -1 (high confidence). Of these'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document3', 'document_number': 3.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 112.0, 'name': 'Technical Summary. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC', 'num_characters': 925.0, 'num_tokens': 232.0, 'num_tokens_approx': 257.0, 'num_words': 193.0, 'page_number': 48, 'release_date': 2021.0, 'report_type': 'TS', 'section_header': 'Box TS.5 | The Carbon Cycle', 'short_name': 'IPCC AR6 WGI TS', 'source': 'IPCC', 'toc_level0': 'TS.2 Large-scale Climate Change: Mean Climate, Variability and Extremes', 'toc_level1': 'Box TS.5 | The Carbon Cycle', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg1/downloads/report/IPCC_AR6_WGI_TS.pdf', 'similarity_score': 0.487294823, 'content': 'Based on multiple lines of evidence using interhemispheric gradients of CO2 concentrations, isotopes, and inventory data, it is unequivocal that the growth in CO2 in the atmosphere since 1750 (see Section TS.2.2) is due to the direct emissions from human activities. The combustion of fossil fuels and land-use change for the period 1750-2019 resulted in the release of 700 +- 75 PgC (likely range, 1 PgC = 1015 g of carbon) to the atmosphere, of which about 41% +- 11% remains in the atmosphere today (high confidence). Of the total anthropogenic CO2 emissions, the combustion of fossil fuels was responsible for about 64% +- 15%, growing to an 86% +- 14% contribution over the past 10 years. The remainder resulted from land-use change. During the last decade (2010-2019), average annual anthropogenic CO2 emissions reached the highest levels in human history at 10.9 +- 0.9 PgC yr -1 (high confidence). Of these'}, page_content='Based on multiple lines of evidence using interhemispheric gradients of CO2 concentrations, isotopes, and inventory data, it is unequivocal that the growth in CO2 in the atmosphere since 1750 (see Section TS.2.2) is due to the direct emissions from human activities. The combustion of fossil fuels and land-use change for the period 1750-2019 resulted in the release of 700 +- 75 PgC (likely range, 1 PgC = 1015 g of carbon) to the atmosphere, of which about 41% +- 11% remains in the atmosphere today (high confidence). Of the total anthropogenic CO2 emissions, the combustion of fossil fuels was responsible for about 64% +- 15%, growing to an 86% +- 14% contribution over the past 10 years. The remainder resulted from land-use change. During the last decade (2010-2019), average annual anthropogenic CO2 emissions reached the highest levels in human history at 10.9 +- 0.9 PgC yr -1 (high confidence). Of these'),\n", - " Document(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': 536.0, 'num_tokens': 149.0, 'num_tokens_approx': 161.0, 'num_words': 121.0, 'page_number': 37, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Box SPM.1 | Assessment of Modelled Global Emission Scenarios', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '_Hlk99447836', '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.48681885, 'content': 'to 1.5degC (>50%) after a high overshoot (C1 and C2 categories respectively). Modelled pathways that return warming to 1.5degC (>50%) after a high overshoot (C2 category) show near-term GHG emissions reductions similar to pathways that limit warming to 2degC (>67%) (C3 category). For a given peak global warming level, greater and more rapid near-term GHG emissions reductions are associated with later net zero CO2 dates. (high confidence) (Table SPM.2) {3.3, Table 3.5, Cross-Chapter Box 3 in Chapter 3, Annex I: Glossary}'}, page_content='to 1.5degC (>50%) after a high overshoot (C1 and C2 categories respectively). Modelled pathways that return warming to 1.5degC (>50%) after a high overshoot (C2 category) show near-term GHG emissions reductions similar to pathways that limit warming to 2degC (>67%) (C3 category). For a given peak global warming level, greater and more rapid near-term GHG emissions reductions are associated with later net zero CO2 dates. (high confidence) (Table SPM.2) {3.3, Table 3.5, Cross-Chapter Box 3 in Chapter 3, Annex I: Glossary}'),\n", - " Document(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': 1066.0, 'num_tokens': 230.0, 'num_tokens_approx': 252.0, 'num_words': 189.0, 'page_number': 1670, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '16.2.3.4 Market Failures in Directing Technological Change', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '16.2 Elements, Drivers and Modelling of\\xa0Technology Innovation', 'toc_level1': '16.2.4 Representation of the Innovation Process in\\xa0Modelled Decarbonisation Pathways', '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.486370325, 'content': '16.2.4 Representation of the Innovation Process in Modelled Decarbonisation Pathways\\n 16.2.4 Representation of the Innovation Process in Modelled Decarbonisation Pathways \\n\\n16.2.4 Representation of the Innovation Process in Modelled Decarbonisation Pathways\\nA variety of models are used to generate climate mitigation pathways, compatible with 2degC and well below 2degC targets. These include integrated assessment models (IAMs), energy system models, computable general equilibrium models, and agent based models. They range from global (Chapter 3) to national models and include both top-down and bottom-up approaches (Chapter 4). Innovation in energy technologies, which comprises the development and diffusion of low-, zero- and negative-carbon energy options, but also investments to increase energy efficiency, is a key driver of emissions reductions in model-based scenarios.\\n 16.2.4 Representation of the Innovation Process in Modelled Decarbonisation Pathways '}, page_content='16.2.4 Representation of the Innovation Process in Modelled Decarbonisation Pathways\\n 16.2.4 Representation of the Innovation Process in Modelled Decarbonisation Pathways \\n\\n16.2.4 Representation of the Innovation Process in Modelled Decarbonisation Pathways\\nA variety of models are used to generate climate mitigation pathways, compatible with 2degC and well below 2degC targets. These include integrated assessment models (IAMs), energy system models, computable general equilibrium models, and agent based models. They range from global (Chapter 3) to national models and include both top-down and bottom-up approaches (Chapter 4). Innovation in energy technologies, which comprises the development and diffusion of low-, zero- and negative-carbon energy options, but also investments to increase energy efficiency, is a key driver of emissions reductions in model-based scenarios.\\n 16.2.4 Representation of the Innovation Process in Modelled Decarbonisation Pathways '),\n", - " Document(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': 652.0, 'num_tokens': 213.0, 'num_tokens_approx': 228.0, 'num_words': 171.0, 'page_number': 799, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'References', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '5: Global Carbon and Other Biogeochemical Cycles and Feedbacks', 'toc_level1': 'References', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.486263841, 'content': 'doi:10.1038/s41467-020-16530-z. Cain, M. et al., 2019: Improved calculation of warming-equivalent emissions for short-lived climate pollutants. npj Climate and Atmospheric Science, 2, 29, doi:10.1038/s41612-019-0086-4. Caldeira, K. and M.E. Wickett, 2003: Anthropogenic carbon and ocean pH. Nature, 425(6956), 365-365, doi:10.1038/425365a. Campbell, J.E. et al., 2017: Large historical growth in global terrestrial gross primary production. Nature, 544(7648), 84-87, doi:10.1038/nature22030. Campbell, J.L., J. Sessions, D. Smith, and K. Trippe, 2018: Potential carbon storage in biochar made from logging residue: Basic principles and'}, page_content='doi:10.1038/s41467-020-16530-z. Cain, M. et al., 2019: Improved calculation of warming-equivalent emissions for short-lived climate pollutants. npj Climate and Atmospheric Science, 2, 29, doi:10.1038/s41612-019-0086-4. Caldeira, K. and M.E. Wickett, 2003: Anthropogenic carbon and ocean pH. Nature, 425(6956), 365-365, doi:10.1038/425365a. Campbell, J.E. et al., 2017: Large historical growth in global terrestrial gross primary production. Nature, 544(7648), 84-87, doi:10.1038/nature22030. Campbell, J.L., J. Sessions, D. Smith, and K. Trippe, 2018: Potential carbon storage in biochar made from logging residue: Basic principles and'),\n", - " Document(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': 670.0, 'num_tokens': 223.0, 'num_tokens_approx': 237.0, 'num_words': 178.0, 'page_number': 1792, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Accelerating the Transition in the Context of Sustainable Development ', '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.486255705, 'content': 'transactions and social ties. A case study in Northeast France. Int. J. Sustain. Dev. World Ecol., 26(1), 1-10, doi:10.1080/13504509.2018.1471012. Hanasaki, N. et al., 2013: A global water scarcity assessment under Shared Socio-economic Pathways - Part 2: Water availability and scarcity. Hydrol. Earth Syst. Sci., 17(7), 2393-2413, doi:10.5194/hess-17-2393-2013. Hansen, T. and L. Coenen, 2015: The geography of sustainability transitions: Review, synthesis and reflections on an emergent research field. Environ. Innov. Soc. Transitions, 17, 92-109, doi.org/10.1016/j.eist.2014.11.001. Hansen, U.E. and I. Nygaard, 2014: Sustainable energy transitions in'}, page_content='transactions and social ties. A case study in Northeast France. Int. J. Sustain. Dev. World Ecol., 26(1), 1-10, doi:10.1080/13504509.2018.1471012. Hanasaki, N. et al., 2013: A global water scarcity assessment under Shared Socio-economic Pathways - Part 2: Water availability and scarcity. Hydrol. Earth Syst. Sci., 17(7), 2393-2413, doi:10.5194/hess-17-2393-2013. Hansen, T. and L. Coenen, 2015: The geography of sustainability transitions: Review, synthesis and reflections on an emergent research field. Environ. Innov. Soc. Transitions, 17, 92-109, doi.org/10.1016/j.eist.2014.11.001. Hansen, U.E. and I. Nygaard, 2014: Sustainable energy transitions in'),\n", - " Document(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': 632.0, 'num_tokens': 182.0, 'num_tokens_approx': 193.0, 'num_words': 145.0, 'page_number': 29, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Summary for Policymakers', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '_heading=h.30j0zll', '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.486132622, 'content': 'Past GHG emissions for 2010-2015 used to project global warming outcomes of the modelled pathways are shown by a black line32 and past global GHG emissions in 2015 and 2019 as assessed in Chapter 2 are shown by whiskers. Panels b, c and d show snapshots of the GHG emission ranges of the modelled pathways in 2030, 2050, and 2100, respectively. Panel b also shows projected emissions outcomes from near-term policy assessments in 2030 from Chapter 4.2 (Tables 4.2 and 4.3; median and full range). GHG emissions are in CO2-equivalent using GWP100 from AR6 WGI. {3.5, 4.2, Table 4.2, Table 4.3, Cross-Chapter Box 4 in Chapter 4}'}, page_content='Past GHG emissions for 2010-2015 used to project global warming outcomes of the modelled pathways are shown by a black line32 and past global GHG emissions in 2015 and 2019 as assessed in Chapter 2 are shown by whiskers. Panels b, c and d show snapshots of the GHG emission ranges of the modelled pathways in 2030, 2050, and 2100, respectively. Panel b also shows projected emissions outcomes from near-term policy assessments in 2030 from Chapter 4.2 (Tables 4.2 and 4.3; median and full range). GHG emissions are in CO2-equivalent using GWP100 from AR6 WGI. {3.5, 4.2, Table 4.2, Table 4.3, Cross-Chapter Box 4 in Chapter 4}'),\n", - " Document(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': 979.0, 'num_tokens': 199.0, 'num_tokens_approx': 228.0, 'num_words': 171.0, 'page_number': 281, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '2.7.3 Synthesis - Comparison with Estimates \\r\\nof Residual Fossil Fuel CO2 Emissions', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '2.7 Emissions Associated With Existing and\\xa0Planned Long-lived Infrastructure', 'toc_level1': '2.7.3 Synthesis\\xa0– Comparison with Estimates of\\xa0Residual Fossil Fuel CO2 Emissions', '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.485770822, 'content': \"Table 2.7 | Residual (gross) fossil fuel emissions (GtCO2) in climate change mitigation scenarios strengthening mitigation action after 2020 ('early strengthening'), compared to scenarios that keep Nationally Determined Contribution (NDC) ambition level until 2030 and only strengthen thereafter. Cumulative gross CO2 emissions from fossil fuel and industry until reaching net zero CO2 emissions are given in terms of the mean as well as minimum and maximum (in parentheses) across seven participating models: AIM/CGE, GCAM, IMAGE, MESSAGES, POLES, REMIND, WITCH. Scenario design prescribes a harmonised, global carbon price in line with long-term carbon budget. Delay scenarios follow the same price trajectory, but 10 years later. Carbon dioxide removal requirements represent ex-post calculations that subtract gross fossil fuel emissions from the carbon budget associated with the respective long-term warming limit. We take the carbon budget for limiting warming to\"}, page_content=\"Table 2.7 | Residual (gross) fossil fuel emissions (GtCO2) in climate change mitigation scenarios strengthening mitigation action after 2020 ('early strengthening'), compared to scenarios that keep Nationally Determined Contribution (NDC) ambition level until 2030 and only strengthen thereafter. Cumulative gross CO2 emissions from fossil fuel and industry until reaching net zero CO2 emissions are given in terms of the mean as well as minimum and maximum (in parentheses) across seven participating models: AIM/CGE, GCAM, IMAGE, MESSAGES, POLES, REMIND, WITCH. Scenario design prescribes a harmonised, global carbon price in line with long-term carbon budget. Delay scenarios follow the same price trajectory, but 10 years later. Carbon dioxide removal requirements represent ex-post calculations that subtract gross fossil fuel emissions from the carbon budget associated with the respective long-term warming limit. We take the carbon budget for limiting warming to\"),\n", - " Document(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': 373.0, 'num_tokens': 83.0, 'num_tokens_approx': 86.0, 'num_words': 65.0, 'page_number': 1000, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '9.5.3.4 Low-carbon Materials', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '9.5 Non-technological and Behavioural Mitigation Options and Strategies', 'toc_level1': '9.5.3 Adoption of Climate Mitigation Solutions\\xa0– Reasons and Willingness', '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.485635072, 'content': 'Studies on low-carbon materials tend to focus on wood-based building systems and prefabricated housing construction, mostly in high-income countries, as many sustainable managed forestries and factories for prefabricated housing concentrated in such regions (Mata et al. 2021a). This uneven promotion of wood can lead to its overconsumption (Pomponi et al. 2020).'}, page_content='Studies on low-carbon materials tend to focus on wood-based building systems and prefabricated housing construction, mostly in high-income countries, as many sustainable managed forestries and factories for prefabricated housing concentrated in such regions (Mata et al. 2021a). This uneven promotion of wood can lead to its overconsumption (Pomponi et al. 2020).'),\n", - " Document(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': 539.0, 'num_tokens': 209.0, 'num_tokens_approx': 218.0, 'num_words': 164.0, 'page_number': 218, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Introduction and Framing ', '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.485268235, 'content': 'Africa. Sustainability, 10(3), 815, doi:10.3390/su10030815. Majone, G., 1975: On the notion of political feasibility. Eur. J. Polit. Res., 3(3), 259-274, doi:10.1111/j.1475-6765.1975.tb00780.x. Makomere, R. and K. Liti Mbeva, 2018: Squaring the Circle: Development Prospects Within the Paris Agreement. Carbon Clim. Law Rev., 12(1), 31-40, doi:10.21552/cclr/2018/1/7. Malik, A. and J. Lan, 2016: The role of outsourcing in driving global carbon emissions. Econ. Syst. Res., 28(2), 168-182, doi:10.1080/09535 314.2016.1172475.'}, page_content='Africa. Sustainability, 10(3), 815, doi:10.3390/su10030815. Majone, G., 1975: On the notion of political feasibility. Eur. J. Polit. Res., 3(3), 259-274, doi:10.1111/j.1475-6765.1975.tb00780.x. Makomere, R. and K. Liti Mbeva, 2018: Squaring the Circle: Development Prospects Within the Paris Agreement. Carbon Clim. Law Rev., 12(1), 31-40, doi:10.21552/cclr/2018/1/7. Malik, A. and J. Lan, 2016: The role of outsourcing in driving global carbon emissions. Econ. Syst. Res., 28(2), 168-182, doi:10.1080/09535 314.2016.1172475.'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document3', 'document_number': 3.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 112.0, 'name': 'Technical Summary. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC', 'num_characters': 529.0, 'num_tokens': 172.0, 'num_tokens_approx': 168.0, 'num_words': 126.0, 'page_number': 10, 'release_date': 2021.0, 'report_type': 'TS', 'section_header': 'Selected Updates and/or New Results since AR5', 'short_name': 'IPCC AR6 WGI TS', 'source': 'IPCC', 'toc_level0': 'Introduction', 'toc_level1': 'Selected Updates and/or New Results Since AR5, SRCCL and SROCC', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg1/downloads/report/IPCC_AR6_WGI_TS.pdf', 'similarity_score': 0.484463751, 'content': 'likely in the range of 0.8degC to 2.5degC per 1000 GtC (1 Gigatonne of carbon, GtC, = 1 Petagram of carbon, PgC, = 3.664 Gigatonnes of carbon dioxide, GtCO2), and this was also used in SR1.5. The assessment in AR6, based on multiple lines of evidence, leads to a narrower likely range of 1.0degC-2.3degC per 1000 GtC. This has been incorporated in updated estimates of remaining carbon budgets (see Section TS.3.3.1), together with methodological improvements and recent observations. (Sections TS.1.3 and TS.3.3)'}, page_content='likely in the range of 0.8degC to 2.5degC per 1000 GtC (1 Gigatonne of carbon, GtC, = 1 Petagram of carbon, PgC, = 3.664 Gigatonnes of carbon dioxide, GtCO2), and this was also used in SR1.5. The assessment in AR6, based on multiple lines of evidence, leads to a narrower likely range of 1.0degC-2.3degC per 1000 GtC. This has been incorporated in updated estimates of remaining carbon budgets (see Section TS.3.3.1), together with methodological improvements and recent observations. (Sections TS.1.3 and TS.3.3)'),\n", - " Document(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': 529.0, 'num_tokens': 172.0, 'num_tokens_approx': 168.0, 'num_words': 126.0, 'page_number': 59, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Selected Updates and/or New Results since AR5', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Technical Summary', 'toc_level1': 'Introduction', 'toc_level2': 'Selected Updates and/or New Results Since AR5, SRCCL and SROCC', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.484463751, 'content': 'likely in the range of 0.8degC to 2.5degC per 1000 GtC (1 Gigatonne of carbon, GtC, = 1 Petagram of carbon, PgC, = 3.664 Gigatonnes of carbon dioxide, GtCO2), and this was also used in SR1.5. The assessment in AR6, based on multiple lines of evidence, leads to a narrower likely range of 1.0degC-2.3degC per 1000 GtC. This has been incorporated in updated estimates of remaining carbon budgets (see Section TS.3.3.1), together with methodological improvements and recent observations. (Sections TS.1.3 and TS.3.3)'}, page_content='likely in the range of 0.8degC to 2.5degC per 1000 GtC (1 Gigatonne of carbon, GtC, = 1 Petagram of carbon, PgC, = 3.664 Gigatonnes of carbon dioxide, GtCO2), and this was also used in SR1.5. The assessment in AR6, based on multiple lines of evidence, leads to a narrower likely range of 1.0degC-2.3degC per 1000 GtC. This has been incorporated in updated estimates of remaining carbon budgets (see Section TS.3.3.1), together with methodological improvements and recent observations. (Sections TS.1.3 and TS.3.3)'),\n", - " Document(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': 623.0, 'num_tokens': 136.0, 'num_tokens_approx': 145.0, 'num_words': 109.0, 'page_number': 361, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Chapter 3Chapter 3\\n\\x0c', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '3.4 Integrating Sectoral Analysis Into\\xa0Systems Transformations', 'toc_level1': '3.4.7 Other Carbon Dioxide Removal Options', '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.484352142, 'content': 'to lower calculated cumulative emissions until the time of net zero (Grassi et al. 2021) as compared to IAM pathways. The numerical differences are purely due to differences in the conventions applied for reporting the anthropogenic emissions and do not have any implications for the underlying land-use changes or mitigation measures in the pathways. Grassi et al. (Grassi et al. 2021) offer a methodology for adjusting to reconcile these differences and enable a more accurate assessment of the collective progress achieved under the Paris Agreement (Chapter 7 and Cross-Chapter Box 6 in Chapter 7).'}, page_content='to lower calculated cumulative emissions until the time of net zero (Grassi et al. 2021) as compared to IAM pathways. The numerical differences are purely due to differences in the conventions applied for reporting the anthropogenic emissions and do not have any implications for the underlying land-use changes or mitigation measures in the pathways. Grassi et al. (Grassi et al. 2021) offer a methodology for adjusting to reconcile these differences and enable a more accurate assessment of the collective progress achieved under the Paris Agreement (Chapter 7 and Cross-Chapter Box 6 in Chapter 7).'),\n", - " Document(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': 1116.0, 'num_tokens': 241.0, 'num_tokens_approx': 268.0, 'num_words': 201.0, 'page_number': 45, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Figure SPM.10 | Near-linear relationship between cumulative CO2 emissions and the increase in global surface temperature ', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Summary for Policymakers', 'toc_level1': 'D. Limiting Future Climate Change', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.484263152, 'content': \"41 In the literature, units of degC per 1000 PgC (petagrams of carbon) are used, and the AR6 reports the TCRE likely range as 1.0degC to 2.3degC per 1000 PgC in the underlying report, with a best estimate of 1.65degC. 42 The condition in which anthropogenic carbon dioxide (CO2) emissions are balanced by anthropogenic CO2 removals over a specified period (Glossary). 43 The term 'carbon budget' refers to the maximum amount of cumulative net global anthropogenic CO2 emissions that would result in limiting global warming to a given level with a given probability, taking into account the effect of other anthropogenic climate forcers. This is referred to as the total carbon budget when expressed starting from the pre-industrial period, and as the remaining carbon budget when expressed from a recent specified date (Glossary). Historical cumulative CO2 emissions determine to a large degree warming to date, while future emissions cause future additional warming. The remaining carbon budget indicates how much CO2 could still be emitted while keeping warming below a specific temperature level.\\n2828\"}, page_content=\"41 In the literature, units of degC per 1000 PgC (petagrams of carbon) are used, and the AR6 reports the TCRE likely range as 1.0degC to 2.3degC per 1000 PgC in the underlying report, with a best estimate of 1.65degC. 42 The condition in which anthropogenic carbon dioxide (CO2) emissions are balanced by anthropogenic CO2 removals over a specified period (Glossary). 43 The term 'carbon budget' refers to the maximum amount of cumulative net global anthropogenic CO2 emissions that would result in limiting global warming to a given level with a given probability, taking into account the effect of other anthropogenic climate forcers. This is referred to as the total carbon budget when expressed starting from the pre-industrial period, and as the remaining carbon budget when expressed from a recent specified date (Glossary). Historical cumulative CO2 emissions determine to a large degree warming to date, while future emissions cause future additional warming. The remaining carbon budget indicates how much CO2 could still be emitted while keeping warming below a specific temperature level.\\n2828\"),\n", - " Document(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': 923.0, 'num_tokens': 206.0, 'num_tokens_approx': 226.0, 'num_words': 170.0, 'page_number': 24, 'release_date': 2019.0, 'report_type': 'Special Report', 'section_header': 'Southern Ocean ', '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.48402071, 'content': 'Stabilisation (of GHG or CO2-equivalent concentration) A state in which the atmospheric concentration of one greenhouse gas (GHG) (e.g., carbon dioxide, CO2) or of a CO2-equivalent basket of GHGs (or a combination of GHGs and aerosols) remains constant over time. See also Atmosphere.\\nTeleconnection \\nA statistical association between climate variables at widely separated, geographically-fixed spatial locations. Teleconnections are caused by large spatial structures such as basin-wide coupled modes of ocean-atmosphere variability, Rossby wave-trains, mid-latitude jets, and storm tracks.\\n Teleconnection \\n\\nStratification \\nProcess of forming of layers of (ocean) water with different prop\\x02erties such as salinity, density and temperature that act as barrier \\n Stratification \\n\\nSustainable development pathways (SDPs) See Pathways.'}, page_content='Stabilisation (of GHG or CO2-equivalent concentration) A state in which the atmospheric concentration of one greenhouse gas (GHG) (e.g., carbon dioxide, CO2) or of a CO2-equivalent basket of GHGs (or a combination of GHGs and aerosols) remains constant over time. See also Atmosphere.\\nTeleconnection \\nA statistical association between climate variables at widely separated, geographically-fixed spatial locations. Teleconnections are caused by large spatial structures such as basin-wide coupled modes of ocean-atmosphere variability, Rossby wave-trains, mid-latitude jets, and storm tracks.\\n Teleconnection \\n\\nStratification \\nProcess of forming of layers of (ocean) water with different prop\\x02erties such as salinity, density and temperature that act as barrier \\n Stratification \\n\\nSustainable development pathways (SDPs) See Pathways.'),\n", - " Document(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': 503.0, 'num_tokens': 148.0, 'num_tokens_approx': 140.0, 'num_words': 105.0, 'page_number': 252, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Table 1.4 | Overview of different RCP and SSP acronyms as used in this report.', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '1: Framing, Context, and Methods', 'toc_level1': '1.6 Dimensions of Integration: Scenarios, Global Warming Levels and Cumulative Carbon Emissions', 'toc_level2': 'Cross-Chapter Box\\xa01.4 |\\xa0The SSP Scenarios as Used in Working Group I\\xa0(WGI)', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.483880401, 'content': 's-Chapter Box 1.4, Figure 2 | Comparison between the Shared Socio-economic Pathways (SSP) scenarios and the Representative centration Pathway (RCP) scenarios in terms of their CO2, CH4 and N2O atmospheric concentrations (a-c), and their global emissions of CO2 N2O, black carbon (BC), organic carbon (OC), sulphur dioxide (SO2), ammonia (NH3), nitrogen oxides (NOx), volatile organic compounds C), sulphur hexafluoride (SF6), perfluorocarbons (PFCs), and hydrofluorocarbons (HFCs) (d-o). \\n235235'}, page_content='s-Chapter Box 1.4, Figure 2 | Comparison between the Shared Socio-economic Pathways (SSP) scenarios and the Representative centration Pathway (RCP) scenarios in terms of their CO2, CH4 and N2O atmospheric concentrations (a-c), and their global emissions of CO2 N2O, black carbon (BC), organic carbon (OC), sulphur dioxide (SO2), ammonia (NH3), nitrogen oxides (NOx), volatile organic compounds C), sulphur hexafluoride (SF6), perfluorocarbons (PFCs), and hydrofluorocarbons (HFCs) (d-o). \\n235235'),\n", - " Document(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': 846.0, 'num_tokens': 234.0, 'num_tokens_approx': 242.0, 'num_words': 182.0, 'page_number': 242, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Emissions of greenhouse gases have continued to increase since 1990, at varying rates', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '2.2 Past and Present Trends of Territorial GHG Emissions', 'toc_level1': '2.2.2 Trends in the Global GHG Emissions Trajectories and Short-lived Climate Forcers', '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.483780235, 'content': \"Figure 2.5 | Total anthropogenic GHG emissions (GtCO2-eq yr -1) 1990-2019. CO2 from fossil fuel combustion and industrial processes (FFI); net CO2 from land use, land use change and forestry (LULUCF); methane (CH4); nitrous oxide (N2O); fluorinated gases (F-gases: HFCs, PFCs, SF6, NF3). Panel (a): Aggregate GHG emissions trends by groups of gases reported in GtCO2-eq converted based on global warming potentials with a 100-year time horizon (GWP100) from the IPCC Sixth Assessment Report. Panel (b): Waterfall diagrams juxtaposes GHG emissions for the most recent year (2019) in CO2 equivalent units using GWP100 values from the IPCC's Second, Fifth, and Sixth Assessment Reports, respectively. Error bars show the associated uncertainties at a 90% confidence interval. Panel (c): individual trends in CO2-FFI, CO2-LULUCF, CH4, N2O and\"}, page_content=\"Figure 2.5 | Total anthropogenic GHG emissions (GtCO2-eq yr -1) 1990-2019. CO2 from fossil fuel combustion and industrial processes (FFI); net CO2 from land use, land use change and forestry (LULUCF); methane (CH4); nitrous oxide (N2O); fluorinated gases (F-gases: HFCs, PFCs, SF6, NF3). Panel (a): Aggregate GHG emissions trends by groups of gases reported in GtCO2-eq converted based on global warming potentials with a 100-year time horizon (GWP100) from the IPCC Sixth Assessment Report. Panel (b): Waterfall diagrams juxtaposes GHG emissions for the most recent year (2019) in CO2 equivalent units using GWP100 values from the IPCC's Second, Fifth, and Sixth Assessment Reports, respectively. Error bars show the associated uncertainties at a 90% confidence interval. Panel (c): individual trends in CO2-FFI, CO2-LULUCF, CH4, N2O and\"),\n", - " Document(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': 937.0, 'num_tokens': 224.0, 'num_tokens_approx': 222.0, 'num_words': 167.0, 'page_number': 1665, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '16.2.2.3 General-purpose Technologies and Digitalisation', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '16.2 Elements, Drivers and Modelling of\\xa0Technology Innovation', 'toc_level1': 'Cross-Chapter Box\\xa011 |\\xa0Digitalisation: Efficiency Potentials and Governance Considerations', '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.48349303, 'content': '16.2.2.3 General-purpose Technologies and Digitalisation\\nCross-Chapter Box 11 | Digitalisation: Efficiency Potentials and Governance Considerations\\nAuthors: Felix Creutzig (Germany), Elena Verdolini (Italy), Paolo Bertoldi (Italy), Luisa F. Cabeza (Spain), Maria Josefina Figueroa Meza (Venezuela/Denmark), Kirsten Halsnaes (Denmark), Joni Jupesta (Indonesia/Japan), Siir Kilkis (Turkey), Michael Konig (Germany), Eric Masanet (the United States of America), Nikola Milojevic-Dupont (France), Joyashree Roy (India/Thailand), Ayyoob Sharifi (Iran/Japan)\\nDigital technologies impact positively and negatively on GHG emissions through: their own carbon footprint; technology application for mitigation; and induced larger social change. Digital technologies also raise broader sustainability concerns due to their use of rare materials and associated waste, and their potential negative impact on inequalities and labour demand.'}, page_content='16.2.2.3 General-purpose Technologies and Digitalisation\\nCross-Chapter Box 11 | Digitalisation: Efficiency Potentials and Governance Considerations\\nAuthors: Felix Creutzig (Germany), Elena Verdolini (Italy), Paolo Bertoldi (Italy), Luisa F. Cabeza (Spain), Maria Josefina Figueroa Meza (Venezuela/Denmark), Kirsten Halsnaes (Denmark), Joni Jupesta (Indonesia/Japan), Siir Kilkis (Turkey), Michael Konig (Germany), Eric Masanet (the United States of America), Nikola Milojevic-Dupont (France), Joyashree Roy (India/Thailand), Ayyoob Sharifi (Iran/Japan)\\nDigital technologies impact positively and negatively on GHG emissions through: their own carbon footprint; technology application for mitigation; and induced larger social change. Digital technologies also raise broader sustainability concerns due to their use of rare materials and associated waste, and their potential negative impact on inequalities and labour demand.'),\n", - " Document(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': 229.0, 'num_tokens': 89.0, 'num_tokens_approx': 97.0, 'num_words': 73.0, 'page_number': 1649, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'pdf (Accessed November 1, 2021).', '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.48348093, 'content': 'Helsinki, Finland, doi:10.35188/UNU-WIDER/2020/800-9.\\n Streck, C., 2016: Mobilizing Finance for redd+ After Paris. J. Eur. Environ. & Plan. Law, 13(2), 146-166, doi:10.1163/18760104-01302003. '}, page_content='Helsinki, Finland, doi:10.35188/UNU-WIDER/2020/800-9.\\n Streck, C., 2016: Mobilizing Finance for redd+ After Paris. J. Eur. Environ. & Plan. Law, 13(2), 146-166, doi:10.1163/18760104-01302003. '),\n", - " Document(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': 294.0, 'num_tokens': 89.0, 'num_tokens_approx': 90.0, 'num_words': 68.0, 'page_number': 1195, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'monsoon. Climate Dynamics, 56(5-6), 1643-1662, doi:10.1007/s00382-\\r\\n020-05551-5.', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '8: Water Cycle Changes', 'toc_level1': 'References', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.483309716, 'content': 'greenhouse gas emission pathways, in the context of strengthening the global response to the threat of climate change, sustainable development, and efforts to eradicate poverty. [Masson-Delmotte, V., P. Zhai, H.-O. Portner, D. Roberts, J. Skea, P.R. Shukla, A. Pirani, W. Moufouma\\x02'}, page_content='greenhouse gas emission pathways, in the context of strengthening the global response to the threat of climate change, sustainable development, and efforts to eradicate poverty. [Masson-Delmotte, V., P. Zhai, H.-O. Portner, D. Roberts, J. Skea, P.R. Shukla, A. Pirani, W. Moufouma\\x02'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document8', 'document_number': 8.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 102.0, 'name': 'Technical Summary. In: Climate Change 2022: Mitigation of Climate Change. Contribution of the WGIII to the AR6 of the IPCC', 'num_characters': 958.0, 'num_tokens': 210.0, 'num_tokens_approx': 229.0, 'num_words': 172.0, 'page_number': 23, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'Technical Summary\\r\\ne fallen, ', 'short_name': 'IPCC AR6 WGIII TS', '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/wg3/downloads/report/IPCC_AR6_WGIII_TechnicalSummary.pdf', 'similarity_score': 0.483291417, 'content': 'Figure TS.9 | Aggregate greenhouse gas (GHG) emissions of global mitigation pathways (coloured funnels and bars) and projected emission outcomes from current policies and emissions implied by unconditional and conditional elements of NDCs, based on updates available by 11 October 2021 (grey bars). Shaded areas show GHG emission medians and 25-75th percentiles over 2020-2050 for four types of pathways in the AR6 scenario database: (i) pathways with near-term emissions developments in line with current policies and extended with comparable ambition levels beyond 2030; (ii) pathways likely to limit warming to 2degC with near-term emissions developments reflecting 2030 emissions implied by current NDCs followed by accelerated emissions reductions; (iii) pathways likely to limit warming to 2degC based on immediate actions from 2020 onwards; (iv) pathways that limit warming to 1.5degC with no or limited overshoot. Right-hand panels show two'}, page_content='Figure TS.9 | Aggregate greenhouse gas (GHG) emissions of global mitigation pathways (coloured funnels and bars) and projected emission outcomes from current policies and emissions implied by unconditional and conditional elements of NDCs, based on updates available by 11 October 2021 (grey bars). Shaded areas show GHG emission medians and 25-75th percentiles over 2020-2050 for four types of pathways in the AR6 scenario database: (i) pathways with near-term emissions developments in line with current policies and extended with comparable ambition levels beyond 2030; (ii) pathways likely to limit warming to 2degC with near-term emissions developments reflecting 2030 emissions implied by current NDCs followed by accelerated emissions reductions; (iii) pathways likely to limit warming to 2degC based on immediate actions from 2020 onwards; (iv) pathways that limit warming to 1.5degC with no or limited overshoot. Right-hand panels show two'),\n", - " Document(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': 958.0, 'num_tokens': 210.0, 'num_tokens_approx': 229.0, 'num_words': 172.0, 'page_number': 82, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Technical Summary\\r\\ne fallen, ', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': 'TS.4 Mitigation and Development Pathways', 'toc_level1': 'TS.4.1 Mitigation and Development Pathways in\\xa0the\\xa0Near- to Mid-term', '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.483291417, 'content': 'Figure TS.9 | Aggregate greenhouse gas (GHG) emissions of global mitigation pathways (coloured funnels and bars) and projected emission outcomes from current policies and emissions implied by unconditional and conditional elements of NDCs, based on updates available by 11 October 2021 (grey bars). Shaded areas show GHG emission medians and 25-75th percentiles over 2020-2050 for four types of pathways in the AR6 scenario database: (i) pathways with near-term emissions developments in line with current policies and extended with comparable ambition levels beyond 2030; (ii) pathways likely to limit warming to 2degC with near-term emissions developments reflecting 2030 emissions implied by current NDCs followed by accelerated emissions reductions; (iii) pathways likely to limit warming to 2degC based on immediate actions from 2020 onwards; (iv) pathways that limit warming to 1.5degC with no or limited overshoot. Right-hand panels show two'}, page_content='Figure TS.9 | Aggregate greenhouse gas (GHG) emissions of global mitigation pathways (coloured funnels and bars) and projected emission outcomes from current policies and emissions implied by unconditional and conditional elements of NDCs, based on updates available by 11 October 2021 (grey bars). Shaded areas show GHG emission medians and 25-75th percentiles over 2020-2050 for four types of pathways in the AR6 scenario database: (i) pathways with near-term emissions developments in line with current policies and extended with comparable ambition levels beyond 2030; (ii) pathways likely to limit warming to 2degC with near-term emissions developments reflecting 2030 emissions implied by current NDCs followed by accelerated emissions reductions; (iii) pathways likely to limit warming to 2degC based on immediate actions from 2020 onwards; (iv) pathways that limit warming to 1.5degC with no or limited overshoot. Right-hand panels show two'),\n", - " Document(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': 413.0, 'num_tokens': 140.0, 'num_tokens_approx': 146.0, 'num_words': 110.0, 'page_number': 420, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Mitigation Pathways Compatible with Long-term Goals ', '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.483218, 'content': 'Wachsmuth, J. and V. Duscha, 2019: Achievability of the Paris targets in the EU - the role of demand-side-driven mitigation in different types of scenarios. Energy Effic., 12(2), 403-421, doi:10.1007/s12053-018-9670-4. Waisman, H. et al., 2019: A pathway design framework for national low greenhouse gas emission development strategies. Nat. Clim. Change, 9(4), 261-268, doi:10.1038/s41558-019-0442-8.'}, page_content='Wachsmuth, J. and V. Duscha, 2019: Achievability of the Paris targets in the EU - the role of demand-side-driven mitigation in different types of scenarios. Energy Effic., 12(2), 403-421, doi:10.1007/s12053-018-9670-4. Waisman, H. et al., 2019: A pathway design framework for national low greenhouse gas emission development strategies. Nat. Clim. Change, 9(4), 261-268, doi:10.1038/s41558-019-0442-8.'),\n", - " Document(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': 1032.0, 'num_tokens': 226.0, 'num_tokens_approx': 272.0, 'num_words': 204.0, 'page_number': 1109, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '10.6.4 Mitigation Potential of Fuels, Operations \\r\\nand Energy Efficiency', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '10.6 Decarbonisation of Shipping', 'toc_level1': '10.6.4 Mitigation Potential of Fuels, Operations and\\xa0Energy Efficiency', '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.482932836, 'content': \"Figure 10.15 | Emissions reductions potential of alternative fuels compared to conventional fuels in the shipping sector. The x-axis is reported in %. Each individual marker represents a data point from the literature, where the brown square indicates a full LCA CO2-eq value; light blue triangles tank-to-wake CO2-eq; red triangles well-to-wake CO2-eq; yellow triangles well-to-wake CO2; and dark blue circles tank-to-wake CO2 emissions reduction potentials. The values in the Figure rely on the 100-year GWP value embedded in the source data, which may differ slightly with the updated 100-year GWP values from WGI. 'n' indicates the number of data points per sub-panel. Grey shaded boxes represent data where the energy comes from fossil resources, and blue from low-carbon renewable energy sources. 'Advanced biofuels EMF33' refers to emissions factors derived from simulation results from the integrated assessment models EMF33 scenarios (darkest coloured box in top left panel). Biofuels partial models CLC refers to\"}, page_content=\"Figure 10.15 | Emissions reductions potential of alternative fuels compared to conventional fuels in the shipping sector. The x-axis is reported in %. Each individual marker represents a data point from the literature, where the brown square indicates a full LCA CO2-eq value; light blue triangles tank-to-wake CO2-eq; red triangles well-to-wake CO2-eq; yellow triangles well-to-wake CO2; and dark blue circles tank-to-wake CO2 emissions reduction potentials. The values in the Figure rely on the 100-year GWP value embedded in the source data, which may differ slightly with the updated 100-year GWP values from WGI. 'n' indicates the number of data points per sub-panel. Grey shaded boxes represent data where the energy comes from fossil resources, and blue from low-carbon renewable energy sources. 'Advanced biofuels EMF33' refers to emissions factors derived from simulation results from the integrated assessment models EMF33 scenarios (darkest coloured box in top left panel). Biofuels partial models CLC refers to\"),\n", - " Document(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': 802.0, 'num_tokens': 146.0, 'num_tokens_approx': 168.0, 'num_words': 126.0, 'page_number': 903, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Urban Systems and Other Settlements', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '8.3 Urban Systems and Greenhouse Gas Emissions', 'toc_level1': 'Box\\xa08.1 |\\xa0Does Urbanisation Drive Emissions?', '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.482897669, 'content': 'Figure 8.11: Reference scenario and mitigation potential for global urban areas in the residential and commercial building, transport, waste, and material production sectors. The top red line indicates the reference scenario where no further emissions reduction efforts are taken, while the bottom dark line indicates the combined potential of reducing emissions across the sectors displayed. Wedges are provided for potential emissions savings associated with decarbonising residential buildings, commercial buildings, transport, waste, and materials as indicated in the legend. The shaded areas that take place among the wedges with lines indicate contributions from decarbonisation of electricity supply. Source: Re-used with permission from Coalition for Urban Transitions (2019).'}, page_content='Figure 8.11: Reference scenario and mitigation potential for global urban areas in the residential and commercial building, transport, waste, and material production sectors. The top red line indicates the reference scenario where no further emissions reduction efforts are taken, while the bottom dark line indicates the combined potential of reducing emissions across the sectors displayed. Wedges are provided for potential emissions savings associated with decarbonising residential buildings, commercial buildings, transport, waste, and materials as indicated in the legend. The shaded areas that take place among the wedges with lines indicate contributions from decarbonisation of electricity supply. Source: Re-used with permission from Coalition for Urban Transitions (2019).'),\n", - " Document(metadata={'chunk_type': 'text', 'document_id': 'document17', 'document_number': 17.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 118.0, 'name': 'Chapter 3 - Polar Regions. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 618.0, 'num_tokens': 230.0, 'num_tokens_approx': 222.0, 'num_words': 167.0, 'page_number': 50, 'release_date': 2019.0, 'report_type': 'Special Report', 'section_header': '3.4.3.1.1 Carbon cycle', 'short_name': 'IPCC SR OC C3', '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/05_SROCC_Ch03_FINAL.pdf', 'similarity_score': 0.482723325, 'content': '4 For context, total annual anthropogenic CO2 emissions were 10.8 +- 0.8 GtC yr-1 (39.6 +- 2.9 GtCO2 yr-1) on average over the period 2008-2017. Total annual anthropogenic methane emissions were 0.35 +- 0.01 GtCH4 yr-1, on average over the period 2003-2012 (Saunois et al., 2016; Le Quere et al., 2018).\\n4 For context, total annual anthropogenic CO2 emissions were 10.8 +- 0.8 GtC yr-1 (39.6 +- 2.9 GtCO2 yr-1) on average over the period 2008-2017. Total annual anthropogenic methane emissions were 0.35 +- 0.01 GtCH4 yr-1, on average over the period 2003-2012 (Saunois et al., 2016; Le Quere et al., 2018).\\n252252'}, page_content='4 For context, total annual anthropogenic CO2 emissions were 10.8 +- 0.8 GtC yr-1 (39.6 +- 2.9 GtCO2 yr-1) on average over the period 2008-2017. Total annual anthropogenic methane emissions were 0.35 +- 0.01 GtCH4 yr-1, on average over the period 2003-2012 (Saunois et al., 2016; Le Quere et al., 2018).\\n4 For context, total annual anthropogenic CO2 emissions were 10.8 +- 0.8 GtC yr-1 (39.6 +- 2.9 GtCO2 yr-1) on average over the period 2008-2017. Total annual anthropogenic methane emissions were 0.35 +- 0.01 GtCH4 yr-1, on average over the period 2003-2012 (Saunois et al., 2016; Le Quere et al., 2018).\\n252252'),\n", - " Document(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': 836.0, 'num_tokens': 254.0, 'num_tokens_approx': 288.0, 'num_words': 216.0, 'page_number': 30, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Future emissions cause future additional warming, with total warming \\r\\ndominated by past and future CO2 emissions', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': 'Summary for Policymakers', 'toc_level1': 'B. Possible Climate Futures', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.482723087, 'content': 'Figure SPM.4 | Future anthropogenic emissions of key drivers of climate change and warming contributions by groups of drivers for the five illustrative scenarios used in this report\\nThe five scenarios are SSP1-1.9, SSP1-2.6, SSP2-4.5, SSP3-7.0 and SSP5-8.5.\\nPanel (a) Annual anthropogenic (human-caused) emissions over the 2015-2100 period. Shown are emissions trajectories for carbon dioxide (CO2) from all sectors (GtCO2/yr) (left graph) and for a subset of three key non-CO2 drivers considered in the scenarios: methane (CH4, MtCH4/yr, top-right graph); nitrous oxide (N2O, MtN2O/yr, middle-right graph); and sulphur dioxide (SO2, MtSO2/yr, bottom-right graph, contributing to anthropogenic aerosols in panel (b).\\n The five scenarios are SSP1-1.9, SSP1-2.6, SSP2-4.5, SSP3-7.0 and SSP5-8.5. '}, page_content='Figure SPM.4 | Future anthropogenic emissions of key drivers of climate change and warming contributions by groups of drivers for the five illustrative scenarios used in this report\\nThe five scenarios are SSP1-1.9, SSP1-2.6, SSP2-4.5, SSP3-7.0 and SSP5-8.5.\\nPanel (a) Annual anthropogenic (human-caused) emissions over the 2015-2100 period. Shown are emissions trajectories for carbon dioxide (CO2) from all sectors (GtCO2/yr) (left graph) and for a subset of three key non-CO2 drivers considered in the scenarios: methane (CH4, MtCH4/yr, top-right graph); nitrous oxide (N2O, MtN2O/yr, middle-right graph); and sulphur dioxide (SO2, MtSO2/yr, bottom-right graph, contributing to anthropogenic aerosols in panel (b).\\n The five scenarios are SSP1-1.9, SSP1-2.6, SSP2-4.5, SSP3-7.0 and SSP5-8.5. '),\n", - " Document(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': 1027.0, 'num_tokens': 235.0, 'num_tokens_approx': 261.0, 'num_words': 196.0, 'page_number': 206, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': 'Projections of climate change', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '1: Framing, Context, and Methods', 'toc_level1': '1.4 AR6 Foundations and Concepts', 'toc_level2': '1.4.1 Baselines, Reference Periods and Anomalies', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.482668132, 'content': 'Box 1.2 (continued)\\nto weaken during the 21st century (very likely), but a collapse is deemed very unlikely (albeit with medium confidence due to known biases in the climate models used for the assessment).\\nEmissions pathways to limit global warming\\nEmissions pathways to limit global warming The SR1.5 focused on emissions pathways and system transitions consistent with 1.5degC global warming over the 21st century. Building upon the understanding from AR5 WGI of the quasi-linear relationship between cumulative net anthropogenic CO2 emissions since 1850-1900 and maximum global mean temperature, the Report assessed the remaining carbon budgets compatible with the 1.5degC or 2degC warming goals of the Paris Agreement. Starting from year 2018, the remaining carbon budget for a one-in-two (50%) chance of limiting global warming to 1.5degC is about 580 GtCO2, and about 420 GtCO2 for a two-in-three (66%) chance (medium confidence).\\n Emissions pathways to limit global warming '}, page_content='Box 1.2 (continued)\\nto weaken during the 21st century (very likely), but a collapse is deemed very unlikely (albeit with medium confidence due to known biases in the climate models used for the assessment).\\nEmissions pathways to limit global warming\\nEmissions pathways to limit global warming The SR1.5 focused on emissions pathways and system transitions consistent with 1.5degC global warming over the 21st century. Building upon the understanding from AR5 WGI of the quasi-linear relationship between cumulative net anthropogenic CO2 emissions since 1850-1900 and maximum global mean temperature, the Report assessed the remaining carbon budgets compatible with the 1.5degC or 2degC warming goals of the Paris Agreement. Starting from year 2018, the remaining carbon budget for a one-in-two (50%) chance of limiting global warming to 1.5degC is about 580 GtCO2, and about 420 GtCO2 for a two-in-three (66%) chance (medium confidence).\\n Emissions pathways to limit global warming ')]" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "retriever = ClimateQARetriever(\n", - " vectorstore=vectorstore,\n", - " sources = [\"IPCC\"],\n", - " min_size = 200,\n", - " k_summary = 5,\n", - " k_total = 100,\n", - " threshold = 0.5,\n", - " )\n", - "sources = retriever.invoke(\"graphique\")\n", - "# sources = retriever.invoke('What is the definition of the greenhouse effect?')\n", - "sources" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "id": "8f09b312", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Document(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.613080263, '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.\"}, 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.\")" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "sources[2]" - ] - }, { "cell_type": "code", "execution_count": 5, @@ -854,10 +694,22 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 7, "id": "2376e1d7-5893-4022-a0af-155bb8c1950f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "TypeError", + "evalue": "make_graph_agent() missing 1 required positional argument: 'reranker'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 2\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mclimateqa\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mengine\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mgraph\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m make_graph_agent,display_graph\n\u001b[0;32m----> 2\u001b[0m agent \u001b[38;5;241m=\u001b[39m \u001b[43mmake_graph_agent\u001b[49m\u001b[43m(\u001b[49m\u001b[43mllm\u001b[49m\u001b[43m,\u001b[49m\u001b[43mvectorstore\u001b[49m\u001b[43m,\u001b[49m\u001b[43mreranker\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mTypeError\u001b[0m: make_graph_agent() missing 1 required positional argument: 'reranker'" + ] + } + ], "source": [ "from climateqa.engine.graph import make_graph_agent,display_graph\n", "agent = make_graph_agent(llm,vectorstore,reranker)" @@ -1366,25 +1218,59 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "id": "b91f4f58", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:chromadb.telemetry.posthog:Anonymized telemetry enabled. See https://docs.trychroma.com/telemetry for more information.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Translate query ----\n" + ] + }, + { + "ename": "ValueError", + "evalue": "Node `retrieve_graphs_chitchat` is not reachable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[10], line 8\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mlangchain_chroma\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m Chroma\n\u001b[1;32m 7\u001b[0m vectorstore_graphs \u001b[38;5;241m=\u001b[39m Chroma(persist_directory\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/home/tim/ai4s/climate_qa/climate-question-answering/data/vectorstore_owid\u001b[39m\u001b[38;5;124m\"\u001b[39m, embedding_function\u001b[38;5;241m=\u001b[39membeddings_function)\n\u001b[0;32m----> 8\u001b[0m app \u001b[38;5;241m=\u001b[39m \u001b[43mmake_graph_agent\u001b[49m\u001b[43m(\u001b[49m\u001b[43mllm\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvectorstore_ipcc\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mvectorstore\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvectorstore_graphs\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mvectorstore_graphs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mreranker\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mreranker\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/ai4s/climate_qa/climate-question-answering/climateqa/engine/graph.py:178\u001b[0m, in \u001b[0;36mmake_graph_agent\u001b[0;34m(llm, vectorstore_ipcc, vectorstore_graphs, reranker, threshold_docs)\u001b[0m\n\u001b[1;32m 169\u001b[0m workflow\u001b[38;5;241m.\u001b[39madd_edge(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mretrieve_graphs_chitchat\u001b[39m\u001b[38;5;124m\"\u001b[39m, END)\n\u001b[1;32m 170\u001b[0m \u001b[38;5;66;03m# workflow.add_edge(\"answer_ai_impact\", \"translate_query_ai\")\u001b[39;00m\n\u001b[1;32m 171\u001b[0m \u001b[38;5;66;03m# workflow.add_edge(\"translate_query_ai\", \"transform_query_ai\")\u001b[39;00m\n\u001b[1;32m 172\u001b[0m \u001b[38;5;66;03m# workflow.add_edge(\"transform_query_ai\", \"retrieve_graphs_ai\")\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 176\u001b[0m \n\u001b[1;32m 177\u001b[0m \u001b[38;5;66;03m# Compile\u001b[39;00m\n\u001b[0;32m--> 178\u001b[0m app \u001b[38;5;241m=\u001b[39m \u001b[43mworkflow\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcompile\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 179\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m app\n", + "File \u001b[0;32m~/anaconda3/envs/climateqa/lib/python3.11/site-packages/langgraph/graph/state.py:430\u001b[0m, in \u001b[0;36mStateGraph.compile\u001b[0;34m(self, checkpointer, store, interrupt_before, interrupt_after, debug)\u001b[0m\n\u001b[1;32m 427\u001b[0m interrupt_after \u001b[38;5;241m=\u001b[39m interrupt_after \u001b[38;5;129;01mor\u001b[39;00m []\n\u001b[1;32m 429\u001b[0m \u001b[38;5;66;03m# validate the graph\u001b[39;00m\n\u001b[0;32m--> 430\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mvalidate\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 431\u001b[0m \u001b[43m \u001b[49m\u001b[43minterrupt\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\n\u001b[1;32m 432\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[43minterrupt_before\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43minterrupt_before\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m!=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m*\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43m]\u001b[49m\u001b[43m)\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43minterrupt_after\u001b[49m\n\u001b[1;32m 433\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01mif\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43minterrupt_after\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m!=\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m*\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\n\u001b[1;32m 434\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43;01melse\u001b[39;49;00m\u001b[43m \u001b[49m\u001b[43m[\u001b[49m\u001b[43m]\u001b[49m\n\u001b[1;32m 435\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 436\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 438\u001b[0m \u001b[38;5;66;03m# prepare output channels\u001b[39;00m\n\u001b[1;32m 439\u001b[0m output_channels \u001b[38;5;241m=\u001b[39m (\n\u001b[1;32m 440\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m__root__\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 441\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mlen\u001b[39m(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mschemas[\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39moutput]) \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m1\u001b[39m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 447\u001b[0m ]\n\u001b[1;32m 448\u001b[0m )\n", + "File \u001b[0;32m~/anaconda3/envs/climateqa/lib/python3.11/site-packages/langgraph/graph/graph.py:393\u001b[0m, in \u001b[0;36mGraph.validate\u001b[0;34m(self, interrupt)\u001b[0m\n\u001b[1;32m 391\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m node \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnodes:\n\u001b[1;32m 392\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m node \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m all_targets:\n\u001b[0;32m--> 393\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNode `\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mnode\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m` is not reachable\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m 394\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m target \u001b[38;5;129;01min\u001b[39;00m all_targets:\n\u001b[1;32m 395\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m target \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnodes \u001b[38;5;129;01mand\u001b[39;00m target \u001b[38;5;241m!=\u001b[39m END:\n", + "\u001b[0;31mValueError\u001b[0m: Node `retrieve_graphs_chitchat` is not reachable" + ] + } + ], "source": [ "from climateqa.engine.graph import make_graph_agent,display_graph\n", "\n", - "app = make_graph_agent(llm,vectorstore,reranker)\n" + "# app = make_graph_agent(llm,vectorstore,reranker)\n", + "\n", + "from langchain_chroma import Chroma\n", + "\n", + "vectorstore_graphs = Chroma(persist_directory=\"/home/tim/ai4s/climate_qa/climate-question-answering/data/vectorstore_owid\", embedding_function=embeddings_function)\n", + "app = make_graph_agent(llm, vectorstore_ipcc= vectorstore, vectorstore_graphs = vectorstore_graphs, reranker=reranker)\n" ] }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "c3c70cdb", "metadata": {}, "outputs": [ { "data": { - "image/jpeg": "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", + "image/jpeg": "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", "text/plain": [ "" ] @@ -1405,46 +1291,19 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "05ead97d", "metadata": {}, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "/tmp/ipykernel_26385/4164394190.py:6: LangChainBetaWarning: This API is in beta and may change in the future.\n", - " async for event in app.astream_events({\"user_input\": question,\"sources\":[\"auto\"], \"audience\" : 'expert'}, version=\"v1\"):\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", - "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", - "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", - "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID 27bbc43d-748e-4061-a61a-872ea1e50b7e.')\n", - "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID 27bbc43d-748e-4061-a61a-872ea1e50b7e.')\n", - "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", - "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", - "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID 81a5385d-b9ff-4ec0-a581-15629901a185.')\n", - "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID 81a5385d-b9ff-4ec0-a581-15629901a185.')\n", - "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", - "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", - "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID 21a2d759-f3b0-480f-b1ba-52d6ce3ab09d.')\n", - "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID 21a2d759-f3b0-480f-b1ba-52d6ce3ab09d.')\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": [ - "Cloud formations play a crucial role in modulating the Earth's radiative balance. They can either reflect incoming solar radiation back to space, cooling the Earth, or trap outgoing infrared radiation, contributing to warming. The representation of clouds in climate models is essential for accurately simulating the Earth's energy balance and predicting future climate changes.\n", - "\n", - "In current climate models, the representation of clouds, particularly low-level clouds, is a significant factor influencing the models' equilibrium climate sensitivity (ECS). The ECS of a model is determined by its effective radiative forcing from a doubling of CO2 and the feedbacks from cloud formations. The spread in ECS among different models is mainly attributed to cloud feedbacks, especially the response of low-level clouds [Doc 7].\n", - "\n", - "Despite efforts to improve cloud parametrizations and model resolutions, there has been no systematic convergence in model estimates of ECS. In fact, the inter-model spread in ECS for the latest CMIP6 models is larger than for CMIP5 models, indicating ongoing challenges in accurately representing cloud formations in climate models [Doc 7].\n", - "\n", - "Overall, the representation of cloud formations in current climate models is crucial for understanding and predicting the Earth's radiative balance and the impacts of climate change. Ongoing research and advancements in model development are essential to improve the accuracy of cloud representations in climate models." + "ename": "NameError", + "evalue": "name 'app' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[9], line 7\u001b[0m\n\u001b[1;32m 5\u001b[0m question \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat evidence do we have of climate change and are human activities responsible for global warming?\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 6\u001b[0m events_list \u001b[38;5;241m=\u001b[39m []\n\u001b[0;32m----> 7\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 \u001b[43mapp\u001b[49m\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], \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124maudience\u001b[39m\u001b[38;5;124m\"\u001b[39m : \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mexpert\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[1;32m 8\u001b[0m events_list\u001b[38;5;241m.\u001b[39mappend(event)\n\u001b[1;32m 10\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;31mNameError\u001b[0m: name 'app' is not defined" ] } ], @@ -1453,6 +1312,7 @@ "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", + "question = \"What evidence do we have of climate change and are human activities responsible for global warming?\"\n", "events_list = []\n", "async for event in app.astream_events({\"user_input\": question,\"sources\":[\"auto\"], \"audience\" : 'expert'}, version=\"v1\"):\n", " events_list.append(event)\n", @@ -1523,6 +1383,57 @@ " print(event)" ] }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e54af13e", + "metadata": {}, + "outputs": [ + { + "ename": "NameError", + "evalue": "name 'Document' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[3], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m x \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mevent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mon_chain_end\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mretrieve_documents\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrun_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m60525384-8138-4522-99c1-a1eb59defbd4\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtags\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mgraph:step:4\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmetadata\u001b[39m\u001b[38;5;124m'\u001b[39m: {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlanggraph_step\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m4\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlanggraph_node\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mretrieve_documents\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlanggraph_triggers\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtransform_query\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlanggraph_path\u001b[39m\u001b[38;5;124m'\u001b[39m: (\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m__pregel_pull\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mretrieve_documents\u001b[39m\u001b[38;5;124m'\u001b[39m), \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlanggraph_checkpoint_ns\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mretrieve_documents:29351557-d5e9-6fb7-9c8f-fc1101da92e8\u001b[39m\u001b[38;5;124m'\u001b[39m}, \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;124minput\u001b[39m\u001b[38;5;124m'\u001b[39m: {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124muser_input\u001b[39m\u001b[38;5;124m'\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, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mlanguage\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mEnglish\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mintent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msearch\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquery\u001b[39m\u001b[38;5;124m'\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, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mremaining_questions\u001b[39m\u001b[38;5;124m'\u001b[39m: [{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \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;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}, {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHow are cloud formations represented in current climate models?\u001b[39m\u001b[38;5;124m'\u001b[39m, \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;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn_questions\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124maudience\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mexpert\u001b[39m\u001b[38;5;124m'\u001b[39m}, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124moutput\u001b[39m\u001b[38;5;124m'\u001b[39m: {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocuments\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[43mDocument\u001b[49m(metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mchunk_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument1\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124melement_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure_code\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_size\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage_path\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn_pages\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m32.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSummary for Policymakers. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_characters\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1056.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m219.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens_approx\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m266.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_words\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m200.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpage_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m7\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrelease_date\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2021.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreport_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msection_header\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFigure SPM.2 | Assessed contributions to observed warming in 2010-2019 relative to 1850-1900\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshort_name\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC AR6 WGI SPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level0\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mA. The Current State of the Climate\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level2\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level3\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124murl\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttps://www.ipcc.ch/report/ar6/wg1/downloads/report/IPCC_AR6_WGI_SPM.pdf\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msimilarity_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.595214307\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPanel (b) Evidence from attribution studies, which synthesize information from climate models and observations. The panel shows temperature change attributed to: total human influence; changes in well-mixed greenhouse gas concentrations; other human drivers due to aerosols, ozone and land-use change (land-use reflectance); solar and volcanic drivers; and internal climate variability. Whiskers show likely ranges.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mPanel (c) Evidence from the assessment of radiative forcing and climate sensitivity. The panel shows temperature changes from individual components of human influence: emissions of greenhouse gases, aerosols and their precursors; land-use changes (land-use reflectance and irrigation); and aviation contrails. Whiskers show very likely ranges. Estimates account for both direct emissions into the atmosphere and their effect, if any, on other climate drivers. For aerosols, both direct effects (through radiation) and indirect effects (through interactions with clouds) are considered. \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124mCross-Chapter Box 2.3, 3.3.1, 6.4.2, 7.3}\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreranking_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.9769342541694641\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquery_used_for_retrieval\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msources_used\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}, page_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPanel (b) Evidence from attribution studies, which synthesize information from climate models and observations. The panel shows temperature change attributed to: total human influence; changes in well-mixed greenhouse gas concentrations; other human drivers due to aerosols, ozone and land-use change (land-use reflectance); solar and volcanic drivers; and internal climate variability. Whiskers show likely ranges.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mPanel (c) Evidence from the assessment of radiative forcing and climate sensitivity. The panel shows temperature changes from individual components of human influence: emissions of greenhouse gases, aerosols and their precursors; land-use changes (land-use reflectance and irrigation); and aviation contrails. Whiskers show very likely ranges. Estimates account for both direct emissions into the atmosphere and their effect, if any, on other climate drivers. For aerosols, both direct effects (through radiation) and indirect effects (through interactions with clouds) are considered. \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124mCross-Chapter Box 2.3, 3.3.1, 6.4.2, 7.3}\u001b[39m\u001b[38;5;124m'\u001b[39m), Document(metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mchunk_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument1\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124melement_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure_code\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_size\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage_path\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn_pages\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m32.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSummary for Policymakers. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_characters\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m638.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m177.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens_approx\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m200.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_words\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m150.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpage_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m11\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrelease_date\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2021.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreport_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msection_header\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFigure SPM.3 | Synthesis of assessed observed and attributable regional changes \u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshort_name\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC AR6 WGI SPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level0\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mA. The Current State of the Climate\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level2\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level3\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124murl\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttps://www.ipcc.ch/report/ar6/wg1/downloads/report/IPCC_AR6_WGI_SPM.pdf\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msimilarity_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.592556596\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mA.4.1 Human-caused radiative forcing of 2.72 [1.96 to 3.48] W m-2 in 2019 relative to 1750 has warmed the climate system. This warming is mainly due to increased GHG concentrations, partly reduced by cooling due to increased aerosol concentrations. The radiative forcing has increased by 0.43 W m-2 (19\u001b[39m\u001b[38;5;124m%\u001b[39m\u001b[38;5;124m) relative to AR5, of which 0.34 W m-2 is due to the increase in GHG concentrations since 2011. The remainder is due to improved scientific understanding and changes in the assessment of aerosol forcing, which include decreases in concentration and improvement in its calculation (high confidence). \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m2.2, 7.3, TS.2.2, TS.3.1}\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreranking_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.907663881778717\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquery_used_for_retrieval\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msources_used\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}, page_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mA.4.1 Human-caused radiative forcing of 2.72 [1.96 to 3.48] W m-2 in 2019 relative to 1750 has warmed the climate system. This warming is mainly due to increased GHG concentrations, partly reduced by cooling due to increased aerosol concentrations. The radiative forcing has increased by 0.43 W m-2 (19\u001b[39m\u001b[38;5;124m%\u001b[39m\u001b[38;5;124m) relative to AR5, of which 0.34 W m-2 is due to the increase in GHG concentrations since 2011. The remainder is due to improved scientific understanding and changes in the assessment of aerosol forcing, which include decreases in concentration and improvement in its calculation (high confidence). \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m2.2, 7.3, TS.2.2, TS.3.1}\u001b[39m\u001b[38;5;124m'\u001b[39m), Document(metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mchunk_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument1\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124melement_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure_code\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_size\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage_path\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn_pages\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m32.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSummary for Policymakers. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_characters\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m827.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m238.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens_approx\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m278.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_words\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m209.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpage_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m19\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrelease_date\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2021.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreport_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msection_header\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFigure SPM.6 | Projected changes in the intensity and frequency of hot temperature extremes over land, extreme precipitation over land, \u001b[39m\u001b[38;5;130;01m\\r\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mand agricultural and ecological droughts in drying regions\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshort_name\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC AR6 WGI SPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level0\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mB. Possible Climate Futures\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level2\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level3\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124murl\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttps://www.ipcc.ch/report/ar6/wg1/downloads/report/IPCC_AR6_WGI_SPM.pdf\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msimilarity_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.582914889\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mB.3.4 A projected southward shift and intensification of Southern Hemisphere summer mid-latitude storm tracks and associated precipitation is likely in the long term under high GHG emissions scenarios (SSP3-7.0, SSP5-8.5), but in the near term the effect of stratospheric ozone recovery counteracts these changes (high confidence). There is medium confidence in a continued poleward shift of storms and their precipitation in the North Pacific, while there is low confidence in projected changes in the North Atlantic storm tracks. \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m4.4, 4.5, 8.4, TS.2.3, TS.4.2}\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m4.4, 4.5, 8.4, TS.2.3, TS.4.2}\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mB.4 Under scenarios with increasing CO2 emissions, the ocean and land carbon sinks are projected to be less effective at slowing the accumulation of CO2 in the atmosphere. \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m4.3, 5.2, 5.4, 5.5, 5.6} (Figure SPM.7)\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m1919\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreranking_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.8376452922821045\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquery_used_for_retrieval\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msources_used\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}, page_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mB.3.4 A projected southward shift and intensification of Southern Hemisphere summer mid-latitude storm tracks and associated precipitation is likely in the long term under high GHG emissions scenarios (SSP3-7.0, SSP5-8.5), but in the near term the effect of stratospheric ozone recovery counteracts these changes (high confidence). There is medium confidence in a continued poleward shift of storms and their precipitation in the North Pacific, while there is low confidence in projected changes in the North Atlantic storm tracks. \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m4.4, 4.5, 8.4, TS.2.3, TS.4.2}\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m4.4, 4.5, 8.4, TS.2.3, TS.4.2}\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124mB.4 Under scenarios with increasing CO2 emissions, the ocean and land carbon sinks are projected to be less effective at slowing the accumulation of CO2 in the atmosphere. \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124m4.3, 5.2, 5.4, 5.5, 5.6} (Figure SPM.7)\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m1919\u001b[39m\u001b[38;5;124m'\u001b[39m), Document(metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mchunk_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument4\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m4.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124melement_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure_code\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_size\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage_path\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn_pages\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m34.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSummary for Policymakers. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_characters\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m806.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m147.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens_approx\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m162.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_words\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m122.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpage_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m19\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrelease_date\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2022.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreport_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msection_header\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mComplex, Compound and Cascading Risks\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshort_name\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC AR6 WGII SPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level0\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mB: Observed and Projected Impacts and Risks\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mImpacts of Temporary Overshoot\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level2\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level3\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124murl\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttps://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_SummaryForPolicymakers.pdf\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msimilarity_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.581911206\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mB.5.5 Solar radiation modification approaches, if they were to be implemented, introduce a widespread range of new risks to people and ecosystems, which are not well understood (high confidence). Solar radiation modification approaches have potential to offset warming and ameliorate some climate hazards, but substantial residual climate change or overcompensating change would occur at regional scales and seasonal timescales (high confidence). Large uncertainties and knowledge gaps are associated with the potential of solar radiation modification approaches to reduce climate change risks. Solar radiation modification would not stop atmospheric CO2 concentrations from increasing or reduce resulting ocean acidification under continued anthropogenic emissions (high confidence). \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124mCWGB SRM}\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreranking_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.7240780591964722\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquery_used_for_retrieval\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msources_used\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}, page_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mB.5.5 Solar radiation modification approaches, if they were to be implemented, introduce a widespread range of new risks to people and ecosystems, which are not well understood (high confidence). Solar radiation modification approaches have potential to offset warming and ameliorate some climate hazards, but substantial residual climate change or overcompensating change would occur at regional scales and seasonal timescales (high confidence). Large uncertainties and knowledge gaps are associated with the potential of solar radiation modification approaches to reduce climate change risks. Solar radiation modification would not stop atmospheric CO2 concentrations from increasing or reduce resulting ocean acidification under continued anthropogenic emissions (high confidence). \u001b[39m\u001b[38;5;124m{\u001b[39m\u001b[38;5;124mCWGB SRM}\u001b[39m\u001b[38;5;124m'\u001b[39m), Document(metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mchunk_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument10\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m10.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124melement_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure_code\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_size\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage_path\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn_pages\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m36.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSynthesis report of the IPCC Sixth Assesment Report AR6\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_characters\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m686.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m163.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens_approx\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m182.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_words\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m137.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpage_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m19\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrelease_date\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2023.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreport_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mSPM\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msection_header\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFuture Climate Change \u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshort_name\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC AR6 SYR\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level0\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level2\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level3\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124murl\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttps://www.ipcc.ch/report/ar6/syr/downloads/report/IPCC_AR6_SYR_SPM.pdf\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msimilarity_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.581764042\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPermafrost, seasonal snow cover, glaciers, the Greenland and Antarctic Ice Sheets, an\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124msonal snow cover, glaciers, the Greenland and Antarctic Ice Sheets, and Arctic se\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m35 Based on 2500-year reconstructions, eruptions with a radiative forcing more negative than -1 W m-2, related to the radiative effect of volcanic stratospheric aerosols in the literature assessed in this report, occur on average twice per century. \u001b[39m\u001b[38;5;132;01m{4.3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m35 Based on 2500-year reconstructions, eruptions with a radiative forcing more negative than -1 W m-2, related to the radiative effect of volcanic stratospheric aerosols in the literature assessed in this report, occur on average twice per century. \u001b[39m\u001b[38;5;132;01m{4.3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m1313\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreranking_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.7240780591964722\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquery_used_for_retrieval\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msources_used\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}, page_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mPermafrost, seasonal snow cover, glaciers, the Greenland and Antarctic Ice Sheets, an\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124msonal snow cover, glaciers, the Greenland and Antarctic Ice Sheets, and Arctic se\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m35 Based on 2500-year reconstructions, eruptions with a radiative forcing more negative than -1 W m-2, related to the radiative effect of volcanic stratospheric aerosols in the literature assessed in this report, occur on average twice per century. \u001b[39m\u001b[38;5;132;01m{4.3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m35 Based on 2500-year reconstructions, eruptions with a radiative forcing more negative than -1 W m-2, related to the radiative effect of volcanic stratospheric aerosols in the literature assessed in this report, occur on average twice per century. \u001b[39m\u001b[38;5;132;01m{4.3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m1313\u001b[39m\u001b[38;5;124m'\u001b[39m), Document(metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mchunk_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument2\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124melement_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure_code\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_size\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage_path\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn_pages\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2409.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFull Report. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_characters\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m644.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m151.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens_approx\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m165.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_words\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m124.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpage_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m950\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrelease_date\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2021.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreport_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFull Report\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msection_header\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m7.2.1 Present-day Energy Budget\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshort_name\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC AR6 WGI FR\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level0\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m7: The Earth’s Energy Budget, Climate Feedbacks and Climate Sensitivity\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m7.2 Earth’s Energy Budget and its Changes\u001b[39m\u001b[38;5;130;01m\\xa0\u001b[39;00m\u001b[38;5;124mThrough Time\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level2\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m7.2.1 Present-day Energy Budget\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level3\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124murl\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttps://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msimilarity_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.741419494\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFigure 7.2 (upper panel) shows a schematic representation of Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms energy budget for the early 21st century, including globally averaged estimates of the individual components (Wild et al., 2015). Clouds are important modulators of global energy fluxes. Thus, any perturbations in the cloud fields, such as forcing by aerosol-cloud interactions (Section 7.3) or through cloud feedbacks (Section 7.4) can have a strong influence on the energy distribution in the climate system. To illustrate the overall effects that clouds exert on energy fluxes, Figure 7.2 (lower panel) also shows the energy budget in the absence \u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m933933\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreranking_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.7089773416519165\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquery_used_for_retrieval\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msources_used\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}, page_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFigure 7.2 (upper panel) shows a schematic representation of Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms energy budget for the early 21st century, including globally averaged estimates of the individual components (Wild et al., 2015). Clouds are important modulators of global energy fluxes. Thus, any perturbations in the cloud fields, such as forcing by aerosol-cloud interactions (Section 7.3) or through cloud feedbacks (Section 7.4) can have a strong influence on the energy distribution in the climate system. To illustrate the overall effects that clouds exert on energy fluxes, Figure 7.2 (lower panel) also shows the energy budget in the absence \u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m933933\u001b[39m\u001b[38;5;124m\"\u001b[39m), Document(metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mchunk_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtext\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument2\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdocument_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124melement_id\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfigure_code\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mfile_size\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mimage_path\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mN/A\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mn_pages\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2409.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFull Report. In: Climate Change 2021: The Physical Science Basis. Contribution of the WGI to the AR6 of the IPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_characters\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1121.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m231.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_tokens_approx\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m288.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mnum_words\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m216.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mpage_number\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m1039\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrelease_date\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m2021.0\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreport_type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFull Report\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msection_header\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFAQ 7.2 | What Is the Role of Clouds in a Warming Climate?\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mshort_name\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC AR6 WGI FR\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msource\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level0\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m7: The Earth’s Energy Budget, Climate Feedbacks and Climate Sensitivity\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level1\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124m7.6 Metrics to Evaluate Emissions\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level2\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFrequently Asked Questions\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtoc_level3\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mFAQ 7.1 | What Is the Earth’s Energy Budget, and What Does It Tell Us About Climate Change?\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124murl\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mhttps://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msimilarity_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.727996647\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mcontent\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClouds cover roughly two-thirds of the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms surface. They consist of small droplets and/or ice crystals, which form when water vapour condenses or deposits around tiny particles called aerosols (such as salt, dust, or smoke). Clouds play a critical role in the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms energy budget at the top of our atmosphere and therefore influence Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms surface temperature (see FAQ 7.1). The interactions between clouds and the climate are complex and varied. Clouds at low altitudes tend to reflect incoming solar energy back to space, creating a cooling effect by preventing this energy from reaching and warming the Earth. On the other hand, higher clouds tend to trap (i.e., absorb and then emit at a lower temperature) some of the energy leaving the Earth, leading to a warming effect. On average, clouds reflect back more incoming energy than the amount of outgoing energy they trap, resulting in an overall net cooling effect on the present climate. Human activities since the pre-industrial era have altered this climate effect of clouds in two different ways: by changing the abundance of the aerosol\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mreranking_score\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;241m0.47518521547317505\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquery_used_for_retrieval\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124msources_used\u001b[39m\u001b[38;5;124m'\u001b[39m: [\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mWhat role do cloud formations play in modulating the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms radiative balance?\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex_used\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}, page_content\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mClouds cover roughly two-thirds of the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms surface. They consist of small droplets and/or ice crystals, which form when water vapour condenses or deposits around tiny particles called aerosols (such as salt, dust, or smoke). Clouds play a critical role in the Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms energy budget at the top of our atmosphere and therefore influence Earth\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124ms surface temperature (see FAQ 7.1). The interactions between clouds and the climate are complex and varied. Clouds at low altitudes tend to reflect incoming solar energy back to space, creating a cooling effect by preventing this energy from reaching and warming the Earth. On the other hand, higher clouds tend to trap (i.e., absorb and then emit at a lower temperature) some of the energy leaving the Earth, leading to a warming effect. On average, clouds reflect back more incoming energy than the amount of outgoing energy they trap, resulting in an overall net cooling effect on the present climate. Human activities since the pre-industrial era have altered this climate effect of clouds in two different ways: by changing the abundance of the aerosol\u001b[39m\u001b[38;5;124m\"\u001b[39m)], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mremaining_questions\u001b[39m\u001b[38;5;124m'\u001b[39m: [{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquestion\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mHow are cloud formations represented in current climate models?\u001b[39m\u001b[38;5;124m'\u001b[39m, \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;124mIPCC\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPOS\u001b[39m\u001b[38;5;124m'\u001b[39m, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mIPBES\u001b[39m\u001b[38;5;124m'\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mindex\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mVector\u001b[39m\u001b[38;5;124m'\u001b[39m}]}}, \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparent_ids\u001b[39m\u001b[38;5;124m'\u001b[39m: []}\n", + "\u001b[0;31mNameError\u001b[0m: name 'Document' is not defined" + ] + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "98d3cafd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'intent': 'search',\n", + " 'language': 'English',\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?\"}" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x[\"data\"][\"output\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3aace6fc", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": 17, diff --git a/sandbox/20240702 - CQA - Graph Functionality.ipynb b/sandbox/20240702 - CQA - Graph Functionality.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..43b3d0d98c47c38cb1593b3191598699906b812b --- /dev/null +++ b/sandbox/20240702 - CQA - Graph Functionality.ipynb @@ -0,0 +1,11689 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# ClimateQ&A\n", + "---\n", + "Goal of the notebook: Recommended graphs functionality\n", + "\n", + "Inputs of the notebook:\n", + "\n", + "Output of the notebook:\n", + "\n", + "\n", + "Takeaways:\n", + "\n", + "Questions, thoughts and remarks:\n", + "- What do I put for query instruction ?\n", + " - Default is \"Represent this sentence for searching relevant passages:\"\n", + " - embedding_function = get_embeddings_function(query_instruction=\"\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Dependencies and path\n", + "Adjust the argument in `sys.path.append` to align with your specific requirements." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd \n", + "import numpy as np\n", + "import os\n", + "from IPython.display import display, Markdown\n", + "\n", + "%load_ext autoreload\n", + "%autoreload 2\n", + "\n", + "ROOT_DIR = os.path.dirname(os.getcwd())\n", + "\n", + "import sys\n", + "sys.path.append(\"/home/dora/climate-question-answering\")\n", + "sys.path.append(ROOT_DIR)\n", + "\n", + "from dotenv import load_dotenv\n", + "load_dotenv()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Import objects\n", + "### 1.1 LLM" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from climateqa.engine.llm import get_llm\n", + "llm = get_llm(provider=\"openai\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.2 Embedding" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading embeddings model: BAAI/bge-base-en-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tim/anaconda3/envs/climateqa/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "source": [ + "from climateqa.engine.embeddings import get_embeddings_function\n", + "\n", + "embeddings_function = get_embeddings_function()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.3 Reranker" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading FlashRankRanker model ms-marco-TinyBERT-L-2-v2\n", + "Loading model FlashRank model ms-marco-TinyBERT-L-2-v2...\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from climateqa.engine.reranker import get_reranker\n", + "\n", + "reranker = get_reranker(\"nano\")\n", + "reranker" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1.4 IPCC vectorstore" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:pinecone_plugin_interface.logging:Discovering subpackages in _NamespacePath(['/home/tim/anaconda3/envs/climateqa/lib/python3.11/site-packages/pinecone_plugins'])\n", + "INFO:pinecone_plugin_interface.logging:Looking for plugins in pinecone_plugins.inference\n", + "INFO:pinecone_plugin_interface.logging:Installing plugin inference into Pinecone\n", + "/home/tim/ai4s/climate_qa/climate-question-answering/climateqa/engine/vectorstore.py:38: LangChainDeprecationWarning: The class `Pinecone` was deprecated in LangChain 0.0.18 and will be removed in 0.3.0. An updated version of the class exists in the langchain-pinecone package and should be used instead. To use it run `pip install -U langchain-pinecone` and import as `from langchain_pinecone import Pinecone`.\n", + " vectorstore = PineconeVectorstore(\n" + ] + } + ], + "source": [ + "from climateqa.engine.vectorstore import get_pinecone_vectorstore\n", + "\n", + "vectorstore = get_pinecone_vectorstore(embeddings_function)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'authors': 'N/A',\n", + " 'chunk_type': 'text',\n", + " 'document_id': 'ipos141',\n", + " 'document_number': 141.0,\n", + " 'is_pdf_link': 1.0,\n", + " 'is_pdf_local': 0.0,\n", + " 'is_selected': 1.0,\n", + " 'journal': 'FAO',\n", + " 'local_pdf_path': 'N/A',\n", + " 'n_pages': 'N/A',\n", + " 'name': 'State of the World Fisheries and Aquaculture 2022',\n", + " 'num_characters': 14.0,\n", + " 'num_tokens': 4.0,\n", + " 'num_tokens_approx': 5.0,\n", + " 'num_words': 4.0,\n", + " 'page_number': 214.0,\n", + " 'report_type': 'Report',\n", + " 'section_header': '1 For example: ',\n", + " 'short_name': 'IPOS 141',\n", + " 'source': 'IPOS',\n", + " 'source_type': 'N/A',\n", + " 'tags': 'GEA',\n", + " 'toc_level0': 'N/A',\n", + " 'toc_level1': 'N/A',\n", + " 'toc_level2': 'N/A',\n", + " 'toc_level3': 'N/A',\n", + " 'url': 'https://www.fao.org/3/cc0461en/cc0461en.pdf',\n", + " 'year': 2022.0}" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vectorstore.search(\"a\", search_type=\"similarity\")[0].metadata" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2 Vectorstore" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.1 IEA data" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
titlereturned_contentsourcesnotesappears_inappears_in_urldoc_idsource
0Capital requirements for mining to meet demand...https://www.iea.org/data-and-statistics/charts...IEA analysis based on data from S&P Global and...Capital requirements are calculated based on c...Global Critical Minerals Outlook 2024https://www.iea.org/reports/global-critical-mi...iea_0IEA
1IEA energy transition mineral price index, Jan...https://www.iea.org/data-and-statistics/charts...IEA analysis based on Bloomberg and S&P Global.IEA energy transition minerals price index is ...Global Critical Minerals Outlook 2024https://www.iea.org/reports/global-critical-mi...iea_1IEA
2Price developments of minerals and metals by c...https://www.iea.org/data-and-statistics/charts...IEA analysis based on Bloomberg and S&P Global.Base metals include iron, aluminium, zinc and ...Global Critical Minerals Outlook 2024https://www.iea.org/reports/global-critical-mi...iea_2IEA
3Capital expenditure on nonferrous metal produc...https://www.iea.org/data-and-statistics/charts...IEA analysis based on company annual reports a...For diversified majors, capex on the productio...Global Critical Minerals Outlook 2024https://www.iea.org/reports/global-critical-mi...iea_3IEA
4Selected environmental, social and governance ...https://www.iea.org/data-and-statistics/charts...IEA analysis based on the latest sustainabilit...GHG= greenhouse gas. Aggregated data for 25 ma...Global Critical Minerals Outlook 2024https://www.iea.org/reports/global-critical-mi...iea_4IEA
\n", + "
" + ], + "text/plain": [ + " title \\\n", + "0 Capital requirements for mining to meet demand... \n", + "1 IEA energy transition mineral price index, Jan... \n", + "2 Price developments of minerals and metals by c... \n", + "3 Capital expenditure on nonferrous metal produc... \n", + "4 Selected environmental, social and governance ... \n", + "\n", + " returned_content \\\n", + "0 https://www.iea.org/data-and-statistics/charts... \n", + "1 https://www.iea.org/data-and-statistics/charts... \n", + "2 https://www.iea.org/data-and-statistics/charts... \n", + "3 https://www.iea.org/data-and-statistics/charts... \n", + "4 https://www.iea.org/data-and-statistics/charts... \n", + "\n", + " sources \\\n", + "0 IEA analysis based on data from S&P Global and... \n", + "1 IEA analysis based on Bloomberg and S&P Global. \n", + "2 IEA analysis based on Bloomberg and S&P Global. \n", + "3 IEA analysis based on company annual reports a... \n", + "4 IEA analysis based on the latest sustainabilit... \n", + "\n", + " notes \\\n", + "0 Capital requirements are calculated based on c... \n", + "1 IEA energy transition minerals price index is ... \n", + "2 Base metals include iron, aluminium, zinc and ... \n", + "3 For diversified majors, capex on the productio... \n", + "4 GHG= greenhouse gas. Aggregated data for 25 ma... \n", + "\n", + " appears_in \\\n", + "0 Global Critical Minerals Outlook 2024 \n", + "1 Global Critical Minerals Outlook 2024 \n", + "2 Global Critical Minerals Outlook 2024 \n", + "3 Global Critical Minerals Outlook 2024 \n", + "4 Global Critical Minerals Outlook 2024 \n", + "\n", + " appears_in_url doc_id source \n", + "0 https://www.iea.org/reports/global-critical-mi... iea_0 IEA \n", + "1 https://www.iea.org/reports/global-critical-mi... iea_1 IEA \n", + "2 https://www.iea.org/reports/global-critical-mi... iea_2 IEA \n", + "3 https://www.iea.org/reports/global-critical-mi... iea_3 IEA \n", + "4 https://www.iea.org/reports/global-critical-mi... iea_4 IEA " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain_community.document_loaders import DataFrameLoader\n", + "from langchain_chroma import Chroma\n", + "\n", + "df_iea = pd.read_csv(f\"{ROOT_DIR}/data/charts_iea.csv\")\n", + "df_iea = df_iea.rename(columns={'url': 'returned_content'})\n", + "df_iea[\"doc_id\"] = \"iea_\" + df_iea.index.astype(str)\n", + "df_iea[\"source\"] = \"IEA\"\n", + "df_iea.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "5355" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Load csv file of charts\n", + "loader_iea = DataFrameLoader(df_iea, page_content_column='title')\n", + "documents_iea = loader_iea.load()\n", + "len(documents_iea)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2 OWID data" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
categorytitleurlreturned_contentsubtitledoc_idsource
0Access to EnergyNumber of people with and without access to cl...https://ourworldindata.org/grapher/number-with...<iframe src=\"https://ourworldindata.org/graphe...Clean cooking fuels and technologies represent...owid_0OWID
1Access to EnergyNumber of people without access to clean fuels...https://ourworldindata.org/grapher/number-with...<iframe src=\"https://ourworldindata.org/graphe...Clean cooking fuels and technologies represent...owid_1OWID
2Access to EnergyPeople without clean fuels for cooking, by wor...https://ourworldindata.org/grapher/people-with...<iframe src=\"https://ourworldindata.org/graphe...Data source: World Bankowid_2OWID
3Access to EnergyShare of the population without access to clea...https://ourworldindata.org/grapher/share-of-th...<iframe src=\"https://ourworldindata.org/graphe...Access to clean fuels or technologies such as ...owid_3OWID
4Access to EnergyShare with access to electricity vs. per capit...https://ourworldindata.org/grapher/share-with-...<iframe src=\"https://ourworldindata.org/graphe...Having access to electricity is defined in int...owid_4OWID
\n", + "
" + ], + "text/plain": [ + " category title \\\n", + "0 Access to Energy Number of people with and without access to cl... \n", + "1 Access to Energy Number of people without access to clean fuels... \n", + "2 Access to Energy People without clean fuels for cooking, by wor... \n", + "3 Access to Energy Share of the population without access to clea... \n", + "4 Access to Energy Share with access to electricity vs. per capit... \n", + "\n", + " url \\\n", + "0 https://ourworldindata.org/grapher/number-with... \n", + "1 https://ourworldindata.org/grapher/number-with... \n", + "2 https://ourworldindata.org/grapher/people-with... \n", + "3 https://ourworldindata.org/grapher/share-of-th... \n", + "4 https://ourworldindata.org/grapher/share-with-... \n", + "\n", + " returned_content \\\n", + "0 ', 'subtitle': 'Total area of forests, savannas, shrublands/grasslands, croplands, and other land that have been burned as a result of wildfires each year.', 'doc_id': 'owid_2201', 'source': 'OWID'}, page_content='Wildfire area burned by land cover type')" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "documents_all[-1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.4 Chroma vectorstore" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "# DO NOT RUN AGAIN (persisted)\n", + "# vectorstore_graphs = Chroma.from_documents(documents_all, embeddings_function, persist_directory=f\"{ROOT_DIR}/data/vectorstore\")\n", + "# vectorstore_graphs = Chroma.from_documents(documents_owid, embeddings_function, persist_directory=f\"{ROOT_DIR}/data/vectorstore_owid\")" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Document(metadata={'category': 'Access to Energy', 'url': 'https://ourworldindata.org/grapher/number-with-without-clean-cooking-fuels', 'returned_content': '', 'subtitle': 'Clean cooking fuels and technologies represent non-solid fuels such as natural gas, ethanol or electric technologies.', 'doc_id': 'owid_0', 'source': 'OWID'}, page_content='Number of people with and without access to clean cooking fuels')" + ] + }, + "execution_count": 34, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "documents_owid[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:chromadb.telemetry.posthog:Anonymized telemetry enabled. See https://docs.trychroma.com/telemetry for more information.\n" + ] + } + ], + "source": [ + "from langchain_chroma import Chroma\n", + "\n", + "vectorstore_graphs = Chroma(persist_directory=f\"{ROOT_DIR}/data/vectorstore_owid\", embedding_function=embeddings_function)" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2202, None, 2202, 2202)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(vectorstore_graphs.get()[\"ids\"]),vectorstore_graphs.get()[\"embeddings\"], len(vectorstore_graphs.get()[\"metadatas\"]), len(vectorstore_graphs.get()[\"documents\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'ids': ['04f2d076-17b6-4c13-b72e-e7385f538328',\n", + " 'a327220c-3eea-48c0-9915-867e50e7910b',\n", + " 'c85dbce8-2e50-4bfd-80ae-aff70f8091f7',\n", + " '0e207e8a-576b-4f8d-bd64-5cba792c0387',\n", + " 'f0bf8a14-a854-41cd-a3f7-9548b4b6055f',\n", + " '12909983-4317-4a61-8516-423253460309',\n", + " '0344f04a-db80-47ec-baa6-ceb9b3c5a79d',\n", + " '36efcabf-5503-4a5a-a406-052eddb71440',\n", + " '41f5471b-1c9f-4b2f-bf23-833949ae8244',\n", + " '6451412f-dee3-4ffd-9582-6b1d1667fdbe',\n", + " 'ad79f9e8-4052-4e0e-bb50-88adce044928',\n", + " '6a9af2e6-f4fd-4cc2-9887-4115027a7749',\n", + " 'c3782010-9ca2-4664-926d-1c6a48c4a59e',\n", + " '939838ad-604a-4d01-829c-f02ea4fd6772',\n", + " '74d2a9e5-9234-4135-9d2b-403d4065e10d',\n", + " '9a29def5-e4b8-450e-9e5f-a6b853c8676f',\n", + " 'f0bbf498-3360-4871-a90c-e1229a2f3ce6',\n", + " '86c1ab95-0acf-413e-82f9-362cf3d5a559',\n", + " 'ac01e197-e9b1-43a1-90dc-ee4d9e05c818',\n", + " 'a7342034-f887-44a7-83b1-0c5f964e8280',\n", + " 'e2749502-fd99-4403-b10a-e364ee9e759e',\n", + " '1a16dbcb-7a84-4a01-a023-efda5e817fad',\n", + " '02083321-e271-4f9d-803e-f96ebafa847a',\n", + " '55872d50-12fa-4ad4-a7c5-bee691c727b9',\n", + " '5c0dc54a-b8e1-4afb-ab9e-9ff8cee77237',\n", + " '91993d9c-54db-43ce-bf9a-bba61678bbbb',\n", + " 'b97cb2b5-cd9a-41ff-97f2-12002d114030',\n", + " 'e460d534-aa21-4535-8b10-db2567bab0fc',\n", + " '763dc259-3e7c-49c8-9b8b-ec464003a767',\n", + " '6ee5092e-42ac-4a44-b827-2f2104e03811',\n", + " '88f78935-1564-4e09-9302-c9c122cf5eea',\n", + " 'ebd0a26d-a515-489e-8e00-256035ccfb3e',\n", + " '60c5eb10-df2f-4b2b-8413-6d1f1106f1eb',\n", + " 'b1089418-7dbf-4d00-8484-bbc3a43a504d',\n", + " 'f71a9e62-fdad-4a8c-b7b8-10ff45224842',\n", + " '4acbe30f-5d63-48ee-9fe0-c502534c7730',\n", + " '21512c35-e4e6-4aac-95a9-a2c2bd69aa8d',\n", + " 'a34d49c1-9f4f-49eb-8d3c-632c3afd45cb',\n", + " 'a286d982-8e59-4fac-ae0f-cacc8d920a11',\n", + " '9b59363f-46eb-4f15-bd63-e9b5ab58f948',\n", + " '59a92838-2ec4-44e0-a845-2338519ff870',\n", + " 'ab040bd3-0e67-48ba-8cf2-6f1f6110f768',\n", + " '8e7065a7-bd8e-480f-a99a-c8dda1f24639',\n", + " 'c9bbfbc0-f375-4aeb-b5bd-a207d5ac8af3',\n", + " '7dd1c3f3-d3f2-4544-a1be-4f0106e392e2',\n", + " '7116b0b3-6db5-4e0e-bc4e-d8750c8c942a',\n", + " '0c4c2e2b-8ceb-4506-a738-73e1635b9436',\n", + " '5fb9b29d-a5e6-42d7-aabe-a4bdec3938b5',\n", + " 'c051b64c-da4a-4302-93c4-d7fc1f11a13e',\n", + " 'a28792fc-4ead-4877-9c86-15c52211aa35',\n", + " '4dc3020e-b469-49b3-924e-85c9d908fc35',\n", + " 'ea508672-7cab-4470-bd8d-ce802376e568',\n", + " 'b43e29eb-08ce-4b1f-ab8c-e3c1df23ca0f',\n", + " '6203f927-8c64-480f-94ef-9e726fd059d0',\n", + " '9cef3f25-de1c-4874-b0af-2bd4759a0ccb',\n", + " 'bd1405f2-0cac-4727-ac6e-5958498908ea',\n", + " '030f427f-f93d-4bde-940e-e97f0e6c868f',\n", + " '6a5861b5-afc2-4dea-aacf-83aa12d3f328',\n", + " 'fa97482f-c928-4a89-8e0f-6547f0ee04ac',\n", + " '715138f9-1a07-4740-94fb-397897562de2',\n", + " 'bc5ae702-ae57-4cc6-b352-b5be0b1f959d',\n", + " '7ad4a85d-3984-4e17-979a-012ba2a5ed7d',\n", + " '7fed1d42-62cd-423a-a739-2a2b84990af6',\n", + " '4bec9d46-351a-466e-b6f4-f0ee7c2f09b7',\n", + " '081bca11-ecf2-4193-b77d-9c031f213193',\n", + " 'bf6f94ae-6961-409c-a1d5-dc03b74235a6',\n", + " '5c1757da-7765-4f79-b8dd-1fd8120e77a4',\n", + " '316970ac-770c-4af6-83ba-758a3c540fd1',\n", + " '92fa358f-1035-4804-914d-4c59b39ff45e',\n", + " '021060f2-2d61-4ea4-9ee4-675035b08515',\n", + " '8a0a2deb-0854-417e-b569-a67472a7cf21',\n", + " '6679415d-0136-43b7-a5ba-4ce01aa65d6f',\n", + " 'cc44374b-164e-4ff3-b220-1e90bc8b9c79',\n", + " 'a1bf46b1-83f0-44ab-9166-7ba5789356eb',\n", + " '4b72cc25-c6f0-49de-9f03-d1d9eb3d0236',\n", + " '52675ea6-879f-4da6-afcb-081d0f229f2e',\n", + " 'b8709038-e840-4c22-bfbf-3473c2550f87',\n", + " '1b5b2d71-4298-4d57-af1c-4178ee20ae82',\n", + " '6c9a5743-6953-447b-bc80-2c86a78bcb21',\n", + " 'b7da6074-fa8c-439f-8126-803e9f912201',\n", + " 'a4f7250b-cbe0-4737-a22a-2e804fce9b19',\n", + " '94aec1af-d2a4-400e-9a3d-fe1ff69fee76',\n", + " '9980ee01-7685-4391-96f5-328ecc2950cf',\n", + " 'd72ce269-c607-4f13-a14b-aa2c165b5f5a',\n", + " '91b6c916-093b-436d-a71d-50c0ed03ddfe',\n", + " '71b94d80-4cbe-48e8-a2dd-69820a5840eb',\n", + " '97d33845-dadc-4895-bc6c-8bd8330cd761',\n", + " 'cd3bf6f2-fa75-4a79-a91f-4bc72226db8d',\n", + " '554170d1-2caa-4722-ac44-8bac5755d29c',\n", + " 'df2f781c-3826-4bb8-a0ad-49207f5fa470',\n", + " 'a521bb10-bf15-4f24-8cc7-a857c1006b4e',\n", + " '5f839e49-3230-45cc-881d-144537b5d8e3',\n", + " '87f4c909-e59f-4eec-a7ef-a3feff97b9e7',\n", + " '0315ded8-ecec-4fb6-b53e-9d9cb8dfa004',\n", + " '1389a5f4-94eb-47f6-b18b-7e8ddc72c34c',\n", + " 'a3e3a3f0-2038-4735-9804-25169e2091a7',\n", + " 'd9563ede-4f77-49ad-bb1a-87e979c7acd2',\n", + " '87e4333b-95ef-4e43-94b2-732c62f35e5c',\n", + " '8fd63dc9-1c4e-45a2-8ed0-ba3a1a82331b',\n", + " '0d04165a-dc00-40e2-8b45-1c71b4ff930b',\n", + " 'd8dfcd7b-9cce-4ad9-bcd0-7ab19557b060',\n", + " 'bcc2f6cb-ae4c-43b0-ade8-ba1e93ed2d68',\n", + " '55940f2f-93a5-4146-a9f4-4c7dedb07599',\n", + " 'dceacb0f-b8b6-4efd-a85d-2c274cd42e50',\n", + " '70bba5d6-62ef-408a-8cf2-2bb8a26a0028',\n", + " 'cc984998-6729-4fa6-bf79-47a0bbcb3275',\n", + " 'd0f591af-9a8b-49cd-b43b-3e4fd910d826',\n", + " '88666708-2808-44fb-b3d3-53f579f5a085',\n", + " 'f644a404-e6e5-4d69-bd44-99d31f8c5af3',\n", + " 'f0d881de-79a3-4778-9887-f2c7848cb456',\n", + " '7ab37de1-923a-44b8-84a5-b2281db22cc5',\n", + " 'd8aed4bc-00b3-4b11-8088-244baba6af54',\n", + " '7eff5f13-8043-4778-897f-384c3fcbca94',\n", + " 'c4ba5d25-408c-4c00-9ca8-2f762f32f1bb',\n", + " '1b0f26fd-6a42-4f44-bd4e-908bc170232c',\n", + " 'a0e144a5-5365-41a6-8a06-f572ed0451d2',\n", + " '90a7424a-bdf8-49a3-96f5-e9be5036974f',\n", + " 'b19c933c-32aa-4090-8fd1-be6be8cefab3',\n", + " 'e2e7f4c5-c29c-4c4b-883d-df4b642c17f9',\n", + " 'f531ddaf-5bd6-4161-867b-e3a28278b509',\n", + " 'a8ac6e16-40d1-4acc-8444-6c1ebb240f8d',\n", + " '28cd574f-bb88-4d2a-a855-2365303396cc',\n", + " '53dc5379-40bf-430b-9072-a1eee7bbd08e',\n", + " 'bea2b07a-2764-49d7-bc1f-f1e436b6e721',\n", + " 'c793d68e-8316-488e-ab18-9843048d3b7c',\n", + " '6e926cff-0a52-4564-bd98-573eb7794b1b',\n", + " '7341aac5-753b-4d56-a28f-80cc95ef9c14',\n", + " '17695c54-5c32-4cd5-b0b8-f67dde73b381',\n", + " '59df9c42-7285-43cf-8120-ba2872fa5d26',\n", + " '95da63ca-9994-425e-b020-5bcf54bd529f',\n", + " '1aa88ad6-eca6-4dc8-bd12-f0e9226cc84e',\n", + " '0a7e50cf-fb35-4253-9b57-38d1b4e898c2',\n", + " '36e7b1ed-b2ed-4de3-a39d-718cb4034f23',\n", + " '1cc953dc-7f70-4761-acf4-84a3ea50f0e0',\n", + " '76637924-ee7f-4e66-8f02-9dbf1bf0da75',\n", + " '206eb5e9-34c6-41f8-aec2-c7cd580dbc14',\n", + " '6ed92fd1-e5ab-48d5-b707-8d109070bac1',\n", + " 'd2394611-9a86-4ce6-a365-b3cdb7f822be',\n", + " 'cb5df3b6-402b-4eef-99f0-cbcc726f3074',\n", + " '4f837302-51d1-4007-a546-45e292be9c54',\n", + " '696360a2-8d57-4a26-a8c1-5d2c8d59e04c',\n", + " '30ee4ce6-7dd2-4f85-9b32-a9bc0b2a0a5e',\n", + " '36604c51-8f62-416f-aebb-61cd0b577a60',\n", + " '69e475e6-3476-4684-8ee1-9aa83c2f49cb',\n", + " '1c2dadea-9273-406a-b7af-5e4d97009a25',\n", + " '4f2c5ee5-08ba-4457-9491-25bd7a15d1de',\n", + " 'f5bc2edb-8dcc-4bb0-b968-eb10d00eaeaa',\n", + " '355e819b-1b79-4f09-a6ad-4c25ef0bb1a3',\n", + " '8baf8afb-d8a2-4fb3-977e-e1ca4ea1c73c',\n", + " '9cf6ae73-2a21-41ca-89dd-fdda2d986c4c',\n", + " '2758ea34-2551-4d65-8f98-1fcfdcd9e1d1',\n", + " '2350bcdd-6068-4d97-b86d-1098c7664bf0',\n", + " '4c1135c3-1c6d-45b1-bf40-920f1efb445e',\n", + " 'fed7ef52-31b0-40a2-8909-c46e3f1e4d6c',\n", + " 'b603be9b-f501-43a2-b91d-11fa9e3754b0',\n", + " 'e07c99d8-1847-4742-ba53-0c2b905a3cae',\n", + " 'b6f302fb-4d35-4ffd-9cc6-7a6ee014c9e6',\n", + " '37c8d18a-d0ce-4a28-9429-f24bc6f36006',\n", + " '0aec2b27-f789-4d60-8c53-594a8930d002',\n", + " '8bc2d8f0-f675-4b63-806a-3998e8be9363',\n", + " 'f82d5a73-f819-453f-85a3-2a9dff91ef5d',\n", + " 'eec64cd3-2a0b-4fc5-8631-7ead7b7bb659',\n", + " '8a1d4211-be03-4069-b941-c2977db930ca',\n", + " '78e68c44-0aa9-4a29-b528-357205cf99fc',\n", + " '9f257ca3-ece6-4d17-a13d-674b34080c01',\n", + " 'f351a02f-6d96-431c-b99d-19f6a1553dca',\n", + " '5bc3953d-79c1-4f9e-84b5-c1fae1fe5951',\n", + " '41f33bfb-9f4b-4941-8407-ef38d4a59d62',\n", + " 'aaa208d2-e2e2-4eaa-909c-7e69a9f92a76',\n", + " 'fcbd8afd-b7b4-4474-80ac-ee142dfa292d',\n", + " 'eed44217-cef7-4cf6-b5d8-e92dcb216f73',\n", + " 'e994316c-8eeb-49a8-aaf0-81e663a27bcb',\n", + " '6279159a-33c2-4263-86c9-92c9935c4170',\n", + " '349a9420-5b35-4add-9143-90011c2b2fa5',\n", + " 'bd01b16a-f4e8-4d70-8156-89f42580a269',\n", + " '5443ea0e-d499-40c0-b91e-de9e43c9ea32',\n", + " '76552ca6-9c56-4f30-a2e1-7f76b81eab6a',\n", + " '42ada531-8120-4b65-ae49-9aae92251b69',\n", + " '8456cc6d-4411-4c76-b678-5dc718c4a38f',\n", + " '4f59210c-e8f5-4a7c-914f-c48c5539e332',\n", + " 'd271f5d3-f3e5-46d1-aa3a-59703d0d8ba4',\n", + " 'd62cd294-228f-44e6-a04f-9c57db0007fc',\n", + " '0fbf461b-d999-4174-81bb-12942f1f7950',\n", + " 'ced3ec60-ec3c-4b26-ab2c-3172df166ff7',\n", + " 'f6c02596-dba4-465a-a9e2-9602934210c2',\n", + " 'c267d936-76ce-4e31-9678-3fb2fc60f2b0',\n", + " '7c9d7dba-94be-4abe-a685-61797cbdf645',\n", + " '469e796d-4d13-4df6-a797-6d56808637f7',\n", + " '9438b476-8e00-4426-89c0-b93c7757ca59',\n", + " '5cc2b276-93ab-4762-8d92-47bb87c5f2c1',\n", + " '5d188807-bfb2-46ce-833b-a1ca437c2d10',\n", + " 'c0b2508c-fe64-4b76-9bee-998f52f4d0dc',\n", + " '827e47e0-18ae-493b-aa04-87d598526aa2',\n", + " '39337e41-b522-44c7-bb89-864994347131',\n", + " '7d950126-13c6-4931-bc6b-0207f6d0314b',\n", + " 'e05dbd74-20bf-45cb-bf31-78ba5dee97b2',\n", + " '049c1ca6-2912-4316-bae8-73d100688e50',\n", + " 'b8a698ff-a7dd-4383-9c34-87ce09813595',\n", + " '362e25b0-5875-4119-83ff-a38be7a1a582',\n", + " 'c6be84fb-073e-4704-adfc-57274827c2c3',\n", + " '8cdb2ccc-3b55-48bd-9301-ba5ec6286ff8',\n", + " '41acd4c3-9cf1-4e37-9b27-c50edc7ef3ef',\n", + " '197b6ab6-846d-452e-bc62-76331b877fbc',\n", + " '03091b62-2307-4541-bfd3-a5090ea94dd5',\n", + " '47b8d61f-b61b-4355-bf1c-9e0ee237de37',\n", + " 'a43236f5-983c-4a8d-b617-20df1a90d9bc',\n", + " 'ea255370-dca4-4688-b8ed-472f990327c4',\n", + " '4b037e1e-b975-4cc0-a043-be2eec8a299e',\n", + " 'aabc2422-2f09-4210-a62b-35a31c3378a2',\n", + " '5e9bd9fa-8d4f-446d-bb0d-31df6baf350a',\n", + " '5b5bd77e-3d73-48ce-9235-bf018be6ccfb',\n", + " '2e55607d-f146-4273-8ff5-4621d678d3f4',\n", + " '0935b77a-ce49-45f2-adc5-d6ac69172a8a',\n", + " 'c2de9d5a-e784-4e26-a8e4-edc751a1f207',\n", + " 'f752e046-5fa9-4280-a298-e50e8438fdd9',\n", + " 'a1230ebe-3ee3-49e5-a651-aaebacb1b71f',\n", + " 'e09212d1-27e4-4811-9b6b-d4ff6f916115',\n", + " '279c7478-1f80-42aa-8adf-be3e075e9cf7',\n", + " 'f758fd53-0d77-40ac-aa46-f45990eb7d4a',\n", + " '116d0a9a-7198-44c2-9375-3bd81b4ad5f9',\n", + " 'c10b5049-a21f-483d-891c-7a25ee0b8eca',\n", + " '5a41e2f1-56ed-4b28-8944-3211cc53cf50',\n", + " 'f9c11de6-668f-480d-ab1f-05ea3d6d7a69',\n", + " '5e02b1d2-ca9b-42be-9f7a-83b8efdbae07',\n", + " '145878de-ce54-4493-a293-23bfbe8eb7ea',\n", + " '754648bc-bfbb-4cdb-bda5-0cbededa7044',\n", + " 'f3146130-38f6-42d8-b53b-316d4249f1fe',\n", + " 'cc54b5ff-f7b5-49ba-b076-439a8c5ecc94',\n", + " '0fa8b3a8-453f-49c6-b22a-ed0000d7a09c',\n", + " 'ed3ada6e-3f9d-4ee5-a321-48f312fa8a5b',\n", + " '71af0704-01f8-41f1-848d-3394b4cd80ef',\n", + " '8e49fdb4-386d-43d0-978a-b6a97f624302',\n", + " '42bf9e61-2d0c-4b60-85d6-1148d81b7d33',\n", + " 'd20497b0-3c7c-42ef-b562-23c1b444c88f',\n", + " '9617c21e-2042-4da5-b087-8d2cdf99d9c7',\n", + " '1f4df170-543b-46c8-ac0c-6fb99236391f',\n", + " '06a0b840-ba7c-4d7d-a660-3d355c867950',\n", + " '33bb1986-1e56-4e63-8a63-70b3cc5e09df',\n", + " '81c415d0-3b47-4198-802a-a63f08f4f4b9',\n", + " 'da6bd0c3-556a-422c-9076-64a325f49713',\n", + " '988db827-4559-4d78-b2db-682fe608a627',\n", + " '5a1138a1-16a0-4971-9b9f-96e575b047b3',\n", + " 'c65a1ede-d9e6-4276-bb78-4df5064b4c9e',\n", + " 'f4b25c74-f6e6-483e-bf25-fd439693a23c',\n", + " 'a8b9843e-d871-4806-afe0-e4cdc51dcc16',\n", + " 'f0bf0617-e606-4aa9-903c-b3290081f047',\n", + " '1f7ddd69-5642-4075-9845-9aa919f04026',\n", + " '95a120dc-ad26-4d17-8437-a9435dd6c2c5',\n", + " '1c4c81bc-c66d-4dd6-be80-c7d7ff098131',\n", + " '12aaafd4-1d9d-4b0d-babe-0e852948aacb',\n", + " 'cc4fe487-be4f-4a97-802f-44f69cdc9583',\n", + " 'da0d94fc-8322-417d-92ba-0aaad1771d98',\n", + " '8dbaa7ec-6106-4742-b0cb-1d005e461a12',\n", + " '0f5ee86e-ccf5-48b4-86fb-a4d4fa294c65',\n", + " '7b133aa5-a736-4637-92f2-24c4f620d357',\n", + " '6641bf0e-f4f4-47e2-b94e-d90185f17d64',\n", + " '4b4d49ff-d9b2-486a-ae89-732bb32147df',\n", + " '693ddadb-f5cb-4888-ba6a-d599f29df0ce',\n", + " 'a531eb63-846a-4d7e-8836-bb2cda1d82f5',\n", + " '2a483dbb-e2cc-4e54-baa0-8aaa539b413c',\n", + " '81ad68f8-2e67-4b12-8462-701dc623e5fd',\n", + " '7f4ea6b1-5a81-4636-9ba3-a88a2fb6f0fa',\n", + " 'f6f9c64a-f018-490e-9b95-598406cba648',\n", + " '1a0375c6-cb26-4347-b7c0-1ccc20fcf9ce',\n", + " 'e99741b2-eb28-44fa-9d41-0d981ef7941d',\n", + " '6bd0c7d5-0f5c-4e98-ba98-5712f8e352aa',\n", + " 'cbbcc439-908d-49c4-8e20-831129065297',\n", + " '7f531bd8-1dcf-4f9f-8a18-4a47e81f0ff0',\n", + " '665623db-ba33-4fb0-99b4-5158dd12df32',\n", + " 'f6e3893c-a70f-4acd-a653-4b527a165824',\n", + " '82c412e0-fce0-4887-91e7-a00eea0232a2',\n", + " 'edad3acd-5a78-4b6f-a26e-e196b4354309',\n", + " '36b6871e-3057-421c-b857-03c3436ceeb9',\n", + " '1c6d1e83-49d8-4603-974d-980b07db86f5',\n", + " '77b68013-600a-4eb1-b6dd-b88c1c88df3f',\n", + " 'd6b0862a-c492-4c5b-9699-034d0e91f27d',\n", + " '8531f41b-21cc-454d-b60b-7fd9462f4ff9',\n", + " '2337d068-da7e-40ed-a5b7-21fd81b3c0f5',\n", + " '1e065a4a-9af0-45cc-a20e-7d164965ae9d',\n", + " 'a604b469-e584-4233-bebd-cd0a998dc3ca',\n", + " '8234e846-5d56-452c-9102-a21e7abf3940',\n", + " 'dba25d3c-26f3-4d84-9b50-c869b60249b1',\n", + " '7da0085d-4905-4223-b23b-131551927918',\n", + " '60794e48-a4a1-4b05-a352-d5f09599537c',\n", + " 'ce48cc9c-d2f2-44b8-bfe7-b524eeebe3f2',\n", + " 'a05d98ce-25f4-41cd-a153-f683d1671803',\n", + " '4b80327b-aba6-4d28-98bf-bd653d96af09',\n", + " '2dcfa9ac-5c0b-4681-8f43-c01114234f42',\n", + " 'cb0b749d-9857-45f2-a435-859bf301c91c',\n", + " 'c7381a30-2d60-4e9b-b6a7-a0f12b133668',\n", + " 'fb776570-0e93-4ca6-b06d-d09d2d755628',\n", + " '48fc8770-04a4-459d-9fa5-2d9f046eec2a',\n", + " 'c8bef189-d914-4490-917f-2724b7fdf4b7',\n", + " '6a3b4781-2ba4-4001-9082-e7e10b680f5e',\n", + " '38301775-6bfe-4603-813e-5f13110dbcf4',\n", + " '4293fd8e-0419-475b-8793-c3e810623bb1',\n", + " '270a8935-9a29-46f1-968c-6cef2b5684a8',\n", + " 'af54beb0-e6ce-4d15-9855-18b52afad240',\n", + " 'acd26fe8-b3d1-433b-8414-58f7a6af739a',\n", + " 'b4ac37bf-ca77-4056-bd2e-f095bd51166e',\n", + " 'ae5812dd-78f4-42b6-9234-f5e4e6d68bd3',\n", + " '0bc79e8c-9f76-49b9-9456-8fd8b19415fc',\n", + " 'c20a465e-b6fb-493e-8ef9-0c8ae95f6f2e',\n", + " '2c768186-86f1-4de8-ba81-f95e8b972c3b',\n", + " '1ee7b3ff-c87d-4d3e-bbe7-6a70dc196b65',\n", + " 'f504b91e-1f11-4b04-af5e-48d20f3829b5',\n", + " '7be71de4-bdd2-4b4b-9922-9d8236868758',\n", + " 'bd8e0dab-4ab6-45b9-a389-6bd21d83f730',\n", + " 'd5de7930-d64a-451d-9680-d4412684479f',\n", + " 'eeb9938e-cd75-4b85-8f9c-4773e4983934',\n", + " '7b4171e5-c1d0-4f33-8347-17f4b3a70fde',\n", + " 'b918c5f7-c47e-4f0b-bae2-4ca178f688c2',\n", + " 'c1814e8a-9894-49ef-bce2-c9c1fc71a860',\n", + " '35d3ebe1-31d5-4148-a760-6176425221bc',\n", + " '166d7d62-b4bf-4bb1-911b-c48ba4c32124',\n", + " 'efa014d1-74b5-421e-bf75-0f78f3e5af7b',\n", + " '03c654dc-1a7f-4b84-91e2-05d2bb8535aa',\n", + " '84d408c0-2b71-4e92-a121-e601fcc09881',\n", + " '08a5ca72-6f44-40e5-9c0c-ab2402557628',\n", + " '9491b75a-f70e-4351-8ac8-3ff480282657',\n", + " 'ca030d47-e054-4c8f-801e-d5f295cb0076',\n", + " 'f82aa672-622b-4f95-84eb-c1a95eebef94',\n", + " '44bd8112-93c0-4cd1-ade9-7c2e158e3276',\n", + " '5cda9ba8-a9c1-43f2-9c92-c73acf633359',\n", + " '92eeae19-472a-41e7-acef-29d685c23777',\n", + " 'c38b5bf0-f408-4860-9553-34e1eb4b3018',\n", + " '7b1dc790-e3c1-47b2-9a5a-e535d569c9de',\n", + " '2856cc8f-83b6-4a0b-a455-e9eb24d594f2',\n", + " '1ad213fb-b1c2-4b96-a649-300ba5181dff',\n", + " 'b7a6b6c5-31db-49c7-9460-22a137f5ff02',\n", + " '6056ce90-c171-4c9b-a9dd-387b9cbd9c75',\n", + " '6ba7fcd5-2cda-4f76-bac4-60afc8c59aa2',\n", + " 'cd376b13-357c-4408-bc7b-fefb66ffe1ec',\n", + " '642fa1f0-3f78-4050-99b6-a57c6b3d12a2',\n", + " '5da5a62f-f495-493c-b476-5f62f07cd73b',\n", + " '697eb608-920b-483c-9c51-8096f939f6b1',\n", + " '62f37a55-a982-456f-a916-f949596494e6',\n", + " '97869cbc-496b-4423-9920-e863a4a442fb',\n", + " 'c39fa628-5ceb-41e0-9188-e2e98b18bbb1',\n", + " '55f59ce7-115c-4765-b039-c5a5bd509426',\n", + " '315859d4-af8f-4e65-ab17-697a78ea3663',\n", + " 'bce7e64e-f6e1-4cc0-832b-fb1e842ec538',\n", + " '4832f160-eb69-4411-97c2-ca8617f95871',\n", + " '04e41d6a-49c6-4965-aa2e-9a4f1ba6c983',\n", + " '7d6c7ed3-8697-455f-982c-8074724012f2',\n", + " '62bf9b71-5ce9-4794-964c-74217554857e',\n", + " '873adb6b-0f41-4c50-922d-f95c43fd55fc',\n", + " 'd7e7ee10-60f6-4e85-89e5-e8bf17dea279',\n", + " 'adbd6f65-15a6-4cd7-a80d-25017208e21e',\n", + " '731fa642-26fa-4062-89f7-51e8ad6c357c',\n", + " '76eeae62-11dd-4bf0-a911-7f9e033c7198',\n", + " 'ed4b9683-d0b8-4cea-9682-d5013a35b9eb',\n", + " 'e80d1c97-9ed0-4933-b8de-e4b6d292ec6e',\n", + " '0339e70d-1e31-4edf-bd49-9cdd16d0daa7',\n", + " 'b4e9b647-6616-4a9f-a3e7-c8b637b1efe4',\n", + " '1faaae4d-7230-4216-b70a-9c56f152cd95',\n", + " '25a95bdb-d342-4e79-8b0e-09e623c44b51',\n", + " 'bd59c233-b704-4301-bc89-6cfec7d9e2fc',\n", + " '715a216d-687b-4b65-92f8-8a7c5030b2df',\n", + " 'b7b4c34b-b4ae-4cbc-9801-5408b17d3eaf',\n", + " '961bc054-a6a1-4fc5-9c85-d00fdb36ff97',\n", + " '0986b02b-d313-47c7-9ddb-b087174d2e17',\n", + " 'caabd2ae-dade-49d0-875c-e9dbabe1f4a0',\n", + " 'db344c68-a34c-4819-b22c-c56dad3b0f37',\n", + " 'be392be8-9c7d-41c2-bfca-3705ec8d553b',\n", + " 'd46a393b-ca1d-419d-a5f4-f381e410b6b9',\n", + " '9014ca0e-56d6-4d51-90d4-cb60a884dcf1',\n", + " 'a5325766-1d6c-4d74-a4df-a3ad487936bd',\n", + " 'd9f857a5-b19d-490b-9943-6942b299cf7d',\n", + " 'e3c54cba-971b-4b3f-85da-a6841d9f0c2e',\n", + " 'b2ce59e3-3ef2-4c54-9c61-9f303e57b9f3',\n", + " '2646cc92-961e-4404-8f6b-f93eb9cc10a4',\n", + " 'dbbc3749-0984-431c-a283-eed98b3cbb7e',\n", + " '1ee589f1-6c24-44e6-929f-e80cb941735a',\n", + " '86c6a651-a5aa-454d-8bd2-e31a1c1a528d',\n", + " 'f0cb4123-9768-4bb3-ae24-2ddbfab26ced',\n", + " 'a350724a-4042-41a6-845c-4c6a75cbaee3',\n", + " '42d10e58-3443-4768-936b-bafae86dfa74',\n", + " '1b062930-a6bc-4b79-b80d-2db5dcf3e3b4',\n", + " 'a5d83c11-2d43-41d5-ab13-94141d947572',\n", + " '48a78afd-2cf0-44b6-9326-7abaec510d52',\n", + " '528b1f90-10fa-45b9-a501-573ac797fb36',\n", + " '930a09b9-1d5e-41e8-930a-aed1b5da2969',\n", + " '1b7a34d9-250c-46ad-a971-f1d9f7e2c9ee',\n", + " 'd1e864d2-ffc1-445d-ada3-f55d511d95dd',\n", + " '7d07f4bd-9985-4a83-98e1-c12e2aa39cb7',\n", + " '474c003b-8a46-4c8d-bd48-dbc541f34791',\n", + " '91cc8bcd-f305-4cd3-90ad-088fad45af1b',\n", + " '4552f1a8-b00e-456b-b067-975b12f540c4',\n", + " '6b5f51ca-26df-4d15-8e8b-2e9e16f6f7cd',\n", + " 'e9e80e92-4945-428b-8008-2b23d3412498',\n", + " 'ec216eab-26b8-4633-b4da-4f22b7b4b32c',\n", + " '9b3c9089-2a05-47ca-b6de-a8178d142ef6',\n", + " '7e8f9823-9708-4f82-b603-4ab0a391cc65',\n", + " '67074672-5a91-46dc-a999-a074e8d23d5b',\n", + " '96be0574-fb86-4ca1-a0a8-911b870dd672',\n", + " '48e8a6c8-339d-403b-a462-1b3968f6379e',\n", + " 'be423cde-6cb3-46f2-a412-ff064c87bff2',\n", + " 'de6ce45e-caac-4fbd-90f9-7e4297d0cc6d',\n", + " '1670efa8-90ae-41cf-b963-ca844993d673',\n", + " 'f93cc385-1678-45df-8096-322801daba8b',\n", + " '6101f0af-6a97-42c1-a623-3880c553afac',\n", + " '40caf2f9-8a92-41cf-88ff-7398d5d49d0b',\n", + " 'd78d7b03-995d-4398-966d-6d8a61fd8148',\n", + " '24f2e89f-e87a-4ef4-bbb0-2b33bfbd9305',\n", + " '98aca1a5-49c0-4f28-a826-c3bf2c1347ac',\n", + " '07a3f57e-1a93-4d84-a4b3-2f94b3337414',\n", + " 'c9380959-e70c-4ec5-b939-5ef8d0fc774d',\n", + " 'fbabe43e-c0da-4302-8e26-8ca70538cde7',\n", + " '5106cf58-4e0e-43b0-9d5c-13bc3d17fa63',\n", + " '4f591b3c-2e0c-4b0e-bf16-bc1b2971d2a7',\n", + " 'c74bf72f-d7e0-4dae-84cb-14b0d8807077',\n", + " '8f1abb87-fd40-4678-ab72-2d0324dd1347',\n", + " '6c172641-3589-43f4-aeb8-e36564cccc85',\n", + " '7779a9e0-ed30-4f8b-a510-e307b947a59c',\n", + " 'ad947272-8792-4189-81c2-8767f67a0103',\n", + " '208020ad-49c7-4a81-b2c6-9b74990f745e',\n", + " '25b9d165-3413-4c91-96ee-0f36072cd43f',\n", + " '67a82ae0-d879-461d-9909-2b8cccad6b45',\n", + " 'bc3af743-ad5d-4746-a66f-d013d2ad97f0',\n", + " '14687e55-56d9-472b-81cd-e59941928e95',\n", + " 'd55e3a44-abec-4f59-952c-57621ea9ad2e',\n", + " '90c2348d-2427-4e07-af35-99d61ba5572d',\n", + " 'cd042b16-c65a-4b1f-ac0a-30aa4e810816',\n", + " '416c6dc9-fa34-45c8-b7d1-fe9e79451eb1',\n", + " 'efc38e29-482e-4fab-bcda-ec3f25ef3d47',\n", + " '8715767b-cf49-45e4-a198-4e989d871d67',\n", + " 'e1a18a54-d14f-4212-ad97-31e1b85cff7b',\n", + " 'b9c49c38-9ad9-495c-8645-7856dc4253fe',\n", + " '9d782f5d-1313-4374-8a9d-a953b57dc272',\n", + " 'd6b78025-3d48-4708-a8f6-d5d8aea84368',\n", + " 'b8ae8acd-a3c9-43ab-9d87-883ebc85b4da',\n", + " '39ee7a5c-643b-4a48-a279-74835334abaf',\n", + " 'd6f753b4-b1b4-4fb6-a089-68ec285fdeed',\n", + " '7379a2ba-efa1-4bb0-89c5-85830be9bb88',\n", + " '1ef0aff3-b926-4db2-bdf1-ffc8d9f907d6',\n", + " 'ed603774-602c-49de-8a44-32b518cbf0b0',\n", + " '46132ef3-a237-4f0a-8a1a-bdca3f97b108',\n", + " '01b0efbe-d06f-45a5-8b25-15c95dbb240e',\n", + " 'f58dc6e0-ab29-4d7f-8af0-e30ec1703ef4',\n", + " '350718ba-f989-49f4-85b0-68b3d617b10e',\n", + " '4bbfb143-7fa4-4c85-b8ea-69895a7ee429',\n", + " '59815c3b-8d80-4303-938f-09e775f98134',\n", + " 'f66a411f-179a-4705-b8d9-15bb938d6a4f',\n", + " '4701b96b-0324-4e4e-81b8-495ed19be071',\n", + " 'f0d102a0-1590-40d2-b564-47920b59b527',\n", + " '77530114-0500-493e-8e05-750fe42f3708',\n", + " '8d32f927-c765-4c0e-aae3-90af67de29e3',\n", + " 'ecf011b7-65b4-43c1-8328-445b36d9f1ba',\n", + " 'f8557726-1914-4d1b-8bf0-af8708435a90',\n", + " 'ba46c897-5486-4290-9a1f-9736ee910b08',\n", + " '2ee5f8d1-85e9-4112-bf7a-2ef50e11855c',\n", + " '2553ee34-ab31-4287-91f2-df56b8d1a16d',\n", + " '7d6e5731-43b5-4592-b992-b698b44f3f5a',\n", + " '420aed61-df93-4ce7-9947-3ea5765594c4',\n", + " '748e95e8-640a-4963-a4f2-0274aa9d3c6a',\n", + " '2c96676a-ec4c-4c4d-a436-757b22c4b130',\n", + " '7fc6e16e-6cc8-450b-b37c-8498fbd8b927',\n", + " 'b1ec22eb-6ae9-4e59-9acf-22c1a6bb4265',\n", + " '7b24ed5c-64b9-4b02-882c-b5e05727f1ca',\n", + " '258c63f5-9a87-4573-a510-fff825179b39',\n", + " '80a158f0-c95b-4adb-a9f1-c7d39f6b53da',\n", + " '0c5c45ee-f307-4099-8792-6afb76f81c46',\n", + " '2d18aaf0-4442-4abd-b31f-0d991a8a0841',\n", + " 'c6f42a03-c057-46e8-9895-59d3be613295',\n", + " '1e9c2fc3-6997-499f-9e2f-0f7009222beb',\n", + " 'f2d8087b-b827-4d5b-8160-32a6763bfc0c',\n", + " '24552312-6151-472d-89cf-f9e3196253f4',\n", + " '89015769-1d76-4b65-9eaa-942454774433',\n", + " 'a8875e58-4f28-45c7-972e-c24b6c2e6b99',\n", + " '6bb76ee5-8463-4a39-9a28-aca24ed25b59',\n", + " '472a3411-989d-4497-b3cb-659f7effd6c4',\n", + " 'e4ad07e3-f2be-4d1d-8e53-d19ccbdd7172',\n", + " '6c890531-5cbc-4679-af89-3bff73f65e05',\n", + " '204ed8dd-61d6-473c-bcbe-beb8ea40d773',\n", + " '13b79841-a2cb-4dc6-a238-b83c251657ef',\n", + " 'c8697f19-2004-4df4-bf71-ed2758e17fe1',\n", + " 'f77ad634-a805-4efc-bbfd-c129406b3d6b',\n", + " 'c644aad5-e553-4ea0-9e3c-5c55fe18a9b1',\n", + " '51bd418d-0230-4ed7-bd31-b84c985a508b',\n", + " 'ffbe3b1f-b852-409f-b65e-0abe7ac4f490',\n", + " 'b076961a-99b3-4382-8122-d5858ce63cfb',\n", + " '8cff8b76-7d00-4528-8334-843a38009673',\n", + " 'ad8faa5b-0b04-4437-84f7-bf8a1da00331',\n", + " '3b7a795a-db1e-4437-a594-3be858f7a40b',\n", + " '2f572568-25bf-42d9-a20b-fe390ef33158',\n", + " '9048368a-0c28-4e50-bb18-9b49d9d02fe9',\n", + " '7830482b-11d6-4b24-ab8d-ec6628689381',\n", + " '7c10ed9b-2659-4827-8685-b957cb3cc34c',\n", + " '1d3a0e38-c9ba-4fac-8869-01d74c06ed5f',\n", + " '626711cb-ac9e-4a7f-b4e4-1c5b802a1f7d',\n", + " 'b8e4a8ef-6fe6-4834-a9c8-4863dd368ec1',\n", + " '46d3ca54-27a0-4b7f-8ae7-f8dd63c15327',\n", + " '1075508e-2e13-4738-b610-b74b75e15af9',\n", + " 'd85732c3-ce30-4e15-b5fe-f418c019ec22',\n", + " 'a1e77484-ddb7-4714-9576-a0a2bdcca03d',\n", + " '2bd40973-6616-4221-bc95-6d986170f596',\n", + " 'b117a047-2821-4f5c-8fde-496f33a31b33',\n", + " 'aaa5a46c-debc-489d-ba8a-384489d1322c',\n", + " '9d7b364f-e6ec-4e1d-940a-77f9f9b1843c',\n", + " 'e7ed5fc0-b010-456c-bf47-a654c85aa135',\n", + " 'd2afeaac-706a-4d4b-81e3-7f90e2aa1612',\n", + " '5d31b831-719d-4e0f-b404-551fc1c19f68',\n", + " 'fc5b2e5e-78bb-4c61-ba8f-a090f55861ef',\n", + " '806558f4-a08f-4b22-933c-25f7af589684',\n", + " '16b70f2f-40cd-4b21-80ac-043698d6422b',\n", + " 'd99adbb4-3057-4b3b-bc6c-bb841d6bbfc5',\n", + " '7f4bd015-f5fd-49b1-8a48-f60187de5a5a',\n", + " 'c8600369-638d-4fa1-abf2-14e38ad50ebf',\n", + " '35e1e1fd-96ca-4f71-92cf-4e030a0eb90e',\n", + " 'e2dbf56f-0aba-44df-b856-74c540b20021',\n", + " '677575aa-c446-4efb-a130-26e26a597a73',\n", + " '0ca0ceae-642e-4d00-a9cc-2d339f9fc048',\n", + " 'f0f4fce2-9d90-4585-aa77-c47ddc46dd18',\n", + " '9a347a71-699b-4179-a1f8-1ff39855dce9',\n", + " '8e25aa0f-ed54-4eb7-a181-f4f57e0b5ed8',\n", + " '974b8843-0131-47ba-bc13-a297c3643610',\n", + " '743f5568-f761-4619-8f9d-347a472ea3e2',\n", + " '76b87da4-c288-49f0-b3d5-4ff0ae7ed096',\n", + " '0c58da08-a570-4c40-81be-7eaced13079e',\n", + " '38f44d07-857c-4443-bb13-3d9c7ef0608a',\n", + " '7ed2da7b-ca0b-4662-8cf1-a74964766233',\n", + " '48441f79-be9f-41b4-9adb-425b99483a0e',\n", + " 'b0f19439-16b2-4df4-92e7-56b991bc278e',\n", + " 'e5934af9-9408-4287-9277-f126f9d171e0',\n", + " 'cd0f3c7c-2910-4ac5-928a-99c0f410a864',\n", + " '9c545139-9bb1-4858-9a79-06a65d54dc21',\n", + " '17a78d87-6166-4014-8b6d-3d656ed32324',\n", + " '66cf8d64-c7fc-4f61-a5e8-8ffb6f92a251',\n", + " '3c9536a4-b80e-4071-88c1-fa90e57ca8a8',\n", + " 'd135a49b-c375-4be1-bfe3-464d413dcb14',\n", + " '8b100e28-8879-4977-b0db-84baa78ed844',\n", + " '25df8058-7509-4917-8090-c613f90beaba',\n", + " '022b2af9-83f4-48e5-92ac-0bc38903384d',\n", + " '8c8803a7-9b99-41dc-8bec-2b89b2a4fd42',\n", + " 'b0414081-f45f-4545-8212-3b1d225f318d',\n", + " 'deebb81f-3525-4e0c-b267-4bddc0a4da5e',\n", + " '05c04df9-5817-46bf-a911-4883043e428a',\n", + " '3d2c0595-a31a-4afa-aa12-ff052badc469',\n", + " '582d8b68-c322-4627-8706-4df0b48d4928',\n", + " 'd75f9dfc-6bd8-42e6-a53f-0c06e1145b8d',\n", + " 'acfcd86b-b0a9-4e7a-ac66-10eb77e22d39',\n", + " 'b816deb6-a786-431b-8ee9-ee3b01a8f8a6',\n", + " 'ecd32134-663f-40e1-b02d-ff2b55d5bb5f',\n", + " 'cf29c813-9d87-4370-8dbd-497d4beeb94d',\n", + " '33e61559-3b98-4670-9f58-52f0ca207481',\n", + " '9937a0c0-b428-44f4-9bd1-5973c790d011',\n", + " '0c00e88b-6463-41d3-bfab-ab98eaad602c',\n", + " 'f288fc41-fa11-435b-8ec8-54832f5c4d86',\n", + " 'b7ff7e5d-7644-4518-907d-cdbd847252db',\n", + " 'f2b3587b-fce1-4832-ab04-8e2b89540f52',\n", + " '050f3985-0187-40f3-8ed0-764eefd63dd9',\n", + " '3c983d60-3157-40a4-88fc-9e2ae0b3bdba',\n", + " '47ee1397-80b7-4981-afdc-429d66c3d3a0',\n", + " 'a25c509a-882d-4d59-8e68-b8901847e656',\n", + " '2c250a12-e435-4825-89bf-a4fa132c026f',\n", + " '242ef545-7da9-4ae1-9be7-a6875244ae12',\n", + " 'c003f662-964b-4483-a70e-5a20b519a3fe',\n", + " '77b37b53-93a8-459f-a2de-599b0e810ec0',\n", + " '6480a5ff-c55e-47cb-9122-8267ae9abb85',\n", + " '4a1a289d-42cb-493e-ab90-0ef573afb09e',\n", + " '3487cbf3-993d-4d2b-9e7e-e2b67cc061cd',\n", + " '58902083-024e-4e61-a8da-ac8102c7dc15',\n", + " '18baf849-65a6-485c-b2c9-a97db07ff297',\n", + " '5ffb85d8-85d4-47bd-85c0-26e0da5472a5',\n", + " 'f0253fd2-15c1-4137-8abb-01aa14c00eda',\n", + " 'bf739a8a-0a76-4723-a33d-899ef8c1abef',\n", + " '1a6af1fe-f44a-45c4-a39f-3ea31640b103',\n", + " '10f7f569-ea80-473a-aa08-3ee2f3a8dc37',\n", + " '76a9fbcd-f6f9-4d17-b2f6-f7ab02f70596',\n", + " '051578f2-5319-4ade-9d5c-3cca17376f9d',\n", + " 'd03a4a8d-c9a8-4098-9222-d158fb133208',\n", + " 'f341c396-e6fa-49f4-b13c-f821f99cdfdb',\n", + " 'bc4eb481-7682-4dc9-a543-3a7f5307cb10',\n", + " '4c2af572-408e-43b5-b948-83f3aa8eaa4d',\n", + " 'baf58913-f497-4595-acb5-95cb865d6ce4',\n", + " '65610bfb-f7a2-49ba-8e27-cfaf9e45e4d7',\n", + " 'e03208fb-f7d7-4758-ba52-c4a84b420374',\n", + " '78c973dc-a2c8-4f09-8c51-60903dd93002',\n", + " 'f8c6ff2a-d565-4e42-823c-eb1115a51cb2',\n", + " 'f76bc07c-d5f1-4924-82c2-a474c76d5f23',\n", + " 'd1d27e40-f996-419d-9bd7-3c9d22ac6e3e',\n", + " 'd3de0e96-b390-4018-b58d-3de3d610d703',\n", + " '4bdf738d-91e5-4484-ba71-ec008570a639',\n", + " 'db885980-64d7-4364-8390-28cad71026b3',\n", + " 'fe94c861-758a-4248-968c-a57f99379dc4',\n", + " '9fa2f88c-2224-4ab7-ad4f-532a45487f0c',\n", + " '84b25e7b-4ae2-436c-9186-6c5c472aeea2',\n", + " 'c149cf9e-3db1-449c-a849-0174b7d7bea5',\n", + " '2220069e-10af-43c1-bc0b-559994449525',\n", + " '325eb4f3-4c6a-4d3a-8d98-d63e3cf98830',\n", + " 'bf6b9d1a-b384-4cbc-a43c-5f251a4304a0',\n", + " '38d90ab5-bae8-47bd-8337-604efaec6f53',\n", + " '3ab7cfb6-e4f9-43ba-a8da-a34b0a52b80f',\n", + " '193acdda-9e87-4d45-a033-0a96093d9328',\n", + " '14ca66a8-95f6-481e-9fe7-8bef164270b1',\n", + " '4d0acc6f-09ae-4503-b514-6871460e1c65',\n", + " '4b1eb52c-37e6-4844-84d7-d60e8eaf2682',\n", + " '9a0b5fc7-f068-4d7a-96c5-c2f192249fca',\n", + " 'cfcf3f7d-f83b-46cf-84aa-4eb82d9d24b4',\n", + " 'c8b8fe0c-b746-449f-b530-856f8159fa3b',\n", + " '75d645a5-88ee-4fa5-acf6-d13010153748',\n", + " 'ae6051ac-994c-40f3-9c58-225a7f247084',\n", + " 'e61ecf78-c63d-449c-b351-6156348a6b22',\n", + " '7031028e-56df-42dd-a00a-a833c7cdc6cf',\n", + " '003369e9-bd78-44c8-89e6-45628119592b',\n", + " 'd0cfb6f7-4eaa-4874-91ae-97a9f2855e9f',\n", + " '49573235-2742-42c5-a4c1-6a69ed8c1230',\n", + " '8eb63eb5-6082-48a0-ae90-a4dcc52db64e',\n", + " '2ec9bc56-58e4-4a90-854c-baf3899fcba0',\n", + " 'd476fdeb-5635-4a09-9ad6-f1ca45025d23',\n", + " '509f2cdc-fa9b-4fa5-b5ba-0a498f8bcd0d',\n", + " 'ea1032a8-2e23-4c1a-a6b4-da4ef6c1781c',\n", + " '2bafea53-b60f-4264-b682-49369b088e09',\n", + " '60d69cdb-50a2-4876-ad93-7f5eab5f0bbb',\n", + " '7977e587-e6ab-4c77-9239-2e6e85d3ebee',\n", + " '38740dfb-ccf7-469e-9033-b18454e479d3',\n", + " 'eb2a595a-920e-48b4-80a0-64292d6d731c',\n", + " 'e229ad51-90f4-406d-91a9-aae348773d80',\n", + " '5d4d08e4-f247-488b-a229-2bcc9485fde0',\n", + " 'eb252734-b0ca-4cdc-adb7-ea9438f97e7b',\n", + " '17d550fe-3f35-4e93-a545-903b71bd3e6c',\n", + " '3f262788-6ae1-4b74-aec0-fcbf81b0a645',\n", + " '6104d724-d25e-4597-a26b-bb949644153d',\n", + " '8cc838aa-0ec2-4a09-a15f-db0ae6a2ffab',\n", + " 'e0196237-9c2e-4953-afcb-596964899884',\n", + " '203e1af3-9db0-415e-a245-d98b351ca7a1',\n", + " '18a28b71-a0af-4137-96cb-c04b8fdf0255',\n", + " '0bbd745e-031b-48fb-8142-2dc840155fb2',\n", + " '3fe5527e-e960-47a2-89a3-3aee1c96ed54',\n", + " 'e1ade73d-99c6-4232-87d3-755ae8df1a42',\n", + " 'f6f85673-77c5-4250-a571-acb65c11b732',\n", + " '1b118edb-5621-4f85-9169-cb223d1be0ab',\n", + " 'd1b4def7-52e6-495d-8d4c-6e3a24252500',\n", + " 'f841f290-4d1d-4ac3-8ab0-43bb954770a5',\n", + " '5ff499bc-29a4-4a6f-973d-9bb6695f2de6',\n", + " 'e191e2a4-f5d3-4ac7-aa6b-40d5c9c6cc78',\n", + " '03afba56-8f07-4106-9301-42642d8568b7',\n", + " '320d1408-f2a0-4c69-bfe7-095cdcdfef96',\n", + " '3d809fd6-2644-4bf2-8c9a-de743d816cad',\n", + " 'e6cc4452-24f7-460e-8ee4-ca2779946946',\n", + " '9d4c6b85-6538-46f2-9088-3c431ab0472d',\n", + " 'a730bdd5-374f-4f27-b0c6-5e6d68c67c68',\n", + " '31c28620-873d-49e7-b302-75537a821f60',\n", + " 'cecdffe3-c4d6-4e3d-a73e-fa50ec248473',\n", + " '7d0af39a-6553-4e6f-a93a-982b34150de2',\n", + " '37c5a9a4-7e45-4169-b8ad-45fd07cb1c85',\n", + " '2e2bacc0-e634-4dca-90c4-5dc7766e8bd5',\n", + " 'ed4b992e-14c4-477f-bee8-fb9ac262d7df',\n", + " 'e87ee20d-442a-4a63-8852-af1a7d02b26c',\n", + " '7ac6ceb1-5c95-4774-a3d0-0a57eec8893c',\n", + " '53516e25-1630-46c7-9412-6ce36420597d',\n", + " '88792e08-e6af-40b4-86cc-2bcf2f9b7045',\n", + " 'b3635c49-7fff-447c-bc2e-69f1043719fc',\n", + " '5229124f-275d-44ca-94af-4c5444bea53e',\n", + " '8803fb76-46ea-4e82-8a74-c48273ca2782',\n", + " 'b6bcb702-4da4-4b24-b084-8f640b94b1ce',\n", + " '2eaae04e-cf8b-49a8-b116-3aa935481650',\n", + " '22d2477e-ab18-4584-b2b0-fb75563d63ea',\n", + " '292563a1-7a40-4fd8-a38f-475625850b1c',\n", + " 'd299d484-6021-4415-8774-e4d9955be374',\n", + " '38a3dee5-d109-430f-a34f-19bb27fcdcc8',\n", + " '8b461567-4dd1-4470-8454-6e8ff32d41af',\n", + " '5beae9ea-bf70-4c63-b477-85543ca1ea9d',\n", + " '9f011199-60f7-4311-9795-a9c1e5b637da',\n", + " '860c6ec2-50a5-41a8-be4e-2e7fa3912837',\n", + " '5ffedbbb-8a9c-4930-bee6-ef3d4ae954db',\n", + " '611d6607-1285-47e9-b5b6-b6ad073a3196',\n", + " '7665171c-3456-4be3-a2c0-72fc734afb1c',\n", + " '489da309-65d8-43a7-b87e-146acb2f81df',\n", + " '5271f3dd-e90a-4b62-ae81-77f103376851',\n", + " 'b09443d6-dacb-4878-a669-9a9f88f2e362',\n", + " 'b1ad2a16-66ed-4ff3-8a37-97d482f3215f',\n", + " '98d964c7-9a3a-4c0a-8b71-5d296611f1da',\n", + " '9e2f731d-70ee-4a9a-a444-eafa87db0985',\n", + " 'bf81e457-8446-4a1d-bf2a-db8bcbf69df4',\n", + " '4967421c-fb01-488b-8e12-60062859f177',\n", + " '35a3c928-727d-40d5-a30f-fc827e0e1b2f',\n", + " '270bedd6-25d9-4d9e-9020-cdc29aee8aac',\n", + " '5d4a3d35-e5c2-43ca-b2ca-377fc916565c',\n", + " '18293b99-2a44-4fb9-b0c4-34327509f36b',\n", + " '1de583aa-d375-4014-a472-3369838eedb5',\n", + " '8f533ea9-33ab-46c2-a746-e6827d8d4131',\n", + " 'd471a76b-7700-425b-a16f-4ee474bd0bfc',\n", + " '3876c6f2-cdd7-4701-b0cf-de91fa2aee54',\n", + " 'f34d4c94-9009-4ae9-98d1-ade8455b0695',\n", + " 'cfb126a3-7473-4c88-8cad-9556fb73e354',\n", + " 'bb6e0ed4-4935-4d4a-a17c-08ca0d054e1b',\n", + " 'e53ba1e9-11b8-4053-b83d-8ed3fc873636',\n", + " '6e8461db-1cdd-4554-b2e7-7950531c267b',\n", + " '373f4064-8d7c-4110-a1f6-447c640b75c7',\n", + " '5bb80c28-f11d-431d-9b82-31994b38b485',\n", + " '6ea9bd12-0715-4aed-a633-69d3797559a2',\n", + " '2a106ce5-836a-41d6-9d82-51671f8cc92a',\n", + " 'e0358a89-e095-4c97-b5b8-bf45bc036a23',\n", + " 'aaa6f208-df94-47ca-bb9b-33877a8a4b0f',\n", + " 'ac2fc898-412f-4754-a72f-b1db2e25d5d0',\n", + " 'd7cd1d86-6ef2-4569-8865-7303961105a4',\n", + " '37f836cc-cfa3-46f4-a296-aafbebd6af8a',\n", + " '7b8170b6-f9b9-4898-9482-57036e1c1ab0',\n", + " 'ed90af4d-f715-447d-a261-6ecd517e52db',\n", + " '2b001a21-eac4-418b-b1de-b638db2987b2',\n", + " '5224dfa6-151f-4e5a-9ca5-14c544b70074',\n", + " 'af9b1c7d-fdb5-4dbb-a5ce-be7dc831f18b',\n", + " 'b9cf9d4d-66c2-41b9-a3dc-a47ea726bcae',\n", + " '568ae0b7-8498-4cca-80d7-07d7f1b8d8d2',\n", + " '801d364f-3f5c-468d-a232-a609f9271781',\n", + " 'e9d6a161-2658-43a8-a5f9-b75c81afc886',\n", + " '45272107-e7b2-4ed5-b408-609c60dbef33',\n", + " '95d4e320-1b16-4706-a81c-94f64ae58c3f',\n", + " '48cccdc3-5c2d-469f-9dbd-0106861cc413',\n", + " '68e276b9-cfe1-4acf-99ab-68ddf034b140',\n", + " 'cdceb7d0-0ead-407e-9782-82dbcd56292c',\n", + " 'aea8f6f1-3308-4d98-ba0c-9b20c93f6821',\n", + " '6277fef3-a656-41d6-8e06-9e66d660fef2',\n", + " 'c9b9ff55-5a83-47b6-8c44-9d3d096bc12a',\n", + " '2a7356a9-c61d-4694-8ea7-c8ae2cc6a342',\n", + " 'db47c282-548c-4e80-ac0f-6309ea8bf517',\n", + " 'b980deb6-fc05-45cd-897c-b485bb7aedcd',\n", + " '8f4118d8-b4a0-4fa7-ae15-436a1a54c782',\n", + " '0d8cc909-0e97-46b0-ba99-da87e8557347',\n", + " '0139fa2c-ac29-49a7-99c0-9a2abc1958f9',\n", + " 'd3be673b-7174-42a1-b68d-87df8a037001',\n", + " '8a77c4ac-3561-44d4-a7e3-971a0a4ec800',\n", + " '1af4bc4e-71e8-4cbb-bd4b-9cb1869d230c',\n", + " 'd5a2fef6-ce3d-4fad-a479-dc299379b08d',\n", + " '92d0fa79-7925-427e-8783-c25bbaa7e5ea',\n", + " '89748722-e362-475a-9a56-72492e06550b',\n", + " '02df1b37-e062-45c0-b42d-76ccd0c650a7',\n", + " '57e5aac8-a900-4c84-9987-6cc2450102c9',\n", + " 'c2f33e8b-c3b6-4e92-9e6a-f50db3edccf1',\n", + " '803a89f1-d50a-4787-a2fc-e719eaf8d842',\n", + " '9a2347e2-c540-4c73-bf44-626dbb544a75',\n", + " 'aa41d446-fa12-40ce-957a-c8d11f8abd24',\n", + " '454c275f-009e-4230-925e-ed2a04a9a48e',\n", + " '847db9f6-1060-41bd-ac37-28dd7a2eedff',\n", + " '6c6e8e7e-93ce-4e6c-a716-3fbb4d4aae78',\n", + " '1ec597d9-2d6d-43dd-b074-482b04b4d404',\n", + " 'c1c272ce-0ec9-4cf7-868c-5d776928fc56',\n", + " '866282ab-df19-4505-81ad-2d9c135f44d0',\n", + " '4706426a-c393-44b8-8744-aa0438e67db2',\n", + " '143d7671-417d-432b-aba5-0aa11eff3da2',\n", + " '574af6e3-5ea3-49e6-a610-041217e80efd',\n", + " 'f9ccbedf-1f42-4fc8-a8f4-3663c28416dd',\n", + " '72f0fce4-3302-43c9-bb10-130b301ee824',\n", + " 'a85244e1-a8c6-4837-aceb-7f07af25fba5',\n", + " '81470441-e099-45f9-8758-07d86d5e0d02',\n", + " '56512fb4-543c-45aa-ac25-7ff36e354862',\n", + " 'e652859e-bf9f-466d-a89b-b8b6eb87dd54',\n", + " '1cbd28d8-69d2-48d9-9942-6735d65ba5a7',\n", + " '910ebe86-85c3-4942-bbd5-41a731b7fdfd',\n", + " '2fd27393-0e22-4c16-96ae-20e02beaba47',\n", + " 'fc9e0225-1f3a-493f-9ed0-0e56aaf110b7',\n", + " 'f64adf7f-6a67-4333-9df9-ba1ed2340c9c',\n", + " 'ddc2c042-9716-42d1-b669-7adeb1edb898',\n", + " '87feb593-73dc-40be-946a-adb8ac576768',\n", + " '5081b568-a738-46a9-af4e-d2f2b7add5b7',\n", + " 'a8c2512c-84aa-4946-83b9-e1c8705868cf',\n", + " 'dd067cf3-c089-4c36-90f5-ac941cb66687',\n", + " 'eaae8375-68c7-4849-81d3-fe1866a40fe4',\n", + " 'e16487ea-8ac5-4c05-be61-9070cd99c135',\n", + " 'c8108b01-7425-41cb-ab41-9e54f5f43e70',\n", + " '1371b233-421d-4557-9807-ac7654773c86',\n", + " '8f6f1bed-b48a-4fd6-bb07-c5dc700ff7e9',\n", + " 'c25099c4-df19-4e0c-b397-561e2096ff29',\n", + " 'd95a6be9-2825-4ada-bed5-3c6e5de42df8',\n", + " 'f1d64137-1831-4d9d-b35d-f46e7bf78be0',\n", + " '40d54e17-3393-4911-b7ef-a2ecaefe36bd',\n", + " '3f8a2866-98cb-45c9-a113-db1a1fa57e59',\n", + " 'dc322c3d-fb96-4e02-9b20-a9debf963318',\n", + " '9602b038-f861-43a6-9326-a41631bf62cd',\n", + " 'feb4ee9d-3592-401c-a31c-4a22e8cc5843',\n", + " '8261587c-62a7-4428-8088-7faf4d5f2f0a',\n", + " '7ec45285-66ec-4ef1-8cd1-c605c72b9cdc',\n", + " '8240a1f3-9cf8-45a1-9431-3d63bd625b91',\n", + " '4e217ad4-325b-4ef1-bf4a-ea5f7b294375',\n", + " 'c05db549-af48-41d9-8763-411a9dde6dff',\n", + " '41387ce4-ca9e-45d4-bed7-eef1885dbc4d',\n", + " '0e2d23bb-10aa-407a-918a-e41d25e2bca5',\n", + " '21c8c8ff-9818-4e53-9716-2d2846a70fa2',\n", + " '8fbdb17c-3f68-4aff-b135-4ecb5f439fad',\n", + " '0a76ef1a-3e79-48e0-9ce3-9038106bd566',\n", + " '7a4e5311-2259-4782-8388-b3fbd9ff31b2',\n", + " 'cc7bc911-8547-49ab-8341-903bf5f92c28',\n", + " 'f3c54b5b-f42c-4a7d-b92d-30540ac29347',\n", + " '4a6b0eeb-e3ef-47a2-bd00-a99d18f479bc',\n", + " '7bd4793f-50bc-4849-bfae-7ae3ea7f7b59',\n", + " '4af025f0-9146-4ded-b6ae-3f165fd8926c',\n", + " 'fa3df00e-3d9f-49fc-9cf9-4aa5d324b13e',\n", + " '86eeec38-6a3d-47a1-91da-a666d1582db9',\n", + " 'c3719265-4267-4218-80e1-d61d0ff8bfa5',\n", + " '66a15544-b0bc-465f-b819-9e1e42eff00b',\n", + " 'be3e9b7e-201f-4772-a672-cbdda2bb9959',\n", + " '55c079c6-9f18-4613-b92c-6a73a4858d22',\n", + " 'ab44b0f2-e103-401a-971b-ce5ab6461b30',\n", + " '62602025-645e-4798-8c79-5df19287a407',\n", + " '8c44c555-e776-4aa0-90e1-069ca03b7382',\n", + " 'f74d8b9a-6242-4424-bac2-08509d469fe0',\n", + " '893516c0-2499-4354-a251-4f4d76576cd3',\n", + " 'af80ee35-ae78-4c6e-bd9a-0a1b2a873af6',\n", + " '8361086f-f298-40b8-a819-0a5581086510',\n", + " 'ae730fcd-9849-46e6-ac26-3624efdbc0a3',\n", + " 'f57ceb1e-21a6-4432-a309-6c136c7c754d',\n", + " '1d8db7e9-9c4d-400b-888e-77db40858629',\n", + " 'f56bee1a-4cb0-4a9c-a49e-e511a34bc1c7',\n", + " 'f397b098-b59c-45aa-933d-a6ab2fcc574b',\n", + " '911afa7b-2abd-418a-b212-fe8d41019c69',\n", + " '2860cad7-0b8b-4914-b104-aaf16874214c',\n", + " '391a1ffe-6b8b-4f0b-9cd3-addef1adebf4',\n", + " 'b60dc7d4-397a-4044-a872-159c81ba511b',\n", + " '012ab837-d8ed-4f06-b739-7df973fac9f6',\n", + " '97a3fdaa-eef6-48e0-9bf8-dd81318cc940',\n", + " '428dc18a-352e-4af6-81e9-ec56a4e1d67e',\n", + " '64eae88c-a501-48ce-8174-a7359d6b2310',\n", + " 'a49980ce-d7d8-46b2-93e8-49ecc331bdd8',\n", + " 'cfa7dc1c-4e0c-4f18-a01a-118e2ff898ed',\n", + " '1e510c87-b9b2-4e2c-b4a6-7359d61acb28',\n", + " '0ebe9dc8-e832-4b1e-b0b9-32e51394db98',\n", + " '191aed6e-8c32-4e67-8d63-f3d87fcaaa3e',\n", + " 'e46a3c2f-57a3-4277-90cb-b6f25f277f0e',\n", + " '673df5c4-1773-43b0-9ce6-2cf56f6d0711',\n", + " 'f14a8bd8-dafa-4615-b9c5-a49ab3002212',\n", + " 'e1856726-af9d-43be-b851-ebaac5c0dd2d',\n", + " 'b6e493b1-a81d-4f4a-a1fb-b4fcfcbec0dc',\n", + " '9239d28e-55fd-41f2-91b5-5b15fe19c859',\n", + " '420d1d94-4c57-4ebc-8f90-7ca121706d2d',\n", + " '87a6b169-2229-4931-913c-a787dd4bd2ac',\n", + " 'da1c725e-ee97-48d9-b966-3265bd5fb21a',\n", + " '7e9e48f1-f653-48c2-a630-f34f4e5fd142',\n", + " '9d3c3f3e-ca7d-4923-a6b3-ae1e40858161',\n", + " 'f96db07a-37e1-4f93-899f-a77f9d04fd0d',\n", + " '6ea60cd5-5536-458d-828f-1379d29716b1',\n", + " '41caa12a-907f-49c1-bf21-b13b7d65cfad',\n", + " '27b7eccf-a203-45ff-a162-d32f753a641e',\n", + " 'd56661fc-b1fc-4af5-b3c5-f6b25032d8c2',\n", + " '9d83f3c4-6ed4-42d8-bf33-ac1931aa8f9d',\n", + " '3c14bec7-79ab-4c56-8baa-c491f46a045b',\n", + " '13fb5da9-510a-42d2-8d63-69a7bb0e8f30',\n", + " 'd7a9cb65-8b85-4407-b896-7d2ed80495cb',\n", + " 'cf2a9c2d-1900-4775-b102-3ed10de47d53',\n", + " '45e20b89-7a06-4950-b83b-3e9f438000e0',\n", + " '6eb298f1-f604-499b-b318-3b9573d8a1d9',\n", + " '5cd0f818-6ce7-4fb3-b322-2ac578842b61',\n", + " '45fe5d61-e1c9-4085-be57-0dc56c7454c9',\n", + " '3ff03104-29d4-44ba-9d73-988c549b781f',\n", + " '1640b0d9-87e5-4372-8be5-196b8919f026',\n", + " '1d7e0170-5c16-4509-8d70-35d5522a4168',\n", + " 'e2faac4f-cc52-4e0c-a023-c2f29ac28f56',\n", + " 'cd2eb494-2ce7-47f6-9f48-f7ff58da0190',\n", + " '96e2a6ea-9892-465f-add7-d7259c3465b8',\n", + " 'bf6017e1-85b0-428f-aeb1-a1e71a8451b1',\n", + " 'cb6861f1-785a-44fc-96c5-9cc82ca1e381',\n", + " 'a8cd73e1-00e1-42eb-bd89-ba7e6e795208',\n", + " '0ea95f0e-09cd-4475-aef3-89696a4d05c4',\n", + " 'a054fd43-4ab2-41c9-b85c-c081e5a0842b',\n", + " 'a045e036-f46c-4b9d-b307-a5e339e0d9d9',\n", + " 'e9ac9fde-5ff3-4826-b5af-806db152c544',\n", + " '3b95f1a9-9924-42e3-a9f3-1650c8e3968d',\n", + " '3cd352a1-81c4-477e-819f-a1670a1a38b3',\n", + " 'c2e206e4-ca7a-4e28-9b73-df98c0dd0738',\n", + " '39005966-b11c-4d1f-b643-a3f6f0d64020',\n", + " 'b5f95556-4032-4cb6-af2c-cec5f1920974',\n", + " '82ec972f-a412-4e69-9008-369f1d357c5e',\n", + " '55a6b0db-a77b-4a90-a7c4-bed73e035288',\n", + " '318b5c32-cf70-44c2-94e0-8229fef59973',\n", + " '3efec167-6bdb-47ad-b3e8-bc20fe7ee3f8',\n", + " '97a74ad6-a0ef-4506-ad21-f6be42479bc8',\n", + " '71c813c3-c76e-40e3-aa4c-79959370d093',\n", + " 'd54c6586-61ed-4dbe-92db-03ad50e26c68',\n", + " '077f39e4-cf58-4c6c-9b01-68150928777f',\n", + " '1fb615ea-5f35-4a83-9767-79d194b16738',\n", + " '38d33e04-cfc5-48cf-b0e9-f0c0cbbe0a36',\n", + " 'b44c9de9-3245-4298-9d0f-d07f49b92352',\n", + " '352797c4-d7cc-495a-aa84-4f9bfe316ab3',\n", + " 'ced9ab7f-e4e6-4c40-9650-132ba7a089cf',\n", + " '65b2fc81-6d69-425a-a4bd-225300a50840',\n", + " 'a8408609-321d-4695-92c7-9ffc0ecaa0e2',\n", + " 'e91e5792-d7af-4e2b-8a64-57c573d1e7c2',\n", + " 'b9a61803-038d-4d53-a775-33547204bdac',\n", + " 'f412fea8-3f18-49cf-b152-831a6e0fb2ba',\n", + " '67552642-1b1d-4a74-8399-3af0d22a2bba',\n", + " '8364ed6f-246b-4aa3-98da-229347143795',\n", + " '11c7ca9b-e27b-4d2f-964d-f70a25613a90',\n", + " '2d7771c0-6290-4b18-94c3-a26e0ee0f6d9',\n", + " 'fc868d06-d61c-46c1-9058-04c7efd8babe',\n", + " 'aa5a348c-d227-442e-8352-3ff65a47b23d',\n", + " 'd55f70d7-c0e9-4b32-9d4a-abbc0eaa08c2',\n", + " '961e0872-4e58-47fd-9059-86b0f8348a88',\n", + " 'edf80104-071d-4aa4-940f-28bacdda7cd0',\n", + " '6189b92e-6d29-4edb-ac32-0af0013d8f54',\n", + " '6f178007-0870-4341-a39a-9e097d4892c9',\n", + " '2f0cd775-949e-4347-ae01-b2ec2a3d34d8',\n", + " 'f3ff2772-cc6b-441b-8bec-3939d9ade24f',\n", + " '42620c20-c5cd-40b0-967f-a176fd5f6716',\n", + " '9178be85-b963-402d-8bb9-3cc6b0c02393',\n", + " 'cb2e4ba9-4977-4976-971f-8b2d2130457b',\n", + " 'f16656e2-a5b1-417c-b2a4-3e90749626ef',\n", + " '167f0d5c-c045-4c41-9be9-012dc3a613a8',\n", + " '7f24787a-12b3-4808-b9be-02fd168a57ba',\n", + " '12a5a5d9-6395-499c-aee9-0264c2c3a241',\n", + " '0e44fee4-3709-4bd9-a3ed-f71a242552a2',\n", + " 'be6578dd-b0a1-4963-9b5d-d4d541a13447',\n", + " 'fd986895-9a96-4c5d-b1d8-1d56963dbb50',\n", + " '9fa618b0-d89a-4b19-bed2-e8d2878d74c9',\n", + " 'b9626dcd-cc19-4b09-866e-ec041446e14d',\n", + " '19d7b6b3-92fc-40a8-862e-ca0044ba1b30',\n", + " '7db2bace-91df-46b9-95be-214180f6154c',\n", + " 'aee18bee-4b0b-4ef3-b9e3-984447036b04',\n", + " '5dd90de7-ee47-4a8e-ab17-43febaba137e',\n", + " '604bc310-a541-43af-a331-a01b237e5ee9',\n", + " '1dce413a-523b-46d2-8f36-c273c3b8a759',\n", + " '74d65cae-1c94-44dc-b8a6-ef6bf88a563b',\n", + " 'e3299414-e553-4a76-8abd-25eec5c3561e',\n", + " '8677c1ee-00ae-4460-90a1-4c15cb6e7690',\n", + " 'ba3cb370-2933-4a81-ad84-080f58c84eb2',\n", + " 'f50244c0-af50-4780-8785-ba6da519daa2',\n", + " '8ea00430-75b1-46dd-9682-f5e35eb7182c',\n", + " 'fda23f60-79bf-4962-9d79-3acd839e3764',\n", + " '84a78dd7-0c56-4d0f-a19e-86f55cac2bf2',\n", + " '9c2561d7-24ac-49c1-85ed-1aafceb0d0f1',\n", + " 'c072b56f-38d1-41cd-99e1-edc8a5e2e13c',\n", + " 'f8717e05-173c-4375-b342-b335b12131f2',\n", + " '2ac08252-940f-45b7-8ab0-e415d539dbfa',\n", + " '0ecfcf74-1a6a-4721-8763-f062620f8f57',\n", + " 'cda6dc37-bb2a-41af-891c-d956029ac1dc',\n", + " 'c7ce36fa-a9fd-451b-b5b5-951dcdc02f33',\n", + " '81ff43f0-0e7a-40d2-992a-2977607ab821',\n", + " 'ae1054ca-4b66-4585-aa63-6c6a86594c72',\n", + " '16197759-12dc-4516-8d60-0e23c1458e22',\n", + " 'fc811133-fc2d-4f19-ac64-8f4be7c0c75a',\n", + " 'adde7ff6-97fa-487d-8621-7e2b6ff8853e',\n", + " 'cd4efb07-d529-41cc-89bc-46ab228eae12',\n", + " 'eec0ec3a-7565-429a-bc07-810ccc981bcc',\n", + " 'f91f6e26-9f1b-4e94-b9ca-31a11141b539',\n", + " '30f94772-823e-4e2a-8442-b97f08f58c41',\n", + " '749c0a5d-1091-482f-8f5a-6b759cbdb6b0',\n", + " 'facf1ff3-34c4-4eae-92a4-24080c3fa8e7',\n", + " 'd968e333-4cd9-423d-9845-175591bb0323',\n", + " '4a33ab3d-76c2-4de0-9258-75693dfc3157',\n", + " 'ce834ce3-b614-43d8-8fff-cf7650024c32',\n", + " '331897cd-d23a-44a3-ad29-4ac6a11a4ef1',\n", + " 'cf59f004-7afc-4c9b-834e-91b130f8c61e',\n", + " '2d085031-fcde-4533-ac85-a7a8623bbbbe',\n", + " '9f7047d8-e813-4047-b9d9-4fc089aeaf4b',\n", + " '5ae90150-686f-4194-a68b-86bee8f6fd8b',\n", + " '9ebcc7e4-d74c-4f73-b420-9214e8429e07',\n", + " '8a76aa08-fad6-4fd8-a7f7-5842d5227e21',\n", + " 'e870ae2a-7c3e-4851-91b5-a6fd71eca2ca',\n", + " '9f4ad8f7-696c-41f0-919c-eb75eb0c7fe4',\n", + " 'f1ac28dc-e38d-4e56-bc46-80b4904880a5',\n", + " '52aaf2e7-7e72-42ee-99cc-ac02e6a5bf7b',\n", + " '1c378b83-2a36-4de3-bec3-2bf2a71049c8',\n", + " 'dd52be61-33c2-4a04-855a-67d691d2f43f',\n", + " '2a1750c9-6962-4bdf-b4c6-e487da0938f2',\n", + " 'be33bc81-aa98-424d-a640-4b844696928c',\n", + " '005c0b5c-7be1-44a8-b453-fb302a689163',\n", + " 'da0fa7be-bd8c-4d72-98ea-e67a63418fcf',\n", + " '090d249d-5406-4060-9bd4-5e0820a4157b',\n", + " '6b10501a-d4f8-4226-8411-fca505348a90',\n", + " '6cfa8d32-9695-46a2-8975-da8f2d0411a2',\n", + " '3b2dff40-a47e-4f34-a7ba-e73c55deeaa8',\n", + " '7d05313c-5c41-49f8-a979-00c80574ab6b',\n", + " '9554338e-c13d-48d6-969c-3608c5d72ebe',\n", + " 'a64d3d87-d23c-4883-bc58-f093f5c1dcaa',\n", + " '2cd16b79-6128-4638-9bdc-7cc752313ae4',\n", + " '410a7bdc-ba7e-4d93-aa4b-46c500c91e53',\n", + " '63ef5701-13c0-4507-9b06-03828c6d015e',\n", + " '948eef45-9d20-443f-834b-618d7041d727',\n", + " 'd10456e3-b0a9-4c4e-801b-c50b3a0895f3',\n", + " '500a6867-6eb8-46de-8420-66016c588a55',\n", + " '3af7768d-7028-4714-9c66-34482fd54a9a',\n", + " 'f4237848-16d9-412a-9f8d-ffdaa63cfc82',\n", + " '04583071-d852-4f60-a426-a35dc39696f8',\n", + " 'b599c3fa-11ab-409d-a752-0ea5a64c9848',\n", + " 'a0794f29-1917-40a9-baf3-963749fd7364',\n", + " '130827f3-09c9-4339-848a-dc00dc510ca7',\n", + " 'cb9bf46b-782b-4cd7-8803-71f90e51dd9a',\n", + " 'da81633f-d101-4951-be53-ceda56c74731',\n", + " 'f00c1c20-1b0b-4b96-bb0f-380c8e2ed7c1',\n", + " '421e5c41-ecc1-4c8f-8c11-3c2687f4e255',\n", + " '7451c4ae-f19e-4742-872f-91075b166f64',\n", + " '507785da-2de5-4f00-91f5-df3a8d0ca0e9',\n", + " 'a7a7eb39-a24d-4e16-bd27-db9afed5d548',\n", + " '0446ec8d-a753-42a5-a15f-dedf0f098c0a',\n", + " 'df776bec-9028-41fa-aa93-f80e37ba5fc5',\n", + " 'cd929133-6454-4d55-888e-d6d7f62a1600',\n", + " '3cef3fe9-8054-420f-b196-86e52224c03e',\n", + " '0ffd50a2-b7fd-48a3-bad3-24ea377104c6',\n", + " '2a72f6e5-d093-44bc-be90-bc566890446e',\n", + " '5f6f64c3-f9e2-4056-99fc-9b906fc11edc',\n", + " 'c6dc1687-ae7a-4608-9a62-3e1ca4c27569',\n", + " 'e81ab905-ea58-4e21-ab09-42397e3571dd',\n", + " '3c18bba5-556c-482e-8f7d-ed4bda0c1299',\n", + " '3f5c68c6-8fb3-4055-93e9-392fa13e9637',\n", + " '0574bd92-a7bf-49e7-85f6-05a49b0200cb',\n", + " '95126129-3530-4835-945a-0a1a1f7babe1',\n", + " 'aab33d22-58e5-46e3-97eb-f5516f4124c8',\n", + " '1f12d1df-d844-4641-b1d8-98da51dac80b',\n", + " '617c8743-4361-4568-a46e-108ba1092eab',\n", + " 'c2556d32-8172-4d91-9567-c6947bad50d2',\n", + " ...],\n", + " 'embeddings': None,\n", + " 'metadatas': [{'category': 'Access to Energy',\n", + " 'doc_id': 'owid_0',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Clean cooking fuels and technologies represent non-solid fuels such as natural gas, ethanol or electric technologies.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-with-without-clean-cooking-fuels'},\n", + " {'category': 'Access to Energy',\n", + " 'doc_id': 'owid_1',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Clean cooking fuels and technologies represent non-solid fuels such as natural gas, ethanol or electric technologies.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-without-clean-cooking-fuel'},\n", + " {'category': 'Access to Energy',\n", + " 'doc_id': 'owid_2',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: World Bank',\n", + " 'url': 'https://ourworldindata.org/grapher/people-without-clean-cooking-fuels-region'},\n", + " {'category': 'Access to Energy',\n", + " 'doc_id': 'owid_3',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Access to clean fuels or technologies such as natural gas, electricity, and clean cookstoves reduces exposure to indoor air pollutants, a leading cause of death in low-income households.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-the-population-without-access-to-clean-fuels-for-cooking'},\n", + " {'category': 'Access to Energy',\n", + " 'doc_id': 'owid_4',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Having access to electricity is defined in international statistics as having an electricity source that can provide very basic lighting, and charge a phone or power a radio for 4 hours per day. Primary energy is measured in kilowatt-hours per person, using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-with-access-to-electricity-vs-per-capita-energy-consumption'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_5',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Agricultural export subsidies are measured in current US dollars.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-export-subsidies'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_6',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The annual monetary value of gross transfers to general services provided to agricultural producers collectively (such as research, development, training, inspection, marketing and promotion), arising from policy measures that support agriculture regardless of their nature, objectives and impacts on farm production, income, or consumption. This does not include any transfers to individual producers.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-general-services-support'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_7',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Agricultural land is the sum of cropland and land used as pasture for grazing livestock.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-area-per-capita'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_8',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This dataset is showing estimates of the total agricultural land area – which is the combination of cropland and grazing land – per person. It is measured in hectares per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-agricultural-land-use-per-person'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_9',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total agricultural output is the sum of crop and livestock products. It is measured in constant 2015 US$, which means it adjusts for inflation.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-output-dollars'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_10',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The annual monetary value of gross transfers from consumers and taxpayers to agricultural producers, measured at the farm-gate level, arising from policy measures that support agriculture, regardless of their nature, objectives or impacts on farm production or income.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-producer-support'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_11',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A value greater than 1 means the agriculture sector receives a higher share of government spending relative to its economic value. A value less than 1 reflects a lower orientation to agriculture.',\n", + " 'url': 'https://ourworldindata.org/grapher/agriculture-orientation-index'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_12',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Apple production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/apple-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_13',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Arable land is defined by the FAO as land under temporary crops, temporary meadows for mowing or for pasture, land under market or kitchen gardens, and land temporarily fallow. It is measured in hectares per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/arable-land-use-per-person'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_14',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Lowder et al. (2016). The number, size, and distribution of farms, smallholder farms, and family farms worldwide. World Development.',\n", + " 'url': 'https://ourworldindata.org/grapher/average-farm-size'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_15',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Avocado production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/avocado-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_16',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/banana-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_17',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/banana-production-by-region'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_18',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Barley production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/barley-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_19',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Bean (dry) production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/bean-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_20',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Habitable land is defined as ice- and barren-free land. Agricultural land is the sum of croplands and pasture for grazing.',\n", + " 'url': 'https://ourworldindata.org/grapher/breakdown-habitable-land'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_21',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cashew nut production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cashew-nut-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_22',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cassava production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cassava-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_23',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cereal production is measured in tonnes, and represents the total of all cereal crops including maize, wheat, rice, barley, rye, millet and others.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_24',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cereal crops allocated to direct human consumption, used for animal feed, and other uses – mainly industrial uses such as biofuel production. This is based on domestic supply quantity for countries after correction for imports, exports and stocks.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-distribution-to-uses'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_25',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Imports and exports are measured as the net sum of all cereal crop varieties. Countries which lie above the grey line are net importers of cereals; those below the line are net exporters.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereals-imports-vs-exports'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_26',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Values measure the percentage change in production and land use relative to the first year of the time-series.',\n", + " 'url': 'https://ourworldindata.org/grapher/corn-production-land-us'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_27',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/change-of-cereal-yield-vs-land-used'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_28',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Chicken meat production is measured in tonnes per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/chicken-meat-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_29',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cocoa bean production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cocoa-bean-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_30',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global production of cocoa beans, measured in tonnes of production per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/cocoa-beans-production-by-region'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_31',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Coffee bean production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/coffee-bean-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_32',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/coffee-production-by-region'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_33',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Corn (maize) production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/maize-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_34',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Pasture – land used for livestock grazing – and cropland are measured in hectares per person. The sum of pasture and cropland is the total land used for agriculture.',\n", + " 'url': 'https://ourworldindata.org/grapher/cropland-pasture-per-person'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_35',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2024)',\n", + " 'url': 'https://ourworldindata.org/grapher/cropland-area'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_36',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Total cropland area, measured in hectares. Cropland refers to the area defined by the UN Food and Agricultural Organization (FAO) as 'arable land and permanent crops'.\",\n", + " 'url': 'https://ourworldindata.org/grapher/cropland-use-over-the-long-term'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_37',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Soil lifespans are measured by on how many years it would take to erode 30 centimeters of topsoil based on current erosion rates. Data is based on a global assessment of soil erosion from 240 studies across 38 countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/soil-lifespans'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_38',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Global land allocated to arable production or permanent crops from 1961-2014, with the UN Food and Agricultural Organization's (FAO) projections to 2050. Land area is measured in hectares.\",\n", + " 'url': 'https://ourworldindata.org/grapher/fao-projections-of-arable-land-to-2050'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_39',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Application of all fertilizer products (including nitrogenous, potash, and phosphate fertilizers), measured in kilograms of total nutrient per hectare of cropland.',\n", + " 'url': 'https://ourworldindata.org/grapher/fertilizer-use-per-hectare-of-cropland'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_40',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global land area used for agricultural production, by major crop category, measured in hectares.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-agricultural-land-use-by-major-crop-type'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_41',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Allocation of crops – measured as the aggregate across all major food groups in kilocalories – broken down by farm size. Farms are grouped based on their total agricultural area, in hectares.',\n", + " 'url': 'https://ourworldindata.org/grapher/crop-allocation-farm-size'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_42',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global crop production is measured in kilocalories per year. Farm size is measured in hectares.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-crop-production-by-farm-size'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_43',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This is shown for the largest crops grown by Ukraine and Russia.',\n", + " 'url': 'https://ourworldindata.org/grapher/food-exports-ukraine-russia'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_44',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This is shown for the largest crops grown by Ukraine and Russia.',\n", + " 'url': 'https://ourworldindata.org/grapher/food-production-ukraine-russia'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_45',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Grapes production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/grapes-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_46',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total land used for grazing, measured in hectares.',\n", + " 'url': 'https://ourworldindata.org/grapher/grazing-land-use-over-the-long-term'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_47',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Labor productivity corresponds to the ratio between value added in agriculture (SEK, constant prices, 1910/12 price level), and number of people employed in agriculture.',\n", + " 'url': 'https://ourworldindata.org/grapher/labor-productivity-agriculture-sweden'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_48',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/land-use-for-vegetable-oil-crops'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_49',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Agricultural land use is the sum of croplands and pasture – land used for grazing livestock. It is measured in hectares.',\n", + " 'url': 'https://ourworldindata.org/grapher/land-use-agriculture-longterm'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_50',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-yields-uk'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_51',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/maize-exports-ukraine-russia-perspective'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_52',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Methane (CH₄) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/methane-emissions-agriculture'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_53',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Lassaletta, Billen, Grizzetti, Anglade & Garnier (2014). 50 year trends in nitrogen use efficiency of world cropping systems: the relationship between yield and nitrogen input to cropland. Environmental Research Letters.',\n", + " 'url': 'https://ourworldindata.org/grapher/nitrogen-output-vs-nitrogen-input-to-agriculture'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_54',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nitrogen use efficiency (NUE) is the ratio between nitrogen inputs and output. A NUE of 40% means that only 40% of nitrogen inputs are converted into nitrogen in the form of crops.',\n", + " 'url': 'https://ourworldindata.org/grapher/nitrogen-use-efficiency'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_55',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nitrous oxide (N₂O) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/nitrous-oxide-agriculture'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_56',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Oil palm production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/palm-oil-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_57',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Orange production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/orange-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_58',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total organic area is defined as the land area certified as organic, or in the conversion process to organic (over a two-year period). It is the portion of land area (including arable lands, pastures or wild areas) managed (cultivated) or wild harvested in accordance with specific organic standards.',\n", + " 'url': 'https://ourworldindata.org/grapher/organic-agricultural-area'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_59',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/palm-oil-imports'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_60',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Pea production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/pea-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_61',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nitrous oxide (N₂O) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-nitrous-oxide-agriculture'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_62',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual inputs include phosphorous from the application of synthetic fertilizers alongside organic inputs such as manure.',\n", + " 'url': 'https://ourworldindata.org/grapher/phosphorous-inputs-per-hectare'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_63',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Potato production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/potato-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_64',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The value of agricultural output produced by small-scale food producers, per days worked in a year. Small-scale food producers are those in the bottom 40% of the amount of land used, livestock and revenues. This data is adjusted for inflation and for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/productivity-of-small-scale-food-producers'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_65',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Projected trends in global agricultural area extent by various sources, measured in hectares. Projections include those from the UN Food and Agricultural Organization (FAO), International Assessment of Agricultural Knowledge, Science and Technology for Development (IAASTD); OECD, and scenarios from the Millennium Ecosystem Assessment (MEA). Also shown is the actual agricultural area to 2014, as reported by the UN FAO.',\n", + " 'url': 'https://ourworldindata.org/grapher/projections-for-global-peak-agricultural-land'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_66',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Rapeseed production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/rapeseed-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_67',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Rice production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/rice-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_68',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Rice production is measured in tonnes per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/rice-production-by-region'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_69',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Rye production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/rye-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_70',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Sesame seed production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/sesame-seed-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_71',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The percentage of total agricultural land area which is irrigated (i.e. purposely provided with water), including land irrigated by controlled flooding. Agricultural land is the combination of crop (arable) and grazing land.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-land-irrigation'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_72',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of population with secure tenure rights over land that are women. Secure tenure rights over land include agricultural land ownership and the right to sell or bequeath agricultural land.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-agricultural-land-owners-that-are-women'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_73',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Organic arable land area is the sum of the area certified as organic by official standards, and land area in the conversion process to organic (which is assumed by the UN FAO as a two-year period prior to certification). Arable land is that used for crops (which does not include grazing land).',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-arable-land-which-is-organic'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_74',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of domestic cereal supply – after correcting for trade – which is allocated to animal feed, as opposed to being used for direct human consumption or industrial uses (such as biofuel production).',\n", + " 'url': 'https://ourworldindata.org/grapher/share-cereals-animal-feed'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_75',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-allocation-by-country'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_76',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of domestic cereal supply – after correcting for trade – which is allocated to direct human consumption, as opposed to being used for animal feed or industrial uses (such as biofuel production).',\n", + " 'url': 'https://ourworldindata.org/grapher/share-cereal-human-food'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_77',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of domestic cereal supply allocated to direct human food, rather than animal feed or biofuels. GDP is adjusted for inflation and differences in the cost of living across countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereals-human-food-vs-gdp'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_78',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of domestic cereal supply – after correcting for trade – which is allocated to other uses (primarily industrial uses such as biofuel production) as opposed to being used for direct human consumption or animal feed.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-cereals-industrial-uses'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_79',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of land area used for agriculture, measured as a percentage of total land area. Agricultural land refers to the share of land area that is arable, under permanent crops, and under permanent pastures.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-land-area-used-for-agriculture'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_80',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of land area used for arable agriculture, measured as a percentage of total land area. Arable land includes land defined by the FAO as land under temporary crops (double-cropped areas are counted once), temporary meadows for mowing or for pasture, land under market or kitchen gardens, and land temporarily fallow.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-land-area-used-for-arable-agriculture'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_81',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Permanent meadows and pastures is defined by the FAO as: \"the land used permanently (five years or more) to grow herbaceous forage crops, either cultivated or growing wild (wild prairie or grazing land).\"',\n", + " 'url': 'https://ourworldindata.org/grapher/area-meadows-and-pastures'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_82',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the change in soy production, yield and area used to grow the crop over time.',\n", + " 'url': 'https://ourworldindata.org/grapher/soy-production-yield-area'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_83',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Soybean production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/soybean-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_84',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data at the national level is based on soybean uses after trade (which is soybean production minus exports plus imports).',\n", + " 'url': 'https://ourworldindata.org/grapher/soybean-production-and-use'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_85',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Sugar beet production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/sugar-beet-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_86',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Sugar cane production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/sugar-cane-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_87',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Sunflower seed production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/sunflower-seed-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_88',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Sweet potato production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/sweet-potato-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_89',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Tea production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/tea-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_90',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Tea production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/tea-production-by-region'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_91',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Tobacco production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/tobacco-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_92',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Tomato production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/tomato-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_93',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual inputs include phosphorous from the application of synthetic fertilizers alongside organic inputs such as manure.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-applied-phosphorous-crops'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_94',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total official development assistance (ODA) and other official flows from all donors to the agriculture sector. This data is expressed in US dollars. It is adjusted for inflation but does not account for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-financial-assistance-and-flows-for-agriculture-by-recipient'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_95',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Tractors used in agriculture per 100 square kilometers of arable land.',\n", + " 'url': 'https://ourworldindata.org/grapher/tractors-per-100-square-kilometers-of-arable-land'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_96',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Gross production value of the agricultural sector, measured in current US$.',\n", + " 'url': 'https://ourworldindata.org/grapher/value-of-agricultural-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_97',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/vegetable-oil-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_98',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Global agricultural growth is measured by the average annual change in economic output from agriculture. This is broken down by its drivers in each decade. Productivity growth measures increase output from a given amount of input: it's driven by factors such as efficiency gains, better seed varieties, land reforms, and better management practices.\",\n", + " 'url': 'https://ourworldindata.org/grapher/global-agri-productivity-growth'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_99',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/wheat-exports-ukraine-russia-perspective'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_100',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Wheat production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/wheat-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_101',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total factor productivity measures changes in the efficiency with which agricultural inputs are transformed into agricultural outputs. If productivity did not improve, inputs would directly track outputs.',\n", + " 'url': 'https://ourworldindata.org/grapher/agriculture-decoupling-productivity'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_102',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Wine production, measured in tonnes per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/wine-production'},\n", + " {'category': 'Agricultural Production',\n", + " 'doc_id': 'owid_103',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yam production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/yams-production'},\n", + " {'category': 'Agricultural Regulation & Policy',\n", + " 'doc_id': 'owid_104',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Agricultural export subsidies are measured in current US dollars.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-export-subsidies'},\n", + " {'category': 'Agricultural Regulation & Policy',\n", + " 'doc_id': 'owid_105',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The annual monetary value of gross transfers to general services provided to agricultural producers collectively (such as research, development, training, inspection, marketing and promotion), arising from policy measures that support agriculture regardless of their nature, objectives and impacts on farm production, income, or consumption. This does not include any transfers to individual producers.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-general-services-support'},\n", + " {'category': 'Agricultural Regulation & Policy',\n", + " 'doc_id': 'owid_106',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The annual monetary value of gross transfers from consumers and taxpayers to agricultural producers, measured at the farm-gate level, arising from policy measures that support agriculture, regardless of their nature, objectives or impacts on farm production or income.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-producer-support'},\n", + " {'category': 'Agricultural Regulation & Policy',\n", + " 'doc_id': 'owid_107',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A value greater than 1 means the agriculture sector receives a higher share of government spending relative to its economic value. A value less than 1 reflects a lower orientation to agriculture.',\n", + " 'url': 'https://ourworldindata.org/grapher/agriculture-orientation-index'},\n", + " {'category': 'Agricultural Regulation & Policy',\n", + " 'doc_id': 'owid_108',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total official development assistance (ODA) and other official flows from all donors to the agriculture sector. This data is expressed in US dollars. It is adjusted for inflation but does not account for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-financial-assistance-and-flows-for-agriculture-by-recipient'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_109',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Absolute number of deaths per year attributed to ambient (outdoor) particulate matter (PM2.5) air pollution',\n", + " 'url': 'https://ourworldindata.org/grapher/absolute-number-of-deaths-from-ambient-particulate-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_110',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of nitrogen oxides (NOx), non-methane volatile organic compounds (VOCs) and sulphur dioxide (SO₂) measured in tonnes per year. This is measured across all human-induced sources.',\n", + " 'url': 'https://ourworldindata.org/grapher/air-pollutant-emissions'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_111',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average concentrations of suspended particulate matter, measured in micrograms per cubic meter.',\n", + " 'url': 'https://ourworldindata.org/grapher/air-pollution-london-vs-delhi'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_112',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This measures annual excess mortality from the health impacts of air pollution from fossil fuels.',\n", + " 'url': 'https://ourworldindata.org/grapher/pollution-deaths-from-fossil-fuels'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_113',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Levels of air pollution, measured as suspended particulate matter (micrograms per cubic meter) vs. GDP per capita (2011 international-$). Here, data for London and Delhi GDP levels are assumed to be in line with national average values for the UK and India.',\n", + " 'url': 'https://ourworldindata.org/grapher/air-pollution-vs-gdp-per-capita'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_114',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The reported annual death rate from chronic respiratory disease per 100,000 people, based on the underlying cause listed on the death certificate.',\n", + " 'url': 'https://ourworldindata.org/grapher/chronic-respiratory-diseases-death-rate-who-mdb'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_115',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to ambient air pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-ambient-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_116',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to household air pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-household-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_117',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to household and ambient air pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-household-and-ambient-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_118',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to air pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-from-air-pollution-per-100000'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_119',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths from outdoor ozone pollution, particulate pollution, and indoor fuel pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-by-source-from-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_120',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are given as the number of attributed deaths from pollution per 100,000 population. These rates are age-standardized, meaning they assume a constant age structure of the population: this allows for comparison between countries and over time.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-from-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_121',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to particulate matter air pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-from-ambient-particulate-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_122',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Deaths from outdoor particulate matter air pollution per 100,000 people. Countries below the diagonal line have experienced an increased death rate, whilst those above the line have seen a decreased death rate.',\n", + " 'url': 'https://ourworldindata.org/grapher/ambient-pollution-death-rates-2017-1990'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_123',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are measured as the number of premature deaths attributed to outdoor particulate matter air pollution per 100,000 individuals. Gross domestic product (GDP) per capita is measured in constant international-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/outdoor-pollution-rate-vs-gdp'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_124',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to ozone pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-from-ozone-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_125',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to ozone pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-from-ozone-pollution-gbd'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_126',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Age-standardized death rate from particular matter (PM2.5) exposure per 100,000 people versus the average mean annual exposure to particulate matter smaller than 2.5 microns (PM2.5), measured in micrograms per cubic meter.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-from-pm25-vs-pm25-concentration'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_127',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to air pollution. This includes three categories of air pollution: indoor household, outdoor particulate matter and ozone.',\n", + " 'url': 'https://ourworldindata.org/grapher/air-pollution-deaths-country'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_128',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: IHME, Global Burden of Disease (2019)',\n", + " 'url': 'https://ourworldindata.org/grapher/air-pollution-deaths-by-age'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_129',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of deaths from household and outdoor particulate matter air pollution per year. Household pollution-related deaths result from the use of solid fuels (crop wastes, dung, firewood, charcoal and coal) for cooking and heating.',\n", + " 'url': 'https://ourworldindata.org/grapher/deaths-from-household-and-outdoor-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_130',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual deaths from outdoor particulate matter air pollution.',\n", + " 'url': 'https://ourworldindata.org/grapher/absolute-number-of-deaths-from-outdoor-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_131',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: IHME, Global Burden of Disease (2019)',\n", + " 'url': 'https://ourworldindata.org/grapher/number-outdoor-pollution-deaths-by-age'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_132',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: IHME, Global Burden of Disease (2019)',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-deaths-from-outdoor-air-pollution-by-region'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_133',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to ozone pollution.',\n", + " 'url': 'https://ourworldindata.org/grapher/deaths-from-ozone-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_134',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Disease burden is measured in disability-adjusted life years (DALYs). DALYs are age-standardized and therefore adjust for changes in age structures of population through time and across countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/dalys-particulate-matter'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_135',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of various air pollutants, indexed to emission levels in the first year of data. Values in 1970 or 1990 are normalised to 100; values below 100 therefore indicate a decline in emissions. Volatile organic compounds (VOCs) do not include methane emissions.',\n", + " 'url': 'https://ourworldindata.org/grapher/emissions-of-air-pollutants'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_136',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Index of local air pollutant emissions since 1990. Annual emission levels are assumed to be 100 in 1990; values less than 100 therefore indicate a reduction in emissions; values over 100 indicate an increase since 1990.',\n", + " 'url': 'https://ourworldindata.org/grapher/emissions-of-air-pollutants-oecd'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_137',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Air pollutants are gases that can lead to negative impacts on human health and ecosystems. Most are produced from energy, industry, and agriculture.',\n", + " 'url': 'https://ourworldindata.org/grapher/long-run-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_138',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of particulate matter from all human-induced sources. This is measured in terms of PM₁₀ and PM₂.₅, which denotes particulate matter less than 10 and 2.5 microns in diameter, respectively.',\n", + " 'url': 'https://ourworldindata.org/grapher/emissions-of-particulate-matter'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_139',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Multiple sources compiled by World Bank (2024); World Bank (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/pm25-exposure-gdp'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_140',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Population-weighted average level of exposure to concentrations of suspended particles measuring less than 2.5 microns in diameter (PM2.5). Exposure is measured in micrograms of PM2.5 per cubic meter (µg/m³).',\n", + " 'url': 'https://ourworldindata.org/grapher/pm25-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_141',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in tonnes per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/so-emissions-by-world-region-in-million-tonnes'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_142',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: IHME, Global Burden of Disease (2019)',\n", + " 'url': 'https://ourworldindata.org/grapher/deaths-from-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_143',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of deaths attributed to outdoor particulate matter pollution per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/outdoor-pollution-death-rate'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_144',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are measured as the number of premature deaths attributed to outdoor particulate matter air pollution per 100,000 individuals in each age group.',\n", + " 'url': 'https://ourworldindata.org/grapher/outdoor-pollution-rates-by-age'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_145',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Deaths from outdoor particulate matter air pollution. Countries below the diagonal line have experienced an increase in deaths, whilst those above the line have seen a decrease.',\n", + " 'url': 'https://ourworldindata.org/grapher/outdoor-pollution-deaths-1990-2017'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_146',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Population-weighted average ozone (O₃) concentrations in parts per billion (ppb). Local concentrations of ozone are recorded and estimated at a 11x11km resolution. These values are subsequently weighted by population-density for calculation of nation-level average concentrations.',\n", + " 'url': 'https://ourworldindata.org/grapher/ozone-o3-concentration-in-ppb'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_147',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Population-weighted average level of exposure to concentrations of suspended particles measuring less than 2.5 microns in diameter. Exposure is measured in micrograms per cubic metre (µg/m³).',\n", + " 'url': 'https://ourworldindata.org/grapher/pm-exposure-1990-2017'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_148',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of deaths, from any cause, which are attributed to air pollution – from outdoor and indoor sources – as a risk factor.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-deaths-air-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_149',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of deaths, from any cause, where ambient particulate matter air pollution is a risk factor.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-deaths-outdoor-pollution'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_150',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The WHO recommends particulate matter (PM2.5) concentrations of 5 micrograms per cubic as the lower range of air pollution exposure, over which adverse health effects occur. The WHO has set interim targets of exposure for 35µg/m³, 25µg/m³, 15µg/m³, and 10µg/m³.',\n", + " 'url': 'https://ourworldindata.org/grapher/exposure-pollution-above-who-targets'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_151',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of the population exposed to outdoor concentrations of particulate matter (PM2.5) that exceed the WHO guideline value of 10 micrograms per cubic meter per year. 10µg/m³ represents the lower range of WHO recommendations for air pollution exposure over which adverse health effects are observed.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-above-who-pollution-guidelines'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_152',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Access to clean fuels or technologies such as natural gas, electricity, and clean cookstoves reduces exposure to indoor air pollutants, a leading cause of death in low-income households.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-the-population-without-access-to-clean-fuels-for-cooking'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_153',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions of specific air pollutants by source, measured in tonnes per year. This is given as a national annual total.',\n", + " 'url': 'https://ourworldindata.org/grapher/sources-of-air-pollution-in-the-uk'},\n", + " {'category': 'Air Pollution',\n", + " 'doc_id': 'owid_154',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Air pollutants are gases that can lead to negative impacts on human health and ecosystems. Most are produced from energy, industry, and agriculture.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-air-pollutant-emissions'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_155',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Fur Free Alliance (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/active-fur-farms'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_156',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The estimated number of animal lives that go toward each kilogram of animal product purchased for retail sale. This only includes direct deaths e.g. the pork numbers include only the deaths of pigs slaughtered for food.',\n", + " 'url': 'https://ourworldindata.org/grapher/animal-lives-lost-direct'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_157',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The estimated number of animal lives that go toward each kilogram of animal product purchased for retail sale. This includes direct and indirect deaths e.g. pork numbers include pigs slaughtered for food (direct) but also those who die pre-slaughter and feed fish given to those pigs (indirect).',\n", + " 'url': 'https://ourworldindata.org/grapher/animal-lives-lost-total'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_158',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"'Cages' includes both battery and 'enriched' cages, which are larger, furnished cages that provide slightly more space. Battery cages have been banned in the UK since 2012.\",\n", + " 'url': 'https://ourworldindata.org/grapher/egg-production-system'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_159',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Finfish refers to any fish with fins, as opposed to shellfish.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-farmed-finfishes'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_160',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The quantity of meat produced per average animal over its lifetime. For example, the average chicken would yield 1.7 kilogram of edible meat.',\n", + " 'url': 'https://ourworldindata.org/grapher/kilograms-meat-per-animal'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_161',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'These numbers do not include additional deaths that happen during the production of meat and dairy, chickens slaughtered in the egg industry, and other land animals for which there is no data.',\n", + " 'url': 'https://ourworldindata.org/grapher/land-animals-slaughtered-for-meat'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_162',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Welfare Footprint Project (2022)',\n", + " 'url': 'https://ourworldindata.org/grapher/laying-hens-cages-and-cage-free'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_163',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Estimates of the number of days that the average hen will spend in pain over her laying life. A 'day' is considered to be 16 hours, the length of time that the average hen is awake.\",\n", + " 'url': 'https://ourworldindata.org/grapher/pain-levels-hen-systems'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_164',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Decapod crustaceans are animals such as shrimps, crabs, lobsters, prawns, and crayfish. This data does not include species without an estimated mean weight (which were an additional 6% of reported global production).',\n", + " 'url': 'https://ourworldindata.org/grapher/farmed-crustaceans'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_165',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This data does not include lobsters, farmed fish used as bait, and species without an estimated mean weight (which were an additional 17% of reported global fish production).',\n", + " 'url': 'https://ourworldindata.org/grapher/farmed-fish-killed'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_166',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This data is based on the average tonnage of annual catch from 2007 to 2016, and estimated mean weights for fish species. It does not include unrecorded fish capture, such as fish caught illegally and those caught as bycatch and discards.',\n", + " 'url': 'https://ourworldindata.org/grapher/wild-caught-fish'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_167',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The survey measured attitudes towards animal farming with around 1,500 adults in the United States, census-balanced to be representative of age, gender, region, ethnicity, and income.',\n", + " 'url': 'https://ourworldindata.org/grapher/attitudes-bans-factory-farming'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_168',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The survey measured attitudes towards animal farming with around 1,500 adults in the United States, census-balanced to be representative of age, gender, region, ethnicity, and income.',\n", + " 'url': 'https://ourworldindata.org/grapher/survey-dietary-choices-sentience'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_169',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The survey measured attitudes towards animal farming with around 1,500 adults in the United States, census-balanced to be representative of age, gender, region, ethnicity, and income.',\n", + " 'url': 'https://ourworldindata.org/grapher/survey-animal-pain-sentience'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_170',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '– Flexitarian: mainly vegetarian, but occasionally eat meat or fish. – Pescetarian: eat fish but do not eat meat or poultry. – Vegetarian: do not eat any meat, poultry, game, fish, or shellfish. – Plant-based / Vegan: do not eat dairy products, eggs, or any other animal product.',\n", + " 'url': 'https://ourworldindata.org/grapher/dietary-choices-of-british-adults'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_171',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source:',\n", + " 'url': 'https://ourworldindata.org/grapher/eggs-cage-free'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_172',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Welfare Footprint Project (2022)',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-eggs-produced-by-different-housing-systems'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_173',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimates of the time that an average chicken raised for meat will spend in different levels of pain. Both breeds of chicken reach the same slaughter weight, just at different rates.',\n", + " 'url': 'https://ourworldindata.org/grapher/pain-broiler-chickens'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_174',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '– Flexitarian: mainly vegetarian, but occasionally eat meat or fish. – Pescetarian: eat fish but do not eat meat or poultry. – Vegetarian: do not eat any meat, poultry, game, fish, or shellfish. – Plant-based / Vegan: do not eat dairy products, eggs, or any other animal product.',\n", + " 'url': 'https://ourworldindata.org/grapher/dietary-choices-uk'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_175',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Bullfighting is a physical contest that involves a bullfighter attempting to subdue, immobilize, or kill a bull.',\n", + " 'url': 'https://ourworldindata.org/grapher/bullfighting-ban'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_176',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Chick culling is the process of separating and killing unwanted male and unhealthy female chicks that cannot produce eggs in industrialized egg facilities.',\n", + " 'url': 'https://ourworldindata.org/grapher/banning-of-chick-culling'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_177',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source:',\n", + " 'url': 'https://ourworldindata.org/grapher/fur-farming-ban'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_178',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Fur Free Alliance (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/fur-trading-ban'},\n", + " {'category': 'Animal Welfare',\n", + " 'doc_id': 'owid_179',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/animals-slaughtered-for-meat'},\n", + " {'category': 'Antibiotics',\n", + " 'doc_id': 'owid_180',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Antibiotics are used in livestock for animal health and productivity, but also pose a risk for antibiotic resistance in both humans and livestock. Data is measured as the milligrams of total antibiotic use per kilogram of meat production. This is corrected for differences in livestock numbers and types, normalising to a population-corrected unit (PCU). A suggested global cap of antibiotic use in livestock is set at 50mg/PCU.',\n", + " 'url': 'https://ourworldindata.org/grapher/antibiotic-use-in-livestock-in-europe'},\n", + " {'category': 'Antibiotics',\n", + " 'doc_id': 'owid_181',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Antibiotic use in livestock, measured as the milligrams of total active ingredient used per kilogram of meat production versus gross domestic product (GDP) per capita.',\n", + " 'url': 'https://ourworldindata.org/grapher/antibiotic-use-in-livestock-vs-gdp-per-capita'},\n", + " {'category': 'Antibiotics',\n", + " 'doc_id': 'owid_182',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Antibiotic use in livestock, measured as the milligrams of total active ingredient used per kilogram of meat production versus the average meat supply per capita, measured in kilograms per person per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/antibiotic-use-in-livestock-vs-meat-supply-per-capita'},\n", + " {'category': 'Antibiotics',\n", + " 'doc_id': 'owid_183',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Projected global antibiotic use in livestock under expected meat consumption levels in 2030, and a range of modeled reduction scenarios based on antibiotic use limits, reductions in meat consumption, and a fee on antibiotic sales. Further details on each scenario are given in the sources tab. Global antibiotic use is measured in tonnes per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/reduction-global-antibiotic-use'},\n", + " {'category': 'Antibiotics',\n", + " 'doc_id': 'owid_184',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cephalosporins are a class of antibiotics commonly used to treat E. coli infections. This shows the estimated share of infections by E. coli in the bloodstream that were resistant to 3rd generation cephalosporins.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-e-coli-bloodstream-infections-due-to-antimicrobial-resistant-bacteria'},\n", + " {'category': 'Antibiotics',\n", + " 'doc_id': 'owid_185',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Methicillin is an antibiotic commonly used to treat infections by Staphylococcus aureus. This shows the estimated share of infections by S. aureus in the bloodstream that were resistant to methicillin.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-s-aureus-bloodstream-infections-that-are-resistant-to-antibiotics'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_186',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carcass ratio is the number of dead elephants observed during survey counts as a percentage of the total population. Carcass ratios greater than 8% are considered to be a strong indication of a declining population.',\n", + " 'url': 'https://ourworldindata.org/grapher/african-elephant-carcass-ratio'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_187',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Fish catch is measured as annual catch divided by the mean catch over the stock's time series. A value greater than one means annual catch is higher than average over the entire time period.\",\n", + " 'url': 'https://ourworldindata.org/grapher/annual-fish-catch-taxa'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_188',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Fish catch is measured as annual catch divided by the mean catch over the stock's time series. A value greater than one means annual catch is higher than average over the entire time period.\",\n", + " 'url': 'https://ourworldindata.org/grapher/fish-catch-region'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_189',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Aquaculture is the farming of aquatic organisms including fish, molluscs, crustaceans and aquatic plants. Aquaculture production specifically refers to output from aquaculture activities, which are designated for final harvest for consumption.',\n", + " 'url': 'https://ourworldindata.org/grapher/aquaculture-farmed-fish-production'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_190',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated number of black rhinos.',\n", + " 'url': 'https://ourworldindata.org/grapher/black-rhinos'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_191',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Capture (wild) fishery production does not include seafood produced from fish farming (aquaculture).',\n", + " 'url': 'https://ourworldindata.org/grapher/capture-fishery-production'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_192',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The bird population index is measured relative to population size in the year 2000 (i.e. the value in 2000 = 100).',\n", + " 'url': 'https://ourworldindata.org/grapher/bird-populations-eu'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_193',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in mangrove area from the baseline extent of mangroves in 2000.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-in-total-mangrove-area'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_194',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Changes in butterfly populations are measured as an index relative to populations in their start year (1976 or 1990 depending on the species group).',\n", + " 'url': 'https://ourworldindata.org/grapher/changes-uk-butterfly'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_195',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The share of satellite imagery pixels measuring chlorophyll-a within a country's Exclusive Economic Zone that are above the 90th percentile of the global baseline (2000-2004). The value given is an annual average of monthly deviations.\",\n", + " 'url': 'https://ourworldindata.org/grapher/chlorophyll-a-deviation-from-the-global-average'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_196',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'An “alien” species is described as one which has been introduced outside its natural distribution range because of human activity. An alien species which then becomes a threat to native biodiversity is known as an \"invasive alien species\".',\n", + " 'url': 'https://ourworldindata.org/grapher/budget-to-manage-invasive-alien-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_197',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Being party to the Nagoya Protocol means agreeing to follow the rules and guidelines set forth in the agreement, which aim to ensure that the benefits of genetic resources are shared fairly and equitably, and that traditional knowledge is protected and respected.',\n", + " 'url': 'https://ourworldindata.org/grapher/countries-that-are-parties-to-the-nagoya-protocol'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_198',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The Access and Benefit-Sharing Clearing-House Protocol is a supplementary agreement to the Nagoya Protocol that establishes a web-based platform for sharing information on the use of genetic resources and associated traditional knowledge.',\n", + " 'url': 'https://ourworldindata.org/grapher/countries-to-access-and-benefit-sharing-clearing-house'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_199',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.',\n", + " 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_200',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The vertical axis shows the date of peak blossom, expressed as the number of days since 1st January. The timing of the peak cherry blossom is influenced by spring temperatures. Higher temperatures due to climate change have caused the peak blossom to gradually move earlier in the year since the early 20th century.',\n", + " 'url': 'https://ourworldindata.org/grapher/date-of-the-peak-cherry-tree-blossom-in-kyoto'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_201',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of European bird species that have seen a significant recovery in their populations in recent decades, categorized by the main driver of their recovery.',\n", + " 'url': 'https://ourworldindata.org/grapher/drivers-of-recovery-in-european-bird-populations'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_202',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Endemic species are those known to occur naturally within one country only.',\n", + " 'url': 'https://ourworldindata.org/grapher/endemic-amphibian-species-by-country'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_203',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Endemic species are those known to occur naturally within one country only.',\n", + " 'url': 'https://ourworldindata.org/grapher/endemic-bird-species-by-country'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_204',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Endemic species are those known to occur naturally within one country only.',\n", + " 'url': 'https://ourworldindata.org/grapher/endemic-freshwater-crab-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_205',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Endemic species are those known to occur naturally within one country only.',\n", + " 'url': 'https://ourworldindata.org/grapher/endemic-mammal-species-by-country'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_206',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of endemic reef-forming coral species by country. Endemic species are those known to occur naturally within one country only.',\n", + " 'url': 'https://ourworldindata.org/grapher/endemic-reef-forming-coral-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_207',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Endemic species are those known to occur naturally within one country only. This includes the exclusive economic zone of a country which is the sea within 200 nautical miles of a country's coastal boundary.\",\n", + " 'url': 'https://ourworldindata.org/grapher/endemic-shark-and-ray-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_208',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fish and seafood production is measured as the sum of seafood from wild catch and fish farming (aquaculture).',\n", + " 'url': 'https://ourworldindata.org/grapher/fish-seafood-production'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_209',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total annual landings – fish catch brought back to land – of bottom-living fish. This excludes shellfish.',\n", + " 'url': 'https://ourworldindata.org/grapher/fish-catch-uk'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_210',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Discards are animals thrown back (alive or dead) into the sea after being caught during fishing activities. This represents bycatch (fish caught unintentionally) that is not brought ashore for use.',\n", + " 'url': 'https://ourworldindata.org/grapher/fish-discards'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_211',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fish stocks are measured by biomass: the number of individuals multiplied by their mass. Fishing intensity by the fraction of the fish population that is caught in a given year. Both are given as a ratio of their levels at the maximum sustainable yield – the level at which we can catch the maximum amount of fish without a decline in fish populations. A value of one maximises fish catch without decreasing fish populations. This is the target level.',\n", + " 'url': 'https://ourworldindata.org/grapher/fish-stocks-taxa'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_212',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fish stocks are measured by biomass: the number of individuals multiplied by their mass. Fishing intensity by the fraction of the fish population that is caught in a given year. Both are given as a ratio of their levels at the maximum sustainable yield – the level at which we can catch the maximum amount of fish without a decline in fish populations. A value of one maximises fish catch without decreasing fish populations. This is the target level.',\n", + " 'url': 'https://ourworldindata.org/grapher/fish-stocks-by-region'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_213',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Fishing intensity measured the extent to which a stock is being exploited. This is the fraction of the fish population that is caught in a given year. Here it's measured as the intensity divided by the intensity at the maximum sustainable yield – the level at which we can catch the maximum amount of fish without a decline in fish populations. A value of one is the optimal level to maximize fish catch without declining populations. Greater than one suggests overfishing.\",\n", + " 'url': 'https://ourworldindata.org/grapher/fishing-pressure-by-taxa'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_214',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Fishing intensity measures the extent to which a stock is being exploited. Here, it's measured as current fishing intensity divided by the intensity at the maximum sustainable yield. A value of one is the optimal level to maximize fish catch without causing fish population. Greater than one suggests overfishing.\",\n", + " 'url': 'https://ourworldindata.org/grapher/fishing-pressure-by-region'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_215',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimates of North Atlantic cod (Gadus morhua) catch off Newfoundland and Labrador, Eastern Canada.',\n", + " 'url': 'https://ourworldindata.org/grapher/long-term-cod-catch'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_216',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Some wild fish catch is processed into fishmeal and oils for animal feed – this is used for land-based livestock and fish farms (aquaculture). Efficiency improvements in aquaculture, and changes in the diets of farmed fish means production has increased rapidly, without increasing inputs from wild fish.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-aquaculture-wild-fish-feed'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_217',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global biomass (measured in tonnes of carbon) versus the abundance (number of individuals) of different taxonomic groups. These are given as order-of-magnitude estimates.',\n", + " 'url': 'https://ourworldindata.org/grapher/biomass-vs-abundance-taxa'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_218',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Wildlife trade is quantified in terms of whole organism equivalents (WOE). For example, five skulls represent five WOEs, whereas it's assumed that four ears are sourced from two animals and so represent two WOEs.\",\n", + " 'url': 'https://ourworldindata.org/grapher/wildlife-exports'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_219',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Fish stocks are measured by their biomass: the number of individuals multiplied by their mass. Here it's measured as the biomass of a fish stock divided by the biomass at its maximum sustainable yield – the level at which we can catch the maximum amount of fish without a decline in fish populations. A value of one maximises fish catch without decreasing fish populations.\",\n", + " 'url': 'https://ourworldindata.org/grapher/biomass-fish-stocks-taxa'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_220',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fish stocks are measured by their biomass: the number of individuals multiplied by their mass. Here the biomass of a fish stock is divided by the biomass at its maximum sustainable yield. A value of one maximizes fish catch without decreasing fish populations.',\n", + " 'url': 'https://ourworldindata.org/grapher/biomass-fish-stocks-region'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_221',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated number of Greater One-Horned rhinos.',\n", + " 'url': 'https://ourworldindata.org/grapher/indian-rhinos'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_222',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated number of Javan rhinos.',\n", + " 'url': 'https://ourworldindata.org/grapher/javan-rhinos'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_223',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The Living Planet Index (LPI) measures the average decline in monitored wildlife populations. The index value measures the change in abundance in 31,821 populations across 5,230 species relative to the year 1970 (i.e. 1970 = 100%).',\n", + " 'url': 'https://ourworldindata.org/grapher/global-living-planet-index'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_224',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The Living Planet Index (LPI) measures the average relative decline in monitored wildlife populations. The index value measures the change in abundance in 38,427 populations across 5,268 species relative to the year 1970 (i.e. 1970 = 100%).',\n", + " 'url': 'https://ourworldindata.org/grapher/living-planet-index-by-region'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_225',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of local animal breeds, those that exist in only one country, with sufficient genetic material stored within genebank collections to allow the reconstitution of the breed in case of extinction.',\n", + " 'url': 'https://ourworldindata.org/grapher/proportion-of-animal-breeds-genetic-conservation'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_226',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Material footprint is the quantity of material needed to meet a country's material demand. It is material production, adjusted for trade. The total material footprint is the sum of the material footprint for biomass, fossil fuels, metal ores, and non-metal ores, given in tonnes per year.\",\n", + " 'url': 'https://ourworldindata.org/grapher/material-footprint-per-capita'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_227',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Material footprint is the quantity of material needed to meet a country's material demand. It is material production, adjusted for trade. The total material footprint is the sum of the material footprint for biomass, fossil fuels, metal ores, and non-metal ores.\",\n", + " 'url': 'https://ourworldindata.org/grapher/material-footprint-per-unit-of-gdp'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_228',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The International Treaty on Plant Genetic Resources for Food and Agriculture is an international agreement that aims to ensure the conservation and sustainable use of plant genetic resources for food and agriculture, and to promote the fair and equitable sharing of the benefits derived from their use.',\n", + " 'url': 'https://ourworldindata.org/grapher/countries-to-the-international-treaty-on-plant-genetic-resources'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_229',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Mountain Green Cover Index measures the share of mountainous areas covered by either forest, cropland, grassland or wetland. An increase in green mountain cover may reflect either the expansion of natural ecosystems or an increase in the growth of vegetation in areas previously covered by glaciers.',\n", + " 'url': 'https://ourworldindata.org/grapher/mountain-green-cover-index'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_230',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Aichi Target 9: By 2020, invasive alien species and pathways are identified and prioritized, priority species are controlled or eradicated and measures are in place to manage pathways to prevent their introduction and establishment.',\n", + " 'url': 'https://ourworldindata.org/grapher/national-biodiversity-strategy-align-with-aichi-target-9'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_231',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Aichi Target 2: By 2020, at the latest, biodiversity values have been integrated into national and local development and poverty reduction strategies and planning processes and are being incorporated into national accounting and reporting systems.',\n", + " 'url': 'https://ourworldindata.org/grapher/national-progress-towards-aichi-biodiversity-target-2'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_232',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated number of Northern White rhinos.',\n", + " 'url': 'https://ourworldindata.org/grapher/northern-white-rhinos'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_233',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: African Elephant Specialist Group (AfESG); Great Elephant Census',\n", + " 'url': 'https://ourworldindata.org/grapher/african-elephants'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_234',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Estimates on wild mammal populations tend to come with significant uncertainty. A complete time-series for the Asian elephant population is not available, however, it's estimated to have declined from approximately 100,000 in the early 20th century to approximately 45,000 today.\",\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-asian-elephants'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_235',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The projected number of mammal, bird and amphibian species losing a certain extent of habitat by 2050 as a result of cropland expansion globally under a business-as-usual-scenario.',\n", + " 'url': 'https://ourworldindata.org/grapher/projected-habitat-loss-extent-bau'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_236',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of moderate (up to 30% of corals affected) and severe coral bleaching events (more than 30% of corals) measured at 100 fixed global locations. Bleaching occurs when stressful conditions cause corals to expel their algal symbionts.',\n", + " 'url': 'https://ourworldindata.org/grapher/coral-bleaching-events'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_237',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Coral bleaching typically occurs when water temperatures rise above the normal range for the coral's habitat. This is more likely during El Niño stages of the ENSO cycle when tropical sea temperatures are warmer.\",\n", + " 'url': 'https://ourworldindata.org/grapher/bleaching-events-enso'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_238',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of identified and named species in each taxonomic group, as of 2022. Since many species have not yet been described, this is a large underestimate of the total number of species in the world.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-described-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_239',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of global parties signed on to multilateral agreements designed to address trans-boundary environmental issues.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-parties-env-agreements'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_240',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimates of wild rhino poaching are recorded and reported by only a select number of countries. Data is based primarily on recorded poaching and fatalities by national authorities in national parks and reserves.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-rhinos-poached'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_241',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is estimates on rhino horn seizures over the period from 2009 to September 2018. An average rhino horn weighs approximately 1 to 3 kilograms.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-seized-rhino-horns'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_242',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Coral bleaching typically occurs when water temperatures rise above the normal range for the coral's habitat. This is more likely during El Niño stages of the ENSO cycle when tropical sea temperatures are warmer.\",\n", + " 'url': 'https://ourworldindata.org/grapher/severe-bleaching-events-enso'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_243',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of species in each taxonomic group evaluated for their extinction risk level is a small share of the total number of known species in many taxonomic groups.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-species-evaluated-iucn'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_244',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: IUCN Red List (2022)',\n", + " 'url': 'https://ourworldindata.org/grapher/extinct-species-since-1500'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_245',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The IUCN Red List has assessed the extinction risk of only a small share of the total known species in the world. This means the number of species threatened with extinction is likely to be a significant underestimate of the total number of species at risk.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-species-threatened'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_246',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Endemic species are those known to occur naturally within one country only. Threatened species are those whose extinction risk is classified as 'Critically Endangered', 'Endangered', or 'Vulnerable'. They are at a high or greater risk of extinction in the wild.\",\n", + " 'url': 'https://ourworldindata.org/grapher/threatened-endemic-mammal-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_247',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The conservation of plant genetic resources for food and agriculture (GRFA) in medium-long term conservation facilities represents the most trusted means of conserving plant genetic resources worldwide.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-accessions-of-plant-genetic-resources-secured-in-conservation-facilities'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_248',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: International Whaling Commission (IWC); Rocha et al. (2014)',\n", + " 'url': 'https://ourworldindata.org/grapher/whale-catch'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_249',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: International Whaling Commission (IWC) & Rocha et al. (2014)',\n", + " 'url': 'https://ourworldindata.org/grapher/whales-killed-per-decade'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_250',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the projected change in cropland area relative to the year 2010. This is shown under a business-as-usual scenario, and multiple reduction scenarios.',\n", + " 'url': 'https://ourworldindata.org/grapher/projected-cropland-by-2050'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_251',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of local livestock breeds which are classified as being at risk of extinction. Breed-related information remains far from complete. For almost 60 percent of all reported breeds, risk status is not known because of missing population data or lack of recent updates.',\n", + " 'url': 'https://ourworldindata.org/grapher/proportion-of-local-breeds-at-risk-of-extinction'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_252',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The average share of each marine Key Biodiversity Area (KBA) that is covered by designated protected areas.',\n", + " 'url': 'https://ourworldindata.org/grapher/protected-area-coverage-of-marine-key-biodiversity-areas'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_253',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The average share of each mountain Key Biodiversity Area (KBA) that is covered by designated protected areas.',\n", + " 'url': 'https://ourworldindata.org/grapher/coverage-by-protected-areas-of-important-sites-for-mountain-biodiversity'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_254',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The Red List Index shows trends in overall extinction risk for groups of species. It is an index between 0 and 1. A value of 1 indicates that there is no current extinction risk to any of the included species. A value of 0 would mean that all included species are extinct.',\n", + " 'url': 'https://ourworldindata.org/grapher/red-list-index'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_255',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Aquaculture is the farming of aquatic organisms including fish, molluscs, crustaceans and aquatic plants. Capture fishery production is the volume of wild fish catches landed for all commercial, industrial, recreational and subsistence purposes.',\n", + " 'url': 'https://ourworldindata.org/grapher/capture-fisheries-vs-aquaculture'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_256',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Aquaculture is the farming of aquatic organisms including fish, molluscs, crustaceans and aquatic plants. Capture fishery production is the volume of wild fish catches landed for all commercial, industrial, recreational and subsistence purposes.',\n", + " 'url': 'https://ourworldindata.org/grapher/capture-and-aquaculture-production'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_257',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of coral reefs in the Caribbean where major reef-building group of corals, Acropora, was dominant or present. The declines show the loss of coral cover as a result of pressures including water pollution, disease outbreaks, and coral bleaching.',\n", + " 'url': 'https://ourworldindata.org/grapher/caribbean-acropora'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_258',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'In many taxonomic groups, very few described species have been evaluated for their extinction risk level. This means the estimated number of species at risk of extinction in these groups is likely to be a significant undercount.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-species-evaluated-iucn'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_259',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fish stocks are overexploited when fish catch exceeds the maximum sustainable yield (MSY) – the rate at which fish populations can regenerate.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-fish-stocks-overexploited'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_260',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A protected area is a clearly defined geographical space, recognised, dedicated and managed, through legal or other effective means, to achieve the long-term conservation of nature with associated ecosystem services and cultural values.',\n", + " 'url': 'https://ourworldindata.org/grapher/proportion-of-forest-area-within-legally-established-protected-areas'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_261',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The proportion of freshwater Key Biodiversity Areas (KBAs) which are covered by designated protected areas.',\n", + " 'url': 'https://ourworldindata.org/grapher/proportion-of-important-sites-for-freshwater-biodiversity-covered-by-protected-areas'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_262',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Terrestrial protected areas are areas of at least 1,000 hectares that are designated by national authorities in order to preserve their ecosystem services and cultural values.',\n", + " 'url': 'https://ourworldindata.org/grapher/terrestrial-protected-areas'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_263',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Forest area is land with natural or planted stands of trees at least five meters in height, whether productive or not, and excludes tree stands in agricultural production systems.',\n", + " 'url': 'https://ourworldindata.org/grapher/forest-area-as-share-of-land-area'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_264',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Marine protected areas are regions of intertidal or sub-tidal land and associated water, flora and fauna, and cultural and historical features that have been legally or effectively reserved for protection.',\n", + " 'url': 'https://ourworldindata.org/grapher/marine-protected-areas'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_265',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Marine protected areas are areas that have been reserved by law or other effective means to protect part or all of the enclosed environment.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-marine-protected-area'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_266',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Species can be traded locally, nationally or internationally as pets, or for their products (such as meat, medicines, ivory, or other body parts).',\n", + " 'url': 'https://ourworldindata.org/grapher/share-species-traded'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_267',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Threatened species are those with an extinction risk category of either 'Critically Endangered', 'Endangered' or 'Vulnerable' on the IUCN Red List. This is shown by taxonomic group, and only for the more completely evaluated groups (where >80% of described species have been evaluated).\",\n", + " 'url': 'https://ourworldindata.org/grapher/share-threatened-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_268',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Proportion of terrestrial Key Biodiversity Areas (KBAs) that are covered by designated protected areas.',\n", + " 'url': 'https://ourworldindata.org/grapher/protected-terrestrial-biodiversity-sites'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_269',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Scheffers, B. R., Oliveira, B. F., Lamb, I., & Edwards, D. P. (2019). Global wildlife trade across the tree of life. Science.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-species-traded-pets'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_270',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of traded species that are traded for products, such as for meat, medicines, ivory, or other body parts.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-species-traded-products'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_271',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated number of southern white rhinos.',\n", + " 'url': 'https://ourworldindata.org/grapher/southern-white-rhinos'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_272',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The International Whaling Commission (IWC) was set up to preserve global whale stocks through catch quotes, regulation of hunting methods and designation of specific hunting areas.',\n", + " 'url': 'https://ourworldindata.org/grapher/iwc-status'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_273',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fish stocks become overexploited when fish are caught at a rate higher than the population can support, and the ability of the stock to produce its Maximum Sustainable Yield (MSY) is jeopardized.',\n", + " 'url': 'https://ourworldindata.org/grapher/fish-stocks-within-sustainable-levels'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_274',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Number of Sumatran rhinos (officially named 'Dicerorhinus sumatrensis').\",\n", + " 'url': 'https://ourworldindata.org/grapher/sumatran-rhinos'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_275',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown are estimates of global whale biomass in pre-whaling periods versus the year 2001. This is measured in tonnes of carbon.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-whale-biomass'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_276',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown are estimates of global whale populations in pre-whaling periods versus the year 2001.',\n", + " 'url': 'https://ourworldindata.org/grapher/whale-populations'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_277',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Threatened species are those with an extinction risk category of either 'Critically Endangered', 'Endangered', or 'Vulnerable'.\",\n", + " 'url': 'https://ourworldindata.org/grapher/threatened-bird-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_278',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The number of threatened endemic bird species by country. Endemic species are those known to occur naturally within one country only. Threatened species are those with an extinction risk category of either 'Critically Endangered', 'Endangered', or 'Vulnerable'.\",\n", + " 'url': 'https://ourworldindata.org/grapher/threatened-endemic-bird-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_279',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The number of threatened endemic reef-forming coral species by country. Endemic species are those known to occur naturally within one country only. Threatened species are those with an extinction risk category of either 'Critically Endangered', 'Endangered', or 'Vulnerable'.\",\n", + " 'url': 'https://ourworldindata.org/grapher/threatened-endemic-coral'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_280',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Threatened species are the number of species classified by the IUCN Red List as endangered, vulnerable, rare, indeterminate, out of danger, or insufficiently known.',\n", + " 'url': 'https://ourworldindata.org/grapher/fish-species-threatened'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_281',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Threatened mammal species excluding whales and porpoises. Threatened species are those with an extinction risk category of either 'Critically Endangered', 'Endangered', or 'Vulnerable'.\",\n", + " 'url': 'https://ourworldindata.org/grapher/threatened-mammal-species'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_282',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total official development assistance (ODA) transferred for use in biodiversity conservation and protection efforts, by donor. This data is expressed in constant US dollars. It is adjusted for inflation but does not account for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-oda-for-biodiversity-by-donor'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_283',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total official development assistance (ODA) transferred for use in biodiversity conservation and protection efforts, by recipient. This data is expressed in constant US dollars. It is adjusted for inflation but does not account for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-oda-for-biodiversity-by-recipient'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_284',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of transboundary animal breeds, those that exist in more than one country, with sufficient genetic material stored within genebank collections to allow the reconstitution of the breed in case of extinction.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-transboundary-animal-breeds-which-have-genetic-resources-secured-in-conservation-facilities'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_285',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is estimates on rhino horn seizures over the period from 2009 to September 2018. An average rhino horn weighs approximately 1 to 3 kilograms.',\n", + " 'url': 'https://ourworldindata.org/grapher/seized-rhino-horns'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_286',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: FishStat via Pauly, Zeller, and Palomares from Sea Around Us Concepts, Design and Data.',\n", + " 'url': 'https://ourworldindata.org/grapher/wild-fish-allocation'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_287',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The International Whaling Commission (IWC) was set up to preserve global whale stocks through catch quotes, regulation of hunting methods and designation of specific hunting areas.',\n", + " 'url': 'https://ourworldindata.org/grapher/iwc-members'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_288',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source:',\n", + " 'url': 'https://ourworldindata.org/grapher/fish-catch-gear-type'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_289',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: FishStat via Pauly, Zeller, and Palomares from Sea Around Us Concepts, Design and Data.',\n", + " 'url': 'https://ourworldindata.org/grapher/wild-fish-catch-gear-type'},\n", + " {'category': 'Biodiversity',\n", + " 'doc_id': 'owid_290',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Bottom trawling is a fishing method in which a large, heavy net is dragged along the seafloor to catch fish and other marine life.',\n", + " 'url': 'https://ourworldindata.org/grapher/bottom-trawling'},\n", + " {'category': 'Biofuels',\n", + " 'doc_id': 'owid_291',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of domestic cereal supply – after correcting for trade – which is allocated to other uses (primarily industrial uses such as biofuel production) as opposed to being used for direct human consumption or animal feed.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-cereals-industrial-uses'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_292',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Biological weapons are organisms or toxins used to cause death or harm through their poisonous properties. The convention bans developing, producing, acquiring, possessing, and transferring biological weapons and requires countries to destroy them.',\n", + " 'url': 'https://ourworldindata.org/grapher/biological-weapons-convention'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_293',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Chemical weapons are chemicals used to cause death or harm through their poisonous properties. The convention bans developing, producing, acquiring, possessing, transferring, and using chemical weapons and requires countries to destroy them.',\n", + " 'url': 'https://ourworldindata.org/grapher/chemical-weapons-convention'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_294',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Biological weapons are organisms or toxins used to cause death or harm through their poisonous properties.',\n", + " 'url': 'https://ourworldindata.org/grapher/biological-weapons'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_295',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Chemical weapons are chemicals used to cause death or harm through their poisonous properties.',\n", + " 'url': 'https://ourworldindata.org/grapher/chemical-weapons'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_296',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Biological weapons are organisms or toxins used to cause death or harm through their poisonous properties. The closest a country came to using biological weapons ever is recorded.',\n", + " 'url': 'https://ourworldindata.org/grapher/historical-biological-weapons'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_297',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Chemical weapons are chemicals used to cause death or harm through their poisonous properties. The closest a country came to using chemical weapons ever is recorded.',\n", + " 'url': 'https://ourworldindata.org/grapher/historical-chemical-weapons'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_298',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Biological weapons are organisms or toxins used to cause death or harm through their poisonous properties.',\n", + " 'url': 'https://ourworldindata.org/grapher/biological-weapons-proliferation'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_299',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Chemical weapons are chemicals used to cause death or harm through their poisonous properties.',\n", + " 'url': 'https://ourworldindata.org/grapher/chemical-weapons-proliferation'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_300',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Biological weapons are organisms or toxins used to cause death or harm through their poisonous properties. The closest a country got to using biological weapons ever is recorded.',\n", + " 'url': 'https://ourworldindata.org/grapher/historical-biological-weapons-proliferation'},\n", + " {'category': 'Biological & Chemical Weapons',\n", + " 'doc_id': 'owid_301',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Chemical weapons are chemicals used to cause death or harm through their poisonous properties. The closest a country came to using chemical weapons ever is recorded.',\n", + " 'url': 'https://ourworldindata.org/grapher/historical-chemical-weapons-proliferation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_302',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Adjusted net savings are equal to net national savings plus education expenditure and minus energy depletion, mineral depletion, net forest depletion, and carbon dioxide.',\n", + " 'url': 'https://ourworldindata.org/grapher/adjusted-net-savings-per-person'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_303',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide (CO₂) emissions from fossil fuels and industry. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co2-emissions-per-country'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_304',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Emissions from fossil fuels and industry are included, but not land-use change emissions. International aviation and shipping are included as separate entities, as they are not included in any country's emissions.\",\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co-emissions-by-region'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_305',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from cement, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co2-cement'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_306',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from coal, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co2-coal'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_307',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This measures the amount of CO₂ emissions linked to deforestation for food production – it is trade-adjusted, to reflect the carbon footprint of diets within a given country. It is based on the annual average over the period from 2010 to 2014.',\n", + " 'url': 'https://ourworldindata.org/grapher/deforestation-co2-trade-by-product'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_308',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Tonnes of CO₂ emissions linked to deforestation for food production – it is trade-adjusted, to reflect the carbon footprint of diets within a given country. Based on the annual average over the period from 2010 to 2014.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-deforestation-for-food'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_309',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co2-flaring'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_310',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from gas, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co2-gas'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_311',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-land-use'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_312',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-land-use-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_313',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from oil, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co2-oil'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_314',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from other industry sources, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co2-other-industry'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_315',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change. They are measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-co2-including-land-use'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_316',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in gross domestic product (GDP) and carbon dioxide (CO₂) emissions.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-gdp-growth'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_317',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in gross domestic product (GDP), population, and carbon dioxide (CO₂) emissions.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-gdp-pop-growth'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_318',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions include carbon dioxide, methane and nitrous oxide from all sources, including land-use change. They are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.',\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-emissions-by-world-region'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_319',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide (CO₂) emissions from fossil fuels and industry. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-co2-annual-pct'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_320',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Consumption-based emissions are national emissions that have been adjusted for trade. This map denotes whether a country's average per capita emissions are above or below the value of global per capita emissions.\",\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-co2-per-capita-equity'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_321',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"This map denotes whether a country's average per capita emissions are above or below the value of global per capita emissions. This is based on territorial emissions, which don't adjust for trade.\",\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-vs-average'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_322',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global average land-sea temperature anomaly relative to the 1961-1990 average temperature.',\n", + " 'url': 'https://ourworldindata.org/grapher/temperature-anomaly'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_323',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Given as a share of carbon dioxide emissions from fossil fuels and land use change.',\n", + " 'url': 'https://ourworldindata.org/grapher/aviation-share-co2'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_324',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-by-fuel-line'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_325',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-by-source'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_326',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Climate Watch (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/co-emissions-by-sector'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_327',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Net import-export balance in tonnes of CO₂ per year. Positive values (red) represent net importers of CO₂. Negative values (blue) represent net exporters of CO₂.',\n", + " 'url': 'https://ourworldindata.org/grapher/co-emissions-embedded-in-global-trade'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_328',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Aviation emissions include both domestic and international flights. International aviation emissions are here allocated to the country of departure of each flight.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_329',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Domestic aviation represents flights which depart and arrive within the same country.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-domestic-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_330',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-fossil-land'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_331',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-fossil-plus-land-use'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_332',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'International aviation emissions are here allocated to the country of departure of each flight.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-international-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_333',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions are measured in tonnes. Domestic aviation and shipping emissions are included at the national level. International aviation and shipping emissions are included only at the global level.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-transport'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_334',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The width of each bar shows countries scaled by population size. The height of each bar measures tonnes of per capita carbon dioxide (CO₂) emissions from fossil fuels and industry.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-per-capita-marimekko'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_335',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This measures CO₂ emissions from fossil fuels and industry only – land-use change is not included. GDP per capita is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-vs-gdp'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_336',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fossil fuel consumption is measured as the average consumption of energy from coal, oil and gas per person. Fossil fuel and industry emissions are included. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/co-emissions-per-capita-vs-fossil-fuel-consumption-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_337',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Annual consumption-based carbon dioxide emissions. Consumption-based emissions are national emissions that have been adjusted for trade. It's production-based emissions minus emissions embedded in exports, plus emissions embedded in imports.\",\n", + " 'url': 'https://ourworldindata.org/grapher/co-emissions-per-capita-vs-population-growth'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_338',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide (CO₂) emissions are measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-per-capita-vs-renewable-electricity'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_339',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide under various mitigation scenarios to keep global average temperature rise below 1.5°C. Scenarios are based on the CO₂ reductions necessary if mitigation had started – with global emissions peaking and quickly reducing – in the given year.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-mitigation-15c'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_340',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide under various mitigation scenarios to keep global average temperature rise below 2°C. Scenarios are based on the CO₂ reductions necessary if mitigation had started – with global emissions peaking and quickly reducing – in the given year.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-mitigation-2c'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_341',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global carbon dioxide (CO₂) emissions, by World Bank income group.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-income-level'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_342',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions factors quantify the average CO₂ output per unit of energy. They are measured in kilograms of CO₂ per megawatt-hour (MWh) of energy from various fossil fuel sources.',\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-dioxide-emissions-factor'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_343',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon emission intensity is measured in kilograms of CO₂ per dollar of GDP. Emissions from fossil fuels and industry are included. Land-use change is not included. GDP data is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-emission-intensity-vs-gdp-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_344',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The carbon footprint of travel is measured in grams of carbon dioxide-equivalents per passenger kilometer. This includes the impact of increased warming from aviation emissions at altitude.',\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-footprint-travel-mode'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_345',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Amount of carbon dioxide emitted per unit of energy production, measured in kilograms of CO₂ per kilowatt-hour.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-per-unit-energy'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_346',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Carbon intensity represents the quantity of CO₂ emitted per unit of energy consumption – it's measured in kilograms of CO₂ emitted per kilowatt-hour of energy.\",\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-intensity-vs-gdp'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_347',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Kilograms of CO₂ emitted per dollar of GDP. Fossil fuel and industry emissions are included. Land-use change emissions are not included. GDP data is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-intensity'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_348',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The carbon opportunity cost, measured in kilograms of carbon dioxide-equivalents per kilogram of food, is the amount of carbon lost from native vegetation and soils in order to produce each food. If a specific food was not produced on a given plot of land, this land could be used to restore native vegetation and sequester carbon.',\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-opportunity-costs-per-kilogram-of-food'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_349',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_350',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_351',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This measures fossil fuel and industry emissions. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-long-term'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_352',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-co2-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_353',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions are measured in tonnes per person. They are territorial emissions minus emissions embedded in exports, plus emissions embedded in imports. GDP per capita is adjusted for price differences between countries (PPP) and over time (inflation).',\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-co2-per-capita-vs-gdppc'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_354',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions are measured in tonnes per person. The Human Development Index (HDI) is a summary measure of key dimensions of human development: a long and healthy life, a good education, and a decent standard of living.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co-emissions-vs-human-development-index'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_355',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon intensity measures the kilograms of CO₂ emitted per unit of GDP. Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-based-carbon-intensity'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_356',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included. Countries above the diagonal line are net importers of CO₂.',\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-vs-production-co2-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_357',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\",\n", + " 'url': 'https://ourworldindata.org/grapher/contribution-temp-rise-degrees'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_358',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\",\n", + " 'url': 'https://ourworldindata.org/grapher/contribution-to-temp-rise-by-gas'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_359',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of carbon dioxide, methane, and nitrous oxide. This is for land use and agriculture only.\",\n", + " 'url': 'https://ourworldindata.org/grapher/global-warming-land'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_360',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of carbon dioxide, methane, and nitrous oxide. This is for fossil fuel and industry emissions only – it does not include land use or agriculture.\",\n", + " 'url': 'https://ourworldindata.org/grapher/global-warming-fossil'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_361',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Contribution of individual sectors to net economic output versus its share of total national carbon dioxide (CO₂) emissions in 2009. Sectors which lie above the line contribute more to the value added than to the emissions in China. Direct emissions of households are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/value-added-vs-share-of-emissions-china'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_362',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Contribution of individual sectors to net economic output versus its share of total national carbon dioxide (CO₂) emissions in 2009. Sectors which lie above the line contribute more to the value added than the emissions in Germany. Direct emissions of households are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/value-added-vs-share-of-emissions-germany'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_363',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Contribution of individual sectors to net economic output versus its share of total national carbon dioxide (CO₂) emissions in 2009. Sectors which lie above the line contribute more to the value added than the emissions in the United States. Direct emissions of households are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/value-added-vs-share-of-emissions-usa'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_364',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The System of Environmental-Economic Accounting (SEEA) is a framework that integrates economic and environmental data, to provide a more comprehensive view of the relationships between the economy and the environment. Shown are all the countries that have compiled SEEA accounts at least once.',\n", + " 'url': 'https://ourworldindata.org/grapher/countries-using-the-system-of-environmental-economic-accounting'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_365',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Running sum of CO₂ emissions produced from fossil fuels and industry since the first year of recording, measured in tonnes. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_366',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-fuel'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_367',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative carbon dioxide (CO₂) emissions by region from the year 1750 onwards. This measures CO₂ emissions from fossil fuels and industry only – land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-emissions-region'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_368',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from cement since the first year of available data, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-cement'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_369',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from coal since the first year of available data, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-coal'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_370',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from flaring since the first year of available data, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-flaring'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_371',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from gas since the first year of available data, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-gas'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_372',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-land-use'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_373',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from oil since the first year of available data, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-oil'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_374',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co-emissions-from-other-industry'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_375',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change. They are measured as the cumulative total since 1850, in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-co2-including-land'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_376',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The emissions-weighted carbon price is calculated for the whole economy by multiplying each sector's (e.g. electricity, or road transport) carbon price by its contribution to a country's carbon dioxide emissions.\",\n", + " 'url': 'https://ourworldindata.org/grapher/emissions-weighted-carbon-price'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_377',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The emissions-weighted carbon price in emissions trading systems (ETS) is calculated for the whole economy by multiplying each sector's (e.g. electricity, or road transport) carbon price by its contribution to a country's carbon dioxide emissions.\",\n", + " 'url': 'https://ourworldindata.org/grapher/weighted-carbon-price-ets'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_378',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average energy consumption per capita is measured in kilowatt-hours per person. Average carbon dioxide (CO₂) emissions per capita are measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-use-per-capita-vs-co2-emissions-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_379',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Environmentally sound technologies (ESTs) are technologies that have the potential for significantly improved environmental performance relative to other technologies. This indicator shows the value of exported ESTs in current US-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/export-of-environmentally-sound-technologies'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_380',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in kilograms of carbon dioxide-equivalents (CO₂eq) per kilogram of food.',\n", + " 'url': 'https://ourworldindata.org/grapher/food-emissions-production-supply-chain'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_381',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in kilograms of carbon dioxide-equivalents (CO₂eq) per kilogram of food.',\n", + " 'url': 'https://ourworldindata.org/grapher/food-emissions-supply-chain'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_382',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions from the food system are broken down by their stage in the life-cycle, from land use and on-farm production through to consumer waste. Emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/food-emissions-life-cycle'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_383',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_384',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\",\n", + " 'url': 'https://ourworldindata.org/grapher/warming-fossil-fuels-land-use'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_385',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global warming potential measures the relative warming impact of one unit mass of a greenhouse gas relative to carbon dioxide over a 100-year timescale.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-warming-potential-of-greenhouse-gases-over-100-year-timescale-gwp'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_386',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\",\n", + " 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_387',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions include carbon dioxide, methane and nitrous oxide from all sources, including land-use change. They are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-ghg-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_388',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions from all sources, including agriculture and land-use change. They are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.',\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-emissions-by-gas'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_389',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.',\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-emissions-by-sector'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_390',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-emissions-by-sector-stacked'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_391',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/emissions-from-food'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_392',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Emissions are measured in tonnes of carbon dioxide-equivalents. 'End-of-life' refers to waste management practices, such as recycling, incineration or landfill emissions.\",\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-emissions-plastic-stage'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_393',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/greenhouse-gas-emissions-from-plastics'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_394',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in kilograms of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-per-protein-poore'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_395',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in kilograms of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-kcal-poore'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_396',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in kilograms of carbon dioxide-equivalents. This means non-CO₂ gases are weighted by the amount of warming they cause over a 100-year timescale.',\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-per-kg-poore'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_397',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Based on a meta-analysis of data from 1690 fish farms and 1000 unique fishery records. Impacts are given in kilograms of carbon dioxide-equivalents per kilogram of edible weight.',\n", + " 'url': 'https://ourworldindata.org/grapher/ghg-emissions-seafood'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_398',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change captured by a range of socioeconomic and environmental indicators, measured relative to the first year.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-change-over-the-last-50-years'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_399',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Hypothetical number of global deaths which would have resulted from energy production if the world's energy production was met through a single source, in 2014. This was assumed based on energy production death rates and IEA estimates of global energy consumption in 2014 of 159,000 terawatt-hours.\",\n", + " 'url': 'https://ourworldindata.org/grapher/hypothetical-number-of-deaths-from-energy-production'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_400',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Environmentally sound technologies (ESTs) are technologies that have the potential for significantly improved environmental performance relative to other technologies. This indicator shows the value of imported ESTs in current US-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/import-of-environmentally-sound-technologies'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_401',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This measures the net import-export balance in tonnes of CO₂ per capita. Positive values indicate net importers of CO₂. Negative values indicate net exporters of CO₂.',\n", + " 'url': 'https://ourworldindata.org/grapher/imported-or-exported-co-emissions-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_402',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in the four parameters of the Kaya Identity, which determine total CO₂ emissions. Emissions from fossil fuels and industry are included. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/kaya-identity-co2'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_403',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Carbon dioxide emissions from land-use change vary significantly in their degree of certainty. Countries are coded as 'Low quality' if models significantly disagree on land-use emissions.\",\n", + " 'url': 'https://ourworldindata.org/grapher/land-use-co2-quality-flag'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_404',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Evaluation of a country’s sustainable public procurement implementation level, scope, and comprehensiveness is scored based on six parameters. These parameters consider the existence of regulatory frameworks, implementation support, monitoring, and the share of products and services purchased sustainably.',\n", + " 'url': 'https://ourworldindata.org/grapher/medium-high-level-implementation-of-sustainable-public-procurement'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_405',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average life expectancy at birth, measured in years across both sexes, versus carbon dioxide (CO₂) emissions per capita, measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/life-expectancy-at-birth-vs-co-emissions-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_406',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Average of survey responses to the 'Cantril Ladder' question in the Gallup World Poll. The survey question asks respondents to think of a ladder, with the best possible life for them being a 10, and the worst possible life being a 0.\",\n", + " 'url': 'https://ourworldindata.org/grapher/life-satisfaction-vs-co-emissions-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_407',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average meat supply per capita, measured in kilograms per year versus gross domestic product (GDP) per capita measured in constant international-$. International-$ corrects for price differences across countries. Figures do not include fish or seafood.',\n", + " 'url': 'https://ourworldindata.org/grapher/meat-consumption-vs-gdp-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_408',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A composite indicator which covers mechanisms related to: 1) Institutionalisation of political commitment 2) Long-term considerations in decision-making 3) Inter-ministerial and cross-sectoral coordination 4) Participatory processes 5) Policy linkages 6) Alignment across government levels 7) Monitoring and reporting for policy coherence 8) Financing for policy coherence. Score expressed as a percentage of the maximum.',\n", + " 'url': 'https://ourworldindata.org/grapher/mechanisms-to-enhance-policy-for-sustainable-development'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_409',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in parts per billion.',\n", + " 'url': 'https://ourworldindata.org/grapher/long-run-methane-concentration'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_410',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Methane (CH₄) emissions are measured in tonnes of carbon dioxide-equivalents. Emissions from fossil fuels, industry and agricultural sources are included.',\n", + " 'url': 'https://ourworldindata.org/grapher/methane-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_411',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Methane (CH₄) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/methane-emissions-by-sector'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_412',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Methane (CH₄) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/methane-emissions-agriculture'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_413',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Domestic aviation represents flights which depart and arrive within the same country. International aviation emissions are assigned to the country of departure.',\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-co2-emissions-from-international-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_414',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Domestic aviation represents flights which depart and arrive within the same country. International aviation emissions are assigned to the country of departure.',\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-co2-emissions-from-international-and-domestic-flights'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_415',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nitrous oxide (N₂O) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/nitrous-oxide-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_416',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nitrous oxide (N₂O) emissions are measured in tonnes of carbon dioxide equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/nitrous-oxide-emissions-by-sector'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_417',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nitrous oxide (N₂O) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/nitrous-oxide-agriculture'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_418',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'To meet the minimum requirements a company must have published information on a set of key disclosure elements covering the company’s governance practices as well as economic, social and environment impacts.',\n", + " 'url': 'https://ourworldindata.org/grapher/companies-publishing-sustainability-reports-minimum-requirements'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_419',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Domestic aviation represents flights which depart and arrive within the same country.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-emissions-from-domestic-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_420',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide (CO₂) emissions from fossil fuels and industry. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/co-emissions-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_421',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023); Population based on various sources (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-fuel'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_422',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide (CO₂) emissions from fossil fuels and industry. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-region'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_423',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Climate Watch (2023); Population based on various sources (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-sector'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_424',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Global Carbon Budget (2023); Population based on various sources (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-by-source'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_425',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Aviation emissions include both domestic and international flights. International aviation emissions are allocated to the country of departure of each flight.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_426',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from cement, measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-cement'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_427',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from coal, measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-coal'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_428',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This includes both domestic and international flights. International aviation emissions are allocated to the country of departure, and then adjusted for tourism.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-aviation-adjusted'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_429',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Tonnes of CO₂ emissions per person linked to deforestation for food production – it is trade-adjusted, to reflect the carbon footprint of diets within a given country. Based on the annual average over the period from 2010 to 2014.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-food-deforestation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_430',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Domestic aviation represents flights which depart and arrive within the same country.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-domestic-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_431',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Domestic aviation represents flights which depart and arrive within the same country.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-domestic-aviation-vs-gdp'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_432',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Domestic aviation represents flights which depart and arrive within the same country.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-domestic-aviation-vs-land-area'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_433',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from flaring, measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-flaring'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_434',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from gas, measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-gas'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_435',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'International aviation emissions are here allocated to the country of departure of each flight.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-international-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_436',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'International aviation emissions are allocated to the country of departure, then adjusted for tourism.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co-emissions-from-international-flights-tourism-adjusted'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_437',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'International aviation emissions are allocated to the country of departure, then adjusted for tourism.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-international-flights-adjusted'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_438',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from oil, measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-oil'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_439',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions are measured in tonnes per person. International aviation and shipping emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-transport'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_440',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change. They are measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-co2-including-land'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_441',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions from fossil fuels and industry are included. Land-use change emissions are not included. Primary energy is measured in kilowatt-hours per person, using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-consumption-based-co-emissions-vs-per-capita-energy-consumption'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_442',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions are measured in tonnes of carbon dioxide-equivalents. Emissions from land-use change and forestry are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-ghg-co2-excluding-land-use'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_443',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions are measured in tonnes of carbon dioxide-equivalents. Emissions from land-use change and forestry are included.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-ghg-co2-including-land-use'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_444',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Consumption-based emissions are national emissions that have been adjusted for trade. It's production-based emissions minus emissions embedded in exports, plus emissions embedded in imports.\",\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-co2-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_445',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions include carbon dioxide, methane and nitrous oxide from all sources, including land-use change. They are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-ghg-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_446',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Per capita greenhouse gas emissions are measured in tonnes of carbon dioxide-equivalents per person per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-ghg-sector'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_447',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in tonnes of carbon dioxide-equivalents per person. Contributions from land-use change and forestry are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-ghg-excl-land-use'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_448',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Per capita methane emissions are measured in tonnes of carbon dioxide-equivalents per person per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-methane-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_449',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Climate Watch (2023); Population based on various sources (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-methane-sector'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_450',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Per capita nitrous oxide emissions are measured in tonnes of carbon dioxide-equivalents per person per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-nitrous-oxide'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_451',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Climate Watch (2023); Population based on various sources (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-nitrous-oxide-sector'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_452',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nitrous oxide (N₂O) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-nitrous-oxide-agriculture'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_453',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide emissions are included in this figure if they are covered by a carbon tax or trading system.',\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-tax-trading-coverage'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_454',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Exported or imported emissions as a percentage of domestic production emissions. Positive values (red) represent net importers of CO₂. Negative values (blue) represent net exporters of CO₂.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-co2-embedded-in-trade'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_455',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of children younger than five who are stunted – significantly shorter than the average for their age, as a consequence of poor nutrition and/or repeated infection.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-children-who-are-stunted-vs-co-emissions-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_456',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from oil since the first year of available data, measured as a percentage of global cumulative emissions of CO₂ from oil.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-cumulative-co2-oil'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_457',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Consumption-based emissions are national emissions that have been adjusted for trade. It's production-based emissions minus emissions embedded in exports, plus emissions embedded in imports.\",\n", + " 'url': 'https://ourworldindata.org/grapher/co2-consumption-share'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_458',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide (CO₂) emissions from fossil fuels and industry. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-share-of-co2-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_459',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide (CO₂) emissions from fossil fuels and industry. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-co2-vs-population'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_460',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Aviation emissions include both domestic and international flights. International aviation emissions are allocated to the country of departure of each flight.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-co2-emissions-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_461',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from cement, measured as a percentage of global emissions of CO₂ from cement in the same year.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-co2-cement'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_462',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from coal, measured as a percentage of global emissions of CO₂ from coal in the same year.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-co2-coal'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_463',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Domestic aviation represents flights which depart and arrive within the same country.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-co2-domestic-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_464',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from flaring, measured as a percentage of global emissions of CO₂ from flaring in the same year.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-co2-flaring'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_465',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from gas, measured as a percentage of global emissions of CO₂ from gas in the same year.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-co2-gas'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_466',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'International aviation emissions are here allocated to the country of departure of each flight.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-co2-international-aviation'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_467',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-land-use-global-share'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_468',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from oil, measured as a percentage of global emissions of CO₂ from oil in the same year.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-co2-oil'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_469',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-co2-including-land'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_470',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This measures fossil fuel and industry emissions. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-co2-emissions-vs-population'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_471',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual emissions of carbon dioxide (CO₂) from other industry sources, measured as a percentage of global emissions of CO₂ from other industry sources in the same year.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-global-annual-co-emissions-from-other-industry'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_472',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included. Data is not available for some low-income countries due to poor data availability.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-global-consumption-based-co-emissions-and-population'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_473',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-co2-emissions-vs-population'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_474',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions are the running sum of annual emissions since 1750. This measures fossil fuel and industry emissions. Land-use change is not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-cumulative-co2'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_475',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from cement since the first year of available data, measured as a percentage of global cumulative emissions of CO₂ from cement.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-cumulative-co2-cement'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_476',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from coal since the first year of available data, measured as a percentage of global cumulative emissions of CO₂ from coal.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-cumulative-co2-coal'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_477',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from flaring since the first year of available data, measured as a percentage of global cumulative emissions of CO₂ from flaring.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-cumulative-co2-flaring'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_478',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from gas since the first year of available data, measured as a percentage of global cumulative emissions of CO₂ from gas.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-cumulative-co2-gas'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_479',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon. Cumulative emissions are the running sum of emissions since 1850.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-global-cumulative-co-emissions-from-land-use-change'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_480',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative emissions of carbon dioxide (CO₂) from other industry sources since the first year of available data, measured as a percentage of global cumulative emissions of CO₂ from other industry sources.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-global-cumulative-co-emissions-from-other-industry'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_481',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change. This is measured as the cumulative total since 1850.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-cumulative-co2-including-land'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_482',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions include carbon dioxide, methane and nitrous oxide from all sources, including land-use change. They are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-ghg-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_483',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Food system emissions include agriculture, land-use change, and supply chain emissions (transport, packaging, food processing, retail, cooking, and waste). Emissions are quantified based on food production, not consumption. This means they do not account for international trade.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-food-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_484',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Includes methane emissions from fossil fuels, industry and agricultural sources.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-global-methane-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_485',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nitrous oxide (N₂O) emissions are measured in tonnes of carbon dioxide-equivalents.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-nitrous-oxide-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_486',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Food system emissions include agriculture, land-use change, and supply chain emissions (transport, packaging, food processing, retail, cooking, and waste). Emissions are quantified based on food production, not consumption. This means they do not account for international trade.',\n", + " 'url': 'https://ourworldindata.org/grapher/food-share-total-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_487',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'There are various environmental agreements on waste and chemicals. This metric shows the share of required information that has been submitted to international organizations as part of each agreement.',\n", + " 'url': 'https://ourworldindata.org/grapher/parties-to-multilateral-agreements-on-hazardous-waste'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_488',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Based on representative surveys of almost 130,000 people across 125 countries. Participants were asked: \"Do you think that people in [their country] should try to fight global warming?\"',\n", + " 'url': 'https://ourworldindata.org/grapher/support-public-action-climate'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_489',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The inclusion criteria for net-zero commitments may vary from country to country. For example, the inclusion of international aviation emissions; or the acceptance of carbon offsets. To see the year for which countries have pledged to achieve net-zero, hover over the country in the interactive version of this chart.',\n", + " 'url': 'https://ourworldindata.org/grapher/net-zero-targets'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_490',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/production-vs-consumption-co2-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_491',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. They are territorial emissions minus emissions embedded in exports, plus emissions embedded in imports.',\n", + " 'url': 'https://ourworldindata.org/grapher/prod-cons-co2-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_492',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in tonnes of carbon dioxide-equivalents per person. Contributions from land-use change and forestry are included.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-greenhouse-gas-emissions-per-capita'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_493',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Greenhouse gas emissions are measured in tonnes of carbon dioxide-equivalents per person. Contributions from land-use change and forestry are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-ghg-emissions-excluding-lufc'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_494',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Transport is responsible for 4.8% of global greenhouse gas emissions from the food system. Shown is the breakdown by transport type in 2015.',\n", + " 'url': 'https://ourworldindata.org/grapher/food-transport-emissions'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_495',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Gross domestic product (GDP) growth of individual sectors (adjusted for inflation) versus growth in carbon dioxide (CO₂) emissions over the period 1995-2009. Sectors in the top left quadrant have decoupled their emissions from economic growth - whilst their emissions fell, their economic value grew. Direct emissions of households are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/value-added-growth-vs-emissions-growth-china'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_496',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Gross domestic product (GDP) growth of individual sectors (adjusted for inflation) versus growth in carbon dioxide (CO₂) emissions over the period 1995-2009. Sectors in the top left quadrant have decoupled their emissions from economic growth - whilst their emissions fell, their economic value grew. Direct emissions of households are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/value-added-growth-vs-emissions-growth-germany'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_497',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Gross domestic product (GDP) growth of individual sectors (adjusted for inflation) versus growth in carbon dioxide (CO₂) emissions over the period 1995-2009. Sectors in the top left quadrant have decoupled their emissions from economic growth - whilst their emissions fell, their economic value grew. Direct emissions of households are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/value-added-growth-vs-emissions-growth-usa'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_498',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A country is marked as having an emissions trading system (ETS) if at least one sector is covered by one.',\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-emissions-trading-system'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_499',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A country is marked as having a carbon emissions tax instrument if at least one sector has implemented one.',\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-tax-instruments'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_500',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Countries are shown as having a net-zero emissions target if they have: achieved net-zero already; have it written in law; in their policy document or have made a public pledge. The year for which countries have pledged to achieve net-zero varies.',\n", + " 'url': 'https://ourworldindata.org/grapher/net-zero-target-set'},\n", + " {'category': 'CO2 & Greenhouse Gas Emissions',\n", + " 'doc_id': 'owid_501',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Absolute annual change in carbon dioxide (CO₂) emissions, measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/absolute-change-co2'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_502',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The youngest age threshold eligible for vaccination in each age group may vary. For example, a country coded as \"available to under-16s\" may only offer vaccination to children aged five years and older.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccine-age'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_503',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The biweekly change on any given date measures the percentage change in the number of new confirmed cases over the last 14 days, relative to the number in the previous 14 days. Due to limited testing, the number of confirmed cases is lower than the true number of infections.',\n", + " 'url': 'https://ourworldindata.org/grapher/biweekly-growth-covid-cases'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_504',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The biweekly change on any given date measures the percentage change in the number of new confirmed deaths over the last 14 days relative to the number in the previous 14 days. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/biweekly-change-covid-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_505',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Biweekly confirmed cases refer to the cumulative number of confirmed cases over the previous two weeks.',\n", + " 'url': 'https://ourworldindata.org/grapher/biweekly-confirmed-covid-19-cases'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_506',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Biweekly confirmed cases refers to the cumulative number of cases over the previous two weeks. Due to limited testing, the number of confirmed cases is lower than the true number of infections.',\n", + " 'url': 'https://ourworldindata.org/grapher/biweekly-covid-cases-per-million-people'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_507',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative number of confirmed deaths over the previous two weeks. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/biweekly-covid-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_508',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Biweekly confirmed deaths refer to the cumulative number of confirmed deaths over the previous two weeks. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/biweekly-covid-deaths-per-million-people'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_509',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This is a composite measure based on thirteen policy response indicators including school closures, workplace closures, travel bans, testing policy, contact tracing, face coverings, and vaccine policy rescaled to a value from 0 to 100 (100 = strictest). If policies vary at the subnational level, the index is shown as the response level of the strictest sub-region.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-containment-and-health-index'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_510',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '– No testing policy. – Only those who both (a) have symptoms and also (b) meet specific criteria (e.g. key workers, admitted to hospital, came into contact with a known case, returned from overseas). – Testing of anyone showing COVID-19 symptoms. – Open public testing (e.g. “drive through” testing available to asymptomatic people).',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-19-testing-policy'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_511',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Policies for vaccine delivery. Vulnerable groups include key workers, the clinically vulnerable, and the elderly. \"Others\" include select broad groups, such as by age.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccination-policy'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_512',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total vaccine doses administered per 100 people vs. daily new COVID-19 deaths per million people. All doses, including boosters, are counted individually. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccinations-vs-covid-death-rate'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_513',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of vaccine booster doses administered. Booster doses are doses administered beyond those prescribed by the original vaccination protocol.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-covid-vaccine-booster-doses'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_514',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of vaccine booster doses administered, divided by the total population of the country. Booster doses are doses administered beyond those prescribed by the original vaccination protocol.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccine-booster-doses-per-capita'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_515',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccine-doses-by-manufacturer'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_516',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-covid-vaccinations-income-group'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_517',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Doses donated to the COVAX initiative by each country.',\n", + " 'url': 'https://ourworldindata.org/grapher/covax-donations'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_518',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Doses donated to the COVAX initiative by each country, per person living in the donating country.',\n", + " 'url': 'https://ourworldindata.org/grapher/covax-donations-per-capita'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_519',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Doses donated to the COVAX initiative by each country, per dose administered domestically.',\n", + " 'url': 'https://ourworldindata.org/grapher/covax-donations-per-dose-used'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_520',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Doses donated to the COVAX initiative by each country, per million dollars of GDP of the donating country.',\n", + " 'url': 'https://ourworldindata.org/grapher/covax-donations-per-gdp'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_521',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-19-daily-tests-vs-daily-new-confirmed-cases'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_522',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-19-daily-tests-vs-daily-new-confirmed-cases-per-million'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_523',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of people of all ages who have not received any dose of a COVID-19 vaccine.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-world-unvaccinated-people'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_524',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'If policies vary at the subnational level, the index is shown as the response level of the strictest sub-region.',\n", + " 'url': 'https://ourworldindata.org/grapher/public-events-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_525',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are calculated as the number of deaths in each group, divided by the total number of people in this group. This is given per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/chile-covid-19-mortality-rate-by-vaccination-status'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_526',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the 7-day rolling average. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19. GDP per capita is adjusted for price differences between countries (it is expressed in international dollars).',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-confirmed-deaths-of-covid-19-per-million-people-vs-gdp-per-capita'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_527',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Limited testing and challenges in the attribution of cause of death mean the confirmed case and death counts may not reflect the true counts.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-deaths-and-cases-covid-19'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_528',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Due to limited testing, the number of confirmed cases is lower than the true number of infections.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-covid-cases-region'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_529',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-covid-deaths-region'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_530',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Limited testing and challenges in the attribution of cause of death mean the cases and deaths counts may not be accurate. The gray lines show the corresponding case-fatality rates (the ratio between confirmed deaths and confirmed cases).',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-19-cumulative-confirmed-cases-vs-confirmed-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_531',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The figures are given as a rolling 7-day average. Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-covid-19-tests-smoothed-7-day'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_532',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-tests-per-thousand-people-smoothed-7-day'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_533',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-covid-19-vaccination-doses'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_534',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-daily-covid-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_535',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Due to limited testing, the number of confirmed cases is lower than the true number of infections.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-cases-covid-region'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_536',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-covid-deaths-region'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_537',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Limited testing and challenges in the attribution of cause of death mean the cases and deaths counts may not be accurate.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-covid-cases-deaths-7-day-ra'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_538',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the rolling 7-day average. The two time series represent the data as reported by the Swedish government respectively on October 30 and November 12, 2020.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-new-confirmed-covid-19-deaths-in-sweden-oct-2020'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_539',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimates of the true number of infections. The \"upper\" and \"lower\" lines show the bounds of a 95% uncertainty interval. For comparison, confirmed cases are infections that have been confirmed with a test.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-new-estimated-covid-19-infections-icl-model'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_540',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimates of the true number of infections. The \"upper\" and \"lower\" lines show the bounds of a 95% uncertainty interval. For comparison, confirmed cases are infections that have been confirmed with a test.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-new-estimated-covid-19-infections-ihme-model'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_541',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimates of the true number of infections. The \"upper\" and \"lower\" lines show the bounds of a 95% uncertainty interval. For comparison, confirmed cases are infections that have been confirmed with a test.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-new-estimated-covid-19-infections-lshtm-model'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_542',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimates of the true number of infections. The \"upper\" and \"lower\" lines show the bounds of a 95% uncertainty interval. For comparison, confirmed cases are infections that have been confirmed with a test.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-new-estimated-covid-19-infections-yyg-model'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_543',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Mean estimates from epidemiological models of the true number of infections. Estimates differ because the models differ in data used and assumptions made. Confirmed cases—which are infections that have been confirmed with a test—are shown for comparison.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-new-estimated-infections-of-covid-19'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_544',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-covid-vaccination-doses-per-capita'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_545',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the 7-day rolling average of confirmed COVID-19 cases per million people. The number of confirmed cases is lower than the number of total cases. The main reason for this is limited testing.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-daily-vs-total-cases-per-million'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_546',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Debt or contract relief captures if the government is freezing financial obligations during the COVID-19 pandemic, such as stopping loan repayments, preventing services like water from stopping, or banning evictions.',\n", + " 'url': 'https://ourworldindata.org/grapher/debt-relief-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_547',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The percentage decline of GDP relative to the same quarter in 2019. It is adjusted for inflation.',\n", + " 'url': 'https://ourworldindata.org/grapher/economic-decline-in-the-second-quarter-of-2020'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_548',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The vertical axis shows the number of confirmed COVID-19 cases per million, as of August 30. The horizontal axis shows the percentage decline of GDP relative to the same quarter in 2019. It is adjusted for inflation.',\n", + " 'url': 'https://ourworldindata.org/grapher/q2-gdp-growth-vs-confirmed-cases-per-million-people'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_549',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The vertical axis shows the number of COVID-19 deaths per million, as of August 30, 2020. The horizontal axis shows the percentage decline of GDP relative to the same quarter in 2019. It is adjusted for inflation.',\n", + " 'url': 'https://ourworldindata.org/grapher/q2-gdp-growth-vs-confirmed-deaths-due-to-covid-19-per-million-people'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_550',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are calculated as the number of deaths in each group, divided by the total number of people in this group. This is given per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/england-covid-19-mortality-rate-by-vaccination-status'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_551',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'For countries that have not reported all-cause mortality data for a given week, an estimate is shown, with uncertainty interval. If reported data is available, that value only is shown.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-deaths-cumulative-economist'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_552',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative difference between the number of reported or estimated deaths in 2020–2021 and the projected number of deaths for the same period based on previous years. For comparison, cumulative confirmed COVID-19 deaths are shown.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-deaths-cumulative-who'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_553',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'For countries that have not reported all-cause mortality data for a given week, an estimate is shown, with uncertainty interval. If reported data is available, that value only is shown. For comparison, cumulative confirmed COVID-19 deaths are shown.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-deaths-cumulative-economist-single-entity'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_554',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'For countries that have not reported all-cause mortality data for a given week, an estimate is shown, with uncertainty interval. If reported data is available, that value only is shown. On the map, only the central estimate is shown.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-deaths-cumulative-per-100k-economist'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_555',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative difference between the number of reported or estimated deaths in 2020–2021 and the projected number of deaths for the same period based on previous years. Estimates differ because the models differ in the data and methods used.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-deaths-cumulative-economist-who'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_556',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'For countries that have not reported all-cause mortality data for a given week, an estimate is shown, with uncertainty interval. If reported data is available, that value only is shown.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-deaths-daily-economist'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_557',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'For countries that have not reported all-cause mortality data for a given week, an estimate is shown, with uncertainty interval. If reported data is available, that value only is shown. For comparison, daily confirmed COVID-19 deaths are shown (7-day rolling average).',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-deaths-daily-economist-single-entity'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_558',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'For countries that have not reported all-cause mortality data for a given week, an estimate is shown, with uncertainty interval. If reported data is available, that value only is shown. On the map, only the central estimate is shown.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-deaths-daily-per-100k-economist'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_559',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The cumulative difference between the reported number of deaths since 1 January 2020 and the projected number of deaths for the same period based on previous years.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-excess-deaths-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_560',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The percentage difference between the cumulative number of reported deaths since 1 January 2020 and the cumulative projected deaths for the same period based on previous years.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-excess-mortality-p-scores-projected-baseline'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_561',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The cumulative difference between the reported number of deaths since 1 January 2020 and the projected number of deaths for the same period based on previous years.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-excess-deaths-per-million-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_562',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage difference between the reported weekly or monthly deaths in 2020–2024 and the average deaths in the same period in 2015–2019.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-mortality-p-scores-average-baseline'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_563',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The percentage difference between the reported number of weekly or monthly deaths in 2020–2024 — broken down by age group — and the average number of deaths in the same period over the years 2015–2019.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-mortality-p-scores-average-baseline-by-age'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_564',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The percentage difference between the reported number of weekly or monthly deaths in 2020–2024 and the projected number of deaths for the same period based on previous years.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-mortality-p-scores-projected-baseline'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_565',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The percentage difference between the reported number of weekly or monthly deaths in 2020–2024 — broken down by age group — and the projected number of deaths for the same period based on previous years.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-mortality-p-scores-projected-baseline-by-age'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_566',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The reported number of weekly or monthly deaths in 2020–2024 and the projected number of deaths for 2020, which is based on the reported deaths in 2015–2019.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-mortality-raw-death-count'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_567',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The reported number of weekly or monthly deaths in 2020–2024 and the projected number of deaths for the same period based on previous years.',\n", + " 'url': 'https://ourworldindata.org/grapher/excess-mortality-raw-death-count-single-series'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_568',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'If policies vary at the subnational level, the index is shown as the response level of the strictest sub-region.',\n", + " 'url': 'https://ourworldindata.org/grapher/face-covering-policies-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_569',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Grocery and pharmacy stores includes places like grocery markets, farmers markets, specialty food shops, drug stores, and pharmacies.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-visitors-grocery-stores'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_570',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This data shows how community movement in specific locations has changed relative to the period before the pandemic.',\n", + " 'url': 'https://ourworldindata.org/grapher/changes-visitors-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_571',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Each metric is shown as a percentage of its peak value in early 2021, and is shifted to account for the observed delay between case confirmation, hospital admission, ICU admission, and death.',\n", + " 'url': 'https://ourworldindata.org/grapher/israel-covid-cases-hospital-icu-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_572',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Each metric is shown as a percentage of its peak value in early 2021, and is shifted to account for the observed delay between case confirmation, hospital admission, ICU admission, and death.',\n", + " 'url': 'https://ourworldindata.org/grapher/spain-covid-cases-hospital-icu-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_573',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Each metric is shown as a percentage of its peak value in early 2021, and is shifted to account for the observed delay between case confirmation, hospitalization, ventilation, and death.',\n", + " 'url': 'https://ourworldindata.org/grapher/uk-covid-cases-hospital-ventilated-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_574',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Income support captures if the government is covering the salaries or providing direct cash payments, universal basic income, or similar, of people who lose their jobs or cannot work.',\n", + " 'url': 'https://ourworldindata.org/grapher/income-support-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_575',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Oxford COVID-19 Government Response Tracker, Blavatnik School of Government, University of Oxford – Last updated 10 April 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/international-travel-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_576',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-icu-patients-per-million'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_577',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/current-covid-patients-hospital'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_578',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/current-covid-hospitalizations-per-million'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_579',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/current-covid-patients-icu'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_580',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of people who received all doses prescribed by the initial vaccination protocol.',\n", + " 'url': 'https://ourworldindata.org/grapher/people-fully-vaccinated-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_581',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Parks and outdoor spaces includes places like local parks, national parks, public beaches, marinas, dog parks, plazas, and public gardens.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-visitors-parks-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_582',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Oxford COVID-19 Government Response Tracker, Blavatnik School of Government, University of Oxford – Last updated 10 April 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/public-campaigns-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_583',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'If policies vary at the subnational level, the index is shown as the response level of the strictest sub-region.',\n", + " 'url': 'https://ourworldindata.org/grapher/public-transport-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_584',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This data shows how the number of visitors to residential areas has changed relative to the period before the pandemic.',\n", + " 'url': 'https://ourworldindata.org/grapher/changes-residential-duration-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_585',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'If policies vary at the subnational level, the index is shown as the response level of the strictest sub-region.',\n", + " 'url': 'https://ourworldindata.org/grapher/internal-movement-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_586',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Oxford COVID-19 Government Response Tracker, Blavatnik School of Government, University of Oxford – Last updated 10 April 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/public-gathering-rules-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_587',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Retail and recreation includes places like restaurants, cafés, shopping centers, theme parks, museums, libraries, movie theaters.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-visitors-retail-recreation'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_588',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of analyzed sequences in the preceding two weeks that correspond to each variant group. This share may not reflect the complete breakdown of cases since only a fraction of all cases are sequenced.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-variants-bar'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_589',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The number of analyzed sequences in the preceding two weeks that correspond to each variant group. This number may not reflect the complete breakdown of cases since only a fraction of all cases are sequenced.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-variants-area'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_590',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'If policies vary at the subnational level, the index is shown as the response level of the strictest sub-region.',\n", + " 'url': 'https://ourworldindata.org/grapher/school-closures-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_591',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Shown is the delta variant's share of total analyzed sequences in the preceding two weeks.\",\n", + " 'url': 'https://ourworldindata.org/grapher/covid-cases-delta'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_592',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of omicron variant in all analyzed sequences in the preceding two weeks.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-cases-omicron'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_593',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '14-day rolling average. Booster doses are doses administered beyond those prescribed by the original vaccination protocol.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccine-share-boosters'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_594',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of people who received all doses prescribed by the initial vaccination protocol, divided by the total population of the country.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-people-fully-vaccinated-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_595',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of the population in each age group that have received all prescribed doses of the vaccine.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-fully-vaccinated-by-age'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_596',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of people who received at least one vaccine dose, divided by the total population of the country.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-people-vaccinated-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_597',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of the population in each age group that have received a booster dose against COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-booster-vaccinated-by-age'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_598',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of the population in each age group that has received at least one vaccine dose. This may not equal the share that has completed the initial protocol if the vaccine requires two doses.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccine-by-age'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_599',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total confirmed cases as a share of the total number of people tested, or the number of tests performed – according to how testing data is reported by the country. Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-19-positive-rate-bar'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_600',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'If policies vary at the subnational level, the index is shown as the response level of the strictest sub-region.',\n", + " 'url': 'https://ourworldindata.org/grapher/stay-at-home-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_601',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the rolling 7-day average, reported by date of death. Because it takes a number of days until all deaths for a particular day are reported in Sweden, death counts for the last 2 weeks must only be interpreted as an incomplete measure of mortality.',\n", + " 'url': 'https://ourworldindata.org/grapher/sweden-official-covid-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_602',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are calculated as the number of deaths in each group, divided by the total number of people in this group. This is given per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/switzerland-covid-19-weekly-death-rate-by-vaccination-status'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_603',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'For both measures, the 7-day rolling average is shown. Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-tests-and-daily-new-confirmed-covid-cases'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_604',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/tests-per-confirmed-case-daily-smoothed'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_605',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/positive-rate-daily-smoothed'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_606',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/full-list-total-tests-for-covid-19'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_607',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-19-total-confirmed-cases-vs-total-tests-conducted'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_608',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Both measures are shown per million people of the country's population. Comparisons across countries are affected by differences in testing policies and reporting methods.\",\n", + " 'url': 'https://ourworldindata.org/grapher/covid-19-tests-cases-scatter-with-comparisons'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_609',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/full-list-cumulative-total-tests-per-thousand'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_610',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'GDP per capita is adjusted for price differences between countries (it is expressed in international dollars). Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/tests-of-covid-19-per-thousand-people-vs-gdp-per-capita'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_611',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Comparisons across countries are affected by differences in testing policies and reporting methods.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-covid-19-tests-per-confirmed-case-bar-chart'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_612',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/cumulative-covid-vaccinations'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_613',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccination-doses-per-capita'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_614',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Both measures are expressed per million people of the country's population. Limited testing and challenges in the attribution of cause of death mean the cases and deaths counts may not be accurate.\",\n", + " 'url': 'https://ourworldindata.org/grapher/rate-confirmed-cases-vs-rate-confirmed-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_615',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Confirmed COVID-19 cases are compared for the three main data sources: – Johns Hopkins University; – World Health Organization (WHO) Situation Reports; – European Centre for Disease Prevention and Control (ECDC)',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-cases-by-source'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_616',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Limited testing and challenges in the attribution of cause of death mean the cases and deaths counts may not be accurate.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-covid-cases-deaths-per-million'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_617',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-confirmed-deaths-due-to-covid-19-vs-population'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_618',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Confirmed COVID-19 deaths are compared for the three main data sources: – Johns Hopkins University; – World Health Organization (WHO) Situation Reports; – European Centre for Disease Prevention and Control (ECDC)',\n", + " 'url': 'https://ourworldindata.org/grapher/deaths-from-covid-by-source'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_619',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/people-vaccinated-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_620',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Transit stations include public transport hubs such as subway, bus, and train stations.',\n", + " 'url': 'https://ourworldindata.org/grapher/visitors-transit-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_621',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Limited testing and challenges in the attribution of the cause of death means that the number of confirmed deaths may not be an accurate count of the true number of deaths from COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/uk-cumulative-covid-deaths-rate'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_622',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the rolling 7-day average. Due to limited testing, the number of confirmed cases is lower than the true number of infections.',\n", + " 'url': 'https://ourworldindata.org/grapher/uk-daily-new-covid-cases'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_623',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the rolling 7-day average, by the date a positive specimen is taken, not the date that a case is reported. This lag in processing means the latest data shown is several days behind the current date. Due to limited testing, the number of confirmed cases is lower than the true number of infections.',\n", + " 'url': 'https://ourworldindata.org/grapher/uk-daily-covid-cases-7day-average'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_624',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the rolling 7-day average. This is based on a 28-day cut-off period for a positive COVID-19 test. It is based on the date the death was reported.',\n", + " 'url': 'https://ourworldindata.org/grapher/uk-daily-covid-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_625',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Hospital data is available for individual UK nations, and English data by NHS Region. Figures are not comparable between nations as Wales includes suspected COVID-19 patients while the other nations only include confirmed cases.',\n", + " 'url': 'https://ourworldindata.org/grapher/uk-daily-covid-admissions'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_626',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Hospitalization data is available for individual UK nations, and English data by NHS Region. Data from the four nations may not be directly comparable as data about COVID-19 patients in hospitals are collected differently.',\n", + " 'url': 'https://ourworldindata.org/grapher/uk-covid-hospital-patients'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_627',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the percentage of people who had a PCR test in the previous 7 days and had at least one positive test result. Data is currently only shown for regions in England.',\n", + " 'url': 'https://ourworldindata.org/grapher/uk-covid-positivity'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_628',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-daily-covid-vaccine-doses-administered'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_629',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '7-day rolling average. All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-daily-covid-vaccine-doses-per-100'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_630',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of people who received all doses prescribed by the vaccination protocol.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-covid-number-fully-vaccinated'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_631',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of people who received at least one vaccine dose.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-covid-19-total-people-vaccinated'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_632',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of distributed vaccination doses that have been administered/used in the population. Distributed figures represent those reported to Operation Warp Speed as delivered.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-share-covid-19-vaccine-doses-used'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_633',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of the total population that have received all doses prescribed by the vaccination protocol.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-covid-share-fully-vaccinated'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_634',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of the total population that received at least one vaccine dose.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-covid-19-share-people-vaccinated'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_635',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-total-covid-19-vaccine-doses-administered'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_636',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'All doses, including boosters, are counted individually.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-state-covid-vaccines-per-100'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_637',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative counts of COVID-19 vaccine doses reported to Operation Warp Speed as delivered.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-total-covid-vaccine-doses-distributed'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_638',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative counts of COVID-19 vaccine doses reported to Operation Warp Speed as delivered per 100 people in the total population.',\n", + " 'url': 'https://ourworldindata.org/grapher/us-covid-vaccine-doses-distributed-per-100'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_639',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are calculated as the number of deaths in each group, divided by the total number of people in this group. This is given per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/united-states-rates-of-covid-19-deaths-by-vaccination-status'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_640',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The weekly change on any given date measures the percentage change in the number of new confirmed cases over the last seven days relative to the number in the previous seven days. Due to limited testing, the number of confirmed cases is lower than the true number of infections.',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-growth-covid-cases'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_641',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The weekly change on any given date measures the percentage change in number of confirmed deaths over the last seven days relative to the number in the previous seven days. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-growth-covid-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_642',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Weekly confirmed cases refer to the cumulative number of cases over the previous week.',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-covid-cases'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_643',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Weekly confirmed cases refers to the cumulative number of cases over the previous week. Due to limited testing, the number of confirmed cases is lower than the true number of infections.',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-covid-cases-per-million-people'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_644',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Weekly confirmed deaths refer to the cumulative number of confirmed deaths over the previous week. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-covid-deaths'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_645',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Weekly confirmed deaths refer to the cumulative number of confirmed deaths over the previous week. Due to varying protocols and challenges in the attribution of the cause of death, the number of confirmed deaths may not accurately represent the true number of deaths caused by COVID-19.',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-covid-deaths-per-million-people'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_646',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-icu-admissions-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_647',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-icu-admissions-covid-per-million'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_648',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-hospital-admissions-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_649',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Official data collated by Our World in Data – Last updated 21 June 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/weekly-hospital-admissions-covid-per-million'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_650',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the youngest age group that is eligible for vaccination against COVID-19 in a given country. This is for the general population; eligibility may differ for individuals in higher risk groups.',\n", + " 'url': 'https://ourworldindata.org/grapher/youngest-age-covid-vaccination'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_651',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source:',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-contact-tracing'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_652',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of the total population who has not received a vaccine dose and who are willing vs. unwilling vs. uncertain if they would get a vaccine this week if it was available to them. Also shown is the share who have already received at least one dose.',\n", + " 'url': 'https://ourworldindata.org/grapher/covid-vaccine-willingness-and-people-vaccinated-by-month'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_653',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'If policies vary at the subnational level, the index is shown as the response level of the strictest sub-region.',\n", + " 'url': 'https://ourworldindata.org/grapher/workplace-closures-covid'},\n", + " {'category': 'COVID-19',\n", + " 'doc_id': 'owid_654',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Google COVID-19 Community Mobility Trends - Last updated 10 April 2024',\n", + " 'url': 'https://ourworldindata.org/grapher/workplace-visitors-covid'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_655',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The percentage of coastal and inland bathing sites with 'excellent' water quality. To be classified as 'excellent' bathing sites must have levels of bacteria that are associated with sewage pollution below a defined threshold.\",\n", + " 'url': 'https://ourworldindata.org/grapher/bathing-sites-with-excellent-water-quality'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_656',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to unsafe water sources per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-unsafe-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_657',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are measured as the number of deaths per 100,000 individuals. GDP per capita is measured in constant international-$, which corrects for inflation and price differences between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-unsafe-water-vs-gdp'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_658',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total population using the five different levels of drinking water services: safely managed; basic, limited, unimproved and surface water.',\n", + " 'url': 'https://ourworldindata.org/grapher/drinking-water-service-coverage'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_659',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Rural population using the five different levels of drinking water services: safely managed; basic, limited, unimproved and surface water.',\n", + " 'url': 'https://ourworldindata.org/grapher/drinking-water-services-coverage-rural'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_660',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Target 7.1 of the UN Sustainable Development Goals (SDGs) is to achieve universal and equitable usage of safe and affordable drinking water for all. Here, we assume a target threshold of at least 99% using an improved water source.',\n", + " 'url': 'https://ourworldindata.org/grapher/sdg-target-on-improved-water-access'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_661',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'An improved drinking water source includes piped water on premises and other sources (public taps or standpipes, tube wells or boreholes, protected dug wells, protected springs, and rainwater collection). GDP per capita is measured in constant international-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/improved-water-sources-vs-gdp-per-capita'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_662',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources are those that have the potential to deliver safe water by nature of their design and construction, and include: piped water, boreholes or tubewells, protected dug wells, protected springs, rainwater, and packaged or delivered water.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-without-improved-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_663',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Safely managed drinking water is defined as an “Improved source located on premises, available when needed, and free from microbiological and priority chemical contamination.”',\n", + " 'url': 'https://ourworldindata.org/grapher/number-without-safe-drinking-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_664',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic drinking water services are defined as an improved drinking water source, provided collection time is not more than 30 minutes for a roundtrip including queuing.',\n", + " 'url': 'https://ourworldindata.org/grapher/people-with-access-to-at-least-basic-drinking-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_665',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to unsafe water sources per 100,000 people. Here the attributable burden is the number of deaths per 100,000 people that would no longer occur if the entire population had access to high-quality piped water.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-from-unsafe-water-sources-gbd'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_666',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of total deaths, from any cause, with unsafe water sources as an attributed risk factor',\n", + " 'url': 'https://ourworldindata.org/grapher/share-deaths-unsafe-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_667',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A basic drinking water service is water from an improved water source that can be collected within a 30-minute round trip, including queuing.',\n", + " 'url': 'https://ourworldindata.org/grapher/population-using-at-least-basic-drinking-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_668',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources are those that can deliver safe water. They include piped water, boreholes or tube wells, protected dug wells, protected springs, rainwater, and packaged or delivered water.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-without-improved-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_669',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: WHO/UNICEF Joint Monitoring Programme for Water Supply, Sanitation and Hygiene (JMP) (2024)',\n", + " 'url': 'https://ourworldindata.org/grapher/access-drinking-water-stacked'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_670',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic drinking water services are defined as an improved drinking water source, provided collection time is not more than 30 minutes for a roundtrip including queuing.',\n", + " 'url': 'https://ourworldindata.org/grapher/rural-population-with-improved-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_671',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic drinking water services are defined as an improved drinking water source where the collection time is not more than 30 minutes for a roundtrip, including queuing.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-population-with-improved-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_672',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of urban versus rural population using at least a basic drinking water source; that is, an improved source within 30 minutes round trip to collect water.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-vs-rural-using-at-least-basic-drinking-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_673',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A safely managed drinking water service is one that is located on premises, available when needed and free from contamination.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-vs-rural-safely-managed-drinking-water-source'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_674',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Safely managed drinking water service is defined as an improved water source located on the premises, available when needed, and free from contamination.',\n", + " 'url': 'https://ourworldindata.org/grapher/proportion-using-safely-managed-drinking-water'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_675',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources are those that have the potential to deliver safe water by nature of their design and construction, and include: piped water, boreholes or tubewells, protected dug wells, protected springs, rainwater, and packaged or delivered water.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-improved-water-access-vs-rural-water-access'},\n", + " {'category': 'Clean Water',\n", + " 'doc_id': 'owid_676',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources include piped water on premises (piped household water connection located inside the user’s dwelling, plot or yard), and other improved drinking water sources (public taps or standpipes, tube wells or boreholes, protected dug wells, protected springs, and rainwater collection).',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-people-in-the-world-with-and-without-access-to-improved-water-sources'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_677',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual mean concentration of ammonium in groundwater, lakes, and rivers. Sources of excess ammonium include agricultural runoff and municipal and industrial wastewater. At high concentrations, ammonium can be toxic to aquatic organisms.',\n", + " 'url': 'https://ourworldindata.org/grapher/average-ammonium-concentration-in-freshwater'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_678',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual mean concentrations of nitrate in groundwater, lakes, and rivers. Sources of excess nitrate include agricultural runoff, sewage and wastewater, and industrial discharge.',\n", + " 'url': 'https://ourworldindata.org/grapher/average-nitrate-concentration-in-freshwater'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_679',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual mean concentrations of phosphorus in groundwater, lakes, and rivers. Sources of excess phosphorous include agricultural runoff, sewage, soil erosion, and industrial wastewater.',\n", + " 'url': 'https://ourworldindata.org/grapher/average-phosphorus-concentration-in-freshwater'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_680',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The percentage of coastal and inland bathing sites with 'excellent' water quality. To be classified as 'excellent' bathing sites must have levels of bacteria that are associated with sewage pollution below a defined threshold.\",\n", + " 'url': 'https://ourworldindata.org/grapher/bathing-sites-with-excellent-water-quality'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_681',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rate attributed to unsafe water, unsafe sanitation or lack of hygiene (WASH), measured as the number of deaths per 100,000 people of a given population.',\n", + " 'url': 'https://ourworldindata.org/grapher/mortality-rate-attributable-to-wash'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_682',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to a lack of access to hand-washing facilities per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-no-handwashing'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_683',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Estimated annual number of deaths attributed to unsafe sanitation per 100,000 people. This is calculated as the 'attributable burden'. Attributable burden represents the reduction in deaths if a population's exposure had shifted from unsafe to adequate sanitation facilities.\",\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-from-unsafe-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_684',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to unsafe water sources per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-unsafe-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_685',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are measured as the number of deaths per 100,000 individuals. GDP per capita is measured in constant international-$, which corrects for inflation and price differences between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-unsafe-water-vs-gdp'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_686',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to lack of access to handwashing facilities. Here the attributable burden is the number of deaths that would no longer occur if the entire population had access to a handwashing station with available soap and water.',\n", + " 'url': 'https://ourworldindata.org/grapher/deaths-due-to-lack-of-access-to-hand-washing-facilities'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_687',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to unsafe sanitation. Here the attributable burden is the number of deaths that would no longer occur if the entire population had access to high-quality piped water.',\n", + " 'url': 'https://ourworldindata.org/grapher/deaths-due-to-unsafe-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_688',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to unsafe water sources. Here the attributable burden is the number of deaths that would no longer occur if the entire population had access to high-quality piped water.',\n", + " 'url': 'https://ourworldindata.org/grapher/deaths-due-to-unsafe-water-sources'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_689',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Diarrheal episodes per 100,000 people. Safely managed sanitation is defined as single-household improved sanitation facilities where excreta are safely disposed in situ or transported and treated off-site.',\n", + " 'url': 'https://ourworldindata.org/grapher/incidence-of-diarrheal-episodes-vs-access-to-improved-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_690',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths from diarrheal diseases per 100,000 children under five, versus the percentage of people with access to basic handwashing facilities, including soap and water.',\n", + " 'url': 'https://ourworldindata.org/grapher/diarrheal-diseases-vs-handwashing-facilities'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_691',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total population using the five different levels of drinking water services: safely managed; basic, limited, unimproved and surface water.',\n", + " 'url': 'https://ourworldindata.org/grapher/drinking-water-service-coverage'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_692',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Rural population using the five different levels of drinking water services: safely managed; basic, limited, unimproved and surface water.',\n", + " 'url': 'https://ourworldindata.org/grapher/drinking-water-services-coverage-rural'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_693',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Urban population using the five different levels of drinking water services: safely managed; basic, limited, unimproved and surface water.',\n", + " 'url': 'https://ourworldindata.org/grapher/drinking-water-services-coverage-urban'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_694',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Target 6.2 of the UN Sustainable Development Goals (SDGs) is to achieve access to adequate and equitable sanitation and hygiene for all. Here we mark a cut-off threshold of 99% of the population using improved sanitation facilities.',\n", + " 'url': 'https://ourworldindata.org/grapher/sdg-target-for-access-to-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_695',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Target 7.1 of the UN Sustainable Development Goals (SDGs) is to achieve universal and equitable usage of safe and affordable drinking water for all. Here, we assume a target threshold of at least 99% using an improved water source.',\n", + " 'url': 'https://ourworldindata.org/grapher/sdg-target-on-improved-water-access'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_696',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Integrated water resource management (IWRM) is a process which promotes the coordinated development and management of water, land and related resources in order to maximise economic and social welfare in an equitable manner without compromising the sustainability of vital ecosystems.',\n", + " 'url': 'https://ourworldindata.org/grapher/implementation-of-integrated-water-resource-management'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_697',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'An improved drinking water source includes piped water on premises and other sources (public taps or standpipes, tube wells or boreholes, protected dug wells, protected springs, and rainwater collection). GDP per capita is measured in constant international-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/improved-water-sources-vs-gdp-per-capita'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_698',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: WHO/UNICEF Joint Monitoring Programme (JMP) for Water Supply and Sanitation',\n", + " 'url': 'https://ourworldindata.org/grapher/rural-without-basic-handwashing'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_699',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Open defecation refers to defecating in the open, such as in fields, forests, bushes, open bodies of water, on beaches, in other open spaces, or disposed of with solid waste.',\n", + " 'url': 'https://ourworldindata.org/grapher/open-defecation-in-rural-areas-vs-urban-areas'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_700',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources are those that have the potential to deliver safe water by nature of their design and construction, and include: piped water, boreholes or tubewells, protected dug wells, protected springs, rainwater, and packaged or delivered water.',\n", + " 'url': 'https://ourworldindata.org/grapher/rural-without-improved-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_701',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: WHO/UNICEF Joint Monitoring Programme (JMP) for Water Supply and Sanitation',\n", + " 'url': 'https://ourworldindata.org/grapher/rural-without-improved-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_702',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources are those that have the potential to deliver safe water by nature of their design and construction, and include: piped water, boreholes or tubewells, protected dug wells, protected springs, rainwater, and packaged or delivered water.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-without-improved-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_703',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved sanitation facilities are those designed to hygienically separate excreta from human contact, and include: flush/pour flush toilets connected to piped sewer systems, septic tanks or pit latrines; pit latrines with slabs (including ventilated pit latrines), and composting toilets.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-without-access-to-improved-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_704',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Safely managed drinking water is defined as an “Improved source located on premises, available when needed, and free from microbiological and priority chemical contamination.”',\n", + " 'url': 'https://ourworldindata.org/grapher/number-without-safe-drinking-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_705',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Safely managed sanitation is improved facilities which are not shared with other households and where excreta are safely disposed in situ or transported and treated off-site.',\n", + " 'url': 'https://ourworldindata.org/grapher/safe-sanitation-without'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_706',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic drinking water services are defined as an improved drinking water source, provided collection time is not more than 30 minutes for a roundtrip including queuing.',\n", + " 'url': 'https://ourworldindata.org/grapher/people-with-access-to-at-least-basic-drinking-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_707',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Number of people without access to basic handwashing facilities, with soap and water.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-without-basic-handwashing'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_708',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of population in urban areas versus rural areas with access to basic handwashing facilities.',\n", + " 'url': 'https://ourworldindata.org/grapher/proportion-with-basic-handwashing-facilities-urban-vs-rural'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_709',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Countries progress in ratifying and acceding United Nations Convention on the Law of the Sea (UNCLOS) and its two implementing agreements through legal, policy and institutional frameworks. Higher values indicate greater progress.',\n", + " 'url': 'https://ourworldindata.org/grapher/ratification-and-accession-to-unclos'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_710',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to a lack of access to handwashing facilities per 100,000 people.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-from-no-access-to-handwashing-facilities'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_711',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to unsafe sanitation per 100,000 people. Here the attributable burden is the number of deaths per 100,000 people that would no longer occur if the entire population had access to sanitation facilities connected to a sewer or septic tank.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-from-unsafe-sanitation-gbd'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_712',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Estimated annual number of deaths attributed to unsafe water sources per 100,000 people. Here the attributable burden is the number of deaths per 100,000 people that would no longer occur if the entire population had access to high-quality piped water.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-from-unsafe-water-sources-gbd'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_713',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total population using the five different levels of sanitation services: safely managed; basic, limited, unimproved and open defecation.',\n", + " 'url': 'https://ourworldindata.org/grapher/sanitation-facilities-coverage'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_714',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Rural population using the five different levels of sanitation services: safely managed; basic, limited, unimproved and open defecation.',\n", + " 'url': 'https://ourworldindata.org/grapher/sanitation-facilities-coverage-in-rural-areas'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_715',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Urban population using the five different levels of sanitation services: safely managed; basic, limited, unimproved and open defecation.',\n", + " 'url': 'https://ourworldindata.org/grapher/sanitation-facilities-coverage-in-urban-areas'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_716',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of total deaths, from any cause, with unsafe sanitation as an attributed risk factor',\n", + " 'url': 'https://ourworldindata.org/grapher/share-deaths-unsafe-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_717',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of total deaths, from any cause, with unsafe water sources as an attributed risk factor',\n", + " 'url': 'https://ourworldindata.org/grapher/share-deaths-unsafe-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_718',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Open defecation refers to defecation in fields, forests, bushes, bodies of water, or other open spaces.',\n", + " 'url': 'https://ourworldindata.org/grapher/people-practicing-open-defecation-of-population'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_719',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A basic drinking water service is water from an improved water source that can be collected within a 30-minute round trip, including queuing.',\n", + " 'url': 'https://ourworldindata.org/grapher/population-using-at-least-basic-drinking-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_720',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The percent of people who have access to basic handwashing facilities on the premises.',\n", + " 'url': 'https://ourworldindata.org/grapher/proportion-of-population-with-basic-handwashing-facilities-on-premises'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_721',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved sanitation facilities are designed to ensure hygienic separation of human excreta from human contact. GDP per capita is measured in constant international-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/improved-sanitation-facilities-vs-gdp-per-capita'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_722',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Access to basic handwashing facilities refers to a device to facilitate handwashing with soap and water available on the premises.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-rural-basic-handwashing'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_723',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Data from multiple sources compiled by the UN',\n", + " 'url': 'https://ourworldindata.org/grapher/schools-access-drinking-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_724',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: UNESCO',\n", + " 'url': 'https://ourworldindata.org/grapher/schools-access-to-wash'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_725',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources are those that can deliver safe water. They include piped water, boreholes or tube wells, protected dug wells, protected springs, rainwater, and packaged or delivered water.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-without-improved-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_726',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved sanitation facilities are designed to hygienically separate excreta from human contact. They include flush to the piped sewer system, septic tanks or pit latrines; ventilated improved pit latrines, composting toilets or pit latrines with slabs.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-without-improved-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_727',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic sanitation services are defined as improved sanitation facilities not shared with other households.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-population-with-improved-sanitation-faciltities'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_728',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: WHO/UNICEF Joint Monitoring Programme for Water Supply, Sanitation and Hygiene (JMP) (2024)',\n", + " 'url': 'https://ourworldindata.org/grapher/access-drinking-water-stacked'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_729',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Safely managed sanitation is improved facilities which are not shared with other households and where excreta are safely disposed in situ or transported and treated off-site.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-using-safely-managed-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_730',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: WHO/UNICEF Joint Monitoring Programme for Water Supply, Sanitation and Hygiene (JMP) (2024)',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-the-population-with-access-to-sanitation-facilities'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_731',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Data compiled from multiple sources by World Bank',\n", + " 'url': 'https://ourworldindata.org/grapher/access-to-basic-services'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_732',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: WHO/UNICEF Joint Monitoring Programme for Water Supply, Sanitation and Hygiene (JMP) (2024)',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-the-population-with-access-to-handwashing-facilities'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_733',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic sanitation services are improved sanitation facilities that are not shared with other households.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-rural-population-with-improved-sanitation-faciltities'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_734',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic drinking water services are defined as an improved drinking water source, provided collection time is not more than 30 minutes for a roundtrip including queuing.',\n", + " 'url': 'https://ourworldindata.org/grapher/rural-population-with-improved-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_735',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of transboundary basins area within a region or country with an operational arrangement for water cooperation',\n", + " 'url': 'https://ourworldindata.org/grapher/water-basins-cooperation-plan'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_736',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic sanitation services are improved sanitation facilities that are not shared with other households.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-urban-population-with-improved-sanitation-facilities'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_737',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Basic drinking water services are defined as an improved drinking water source where the collection time is not more than 30 minutes for a roundtrip, including queuing.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-population-with-improved-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_738',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of urban versus rural population using at least a basic drinking water source; that is, an improved source within 30 minutes round trip to collect water.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-vs-rural-using-at-least-basic-drinking-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_739',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of urban versus rural population using at least basic sanitation facilities; that is improved sanitation facilities not shared with other households.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-vs-rural-population-using-at-least-basic-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_740',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A safely managed drinking water service is one that is located on premises, available when needed and free from contamination.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-vs-rural-safely-managed-drinking-water-source'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_741',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of the urban versus population using a safely managed sanitation service; that is, excreta safely disposed of in situ or treated off-site.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-vs-rural-population-safely-managed-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_742',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Water quality is assessed by means of core physical and chemical parameters that reflect natural water quality. A water body is classified as \"good\" quality if at least 80% of monitoring values meet target quality levels.',\n", + " 'url': 'https://ourworldindata.org/grapher/water-bodies-good-water-quality'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_743',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Safely managed drinking water service is defined as an improved water source located on the premises, available when needed, and free from contamination.',\n", + " 'url': 'https://ourworldindata.org/grapher/proportion-using-safely-managed-drinking-water'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_744',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of the urban and rural populations using a safely managed drinking water service.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-population-using-safely-managed-drinking-water-services-rural-vs-urban'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_745',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total water and sanitation-related Official Development Assistance (ODA) disbursements that are included in the government budget. This data is expressed in US dollars. It is adjusted for inflation but does not account for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/total-oda-for-water-supply-and-sanitation-by-recipient'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_746',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources are those that have the potential to deliver safe water by nature of their design and construction, and include: piped water, boreholes or tubewells, protected dug wells, protected springs, rainwater, and packaged or delivered water.',\n", + " 'url': 'https://ourworldindata.org/grapher/urban-improved-water-access-vs-rural-water-access'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_747',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Number of people using at least basic sanitation facilities; that is improved sanitation facilities not shared with other households.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-using-at-least-basic-sanitation'},\n", + " {'category': 'Clean Water & Sanitation',\n", + " 'doc_id': 'owid_748',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Improved drinking water sources include piped water on premises (piped household water connection located inside the user’s dwelling, plot or yard), and other improved drinking water sources (public taps or standpipes, tube wells or boreholes, protected dug wells, protected springs, and rainwater collection).',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-people-in-the-world-with-and-without-access-to-improved-water-sources'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_749',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The deviation of a specific year's average surface temperature from the 1991-2020 mean, in degrees Celsius.\",\n", + " 'url': 'https://ourworldindata.org/grapher/annual-temperature-anomalies'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_750',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The minimum and maximum sea ice extent typically occur in February and September each year.',\n", + " 'url': 'https://ourworldindata.org/grapher/antarctica-sea-ice-extent'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_751',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The minimum and maximum sea ice extent typically occur in September and February each year.',\n", + " 'url': 'https://ourworldindata.org/grapher/arctic-sea-ice'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_752',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source:',\n", + " 'url': 'https://ourworldindata.org/grapher/average-monthly-surface-temperature'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_753',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global average land-sea temperature anomaly relative to the 1961-1990 average temperature.',\n", + " 'url': 'https://ourworldindata.org/grapher/temperature-anomaly'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_754',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Atmospheric carbon dioxide (CO₂) concentration is measured in parts per million (ppm). Long-term trends in CO₂ concentrations can be measured at high-resolution using preserved air samples from ice cores.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-long-term-concentration'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_755',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Atmospheric nitrous oxide (N₂O) concentration is measured in parts per billion (ppb).',\n", + " 'url': 'https://ourworldindata.org/grapher/nitrous-oxide-long'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_756',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'National adaptation plans are a means of identifying medium- and long-term climate change adaptation needs and developing and implementing strategies and programmes to address those needs.',\n", + " 'url': 'https://ourworldindata.org/grapher/countries-with-national-adaptation-plans-for-climate-change'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_757',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The deviation of a specific decade's average surface temperature from the 1991-2020 mean, in degrees Celsius.\",\n", + " 'url': 'https://ourworldindata.org/grapher/decadal-temperature-anomaly'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_758',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The total financial support provided to developing countries for climate change mitigation and adaptation. Countries have set a collective goal of mobilizing $100 billion per year from 2020 onwards.',\n", + " 'url': 'https://ourworldindata.org/grapher/green-climate-gcf-fund-pledges'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_759',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative mass balance of U.S. reference glaciers, relative to the base year 1965. This is given in meters of water equivalent, which represent changes in the average thickness of a glacier.',\n", + " 'url': 'https://ourworldindata.org/grapher/mass-us-glaciers'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_760',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Atmospheric carbon dioxide (CO₂) concentration is measured in parts per million (ppm).',\n", + " 'url': 'https://ourworldindata.org/grapher/global-co2-concentration'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_761',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Atmospheric methane (CH₄) concentration is measured in parts per billion (ppb).',\n", + " 'url': 'https://ourworldindata.org/grapher/global-methane-concentrations'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_762',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Atmospheric nitrous oxide (N₂O) concentration is measured in parts per billion (ppb).',\n", + " 'url': 'https://ourworldindata.org/grapher/global-nitrous-oxide-concentration'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_763',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Combined land-surface air and sea-surface water temperature anomaly, given as the deviation from the 1951-1980 mean, in degrees Celsius.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-monthly-temp-anomaly'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_764',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_765',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\",\n", + " 'url': 'https://ourworldindata.org/grapher/warming-fossil-fuels-land-use'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_766',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\",\n", + " 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_767',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This is measured at a nominal depth of 20cm, and given relative to the average temperature from the period of 1961 - 1990. Measured in degrees Celsius.',\n", + " 'url': 'https://ourworldindata.org/grapher/sea-surface-temperature'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_768',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The deviation of a specific year's average surface temperature from the 1991-2020 mean, in degrees Celsius.\",\n", + " 'url': 'https://ourworldindata.org/grapher/global-yearly-surface-temperature-anomalies'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_769',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Ocean heat content is measured relative to the 1971–2000 average, which is set at zero for reference. It is measured in 10²² joules. For reference, 10²² joules are equal to approximately 17 times the amount of energy used globally every year.',\n", + " 'url': 'https://ourworldindata.org/grapher/ocean-heat-top-2000m'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_770',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Ocean heat content is measured relative to the 1971–2000 average, which is set at zero for reference. It is measured in 10²² joules. For reference, 10²² joules are equal to approximately 17 times the amount of energy used globally every year.',\n", + " 'url': 'https://ourworldindata.org/grapher/ocean-heat-content-upper'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_771',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cumulative change in mass of ice sheets, measured relative to a base year of 2002. For reference, 1,000 billion metric tons is equal to about 260 cubic miles of ice—enough to raise sea level by about 3 millimeters.',\n", + " 'url': 'https://ourworldindata.org/grapher/ice-sheet-mass-balance'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_772',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in parts per billion.',\n", + " 'url': 'https://ourworldindata.org/grapher/long-run-methane-concentration'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_773',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Ocean heat content is measured relative to the 1971–2000 average, which is set at zero for reference. It is measured in 10²² joules. For reference, 10²² joules are equal to approximately 17 times the amount of energy used globally every year.',\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-ocean-heat-2000m'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_774',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Ocean heat content is measured relative to the 1971–2000 average, which is set at zero for reference. It is measured in 10²² joules. For reference, 10²² joules are equal to approximately 17 times the amount of energy used globally every year.',\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-upper-ocean-heat'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_775',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The temperature of the air measured 2 meters above the ground, encompassing land, sea, and in-land water surfaces.',\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-average-surface-temperatures-by-decade'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_776',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The temperature of the air measured 2 meters above the ground, encompassing land, sea, and in-land water surfaces.',\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-average-surface-temperatures-by-year'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_777',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Average decadal deviation of a specific month's average surface temperature from the 1991-2020 mean, in degrees Celsius.\",\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-surface-temperature-anomalies-by-decade'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_778',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The deviation of a specific month's average surface temperature from the 1991–2020 mean, in degrees Celsius.\",\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-surface-temperature-anomalies-by-year'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_779',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"The deviation of a specific month's average surface temperature from the 1991–2020 mean, in degrees Celsius.\",\n", + " 'url': 'https://ourworldindata.org/grapher/monthly-temperature-anomalies'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_780',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Nationally determined contributions (NDCs) embody efforts by each country to reduce national emissions and adapt to the impacts of climate change. The Paris Agreement requires each of the 193 Parties to prepare, communicate and maintain NDCs outlining what they intend to achieve. NDCs must be updated every five years.',\n", + " 'url': 'https://ourworldindata.org/grapher/nationally-determined-contributions'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_781',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Mean seawater pH is shown based on in-situ measurements of pH from the Aloha station in Hawaii.',\n", + " 'url': 'https://ourworldindata.org/grapher/seawater-ph'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_782',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of young people in each surveyed country that responded \"yes\" to each statement about climate change. 1,000 young people, aged 16 to 25 years old, were surveyed in each country.',\n", + " 'url': 'https://ourworldindata.org/grapher/opinions-young-people-climate'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_783',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Participants were asked if they would contribute 1% of their income to tackle climate change. The share that answered \"yes\" is shown on the horizontal axis. The share of the population in their country that people think would be willing is shown on the vertical axis.',\n", + " 'url': 'https://ourworldindata.org/grapher/willingness-climate-action'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_784',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data from 2017 onwards is projections from the International Energy Agency, based on estimated changes in population and income.',\n", + " 'url': 'https://ourworldindata.org/grapher/air-conditioners-projections'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_785',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global mean sea level rise is measured relative to the 1993 - 2008 average sea level. This is shown as three series: the widely-cited Church & White dataset; the University of Hawaii Sea Level Center (UHLSC); and the average of the two.',\n", + " 'url': 'https://ourworldindata.org/grapher/sea-level'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_786',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Sea surface temperature anomaly relative to the 1961-1990 average temperature. This is measured in degrees Celsius (°C).',\n", + " 'url': 'https://ourworldindata.org/grapher/sea-surface-temperature-anomaly'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_787',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Seasonal temperature anomaly, compared to the 1901–2000 average temperature. Measured in degrees Fahrenheit.',\n", + " 'url': 'https://ourworldindata.org/grapher/seasonal-temp-anomaly-us'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_788',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: International Energy Agency (IEA). Future of Cooling.',\n", + " 'url': 'https://ourworldindata.org/grapher/households-air-conditioning'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_789',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Participants were asked to score beliefs on a scale from 0 to 100 on four questions: whether action was necessary to avoid a global catastrophe; humans were causing climate change; it was a serious threat to humanity; and was a global emergency.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-believe-climate'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_790',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Based on representative surveys of almost 130,000 people across 125 countries. Participants were asked: \"Do you think the national government should do more to fight global warming?\"',\n", + " 'url': 'https://ourworldindata.org/grapher/support-political-climate-action'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_791',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Support was measured on a scale from 0 to 100 across nine interventions, including carbon taxes on fossil fuels, expanding public transport, more renewable energy, more electric car chargers, taxes on airlines, investments in green jobs and businesses, laws to keep waterways clean, protecting forests, and increasing taxes on carbon-intensive foods.',\n", + " 'url': 'https://ourworldindata.org/grapher/support-policies-climate'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_792',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Based on representative surveys of almost 130,000 people across 125 countries. Participants were asked: \"Do you think that people in [their country] should try to fight global warming?\"',\n", + " 'url': 'https://ourworldindata.org/grapher/support-public-action-climate'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_793',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This metric measures the area covered by snow, based on an analysis of weekly maps. These data cover all of North America (including Greenland).',\n", + " 'url': 'https://ourworldindata.org/grapher/snow-cover-north-america'},\n", + " {'category': 'Climate Change',\n", + " 'doc_id': 'owid_794',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Surface temperature anomaly, measured in degrees Celsius The temperature anomaly is relative to the 1951-1980 global average temperature. Data is based on the HadCRUT analysis from the Climatic Research Unit (University of East Anglia) in conjunction with the Hadley Centre (UK Met Office).',\n", + " 'url': 'https://ourworldindata.org/grapher/hadcrut-surface-temperature-anomaly'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_795',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The annual monetary value of gross transfers from consumers and taxpayers to agricultural producers, measured at the farm-gate level, arising from policy measures that support agriculture, regardless of their nature, objectives or impacts on farm production or income.',\n", + " 'url': 'https://ourworldindata.org/grapher/agricultural-producer-support'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_796',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/almond-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_797',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This metric represents the amount of land needed to grow a given crop if it was to meet global vegetable oil demand alone.',\n", + " 'url': 'https://ourworldindata.org/grapher/area-land-needed-to-global-oil'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_798',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This metric is the inverse of oil yields. It represents the amount of land needed to grow a given crop to produce one tonne of vegetable oil.',\n", + " 'url': 'https://ourworldindata.org/grapher/area-per-tonne-oil'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_799',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/banana-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_800',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/barley-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_801',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/bean-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_802',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/cashew-nut-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_803',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/cassava-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_804',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average cereal yield, measured in tonnes per hectare versus gross domestic product (GDP) per capita. This data is adjusted for inflation and for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-yield-vs-gdp-per-capita'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_805',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Extreme poverty is defined as living below the International Poverty Line of $2.15 per day. This data is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-yield-vs-extreme-poverty-scatter'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_806',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare. Fertilizer use is measured in kilograms of nitrogenous fertilizer applied per hectare of cropland.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-crop-yield-vs-fertilizer-application'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_807',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare. Cereals include wheat, rice, maize, barley, oats, rye, millet, sorghum, buckwheat, and mixed grains.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-yield'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_808',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'All figures are indexed to the start year of the timeline. This means the first year of the time-series is given the value zero.',\n", + " 'url': 'https://ourworldindata.org/grapher/index-of-cereal-production-yield-and-land-use'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_809',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the change in production, crop yield and area harvested for the oil palm fruit.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-in-production-yield-and-land-palm'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_810',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/change-of-cereal-yield-vs-land-used'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_811',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/cocoa-bean-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_812',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/coffee-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_813',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/maize-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_814',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Attainable yields are feasible crop yields based on outputs from high-yielding areas of similar climate. They are more conservative than absolute biophysical ‘potential yields’, but are achievable using current technologies and management (e.g. fertilizers and irrigation). Corn (maize) yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/maize-attainable-yield'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_815',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yield gaps measure the difference between actual yields and attainable yields. Attainable yields are more conservative than absolute biophysical ‘potential yields’, but are achievable using current technologies and management (e.g. fertilizers and irrigation). Corn (maize) yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/maize-yield-gap'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_816',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/cotton-yield'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_817',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/key-crop-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_818',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Land sparing is calculated as the amount of additional land that would have been needed to meet global cereal production if average crop yields had not increased since 1961.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-land-spared'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_819',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/groundnuts-yield'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_820',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Land sparing is calculated as the amount of additional land that would have been needed to meet crop production if global average crop yields had not increased since 1961.',\n", + " 'url': 'https://ourworldindata.org/grapher/land-sparing-by-crop'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_821',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Indexed change in land used for cereal production versus cereal yields, from 1961 to 2014. Both indexes are measured relative to values in 1961 (i.e. 1961 = 100).',\n", + " 'url': 'https://ourworldindata.org/grapher/land-use-vs-yield-change-in-cereal-production'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_822',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/lettuce-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_823',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/cereal-yields-uk'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_824',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/millet-yield'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_825',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/palm-oil-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_826',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global oil yields are measured as the average amount of vegetable oil produced (in tonnes) per hectare of land. This is different from the total yield of the crop since only a fraction is available as vegetable oil.',\n", + " 'url': 'https://ourworldindata.org/grapher/oil-yield-by-crop'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_827',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/orange-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_828',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/pea-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_829',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/potato-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_830',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/rapeseed-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_831',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/rice-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_832',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/rye-yield'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_833',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/sorghum-yield'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_834',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/soybean-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_835',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/sugar-beet-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_836',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/sugar-cane-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_837',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/sunflower-seed-yield'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_838',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/tomato-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_839',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Global agricultural growth is measured by the average annual change in economic output from agriculture. This is broken down by its drivers in each decade. Productivity growth measures increase output from a given amount of input: it's driven by factors such as efficiency gains, better seed varieties, land reforms, and better management practices.\",\n", + " 'url': 'https://ourworldindata.org/grapher/global-agri-productivity-growth'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_840',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/wheat-yields'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_841',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total factor productivity measures changes in the efficiency with which agricultural inputs are transformed into agricultural outputs. If productivity did not improve, inputs would directly track outputs.',\n", + " 'url': 'https://ourworldindata.org/grapher/agriculture-decoupling-productivity'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_842',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is how much nitrogen pollution countries caused compared with how much they reduced their yield gaps relative to directly neighboring countries. Positive values (yellow to red) indicate a country overapplied nitrogen without gains in yield. This is based on yield gap and nitrogen data published between 2012 and 2015.',\n", + " 'url': 'https://ourworldindata.org/grapher/yield-gap-vs-nitrogen-pollution'},\n", + " {'category': 'Crop Yields',\n", + " 'doc_id': 'owid_843',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'All yields are measured in tonnes per hectare.',\n", + " 'url': 'https://ourworldindata.org/grapher/yields-of-important-staple-crops'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_844',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'This is measured as the average daily supply per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/animal-protein-consumption'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_845',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Countries shown in blue have an average per capita intake below 200g per person per day; countries in green are greater than 200g. National and World Health Organization (WHO) typically set a guideline of 200g per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/average-per-capita-fruit-intake-vs-minimum-recommended-guidelines'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_846',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Countries shown in pink have an average per capita intake below 250g per person per day; countries in green are greater than 250g. National and World Health Organization (WHO) recommendations tend to range between 200-250g per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/average-per-capita-vegetable-intake-vs-minimum-recommended-guidelines'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_847',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Daily supply of calories is measured in kilocalories.',\n", + " 'url': 'https://ourworldindata.org/grapher/calorie-supply-by-food-group'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_848',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the per capita supply of cocoa and products at the consumer level. This does not account for consumer waste.',\n", + " 'url': 'https://ourworldindata.org/grapher/chocolate-consumption-per-person'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_849',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Recommended intakes of animal products in the EAT-Lancet diet are shown relative to average daily per capita supply by country. The EAT-Lancet diet is a diet recommended to balance the goals of healthy nutrition and environmental sustainability for a global population.',\n", + " 'url': 'https://ourworldindata.org/grapher/eat-lancet-diet-animal-products'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_850',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The average per capita supply of calories derived from carbohydrates, protein and fat, all measured in kilocalories per person per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/daily-caloric-supply-derived-from-carbohydrates-protein-and-fat'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_851',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Share of dietary energy supplied by food commodity types in the average individual's diet in a given country, measured in kilocalories per person per day.\",\n", + " 'url': 'https://ourworldindata.org/grapher/dietary-composition-by-country'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_852',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average per capita dietary energy supply by commodity groups, measured in kilocalories per person per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/dietary-compositions-by-commodity-group'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_853',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of global habitable land which would be required for agriculture if everyone in the world adopted the average diet of a given country versus gross domestic product (GDP) per capita, measured in constant international-$. We currently use approximately 50% of habitable land for agriculture, as shown by the horizontal line.',\n", + " 'url': 'https://ourworldindata.org/grapher/dietary-land-use-vs-gdp-per-capita'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_854',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average fruit consumption per person, differentiated by fruit types, measured in kilograms per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/fruit-consumption-by-fruit-type'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_855',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average fruit consumption per person, measured in kilograms per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/fruit-consumption-per-capita'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_856',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average per capita fruit supply, measured in kilograms per year versus gross domestic product (GDP) per capita, measured in constant international-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/fruit-consumption-vs-gdp-per-capita'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_857',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Diets are shown as average daily per capita supply of different food groups, compared to the EAT-Lancet diet. The EAT-Lancet diet is a diet recommended to balance the goals of healthy nutrition and environmental sustainability for a global population.',\n", + " 'url': 'https://ourworldindata.org/grapher/eat-lancet-diet-comparison'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_858',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '– Flexitarian: mainly vegetarian, but occasionally eat meat or fish. – Pescetarian: eat fish but do not eat meat or poultry. – Vegetarian: do not eat any meat, poultry, game, fish, or shellfish. – Plant-based / Vegan: do not eat dairy products, eggs, or any other animal product.',\n", + " 'url': 'https://ourworldindata.org/grapher/dietary-choices-of-british-adults'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_859',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Share of calorie supply in the average diet sourced from animal protein (which includes meat, seafood, eggs and dairy products), measured as the percentage of daily calorie supply, versus GDP per capita, adjusted for inflation and for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-calories-from-animal-protein-vs-gdp-per-capita'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_860',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of per capita dietary energy derived from protein, measured as the daily caloric supply from protein as a percentage of total caloric supply, versus gross domestic product (GDP) per capita measured in constant international-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-dietary-energy-derived-from-protein-vs-gdp-per-capita'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_861',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of per capita dietary energy derived from carbohydrates, measured as the daily caloric supply from carbohydrates as a percentage of total caloric supply, versus gross domestic product (GDP) per capita measured in constant international-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-dietary-energy-supply-from-carbohydrates-vs-gdp-per-capita'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_862',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The share of per capita dietary energy derived from fats, measured as the daily caloric supply from fat as a percentage of total caloric supply, versus gross domestic product (GDP) per capita measured in constant international-$.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-dietary-energy-supply-from-fats-vs-gdp-per-capita'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_863',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'A high share of energy from cereals, roots and tubers typically represents lower dietary diversity.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-energy-from-cereals-roots-and-tubers-vs-gdp-per-capita'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_864',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'The percentage of global habitable land area needed for agriculture if the total world population was to adopt the average diet of any given country. Values greater than 100% are not possible within global land constraints.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-of-global-habitable-land-needed-for-agriculture-if-everyone-had-the-diet-of'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_865',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': '– Flexitarian: mainly vegetarian, but occasionally eat meat or fish. – Pescetarian: eat fish but do not eat meat or poultry. – Vegetarian: do not eat any meat, poultry, game, fish, or shellfish. – Plant-based / Vegan: do not eat dairy products, eggs, or any other animal product.',\n", + " 'url': 'https://ourworldindata.org/grapher/dietary-choices-uk'},\n", + " {'category': 'Diet Compositions',\n", + " 'doc_id': 'owid_866',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average per capita vegetable consumption, measured in kilograms per person per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/vegetable-consumption-per-capita'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_867',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-generation'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_868',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-production-by-source'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_869',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-prod-source-stacked'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_870',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/elec-fossil-nuclear-renewables'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_871',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Target 7.1 of the UN Sustainable Development Goals (SDGs) is to achieve universal and equitable access to modern energy services. Having access to electricity is defined in international statistics as having an electricity source that can provide very basic lighting, and charge a phone or power a radio for 4 hours per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/sdg-target-on-electricity-access'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_872',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Having access to electricity is defined in international statistics as having an electricity source that can provide very basic lighting, and charge a phone or power a radio for 4 hours per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-of-people-with-and-without-electricity-access'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_873',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Having access to electricity is defined in international statistics as having an electricity source that can provide very basic lighting, and charge a phone or power a radio for 4 hours per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/number-without-electricity-by-region'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_874',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Having access to electricity is defined in international statistics as having an electricity source that can provide very basic lighting, and charge a phone or power a radio for 4 hours per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/people-without-electricity-country'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_875',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual average electricity generation per person, measured in kilowatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-electricity-generation'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_876',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in kilowatt-hours. Other renewables include geothermal, tidal and wave generation.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-electricity-source-stacked'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_877',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Ember (2024); Energy Institute - Statistical Review of World Energy (2023); Population based on various sources (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-electricity-fossil-nuclear-renewables'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_878',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Low-carbon electricity is the sum of electricity from nuclear and renewable sources (including solar, wind, hydropower, biomass and waste, geothermal and wave and tidal).',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-low-carbon'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_879',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Ember (2024); Energy Institute - Statistical Review of World Energy (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/share-elec-by-source'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_880',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Ember (2024); Energy Institute - Statistical Review of World Energy (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-source-facet'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_881',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total electricity.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-coal'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_882',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total electricity.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-fossil-fuels'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_883',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total electricity.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-gas'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_884',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total electricity.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-hydro'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_885',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total electricity.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-nuclear'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_886',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Renewables include electricity production from hydropower, solar, wind, biomass & waste, geothermal, wave, and tidal sources.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-renewables'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_887',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total electricity.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-solar'},\n", + " {'category': 'Electricity',\n", + " 'doc_id': 'owid_888',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total electricity.',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-wind'},\n", + " {'category': 'Electricity Mix',\n", + " 'doc_id': 'owid_889',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total, direct primary energy consumption.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-as-a-share-of-primary-energy'},\n", + " {'category': 'Electricity Mix',\n", + " 'doc_id': 'owid_890',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Multiple sources compiled by World Bank (2024)',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-source-wb-stacked'},\n", + " {'category': 'Electricity Mix',\n", + " 'doc_id': 'owid_891',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Target 7.1 of the UN Sustainable Development Goals (SDGs) is to achieve universal and equitable access to modern energy services. Having access to electricity is defined in international statistics as having an electricity source that can provide very basic lighting, and charge a phone or power a radio for 4 hours per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/sdg-target-on-electricity-access'},\n", + " {'category': 'Electricity Mix',\n", + " 'doc_id': 'owid_892',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Net electricity imports are calculated as electricity imports minus exports. This is given as a share of a country's electricity demand. Countries with positive values are net importers of electricity; negative values are net exporters.\",\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-imports-share-demand'},\n", + " {'category': 'Electricity Mix',\n", + " 'doc_id': 'owid_893',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in kilowatt-hours. Other renewables include geothermal, tidal and wave generation.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-electricity-source-stacked'},\n", + " {'category': 'Electricity Mix',\n", + " 'doc_id': 'owid_894',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Multiple sources compiled by World Bank (2024)',\n", + " 'url': 'https://ourworldindata.org/grapher/share-electricity-source-wb'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_895',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual change in primary energy consumption in one year, relative to the previous year. Energy is measured in terawatt-hours, using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/abs-change-energy-consumption'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_896',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Access to clean fuels or technologies reduce exposure to indoor air pollutants, a leading cause of death in low-income households. Energy is measured in kilowatt-hours per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/access-to-clean-fuels-and-technologies-for-cooking-vs-per-capita-energy-consumption'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_897',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Having access to electricity is defined in international statistics as having an electricity source that can provide very basic lighting, and charge a phone or power a radio for 4 hours per day. GDP per capita is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/access-to-electricity-vs-gdp-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_898',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in coal energy consumption relative to the previous year, measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-coal'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_899',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in fossil energy consumption, measured in terawatt-hours, relative to the previous year. This is the sum of energy from coal, oil and gas.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-fossil-fuels'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_900',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in gas energy consumption relative to the previous year, measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-gas'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_901',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in energy generation relative to the previous year, using the substitution method and measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-hydro'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_902',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in energy generation relative to the previous year, measured in terawatt-hours and using the substitution method. Low-carbon energy is defined as the sum of nuclear and renewable sources.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-low-carbon-energy'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_903',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in nuclear energy generation relative to the previous year, measured in terawatt-hours and using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-nuclear'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_904',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in oil energy consumption relative to the previous year, measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-oil'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_905',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in primary energy consumption as a percentage of the consumption of the previous year, using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-energy-consumption'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_906',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in renewable energy generation relative to the previous year, measured in terawatt-hours and using the substitution method. It includes energy from hydropower, solar, wind, geothermal, wave and tidal, and bioenergy.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-renewables'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_907',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in solar and wind energy generation relative to the previous year, measured in terawatt-hours of primary energy using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-in-solar-and-wind-energy-generation'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_908',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in energy generation relative to the previous year, measured in terawatt-hours and using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-solar'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_909',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in energy generation relative to the previous year, using the substitution method and measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-change-wind'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_910',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Figures in recent years are subject to a time lag; submitted patents may not yet be reflected in the data.',\n", + " 'url': 'https://ourworldindata.org/grapher/patents-ccs'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_911',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Figures in recent years are subject to a time lag; submitted patents may not yet be reflected in the data.',\n", + " 'url': 'https://ourworldindata.org/grapher/patents-electric-vehicles'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_912',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Figures in recent years are subject to a time lag; submitted patents may not yet be reflected in the data.',\n", + " 'url': 'https://ourworldindata.org/grapher/patents-energy-storage'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_913',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data only includes energy source technologies, and excludes technologies such as energy storage or transport. Figures in recent years are subject to a time lag; submitted patents may not yet be reflected in the data.',\n", + " 'url': 'https://ourworldindata.org/grapher/patents-filed-for-renewables'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_914',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Figures in recent years are subject to a time lag; submitted patents may not yet be reflected in the data.',\n", + " 'url': 'https://ourworldindata.org/grapher/patents-for-renewables-by-country'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_915',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in coal energy consumption relative to the previous year.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-coal'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_916',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in fossil energy consumption relative to the previous year. This is the sum of energy from coal, oil and gas.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-fossil-fuels'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_917',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in gas energy consumption relative to the previous year.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-gas'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_918',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in hydropower generation relative to the previous year.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-hydro'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_919',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Shown is the percentage change in low-carbon energy generation relative to the previous year. This is the sum of nuclear and renewable sources.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-low-carbon'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_920',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in nuclear energy generation relative to the previous year.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-nuclear'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_921',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in oil energy consumption relative to the previous year.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-oil'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_922',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in renewable energy generation relative to the previous year. It includes energy from hydropower, solar, wind, geothermal, wave and tidal, and bioenergy.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-renewables'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_923',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Change in energy generation relative to the previous year.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-in-solar-and-wind-energy-generation'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_924',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in solar energy generation relative to the previous year.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-solar'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_925',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentage change in wind energy generation relative to the previous year.',\n", + " 'url': 'https://ourworldindata.org/grapher/annual-percentage-change-wind'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_926',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fossil fuel consumption is measured as the average consumption of energy from coal, oil and gas per person. Fossil fuel and industry emissions are included. Land-use change emissions are not included.',\n", + " 'url': 'https://ourworldindata.org/grapher/co-emissions-per-capita-vs-fossil-fuel-consumption-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_927',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon dioxide (CO₂) emissions are measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/co2-per-capita-vs-renewable-electricity'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_928',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Carbon intensity is measured in grams of carbon dioxide-equivalents emitted per kilowatt-hour of electricity generated.',\n", + " 'url': 'https://ourworldindata.org/grapher/carbon-intensity-electricity'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_929',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based (trade-adjusted) primary energy use measures domestic energy use minus energy used to produce exported goods, plus energy used to produce imported goods. Gross domestic product (GDP) is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-use-gdp-decoupling'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_930',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based (trade-adjusted) primary energy use measures domestic energy use minus energy used to produce exported goods, plus energy used to produce imported goods. Gross domestic product (GDP) is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/change-energy-gdp-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_931',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Coal use differentiated by its end use category. This is measured in tonnes per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-by-end-user-uk'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_932',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Coal energy consumption per capita is measured in megawatt-hours per person. GDP per capita is adjusted for inflation and for differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-vs-gdp-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_933',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Coal output in the United Kingdom, measured from opencast and deepmined sources. This is measured in tonnes of coal per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-uk-opencast-deep-mine'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_934',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average coal output per worker, measured in tonnes per employee per year. The number employed in the coal industry includes those hired as contractors.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-output-per-worker-in-the-united-kingdom'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_935',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Coal prices of various production locations are measured in US dollars per tonne. This data is not adjusted for inflation.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-prices'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_936',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-production-by-country'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_937',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Coal production is measured as primary energy in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-production-country'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_938',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Coal production and imports in the United Kingdom, measured in tonnes per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-output-uk-tonnes'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_939',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in kilowatt-hours per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-prod-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_940',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average coal production per capita over the long-term, measured in megawatt-hour (MWh) equivalents per person per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/coal-production-per-capita-over-the-long-term'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_941',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Cobalt production is measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/cobalt-production'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_942',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Energy intensity is measured as the number of kilowatt-hours used per dollar of gross domestic product (GDP). Consumption-based energy adjusts for the energy embedded in traded goods: it is the energy used domestically minus energy used to produce exported goods; plus the energy used for imported goods.',\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-energy-intensity'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_943',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Consumption-based (or trade-adjusted) energy use measures domestic energy use minus energy used to produce exported goods, plus energy used to produce imported goods. Measured in megawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/consumption-based-energy-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_944',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Global crude oil prices, measured in US dollars per cubic meter. This data is not adjusted for inflation.',\n", + " 'url': 'https://ourworldindata.org/grapher/crude-oil-prices'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_945',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Crude oil spot price of the most common oil blends, measured in US dollars per cubic meter. This data is not adjusted for inflation.',\n", + " 'url': 'https://ourworldindata.org/grapher/crude-oil-spot-prices'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_946',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates from indoor air pollution are measured as the number of deaths per 100,000 individuals. Primary energy is based on the substitution method and measured in kilowatt-hours per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rate-from-indoor-air-pollution-vs-per-capita-energy-consumption'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_947',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Death rates are measured based on deaths from accidents and air pollution per terawatt-hour of electricity.',\n", + " 'url': 'https://ourworldindata.org/grapher/death-rates-from-energy-production-per-twh'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_948',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Percentages are in terms of direct primary energy, which means that fossil fuels include the energy lost due to inefficiencies in energy production.',\n", + " 'url': 'https://ourworldindata.org/grapher/primary-energy-fossil-nuclear-renewables'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_949',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Car stocks represent the number of cars that are in use. It is the balance of cumulative sales over time and the number of cars that have been retired or taken off the road. Electric cars include fully battery-electric vehicles and plug-in hybrids.',\n", + " 'url': 'https://ourworldindata.org/grapher/electric-car-stocks'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_950',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured as a percentage of total, direct primary energy consumption.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-as-a-share-of-primary-energy'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_951',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Electricity demand is measured in terawatt-hours, as total electricity generation, adjusted for electricity imports and exports.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-demand'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_952',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-generation'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_953',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-coal'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_954',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Electricity generation from coal, oil and gas sources combined, measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-fossil-fuels'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_955',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Ember (2024); Energy Institute - Statistical Review of World Energy (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/elec-mix-bar'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_956',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-gas'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_957',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Low-carbon electricity is the sum of electricity generation from nuclear and renewable sources. Renewable sources include hydropower, solar, wind, geothermal, bioenergy, wave and tidal. Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/low-carbon-electricity'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_958',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-oil'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_959',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours. Renewable sources include hydropower, solar, wind, geothermal, bioenergy, wave and tidal.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-renewables'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_960',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-generation-from-solar-and-wind-compared-to-coal'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_961',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-production-by-source'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_962',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-prod-source-stacked'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_963',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Multiple sources compiled by World Bank (2024)',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-source-wb-stacked'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_964',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/elec-fossil-nuclear-renewables'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_965',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Ember (2024); Energy Institute - Statistical Review of World Energy (2023); Department for Business, Energy & Industrial Strategy of the UK (2023)',\n", + " 'url': 'https://ourworldindata.org/grapher/electricity-mix-uk'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_966',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total number of individuals employed in the coal industry in the United Kingdom. Figures include those employed as contractors by the coal industry.',\n", + " 'url': 'https://ourworldindata.org/grapher/employment-in-the-coal-industry-in-the-united-kingdom'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_967',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terms of primary energy using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-consumption-by-source-and-country'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_968',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': \"Net energy embedded in traded goods is the difference in energy embedded in exported goods, and imported goods. A positive value means that a country is a net importer; a negative means it's a net exporter. This is given as a percentage of a country's domestic energy use.\",\n", + " 'url': 'https://ourworldindata.org/grapher/traded-energy-share-domestic'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_969',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Energy trade, measured as the percentage of energy use. Positive values indicate a country or region is a net importer of energy. Negative numbers indicate a country or region is a net exporter.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-imports-and-exports-energy-use'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_970',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Amount of energy needed to produce one unit of economic output. A lower number means that economies produce economic value in a less energy-intensive way. This data is measured in megajoules per dollar, adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-intensity-of-economies'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_971',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Energy intensity is measured as primary energy consumption per unit of gross domestic product (GDP), in kilowatt-hours per dollar. GDP is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-intensity'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_972',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Amount of energy needed to produce one unit of economic output. A lower number means that economic value is produced in a less energy-intensive way. This data is measured in megajoules per dollar, adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-intensity-by-sector'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_973',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Energy intensity represents primary energy consumption, using the substitution method, per unit of gross domestic product (GDP). GDP is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-intensity-vs-gdp'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_974',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average energy consumption per capita is measured in kilowatt-hours per person. Average carbon dioxide (CO₂) emissions per capita are measured in tonnes per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-use-per-capita-vs-co2-emissions-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_975',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in kilowatt-hours per person. Here, energy refers to primary energy using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/per-capita-energy-use'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_976',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Energy refers to primary energy, measured in kilowatt-hours per person, using the substitution method. Gross domestic product (GDP) is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-use-per-person-vs-gdp-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_977',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/fossil-fuel-consumption-by-type'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_978',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/fossil-fuel-primary-energy'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_979',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Fossil fuel consumption per capita is measured as the average consumption of energy from coal, oil and gas, in kilowatt-hours per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/fossil-fuels-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_980',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in kilowatt-hours per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/fossil-fuel-consumption-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_981',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in kilowatt-hours per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/fossil-fuel-cons-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_982',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average global prices of oil, natural gas and coal, measured as an energy index where prices in 2018=100.',\n", + " 'url': 'https://ourworldindata.org/grapher/fossil-fuel-price-index'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_983',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Total fossil fuel production - differentiated by coal, oil and natural gas - by country over the long-run, measured in terawatt-hour (TWh) equivalents per year.',\n", + " 'url': 'https://ourworldindata.org/grapher/fossil-fuel-production-over-the-long-term'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_984',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Average fossil fuel production per capita across countries and regions, measured in megawatt-hours (MWh) per person per year. Fossil fuel consumption has been categorised by coal, oil and natural gas sources.',\n", + " 'url': 'https://ourworldindata.org/grapher/fossil-fuel-production-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_985',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual energy use per capita, measured in kilowatt-hours per person vs. gross domestic product (GDP) per capita, which is adjusted for inflation and differences in the cost of living between countries.',\n", + " 'url': 'https://ourworldindata.org/grapher/energy-use-per-capita-vs-gdp-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_986',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Natural gas consumption, measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/gas-consumption-by-country'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_987',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Annual natural gas consumption is measured in terawatt-hours (TWh).',\n", + " 'url': 'https://ourworldindata.org/grapher/natural-gas-consumption-by-region'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_988',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/gas-production-by-country'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_989',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in kilowatt-hours per person.',\n", + " 'url': 'https://ourworldindata.org/grapher/gas-prod-per-capita'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_990',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Proved reserves, measured in cubic meters, are generally those quantities that can be recovered in the future from known reservoirs under existing economic and operating conditions, according to geological and engineering information.',\n", + " 'url': 'https://ourworldindata.org/grapher/natural-gas-proved-reserves'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_991',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Data source: Bergero et al. (2023). Pathways to net-zero emissions from aviation.',\n", + " 'url': 'https://ourworldindata.org/grapher/aviation-demand-efficiency'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_992',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Energy consumption is measured in terawatt-hours, in terms of direct primary energy. This means that fossil fuels include the energy lost due to inefficiencies in energy production.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-primary-energy'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_993',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours of primary energy consumption.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-fossil-fuel-consumption'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_994',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in terawatt-hours of direct primary energy consumption.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-hydro-consumption'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_995',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in gigawatts (GW).',\n", + " 'url': 'https://ourworldindata.org/grapher/installed-global-renewable-energy-capacity-by-technology'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_996',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Primary energy consumption is measured in terawatt-hours, using the substitution method.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-energy-consumption-source'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_997',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Primary energy is based on the substitution method and measured in terawatt-hours.',\n", + " 'url': 'https://ourworldindata.org/grapher/global-energy-substitution'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_998',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Measured in tonnes.',\n", + " 'url': 'https://ourworldindata.org/grapher/graphite-production'},\n", + " {'category': 'Energy',\n", + " 'doc_id': 'owid_999',\n", + " 'returned_content': '',\n", + " 'source': 'OWID',\n", + " 'subtitle': 'Target 7.1 of the UN Sustainable Development Goals (SDGs) is to achieve universal and equitable access to modern energy services. Having access to electricity is defined in international statistics as having an electricity source that can provide very basic lighting, and charge a phone or power a radio for 4 hours per day.',\n", + " 'url': 'https://ourworldindata.org/grapher/sdg-target-on-electricity-access'},\n", + " ...],\n", + " 'documents': ['Number of people with and without access to clean cooking fuels',\n", + " 'Number of people without access to clean fuels for cooking',\n", + " 'People without clean fuels for cooking, by world region',\n", + " 'Share of the population without access to clean fuels for cooking',\n", + " 'Share with access to electricity vs. per capita energy consumption',\n", + " 'Agricultural export subsidies',\n", + " 'Agricultural general services support',\n", + " 'Agricultural land per capita',\n", + " 'Agricultural land use per person',\n", + " 'Agricultural output',\n", + " 'Agricultural producer support',\n", + " 'Agriculture orientation index for government expenditures',\n", + " 'Apple production',\n", + " 'Arable land use per person',\n", + " 'Average farm size',\n", + " 'Avocado production',\n", + " 'Banana production',\n", + " 'Banana production by region',\n", + " 'Barley production',\n", + " 'Bean production',\n", + " 'Breakdown of habitable land area',\n", + " 'Cashew nut production',\n", + " 'Cassava production',\n", + " 'Cereal production',\n", + " 'Cereals allocated to food, animal feed and fuel',\n", + " 'Cereals: which countries are net importers and exporters?',\n", + " 'Change in corn production and land use in the United States',\n", + " 'Change of cereal yield and land used for cereal production',\n", + " 'Chicken meat production',\n", + " 'Cocoa bean production',\n", + " 'Cocoa bean production by region',\n", + " 'Coffee bean production',\n", + " 'Coffee production by region',\n", + " 'Corn production',\n", + " 'Cropland and pasture per person',\n", + " 'Cropland area',\n", + " 'Cropland extent over the long-term',\n", + " 'Distribution of soil lifespans',\n", + " 'FAO projections of arable land',\n", + " 'Fertilizer use per hectare of cropland',\n", + " 'Global agricultural land use by major crop type',\n", + " 'Global allocation of crops to end uses by farm size',\n", + " 'Global crop production by farm size',\n", + " 'Global food exports: how much comes from Ukraine & Russia?',\n", + " 'Global food production: how much comes from Ukraine & Russia?',\n", + " 'Grape production',\n", + " 'Grazing land use over the long-term',\n", + " 'Labor productivity in agriculture (GDP/worker)',\n", + " 'Land use for vegetable oil crops',\n", + " 'Land used for agriculture',\n", + " 'Long-run cereal yields in the United Kingdom',\n", + " 'Maize exports from Ukraine and Russia in perspective',\n", + " 'Methane emissions from agriculture',\n", + " 'Nitrogen output vs. nitrogen input to agriculture',\n", + " 'Nitrogen use efficiency',\n", + " 'Nitrous oxide emissions from agriculture',\n", + " 'Oil palm production',\n", + " 'Orange production',\n", + " 'Organic agricultural area',\n", + " 'Palm oil imports',\n", + " 'Pea production',\n", + " 'Per capita nitrous oxide emissions from agriculture',\n", + " 'Phosphorous inputs per hectare of cropland',\n", + " 'Potato production',\n", + " 'Productivity of small-scale food producers',\n", + " 'Projections for global peak agricultural land',\n", + " 'Rapeseed production',\n", + " 'Rice production',\n", + " 'Rice production by region',\n", + " 'Rye production',\n", + " 'Sesame seed production',\n", + " 'Share of agricultural land which is irrigated',\n", + " 'Share of agricultural landowners who are women',\n", + " 'Share of arable land which is organic',\n", + " 'Share of cereals allocated to animal feed',\n", + " 'Share of cereals allocated to food, animal feed or fuel',\n", + " 'Share of cereals allocated to human food',\n", + " 'Share of cereals allocated to human food vs. GDP per capita',\n", + " 'Share of cereals allocated to industrial uses',\n", + " 'Share of land area used for agriculture',\n", + " 'Share of land area used for arable agriculture',\n", + " 'Share of land used for permanent meadows and pastures',\n", + " 'Soy production, yield and area harvested',\n", + " 'Soybean production',\n", + " 'Soybeans: are they used for food, feed or fuel?',\n", + " 'Sugar beet production',\n", + " 'Sugar cane production',\n", + " 'Sunflower seed production',\n", + " 'Sweet potato production',\n", + " 'Tea production',\n", + " 'Tea production by region',\n", + " 'Tobacco production',\n", + " 'Tomato production',\n", + " 'Total applied phosphorous to crops',\n", + " 'Total financial assistance and flows for agriculture, by recipient',\n", + " 'Tractors per 100 square kilometers of arable land',\n", + " 'Value of agricultural production',\n", + " 'Vegetable oil production',\n", + " 'What has driven the growth in global agricultural production?',\n", + " 'Wheat exports from Ukraine and Russia in perspective',\n", + " 'Wheat production',\n", + " 'Which countries have managed to decouple agricultural output from more inputs?',\n", + " 'Wine production',\n", + " 'Yams production',\n", + " 'Agricultural export subsidies',\n", + " 'Agricultural general services support',\n", + " 'Agricultural producer support',\n", + " 'Agriculture orientation index for government expenditures',\n", + " 'Total financial assistance and flows for agriculture, by recipient',\n", + " 'Absolute number of deaths from ambient particulate air pollution',\n", + " 'Air pollutant emissions',\n", + " 'Air pollution',\n", + " 'Air pollution deaths from fossil fuels',\n", + " 'Air pollution vs. GDP per capita',\n", + " 'Chronic respiratory diseases death rate',\n", + " 'Death rate attributed to ambient air pollution',\n", + " 'Death rate attributed to household air pollution',\n", + " 'Death rate attributed to household and ambient air pollution',\n", + " 'Death rate from air pollution',\n", + " 'Death rate from air pollution',\n", + " 'Death rate from air pollution',\n", + " 'Death rate from ambient particulate air pollution',\n", + " 'Death rate from outdoor air pollution in 1990 vs. 2019',\n", + " 'Death rate from outdoor air pollution vs. GDP per capita',\n", + " 'Death rate from ozone pollution',\n", + " 'Death rate from ozone pollution',\n", + " 'Death rate from particular matter air pollution vs. PM2.5 concentration',\n", + " 'Deaths from air pollution',\n", + " 'Deaths from air pollution, by age',\n", + " 'Deaths from household and outdoor air pollution',\n", + " 'Deaths from outdoor air pollution',\n", + " 'Deaths from outdoor particulate matter air pollution, by age',\n", + " 'Deaths from outdoor particulate matter air pollution, by region',\n", + " 'Deaths from ozone pollution',\n", + " 'Disease burden from particulate pollution',\n", + " 'Emissions of air pollutants',\n", + " 'Emissions of air pollutants',\n", + " 'Emissions of air pollutants',\n", + " 'Emissions of particulate matter',\n", + " 'Exposure to PM2.5 air pollution vs. GDP per capita',\n", + " 'Exposure to particulate matter air pollution',\n", + " 'Global sulphur dioxide (SO2) emissions by world region',\n", + " 'Number of deaths from air pollution',\n", + " 'Outdoor air pollution death rate',\n", + " 'Outdoor air pollution death rate by age',\n", + " 'Outdoor air pollution deaths in 1990 vs. 2019',\n", + " 'Ozone (O₃) concentration',\n", + " 'Particulate matter exposure in 1990 vs. 2017',\n", + " 'Share of deaths attributed to air pollution',\n", + " 'Share of deaths attributed to outdoor air pollution',\n", + " 'Share of population exposed to air pollution above WHO targets',\n", + " 'Share of the population exposed to air pollution levels above WHO guidelines',\n", + " 'Share of the population without access to clean fuels for cooking',\n", + " 'Sources of air pollution in the UK',\n", + " 'emissions of air pollutants',\n", + " 'Active fur farms',\n", + " 'Animal lives lost per kilogram of product',\n", + " 'Animal lives lost per kilogram of product, including indirect deaths',\n", + " 'Egg production by system in the United Kingdom',\n", + " 'Global number of farmed finfishes used for food',\n", + " 'Kilograms of meat produced per animal',\n", + " 'Land animals slaughtered for meat',\n", + " 'Laying hens in cages and cage-free housing',\n", + " 'Levels of pain endured by the average hen in different production systems',\n", + " 'Number of farmed crustaceans killed for food',\n", + " 'Number of farmed fish killed for food',\n", + " 'Number of wild-caught fish killed for food',\n", + " 'Public attitudes to bans on factory farming and slaughterhouses in the United States',\n", + " 'Public attitudes to dietary choices and meat-eating in the United States',\n", + " 'Public attitudes to livestock treatment and animal pain in the United States',\n", + " 'Self-reported dietary choices by age, United Kingdom',\n", + " 'Share of egg production that is cage-free',\n", + " 'Share of eggs produced by different housing systems',\n", + " 'Time that fast and slower-growing chicken breeds spend in pain over their lifespan',\n", + " 'Vegans, vegetarians and meat-eaters: self-reported dietary choices, United Kingdom',\n", + " 'Which countries have banned bullfighting?',\n", + " 'Which countries have banned chick culling?',\n", + " 'Which countries have banned fur farming?',\n", + " 'Which countries have banned fur trading?',\n", + " 'Yearly number of animals slaughtered for meat',\n", + " 'Antibiotic use in livestock in Europe',\n", + " 'Antibiotic use in livestock vs. GDP per capita',\n", + " 'Antibiotic use in livestock vs. meat supply per capita',\n", + " 'Global antibiotic use in livestock under reduction scenarios',\n", + " 'Share of E. coli infections resistant to cephalosporins',\n", + " 'Share of S. aureus infections resistant to methicillin',\n", + " 'African elephant carcass ratio',\n", + " 'Annual fish catch relative to mean catch',\n", + " 'Annual fish catch relative to mean catch by region',\n", + " 'Aquaculture production',\n", + " 'Black rhino population',\n", + " 'Capture fishery production',\n", + " 'Change in bird populations in the EU',\n", + " 'Change in total mangrove area',\n", + " 'Changes in UK butterfly populations',\n", + " 'Chlorophyll-a deviation from the global average',\n", + " 'Countries have a budget for invasive alien species management',\n", + " 'Countries that are party to the Nagoya Protocol',\n", + " 'Countries that have legislative measures reported to the Access and Benefit-Sharing Clearing-House',\n", + " 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050',\n", + " 'Day of the year with peak cherry tree blossom in Kyoto, Japan',\n", + " 'Drivers of recovery in European bird populations',\n", + " 'Endemic amphibian species',\n", + " 'Endemic bird species',\n", + " 'Endemic freshwater crab species',\n", + " 'Endemic mammal species',\n", + " 'Endemic reef-forming coral species',\n", + " 'Endemic shark and ray species',\n", + " 'Fish and seafood production',\n", + " 'Fish catch in the United Kingdom',\n", + " 'Fish discards',\n", + " 'Fish stocks and fishing intensity by group',\n", + " 'Fish stocks and fishing intensity by region',\n", + " 'Fishing intensity',\n", + " 'Fishing intensity by region',\n", + " 'Five centuries of cod catches in Eastern Canada',\n", + " 'Global aquaculture production and wild fish used for animal feed',\n", + " 'Global biomass vs. abundance of taxa',\n", + " 'Global wildlife exports',\n", + " 'Health of fish stocks by fish group',\n", + " 'Health of fish stocks by region',\n", + " 'Indian rhino population',\n", + " 'Javan rhino population',\n", + " 'Living Planet Index',\n", + " 'Living Planet Index by region',\n", + " 'Local animal breeds with conserved genetic material',\n", + " 'Material footprint per capita',\n", + " 'Material footprint per unit of GDP',\n", + " 'Member countries of the International Treaty on Plant Genetic Resources for Food and Agriculture',\n", + " 'Mountain Green Cover Index',\n", + " 'National biodiversity strategy and action plan targets align with Aichi Biodiversity Target 9',\n", + " 'National progress towards Aichi Biodiversity Target 2',\n", + " 'Northern white rhino population',\n", + " 'Number of African elephants',\n", + " 'Number of Asian elephants',\n", + " 'Number of animal species losing habitat due to cropland expansion by 2050',\n", + " 'Number of coral bleaching events',\n", + " 'Number of coral bleaching events by stage of the ENSO cycle',\n", + " 'Number of described species',\n", + " 'Number of parties in multilateral environmental agreements',\n", + " 'Number of rhinos poached',\n", + " 'Number of seized rhino horns and pieces',\n", + " 'Number of severe coral bleaching events by stage of the ENSO cycle',\n", + " 'Number of species evaluated for their level of extinction risk',\n", + " 'Number of species that have gone extinct since 1500',\n", + " 'Number of species threatened with extinction',\n", + " 'Number of threatened endemic mammal species',\n", + " 'Number of unique plant genetic samples in conservation facilities',\n", + " 'Number of whales killed',\n", + " 'Number of whales killed globally per decade',\n", + " 'Projected changes in cropland',\n", + " 'Proportion of local livestock breeds at risk of extinction',\n", + " 'Protected area coverage of marine key biodiversity areas',\n", + " 'Protected area coverage of mountain key biodiversity areas',\n", + " 'Red List Index',\n", + " 'Seafood production: wild fish catch vs. aquaculture',\n", + " 'Seafood production: wild fish catch vs. aquaculture',\n", + " 'Share of Caribbean reefs with Acropora corals present or dominant',\n", + " 'Share of described species that have been evaluated for their extinction risk',\n", + " 'Share of fish stocks that are overexploited',\n", + " 'Share of forest area within protected areas',\n", + " 'Share of freshwater Key Biodiversity Areas that are protected',\n", + " 'Share of land area that is protected',\n", + " 'Share of land covered by forest',\n", + " 'Share of marine territorial waters that are protected',\n", + " 'Share of ocean area that is protected',\n", + " 'Share of species that are traded',\n", + " 'Share of species threatened with extinction',\n", + " 'Share of terrestrial Key Biodiversity Areas that are protected',\n", + " 'Share of traded species that are traded as pets',\n", + " 'Share of traded species that are traded as products',\n", + " 'Southern white rhino population',\n", + " 'Status of membership in the International Whaling Commission',\n", + " \"Status of the world's fish stocks\",\n", + " 'Sumatran rhino population',\n", + " 'The decline of global whale biomass',\n", + " 'The decline of global whale populations',\n", + " 'Threatened bird species',\n", + " 'Threatened endemic bird species',\n", + " 'Threatened endemic reef-forming coral species',\n", + " 'Threatened fish species',\n", + " 'Threatened mammal species',\n", + " 'Total amount donated for biodiversity conservation in developing countries',\n", + " 'Total donations received for biodiversity conservation',\n", + " 'Transboundary animal breeds with conserved genetic material',\n", + " 'Weight of seized rhino horns',\n", + " 'What is wild fish catch used for?',\n", + " 'Which countries are members of the International Whaling Commission?',\n", + " 'Wild fish catch by gear type',\n", + " 'Wild fish catch by gear type',\n", + " 'Wild fish catch from bottom trawling',\n", + " 'Share of cereals allocated to industrial uses',\n", + " 'Countries that have ratified the Biological Weapons Convention',\n", + " 'Countries that have ratified the Chemical Weapons Convention',\n", + " 'Current biological weapons activity',\n", + " 'Current chemical weapons activity',\n", + " 'Historical biological weapons activity',\n", + " 'Historical chemical weapons activity',\n", + " 'Number of countries by their current activity on biological weapons',\n", + " 'Number of countries by their current activity on chemical weapons',\n", + " 'Number of countries by their historical activity on biological weapons',\n", + " 'Number of countries by their historical activity on chemical weapons',\n", + " 'Adjusted net savings per capita',\n", + " 'Annual CO2 emissions',\n", + " 'Annual CO2 emissions by world region',\n", + " 'Annual CO2 emissions from cement',\n", + " 'Annual CO2 emissions from coal',\n", + " 'Annual CO2 emissions from deforestation by product',\n", + " 'Annual CO2 emissions from deforestation for food production',\n", + " 'Annual CO2 emissions from flaring',\n", + " 'Annual CO2 emissions from gas',\n", + " 'Annual CO2 emissions from land-use change',\n", + " 'Annual CO2 emissions from land-use change per capita',\n", + " 'Annual CO2 emissions from oil',\n", + " 'Annual CO2 emissions from other industry',\n", + " 'Annual CO2 emissions including land-use change',\n", + " 'Annual change in GDP and CO2 emissions',\n", + " 'Annual change in GDP, population and CO2 emissions',\n", + " 'Annual greenhouse gas emissions by world region',\n", + " 'Annual percentage change in CO2 emissions',\n", + " 'Are consumption-based CO2 per capita emissions above or below the global average?',\n", + " 'Are per capita CO2 emissions above or below the global average?',\n", + " 'Average temperature anomaly',\n", + " \"Aviation's share of global CO2 emissions\",\n", + " 'CO2 emissions by fuel or industry',\n", + " 'CO2 emissions by fuel or industry type',\n", + " 'CO2 emissions by sector',\n", + " 'CO2 emissions embedded in trade',\n", + " 'CO2 emissions from aviation',\n", + " 'CO2 emissions from domestic air travel',\n", + " 'CO2 emissions from fossil fuels and land-use change',\n", + " 'CO2 emissions from fossil fuels and land-use change',\n", + " 'CO2 emissions from international aviation',\n", + " 'CO2 emissions from transport',\n", + " 'CO2 emissions per capita',\n", + " 'CO2 emissions per capita vs. GDP per capita',\n", + " 'CO2 emissions per capita vs. fossil fuel consumption per capita',\n", + " 'CO2 emissions per capita vs. population growth',\n", + " 'CO2 emissions per capita vs. share of electricity generation from renewables',\n", + " 'CO2 reductions needed to keep global temperature rise below 1.5°C',\n", + " 'CO2 reductions needed to keep global temperature rise below 2°C',\n", + " 'Carbon dioxide emissions by income level',\n", + " 'Carbon dioxide emissions factors',\n", + " 'Carbon emission intensity vs. GDP per capita',\n", + " 'Carbon footprint of travel per kilometer',\n", + " 'Carbon intensity of energy production',\n", + " 'Carbon intensity vs. GDP per capita',\n", + " 'Carbon intensity: CO2 emissions per dollar of GDP',\n", + " 'Carbon opportunity costs per kilogram of food',\n", + " 'Change in CO2 emissions and GDP',\n", + " 'Change in per capita CO2 emissions and GDP',\n", + " 'Change in per capita CO2 emissions and GDP',\n", + " 'Consumption-based CO2 emissions',\n", + " 'Consumption-based CO2 emissions per capita vs. GDP per capita',\n", + " 'Consumption-based CO2 emissions per capita vs. Human Development Index',\n", + " 'Consumption-based carbon intensity',\n", + " 'Consumption-based vs. territorial CO2 emissions per capita',\n", + " 'Contribution to global mean surface temperature rise',\n", + " 'Contribution to global mean surface temperature rise by gas',\n", + " 'Contribution to global mean surface temperature rise from agriculture and land use',\n", + " 'Contribution to global mean surface temperature rise from fossil sources',\n", + " 'Contribution to value added vs. share of CO2 emissions in China',\n", + " 'Contribution to value added vs. share of CO2 emissions in Germany',\n", + " 'Contribution to value added vs. share of CO2 emissions in USA',\n", + " 'Countries using the System of Environmental-Economic Accounting',\n", + " 'Cumulative CO2 emissions',\n", + " 'Cumulative CO2 emissions by source',\n", + " 'Cumulative CO2 emissions by world region',\n", + " 'Cumulative CO2 emissions from cement',\n", + " 'Cumulative CO2 emissions from coal',\n", + " 'Cumulative CO2 emissions from flaring',\n", + " 'Cumulative CO2 emissions from gas',\n", + " 'Cumulative CO2 emissions from land-use change',\n", + " 'Cumulative CO2 emissions from oil',\n", + " 'Cumulative CO2 emissions from other industry',\n", + " 'Cumulative CO2 emissions including land-use change',\n", + " 'Emissions-weighted carbon price',\n", + " 'Emissions-weighted carbon price in emissions trading systems',\n", + " 'Energy use per capita vs. CO2 emissions per capita',\n", + " 'Export of environmentally sound technologies',\n", + " 'Food: emissions from production and the supply chain',\n", + " 'Food: greenhouse gas emissions across the supply chain',\n", + " 'Global emissions from food by life-cycle stage',\n", + " 'Global warming contributions by gas and source',\n", + " 'Global warming contributions from fossil fuels and land use',\n", + " 'Global warming potential of greenhouse gases relative to CO2',\n", + " 'Global warming: Contributions to the change in global mean surface temperature',\n", + " 'Greenhouse gas emissions',\n", + " 'Greenhouse gas emissions by gas',\n", + " 'Greenhouse gas emissions by sector',\n", + " 'Greenhouse gas emissions by sector',\n", + " 'Greenhouse gas emissions from food systems',\n", + " 'Greenhouse gas emissions from plastic by life-cycle stage',\n", + " 'Greenhouse gas emissions from plastics',\n", + " 'Greenhouse gas emissions per 100 grams of protein',\n", + " 'Greenhouse gas emissions per 1000 kilocalories',\n", + " 'Greenhouse gas emissions per kilogram of food product',\n", + " 'Greenhouse gas emissions per kilogram of seafood',\n", + " 'How have things changed?',\n", + " 'Hypothetical number of deaths from energy production',\n", + " 'Import of environmentally sound technologies',\n", + " 'Imported or exported CO2 emissions per capita',\n", + " 'Kaya identity: drivers of CO2 emissions',\n", + " 'Land-use change CO2 emissions: quality of estimates',\n", + " 'Level of implementation of sustainable procurement policies and plans',\n", + " 'Life expectancy at birth vs. CO2 emissions per capita',\n", + " 'Life satisfaction vs. CO2 emissions per capita',\n", + " 'Meat supply vs. GDP per capita',\n", + " 'Mechanisms in place to enhance policy coherence for sustainable development',\n", + " 'Methane concentration in the atmosphere',\n", + " 'Methane emissions',\n", + " 'Methane emissions by sector',\n", + " 'Methane emissions from agriculture',\n", + " 'Monthly CO2 emissions from commercial passenger flights',\n", + " 'Monthly CO2 emissions from domestic and international commercial passenger flights',\n", + " 'Nitrous oxide emissions',\n", + " 'Nitrous oxide emissions by sector',\n", + " 'Nitrous oxide emissions from agriculture',\n", + " 'Number of companies publishing sustainability reports that meet the minimum reporting requirements',\n", + " 'Per capita CO2 emissions from domestic commercial passenger flights',\n", + " 'Per capita CO2 emissions',\n", + " 'Per capita CO2 emissions by fuel type',\n", + " 'Per capita CO2 emissions by region',\n", + " 'Per capita CO2 emissions by sector',\n", + " 'Per capita CO2 emissions by source',\n", + " 'Per capita CO2 emissions from aviation',\n", + " 'Per capita CO2 emissions from cement',\n", + " 'Per capita CO2 emissions from coal',\n", + " 'Per capita CO2 emissions from commercial aviation, tourism-adjusted',\n", + " 'Per capita CO2 emissions from deforestation for food production',\n", + " 'Per capita CO2 emissions from domestic aviation',\n", + " 'Per capita CO2 emissions from domestic aviation vs. GDP per capita',\n", + " 'Per capita CO2 emissions from domestic aviation vs. land area',\n", + " 'Per capita CO2 emissions from flaring',\n", + " 'Per capita CO2 emissions from gas',\n", + " 'Per capita CO2 emissions from international aviation',\n", + " 'Per capita CO2 emissions from international commercial passenger flights, tourism-adjusted',\n", + " 'Per capita CO2 emissions from international passenger flights, tourism-adjusted',\n", + " 'Per capita CO2 emissions from oil',\n", + " 'Per capita CO2 emissions from transport',\n", + " 'Per capita CO2 emissions including land-use change',\n", + " 'Per capita CO2 emissions vs. per capita energy consumption',\n", + " 'Per capita GHG emissions vs. per capita CO2 emissions',\n", + " 'Per capita GHG emissions vs. per capita CO2 emissions',\n", + " 'Per capita consumption-based CO2 emissions',\n", + " 'Per capita greenhouse gas emissions',\n", + " 'Per capita greenhouse gas emissions by sector',\n", + " 'Per capita greenhouse gas emissions, excluding land use and forestry',\n", + " 'Per capita methane emissions',\n", + " 'Per capita methane emissions by sector',\n", + " 'Per capita nitrous oxide emissions',\n", + " 'Per capita nitrous oxide emissions by sector',\n", + " 'Per capita nitrous oxide emissions from agriculture',\n", + " 'Share of CO2 emissions covered by a carbon price',\n", + " 'Share of CO2 emissions embedded in trade',\n", + " 'Share of children who are stunted vs. CO2 emissions per capita',\n", + " 'Share of cumulative CO2 emissions from oil',\n", + " 'Share of global CO2 consumption-based emissions',\n", + " 'Share of global CO2 emissions',\n", + " 'Share of global CO2 emissions and population',\n", + " 'Share of global CO2 emissions from aviation',\n", + " 'Share of global CO2 emissions from cement',\n", + " 'Share of global CO2 emissions from coal',\n", + " 'Share of global CO2 emissions from domestic air travel',\n", + " 'Share of global CO2 emissions from flaring',\n", + " 'Share of global CO2 emissions from gas',\n", + " 'Share of global CO2 emissions from international aviation',\n", + " 'Share of global CO2 emissions from land-use change',\n", + " 'Share of global CO2 emissions from oil',\n", + " 'Share of global CO2 emissions including land-use change',\n", + " 'Share of global CO2 emissions vs. share of population',\n", + " 'Share of global annual CO2 emissions from other industry',\n", + " 'Share of global consumption-based CO2 emissions and population',\n", + " 'Share of global consumption-based CO2 emissions vs. share of population',\n", + " 'Share of global cumulative CO2 emissions',\n", + " 'Share of global cumulative CO2 emissions from cement',\n", + " 'Share of global cumulative CO2 emissions from coal',\n", + " 'Share of global cumulative CO2 emissions from flaring',\n", + " 'Share of global cumulative CO2 emissions from gas',\n", + " 'Share of global cumulative CO2 emissions from land-use change',\n", + " 'Share of global cumulative CO2 emissions from other industry',\n", + " 'Share of global cumulative CO2 emissions including land-use change',\n", + " 'Share of global greenhouse gas emissions',\n", + " 'Share of global greenhouse gas emissions from food',\n", + " 'Share of global methane emissions',\n", + " 'Share of global nitrous oxide emissions',\n", + " 'Share of national greenhouse gas emissions that come from food',\n", + " 'Share of required information submitted to international environmental agreements on hazardous waste and other chemicals',\n", + " 'Share that think people in their country should act to tackle climate change',\n", + " 'Status of net-zero carbon emissions targets',\n", + " 'Territorial and consumption-based CO2 emissions',\n", + " 'Territorial vs. consumption-based CO2 emissions per capita',\n", + " 'Total greenhouse gas emissions per capita',\n", + " 'Total greenhouse gas emissions, excluding land use and forestry',\n", + " \"Transport's share of global greenhouse gas emissions from food\",\n", + " 'Value added growth vs. CO2 emissions growth in China',\n", + " 'Value added growth vs. CO2 emissions growth in Germany',\n", + " 'Value added growth vs. CO2 emissions growth in the USA',\n", + " 'Which countries have a carbon emissions trading system?',\n", + " 'Which countries have a carbon tax?',\n", + " 'Which countries have set a net-zero emissions target?',\n", + " 'Year-on-year change in CO2 emissions',\n", + " 'Are children eligible for COVID-19 vaccination?',\n", + " 'Biweekly change in confirmed COVID-19 cases',\n", + " 'Biweekly change in confirmed COVID-19 deaths',\n", + " 'Biweekly confirmed COVID-19 cases',\n", + " 'Biweekly confirmed COVID-19 cases per million people',\n", + " 'Biweekly confirmed COVID-19 deaths',\n", + " 'Biweekly confirmed COVID-19 deaths per million people',\n", + " 'COVID-19 Containment and Health Index',\n", + " 'COVID-19 testing policies',\n", + " 'COVID-19 vaccination policy',\n", + " 'COVID-19 vaccinations vs. COVID-19 deaths',\n", + " 'COVID-19 vaccine boosters administered',\n", + " 'COVID-19 vaccine boosters administered per 100 people',\n", + " 'COVID-19 vaccine doses administered by manufacturer',\n", + " 'COVID-19 vaccine doses administered per 100 people, by income group',\n", + " 'COVID-19 vaccine doses donated to COVAX',\n", + " 'COVID-19 vaccine doses donated to COVAX, per capita',\n", + " 'COVID-19 vaccine doses donated to COVAX, per dose administered',\n", + " 'COVID-19 vaccine doses donated to COVAX, per million dollars of GDP',\n", + " 'COVID-19: Daily tests vs. daily new confirmed cases',\n", + " 'COVID-19: Daily tests vs. daily new confirmed cases per million',\n", + " \"COVID-19: Where are the world's unvaccinated people?\",\n", + " 'Cancellation of public events during COVID-19 pandemic',\n", + " 'Chile: COVID-19 weekly death rate by vaccination status',\n", + " 'Confirmed COVID-19 deaths per million vs. GDP per capita',\n", + " 'Cumulative confirmed COVID-19 cases and deaths',\n", + " 'Cumulative confirmed COVID-19 cases by world region',\n", + " 'Cumulative confirmed COVID-19 deaths by world region',\n", + " 'Cumulative confirmed COVID-19 deaths vs. cases',\n", + " 'Daily COVID-19 tests',\n", + " 'Daily COVID-19 tests per 1,000 people',\n", + " 'Daily COVID-19 vaccine doses administered',\n", + " 'Daily and total confirmed COVID-19 deaths',\n", + " 'Daily confirmed COVID-19 cases by world region',\n", + " 'Daily confirmed COVID-19 deaths by world region',\n", + " 'Daily new confirmed COVID-19 cases and deaths',\n", + " 'Daily new confirmed COVID-19 deaths in Sweden',\n", + " 'Daily new estimated COVID-19 infections from the ICL model',\n", + " 'Daily new estimated COVID-19 infections from the IHME model',\n", + " 'Daily new estimated COVID-19 infections from the LSHTM model',\n", + " 'Daily new estimated COVID-19 infections from the YYG model',\n", + " 'Daily new estimated infections of COVID-19',\n", + " 'Daily share of the population receiving a COVID-19 vaccine dose',\n", + " 'Daily vs. total confirmed COVID-19 cases per million people',\n", + " 'Debt or contract relief during the COVID-19 pandemic',\n", + " 'Economic decline in the second quarter of 2020',\n", + " 'Economic decline in the second quarter of 2020 vs. confirmed COVID-19 cases per million people',\n", + " 'Economic decline in the second quarter of 2020 vs. total confirmed COVID-19 deaths (as of August 2020)',\n", + " 'England: COVID-19 monthly death rate by vaccination status',\n", + " 'Estimated cumulative excess deaths during COVID',\n", + " 'Estimated cumulative excess deaths during COVID, from the WHO',\n", + " 'Estimated cumulative excess deaths during COVID-19',\n", + " 'Estimated cumulative excess deaths per 100,000 people during COVID, from The Economist',\n", + " 'Estimated cumulative excess deaths, from The Economist and the WHO',\n", + " 'Estimated daily excess deaths during COVID',\n", + " 'Estimated daily excess deaths during COVID',\n", + " 'Estimated daily excess deaths per 100,000 people during COVID, from The Economist',\n", + " 'Excess mortality: Cumulative deaths from all causes compared to projection based on previous years',\n", + " 'Excess mortality: Cumulative deaths from all causes compared to projection based on previous years',\n", + " 'Excess mortality: Cumulative deaths from all causes compared to projection based on previous years, per million people',\n", + " 'Excess mortality: Deaths from all causes compared to average over previous years',\n", + " 'Excess mortality: Deaths from all causes compared to average over previous years, by age',\n", + " 'Excess mortality: Deaths from all causes compared to projection',\n", + " 'Excess mortality: Deaths from all causes compared to projection based on previous years, by age',\n", + " 'Excess mortality: Raw number of deaths from all causes compared to projection based on previous years',\n", + " 'Excess mortality: Raw number of deaths from all causes compared to projection based on previous years',\n", + " 'Face covering policies during the COVID-19 pandemic',\n", + " 'Grocery and pharmacy stores: How did the number of visitors change relative to before the pandemic?',\n", + " 'How did the number of visitors change since the beginning of the pandemic?',\n", + " 'How do key COVID-19 metrics compare to the early 2021 peak in Israel?',\n", + " 'How do key COVID-19 metrics compare to the early 2021 peak in Spain?',\n", + " 'How do key COVID-19 metrics compare to the early 2021 peak?',\n", + " 'Income support during the COVID-19 pandemic',\n", + " 'International travel controls during the COVID-19 pandemic',\n", + " 'Number of COVID-19 patients in ICU per million',\n", + " 'Number of COVID-19 patients in hospital',\n", + " 'Number of COVID-19 patients in hospital per million',\n", + " 'Number of COVID-19 patients in intensive care (ICU)',\n", + " 'Number of people who completed the initial COVID-19 vaccination protocol',\n", + " 'Parks and outdoor spaces: How did the number of visitors change relative to before the pandemic?',\n", + " 'Public information campaigns on the COVID-19 pandemic',\n", + " 'Public transport closures during the COVID-19 pandemic',\n", + " 'Residential areas: How did the time spent at home change relative to before the pandemic?',\n", + " 'Restrictions on internal movement during the COVID-19 pandemic',\n", + " 'Restrictions on public gatherings in the COVID-19 pandemic',\n", + " 'Retail and recreation: How did the number of visitors change relative to before the pandemic?',\n", + " 'SARS-CoV-2 sequences by variant',\n", + " 'SARS-CoV-2 variants in analyzed sequences',\n", + " 'School closures during the COVID-19 pandemic',\n", + " 'Share of SARS-CoV-2 sequences that are the delta variant',\n", + " 'Share of SARS-CoV-2 sequences that are the omicron variant',\n", + " 'Share of global daily COVID-19 vaccine doses administered as boosters',\n", + " 'Share of people who completed the initial COVID-19 vaccination protocol',\n", + " 'Share of people who completed the initial COVID-19 vaccination protocol by age',\n", + " 'Share of people who received at least one dose of COVID-19 vaccine',\n", + " 'Share of people with a COVID-19 booster dose by age',\n", + " 'Share of people with at least one dose of COVID-19 vaccine by age',\n", + " 'Share of total COVID-19 tests that were positive',\n", + " 'Stay-at-home requirements during the COVID-19 pandemic',\n", + " 'Sweden: Daily new confirmed COVID-19 deaths, by date of death',\n", + " 'Switzerland: COVID-19 weekly death rate by vaccination status',\n", + " 'Tests and new confirmed COVID-19 cases per day',\n", + " 'Tests conducted per new confirmed case of COVID-19',\n", + " 'The share of COVID-19 tests that are positive',\n", + " 'Total COVID-19 tests',\n", + " 'Total COVID-19 tests conducted vs. confirmed cases',\n", + " 'Total COVID-19 tests conducted vs. confirmed cases per million',\n", + " 'Total COVID-19 tests per 1,000 people',\n", + " 'Total COVID-19 tests per 1,000 vs. GDP per capita',\n", + " 'Total COVID-19 tests per confirmed case',\n", + " 'Total COVID-19 vaccine doses administered',\n", + " 'Total COVID-19 vaccine doses administered per 100 people',\n", + " 'Total confirmed COVID-19 cases vs. deaths per million',\n", + " 'Total confirmed COVID-19 cases, by source',\n", + " 'Total confirmed COVID-19 deaths and cases per million people',\n", + " 'Total confirmed deaths due to COVID-19 vs. population',\n", + " 'Total confirmed deaths from COVID-19, by source',\n", + " 'Total number of people who received at least one dose of COVID-19 vaccine',\n", + " 'Transit stations: How did the number of visitors change relative to before the pandemic?',\n", + " 'UK: Cumulative confirmed COVID-19 deaths per 100,000',\n", + " 'UK: Daily new confirmed COVID-19 cases',\n", + " 'UK: Daily new confirmed COVID-19 cases per 100,000',\n", + " 'UK: Daily new confirmed COVID-19 deaths',\n", + " 'UK: Daily new hospital admissions for COVID-19',\n", + " 'UK: Number of COVID-19 patients in hospital',\n", + " 'UK: Share of COVID-19 tests that are positive',\n", + " 'US: Daily COVID-19 vaccine doses administered',\n", + " 'US: Daily COVID-19 vaccine doses administered per 100 people',\n", + " 'US: Number of people who completed the initial COVID-19 vaccination protocol',\n", + " 'US: Number of people who received at least one dose of COVID-19 vaccine',\n", + " 'US: Share of available COVID-19 vaccine doses that have been used',\n", + " 'US: Share of people who completed the initial COVID-19 vaccination protocol',\n", + " 'US: Share of people who received at least one dose of COVID-19 vaccine',\n", + " 'US: Total COVID-19 vaccine doses administered',\n", + " 'US: Total COVID-19 vaccine doses administered per 100 people',\n", + " 'US: Total COVID-19 vaccine doses distributed',\n", + " 'US: Total COVID-19 vaccine doses distributed per 100 people',\n", + " 'United States: COVID-19 weekly death rate by vaccination status',\n", + " 'Week by week change in confirmed COVID-19 cases',\n", + " 'Week by week change of confirmed COVID-19 deaths',\n", + " 'Weekly confirmed COVID-19 cases',\n", + " 'Weekly confirmed COVID-19 cases per million people',\n", + " 'Weekly confirmed COVID-19 deaths',\n", + " 'Weekly confirmed COVID-19 deaths per million people',\n", + " 'Weekly new ICU admissions for COVID-19',\n", + " 'Weekly new ICU admissions for COVID-19 per million',\n", + " 'Weekly new hospital admissions for COVID-19',\n", + " 'Weekly new hospital admissions for COVID-19 per million',\n", + " 'What is the youngest age group eligible for COVID-19 vaccination?',\n", + " 'Which countries do COVID-19 contact tracing?',\n", + " 'Willingness to get vaccinated against COVID-19',\n", + " 'Workplace closures during the COVID-19 pandemic',\n", + " 'Workplaces: How did the number of visitors change relative to before the pandemic?',\n", + " 'Bathing sites with excellent water quality',\n", + " 'Death rate from unsafe water sources',\n", + " 'Death rate from unsafe water vs. GDP per capita',\n", + " 'Drinking water service usage',\n", + " 'Drinking water services usage in rural areas',\n", + " 'Has country already reached SDG target on improved water access?',\n", + " 'Improved water sources vs. GDP per capita',\n", + " 'People not using an improved water source',\n", + " 'People not using safe drinking water facilities',\n", + " 'People using at least a basic drinking water source',\n", + " 'Rate of deaths attributed to unsafe water sources',\n", + " 'Share of deaths attributed to unsafe water sources',\n", + " 'Share of population using at least a basic drinking water source',\n", + " 'Share of the population not using an improved water source',\n", + " 'Share of the population using drinking water facilities',\n", + " 'Share of the rural population using at least basic water services',\n", + " 'Share of urban population using at least basic water services',\n", + " 'Share of urban vs. rural population using at least basic drinking water',\n", + " 'Share of urban vs. rural population using safely managed drinking water',\n", + " 'Share using safely managed drinking water',\n", + " 'Urban improved water usage vs. rural water usage',\n", + " 'Usage of improved water sources',\n", + " 'Average ammonium concentration in freshwater',\n", + " 'Average nitrate concentration in freshwater',\n", + " 'Average phosphorus concentration in freshwater',\n", + " 'Bathing sites with excellent water quality',\n", + " 'Death rate attributable to unsafe water, sanitation, and hygiene',\n", + " 'Death rate from no access to hand-washing facilities',\n", + " 'Death rate from unsafe sanitation',\n", + " 'Death rate from unsafe water sources',\n", + " 'Death rate from unsafe water vs. GDP per capita',\n", + " 'Deaths attributed to lack of access to handwashing facilities',\n", + " 'Deaths attributed to unsafe sanitation',\n", + " 'Deaths attributed to unsafe water sources',\n", + " 'Diarrheal disease episodes vs. safely managed sanitation',\n", + " 'Diarrheal diseases death rate in children vs. access to basic handwashing facilities',\n", + " 'Drinking water service usage',\n", + " 'Drinking water services usage in rural areas',\n", + " 'Drinking water services usage in urban areas',\n", + " 'Has country already reached SDG target for usage of improved sanitation facilities?',\n", + " 'Has country already reached SDG target on improved water access?',\n", + " 'Implementation of integrated water resource management',\n", + " 'Improved water sources vs. GDP per capita',\n", + " 'Number of people in rural areas without basic handwashing facilities',\n", + " 'Open defecation in rural areas vs. urban areas',\n", + " 'People in rural areas not using an improved water source',\n", + " 'People in rural areas not using improved sanitation facilities',\n", + " 'People not using an improved water source',\n", + " 'People not using improved sanitation facilities',\n", + " 'People not using safe drinking water facilities',\n", + " 'People not using to safely managed sanitation',\n", + " 'People using at least a basic drinking water source',\n", + " 'People without basic handwashing facilities',\n", + " 'Population with basic handwashing facilities, urban vs. rural',\n", + " 'Progress towards the ratification and accession of UNCLOS',\n", + " 'Rate of deaths attributed to no access to handwashing facilities',\n", + " 'Rate of deaths attributed to unsafe sanitation',\n", + " 'Rate of deaths attributed to unsafe water sources',\n", + " 'Sanitation facilities usage',\n", + " 'Sanitation facilities usage in rural areas',\n", + " 'Sanitation facilities usage in urban areas',\n", + " 'Share of deaths attributed to unsafe sanitation',\n", + " 'Share of deaths attributed to unsafe water sources',\n", + " 'Share of people practicing open defecation',\n", + " 'Share of population using at least a basic drinking water source',\n", + " 'Share of population with access to basic handwashing facilities',\n", + " 'Share of population with improved sanitation vs. GDP per capita',\n", + " 'Share of rural population with access to basic handwashing facilities',\n", + " 'Share of schools with access to basic drinking water',\n", + " 'Share of schools with access to basic handwashing facilities',\n", + " 'Share of the population not using an improved water source',\n", + " 'Share of the population not using improved sanitation',\n", + " 'Share of the population using at least basic sanitation services',\n", + " 'Share of the population using drinking water facilities',\n", + " 'Share of the population using safely managed sanitation facilities',\n", + " 'Share of the population using sanitation facilities',\n", + " 'Share of the population with access to basic services',\n", + " 'Share of the population with access to handwashing facilities',\n", + " 'Share of the rural population using at least basic sanitation services',\n", + " 'Share of the rural population using at least basic water services',\n", + " 'Share of transboundary water basins with arrangement for water cooperation',\n", + " 'Share of urban population using at least basic sanitation services',\n", + " 'Share of urban population using at least basic water services',\n", + " 'Share of urban vs. rural population using at least basic drinking water',\n", + " 'Share of urban vs. rural population using at least basic sanitation',\n", + " 'Share of urban vs. rural population using safely managed drinking water',\n", + " 'Share of urban vs. rural population using safely managed sanitation facilities',\n", + " 'Share of water bodies with good ambient water quality',\n", + " 'Share using safely managed drinking water',\n", + " 'Share using safely managed drinking water, rural vs. urban',\n", + " 'Total official financial flows for water supply and sanitation, by recipient',\n", + " 'Urban improved water usage vs. rural water usage',\n", + " 'Usage of at least basic sanitation facilities',\n", + " 'Usage of improved water sources',\n", + " 'Annual temperature anomalies',\n", + " 'Antarctic sea ice extent',\n", + " 'Arctic sea ice extent',\n", + " 'Average monthly surface temperature',\n", + " 'Average temperature anomaly',\n", + " 'Carbon dioxide concentrations in the atmosphere',\n", + " 'Concentration of nitrous oxide in the atmosphere',\n", + " 'Countries with national adaptation plans for climate change',\n", + " 'Decadal temperature anomalies',\n", + " 'Financial support provided through the Green Climate Fund',\n", + " 'Glaciers: change of mass of US glaciers',\n", + " 'Global atmospheric CO2 concentration',\n", + " 'Global atmospheric methane concentrations',\n", + " 'Global atmospheric nitrous oxide concentration',\n", + " 'Global monthly temperature anomaly',\n", + " 'Global warming contributions by gas and source',\n", + " 'Global warming contributions from fossil fuels and land use',\n", + " 'Global warming: Contributions to the change in global mean surface temperature',\n", + " 'Global warming: monthly sea surface temperature anomaly',\n", + " 'Global yearly surface temperature anomalies',\n", + " \"Heat content in the top 2,000 meters of the world's oceans\",\n", + " \"Heat content in the top 700 meters of the world's oceans\",\n", + " 'Ice sheet mass balance',\n", + " 'Methane concentration in the atmosphere',\n", + " 'Monthly average ocean heat content in the top 2,000 meters',\n", + " 'Monthly average ocean heat content in the top 700 meters',\n", + " 'Monthly average surface temperatures by decade',\n", + " 'Monthly average surface temperatures by year',\n", + " 'Monthly surface temperature anomalies by decade',\n", + " 'Monthly surface temperature anomalies by year',\n", + " 'Monthly temperature anomalies',\n", + " 'Nationally determined contributions to climate change',\n", + " 'Ocean acidification: mean seawater pH',\n", + " 'Opinions of young people on the threats of climate change',\n", + " \"People underestimate others' willingness to take climate action\",\n", + " 'Projected number of air conditioning units',\n", + " 'Sea level rise',\n", + " 'Sea surface temperature anomaly',\n", + " 'Seasonal temperature anomaly in the United States',\n", + " 'Share of households with air conditioning',\n", + " \"Share of people who believe in climate change and think it's a serious threat to humanity\",\n", + " 'Share of people who say their government should do more to tackle climate change',\n", + " 'Share of people who support policies to tackle climate change',\n", + " 'Share that think people in their country should act to tackle climate change',\n", + " 'Snow cover in North America',\n", + " 'Surface temperature anomaly',\n", + " 'Agricultural producer support',\n", + " 'Almond yields',\n", + " 'Area of land needed to meet global vegetable oil demand',\n", + " 'Area of land needed to produce one tonne of vegetable oil',\n", + " 'Banana yields',\n", + " 'Barley yields',\n", + " 'Bean yields',\n", + " 'Cashew nut yields',\n", + " 'Cassava yields',\n", + " 'Cereal yield vs. GDP per capita',\n", + " 'Cereal yield vs. extreme poverty rate',\n", + " 'Cereal yield vs. fertilizer use',\n", + " 'Cereal yields',\n", + " 'Change in cereal production, yield, land use and population',\n", + " 'Change in production, yield and land use of oil palm fruit',\n", + " 'Change of cereal yield and land used for cereal production',\n", + " 'Cocoa bean yields',\n", + " 'Coffee bean yields',\n", + " 'Corn yields',\n", + " 'Corn: Attainable crop yields',\n", + " 'Corn: Yield gap',\n", + " 'Cotton yields',\n", + " 'Crop yields',\n", + " 'Global land spared as a result of cereal yield improvements',\n", + " 'Groundnut yields',\n", + " 'How much cropland has the world spared due to increases in crop yields?',\n", + " 'Land use vs. yield change in cereal production',\n", + " 'Lettuce yields',\n", + " 'Long-run cereal yields in the United Kingdom',\n", + " 'Millet yields',\n", + " 'Oil palm fruit yields',\n", + " 'Oil yields by crop type',\n", + " 'Orange yields',\n", + " 'Pea yields',\n", + " 'Potato yields',\n", + " 'Rapeseed yields',\n", + " 'Rice yields',\n", + " 'Rye yields',\n", + " 'Sorghum yields',\n", + " 'Soybean yields',\n", + " 'Sugar beet yields',\n", + " 'Sugar cane yields',\n", + " 'Sunflower seed yields',\n", + " 'Tomato yields',\n", + " 'What has driven the growth in global agricultural production?',\n", + " 'Wheat yields',\n", + " 'Which countries have managed to decouple agricultural output from more inputs?',\n", + " 'Which countries overapplied nitrogen without gains in crop yields?',\n", + " 'Yields of important staple crops',\n", + " 'Animal protein consumption',\n", + " 'Average per capita fruit intake vs. minimum recommended guidelines',\n", + " 'Average per capita vegetable intake vs. minimum recommended guidelines',\n", + " 'Calorie supply by food group',\n", + " 'Cocoa bean consumption per person',\n", + " 'Consumption of animal products in the EAT-Lancet diet',\n", + " 'Daily caloric supply derived from carbohydrates, protein and fat',\n", + " 'Dietary composition by country',\n", + " 'Dietary compositions by commodity group',\n", + " 'Dietary land use vs. GDP per capita',\n", + " 'Fruit consumption by type',\n", + " 'Fruit consumption per capita',\n", + " 'Fruit consumption vs. GDP per capita',\n", + " 'How do actual diets compare to the EAT-Lancet diet?',\n", + " 'Self-reported dietary choices by age, United Kingdom',\n", + " 'Share of calories from animal protein vs. GDP per capita',\n", + " 'Share of dietary energy derived from protein vs. GDP per capita',\n", + " 'Share of dietary energy supply from carbohydrates vs. GDP per capita',\n", + " 'Share of dietary energy supply from fats vs. GDP per capita',\n", + " 'Share of energy from cereals, roots, and tubers vs. GDP per capita',\n", + " 'Share of global habitable land needed for agriculture if everyone had the diet of...',\n", + " 'Vegans, vegetarians and meat-eaters: self-reported dietary choices, United Kingdom',\n", + " 'Vegetable consumption per capita',\n", + " 'Electricity generation',\n", + " 'Electricity production by source',\n", + " 'Electricity production by source',\n", + " 'Electricity production from fossil fuels, nuclear and renewables',\n", + " 'Has a country already reached SDG target on electricity access?',\n", + " 'Number of people with and without electricity access',\n", + " 'Number of people without access to electricity',\n", + " 'Number of people without access to electricity',\n", + " 'Per capita electricity generation',\n", + " 'Per capita electricity generation by source',\n", + " 'Per capita electricity generation from fossil fuels, nuclear and renewables',\n", + " 'Share of electricity generated by low-carbon sources',\n", + " 'Share of electricity production by source',\n", + " 'Share of electricity production by source',\n", + " 'Share of electricity production from coal',\n", + " 'Share of electricity production from fossil fuels',\n", + " 'Share of electricity production from gas',\n", + " 'Share of electricity production from hydropower',\n", + " 'Share of electricity production from nuclear',\n", + " 'Share of electricity production from renewables',\n", + " 'Share of electricity production from solar',\n", + " 'Share of electricity production from wind',\n", + " 'Electricity as a share of primary energy',\n", + " 'Electricity production by source',\n", + " 'Has a country already reached SDG target on electricity access?',\n", + " 'Net electricity imports as a share of electricity demand',\n", + " 'Per capita electricity generation by source',\n", + " 'Share of electricity production by source',\n", + " 'Absolute annual change in primary energy consumption',\n", + " 'Access to clean fuels for cooking vs. per capita energy use',\n", + " 'Access to electricity vs. GDP per capita',\n", + " 'Annual change in coal energy consumption',\n", + " 'Annual change in fossil fuel consumption',\n", + " 'Annual change in gas consumption',\n", + " 'Annual change in hydropower generation',\n", + " 'Annual change in low-carbon energy generation',\n", + " 'Annual change in nuclear energy generation',\n", + " 'Annual change in oil consumption',\n", + " 'Annual change in primary energy consumption',\n", + " 'Annual change in renewable energy generation',\n", + " 'Annual change in solar and wind energy generation',\n", + " 'Annual change in solar energy generation',\n", + " 'Annual change in wind energy generation',\n", + " 'Annual patents filed for carbon capture and storage technologies',\n", + " 'Annual patents filed for electric vehicle technologies',\n", + " 'Annual patents filed for energy storage technologies',\n", + " 'Annual patents filed for renewable energy technologies',\n", + " 'Annual patents filed in sustainable energy',\n", + " 'Annual percentage change in coal energy consumption',\n", + " 'Annual percentage change in fossil fuel consumption',\n", + " 'Annual percentage change in gas consumption',\n", + " 'Annual percentage change in hydropower generation',\n", + " 'Annual percentage change in low-carbon energy generation',\n", + " 'Annual percentage change in nuclear energy generation',\n", + " 'Annual percentage change in oil consumption',\n", + " 'Annual percentage change in renewable energy generation',\n", + " 'Annual percentage change in solar and wind energy generation',\n", + " 'Annual percentage change in solar energy generation',\n", + " 'Annual percentage change in wind energy generation',\n", + " 'CO2 emissions per capita vs. fossil fuel consumption per capita',\n", + " 'CO2 emissions per capita vs. share of electricity generation from renewables',\n", + " 'Carbon intensity of electricity generation',\n", + " 'Changes in energy use vs. changes in GDP',\n", + " 'Changes in energy use vs. changes in GDP per capita',\n", + " 'Coal by end user in the United Kingdom',\n", + " 'Coal energy consumption per capita vs. GDP per capita',\n", + " 'Coal output from opencast and deepmines in the United Kingdom',\n", + " 'Coal output per worker in the United Kingdom',\n", + " 'Coal prices',\n", + " 'Coal production',\n", + " 'Coal production',\n", + " 'Coal production and imports in the United Kingdom',\n", + " 'Coal production per capita',\n", + " 'Coal production per capita over the long-term',\n", + " 'Cobalt production',\n", + " 'Consumption-based energy intensity per dollar',\n", + " 'Consumption-based energy use per person',\n", + " 'Crude oil prices',\n", + " 'Crude oil spot prices',\n", + " 'Death rate from indoor air pollution vs. per capita energy use',\n", + " 'Death rates per unit of electricity production',\n", + " 'Direct primary energy consumption from fossil fuels, nuclear, and renewables',\n", + " 'Electric car stocks',\n", + " 'Electricity as a share of primary energy',\n", + " 'Electricity demand',\n", + " 'Electricity generation',\n", + " 'Electricity generation from coal',\n", + " 'Electricity generation from fossil fuels',\n", + " 'Electricity generation from fossil fuels, nuclear and renewables',\n", + " 'Electricity generation from gas',\n", + " 'Electricity generation from low-carbon sources',\n", + " 'Electricity generation from oil',\n", + " 'Electricity generation from renewables',\n", + " 'Electricity generation from solar and wind compared to coal',\n", + " 'Electricity production by source',\n", + " 'Electricity production by source',\n", + " 'Electricity production by source',\n", + " 'Electricity production from fossil fuels, nuclear and renewables',\n", + " 'Electricity production in the United Kingdom',\n", + " 'Employment in the coal industry in the United Kingdom',\n", + " 'Energy consumption by source',\n", + " 'Energy embedded in traded goods as a share of domestic energy',\n", + " 'Energy imports and exports',\n", + " 'Energy intensity',\n", + " 'Energy intensity',\n", + " 'Energy intensity by sector',\n", + " 'Energy intensity vs. GDP per capita',\n", + " 'Energy use per capita vs. CO2 emissions per capita',\n", + " 'Energy use per person',\n", + " 'Energy use per person vs. GDP per capita',\n", + " 'Fossil fuel consumption',\n", + " 'Fossil fuel consumption',\n", + " 'Fossil fuel consumption per capita',\n", + " 'Fossil fuel consumption per capita by source',\n", + " 'Fossil fuel consumption per capita by source',\n", + " 'Fossil fuel price index',\n", + " 'Fossil fuel production over the long-term',\n", + " 'Fossil fuel production per capita',\n", + " 'GDP per capita vs. energy use',\n", + " 'Gas consumption',\n", + " 'Gas consumption by region',\n", + " 'Gas production',\n", + " 'Gas production per capita',\n", + " 'Gas reserves',\n", + " 'Global aviation demand, energy efficiency and CO2 emissions',\n", + " 'Global direct primary energy consumption',\n", + " 'Global fossil fuel consumption',\n", + " 'Global hydropower consumption',\n", + " 'Global installed renewable energy capacity by technology',\n", + " 'Global primary energy consumption by source',\n", + " 'Global primary energy consumption by source',\n", + " 'Graphite production',\n", + " 'Has a country already reached SDG target on electricity access?',\n", + " ...]}" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vectorstore_graphs.get()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(Document(metadata={'category': 'Water Use & Stress', 'doc_id': 'owid_2184', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Water quality is assessed by means of core physical and chemical parameters that reflect natural water quality. A water body is classified as \"good\" quality if at least 80% of monitoring values meet target quality levels.', 'url': 'https://ourworldindata.org/grapher/water-bodies-good-water-quality'}, page_content='Share of water bodies with good ambient water quality'),\n", + " 0.46955257728383504),\n", + " (Document(metadata={'category': 'Clean Water & Sanitation', 'doc_id': 'owid_742', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Water quality is assessed by means of core physical and chemical parameters that reflect natural water quality. A water body is classified as \"good\" quality if at least 80% of monitoring values meet target quality levels.', 'url': 'https://ourworldindata.org/grapher/water-bodies-good-water-quality'}, page_content='Share of water bodies with good ambient water quality'),\n", + " 0.46955245084328956),\n", + " (Document(metadata={'category': 'Water Pollution', 'doc_id': 'owid_2151', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Water quality is assessed by means of core physical and chemical parameters that reflect natural water quality. A water body is classified as \"good\" quality if at least 80% of monitoring values meet target quality levels.', 'url': 'https://ourworldindata.org/grapher/water-bodies-good-water-quality'}, page_content='Share of water bodies with good ambient water quality'),\n", + " 0.46955245084328956),\n", + " (Document(metadata={'category': 'Clean Water', 'doc_id': 'owid_667', 'returned_content': '', 'source': 'OWID', 'subtitle': 'A basic drinking water service is water from an improved water source that can be collected within a 30-minute round trip, including queuing.', 'url': 'https://ourworldindata.org/grapher/population-using-at-least-basic-drinking-water'}, page_content='Share of population using at least a basic drinking water source'),\n", + " 0.43011969078910306)]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vectorstore_graphs.similarity_search_with_relevance_scores(\"What is the trend of clean water?\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Retriever for recommended graphs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.1 Custom retriever" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.retrievers import BaseRetriever\n", + "from langchain_core.documents.base import Document\n", + "from langchain_core.vectorstores import VectorStore\n", + "from langchain_core.callbacks.manager import CallbackManagerForRetrieverRun\n", + "\n", + "from typing import List\n", + "\n", + "class GraphRetriever(BaseRetriever):\n", + " vectorstore:VectorStore\n", + " sources:list = [\"IEA\", \"OWID\"] # plus tard ajouter OurWorldInData # faudra integrate avec l'autre retriever\n", + " threshold:float = 0.5\n", + " k_total:int = 10\n", + "\n", + " def _get_relevant_documents(\n", + " self, query: str, *, run_manager: CallbackManagerForRetrieverRun\n", + " ) -> List[Document]:\n", + "\n", + " # Check if all elements in the list are IEA or OWID\n", + " assert isinstance(self.sources,list)\n", + " assert any([x in [\"IEA\", \"OWID\"] for x in self.sources])\n", + "\n", + " # Prepare base search kwargs\n", + " filters = {}\n", + "\n", + " filters[\"source\"] = {\"$in\": self.sources}\n", + "\n", + " docs = self.vectorstore.similarity_search_with_score(query=query, filter=filters, k=self.k_total)\n", + " \n", + " # Filter if scores are below threshold\n", + " docs = [x for x in docs if x[1] > self.threshold]\n", + "\n", + " # Add score to metadata\n", + " results = []\n", + " for i,(doc,score) in enumerate(docs):\n", + " doc.metadata[\"similarity_score\"] = score\n", + " doc.metadata[\"content\"] = doc.page_content\n", + " results.append(doc)\n", + "\n", + " return results" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [], + "source": [ + "retriever = GraphRetriever(vectorstore=vectorstore_graphs)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(metadata={'category': 'Energy', 'doc_id': 'owid_969', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Energy trade, measured as the percentage of energy use. Positive values indicate a country or region is a net importer of energy. Negative numbers indicate a country or region is a net exporter.', 'url': 'https://ourworldindata.org/grapher/energy-imports-and-exports-energy-use', 'similarity_score': 0.7722029089927673, 'content': 'Energy imports and exports'}, page_content='Energy imports and exports'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_400', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Environmentally sound technologies (ESTs) are technologies that have the potential for significantly improved environmental performance relative to other technologies. This indicator shows the value of imported ESTs in current US-$.', 'url': 'https://ourworldindata.org/grapher/import-of-environmentally-sound-technologies', 'similarity_score': 0.782991886138916, 'content': 'Import of environmentally sound technologies'}, page_content='Import of environmentally sound technologies'),\n", + " Document(metadata={'category': 'Energy', 'doc_id': 'owid_1013', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Share of primary energy by source over the long-term, measured as the percentage of total energy consumption. Primary electricity includes: hydropower, nuclear power, wind, photo\\xadvoltaics, tidal, wave and solar thermal and geothermal (only figures for electricity production are included).', 'url': 'https://ourworldindata.org/grapher/long-term-energy-transitions', 'similarity_score': 0.8692131638526917, 'content': 'Long-term energy transitions'}, page_content='Long-term energy transitions'),\n", + " Document(metadata={'category': 'Forests & Deforestation', 'doc_id': 'owid_1376', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Imported deforestation is the amount of deforestation in other countries that is driven by the production of food and forestry products that are imported. This is measured in hectares.', 'url': 'https://ourworldindata.org/grapher/imported-deforestation', 'similarity_score': 0.8846064805984497, 'content': 'Imported deforestation'}, page_content='Imported deforestation'),\n", + " Document(metadata={'category': 'Energy', 'doc_id': 'owid_1019', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Net electricity imports are calculated as electricity imports minus exports. Countries with positive values are net importers of electricity; negative values are net exporters. Measured in terawatt-hours.', 'url': 'https://ourworldindata.org/grapher/net-electricity-imports', 'similarity_score': 0.8954001069068909, 'content': 'Net electricity imports'}, page_content='Net electricity imports'),\n", + " Document(metadata={'category': 'Energy', 'doc_id': 'owid_983', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Total fossil fuel production - differentiated by coal, oil and natural gas - by country over the long-run, measured in terawatt-hour (TWh) equivalents per year.', 'url': 'https://ourworldindata.org/grapher/fossil-fuel-production-over-the-long-term', 'similarity_score': 0.9086273312568665, 'content': 'Fossil fuel production over the long-term'}, page_content='Fossil fuel production over the long-term'),\n", + " Document(metadata={'category': 'Fossil Fuels', 'doc_id': 'owid_1443', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Total fossil fuel production - differentiated by coal, oil and natural gas - by country over the long-run, measured in terawatt-hour (TWh) equivalents per year.', 'url': 'https://ourworldindata.org/grapher/fossil-fuel-production-over-the-long-term', 'similarity_score': 0.9086273312568665, 'content': 'Fossil fuel production over the long-term'}, page_content='Fossil fuel production over the long-term'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_379', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Environmentally sound technologies (ESTs) are technologies that have the potential for significantly improved environmental performance relative to other technologies. This indicator shows the value of exported ESTs in current US-$.', 'url': 'https://ourworldindata.org/grapher/export-of-environmentally-sound-technologies', 'similarity_score': 0.9094725847244263, 'content': 'Export of environmentally sound technologies'}, page_content='Export of environmentally sound technologies'),\n", + " Document(metadata={'category': 'Electricity Mix', 'doc_id': 'owid_892', 'returned_content': '', 'source': 'OWID', 'subtitle': \"Net electricity imports are calculated as electricity imports minus exports. This is given as a share of a country's electricity demand. Countries with positive values are net importers of electricity; negative values are net exporters.\", 'url': 'https://ourworldindata.org/grapher/electricity-imports-share-demand', 'similarity_score': 0.9217990636825562, 'content': 'Net electricity imports as a share of electricity demand'}, page_content='Net electricity imports as a share of electricity demand'),\n", + " Document(metadata={'category': 'Energy', 'doc_id': 'owid_1020', 'returned_content': '', 'source': 'OWID', 'subtitle': \"Net electricity imports are calculated as electricity imports minus exports. This is given as a share of a country's electricity demand. Countries with positive values are net importers of electricity; negative values are net exporters.\", 'url': 'https://ourworldindata.org/grapher/electricity-imports-share-demand', 'similarity_score': 0.9217990636825562, 'content': 'Net electricity imports as a share of electricity demand'}, page_content='Net electricity imports as a share of electricity demand')]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=293793a6-6cdd-4e70-ba2d-c1211936330a,id=293793a6-6cdd-4e70-ba2d-c1211936330a\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=83bce3ac-3941-4868-b904-954796b2c87b,id=83bce3ac-3941-4868-b904-954796b2c87b; trace=83bce3ac-3941-4868-b904-954796b2c87b,id=a1e66cdf-541e-45be-a04e-0273eb464bd0; trace=83bce3ac-3941-4868-b904-954796b2c87b,id=aae4ff52-19c8-4d68-8cf3-aa5ef96d90a9\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=83bce3ac-3941-4868-b904-954796b2c87b,id=89c9ee4d-0531-40b3-b7d5-471f2d1d7f72; patch: trace=83bce3ac-3941-4868-b904-954796b2c87b,id=83bce3ac-3941-4868-b904-954796b2c87b; trace=83bce3ac-3941-4868-b904-954796b2c87b,id=aae4ff52-19c8-4d68-8cf3-aa5ef96d90a9\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=2f60f3cb-8969-43c1-9be6-a38da876bbeb; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=8abe438d-b623-444e-acf0-01cbe05204d2; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=9641fded-8e17-440c-9be4-651bcf1e62f8; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=dcb0920c-68a9-4663-8f0f-b8d9bb91d9e8; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=be55ec0c-6a79-410b-8fdd-006518ef4839; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e69b8a0c-353f-4cca-a888-bc92c1ab80e8\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=5c8a1a4d-cf91-47a4-a1d1-29def2a546f8; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=80fcf03e-55a9-4910-bf68-773e94166b87; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=c55b0d31-4534-4e79-a7dd-9e41e8b60d6f; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=ab9e5151-57c0-47b7-9227-1af10c6edd4d; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=36341116-242a-4979-a0a6-3c6e264213d2; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=19e3b604-d805-4e71-9bb5-040d2fd6ab17; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=720a713f-2ea5-4912-81ac-727205915326; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=cdd69060-8047-44d3-9340-a9523d4a9fd7; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=7cb77350-949b-4800-88fe-cdb91e181a6f; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e6af6666-4615-453b-9b06-f48e85f7ec0b; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=dcb0920c-68a9-4663-8f0f-b8d9bb91d9e8; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e69b8a0c-353f-4cca-a888-bc92c1ab80e8; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=9641fded-8e17-440c-9be4-651bcf1e62f8\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=32397e1b-f5d9-4dbf-9e7a-ec51f6452023; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=2e0caf84-9662-4fea-a510-6b8d143dabdf; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=4c472c44-ac2c-4aa0-8931-22be0135d530; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e332817e-ae69-4b92-9e50-05f9f77a410c; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=cdd69060-8047-44d3-9340-a9523d4a9fd7; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e6af6666-4615-453b-9b06-f48e85f7ec0b\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=4904b6c4-b677-4af4-8a6b-bf088dc8a6f9; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=c117d6db-6a45-4109-9579-5e609395bcae; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=d6c37d55-5e1d-47d1-bfd2-f56f58da3c83; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e5d01647-1098-4ba5-b0be-5b7b6b086e1b; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e332817e-ae69-4b92-9e50-05f9f77a410c; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=2e0caf84-9662-4fea-a510-6b8d143dabdf\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=c3110852-8632-4f8d-a4a8-7c798b1cb1d9; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=b9823098-61d1-4aed-9f49-76e82571869c; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=c615dedd-9e6f-4250-96ea-c25184cd6a2c; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=0f9e226a-e351-4be0-b769-65ecf20b5de7; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=c117d6db-6a45-4109-9579-5e609395bcae; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e5d01647-1098-4ba5-b0be-5b7b6b086e1b; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=720a713f-2ea5-4912-81ac-727205915326\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=95c8f0b6-91ab-426f-b492-07d310b8fd2d; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=0f9e226a-e351-4be0-b769-65ecf20b5de7\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=d39d0b70-ca46-4048-93f9-d60e7c66f60e; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=d4b8077e-99b9-496f-8ef3-a8adaf980fb4; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=3e7aa953-cc67-42f5-a46a-664d4aa61fe1; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=c55fad93-769c-4f5a-b716-80362f6bee24; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=31b02c82-76df-43c2-a276-c5bd8d1af58e; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=95c8f0b6-91ab-426f-b492-07d310b8fd2d; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=c615dedd-9e6f-4250-96ea-c25184cd6a2c\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=31b02c82-76df-43c2-a276-c5bd8d1af58e\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=af577682-c2ca-4730-aef8-815cd25be223; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=bed906a2-4e90-4737-ba3e-d073676f75ed; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=2932ab68-a73e-4471-a103-7ea64eb92015; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=be7246d2-b55c-4f1e-8805-c6caef632e9a; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=3791cee0-aba4-4f92-89b5-875af21e9dee; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=3e7aa953-cc67-42f5-a46a-664d4aa61fe1; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=d4b8077e-99b9-496f-8ef3-a8adaf980fb4\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=3791cee0-aba4-4f92-89b5-875af21e9dee\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=56ed1b23-c02d-45a9-89db-82ca85fc523f; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=badb4be6-7362-415c-8784-232b7a1710e7; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=62472c2f-e0f1-4cb9-910c-2263beedc8e0; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=b0830d8e-fdc7-470a-87d7-f70485289152; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=b6f642f0-0cfb-450c-9d96-8a0079d220cf; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=e3234978-eaf6-4046-970f-95e412aa889a; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=8aefd625-7233-4022-9f4b-58d8fabb9c43; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=fac8c029-5fb2-4dc8-9fb3-60f4ad9f3e85; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=dd5cc1ab-6ab5-4665-9d5c-37f957ba37eb; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=5ce47723-33ce-4237-91a1-55b885aef68c; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=a9e6125b-d5f6-4743-85b5-3eb2f087578d; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=1575bbfe-f738-4a87-8df8-c57e55435560; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=2932ab68-a73e-4471-a103-7ea64eb92015; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=bed906a2-4e90-4737-ba3e-d073676f75ed\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=e8a28082-0011-4e85-a399-9bf6bebd6014; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=6b1a1120-0347-43b1-a0c3-16b53d9da843; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=c0f9923f-791b-4e31-875c-d70a3a7d918e; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=a5aae843-34b2-4f65-ba54-89f09509c737; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=84371741-fb6e-4dfe-9282-c969e3a5d190; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=829425fd-6030-4f2e-aef2-931a9f735554\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=47b58050-adb9-48b0-9c6e-b8a2e22e6123; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=fd05368e-94c9-492f-bc06-90bc13f848d6; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=41e95d82-9788-42e5-a38e-28c929f83208; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=c3480230-c4eb-4fd1-8208-325b22389052; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=0fc6ec9c-5086-4bac-a18d-d6a14eb38a35; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=63e8e2da-c4d9-45c0-b0d0-764915c357eb; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=3c3aa0f0-3966-4ba9-b905-1a2365930fba; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=925489ee-37e4-400c-9c29-59cdc99196cc; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=236b7b18-6994-4748-8f19-a4aed1a5f1db; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=3dda8146-05e3-4623-aa8c-da935e9dbd3f; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=a5aae843-34b2-4f65-ba54-89f09509c737; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=829425fd-6030-4f2e-aef2-931a9f735554; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=c0f9923f-791b-4e31-875c-d70a3a7d918e\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=892fb4d1-ced5-44d8-a3d6-84a347106ba1; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=09f22061-975e-4395-b8d2-36b3f76ce842; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=da12a1f6-e22f-422f-9f5a-3d3a4b3db8cd; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=42f39dec-a502-4d50-996e-66e9be87fed4; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=3dda8146-05e3-4623-aa8c-da935e9dbd3f; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=925489ee-37e4-400c-9c29-59cdc99196cc\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=d0f49dfa-20b7-494c-85c3-74bcebce6c2f; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=6fe4ff60-6861-462a-a11f-d760fa62ab83; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=c033925c-9d09-4bb1-90da-151d16102e85; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=79b16023-c50e-41d0-8fea-e14dcf5cfafa; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=09f22061-975e-4395-b8d2-36b3f76ce842; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=42f39dec-a502-4d50-996e-66e9be87fed4\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=8de99aa7-abfd-4a9f-a784-966679d1f39b; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=790c1454-5451-4476-bab1-9c77fde6a81f; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=065bb675-0ef2-431f-9d33-84cd1bb4935d; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=7933b5ab-f8c9-42b9-8479-f78eceb43224; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=6fe4ff60-6861-462a-a11f-d760fa62ab83; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=79b16023-c50e-41d0-8fea-e14dcf5cfafa; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=3c3aa0f0-3966-4ba9-b905-1a2365930fba\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=6482b408-5756-4fe7-baec-a256190f9af7; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=7933b5ab-f8c9-42b9-8479-f78eceb43224\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=eb52c44f-1691-4146-8e69-9711de958cea; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=53b06b0d-dcf7-475b-b6e5-d1930c3cfc52; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=546e246a-66e2-43a5-8181-2678acb61d54; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=248d2e53-c72c-40f0-949c-c5213bb9c3d7; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=8daab8cf-42aa-43e6-8bde-62c60162ccc4; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=065bb675-0ef2-431f-9d33-84cd1bb4935d; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=6482b408-5756-4fe7-baec-a256190f9af7\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=308241ef-550e-4f19-bb73-c2a9e6e36371; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=f2c7aa53-940b-48da-aa63-66944e6a6546; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=c2c6c9d7-5209-41b8-8ed7-c488acaa7d2d; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=b9dd967c-f23e-4f28-82c6-e9b280c656db; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=16957e58-4828-4760-8617-0a1918144467; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=8803740c-a15c-4106-a44c-2aace2b47b13\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=8daab8cf-42aa-43e6-8bde-62c60162ccc4\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=896492a1-99bf-4c4a-a65f-25ce2c28b97e; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=2e836817-4ee7-41f2-9bc4-74735d817872; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=bb2ea30d-0240-47ef-a6d8-2598bd4c5709; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=204239d8-f4ea-4190-ad97-1d907465d888; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=1e38b790-68ce-4424-82f2-26255f21c92b; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=cbb331c8-2396-4c46-a849-6c338226f518; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=7a4fcbcf-646e-4e7b-b3f6-ea0ab21ee0ab; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=7eb5634e-3ea6-4c92-8490-1b4879122c08; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=8682e1c6-9af5-40da-a206-4653ccb8d239; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=8de88615-e0b9-423b-9b4f-1bda7afacfa2; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=769adfd8-cb22-469e-aa4a-7d4e81bc08a9; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=935cab7e-464e-428c-a134-f262c1805fcd; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=546e246a-66e2-43a5-8181-2678acb61d54; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=53b06b0d-dcf7-475b-b6e5-d1930c3cfc52; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=b9dd967c-f23e-4f28-82c6-e9b280c656db; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=8803740c-a15c-4106-a44c-2aace2b47b13; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=c2c6c9d7-5209-41b8-8ed7-c488acaa7d2d\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=1e38b790-68ce-4424-82f2-26255f21c92b\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=b34909a7-a575-44cf-89dd-d8fee68f0d8a; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=95e97bc6-9076-4107-aff4-06ca1255e6a3; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=bd1e986a-b723-4ed6-bd49-aeacc994fd85; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=3a935932-9bfe-432a-a96c-07aa27272bf9; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=b5e2a72f-4b67-4e33-a6ba-359320db9473; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=2031547a-490f-4751-829a-ef98a23bb023; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=f0c219e2-e5a4-4beb-84f5-85c393914831; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=b36b252f-1f19-4ccd-aa8d-5cd4a98a5112; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=b73c426d-e259-4249-9058-83de3aa73580; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=9e992bbe-63f5-4a35-afd1-e7e5f30ed0fe; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=d095fff9-919e-47c6-a095-15da390156f6; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=0194d7e5-403d-40ac-86ee-b61538d5dcc2; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=bb2ea30d-0240-47ef-a6d8-2598bd4c5709; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=2e836817-4ee7-41f2-9bc4-74735d817872\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=c9750ca1-6135-44c6-b335-eff6ba8cfafa; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=3a5a5526-a619-4505-a578-3ee291080783; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=2836a100-e2e6-40cf-881a-691c470c6092; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=b9ebb6ca-9591-413b-92b2-191f4b0e8cd2; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=58b24ce1-7ff6-40ca-ba6e-cf864fa04a9c; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=10017df8-ecf8-4bda-8c5f-e9a9701a5514; patch: trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=935cab7e-464e-428c-a134-f262c1805fcd; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=8de88615-e0b9-423b-9b4f-1bda7afacfa2; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=8682e1c6-9af5-40da-a206-4653ccb8d239\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=74ce6e89-f717-4846-b7a3-a9e32186d041; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=996f55c7-6763-4e92-b5a9-6758d57218e4; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=a4611617-53da-4a93-a1fc-16c76e3ac7d5; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=c8b9d3a0-5e87-4991-810a-59f9d447ffab; patch: trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=b9ebb6ca-9591-413b-92b2-191f4b0e8cd2; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=10017df8-ecf8-4bda-8c5f-e9a9701a5514; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=2836a100-e2e6-40cf-881a-691c470c6092; trace=308241ef-550e-4f19-bb73-c2a9e6e36371,id=308241ef-550e-4f19-bb73-c2a9e6e36371\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=4bfe17a4-c2d7-4b7f-9f81-814ea2e94fa7; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=4eed6d6e-6b18-4605-aa73-0512b6d13408; patch: trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=0194d7e5-403d-40ac-86ee-b61538d5dcc2; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=b5e2a72f-4b67-4e33-a6ba-359320db9473; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=3a935932-9bfe-432a-a96c-07aa27272bf9; trace=e8a28082-0011-4e85-a399-9bf6bebd6014,id=e8a28082-0011-4e85-a399-9bf6bebd6014\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=46398dce-c38f-4b57-9ab8-b70b30ec0711; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=d2212d1f-3b2a-4733-af7b-6194bae1f8a5; patch: trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=1575bbfe-f738-4a87-8df8-c57e55435560; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=b6f642f0-0cfb-450c-9d96-8a0079d220cf; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=b0830d8e-fdc7-470a-87d7-f70485289152; trace=2f60f3cb-8969-43c1-9be6-a38da876bbeb,id=2f60f3cb-8969-43c1-9be6-a38da876bbeb\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=f1c330b0-3a72-4fe3-93cf-eb25a66445c0; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=6bfb3608-19d8-469d-9e47-206d72f61bed; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=ee5ed22d-8e5b-496e-8478-2d11506f5b1a; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=c4d5b203-a217-4640-ae9d-417e37a10447; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=15f7947e-48e2-4a1f-ba21-31448bb3f17d; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=2b4b590f-943d-4495-ae0b-212af05bee7f\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=300beffa-9bd9-4084-96cd-a2ad42a2ec6f; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=5c424b33-bda2-4f07-a050-d06943845061; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=574cb640-ed02-4b4d-9b9b-f4ff602292fa; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=00826e0e-7ddd-411a-bfbb-326a438bf771; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=f711bbcf-a1ed-4087-a0bf-59b32580127d; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=f477ef0b-11b4-4a28-bb09-ecb45b31870f; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=34d3b6b4-2145-49bd-a718-8b7098875cd9; patch: trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=2b4b590f-943d-4495-ae0b-212af05bee7f; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=c4d5b203-a217-4640-ae9d-417e37a10447; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=ee5ed22d-8e5b-496e-8478-2d11506f5b1a\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=f12b21d7-7f82-4f9c-bee2-e7ea8398fe8e; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=90f2d256-cbeb-48af-b063-ee672167e505; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=221ba585-94c5-46ba-8c84-ce984b2ebd33; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=d9ba91e2-912f-4e47-9420-bb36b7d1cfc7; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=5e591b84-3227-46b3-9601-ddbc814a7ee8; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=7cf59b4f-afe1-4f54-8bb7-d44a7e3ce641; patch: trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=34d3b6b4-2145-49bd-a718-8b7098875cd9; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=f711bbcf-a1ed-4087-a0bf-59b32580127d; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=00826e0e-7ddd-411a-bfbb-326a438bf771\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=6d4f6338-5d7a-4e6b-b912-28fea3a7fd56; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=d895936e-62eb-435b-939c-7f1be7bde063; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=8748fc16-2544-4513-80ef-c80785a8e68b; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=138a1ded-f2dc-491b-9b37-ec4c0f069d6e; patch: trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=d9ba91e2-912f-4e47-9420-bb36b7d1cfc7; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=7cf59b4f-afe1-4f54-8bb7-d44a7e3ce641; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=221ba585-94c5-46ba-8c84-ce984b2ebd33\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=138a1ded-f2dc-491b-9b37-ec4c0f069d6e; trace=f1c330b0-3a72-4fe3-93cf-eb25a66445c0,id=f1c330b0-3a72-4fe3-93cf-eb25a66445c0\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=491f3e66-6b89-4377-8d2b-0567324aa59b; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=b2c086da-93db-4650-9eb2-ed5c40933900; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=ce04256f-5a48-49bc-b35b-705cb40fed33; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=cf90dc89-a96a-442d-b5d4-8bf7781f06d2; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=ae59a011-e2c9-4d4b-82a4-ac9b79440208; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=f8a804e2-c4fa-492c-96bb-78ff7424cf28\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=a7b13e32-9118-409e-8681-20b7b67d3685; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=6f26aba5-5f17-4d71-8578-af3d2a7888e2; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=62a5af0d-8be9-4fb6-9c78-e16654d0bcdc; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=415a3f17-ac3c-42cd-9b4e-5fe90e077649; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=d8ae0cef-b38d-46db-9b75-7d0f08bb3f8d; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=e9c511c0-d35b-4d92-b2d1-cb8ccfb0765b; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=65785df3-40bd-4c31-ad0b-00fa4dec7294; patch: trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=cf90dc89-a96a-442d-b5d4-8bf7781f06d2; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=f8a804e2-c4fa-492c-96bb-78ff7424cf28; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=ce04256f-5a48-49bc-b35b-705cb40fed33\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=20f771b7-e32a-42d6-abc9-c519d6bcdc72; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=805436bf-32ef-4c27-9e1a-eb34f8f34f70; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=a2e50c51-d9ad-4a40-bcd6-0672fa7999fe; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=cdda352a-c4e3-426d-82f9-405de1196d78; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=e3bf8d3e-4ae2-466e-8566-d95a8658757c; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=9cbe96b9-7601-4c50-b04f-8f2573cdd73b; patch: trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=65785df3-40bd-4c31-ad0b-00fa4dec7294; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=d8ae0cef-b38d-46db-9b75-7d0f08bb3f8d; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=415a3f17-ac3c-42cd-9b4e-5fe90e077649\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=137ad066-c15a-4d60-abf7-e831cedb7ad7; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=502fe608-5374-46cf-bfda-ff8f5d2b0297; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=e39c89c2-72c0-4ddc-8ce3-d20b9c3fa9b5; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=3ff9d270-d6a0-422c-b9e6-0a75f916192d; patch: trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=cdda352a-c4e3-426d-82f9-405de1196d78; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=9cbe96b9-7601-4c50-b04f-8f2573cdd73b; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=a2e50c51-d9ad-4a40-bcd6-0672fa7999fe; trace=491f3e66-6b89-4377-8d2b-0567324aa59b,id=491f3e66-6b89-4377-8d2b-0567324aa59b\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=e2edb52e-5cf3-404b-b3ae-f8830317fda0; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=014f95c4-8fa5-481c-a664-3f459fb1f058; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=61be8c64-2bee-43a2-a107-305d4950e1c4; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=3cc13b0d-bd8f-46c8-8362-74d54f98cdb2; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=8b08484a-0e45-424d-9c34-62775c3c5f9f; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=55bc59e8-e5a3-47ba-b4c7-2062ce102680\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=209e52e1-a9b4-4151-a4e3-8e3af16519cc; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=47e036bd-d91b-44b3-8045-5599c1ef67d2; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=ec44fa1a-ce6b-4b06-adbd-1f85768d1e01; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=ddfa373f-f271-49a8-8602-44a7e6f0679e; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=447540dd-c7ab-49e5-b3b6-18f8f99469c6; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=21ac4f51-cd70-4cf9-9049-e5d84a4b5199; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=edf300c5-c07a-4728-a3ac-c4ee52a9ec6d; patch: trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=3cc13b0d-bd8f-46c8-8362-74d54f98cdb2; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=55bc59e8-e5a3-47ba-b4c7-2062ce102680; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=61be8c64-2bee-43a2-a107-305d4950e1c4\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=042fe32d-780d-4518-82e9-1f5d67a094b2; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=36d4d6bf-c37c-4b11-ba2e-5eac1415922e; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=acac7846-6fa0-47c9-9f63-bba4abdadeda; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=5e1dd1b0-f251-4e38-b004-6146ae1d5d5f; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=b6ca0e33-1ad6-4946-9ee5-447c288f2c4f; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=4fcdf5a2-6a73-4ccc-85c6-7883b84cadd6; patch: trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=edf300c5-c07a-4728-a3ac-c4ee52a9ec6d; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=447540dd-c7ab-49e5-b3b6-18f8f99469c6; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=ddfa373f-f271-49a8-8602-44a7e6f0679e\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=1bb46244-06fc-408f-a0ed-e6e16d64519e; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=dfbf1bfb-e3d8-4827-9b3c-13cb32ec2c81; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=750a11db-ae8e-424d-9638-037120e8be71; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=7a9ba21a-78bf-48f3-aa87-773016bccfc7; patch: trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=4fcdf5a2-6a73-4ccc-85c6-7883b84cadd6; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=5e1dd1b0-f251-4e38-b004-6146ae1d5d5f; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=acac7846-6fa0-47c9-9f63-bba4abdadeda; trace=e2edb52e-5cf3-404b-b3ae-f8830317fda0,id=e2edb52e-5cf3-404b-b3ae-f8830317fda0\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=02dab163-549d-452b-95f5-357abc76b1ca; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=b2276546-d946-4ad3-a0e9-1badcbb00b2c; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=ba3fd8fd-db9a-4183-b14d-cfe9b8f89d70; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=658fd17b-6872-4ced-80d8-6ec7a5526ef6; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=b48d32e1-b01e-4b88-91a6-fc1b51755cb0; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=e9e82ab7-bec0-4505-9169-399202079b30\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=b5e1454c-ed29-4593-825f-d2fbbf551f66; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=7fc5c94e-d8e8-4400-a9f8-15e2f599efaf; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=2b9b3d7f-683f-4e47-9cfa-36a30e0f91dd; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=1b8b1051-bf04-4bab-a8d2-7c6317880b6c; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=d496995e-79fb-48ec-81a9-8435de5284be; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=80de6581-7286-4c29-bc9c-2feddeb94bc8; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=c17b7a44-4986-4eba-bcd0-512bcdbbac1a; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=18658beb-1c58-4cc3-9eb7-ba70fe839fab; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=11b7b682-bf75-44aa-940c-28963bdba7b6; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=f2f9b521-b18e-4418-ab71-6b507660bbfa; patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=658fd17b-6872-4ced-80d8-6ec7a5526ef6; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=e9e82ab7-bec0-4505-9169-399202079b30; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=ba3fd8fd-db9a-4183-b14d-cfe9b8f89d70\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=ea5fbfa7-b672-4313-b656-f3a2774f83d5; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=fac457d6-9b8d-4a61-9049-2cc3fbb85735; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=e7bd60d0-596e-4d3e-a0bd-0d84f1e50cd1; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=c625ba0b-7a65-4c66-a294-8f85adaf9c76; patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=18658beb-1c58-4cc3-9eb7-ba70fe839fab; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=f2f9b521-b18e-4418-ab71-6b507660bbfa\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=ca6df88d-f280-4f24-ac33-f2441c758acc; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=98bf6d3c-bc56-453c-b018-67ea9cdc7e11; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=2c012d2a-bc66-4321-9f8a-7211506e1f25; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=e79d0d5c-4f84-4fde-9ee3-29a46110844a; patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=fac457d6-9b8d-4a61-9049-2cc3fbb85735; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=c625ba0b-7a65-4c66-a294-8f85adaf9c76\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=3c381856-3e4d-4815-ae50-ffdc0644639c; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=6e015dc8-be67-4793-a86e-79d568f77ec7; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=94e4fd64-d54d-423f-9c51-c76f3d5fb2b3; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=7144c5ef-7f1c-4d66-b20a-817834923d6d; patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=98bf6d3c-bc56-453c-b018-67ea9cdc7e11; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=e79d0d5c-4f84-4fde-9ee3-29a46110844a; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=c17b7a44-4986-4eba-bcd0-512bcdbbac1a\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=c794e961-8cdc-4bfa-adf2-309c9c392d70; patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=7144c5ef-7f1c-4d66-b20a-817834923d6d\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=7a5f6504-348d-4ad5-a8f5-4b8b4e90fe84; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=c22f2aae-81ae-4996-80d3-a3b73850b032; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=98fe14eb-c560-42b6-bc14-90956b6fe3a4; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=5e69617c-fd4c-42ba-a589-ac6f145c611e; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=38849e56-fcbb-45a4-96cb-b8fac6efdc0e; patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=c794e961-8cdc-4bfa-adf2-309c9c392d70; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=94e4fd64-d54d-423f-9c51-c76f3d5fb2b3\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=38849e56-fcbb-45a4-96cb-b8fac6efdc0e\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=ac671d39-be49-46f3-ad7d-215d75551343; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=00f5a628-c403-4924-b172-ca63473a6903; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=1a7ad33d-d834-4908-8cd9-1815c74007b3; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=49d1030f-380b-42e2-9fec-39799575f587; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=58432383-aedc-41e7-8628-7dc0845f757a; patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=c22f2aae-81ae-4996-80d3-a3b73850b032; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=98fe14eb-c560-42b6-bc14-90956b6fe3a4\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=58432383-aedc-41e7-8628-7dc0845f757a\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=11c13c61-f3d2-4173-a2fa-659e7948207c; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=b755f27a-bdd9-4fc7-9d33-e5c992541f03; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=935ac438-e3ab-42fc-94bb-e3b4664e5092; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=0d25e7fd-8b83-4f66-9db0-59a371a32ed8; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=aac7dbf2-7a37-4ed3-be8a-a54a45838ab2; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=3c20511d-c43b-4639-8797-c63e47b4cd85; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=e70182ba-4089-4c3e-8f57-5e4c310643db; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=892b2c6c-4547-4d3b-99cc-642f20d2974c; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=673edae4-acc1-4b62-ac3d-99b514498feb; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=08f01bef-fb34-462a-9021-fdb6f2ca626a; patch: trace=02dab163-549d-452b-95f5-357abc76b1ca,id=02dab163-549d-452b-95f5-357abc76b1ca; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=00f5a628-c403-4924-b172-ca63473a6903; trace=02dab163-549d-452b-95f5-357abc76b1ca,id=1a7ad33d-d834-4908-8cd9-1815c74007b3\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=da982506-c769-4e99-8a13-3ba28464e33b; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=803d28f6-b6ea-4cf5-a58a-7dda7d6595b3; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=f6ea6f7c-11e0-4ec0-8246-f17c9e3a1530; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=1df00cc2-16fd-405a-a6c9-6b8145c94831; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=b35ca0a2-f164-4eb6-ad9b-28423952d4e4; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=2ef747d6-4c0c-4815-b129-e48e351ad15d\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=bab40355-b53d-4cd9-8ee9-20290527d34e; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=c1990c0d-4619-445a-a520-69512a249b75; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=4ee24498-28c3-44aa-bc41-0172e3a4b1ae; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=9e73082d-b9c3-4c25-84af-70aa7a2f8377; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=4017961e-ad43-4606-be18-af0403b12197; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=e80dd6f0-f708-4b51-8970-938bdaecaa8f; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=b084b76d-4094-4d45-8d14-368d457f32c2; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=0e3b9ea0-127d-44ae-969a-0b6f48c8e4ee; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=ab8439f4-6581-4045-857e-0263dbacb2a7; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=2ac275a0-763a-43ca-b933-c0ecd977fd72; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=1df00cc2-16fd-405a-a6c9-6b8145c94831; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=2ef747d6-4c0c-4815-b129-e48e351ad15d; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=f6ea6f7c-11e0-4ec0-8246-f17c9e3a1530\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=2fb7f717-c9a8-4a43-86c2-d85f36e81abf; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=00b153be-2ee7-44a7-aa9e-ec61c6098a38; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=f42be082-2a10-4fcf-a4e6-bb4c497af1ab; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=67f8b219-494c-46fc-8430-8b9a7a52c2ab; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=0e3b9ea0-127d-44ae-969a-0b6f48c8e4ee; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=2ac275a0-763a-43ca-b933-c0ecd977fd72\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=0905cb29-5bef-4dcc-947e-bd41be9b0ec2; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=c4801355-a8c1-4df3-89c0-b44d205f3790; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=e154c1c3-b46d-484b-863e-9eca46ffe0ef; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=4b49816d-34bf-4999-aa9f-f2d87b8e2c5c; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=00b153be-2ee7-44a7-aa9e-ec61c6098a38; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=67f8b219-494c-46fc-8430-8b9a7a52c2ab\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=dc4cdcc8-b4f8-483e-b5ad-a48a0822ebc9; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=903f59e9-15b7-4011-935c-3f722b2c14a8; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=97d142ef-f894-4d7c-873a-58a068ffd16c; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=3686b997-8404-4be7-9ce4-4c1555e5c444; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=c4801355-a8c1-4df3-89c0-b44d205f3790; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=4b49816d-34bf-4999-aa9f-f2d87b8e2c5c; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=b084b76d-4094-4d45-8d14-368d457f32c2\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=db8cd743-d6dd-4cfc-b5b4-6b8020e34c8f; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=3686b997-8404-4be7-9ce4-4c1555e5c444\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=1fb6b541-86e8-49d3-a76c-27f51ee91700; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=d5e21461-3554-4392-ba75-1d711b79a62a; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=d0459516-1ced-4de1-9356-7cbc7d4baaec; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=c9639f80-afb8-48f8-8d9a-1b501401d6f9; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=98d54136-8f2a-4209-b67d-7ac9b02cb0a9; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=97d142ef-f894-4d7c-873a-58a068ffd16c; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=db8cd743-d6dd-4cfc-b5b4-6b8020e34c8f\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=98d54136-8f2a-4209-b67d-7ac9b02cb0a9\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=f28cfa46-8364-45d0-9714-1a2ad3254cb1; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=bd0eabc6-a234-4592-86be-8f9f5c8b855b; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=0bff4eec-387f-484d-8a27-e739d25c3df6; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=6b24c078-4a9b-4e5e-959b-6453d7c95659; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=5b0b1565-7505-4f13-a2ff-92b1260b67cf; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=d5e21461-3554-4392-ba75-1d711b79a62a; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=d0459516-1ced-4de1-9356-7cbc7d4baaec\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=5b0b1565-7505-4f13-a2ff-92b1260b67cf\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=dad8a97a-01d7-42c2-b511-e07843681bf1; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=0b20f8a9-eb2e-4874-adbe-821b0d472974; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=a4f0328f-3347-4e88-83c3-db81240d21e8; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=9cfce8f4-12fc-4dfb-902e-f8ebe1f76d5f; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=61373688-556e-4e19-b5be-97b5ce3d6232; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=cc47f4f3-286c-4b88-8692-4345c63abad8; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=b2035953-5c25-4bea-b4ad-57d249c7d1dd; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=daab100c-dcf2-47c5-bf5c-bbfa11184c48; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=090231d4-2f0d-47b8-91ec-204a2899e2b8; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=4fa94396-fe15-47a2-a393-b4d01e579c4b; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=7af40ed7-5329-4432-a158-9daafa6e3768; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=c7a9c907-315b-488b-a03a-b9164cc392e4; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=bd0eabc6-a234-4592-86be-8f9f5c8b855b; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=0bff4eec-387f-484d-8a27-e739d25c3df6\n", + "WARNING:langsmith.client:Failed to batch ingest runs: langsmith.utils.LangSmithAuthError: Authentication failed for https://api.smith.langchain.com/runs/batch. HTTPError('401 Client Error: Unauthorized for url: https://api.smith.langchain.com/runs/batch', '{\"detail\":\"Using legacy API key. Please generate a new API key.\"}')\n", + "post: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=e9b1009a-8388-41e5-9f5d-b23e5d7a0135; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=5d2f00d2-b8f3-423e-b7b5-b6751cd18ee2; patch: trace=da982506-c769-4e99-8a13-3ba28464e33b,id=c7a9c907-315b-488b-a03a-b9164cc392e4; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=61373688-556e-4e19-b5be-97b5ce3d6232; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=9cfce8f4-12fc-4dfb-902e-f8ebe1f76d5f; trace=da982506-c769-4e99-8a13-3ba28464e33b,id=da982506-c769-4e99-8a13-3ba28464e33b\n" + ] + } + ], + "source": [ + "retriever.invoke(\"hydrogen import evolutions\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3.2 Retriever node" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import os\n", + "from contextlib import contextmanager\n", + "\n", + "from climateqa.engine.reranker import rerank_docs\n", + "\n", + "\n", + "\n", + "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", + "\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\n", + "\n", + "\n", + "def make_graph_retriever_node(vectorstore, reranker, rerank_by_question=True, k_final=15, k_before_reranking=100):\n", + "\n", + " def retrieve_graphs(state):\n", + " print(\"---- Retrieving graphs ----\")\n", + " \n", + " POSSIBLE_SOURCES = [\"IEA\", \"OWID\"]\n", + " questions = state[\"questions\"]\n", + " sources_input = state[\"sources_input\"]\n", + "\n", + " auto_mode = \"auto\" in sources_input\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", + " question = q[\"question\"]\n", + " \n", + " print(f\"Subquestion {i}: {question}\")\n", + " \n", + " # If auto mode, we use all sources\n", + " if auto_mode:\n", + " sources = POSSIBLE_SOURCES\n", + " # Otherwise, we use the config\n", + " else:\n", + " sources = sources_input\n", + "\n", + " if any([x in POSSIBLE_SOURCES for x in sources]):\n", + "\n", + " sources = [x for x in sources if x in POSSIBLE_SOURCES]\n", + " \n", + " # Search the document store using the retriever\n", + " retriever = GraphRetriever(\n", + " vectorstore = vectorstore,\n", + " sources = sources,\n", + " k_total = k_before_reranking,\n", + " threshold = 0.5,\n", + " )\n", + " docs_question = retriever.get_relevant_documents(question)\n", + " \n", + " # Rerank\n", + " if reranker is not None:\n", + " with suppress_output():\n", + " docs_question = rerank_docs(reranker,docs_question,question)\n", + " else:\n", + " # Add a default reranking score\n", + " for doc in docs_question:\n", + " doc.metadata[\"reranking_score\"] = doc.metadata[\"similarity_score\"]\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", + " print(f\"{len(docs_question)} graphs retrieved for subquestion {i + 1}: {docs_question}\")\n", + " \n", + " # Add to the list of docs\n", + " docs.extend(docs_question)\n", + "\n", + " else:\n", + " print(f\"There are no graphs which match the sources filtered on. Sources filtered on: {sources}. Sources available: {POSSIBLE_SOURCES}.\")\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[\"reranking_score\"], reverse=True)\n", + " docs = docs[:k_final]\n", + "\n", + " return {\"recommended_content\": docs}\n", + " \n", + " return retrieve_graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "# import sys\n", + "# import os\n", + "# from contextlib import contextmanager\n", + "\n", + "# from climateqa.engine.reranker import rerank_docs\n", + "\n", + "\n", + "# 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", + "\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\n", + "\n", + "\n", + "\n", + "# def make_retriever_node(vectorstore, reranker, rerank_by_question=True, k_final=15, k_before_reranking=100):\n", + "\n", + "# def retrieve_documents(state):\n", + " \n", + "# POSSIBLE_SOURCES = [\"IEA\",\"OWID\"]\n", + "# questions = state[\"questions\"]\n", + "# sources_input = state[\"sources_input\"]\n", + " \n", + "# # Sert à rien pour l'instant puisqu'on a des valeurs par défaut et qu'on fait pas de query transformation sur les sources de graphs\n", + "# # Use sources from the user input or from the LLM detection\n", + "# if \"sources_input\" not in state or state[\"sources_input\"] is None:\n", + "# sources_input = [\"auto\"]\n", + "# else:\n", + "# sources_input = state[\"sources_input\"]\n", + "# auto_mode = \"auto\" in sources_input\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 = GraphRetriever(\n", + "# vectorstore=vectorstore,\n", + "# sources = sources,\n", + "# k_total = k_before_reranking,\n", + "# threshold = 0.5,\n", + "# )\n", + "# docs_question = retriever.get_relevant_documents(question)\n", + " \n", + "# # Rerank\n", + "# if reranker is not None:\n", + "# with suppress_output():\n", + "# docs_question = rerank_docs(reranker,docs_question,question)\n", + "# else:\n", + "# # Add a default reranking score\n", + "# for doc in docs_question:\n", + "# # doc.metadata[\"reranking_score\"] = doc.metadata[\"similarity_score\"]\n", + "# doc.metadata[\"reranking_score\"] = \"No reranking\"\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[\"reranking_score\"], reverse=True)\n", + "# docs = docs[:k_final]\n", + " \n", + "# new_state = {\"documents\": docs}\n", + "# return new_state\n", + " \n", + "# return retrieve_documents" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Node functions" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "from operator import itemgetter\n", + "\n", + "from langchain_core.prompts import ChatPromptTemplate\n", + "from langchain_core.output_parsers import StrOutputParser\n", + "from langchain_core.prompts.prompt import PromptTemplate\n", + "from langchain_core.prompts.base import format_document\n", + "\n", + "DEFAULT_DOCUMENT_PROMPT = PromptTemplate.from_template(template=\"\"\"Title: {page_content}. \\n\\n Embedding link: {returned_content}\"\"\")\n", + "\n", + "def _combine_recommended_content(\n", + " docs, document_prompt=DEFAULT_DOCUMENT_PROMPT, sep=\"\\n\\n-----------------\\n\\n\"\n", + "):\n", + "\n", + " doc_strings = []\n", + "\n", + " for i,doc in enumerate(docs):\n", + " # chunk_type = \"Doc\" if doc.metadata[\"chunk_type\"] == \"text\" else \"Image\"\n", + " chunk_type = \"Graph\"\n", + " if isinstance(doc,str):\n", + " doc_formatted = doc\n", + " else:\n", + " doc_formatted = format_document(doc, document_prompt)\n", + "\n", + " doc_string = f\"{chunk_type} {i+1}: \\n\\n\" + doc_formatted\n", + " # doc_string = doc_string.replace(\"\\n\",\" \") \n", + " doc_strings.append(doc_string)\n", + "\n", + " return sep.join(doc_strings)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "# display(Markdown(_combine_recommended_content(output[\"recommended_content\"])))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "from langchain_core.output_parsers import JsonOutputParser\n", + "from langchain_core.prompts import PromptTemplate\n", + "from langchain_core.pydantic_v1 import BaseModel, Field\n", + "from langchain_openai import ChatOpenAI\n", + "\n", + "from climateqa.engine.chains.prompts import answer_prompt_graph_template\n", + "\n", + "class RecommendedGraph(BaseModel):\n", + " title: str = Field(description=\"Title of the graph\")\n", + " embedding: str = Field(description=\"Embedding link of the graph\")\n", + "\n", + "# class RecommendedGraphs(BaseModel):\n", + "# recommended_content: List[RecommendedGraph] = Field(description=\"List of recommended graphs\")\n", + "\n", + "def make_rag_graph_chain(llm):\n", + " parser = JsonOutputParser(pydantic_object=RecommendedGraph)\n", + " prompt = PromptTemplate(\n", + " template=answer_prompt_graph_template,\n", + " input_variables=[\"query\", \"recommended_content\"],\n", + " partial_variables={\"format_instructions\": parser.get_format_instructions()},\n", + " )\n", + "\n", + " chain = prompt | llm | parser\n", + " return chain\n", + "\n", + "def make_rag_graph_node(llm):\n", + " chain = make_rag_graph_chain(llm)\n", + "\n", + " def answer_rag_graph(state):\n", + " output = chain.invoke(state)\n", + " return {\"graph_returned\": output}\n", + "\n", + " return answer_rag_graph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Graph" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.1 Make graph agent" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [], + "source": [ + "import sys\n", + "import os\n", + "from contextlib import contextmanager\n", + "\n", + "from langchain.schema import Document\n", + "from langgraph.graph import END, StateGraph\n", + "from langchain_core.runnables.graph import MermaidDrawMethod\n", + "\n", + "from typing_extensions import TypedDict\n", + "from typing import List, Dict\n", + "\n", + "from IPython.display import display, HTML, Image\n", + "\n", + "from climateqa.engine.chains.answer_chitchat import make_chitchat_node\n", + "from climateqa.engine.chains.answer_ai_impact import make_ai_impact_node\n", + "from climateqa.engine.chains.query_transformation import make_query_transform_node\n", + "from climateqa.engine.chains.translation import make_translation_node\n", + "from climateqa.engine.chains.intent_categorization import make_intent_categorization_node\n", + "from climateqa.engine.chains.retriever import make_retriever_node\n", + "from climateqa.engine.chains.answer_rag import make_rag_node\n", + "from climateqa.engine.chains.set_defaults import set_defaults\n", + "from climateqa.engine.chains.graph_retriever import make_graph_retriever_node\n", + "\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: List[str]\n", + " documents: List[Document]\n", + " recommended_content : List[Document]\n", + " graph_returned: Dict[str,str]\n", + "\n", + "def search(state):\n", + " return {}\n", + "\n", + "def route_intent(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\"\n", + " \n", + "def route_based_on_relevant_docs(state,threshold_docs=0.2):\n", + " docs = [x for x in state[\"documents\"] if x.metadata[\"reranking_score\"] > threshold_docs]\n", + " if len(docs) > 0:\n", + " return \"answer_rag\"\n", + " else:\n", + " return \"answer_rag_no_docs\"\n", + " \n", + "\n", + "def make_id_dict(values):\n", + " return {k:k for k in values}\n", + "\n", + "def make_graph_agent(llm, vectorstore_ipcc, vectorstore_graphs, reranker, threshold_docs=0.2):\n", + " \n", + " workflow = StateGraph(GraphState)\n", + "\n", + " # Define the node functions\n", + " categorize_intent = make_intent_categorization_node(llm)\n", + " transform_query = make_query_transform_node(llm)\n", + " translate_query = make_translation_node(llm)\n", + " answer_chitchat = make_chitchat_node(llm)\n", + " answer_ai_impact = make_ai_impact_node(llm)\n", + " retrieve_documents = make_retriever_node(vectorstore_ipcc, reranker)\n", + " retrieve_graphs = make_graph_retriever_node(vectorstore_graphs, reranker)\n", + " answer_rag_graph = make_rag_graph_node(llm)\n", + " answer_rag = make_rag_node(llm, with_docs=True)\n", + " answer_rag_no_docs = make_rag_node(llm, with_docs=False)\n", + "\n", + " # Define the nodes\n", + " workflow.add_node(\"set_defaults\", set_defaults)\n", + " workflow.add_node(\"categorize_intent\", categorize_intent)\n", + " workflow.add_node(\"search\", search)\n", + " workflow.add_node(\"transform_query\", transform_query)\n", + " workflow.add_node(\"translate_query\", translate_query)\n", + " workflow.add_node(\"answer_chitchat\", answer_chitchat)\n", + " workflow.add_node(\"answer_ai_impact\", answer_ai_impact)\n", + " workflow.add_node(\"retrieve_graphs\", retrieve_graphs)\n", + " workflow.add_node(\"answer_rag_graph\", answer_rag_graph)\n", + " workflow.add_node(\"retrieve_documents\", retrieve_documents)\n", + " workflow.add_node(\"answer_rag\", answer_rag)\n", + " workflow.add_node(\"answer_rag_no_docs\", answer_rag_no_docs)\n", + "\n", + " # Entry point\n", + " workflow.set_entry_point(\"set_defaults\")\n", + "\n", + " # CONDITIONAL EDGES\n", + " workflow.add_conditional_edges(\n", + " \"categorize_intent\",\n", + " route_intent,\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_conditional_edges(\n", + " \"retrieve_documents\",\n", + " lambda x : route_based_on_relevant_docs(x,threshold_docs=threshold_docs),\n", + " make_id_dict([\"answer_rag\",\"answer_rag_no_docs\"])\n", + " )\n", + "\n", + " # Define the edges\n", + " workflow.add_edge(\"set_defaults\", \"categorize_intent\")\n", + " workflow.add_edge(\"translate_query\", \"transform_query\")\n", + " workflow.add_edge(\"transform_query\", \"retrieve_graphs\")\n", + " workflow.add_edge(\"retrieve_graphs\", \"answer_rag_graph\")\n", + " workflow.add_edge(\"answer_rag_graph\", \"retrieve_documents\")\n", + " workflow.add_edge(\"answer_rag\", END)\n", + " workflow.add_edge(\"answer_rag_no_docs\", END)\n", + " workflow.add_edge(\"answer_chitchat\", END)\n", + " workflow.add_edge(\"answer_ai_impact\", END)\n", + "\n", + " # Compile\n", + " app = workflow.compile()\n", + " return app\n", + "\n", + "\n", + "\n", + "\n", + "def display_graph(app):\n", + "\n", + " display(\n", + " Image(\n", + " app.get_graph(xray = True).draw_mermaid_png(\n", + " draw_method=MermaidDrawMethod.API,\n", + " )\n", + " )\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Translate query ----\n" + ] + }, + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAQDAvsDASIAAhEBAxEB/8QAHQABAAMBAQEBAQEAAAAAAAAAAAQGBwUIAwIBCf/EAGAQAAEDAwICAwsFCgsFBQYFBQABAgMEBREGEgchEzFBCBQVFhciUVZhlNMjMkJS0jZTVXF1gZKTldEzNDU3VHSRsrO01CRicnOxCRiCocQlJ0ODwcJERUai8FdjZGWj/8QAGwEBAQEBAQEBAQAAAAAAAAAAAAECBAUDBgf/xAA5EQEAAQICBwUHAwMFAQEAAAAAAQIRAxIUITFRUpHRBDNBcaETYWKBkrHiBcHSIjLhFSNCY/Cy8f/aAAwDAQACEQMRAD8A/wBUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsSVNZq6eaGhqZrbZ4nLG+ug29NVORcObEqoqNYnNFfjKrnbjCOX6UUZvG0LZ36u4UtA1HVVTDTIvUs0iNz/aQ/Gqy/hig95Z+8iUugdOUkiyNs1HLOq5dUVMSTTOX2yPy5fzqS/FWy/geg92Z+4+n+zHjPp/k1HjVZfwxQe8s/ePGqy/hig95Z+8eKtl/A9B7sz9w8VbL+B6D3Zn7h/s+/0XUeNVl/DFB7yz948arL+GKD3ln7x4q2X8D0HuzP3DxVsv4HoPdmfuH+z7/Q1HjVZfwxQe8s/ePGqy/heg95Z+8eKtl/A9B7sz9w8VbL+B6D3Zn7h/s+/wBDUnUtbT1se+nniqGfWiejk/tQ+xXqjh/p+Z/SxWuCgqUztqqBve0zVXtR7ML/AG8j+UVfW2Gvgt11mWspqhdlJc3NRrnP+9TI1Eaj162uaiNdhUVGuRu+TRTV3c/Kf23pbcsQAPggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4Gua+eh05M2llWCrq5YaGGVM5jfNK2JHpjtbv3fmOvb6CntdBTUVJE2Clpo2wxRM6mMamGtT2IiIhweIbdlgirFzsoK2lrJNrcqkbJmLIuPYzcv5izHRV3NNt8/svgAA50UjiBxo0bwvraOj1JeO8aurifPFTw0s1TJ0TFRHyubExysYiqiK92G+0rsXdDWleOtdw4koa9ksFDS1EVdHb6qRkk0zn+Y5Ww7GMa1rV6Vztqq5zcorHIVPum4am23igv+l7VrGPiHSW2eK03bTdsWspJsuRyUVa3Ct6J72tdlyJt+cjkVML96Wtv+ke6Gp77fdMXaoh1Lpa2W19VZaJ9XTUddHUTOmjmczPRsTp0VHu83CLzygF8tHH7QV91r4pUl+zflmmpmU81HPCyaWLPSRxyvjSORzdrstY5V5L6CO/uidCuuV5ttJc6u43G0SVUNbT0NqrJ+glp2vdIx7mQuRq4jdtyvnqmGblPOKW/WeodQ6Dueo7Nr+46vtetIqy9rJBOlloaVJJomLSxNXo5GI2SNekja9yN6RXuTmhuvAPTFdarbxQjrLdPbZblrO71ULqmB0XTxPc1I5W5RNzFREw5MoqJyA7fAXjTQ8ctAW/UNNRVVuqpYI5KqknpZ444nvRV2xyyRsbMiY+fHlPxZNIMV7k6vrqDhHYtH3fT17sN50zQxUFZ4ToXwwSyNVzcwSr5szfMzuYqphzfSbUAOdqGzsv8AZaugeuxZWeZJ2xyIu5j09rXI1ye1EOifGsq4qCknqZ3bIYWOke70NRMqv9iGqZmKomnaOdpK8O1Bpi13GREbLU0zJJGp1I9U85E/EuTrle4e0ctBomzRTtVky0zZZGOTCtc/z1RU9KK7BYTeNERiVRTsvKztAAfJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfOeCOqgkhmjbLDI1WPY9Mtc1UwqKnahWrVcPFHoLNdZdlKzEVvuMzvMmZyRsUjl6pU6ufz0w5FVdzW2k+VVSw11PJT1MMdRBI1WvilajmuRetFReSofWiuIjLVslVN1HwQ4e6wvNRd75oiwXe6VG3pq2tt0Ussm1qNbuc5qquGtaiexEOcvc2cJ1xnhvpZcdWbTBy/wD2lh8QKOnd/wCz7jdbUzOehpa16xJ+Jj9zWp7GoiH88Saj1qv366H4RvJhzsr5x/8ApaN6fpXRth0Na/BunbPQ2O39Isvetvp2wx71xl21qImVwnP2HZKv4k1HrVfv10Pwh4k1HrVfv10Pwh7PD4/SS0b1oBllBbrrU8VL5p5+qbx4Oo7Lb6+JUlh6TpZp6xkm75P5u2njxy693Ney1+JNR61X79dD8Iezw+P0ktG999YcPdMcQaeng1Pp+26ghpnK+GO5UrJ2xuVMKrUci4VUKv8A92vhP/8A030t+yIPslh8Saj1qv366H4Q8Saj1qv366H4Q9nh8fpJaN746T4TaI4fV81w03pOy6frJIlhkqbdQxwPdHlHK1XNRF25a1cexD91c7NePSipcS6fY9HVdXz2VeFykMS9T25RN7/m48xNyq7Z9GcPrdMqLcam4XpE/wDh3GrfJEvpzEmI3fnav/mpZWMbGxrGNRrGphGtTCInoGajD10TeeVv/fJdUbH6ABzsgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPrSrfL9qpEVd3ixZ8pjljvq547fx9n517NBM/tOfL7qrm3HizaOSIm7+NXLr7cfj5deO00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz20In/eB1Wu5qr4sWfzUTmn+13PmvLq/P2L+fQjPbRj/vA6r5ru8V7PlNv/8Al3Pt/wD5/wCZoQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACmzavu10c+SxUFHLQNcrGVddUPj6ZUXCqxjWL5mc4cqpnGURWqjl+uHhVYn9q2uuQKR4d1h/QLH73N8MeHdYf0Cx+9zfDPvote+OcFl3BSPDusP6BY/e5vhjw7rD+gWP3ub4Y0WvfHOCy7gpHh3WH9Asfvc3wx4d1h/QLH73N8MaLXvjnBZ460b3e111D3RFRaaXhXO3UN3jo9Orb5bwje95YJ6lznvd3vnanfC5ynmpGq9qnvw802DufptPd0FeeLVPb7N4YuNL0KUi1EiRQTORGyztVI873tTC/8T1+ly1/w7rD+gWP3ub4Y0WvfHOCy7gpHh3WH9Asfvc3wx4d1h/QLH73N8MaLXvjnBZdwUjw7rD+gWP3ub4Y8O6w/oFj97m+GNFr3xzgsu4KR4d1h/QLH73N8Ml2/VlxpqyngvlDTU0dS9IoqqindKxJFxtY9HMardy8kXmirhFwqoi5ns2JEX1T84LLYADlQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/F6jOuG67uHml3LjK2ulVcJjmsTTRV6jOuGv83WlfyVS/wCC09Ds/dV+cfapfBYwAbQAINlvlv1Hbo6+11sFxoZHPYypppEkjcrHqx2HJyXDmuT8aATgDj1mrrTb9UW3TtRV9HeblTz1VLTdG9ekjhViSO3Im1MLIzkqoq55ZwpB2ACs2DiTp3VGpbrYbVXvrrja3OZWdFTS9BE9qo10fT7OjV7VciKxHK5O1EwoFmAI1zuVNZrbV3Csk6GkpYXzzSbVdtY1qucuERVXCIvJOZRJBw7briw3aj09U010gdHqCBKm1NkVY5KuNYul3MY7DuUfnKiplE68HcIBX9cLixwr2pcKBU9i99wlgK/rn+QovyhQ/wCbhPtg95T5wsbYaGADx0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfxeozrhr/N1pX8lUv+C00Veozrhr/N1pX8lUv+C09Ds/c1+cfapfBYzyGmtdVcD7Lrfxnr9RV3ESKx3G5W+aruC1dluUbJEVKinh6oHRI5m6La3DVX52cp68KDpXgPoTRdyq6+1WCNlVU076R7qqomqmtheuXxMbK9zY2OXraxERe1BMTOxGWcMdC8TfDun7lUXaaTTdwpZPC8s+sZ7m6sjlgXo5aeNaWJKd6PVjkWJzURqqmOpTsdxhpWmsvBi3XCGtudTLWzVbJIqy4zVEMXR1lQ1Ojje5Wxqv0tqJuXmuVL7ofgZojhxdluWnbKtvq+ifAxVrJ5WQxucjnMijke5sTVVrVwxETkhEbwhh0dV19z4eMtunbxcqh0ta+5R1VZSPa5Vc/ZTtqY2Rvc/a5XNx1LyXOUkRMax+u6I1vcuHXBfVOoLO9kVzpadjYJ5Go5sDpJGR9KqLyVGI9X4Xl5vMwriJZ6zgXxCtN+tt/vurrlSaJ1BXRvv1c6sR00TaZ29qL8xrlVFVjcNw1MInPPoG36b1fdu+qDWdy0vfdP1dPJT1FBR2SeB0qOTCo50lVK1W4VUVNvPPWhD0j3PegNDXamudmsToK2mppaKGSeuqahGQSbd8SNlkc3Z5qYbjCc8YyuUxMjKOFej+KNfWaTvz7vLLZbnAkt3qKjV81e2tp5oFVHwU/ekbad6Pcx7Vie1ERFTnnJxuGEdv4ddzxqy4SXTVU89y1JWWyCOhu0jqp8/hOWGFsDpXK2J8jnJvk5K7KuVVVEN30ZwI0Nw9vaXXT9j8HVjWyMiRKueSKBr1y9sUT3qyJF9DGtJ8nCPSU2ja/SklmZLYK6olq56N80jt00kyzPkR6u3Nd0iq9FaqbVxtxhBFMjy5eNTa70ToHjtYa66Xa31FnstvudtdLf5LlV0SzLK2TbWKyOTn0TVxz288KqKazxwvldHxJorXDcKhluqdE3+eaijmckMr2pTpG9zEXCqiOeiKqcsrjrUvVl4DaEsC3RaSwMV11oVt1xdU1M1QtbAqqu2dZHu6Veaoj35ciLhFROQ0zwG0NpG8wXa22V6XKGkkoGVNXXVFU/vd+3dCvSyOyzzEw1co3ntxlcss7BgrdHUeq39yxFU3C7UbanT8kKutl0no3JttTXorHRParXLzRVTmreS5TkXTVXhvRnHeG76qumpPFC519BQ2Kos9zVtDSTOa2PvatpfpJLLlelw/57UVWGhT9z/oGo0lbtMrYdlmttS6soYYayojfSyu3ZWKVsiSMTznJta5EwuMY5H7dwF0LJqql1HJZFmu1NJBNFJNW1D40khY1kMixOkWN0jGtaiPVquTCLnJMsjQCv65/kKL8oUP8Am4SwFf1z/IUX5Qof83CdWD3lPnCxthoYAPHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/F6jOuGv83WlfyVS/wCC00YoFPbL1pKnbbqa0S3u306bKWalniZIkSYRrJGyvb5zU5ZRVRURF5KuE7+zzE0VUXtMzE69Wy+/zajZZ3AcTwtfvUy6+9UXxx4Wv3qZdfeqL450ZPij6o6lnbBxPC1+9TLr71RfHHha/epl196ovjjJ8UfVHUs7YOJ4Wv3qZdfeqL448LX71MuvvVF8cZPij6o6lnbBU4db19RqKrsUelLq66UlLDWzQdPSJthlfKyN27psLl0EqYRcpt5omUz0fC1+9TLr71RfHGT4o+qOpZ2wcTwtfvUy6+9UXxx4Wv3qZdfeqL44yfFH1R1LO2DieFr96mXX3qi+OPC1+9TLr71RfHGT4o+qOpZ2yv65/kKL8oUP+bhPr4Wv3qZdfeqL459YbVdtTVNKyvtr7NbYJ46mRs87HzTOjcj2MRI3Oa1u9qK5VcuUbtx52W6pth1RXVMWjXtiftJEWm68gA8ZkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBtTf/fzqhcdemrSmdvX/ALVcu3H/ANV/Emed+M+tLMcftVO2uRV0xZ03beS4qrnyzn29WO1PTy0EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz20Kn/AHgdVpnzvFiz5TanV33c+3t7eX7zQigWlH+XzVKqsmzxZtGEVPMz31cs4X09WfzF/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/L3tiY573IxjUyrnLhET0qVp/FDR8bla7VFnyi4XFdGv/ANT6UYdeJ/ZTM+S2mdizgq3lS0d602j32P8AePKlo71ptHvsf7z6aPjcE8pXLO5aQVbypaO9abR77H+8eVLR3rTaPfY/3jR8bgnlJlnctIKt5UtHetNo99j/AHjypaO9abR77H+8aPjcE8pMs7lpBVvKlo71ptHvsf7x5UtHetNo99j/AHjR8bgnlJlnczi1cYuH6cctS1njxptKebTlqhZUeFqfY9zam4q5qO6TCqiPaqp2bm+lMbgf5j8N+5f0xp/uzKuequts8m9ml8NUFRJUxrDOqrmGlRVVUcrHr5yL1tj5/OQ/0P8AKlo71ptHvsf7xo+NwTykyzuWkFW8qWjvWm0e+x/vHlS0d602j32P940fG4J5SZZ3LSCreVLR3rTaPfY/3jypaO9abR77H+8aPjcE8pMs7lpBVvKlo71ptHvsf7x5UtHetNo99j/eNHxuCeUmWdy0gq3lS0d602j32P8AefSn4l6SqpmQxamtEkr1RrWJWx5cq9SJz5qNHxo/4TylLTuWUAHOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKfr16VVfp+1ypuo6yokdURL1StZE5yMd6W7tqqnUu3CphVJiIjURETCJyREIGtvup0l/zqn/BU6B6kasKjyn7ys7IAARAAAAAAAAAAAAAAAAAAAD8TwR1ML4po2SxPTa5j2o5rk9CovWfsAfDh1UPdaa6kV7nxUFfNSw71VVbGiorW5VVVcI7CexELUVDhx/A6g/K8/8AdYW85e0xbGqanaAA5mQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFM1t91Okv+dU/4KnQOfrb7qdJf86p/wVOgepHdUeX7ys+ClcUeJTeHVBamU1qnv19vNa23Wu1U8jY1qJla567nu5MY1jHOc9UXCJ1Lk5Nz4i6ysWhKy9XTRNvt9zp6lInUk+pIWUiQ7UXp3VTo27Woq7cKzdnsxzJHGDh5d9ZN03d9N11JQan03cfCNAtwY51NPuifFLDLt85rXMkXzm5VFRORVNbcOuIfEOy2CqvUWkZLxZL425w2VJal9tqokhdGjJpHR7le171ka5I8IrWptXrPnN0VTWXdJ3rVPc+X/VGj6OloL7ar3T2et6K5xVMMW6eBFfBO2NzJmvbNG1Fw3CSOXrZhbhxA7oiThs3T9qvVssdDrC6QzVT6Ct1JFSUFNDG/budWSxt3K7LdrWxKqrv7Gq44Kdz5qy5aA4n2S4XGxU1fqm6U97opqBkqQU9RGkDuiexyZ2I6mYm9FVXI5y7Wrhp177w34h3LU9g17TppWPWVHRT2mvtU81RJbaqkfI2Ritm6LpGSNe3OejVF3Kn48/1CPZO6nh1hZ7JHpnTzLzqm6XOrtTbYy6xd6RyU0bZZ5O/GI9rokY+NWua1VdvRMIucf2z90vcbzaLbT0+jek1rcr3X2Wn08lyRGxOo/wCMyTVCx7WtZjra1+dzMZVVRK33RVNdbTozQl0v1303pnUtDdJpVuVJPWUMEO+ORuyKoZDKrEVita/pWI1+OW1cIQuFmmbprfR+ltU6Ltltst80jd7jDD4Rq6mooL9FUsb3zUJUuibMvSPVHJIrF86JyYVuMS83sLncu6aq7XZ4mS6LqHarj1PBpetsLK9irFNNEssUsc23bJG5uxUVUZycucbecm5631XHxb0LbLtp5bbW1tqu1TBTW7UjpKOaaLYnRzsWmbvTa6FzJMpsWSRNq4yvLp+AOp62vpNQ3e42qXUtZrOj1LdW0yytpoqanp3QR08Cq3c9zWbfOcjcqq9WEzoGs9C3a88U9Fart76J1PYKG6wS09TK+N0slQyBItqtY5NuYnblXmiKmEd1GtYp1v496spNfy6e1RoW22SiobVNertc6TUS1iW6lYjtrnsSmZlz1a5Gt3Iqo17upvPlaJ7sG06r1Rp23zUNqpqDUNQlNb30Wo6Wtro3uaro0qqSPzodyJhcOftcqI7GT56D4ScTIaHVFo1nS6RraTWD6rxgvFvudU6tkZLE6JjImPp2tRsbFaxrVdhERV5qq5s/DXTXEDh7b7dbtSrpav01YaN0S3O209S+51kcUeI3dAjMNfhqK5GrIrlyjURVJGYbGeddOccbnpzTN3r6nTlfcbzV69k04tqlvqVLYZ3taiJBK+KNGwo5EwxU5bnLuXqNJh466WnmZG2DUu57kam7Sd1amV9KrTYT8alJdwIv6tkTvy2+dxHbrBPlZP4mitXZ8z+F5dXzf941MzOwcrihx41ZScKuKrKSyQ6b1vpOmhkl6O4NqoWQzsV0dRFIsKb1RGvTY5jebevtLJrfuganhlYtOxamtNmt2q72+ZtNQT6ijhoWxxIivlkrJomI1MOYm1I1crnIiIuFVGsuBNw1lXcYmzV9LS0WtLPQ2+ikZufJBJBHO1zpG4RNu6RmNrlVURerkQ75wz4j6hqNI6smfpWn1xpx1RSpRJJUS2yvo5o40e171jSSN++Pe1WtciYRF3ZUn9QiW/usYL1YKGe1adiu95m1JHpmWht94gnp2zSU8k8c0VU1FZJGqMairhqpl/LLdrufxT49atp+EvEdbfZYdOa10tUU1NVsbcG1EUUU6RvZPDIsPym5r8bXMaqLnnlEzdL1w71dq+36Emu66fo7pZdURXqsitizNg73ZFOxGRq5u58nyrebkYi4Xq6l5eteAl11j5ZIluNJRxayhoG26VNz3QSU8KNzK3aiIivanzVXzc9S8if1DWtMVl4r7LBPfrZS2e6OV3S0dHWrVxMRHKjcSrHGrsphfmphVxzxk6pwtFyamksjF1bBaae8b1RzLLNLLT7cJhUdIxrs5zyxy5c1O6fQQ+HH8DqD8rz/AN1hbyocOP4HUH5Xn/usLec/au+qaq2gAOVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/iqiJleSAf0HDfrayJU09PFcI6yoqYJamGKjRZ3SRx8nq3Yi5wvL2ryTK8iPBqS6XNlO+36dqWRVFE+pZPc5W0rY5eqOGRnnSNVetV2KjU9K+aBA1t91Okv+dU/4KnQK3qemvlPdNMXy8VNDFb6ONzK6npIXubBO+NyOm6Zy84kXY3CsbjKuc7HJtja9r2o5qo5q80VFyinqRrwqPKfvKzsh/QARAAAAAAAAAAAAAAAAAAAAD51FRFSQPmnlZDCxNzpJHI1rU9KqvUNorWkdZ27T1LrKW4trKWlt90WSaqWjlfEqSbWt2Oa1d+FTzkTO1FRXYRcl5p9TWeruFwoILrQzV1ufHHWU0dSx0tM6RN0bZGouWK5FRWo7GUXKHI4d0z47VXVbmOjjr66aqiR7VaqxqqI12FRFTKNzz7FQ7V50/a9RUM9FdrbR3OjnRqS09ZAyaORGrubua5FRcLzTPUpy9pm+NU1O10AV2v0Haq11zkjWtt9RcpYpqmot9dNTyOfHjYqKxyY5JhUTk5OTkUVmn7yjrhJb9TVMMtTPFLFHW0sM8NK1vJ8cbWtY9WvTr3vcqL1KicjmZWIFenk1VTTzuigtFxhdWxpEx00tK6OlVPlFcu2VHytXmiIjGu6lVvWfmTVNfRtkdV6auTU8Jd4xLSrFPvhX5tUqNflsfYqKm5Pq45gWMFefr6wwSLHVVy253hJtoZ4RhkpUmqnJlkcaytb0m76LmZa76KqdmjuFLcWyupKmGqbFI6GRYZEejHtXDmrjqci9adaASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8c5GNVzlRrUTKqq8kQ4FXragjkrIKCOovdZR1MVJU0ttYkj4ZHoioj1VUa3DV3LlyYRU9KZCwAr0q6nuL5WxJbrJHFXtRksm6tfU0ifPXanRpDI5eSc5EanNUVV2p/HaJpKxzlulZXXhEuSXSBtXNtbTvb/BxsbGjEWNnWjXo7K83K5eYEip1lZqWaGJa+OeWWuS2oylR07m1Kpu6N6MRdio3mu7CNTmqoh8KbUNzuM1ItLp+phpX1UsNRNcZWwOijZ1SsYm5Xo9fmou1cc1xyz2aOgpbe2VtLTQ0zZZHTSJCxGI+Ry5c9cdblXmq9akgCvUFu1HO+2z3O70sD4JZn1NJbaX5KoY5FSJiukVzk29aq3buX0JyX8W7QNro47QtU6qvNXa0n73rbpUOnmRZspIqqq4XKKrU5cm8kwnIsgA+FHRU9upYqakgipaaJu2OGFiMYxPQiJyRD7gAfxzWvarXIjmqmFRUyioVmThho6Z6vfpWyucq5VVoIuf/wC0s4PpRiV4f9lUx5LeYVbyV6M9U7J+z4vsjyV6M9U7J+z4vslpB9NIxuOecl53qt5K9Geqdk/Z8X2R5K9Geqdk/Z8X2S0gaRjcc85LzvVbyV6M9U7J+z4vsjyV6M9U7J+z4vslpA0jG455yXneq3kr0Z6p2T9nxfZHkr0Z6p2T9nxfZLSBpGNxzzkvO9nVLwo0imt7k9dGUjYFt1KjZpKaJaNzklqMtjjx5siIrVe7HnNdEnPby7nkr0Z6p2T9nxfZPvRwK3iDdpu8KxiOtdGzv58yrTS4lql6Nkf0Xs3Zc7tSSNPoliGkY3HPOS871W8lejPVOyfs+L7I8lejPVOyfs+L7JaQNIxuOecl53qt5K9Geqdk/Z8X2R5K9Geqdk/Z8X2S0gaRjcc85LzvVbyV6M9U7J+z4vsjyV6M9U7J+z4vslpA0jG455yXneq3kr0Z6p2T9nxfZPrS8NdJUU7J6fS9nhmYu5kjKCJHNX0ou3kpZAJ7RjTqmuecl53gAOdAAAAAAOJWaJsFe6B09monOhr23SNyQNaratOST5RPn45butU5LyO2AK8mjIqd6OorteKLdc1ucqJXPnSVy/OhxNv2Qr97j2o1ebdp/I7ZqWjWFI75S1rFr3SzrXUHn96L1QxrG9iNe3se5rspyVueZYgBXYbpqSBYG1thpZukr3Qq+3V+9Iqb6E70kZGu7sdG3djsV3Yp9awOWkZWWy7W2aqrH0UUc9C+RNzepznxb2MY5Pmve5EXqznkWIAce06xsV9iikt94oqxsk0lOzop2qrpY1xIzGc7m9qdadp2CLWWuiuE1NLVUcFTLSydLA+aJr3RPxjc1VTzVx2ocej0DZrW63+Doai2RUM8tTFT0NXLDA50nz0fE1yMkaqrna5FRF5pheYFiBXaDT12tjrZGzUtVXU1PLM6qS408UktSx2djN7Gs2bFxhdqqqJh2V5n8t0+q6fwPDcaS01yyOmS41lHPJAkKJlYnRQua/fu6nIsjdq803dgWMFct+sJZ0tMdw0/eLPV3BJ8wTQNnSmWL77LA6SNm9EyzLvO5Jyd5pItOtbFfI7c6jutNI64xvlpIXv6OWZrFw9Wxuw5dq8l5cu0DtgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+KuEOJHeqq71aMtMLUp6audTV09bHJH5rWZcsCbflPPVGbso1MP5qrdqh0bjdaS0075qudsLGsfJjrc5GtVztrU5uVERVwiKvI4r7ter7A9LNRtttPUW9lRS3S6wvyyZ/Ux9GqskTa3m5HujVFVG461bKs2kqS1d5VFRJJeLvSwvgbeLi2N1W5r3b3pua1qNRzkRVaxrW+a1EREaiJ2wK5U6GoLu2uZfHSX+nrW06S0NwxJSNWFUc1WQ42pl6b1zlVVE54aiJYkTHUf0AAAAAAAAAAAAAAAAAAAAAAAAAV2jpGs4hXaq8H1cbpLXRxrXvlzTyo2WqXomMzyezcrnOxzSVifRLEV6ko2s4gXWrShqmPktdHEta6VVgkRstSqRtZ1I9u9Vc7tSRifRQsIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+E9DTVUsUs1PFNJFu6N8jEcrNyYdhV6spyX0ofcAVui4fWW0R26K1QTWant8M0FLS22pkp6aNknN3yDXJG7Crlquau1fm4yuf1TWS+W59AyHUK11NT0r4Zm3OkY+apl+hKskfRo1U5ZRGYVPQvMsQArcF31FRRU6XKxxVTm0Uk1RNaqlHp07eqKNkiMVd6dSqvJeS+lf3Frq0o6COtfNaaiS3rc3RXGF0PQwp89XvVNjVZ9Ju7KJz6uZYT8yRsmjdHI1Hscitc1yZRUXrRUA/NPURVUEc8EjJoZGo9kkbkc17VTKKip1oqdp9CvVOhLRJNU1NJC+1V09Clu77tz1hfHCnzEaieait+iqouOrqVUPlUU+p7NHXTUdTS6hjZTRNpKCsTvWZ0rcJI59Q1HNXemVROiTDuWUavmhZgc2lv9LVXSst+2eCppZGRr3xA6NkyuZvRYnqm2RMI7O1VwrXIuMHSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwNSQz3iqpbK2CfvCpa6WtraatSnfAxitVjMN89ekXLfNwm1r8uRdqOD4ugZrmOZtVD0mmpI3Quo6qnfE+qkbLzc5HYVYsMwiKm2Rr1VcsVN1lP4iYTCckP6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVyjpdvEO71Hg+rj32qij7/fNmnl2zVS9ExnY9m7c53akrE+iWMrtHSq3iFdqjvGsYj7XRx9+vmzTS7ZapejZH9F7d2XO7UkjT6JYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhXW0014pmxVMUcvRyMnhdIxHdFKxUcx6Iva1yIqfiImjbo++aRslxlrKO4S1dDBO+rtyqtNO50bVV8SrzViquW57FQzbureJetOEHB+u1doi3Wy6VttnjkroLrFJIxKRcte9rY5GLuRyxrnOEbv5dqUXuGOM+vuOOh6+86mtFgs2nKJzLdao7NRSU6yuY3z1w6VzUY1NrURrUTOcY24A9NgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABW9JUraisvN6kpaGOqralYG1NHN0yzU8LnMi3u6kVMyLtTk1Xr27lO/UzNpqeWZyta2NivVXu2tRETPNexPacbQVGtBomxQvprfSTd5xPmhtK5pGyuajpOhVeasVyuVFXmqLkDvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtHSKziHd6rvKsYklroo+/HzZppNs1UvRsZ2SN3Zc7tSSNPoliK7R0eziFdqrwfVR9Ja6KLwg6fMEu2aqXomx/Rezfuc76SSsT6JYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACm3S73K9XiuobbWraqS3yNimqY4WyTTSqxr1azeitaxrXtyuHKrlVPN2Luh+B7766Xj3ah/wBOfywfy7q78rf+mgO4exqw7U0xGyPCJ8PfDU6nE8D3310vHu1D/px4HvvrpePdqH/TnbBPafDH009EurV10ncr5a6y3V+rbrVUNZC+nqIJKahVskb2q1zV/wBn6lRVT85zdEcMF4caVt+m9OalutsstAxY6alZDRvRiKquXznQK5VVVVVVVVVVS7ge0+GPpp6F3E8D3310vHu1D/px4HvvrpePdqH/AE52wPafDH009C7ieB7766Xj3ah/059I7pdtLTU81ddZL1bZZo6ebvmGNk0Kvc1jZGuia1qtRzk3Irepco5NuHdcr2vPucd/WqT/ADMZqi2JVFFURadWyI+0LE3mzRAAeMyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOXqlVTTF3VrKSR3ec2GV7ttO5di8pV7GfWX0ZPtYoUp7Hbomx08LY6aNqR0n8CzDUTDP91Oz2YI2sGdJpK9s6Kim3UM6dFcnbaV/ybuUq9ka/SX0ZJlobstVE3bCzEDE2065jTzU5M/3fR7AJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK5R0iM4iXep8H1cayWqij8IOmzTy7ZqpeiYzsezduc7tSVifRLGVyjpkbxDu9R3nXMV9qoo+/HyZpZNs1UvRsZ2SN3ZevakkadhYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgWD+XdXflb/00B3Dh2D+XdXflb/00B3D18TbHlH2hqraA8va7orLofuimaruzbVq5l1u9stkMba9WXbT1S9jGRNZEjsPgeqtkc3zXfKK7D0M80Zoqv4n01dfblrjSumtf+ME9NLWV1LUeGqCpZVubDTsf36xm1WoxrY0i2q1yJtcuVXnzeDL3IDw7xwuVFXXvWGvLZFp/TF107qaktkdbU1M7rzVzRTQNkWP5VrIoVYq/J7Ho9iPcqJnJrultA2XVHdIcXLtc7bFdq61TWaa3R1aq6OnnSja9sjWryR+Wt8/rRE5KmVyzXmw9Clc4c67oOJ2iLRqm1w1NPb7nD00MdY1rZWt3KnnI1zkReXYqmD9zPZdAX3TWmNYXyso63ilU1E3f9ZX1ytr216ukSSnWNXoqIxMtbFtwjWoqJ2lB4VaLtGj+FnAHWVop30epbjf6W31lwbPIr6imm74a+F6K5UVmGtw3GGq1FTHMZtg9sle159zjv61Sf5mMsJXtefc47+tUn+ZjOrB72nzhqnbDRAAeMyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPrGPpdI3tnRUU+6hnTork7bSv8Ak3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ELWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACu0dPt4h3efvSuZvtdEzvt8uaSTE1UuxjOyRu7L17UfGnYWIrtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH5e9sbVc5Ua1EyqquERAP0Dgz6yo1mWG3w1F6mjr2W+oZbmtf3s93NzpHKqNa1ic3c1VOSIiuVEX8xQ6kuM0T6mejs0MNe9yw0irVOqqVExGjnvaxI3OXznI1rsfNRy/OA4Fg/l3V35W/9NAdwrGirWyy12qqRk9TUoy7ucslXO6aVVdTwOXc5yqv0uSdSJhERERELOevibY8o+0NVbXDk0JpqbUjNRSaetT9QMTDbq6iiWqamMcpdu7q5dfUfip4f6XrNRx6gn03aJ79HjZdZKCJ1U3HViVW7kx+M74PlZlXbjw40ld7pVXKu0vZa241cK09RWVFvhkmmiVMKx71aqubjlhVxg6lDYrba6yrq6O30tJVVfRpUzwQNY+bY3aze5Ey7a3zUz1JyQnAWHAZw+0tHqR2oW6atDb+5crdUoIkqlXGOcu3d1e0+8OjrBT2222+Kx22KgtkrZ6GlZSRpFSyNztfExEwxybnYVqIqZX0nYAsBXtefc47+tUn+ZjLCV/XaZ06qJ1rV0iJ7V75j5H3we9p84ap2w0MAHjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj6xj6XSN7Z0VFPuoZ06K5O20r/AJN3KZeyNfpL6Mk20t22qiTbCzELE2065jTzU5MX6vo9hC1jH0ukb2zoqKfdQzp0VydtpX/Ju5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiK7R0+3iHd5+9K5m+10TO+3y5pJMTVS7GM7JG7svXtR8adhYgAAAAAAAAAAAAAAAAAAAAAAAAAAAA/jnIxMuVGplEyq9q9RXaHWcV+bbZrFRT3e3VzZ3Jc43NjpoujVWpuVyo9Ue5MNVjHoqIrurCqFjOPddWWqz1M9HNVtlucVFJcPBlN8tWSQMVGueyBuXvTcqN5IuVVE61IdNYrvc46SW+XZ0bu9JIKq22r5Klke/6aSKnTZa3k1WvYmVVytzt29e0WWhsNDT0dBTR0tPBE2CNjE6mNztTK81xlev0r6QOPU1mo7zT1kdtpqexI+mhfSV9xatQ9JHc3tfTNc3GxvLnJzcvVhOf1q9E267vuCXjpL5S1skEjqG4qktLEsSJs2RKm1POTeucqrsc8I1EsAA/nUf0ACtXnS1VLcJbhZ62Khqp0alRFUwrNDNtwiOwjmq16Im3ci80xlFwmOd4B1h+E7H7jN8YuwOqntOJTFtU+cQt1J8A6w/Cdj9xm+MPAOsPwnY/cZvjF2BrSsTdHKC6k+AdYfhOx+4zfGHgHWH4TsfuM3xi7AaVibo5QXUnwDrD8J2P3Gb4w8A6w/Cdj9xm+MXYDSsTdHKC7NbnHq6yzdJXXCwQWx3RxtrO9J1VJXyIxGOb0nJFVzMOyqc3Z2oiKveoNJXGpq6ee+XCmqoqeRJYqSip3QxrImFa56ue5XbVTKJyRFwq5VExansbIxzHtRzXJhWqmUVPQV5ahmi2sjqJGR2DL3Or62tXdTyPlyyLDkx0eXq1q7vNwxqNxzTM9pxJi2qPlBdYwAcqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj6xj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2EPV8aS6TvbFjo5kdQztWO4rimd8m7lKvZGv0vZkmWlu21UabYWYhYm2nXMaeanJv8Au+j2ASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxFdo6bbxCu0/elexX2uiZ32+TNJJiWqXZGzskbuy9e1r4k7CxAAAAAAAAAAAAAAAAAAAAAAAAq0d1uOsaRr7PI62WWsoXuivCt21bJVftY6OCWNW42or0dJlFyzzHIq4Ds32/wBDpq3PrrjMsNO1zWeZG6R7nOcjWtaxiK5yqqoiIiKvMgT1V/uNQ+KipoLRDT10bHVFxYk/fVMiZlWJkcibFVfMa568ublY5ERHTbbp232uuqa+GmjW5VUUUNTXPaizzsiRUjR7+tUbueqJ1Ir3KiZcuekBwabRlvbVxVdckl5rKeslrqWouW2V9I+RFaqQ8kSNGsVWJtRF2q7KqrnKveAAAAAAAAAAAAAAAAAAAAAfiWJk8T45GNkjeitcxyZRyL1oqH7AHCs09Tb7nPZqp1dXYY6rguMtMxkKxuld/s+5mE3xptRNzWq5isXL3NkcndOLqy2yV1qWopaZ1Zc7e5a2hgbVupUlnY122N0iIuGPyrHZa5MOXkp06Kp78o4Z9ixLIxHLGrmuViqnNqq1VRVTq5Kqe0D7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPrGPpdI3tnRUU+6hnTork7bSv+TdymXsjX6S+jJNtLdtqok2wsxCxNtOuY081OTF+r6PYQtYx9LpG9s6Kin3UM6dFcnbaV/wAm7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACu0dPt4h3efvSuZvtdEzvt8uaSTE1UuxjOyRu7L17UfGnYWIrtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAAAAAAAAAAAAAQL/fKLTFiuN5uUroLdbqaSrqZWxukVkUbVe9yNaiudhEVcNRVXsRVA500PjBqKamqoYZLda3QVELo6x3SPqlSTc2WFqomxjXRPaj92XO3bWrGxy2A868Mu7E4Ra34i3Cy2O/w1N0vVbCyhSktdf0tYqQMarpVdAjWbVa5uVVERrUVVTmeigAAAAAAAAAAAAAAAAAAAAAAAAAAAFc0jTNtFVe7RHTUVHS09YtRSxUs6ve6KdOlc+Ri841WdahERPNVGoqY5tbYyuOhbR8QmTNp7dGtwtaxy1Cyba2XoJcxsRv04m98yrn6Ln/74FjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8AJu5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsIWsY+l0je2dFRT7qGdOiuTttK/wCTdymXsjX6S+jJNtLdtqok2wsxCxNtOuY081OTF+r6PYBLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXaOn28Q7vP3pXM32uiZ32+XNJJiaqXYxnZI3dl69qPjTsLEV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxAAAAAAAAADk37U1Jp9ImzMnqaqbPQ0lJGsksiJ85cJyRqZTLnKiZVEzlUResUVrll4g6gV3NY6Wjjaq9jflXY/tcqnTgYcVzM1bIi/rEfusJS8Q5M/cvff1cHxh5RJPVa+/q6f4xNB1ZcLg9ZLxuQvKJJ6rX39XT/GHlEk9Vr7+rp/jE0DLhcHrJeNyF5RJPVa+/q6f4w8oknqtff1dP8AGJoGXC4PWS8bkLyiSeq19/V0/wAY/EuvunifFLpO9yRvarXMfFTqjkXrRU6bmh0AMuFwesl43PJXc5dzXT8DuN2sdZyadulVb5nOj07AxkLpKSGRVWTfmRMORMRoqKuWq5Vxk9UeUST1Wvv6un+MTQMuFwesl43IXlEk9Vr7+rp/jDyiSeq19/V0/wAYmgZcLg9ZLxuQvKJJ6rX39XT/ABh5RJPVa+/q6f4xNAy4XB6yXjcheUST1Wvv6un+MPKJJ6rX39XT/GJoGXC4PWS8bkRnETnmXTd8hZ2vWCJ+PzMkVV/MhZbfcKa7UUNZSTNqKaZu5kjOpU//AJ2dhxSHw9cqT6phTlHFd3Ixvo3U8D3f2ue5fznzxMOiaJqpi0wbVvABwIAAAAAAAAAAAAABXb7ErNWaYqG09scqvqKdZ6t+2pY10SvVtP8AWVyxNVzfqtz9EsRXNVxot20nJ0dqcsd0VUfcnbZWZpahuaX0zLuxj72soFjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8AJu5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsIWsY+l0je2dFRT7qGdOiuTttK/wCTdymXsjX6S+jJNtLdtqok2wsxCxNtOuY081OTF+r6PYBLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXaOn28Q7vP3pXM32uiZ32+XNJJiaqXYxnZI3dl69qPjTsLEV2jptvEK7VHelczfa6OPvt8uaWTbLVLsYzskbuy93aj40+iWIAAAAAAAAAUSH+cDUv/Jo/wC7IXsokP8AOBqX/k0f92Q7ey/8/L94ajZLsAGF6xrdbP7qfTdusl7t1JaXaZqqmSirqaeaNzW1dM2RdrJmN6VUc1GPx5qbkVHbuX1mbMt0BkOjNfa51pxJ1nbom2Cg0xpq8toHzSwTSVVVGtPFKrUxKjWOasnz1RUVHIm1NqqtT4cd0Ze77xUsmmLpVadvtuvjattNX6cpK2OKCaBnSK3p5k6KparWvTdEqYVEymFJmgeigectB8eNeXTT3DPVV/otOpYNYV8dqfR26OdtVTSyMl2TdI96tVqui5x7ctRyee7CqfyxcW9S8RrHxIo71Jp61Jb7ddIpdNsZOy8UWzcyF8u922SN7PO3sajfOaiKvPEzQPRwPO0HEO66B4A8I/A920/baqtsVDGkd5pKutmnVtJEu2CnpflJF69yp81MclyV/U3FjWPE3h1wb1FYKui03XXPVqW6vp5YaiSJ88S1MaIqJJE5YFdC9yxu85cx82qxcs0D1SDz3r7j7qSx62m0faUt/hSz2+lqLtcZLBc7hBLUTNcqRxRUiPWJuGq7dI9Vw5ERHbXKazwr1jW6/wCH9nv1ys9RYK+rjd09uqo3sfE9r3Mdye1rtqq3c3c1FVrkXBYmJmwtYMx4ncQtRW3Wmm9E6NpbbJqG8QVFdLW3jpHUtFSw7Ec9zI1a6RznSNa1qOTtVVKXpbjxq6s1JarLeKKyNqJNa1Wl6qShjm2LFDbu+Okj3PyjnSelFRGrjCqm5WaL2HoIHn/X3dJXHQ9611blt1LVT2+92ux2VrIJ5FfLVUbahz52xI970Z8o7bEzcqNRuMrk4Nd3S+tLJofXlfU2Wmrq2x2yK40N18BXK3UNQ50qRvgfFVIx+9uUciseqKjuzCoTNA9PAyOo13rjReqNGQ6vbYXWfUVfLbpHWynma+gndCklLG6R8ipJueyaNXbG5VY8I3KoWLhDrqv4jWO73uohporW+71dNZ3wNcjpqOF/RNlfly5V72SuRURE2qzl1qtv4C9EHh7/AB3V35Y/9JTE4g8Pf47q78sf+kpjVXdV+UfeFjxXEAHmIAAAAAAAAAAAAABXdXMV1XpxyR2mTZdGLm6Lh7PkpUzT/wD97nhP91XliK7q+JZajTypT2yfZdI3Ktxdh0fycnnQemXnhE9CuAsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj6xj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ELWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACu0dPt4h3efvSuZvtdEzvt8uaSTE1UuxjOyRu7L17UfGnYWIrtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAFEh/nA1L/yaP+7IXsokP84Gpf8Ak0f92Q7ey/8APy/eGo2S7BnXEDhddNR61sWrdOalbpq+W2lnt8j5re2thqKaV0b3MVivZtcjomqjkX05RTRQfWYuyomnOFcNll4gJU17qyn1dcH1skbIuidTtfTRQLGjty7lxHu3YT52McsrStJ9zxfdP3bh/U1mu0uNJolHU9somWaOBj6V1O6BzZVSRVdLsVmJE2tTauWLuNwBMsDILP3P3gnhzw30r4e6XxOutPc+++88d99EsvmbOk+Tz0vXl2MdS5PyzgNc75rhmoNX6v8AGBlLQ11uooKa1x0UjIapEa9JZWud0u1qYb5rUReeFU2EDLAxC29z1frDR6Jltmu2x33S1BPZqe4VVmZMyWgf0aNjdF0jcSMSGNEkR3PC5aucH9p+5uqqHhxb9N0usJkuNo1E/UdqvM1Ax74pnSySK2aJHI2VFWaZFVuzk5MImOe3AZYGQV/BbU8Wp01VYdeMsupq6ghoL3O6zMnpbj0Su6KVIFlRYpGo9yIu9yYXCovbZK3WF80i2ltTtI6m1jNT00TZb1QJb446mTam5219TErXKuVVEYiJnlyL2BbcMj1Hoq8cVK6w6utT7rwz1ZYpJ6aB12pKasSoppWs6RkkUU7muYqtbheka5HMVcdSlD4f8FdSXmi1NJcLxUWjVNq1/U3u23uptWIarNJFE5/e6ubuhe18jfNf1t5OVUU9MAmWBhU/cx1F3Zqmru+s6iq1DdrtQ3yju9LQMgfbaylhSONzGbnNezCKm130F2qrl89e3qHg/qnXHDLVOldU67julReoo4YqynsrKaKja1yOVUiSVVersc8ydiYx260C5YGQ91DbK7VHDGo0zaLTc7jfrrNElsqbfEu2gqY5GSR1Es2USFrHNRd2crhURFXkaHonSdHoTR9k07b0xRWqjio4lxhXNYxG7l9q4yvtVTtgttdwIPD3+O6u/LH/AKSmJxB4e/x3V35Y/wDSUxau6r8o+8LHiuIAPMQAAAAAAAAAAAAACuavg6ao07/s1uqdl1jfmvk2ui+Tk8+H0yp1InoV3oLGV3V0Cz1enMUtvqtl0Y9Vr37XRYil8+H0yp1In1Vd6ALEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+sY+l0je2dFRT7qGdOiuTttK/5N3KZeyNfpL6Mk20t22qiTbCzELE2065jTzU5MX6vo9hC1jH0ukb2zoqKfdQzp0VydtpX/Ju5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiK7R0+3iHd5+9K5m+10TO+3y5pJMTVS7GM7JG7svXtR8adhYgAAAAAAAABR79FJpzU1ZeJYZprbXQRRySU8TpXQSR7/nNaiu2uRyc0RcK1c4yheAfbCxPZzM2vErEs7XX9jRf41L7rN9geP9j/pUvus32DRAdWkYXBPOP4rqZ34/2P8ApUvus32B4/2P+lS+6zfYNEA0jC4J5x/E1M78f7H/AEqX3Wb7A8f7H/SpfdZvsGiAaRhcE84/iamd+P8AY/6VL7rN9geP9j/pUvus32DRANIwuCecfxNTNouJOnJ5Zoo7gsksKo2VjaeVXMVURURybeSqiovPsVD6+P8AY/6VL7rN9g/vD9EbxM4opz3OuNE/C+jwfTon91f7DQxpGFwTzj+JqZ34/wBj/pUvus32B4/2P+lS+6zfYNEA0jC4J5x/E1M78f7H/SpfdZvsDx/sf9Kl91m+waIBpGFwTzj+JqZ34/2P+lS+6zfYHj/Y/wClS+6zfYNEA0jC4J5x/E1M9ZruzzO2xS1M0i9UcVFO9y/iRGZU7+iLTU26juFVWR971NyrHVjqdVRVibsZGxrlTlu2RtVcZRFVURVxlbGD5YmPFVM00Ra/vv8AtCX3AAORAAAAAAAAAAAAAAK7qunSouelkWlt9Tsum/dWybHxYpp/PgT6UnZj6jpF7CxFc1HAlTqTSeaOhqegrZqhJaqXbNTqlLMzpIW/ScqSKxfQ17lAsYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj6xj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2EPWEfS6SvbOiop91DO3ork7bSvzG7lKvZGvU5fRkmWlu21USbYWYhYm2nXMaeanJi/V9HsAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiK7R0+3iHd5+9K5m+10TO+3y5pJMTVS7GM7JG7svXtR8adhYgAAAAAAAAAAAAAAAAAAAAADPrZiyccr5TPTZHf7NTV1Oqqnny00j4p8J1rhs9J/b2duglU4gaZq7xT2662hG+MNkqFrKBsknRsnyxzJaeR2FwyVjnNzhdrtj8KrEQ6umdS0eqrWlZSdJGrXuhnpp0Rs1NM358UjUVcPavXzVF5Kiqioqh1gAAAAAAAAAAAAAAAAAAAAAAAAAAK7cIVqtd2bNFQTR01DVyrVSyJ31TyOdC1jY2fUe1ZdzuxWMT6XKxFcsjW3HVd7uXQ2yRkKR2+CspZOkqHIzLpY5VTk3bI9URnXyVV60wFjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewhaxj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxFdo6fbxDu8/elczfa6Jnfb5c0kmJqpdjGdkjd2Xr2o+NOwsQAAAAAAAAAAAAAAAAAAAAAAKlqbQLbncnXyyV79O6m6NIvCMMfSR1DGrlsdTCqo2Zic8ZVHtRztj2bnZtoAzxeKFZpFVi15Zn2OFq4S/UCuq7W9PrPkRqPpuXN3TMbG1VRElf1l6t1ypLxQw1tBVQ1tHO3fFUU0iSRyN9LXIqoqe1CSUSv4OWHv+W42KSs0ddZX9JJV6flSnbM/tdLAqOgmdy+dJG5fQqAXsGeMrOI2k3NbV0Nu13b0XCz25yW64Nb7YZHLDKvXlUliT0N58uhYeLumr3cYbXLVy2S+SqrWWi9wOoqqRUxno2SInSomU86NXt59YFzAAAAAAAAAAAAAAAAAAAAgXW8QWvoY3KklZU720tIjka+oe2Nz1Y3KomcNXmqoidqgfDUV6baaWOKKWJtzrXLT0EczHvbJOrXK1HIxFdsTaquXqRqKqqhIslrZZ7ZFTNZTtky6Wd1LAkDJZnuV8smxM4V73PevNVVXKqqq5U+Flt1TE59fXyv8I1UMLZ6aOpdLS06tbzZCitamNznrvVqPdlNy4axreqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8AJu5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsIWsY+l0je2dFRT7qGdOiuTttK/wCTdymXsjX6S+jJNtLdtqok2wsxCxNtOuY081OTF+r6PYBLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXaOn28Q7vP3pXM32uiZ32+XNJJiaqXYxnZI3dl69qPjTsLEV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxAAAAAAAAAAAAAAAAAAAAAAAAAAAAIF7sFs1Lb30F3t1JdaF6orqatgbNG5U6stciopPAGeLwpq9PIjtFapuGnWsTDLbXZuVu6846GRySMb/uwyxp7DgcQeNGo+DOh77qDWOlIKujtlLJMy42S4NWmmemEijlZKjZIVkerWJtSZEVU5rlENiM24/wCi7NxE0EzTd+pZK233GvpoVhbUzQtzvzuckb279qIrka/Ld7WKqLtQ3RROJVFEeKxrZx3IPdhW3ukbJLQXOOltGt6JqvqbfAqpFPHn+FhRyquE5IrVVVT0qinpAxvT/c/8O9LNg8FaSt1FJAmI5Yo1SRvLC+dnPNM/2nf8n2n/AMHN/Wv+0duj4XHPL8jU0UGdeT7T/wCDm/rX/aHk+0/+Dm/rX/aGj4XHPKP5LqaKDOvJ9p/8HN/Wv+0PJ9p/8HN/Wv8AtDR8LjnlH8jU0UGdeT7T/wCDm/rX/aHk+0/+Dm/rX/aGj4XHPKP5GpooM68n2n/wc39a/wC0PJ9p/wDBzf1r/tDR8LjnlH8jU0UGdeT7T/4Ob+tf9oeT7T/4Ob+tf9oaPhcc8o/kannH/tGO6L1Bwni0Xp/Rt3qLTqKoqku00tK5Uf0MSq2Njm9T2Pfu3Mcio5I8Kipk3DuWOI9z4wcMIdXX+yXGy3yqqZGTw18Ssi5NjTNHu5pTuRrcIvPej8q5U3L1JeFGkaitZWS2KlkrGN2NqH7lka3KrhHZyiZVeXtJXk+0/wDg5v61/wBoaPhcc8o/kamigzryfaf/AAc39a/7Q8n2n/wc39a/7Q0fC455R/I1NFBnXk+0/wDg5v61/wBo/qcP7AnNtCrHdjmTyNcn4lR2UGj4XHPKP5JqaICq6JuNQtVdrPUTPqUtz4+gnlcrpHRPZlqPcvNzkVHJuXmqbc5XKrajjxKJw6ss/wDvEnUAA+aAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj6xj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ELWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACu0dPt4h3efvSuZvtdEzvt8uaSTE1UuxjOyRu7L17UfGnYWIrtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUOI/8VsX5Xp//ALi3lQ4j/wAVsX5Xp/8A7jq7N31LVO1MAKPxr4nRcHeGN91bJRPuLrfAr46ViPxK9eTUc5rXbG563KmE7VQ6JmzK8Azyq4+6JttostwuFyqrdFeJJYKGOrtVXDNPLG3c9jYnRI/P1UVvnqqI3cqoh8r93ROgNLuoG3e9T25a2lirWLU2yrYkUMiqjHzKsWIEVUX+F29SkvG8aQCjau426M0PePBN3u747mtGy4JSUtFUVUrqZzntSVrYY3KrUWN+VT5vJXYRyZj3/j9oHTVFZqut1FG6C8Uq11E6jp5qpZKdMZmVImOVkabky5yIidWS3gaCDFb1x1q63j5beHGn1p6fo6WOsuNVcbVWy9IjnKvRQuYjGM+TY5eme5WblRqIrkciWuxce9Bal1RHp626hiqbnLLJBBiCVsFRJHnpGQzuYkUrm4XKMcq8l9BLwL+DOY+6E0FNPeYor1NOtm788JSQ26qfHSLSo9Z0kekStaqJG9URVy/Cbd2UzDb3TvDZ9UlNHqCWWpki6enhitdW99ZH9enRIlWob25i3IiIq9SC8bxqQOTpXVdp1vp+ivliro7laqxivgqYs4ciKqKmFRFRUVFRUVEVFRUVEVCJrjiDp7htZm3TUlzjtlG+VtPGrmukfNK75sccbEV73LhfNairyX0Fv4iwgz+1cfNCXql74o74skfhOms7kdR1DHsrKhUSGFzXRo5rlVyZyiI3PnKh3LhxG03abteLbXXaGjqrPQR3Ov74R0cdPTPV6NkdIqbMKsT+SLlMc05pleBZAZ9Y+Pug9RUt3nor4uLVRPuVXFU0VRTzNpWIqumbHJG18jEx85iOTqTtQWDj7oXU9bbKa23iafwnM2moqh1uqo6epldHJIjGTvjSNy7YpOp3W3b14Ql4Ggg49r1dabzqC9WSiq+nudmWFtfCkb0SFZWb403Km1yq3C4aqqiKmcZTPYKOdo77sdU/8NJ/ceXQpejvux1T/wANJ/ceXQ+Hau9+VP8A8w1VtAAcjIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+sY+l0je2dFRT7qGdOiuTttK/wCTdymXsjX6S+jJNtLdtqok2wsxCxNtOuY081OTF+r6PYQtYx9LpG9s6Kin3UM6dFcnbaV/ybuUy9ka/SX0ZJtpbttVEm2FmIWJtp1zGnmpyYv1fR7AJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK9SRKmv7rL3nWsR1so29+PenesmJan5NjetJG5y5e1JI/QWErtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUOI/8VsX5Xp//ALi3lQ4j/wAVsX5Xp/8A7jq7N31LVO1MM77ojS1x1rwO1vY7RAtVc621zR09Oioiyv25RqZ7VxhPapogOiYvqZYJWXKq4l8ReDN9p9L3+30dtrrklY272qWmdSuW3ORrno5vmtV7ka1y8lcioiqVnj/Qaq1RqLXliraDWdfbamyNp9MUWmkkjoKiaSF7ZnVkrFa3KSK1NkzkbsTk1yuPUIM5bjBOElmuqcV7Jdaq0XGjpPJxbKJ81ZSSRIypbUSq+FyuRMSNRUVW9eFRepUMrt1hvGjeDuhay26d1taeJlttNbBbqq02h80KotS9zaKtjcmEjeqMdl6N2p5yORev2eBlGJW/T2obvxwu9dcKGa2vr+H9DRS1sMblpoqxamqWSNknUrmb0XGc4Vq9pnOm7TqG8aJ4QcN2aKvVnvOkrzb6q63Kqoljt8MdGqrJLFUfMlWbqajMr8q7djCnrMDKPOti0jdqXueONdvWy1sVzudfqiWmpVpXpNV9K+dIXMZjL96bNqoi7kxjPI7Ft05dI+J3BWqda6xtLb9K19NVzrTvRlNK6OiRscjsYY5dj8NXCrtd6FNyAyjLO5vs1fYeH9fS3GhqbdMuoLvKyCqhdE7on18zmORrkTzXNcjkXqVFRU6zmcdqC5WrXPDTW1NYq/Ulq07WVja+gtUC1FVG2op+jZUMiTm/Y5MKjcuRHqqIpfdV8LNG67roqzUelrRfauKPoY57hRRzvYzKrtRXIqomVVce1SVpLQGmdBRVMWm7BbbDHUuR0zLdSsgSRUyiK5GomcZX+0W1WHlieS4a4vHEjUNpsF3lW16807epbTLRujr3U9PT0qybYF87fsRXIxfOVMcs8j78UNM6m4y3vidWWLTF+o6eosdk7xbc6aW3OuXe1dLPLExztro3K3kiO2uRdqqiI5FX1PZ9I2mw3m+XWgpOgr73NHUV83SPd00jImxMXCqqNwxjUw1ETlnr5nYJl3jy+mlLHq3SutLnatLcR2agptL3CkpZNXzV8qq6eFyOp4I6iV6veqsZnY1UXDcKqlv1vo6pk7lm1Mp4fBt90zZ6G8UDZmLGtNV0cTJWsVFxtzsdG5F7HuNxOBrTQli4iWmO16it7bnbmTNqFpZJHtje5ucI9Gqm9vNctdlq9qKXKKV3N1tq3cOvGe5wLTXjWFZLqKqicuVibOqdBFnr8yBsLP8AwqaofmONkMbY42tYxqI1rWphEROpEQ/RqItFhztHfdjqn/hpP7jy6FL0d92Oqf8AhpP7jy6Hw7V3vyp/+Yaq2gAORkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewhaxj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxFdo6fbxDu8/elczfa6Jnfb5c0kmJqpdjGdkjd2Xr2o+NOwsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKjxJTbbrRMvKKG60rnu7Gor9iKv/ic1PzluPlVUsNdTS09REyeCVqskikajmvaqYVFRetD64Vfs64r3LE2lwQQ3cN4GriC+XumiT5sTaxHo1PRl7XOX86qfzycp6x333iP4Z3Z8Hj9FtG9NBC8nKesd994j+GPJynrHffeI/hjNhcfpJaN6aCF5OU9Y777xH8MeTlPWO++8R/DGbC4/SS0b00ELycp6x333iP4Y8nKesd994j+GM2Fx+klo3poIXk5T1jvvvEfwyqcJtP1mtOFuj9QXLUd3S43W0UlbUpTzxpH0kkLXu2+Yvm5cuOa8u0ZsLj9JS0b14BC8nKesd994j+GPJynrHffeI/hjNhcfpK2jemgheTlPWO++8R/DHk5T1jvvvEfwxmwuP0ktG9NBC8nKesd994j+GPJynrHffeI/hjNhcfpJaN6aCF5OU9Y777xH8M/qcOWKvn6hvr29re+mNz+dGIqfmUZsHj9JLRvfPRbek1XqqZvONH00KuTq3ti3Kn5kkYv5y5kS1WqlstDHR0cXQwR5wiuVzlVVyrnOVVVzlXKq5VVVVVVVVSWcWNXGJXmj3ekWSZuAA+KAAAAAAAAAAAAAAAAAAAAAAAAAAAAADj6xj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ELWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACu0dPt4h3efvSuZvtdEzvt8uaSTE1UuxjOyRu7L17UfGnYWIrtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ93PSNTgJw4Ri7mJpy34Ve1O9o/av/Vfxmgmf9z3nyC8ON2zd4uW/Ozbtz3tH1beWPxcgNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8AJu5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsIWsY+l0je2dFRT7qGdOiuTttK/wCTdymXsjX6S+jJNtLdtqok2wsxCxNtOuY081OTF+r6PYBLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXaOn28Q7vP3pXM32uiZ32+XNJJiaqXYxnZI3dl69qPjTsLEV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM87nZqN4A8NkRzXomm7ciOaioi/wCzR80yiGhmedzsiJwA4bbVyni3bsLjGf8AZowNDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewhaxj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxFdo6fbxDu8/elczfa6Jnfb5c0kmJqpdjGdkjd2Xr2o+NOwsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFSrtWXKsq6iGxUVLPDTSOhkq62Z0bHSNVUc1jWtVXbVTCqqomcomcKRfDesf6JY/1832Drjs2JMXm0fOFsu4KR4b1j/RLH+vm+wPDesf6JY/1832C6LXvjmtl3BSPDesf6JY/1832B4b1j/RLH+vm+wNFr3xzLLuCkeG9Y/0Sx/r5vsDw3rH+iWP9fN9gaLXvjmWV/ul+Oc/c8cN01fHpqXU8DK2KmqKeKp736CN7X/Kq7Y/kjkY3GE+enPlzzPuE+6BruMug4LNFpB9ms2lbbSWxbtJXJIlVOyNrdrI0iaiea1XLhfNy1Mc+Wna8st+4jaNvOmbzbrHNbLpTPppm9PLlEcnJyZZ85q4ci+lEK9wL4aXjgLw3t2kLLT2aogplfLNVyyytkqZnrl0jkRmM9SJ6Eaidg0WvfHMs3YFI8N6x/olj/XzfYHhvWP8ARLH+vm+wNFr3xzLLuCkeG9Y/0Sx/r5vsDw3rH+iWP9fN9gaLXvjmWXcFI8N6x/olj/XzfYHhvWP9Esf6+b7A0WvfHMsu4KR4b1j/AESx/r5vsH6TV95s7e+L5QUKW1vOapoJ3udA3te5jmJlidqouUTnhcE0XE8LT84Sy6gdYORAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHH1jH0ukb2zoqKfdQzp0VydtpX/Ju5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsIWsY+l0je2dFRT7qGdOiuTttK/5N3KZeyNfpL6Mk20t22qiTbCzELE2065jTzU5MX6vo9gEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdo6fbxDu8/elczfa6Jnfb5c0kmJqpdjGdkjd2Xr2o+NOwsRXaOn28Q7vP3pXM32uiZ32+XNJJiaqXYxnZI3dl69qPjTsLEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnmhudgcvatdWqvtXvqUsBX9C/c+7+u1v+alLAexjd5V5ys7ZAAfJAEG03y336Gaa21sFfDDPJTSSU8iPa2WNytkYqp9JrkVFTsVFQj6k1Va9I0tLU3apWlhqquGhickb37ppXoyNuGoqplyomV5J2qhB1gAUAAAAAAAAAceg1dabnqe7aepqvpLxaoYKispujenRMm39Eu5U2u3dG/kiqqY54yh2CAcbWaIuj76ioip3hPyX/luOycfWf3H33+oT/wCG4+uF3lPnCxtW+zKrrPQqq5VYI8qv/ChMIVl/kag/q8f91CaeVV/dKAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5Gr40l0ne2LHRzI6hnasdxXFM7MbuUq9ka/S9mSZaW7bVRpthZiFibadcxp5qcm/7vo9hC1jH0ukb2zoqKfdQzp0VydtpX/Ju5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtHTbeIV2n70r2K+10TO+3yZpJMS1S7I2dkjd2Xr2tfEnYWIrtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzzQv3Pu/rtb/mpSwFf0L9z7v67W/5qUsB7GN3lXnKztl5q03UXiNvGrW9Tfr7dajSl7ui2iyLcZm0aJDRRyJG6JrkSRqufyY7LWq1FaiKrlWDwg09xVvD9EatbdnT2+5Niq7vUVerZa2CtppYlV3RUfejI4Hormub0b027dqq7KqeirBo+0aXdeHWyjSnW710lxrsyPek1Q9rWvfhyrjLWNTamE5dXNSs6S4C6E0LqBl5sVhS3VsayLC1lVO6CBZM7+igc9Y4s5XOxqdZzZZR5103Y36F7mLjHfrNfL/T3Wmrb9TxSuvNS/oVjrJEbIxqvVGyrhFWRMPcqqqquVL/xI0tW6F05w+uNNq3VFTdKnVtkjrZ571UdHUtmqI2TMdEj0jSNyZ+TRqNTK8jSK3gDoOvq9S1EtjcjtSRSw3WKKuqI4alJNqyO6NsiMa9ysaqvaiOXHX1lo1Bo2z6qo7dSXSj76p7dWU9wpWdK9nRzwPR8T8tVFXa5qLhcovaijLqHl2mXivxfuWt7zp6vkoa62X6ttNud41S0dPQd7ybY2zUDaR8c2URHu6R6q5H8lYmMdrXOqdXaU1PqXhyl3rW3zXb6KfT1ZHUSPWg6ZOiuSQvVdzGwNifMxG429ImMGxXvgHoLUOq5NSVtga67zSRyzyw1U8MdQ+PGx0sTHpHK5MJhXtVeSFtrtM2u5X22Xmqoop7pbGzMo6p6efAkqNSRG/8AEjWov4hlkeY7oziFxL4h6+tdira2Cn0rUQ2qgYzV01rfT/7NG9tRNG2ml75V7nK7dK5UVG428lVfS2jI73DpGyx6kkp5tQso4W3GWk/gX1CMRJHM5J5quyqck6yta04D6F4g3xbxfLC2puT4Up5p4KqemWoiTqZMkT2pK1PQ9HJjkfa72riH4RmSx37S1FaUwlPT1tiqZ5mNRETDntrGI7nnqahYiYGN8ftS1lNxMulru+pNTabt7dNd9aaj02+Zi11x3yJIjuiaqyvb8giRO81Ueq455PxpXTmpNScSdH6V1HqPUdoipeHNDV3K3W+7zwvkrunVj3Pla/fuRd2VR2XYRFVUTC9vibwR1rra9UF2ki0rdLq2h7zqK+K4XeyPTEsj2bW0070e1qSfNeudyuVHIi4TSuHPDCPSNJZa+710uoNY0dmis1Vfp5JN9TE16yYVquVPnqq7ly5e1VM2mZHnziFrLUEOqK/W2k6zUjbLatV0tmqqi46gVKKZ3fUdNUQQ29I1a6PLnN6Rzmv3IrkyiHevFtuGortx3u82t9S2STTNWklrWku8sVLR7LbDNlYc7HsV6qrmuRWrzwiKqquq3zucOHWo7jcq64acSee4zLVVDW1lQyNZ1xmdkbZEZHNy/hWI1/X53NStQdy/p/UGvtc3/WNup7zDebnBV0cDK2oazoo6aGPZURIrY5PPjcqI5HphU9KoMsjL9HWq5cXtW6wv9bf75pi6zaI09cpG2KsWk/2mSnqZNz9qZcjHbsMVdq7l3IvLH2ueqdVXDSnD/iZqm66jTQ8ml6Ka5yaVuHeslBWuVHSVc8CY6eJyOaiom7YiO8xes9N02hbHR3q83aGgSOvvFLBR1srZH4lhhR6RMRudrdqSv5tRFXPPOExUa7ubeHNzgs8FVp3p6a1UUNupqd1dU9EtNE5XRxSM6TbM1qqq4kR3WoyyNKjkbLG17HI5jkRUcnUqHJ1n9x99/qE/+G47CJhMJyQ4+s/uPvv9Qn/w3HThd5T5wsbVusv8jUH9Xj/uoTSFZf5GoP6vH/dQmnlVf3SgADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPrGPpdI3tnRUU+6hnTork7bSv8Ak3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ELWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACu0dPt4h3efvSuZvtdEzvt8uaSTE1UuxjOyRu7L17UfGnYWIrtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzzQv3Pu/rtb/mpSwHJltN20xUVMdvtrrxbZp5KmJsU7I5oXSOV72Kkio1zd7lVqovJHbceaiu+fhTUHqdcfe6T4x7NVsSqa6Zi0++I+8tTF5u7QOL4U1B6nXH3uk+MPCmoPU64+90nxjOT4o+qOqWdoHF8Kag9Trj73SfGHhTUHqdcfe6T4wyfFH1R1LO0Di+FNQep1x97pPjDwpqD1OuPvdJ8YZPij6o6lnaBxfCmoPU64+90nxjm6a1tcNX6dtd9tWlbjU2u50sVZSzLUUrOkikaj2O2ulRUyiouFRFGT4o+qOpZbAcXwpqD1OuPvdJ8YeFNQep1x97pPjDJ8UfVHUs7QOL4U1B6nXH3uk+MPCmoPU64+90nxhk+KPqjqWdoHF8Kag9Trj73SfGHhTUHqdcfe6T4wyfFH1R1LO0cfWf3H33+oT/4bj8+FNQep1x97pPjH5nt981VSy22e0SWSjqWLFU1NRUxukSNUVHJG2NzvPVOSKqojc5542rqmIoqiqqqLR746rEWlcrL/I1B/V4/7qE0/McbYo2sY1GsaiIiJ1Ih+jx5m8zLIACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+sY+l0je2dFRT7qGdOiuTttK/5N3KZeyNfpL6Mk20t22qiTbCzELE2065jTzU5MX6vo9hC1jH0ukb2zoqKfdQzp0VydtpX/Ju5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiK7R0+3iHd5+9K5m+10TO+3y5pJMTVS7GM7JG7svXtR8adhYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFB4ANVvArh21W7VTT1Ait27cf7OzswmPxYT8SF+M+7npiR8BOHDERyI3TlvREe3a5P8AZo+tMrhfZkDQQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHH1jH0ukb2zoqKfdQzp0VydtpX/ACbuUy9ka/SX0ZJtpbttVEm2FmIWJtp1zGnmpyYv1fR7CFrGPpdI3tnRUU+6hnTork7bSv8Ak3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV2jptvEK7VHelczfa6OPvt8uaWTbLVLsYzskbuy93aj40+iWIrtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ73O7kdwC4bK1counLcqLtRv/4aPsTkn4jQjP8AufN/kH4c9IsjpPF237llTD1Xvdmdyen0gaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+sY+l0je2dFRT7qGdOiuTttK/5N3KZeyNfpL6Mk20t22qiTbCzELE2065jTzU5MX6vo9hC1jH0ukb2zoqKfdQzp0VydtpX/ACbuUy9ka/SX0ZJtpbttVEm2FmIWJtp1zGnmpyYv1fR7AJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7R0+3iHd5+9K5m+10TO+3y5pJMTVS7GM7JG7svXtR8adhYiu0dPt4h3efvSuZvtdEzvt8uaSTE1UuxjOyRu7L17UfGnYWIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHHvGsLFp6dsNzvFDQTubvSKonax6tzjdtVc4zyyappqrm1MXk2uwCreVLR/rLa/emfvHlS0f6y2v3pn7z7aNjcE8pW07lpBVvKlo/wBZbX70z948qWj/AFltfvTP3jRsbgnlJady0gq3lS0f6y2v3pn7x5UtH+str96Z+8aNjcE8pLTuWkFW8qWj/WW1+9M/ePKlo/1ltfvTP3jRsbgnlJadzpam1hYdFUEddqG926w0UkqQsqbnVx00bpFRXIxHPVEVyo1y468NX0GcdzHrzS1+4QaFslo1HabndaHTtClTb6OuilqIEZDGx2+Nr3Obhyo1c9SrjJT+64s2j+PPA+9afg1Fa33imxcbX/tTP41G121vX9Nrns59W/PYUD/s/tF6Z4KcKprpf7tb6DVmoJemqYKidrZaaBiqkUTkXmi/Oeqf7zUXm0aNjcE8pLTuezQVbypaP9ZbX70z948qWj/WW1+9M/eNGxuCeUlp3LSCreVLR/rLa/emfvHlS0f6y2v3pn7xo2NwTyktO5aQVbypaP8AWW1+9M/ePKlo/wBZbX70z940bG4J5SWnctIKt5UtH+str96Z+8eVLR/rLa/emfvGjY3BPKS07lpBwbZrzTl6q2UtDfbfVVMmdkMVSxXvx14TOVx7DvHyqoqom1cWLWAAYQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewhaxj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxFdo6fbxDu8/elczfa6Jnfb5c0kmJqpdjGdkjd2Xr2o+NOwsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+Xu2Mc7GcJnBn2g8VGlLbcX+fWXKnjrqqdU86WWRiOVV6+rOETOEaiInJEQ0Cb+Bk/4VM+4dfzfaY/JdL/hNPQ7P3Vc++P3a8FhABtkAAAAAAAAAAAAAAAAAAAAARrlbqe7UclLVR9JE/24VqpzRzVTm1yLhUVOaKiKnMn6Duk960VYa+qf0tTUUMMksmMb3qxMux2ZXK4PifHhZ/Nvpj8nQf3EM4uvBn3TH2no14LSADzmQAAAAAAAAAAAAAAAAAAAAAAAAAAAAByNYR9LpK9s6Kin3UM7eiuTttK/MbvNlXsjXqcvoyTLS3baqJNsLMQsTbTrmNPNTkxfq+j2ELWMfS6RvbOiop91DOnRXJ22lf8AJu5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiK7R0+3iHd5+9K5m+10TO+3y5pJMTVS7GM7JG7svXtR8adhYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8TfwMn/Cpn3Dr+b7TH5Lpf8JpoM38DJ/wqZ9w6/m+0x+S6X/Caehgd1V5x9pa8FhMTf3Rsto4r2/Rt+sNvtzLlcHW6kmptQU9XWI/a50T5qRqI+JkiM5Oy7CuajkRVNsPMll7nTW9mg0vbWS6UdQ6e1Ml/W5fL9/3fMsiuWd2zEcmyZ3NFk3OaxMtQVX8GVlp+6UujqN17qdELTaSg1C/TtVdPCrHSxyJWLSsmbB0fnRq/Zuy5rkVyojXIiOd2tOca75rLWOqrTY9HQ1VvsFZU26arnvMcVQtRFGrm7qbo1c2KR21rZNyqqO3bcIpxKngRf5uDN50i2stqXKt1S6+RyrLJ0KQLdm1m1V2Z39G1UxhU3cs45ky4cJ9W6g432XVtYzTNporRVzPZc7T07bncKR0bmMpKhqtRitRXNcq7nc2Jta0n9Qkab7puwagq+GVG6mkpazW1HLUNjV+5KCWNvOGRdqZVZGyxovLLo15dhwbr3XFuobHaauO226GqvdZXstTbtfIrfSzUVNMsXfck8jcR9IuFbG1r3Ki5TKIqp8aruTo0sHFCnorokF01BXd+2GrRzk8EKyRaqFjVRMsRKuWdy7Otr07eR2r/AMCbnp6fQV00DLakuWlLW6xrQXxr0pa6jc2PKOexrnMejomvRyNdlVXJP6hzKXusobvpmzVtm0029XWu1N4rTUNFdoZYY6had8zZY6hiKyWJURnnebhHOVUy3au36eqrpWWammvVBT2u5uRempKWqWpjjXcuNsisYrsphfmp147Mmb3jh3qvVcHDuquzrDS3Oxaj8MV8dt6VkCwpBURNZFuaqvenSx5V21Fw5eXJCzag4u6f0zd6i21sV9dVQbd60enLjVRc2o5NssUDmO5KnU5cLlF5oqGovG0cPW/Fq92LibQ6I09pJmobnWWeW7tnmuSUkMTWTNjVsi9G9URdyYciOXKtTbhVcnA4i90dUcLdYQW6+6ftsNnkqKaDvtuoqfv5ySuYzpo6JWpI+Nr34Vco7DXO24Q71gtD9YcYKLiJb5HssTNPT2VYK+jqaOr6daqKXd0M0TFRm1ipletcYRU5mba27nPWt4h1/bbVNpZ1JqW7tvTbzcUndcEVj4pI6RyNYqNja6JGo9HLtYq4jypJmfAWPiZ3Sdz0cmtaqx6M8P2XSDo4Lrcprm2lRk742P2xx9G9z2sbJGr3clTK7Udg3SJyvjY5cIqoirtXKfmU8S8ebhR6b4u6vkqZLPc6etbRVNXott2uFHLd5YoWK1vQtpXx1L1ciNRWva1Uaxr25Ryr6Y8uunIfk6uh1NTVTPNlhTS1zlSN6fObvZTq12Fym5qqi9aKqCKtc3kVTif3Rd00bU628AaMXUlDo2njlvNZLcm0vRvkiSVGRM2OWTbG5rnLluEXCblTB1XcZr9cuJVTo+w6QgustLbaG6T3GW7dBTsinc9FT+Bc5XJsy1Mecm7OzHPzzx21BaGcS9QXVlVb6i23igo5qrStbW3O0VV5SNmWMkp+9HJM9eTERHM81Gte3rVfS2gtJXLykXvXVTBHb6G/2K1QRW2RXJU0skXTvkZI3ajUx0zUTCrza7knLMiZmRXX90bLaOK9v0bfrDb7cy5XB1upJqbUFPV1iP2udE+akaiPiZIjOTsuwrmo5EVSFWd0ne6C3ap1BLoPfo/TV6q7TcbjBd2vqWxwTdG+oZTrEm5qJ5yt3oqc8bsZWu2XudNb2aDS9tZLpR1Dp7UyX9bl8v3/AHfMsiuWd2zEcmyZ3NFk3OaxMtQ4eltD674m6b4n6St1VYbZo+7a0vNPcLhK6Z1xjhWrXpWRRo3o1VzUVEc5yY3LyXrJeoWKq4w6s0hxL4yVtBp+q1hpuyut9bJuu7YWUVN4OikkSmjcjtzl8+RWpsRfrKq4PRNmu1NfrPQ3OjeslJWwR1ML1TCuY9qOauPxKhlj+Dl0jfxkbTz0McGsKOGltjFkf8jstzaX5bzPNTemfN3eb7eRoehLHPpjRGnrNVPjkqrdbqeklfCqqxz44mscrVVEVUyi4yifiNxcdw+PCz+bfTH5Og/uIfY+PCz+bfTH5Og/uIXF7mfOPtLXgtIAPOZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHH1jH0ukb2zoqKfdQzp0VydtpX/Ju5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsIWsY+l0je2dFRT7qGdOiuTttK/5N3KZeyNfpL6Mk20t22qiTbCzELE2065jTzU5MX6vo9gEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdo6fbxDu8/elczfa6Jnfb5c0kmJqpdjGdkjd2Xr2o+NOwsRXaOn28Q7vP3pXM32uiZ32+XNJJiaqXYxnZI3dl69qPjTsLEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfib+Bk/wCFTPuHX832mPyXS/4TTQnt3sc3qymDPNCPZTaat9peqR19rgjoqqmc7z4pI2I1cpy5LhHIuMOa5rkyiop6HZ+6rj3x+7XgsQANsgAAAAAAAAAAAAAAAAAAAAAfHhZ/Nvpj8nQf3EPjdbtS2WjfUVcqRsTk1qc3yOXkjGNTm5yqqIjUyqqqIiZU6ehrVPY9GWO31LejqaaihilYjt216MRFTKdeFyme0zi6sHX4zHpE9WvB3AAecyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPrGPpdI3tnRUU+6hnTork7bSv+TdymXsjX6S+jJNtLdtqok2wsxCxNtOuY081OTF+r6PYQtYx9LpG9s6Kin3UM6dFcnbaV/ybuUy9ka/SX0ZJtpbttVEm2FmIWJtp1zGnmpyYv1fR7AJYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK7R0+3iHd5+9K5m+10TO+3y5pJMTVS7GM7JG7svXtR8adhYiu0dPt4h3efvSuZvtdEzvt8uaSTE1UuxjOyRu7L17UfGnYWIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKvGlLJqJ7X3Wz2+5ua3a11ZSslVEznCbkXlnmdUGqaqqJvTNpNir+SzRfqhYf2ZD9keSzRfqhYf2ZD9ktAPtpGNxzzlrNO9V/JZov1QsP7Mh+yPJZov1QsP7Mh+yWgDSMbjnnJmneq/ks0X6oWH9mQ/ZHks0X6oWH9mQ/ZLQBpGNxzzkzTvVfyWaL9ULD+zIfsjyWaL9ULD+zIfsloA0jG455yZp3qv5LNF+qFh/ZkP2SjcC+HWlbnwU0DWV2nLPcK2ew0Ms9XU0MMks71p2K5734Xc5VVVVcrlV61NhKB3Pznu4EcOleu566dt6uXzua97s+tz/t5+kaRjcc85M073X8lmi/VCw/syH7I8lmi/VCw/syH7JaANIxuOecmad6r+SzRfqhYf2ZD9keSzRfqhYf2ZD9ktAGkY3HPOTNO9V/JZov1QsP7Mh+yPJZov1QsP7Mh+yWgDSMbjnnJmneq/ks0X6oWH9mQ/ZHks0X6oWH9mQ/ZLQBpGNxzzkzTvcW06J07YaltRbLBbLdUNziWko44nJlMLza1F5odoA+VVdVc3qm8s7QAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcfWMfS6RvbOiop91DOnRXJ22lf8m7lMvZGv0l9GSbaW7bVRJthZiFibadcxp5qcmL9X0ewhaxj6XSN7Z0VFPuoZ06K5O20r/k3cpl7I1+kvoyTbS3baqJNsLMQsTbTrmNPNTkxfq+j2ASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxFepIlTX91l7zrWI62Ube/HvTvWTEtT8mxvWkjc5cvakkfoLCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz7uemq3gLw4R0XQOTTlvRYsKmxe9o+XPny9poJn3c8sWLgHw3YrHxK3TlvTZJ85v+zR8l5Jz/ADAaCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+sY+l0je2dFRT7qGdOiuTttK/5N3KZeyNfpL6Mk20t22qiTbCzELE2065jTzU5MX6vo9hC1jH0ukb2zoqKfdQzp0VydtpX/Ju5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArtHT7eId3n70rmb7XRM77fLmkkxNVLsYzskbuy9e1Hxp2FiK7R0+3iHd5+9K5m+10TO+3y5pJMTVS7GM7JG7svXtR8adhYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGf9z43ZwG4ctRrWomnbem1iORE/2ePq3c8fj5+kr3dW8StacIOD9dq7RFutl0rbZPHJWwXSKSViUi5a97WxyMXc1yxrnOEaj+Xama/9ntxM1zxM4Sxv1BQWmh0vY4aey2d9HTysqKroI0a98jnSuaqIiMTzWoiuV3VjAHqsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABx9Yx9LpG9s6Kin3UM6dFcnbaV/ybuUy9ka/SX0ZJtpbttVEm2FmIWJtp1zGnmpyYv1fR7CFrGPpdI3tnRUU+6hnTork7bSv+TdymXsjX6S+jJNtLdtqok2wsxCxNtOuY081OTF+r6PYBLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXaOn28Q7vP3pXM32uiZ32+XNJJiaqXYxnZI3dl69qPjTsLEV2jp9vEO7z96VzN9romd9vlzSSYmql2MZ2SN3Zevaj407CxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFIrLpdNR3GtioLlJZqCjmdTdLTxRvmmkannr8oxzWtRVwmEVVVFXKdR8PA179db3+ooP8ATHz0h8y9/lit/wAZx3z2arYc5KYjV7on7w1M2mzieBr3663v9RQf6YeBr3663v8AUUH+mO2DPtPhj6aehdxPA179db3+ooP9MPA179db3+ooP9MdsD2nwx9NPQu4nga9+ut7/UUH+mHga9+ut7/UUH+mO2B7T4Y+mnoXcTwNe/XW9/qKD/TDwNe/XW9/qKD/AEx2wPafDH009C6tXXSVxvdsrLdX6uvFVQ1kL6eeCSnoFbJG9qtc1f8AZupUVUObonhf5OdLW/TenNTXi12W3sWOmpI4qJyMRXK5fOdTq5VVVVVVVVVVS7ge0+GPpp6F3E8DXv11vf6ig/0w8DXv11vf6ig/0x2wPafDH009C7ieBr3663v9RQf6YeBr3663v9RQf6Y7YHtPhj6aehdxPA179db3+ooP9MPA179db3+ooP8ATHbA9p8MfTT0LuJ4Gvfrre/1FB/ph4Gvfrre/wBRQf6Y7YHtPhj6aehdxPA179db3+ooP9Mfya43jSMSV9TeKi90EaolTFWQwtkaxVwr2OijYmW5RcKioqIvNF5ncK5xH+4K/f1OT/obotiVxRVTFpm2yP2gibzZowAPFZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHH1jH0ukb2zoqKfdQzp0VydtpX/Ju5TL2Rr9JfRkm2lu21USbYWYhYm2nXMaeanJi/V9HsIesI+l0le2dFRT7qGdOiuLttM/5N3myr2Rr1OX0ZJlpbttVG3bCzELE2065jTzU5NX6vo9gEsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdo6fbxDu8/elczfa6Jnfb5c0kmJqpdjGdkjd2Xr2o+NOwsRXaOn28Q7vP3pXM32uiZ32+XNJJiaqXYxnZI3dl69qPiTsLEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZ7pD5l7/LFb/jOO+cDSHzL3+WK3/Gcd89jF/vlqraA856S0LbL5xu42X+e1xXe+Wq50MlpZV5eynqG2yBzXxtXk16u2oruvDUTJmfAzQsmsaLQmrk15peg1bUV0VTXTJS1Db3Vzscrqqjnc+tw/LWyNVnRIiNTLWtREOfMy9f6b1hatWyXhlrqFqFtNfJbKtVjczZUMa1z2plEzje3mnL0H71TqDxXsk1xS2XC79G+Nnedqg6aodvkazLWZTKN3bnc+TWuXsPK+ltJ6N0/o/ujpKS22qg1NDVX6kj2MYyqbRuo2SNYifO6NVy5Ozkq9h99fcJ9Kae7k+y3alstMt5f4uVctzlbvqZZ++qdnSOkXmq7Z5Wp6GvVEwnImabD1uDxrrLTy8SeL3E+HVOotK2aazTRR29mp6eodLRUK07HMqKV7KyFsaK9ZFV6NVyOTm7GGp0tbWLUvDC6N0vQ3Ga9V/E6y0dldeo41REucKMgqKxyIq7d9G98ucrl1N18xm9w9cA8b6r0PS3zjNqXSFzuWlbTYtM2e2xaet+q6aokjZRdBiSem6Orgajkka5rpMK5NrOaIeneFFlrNPcONO26v1Amqqino2M8MtRcVbOtj8q5yr5qt85XLnGc8yxNxayt6E15b+IVsrq63Q1MMNHcau2SNqmta5ZaeZ0T1Ta5fNVzVVF68YyidRkPFulsWre6G03pfXk0Xif4vz19BQVs6w0tbcUnax+/miSOjiVFaxc43uXBkOiKGx1lBoLTVyqI04Z1usdTRzxyVS96Vckcsi0MUsm7z2LiRyI5yo9WNzkk1ax7gB4iqK6gprzVaSiuUlNwRXXsdukqYqxzaZrFt6Svo+lR3m061eGqiORqZ25TODSte2PQuiW8MotHLbKKy0vEGlfWtoalHwU0z6KoaiO85Ujzui83kmXouMuyrMPSYPGfFWtodRap4xto61tTTrqDR1NJNRVCorXJOxr2o9i5a5OaZRUVF9Coda58FdFeUjjDaGWGCG1W/TNHcKKiic9sNLVSMqkfURMRdrJV6GPz0TPm9fNcsw9bA8QQeEeLOotF2/Vt609HSu0DaLpQRavpp6inq5pI1WqnYjKmFFmR2xFV25yNwqbearcLNwyoa7X3CPTOpLxTa/tSadvUzKprnrS1cC1FK+Fiosj+ljY1zEbvc9F2MXmqIozX8B6V1JrC1aSfaGXOoWB92r47ZRtbG53SVD2uc1vJOXJj1yuE5enB2jxLctOWC56A0PQ6ho6Wuslh4q1tihdc0SRlPb+nqmNhc5+fk8thbhVx5rE7ELdxOs2ltDcUbZrF7LFqqwUzbRbqezR3Doq6w4mRkEtFG1218ble1XR4aqozkqplBmHqwrnEf7gr9/U5P+hYyucR/uCv39Tk/wCh1YHe0ecfdqnbDRgAeMyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOPrGPpdI3xnRUc+6hnb0Vxdtpn5jd5sq9jF6nL6Mk20t22qibthZiFibadcxp5qcmr9X0ewh6wi6bSV7j6Ckqd9DO3oLg7bTyZjd5sq9jF6nL6Mky0t2WqjbsijxCxNkC5jb5qcmr2p6PYBLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXaOn28Q7tP3pXt32uiZ30+XNJJiaqXZGzskbuy9e1r4k7CxFco4EbxDu83etwarrVRM76kfmjfiaqXZG3slbuy9e1r4vQWMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAz3SHzL3+WK3/Gcd84Okk2pe0XrS71iqnozK5U/8lQ7x7GL/AHy1VtQ6OzW+31ldV0tDTU1XXPbJVzwwtZJUPa1GNdI5Ey9Ua1rUVc4RETqQ5lPw/wBL0mo5dQQabtEN+lVVkusdBE2qeq8lzKjdy5/Gd8HxZcGt0Bpi5XeputXpu0VV0qYHUs9bPQxPnlhc3a6Nz1bucxWqrVaq4VFwTavTdpuFmZaKq10VTao0jRlBNTsfA1I3NdGiRqm1NqtareXJWoqdSHRAHB1DoDTGraylq75py0Xqrpf4vPcKGKd8PPPmOe1Vbz9B15qCmqJKaSWnikkpXrJA97EVYXK1zFcxfortc5uU7HKnUp9wBw9S6E01rN1M7UGnrVfVplV0C3KiiqOiVetW72rt6k6jj33Ql8uNxdNbNfXrTlDsYyK22+it74Yka1E81ZaZ7+eM4Vy9fLCci6AWFRZw3t92sUds1g+PX6RTrPHNqG30kisXHLDI4WMTHPC7c8+snv4faWksE1ifpq0Osk0jppLa6giWme9ztznOj27VVXLlVVMqvM74Fhx2aOsEenPF9ljtrLDs6PwW2kjSl2Zzt6LG3GeeMEWn4caTo9OzWCDS9lgsM65ltcdvhbSyLy5uiRu1epOtOwsQFhXKXhvpKhpZKam0tZaemkdA98MVvhaxzoVzCqojcKsa82/VXqwdN2nrU+srqt1so3VdfC2mq51gYslRE3dtjkdjL2pvfhq5RNy+lToACvXbh1pS/Wi32q56Ys1xtdva1lHRVdvilhpmtajWpGxzVaxEREREREwiIh0IdN2inq6GqitdFHU0MDqakmZTsR9PE7bujjdjLWrsblqYRdqehDogDi1GidO1dorbTPYLZNa62Z9RVUMlHG6Cole7e98jFbtc5zvOVVRVVea8yHFww0bBcLfXR6SscddbmNjo6ltthSSma35rY3bcsROxG4wWYC0AVziP9wV+/qcn/QsZXOIqK7Qt9anW6ke1Mr1qqYQ++B3tHnH3ap2w0YAHjMgAAAAAAAAAAAAAAAAAAAAAAAAAAAADj6xiWfSN7ibBSVTn0M7UguDttPIqxu82Vexi9Tl9GSbaWqy1UTVZFGqQsTZAuY2+anJq+j0ewh6wg760le4VhpKlJKGdnQ179lPJmNybZXdjF6nL2JkmWlnR2qjZsij2wsTZAuY2+anJq9qej2ASwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAV2jiROId3l71uDVda6JvfUj80b8TVXmRt7JW5y9e1r4vQWIrtHC5OIV2l73uLWutdE1KiSTNE9Umql2xt7JUzl69rXRegsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAABVrtpKtS4T1tkuENBJUruqKerp3TwyPRMb2oj2KxyoiZwqouE5ZyqwvF/WH4Wsf7Om+OXYHVHacSItqn5Qt1J8X9Yfhax/s6b45+X2HV0bHOdeLE1rUyrlt0yIifrzspqyK4VHQ2WDw10NwWgrZYJWtjo3NbukVznL5yt5NVrNy73YXbhyt+dHpaeuSgqdQ1iXO4UqzqjaVJKekVJUVu10G9ySbWeaiybutypt3YTWlYnu5R0W6msqdY3SRI7JV2W6RyUbKyC495SsoJUc7DWpMk7lcqojneY1yYRMqm5ue8mn9YY53ax5/J03xy6sY2NjWtajWtTCNRMIiH6GlYnu5R0LqT4v6w/C1j/Z03xx4v6w/C1j/Z03xy7AaVie7lHQupPi/rD8LWP9nTfHHi/rD8LWP9nTfHLsBpWJ7uUdC6k+L+sPwtY/2dN8ceL+sPwtY/2dN8cuwGlYnu5R0LqT4v6w/C1j/Z03xx4v6w/C1j/Z03xy7AaVie7lHQupPi/rD8LWP9nTfHHi/rD8LWP9nTfHLsBpWJ7uUdC6k+L+sPwtY/2dN8c40kOu6Kvpqasfaejqp5Y46qjt800UTGt3NdNmZro1dhyckc1FTCu85M6eBpWJ7uUdC6gW2h1JeaCnrrfqHTtdRVDElhqaailkjlYvNHNclQqKi+lCT4v6w/C1j/AGdN8c7NbpWNKiorrVO+13R1HJSRSNV76ZiufvR7qfcjHuR6qu7k7DnJuTcpHqNVyaapqqbU0cVvoKSGndJemuRKWR71Rj/N3K+JGvVFVX+ajXIu9cO2tKxPdyjoXc7xf1h+FrH+zpvjn2pdHXOvniW/XKlqqSJ7ZO9KGldC2V7Vy3pHOkermouF2pjKpzVUVWlwBJ7ViTuj5QlwAHIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4+sYUqNI3yJ0FLVNfQztWCtk6OCRFjcm2R30WL1KvYiqTbSxI7VRNRkcSNhYmyF25jfNTk1e1PQpD1fTpV6TvUCwUtUktDOxYK6RY4JMxuTbI5PmsXqVexMky1R9Fa6NiMjjRsLE2Qu3Mb5qcmr2p6FAlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr1JTubxAu0/RXJGvtdGxJZJEWhcqS1Sq2NnWkqbkV69rVhTsLCVyjicnES7ydDc0Y61UTUmkkzQuVJqrLYm9kqZRXr2tdD6CxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAOLLeJ7hdUorU6F/elQ1txlnjkxGxWK7ZGuNr5FXYipu81HZXntRwfq7alp7fUT0FMiXG+No31sVqhkY2aVjVRqL5yo1qK5UajnKiZz6FxFm01Uag76bf546m3zLTyRWuBHMZA6PznI+RFRZkc/rRUa1Wtais+crunZbNT2K3wUlO6WVsTNizVMrpZpOaqqve5VVyqrnLlV61UngAAAAAAAAAAAAAAAAAAAAAAAAcGXTDqKqfU2WrS1y1NdHV1rHxrNFUNRNsjUYrkSNzm4XczHnNa5Ud5yO/VBqhnfFFQ3aJlnu9Y+dlPRyTtf3wkS83RuT5yKxUfjCOxnLU2ux3D41dJDXQPhnYkkb2q1U6lwqKi4VOaclVMp6QPsCuR1UmkXQU1dOslkbHT0tLVyrLNUJLzYvTvVFyi4YvSuVMuc5HdirYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAADkawiSfSV7jWGkqEfQzt6G4P2U8mY3ebK7sYvU5exMky0t2WqjbsijxCxNkC5jb5qcmr2p6PYZv3QHHHRXBnSjmawuUNCt4p6mnoYaqjqZ4KmRsfOORYY3q1q72oucZRVxnCk7gpxu0XxqsE1Roy5+E6e2pFT1Lo6Kpp4opFblGMWaNm7CJ2ZwmM4ygGigAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAr1JCqcQLtL3tcWo610be+JJM0b8S1S7I29krc5eva18XoLCeZdP8Ads8E7xxTqYaHVdxqK+40lFb6dqWyudDNKk1RiKOHoNzZEWVNzlREcjo0Rcsdj00AAAAAAAAAAAAAAAAAAAAAAAAAAAHN1Jdn2LT1zuUdFWXKSkppJ20VvjSSonVrVVI42ryV7sYRF5ZVMn1sls8C2ijoVq6qvWnibGtVWydJNMqJze92ERXKvNcIic+SImEMk7pLj/w/4SaeqbNrK+XSzVd1oZHUiWqmn74lRPNXoZ2xrGyRF+s5MZRV5Khd+FnF7SXGrTkt+0ZdXXi0xVLqR1StLNTp0rWtc5qNlYxVwj280THWmcouAuIAAAAAAAAAAAAAAAAAAAAAAAAAAAAD8yMSWNzFVURyKiq1ytX8ypzT8xw9EzSO0/FTSsuiPoZZaDprwje+ahIZHRpO5WoiOSRGo9HYTKORVRFyfzXeurJw00ncNTajrHW+yW9rX1NS2CSZY2ucjEXZG1zl5uTqRcda8kUyPgR3UnC7idqCt01pTUt0u95qa2srGU9fRVKqke9XK5sixIyOLHzGuVFRFa1UzyA3sAAAAAAAAAAAAAAAAqtZxBp4qmSKhtdzvLYnKx89DEzokcnJUR8j2I7C8l25RFRUzlFROzqKeSl0/c5onKyWOlle1ydaKjFVFKzpaJsOmLRGxu1jKOFrUTsRGIduDh0zTNdcX8Fje+3lDm9U79+jTfHHlDm9U79+jTfHJwPtlwuD1nqt43IPlDm9U79+jTfHHlDm9U79+jTfHJwGXC4PWepeNyD5Q5vVO/fo03xx5Q5vVO/fo03xycBlwuD1nqXjcg+UOb1Tv36NN8ceUOb1Tv36NN8cnAZcLg9Z6l43MW7qTRq90JwhuemGaWu9PdmubVWyqnSnRkVQzq3KkyrtciuauEX52cLgn9zjpyPgLwismkodK3mWshYs9wqYm022eqfzkcirMiqicmoqoi7WtyhrQGXC4PWepeNyD5Q5vVO/fo03xx5Q5vVO/fo03xycBlwuD1nqXjcg+UOb1Tv36NN8ceUOb1Tv36NN8cnAZcLg9Z6l43IPlDm9U79+jTfHHlDm9U79+jTfHJwGXC4PWepeNyD5Q5vVO/fo03xx5Q5vVO/fo03xycBlwuD1nqXjc+dBr2mqauCnrbdcLO6dyRxPro2dG56rhrNzHuRFXqTKplVRE5qiLZzPtfIniNqFVTKtt8705qmFSNyouU6lRURS+Ur1kponuXLnMRVX24Phj4dNNMV0xa945W6pOy76gA40AAAOBedZUtprXUcVLV3StY1HSQUMbXLEiplu9znNa1VxyRVz+Y75n+knrLFeJXc5H3etRy+nbO9jf7Gtan5jrwMOmqJqq2Qsb0/yhzeqd+/Rpvjjyhzeqd+/Rpvjk4HRlwuD1nqt43IPlDm9U79+jTfHHlDm9U79+jTfHJwGXC4PWepeNyD5Q5vVO/fo03xx5Q5vVO/fo03xycBlwuD1nqXjcg+UOb1Tv36NN8ceUOb1Tv36NN8cnAZcLg9Z6l43PJWju5nptL91nd+KPitcnadejq63WxrafpIa+TlI5W9LtRjVV7m4Xkrk5ebz9T+UOb1Tv36NN8cnAZcLg9Z6l43IPlDm9U79+jTfHHlDm9U79+jTfHJwGXC4PWepeNyD5Q5vVO/fo03xx5Q5vVO/fo03xycBlwuD1nqXjcg+UOb1Tv36NN8ceUOb1Tv36NN8cnAZcLg9Z6l43IPlDm9U79+jTfHOvY9V0l8qJaVIaihro29I6krGIyRWZxvbhVRzc8stVcZTOMpmMcW7P6LVejnNTDpLjLCq/wC4tHUOVP7WNX8wnCw64mIptNpnx8Iv4mqV9AB5jIAAABXOJFTJR8O9U1ETtssVqqpGKi4wqQuVDeHR7SuKI8Zssa5RpuIlO5z1t9pud4ga5WpU0ccaRPwqoqtdI9u5Mp1plF7FVD5eUOb1Tv36NN8clwQspoI4o2oyONqNa1OpERMIh+z0MuFGyj1lbxuQfKHN6p379Gm+OPKHN6p379Gm+OTgMuFwes9S8bkHyhzeqd+/Rpvjjyhzeqd+/Rpvjk4DLhcHrPUvG55+7r/htN3SHC7wPQ6XulLqOgqG1Vsq6tKdsbXLykY5ySuVGub6E62tL/wZo6bg3wx0/pC3aTvjorbTIyWZrKZOmmXzpJF+X+k9XLz6kwnYaEBlwuD1nqXjcg+UOb1Tv36NN8ceUOb1Tv36NN8cnAZcLg9Z6l43IPlDm9U79+jTfHHlDm9U79+jTfHJwGXC4PWepeNyD5Q5vVO/fo03xybadc01xrYqSqoK+z1Ey4hbXxtRsq9e1r2Oc3djK7VVFVEXCLhcf0r+vXrFpWrlauJIXwysVF+a5srHNX8yoimqcLDxJiiKbX98kWnU0MAHlMgAAAACuXbXFNbq2SjpqGvu9TDhJm0ETVbEqplGue9zW7sYXaiqqIqKqIipmD5Q5vVO/fo03xzm6EesumoZXc5JZ6iR6+lzp3qq/nVVLAerVhYeHM0TTe3vlrVGpB8oc3qnfv0ab448oc3qnfv0ab45OBnLhcHrPUvG5B8oc3qnfv0ab448oc3qnfv0ab45OAy4XB6z1LxuQfKHN6p379Gm+OPKHN6p379Gm+OTgMuFwes9S8bkHyhzeqd+/Rpvjjyhzeqd+/Rpvjk4DLhcHrPUvG5wNR6kp9V2C42W56NvlTbrhTvpaiJzabzo3tVrk/h/QvWeee454DS9zTJquuuWnrpdLvc6lYKSpp2069HQNXLGrmVMPcvNyJlPMbhVPUoGXC4PWepeNyD5Q5vVO/fo03xx5Q5vVO/fo03xycBlwuD1nqXjcg+UOb1Tv36NN8ceUOb1Tv36NN8cnAZcLg9Z6l43IPlDm9U79+jTfHHlDm9U79+jTfHJwGXC4PWepeNyD5Q5vVO/fo03xx5Q5vVO/fo03xycBlwuD1nqXjcg+UOb1Tv36NN8c/TOIT1X5TTF8hYnW9Y4HY/M2VVX8yEwDLhcHrPVLxudm2XOlvNBDW0UyT00qZY9EVO3CoqLzRUVFRUXmioqLhUJRUNAuxcdWxImI47q3ano3UlO5f7Vcq/nLecWNRGHXNMf+vFyYs5eqvuYvH9Tm/uKV7TX3OWr+qRf3ELDqr7mLx/U5v7ile019zlq/qkX9xDrwe5nz/Y8HSAPOmi+6Nvdw4tWLTNwq9OX603uoq6SGs09SVrWUs0MT5URamVFhqEVI3NXo1RWrjlgTMQj0WDzlY+PGvJtOWDWFxotO+LFdqVdPz0dNHOlW1i1z6NtQj1erEw9Gqse12UyqOTO1Orpji7rfV+udaWGB+lrTXWmStgorBcY6hLlI1jVSmqlVXtbLDI7aq7EREa7G/JM0DeAefdL91dS3u88OqSpoo6ekv1p74vNbzSO11rkekUDlVfNRz6WsZh3PLGc+fOv/wDem1NcaTTdLS0FDb7re6CbUDZpLLcbjHT211Q+OjasNKjnulkY3c56uYxMckXKIM0D1EDzpScfNe39vD+32/T1Ba71f7pcbZVOvFJVww7aaF0jaqFknRy9G5qI7Y9qKvzMtXzk36ysuEdpo23aamqLmkTUqZaKJ0ULpMecrGOc5zW56kVyr7SxNxNBhfdAcar/AMMbp0VjuGmpFhtrrg+0VtHXVdfUI1XbsJTIqQRqjURJZEVu7dnCNyfzxym1Txl4OXRbfbnWq/6drrjQvkbN37RPWGnfI3ekiRua9ssSYWNVRWKqLz5TNGwbqD+P3bHbVRHY5KvVk8uaM4l6q0/Z6K3Wq2abhv174hXax10yRVTaR0rGzvfVNY6Z70VXwo5WbsKmWpszuSzNh6kB5luHHfibp/Tuu75caTSlRRaFuaUVzjpoalklxj2xSOfDukVIFSOZvJ3SZci9SYzaLxxH4lXHW/Eq26Yi0x3hpBaVYoLlT1Cz1vSUbJ3M6RkqNYuXKiO2r1plvLKzNA3IHnLXHdJXZulNLah0vWadpW3ixtvLbLdKOtrq+TKZVqNpU+TjT5vTORW7kXlhDtw8b9ScQqzR1o0Jb7XRXS9abh1TW1V+6SWCippVRscTWRKx0kjn70zuaiIxV55RBmgbkDzzqqt4nJx34bW5l8sNFNPY7jNV0rKWqlo5JGS06SO2dOxVXa9iMVebFWTO5HJj0MWJuODr77hNR/k2p/wnF6ov4nB/y2/9Ci6++4TUf5Nqf8JxeqL+Jwf8tv8A0Jj9zT5z9oa8H3AB57IAABnujf4pdfyxcP8ANSGhGe6N/il1/LFw/wA1Id/Z+7r+X7tRsl3wDznxp7o298KtW3FKer05dbPbH0zquzwUlbNcWRSKxHOknjRYKd3nOVrZE85ETnlyIamba5ZejAYJrDi7xBpr9xVZYKXTngvQscNUrbhHO6euY6hZUviRWPRsbvn4fhyc2orOSuX+v47ahu/FGxWOiWwacstzt9BcKN2oWz9Nd2z+dNHSyMc2NJIm4TY5HOcqpyRFykzQN6B5zvndS12jLZU097tlPUX+3arntNwgoo3tbFbIkSd9fsVyqjUpXxOXK43O9HI++sO6XuNhdqSWhoaSrpPGOHS1ikSmqJ1kqWwLLWTSthR75I41RzUbEzcqxqmeeWs0D0KDzFXd0trWzaB1tcJrDTV1yskdDPQXFbNcLbQ1vT1LYXwrFVIyRsjM5y17mrvavYqHoDR8epmW2VdVT2qavfKro22iCWOKKNWtwxyyPcr3I7d56I1FTHmoWJuO6DOOK/EO9acvuk9K6Wo6Gp1NqWWoSnmujnpSUsEEaPmlkRmHPVNzGoxFTKv60RDN+KKa+j1pwYbVv05Pq3w3cWwSwMnjoNi26dN7mK5z8o3cuxHc1RE3JnKJqsPR4PL/ABD4makvvCDVUF/tenqq5aZ1VQ2i8U/R1K0tbE+eldFLBtmY+JyLPE7DnPT5NyKiovKyaSvesafuieKj62/W52lLTDb5p6OWlnfJHAtPO9iQL02yN2Uy9dio/sRpM2sb4DI+Eus+IvEilsurKql05a9GXeNaqC3bZ33KOmc1Vhe6Xd0aud5iq1GIiI5fOVUwZL3O2vtZ6F4V8IPCNLY59G3ypZZImU3TeEIJJOmWKZz1Xo3NVzFRWI1Fajk853MZh62B5zuPdG3uxcWqCyTVenL5YqzUDbC+Kz0latRROkcrY1lq1RadZEXbviTDkyuM4U6/Byt1vXcaeK0dxvduq7BRXmOFKRaadZo2rRwvibC90ytjaiOTemxdz97k27sIzQN1OJevuo0V+VpP8hVnbOJevuo0V+VpP8hVn3w9s+VX2lYX4AHkIAAAVfin/Njq/wDI9Z/gvLQVfin/ADY6v/I9Z/gvOjs/fUecfdY2w+qdQCdR86iToaeWTcxmxqu3SLhqYTrVfQdaPoDzxwq7om96m4nWrTF3qNP3uivFLVTUly05R1sMEUkG1XMSWoTZUsVrlxJEvW3miZQ+Og+PGvLpp7hnqq/0WnUsGsK+O1Po7dHO2qppZGS7Juke9Wq1XRc49uWo5PPdhVMZoHo0HnfS3GriBrCi126kZpWkv1mp651NpOphqfCdPLE9Up+nRZGpLHK1M740amXtwq88TLZ3WVluGq7PA+BItNVemm3mou3NWwVToXVLaVVzjclPFNIqdfJozQN8B5d/7zmsKyOxWtlBbrZqCWzQXu5yOsdzuUMDalz1p6ZsVIjnNekbUV73uRM/NavNG9yi456+1VX8N7XabBbrDc9S0l1kr236mqUSjdSSRMbKyNVie6N6PVUa5GuVHsyrcLlmgehgR7e2qZQUza6SGWtSJqTyU7FZG6TCbla1VVUaq5wiqqonaplVbrzXN443XzRdgZYaS02q3UNwlr7jTzTS/LPla6NGMkYiqqR5R2U27VyjtyY1M2Gug86R90be7fxbtlhqqvTl9sVxvj7J/wCxKSt6WikVHrGslU9Fp5HpsRHxtVHNVy4ztU+NXx811WT2+92+m0/TaSrNaR6TbTTRTS3JqJV9A+ZVSRrMuVj/AJPblrXI7LsYXOaB6RK7xC+4+4/iZ/faWIrvEL7j7j+Jn99p04He0+cfdqnbDRQAeMyAAAAAM64f/cpSf8c3+K8sRXeH/wBylJ/xzf4ryxHs4/e1ec/dZ2yA86ao7o296U4qU1pdV6cvVilv0FknpbXSVr6qj6aRI2OlqsLTpI1XNV0K4djKIqqf3U3HLX1st/EzUFBQ6dk0/oa7PpZqWeOfvuugZFDK/a9Ho2N6NlXDlR6OXltbjK82aEeigYmzjFqOv47VOj2S6esdpi72kpILwydtbeIHxI+WWlkRyRrsVVbsw5ctVVVpXoO6nrLRQ6Wpb7baZ9+dqCrs+pG0THtht8EEyQLVIiucrWK+oonZcq+bI70ZGaB6NB5s1D3UF5pZXQW6hos3e/19ssVUtvrK1iUlCxjamplipkfJMqzq9jWsRiYwqu5Kq/mTujdct0o10enaSS+eM9uscFVWW6ut9FcIapcdJGyoa2WNzVy12d6IqZTciogzQPSoOTpeK+Q2eJuo6q31d13P6SW10z4INu5dqIx8j3Z24yu7mueSFC4r6/1ZYOIGgtK6Vp7S+XUiV/T1V2ZI9tMkEcb0eiMe1XfOcit7V2+c3mpqZsNTB5y40cfNWcJJ5EbcNJ3ae12yKuuNpgoK+SrmVEzK5HRK9lIxcLsWbci9q8sn34icedYxya8qNGUtgit2jLLT3at8OtldNWLNA+dGRJG9qMRGNxl27c7zcJhVM5oHoYHM0vcZbxpm0V8+OnqqOGeTEax+c5iOXzFVVbzXqyuOrKmb6u11rmp4w1Oh9Jt0/TRxaehvS1t5hnlVHuqJolj2RvblF2M55Tbhy4flETUzYa2Dz7p3j9qnifTaHtmkbbaLdqG9WWa93Ke8JLNS0UUUyU6sYyNzHSOdMqomXJhrcrk0fg5xCrOIemq+S60cFBfbPdKqzXKGler4O+IH7VdEq89jmq1yZ5puwucZWRVEi9gzvi5xDu2kp9M2HTNFSV2q9TVr6OgS4uc2lgbHE6WaaXb5zmsYxfNaqKqqiZQxCzcQdV8O9fcT2VtLZ7pre96isdko0pelht6zS0KK2V6OVz2sbExznNRVVVaqIvNFJNUQPWYPP977oLUnDNNXWfWFrtl11NbKOhrbX4E6Snp7i2rqFpomK2Rz3RK2ZMOXc5Nq5T0HS1nrfivw14e3m/Xqk0vd6mJaZIfA9LWLHRtfKjZpZ2K5z5Y4mruyzaqoi8mohc0DbgVPhfqGu1Vo2julfdbFe5KhXOjr9OK9aOaPOGq1HucqL2Km5cKipkthRB0D/LGsvypH/kqYuJTtA/yxrL8qR/5KmLic/au8+UfaGqtrl6q+5i8f1Ob+4pXtNfc5av6pF/cQsOqvuYvH9Tm/uKV7TX3OWr+qRf3EPvg9zPn+yeCbV0sddSTU0uVimY6N+1cLhUwvMw7S/c33rT1RoJkmu+/LZomp3WqiSzxxbqdYnwuZM9JMvk6N+EkbtRFyqscq8t2BZiJRkEHc/dBwttejvD27vHULb9373n8/FxdW9Fs6Tl87Zu3L1bsdhKXg3errxTs2rdQawbdqSxVVXU2q3xWqOmlg6djo+jkqGuVZGNY5URNrVVUarldg1UEywMUr+5V0xWaG4iabZNJA3WFzkur6tjE30cquSSNI0z81kiOcicvnuTlk7OrOCk9RqKxai0XqDxNvlqtvgVHuoW1tNUUOUc2GSFXsXzHJlrmuRUyvWimpAZYGeP4W3G4X/h7ebtqV10uWlpayWeZ1CyLv908D4upjkSJGo9MYR2UaiLz5ku8cRbva7pU0kHDnVV0iherW1lG+3JDMn1m9JVsdj/iai+wvAFtwxW58I7vrm83rUtvvFfoZmq7bHbb3aK+309TVpHEsrGLFK2V7InKyR33xMKi4R3VOouEdVpGPhzdO/wCe/VGg7JVWtlHRUbI5bmkkUEbVbvmRkbkSnTkrsOVy82muAZYFCoOJl5rK6np5OGerqOOWRsbqmd9t6OJFXCvdtrHO2p1rhFXCckXqK7bu5+8H3K11fh7pO8dZV+rdneeN/fLZ29756Tlt6f5/PO35qZ5a+BbeMg1H3P3h/R3FOw+Hug8ea5a3vjvPd3lmGCLbt6ROk/gM5y352McsrUJuF+uNU8WuMLbZqap0ZYrvNb4XzusyTurI/B8TJHU0z3NRrkXcxXIj0RexFQ9HATTAxefuc5LRc4pNH6nfpm3SWGm05WUz6BlXI+lg3pG6GR7k6KTEj0VVa9qrhVblCPbe50uumKDR1RpvWvgnU2nrOmn3XKS1Nnp6+ga7dHHLTrImHMVEVHtenNXcsOwm4AZYGUak4P6kvNXpC90uue9NYWGGqppLtNaI5YayKo2LI11Oj2I3Cxx7VR3Lbz3ZNWYioxqOVHOxzVExlT+gtrDg6++4TUf5Nqf8JxeqL+Jwf8tv/QouvvuE1H+Tan/CcXqi/icH/Lb/ANDOP3NPnP2hrwfcAHnsgAAGe6N/il1/LFw/zUhoRnujf4pdfyxcP81Id/Z+7r+X7tRsl3zCda9zPcdUU+ubVQa3ks2m9XVS3Gsom2uOaoZVbI25bO5/8EqxRqrNueSoj25N2BuYidrLMl4NTTJxQfUXtj59cUkVPI+Oj2tpHNoUpVcidIu9FVN+MpjO3K9ZwdUdz7etV2Ox6Zq9btTSFvhtzJbc2zx9O6SlVi9JFUK/dEr1jTPJyoiqiLzU2sEywM8k4HadqeKGoda1UKVVVe7Myy1FLI35Po8uSV3XzWRiQsXkmEiTrzyrkPczWy3cIdM6Mtd6q7bcNN1rbpbb8yNr5o61Hvesr2O5PR3SvRzFXCo7Geo2YDLAyjUHCHU2tuG180xqfXEd0q7lPTSx1sFnZTxUzYpo5NjYkkVXblj5q6RcbuXJMFu1XrO46broqej0Zf8AUkb4961NpdRpGxcqmxenqInZ5Z5IqYVOfWhaQWwyPUelbnxhmtF7pqS+cNNU6aqHyWy4XSCkqkkbMzZNG6KKeRHxuaiIqK5ioqNVF5E+LhRfbjfNE3nUWrm3m46buNXXK+O1tpmTtmpXwJE1rXrsRvSK7Kq9V6vammglhkGoe5+8PWXX9v8AD3QeNd9or30nee7vXvd1KvRY6RN+7vX52W439S459as4S17OKNz1Va9RMo7dfKempr3Zqm3tqG1jYUe1isk3tWJVZIrV5Oz1mkgWgZRw24Q6n4ay2y1UmvpKzRNsVzKSy1NqjWpSHa5GQvqt+XNZlMKjEd5qIqqmUI9n7n7wTw44caU8PdL4n3WmufffeeO++iWRdmzpPMz0nXl2MdS5NfAywMEb3Mt2pqO22mk12sGnbPf26htdvW0RueyZKpahWTy9JmZmXyImEYvnIqq7bhbvaOF1007xWveqbXqVILLfZIqm52KagbIsk8dOkLXxz70WNFRsaq1WuyretMmiAZYA4l6+6jRX5Wk/yFWds4l6+6jRX5Wk/wAhVn2w9s+VX2lYX4AHkIAAAVfin/Njq/8AI9Z/gvLQVfin/Njq/wDI9Z/gvOjs/fUecfdY2w+qdRzdS2Gn1Tp262WrdI2kuNJLRzLE7a9GSMVjtq9i4VcHSTqB1oxbSXAO/wBj1Joa63PXLbtFpCnloKGiiszKaN9LJCkSo9UkVek8yJd6Lt8zCMTcqkqz9z94J4c8N9K+Hul8TrrT3PvvvPHffRLL5mzpPk89L15djHUuTXwZywMqsfBu9JxQt2stTawbqCa0wVVNbYIbVHRvZHOrdyTSNcvSo1GojUw1EXnzU4U/cjaRn4W3jQ++RlFcr4+9uqGsw+NVmRWxN5/NSBOgzn5qquOeDcgMsDL9X8HrnV66ZrDRuqU0hepaBlsrmS25tbS1cDHK6LMSvZtexXOw5HdS4VFQ6TeGNZPrTRGpbhqB9wrtO2ysoJ3SUjWOrn1CQZlXaqNjwsOdqNVF3dmOd+AtAodw4l3mhr6mmi4aatro4ZXRtqqd9t6OZEVUR7N9Y121etNzUXC80ReQ0fo6Vuvb3ryfvmglv1soaN1mrIY0mpFgdMuXPjke1yu6bqbyTb1rnlfAWwwS29zLdrVSaatUOu1TT2mb2282m3raGbkckr3qyeXpMy+bLK1HNRnN25UcqGYzaY1Fpzjpcr1YNMVt6u1RqJ06R3bRz4aZsT5EZJPHXtqegarYc7ZEiSR2E3IrnOz7JBnJAFd4hfcfcfxM/vtLEV3iF9x9x/Ez++06cDvafOPu1TthooAPGZAAAAAGdcP/ALlKT/jm/wAV5Yiu8P8A7lKT/jm/xXliPZx+9q85+6ztlglf3Mt3mo57VRa7Wi0+y/8AjJQ0K2iOSSOq76Sp2zS9Iiyx792ERGO+blyomFsV04DeEtF8VNP+HOj8ea2orO+O9M95dLTww7du/wCUx0O7OW53YwmMrrIOfLCMk1dwSvWttS2aS56xa/S9quNFdKazstMaTxzUyN2oyq37msc5qucm1XecrUciEyTue9M1WqeIl6qY1nfrWhjoK2FWoiRMSJY3qxexX4Yqrjrjapp4GWBjlR3OkNFozQFu09qCaxai0UxW26+JTNmSRz49lT00LnYe2bm5ybkVFwqO5HVuvCe+6o0/YKTUWr0utyteoqS/LWMtbIGPbBIj0p2Rtf5rVwvnK56plevqNOAywKhqXXdzsF1fSUuhNR3+FrWuSttrqFIXKqdSdNVRvynb5uPRk40OnariHrTSGs6u33PSkum1r4EtN1igfLVJURRt3o+GeRrWptXryqqi8k5KukAWGLa47nm4apu+un27WL7JZta08cN4om22OedzmQJAixTOcmxqsRqK1WO+ltVqrlMh418OrrQa1t9Q23V2prnQ2Kjo4nJoeS4UFdLEirtdJFVMRiOeiOVs6ORmU2uXmexwSaYkZnbeJ+q4bXQNuvC3Ur7p3tE6rW2y251MkysRZGxq+sa5Wo5VRFVEXkTNNaTnu3EZ3EWpirLNNV2KOzOsVwii6eHo6mWXpHSRSvYu7fyairywqrlVRNABbDDbH3N1w0dZtIu01rFLVqawUdVbVuktrSeCspZ5umdHJTrKiptejVaqSJhUXOUXCdnS9rquBtmSzUOm9S67q6+onutyvdF3jH3xVzSK6Vzmy1EW1erDWoqI3amVXJrIGWI2DJNU6XuXGimtdwho75w11NpyuSstVyuUNJU5c6N8cjViinkR8bmOVrkVzF5phes4y9zXcLkupbheNavq9S3S6W+80d2pLYynS31dJEkcbkiV7myMVMorVXm1yoqqvnG6AZY8RilR3NiapoNWS601PPftQ6ggpqVLpRUjaJKCOmk6WBKePc/arZV6RVc525fQnI7tHoPiXFaK2Cq4pQ1Fxe2JtLVx6bhjZDsfuer4+kXpFe3zVw5qInNqIvM04DLAovCDhh5LLDdKSW5+F6+63Se71tSymbTRLPLt3JHC1VSNmGpyyvPKqvMvQBYiwg6B/ljWX5Uj/wAlTFxKdoH+WNZflSP/ACVMXE5+1d58o+0NVbUe40bbjb6mkeqtZPE6Jyp2I5FT/wCpntDf49MUFNbLzDVUtZSxNhc9lJLJDNtRER7HtarVRcZxyVM4VEU0oEwsaMOJpqi8cuqRLO/H6y/f6n3Kf7A8frL9/qfcp/sGiA+2kYXBPP8AE1M78frL9/qfcp/sDx+sv3+p9yn+waIBpGFwTz/E1M78frL9/qfcp/sDx+sv3+p9yn+waIBpGFwTz/E1M78frL9/qfcp/sDx+sv3+p9yn+waIBpGFwTz/E1M3qOI1gpYJJ56uaGGNqvfJJRzNaxqJlVVVZyRE7T9M4hWKVjXsqZ3scmWubRTqip6U8wsPE2gkuvDbVlFC1Xy1Npq4WNb1q50L0RE/tJGhK2G5aI09WUz0lp6i3U8sb2rlHNdE1UVPzKNIwuCef4mpWPH6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/wATUzvx+sv3+p9yn+wPH6y/f6n3Kf7BogGkYXBPP8TUzvx+sv3+p9yn+wPH6y/f6n3Kf7BogGkYXBPP8TUzvx+sv3+p9yn+wPH6y/f6n3Kf7BogGkYXBPP8TUzO6XFmtbRWWa0RVM01fC6mdO+lkjip2ParXSOc9qJyTOG81VccsKqppUbEijaxvJrURE/EfoHwxcX2kRTTFoguAA50AAAM8dJ4lVlxgr4ajvKorJaunq4Kd8rFSVyyOY/Y1djmvVyc+SptVFVVVrdDB98LF9neJi8St2d+P1l+/wBT7lP9geP1l+/1PuU/2DRAdGkYXBPP8TUzvx+sv3+p9yn+wPH6y/f6n3Kf7BogGkYXBPP8TUzvx+sv3+p9yn+wPH6y/f6n3Kf7BogGkYXBPP8AE1M78frL9/qfcp/sDx+sv3+p9yn+waIBpGFwTz/E1M1bxJ08+qkpW1sq1MbGyPhSkm3tY5XI1ypsyiKrXIi9u1fQp9vH6y/f6n3Kf7B+rU1G90Dql2fOfpi0Jjl1Nq7l9o0IaRhcE8/xNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/xNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/wATUzvx+sv3+p9yn+wPH6y/f6n3Kf7BogGkYXBPP8TUzvx+sv3+p9yn+wSLcx+q9Q2isp4J4rda5ZKlaiogfF0sropIWsY16IqoiSPcrur5qJnK7b4CT2imInJTadmub7flBePAABwoAAAc3UtnTUWnLranP6JtdSS0qvxnaj2K3OO3rOkDVNU0zFUbYGeeNsNsjZDeIKqgr2IjZWJSSyRq7qVWPaxWvauMoqc8KmUavJP54/WX7/U+5T/YNEB26Rh+NE8/8LqZ34/WX7/U+5T/AGB4/WX7/U+5T/YNEA0jC4J5/iamd+P1l+/1PuU/2B4/WX7/AFPuU/2DRANIwuCef4mpmtXxJ09QU0lRU1stPTxNV0kstJM1jETrVVVmEQ+3j9Zfv9T7lP8AYP73QrUfwR1qxVxvtkzEx6VTCf8AU0MaRhcE8/xNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/wATUzvx+sv3+p9yn+wPH6y/f6n3Kf7BogGkYXBPP8TUzvx+sv3+p9yn+wfGsq2a6p0tVshqZI5pGLUVU1NJFFDE16Od5z2ojnKiYRrcrlcrhEVTSgXSaKddFM38/wDELeIAAeeyAAAAAM2papuhYpLZc4alkUc0r6erhppJopY3Pc5vnMau1yZ2q12FymUyi5Pr4/WX7/U+5T/YNEB6Gk0Va66Zv5/4lq8Szvx+sv3+p9yn+wPH6y/f6n3Kf7BogJpGFwTz/FNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/xNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/xNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/xNTO/H6y/f6n3Kf7B8afiTp6sa9YK2WdGPdG9Y6SZ217Vw5q4ZyVF5KnYaUZ9wVY11h1BURu3w1OpbvJG9F5ORK2Viqns3McNIwuCef4mp+PH6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/xNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/xNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/xNTO/H6y/f6n3Kf7A8frL9/qfcp/sGiAaRhcE8/wATUzvx+sv3+p9yn+wfqPXVomcjY31cr15IyO31DnL+JEZlTQgNIwuCef8Ag1K3oi1VNFBc66siWmnulX333u5UV0LUijiY12OW7bGir14VyplcZLIAcmJXOJVNUk6wAHzQAAAAAAAAAAAz3Tc0fCypp9MV2ym07NMsdirOfRwo5cpRSqqYYrVXbEucPaiN+c3z9CItztlHerfU0FwpIK+hqY1inpamNskUrFTCtc1yKjkVOtFAlAzx2j9U6JVz9IXSK62xFymn9RTSK2NPqwVaI6SNvobI2VE5I3YiYP75abVZvM1hb7hoaVFRHTXmJO8lVe1KyNXwIno3va70tTqQNCBHt9xpbtRxVdDUw1lLKm6OenkSRj09KOTkpIAAAAAAAAAAAAAAAAAAAAAAAAAAADPbhi08ebPO5NsV6sFTSdIqoidLTTxyMZ6VVWVE7k9kbjQipcSdO1t6tFHX2diPv9lq2XK3xrIkaTPa1zXwOcvJElifJHleSb0d9E7OmNSUOrrHS3a2yOfS1COTbIxWSRva5WSRyMXmyRj2uY5i82ua5FRFRQOoAAAAAAAAAAAAAAAAAAAAAAAAAAM945YrNF01mam+a93a325jMoiuY6qjdMvPr2wsmfjtRi9XWaEZ7QPTiFxFhusLlk07phZoKWVrvMqrk5HRTPb6UgZvi3Iqor5pm8ljNCAAAAAAAAAAAAAAAAAAAAAAAAAAAAClXjjFpW1181tp7gt9vUSJvtNjidXVTVXq3siRejznrkVqdqqiIQc681yitdG3h9aH4yu+Kru0je1OW6CnX2os/b81eaB1tYapqWTLp7TqxVGqKmNHJuw6O3xKu3vqdPQnPZH1yuarUw1HvZ2dL6botH6dt9ltzXNo6GFsMayLue7HW5y9rnLlVXtVVXtPnpfSVr0db3Ulrp1ibI/pZ55ZHSz1MioiLJNK9VfI9URE3OVVwiJ1Ih2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/FRHIqKmUXrRT+gCiV3BDRlTVz1tFaPF64zrmSu09PJbJ5HfWe6nczevJPn7spyXKciO7Q+t7KjfAXEF1ZGxMJT6otcVa1Uz1JJA6nf7MuV6+nPboYAztdTcR7Kq+ENE22+wp1S6evKNmf/APJqWRNb+uX8Y8ttroGr4dsGqNNuRcOWuss00TfxzUySxJ+NX4NEAFUsHFfReqZWRWjVdmuFQ7qp4K6J0qc8YVm7ci5ReSoWs4+odG6f1dD0N9sdtvUOMdHcaSOduPRh6KVR3APRkC7rXRV+nHIiI1NP3artzG45InRwStYqexWqnsA0MGeeTPUNvk32riVqKFiLlKW5Q0dbD+LLoEl//wCh/EouK1rXzbrpHUTE6mzW+ptr1/G9ss6fnRifiA0QGeM1pr63ri58N0rERFVV09fYKnPLs75bTdftwfxONdFR58MaW1fZFTrWWwz1bW/jfSJM1Px5wBogKFRceuHdbN0K6ytFHU4z3tcaltJN1on8HLtd1qidXaXS33Oju1OlRQ1cFZAvVLTyJI1fzouAJIAAAAAAAAAAAAAU2/aTuVuu9TqHSc0MF1qNq11srJHMormrWo1rnqjXLDMjUa1JmtVVa1rXtkRkey5ACqaZ4jW2/wBwW01UVRYtRMbuks1zZ0c6pjKuiXmydifXic9qdSqioqJazk6l0nZ9Y29KK9W6nuVM16SsbOzKxSJ82Rjutj07HNVFTsVCprp3WeiWounrozVVrjbhLRqKdzapqZ/+FXIjldhM4bMx6uXGZWJlQNCBTrHxTs10usdnuDanTeoJHK2O03piQTTKnX0LsrHOntie9E7cLlC4gAAAAAAAAAAAAAAAAAcXVOtLHoqkiqb3c4LeyZ/RQMkdmSd/1Io0y6R/+61FX2FW8YNa63TbYbUzSFqenK7ahhWSremeuKia5NuUzh0z2q1cZicnIC4ai1NatJWx9wvFfBbqRq7eknfjc5c4Y1Otzlxya1FVV5IilR33/ibliwVeldJPTznyOfT3W4NVObUbhHUka5+dnpl5oiQqiOd1NPcM7RYrsl5qXVN+1CiPRLzeJEnqI0d85sXJGQMXCZZC1jVxlUVeZbQI9vt9LaKCmoaGmhoqKlibDBTU8aRxxRtREaxjUwjWoiIiInJEQkAAAAAAAAAAAAAAOJqDXOm9JNV181Ba7M1Eyq3CtjgRE/8AG5AO2DPWcfdDVciR2y7zagc5drfAFvqbk1V/4qeN7UT2quPaflvFe6XBcWjhzqyuaqLiaqipaCNPxpUTskT8zFX2AaIDOvDPFK6fxfS+mrHEvVJcb1NVSp+OKKna3+yU/vilxGuf8o8QKG2tX6OnrAyJ7f8Ax1MtQir7difiA0QgXi/WzT1ItVdbjSWymTrmrJ2xMT/xOVEKT5FaWu/lvVmr7+vak17komO/Gyj6Bip7FTHsOhaeCmgrJVMqqXSFn7+amErZ6Rk1TjOf4V6K9eaqvX2gQ1496HnmSG13h+pJVVERunKKe6JlerLqZj2tT2qqInaqH4TiPqi7oqWPhxdtqp5lTf6ynt8DvzNfLMn54UNDa1GNRrURrUTCIiYREP6Bnfgnifff43f9P6VgX50NpoZK+oT/AIaiZzGf2wLn2dv9dwRs12c5+p7ne9ZK5fOhvVe7vV3sWkhSOnd+eNf/ADU0MAQrPZLdp63xUNqoKW2UMSYjpqOFsUbE9jWoiITQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+NXRwV8DoKmCOohd86OViOav40UpddwK4d3Cd9Q/RVjhq3ph1VSUMdPOqZz/AAkaNd18+svQAzvyH2ijytpv2rLIvYlNqKrmjb+KOd8kafiRuB4ga1tyL4N4nXCp+q2/WmjqWp7PkGU7lT8bs+00QAZ3t4sW1q/KaN1G5FTCbKu07k/Hmqx2ekePeubcn/tLhnU1eOtdP3mkqU/GnfDqZV/sz7DRABni8bLdRNRbvpvV1lXKovTafqalrf8AifTNlYie1XY9p9aPj5w5rJ20/jrZaSqd82lr6xlLOv8A8uVWu/8AIvx8KyhprjTugq6eKqgd86KZiPav40XkB/KG40t0p21FFUw1cDuqWCRHtX8SpyJBRLhwI4d3KfviTRVkhq8Y76pKJlPPjOf4SNGu61VevtI7uCVrpl3WrUGrLI5ERESm1DVTRtwmOUc75I0/M0DQwZ4mgta25yrbuJldVN57Y77aaOpanoTMDKdyontXPt7T8/8AvZtnqZqPH9btO7/NY/8AMDRQZ14/a3t38pcMa2qx1usF4o6lE9v+0Pp1VPzZ9h+ncbbXROc27af1ZZ9vW6bTtXURp7Vkp2SsRParkQDQwUOh48cOq+pjpm61slPWSfMpK2sZTTu7OUUitf8A+RdaKvprlTtqKSoiqoHfNlgej2r+JU5ARr7p+2aotk1uvFvprpQTJiSmq4myRu/MqYKf4kaj0gjXaPv3fVCz/wDItSSSVEO3km2Kq5zQ9XW/pmp1IxOtNAIFZfrZb7nQW2quNJTXGvSRaSkmnayap2Iiv6Nirl+1HNVcIuMpnrA8Tz/9oklj7qKo0tf7eto0TTIllrtz2TOo7iyR6S1G9rUVY0evRKmV82PpERFVWnuSGaOohZLE9ssUjUcx7Fy1yLzRUVOtDJLh3MHBi2x1lyqtAaepYWb6iaVaVGRsTmrlwnJqexEwnYVy8a+rJ6KntGnM6b03RRNpqWGlbsmdCxqNYmVTMTUREw1uHIiJleatTv7J2LF7ZVajZG2Z2K9Ag8pT0bapyuqJampevW+epkkcvtVXOVVU+fgml+o79Y7957sfoO/F9P8AKXh6xB5O8E0v1HfrHfvHgml+o79Y794/0H/t9P8AJeHrEHk7wTS/Ud+sd+8eCaX6jv1jv3j/AEH/ALfT/JeHrEHk5LVTNXKNe1U7Ulci/wDU7lk1RfdNTNkt12qVjRUzS1sjqiByejDly3/wK3n6eecV/oVcR/RiXn3xb95NTid3J3YPkEscOm9KVUTte3BqSI/Y2Vtugz/CPa5Far3dTWqi8sqv0c6Nww4kaq7onQll1TYX0miNNXKLctQipX3F72uVkzI0exIYtsjHtR72y7kbno25Q/dHw14W8cautvd90VaqvUjujS4tqo+klaqN2MXfy3sVseGuwmUaqKiKiol10/ZdB8FbXQ2K1RWXR9HcKzZS0bXx03fdU/CYaiqiySL5qInNcI1E5IiH5rEw68KuaK4tMCXpfhxYtKVklwp6Z9ZepmIye8XGV1TWzIidSyvyqN68MbhqZXDULOD5VNTDRwvmnlZBCxMukkcjWontVT5j6go9y45cPbTUd7VGtLG6rVFVKSCujmnVOrKRsVXLzRewiLxutNWxHWixaqviuVUb3rp+qhY7GOqSdkbFTn17sf2AaGDPF15rW4Pc228NKymbzRsl9u9JTNd6FxA6ociL7W59nYfzbxZuafwmjdN57EZV3bb+fNLn+xANEBnXk+1ncf5T4nXKnRfnR2K10dKxfZmaOd6J+JyL7T9LwPslY5X3W76ovblzltZqKsbEv44YpGRr+doF1ut8t1hp1qLncKW3QJ1y1czYm/2uVEKZLx/4do57KXVlvvErF2uisrnXGRF9Ctp0eueXVgl2jgjw+sVQtRRaKsMVWvJ1U63xPnd285HNVy/nUucMMdPE2OJjY42phrGJhET2IBn3llZWtRbNorWV6yuG4s60GffXQY/Gp/PG/iLcv5P4eUdvRe3UGoGQub/4aaKoRV9m786GigDO1tvFS5onSX7SlhYqecymtNRXSJ/wyPnian541/EHcMdQXFc3XiZqSVqomae3Q0VFF+ZWwLKn6w0QAZ27gLpGqXN0ZeL+5U85Lzfa2sjX/wCVJKsafiRqIdyxcLdGaXlWWz6SsdrmVyuWWjt0MT1cvNVVzWoqqq88rzLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4VtBTXKB0FXTxVUDuuOZiPav5l5FKruBHDuvkWV2jLNTVGVd3xQ0jaWbK4yvSRI12eSdvYXwAZ15EbZR87RqPV1lXsSDUNVUsb+KOpfKxE9iNweRu7V4GcVdfa80DZ9IVeqdZVNqhqK1t4uEFJSQUTpXxta1tTDHC1ZPkFVUcmURWKiruU9/ADyfZ3cV7Bo6y6T4oXm13e4I1Kxai3q5Z3Rsw1kdQ5URr13qjtzU5rEiqq5JRdeNlK+DXduqXfwdTbViZ+OOVVd/5StKUf0T9Mopp7JRl8dfzv/6EqAAeoyqF54uaS0/eZLXX3hkFVE5rJl6GR0UDnY2tlla1WRquU5OcnWh+L5xh0jpy511vuF2WGroHMSrYylmkSnRzGva6RzWKjWK17fPVUb1pnKKiZJSaLht101RYdT2PWdy8KXepnils9XV+D6umqH5RZEjkbGxURyo9HonJvaWibS9bB5a6eK21SwVlDDDQosL3d8o22tjxGqp8ou5NvLPPl1nmRj48xsjb79WqZ18oVftUcTNNaOno4brdGwz1bFlhihikne6NOuTbG1yoz/eXCe0+PCfV1Xrzh3ZL/XRwRVVdCskjKZqtjRdzk81FVV6kTrVTONJuufDzVkNzuenbzdKe7adtlLDPQUTp5KSWBjkkgkanOPcr0dlcJlFyvLldeAltrLRwg0zR19JPQVkVO5JKapjWOSNekcuHNXmi8z6YWLXiYuvVFp1fOLX8/AX8AHej72283HTl3pLhapoYKxV703VTVdBiVUYiyNaqK5rXqx6oioq7MIvM83cUe5s7oWn422DiBqesrNaU1tulLVLXaWdHNUUcLJmvVKaklTCOaiKqN2OarvnZyufQlRTOr30tHH/C1VVBAzHXudI1E/659mD1Yfj/ANdppivDqjbMT6bPvL6eDOvItTVv8sav1jes9e++S0KO/G2j6BMezGD7UnALh3SztqJNH2u41Tc7am6Q9/TJlMLiSbe7q9pfwfl0RLbaaGzUyU9BR09DTp1RU0TY2p+ZERCWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFT4kaNXWVhSOnVrLlSP74pHuXDVfhUVjl+q5FVF9C4dhdqGBzRZkqaOphWKeJyw1FNMibo3Y5tcn4l/EqKioqoqKeqCuar0BZdZbH19O5tXG3bHWU71jmYno3J1pzXzXZTPPB736d+paLHssWL0/b/Bt2vJPkX0D6mWP9nxfZHkX0D6mWL9nxfZPQE3ATzv9n1LVtZ2dPTRPd+dWo3/ofPyCT+s8vuTPtHvR2/8ATt8fTPQt72atajGo1qI1qJhETsQ/ppPkEn9Z5fcmfaHkEn9Z5fcmfaPt/qvY+P0noZfezYrl84b6U1NXurrtpy13Ksc1GrUVVIyR6onUmVTPI2zyCT+s8vuTPtDyCT+s8vuTPtGav1PsNUWqrv8AKehl97BPIxoJf/0bY+X/APr4vsndsGl7LpGklp7Na6O0Uz39LJHRwtiY52ETcqIic8InP2GvJwEmzz1PNj2UTEX/AKndsfBSxWydk9dJU3yZio5ra5W9C1U7ejaiNX/xbuf5j41fqfYcKM1GufdFvvYt71Y4RaLlulxg1JWRqy3wIrre13/x3qios2PqIiqjVX5yqrk5I1XbOAfke19qr7XiziV/KN0AADjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//Z", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "app = make_graph_agent(llm=llm, vectorstore_ipcc=vectorstore, vectorstore_graphs=vectorstore_graphs, reranker=reranker)\n", + "display_graph(app)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "data": { + "text/plain": [ + "{'environment': True}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from climateqa.engine.chains.chitchat_categorization import make_chitchat_intent_categorization_chain\n", + "\n", + "chain = make_chitchat_intent_categorization_chain(llm)\n", + "chain.invoke({\"input\": \"should i eat fish\"})" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2 Testing graph agent" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Translate query ----\n" + ] + }, + { + "data": { + "image/jpeg": "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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from climateqa.engine.graph import make_graph_agent, display_graph\n", + "\n", + "app = make_graph_agent(llm=llm, vectorstore_ipcc=vectorstore, vectorstore_graphs=vectorstore_graphs, reranker=reranker)\n", + "display_graph(app)" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: GET https://api.gradio.app/gradio-messaging/en \"HTTP/1.1 200 OK\"\n", + "/tmp/ipykernel_13585/659967580.py:28: LangChainBetaWarning: This API is in beta and may change in the future.\n", + " result = app.astream_events(inputs,version = \"v1\") #{\"callbacks\":[MyCustomAsyncHandler()]})\n" + ] + }, + { + "ename": "TypeError", + "evalue": "'Metadata' object is not subscriptable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[32], line 52\u001b[0m\n\u001b[1;32m 50\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m event[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;129;01min\u001b[39;00m steps_display\u001b[38;5;241m.\u001b[39mkeys() \u001b[38;5;129;01mand\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_chain_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;66;03m#display steps\u001b[39;00m\n\u001b[1;32m 51\u001b[0m event_description,display_output \u001b[38;5;241m=\u001b[39m steps_display[node]\n\u001b[0;32m---> 52\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(history[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmetadata\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[43mhistory\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmetadata\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtitle\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m!=\u001b[39m event_description: \u001b[38;5;66;03m# if a new step begins\u001b[39;00m\n\u001b[1;32m 53\u001b[0m history\u001b[38;5;241m.\u001b[39mappend(ChatMessage(role\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124massistant\u001b[39m\u001b[38;5;124m\"\u001b[39m, content \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m, metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtitle\u001b[39m\u001b[38;5;124m'\u001b[39m :event_description}))\n\u001b[1;32m 55\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m event[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtransform_query\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mand\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 \u001b[38;5;129;01mand\u001b[39;00m node \u001b[38;5;129;01min\u001b[39;00m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124manswer_rag\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124manswer_search\u001b[39m\u001b[38;5;124m\"\u001b[39m]:\u001b[38;5;66;03m# if streaming answer\u001b[39;00m\n", + "\u001b[0;31mTypeError\u001b[0m: 'Metadata' object is not subscriptable" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Categorize_message ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Output intent categorization: {'intent': 'search'}\n", + "\n", + "---- Transform query ----\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", + "/home/tim/ai4s/climate_qa/climate-question-answering/climateqa/engine/chains/graph_retriever.py:91: LangChainDeprecationWarning: The method `BaseRetriever.get_relevant_documents` was deprecated in langchain-core 0.1.46 and will be removed in 1.0. Use invoke instead.\n", + " docs_question = retriever.get_relevant_documents(question)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieving graphs ----\n", + "Subquestion 0: What is radiative forcing and how does it affect climate change?\n", + "8 graphs retrieved for subquestion 1: [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.8423357605934143, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.005384462885558605, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_780', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Nationally determined contributions (NDCs) embody efforts by each country to reduce national emissions and adapt to the impacts of climate change. The Paris Agreement requires each of the 193 Parties to prepare, communicate and maintain NDCs outlining what they intend to achieve. NDCs must be updated every five years.', 'url': 'https://ourworldindata.org/grapher/nationally-determined-contributions', 'similarity_score': 0.8526537418365479, 'content': 'Nationally determined contributions to climate change', 'reranking_score': 7.293858652701601e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Nationally determined contributions to climate change'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_342', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions factors quantify the average CO₂ output per unit of energy. They are measured in kilograms of CO₂ per megawatt-hour (MWh) of energy from various fossil fuel sources.', 'url': 'https://ourworldindata.org/grapher/carbon-dioxide-emissions-factor', 'similarity_score': 0.8662314414978027, 'content': 'Carbon dioxide emissions factors', 'reranking_score': 6.450313958339393e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Carbon dioxide emissions factors'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_358', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contribution-to-temp-rise-by-gas', 'similarity_score': 0.8814464807510376, 'content': 'Contribution to global mean surface temperature rise by gas', 'reranking_score': 2.3544196665170603e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise by gas'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_357', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contribution-temp-rise-degrees', 'similarity_score': 0.8828883171081543, 'content': 'Contribution to global mean surface temperature rise', 'reranking_score': 1.724368667055387e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_383', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.8840625286102295, 'content': 'Global warming contributions by gas and source', 'reranking_score': 1.6588734069955535e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions by gas and source'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_767', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This is measured at a nominal depth of 20cm, and given relative to the average temperature from the period of 1961 - 1990. Measured in degrees Celsius.', 'url': 'https://ourworldindata.org/grapher/sea-surface-temperature', 'similarity_score': 0.9009610414505005, 'content': 'Global warming: monthly sea surface temperature anomaly', 'reranking_score': 1.570666063344106e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: monthly sea surface temperature anomaly'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_768', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The deviation of a specific year's average surface temperature from the 1991-2020 mean, in degrees Celsius.\", 'url': 'https://ourworldindata.org/grapher/global-yearly-surface-temperature-anomalies', 'similarity_score': 0.9119041562080383, 'content': 'Global yearly surface temperature anomalies', 'reranking_score': 1.5241118489939254e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Global yearly surface temperature anomalies')]\n", + "Subquestion 1: What are the different types of radiative forcing and their impacts on the environment?\n", + "7 graphs retrieved for subquestion 2: [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_342', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions factors quantify the average CO₂ output per unit of energy. They are measured in kilograms of CO₂ per megawatt-hour (MWh) of energy from various fossil fuel sources.', 'url': 'https://ourworldindata.org/grapher/carbon-dioxide-emissions-factor', 'similarity_score': 0.8055480122566223, 'content': 'Carbon dioxide emissions factors', 'reranking_score': 2.3946791770868003e-05, 'query_used_for_retrieval': 'What are the different types of radiative forcing and their impacts on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Carbon dioxide emissions factors'), Document(metadata={'category': 'Natural Disasters', 'doc_id': 'owid_1760', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The annual reported number of natural disasters, categorised by type. The number of global reported natural disaster events in any given year. Note that this largely reflects increases in data reporting, and should not be used to assess the total number of events.', 'url': 'https://ourworldindata.org/grapher/natural-disasters-by-type', 'similarity_score': 0.8462469577789307, 'content': 'Global reported natural disasters by type', 'reranking_score': 1.6791396774351597e-05, 'query_used_for_retrieval': 'What are the different types of radiative forcing and their impacts on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Global reported natural disasters by type'), Document(metadata={'category': 'Ozone Layer', 'doc_id': 'owid_1844', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Annual consumption of ozone-depleting substances. Emissions of each gas are given in ODP tonnes, which accounts for the quantity of gas emitted and how \"strong\" it is in terms of depleting ozone.', 'url': 'https://ourworldindata.org/grapher/ozone-depleting-substance-consumption', 'similarity_score': 0.8488471508026123, 'content': 'Emissions of ozone-depleting substances', 'reranking_score': 1.35105183289852e-05, 'query_used_for_retrieval': 'What are the different types of radiative forcing and their impacts on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Emissions of ozone-depleting substances'), Document(metadata={'category': 'Ozone Layer', 'doc_id': 'owid_1847', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Ozone-depleting substance emissions are measured in ODP tonnes.', 'url': 'https://ourworldindata.org/grapher/ozone-depleting-substance-emissions', 'similarity_score': 0.8520827293395996, 'content': 'Ozone-depleting substance emissions', 'reranking_score': 1.2769949535140768e-05, 'query_used_for_retrieval': 'What are the different types of radiative forcing and their impacts on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Ozone-depleting substance emissions'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_383', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.8670639395713806, 'content': 'Global warming contributions by gas and source', 'reranking_score': 1.2466728549043182e-05, 'query_used_for_retrieval': 'What are the different types of radiative forcing and their impacts on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions by gas and source'), Document(metadata={'category': 'Air Pollution', 'doc_id': 'owid_138', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Annual emissions of particulate matter from all human-induced sources. This is measured in terms of PM₁₀ and PM₂.₅, which denotes particulate matter less than 10 and 2.5 microns in diameter, respectively.', 'url': 'https://ourworldindata.org/grapher/emissions-of-particulate-matter', 'similarity_score': 0.8681329488754272, 'content': 'Emissions of particulate matter', 'reranking_score': 1.2325931493251119e-05, 'query_used_for_retrieval': 'What are the different types of radiative forcing and their impacts on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Emissions of particulate matter'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_387', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Greenhouse gas emissions include carbon dioxide, methane and nitrous oxide from all sources, including land-use change. They are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.', 'url': 'https://ourworldindata.org/grapher/total-ghg-emissions', 'similarity_score': 0.8768877983093262, 'content': 'Greenhouse gas emissions', 'reranking_score': 1.1929207175853662e-05, 'query_used_for_retrieval': 'What are the different types of radiative forcing and their impacts on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Greenhouse gas emissions')]\n", + "---- Retrieve documents ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID d589b647-b2b8-4479-8654-0237320b13e7.')\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID d589b647-b2b8-4479-8654-0237320b13e7.')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieve documents ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID 3025729a-c358-4d18-b4eb-7564073fbde4.')\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID 3025729a-c358-4d18-b4eb-7564073fbde4.')\n", + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID 16e0d163-397b-44a4-b854-0962de03abe9.')\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID 16e0d163-397b-44a4-b854-0962de03abe9.')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Answer RAG ----\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": [ + "\n", + "\n", + "Answer:\n", + "Radiative forcing is a key concept in understanding how human activities affect the Earth's climate. It refers to the change in energy balance in the Earth's atmosphere due to various factors, primarily greenhouse gases (GHGs) and aerosols. Here’s a breakdown of its impact:\n", + "\n", + "### What is Radiative Forcing?\n", + "- **Definition**: Radiative forcing measures how much energy is added to or taken away from the Earth's atmosphere. Positive radiative forcing leads to warming, while negative radiative forcing can cause cooling.\n", + "- **Current Status**: As of 2019, human-caused radiative forcing was estimated at 2.72 watts per square meter (W/m²) compared to pre-industrial levels (1750). This represents a significant increase, primarily due to higher concentrations of greenhouse gases like carbon dioxide (CO2) [Doc 1, Doc 9].\n", + "\n", + "### How Does It Affect the Climate?\n", + "- **Energy Accumulation**: The increase in radiative forcing results in more energy being trapped in the climate system, leading to an overall warming effect. The average rate of heating has risen from 0.50 W/m² (1971-2006) to 0.79 W/m² (2006-2018) [Doc 2].\n", + "- **Ocean Warming**: A large portion (91%) of this energy accumulation is absorbed by the oceans, which leads to rising sea temperatures. Other areas affected include land warming, ice loss, and atmospheric warming [Doc 2].\n", + "\n", + "### Contributions to Climate Change\n", + "- **Greenhouse Gases**: The primary driver of positive radiative forcing is the increase in greenhouse gases, which trap heat in the atmosphere. Since 2011, the contribution from GHGs has increased by 0.34 W/m² [Doc 1].\n", + "- **Aerosols**: While aerosols can have a cooling effect by reflecting sunlight, their overall impact is less than that of greenhouse gases. Changes in aerosol concentrations and their effects on climate are also being better understood [Doc 1, Doc 4].\n", + "\n", + "### Future Implications\n", + "- **Temperature Projections**: The cumulative emissions of CO2 and other greenhouse gases will determine the likelihood of limiting global warming to critical thresholds, such as 1.5°C above pre-industrial levels [Doc 3, Doc 12].\n", + "- **Policy and Action**: Understanding radiative forcing is crucial for developing effective climate policies aimed at reducing emissions and mitigating climate change impacts.\n", + "\n", + "In summary, radiative forcing is a fundamental concept that helps explain how human activities, particularly the release of greenhouse gases, are warming our planet. The ongoing changes in our climate system highlight the urgent need for action to reduce emissions and limit future warming.\n" + ] + } + ], + "source": [ + "from climateqa.engine.chains.prompts import audience_prompts\n", + "from front.utils import make_html_source,parse_output_llm_with_sources,serialize_docs,make_toolbox,generate_html_graphs\n", + "from gradio import ChatMessage\n", + "init_prompt = \"\"\n", + "\n", + "docs = []\n", + "docs_used = True\n", + "docs_html = \"\"\n", + "current_graphs = []\n", + "output_query = \"\"\n", + "output_language = \"\"\n", + "output_keywords = \"\"\n", + "gallery = []\n", + "updates = []\n", + "start_streaming = False\n", + "\n", + "steps_display = {\n", + " \"categorize_intent\":(\"🔄️ Analyzing user message\",True),\n", + " \"transform_query\":(\"🔄️ Thinking step by step to answer the question\",True),\n", + " \"retrieve_documents\":(\"🔄️ Searching in the knowledge base\",False),\n", + "}\n", + "query = \"what is the impact of radiative forcing\"\n", + "inputs = {\"user_input\": query,\"audience\": audience_prompts[\"general\"] ,\"sources\": [\"IPCC\", \"IPBES\", \"IPOS\"]}\n", + "history = [ChatMessage(role=\"assistant\", content=init_prompt)]\n", + "history + [ChatMessage(role=\"user\", content=query)]\n", + "\n", + "\n", + "result = app.astream_events(inputs,version = \"v1\") #{\"callbacks\":[MyCustomAsyncHandler()]})\n", + "\n", + "async for event in result:\n", + " if \"langgraph_node\" in event[\"metadata\"]:\n", + " node = event[\"metadata\"][\"langgraph_node\"]\n", + "\n", + " if event[\"event\"] == \"on_chain_end\" and event[\"name\"] == \"retrieve_documents\" :# when documents are retrieved\n", + " try:\n", + " docs = event[\"data\"][\"output\"][\"documents\"]\n", + " docs_html = []\n", + " for i, d in enumerate(docs, 1):\n", + " docs_html.append(make_html_source(d, i))\n", + " \n", + " used_documents = used_documents + [d.metadata[\"name\"] for d in docs]\n", + " history[-1].content = \"Adding sources :\\n\\n - \" + \"\\n - \".join(np.unique(used_documents))\n", + " \n", + " docs_html = \"\".join(docs_html)\n", + " \n", + " except Exception as e:\n", + " print(f\"Error getting documents: {e}\")\n", + " print(event)\n", + "\n", + " elif event[\"name\"] in steps_display.keys() and event[\"event\"] == \"on_chain_start\": #display steps\n", + " event_description,display_output = steps_display[node]\n", + " if not hasattr(history[-1], 'metadata') or history[-1].metadata[\"title\"] != event_description: # if a new step begins\n", + " history.append(ChatMessage(role=\"assistant\", content = \"\", metadata={'title' :event_description}))\n", + "\n", + " elif event[\"name\"] != \"transform_query\" and event[\"event\"] == \"on_chat_model_stream\" and node in [\"answer_rag\", \"answer_search\"]:# if streaming answer\n", + " if start_streaming == False:\n", + " start_streaming = True\n", + " history.append(ChatMessage(role=\"assistant\", content = \"\"))\n", + " answer_message_content += event[\"data\"][\"chunk\"].content\n", + " answer_message_content = parse_output_llm_with_sources(answer_message_content)\n", + " history[-1] = ChatMessage(role=\"assistant\", content = answer_message_content)\n", + " \n", + " elif event[\"name\"] in [\"retrieve_graphs\", \"retrieve_graphs_ai\"] and event[\"event\"] == \"on_chain_end\":\n", + " try:\n", + " recommended_content = event[\"data\"][\"output\"][\"recommended_content\"]\n", + " # graphs = [\n", + " # {\n", + " # \"embedding\": x.metadata[\"returned_content\"],\n", + " # \"metadata\": {\n", + " # \"source\": x.metadata[\"source\"],\n", + " # \"category\": x.metadata[\"category\"]\n", + " # }\n", + " # } for x in recommended_content if x.metadata[\"source\"] == \"OWID\"\n", + " # ]\n", + " \n", + " unique_graphs = []\n", + " seen_embeddings = set()\n", + "\n", + " for x in recommended_content:\n", + " embedding = x.metadata[\"returned_content\"]\n", + " \n", + " # Check if the embedding has already been seen\n", + " if embedding not in seen_embeddings:\n", + " unique_graphs.append({\n", + " \"embedding\": embedding,\n", + " \"metadata\": {\n", + " \"source\": x.metadata[\"source\"],\n", + " \"category\": x.metadata[\"category\"]\n", + " }\n", + " })\n", + " # Add the embedding to the seen set\n", + " seen_embeddings.add(embedding)\n", + "\n", + "\n", + " categories = {}\n", + " for graph in unique_graphs:\n", + " category = graph['metadata']['category']\n", + " if category not in categories:\n", + " categories[category] = []\n", + " categories[category].append(graph['embedding'])\n", + "\n", + " # graphs_html = \"\"\n", + " for category, embeddings in categories.items():\n", + " # graphs_html += f\"

{category}

\"\n", + " # current_graphs.append(f\"

{category}

\")\n", + " for embedding in embeddings:\n", + " current_graphs.append([embedding, category])\n", + " # graphs_html += f\"
{embedding}
\"\n", + " \n", + " except Exception as e:\n", + " print(f\"Error getting graphs: {e}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "'Metadata' object is not subscriptable", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[33], line 49\u001b[0m\n\u001b[1;32m 47\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m event[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;129;01min\u001b[39;00m steps_display\u001b[38;5;241m.\u001b[39mkeys() \u001b[38;5;129;01mand\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_chain_start\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;66;03m#display steps\u001b[39;00m\n\u001b[1;32m 48\u001b[0m event_description,display_output \u001b[38;5;241m=\u001b[39m steps_display[node]\n\u001b[0;32m---> 49\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(history[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m], \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmetadata\u001b[39m\u001b[38;5;124m'\u001b[39m) \u001b[38;5;129;01mor\u001b[39;00m \u001b[43mhistory\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m-\u001b[39;49m\u001b[38;5;241;43m1\u001b[39;49m\u001b[43m]\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmetadata\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mtitle\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m]\u001b[49m \u001b[38;5;241m!=\u001b[39m event_description: \u001b[38;5;66;03m# if a new step begins\u001b[39;00m\n\u001b[1;32m 50\u001b[0m history\u001b[38;5;241m.\u001b[39mappend(ChatMessage(role\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124massistant\u001b[39m\u001b[38;5;124m\"\u001b[39m, content \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m, metadata\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtitle\u001b[39m\u001b[38;5;124m'\u001b[39m :event_description}))\n\u001b[1;32m 52\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m event[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mname\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtransform_query\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mand\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 \u001b[38;5;129;01mand\u001b[39;00m node \u001b[38;5;129;01min\u001b[39;00m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124manswer_rag\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124manswer_search\u001b[39m\u001b[38;5;124m\"\u001b[39m]:\u001b[38;5;66;03m# if streaming answer\u001b[39;00m\n", + "\u001b[0;31mTypeError\u001b[0m: 'Metadata' object is not subscriptable" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Categorize_message ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Output intent categorization: {'intent': 'search'}\n", + "\n", + "---- Transform query ----\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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieving graphs ----\n", + "Subquestion 0: What is radiative forcing and how does it affect climate change?\n", + "8 graphs retrieved for subquestion 1: [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.8423357605934143, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.005384462885558605, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_780', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Nationally determined contributions (NDCs) embody efforts by each country to reduce national emissions and adapt to the impacts of climate change. The Paris Agreement requires each of the 193 Parties to prepare, communicate and maintain NDCs outlining what they intend to achieve. NDCs must be updated every five years.', 'url': 'https://ourworldindata.org/grapher/nationally-determined-contributions', 'similarity_score': 0.8526537418365479, 'content': 'Nationally determined contributions to climate change', 'reranking_score': 7.293858652701601e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Nationally determined contributions to climate change'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_342', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions factors quantify the average CO₂ output per unit of energy. They are measured in kilograms of CO₂ per megawatt-hour (MWh) of energy from various fossil fuel sources.', 'url': 'https://ourworldindata.org/grapher/carbon-dioxide-emissions-factor', 'similarity_score': 0.8662314414978027, 'content': 'Carbon dioxide emissions factors', 'reranking_score': 6.450313958339393e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Carbon dioxide emissions factors'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_358', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contribution-to-temp-rise-by-gas', 'similarity_score': 0.8814464807510376, 'content': 'Contribution to global mean surface temperature rise by gas', 'reranking_score': 2.3544196665170603e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise by gas'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_357', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contribution-temp-rise-degrees', 'similarity_score': 0.8828883171081543, 'content': 'Contribution to global mean surface temperature rise', 'reranking_score': 1.724368667055387e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_383', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.8840625286102295, 'content': 'Global warming contributions by gas and source', 'reranking_score': 1.6588734069955535e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions by gas and source'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_767', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This is measured at a nominal depth of 20cm, and given relative to the average temperature from the period of 1961 - 1990. Measured in degrees Celsius.', 'url': 'https://ourworldindata.org/grapher/sea-surface-temperature', 'similarity_score': 0.9009610414505005, 'content': 'Global warming: monthly sea surface temperature anomaly', 'reranking_score': 1.570666063344106e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: monthly sea surface temperature anomaly'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_768', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The deviation of a specific year's average surface temperature from the 1991-2020 mean, in degrees Celsius.\", 'url': 'https://ourworldindata.org/grapher/global-yearly-surface-temperature-anomalies', 'similarity_score': 0.9119041562080383, 'content': 'Global yearly surface temperature anomalies', 'reranking_score': 1.5241118489939254e-05, 'query_used_for_retrieval': 'What is radiative forcing and how does it affect climate change?', 'sources_used': ['IEA', 'OWID']}, page_content='Global yearly surface temperature anomalies')]\n", + "Subquestion 1: What are the specific impacts of radiative forcing on global temperatures and weather patterns?\n", + "7 graphs retrieved for subquestion 2: [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.743827223777771, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.02035224437713623, 'query_used_for_retrieval': 'What are the specific impacts of radiative forcing on global temperatures and weather patterns?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_357', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contribution-temp-rise-degrees', 'similarity_score': 0.7458232045173645, 'content': 'Contribution to global mean surface temperature rise', 'reranking_score': 0.010060282424092293, 'query_used_for_retrieval': 'What are the specific impacts of radiative forcing on global temperatures and weather patterns?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_358', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contribution-to-temp-rise-by-gas', 'similarity_score': 0.7628831267356873, 'content': 'Contribution to global mean surface temperature rise by gas', 'reranking_score': 0.0008739086915738881, 'query_used_for_retrieval': 'What are the specific impacts of radiative forcing on global temperatures and weather patterns?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise by gas'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_768', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The deviation of a specific year's average surface temperature from the 1991-2020 mean, in degrees Celsius.\", 'url': 'https://ourworldindata.org/grapher/global-yearly-surface-temperature-anomalies', 'similarity_score': 0.7884460687637329, 'content': 'Global yearly surface temperature anomalies', 'reranking_score': 0.000565648078918457, 'query_used_for_retrieval': 'What are the specific impacts of radiative forcing on global temperatures and weather patterns?', 'sources_used': ['IEA', 'OWID']}, page_content='Global yearly surface temperature anomalies'), Document(metadata={'category': 'Natural Disasters', 'doc_id': 'owid_1759', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This indicator shows annual anomalies compared with the average precipitation from 1901 to 2000 based on rainfall and snowfall measurements from land-based weather stations worldwide.', 'url': 'https://ourworldindata.org/grapher/global-precipitation-anomaly', 'similarity_score': 0.7976844906806946, 'content': 'Global precipitation anomaly', 'reranking_score': 0.00035785927320830524, 'query_used_for_retrieval': 'What are the specific impacts of radiative forcing on global temperatures and weather patterns?', 'sources_used': ['IEA', 'OWID']}, page_content='Global precipitation anomaly'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_359', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of carbon dioxide, methane, and nitrous oxide. This is for land use and agriculture only.\", 'url': 'https://ourworldindata.org/grapher/global-warming-land', 'similarity_score': 0.8079851269721985, 'content': 'Contribution to global mean surface temperature rise from agriculture and land use', 'reranking_score': 0.00035303618642501533, 'query_used_for_retrieval': 'What are the specific impacts of radiative forcing on global temperatures and weather patterns?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise from agriculture and land use'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_383', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.8176379203796387, 'content': 'Global warming contributions by gas and source', 'reranking_score': 0.00030412289197556674, 'query_used_for_retrieval': 'What are the specific impacts of radiative forcing on global temperatures and weather patterns?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions by gas and source')]\n", + "---- Retrieve documents ----\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Answer:\n", + "Radiative forcing is a key concept in understanding how human activities affect the Earth's climate. It refers to the change in energy balance in the atmosphere due to various factors, primarily greenhouse gases (GHGs) and aerosols. Here’s a breakdown of its impact:\n", + "\n", + "### Key Points on Radiative Forcing:\n", + "\n", + "- **Human Influence**: Since the mid-18th century, human activities have significantly increased the concentration of greenhouse gases in the atmosphere, leading to a radiative forcing of approximately 2.72 watts per square meter (W/m²) by 2019. This represents a 19% increase since the last major assessment in 2014, primarily due to rising GHG levels [Doc 1, Doc 3].\n", + "\n", + "- **Energy Accumulation**: The increase in radiative forcing results in more energy being trapped in the climate system, which leads to warming. The average rate of heating has risen from 0.50 W/m² between 1971 and 2006 to 0.79 W/m² from 2006 to 2018. Most of this heat (91%) is absorbed by the oceans, while land, ice, and the atmosphere account for smaller portions [Doc 2].\n", + "\n", + "- **Cooling Effects**: While GHGs contribute to warming, aerosols (tiny particles in the atmosphere) can have a cooling effect. However, the overall impact of human-caused radiative forcing is still positive, meaning it leads to net warming [Doc 1].\n", + "\n", + "- **Future Implications**: The cumulative emissions of CO2 and other gases will determine how much the Earth warms in the future. For instance, limiting warming to 1.5°C above pre-industrial levels will require significant reductions in emissions [Doc 4, Doc 10].\n", + "\n", + "### Summary of Impacts:\n", + "- **Increased Global Temperatures**: The rise in radiative forcing is a major driver of global temperature increases, which can lead to more extreme weather events, rising sea levels, and disruptions to ecosystems.\n", + "- **Ocean Warming**: The majority of the heat from increased radiative forcing is absorbed by the oceans, which can affect marine life and weather patterns.\n", + "- **Long-term Climate Change**: Continued radiative forcing will have lasting effects on the climate, making it crucial to understand and mitigate these impacts through reduced emissions and other strategies.\n", + "\n", + "In summary, radiative forcing is a fundamental mechanism by which human activities are changing the climate, primarily through the increase of greenhouse gases, leading to significant warming and associated impacts on the environment and society [Doc 1, Doc 2, Doc 4].\n" + ] + } + ], + "source": [ + "from climateqa.engine.chains.prompts import audience_prompts\n", + "from front.utils import make_html_source,parse_output_llm_with_sources,serialize_docs,make_toolbox,generate_html_graphs\n", + "from gradio import ChatMessage\n", + "init_prompt = \"\"\n", + "\n", + "docs = []\n", + "docs_used = True\n", + "docs_html = \"\"\n", + "current_graphs = []\n", + "output_query = \"\"\n", + "output_language = \"\"\n", + "output_keywords = \"\"\n", + "gallery = []\n", + "updates = []\n", + "start_streaming = False\n", + "history = [ChatMessage(role=\"assistant\", content=init_prompt)]\n", + "steps_display = {\n", + " \"categorize_intent\":(\"🔄️ Analyzing user message\",True),\n", + " \"transform_query\":(\"🔄️ Thinking step by step to answer the question\",True),\n", + " \"retrieve_documents\":(\"🔄️ Searching in the knowledge base\",False),\n", + "}\n", + "query = \"what is the impact of radiative forcing\"\n", + "inputs = {\"user_input\": query,\"audience\": audience_prompts[\"general\"] ,\"sources\": [\"IPCC\", \"IPBES\", \"IPOS\"]}\n", + "\n", + "result = app.astream_events(inputs,version = \"v1\") #{\"callbacks\":[MyCustomAsyncHandler()]})\n", + "\n", + "async for event in result:\n", + " if \"langgraph_node\" in event[\"metadata\"]:\n", + " node = event[\"metadata\"][\"langgraph_node\"]\n", + "\n", + " if event[\"event\"] == \"on_chain_end\" and event[\"name\"] == \"retrieve_documents\" :# when documents are retrieved\n", + " try:\n", + " docs = event[\"data\"][\"output\"][\"documents\"]\n", + " docs_html = []\n", + " for i, d in enumerate(docs, 1):\n", + " docs_html.append(make_html_source(d, i))\n", + " \n", + " used_documents = used_documents + [d.metadata[\"name\"] for d in docs]\n", + " history[-1].content = \"Adding sources :\\n\\n - \" + \"\\n - \".join(np.unique(used_documents))\n", + " \n", + " docs_html = \"\".join(docs_html)\n", + " \n", + " except Exception as e:\n", + " print(f\"Error getting documents: {e}\")\n", + " print(event)\n", + "\n", + " elif event[\"name\"] in steps_display.keys() and event[\"event\"] == \"on_chain_start\": #display steps\n", + " event_description,display_output = steps_display[node]\n", + " if not hasattr(history[-1], 'metadata') or history[-1].metadata[\"title\"] != event_description: # if a new step begins\n", + " history.append(ChatMessage(role=\"assistant\", content = \"\", metadata={'title' :event_description}))\n", + "\n", + " elif event[\"name\"] != \"transform_query\" and event[\"event\"] == \"on_chat_model_stream\" and node in [\"answer_rag\", \"answer_search\"]:# if streaming answer\n", + " if start_streaming == False:\n", + " start_streaming = True\n", + " history.append(ChatMessage(role=\"assistant\", content = \"\"))\n", + " answer_message_content += event[\"data\"][\"chunk\"].content\n", + " answer_message_content = parse_output_llm_with_sources(answer_message_content)\n", + " history[-1] = ChatMessage(role=\"assistant\", content = answer_message_content)\n", + " \n", + " elif event[\"name\"] in [\"retrieve_graphs\", \"retrieve_graphs_ai\"] and event[\"event\"] == \"on_chain_end\":\n", + " try:\n", + " recommended_content = event[\"data\"][\"output\"][\"recommended_content\"]\n", + " # graphs = [\n", + " # {\n", + " # \"embedding\": x.metadata[\"returned_content\"],\n", + " # \"metadata\": {\n", + " # \"source\": x.metadata[\"source\"],\n", + " # \"category\": x.metadata[\"category\"]\n", + " # }\n", + " # } for x in recommended_content if x.metadata[\"source\"] == \"OWID\"\n", + " # ]\n", + " \n", + " unique_graphs = []\n", + " seen_embeddings = set()\n", + "\n", + " for x in recommended_content:\n", + " embedding = x.metadata[\"returned_content\"]\n", + " \n", + " # Check if the embedding has already been seen\n", + " if embedding not in seen_embeddings:\n", + " unique_graphs.append({\n", + " \"embedding\": embedding,\n", + " \"metadata\": {\n", + " \"source\": x.metadata[\"source\"],\n", + " \"category\": x.metadata[\"category\"]\n", + " }\n", + " })\n", + " # Add the embedding to the seen set\n", + " seen_embeddings.add(embedding)\n", + "\n", + "\n", + " categories = {}\n", + " for graph in unique_graphs:\n", + " category = graph['metadata']['category']\n", + " if category not in categories:\n", + " categories[category] = []\n", + " categories[category].append(graph['embedding'])\n", + "\n", + " # graphs_html = \"\"\n", + " for category, embeddings in categories.items():\n", + " # graphs_html += f\"

{category}

\"\n", + " # current_graphs.append(f\"

{category}

\")\n", + " for embedding in embeddings:\n", + " current_graphs.append([embedding, category])\n", + " # graphs_html += f\"
{embedding}
\"\n", + " \n", + " except Exception as e:\n", + " print(f\"Error getting graphs: {e}\")\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " # ### old\n", + " # if event[\"event\"] == \"on_chat_model_stream\" and event[\"metadata\"][\"langgraph_node\"] in [\"answer_rag\", \"answer_rag_no_docs\", \"answer_chitchat\", \"answer_ai_impact\"]:\n", + " # if start_streaming == False:\n", + " # start_streaming = True\n", + " # history.append(ChatMessage(role=\"assistant\", content = \"\"))\n", + "\n", + " # answer_message_content += event[\"data\"][\"chunk\"].content\n", + " # answer_message_content = parse_output_llm_with_sources(answer_message_content)\n", + " # history[-1] = ChatMessage(role=\"assistant\", content = answer_message_content)\n", + "\n", + "\n", + " # if docs_used is True and event[\"metadata\"][\"langgraph_node\"] in [\"answer_rag_no_docs\", \"answer_chitchat\", \"answer_ai_impact\"]:\n", + " # docs_used = False\n", + " \n", + " # elif docs_used is True and event[\"name\"] == \"retrieve_documents\" and event[\"event\"] == \"on_chain_end\":\n", + " # try:\n", + " # docs = event[\"data\"][\"output\"][\"documents\"]\n", + " # docs_html = []\n", + " # for i, d in enumerate(docs, 1):\n", + " # docs_html.append(make_html_source(d, i))\n", + " # docs_html = \"\".join(docs_html)\n", + "\n", + " # except Exception as e:\n", + " # print(f\"Error getting documents: {e}\")\n", + " # print(event)\n", + "\n", + " # elif event[\"name\"] == \"retrieve_documents\" and event[\"event\"] == \"on_chain_start\":\n", + " # print(event)\n", + " # questions = event[\"data\"][\"input\"][\"questions\"]\n", + " # questions = \"\\n\".join([f\"{i+1}. {q['question']} ({q['source']})\" for i,q in enumerate(questions)])\n", + " # answer_yet = \"🔄️ Searching in the knowledge base\\n{questions}\"\n", + " # history[-1] = (query,answer_yet)\n", + "\n", + " # elif event[\"name\"] in [\"retrieve_graphs\", \"retrieve_graphs_ai\"] and event[\"event\"] == \"on_chain_end\":\n", + " # try:\n", + " # recommended_content = event[\"data\"][\"output\"][\"recommended_content\"]\n", + " # # graphs = [\n", + " # # {\n", + " # # \"embedding\": x.metadata[\"returned_content\"],\n", + " # # \"metadata\": {\n", + " # # \"source\": x.metadata[\"source\"],\n", + " # # \"category\": x.metadata[\"category\"]\n", + " # # }\n", + " # # } for x in recommended_content if x.metadata[\"source\"] == \"OWID\"\n", + " # # ]\n", + " \n", + " # unique_graphs = []\n", + " # seen_embeddings = set()\n", + "\n", + " # for x in recommended_content:\n", + " # embedding = x.metadata[\"returned_content\"]\n", + " \n", + " # # Check if the embedding has already been seen\n", + " # if embedding not in seen_embeddings:\n", + " # unique_graphs.append({\n", + " # \"embedding\": embedding,\n", + " # \"metadata\": {\n", + " # \"source\": x.metadata[\"source\"],\n", + " # \"category\": x.metadata[\"category\"]\n", + " # }\n", + " # })\n", + " # # Add the embedding to the seen set\n", + " # seen_embeddings.add(embedding)\n", + "\n", + "\n", + " # categories = {}\n", + " # for graph in unique_graphs:\n", + " # category = graph['metadata']['category']\n", + " # if category not in categories:\n", + " # categories[category] = []\n", + " # categories[category].append(graph['embedding'])\n", + "\n", + " # # graphs_html = \"\"\n", + " # for category, embeddings in categories.items():\n", + " # # graphs_html += f\"

{category}

\"\n", + " # # current_graphs.append(f\"

{category}

\")\n", + " # for embedding in embeddings:\n", + " # current_graphs.append([embedding, category])\n", + " # # graphs_html += f\"
{embedding}
\"\n", + " \n", + " # except Exception as e:\n", + " # print(f\"Error getting graphs: {e}\")\n", + "\n", + " # elif event[\"name\"] in steps_display.keys() and event[\"event\"] == \"on_chain_start\": #display steps\n", + " # node = event[\"metadata\"][\"langgraph_node\"]\n", + " # event_description,display_output = steps_display[node]\n", + " # if not hasattr(history[-1], 'metadata') or history[-1].metadata[\"title\"] != event_description: # if a new step begins\n", + " # history.append(ChatMessage(role=\"assistant\", content = \"\", metadata={'title' :event_description}))\n", + "\n", + " # for event_name,(event_description,display_output) in steps_display.items():\n", + " # if event[\"name\"] == event_name:\n", + " # if event[\"event\"] == \"on_chain_start\":\n", + " # # answer_yet = f\"

{event_description}

\"\n", + " # # answer_yet = make_toolbox(event_description, \"\", checked = False)\n", + " # answer_yet = event_description\n", + "\n", + " # history[-1] = (query,answer_yet)\n", + " # elif event[\"event\"] == \"on_chain_end\":\n", + " # answer_yet = \"\"\n", + " # history[-1] = (query,answer_yet)\n", + " # if display_output:\n", + " # print(event[\"data\"][\"output\"])\n", + "\n", + " # if op['path'] == path_reformulation: # reforulated question\n", + " # try:\n", + " # output_language = op['value'][\"language\"] # str\n", + " # output_query = op[\"value\"][\"question\"]\n", + " # except Exception as e:\n", + " # raise gr.Error(f\"ClimateQ&A Error: {e} - The error has been noted, try another question and if the error remains, you can contact us :)\")\n", + " \n", + " # if op[\"path\"] == path_keywords:\n", + " # try:\n", + " # output_keywords = op['value'][\"keywords\"] # str\n", + " # output_keywords = \" AND \".join(output_keywords)\n", + " # except Exception as e:\n", + " # pass\n", + "\n", + "\n", + "\n", + " # history = [tuple(x) for x in history]" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Categorize_message ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Output intent categorization: {'intent': 'search'}\n", + "\n", + "---- Transform query ----\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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieving graphs ----\n", + "Subquestion 0: What are the effects of climate change on the environment?\n", + "8 graphs retrieved for subquestion 1: [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp', 'similarity_score': 0.7941333055496216, 'content': 'Change in CO2 emissions and GDP', 'reranking_score': 0.279598593711853, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in CO2 emissions and GDP'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_780', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Nationally determined contributions (NDCs) embody efforts by each country to reduce national emissions and adapt to the impacts of climate change. The Paris Agreement requires each of the 193 Parties to prepare, communicate and maintain NDCs outlining what they intend to achieve. NDCs must be updated every five years.', 'url': 'https://ourworldindata.org/grapher/nationally-determined-contributions', 'similarity_score': 0.7979490756988525, 'content': 'Nationally determined contributions to climate change', 'reranking_score': 0.012760520912706852, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Nationally determined contributions to climate change'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_756', 'returned_content': '', 'source': 'OWID', 'subtitle': 'National adaptation plans are a means of identifying medium- and long-term climate change adaptation needs and developing and implementing strategies and programmes to address those needs.', 'url': 'https://ourworldindata.org/grapher/countries-with-national-adaptation-plans-for-climate-change', 'similarity_score': 0.7981775999069214, 'content': 'Countries with national adaptation plans for climate change', 'reranking_score': 0.004124350380152464, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with national adaptation plans for climate change'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.7989407181739807, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.0036289971321821213, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_383', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.8071538805961609, 'content': 'Global warming contributions by gas and source', 'reranking_score': 0.0016414257697761059, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions by gas and source'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_350', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-per-capita', 'similarity_score': 0.8269157409667969, 'content': 'Change in per capita CO2 emissions and GDP', 'reranking_score': 0.00023705528292339295, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in per capita CO2 emissions and GDP'), Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_199', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.', 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species', 'similarity_score': 0.8301026225090027, 'content': 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050', 'reranking_score': 7.497359911212698e-05, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_782', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Share of young people in each surveyed country that responded \"yes\" to each statement about climate change. 1,000 young people, aged 16 to 25 years old, were surveyed in each country.', 'url': 'https://ourworldindata.org/grapher/opinions-young-people-climate', 'similarity_score': 0.8306424617767334, 'content': 'Opinions of young people on the threats of climate change', 'reranking_score': 2.747046346485149e-05, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Opinions of young people on the threats of climate change')]\n", + "Subquestion 1: How does climate change affect human health and society?\n", + "7 graphs retrieved for subquestion 2: [Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_789', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Participants were asked to score beliefs on a scale from 0 to 100 on four questions: whether action was necessary to avoid a global catastrophe; humans were causing climate change; it was a serious threat to humanity; and was a global emergency.', 'url': 'https://ourworldindata.org/grapher/share-believe-climate', 'similarity_score': 0.7580230236053467, 'content': \"Share of people who believe in climate change and think it's a serious threat to humanity\", 'reranking_score': 0.005214352160692215, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content=\"Share of people who believe in climate change and think it's a serious threat to humanity\"), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_782', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Share of young people in each surveyed country that responded \"yes\" to each statement about climate change. 1,000 young people, aged 16 to 25 years old, were surveyed in each country.', 'url': 'https://ourworldindata.org/grapher/opinions-young-people-climate', 'similarity_score': 0.8168312311172485, 'content': 'Opinions of young people on the threats of climate change', 'reranking_score': 0.004852706100791693, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Opinions of young people on the threats of climate change'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_756', 'returned_content': '', 'source': 'OWID', 'subtitle': 'National adaptation plans are a means of identifying medium- and long-term climate change adaptation needs and developing and implementing strategies and programmes to address those needs.', 'url': 'https://ourworldindata.org/grapher/countries-with-national-adaptation-plans-for-climate-change', 'similarity_score': 0.8196202516555786, 'content': 'Countries with national adaptation plans for climate change', 'reranking_score': 0.0012044497998431325, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with national adaptation plans for climate change'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.8402930498123169, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.00041706717456690967, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_780', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Nationally determined contributions (NDCs) embody efforts by each country to reduce national emissions and adapt to the impacts of climate change. The Paris Agreement requires each of the 193 Parties to prepare, communicate and maintain NDCs outlining what they intend to achieve. NDCs must be updated every five years.', 'url': 'https://ourworldindata.org/grapher/nationally-determined-contributions', 'similarity_score': 0.8433299660682678, 'content': 'Nationally determined contributions to climate change', 'reranking_score': 0.00030759291257709265, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Nationally determined contributions to climate change'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_357', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contribution-temp-rise-degrees', 'similarity_score': 0.8584674596786499, 'content': 'Contribution to global mean surface temperature rise', 'reranking_score': 0.00025533974985592067, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_317', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Percentage change in gross domestic product (GDP), population, and carbon dioxide (CO₂) emissions.', 'url': 'https://ourworldindata.org/grapher/co2-gdp-pop-growth', 'similarity_score': 0.8730868697166443, 'content': 'Annual change in GDP, population and CO2 emissions', 'reranking_score': 0.0002404096449026838, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Annual change in GDP, population and CO2 emissions')]\n", + "---- Retrieve documents ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID aa00a789-394b-42e1-922b-28d51bd4c441.')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieve documents ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID 511833e2-a8c6-4d5f-ace1-cb7978dcf3e7.')\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LangChainTracer.on_chain_end callback: TracerException('No indexed run ID 561b415c-c77e-4ed7-82c8-9963ec1d1c7d.')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Answer RAG ----\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": [ + "\n", + "\n", + "Answer:\n", + "Climate change has profound and multifaceted impacts on both human systems and the natural environment, with significant implications for health, biodiversity, agriculture, and infrastructure. Here are the key impacts:\n", + "\n", + "### 1. **Human Health**\n", + "- **Physical and Mental Health**: Climate change adversely affects physical health globally, leading to increased mortality and morbidity due to extreme heat events. It also exacerbates mental health issues, particularly in vulnerable populations [Doc 1, Doc 11].\n", + "- **Disease Dynamics**: There is a notable increase in climate-related diseases, including vector-borne diseases (e.g., malaria, dengue) due to the expansion of disease vectors. Additionally, the incidence of water- and food-borne diseases has risen, influenced by higher temperatures and increased rainfall, which can lead to outbreaks of diseases like cholera [Doc 1, Doc 13].\n", + "- **Food Security and Nutrition**: Climate change impacts food production through altered agricultural yields, which can lead to malnutrition and food insecurity, particularly in regions already facing challenges [Doc 2, Doc 6].\n", + "\n", + "### 2. **Biodiversity and Ecosystems**\n", + "- **Species and Habitat Changes**: Climate change drives shifts in species ranges, habitat locations, and seasonal timing, which can lead to biodiversity loss. Many species are unable to adapt or migrate quickly enough to cope with the rapid changes [Doc 4, Doc 9].\n", + "- **Ecosystem Functionality**: Changes in climate affect critical ecosystem functions such as water regulation, food production, and carbon sequestration. This can lead to decreased resilience of ecosystems and increased vulnerability to other stressors like pollution and habitat degradation [Doc 5, Doc 9].\n", + "\n", + "### 3. **Agriculture and Food Production**\n", + "- **Agricultural Yields**: Climate change directly affects agricultural productivity through changes in temperature, precipitation patterns, and CO2 concentrations. These changes can lead to reduced crop yields and increased pest populations, further threatening food security [Doc 6, Doc 10].\n", + "- **Land Degradation**: The interaction of climate change with other drivers of land degradation is expected to exacerbate the extent and severity of land degradation, complicating restoration efforts and necessitating new adaptive strategies [Doc 6].\n", + "\n", + "### 4. **Infrastructure and Urban Areas**\n", + "- **Impact on Cities**: Urban areas are particularly vulnerable to climate change, experiencing intensified heatwaves, flooding, and other extreme weather events. These impacts can compromise infrastructure, disrupt services, and lead to significant economic losses, disproportionately affecting marginalized communities [Doc 11, Doc 10].\n", + "- **Economic Implications**: The economic sectors are also at risk, with climate change causing damage to cities and infrastructure, which can hinder development and adaptation efforts [Doc 2, Doc 10].\n", + "\n", + "### 5. **Interconnectedness of Impacts**\n", + "- The effects of climate change are compounded by interactions with other environmental, socio-cultural, political, and economic drivers, making the challenges more complex and requiring integrated approaches for mitigation and adaptation [Doc 12, Doc 10].\n", + "\n", + "In summary, climate change poses significant risks across various domains, necessitating urgent action to mitigate its impacts and adapt to the changing conditions. The interplay between health, biodiversity, agriculture, and infrastructure highlights the need for comprehensive strategies to address these interconnected challenges.\n" + ] + }, + { + "data": { + "text/plain": [ + "{'user_input': 'what is the impact of climate change ?',\n", + " 'language': 'English',\n", + " 'intent': 'search',\n", + " 'query': 'what is the impact of climate change ?',\n", + " 'remaining_questions': [],\n", + " 'n_questions': 2,\n", + " 'answer': 'Climate change has profound and multifaceted impacts on both human systems and the natural environment, with significant implications for health, biodiversity, agriculture, and infrastructure. Here are the key impacts:\\n\\n### 1. **Human Health**\\n- **Physical and Mental Health**: Climate change adversely affects physical health globally, leading to increased mortality and morbidity due to extreme heat events. It also exacerbates mental health issues, particularly in vulnerable populations [Doc 1, Doc 11].\\n- **Disease Dynamics**: There is a notable increase in climate-related diseases, including vector-borne diseases (e.g., malaria, dengue) due to the expansion of disease vectors. Additionally, the incidence of water- and food-borne diseases has risen, influenced by higher temperatures and increased rainfall, which can lead to outbreaks of diseases like cholera [Doc 1, Doc 13].\\n- **Food Security and Nutrition**: Climate change impacts food production through altered agricultural yields, which can lead to malnutrition and food insecurity, particularly in regions already facing challenges [Doc 2, Doc 6].\\n\\n### 2. **Biodiversity and Ecosystems**\\n- **Species and Habitat Changes**: Climate change drives shifts in species ranges, habitat locations, and seasonal timing, which can lead to biodiversity loss. Many species are unable to adapt or migrate quickly enough to cope with the rapid changes [Doc 4, Doc 9].\\n- **Ecosystem Functionality**: Changes in climate affect critical ecosystem functions such as water regulation, food production, and carbon sequestration. This can lead to decreased resilience of ecosystems and increased vulnerability to other stressors like pollution and habitat degradation [Doc 5, Doc 9].\\n\\n### 3. **Agriculture and Food Production**\\n- **Agricultural Yields**: Climate change directly affects agricultural productivity through changes in temperature, precipitation patterns, and CO2 concentrations. These changes can lead to reduced crop yields and increased pest populations, further threatening food security [Doc 6, Doc 10].\\n- **Land Degradation**: The interaction of climate change with other drivers of land degradation is expected to exacerbate the extent and severity of land degradation, complicating restoration efforts and necessitating new adaptive strategies [Doc 6].\\n\\n### 4. **Infrastructure and Urban Areas**\\n- **Impact on Cities**: Urban areas are particularly vulnerable to climate change, experiencing intensified heatwaves, flooding, and other extreme weather events. These impacts can compromise infrastructure, disrupt services, and lead to significant economic losses, disproportionately affecting marginalized communities [Doc 11, Doc 10].\\n- **Economic Implications**: The economic sectors are also at risk, with climate change causing damage to cities and infrastructure, which can hinder development and adaptation efforts [Doc 2, Doc 10].\\n\\n### 5. **Interconnectedness of Impacts**\\n- The effects of climate change are compounded by interactions with other environmental, socio-cultural, political, and economic drivers, making the challenges more complex and requiring integrated approaches for mitigation and adaptation [Doc 12, Doc 10].\\n\\nIn summary, climate change poses significant risks across various domains, necessitating urgent action to mitigate its impacts and adapt to the changing conditions. The interplay between health, biodiversity, agriculture, and infrastructure highlights the need for comprehensive strategies to address these interconnected challenges.',\n", + " 'audience': 'scientifique',\n", + " 'documents': [Document(metadata={'chunk_type': 'text', 'document_id': 'document4', 'document_number': 4.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 34.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 1223.0, 'num_tokens': 225.0, 'num_tokens_approx': 272.0, 'num_words': 204.0, 'page_number': 11, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': '(b) Observed impacts of climate change on human systems', 'short_name': 'IPCC AR6 WGII SPM', 'source': 'IPCC', 'toc_level0': 'B: Observed and Projected Impacts and Risks', 'toc_level1': 'Observed Impacts from Climate Change', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_SummaryForPolicymakers.pdf', 'similarity_score': 0.783784747, 'content': 'B.1.4 Climate change has adversely affected physical health of people globally (very high confidence) and mental health of people in the assessed regions (very high confidence). Climate change impacts on health are mediated through natural and human systems, including economic and social conditions and disruptions (high confidence). In all regions extreme heat events have resulted in human mortality and morbidity (very high confidence). The occurrence of climate-related food-borne and water-borne diseases has increased (very high confidence). The incidence of vector-borne diseases has increased from range expansion and/or increased reproduction of disease vectors (high confidence). Animal and human diseases, including zoonoses, are emerging in new areas (high confidence). Water and food-borne disease risks have increased regionally from climate-sensitive aquatic pathogens, including Vibrio spp. (high confidence), and from toxic substances from harmful freshwater cyanobacteria (medium confidence). Although diarrheal diseases have decreased globally, higher temperatures, increased rain and flooding have increased the occurrence of diarrheal diseases, including cholera (very high confidence)', 'reranking_score': 0.9999046325683594, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'How does climate change affect human health and society?', 'index_used': 'Vector'}, page_content='B.1.4 Climate change has adversely affected physical health of people globally (very high confidence) and mental health of people in the assessed regions (very high confidence). Climate change impacts on health are mediated through natural and human systems, including economic and social conditions and disruptions (high confidence). In all regions extreme heat events have resulted in human mortality and morbidity (very high confidence). The occurrence of climate-related food-borne and water-borne diseases has increased (very high confidence). The incidence of vector-borne diseases has increased from range expansion and/or increased reproduction of disease vectors (high confidence). Animal and human diseases, including zoonoses, are emerging in new areas (high confidence). Water and food-borne disease risks have increased regionally from climate-sensitive aquatic pathogens, including Vibrio spp. (high confidence), and from toxic substances from harmful freshwater cyanobacteria (medium confidence). Although diarrheal diseases have decreased globally, higher temperatures, increased rain and flooding have increased the occurrence of diarrheal diseases, including cholera (very high confidence)'),\n", + " Document(metadata={'chunk_type': 'image', 'document_id': 'document4', 'document_number': 4.0, 'element_id': 'Picture_1_9', 'figure_code': 'Figure SPM.2', 'file_size': 221.7900390625, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document4/images/Picture_1_9.png', 'n_pages': 34.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 10, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII SPM', 'source': 'IPCC', 'toc_level0': 'B: Observed and Projected Impacts and Risks', 'toc_level1': 'Observed Impacts from Climate Change', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_SummaryForPolicymakers.pdf', 'similarity_score': 0.753355443, 'content': \"Summary: This visual summarizes the observed impacts of climate change on various human systems across different global regions, including effects on water scarcity, food production (agriculture, livestock, fisheries), human health (infectious diseases, malnutrition, mental health), displacement, and the damage to cities, infrastructure, and economic sectors. The graphic highlights the degree of confidence in the attribution of these impacts to climate change, with varied confidence levels indicated by the color and filling of symbols for global assessments and regional assessments. Each region's row indicates the observed impacts, allowing a comparison of how climate change has differentially affected human systems around the world.\", 'reranking_score': 0.9998388290405273, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'How does climate change affect human health and society?', 'index_used': 'Vector'}, page_content=\"Summary: This visual summarizes the observed impacts of climate change on various human systems across different global regions, including effects on water scarcity, food production (agriculture, livestock, fisheries), human health (infectious diseases, malnutrition, mental health), displacement, and the damage to cities, infrastructure, and economic sectors. The graphic highlights the degree of confidence in the attribution of these impacts to climate change, with varied confidence levels indicated by the color and filling of symbols for global assessments and regional assessments. Each region's row indicates the observed impacts, allowing a comparison of how climate change has differentially affected human systems around the world.\"),\n", + " Document(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': 416.0, 'num_tokens': 74.0, 'num_tokens_approx': 84.0, 'num_words': 63.0, 'page_number': 13, 'release_date': 2023.0, 'report_type': 'SPM', 'section_header': 'Observed Changes and Impacts', '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.739644825, 'content': 'Adverse impacts from human-caused climate change will continue to intensify\\na) Observed widespread and substantial impacts and related losses and damages attributed to climate change\\nHealth and well-being\\nWater availability and food production \\nCities, settlements and infrastructure\\nb) Impacts are driven by changes in multiple physical climate conditions, which are increasingly attributed to human influence', 'reranking_score': 0.9997883439064026, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'How does climate change affect human health and society?', 'index_used': 'Vector'}, page_content='Adverse impacts from human-caused climate change will continue to intensify\\na) Observed widespread and substantial impacts and related losses and damages attributed to climate change\\nHealth and well-being\\nWater availability and food production \\nCities, settlements and infrastructure\\nb) Impacts are driven by changes in multiple physical climate conditions, which are increasingly attributed to human influence'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document34', 'document_number': 34.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 52.0, 'name': 'Summary for Policymakers. Regional Assessment Report on Biodiversity and Ecosystem Services for Europe and Central Asia', 'num_characters': 827.0, 'num_tokens': 206.0, 'num_tokens_approx': 226.0, 'num_words': 170.0, 'page_number': 30, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': \"Figure SPM 8 Trends in direct drivers of biodiversity and nature's contributions to people in the \\r\\nlast 20 years.\", 'short_name': 'IPBES RAR ECA SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3237468/files/ipbes_assessment_spm_eca_EN.pdf', 'similarity_score': 0.742851615, 'content': 'Climate change shifts seasonal timing, growth and productivity, species ranges and habitat location, which affects biodiversity, agriculture, forestry, and fisheries (well \\nestablished) {4.7.1.1, 4.7.1.3}. Many species will not migrate or adapt fast enough to keep pace with projected rates of climate change (established but incomplete) {4.7.1}. Droughts decrease biomass productivity, increase biodiversity loss and net carbon flux to the atmosphere, and decrease water quality in aquatic systems (established but incomplete) {4.7.1.2, 5.2}. Climate change causes ocean acidification, rising sea levels and changes ocean stratification, reducing biodiversity, growth and productivity, impairing fisheries and increasing CO2 release into the atmosphere (established but incomplete) {4.7.1.1, 4.7.1.3}.', 'reranking_score': 0.9997496008872986, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'What are the effects of climate change on the environment?', 'index_used': 'Vector'}, page_content='Climate change shifts seasonal timing, growth and productivity, species ranges and habitat location, which affects biodiversity, agriculture, forestry, and fisheries (well \\nestablished) {4.7.1.1, 4.7.1.3}. Many species will not migrate or adapt fast enough to keep pace with projected rates of climate change (established but incomplete) {4.7.1}. Droughts decrease biomass productivity, increase biodiversity loss and net carbon flux to the atmosphere, and decrease water quality in aquatic systems (established but incomplete) {4.7.1.2, 5.2}. Climate change causes ocean acidification, rising sea levels and changes ocean stratification, reducing biodiversity, growth and productivity, impairing fisheries and increasing CO2 release into the atmosphere (established but incomplete) {4.7.1.1, 4.7.1.3}.'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document30', 'document_number': 30.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 44.0, 'name': 'Summary for Policymakers. Regional Assessment Report on Biodiversity and Ecosystem Services for the Americas', 'num_characters': 886.0, 'num_tokens': 173.0, 'num_tokens_approx': 194.0, 'num_words': 146.0, 'page_number': 15, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': \"C. DRIVERS OF TRENDS IN \\r\\nBIODIVERSITY AND NATURE'S \\r\\nCONTRIBUTIONS TO PEOPLE\", 'short_name': 'IPBES RAR AM SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3236292/files/ipbes_assessment_spm_americas_EN.pdf', 'similarity_score': 0.734894216, 'content': \"C4 Human-induced climate change is becoming an increasingly important direct driver, amplifying the impacts of other drivers (i.e., habitat degradation, pollution, invasive species and overexploitation) through changes in temperature, precipitation and the nature of some extreme events. Regional changes in temperature of the atmosphere and the ocean will be accompanied by changes in glacial extent, rainfall, river discharge, wind and ocean currents and sea level, among many other environmental features, which, on balance, have had adverse impacts on biodiversity and nature's contributions to people. The majority of ecosystems in the Americas have already experienced increased mean and extreme temperatures and/or, in some places, mean and \\nextreme precipitation, causing changes in species distributions and interactions and in ecosystem boundaries.\", 'reranking_score': 0.9997311234474182, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'What are the effects of climate change on the environment?', 'index_used': 'Vector'}, page_content=\"C4 Human-induced climate change is becoming an increasingly important direct driver, amplifying the impacts of other drivers (i.e., habitat degradation, pollution, invasive species and overexploitation) through changes in temperature, precipitation and the nature of some extreme events. Regional changes in temperature of the atmosphere and the ocean will be accompanied by changes in glacial extent, rainfall, river discharge, wind and ocean currents and sea level, among many other environmental features, which, on balance, have had adverse impacts on biodiversity and nature's contributions to people. The majority of ecosystems in the Americas have already experienced increased mean and extreme temperatures and/or, in some places, mean and \\nextreme precipitation, causing changes in species distributions and interactions and in ecosystem boundaries.\"),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document36', 'document_number': 36.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 48.0, 'name': 'Summary for Policymakers. Assessment Report on Land Degradation and Restoration', 'num_characters': 978.0, 'num_tokens': 211.0, 'num_tokens_approx': 248.0, 'num_words': 186.0, 'page_number': 34, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': 'Figure SPM 11 Illustration of the biodiversity impacts of international trade in 2000. ', 'short_name': 'IPBES AR LDR SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/records/3237411/files/ipbes_assessment_spm_ldra_EN.pdf?download=1', 'similarity_score': 0.727124453, 'content': '25 Climate change threatens to become an increasingly important driver of land degradation throughout the twenty-first century, exacerbating both the extent and severity of land degradation as well as reducing the effectiveness and sustainability of restoration options {3.4}. Climate change can have a direct effect on agricultural yields, through changes in the means and extremes of temperature, precipitation and CO2 concentrations, as well as on species distributions and population dynamics, for instance, pest species {3.4.1, 3.4.2, 3.4.4, 4.2.8, 7.2.6}. However, the greatest effects of climate change on land is likely to come from interactions with other degradation drivers {3.4.5}. Long-established sustainable land management and restoration practices may no longer be viable under future climatic regimes in the places where they were developed, requiring rapid adaptation and innovation, but also opening new opportunities {3.5}.', 'reranking_score': 0.9997143149375916, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'What are the effects of climate change on the environment?', 'index_used': 'Vector'}, page_content='25 Climate change threatens to become an increasingly important driver of land degradation throughout the twenty-first century, exacerbating both the extent and severity of land degradation as well as reducing the effectiveness and sustainability of restoration options {3.4}. Climate change can have a direct effect on agricultural yields, through changes in the means and extremes of temperature, precipitation and CO2 concentrations, as well as on species distributions and population dynamics, for instance, pest species {3.4.1, 3.4.2, 3.4.4, 4.2.8, 7.2.6}. However, the greatest effects of climate change on land is likely to come from interactions with other degradation drivers {3.4.5}. Long-established sustainable land management and restoration practices may no longer be viable under future climatic regimes in the places where they were developed, requiring rapid adaptation and innovation, but also opening new opportunities {3.5}.'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document30', 'document_number': 30.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 44.0, 'name': 'Summary for Policymakers. Regional Assessment Report on Biodiversity and Ecosystem Services for the Americas', 'num_characters': 290.0, 'num_tokens': 65.0, 'num_tokens_approx': 77.0, 'num_words': 58.0, 'page_number': 29, 'release_date': 2018.0, 'report_type': 'SPM', 'section_header': \"C. Drivers of trends in biodiversity \\r\\nand nature's contributions to people \", 'short_name': 'IPBES RAR AM SPM', 'source': 'IPBES', 'toc_level0': 'N/A', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3236292/files/ipbes_assessment_spm_americas_EN.pdf', 'similarity_score': 0.725049078, 'content': 'is also associated with trends of accelerated tree mortality in tropical forests {4.4.3}. Climate change is likely to have a substantial impact on mangrove ecosystems through factors including sea level rise, changing ocean currents increased temperature and others {4.4.3, 5.4.11}.', 'reranking_score': 0.9997047781944275, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'What are the effects of climate change on the environment?', 'index_used': 'Vector'}, page_content='is also associated with trends of accelerated tree mortality in tropical forests {4.4.3}. Climate change is likely to have a substantial impact on mangrove ecosystems through factors including sea level rise, changing ocean currents increased temperature and others {4.4.3, 5.4.11}.'),\n", + " Document(metadata={'chunk_type': 'image', 'document_id': 'document10', 'document_number': 10.0, 'element_id': 'Picture_0_12', 'figure_code': 'N/A', 'file_size': 109.03125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document10/images/Picture_0_12.png', 'n_pages': 36.0, 'name': 'Synthesis report of the IPCC Sixth Assesment Report AR6', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 13, 'release_date': 2023.0, 'report_type': 'SPM', 'section_header': 'N/A', '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.721349299, 'content': 'Summary: This image provides a visual summary of the impacts of climate change on various aspects such as health, well-being, agriculture, water availability, and ecosystems. It shows the relationships between physical climate conditions altered by human influence and the consequential effects on food production, human health, and biodiversity. The visual icons depict specific areas affected by climate change, including crop production, animal and livestock health, fisheries, infectious diseases, mental health, and displacement due to extreme weather events. Additionally, it addresses the impacts on cities, settlements, and infrastructure, illustrating issues like inland flooding, storm-induced coastal damage, and damage to key economic sectors. For biodiversity, it highlights the changes occurring in terrestrial, freshwater, and ocean ecosystems. These elements are critical for understanding targeted areas for climate resilience and adaptation strategies.', 'reranking_score': 0.9997047781944275, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'What are the effects of climate change on the environment?', 'index_used': 'Vector'}, page_content='Summary: This image provides a visual summary of the impacts of climate change on various aspects such as health, well-being, agriculture, water availability, and ecosystems. It shows the relationships between physical climate conditions altered by human influence and the consequential effects on food production, human health, and biodiversity. The visual icons depict specific areas affected by climate change, including crop production, animal and livestock health, fisheries, infectious diseases, mental health, and displacement due to extreme weather events. Additionally, it addresses the impacts on cities, settlements, and infrastructure, illustrating issues like inland flooding, storm-induced coastal damage, and damage to key economic sectors. For biodiversity, it highlights the changes occurring in terrestrial, freshwater, and ocean ecosystems. These elements are critical for understanding targeted areas for climate resilience and adaptation strategies.'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document33', 'document_number': 33.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 894.0, 'name': 'Full Report. Regional Assessment Report on Biodiversity and Ecosystem Services for Europe and Central Asia', 'num_characters': 918.0, 'num_tokens': 233.0, 'num_tokens_approx': 230.0, 'num_words': 173.0, 'page_number': 530, 'release_date': 2018.0, 'report_type': 'Full Report', 'section_header': '4.7 DRIVERS AND \\r\\nEFFECTS OF CLIMATE \\r\\nCHANGE ', 'short_name': 'IPBES RAR ECA FR', 'source': 'IPBES', 'toc_level0': \"CHAPTER 4: DIRECT AND INDIRECT DRIVERS OF CHANGE IN BIODIVERSITY AND NATURE'S CONTRIBUTIONS PEOPLE\", 'toc_level1': '4.7 Drivers and effects of climate change ', 'toc_level2': '4.7.1 Effects of climate change on biodiversity', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3237429/files/ipbes_assessment_report_eca_EN.pdf', 'similarity_score': 0.767219245, 'content': \"4.7 DRIVERS AND EFFECTS OF CLIMATE CHANGE \\n4.7.1 Effects of climate change on biodiversity\\n4.7.1 Effects of climate change on biodiversity\\n 4.7.1 Effects of climate change on biodiversity \\n\\nand modulate important ecosystem functions and processes that underpin human livelihoods and nature's contributions to people, such as water regulation, food production, and carbon sequestration (CBD, 2016; Gallardo et al., 2015; IPBES, 2016a; IPCC, 2014a; MEA, 2005a).\\nClimate change is a complex driver of ecosystem change, consisting of changes in precipitation and temperature patterns which lead to changes in drought, flood, and fire risk, ocean-atmosphere interchange, marine circulation and stratification, and the concentrations and distribution of O2 and CO2 in the atmosphere and in the ocean (IPCC, 2014a). These impacts affect species and influence\", 'reranking_score': 0.9996898174285889, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'What are the effects of climate change on the environment?', 'index_used': 'Vector'}, page_content=\"4.7 DRIVERS AND EFFECTS OF CLIMATE CHANGE \\n4.7.1 Effects of climate change on biodiversity\\n4.7.1 Effects of climate change on biodiversity\\n 4.7.1 Effects of climate change on biodiversity \\n\\nand modulate important ecosystem functions and processes that underpin human livelihoods and nature's contributions to people, such as water regulation, food production, and carbon sequestration (CBD, 2016; Gallardo et al., 2015; IPBES, 2016a; IPCC, 2014a; MEA, 2005a).\\nClimate change is a complex driver of ecosystem change, consisting of changes in precipitation and temperature patterns which lead to changes in drought, flood, and fire risk, ocean-atmosphere interchange, marine circulation and stratification, and the concentrations and distribution of O2 and CO2 in the atmosphere and in the ocean (IPCC, 2014a). These impacts affect species and influence\"),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document4', 'document_number': 4.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 34.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 743.0, 'num_tokens': 243.0, 'num_tokens_approx': 282.0, 'num_words': 212.0, 'page_number': 9, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'Observed Impacts from Climate Change', 'short_name': 'IPCC AR6 WGII SPM', 'source': 'IPCC', 'toc_level0': 'B: Observed and Projected Impacts and Risks', 'toc_level1': 'Observed Impacts from Climate Change', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_SummaryForPolicymakers.pdf', 'similarity_score': 0.737967908, 'content': 'B.1 Human-induced climate change, including more frequent and intense extreme events, has caused widespread adverse impacts and related losses and damages to nature and people, beyond natural climate variability. Some development and adaptation efforts have reduced vulnerability. Across sectors and regions the most vulnerable people and systems are ob\\x02served to be disproportionately affected. The rise in weather and climate extremes has led to some irreversible impacts as natural and human systems are pushed beyond their ability to adapt. (high confidence) (Figure SPM.2) {TS B.1, Figure TS.5, 1.3, 2.3, 2.4, 2.6, 3.3, 3.4, 3.5, 4.2, 4.3, 5.2, 5.12, 6.2, 7.2, 8.2, 9.6, 9.8, 9.10, 9.11, 10.4, 11.3, 12.3, 12.4, 13.10, 14.4, 14.5,', 'reranking_score': 0.9996700286865234, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'How does climate change affect human health and society?', 'index_used': 'Vector'}, page_content='B.1 Human-induced climate change, including more frequent and intense extreme events, has caused widespread adverse impacts and related losses and damages to nature and people, beyond natural climate variability. Some development and adaptation efforts have reduced vulnerability. Across sectors and regions the most vulnerable people and systems are ob\\x02served to be disproportionately affected. The rise in weather and climate extremes has led to some irreversible impacts as natural and human systems are pushed beyond their ability to adapt. (high confidence) (Figure SPM.2) {TS B.1, Figure TS.5, 1.3, 2.3, 2.4, 2.6, 3.3, 3.4, 3.5, 4.2, 4.3, 5.2, 5.12, 6.2, 7.2, 8.2, 9.6, 9.8, 9.10, 9.11, 10.4, 11.3, 12.3, 12.4, 13.10, 14.4, 14.5,'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document4', 'document_number': 4.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 34.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 989.0, 'num_tokens': 226.0, 'num_tokens_approx': 273.0, 'num_words': 205.0, 'page_number': 11, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': '(b) Observed impacts of climate change on human systems', 'short_name': 'IPCC AR6 WGII SPM', 'source': 'IPCC', 'toc_level0': 'B: Observed and Projected Impacts and Risks', 'toc_level1': 'Observed Impacts from Climate Change', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_SummaryForPolicymakers.pdf', 'similarity_score': 0.725235641, 'content': 'B.1.5 In urban settings, observed climate change has caused impacts on human health, livelihoods and key infrastructure (high confidence). Multiple climate and non-climate hazards impact cities, settlements and infrastructure and sometimes coincide, magnifying damage (high confidence). Hot extremes including heatwaves have intensified in cities (high confidence), where they have also aggravated air pollution events (medium confidence) and limited functioning of key infrastructure (high confidence). Observed impacts are concentrated amongst the economically and socially marginalized urban residents, e.g., in informal settlements (high confidence). Infrastructure, including transportation, water, sanitation and energy systems have been compromised by extreme and slow-onset events, with resulting economic losses, disruptions of services and impacts to well-being (high confidence). {4.3, 6.2, 7.1, 7.2, 9.9, 10.4, 11.3, 12.3, 13.6, 14.5, 15.3, CCP2.2, CCP4.2, CCP5.2}', 'reranking_score': 0.9996700286865234, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'How does climate change affect human health and society?', 'index_used': 'Vector'}, page_content='B.1.5 In urban settings, observed climate change has caused impacts on human health, livelihoods and key infrastructure (high confidence). Multiple climate and non-climate hazards impact cities, settlements and infrastructure and sometimes coincide, magnifying damage (high confidence). Hot extremes including heatwaves have intensified in cities (high confidence), where they have also aggravated air pollution events (medium confidence) and limited functioning of key infrastructure (high confidence). Observed impacts are concentrated amongst the economically and socially marginalized urban residents, e.g., in informal settlements (high confidence). Infrastructure, including transportation, water, sanitation and energy systems have been compromised by extreme and slow-onset events, with resulting economic losses, disruptions of services and impacts to well-being (high confidence). {4.3, 6.2, 7.1, 7.2, 9.9, 10.4, 11.3, 12.3, 13.6, 14.5, 15.3, CCP2.2, CCP4.2, CCP5.2}'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document25', 'document_number': 25.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 1008.0, 'name': 'Full Report. Thematic assessment of the sustainable use of wild species of the IPBES', 'num_characters': 307.0, 'num_tokens': 66.0, 'num_tokens_approx': 76.0, 'num_words': 57.0, 'page_number': 516, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Environmental drivers', 'short_name': 'IPBES TAM SW FR', 'source': 'IPBES', 'toc_level0': 'Chapter 4 - Table of Contents', 'toc_level1': 'N/A', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/7755805/files/IPBES_ASSESSMENT_SUWS_FULL_REPORT.pdf', 'similarity_score': 0.748966157, 'content': '- The effects of climate change are compounded and complicated by interactions with other environmental, socio-cultural, political, and economic drivers (established but incomplete) {4.2.1.2}.\\nBiological hazards: Zoonotic disease and the use of wild species are interconnected. Species for wild meat', 'reranking_score': 0.9996500015258789, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'What are the effects of climate change on the environment?', 'index_used': 'Vector'}, page_content='- The effects of climate change are compounded and complicated by interactions with other environmental, socio-cultural, political, and economic drivers (established but incomplete) {4.2.1.2}.\\nBiological hazards: Zoonotic disease and the use of wild species are interconnected. Species for wild meat'),\n", + " Document(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': 1158.0, 'num_tokens': 221.0, 'num_tokens_approx': 274.0, 'num_words': 206.0, 'page_number': 1138, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'FAQ 7.1 | How will climate change affect physical and mental health and well-being?', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 7 Health, Wellbeing and the Changing Structure of Communities', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.825700223, 'content': 'Climate change will affect human health and well-being in a variety of direct and indirect ways that depend on exposure to hazards and vulnerabilities that are heterogeneous and vary within societies, and that are influenced by social, economic and geographical factors and individual differences (see Figure FAQ7.1.1). Changes in the magnitude, frequency and intensity of extreme climate events (e.g., storms, floods, wildfires, heatwaves and dust storms) will expose people to increased risks of climate-sensitive illnesses and injuries and, in the worst cases, higher mortality rates. Increased risks for mental health and well-being are associated with changes caused by the impacts of climate change on climate-sensitive health outcomes and systems (see Figure FAQ7.1.2). Higher temperatures and changing geographical and seasonal precipitation patterns will facilitate the spread of mosquito- and tick-borne diseases, such as Lyme disease and dengue fever, and water- and food-borne diseases. An increase in the frequency of extreme heat events will exacerbate health risks associated with cardiovascular disease and affect access to', 'reranking_score': 0.9996476173400879, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'How does climate change affect human health and society?', 'index_used': 'Vector'}, page_content='Climate change will affect human health and well-being in a variety of direct and indirect ways that depend on exposure to hazards and vulnerabilities that are heterogeneous and vary within societies, and that are influenced by social, economic and geographical factors and individual differences (see Figure FAQ7.1.1). Changes in the magnitude, frequency and intensity of extreme climate events (e.g., storms, floods, wildfires, heatwaves and dust storms) will expose people to increased risks of climate-sensitive illnesses and injuries and, in the worst cases, higher mortality rates. Increased risks for mental health and well-being are associated with changes caused by the impacts of climate change on climate-sensitive health outcomes and systems (see Figure FAQ7.1.2). Higher temperatures and changing geographical and seasonal precipitation patterns will facilitate the spread of mosquito- and tick-borne diseases, such as Lyme disease and dengue fever, and water- and food-borne diseases. An increase in the frequency of extreme heat events will exacerbate health risks associated with cardiovascular disease and affect access to'),\n", + " Document(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': 493.0, 'num_tokens': 96.0, 'num_tokens_approx': 114.0, 'num_words': 86.0, 'page_number': 2483, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '16.5.4 RKR Interactions', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 16 Key Risks across Sectors and Regions', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.791373491, 'content': 'and international trade. Such disturbances to socioecological systems and economies pose climate-related risks to human health (RKR-E) as well as to peace and human mobility (RKR-H). Indeed, while health is concerned with direct influence of climate change, for example through hotter air temperatures impacting morbidity and mortality or the spatial distribution of disease vectors such as mosquitos, it is also at risk of being stressed by direct and secondary climate impacts on', 'reranking_score': 0.9995015859603882, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IPOS', 'IPCC', 'IPBES'], 'question_used': 'How does climate change affect human health and society?', 'index_used': 'Vector'}, page_content='and international trade. Such disturbances to socioecological systems and economies pose climate-related risks to human health (RKR-E) as well as to peace and human mobility (RKR-H). Indeed, while health is concerned with direct influence of climate change, for example through hotter air temperatures impacting morbidity and mortality or the spatial distribution of disease vectors such as mosquitos, it is also at risk of being stressed by direct and secondary climate impacts on')],\n", + " 'recommended_content': [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp', 'similarity_score': 0.7941333055496216, 'content': 'Change in CO2 emissions and GDP', 'reranking_score': 0.279598593711853, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in CO2 emissions and GDP'),\n", + " Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_780', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Nationally determined contributions (NDCs) embody efforts by each country to reduce national emissions and adapt to the impacts of climate change. The Paris Agreement requires each of the 193 Parties to prepare, communicate and maintain NDCs outlining what they intend to achieve. NDCs must be updated every five years.', 'url': 'https://ourworldindata.org/grapher/nationally-determined-contributions', 'similarity_score': 0.7979490756988525, 'content': 'Nationally determined contributions to climate change', 'reranking_score': 0.012760520912706852, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Nationally determined contributions to climate change'),\n", + " Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_789', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Participants were asked to score beliefs on a scale from 0 to 100 on four questions: whether action was necessary to avoid a global catastrophe; humans were causing climate change; it was a serious threat to humanity; and was a global emergency.', 'url': 'https://ourworldindata.org/grapher/share-believe-climate', 'similarity_score': 0.7580230236053467, 'content': \"Share of people who believe in climate change and think it's a serious threat to humanity\", 'reranking_score': 0.005214352160692215, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content=\"Share of people who believe in climate change and think it's a serious threat to humanity\"),\n", + " Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_782', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Share of young people in each surveyed country that responded \"yes\" to each statement about climate change. 1,000 young people, aged 16 to 25 years old, were surveyed in each country.', 'url': 'https://ourworldindata.org/grapher/opinions-young-people-climate', 'similarity_score': 0.8168312311172485, 'content': 'Opinions of young people on the threats of climate change', 'reranking_score': 0.004852706100791693, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Opinions of young people on the threats of climate change'),\n", + " Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_756', 'returned_content': '', 'source': 'OWID', 'subtitle': 'National adaptation plans are a means of identifying medium- and long-term climate change adaptation needs and developing and implementing strategies and programmes to address those needs.', 'url': 'https://ourworldindata.org/grapher/countries-with-national-adaptation-plans-for-climate-change', 'similarity_score': 0.7981775999069214, 'content': 'Countries with national adaptation plans for climate change', 'reranking_score': 0.004124350380152464, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with national adaptation plans for climate change'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.7989407181739807, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.0036289971321821213, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_383', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.8071538805961609, 'content': 'Global warming contributions by gas and source', 'reranking_score': 0.0016414257697761059, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions by gas and source'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_357', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contribution-temp-rise-degrees', 'similarity_score': 0.8584674596786499, 'content': 'Contribution to global mean surface temperature rise', 'reranking_score': 0.00025533974985592067, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_317', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Percentage change in gross domestic product (GDP), population, and carbon dioxide (CO₂) emissions.', 'url': 'https://ourworldindata.org/grapher/co2-gdp-pop-growth', 'similarity_score': 0.8730868697166443, 'content': 'Annual change in GDP, population and CO2 emissions', 'reranking_score': 0.0002404096449026838, 'query_used_for_retrieval': 'How does climate change affect human health and society?', 'sources_used': ['IEA', 'OWID']}, page_content='Annual change in GDP, population and CO2 emissions'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_350', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions include those from fossil fuels and industry. Land-use change emissions are not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-per-capita', 'similarity_score': 0.8269157409667969, 'content': 'Change in per capita CO2 emissions and GDP', 'reranking_score': 0.00023705528292339295, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in per capita CO2 emissions and GDP'),\n", + " Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_199', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.', 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species', 'similarity_score': 0.8301026225090027, 'content': 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050', 'reranking_score': 7.497359911212698e-05, 'query_used_for_retrieval': 'What are the effects of climate change on the environment?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050')]}" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# output = await app.ainvoke({\"user_input\": \"should I be a vegetarian ?\"})\n", + "output = await app.ainvoke({\"user_input\": \"what is the impact of climate change ?\", \"audience\": \"scientifique\", \"sources\": [\"IPCC\", \"IPBES\", \"IPOS\"]})\n", + "output" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['user_input', 'language', 'intent', 'query', 'remaining_questions', 'n_questions', 'answer', 'audience', 'documents', 'recommended_content'])" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "output.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(metadata={'category': 'Meat & Dairy Production', 'doc_id': 'owid_1678', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Impacts are measured per liter of milk. These are based on a meta-analysis of food system impact studies across the supply chain which includes land use change, on-farm production, processing, transport, and packaging.', 'url': 'https://ourworldindata.org/grapher/environmental-footprint-milks', 'similarity_score': 0.6826351881027222, 'content': 'Environmental footprints of dairy and plant-based milks', 'reranking_score': 0.025419369339942932, 'query_used_for_retrieval': 'What are the environmental impacts of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Environmental footprints of dairy and plant-based milks'),\n", + " Document(metadata={'category': 'Animal Welfare', 'doc_id': 'owid_174', 'returned_content': '', 'source': 'OWID', 'subtitle': '– Flexitarian: mainly vegetarian, but occasionally eat meat or fish. – Pescetarian: eat fish but do not eat meat or poultry. – Vegetarian: do not eat any meat, poultry, game, fish, or shellfish. – Plant-based / Vegan: do not eat dairy products, eggs, or any other animal product.', 'url': 'https://ourworldindata.org/grapher/dietary-choices-uk', 'similarity_score': 0.7397687435150146, 'content': 'Vegans, vegetarians and meat-eaters: self-reported dietary choices, United Kingdom', 'reranking_score': 0.0008887002477422357, 'query_used_for_retrieval': 'What are the health benefits of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Vegans, vegetarians and meat-eaters: self-reported dietary choices, United Kingdom'),\n", + " Document(metadata={'category': 'Meat & Dairy Production', 'doc_id': 'owid_1688', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Expressed in tonnes of meat. Data from 1961-2013 is based on published FAO estimates; from 2013-2050 based on FAO projections. Projections are based on future population projections and the expected impacts of regional and national economic growth trends on meat consumption.', 'url': 'https://ourworldindata.org/grapher/global-meat-projections-to-2050', 'similarity_score': 0.7610733509063721, 'content': 'Global meat consumption', 'reranking_score': 5.71148339076899e-05, 'query_used_for_retrieval': 'What are the environmental impacts of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Global meat consumption'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_382', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions from the food system are broken down by their stage in the life-cycle, from land use and on-farm production through to consumer waste. Emissions are measured in tonnes of carbon dioxide-equivalents.', 'url': 'https://ourworldindata.org/grapher/food-emissions-life-cycle', 'similarity_score': 0.7992925047874451, 'content': 'Global emissions from food by life-cycle stage', 'reranking_score': 4.49202379968483e-05, 'query_used_for_retrieval': 'What are the environmental impacts of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Global emissions from food by life-cycle stage'),\n", + " Document(metadata={'category': 'Plastic Pollution', 'doc_id': 'owid_1889', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Number of times a given grocery bag type would have to be reused to have an environmental impact as low as a standard single-use plastic bag.', 'url': 'https://ourworldindata.org/grapher/grocery-bag-environmental-impact', 'similarity_score': 0.824555516242981, 'content': 'Environmental impacts of different types of grocery bags', 'reranking_score': 2.8800952350138687e-05, 'query_used_for_retrieval': 'What are the environmental impacts of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Environmental impacts of different types of grocery bags'),\n", + " Document(metadata={'category': 'Environmental Impacts of Food Production', 'doc_id': 'owid_1175', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions are measured in tonnes of carbon dioxide-equivalents.', 'url': 'https://ourworldindata.org/grapher/emissions-from-food', 'similarity_score': 0.8313338756561279, 'content': 'Greenhouse gas emissions from food systems', 'reranking_score': 1.8187101886724122e-05, 'query_used_for_retrieval': 'What are the environmental impacts of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Greenhouse gas emissions from food systems'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_483', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Food system emissions include agriculture, land-use change, and supply chain emissions (transport, packaging, food processing, retail, cooking, and waste). Emissions are quantified based on food production, not consumption. This means they do not account for international trade.', 'url': 'https://ourworldindata.org/grapher/share-global-food-emissions', 'similarity_score': 0.8323527574539185, 'content': 'Share of global greenhouse gas emissions from food', 'reranking_score': 1.6353857063222677e-05, 'query_used_for_retrieval': 'What are the environmental impacts of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Share of global greenhouse gas emissions from food'),\n", + " Document(metadata={'category': 'Meat & Dairy Production', 'doc_id': 'owid_1673', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The percentage of global habitable land area needed for agriculture if the total world population was to adopt the average diet of any given country versus annual per capita beef consumption. Globally we use approximately 50% of habitable land for agriculture, as shown by the grey horizontal line.', 'url': 'https://ourworldindata.org/grapher/dietary-land-use-vs-beef-consumption', 'similarity_score': 0.8455410003662109, 'content': 'Dietary land use vs. beef consumption', 'reranking_score': 1.4984153494879138e-05, 'query_used_for_retrieval': 'What are the environmental impacts of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Dietary land use vs. beef consumption'),\n", + " Document(metadata={'category': 'Animal Welfare', 'doc_id': 'owid_168', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The survey measured attitudes towards animal farming with around 1,500 adults in the United States, census-balanced to be representative of age, gender, region, ethnicity, and income.', 'url': 'https://ourworldindata.org/grapher/survey-dietary-choices-sentience', 'similarity_score': 0.8580029010772705, 'content': 'Public attitudes to dietary choices and meat-eating in the United States', 'reranking_score': 1.3065436178294476e-05, 'query_used_for_retrieval': 'What are the health benefits of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Public attitudes to dietary choices and meat-eating in the United States'),\n", + " Document(metadata={'category': 'Diet Compositions', 'doc_id': 'owid_849', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Recommended intakes of animal products in the EAT-Lancet diet are shown relative to average daily per capita supply by country. The EAT-Lancet diet is a diet recommended to balance the goals of healthy nutrition and environmental sustainability for a global population.', 'url': 'https://ourworldindata.org/grapher/eat-lancet-diet-animal-products', 'similarity_score': 0.8636244535446167, 'content': 'Consumption of animal products in the EAT-Lancet diet', 'reranking_score': 1.1884163541253656e-05, 'query_used_for_retrieval': 'What are the health benefits of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Consumption of animal products in the EAT-Lancet diet'),\n", + " Document(metadata={'category': 'Food Supply', 'doc_id': 'owid_1310', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Daily meat consumption is shown relative to the expected EU average of 165g per person in 2030. This projection comes from the livestock antibiotic scenarios from Van Boeckel et al. (2017).', 'url': 'https://ourworldindata.org/grapher/daily-meat-consumption-per-person', 'similarity_score': 0.876916766166687, 'content': 'Daily meat consumption per person', 'reranking_score': 1.1853918294946197e-05, 'query_used_for_retrieval': 'What are the health benefits of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Daily meat consumption per person'),\n", + " Document(metadata={'category': 'Food Supply', 'doc_id': 'owid_1316', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Daily per capita protein supply is measured in grams per person per day. Protein of animal origin includes protein from all meat commodities, eggs and dairy products, and fish & seafood.', 'url': 'https://ourworldindata.org/grapher/daily-protein-supply-from-animal-and-plant-based-foods', 'similarity_score': 0.9169386029243469, 'content': 'Daily protein supply from animal and plant-based foods', 'reranking_score': 1.122933372244006e-05, 'query_used_for_retrieval': 'What are the health benefits of being a vegetarian?', 'sources_used': ['IEA', 'OWID']}, page_content='Daily protein supply from animal and plant-based foods')]" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "output[\"recommended_content\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "# display(Markdown(_combine_recommended_content(output[\"recommended_content\"])))" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "data": { + "text/plain": [ + "{'graphs': [{'embedding': '',\n", + " 'category': 'Diet Compositions',\n", + " 'source': 'OWID'},\n", + " {'embedding': '',\n", + " 'category': 'Diet Compositions',\n", + " 'source': 'OWID'},\n", + " {'embedding': '',\n", + " 'category': 'Diet Compositions',\n", + " 'source': 'OWID'}]}" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", + "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", + "\u001b[1;31mClick here for more info. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "from climateqa.engine.chains.answer_rag_graph import make_rag_graph_chain, _format_graphs\n", + "\n", + "chain = make_rag_graph_chain(llm)\n", + "chain.invoke({\"query\": \"salade de fruits\", \"recommended_content\": output[\"recommended_content\"]})" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Title: Nationally determined contributions to climate change\\nEmbedding: \\nSource: OWID\\nCategory: Climate Change\\n\\nTitle: Contribution to global mean surface temperature rise from fossil sources\\nEmbedding: \\nSource: OWID\\nCategory: CO2 & Greenhouse Gas Emissions\\n\\nTitle: Global warming contributions by gas and source\\nEmbedding: \\nSource: OWID\\nCategory: CO2 & Greenhouse Gas Emissions\\n\\nTitle: Share of people who believe in climate change and think it\\'s a serious threat to humanity\\nEmbedding: \\nSource: OWID\\nCategory: Climate Change\\n\\nTitle: Global warming contributions from fossil fuels and land use\\nEmbedding: \\nSource: OWID\\nCategory: CO2 & Greenhouse Gas Emissions\\n\\nTitle: Opinions of young people on the threats of climate change\\nEmbedding: \\nSource: OWID\\nCategory: Climate Change\\n\\nTitle: Global warming: Contributions to the change in global mean surface temperature\\nEmbedding: \\nSource: OWID\\nCategory: CO2 & Greenhouse Gas Emissions\\n\\nTitle: People underestimate others\\' willingness to take climate action\\nEmbedding: \\nSource: OWID\\nCategory: Climate Change\\n\\nTitle: Share of people who support policies to tackle climate change\\nEmbedding: \\nSource: OWID\\nCategory: Climate Change\\n\\nTitle: Decadal temperature anomalies\\nEmbedding: \\nSource: OWID\\nCategory: Climate Change\\n'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "graphs = []\n", + "for x in output[\"recommended_content\"]:\n", + " embedding = x.metadata[\"returned_content\"]\n", + " \n", + " # Check if the embedding has already been seen\n", + " graphs.append({\n", + " \"title\": x.page_content,\n", + " \"embedding\": embedding,\n", + " \"metadata\": {\n", + " \"source\": x.metadata[\"source\"],\n", + " \"category\": x.metadata[\"category\"]\n", + " }\n", + " })\n", + "format_data(graphs)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Setting defaults ----\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", + "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieving graphs ----\n", + "Subquestion 0: What are the ingredients of a fruit salad?\n", + "8 graphs retrieved for subquestion 1: [Document(page_content='Fruit consumption by type', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_854', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Average fruit consumption per person, differentiated by fruit types, measured in kilograms per year.', 'url': 'https://ourworldindata.org/grapher/fruit-consumption-by-fruit-type', 'similarity_score': 0.8464472889900208, 'content': 'Fruit consumption by type', 'reranking_score': 3.988455864600837e-05, 'query_used_for_retrieval': 'What are the ingredients of a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Dietary compositions by commodity group', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_852', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Average per capita dietary energy supply by commodity groups, measured in kilocalories per person per day.', 'url': 'https://ourworldindata.org/grapher/dietary-compositions-by-commodity-group', 'similarity_score': 0.8874290585517883, 'content': 'Dietary compositions by commodity group', 'reranking_score': 3.573522553779185e-05, 'query_used_for_retrieval': 'What are the ingredients of a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Dietary composition by country', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_851', 'returned_content': '', 'source': 'OWID', 'subtitle': \"Share of dietary energy supplied by food commodity types in the average individual's diet in a given country, measured in kilocalories per person per day.\", 'url': 'https://ourworldindata.org/grapher/dietary-composition-by-country', 'similarity_score': 0.947216272354126, 'content': 'Dietary composition by country', 'reranking_score': 3.129038304905407e-05, 'query_used_for_retrieval': 'What are the ingredients of a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Fruit consumption per capita', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_855', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Average fruit consumption per person, measured in kilograms per year.', 'url': 'https://ourworldindata.org/grapher/fruit-consumption-per-capita', 'similarity_score': 0.9761286973953247, 'content': 'Fruit consumption per capita', 'reranking_score': 2.5951983843697235e-05, 'query_used_for_retrieval': 'What are the ingredients of a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Average per capita fruit intake vs. minimum recommended guidelines', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_845', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Countries shown in blue have an average per capita intake below 200g per person per day; countries in green are greater than 200g. National and World Health Organization (WHO) typically set a guideline of 200g per day.', 'url': 'https://ourworldindata.org/grapher/average-per-capita-fruit-intake-vs-minimum-recommended-guidelines', 'similarity_score': 0.9765768051147461, 'content': 'Average per capita fruit intake vs. minimum recommended guidelines', 'reranking_score': 2.5002520487760194e-05, 'query_used_for_retrieval': 'What are the ingredients of a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Cashew nut yields', metadata={'category': 'Crop Yields', 'doc_id': 'owid_802', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Yields are measured in tonnes per hectare.', 'url': 'https://ourworldindata.org/grapher/cashew-nut-yields', 'similarity_score': 1.038257122039795, 'content': 'Cashew nut yields', 'reranking_score': 2.4257407858385704e-05, 'query_used_for_retrieval': 'What are the ingredients of a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Daily protein supply from animal and plant-based foods', metadata={'category': 'Food Supply', 'doc_id': 'owid_1316', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Daily per capita protein supply is measured in grams per person per day. Protein of animal origin includes protein from all meat commodities, eggs and dairy products, and fish & seafood.', 'url': 'https://ourworldindata.org/grapher/daily-protein-supply-from-animal-and-plant-based-foods', 'similarity_score': 1.039305329322815, 'content': 'Daily protein supply from animal and plant-based foods', 'reranking_score': 2.3620234060217626e-05, 'query_used_for_retrieval': 'What are the ingredients of a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Daily caloric supply derived from carbohydrates, protein and fat', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_850', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The average per capita supply of calories derived from carbohydrates, protein and fat, all measured in kilocalories per person per day.', 'url': 'https://ourworldindata.org/grapher/daily-caloric-supply-derived-from-carbohydrates-protein-and-fat', 'similarity_score': 1.0418040752410889, 'content': 'Daily caloric supply derived from carbohydrates, protein and fat', 'reranking_score': 2.3583004804095253e-05, 'query_used_for_retrieval': 'What are the ingredients of a fruit salad?', 'sources_used': ['IEA', 'OWID']})]\n", + "Subquestion 1: How to make a fruit salad?\n", + "7 graphs retrieved for subquestion 2: [Document(page_content='Fruit consumption by type', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_854', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Average fruit consumption per person, differentiated by fruit types, measured in kilograms per year.', 'url': 'https://ourworldindata.org/grapher/fruit-consumption-by-fruit-type', 'similarity_score': 0.8765200972557068, 'content': 'Fruit consumption by type', 'reranking_score': 3.0426110242842697e-05, 'query_used_for_retrieval': 'How to make a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Average per capita fruit intake vs. minimum recommended guidelines', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_845', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Countries shown in blue have an average per capita intake below 200g per person per day; countries in green are greater than 200g. National and World Health Organization (WHO) typically set a guideline of 200g per day.', 'url': 'https://ourworldindata.org/grapher/average-per-capita-fruit-intake-vs-minimum-recommended-guidelines', 'similarity_score': 0.9526513814926147, 'content': 'Average per capita fruit intake vs. minimum recommended guidelines', 'reranking_score': 2.9851042199879885e-05, 'query_used_for_retrieval': 'How to make a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Cashew nut production', metadata={'category': 'Agricultural Production', 'doc_id': 'owid_21', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Cashew nut production is measured in tonnes.', 'url': 'https://ourworldindata.org/grapher/cashew-nut-production', 'similarity_score': 0.9603457450866699, 'content': 'Cashew nut production', 'reranking_score': 2.8193233447382227e-05, 'query_used_for_retrieval': 'How to make a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Fruit consumption per capita', metadata={'category': 'Diet Compositions', 'doc_id': 'owid_855', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Average fruit consumption per person, measured in kilograms per year.', 'url': 'https://ourworldindata.org/grapher/fruit-consumption-per-capita', 'similarity_score': 0.9623799920082092, 'content': 'Fruit consumption per capita', 'reranking_score': 2.4916422262322158e-05, 'query_used_for_retrieval': 'How to make a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Avocado production', metadata={'category': 'Agricultural Production', 'doc_id': 'owid_15', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Avocado production is measured in tonnes.', 'url': 'https://ourworldindata.org/grapher/avocado-production', 'similarity_score': 0.96598219871521, 'content': 'Avocado production', 'reranking_score': 2.4747036150074564e-05, 'query_used_for_retrieval': 'How to make a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Banana production', metadata={'category': 'Agricultural Production', 'doc_id': 'owid_16', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Data source: Food and Agriculture Organization of the United Nations (2023)', 'url': 'https://ourworldindata.org/grapher/banana-production', 'similarity_score': 0.9927387237548828, 'content': 'Banana production', 'reranking_score': 2.4040627977228723e-05, 'query_used_for_retrieval': 'How to make a fruit salad?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Orange production', metadata={'category': 'Agricultural Production', 'doc_id': 'owid_57', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Orange production is measured in tonnes.', 'url': 'https://ourworldindata.org/grapher/orange-production', 'similarity_score': 1.0025488138198853, 'content': 'Orange production', 'reranking_score': 2.3612847144249827e-05, 'query_used_for_retrieval': 'How to make a fruit salad?', 'sources_used': ['IEA', 'OWID']})]\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": [ + "\n", + "DOCS USED: False\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": [ + "\n", + "\n", + "Answer:\n", + "Ce n'est pas lié aux questions environnementales, ce n'est pas de mon ressort.\n" + ] + } + ], + "source": [ + "docs_used = True\n", + "\n", + "async for event in app.astream_events({\"user_input\": \"salade de fruits\"}, version = \"v1\"):\n", + " if docs_used is True and \"metadata\" in event and \"langgraph_node\" in event[\"metadata\"]:\n", + " if event[\"metadata\"][\"langgraph_node\"] in [\"answer_rag_no_docs\", \"answer_chitchat\", \"answer_ai_impact\"]:\n", + " docs_used = False\n", + " print(f\"\\nDOCS USED: {docs_used}\\n\")\n", + " # if event[\"name\"] == \"retrieve_documents\" and event[\"event\"] == \"on_chain_end\":\n", + " # print(event)\n", + " # print(event)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/dora/anaconda3/envs/climateqa_huggingface/lib/python3.12/site-packages/langchain_core/_api/beta_decorator.py:87: LangChainBetaWarning: This API is in beta and may change in the future.\n", + " warn_beta(\n" + ] + } + ], + "source": [ + "inputs = {'user_input': 'impact of ai?', 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources': ['IPCC']}\n", + "result = app.astream_events(inputs,version = \"v1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'event': 'on_chain_start', 'run_id': 'da753bb9-2339-4fc0-b1d7-86443019c4df', 'name': 'LangGraph', 'tags': [], 'metadata': {}, 'data': {'input': {'user_input': 'impact of ai?', 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources': ['IPCC']}}}\n", + "{'event': 'on_chain_start', 'name': '__start__', 'run_id': '07d726da-2d7c-48a3-ad2b-5c28e29729a9', 'tags': ['graph:step:0', 'langsmith:hidden'], 'metadata': {'langgraph_step': 0, 'langgraph_node': '__start__'}, 'data': {'input': {'user_input': 'impact of ai?', 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources': ['IPCC']}}}\n", + "{'event': 'on_chain_end', 'name': '__start__', 'run_id': '07d726da-2d7c-48a3-ad2b-5c28e29729a9', 'tags': ['graph:step:0', 'langsmith:hidden'], 'metadata': {'langgraph_step': 0, 'langgraph_node': '__start__'}, 'data': {'input': {'user_input': 'impact of ai?', 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources': ['IPCC']}, 'output': {'user_input': 'impact of ai?', 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources': ['IPCC']}}}\n", + "{'event': 'on_chain_start', 'name': 'set_defaults', 'run_id': '2f946975-07d9-403b-b617-7bca602d4419', 'tags': ['graph:step:1'], 'metadata': {'langgraph_step': 1, 'langgraph_node': 'set_defaults'}, 'data': {}}\n", + "---- Setting defaults ----\n", + "{'event': 'on_chain_start', 'name': 'ChannelWrite', 'run_id': '22442e33-6cb8-4796-8224-fb3107783979', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {'langgraph_step': 1, 'langgraph_node': 'set_defaults'}, 'data': {'input': {'user_input': 'impact of ai?', 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}}}\n", + "{'event': 'on_chain_end', 'name': 'ChannelWrite', 'run_id': '22442e33-6cb8-4796-8224-fb3107783979', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {'langgraph_step': 1, 'langgraph_node': 'set_defaults'}, 'data': {'input': {'user_input': 'impact of ai?', 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}, 'output': {'user_input': 'impact of ai?', 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}}}\n", + "{'event': 'on_chain_stream', 'name': 'set_defaults', 'run_id': '2f946975-07d9-403b-b617-7bca602d4419', 'tags': ['graph:step:1'], 'metadata': {'langgraph_step': 1, 'langgraph_node': 'set_defaults'}, 'data': {'chunk': {'user_input': 'impact of ai?', 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}}}\n", + "{'event': 'on_chain_end', 'name': 'set_defaults', 'run_id': '2f946975-07d9-403b-b617-7bca602d4419', 'tags': ['graph:step:1'], 'metadata': {'langgraph_step': 1, 'langgraph_node': 'set_defaults'}, 'data': {'input': {'user_input': 'impact of ai?', 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}, 'output': {'user_input': 'impact of ai?', 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}}}\n", + "{'event': 'on_chain_stream', 'run_id': 'da753bb9-2339-4fc0-b1d7-86443019c4df', 'tags': [], 'metadata': {}, 'name': 'LangGraph', 'data': {'chunk': {'set_defaults': {'user_input': 'impact of ai?', 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}}}}\n", + "{'event': 'on_chain_start', 'name': 'categorize_intent', 'run_id': '66f31c85-1a4b-48b4-9e4f-ad884263809c', 'tags': ['graph:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {}}\n", + "{'event': 'on_chain_start', 'name': 'RunnableSequence', 'run_id': 'e5b8bbe4-eeb1-478a-a105-254d4f4a516b', 'tags': ['seq:step:1'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'input': 'impact of ai?'}}}\n", + "{'event': 'on_prompt_start', 'name': 'ChatPromptTemplate', 'run_id': '6fda6f8f-64ba-4b08-8c16-d7f77390f671', 'tags': ['seq:step:1'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'input': 'impact of ai?'}}}\n", + "{'event': 'on_prompt_end', 'name': 'ChatPromptTemplate', 'run_id': '6fda6f8f-64ba-4b08-8c16-d7f77390f671', 'tags': ['seq:step:1'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'input': 'impact of ai?'}, 'output': ChatPromptValue(messages=[SystemMessage(content='You are a helpful assistant, you will analyze, translate and reformulate the user input message using the function provided'), HumanMessage(content='input: impact of ai?')])}}\n", + "{'event': 'on_chat_model_start', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'input': {'messages': [[SystemMessage(content='You are a helpful assistant, you will analyze, translate and reformulate the user input message using the function provided'), HumanMessage(content='input: impact of ai?')]]}}}\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": [ + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', additional_kwargs={'function_call': {'arguments': '', 'name': 'IntentCategorizer'}}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', additional_kwargs={'function_call': {'arguments': '{\"', 'name': ''}}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', additional_kwargs={'function_call': {'arguments': 'intent', 'name': ''}}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', additional_kwargs={'function_call': {'arguments': '\":\"', 'name': ''}}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', additional_kwargs={'function_call': {'arguments': 'ai', 'name': ''}}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', additional_kwargs={'function_call': {'arguments': '_imp', 'name': ''}}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', additional_kwargs={'function_call': {'arguments': 'act', 'name': ''}}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', additional_kwargs={'function_call': {'arguments': '\"}', 'name': ''}}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', response_metadata={'finish_reason': 'stop'}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_chat_model_end', 'name': 'ChatOpenAI', 'run_id': '2d9ccf59-3d78-42b1-8458-83a9c3479ef8', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent', 'ls_model_type': 'chat'}, 'data': {'input': {'messages': [[SystemMessage(content='You are a helpful assistant, you will analyze, translate and reformulate the user input message using the function provided'), HumanMessage(content='input: impact of ai?')]]}, 'output': {'generations': [[{'text': '', 'generation_info': {'finish_reason': 'stop'}, 'type': 'ChatGeneration', 'message': AIMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"intent\":\"ai_impact\"}', 'name': 'IntentCategorizer'}}, response_metadata={'finish_reason': 'stop'}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}]], 'llm_output': None, 'run': None}}}\n", + "{'event': 'on_parser_start', 'name': 'JsonOutputFunctionsParser', 'run_id': 'bca6f5e6-2496-46bb-b94c-397c844977a0', 'tags': ['seq:step:3'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': AIMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"intent\":\"ai_impact\"}', 'name': 'IntentCategorizer'}}, response_metadata={'finish_reason': 'stop'}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8')}}\n", + "{'event': 'on_parser_end', 'name': 'JsonOutputFunctionsParser', 'run_id': 'bca6f5e6-2496-46bb-b94c-397c844977a0', 'tags': ['seq:step:3'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': AIMessage(content='', additional_kwargs={'function_call': {'arguments': '{\"intent\":\"ai_impact\"}', 'name': 'IntentCategorizer'}}, response_metadata={'finish_reason': 'stop'}, id='run-2d9ccf59-3d78-42b1-8458-83a9c3479ef8'), 'output': {'intent': 'ai_impact'}}}\n", + "{'event': 'on_chain_end', 'name': 'RunnableSequence', 'run_id': 'e5b8bbe4-eeb1-478a-a105-254d4f4a516b', 'tags': ['seq:step:1'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'input': 'impact of ai?'}, 'output': {'intent': 'ai_impact'}}}\n", + "{'event': 'on_chain_start', 'name': 'ChannelWrite', 'run_id': 'e89033a5-67a4-4ec1-813a-484d9192de38', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'intent': 'ai_impact', 'language': 'English', 'query': 'impact of ai?'}}}\n", + "{'event': 'on_chain_end', 'name': 'ChannelWrite', 'run_id': 'e89033a5-67a4-4ec1-813a-484d9192de38', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'intent': 'ai_impact', 'language': 'English', 'query': 'impact of ai?'}, 'output': {'intent': 'ai_impact', 'language': 'English', 'query': 'impact of ai?'}}}\n", + "{'event': 'on_chain_start', 'name': 'route_intent', 'run_id': '824d4a79-cc72-4068-ad0f-d0723e49af5d', 'tags': ['seq:step:3'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'user_input': 'impact of ai?', 'language': 'English', 'intent': 'ai_impact', 'query': 'impact of ai?', 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto']}}}\n", + "{'event': 'on_chain_end', 'name': 'route_intent', 'run_id': '824d4a79-cc72-4068-ad0f-d0723e49af5d', 'tags': ['seq:step:3'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'user_input': 'impact of ai?', 'language': 'English', 'intent': 'ai_impact', 'query': 'impact of ai?', 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto']}, 'output': 'answer_ai_impact'}}\n", + "{'event': 'on_chain_start', 'name': 'ChannelWrite', 'run_id': '107efbf2-bde3-4722-83f6-cdba0b3efaf4', 'tags': ['seq:step:3', 'langsmith:hidden'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'intent': 'ai_impact', 'language': 'English', 'query': 'impact of ai?'}}}\n", + "{'event': 'on_chain_end', 'name': 'ChannelWrite', 'run_id': '107efbf2-bde3-4722-83f6-cdba0b3efaf4', 'tags': ['seq:step:3', 'langsmith:hidden'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'intent': 'ai_impact', 'language': 'English', 'query': 'impact of ai?'}, 'output': {'intent': 'ai_impact', 'language': 'English', 'query': 'impact of ai?'}}}\n", + "{'event': 'on_chain_stream', 'name': 'categorize_intent', 'run_id': '66f31c85-1a4b-48b4-9e4f-ad884263809c', 'tags': ['graph:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'chunk': {'intent': 'ai_impact', 'language': 'English', 'query': 'impact of ai?'}}}\n", + "{'event': 'on_chain_end', 'name': 'categorize_intent', 'run_id': '66f31c85-1a4b-48b4-9e4f-ad884263809c', 'tags': ['graph:step:2'], 'metadata': {'langgraph_step': 2, 'langgraph_node': 'categorize_intent'}, 'data': {'input': {'user_input': 'impact of ai?', 'language': None, 'intent': None, 'query': None, 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}, 'output': {'intent': 'ai_impact', 'language': 'English', 'query': 'impact of ai?'}}}\n", + "{'event': 'on_chain_stream', 'run_id': 'da753bb9-2339-4fc0-b1d7-86443019c4df', 'tags': [], 'metadata': {}, 'name': 'LangGraph', 'data': {'chunk': {'categorize_intent': {'language': 'English', 'intent': 'ai_impact', 'query': 'impact of ai?'}}}}\n", + "{'event': 'on_chain_start', 'name': 'answer_ai_impact', 'run_id': '07ee7e5d-b2a1-4149-a7ee-8512df8fe31f', 'tags': ['graph:step:3'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {}}\n", + "{'event': 'on_chain_start', 'name': 'ai_impact_chain', 'run_id': '421aeadf-3c89-4fde-95c1-fe5967773978', 'tags': ['seq:step:1'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': {'question': 'impact of ai?'}}}\n", + "{'event': 'on_prompt_start', 'name': 'ChatPromptTemplate', 'run_id': '113204c2-80d8-4e39-9397-3b7845991f57', 'tags': ['seq:step:1'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': {'question': 'impact of ai?'}}}\n", + "{'event': 'on_prompt_end', 'name': 'ChatPromptTemplate', 'run_id': '113204c2-80d8-4e39-9397-3b7845991f57', 'tags': ['seq:step:1'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': {'question': 'impact of ai?'}, 'output': ChatPromptValue(messages=[SystemMessage(content=\"\\nYou are ClimateQ&A, an helpful AI Assistant specialized in answering climate-related questions using info from the IPCC and/or IPBES reports. \\nAlways stay true to climate and nature science and do not make up information. \\nIf you do not know the answer, just say you do not know.\\n\\n## Guidelines\\n- Explain that the environmental impact of AI is not covered by the IPCC or IPBES reports, but you can recommend info based on the sources below\\n- Answer the question in the original language of the question\\n\\n## Sources\\n- You can propose to visit this page https://climateqa.com/docs/carbon-footprint/ to learn more about ClimateQ&A's own carbon footprint\\n- You can recommend to look at the work of the AI & climate expert scientist Sasha Luccioni with in in particular those papers\\n - Power Hungry Processing: Watts Driving the Cost of AI Deployment? - https://arxiv.org/abs/2311.16863 - about the carbon footprint at the inference stage of AI models\\n - Counting Carbon: A Survey of Factors Influencing the Emissions of Machine Learning - https://arxiv.org/abs/2302.08476\\n - Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model - https://arxiv.org/abs/2211.02001 - about the carbon footprint of training a large language model \\n- You can also recommend the following tools to calculate the carbon footprint of AI models\\n - CodeCarbon - https://github.com/mlco2/codecarbon to measure the carbon footprint of your code\\n - Ecologits - https://ecologits.ai/ to measure the carbon footprint of using LLMs APIs such\\n\"), HumanMessage(content='impact of ai?')])}}\n", + "{'event': 'on_chat_model_start', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'input': {'messages': [[SystemMessage(content=\"\\nYou are ClimateQ&A, an helpful AI Assistant specialized in answering climate-related questions using info from the IPCC and/or IPBES reports. \\nAlways stay true to climate and nature science and do not make up information. \\nIf you do not know the answer, just say you do not know.\\n\\n## Guidelines\\n- Explain that the environmental impact of AI is not covered by the IPCC or IPBES reports, but you can recommend info based on the sources below\\n- Answer the question in the original language of the question\\n\\n## Sources\\n- You can propose to visit this page https://climateqa.com/docs/carbon-footprint/ to learn more about ClimateQ&A's own carbon footprint\\n- You can recommend to look at the work of the AI & climate expert scientist Sasha Luccioni with in in particular those papers\\n - Power Hungry Processing: Watts Driving the Cost of AI Deployment? - https://arxiv.org/abs/2311.16863 - about the carbon footprint at the inference stage of AI models\\n - Counting Carbon: A Survey of Factors Influencing the Emissions of Machine Learning - https://arxiv.org/abs/2302.08476\\n - Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model - https://arxiv.org/abs/2211.02001 - about the carbon footprint of training a large language model \\n- You can also recommend the following tools to calculate the carbon footprint of AI models\\n - CodeCarbon - https://github.com/mlco2/codecarbon to measure the carbon footprint of your code\\n - Ecologits - https://ecologits.ai/ to measure the carbon footprint of using LLMs APIs such\\n\"), HumanMessage(content='impact of ai?')]]}}}\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": [ + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='The', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' environmental', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' impact', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' AI', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' is', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' not', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' covered', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' by', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' IPCC', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' or', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' IP', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='B', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='ES', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' reports', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='.', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' However', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=',', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' there', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' are', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' studies', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' and', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' tools', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' available', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' that', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' can', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' help', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' understand', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' footprint', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' AI', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' models', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='.', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' \\n\\n', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='For', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' more', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' information', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' on', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' footprint', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' AI', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' models', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=',', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' you', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' can', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' visit', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' this', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' page', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=':', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' [', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='Climate', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='Q', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='&A', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=\"'s\", id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' own', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' footprint', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='](', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='https', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='://', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='climate', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='qa', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='.com', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='/docs', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='/c', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='arbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='-foot', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='print', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='/', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=').\\n\\n', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='Additionally', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=',', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' you', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' may', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' want', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' to', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' look', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' into', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' work', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' AI', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' &', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' climate', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' expert', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' scientist', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Sasha', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Lu', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='ccion', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='i', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='.', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Some', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' their', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' papers', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=',', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' such', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' as', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' \"', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='Power', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Hung', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='ry', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Processing', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=':', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Watts', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Driving', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Cost', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' AI', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Deployment', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='?\"', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' and', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' \"', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='Est', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='imating', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Foot', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='print', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' B', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='LO', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='OM', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=',', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' a', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' ', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='176', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='B', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Parameter', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Language', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Model', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=',\"', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' provide', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' insights', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' into', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' footprint', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' AI', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' models', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='.\\n\\n', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='To', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' calculate', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' footprint', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' AI', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' models', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=',', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' tools', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' like', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Code', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='Carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' and', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Ec', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='olog', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='its', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' can', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' be', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' used', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='.', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Code', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='Carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' helps', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' measure', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' footprint', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' your', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' code', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=',', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' while', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Ec', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='olog', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='its', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' can', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' measure', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' the', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' carbon', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' footprint', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' of', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' using', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Large', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Language', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' Models', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' (', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='LL', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='Ms', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=')', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content=' APIs', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='.', id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_stream', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'chunk': AIMessageChunk(content='', response_metadata={'finish_reason': 'stop'}, id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_chat_model_end', 'name': 'ChatOpenAI', 'run_id': 'db848c5f-43af-45e1-8b97-345044f399d6', 'tags': ['seq:step:2'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact', 'ls_model_type': 'chat'}, 'data': {'input': {'messages': [[SystemMessage(content=\"\\nYou are ClimateQ&A, an helpful AI Assistant specialized in answering climate-related questions using info from the IPCC and/or IPBES reports. \\nAlways stay true to climate and nature science and do not make up information. \\nIf you do not know the answer, just say you do not know.\\n\\n## Guidelines\\n- Explain that the environmental impact of AI is not covered by the IPCC or IPBES reports, but you can recommend info based on the sources below\\n- Answer the question in the original language of the question\\n\\n## Sources\\n- You can propose to visit this page https://climateqa.com/docs/carbon-footprint/ to learn more about ClimateQ&A's own carbon footprint\\n- You can recommend to look at the work of the AI & climate expert scientist Sasha Luccioni with in in particular those papers\\n - Power Hungry Processing: Watts Driving the Cost of AI Deployment? - https://arxiv.org/abs/2311.16863 - about the carbon footprint at the inference stage of AI models\\n - Counting Carbon: A Survey of Factors Influencing the Emissions of Machine Learning - https://arxiv.org/abs/2302.08476\\n - Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model - https://arxiv.org/abs/2211.02001 - about the carbon footprint of training a large language model \\n- You can also recommend the following tools to calculate the carbon footprint of AI models\\n - CodeCarbon - https://github.com/mlco2/codecarbon to measure the carbon footprint of your code\\n - Ecologits - https://ecologits.ai/ to measure the carbon footprint of using LLMs APIs such\\n\"), HumanMessage(content='impact of ai?')]]}, 'output': {'generations': [[{'text': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.', 'generation_info': {'finish_reason': 'stop'}, 'type': 'ChatGeneration', 'message': AIMessage(content='The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.', response_metadata={'finish_reason': 'stop'}, id='run-db848c5f-43af-45e1-8b97-345044f399d6')}]], 'llm_output': None, 'run': None}}}\n", + "{'event': 'on_parser_start', 'name': 'StrOutputParser', 'run_id': 'bd6980fe-1dc1-4733-a38e-a461801250a8', 'tags': ['seq:step:3'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': AIMessage(content='The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.', response_metadata={'finish_reason': 'stop'}, id='run-db848c5f-43af-45e1-8b97-345044f399d6')}}\n", + "{'event': 'on_parser_end', 'name': 'StrOutputParser', 'run_id': 'bd6980fe-1dc1-4733-a38e-a461801250a8', 'tags': ['seq:step:3'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': AIMessage(content='The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.', response_metadata={'finish_reason': 'stop'}, id='run-db848c5f-43af-45e1-8b97-345044f399d6'), 'output': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}}\n", + "{'event': 'on_chain_end', 'name': 'ai_impact_chain', 'run_id': '421aeadf-3c89-4fde-95c1-fe5967773978', 'tags': ['seq:step:1'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': {'question': 'impact of ai?'}, 'output': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}}\n", + "{'event': 'on_chain_start', 'name': 'ChannelWrite', 'run_id': 'c3f2dc9c-e005-436a-91ff-6236b9359548', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': {'answer': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}}}\n", + "{'event': 'on_chain_end', 'name': 'ChannelWrite', 'run_id': 'c3f2dc9c-e005-436a-91ff-6236b9359548', 'tags': ['seq:step:2', 'langsmith:hidden'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': {'answer': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}, 'output': {'answer': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}}}\n", + "{'event': 'on_chain_stream', 'name': 'answer_ai_impact', 'run_id': '07ee7e5d-b2a1-4149-a7ee-8512df8fe31f', 'tags': ['graph:step:3'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'chunk': {'answer': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}}}\n", + "{'event': 'on_chain_end', 'name': 'answer_ai_impact', 'run_id': '07ee7e5d-b2a1-4149-a7ee-8512df8fe31f', 'tags': ['graph:step:3'], 'metadata': {'langgraph_step': 3, 'langgraph_node': 'answer_ai_impact'}, 'data': {'input': {'user_input': 'impact of ai?', 'language': 'English', 'intent': 'ai_impact', 'query': 'impact of ai?', 'questions': None, 'answer': None, 'audience': 'expert and climate scientists that are not afraid of technical terms', 'sources_input': ['auto'], 'documents': None, 'recommended_content': None, 'graph_returned': None}, 'output': {'answer': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}}}\n", + "{'event': 'on_chain_stream', 'run_id': 'da753bb9-2339-4fc0-b1d7-86443019c4df', 'tags': [], 'metadata': {}, 'name': 'LangGraph', 'data': {'chunk': {'answer_ai_impact': {'answer': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}}}}\n", + "{'event': 'on_chain_end', 'name': 'LangGraph', 'run_id': 'da753bb9-2339-4fc0-b1d7-86443019c4df', 'tags': [], 'metadata': {}, 'data': {'output': {'answer_ai_impact': {'answer': 'The environmental impact of AI is not covered by the IPCC or IPBES reports. However, there are studies and tools available that can help understand the carbon footprint of AI models. \\n\\nFor more information on the carbon footprint of AI models, you can visit this page: [ClimateQ&A\\'s own carbon footprint](https://climateqa.com/docs/carbon-footprint/).\\n\\nAdditionally, you may want to look into the work of AI & climate expert scientist Sasha Luccioni. Some of their papers, such as \"Power Hungry Processing: Watts Driving the Cost of AI Deployment?\" and \"Estimating the Carbon Footprint of BLOOM, a 176B Parameter Language Model,\" provide insights into the carbon footprint of AI models.\\n\\nTo calculate the carbon footprint of AI models, tools like CodeCarbon and Ecologits can be used. CodeCarbon helps measure the carbon footprint of your code, while Ecologits can measure the carbon footprint of using Large Language Models (LLMs) APIs.'}}}}\n" + ] + }, + { + "ename": "", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[1;31mThe Kernel crashed while executing code in the current cell or a previous cell. \n", + "\u001b[1;31mPlease review the code in the cell(s) to identify a possible cause of the failure. \n", + "\u001b[1;31mClick here for more info. \n", + "\u001b[1;31mView Jupyter log for further details." + ] + } + ], + "source": [ + "async for event in result:\n", + " print(event)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. Gradio" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "from front.utils import make_html_source,parse_output_llm_with_sources,serialize_docs,make_toolbox\n", + "query = inputs[\"user_input\"]\n", + "steps_display = {\n", + "\"categorize_intent\":(\"🔄️ Analyzing user message\",True),\n", + "\"transform_query\":(\"🔄️ Thinking step by step to answer the question\",True),\n", + "\"retrieve_documents\":(\"🔄️ Searching in the knowledge base\",False),\n", + "}\n", + "history = [(query,None)]\n", + "start_streaming = False\n", + "intent = None\n", + "\n", + "\n", + "async for event in result:\n", + "\n", + " if event[\"event\"] == \"on_chat_model_stream\" and event[\"metadata\"][\"langgraph_node\"] in [\"answer_rag\", \"answer_chitchat\", \"answer_ai_impact\"]:\n", + " if start_streaming == False:\n", + " start_streaming = True\n", + " history[-1] = (query,\"\")\n", + "\n", + " new_token = event[\"data\"][\"chunk\"].content\n", + " # time.sleep(0.01)\n", + " previous_answer = history[-1][1]\n", + " previous_answer = previous_answer if previous_answer is not None else \"\"\n", + " answer_yet = previous_answer + new_token\n", + " answer_yet = parse_output_llm_with_sources(answer_yet)\n", + " history[-1] = (query,answer_yet)\n", + "\n", + " \n", + " elif event[\"name\"] == \"retrieve_documents\" and event[\"event\"] == \"on_chain_end\":\n", + " try:\n", + " docs = event[\"data\"][\"output\"][\"documents\"]\n", + " docs_html = []\n", + " for i, d in enumerate(docs, 1):\n", + " docs_html.append(make_html_source(d, i))\n", + " docs_html = \"\".join(docs_html)\n", + " except Exception as e:\n", + " print(f\"Error getting documents: {e}\")\n", + " print(event)\n", + "\n", + " # elif event[\"name\"] == \"retrieve_documents\" and event[\"event\"] == \"on_chain_start\":\n", + " # print(event)\n", + " # questions = event[\"data\"][\"input\"][\"questions\"]\n", + " # questions = \"\\n\".join([f\"{i+1}. {q['question']} ({q['source']})\" for i,q in enumerate(questions)])\n", + " # answer_yet = \"🔄️ Searching in the knowledge base\\n{questions}\"\n", + " # history[-1] = (query,answer_yet)\n", + "\n", + " elif event[\"name\"] == \"retrieve_graphs\" and event[\"event\"] == \"on_chain_end\":\n", + " try:\n", + " graphs = event[\"data\"][\"output\"][\"recommended_content\"]\n", + " except Exception as e:\n", + " print(f\"Error getting graphs: {e}\")\n", + " print(event)\n", + "\n", + "\n", + " for event_name,(event_description,display_output) in steps_display.items():\n", + " if event[\"name\"] == event_name:\n", + " if event[\"event\"] == \"on_chain_start\":\n", + " # answer_yet = f\"

{event_description}

\"\n", + " # answer_yet = make_toolbox(event_description, \"\", checked = False)\n", + " answer_yet = event_description\n", + " history[-1] = (query,answer_yet)\n", + " # elif event[\"event\"] == \"on_chain_end\":\n", + " # answer_yet = \"\"\n", + " # history[-1] = (query,answer_yet)\n", + " # if display_output:\n", + " # print(event[\"data\"][\"output\"])\n", + "\n", + " # if op['path'] == path_reformulation: # reforulated question\n", + " # try:\n", + " # output_language = op['value'][\"language\"] # str\n", + " # output_query = op[\"value\"][\"question\"]\n", + " # except Exception as e:\n", + " # raise gr.Error(f\"ClimateQ&A Error: {e} - The error has been noted, try another question and if the error remains, you can contact us :)\")\n", + " \n", + " # if op[\"path\"] == path_keywords:\n", + " # try:\n", + " # output_keywords = op['value'][\"keywords\"] # str\n", + " # output_keywords = \" AND \".join(output_keywords)\n", + " # except Exception as e:\n", + " # pass\n", + "\n", + "\n", + "\n", + " history = [tuple(x) for x in history]\n", + " # yield history,docs_html,output_query,output_language,gallery,output_query,output_keywords" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_383', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.5550143122673035, 'content': 'Global warming contributions by gas and source', 'reranking_score': 0.651607871055603, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions by gas and source'),\n", + " Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_764', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.5550143122673035, 'content': 'Global warming contributions by gas and source', 'reranking_score': 0.651607871055603, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions by gas and source'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_384', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/warming-fossil-fuels-land-use', 'similarity_score': 0.6049439907073975, 'content': 'Global warming contributions from fossil fuels and land use', 'reranking_score': 0.22002366185188293, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions from fossil fuels and land use'),\n", + " Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_765', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/warming-fossil-fuels-land-use', 'similarity_score': 0.6049439907073975, 'content': 'Global warming contributions from fossil fuels and land use', 'reranking_score': 0.22002366185188293, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming contributions from fossil fuels and land use'),\n", + " Document(metadata={'appears_in': 'Global Methane Tracker 2024', 'appears_in_url': 'https://www.iea.org/reports/global-methane-tracker-2024', 'doc_id': 'iea_133', 'returned_content': 'https://www.iea.org/data-and-statistics/charts/main-sources-of-methane-emissions', 'source': 'IEA', 'sources': 'Methane emissions and abatement potential for oil, gas, and coal are based on the IEA (2023) Global Methane Tracker (https://www.iea.org/data-and-statistics/data-tools/methane-tracker-data-explorer) ; agriculture and waste is based on UNEP (2023), Global Methane Assessment (https://www.unep.org/resources/report/global-methane-assessment-benefits-and-costs-mitigating-methane-emissions). Emissions from biomass and bioenergy burning, which total around 10 Mt (https://essd.copernicus.org/articles/12/1561/2020/) of methane per year each, are not shown.', 'similarity_score': 0.6158384084701538, 'content': 'Main sources of methane emissions', 'reranking_score': 0.0806397795677185, 'query_used_for_retrieval': 'What are the main causes of global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Main sources of methane emissions'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.6807445883750916, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.03409431874752045, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'),\n", + " Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_766', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.6807445883750916, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.03409431874752045, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_342', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions factors quantify the average CO₂ output per unit of energy. They are measured in kilograms of CO₂ per megawatt-hour (MWh) of energy from various fossil fuel sources.', 'url': 'https://ourworldindata.org/grapher/carbon-dioxide-emissions-factor', 'similarity_score': 0.6963810324668884, 'content': 'Carbon dioxide emissions factors', 'reranking_score': 0.007733839564025402, 'query_used_for_retrieval': 'What are the main causes of global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Carbon dioxide emissions factors'),\n", + " Document(metadata={'category': 'Fossil Fuels', 'doc_id': 'owid_1408', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions factors quantify the average CO₂ output per unit of energy. They are measured in kilograms of CO₂ per megawatt-hour (MWh) of energy from various fossil fuel sources.', 'url': 'https://ourworldindata.org/grapher/carbon-dioxide-emissions-factor', 'similarity_score': 0.6963810324668884, 'content': 'Carbon dioxide emissions factors', 'reranking_score': 0.007733839564025402, 'query_used_for_retrieval': 'What are the main causes of global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Carbon dioxide emissions factors'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_359', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of carbon dioxide, methane, and nitrous oxide. This is for land use and agriculture only.\", 'url': 'https://ourworldindata.org/grapher/global-warming-land', 'similarity_score': 0.7010847330093384, 'content': 'Contribution to global mean surface temperature rise from agriculture and land use', 'reranking_score': 0.006090907845646143, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Contribution to global mean surface temperature rise from agriculture and land use'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_387', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Greenhouse gas emissions include carbon dioxide, methane and nitrous oxide from all sources, including land-use change. They are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.', 'url': 'https://ourworldindata.org/grapher/total-ghg-emissions', 'similarity_score': 0.711588978767395, 'content': 'Greenhouse gas emissions', 'reranking_score': 0.001999091589823365, 'query_used_for_retrieval': 'What are the main causes of global warming?', 'sources_used': ['IEA', 'OWID']}, page_content='Greenhouse gas emissions')]" + ] + }, + "execution_count": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from langchain_core.documents import Document\n", + "\n", + "graphs = [Document(page_content='Global warming contributions by gas and source', metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_383', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.5550143122673035, 'content': 'Global warming contributions by gas and source', 'reranking_score': 0.651607871055603, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Global warming contributions by gas and source', metadata={'category': 'Climate Change', 'doc_id': 'owid_764', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The global mean surface temperature change as a result of the cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.', 'url': 'https://ourworldindata.org/grapher/global-warming-by-gas-and-source', 'similarity_score': 0.5550143122673035, 'content': 'Global warming contributions by gas and source', 'reranking_score': 0.651607871055603, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Global warming contributions from fossil fuels and land use', metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_384', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/warming-fossil-fuels-land-use', 'similarity_score': 0.6049439907073975, 'content': 'Global warming contributions from fossil fuels and land use', 'reranking_score': 0.22002366185188293, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Global warming contributions from fossil fuels and land use', metadata={'category': 'Climate Change', 'doc_id': 'owid_765', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/warming-fossil-fuels-land-use', 'similarity_score': 0.6049439907073975, 'content': 'Global warming contributions from fossil fuels and land use', 'reranking_score': 0.22002366185188293, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Main sources of methane emissions', metadata={'appears_in': 'Global Methane Tracker 2024', 'appears_in_url': 'https://www.iea.org/reports/global-methane-tracker-2024', 'doc_id': 'iea_133', 'returned_content': 'https://www.iea.org/data-and-statistics/charts/main-sources-of-methane-emissions', 'source': 'IEA', 'sources': 'Methane emissions and abatement potential for oil, gas, and coal are based on the IEA (2023) Global Methane Tracker (https://www.iea.org/data-and-statistics/data-tools/methane-tracker-data-explorer) ; agriculture and waste is based on UNEP (2023), Global Methane Assessment (https://www.unep.org/resources/report/global-methane-assessment-benefits-and-costs-mitigating-methane-emissions). Emissions from biomass and bioenergy burning, which total around 10 Mt (https://essd.copernicus.org/articles/12/1561/2020/) of methane per year each, are not shown.', 'similarity_score': 0.6158384084701538, 'content': 'Main sources of methane emissions', 'reranking_score': 0.0806397795677185, 'query_used_for_retrieval': 'What are the main causes of global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Global warming: Contributions to the change in global mean surface temperature', metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.6807445883750916, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.03409431874752045, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Global warming: Contributions to the change in global mean surface temperature', metadata={'category': 'Climate Change', 'doc_id': 'owid_766', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.6807445883750916, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.03409431874752045, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Carbon dioxide emissions factors', metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_342', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions factors quantify the average CO₂ output per unit of energy. They are measured in kilograms of CO₂ per megawatt-hour (MWh) of energy from various fossil fuel sources.', 'url': 'https://ourworldindata.org/grapher/carbon-dioxide-emissions-factor', 'similarity_score': 0.6963810324668884, 'content': 'Carbon dioxide emissions factors', 'reranking_score': 0.007733839564025402, 'query_used_for_retrieval': 'What are the main causes of global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Carbon dioxide emissions factors', metadata={'category': 'Fossil Fuels', 'doc_id': 'owid_1408', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions factors quantify the average CO₂ output per unit of energy. They are measured in kilograms of CO₂ per megawatt-hour (MWh) of energy from various fossil fuel sources.', 'url': 'https://ourworldindata.org/grapher/carbon-dioxide-emissions-factor', 'similarity_score': 0.6963810324668884, 'content': 'Carbon dioxide emissions factors', 'reranking_score': 0.007733839564025402, 'query_used_for_retrieval': 'What are the main causes of global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Contribution to global mean surface temperature rise from agriculture and land use', metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_359', 'returned_content': '', 'source': 'OWID', 'subtitle': \"The global mean surface temperature change as a result of a country or region's cumulative emissions of carbon dioxide, methane, and nitrous oxide. This is for land use and agriculture only.\", 'url': 'https://ourworldindata.org/grapher/global-warming-land', 'similarity_score': 0.7010847330093384, 'content': 'Contribution to global mean surface temperature rise from agriculture and land use', 'reranking_score': 0.006090907845646143, 'query_used_for_retrieval': 'How do human activities contribute to global warming?', 'sources_used': ['IEA', 'OWID']}), Document(page_content='Greenhouse gas emissions', metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_387', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Greenhouse gas emissions include carbon dioxide, methane and nitrous oxide from all sources, including land-use change. They are measured in tonnes of carbon dioxide-equivalents over a 100-year timescale.', 'url': 'https://ourworldindata.org/grapher/total-ghg-emissions', 'similarity_score': 0.711588978767395, 'content': 'Greenhouse gas emissions', 'reranking_score': 0.001999091589823365, 'query_used_for_retrieval': 'What are the main causes of global warming?', 'sources_used': ['IEA', 'OWID']})]\n", + "graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'embedding': '',\n", + " 'metadata': {'source': 'OWID',\n", + " 'category': 'CO2 & Greenhouse Gas Emissions'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID', 'category': 'Climate Change'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID',\n", + " 'category': 'CO2 & Greenhouse Gas Emissions'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID', 'category': 'Climate Change'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID',\n", + " 'category': 'CO2 & Greenhouse Gas Emissions'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID', 'category': 'Climate Change'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID',\n", + " 'category': 'CO2 & Greenhouse Gas Emissions'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID', 'category': 'Fossil Fuels'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID',\n", + " 'category': 'CO2 & Greenhouse Gas Emissions'}},\n", + " {'embedding': '',\n", + " 'metadata': {'source': 'OWID',\n", + " 'category': 'CO2 & Greenhouse Gas Emissions'}}]" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "graphs = [\n", + " {\n", + " \"embedding\": x.metadata[\"returned_content\"],\n", + " \"metadata\": {\n", + " \"source\": x.metadata[\"source\"],\n", + " \"category\": x.metadata[\"category\"]\n", + " }\n", + " } for x in graphs if x.metadata[\"source\"] == \"OWID\"\n", + " ]\n", + "\n", + "graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import defaultdict\n", + "\n", + "def generate_html(graphs):\n", + " # Organize graphs by category\n", + " categories = defaultdict(list)\n", + " for graph in graphs:\n", + " category = graph['metadata']['category']\n", + " categories[category].append(graph['embedding'])\n", + "\n", + " # Begin constructing the HTML\n", + " html_code = '''\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " Graphs by Category\n", + " \n", + " \n", + "\n", + "\n", + "
\n", + "'''\n", + "\n", + " # Add buttons for each category\n", + " for i, category in enumerate(categories.keys()):\n", + " active_class = 'active' if i == 0 else ''\n", + " html_code += f''\n", + "\n", + " html_code += '
'\n", + "\n", + " # Add content for each category\n", + " for i, (category, embeds) in enumerate(categories.items()):\n", + " active_class = 'active' if i == 0 else ''\n", + " html_code += f'
'\n", + " for embed in embeds:\n", + " html_code += embed\n", + " html_code += '
'\n", + "\n", + " html_code += '''\n", + "\n", + "\n", + "'''\n", + "\n", + " return html_code\n" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'\\n\\n\\n\\n \\n \\n Graphs by Category\\n \\n \\n\\n\\n
\\n
\\n\\n\\n'" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate_html(graphs)" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Document(metadata={'category': 'Water Use & Stress', 'doc_id': 'owid_2184', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Water quality is assessed by means of core physical and chemical parameters that reflect natural water quality. A water body is classified as \"good\" quality if at least 80% of monitoring values meet target quality levels.', 'url': 'https://ourworldindata.org/grapher/water-bodies-good-water-quality'}, page_content='Share of water bodies with good ambient water quality')" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "vectorstore_graphs.similarity_search_with_relevance_scores(\"What is the trend of clean water?\")[0][0]" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['',\n", + " '',\n", + " '',\n", + " '']" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test_graphs = [x[0].metadata[\"returned_content\"] for x in vectorstore_graphs.similarity_search_with_relevance_scores(\"What is the trend of clean water?\")]\n", + "test_graphs" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: GET https://api.gradio.app/pkg-version \"HTTP/1.1 200 OK\"\n", + "INFO:httpx:HTTP Request: GET http://127.0.0.1:7868/gradio_api/startup-events \"HTTP/1.1 200 OK\"\n", + "INFO:httpx:HTTP Request: HEAD http://127.0.0.1:7868/ \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "* Running on local URL: http://127.0.0.1:7868\n", + "\n", + "To create a public link, set `share=True` in `launch()`.\n" + ] + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# simple gradio\n", + "import gradio as gr\n", + "with gr.Blocks() as blocks:\n", + " state_test = gr.State([])\n", + " \n", + " button = gr.Button(\"abc\")\n", + " button.click(lambda : graphs, inputs = [], outputs = state_test)\n", + " with gr.Column():\n", + " # gr.HTML(generate_html(graphs), elem_id=\"graphs-placeholder\")\n", + " gr.HTML(test_graphs)\n", + " # gr.HTML(generate_html(state_test), elem_id=\"graphs-placeholder\")\n", + "\n", + "blocks.launch()\n", + "\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:sentence_transformers.SentenceTransformer:Use pytorch device_name: cpu\n", + "INFO:sentence_transformers.SentenceTransformer:Load pretrained SentenceTransformer: BAAI/bge-base-en-v1.5\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading embeddings model: BAAI/bge-base-en-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/dora/anaconda3/envs/climateqa_huggingface/lib/python3.12/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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading FlashRankRanker model ms-marco-TinyBERT-L-2-v2\n", + "Loading model FlashRank model ms-marco-TinyBERT-L-2-v2...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:chromadb.telemetry.posthog:Anonymized telemetry enabled. See https://docs.trychroma.com/telemetry for more information.\n" + ] + }, + { + "ename": "NameError", + "evalue": "name 'make_graph_agent' is not defined", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mNameError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[18], line 10\u001b[0m\n\u001b[1;32m 7\u001b[0m vectorstore_graphs \u001b[38;5;241m=\u001b[39m Chroma(persist_directory\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/home/dora/climate-question-answering/data/vectorstore\u001b[39m\u001b[38;5;124m\"\u001b[39m, embedding_function\u001b[38;5;241m=\u001b[39membeddings_function)\n\u001b[1;32m 9\u001b[0m \u001b[38;5;66;03m# agent = make_graph_agent(llm,vectorstore,reranker)\u001b[39;00m\n\u001b[0;32m---> 10\u001b[0m agent \u001b[38;5;241m=\u001b[39m \u001b[43mmake_graph_agent\u001b[49m(llm\u001b[38;5;241m=\u001b[39mllm, vectorstore_ipcc\u001b[38;5;241m=\u001b[39mvectorstore, vectorstore_graphs\u001b[38;5;241m=\u001b[39mvectorstore_graphs, reranker\u001b[38;5;241m=\u001b[39mreranker)\n\u001b[1;32m 12\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mchat\u001b[39m(query,history,audience,sources,reports):\n\u001b[1;32m 13\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"taking a query and a message history, use a pipeline (reformulation, retriever, answering) to yield a tuple of:\u001b[39;00m\n\u001b[1;32m 14\u001b[0m \u001b[38;5;124;03m (messages in gradio format, messages in langchain format, source documents)\"\"\"\u001b[39;00m\n", + "\u001b[0;31mNameError\u001b[0m: name 'make_graph_agent' is not defined" + ] + } + ], + "source": [ + "embeddings_function = get_embeddings_function()\n", + "llm = get_llm(provider=\"openai\",max_tokens = 1024,temperature = 0.0)\n", + "reranker = get_reranker(\"nano\")\n", + "\n", + "# Create vectorstore and retriever\n", + "vectorstore = get_pinecone_vectorstore(embeddings_function)\n", + "vectorstore_graphs = Chroma(persist_directory=f\"{ROOT_DIR}/data/vectorstore\", embedding_function=embeddings_function)\n", + "\n", + "# agent = make_graph_agent(llm,vectorstore,reranker)\n", + "agent = make_graph_agent(llm=llm, vectorstore_ipcc=vectorstore, vectorstore_graphs=vectorstore_graphs, reranker=reranker)\n", + "\n", + "async def chat(query,history,audience,sources,reports):\n", + " \"\"\"taking a query and a message history, use a pipeline (reformulation, retriever, answering) to yield a tuple of:\n", + " (messages in gradio format, messages in langchain format, source documents)\"\"\"\n", + "\n", + " date_now = datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n", + " print(f\">> NEW QUESTION ({date_now}) : {query}\")\n", + "\n", + " if audience == \"Children\":\n", + " audience_prompt = audience_prompts[\"children\"]\n", + " elif audience == \"General public\":\n", + " audience_prompt = audience_prompts[\"general\"]\n", + " elif audience == \"Experts\":\n", + " audience_prompt = audience_prompts[\"experts\"]\n", + " else:\n", + " audience_prompt = audience_prompts[\"experts\"]\n", + "\n", + " # Prepare default values\n", + " if len(sources) == 0:\n", + " sources = [\"IPCC\"]\n", + "\n", + " if len(reports) == 0:\n", + " reports = []\n", + " \n", + " inputs = {\"user_input\": query,\"audience\": audience_prompt,\"sources\":sources}\n", + " print(f\"\\n\\nInputs:\\n {inputs}\\n\\n\")\n", + " result = agent.astream_events(inputs,version = \"v1\") #{\"callbacks\":[MyCustomAsyncHandler()]})\n", + " # result = rag_chain.stream(inputs)\n", + "\n", + " # path_reformulation = \"/logs/reformulation/final_output\"\n", + " # path_keywords = \"/logs/keywords/final_output\"\n", + " # path_retriever = \"/logs/find_documents/final_output\"\n", + " # path_answer = \"/logs/answer/streamed_output_str/-\"\n", + "\n", + " docs = []\n", + " graphs_html = \"\"\n", + " docs_html = \"\"\n", + " output_query = \"\"\n", + " output_language = \"\"\n", + " output_keywords = \"\"\n", + " gallery = []\n", + " updates = {}\n", + " start_streaming = False\n", + "\n", + " steps_display = {\n", + " \"categorize_intent\":(\"🔄️ Analyzing user message\",True),\n", + " \"transform_query\":(\"🔄️ Thinking step by step to answer the question\",True),\n", + " \"retrieve_documents\":(\"🔄️ Searching in the knowledge base\",False),\n", + " }\n", + "\n", + " try:\n", + " async for event in result:\n", + "\n", + " if event[\"event\"] == \"on_chat_model_stream\" and event[\"metadata\"][\"langgraph_node\"] in [\"answer_rag\", \"answer_chitchat\", \"answer_ai_impact\"]:\n", + " if start_streaming == False:\n", + " start_streaming = True\n", + " history[-1] = (query,\"\")\n", + "\n", + " new_token = event[\"data\"][\"chunk\"].content\n", + " # time.sleep(0.01)\n", + " previous_answer = history[-1][1]\n", + " previous_answer = previous_answer if previous_answer is not None else \"\"\n", + " answer_yet = previous_answer + new_token\n", + " answer_yet = parse_output_llm_with_sources(answer_yet)\n", + " history[-1] = (query,answer_yet)\n", + " \n", + " elif event[\"name\"] == \"retrieve_documents\" and event[\"event\"] == \"on_chain_end\":\n", + " try:\n", + " docs = event[\"data\"][\"output\"][\"documents\"]\n", + " docs_html = []\n", + " for i, d in enumerate(docs, 1):\n", + " docs_html.append(make_html_source(d, i))\n", + " docs_html = \"\".join(docs_html)\n", + "\n", + " print(docs_html)\n", + " except Exception as e:\n", + " print(f\"Error getting documents: {e}\")\n", + " print(event)\n", + "\n", + " # elif event[\"name\"] == \"retrieve_documents\" and event[\"event\"] == \"on_chain_start\":\n", + " # print(event)\n", + " # questions = event[\"data\"][\"input\"][\"questions\"]\n", + " # questions = \"\\n\".join([f\"{i+1}. {q['question']} ({q['source']})\" for i,q in enumerate(questions)])\n", + " # answer_yet = \"🔄️ Searching in the knowledge base\\n{questions}\"\n", + " # history[-1] = (query,answer_yet)\n", + "\n", + " elif event[\"name\"] == \"retrieve_graphs\" and event[\"event\"] == \"on_chain_end\":\n", + " try:\n", + " recommended_content = event[\"data\"][\"output\"][\"recommended_content\"]\n", + " graphs = [\n", + " {\n", + " \"embedding\": x.metadata[\"returned_content\"],\n", + " \"metadata\": {\n", + " \"source\": x.metadata[\"source\"],\n", + " \"category\": x.metadata[\"category\"]\n", + " }\n", + " } for x in recommended_content if x.metadata[\"source\"] == \"OWID\"\n", + " ]\n", + " \n", + " graphs_by_category = defaultdict(list)\n", + " \n", + " # Organize graphs by category\n", + " for graph in graphs:\n", + " category = graph['metadata']['category']\n", + " graphs_by_category[category].append(graph['embedding']) \n", + "\n", + " \n", + " for category, graphs in graphs_by_category.items():\n", + " embeddings = \"\\n\".join(graphs)\n", + " updates[graph_displays[category]] = embeddings\n", + " \n", + " print(f\"\\n\\nUpdates:\\n {updates}\\n\\n\")\n", + " \n", + " except Exception as e:\n", + " print(f\"Error getting graphs: {e}\")\n", + "\n", + " for event_name,(event_description,display_output) in steps_display.items():\n", + " if event[\"name\"] == event_name:\n", + " if event[\"event\"] == \"on_chain_start\":\n", + " # answer_yet = f\"

{event_description}

\"\n", + " # answer_yet = make_toolbox(event_description, \"\", checked = False)\n", + " answer_yet = event_description\n", + " history[-1] = (query,answer_yet)\n", + " # elif event[\"event\"] == \"on_chain_end\":\n", + " # answer_yet = \"\"\n", + " # history[-1] = (query,answer_yet)\n", + " # if display_output:\n", + " # print(event[\"data\"][\"output\"])\n", + "\n", + " # if op['path'] == path_reformulation: # reforulated question\n", + " # try:\n", + " # output_language = op['value'][\"language\"] # str\n", + " # output_query = op[\"value\"][\"question\"]\n", + " # except Exception as e:\n", + " # raise gr.Error(f\"ClimateQ&A Error: {e} - The error has been noted, try another question and if the error remains, you can contact us :)\")\n", + " \n", + " # if op[\"path\"] == path_keywords:\n", + " # try:\n", + " # output_keywords = op['value'][\"keywords\"] # str\n", + " # output_keywords = \" AND \".join(output_keywords)\n", + " # except Exception as e:\n", + " # pass\n", + "\n", + "\n", + "\n", + " history = [tuple(x) for x in history]\n", + " yield history,docs_html,output_query,output_language,gallery,updates#,output_query,output_keywords\n", + "\n", + "\n", + " except Exception as e:\n", + " raise gr.Error(f\"{e}\")\n", + "\n", + "\n", + " try:\n", + " # Log answer on Azure Blob Storage\n", + " if os.getenv(\"GRADIO_ENV\") != \"local\":\n", + " timestamp = str(datetime.now().timestamp())\n", + " file = timestamp + \".json\"\n", + " prompt = history[-1][0]\n", + " logs = {\n", + " \"user_id\": str(user_id),\n", + " \"prompt\": prompt,\n", + " \"query\": prompt,\n", + " \"question\":output_query,\n", + " \"sources\":sources,\n", + " \"docs\":serialize_docs(docs),\n", + " \"answer\": history[-1][1],\n", + " \"time\": timestamp,\n", + " }\n", + " log_on_azure(file, logs, share_client)\n", + " except Exception as e:\n", + " print(f\"Error logging on Azure Blob Storage: {e}\")\n", + " raise gr.Error(f\"ClimateQ&A Error: {str(e)[:100]} - The error has been noted, try another question and if the error remains, you can contact us :)\")\n", + "\n", + " image_dict = {}\n", + " for i,doc in enumerate(docs):\n", + " \n", + " if doc.metadata[\"chunk_type\"] == \"image\":\n", + " try:\n", + " key = f\"Image {i+1}\"\n", + " image_path = doc.metadata[\"image_path\"].split(\"documents/\")[1]\n", + " img = get_image_from_azure_blob_storage(image_path)\n", + "\n", + " # Convert the image to a byte buffer\n", + " buffered = BytesIO()\n", + " img.save(buffered, format=\"PNG\")\n", + " img_str = base64.b64encode(buffered.getvalue()).decode()\n", + "\n", + " # Embedding the base64 string in Markdown\n", + " markdown_image = f\"![Alt text](data:image/png;base64,{img_str})\"\n", + " image_dict[key] = {\"img\":img,\"md\":markdown_image,\"caption\":doc.page_content,\"key\":key,\"figure_code\":doc.metadata[\"figure_code\"]}\n", + " except Exception as e:\n", + " print(f\"Skipped adding image {i} because of {e}\")\n", + "\n", + " if len(image_dict) > 0:\n", + "\n", + " gallery = [x[\"img\"] for x in list(image_dict.values())]\n", + " img = list(image_dict.values())[0]\n", + " img_md = img[\"md\"]\n", + " img_caption = img[\"caption\"]\n", + " img_code = img[\"figure_code\"]\n", + " if img_code != \"N/A\":\n", + " img_name = f\"{img['key']} - {img['figure_code']}\"\n", + " else:\n", + " img_name = f\"{img['key']}\"\n", + "\n", + " answer_yet = history[-1][1] + f\"\\n\\n{img_md}\\n

{img_name} - {img_caption}

\"\n", + " history[-1] = (history[-1][0],answer_yet)\n", + " history = [tuple(x) for x in history]\n", + "\n", + " print(f\"\\n\\nImages:\\n{gallery}\")\n", + "\n", + " # gallery = [x.metadata[\"image_path\"] for x in docs if (len(x.metadata[\"image_path\"]) > 0 and \"IAS\" in x.metadata[\"image_path\"])]\n", + " # if len(gallery) > 0:\n", + " # gallery = list(set(\"|\".join(gallery).split(\"|\")))\n", + " # gallery = [get_image_from_azure_blob_storage(x) for x in gallery]\n", + "\n", + " yield history,docs_html,output_query,output_language,gallery,updates#,output_query,output_keywords\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "climateqa", + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/sandbox/20241104 - CQA - StepByStep CQA.ipynb b/sandbox/20241104 - CQA - StepByStep CQA.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..2acc2d4fa0e5366f73a692b1075c31897ea67e66 --- /dev/null +++ b/sandbox/20241104 - CQA - StepByStep CQA.ipynb @@ -0,0 +1,793 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 3, + "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(os.path.dirname(os.getcwd()))\n", + "\n", + "from dotenv import load_dotenv\n", + "load_dotenv()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## LLM" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "AIMessage(content='Hello! How can I assist you today?', response_metadata={'finish_reason': 'stop'}, id='run-6235ddf2-0b8d-406d-ba68-e80124b67ec8-0')" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from climateqa.engine.llm import get_llm\n", + "from climateqa.engine.llm.ollama import get_llm as get_llm_ollama\n", + "\n", + "llm = get_llm(provider=\"openai\")\n", + "llm.invoke(\"Say Hello !\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Retriever " + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading embeddings model: BAAI/bge-base-en-v1.5\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/tim/ai4s/climate_qa/climate-question-answering/climateqa/engine/vectorstore.py:38: LangChainDeprecationWarning: The class `Pinecone` was deprecated in LangChain 0.0.18 and will be removed in 0.3.0. An updated version of the class exists in the langchain-pinecone package and should be used instead. To use it run `pip install -U langchain-pinecone` and import as `from langchain_pinecone import Pinecone`.\n", + " vectorstore = PineconeVectorstore(\n" + ] + }, + { + "data": { + "text/plain": [ + "[Document(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': 1152.0, 'num_tokens': 223.0, 'num_tokens_approx': 285.0, 'num_words': 214.0, 'page_number': 2516.0, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '(a) Low-lying coastal systems', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 16 Key Risks across Sectors and Regions', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf'}, page_content=\"'Impact of climate change' is defined as the difference between the observed state of the system and the state of \\r\\nthe system assuming the same observed levels of non-climate-related drivers but no climate change. For example, \\r\\nwe can compare the level of crop yields, damage induced by a river flood, and coral bleaching with differences \\r\\nin fertilizer input, land use patterns or settlement structures, without climate change and with climate change \\r\\noccurring.\\nWhile this definition is quite clear, there certainly is the problem that, in real life, we do not have a 'no climate \\r\\nchange world' to compare with. We use model simulations where the influence of climate change can be eliminated \\r\\nto estimate what might have happened without climate change. In a situation where the influence of other \\r\\nnon-climate-related drivers is known to be minor (e.g., in very remote locations), the non-climate-change situation \\r\\ncan also be approximated by observation from an early period where climate change was still minor. Often, a \\r\\ncombination of different approaches increases our confidence in the quantification of the impact of climate change.\"),\n", + " Document(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': 1010.0, 'num_tokens': 218.0, 'num_tokens_approx': 222.0, 'num_words': 167.0, 'page_number': 877.0, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': '6.5 Implications of Changing Climate on AQ', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '6: Short-lived Climate Forcers', 'toc_level1': '6.5 Implications of Changing Climate on AQ', 'toc_level2': '6.5.1 Effect of Climate Change on Surface Ozone', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf'}, page_content='Air pollutants can be impacted by climate change through physical \\r\\nchanges affecting meterorological conditions, chemical changes \\r\\naffecting their lifetimes, and biological changes affecting their natural \\r\\nemissions (Kirtman et al., 2013). Changes in meteorology affect air \\r\\nquality directly through modifications of atmospheric transport \\r\\npatterns (e.g., occurrence and length of atmospheric blocking \\r\\nepisodes, ventilation of the polluted boundary layer), extent of mixing \\r\\nlayer and stratosphere-troposphere exchange (STE) for surface ozone \\r\\n(von Schneidemesser et al., 2015), and through modifications of the \\r\\nrate of reactions that generate secondary species in the atmosphere. \\r\\nChanging precipitation patterns in a future climate also influence \\r\\nthe wet removal efficiency, in particular for atmospheric aerosols \\r\\n(Hou et al., 2018). Processes at play in non-CO2 biogeochemical \\r\\nfeedbacks (Section 6.4.5) are also involved in the perturbation of \\r\\natmospheric pollutants (Section 6.2.2).'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document33', 'document_number': 33.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 894.0, 'name': 'Full Report. Regional Assessment Report on Biodiversity and Ecosystem Services for Europe and Central Asia', 'num_characters': 918.0, 'num_tokens': 233.0, 'num_tokens_approx': 230.0, 'num_words': 173.0, 'page_number': 529.0, 'release_date': 2018.0, 'report_type': 'Full Report', 'section_header': '4.7 DRIVERS AND \\r\\nEFFECTS OF CLIMATE \\r\\nCHANGE ', 'short_name': 'IPBES RAR ECA FR', 'source': 'IPBES', 'toc_level0': \"CHAPTER 4: DIRECT AND INDIRECT DRIVERS OF CHANGE IN BIODIVERSITY AND NATURE'S CONTRIBUTIONS PEOPLE\", 'toc_level1': '4.7 Drivers and effects of climate change ', 'toc_level2': '4.7.1 Effects of climate change on biodiversity', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3237429/files/ipbes_assessment_report_eca_EN.pdf'}, page_content=\"4.7 DRIVERS AND \\r\\nEFFECTS OF CLIMATE \\r\\nCHANGE \\n4.7.1 Effects of climate change on \\r\\nbiodiversity\\n4.7.1 Effects of climate change on \\r\\nbiodiversity\\n 4.7.1 Effects of climate change on \\r\\nbiodiversity \\n\\nand modulate important ecosystem functions and \\r\\nprocesses that underpin human livelihoods and nature's \\r\\ncontributions to people, such as water regulation, food \\r\\nproduction, and carbon sequestration (CBD, 2016; \\r\\nGallardo et al., 2015; IPBES, 2016a; IPCC, 2014a; \\r\\nMEA, 2005a).\\nClimate change is a complex driver of ecosystem change, \\r\\nconsisting of changes in precipitation and temperature \\r\\npatterns which lead to changes in drought, flood, and fire \\r\\nrisk, ocean-atmosphere interchange, marine circulation \\r\\nand stratification, and the concentrations and distribution \\r\\nof O2 and CO2 in the atmosphere and in the ocean (IPCC, \\r\\n2014a). These impacts affect species and influence\"),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document31', 'document_number': 31.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 616.0, 'name': 'Full Report. Regional Assessment Report on Biodiversity and Ecosystem Services for Asia and the Pacific', 'num_characters': 928.0, 'num_tokens': 186.0, 'num_tokens_approx': 209.0, 'num_words': 157.0, 'page_number': 586.0, 'release_date': 2018.0, 'report_type': 'Full Report', 'section_header': 'Climate change', 'short_name': 'IPBES RAR AP FR', 'source': 'IPBES', 'toc_level0': 'ANNEXES', 'toc_level1': 'Annex I: Glossary', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://zenodo.org/record/3237374/files/ipbes_assessment_report_ap_EN.pdf'}, page_content='Climate change\\nClimate change is a change in the statistical \\r\\ndistribution of weather patterns when that \\r\\nchange lasts for an extended period of time \\r\\n(i.e., decades to millions of years). Climate \\r\\nchange may refer to a change in average \\r\\nweather conditions, or in the time variation \\r\\nof weather within the context of longer\\x02term average conditions. Climate change is \\r\\ncaused by factors such as biotic processes, \\r\\nvariations in solar radiation received by Earth, \\r\\nplate tectonics, and volcanic eruptions. \\r\\nCertain human activities have been identified \\r\\nas primary causes of ongoing climate \\r\\nchange, often referred to as global warming.\\n Climate change \\n\\nClimate Smart Agriculture (CSA)\\r\\nAgriculture that sustainably increases \\r\\nproductivity, resilience (adaptation), reduces/\\r\\nremoves GHGs (mitigation), and enhances \\r\\nachievement of national food security and \\r\\ndevelopment goals.')]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from climateqa.engine.vectorstore import get_pinecone_vectorstore\n", + "from climateqa.engine.embeddings import get_embeddings_function\n", + "from climateqa.knowledge.retriever import ClimateQARetriever\n", + "\n", + "question = \"What is the impact of climate change on the environment?\"\n", + "\n", + "embeddings_function = get_embeddings_function()\n", + "vectorstore_ipcc = get_pinecone_vectorstore(embeddings_function)\n", + "docs_question = vectorstore_ipcc.search(query = question, search_type=\"similarity\")\n", + "docs_question" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp'}, page_content='Change in CO2 emissions and GDP'),\n", + " 0.668701708),\n", + " (Document(metadata={'category': 'Climate Change', 'doc_id': 'owid_766', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change'}, page_content='Global warming: Contributions to the change in global mean surface temperature'),\n", + " 0.660993457),\n", + " (Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change'}, page_content='Global warming: Contributions to the change in global mean surface temperature'),\n", + " 0.660993457),\n", + " (Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_331', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Data source: Global Carbon Budget (2023)', 'url': 'https://ourworldindata.org/grapher/co2-fossil-plus-land-use'}, page_content='CO2 emissions from fossil fuels and land-use change'),\n", + " 0.643842101),\n", + " (Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_330', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Data source: Global Carbon Budget (2023)', 'url': 'https://ourworldindata.org/grapher/co2-emissions-fossil-land'}, page_content='CO2 emissions from fossil fuels and land-use change'),\n", + " 0.643842101)]" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# optional filters\n", + "sources_owid = [\"OWID\"]\n", + "filters = {}\n", + "filters[\"source\"] = {\"$in\": sources_owid}\n", + "\n", + "# vectorestore_graphs\n", + "vectorstore_graphs = get_pinecone_vectorstore(embeddings_function, index_name = os.getenv(\"PINECONE_API_INDEX_OWID\"), text_key=\"title\")\n", + "owid_graphs = vectorstore_graphs.search(query = question, search_type=\"similarity\")\n", + "owid_graphs = vectorstore_graphs.similarity_search_with_score(query = question, filter=filters, k=5)\n", + "owid_graphs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Reranker" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Loading FlashRankRanker model ms-marco-TinyBERT-L-2-v2\n", + "Loading model FlashRank model ms-marco-TinyBERT-L-2-v2...\n" + ] + }, + { + "data": { + "text/plain": [ + "[Document(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': 1152.0, 'num_tokens': 223.0, 'num_tokens_approx': 285.0, 'num_words': 214.0, 'page_number': 2517, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '(a) Low-lying coastal systems', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 16 Key Risks across Sectors and Regions', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.738316119, 'content': \"'Impact of climate change' is defined as the difference between the observed state of the system and the state of the system assuming the same observed levels of non-climate-related drivers but no climate change. For example, we can compare the level of crop yields, damage induced by a river flood, and coral bleaching with differences in fertilizer input, land use patterns or settlement structures, without climate change and with climate change occurring.\\nWhile this definition is quite clear, there certainly is the problem that, in real life, we do not have a 'no climate change world' to compare with. We use model simulations where the influence of climate change can be eliminated to estimate what might have happened without climate change. In a situation where the influence of other non-climate-related drivers is known to be minor (e.g., in very remote locations), the non-climate-change situation can also be approximated by observation from an early period where climate change was still minor. Often, a combination of different approaches increases our confidence in the quantification of the impact of climate change.\", 'reranking_score': 0.9995970129966736, 'query_used_for_retrieval': 'What is the impact of climate change on the environment?'}, page_content=\"'Impact of climate change' is defined as the difference between the observed state of the system and the state of the system assuming the same observed levels of non-climate-related drivers but no climate change. For example, we can compare the level of crop yields, damage induced by a river flood, and coral bleaching with differences in fertilizer input, land use patterns or settlement structures, without climate change and with climate change occurring.\\nWhile this definition is quite clear, there certainly is the problem that, in real life, we do not have a 'no climate change world' to compare with. We use model simulations where the influence of climate change can be eliminated to estimate what might have happened without climate change. In a situation where the influence of other non-climate-related drivers is known to be minor (e.g., in very remote locations), the non-climate-change situation can also be approximated by observation from an early period where climate change was still minor. Often, a combination of different approaches increases our confidence in the quantification of the impact of climate change.\"),\n", + " Document(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': 1010.0, 'num_tokens': 218.0, 'num_tokens_approx': 222.0, 'num_words': 167.0, 'page_number': 878, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': '6.5 Implications of Changing Climate on AQ', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '6: Short-lived Climate Forcers', 'toc_level1': '6.5 Implications of Changing Climate on AQ', 'toc_level2': '6.5.1 Effect of Climate Change on Surface Ozone', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.737111747, 'content': 'Air pollutants can be impacted by climate change through physical changes affecting meterorological conditions, chemical changes affecting their lifetimes, and biological changes affecting their natural emissions (Kirtman et al., 2013). Changes in meteorology affect air quality directly through modifications of atmospheric transport patterns (e.g., occurrence and length of atmospheric blocking episodes, ventilation of the polluted boundary layer), extent of mixing layer and stratosphere-troposphere exchange (STE) for surface ozone (von Schneidemesser et al., 2015), and through modifications of the rate of reactions that generate secondary species in the atmosphere. Changing precipitation patterns in a future climate also influence the wet removal efficiency, in particular for atmospheric aerosols (Hou et al., 2018). Processes at play in non-CO2 biogeochemical feedbacks (Section 6.4.5) are also involved in the perturbation of atmospheric pollutants (Section 6.2.2).', 'reranking_score': 0.9995288848876953, 'query_used_for_retrieval': 'What is the impact of climate change on the environment?'}, page_content='Air pollutants can be impacted by climate change through physical changes affecting meterorological conditions, chemical changes affecting their lifetimes, and biological changes affecting their natural emissions (Kirtman et al., 2013). Changes in meteorology affect air quality directly through modifications of atmospheric transport patterns (e.g., occurrence and length of atmospheric blocking episodes, ventilation of the polluted boundary layer), extent of mixing layer and stratosphere-troposphere exchange (STE) for surface ozone (von Schneidemesser et al., 2015), and through modifications of the rate of reactions that generate secondary species in the atmosphere. Changing precipitation patterns in a future climate also influence the wet removal efficiency, in particular for atmospheric aerosols (Hou et al., 2018). Processes at play in non-CO2 biogeochemical feedbacks (Section 6.4.5) are also involved in the perturbation of atmospheric pollutants (Section 6.2.2).'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 413.0, 'num_tokens': 75.0, 'num_tokens_approx': 82.0, 'num_words': 62.0, 'page_number': 11, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'TS.B Observed Impacts', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.B Observed Impacts', 'toc_level1': 'Ecosystems and biodiversity', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.730846643, 'content': 'Climate change impacts are concurrent and interact with other significant societal changes that have become more salient since AR5, including a growing and urbanising global population; significant inequality and demands for social justice; rapid technological change; continuing poverty, land and water degradation, biodiversity loss; food insecurity; and a global pandemic.\\nEcosystems and biodiversity', 'reranking_score': 0.9995288848876953, 'query_used_for_retrieval': 'What is the impact of climate change on the environment?'}, page_content='Climate change impacts are concurrent and interact with other significant societal changes that have become more salient since AR5, including a growing and urbanising global population; significant inequality and demands for social justice; rapid technological change; continuing poverty, land and water degradation, biodiversity loss; food insecurity; and a global pandemic.\\nEcosystems and biodiversity'),\n", + " Document(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': 413.0, 'num_tokens': 75.0, 'num_tokens_approx': 82.0, 'num_words': 62.0, 'page_number': 57, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'TS.B Observed Impacts', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Technical Summary ', '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.730846643, 'content': 'Climate change impacts are concurrent and interact with other significant societal changes that have become more salient since AR5, including a growing and urbanising global population; significant inequality and demands for social justice; rapid technological change; continuing poverty, land and water degradation, biodiversity loss; food insecurity; and a global pandemic.\\nEcosystems and biodiversity', 'reranking_score': 0.9791502356529236, 'query_used_for_retrieval': 'What is the impact of climate change on the environment?'}, page_content='Climate change impacts are concurrent and interact with other significant societal changes that have become more salient since AR5, including a growing and urbanising global population; significant inequality and demands for social justice; rapid technological change; continuing poverty, land and water degradation, biodiversity loss; food insecurity; and a global pandemic.\\nEcosystems and biodiversity')]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from climateqa.engine.reranker import get_reranker\n", + "from climateqa.engine.reranker import rerank_docs\n", + "\n", + "reranker = get_reranker(\"nano\")\n", + "reranked_docs_question = rerank_docs(reranker,docs_question[\"docs_full\"],question)\n", + "reranked_docs_question" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Graph" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "image/jpeg": "/9j/4AAQSkZJRgABAQAAAQABAAD/4gHYSUNDX1BST0ZJTEUAAQEAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADb/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCANMA5UDASIAAhEBAxEB/8QAHQABAQADAAMBAQAAAAAAAAAAAAYEBQcBAwgCCf/EAGIQAAEEAQIDAgYKCg4IBAUCBwEAAgMEBQYRBxIhEzEUFRciQVYIFjI0UZSV0dLTIyQ2QkNUVWFxkzM1UlNiY3R1gYOys7TUJjdyc5GSobEJJUeCGESio8InZKRFZYSWwfD/xAAZAQEBAAMBAAAAAAAAAAAAAAAAAQIDBAX/xAA0EQEAAQEGAwUHBQEBAQEAAAAAARECAxIUUZExUtEhQWFxkgQTM2KhscEiMkKB0iPC8OH/2gAMAwEAAhEDEQA/AP6poiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAi/E88daGSaaRsUUbS98j3ANa0Dckk9wCmYqtzWbG2bMtnGYV+zoKcRMNiw391M73TAehEbdnAe7O7ixuyxYxdszSFo3tzMUMe7ltXq1Z3wTStYf8AqVje2rCflih8aZ869FTQ+naLA2DB49nTYu8GYXHrv1cRuevXqsj2rYX8kUPizPmWz/j4/Q7Hj21YT8sUPjTPnT21YT8sUPjTPnXn2rYX8kUPizPmT2rYX8kUPizPmT/j4/Rex49tWE/LFD40z509tWE/LFD40z5159q2F/JFD4sz5k9q2F/JFD4sz5k/4+P0Ox49tWE/LFD40z515GqcK47DL0CfgFlnzp7VsL+SKHxZnzJ7VsLsR4oodenvZnzJ/wAfH6J2NjFNHYjbJE9skbu5zDuD/Sv2pqXh7ho5HT4uA4C6e61idoHb/C5gHJJ+h7XD83QLKw+XssuuxWVa1uQawyRWI28sVuMHYuaNzs4bjmb6NwRuCpNizMVu5r9//v8A6hTRu0RFoQREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBMay2yNzBYR2xgv2i+y0/fQxMMhb/AEvEbSO4tLt/gNOpjUo8F1Vpa87fsu3npuIG4aZIi5pPwAuiDf0uHwqnXRefssRGk71n8RCzwgRQt3jzwzx1yepb4iaTq2oJHRTQTZusx8b2nZzXNL9wQQQQe5ek+yE4WNJB4l6PBHeDnqv1i50eny346xxKvaMx+A1BlrOOngrZHJ0abH0qMs0YkY2V5eHe4c0ktY4DfqQpzgxxxznELNa7qZbSGWoVsHmLlSvcZDB2QjhbFywODZ3vdYPO53mt5CCNnA9FL6s09n9acXcFqvh/pxlCKS/Rkn15jM9A6ll8W0AzxT1mO3mO3Oxh5XbbNIe0dBn4bSHETTFni5pzFYjwaPU17I5jC6ujvQiKrPPVY2Nj4Se1DmSsHnBpGxB9CCw0v7ILF6gzdrD39Nam0plI8dLla9XP0WQOuVoyBI6ItkcCWlzN2OLXDmG479oLWvssrM3AfKa/0dozPurCpXsUr+WqQMrO7SRrHbs8IDzybkEgcpOxaXt6qR0NwS1Li9caXzFbhkNLx18BksTlrs2Yr2rt23NCwtsSuDyZGF8RaHFxfvLuWNaN1e3eD2pMv7Cyhw8FaGnquLTdSoas8zSwWYWxuMZe0lvVzOXmBI6777IO06VztjUmDr5Czhcjp6aUuDsflRF4RHs4gc3ZSSM67bjZx6Eb7Hotuuc0eNmGxGPr+UGzieGmbmBe3D5zO0+2dH3CRpbJsWlwcAR+5Pd3L3//ABB8LQ0O8pWkOUnYHx9V2/vPzoL9THEPalp2TMtAE+FcMix536MZv2o6fuojI3/3fmWXpXXemtdV559NahxWoYIHBk0mKuxWWxuI3AcWOIB29BWNxILn6FzVZm5mu13UYgG8x7Sb7Ezp/tPC3+z/ABbPnCxxhS96L8sYI2NY33LRsF+loQREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERBg5vDwZ7GTUbBc1knK5skZ2fG9rg5j2n0Oa4NcD8ICwMPqB/hDMXl+zq5lo6BoLYrYA/ZISe8fCzcuYeh3HK529WJlMRSzdQ1b9WK5XJDuzmYHAOHc4fAR3gjqPQttm1FMFvh9lft2PqucSa0JJ6kmMdV48W1PxWD9WPmWg9occIDaebzlKIDYRsvOlDR+btQ8/8AXp3DovHtIn9ac9+vi+qWeC7n+f0laRqp2MbGwNY0NaOgDRsAv0pb2kT+tOe/XxfVJ7SJ/WnPfr4vqk93d8/0kpGqpRcq0JjspqLI6whuapzIZis0+hW7KaIHshXgkHN9jPnc0jvg6bdFWe0if1pz36+L6pPd3fP9JKRqo5qkFhwdLDHI4DYF7QSvx4tp/isH6sfMp/2kT+tOe/XxfVLyNETg9dUZ5w7tjPF9Wnu7vn+kpSNW+nlpYapNYmfXo1YxzySvLY2NHwuJ2A/pWjqxv1blKmSlidFiKTzLSZIC19iXlLe2c09zAHHlB6knm6bN39lLQmLrWo7VnwrK2oyHRy5Ky+x2ZHcWtceVp/O0AqiTFYu/2ds69Ov0OyOAiIudBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREHPeE5BzHEfYkn2zyb/p8Dqfn+ZdCXPeE+/jjiPvt908ndt+J1O/b/wD38y6EgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIg55wmG2Z4k+cD/AKUSdAO77Tqd66GuecJtvHPEnYn7qJN+m3/ydT/iuhoCIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAi0WotSPxUsNKlVF/KTtdJHA+Ts42MbsC+R+zuVu5AGwJJPQbBxGmOc1hudqOE29G9qb6tdNj2e3bjF2RHjK0WyKI8eaw/EcH8am+rTx5rD8Rwfxqb6tZ5W3rG8FFuiiPHmsPxHB/Gpvq08eaw/EcH8am+rTK29Y3got0UR481h+I4P41N9WnjzWH4jg/jU31aZW3rG8FFupfifqzIaE4f53UWLwrtRXMZWdaGMbY7B07W9XgP5XbEM5iBsdyAOm+6wPHmsPxHB/Gpvq0Ob1g4EGjgyD0INmb6tMrb1jeCj5e9iJ7MubjHxazOmaWhJqcOZu2M3ayHjESNoxNrxRgOaIW8+742N33H7IPg2X2wvmngX7H+bgFm9X5PAUcNJPqG4Z9pZ5R4JDuS2vGez35Q5zjv6fN/crr/jzWH4jg/jU31aZW3rG8FFuiiPHmsPxHB/Gpvq08eaw/EcH8am+rTK29Y3got0UR481h+I4P41N9WnjzWH4jg/jU31aZW3rG8FFuiiPHmsPxHB/Gpvq08eaw/EcH8am+rTK29Y3got0UR481h+I4P41N9Wv2zVGo6AM+QxVCxVZ1kGPsyOma3puWsdGA/YbnbcHp03PRMred0xvBRaIvTUtw36kNmvI2avMxskcje5zSNwR+kFe5ckxTslBERQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREEPfO/Ey0PgxEG35t5pt/+wW1Wpv/AOs23/M9f++nW2XrWuFnyj7LIiIsEEWDezmPxl3H07d2CtbyEroakEsga+w9rHPc1g73ENa5x27gCs5AREQERamDVWLs6ot6djsl2YqVY7s1fsnjlhkc9rHc23KdzG8bA7jbqOoUG2REVBEJ2G61OldU4vW2nqWcwtk3MXdYZIJzG+PnbuRvyvAcOoPeAoNsiwcpnMfhDTGQuwUzcsNqVhPIGmaZwJbGzf3TiGuOw67An0LOVBEWDlM5j8IaYyF2CmblhtSsJ5A0zTOBLY2b+6cQ1x2HXYE+hBnIiIPTwtO/DnTf5qMQA+Aco6KpUtws/wBXOnP5DF/ZVSuT2j41vzn7rPGRERc6CIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiCGv/wCs23/M9f8Avp1tlp7krJOJ95rXtc5mIrhwB3LT20x2PwdCFuF61rhZ8o+yy4rxJnyOtOOWnuH7s/k9OYF2Cs5qd+HtGpZvzMmjibCJm+c1rA9zyGEE7jfoFqOKGKssyOlOHeAyWss1n46VrIdpDqZ2N+1hIxva2rTWOfIWve1jGhrt9zzA7brq+veFul+JsNFmo8WLz6MhlqWI55K89dxGzjHLE5r27jbcBwB2G/ctNd9j9oLIYzD0JcE5sGIbKym6G7YilYyV3PKx0jJA+Rr3dXNeXAnqQVpmJR874uO7xbxHscchqfMZYZOxksrj7NvH5Saq95hgtsa8PiczaQ9i0F42JBcO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wzspq9uBsscrN9+VzXAgjfrsVnIgnMhoLF3fGb4XXcZZyMUUM1nHXZYHgR7chZyu2YRttuB1HQ7jovORweeBy82K1KYrFpsPgkOTox2atJzNg/ZkZikeJBvuHykgndpA81USIJ3I5HUmOflposNUytaN0HgEFW52diZp2E3aCRoY0tPVuzzzDoeUjr5va3o4h2QOSr3sdWpzxQG3NVc6GUybcrmOZzbtBOxJ25T37dCaFEGLSytLJPssqXILT60hhnbDK15ieO9jtj5rvzHqspabKaQw+XbP4RRY2SeWKeSauXQSvfGd43GRha7dvo69xI7iVjsw2Zxcz30cw6/FYyPhE0OWY1/YV3A88MDowwt2OzmmTtPS3cAtLAoUWDh8m7K1DLJTsUJmyPjfXsgBwLXFvMNiQWu25mkHqCO47gZyAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIiAiIgIiICIvBOwQeHvbGxz3uDGNG5c47AD4StAzI5LUE9d+NHi/FNlsw2prld7LMnKCxjq7XbANL93do8EFrBytc2QPH4rRN1p9s2WNlwBMb61K1TfHK6aKbnE7i8g8vMyMsbyj3PNu4OaG0iDWYbT1LBwwthY+axHA2sbtp5lsysaSQHyu3c7q5x6nvcfhWzREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERARF47kHlFMzcTdI13lkmpsS1w3BHhkfoOx9Pwgj+hfjyqaO9aMT8cj+ddGXvuSdpXDOipRS3lU0d60Yn45H86eVTR3rRifjkfzplr7knaVwzoi6vG7hi3iBfvM1fpBgnxlaA5hupqpM5ZLORX7HtOnJ2hcH+ntiPQuur+Y+kfYv6XxPsz7E8+Uxh4a0JPHtWd9lhhkJdvHU3JIJbJ3g9eRm/pC/of5VNHetGJ+OR/OmWvuSdpMM6KlFLeVTR3rRifjkfzp5VNHetGJ+OR/OmWvuSdpMM6KlFNVuJekrk7IYdTYmSV55WMFyPdx+Adep/MqVa7d3bu/3xMeaTExxERFrQREQEREBERAREQEREBERAREQEREBERAREQEREBaDVsM+SjpYiOLItgvzclm9jrAgdViYC8kv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tOkkoXoZfCqzIwbhY1kVzdo5pIwHOLRzbgtdsQfhBDjtEBERAREQEREBERBO6YdvndXjmw7tsnGNsaPtgfaVbpc/jvSP4kwKiU7ph2+d1eObDu2ycY2xo+2B9pVulz+O9I/iTAqJAREQEREBERAREQEREBTuWP8Apvp7rmfe9zpU94fgvfP8P97/AKxUSncsf9N9Pdcz73udKnvD8F75/h/vf9YgokREBERAREQEREBERAREQEREBERAU5gqjodXamnOOsVWzOrbXJbHPHa2i28xn3nL7k/Ceqo1N4LHmtq/U9k4uWoLLqxF59nnZb5Ytt2s/B8vuT8PegpEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBafL6nq4uxJSijkyWYFSS5FiqhZ4ROxhA83nc1jd3ENBe5rdz3jYke/UV3IY7C27GKxwy2RYzeCm6dsIlduBsXu6NHpJ/N3FfvD4mHC0WVoXzTbFznTWJDJJI5zi9zi4/C5zjsNgN9gAAAA1EtHUGfr247F4afrWakTYhjw192tKespMrw6M7e5GzD6Xb9QBnwaUxVfIZG74IJbWQdC+y+d7pQ8xDaLYOJDeXbcBoA3JPeSVtkQEREBERAREQEREBERAREQEREBERAREQEREBERAREQaPXOQOJ0TqC8MoMGa2PsTDKOg7cU+WNx7Yx7Hn5Nubl267belbam/takD+07bmjae05eXn6d+3o3Wp11d8WaI1Dc8Zswvg+OsS+MpK/btqcsTj2xj+/DNubl9O23pW1pP7WnA/tBNzRtPaBvLzdO/b0b/Ag96IiAiIgIiINFqzESXasN+hUpWM5jXOnx77znsY15aWuaXs3c0OYXNPQjqCWu22W0xuRqZjHVb9CzDdo2omzwWa8gkjljcA5r2uG4c0gggjoQVkqb0I6ODF3MZG/Ff8Ald6em2viI+yirRc3PBE5n3r2wvi5gOhJ3AAIACkREQEREBERAREQTumXA5zVwBxBIycYIxv7OPtOt77/AI74P4rsFRKd0w7fO6vHNh3bZOMbY0fbA+0q3S5/HekfxJgVEgIiICIiAiIgIiICIiAp3LH/AE3091zPve50qe8PwXvn+H+9/wBYqJTuWP8Apvp7rmfe9zpU94fgvfP8P97/AKxBRIiICIiAiIgIiICKPuatyl+1OzA0qk1WCR0L7l6Z7GySNJDhG1rSSAQQXEjqDsCOq9HjrWP4rg/1030V1x7LeTHbSP7Wi3RRHjrWP4rg/wBdN9FPHWsfxXB/rpvoq5W3rG60W6KI8dax/FcH+um+injrWP4rg/1030UytvWNyi3RRHjrWP4rg/1030U8dax/FcH+um+imVt6xuUU2pL93Fadyl3GY/xtka1WWatj+17LwmVrCWRc+x5eZwDebY7b77FfFXAn2etnirxsg03jOFMtLJZ+zGzIWX6iMrasULCHydmawHmMBPKCOYgDfruvq/x1rH8Vwf66b6K5Hw34ATcMeLesuIGLp4Y5PUZBMDpZRHU3PNKI/N+/eA783cOiZW3rG5R9Joojx1rH8Vwf66b6KeOtY/iuD/XTfRTK29Y3KLdFEeOtY/iuD/XTfRTx1rH8Vwf66b6KZW3rG5Rboojx1rH8Vwf66b6KeOtY/iuD/XTfRTK29Y3KLdFEeOtY/iuD/XTfRQZrWG/Wrg9v99N9FMrb1jcot0U7p/U09267G5SrHRyQjM0YgkMkM8YIDnMcWtO7S4AtI6cw23BVEue3YtXc4bScBERa0EREBERAREQEREBERAREQEREBERAREQEU/qDUs9C4zHY2rHdybo+2c2aQxxQxkkBz3Brj1IIAAJOx7gCVqDmtYb9KuD2/wB9N9FdNn2e3ajF2R5ytFuiiPHWsfxXB/rpvop461j+K4P9dN9FZ5W3rG60W6KI8dax/FcH+um+injrWP4rg/1030UytvWNyi3RRHjrWP4rg/1030U8dax/FcH+um+imVt6xuUcN9ml7KJ3AeXFYPLcOjqzTmbriVt7xy6kO3ilDjFythcfN2ifvzDfm226detexy4wZHjtwwp6yv6YOlY700gqVDd8KMsLdgJebs2bbu5xtt3NB367CL9kFwfynsidBe1nNxYio2OzHar3a8spkhe07Hbdvc5pc0j8+/oCvNPRaj0rgcdhsZjsDWx2Prsq14WzTbMjY0NaPc/AEytvWNyjo6KI8dax/FcH+um+injrWP4rg/1030UytvWNyi3RRHjrWP4rg/1030U8dax/FcH+um+imVt6xuUW6KI8dax/FcH+um+injrWP4rg/wBdN9FMrb1jcot0UUzOava4F9LCSNHe1tmZpP8ATyHb/gVRafzsWfomdkb680bzDPXk93DINt2nboe8EEdCCCOhWu3cW7uMU8PCUo2aIi50EREBERAREQEREBERAREQEREBERBo9c3vFmidQXPGbcL4PjrE3jJ9fwhtTljce2MX34Ztzcvp229K2tJ/aUq7+0E3NG09oG8vP079vRv8C1et7vi3ReftnJtwor4+xL4yfB27anLG49sY/vwzbm5fTtt6VtKT+0pwP7QTc0bT2gby8/Tv29G/wIPeiIgIiICIiAp3AzBmq9T1e2xhPaV7PYU2ctlofCGc1j90XdkQ137lgH3qolOUJnDiDmoDPjCw42lK2CFu15pMlprnyn0xENaI/wCE2b8yCjREQEREBERAREQTumHb53V45sO7bJxjbGj7YH2lW6XP470j+JMColO6YdvndXjmw7tsnGNsaPtgfaVbpc/jvSP4kwKiQEREBERAREQEREBERAU7lj/pvp7rmfe9zpU94fgvfP8AD/e/6xUSncsf9N9Pdcz73udKnvD8F75/h/vf9YgokREBERAREQEREHO9AHfSlQ+kvmJ/T2r1Qqd4f/cnT/25v716ol7N98W15ys8ZERFpQREQEREBERARae3q7E0dU47Tk9vkzOQrTW61bs3ntIoiwSO5gOUbGRnQkE79N9iv1qHVWL0q3HOylk1hkLsWOrERPfzzynaNnmg7bkd52A9JCg2yLBo5zH5O9kKdS7BZtY+RsVuGKQOdXe5oe1rwPcktc12x9BB9K99+7DjKNi5Zf2devG6WV+xPK1o3J2HU9B6FR70Wu05qChqzT+NzeKseFYvJVo7lWfkcztIpGhzHcrgHDcEHYgH4QtigIsHFZzH5wWzj7sF0VLD6k5ryB4imYdnxu27nNPQjvB6FZyDTynbiBpvb0wXB/RtH8wV2oSX/WBpv/cXP7Mau1p9p/h5fmVnuERFxIIiICIiAiIgIiICIiAiIgIiICIiAiIghe/iLqD81GkP6OawtutR/wCouoP5FS/7zrbr1rfd5R9oZTxERFgxEREBERAREQEREBERARafI6uxOK1Jh8Bat9llsvHPLSr9m89q2EMMp5gOVvKJGe6I336b7FbhQFg6DP8A51rEejxnEf6fA66zlg6D/bvWP85Rf4Ousp+Hb8vzCx3rFEReWgiIgIiICIiAiIgIiICIiAiIgIiINHrq54u0RqG34fDiuwx1iXw+xD20dblice1dH9+1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+H+9/wBYgokREBERAREQEREBERAREQEREBERAXPtEg+VfiQdtvPx3Xb/APbfo+ddBXPNEN24s8Sj16vx3eOnvZB0NERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEWDkczXxdijBMJnzXZuwhZDC+TrylxLi0EMaA07udsO4b7kA6itisrqGvWmzr/F0UleeGzhKcwlhfzkhpfNyNeXNj6bM5WhzndX7NID35nVDqst2hiqMuYzcFZthtNpMURDn8jeadw5G9Q4kbl3K0kNPQHxPpuxlrdh+WyEliiZa89ahW5oGQOjG55ntIdKHP6kO2bs1o5fdF22xuNqYbHVaFCrDRo1YmwV6taMRxQxtAa1jGgANaAAAB0ACyUH5jjZE3lYxrG7l2zRsNydyf6SSV+kRAREQEREBERAREQEREBa7M4Gnnar4LLZGcxYe2ryuhlaWOD27PYQ4bOG+2+x6g7gkLYog0HNncPKA5vtggs5EjeMMryUarx033O0vI7fcjldyEdHOb5+wwmcpahoC5RkdJDzvicJI3RPY9ji1zXMeA5pBBGxAWetZk9OUMrkKeQlhDclSZLHVux9JYGytDXhp9IOzSWkEEsYdt2jYNmimHZjI6Tq/+djw/F06AlnzkTfsr5Wu2cH1mN6DlIfzMJHSTdrAG81LHI2VjXscHscAWuadwR8IQfpERAREQEREBERAREQEREBERAREQYGegFrB5GEtncJK0jC2q7lmO7SNmH0O+A/DsvVpZ3NpnEOMNuuTThPY3zvYZ5g82X+GO53591spGCRjmHfZwIOx2K0HDwcmg9PR9jlIOyoQRdnmzveHKwN+zn0ydPOPpO5QUKIiAiIgIiICnNDTC/jbuSbYx1uO/ennis4yPlZJEHdnGXu+/eGRsBd/B2HQBZOsM2zAadtWfDIKFiTkq1J7MbpIxZmeIoGlrfOdvK9g2HU7rPxVEYvGVKY7M9hE2PeKIRNJA23DB0aPzDoEGWiIgIiICIiAiIgnNLlvj7WGww4PjSPfxaftgnwKr78/jvg/iewVGpzS5Bzur9mYhp8Zx7nGkGd32lW62/gm9A/ihAqNAREQEREBERAREQEREBTuW+7fT37c+97nvT3h+C98/w/3v+sVEp3Lfdvp79ufe9z3p7w/Be+f4f73/AFiCiREQEREBERAREQEREBER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", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from climateqa.engine.graph import make_graph_agent, display_graph\n", + "\n", + "app = make_graph_agent(llm=llm, vectorstore_ipcc=vectorstore_ipcc, vectorstore_graphs=vectorstore_graphs, reranker=reranker)\n", + "display_graph(app)" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [ + "from climateqa.engine.graph import search \n", + "\n", + "from climateqa.engine.chains.intent_categorization import make_intent_categorization_node\n", + "\n", + "\n", + "from climateqa.engine.chains.answer_chitchat import make_chitchat_node\n", + "from climateqa.engine.chains.answer_ai_impact import make_ai_impact_node\n", + "from climateqa.engine.chains.query_transformation import make_query_transform_node\n", + "from climateqa.engine.chains.translation import make_translation_node\n", + "from climateqa.engine.chains.retrieve_documents import make_retriever_node\n", + "from climateqa.engine.chains.answer_rag import make_rag_node\n", + "from climateqa.engine.chains.graph_retriever import make_graph_retriever_node\n", + "from climateqa.engine.chains.chitchat_categorization import make_chitchat_intent_categorization_node\n", + "from climateqa.engine.chains.prompts import audience_prompts\n", + "from climateqa.engine.graph import route_intent\n" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "inial_state = {\"user_input\": \"What is the impact of climate change on the environment?\", \"audience\" : audience_prompts[\"general\"],\"sources_input\":[\"IPCC\"]}\n", + "state=inial_state.copy()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Categorize_message ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Output intent categorization: {'intent': 'search'}\n", + "\n" + ] + }, + { + "data": { + "text/plain": [ + "{'user_input': 'What is the impact of climate change on the environment?',\n", + " 'audience': 'the general public who know the basics in science and climate change and want to learn more about it without technical terms. Still use references to passages.',\n", + " 'sources_input': ['IPCC'],\n", + " 'intent': 'search',\n", + " 'language': 'English',\n", + " 'query': 'What is the impact of climate change on the environment?'}" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cat_node = make_intent_categorization_node(llm)\n", + "state.update(cat_node(inial_state))\n", + "state" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'user_input': 'What is the impact of climate change on the environment?',\n", + " 'audience': 'the general public who know the basics in science and climate change and want to learn more about it without technical terms. Still use references to passages.',\n", + " 'sources_input': ['IPCC'],\n", + " 'intent': 'search',\n", + " 'language': 'English',\n", + " 'query': 'What is the impact of climate change on the environment?'}" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state.update(search(state))\n", + "state" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": {}, + "outputs": [], + "source": [ + "intent = route_intent(state)\n", + "\n", + "if route_intent(state) == \"translate_query\":\n", + " make_translation_node(llm)(state)" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Transform query ----\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" + ] + }, + { + "data": { + "text/plain": [ + "{'user_input': 'What is the impact of climate change on the environment?',\n", + " 'audience': 'the general public who know the basics in science and climate change and want to learn more about it without technical terms. Still use references to passages.',\n", + " 'sources_input': ['IPCC'],\n", + " 'intent': 'search',\n", + " 'language': 'English',\n", + " 'query': 'What is the impact of climate change on the environment?',\n", + " 'remaining_questions': [{'question': 'What are the effects of climate change on ecosystems?',\n", + " 'sources': ['IPCC'],\n", + " 'index': 'Vector'},\n", + " {'question': 'How does climate change affect biodiversity and wildlife?',\n", + " 'sources': ['IPCC'],\n", + " 'index': 'Vector'}],\n", + " 'n_questions': 2}" + ] + }, + "execution_count": 64, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state.update(make_query_transform_node(llm)(state))\n", + "state" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieving graphs ----\n", + "Subquestion 0: What are the effects of climate change on ecosystems?\n", + "8 graphs retrieved for subquestion 1: [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.649586797, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.004589226096868515, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp', 'similarity_score': 0.623827338, 'content': 'Change in CO2 emissions and GDP', 'reranking_score': 0.002260460052639246, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in CO2 emissions and GDP'), Document(metadata={'category': 'Forests & Deforestation', 'doc_id': 'owid_1358', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Net change in forest area measures forest expansion (either through afforestation or natural expansion) minus deforestation', 'url': 'https://ourworldindata.org/grapher/annual-change-forest-area', 'similarity_score': 0.612325966, 'content': 'Annual change in forest area', 'reranking_score': 0.001020866329781711, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Annual change in forest area'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_351', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-long-term', 'similarity_score': 0.611927152, 'content': 'Change in per capita CO2 emissions and GDP', 'reranking_score': 0.0006646059919148684, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in per capita CO2 emissions and GDP'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_330', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Data source: Global Carbon Budget (2023)', 'url': 'https://ourworldindata.org/grapher/co2-emissions-fossil-land', 'similarity_score': 0.602846205, 'content': 'CO2 emissions from fossil fuels and land-use change', 'reranking_score': 0.00017391949950251728, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='CO2 emissions from fossil fuels and land-use change'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_372', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon.', 'url': 'https://ourworldindata.org/grapher/cumulative-co2-land-use', 'similarity_score': 0.59720397, 'content': 'Cumulative CO2 emissions from land-use change', 'reranking_score': 4.376090510049835e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Cumulative CO2 emissions from land-use change'), Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_199', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.', 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species', 'similarity_score': 0.59466666, 'content': 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050', 'reranking_score': 2.851418685168028e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_375', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change. They are measured as the cumulative total since 1850, in tonnes.', 'url': 'https://ourworldindata.org/grapher/cumulative-co2-including-land', 'similarity_score': 0.593179703, 'content': 'Cumulative CO2 emissions including land-use change', 'reranking_score': 2.8351740184007213e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Cumulative CO2 emissions including land-use change')]\n", + "Subquestion 1: How does climate change affect biodiversity and wildlife?\n", + "7 graphs retrieved for subquestion 2: [Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_199', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.', 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species', 'similarity_score': 0.638248205, 'content': 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050', 'reranking_score': 0.00037698738742619753, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050'), Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_192', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The bird population index is measured relative to population size in the year 2000 (i.e. the value in 2000 = 100).', 'url': 'https://ourworldindata.org/grapher/bird-populations-eu', 'similarity_score': 0.637129366, 'content': 'Change in bird populations in the EU', 'reranking_score': 0.0002982213336508721, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in bird populations in the EU'), Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_235', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The projected number of mammal, bird and amphibian species losing a certain extent of habitat by 2050 as a result of cropland expansion globally under a business-as-usual-scenario.', 'url': 'https://ourworldindata.org/grapher/projected-habitat-loss-extent-bau', 'similarity_score': 0.629549921, 'content': 'Number of animal species losing habitat due to cropland expansion by 2050', 'reranking_score': 0.00019150562002323568, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Number of animal species losing habitat due to cropland expansion by 2050'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.626872361, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.0001559457741677761, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp', 'similarity_score': 0.605995178, 'content': 'Change in CO2 emissions and GDP', 'reranking_score': 0.00015302258543670177, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in CO2 emissions and GDP'), Document(metadata={'category': 'Forests & Deforestation', 'doc_id': 'owid_1358', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Net change in forest area measures forest expansion (either through afforestation or natural expansion) minus deforestation', 'url': 'https://ourworldindata.org/grapher/annual-change-forest-area', 'similarity_score': 0.605800509, 'content': 'Annual change in forest area', 'reranking_score': 0.00011613907554419711, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Annual change in forest area'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_351', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-long-term', 'similarity_score': 0.59752804, 'content': 'Change in per capita CO2 emissions and GDP', 'reranking_score': 0.00010721882426878437, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in per capita CO2 emissions and GDP')]\n" + ] + }, + { + "data": { + "text/plain": [ + "{'user_input': 'What is the impact of climate change on the environment?',\n", + " 'audience': 'the general public who know the basics in science and climate change and want to learn more about it without technical terms. Still use references to passages.',\n", + " 'sources_input': ['IPCC'],\n", + " 'intent': 'search',\n", + " 'language': 'English',\n", + " 'query': 'What is the impact of climate change on the environment?',\n", + " 'remaining_questions': [{'question': 'What are the effects of climate change on ecosystems?',\n", + " 'sources': ['IPCC'],\n", + " 'index': 'Vector'},\n", + " {'question': 'How does climate change affect biodiversity and wildlife?',\n", + " 'sources': ['IPCC'],\n", + " 'index': 'Vector'}],\n", + " 'n_questions': 2,\n", + " 'recommended_content': [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.649586797, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.004589226096868515, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp', 'similarity_score': 0.623827338, 'content': 'Change in CO2 emissions and GDP', 'reranking_score': 0.002260460052639246, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in CO2 emissions and GDP'),\n", + " Document(metadata={'category': 'Forests & Deforestation', 'doc_id': 'owid_1358', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Net change in forest area measures forest expansion (either through afforestation or natural expansion) minus deforestation', 'url': 'https://ourworldindata.org/grapher/annual-change-forest-area', 'similarity_score': 0.612325966, 'content': 'Annual change in forest area', 'reranking_score': 0.001020866329781711, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Annual change in forest area'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_351', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-long-term', 'similarity_score': 0.611927152, 'content': 'Change in per capita CO2 emissions and GDP', 'reranking_score': 0.0006646059919148684, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in per capita CO2 emissions and GDP'),\n", + " Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_199', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.', 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species', 'similarity_score': 0.638248205, 'content': 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050', 'reranking_score': 0.00037698738742619753, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050'),\n", + " Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_192', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The bird population index is measured relative to population size in the year 2000 (i.e. the value in 2000 = 100).', 'url': 'https://ourworldindata.org/grapher/bird-populations-eu', 'similarity_score': 0.637129366, 'content': 'Change in bird populations in the EU', 'reranking_score': 0.0002982213336508721, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in bird populations in the EU'),\n", + " Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_235', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The projected number of mammal, bird and amphibian species losing a certain extent of habitat by 2050 as a result of cropland expansion globally under a business-as-usual-scenario.', 'url': 'https://ourworldindata.org/grapher/projected-habitat-loss-extent-bau', 'similarity_score': 0.629549921, 'content': 'Number of animal species losing habitat due to cropland expansion by 2050', 'reranking_score': 0.00019150562002323568, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Number of animal species losing habitat due to cropland expansion by 2050'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_330', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Data source: Global Carbon Budget (2023)', 'url': 'https://ourworldindata.org/grapher/co2-emissions-fossil-land', 'similarity_score': 0.602846205, 'content': 'CO2 emissions from fossil fuels and land-use change', 'reranking_score': 0.00017391949950251728, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='CO2 emissions from fossil fuels and land-use change'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_372', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon.', 'url': 'https://ourworldindata.org/grapher/cumulative-co2-land-use', 'similarity_score': 0.59720397, 'content': 'Cumulative CO2 emissions from land-use change', 'reranking_score': 4.376090510049835e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Cumulative CO2 emissions from land-use change'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_375', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change. They are measured as the cumulative total since 1850, in tonnes.', 'url': 'https://ourworldindata.org/grapher/cumulative-co2-including-land', 'similarity_score': 0.593179703, 'content': 'Cumulative CO2 emissions including land-use change', 'reranking_score': 2.8351740184007213e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Cumulative CO2 emissions including land-use change')]}" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "state.update(make_graph_retriever_node(vectorstore_graphs, reranker)(state))\n", + "state" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "RunnableLambda(afunc=retrieve_docs)" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "retriever_node = make_retriever_node(vectorstore_ipcc, reranker, llm)\n", + "retriever_node" + ] + }, + { + "cell_type": "code", + "execution_count": 69, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieve documents ----\n", + "{'documents': [Document(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': 547.0, 'num_tokens': 104.0, 'num_tokens_approx': 116.0, 'num_words': 87.0, 'page_number': 839, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '7.6.4.3 Ecological Barriers and Opportunities', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '7.6 Assessment of Economic, Social and\\xa0Policy Responses', 'toc_level1': 'Box\\xa07.12 | Financing AFOLU Mitigation; What Are the Costs and Who Pays?', '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.789457798, 'content': 'The effects of climate change on ecosystems, including changes in crop yields, shifts in terrestrial ecosystem productivity, vegetation migration, wildfires, and other disturbances also will affect the potential for AFOLU mitigation. Climate is expected to reduce crop yields, increase crop and livestock prices, and increase pressure on undisturbed forest land for food production creating new barriers and increasing costs for implementation of many nature-based mitigation techniques (medium confidence) (IPCC AR6 WGII Chapter 5).', 'reranking_score': 0.9998337030410767, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='The effects of climate change on ecosystems, including changes in crop yields, shifts in terrestrial ecosystem productivity, vegetation migration, wildfires, and other disturbances also will affect the potential for AFOLU mitigation. Climate is expected to reduce crop yields, increase crop and livestock prices, and increase pressure on undisturbed forest land for food production creating new barriers and increasing costs for implementation of many nature-based mitigation techniques (medium confidence) (IPCC AR6 WGII Chapter 5).'), Document(metadata={'chunk_type': 'text', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 444.0, 'num_tokens': 88.0, 'num_tokens_approx': 106.0, 'num_words': 80.0, 'page_number': 13, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': '(b) Observed impacts of climate change on human systems', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.B Observed Impacts', 'toc_level1': 'Ecosystems and biodiversity', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.785278857, 'content': '(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).', 'reranking_score': 0.9997828602790833, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).'), Document(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': 444.0, 'num_tokens': 88.0, 'num_tokens_approx': 106.0, 'num_words': 80.0, 'page_number': 59, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '(b) Observed impacts of climate change on human systems', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Technical Summary ', '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.785278857, 'content': '(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).', 'reranking_score': 0.9997828602790833, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).'), Document(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': 1090.0, 'num_tokens': 232.0, 'num_tokens_approx': 261.0, 'num_words': 196.0, 'page_number': 2707, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Ecosystems Play a Key Role in CRD', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 18 Climate Resilient Development Pathways', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.773973823, 'content': 'Climate change connects to ecosystem services through two links: climate change and its influence on ecosystems as well as its influence on services (Section 2.2). The key climatic drivers are changes in temperature, precipitation and extreme events, which are unprecedented over millennia and highly variable by regions (Sections 2.3, 3.2; Cross-Chapter Box EXTREMES in Chapter 2). These climatic drivers influence physical and chemical conditions of the environment and worsen the impacts of non-climate anthropogenic drivers including eutrophication, hypoxia and sedimentation (Section 3.4). Such changes have led to changes in terrestrial, freshwater, oceanic and coastal ecosystems at all different levels, from species shifts and extinctions, to biome migration, and to ecosystem structure and processes changes (Sections 2.4, 2.5, 3.4, Cross-Chapter Box MOVING PLATE in Chapter 5). Changes in ecosystems leads to changes in ecosystem services including food and limber prevision, air and water quality regulation, biodiversity and habitat conservation, and cultural and', 'reranking_score': 0.999757707118988, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Climate change connects to ecosystem services through two links: climate change and its influence on ecosystems as well as its influence on services (Section 2.2). The key climatic drivers are changes in temperature, precipitation and extreme events, which are unprecedented over millennia and highly variable by regions (Sections 2.3, 3.2; Cross-Chapter Box EXTREMES in Chapter 2). These climatic drivers influence physical and chemical conditions of the environment and worsen the impacts of non-climate anthropogenic drivers including eutrophication, hypoxia and sedimentation (Section 3.4). Such changes have led to changes in terrestrial, freshwater, oceanic and coastal ecosystems at all different levels, from species shifts and extinctions, to biome migration, and to ecosystem structure and processes changes (Sections 2.4, 2.5, 3.4, Cross-Chapter Box MOVING PLATE in Chapter 5). Changes in ecosystems leads to changes in ecosystem services including food and limber prevision, air and water quality regulation, biodiversity and habitat conservation, and cultural and'), Document(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': 299.0, 'num_tokens': 63.0, 'num_tokens_approx': 68.0, 'num_words': 51.0, 'page_number': 178, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': '1.2.1.2 Long-Term Perspectives on \\r\\nAnthropogenic Climate Change', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '1: Framing, Context, and Methods', 'toc_level1': '1.2 Where We Are Now', 'toc_level2': '1.2.2 The Policy and Governance Context', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.773946583, 'content': \"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\", 'reranking_score': 0.999757707118988, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content=\"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\"), Document(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': 442.0, 'num_tokens': 113.0, 'num_tokens_approx': 133.0, 'num_words': 100.0, 'page_number': 13, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Observed Impacts on Ecosystems', '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.768190384, 'content': 'A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}', 'reranking_score': 0.9968845248222351, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}'), Document(metadata={'chunk_type': 'text', 'document_id': 'document12', 'document_number': 12.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: Climate Change and Land: an IPCC special report on climate change, desertification, land degradation, sustainable land management, food security, and greenhouse gas fluxes in terrestrial ecosystems', 'num_characters': 830.0, 'num_tokens': 178.0, 'num_tokens_approx': 210.0, 'num_words': 158.0, 'page_number': 16, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Summary for Policymakers', 'short_name': 'IPCC SR CCL 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/4/2022/11/SRCCL_SPM.pdf', 'similarity_score': 0.731245279, 'content': 'Summary for Policymakers\\nA. Risks to humans and ecosystems from changes in land-based processes as a result of climate change\\nIncreases in global mean surface temperature (GMST), relative to pre-industrial levels, aect processes involved in desertification (water scarcity), land degradation (soil erosion, vegetation loss, wildfire, permafrost thaw) and food security (crop yield and food supply instabilities). Changes in these processes drive risks to food systems, livelihoods, infrastructure, the value of land, and human and ecosystem health. Changes in one process (e.g. wildfire or water scarcity) may result in compound risks. Risks are location-specific and dier by region.\\n A. Risks to humans and ecosystems from changes in land-based processes as a result of climate change ', 'reranking_score': 0.996715784072876, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary for Policymakers\\nA. Risks to humans and ecosystems from changes in land-based processes as a result of climate change\\nIncreases in global mean surface temperature (GMST), relative to pre-industrial levels, aect processes involved in desertification (water scarcity), land degradation (soil erosion, vegetation loss, wildfire, permafrost thaw) and food security (crop yield and food supply instabilities). Changes in these processes drive risks to food systems, livelihoods, infrastructure, the value of land, and human and ecosystem health. Changes in one process (e.g. wildfire or water scarcity) may result in compound risks. Risks are location-specific and dier by region.\\n A. Risks to humans and ecosystems from changes in land-based processes as a result of climate change ')], 'related_contents': [Document(metadata={'chunk_type': 'image', 'document_id': 'document14', 'document_number': 14.0, 'element_id': 'Picture_0_14', 'figure_code': 'N/A', 'file_size': 72.3505859375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document14/images/Picture_0_14.png', 'n_pages': 34.0, 'name': 'Technical Summary. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 15, 'release_date': 2019.0, 'report_type': 'TS', 'section_header': 'N/A', '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.745540082, 'content': 'Summary: The image illustrates the cascading effects of climate change on ocean systems, starting from the attribution of greenhouse gases, followed by physical changes such as temperature rise, oxygen level changes, ocean pH shifts, sea ice extent reduction, and sea level rise. It further shows the impact on various ecosystems, including upper water column, coral reefs, coastal wetlands, kelp forests, rocky shores, the deep sea, polar benthos, and sea ice-associated regions. Finally, it delineates the consequences on human systems and ecosystem services like fisheries, tourism, habitat services, transportation/shipping, cultural services, and coastal carbon sequestration. This schematic representation emphasizes the interconnectivity between climate change drivers, oceanic responses, and socio-economic impacts. (Caption included: Eastern Boundary Upwelling Systems, such as the Benguela Current, Canary Current, California Current, and Humboldt Current.)', 'reranking_score': 0.9996041655540466, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary: The image illustrates the cascading effects of climate change on ocean systems, starting from the attribution of greenhouse gases, followed by physical changes such as temperature rise, oxygen level changes, ocean pH shifts, sea ice extent reduction, and sea level rise. It further shows the impact on various ecosystems, including upper water column, coral reefs, coastal wetlands, kelp forests, rocky shores, the deep sea, polar benthos, and sea ice-associated regions. Finally, it delineates the consequences on human systems and ecosystem services like fisheries, tourism, habitat services, transportation/shipping, cultural services, and coastal carbon sequestration. This schematic representation emphasizes the interconnectivity between climate change drivers, oceanic responses, and socio-economic impacts. (Caption included: Eastern Boundary Upwelling Systems, such as the Benguela Current, Canary Current, California Current, and Humboldt Current.)'), Document(metadata={'chunk_type': 'image', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'Picture_0_37', 'figure_code': 'N/A', 'file_size': 299.216796875, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document5/images/Picture_0_37.png', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 38, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.D Contribution of Adaptation to Solutions', 'toc_level1': 'Adaptation progress and gaps', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.742466, 'content': 'Summary:\\nThe image presents a scientific analysis of the observed impacts of climate change on ecosystems across various geographical regions and ecosystem types, showing changes in ecosystem structure, species range shifts, and timing (phenology). It features a matrix with the confidence levels in attribution to climate change, from high to not applicable, for terrestrial, freshwater, and oceanic ecosystems. The second part of the image depicts a trend graph illustrating marine species richness changes across different latitudes from the 1950s to 2015, indicating a decline in equatorial regions and an increase in higher latitudes due to global warming. This composite scientific visualization conveys the broad and multifaceted effects of climate change on biodiversity globally, as reported by the IPCC or IPBES.', 'reranking_score': 0.9995797276496887, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary:\\nThe image presents a scientific analysis of the observed impacts of climate change on ecosystems across various geographical regions and ecosystem types, showing changes in ecosystem structure, species range shifts, and timing (phenology). It features a matrix with the confidence levels in attribution to climate change, from high to not applicable, for terrestrial, freshwater, and oceanic ecosystems. The second part of the image depicts a trend graph illustrating marine species richness changes across different latitudes from the 1950s to 2015, indicating a decline in equatorial regions and an increase in higher latitudes due to global warming. This composite scientific visualization conveys the broad and multifaceted effects of climate change on biodiversity globally, as reported by the IPCC or IPBES.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'Picture_0_11', 'figure_code': 'N/A', 'file_size': 239.587890625, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document5/images/Picture_0_11.png', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 12, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.B Observed Impacts', 'toc_level1': 'Ecosystems and biodiversity', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.736553431, 'content': 'Summary: This image is a matrix summarizing the observed impacts of climate change on various ecosystems across different regions and evaluating the confidence in attribution of these impacts to climate change. It covers terrestrial, freshwater, and ocean ecosystems and notes changes in ecosystem structure, species range shifts, and changes in phenology. The chart uses color-coded dots to indicate levels of confidence, ranging from high (dark blue) to low (light purple), and also acknowledges areas where evidence is limited or not applicable. Impacts to human systems are referenced but not detailed in this part of the chart.', 'reranking_score': 0.999556839466095, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary: This image is a matrix summarizing the observed impacts of climate change on various ecosystems across different regions and evaluating the confidence in attribution of these impacts to climate change. It covers terrestrial, freshwater, and ocean ecosystems and notes changes in ecosystem structure, species range shifts, and changes in phenology. The chart uses color-coded dots to indicate levels of confidence, ranging from high (dark blue) to low (light purple), and also acknowledges areas where evidence is limited or not applicable. Impacts to human systems are referenced but not detailed in this part of the chart.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document10', 'document_number': 10.0, 'element_id': 'Picture_0_12', 'figure_code': 'N/A', 'file_size': 109.03125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document10/images/Picture_0_12.png', 'n_pages': 36.0, 'name': 'Synthesis report of the IPCC Sixth Assesment Report AR6', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 13, 'release_date': 2023.0, 'report_type': 'SPM', 'section_header': 'N/A', '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.721362472, 'content': 'Summary: This image provides a visual summary of the impacts of climate change on various aspects such as health, well-being, agriculture, water availability, and ecosystems. It shows the relationships between physical climate conditions altered by human influence and the consequential effects on food production, human health, and biodiversity. The visual icons depict specific areas affected by climate change, including crop production, animal and livestock health, fisheries, infectious diseases, mental health, and displacement due to extreme weather events. Additionally, it addresses the impacts on cities, settlements, and infrastructure, illustrating issues like inland flooding, storm-induced coastal damage, and damage to key economic sectors. For biodiversity, it highlights the changes occurring in terrestrial, freshwater, and ocean ecosystems. These elements are critical for understanding targeted areas for climate resilience and adaptation strategies.', 'reranking_score': 0.9995468258857727, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary: This image provides a visual summary of the impacts of climate change on various aspects such as health, well-being, agriculture, water availability, and ecosystems. It shows the relationships between physical climate conditions altered by human influence and the consequential effects on food production, human health, and biodiversity. The visual icons depict specific areas affected by climate change, including crop production, animal and livestock health, fisheries, infectious diseases, mental health, and displacement due to extreme weather events. Additionally, it addresses the impacts on cities, settlements, and infrastructure, illustrating issues like inland flooding, storm-induced coastal damage, and damage to key economic sectors. For biodiversity, it highlights the changes occurring in terrestrial, freshwater, and ocean ecosystems. These elements are critical for understanding targeted areas for climate resilience and adaptation strategies.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document14', 'document_number': 14.0, 'element_id': 'Picture_1_14', 'figure_code': 'N/A', 'file_size': 58.65234375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document14/images/Picture_1_14.png', 'n_pages': 34.0, 'name': 'Technical Summary. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 15, 'release_date': 2019.0, 'report_type': 'TS', 'section_header': 'N/A', '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.721313953, 'content': 'Summary and Explanation: The image presents a structured overview of the impacts of climate change on high mountain and polar land regions, organized into three categories: Physical Changes, Ecosystems, and Human Systems and Services. It details how changes in the cryosphere—such as glaciers and ice sheets—affect water availability, increase natural hazards like floods, landslides, and avalanches, alter ecosystems (tundra, forest, lakes/ponds, and rivers/streams), and ultimately impact human activities such as tourism, agriculture, infrastructure, and cultural services. The illustration emphasizes the attribution of these changes to climate dynamics. Migration is noted specifically, implying changes in human population movements as a result of cryospheric changes.', 'reranking_score': 0.9994031190872192, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary and Explanation: The image presents a structured overview of the impacts of climate change on high mountain and polar land regions, organized into three categories: Physical Changes, Ecosystems, and Human Systems and Services. It details how changes in the cryosphere—such as glaciers and ice sheets—affect water availability, increase natural hazards like floods, landslides, and avalanches, alter ecosystems (tundra, forest, lakes/ponds, and rivers/streams), and ultimately impact human activities such as tourism, agriculture, infrastructure, and cultural services. The illustration emphasizes the attribution of these changes to climate dynamics. Migration is noted specifically, implying changes in human population movements as a result of cryospheric changes.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document14', 'document_number': 14.0, 'element_id': 'Picture_0_27', 'figure_code': 'Figure TS.8', 'file_size': 234.287109375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document14/images/Picture_0_27.png', 'n_pages': 34.0, 'name': 'Technical Summary. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 28, 'release_date': 2019.0, 'report_type': 'TS', 'section_header': 'N/A', '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.715816081, 'content': 'This image is a graphical representation of projected climate change impacts and risks to various ocean ecosystems. Displaying data for different oceanic regions such as coral reefs, kelp forests, seagrass meadows, and more, the chart shows an increase in surface temperature and the associated level of risk, which ranges from undetectable to very high. It also indicates the degree of certainty for these projections across various habitats. This visual summary aids in understanding the potential effects of climate warming on marine biodiversity and ecosystem services.', 'reranking_score': 0.9993748068809509, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='This image is a graphical representation of projected climate change impacts and risks to various ocean ecosystems. Displaying data for different oceanic regions such as coral reefs, kelp forests, seagrass meadows, and more, the chart shows an increase in surface temperature and the associated level of risk, which ranges from undetectable to very high. It also indicates the degree of certainty for these projections across various habitats. This visual summary aids in understanding the potential effects of climate warming on marine biodiversity and ecosystem services.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document10', 'document_number': 10.0, 'element_id': 'Picture_1_22', 'figure_code': 'N/A', 'file_size': 86.2783203125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document10/images/Picture_1_22.png', 'n_pages': 36.0, 'name': 'Synthesis report of the IPCC Sixth Assesment Report AR6', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 23, 'release_date': 2023.0, 'report_type': 'SPM', 'section_header': 'N/A', '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.715248942, 'content': 'Summary: This image represents a scientific assessment of climate-related risks to different ecosystems at increasing levels of global warming, with a focus on land-based and ocean/coastal systems. It quantitatively depicts the heightened risks to components such as wildfire damage, permafrost degradation, biodiversity loss, dryland water scarcity, tree mortality, and carbon loss on land, alongside risks to warm-water corals, kelp forests, seagrass meadows, epipelagic zones, rocky shores, and salt marshes in marine environments. Specific examples underscore the severity of these risks, such as the projected decline of coral reefs and the potential exposure of over 100 million additional people, outlining the importance of adaptation and socio-economic pathways in mitigating such risks.', 'reranking_score': 0.9993475079536438, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary: This image represents a scientific assessment of climate-related risks to different ecosystems at increasing levels of global warming, with a focus on land-based and ocean/coastal systems. It quantitatively depicts the heightened risks to components such as wildfire damage, permafrost degradation, biodiversity loss, dryland water scarcity, tree mortality, and carbon loss on land, alongside risks to warm-water corals, kelp forests, seagrass meadows, epipelagic zones, rocky shores, and salt marshes in marine environments. Specific examples underscore the severity of these risks, such as the projected decline of coral reefs and the potential exposure of over 100 million additional people, outlining the importance of adaptation and socio-economic pathways in mitigating such risks.')], 'remaining_questions': [{'question': 'How does climate change affect biodiversity and wildlife?', 'sources': ['IPCC'], 'index': 'Vector'}]}\n", + "---- Retrieve documents ----\n", + "{'documents': [Document(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': 547.0, 'num_tokens': 104.0, 'num_tokens_approx': 116.0, 'num_words': 87.0, 'page_number': 839, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '7.6.4.3 Ecological Barriers and Opportunities', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '7.6 Assessment of Economic, Social and\\xa0Policy Responses', 'toc_level1': 'Box\\xa07.12 | Financing AFOLU Mitigation; What Are the Costs and Who Pays?', '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.789457798, 'content': 'The effects of climate change on ecosystems, including changes in crop yields, shifts in terrestrial ecosystem productivity, vegetation migration, wildfires, and other disturbances also will affect the potential for AFOLU mitigation. Climate is expected to reduce crop yields, increase crop and livestock prices, and increase pressure on undisturbed forest land for food production creating new barriers and increasing costs for implementation of many nature-based mitigation techniques (medium confidence) (IPCC AR6 WGII Chapter 5).', 'reranking_score': 0.9998337030410767, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='The effects of climate change on ecosystems, including changes in crop yields, shifts in terrestrial ecosystem productivity, vegetation migration, wildfires, and other disturbances also will affect the potential for AFOLU mitigation. Climate is expected to reduce crop yields, increase crop and livestock prices, and increase pressure on undisturbed forest land for food production creating new barriers and increasing costs for implementation of many nature-based mitigation techniques (medium confidence) (IPCC AR6 WGII Chapter 5).'), Document(metadata={'chunk_type': 'text', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 444.0, 'num_tokens': 88.0, 'num_tokens_approx': 106.0, 'num_words': 80.0, 'page_number': 13, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': '(b) Observed impacts of climate change on human systems', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.B Observed Impacts', 'toc_level1': 'Ecosystems and biodiversity', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.785278857, 'content': '(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).', 'reranking_score': 0.9997828602790833, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).'), Document(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': 444.0, 'num_tokens': 88.0, 'num_tokens_approx': 106.0, 'num_words': 80.0, 'page_number': 59, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '(b) Observed impacts of climate change on human systems', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Technical Summary ', '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.785278857, 'content': '(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).', 'reranking_score': 0.9997828602790833, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).'), Document(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': 1090.0, 'num_tokens': 232.0, 'num_tokens_approx': 261.0, 'num_words': 196.0, 'page_number': 2707, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Ecosystems Play a Key Role in CRD', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 18 Climate Resilient Development Pathways', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.773973823, 'content': 'Climate change connects to ecosystem services through two links: climate change and its influence on ecosystems as well as its influence on services (Section 2.2). The key climatic drivers are changes in temperature, precipitation and extreme events, which are unprecedented over millennia and highly variable by regions (Sections 2.3, 3.2; Cross-Chapter Box EXTREMES in Chapter 2). These climatic drivers influence physical and chemical conditions of the environment and worsen the impacts of non-climate anthropogenic drivers including eutrophication, hypoxia and sedimentation (Section 3.4). Such changes have led to changes in terrestrial, freshwater, oceanic and coastal ecosystems at all different levels, from species shifts and extinctions, to biome migration, and to ecosystem structure and processes changes (Sections 2.4, 2.5, 3.4, Cross-Chapter Box MOVING PLATE in Chapter 5). Changes in ecosystems leads to changes in ecosystem services including food and limber prevision, air and water quality regulation, biodiversity and habitat conservation, and cultural and', 'reranking_score': 0.999757707118988, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Climate change connects to ecosystem services through two links: climate change and its influence on ecosystems as well as its influence on services (Section 2.2). The key climatic drivers are changes in temperature, precipitation and extreme events, which are unprecedented over millennia and highly variable by regions (Sections 2.3, 3.2; Cross-Chapter Box EXTREMES in Chapter 2). These climatic drivers influence physical and chemical conditions of the environment and worsen the impacts of non-climate anthropogenic drivers including eutrophication, hypoxia and sedimentation (Section 3.4). Such changes have led to changes in terrestrial, freshwater, oceanic and coastal ecosystems at all different levels, from species shifts and extinctions, to biome migration, and to ecosystem structure and processes changes (Sections 2.4, 2.5, 3.4, Cross-Chapter Box MOVING PLATE in Chapter 5). Changes in ecosystems leads to changes in ecosystem services including food and limber prevision, air and water quality regulation, biodiversity and habitat conservation, and cultural and'), Document(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': 299.0, 'num_tokens': 63.0, 'num_tokens_approx': 68.0, 'num_words': 51.0, 'page_number': 178, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': '1.2.1.2 Long-Term Perspectives on \\r\\nAnthropogenic Climate Change', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '1: Framing, Context, and Methods', 'toc_level1': '1.2 Where We Are Now', 'toc_level2': '1.2.2 The Policy and Governance Context', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.773946583, 'content': \"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\", 'reranking_score': 0.999757707118988, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content=\"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\"), Document(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': 442.0, 'num_tokens': 113.0, 'num_tokens_approx': 133.0, 'num_words': 100.0, 'page_number': 13, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Observed Impacts on Ecosystems', '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.768190384, 'content': 'A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}', 'reranking_score': 0.9968845248222351, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}'), Document(metadata={'chunk_type': 'text', 'document_id': 'document12', 'document_number': 12.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: Climate Change and Land: an IPCC special report on climate change, desertification, land degradation, sustainable land management, food security, and greenhouse gas fluxes in terrestrial ecosystems', 'num_characters': 830.0, 'num_tokens': 178.0, 'num_tokens_approx': 210.0, 'num_words': 158.0, 'page_number': 16, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Summary for Policymakers', 'short_name': 'IPCC SR CCL 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/4/2022/11/SRCCL_SPM.pdf', 'similarity_score': 0.731245279, 'content': 'Summary for Policymakers\\nA. Risks to humans and ecosystems from changes in land-based processes as a result of climate change\\nIncreases in global mean surface temperature (GMST), relative to pre-industrial levels, aect processes involved in desertification (water scarcity), land degradation (soil erosion, vegetation loss, wildfire, permafrost thaw) and food security (crop yield and food supply instabilities). Changes in these processes drive risks to food systems, livelihoods, infrastructure, the value of land, and human and ecosystem health. Changes in one process (e.g. wildfire or water scarcity) may result in compound risks. Risks are location-specific and dier by region.\\n A. Risks to humans and ecosystems from changes in land-based processes as a result of climate change ', 'reranking_score': 0.996715784072876, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary for Policymakers\\nA. Risks to humans and ecosystems from changes in land-based processes as a result of climate change\\nIncreases in global mean surface temperature (GMST), relative to pre-industrial levels, aect processes involved in desertification (water scarcity), land degradation (soil erosion, vegetation loss, wildfire, permafrost thaw) and food security (crop yield and food supply instabilities). Changes in these processes drive risks to food systems, livelihoods, infrastructure, the value of land, and human and ecosystem health. Changes in one process (e.g. wildfire or water scarcity) may result in compound risks. Risks are location-specific and dier by region.\\n A. Risks to humans and ecosystems from changes in land-based processes as a result of climate change '), Document(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': 506.0, 'num_tokens': 96.0, 'num_tokens_approx': 116.0, 'num_words': 87.0, 'page_number': 1951, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '14.2.2 Projected Changes in North American Climate', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 14 North America', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.814534, 'content': 'Biodiversity is affected by climate change in this way too. For example, numerous bird populations across North America are estimated to have declined by up to 30% over the past half-century. Multiple human-related factors, including habitat loss and agricultural intensification, contribute to these declines, with climate change as an added stressor. Increasingly extreme events, such as severe storms and wildfires, can decimate local populations of birds, adding to existing ecological threats.', 'reranking_score': 0.9997363686561584, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Biodiversity is affected by climate change in this way too. For example, numerous bird populations across North America are estimated to have declined by up to 30% over the past half-century. Multiple human-related factors, including habitat loss and agricultural intensification, contribute to these declines, with climate change as an added stressor. Increasingly extreme events, such as severe storms and wildfires, can decimate local populations of birds, adding to existing ecological threats.'), Document(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': 299.0, 'num_tokens': 63.0, 'num_tokens_approx': 68.0, 'num_words': 51.0, 'page_number': 178, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': '1.2.1.2 Long-Term Perspectives on \\r\\nAnthropogenic Climate Change', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '1: Framing, Context, and Methods', 'toc_level1': '1.2 Where We Are Now', 'toc_level2': '1.2.2 The Policy and Governance Context', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.782265961, 'content': \"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\", 'reranking_score': 0.9997039437294006, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content=\"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\"), Document(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': 954.0, 'num_tokens': 203.0, 'num_tokens_approx': 209.0, 'num_words': 157.0, 'page_number': 629, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '4.5.5 Projected Risks to Freshwater Ecosystems', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 4 Water', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.780191362, 'content': 'Changes in precipitation and temperatures are projected to affect freshwater ecosystems and their species through, for example, direct physiological responses from higher temperatures or drier conditions or a loss of habitat for feeding or breeding (Settele et al., 2014; Knouft and Ficklin, 2017; Bloschl et al., 2019b). In addition, increased water temperatures could lead to shifts in the structure and composition of species assemblages following changes in metabolic rates, body size, timing of migration, recruitment, range size and destabilisation of food webs. A review of the impact of climate change on biodiversity and functioning of freshwater ecosystems found that under all scenarios, except the one with the lowest GHG emission scenario, freshwater biodiversity is expected to decrease proportionally to the degree of warming and precipitation alteration (Settele et al., 2014) (medium evidence, high agreement).', 'reranking_score': 0.9996391534805298, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Changes in precipitation and temperatures are projected to affect freshwater ecosystems and their species through, for example, direct physiological responses from higher temperatures or drier conditions or a loss of habitat for feeding or breeding (Settele et al., 2014; Knouft and Ficklin, 2017; Bloschl et al., 2019b). In addition, increased water temperatures could lead to shifts in the structure and composition of species assemblages following changes in metabolic rates, body size, timing of migration, recruitment, range size and destabilisation of food webs. A review of the impact of climate change on biodiversity and functioning of freshwater ecosystems found that under all scenarios, except the one with the lowest GHG emission scenario, freshwater biodiversity is expected to decrease proportionally to the degree of warming and precipitation alteration (Settele et al., 2014) (medium evidence, high agreement).'), Document(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': 1045.0, 'num_tokens': 221.0, 'num_tokens_approx': 240.0, 'num_words': 180.0, 'page_number': 2144, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'CCP1.2.1.2.2 Projected impacts on biodiversity', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Cross-Chapter Paper 1 Biodiversity Hotspots', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.771558464, 'content': \"Biodiversity hotspots are expected to be especially vulnerable to climate change because their endemic species have smaller geographic ranges (high confidence) (Sandel et al., 2011; Brown et al., 2020; Manes et al., 2021). Manes et al. (2021) reviewed over 8000 projections of climate change impacts on biodiversity in 232 studies, including 6116 projections on endemic, native and introduced species in terrestrial (200 studies), freshwater (14 studies) and marine (34 studies) environments in biodiversity hotspots. Only half of the hotspots had studies on climate change impacts. All measures of biodiversity were found to be negatively impacted by projected climate change, namely, species abundance, diversity, area, physiology and fisheries catch potential (medium confidence). However, introduced species' responses were neutral to positive (medium confidence). Land areas were projected to be more negatively affected by climate warming than marine. Land plants, insects, birds, reptiles and mammals were\", 'reranking_score': 0.9995535016059875, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content=\"Biodiversity hotspots are expected to be especially vulnerable to climate change because their endemic species have smaller geographic ranges (high confidence) (Sandel et al., 2011; Brown et al., 2020; Manes et al., 2021). Manes et al. (2021) reviewed over 8000 projections of climate change impacts on biodiversity in 232 studies, including 6116 projections on endemic, native and introduced species in terrestrial (200 studies), freshwater (14 studies) and marine (34 studies) environments in biodiversity hotspots. Only half of the hotspots had studies on climate change impacts. All measures of biodiversity were found to be negatively impacted by projected climate change, namely, species abundance, diversity, area, physiology and fisheries catch potential (medium confidence). However, introduced species' responses were neutral to positive (medium confidence). Land areas were projected to be more negatively affected by climate warming than marine. Land plants, insects, birds, reptiles and mammals were\"), Document(metadata={'chunk_type': 'text', 'document_id': 'document12', 'document_number': 12.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: Climate Change and Land: an IPCC special report on climate change, desertification, land degradation, sustainable land management, food security, and greenhouse gas fluxes in terrestrial ecosystems', 'num_characters': 899.0, 'num_tokens': 228.0, 'num_tokens_approx': 272.0, 'num_words': 204.0, 'page_number': 10, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Summary for Policymakers', 'short_name': 'IPCC SR CCL 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/4/2022/11/SRCCL_SPM.pdf', 'similarity_score': 0.724869668, 'content': 'Summary for Policymakers\\nA.2.6 Global warming has led to shifts of climate zones in many world regions, including expansion of arid climate zones and contraction of polar climate zones (high confidence). As a consequence, many plant and animal species have experienced changes in their ranges, abundances, and shifts in their seasonal activities (high confidence). {2.2, 3.2.2, 4.4.1}\\nA.2.7 Climate change can exacerbate land degradation processes (high confidence) including through increases in rainfall intensity, flooding, drought frequency and severity, heat stress, dry spells, wind, sea-level rise and wave action, and permafrost thaw with outcomes being modulated by land management. Ongoing coastal erosion is intensifying and impinging on more regions with sea-level rise adding to land use pressure in some regions (medium confidence). {4.2.1, 4.2.2, 4.2.3, 4.4.1, 4.4.2, 4.9.6,', 'reranking_score': 0.9975702166557312, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary for Policymakers\\nA.2.6 Global warming has led to shifts of climate zones in many world regions, including expansion of arid climate zones and contraction of polar climate zones (high confidence). As a consequence, many plant and animal species have experienced changes in their ranges, abundances, and shifts in their seasonal activities (high confidence). {2.2, 3.2.2, 4.4.1}\\nA.2.7 Climate change can exacerbate land degradation processes (high confidence) including through increases in rainfall intensity, flooding, drought frequency and severity, heat stress, dry spells, wind, sea-level rise and wave action, and permafrost thaw with outcomes being modulated by land management. Ongoing coastal erosion is intensifying and impinging on more regions with sea-level rise adding to land use pressure in some regions (medium confidence). {4.2.1, 4.2.2, 4.2.3, 4.4.1, 4.4.2, 4.9.6,'), Document(metadata={'chunk_type': 'text', 'document_id': 'document12', 'document_number': 12.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: Climate Change and Land: an IPCC special report on climate change, desertification, land degradation, sustainable land management, food security, and greenhouse gas fluxes in terrestrial ecosystems', 'num_characters': 633.0, 'num_tokens': 170.0, 'num_tokens_approx': 194.0, 'num_words': 146.0, 'page_number': 17, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Summary for Policymakers', 'short_name': 'IPCC SR CCL 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/4/2022/11/SRCCL_SPM.pdf', 'similarity_score': 0.720580459, 'content': 'A.5 Climate change creates additional stresses on land, exacerbating existing risks to livelihoods, biodiversity, human and ecosystem health, infrastructure, and food systems (high confidence). Increasing impacts on land are projected under all future GHG emission scenarios (high confidence). Some regions will face higher risks, while some regions will face risks previously not anticipated (high confidence). Cascading risks with impacts on multiple systems and sectors also vary across regions (high confidence). (Figure SPM.2) {2.2, 3.5, 4.2, 4.4, 4.7, 5.1, 5.2, 5.8, 6.1, 7.2, 7.3, Cross-Chapter Box 9 in Chapter 6}', 'reranking_score': 0.9797168374061584, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='A.5 Climate change creates additional stresses on land, exacerbating existing risks to livelihoods, biodiversity, human and ecosystem health, infrastructure, and food systems (high confidence). Increasing impacts on land are projected under all future GHG emission scenarios (high confidence). Some regions will face higher risks, while some regions will face risks previously not anticipated (high confidence). Cascading risks with impacts on multiple systems and sectors also vary across regions (high confidence). (Figure SPM.2) {2.2, 3.5, 4.2, 4.4, 4.7, 5.1, 5.2, 5.8, 6.1, 7.2, 7.3, Cross-Chapter Box 9 in Chapter 6}'), Document(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': 442.0, 'num_tokens': 113.0, 'num_tokens_approx': 133.0, 'num_words': 100.0, 'page_number': 13, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Observed Impacts on Ecosystems', '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.714953661, 'content': 'A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}', 'reranking_score': 0.05437663197517395, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}')], 'related_contents': [Document(metadata={'chunk_type': 'image', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'Picture_0_37', 'figure_code': 'N/A', 'file_size': 299.216796875, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document5/images/Picture_0_37.png', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 38, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.D Contribution of Adaptation to Solutions', 'toc_level1': 'Adaptation progress and gaps', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.735445261, 'content': 'Summary:\\nThe image presents a scientific analysis of the observed impacts of climate change on ecosystems across various geographical regions and ecosystem types, showing changes in ecosystem structure, species range shifts, and timing (phenology). It features a matrix with the confidence levels in attribution to climate change, from high to not applicable, for terrestrial, freshwater, and oceanic ecosystems. The second part of the image depicts a trend graph illustrating marine species richness changes across different latitudes from the 1950s to 2015, indicating a decline in equatorial regions and an increase in higher latitudes due to global warming. This composite scientific visualization conveys the broad and multifaceted effects of climate change on biodiversity globally, as reported by the IPCC or IPBES.', 'reranking_score': 0.9984026551246643, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary:\\nThe image presents a scientific analysis of the observed impacts of climate change on ecosystems across various geographical regions and ecosystem types, showing changes in ecosystem structure, species range shifts, and timing (phenology). It features a matrix with the confidence levels in attribution to climate change, from high to not applicable, for terrestrial, freshwater, and oceanic ecosystems. The second part of the image depicts a trend graph illustrating marine species richness changes across different latitudes from the 1950s to 2015, indicating a decline in equatorial regions and an increase in higher latitudes due to global warming. This composite scientific visualization conveys the broad and multifaceted effects of climate change on biodiversity globally, as reported by the IPCC or IPBES.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document10', 'document_number': 10.0, 'element_id': 'Picture_0_12', 'figure_code': 'N/A', 'file_size': 109.03125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document10/images/Picture_0_12.png', 'n_pages': 36.0, 'name': 'Synthesis report of the IPCC Sixth Assesment Report AR6', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 13, 'release_date': 2023.0, 'report_type': 'SPM', 'section_header': 'N/A', '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.709608436, 'content': 'Summary: This image provides a visual summary of the impacts of climate change on various aspects such as health, well-being, agriculture, water availability, and ecosystems. It shows the relationships between physical climate conditions altered by human influence and the consequential effects on food production, human health, and biodiversity. The visual icons depict specific areas affected by climate change, including crop production, animal and livestock health, fisheries, infectious diseases, mental health, and displacement due to extreme weather events. Additionally, it addresses the impacts on cities, settlements, and infrastructure, illustrating issues like inland flooding, storm-induced coastal damage, and damage to key economic sectors. For biodiversity, it highlights the changes occurring in terrestrial, freshwater, and ocean ecosystems. These elements are critical for understanding targeted areas for climate resilience and adaptation strategies.', 'reranking_score': 0.9982820749282837, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary: This image provides a visual summary of the impacts of climate change on various aspects such as health, well-being, agriculture, water availability, and ecosystems. It shows the relationships between physical climate conditions altered by human influence and the consequential effects on food production, human health, and biodiversity. The visual icons depict specific areas affected by climate change, including crop production, animal and livestock health, fisheries, infectious diseases, mental health, and displacement due to extreme weather events. Additionally, it addresses the impacts on cities, settlements, and infrastructure, illustrating issues like inland flooding, storm-induced coastal damage, and damage to key economic sectors. For biodiversity, it highlights the changes occurring in terrestrial, freshwater, and ocean ecosystems. These elements are critical for understanding targeted areas for climate resilience and adaptation strategies.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'Picture_1_37', 'figure_code': 'N/A', 'file_size': 687.9970703125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document5/images/Picture_1_37.png', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 38, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.D Contribution of Adaptation to Solutions', 'toc_level1': 'Adaptation progress and gaps', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.701574087, 'content': 'The image illustrates the projected impact of increasing increments of global warming on the exposure of species to dangerous climate conditions and the associated loss of biodiversity. It presents a series of world maps that highlight the percentage of species exposed to potentially dangerous climate conditions and the percentage of biodiversity loss across different global warming scenarios, ranging from +1.5°C to +4.0°C above pre-industrial levels. The left set of maps shows a color gradient indicating the percentage of biodiversity exposure to risk, with darker areas signifying higher exposure. The right set of maps shows varying degrees of projected biodiversity loss in terrestrial and freshwater environments, with warmer colors indicating greater losses. These visualizations emphasize the direct correlation between rising temperatures due to climate change and the decrease in marine species richness, particularly concerning equatorial regions and an increase at higher latitudes since the 1950s. The image serves as a tool for understanding the spatial distribution and scale of future biodiversity risks related to climate change.', 'reranking_score': 0.9980661273002625, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='The image illustrates the projected impact of increasing increments of global warming on the exposure of species to dangerous climate conditions and the associated loss of biodiversity. It presents a series of world maps that highlight the percentage of species exposed to potentially dangerous climate conditions and the percentage of biodiversity loss across different global warming scenarios, ranging from +1.5°C to +4.0°C above pre-industrial levels. The left set of maps shows a color gradient indicating the percentage of biodiversity exposure to risk, with darker areas signifying higher exposure. The right set of maps shows varying degrees of projected biodiversity loss in terrestrial and freshwater environments, with warmer colors indicating greater losses. These visualizations emphasize the direct correlation between rising temperatures due to climate change and the decrease in marine species richness, particularly concerning equatorial regions and an increase at higher latitudes since the 1950s. The image serves as a tool for understanding the spatial distribution and scale of future biodiversity risks related to climate change.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document4', 'document_number': 4.0, 'element_id': 'Picture_0_9', 'figure_code': 'Figure SPM.2', 'file_size': 226.57421875, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document4/images/Picture_0_9.png', 'n_pages': 34.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 10, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII SPM', 'source': 'IPCC', 'toc_level0': 'B: Observed and Projected Impacts and Risks', 'toc_level1': 'Observed Impacts from Climate Change', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_SummaryForPolicymakers.pdf', 'similarity_score': 0.694178522, 'content': 'Summary:\\nFigure SPM.2 reveals the observed impacts of climate change on ecosystems and human systems around the globe, with a focus on changes in ecosystem structure and species range shifts across terrestrial, freshwater, and ocean environments. It also shows changes in timing (phenology) across these domains. The visualization indicates the degree of confidence in attributing these observed changes to climate change, using color-coded dots to represent high, medium, or low levels of confidence, including areas where evidence is limited or insufficient. Each row represents a different geographic region or type of environment, such as the Arctic, small islands, or biodiversity hotspots, providing a comprehensive regional assessment alongside the global perspective. The figure is designed to be useful for policymakers by illustrating the varied confidence levels in the observed effects of climate change across different regions and environments.', 'reranking_score': 0.9977376461029053, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary:\\nFigure SPM.2 reveals the observed impacts of climate change on ecosystems and human systems around the globe, with a focus on changes in ecosystem structure and species range shifts across terrestrial, freshwater, and ocean environments. It also shows changes in timing (phenology) across these domains. The visualization indicates the degree of confidence in attributing these observed changes to climate change, using color-coded dots to represent high, medium, or low levels of confidence, including areas where evidence is limited or insufficient. Each row represents a different geographic region or type of environment, such as the Arctic, small islands, or biodiversity hotspots, providing a comprehensive regional assessment alongside the global perspective. The figure is designed to be useful for policymakers by illustrating the varied confidence levels in the observed effects of climate change across different regions and environments.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'Picture_0_11', 'figure_code': 'N/A', 'file_size': 239.587890625, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document5/images/Picture_0_11.png', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 12, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.B Observed Impacts', 'toc_level1': 'Ecosystems and biodiversity', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.680837214, 'content': 'Summary: This image is a matrix summarizing the observed impacts of climate change on various ecosystems across different regions and evaluating the confidence in attribution of these impacts to climate change. It covers terrestrial, freshwater, and ocean ecosystems and notes changes in ecosystem structure, species range shifts, and changes in phenology. The chart uses color-coded dots to indicate levels of confidence, ranging from high (dark blue) to low (light purple), and also acknowledges areas where evidence is limited or not applicable. Impacts to human systems are referenced but not detailed in this part of the chart.', 'reranking_score': 0.9970658421516418, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary: This image is a matrix summarizing the observed impacts of climate change on various ecosystems across different regions and evaluating the confidence in attribution of these impacts to climate change. It covers terrestrial, freshwater, and ocean ecosystems and notes changes in ecosystem structure, species range shifts, and changes in phenology. The chart uses color-coded dots to indicate levels of confidence, ranging from high (dark blue) to low (light purple), and also acknowledges areas where evidence is limited or not applicable. Impacts to human systems are referenced but not detailed in this part of the chart.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document14', 'document_number': 14.0, 'element_id': 'Picture_1_14', 'figure_code': 'N/A', 'file_size': 58.65234375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document14/images/Picture_1_14.png', 'n_pages': 34.0, 'name': 'Technical Summary. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 15, 'release_date': 2019.0, 'report_type': 'TS', 'section_header': 'N/A', '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.679388642, 'content': 'Summary and Explanation: The image presents a structured overview of the impacts of climate change on high mountain and polar land regions, organized into three categories: Physical Changes, Ecosystems, and Human Systems and Services. It details how changes in the cryosphere—such as glaciers and ice sheets—affect water availability, increase natural hazards like floods, landslides, and avalanches, alter ecosystems (tundra, forest, lakes/ponds, and rivers/streams), and ultimately impact human activities such as tourism, agriculture, infrastructure, and cultural services. The illustration emphasizes the attribution of these changes to climate dynamics. Migration is noted specifically, implying changes in human population movements as a result of cryospheric changes.', 'reranking_score': 0.9966405630111694, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary and Explanation: The image presents a structured overview of the impacts of climate change on high mountain and polar land regions, organized into three categories: Physical Changes, Ecosystems, and Human Systems and Services. It details how changes in the cryosphere—such as glaciers and ice sheets—affect water availability, increase natural hazards like floods, landslides, and avalanches, alter ecosystems (tundra, forest, lakes/ponds, and rivers/streams), and ultimately impact human activities such as tourism, agriculture, infrastructure, and cultural services. The illustration emphasizes the attribution of these changes to climate dynamics. Migration is noted specifically, implying changes in human population movements as a result of cryospheric changes.'), Document(metadata={'chunk_type': 'image', 'document_id': 'document14', 'document_number': 14.0, 'element_id': 'Picture_0_27', 'figure_code': 'Figure TS.8', 'file_size': 234.287109375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document14/images/Picture_0_27.png', 'n_pages': 34.0, 'name': 'Technical Summary. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 28, 'release_date': 2019.0, 'report_type': 'TS', 'section_header': 'N/A', '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.675673127, 'content': 'This image is a graphical representation of projected climate change impacts and risks to various ocean ecosystems. Displaying data for different oceanic regions such as coral reefs, kelp forests, seagrass meadows, and more, the chart shows an increase in surface temperature and the associated level of risk, which ranges from undetectable to very high. It also indicates the degree of certainty for these projections across various habitats. This visual summary aids in understanding the potential effects of climate warming on marine biodiversity and ecosystem services.', 'reranking_score': 0.9954755902290344, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='This image is a graphical representation of projected climate change impacts and risks to various ocean ecosystems. Displaying data for different oceanic regions such as coral reefs, kelp forests, seagrass meadows, and more, the chart shows an increase in surface temperature and the associated level of risk, which ranges from undetectable to very high. It also indicates the degree of certainty for these projections across various habitats. This visual summary aids in understanding the potential effects of climate warming on marine biodiversity and ecosystem services.')], 'remaining_questions': []}\n" + ] + }, + { + "data": { + "text/plain": [ + "{'user_input': 'What is the impact of climate change on the environment?',\n", + " 'audience': 'the general public who know the basics in science and climate change and want to learn more about it without technical terms. Still use references to passages.',\n", + " 'sources_input': ['IPCC'],\n", + " 'intent': 'search',\n", + " 'language': 'English',\n", + " 'query': 'What is the impact of climate change on the environment?',\n", + " 'remaining_questions': [],\n", + " 'n_questions': 2,\n", + " 'recommended_content': [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.649586797, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.004589226096868515, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp', 'similarity_score': 0.623827338, 'content': 'Change in CO2 emissions and GDP', 'reranking_score': 0.002260460052639246, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in CO2 emissions and GDP'),\n", + " Document(metadata={'category': 'Forests & Deforestation', 'doc_id': 'owid_1358', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Net change in forest area measures forest expansion (either through afforestation or natural expansion) minus deforestation', 'url': 'https://ourworldindata.org/grapher/annual-change-forest-area', 'similarity_score': 0.612325966, 'content': 'Annual change in forest area', 'reranking_score': 0.001020866329781711, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Annual change in forest area'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_351', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-long-term', 'similarity_score': 0.611927152, 'content': 'Change in per capita CO2 emissions and GDP', 'reranking_score': 0.0006646059919148684, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in per capita CO2 emissions and GDP'),\n", + " Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_199', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.', 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species', 'similarity_score': 0.638248205, 'content': 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050', 'reranking_score': 0.00037698738742619753, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050'),\n", + " Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_192', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The bird population index is measured relative to population size in the year 2000 (i.e. the value in 2000 = 100).', 'url': 'https://ourworldindata.org/grapher/bird-populations-eu', 'similarity_score': 0.637129366, 'content': 'Change in bird populations in the EU', 'reranking_score': 0.0002982213336508721, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in bird populations in the EU'),\n", + " Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_235', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The projected number of mammal, bird and amphibian species losing a certain extent of habitat by 2050 as a result of cropland expansion globally under a business-as-usual-scenario.', 'url': 'https://ourworldindata.org/grapher/projected-habitat-loss-extent-bau', 'similarity_score': 0.629549921, 'content': 'Number of animal species losing habitat due to cropland expansion by 2050', 'reranking_score': 0.00019150562002323568, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Number of animal species losing habitat due to cropland expansion by 2050'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_330', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Data source: Global Carbon Budget (2023)', 'url': 'https://ourworldindata.org/grapher/co2-emissions-fossil-land', 'similarity_score': 0.602846205, 'content': 'CO2 emissions from fossil fuels and land-use change', 'reranking_score': 0.00017391949950251728, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='CO2 emissions from fossil fuels and land-use change'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_372', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon.', 'url': 'https://ourworldindata.org/grapher/cumulative-co2-land-use', 'similarity_score': 0.59720397, 'content': 'Cumulative CO2 emissions from land-use change', 'reranking_score': 4.376090510049835e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Cumulative CO2 emissions from land-use change'),\n", + " Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_375', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change. They are measured as the cumulative total since 1850, in tonnes.', 'url': 'https://ourworldindata.org/grapher/cumulative-co2-including-land', 'similarity_score': 0.593179703, 'content': 'Cumulative CO2 emissions including land-use change', 'reranking_score': 2.8351740184007213e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Cumulative CO2 emissions including land-use change')],\n", + " 'documents': [Document(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': 547.0, 'num_tokens': 104.0, 'num_tokens_approx': 116.0, 'num_words': 87.0, 'page_number': 839, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '7.6.4.3 Ecological Barriers and Opportunities', 'short_name': 'IPCC AR6 WGIII FR', 'source': 'IPCC', 'toc_level0': '7.6 Assessment of Economic, Social and\\xa0Policy Responses', 'toc_level1': 'Box\\xa07.12 | Financing AFOLU Mitigation; What Are the Costs and Who Pays?', '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.789457798, 'content': 'The effects of climate change on ecosystems, including changes in crop yields, shifts in terrestrial ecosystem productivity, vegetation migration, wildfires, and other disturbances also will affect the potential for AFOLU mitigation. Climate is expected to reduce crop yields, increase crop and livestock prices, and increase pressure on undisturbed forest land for food production creating new barriers and increasing costs for implementation of many nature-based mitigation techniques (medium confidence) (IPCC AR6 WGII Chapter 5).', 'reranking_score': 0.9998337030410767, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='The effects of climate change on ecosystems, including changes in crop yields, shifts in terrestrial ecosystem productivity, vegetation migration, wildfires, and other disturbances also will affect the potential for AFOLU mitigation. Climate is expected to reduce crop yields, increase crop and livestock prices, and increase pressure on undisturbed forest land for food production creating new barriers and increasing costs for implementation of many nature-based mitigation techniques (medium confidence) (IPCC AR6 WGII Chapter 5).'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'N/A', 'figure_code': 'N/A', 'file_size': 'N/A', 'image_path': 'N/A', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII to the AR6 of the IPCC', 'num_characters': 444.0, 'num_tokens': 88.0, 'num_tokens_approx': 106.0, 'num_words': 80.0, 'page_number': 13, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': '(b) Observed impacts of climate change on human systems', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.B Observed Impacts', 'toc_level1': 'Ecosystems and biodiversity', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.785278857, 'content': '(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).', 'reranking_score': 0.9997828602790833, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).'),\n", + " Document(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': 444.0, 'num_tokens': 88.0, 'num_tokens_approx': 106.0, 'num_words': 80.0, 'page_number': 59, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '(b) Observed impacts of climate change on human systems', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Technical Summary ', '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.785278857, 'content': '(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).', 'reranking_score': 0.9997828602790833, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='(a) Climate change has already altered terrestrial, freshwater and ocean ecosystems at global scale, with multiple impacts evident at regional and local scales where there is sufficient literature to make an assessment. Impacts are evident on ecosystem structure, species geographic ranges and timing of seasonal life cycles (phenology) (for methodology and detailed references to chapters and cross-chapter papers see SMTS.1 and SMTS.1.1).'),\n", + " Document(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': 1090.0, 'num_tokens': 232.0, 'num_tokens_approx': 261.0, 'num_words': 196.0, 'page_number': 2707, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'Ecosystems Play a Key Role in CRD', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 18 Climate Resilient Development Pathways', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.773973823, 'content': 'Climate change connects to ecosystem services through two links: climate change and its influence on ecosystems as well as its influence on services (Section 2.2). The key climatic drivers are changes in temperature, precipitation and extreme events, which are unprecedented over millennia and highly variable by regions (Sections 2.3, 3.2; Cross-Chapter Box EXTREMES in Chapter 2). These climatic drivers influence physical and chemical conditions of the environment and worsen the impacts of non-climate anthropogenic drivers including eutrophication, hypoxia and sedimentation (Section 3.4). Such changes have led to changes in terrestrial, freshwater, oceanic and coastal ecosystems at all different levels, from species shifts and extinctions, to biome migration, and to ecosystem structure and processes changes (Sections 2.4, 2.5, 3.4, Cross-Chapter Box MOVING PLATE in Chapter 5). Changes in ecosystems leads to changes in ecosystem services including food and limber prevision, air and water quality regulation, biodiversity and habitat conservation, and cultural and', 'reranking_score': 0.999757707118988, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Climate change connects to ecosystem services through two links: climate change and its influence on ecosystems as well as its influence on services (Section 2.2). The key climatic drivers are changes in temperature, precipitation and extreme events, which are unprecedented over millennia and highly variable by regions (Sections 2.3, 3.2; Cross-Chapter Box EXTREMES in Chapter 2). These climatic drivers influence physical and chemical conditions of the environment and worsen the impacts of non-climate anthropogenic drivers including eutrophication, hypoxia and sedimentation (Section 3.4). Such changes have led to changes in terrestrial, freshwater, oceanic and coastal ecosystems at all different levels, from species shifts and extinctions, to biome migration, and to ecosystem structure and processes changes (Sections 2.4, 2.5, 3.4, Cross-Chapter Box MOVING PLATE in Chapter 5). Changes in ecosystems leads to changes in ecosystem services including food and limber prevision, air and water quality regulation, biodiversity and habitat conservation, and cultural and'),\n", + " Document(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': 299.0, 'num_tokens': 63.0, 'num_tokens_approx': 68.0, 'num_words': 51.0, 'page_number': 178, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': '1.2.1.2 Long-Term Perspectives on \\r\\nAnthropogenic Climate Change', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '1: Framing, Context, and Methods', 'toc_level1': '1.2 Where We Are Now', 'toc_level2': '1.2.2 The Policy and Governance Context', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.773946583, 'content': \"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\", 'reranking_score': 0.999757707118988, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content=\"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\"),\n", + " Document(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': 442.0, 'num_tokens': 113.0, 'num_tokens_approx': 133.0, 'num_words': 100.0, 'page_number': 13, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Observed Impacts on Ecosystems', '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.768190384, 'content': 'A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}', 'reranking_score': 0.9968845248222351, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document12', 'document_number': 12.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: Climate Change and Land: an IPCC special report on climate change, desertification, land degradation, sustainable land management, food security, and greenhouse gas fluxes in terrestrial ecosystems', 'num_characters': 830.0, 'num_tokens': 178.0, 'num_tokens_approx': 210.0, 'num_words': 158.0, 'page_number': 16, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Summary for Policymakers', 'short_name': 'IPCC SR CCL 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/4/2022/11/SRCCL_SPM.pdf', 'similarity_score': 0.731245279, 'content': 'Summary for Policymakers\\nA. Risks to humans and ecosystems from changes in land-based processes as a result of climate change\\nIncreases in global mean surface temperature (GMST), relative to pre-industrial levels, aect processes involved in desertification (water scarcity), land degradation (soil erosion, vegetation loss, wildfire, permafrost thaw) and food security (crop yield and food supply instabilities). Changes in these processes drive risks to food systems, livelihoods, infrastructure, the value of land, and human and ecosystem health. Changes in one process (e.g. wildfire or water scarcity) may result in compound risks. Risks are location-specific and dier by region.\\n A. Risks to humans and ecosystems from changes in land-based processes as a result of climate change ', 'reranking_score': 0.996715784072876, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IPCC'], 'question_used': 'What are the effects of climate change on ecosystems?', 'index_used': 'Vector'}, page_content='Summary for Policymakers\\nA. Risks to humans and ecosystems from changes in land-based processes as a result of climate change\\nIncreases in global mean surface temperature (GMST), relative to pre-industrial levels, aect processes involved in desertification (water scarcity), land degradation (soil erosion, vegetation loss, wildfire, permafrost thaw) and food security (crop yield and food supply instabilities). Changes in these processes drive risks to food systems, livelihoods, infrastructure, the value of land, and human and ecosystem health. Changes in one process (e.g. wildfire or water scarcity) may result in compound risks. Risks are location-specific and dier by region.\\n A. Risks to humans and ecosystems from changes in land-based processes as a result of climate change '),\n", + " Document(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': 506.0, 'num_tokens': 96.0, 'num_tokens_approx': 116.0, 'num_words': 87.0, 'page_number': 1951, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '14.2.2 Projected Changes in North American Climate', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 14 North America', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.814534, 'content': 'Biodiversity is affected by climate change in this way too. For example, numerous bird populations across North America are estimated to have declined by up to 30% over the past half-century. Multiple human-related factors, including habitat loss and agricultural intensification, contribute to these declines, with climate change as an added stressor. Increasingly extreme events, such as severe storms and wildfires, can decimate local populations of birds, adding to existing ecological threats.', 'reranking_score': 0.9997363686561584, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Biodiversity is affected by climate change in this way too. For example, numerous bird populations across North America are estimated to have declined by up to 30% over the past half-century. Multiple human-related factors, including habitat loss and agricultural intensification, contribute to these declines, with climate change as an added stressor. Increasingly extreme events, such as severe storms and wildfires, can decimate local populations of birds, adding to existing ecological threats.'),\n", + " Document(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': 299.0, 'num_tokens': 63.0, 'num_tokens_approx': 68.0, 'num_words': 51.0, 'page_number': 178, 'release_date': 2021.0, 'report_type': 'Full Report', 'section_header': '1.2.1.2 Long-Term Perspectives on \\r\\nAnthropogenic Climate Change', 'short_name': 'IPCC AR6 WGI FR', 'source': 'IPCC', 'toc_level0': '1: Framing, Context, and Methods', 'toc_level1': '1.2 Where We Are Now', 'toc_level2': '1.2.2 The Policy and Governance Context', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg1/IPCC_AR6_WGI_FullReport.pdf', 'similarity_score': 0.782265961, 'content': \"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\", 'reranking_score': 0.9997039437294006, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content=\"Biodiversity and Ecosystem Services (IPBES, 2019), climate change is a 'direct driver that is increasingly exacerbating the impact of other drivers on nature and human well-being', and 'the adverse impacts of climate change on biodiversity are projected to increase with increasing warming.'\"),\n", + " Document(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': 954.0, 'num_tokens': 203.0, 'num_tokens_approx': 209.0, 'num_words': 157.0, 'page_number': 629, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': '4.5.5 Projected Risks to Freshwater Ecosystems', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Chapter 4 Water', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.780191362, 'content': 'Changes in precipitation and temperatures are projected to affect freshwater ecosystems and their species through, for example, direct physiological responses from higher temperatures or drier conditions or a loss of habitat for feeding or breeding (Settele et al., 2014; Knouft and Ficklin, 2017; Bloschl et al., 2019b). In addition, increased water temperatures could lead to shifts in the structure and composition of species assemblages following changes in metabolic rates, body size, timing of migration, recruitment, range size and destabilisation of food webs. A review of the impact of climate change on biodiversity and functioning of freshwater ecosystems found that under all scenarios, except the one with the lowest GHG emission scenario, freshwater biodiversity is expected to decrease proportionally to the degree of warming and precipitation alteration (Settele et al., 2014) (medium evidence, high agreement).', 'reranking_score': 0.9996391534805298, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Changes in precipitation and temperatures are projected to affect freshwater ecosystems and their species through, for example, direct physiological responses from higher temperatures or drier conditions or a loss of habitat for feeding or breeding (Settele et al., 2014; Knouft and Ficklin, 2017; Bloschl et al., 2019b). In addition, increased water temperatures could lead to shifts in the structure and composition of species assemblages following changes in metabolic rates, body size, timing of migration, recruitment, range size and destabilisation of food webs. A review of the impact of climate change on biodiversity and functioning of freshwater ecosystems found that under all scenarios, except the one with the lowest GHG emission scenario, freshwater biodiversity is expected to decrease proportionally to the degree of warming and precipitation alteration (Settele et al., 2014) (medium evidence, high agreement).'),\n", + " Document(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': 1045.0, 'num_tokens': 221.0, 'num_tokens_approx': 240.0, 'num_words': 180.0, 'page_number': 2144, 'release_date': 2022.0, 'report_type': 'Full Report', 'section_header': 'CCP1.2.1.2.2 Projected impacts on biodiversity', 'short_name': 'IPCC AR6 WGII FR', 'source': 'IPCC', 'toc_level0': 'Chapters and Cross-Chapter Papers ', 'toc_level1': 'Cross-Chapter Paper 1 Biodiversity Hotspots', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://report.ipcc.ch/ar6/wg2/IPCC_AR6_WGII_FullReport.pdf', 'similarity_score': 0.771558464, 'content': \"Biodiversity hotspots are expected to be especially vulnerable to climate change because their endemic species have smaller geographic ranges (high confidence) (Sandel et al., 2011; Brown et al., 2020; Manes et al., 2021). Manes et al. (2021) reviewed over 8000 projections of climate change impacts on biodiversity in 232 studies, including 6116 projections on endemic, native and introduced species in terrestrial (200 studies), freshwater (14 studies) and marine (34 studies) environments in biodiversity hotspots. Only half of the hotspots had studies on climate change impacts. All measures of biodiversity were found to be negatively impacted by projected climate change, namely, species abundance, diversity, area, physiology and fisheries catch potential (medium confidence). However, introduced species' responses were neutral to positive (medium confidence). Land areas were projected to be more negatively affected by climate warming than marine. Land plants, insects, birds, reptiles and mammals were\", 'reranking_score': 0.9995535016059875, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content=\"Biodiversity hotspots are expected to be especially vulnerable to climate change because their endemic species have smaller geographic ranges (high confidence) (Sandel et al., 2011; Brown et al., 2020; Manes et al., 2021). Manes et al. (2021) reviewed over 8000 projections of climate change impacts on biodiversity in 232 studies, including 6116 projections on endemic, native and introduced species in terrestrial (200 studies), freshwater (14 studies) and marine (34 studies) environments in biodiversity hotspots. Only half of the hotspots had studies on climate change impacts. All measures of biodiversity were found to be negatively impacted by projected climate change, namely, species abundance, diversity, area, physiology and fisheries catch potential (medium confidence). However, introduced species' responses were neutral to positive (medium confidence). Land areas were projected to be more negatively affected by climate warming than marine. Land plants, insects, birds, reptiles and mammals were\"),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document12', 'document_number': 12.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: Climate Change and Land: an IPCC special report on climate change, desertification, land degradation, sustainable land management, food security, and greenhouse gas fluxes in terrestrial ecosystems', 'num_characters': 899.0, 'num_tokens': 228.0, 'num_tokens_approx': 272.0, 'num_words': 204.0, 'page_number': 10, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Summary for Policymakers', 'short_name': 'IPCC SR CCL 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/4/2022/11/SRCCL_SPM.pdf', 'similarity_score': 0.724869668, 'content': 'Summary for Policymakers\\nA.2.6 Global warming has led to shifts of climate zones in many world regions, including expansion of arid climate zones and contraction of polar climate zones (high confidence). As a consequence, many plant and animal species have experienced changes in their ranges, abundances, and shifts in their seasonal activities (high confidence). {2.2, 3.2.2, 4.4.1}\\nA.2.7 Climate change can exacerbate land degradation processes (high confidence) including through increases in rainfall intensity, flooding, drought frequency and severity, heat stress, dry spells, wind, sea-level rise and wave action, and permafrost thaw with outcomes being modulated by land management. Ongoing coastal erosion is intensifying and impinging on more regions with sea-level rise adding to land use pressure in some regions (medium confidence). {4.2.1, 4.2.2, 4.2.3, 4.4.1, 4.4.2, 4.9.6,', 'reranking_score': 0.9975702166557312, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary for Policymakers\\nA.2.6 Global warming has led to shifts of climate zones in many world regions, including expansion of arid climate zones and contraction of polar climate zones (high confidence). As a consequence, many plant and animal species have experienced changes in their ranges, abundances, and shifts in their seasonal activities (high confidence). {2.2, 3.2.2, 4.4.1}\\nA.2.7 Climate change can exacerbate land degradation processes (high confidence) including through increases in rainfall intensity, flooding, drought frequency and severity, heat stress, dry spells, wind, sea-level rise and wave action, and permafrost thaw with outcomes being modulated by land management. Ongoing coastal erosion is intensifying and impinging on more regions with sea-level rise adding to land use pressure in some regions (medium confidence). {4.2.1, 4.2.2, 4.2.3, 4.4.1, 4.4.2, 4.9.6,'),\n", + " Document(metadata={'chunk_type': 'text', 'document_id': 'document12', 'document_number': 12.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: Climate Change and Land: an IPCC special report on climate change, desertification, land degradation, sustainable land management, food security, and greenhouse gas fluxes in terrestrial ecosystems', 'num_characters': 633.0, 'num_tokens': 170.0, 'num_tokens_approx': 194.0, 'num_words': 146.0, 'page_number': 17, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Summary for Policymakers', 'short_name': 'IPCC SR CCL 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/4/2022/11/SRCCL_SPM.pdf', 'similarity_score': 0.720580459, 'content': 'A.5 Climate change creates additional stresses on land, exacerbating existing risks to livelihoods, biodiversity, human and ecosystem health, infrastructure, and food systems (high confidence). Increasing impacts on land are projected under all future GHG emission scenarios (high confidence). Some regions will face higher risks, while some regions will face risks previously not anticipated (high confidence). Cascading risks with impacts on multiple systems and sectors also vary across regions (high confidence). (Figure SPM.2) {2.2, 3.5, 4.2, 4.4, 4.7, 5.1, 5.2, 5.8, 6.1, 7.2, 7.3, Cross-Chapter Box 9 in Chapter 6}', 'reranking_score': 0.9797168374061584, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='A.5 Climate change creates additional stresses on land, exacerbating existing risks to livelihoods, biodiversity, human and ecosystem health, infrastructure, and food systems (high confidence). Increasing impacts on land are projected under all future GHG emission scenarios (high confidence). Some regions will face higher risks, while some regions will face risks previously not anticipated (high confidence). Cascading risks with impacts on multiple systems and sectors also vary across regions (high confidence). (Figure SPM.2) {2.2, 3.5, 4.2, 4.4, 4.7, 5.1, 5.2, 5.8, 6.1, 7.2, 7.3, Cross-Chapter Box 9 in Chapter 6}'),\n", + " Document(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': 442.0, 'num_tokens': 113.0, 'num_tokens_approx': 133.0, 'num_words': 100.0, 'page_number': 13, 'release_date': 2019.0, 'report_type': 'SPM', 'section_header': 'Observed Impacts on Ecosystems', '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.714953661, 'content': 'A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}', 'reranking_score': 0.05437663197517395, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='A.6 Coastal ecosystems are affected by ocean warming, including intensified marine heatwaves, acidification, loss of oxygen, salinity intrusion and sea level rise, in combination with adverse effects from human activities on ocean and land (high confidence). Impacts are already observed on habitat area and biodiversity, as well as ecosystem functioning and services (high confidence). {4.3.2, 4.3.3, 5.3, 5.4.1, 6.4.2, Figure SPM.2}')],\n", + " 'related_contents': [Document(metadata={'chunk_type': 'image', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'Picture_0_37', 'figure_code': 'N/A', 'file_size': 299.216796875, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document5/images/Picture_0_37.png', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 38, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.D Contribution of Adaptation to Solutions', 'toc_level1': 'Adaptation progress and gaps', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.735445261, 'content': 'Summary:\\nThe image presents a scientific analysis of the observed impacts of climate change on ecosystems across various geographical regions and ecosystem types, showing changes in ecosystem structure, species range shifts, and timing (phenology). It features a matrix with the confidence levels in attribution to climate change, from high to not applicable, for terrestrial, freshwater, and oceanic ecosystems. The second part of the image depicts a trend graph illustrating marine species richness changes across different latitudes from the 1950s to 2015, indicating a decline in equatorial regions and an increase in higher latitudes due to global warming. This composite scientific visualization conveys the broad and multifaceted effects of climate change on biodiversity globally, as reported by the IPCC or IPBES.', 'reranking_score': 0.9984026551246643, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary:\\nThe image presents a scientific analysis of the observed impacts of climate change on ecosystems across various geographical regions and ecosystem types, showing changes in ecosystem structure, species range shifts, and timing (phenology). It features a matrix with the confidence levels in attribution to climate change, from high to not applicable, for terrestrial, freshwater, and oceanic ecosystems. The second part of the image depicts a trend graph illustrating marine species richness changes across different latitudes from the 1950s to 2015, indicating a decline in equatorial regions and an increase in higher latitudes due to global warming. This composite scientific visualization conveys the broad and multifaceted effects of climate change on biodiversity globally, as reported by the IPCC or IPBES.'),\n", + " Document(metadata={'chunk_type': 'image', 'document_id': 'document10', 'document_number': 10.0, 'element_id': 'Picture_0_12', 'figure_code': 'N/A', 'file_size': 109.03125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document10/images/Picture_0_12.png', 'n_pages': 36.0, 'name': 'Synthesis report of the IPCC Sixth Assesment Report AR6', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 13, 'release_date': 2023.0, 'report_type': 'SPM', 'section_header': 'N/A', '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.709608436, 'content': 'Summary: This image provides a visual summary of the impacts of climate change on various aspects such as health, well-being, agriculture, water availability, and ecosystems. It shows the relationships between physical climate conditions altered by human influence and the consequential effects on food production, human health, and biodiversity. The visual icons depict specific areas affected by climate change, including crop production, animal and livestock health, fisheries, infectious diseases, mental health, and displacement due to extreme weather events. Additionally, it addresses the impacts on cities, settlements, and infrastructure, illustrating issues like inland flooding, storm-induced coastal damage, and damage to key economic sectors. For biodiversity, it highlights the changes occurring in terrestrial, freshwater, and ocean ecosystems. These elements are critical for understanding targeted areas for climate resilience and adaptation strategies.', 'reranking_score': 0.9982820749282837, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary: This image provides a visual summary of the impacts of climate change on various aspects such as health, well-being, agriculture, water availability, and ecosystems. It shows the relationships between physical climate conditions altered by human influence and the consequential effects on food production, human health, and biodiversity. The visual icons depict specific areas affected by climate change, including crop production, animal and livestock health, fisheries, infectious diseases, mental health, and displacement due to extreme weather events. Additionally, it addresses the impacts on cities, settlements, and infrastructure, illustrating issues like inland flooding, storm-induced coastal damage, and damage to key economic sectors. For biodiversity, it highlights the changes occurring in terrestrial, freshwater, and ocean ecosystems. These elements are critical for understanding targeted areas for climate resilience and adaptation strategies.'),\n", + " Document(metadata={'chunk_type': 'image', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'Picture_1_37', 'figure_code': 'N/A', 'file_size': 687.9970703125, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document5/images/Picture_1_37.png', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 38, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.D Contribution of Adaptation to Solutions', 'toc_level1': 'Adaptation progress and gaps', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.701574087, 'content': 'The image illustrates the projected impact of increasing increments of global warming on the exposure of species to dangerous climate conditions and the associated loss of biodiversity. It presents a series of world maps that highlight the percentage of species exposed to potentially dangerous climate conditions and the percentage of biodiversity loss across different global warming scenarios, ranging from +1.5°C to +4.0°C above pre-industrial levels. The left set of maps shows a color gradient indicating the percentage of biodiversity exposure to risk, with darker areas signifying higher exposure. The right set of maps shows varying degrees of projected biodiversity loss in terrestrial and freshwater environments, with warmer colors indicating greater losses. These visualizations emphasize the direct correlation between rising temperatures due to climate change and the decrease in marine species richness, particularly concerning equatorial regions and an increase at higher latitudes since the 1950s. The image serves as a tool for understanding the spatial distribution and scale of future biodiversity risks related to climate change.', 'reranking_score': 0.9980661273002625, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='The image illustrates the projected impact of increasing increments of global warming on the exposure of species to dangerous climate conditions and the associated loss of biodiversity. It presents a series of world maps that highlight the percentage of species exposed to potentially dangerous climate conditions and the percentage of biodiversity loss across different global warming scenarios, ranging from +1.5°C to +4.0°C above pre-industrial levels. The left set of maps shows a color gradient indicating the percentage of biodiversity exposure to risk, with darker areas signifying higher exposure. The right set of maps shows varying degrees of projected biodiversity loss in terrestrial and freshwater environments, with warmer colors indicating greater losses. These visualizations emphasize the direct correlation between rising temperatures due to climate change and the decrease in marine species richness, particularly concerning equatorial regions and an increase at higher latitudes since the 1950s. The image serves as a tool for understanding the spatial distribution and scale of future biodiversity risks related to climate change.'),\n", + " Document(metadata={'chunk_type': 'image', 'document_id': 'document4', 'document_number': 4.0, 'element_id': 'Picture_0_9', 'figure_code': 'Figure SPM.2', 'file_size': 226.57421875, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document4/images/Picture_0_9.png', 'n_pages': 34.0, 'name': 'Summary for Policymakers. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 10, 'release_date': 2022.0, 'report_type': 'SPM', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII SPM', 'source': 'IPCC', 'toc_level0': 'B: Observed and Projected Impacts and Risks', 'toc_level1': 'Observed Impacts from Climate Change', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_SummaryForPolicymakers.pdf', 'similarity_score': 0.694178522, 'content': 'Summary:\\nFigure SPM.2 reveals the observed impacts of climate change on ecosystems and human systems around the globe, with a focus on changes in ecosystem structure and species range shifts across terrestrial, freshwater, and ocean environments. It also shows changes in timing (phenology) across these domains. The visualization indicates the degree of confidence in attributing these observed changes to climate change, using color-coded dots to represent high, medium, or low levels of confidence, including areas where evidence is limited or insufficient. Each row represents a different geographic region or type of environment, such as the Arctic, small islands, or biodiversity hotspots, providing a comprehensive regional assessment alongside the global perspective. The figure is designed to be useful for policymakers by illustrating the varied confidence levels in the observed effects of climate change across different regions and environments.', 'reranking_score': 0.9977376461029053, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary:\\nFigure SPM.2 reveals the observed impacts of climate change on ecosystems and human systems around the globe, with a focus on changes in ecosystem structure and species range shifts across terrestrial, freshwater, and ocean environments. It also shows changes in timing (phenology) across these domains. The visualization indicates the degree of confidence in attributing these observed changes to climate change, using color-coded dots to represent high, medium, or low levels of confidence, including areas where evidence is limited or insufficient. Each row represents a different geographic region or type of environment, such as the Arctic, small islands, or biodiversity hotspots, providing a comprehensive regional assessment alongside the global perspective. The figure is designed to be useful for policymakers by illustrating the varied confidence levels in the observed effects of climate change across different regions and environments.'),\n", + " Document(metadata={'chunk_type': 'image', 'document_id': 'document5', 'document_number': 5.0, 'element_id': 'Picture_0_11', 'figure_code': 'N/A', 'file_size': 239.587890625, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document5/images/Picture_0_11.png', 'n_pages': 84.0, 'name': 'Technical Summary. In: Climate Change 2022: Impacts, Adaptation and Vulnerability. Contribution of the WGII 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': 12, 'release_date': 2022.0, 'report_type': 'TS', 'section_header': 'N/A', 'short_name': 'IPCC AR6 WGII TS', 'source': 'IPCC', 'toc_level0': 'TS.B Observed Impacts', 'toc_level1': 'Ecosystems and biodiversity', 'toc_level2': 'N/A', 'toc_level3': 'N/A', 'url': 'https://www.ipcc.ch/report/ar6/wg2/downloads/report/IPCC_AR6_WGII_TechnicalSummary.pdf', 'similarity_score': 0.680837214, 'content': 'Summary: This image is a matrix summarizing the observed impacts of climate change on various ecosystems across different regions and evaluating the confidence in attribution of these impacts to climate change. It covers terrestrial, freshwater, and ocean ecosystems and notes changes in ecosystem structure, species range shifts, and changes in phenology. The chart uses color-coded dots to indicate levels of confidence, ranging from high (dark blue) to low (light purple), and also acknowledges areas where evidence is limited or not applicable. Impacts to human systems are referenced but not detailed in this part of the chart.', 'reranking_score': 0.9970658421516418, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary: This image is a matrix summarizing the observed impacts of climate change on various ecosystems across different regions and evaluating the confidence in attribution of these impacts to climate change. It covers terrestrial, freshwater, and ocean ecosystems and notes changes in ecosystem structure, species range shifts, and changes in phenology. The chart uses color-coded dots to indicate levels of confidence, ranging from high (dark blue) to low (light purple), and also acknowledges areas where evidence is limited or not applicable. Impacts to human systems are referenced but not detailed in this part of the chart.'),\n", + " Document(metadata={'chunk_type': 'image', 'document_id': 'document14', 'document_number': 14.0, 'element_id': 'Picture_1_14', 'figure_code': 'N/A', 'file_size': 58.65234375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document14/images/Picture_1_14.png', 'n_pages': 34.0, 'name': 'Technical Summary. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 15, 'release_date': 2019.0, 'report_type': 'TS', 'section_header': 'N/A', '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.679388642, 'content': 'Summary and Explanation: The image presents a structured overview of the impacts of climate change on high mountain and polar land regions, organized into three categories: Physical Changes, Ecosystems, and Human Systems and Services. It details how changes in the cryosphere—such as glaciers and ice sheets—affect water availability, increase natural hazards like floods, landslides, and avalanches, alter ecosystems (tundra, forest, lakes/ponds, and rivers/streams), and ultimately impact human activities such as tourism, agriculture, infrastructure, and cultural services. The illustration emphasizes the attribution of these changes to climate dynamics. Migration is noted specifically, implying changes in human population movements as a result of cryospheric changes.', 'reranking_score': 0.9966405630111694, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='Summary and Explanation: The image presents a structured overview of the impacts of climate change on high mountain and polar land regions, organized into three categories: Physical Changes, Ecosystems, and Human Systems and Services. It details how changes in the cryosphere—such as glaciers and ice sheets—affect water availability, increase natural hazards like floods, landslides, and avalanches, alter ecosystems (tundra, forest, lakes/ponds, and rivers/streams), and ultimately impact human activities such as tourism, agriculture, infrastructure, and cultural services. The illustration emphasizes the attribution of these changes to climate dynamics. Migration is noted specifically, implying changes in human population movements as a result of cryospheric changes.'),\n", + " Document(metadata={'chunk_type': 'image', 'document_id': 'document14', 'document_number': 14.0, 'element_id': 'Picture_0_27', 'figure_code': 'Figure TS.8', 'file_size': 234.287109375, 'image_path': '/dbfs/mnt/ai4sclqa/raw/climateqa/documents/document14/images/Picture_0_27.png', 'n_pages': 34.0, 'name': 'Technical Summary. In: IPCC Special Report on the Ocean and Cryosphere in a Changing Climate', 'num_characters': 'N/A', 'num_tokens': 'N/A', 'num_tokens_approx': 'N/A', 'num_words': 'N/A', 'page_number': 28, 'release_date': 2019.0, 'report_type': 'TS', 'section_header': 'N/A', '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.675673127, 'content': 'This image is a graphical representation of projected climate change impacts and risks to various ocean ecosystems. Displaying data for different oceanic regions such as coral reefs, kelp forests, seagrass meadows, and more, the chart shows an increase in surface temperature and the associated level of risk, which ranges from undetectable to very high. It also indicates the degree of certainty for these projections across various habitats. This visual summary aids in understanding the potential effects of climate warming on marine biodiversity and ecosystem services.', 'reranking_score': 0.9954755902290344, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IPCC'], 'question_used': 'How does climate change affect biodiversity and wildlife?', 'index_used': 'Vector'}, page_content='This image is a graphical representation of projected climate change impacts and risks to various ocean ecosystems. Displaying data for different oceanic regions such as coral reefs, kelp forests, seagrass meadows, and more, the chart shows an increase in surface temperature and the associated level of risk, which ranges from undetectable to very high. It also indicates the degree of certainty for these projections across various habitats. This visual summary aids in understanding the potential effects of climate warming on marine biodiversity and ecosystem services.')]}" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "new_state = state.copy()\n", + "while len(new_state[\"remaining_questions\"])>0: \n", + " async for temp_state in retriever_node.astream(new_state):\n", + " new_state.update(temp_state)\n", + " print(temp_state)\n", + "new_state" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Answer RAG ----\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": [ + "\n", + "\n", + "Answer:\n", + "Climate change has significant and wide-ranging impacts on the environment, affecting ecosystems, biodiversity, and the services they provide. Here are the key points:\n", + "\n", + "### 1. **Alteration of Ecosystems**\n", + "- Climate change has already changed terrestrial, freshwater, and ocean ecosystems globally. These changes are evident in the structure of ecosystems, the geographic ranges of species, and the timing of seasonal life cycles (phenology) [Doc 2, Doc 3].\n", + "- Key climatic factors driving these changes include rising temperatures, altered precipitation patterns, and extreme weather events, which are unprecedented in the last millennia [Doc 4].\n", + "\n", + "### 2. **Biodiversity Loss**\n", + "- Many species are experiencing shifts in their ranges and abundances due to climate change. For instance, bird populations in North America have declined by up to 30% over the past fifty years, with climate change acting as an additional stressor alongside habitat loss and agricultural intensification [Doc 8].\n", + "- Biodiversity hotspots, which are areas rich in unique species, are particularly vulnerable. Projections indicate that climate change negatively impacts various measures of biodiversity, including species abundance and diversity [Doc 11].\n", + "\n", + "### 3. **Ecosystem Services at Risk**\n", + "- Ecosystems provide essential services such as food production, air and water quality regulation, and habitat conservation. Climate change disrupts these services, leading to challenges in food security and increased costs for natural resource management [Doc 1, Doc 4].\n", + "- Changes in ecosystems can also exacerbate existing environmental issues, such as land degradation and water scarcity, which further threaten human livelihoods and health [Doc 7, Doc 13].\n", + "\n", + "### 4. **Specific Impacts on Freshwater and Coastal Ecosystems**\n", + "- Freshwater ecosystems are particularly sensitive to changes in temperature and precipitation, which can lead to shifts in species composition and a decline in biodiversity [Doc 10].\n", + "- Coastal ecosystems face threats from ocean warming, acidification, and rising sea levels, which impact habitat areas and biodiversity [Doc 6, Doc 14].\n", + "\n", + "### 5. **Cascading Effects**\n", + "- The impacts of climate change are interconnected. For example, changes in one environmental process, like increased wildfires or water scarcity, can lead to compounded risks affecting multiple systems, including food security and human health [Doc 7, Doc 13].\n", + "\n", + "In summary, climate change poses a serious threat to the environment, leading to altered ecosystems, loss of biodiversity, and diminished ecosystem services, with far-reaching consequences for both nature and human well-being.\n" + ] + } + ], + "source": [ + "answer_rag = await make_rag_node(llm)(new_state,{})\n", + "new_state.update(answer_rag)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# stream event of the whole chain" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'user_input': 'What is the impact of climate change on the environment?',\n", + " 'audience': 'the general public who know the basics in science and climate change and want to learn more about it without technical terms. Still use references to passages.',\n", + " 'sources_input': ['IPCC']}" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "inial_state" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [], + "source": [ + "event_list = app.astream_events(inial_state, version = \"v1\")" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Categorize_message ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:httpx:HTTP Request: POST https://api.openai.com/v1/chat/completions \"HTTP/1.1 200 OK\"\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Output intent categorization: {'intent': 'search'}\n", + "\n", + "---- Transform query ----\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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieving graphs ----\n", + "Subquestion 0: What are the effects of climate change on ecosystems?\n", + "8 graphs retrieved for subquestion 1: [Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.649586797, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.004589226096868515, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp', 'similarity_score': 0.623827338, 'content': 'Change in CO2 emissions and GDP', 'reranking_score': 0.002260460052639246, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in CO2 emissions and GDP'), Document(metadata={'category': 'Forests & Deforestation', 'doc_id': 'owid_1358', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Net change in forest area measures forest expansion (either through afforestation or natural expansion) minus deforestation', 'url': 'https://ourworldindata.org/grapher/annual-change-forest-area', 'similarity_score': 0.612325966, 'content': 'Annual change in forest area', 'reranking_score': 0.001020866329781711, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Annual change in forest area'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_351', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-long-term', 'similarity_score': 0.611927152, 'content': 'Change in per capita CO2 emissions and GDP', 'reranking_score': 0.0006646059919148684, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in per capita CO2 emissions and GDP'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_330', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Data source: Global Carbon Budget (2023)', 'url': 'https://ourworldindata.org/grapher/co2-emissions-fossil-land', 'similarity_score': 0.602846205, 'content': 'CO2 emissions from fossil fuels and land-use change', 'reranking_score': 0.00017391949950251728, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='CO2 emissions from fossil fuels and land-use change'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_372', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions from land-use change can be positive or negative depending on whether these changes emit (positive) or sequester (negative) carbon.', 'url': 'https://ourworldindata.org/grapher/cumulative-co2-land-use', 'similarity_score': 0.59720397, 'content': 'Cumulative CO2 emissions from land-use change', 'reranking_score': 4.376090510049835e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Cumulative CO2 emissions from land-use change'), Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_199', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.', 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species', 'similarity_score': 0.59466666, 'content': 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050', 'reranking_score': 2.851418685168028e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_375', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Emissions include those from fossil fuels and industry, and land-use change. They are measured as the cumulative total since 1850, in tonnes.', 'url': 'https://ourworldindata.org/grapher/cumulative-co2-including-land', 'similarity_score': 0.593179703, 'content': 'Cumulative CO2 emissions including land-use change', 'reranking_score': 2.8351740184007213e-05, 'query_used_for_retrieval': 'What are the effects of climate change on ecosystems?', 'sources_used': ['IEA', 'OWID']}, page_content='Cumulative CO2 emissions including land-use change')]\n", + "Subquestion 1: How does climate change affect biodiversity and wildlife?\n", + "7 graphs retrieved for subquestion 2: [Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_199', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The number of species at risk of losing greater than 25% of their habitat as a result of agricultural expansion under business-as-usual projections to 2050. This is shown for countries with more than 25 species at risk.', 'url': 'https://ourworldindata.org/grapher/habitat-loss-25-species', 'similarity_score': 0.638248205, 'content': 'Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050', 'reranking_score': 0.00037698738742619753, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Countries with more than 25 species at risk of losing more than 25% of their habitat by 2050'), Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_192', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The bird population index is measured relative to population size in the year 2000 (i.e. the value in 2000 = 100).', 'url': 'https://ourworldindata.org/grapher/bird-populations-eu', 'similarity_score': 0.637129366, 'content': 'Change in bird populations in the EU', 'reranking_score': 0.0002982213336508721, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in bird populations in the EU'), Document(metadata={'category': 'Biodiversity', 'doc_id': 'owid_235', 'returned_content': '', 'source': 'OWID', 'subtitle': 'The projected number of mammal, bird and amphibian species losing a certain extent of habitat by 2050 as a result of cropland expansion globally under a business-as-usual-scenario.', 'url': 'https://ourworldindata.org/grapher/projected-habitat-loss-extent-bau', 'similarity_score': 0.629549921, 'content': 'Number of animal species losing habitat due to cropland expansion by 2050', 'reranking_score': 0.00019150562002323568, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Number of animal species losing habitat due to cropland expansion by 2050'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_386', 'returned_content': '', 'source': 'OWID', 'subtitle': \"This is shown as a country or region's share of the global mean surface temperature change as a result of its cumulative emissions of three gases – carbon dioxide, methane, and nitrous oxide.\", 'url': 'https://ourworldindata.org/grapher/contributions-global-temp-change', 'similarity_score': 0.626872361, 'content': 'Global warming: Contributions to the change in global mean surface temperature', 'reranking_score': 0.0001559457741677761, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Global warming: Contributions to the change in global mean surface temperature'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_349', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Consumption-based emissions are national emissions that have been adjusted for trade. This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp', 'similarity_score': 0.605995178, 'content': 'Change in CO2 emissions and GDP', 'reranking_score': 0.00015302258543670177, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in CO2 emissions and GDP'), Document(metadata={'category': 'Forests & Deforestation', 'doc_id': 'owid_1358', 'returned_content': '', 'source': 'OWID', 'subtitle': 'Net change in forest area measures forest expansion (either through afforestation or natural expansion) minus deforestation', 'url': 'https://ourworldindata.org/grapher/annual-change-forest-area', 'similarity_score': 0.605800509, 'content': 'Annual change in forest area', 'reranking_score': 0.00011613907554419711, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Annual change in forest area'), Document(metadata={'category': 'CO2 & Greenhouse Gas Emissions', 'doc_id': 'owid_351', 'returned_content': '', 'source': 'OWID', 'subtitle': 'This measures fossil fuel and industry emissions. Land-use change is not included.', 'url': 'https://ourworldindata.org/grapher/co2-emissions-and-gdp-long-term', 'similarity_score': 0.59752804, 'content': 'Change in per capita CO2 emissions and GDP', 'reranking_score': 0.00010721882426878437, 'query_used_for_retrieval': 'How does climate change affect biodiversity and wildlife?', 'sources_used': ['IEA', 'OWID']}, page_content='Change in per capita CO2 emissions and GDP')]\n", + "---- Retrieve documents ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID ae2d3429-881d-494c-93eb-c12fa8fde5b8.')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Retrieve documents ----\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID 36e90f11-5ec9-4a99-b1a7-fb4c0887e70b.')\n", + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_start callback: ValidationError(model='Run', errors=[{'loc': ('__root__',), 'msg': \"argument of type 'NoneType' is not iterable\", 'type': 'type_error'}])\n", + "WARNING:langchain_core.callbacks.manager:Error in LogStreamCallbackHandler.on_chain_end callback: TracerException('No indexed run ID 68e76140-1fb6-4932-89ea-6617c8b8d0d1.')\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "---- Answer RAG ----\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": [ + "\n", + "\n", + "Answer:\n", + "Climate change has significant and wide-ranging impacts on the environment, affecting ecosystems, biodiversity, and the services they provide. Here are the key points:\n", + "\n", + "### 1. **Alteration of Ecosystems**\n", + "- Climate change has already changed terrestrial, freshwater, and ocean ecosystems globally. These changes are evident in the structure of ecosystems, the geographic ranges of species, and the timing of seasonal life cycles (phenology) [Doc 2, Doc 3].\n", + "- Key climatic factors driving these changes include rising temperatures, altered precipitation patterns, and extreme weather events, which are unprecedented in the last millennia [Doc 4].\n", + "\n", + "### 2. **Biodiversity Loss**\n", + "- Many species are experiencing shifts in their ranges and abundances due to climate change. For instance, bird populations in North America have declined by up to 30% over the past fifty years, with climate change acting as an additional stressor alongside habitat loss and agricultural intensification [Doc 8].\n", + "- Biodiversity hotspots, which are areas rich in unique species, are particularly vulnerable. Projections indicate that climate change negatively impacts various measures of biodiversity, including species abundance and diversity [Doc 11].\n", + "\n", + "### 3. **Ecosystem Services at Risk**\n", + "- Ecosystems provide essential services such as food production, air and water quality regulation, and habitat conservation. Climate change disrupts these services, leading to challenges in food security and increased costs for natural resource management [Doc 1, Doc 4].\n", + "- Changes in ecosystems can also exacerbate existing environmental issues, such as land degradation and water scarcity, which further threaten human livelihoods and health [Doc 7, Doc 13].\n", + "\n", + "### 4. **Specific Impacts on Freshwater and Coastal Ecosystems**\n", + "- Freshwater ecosystems are particularly sensitive to changes in temperature and precipitation, which can lead to shifts in species composition and declines in biodiversity [Doc 10].\n", + "- Coastal ecosystems face threats from ocean warming, acidification, and rising sea levels, which impact habitat areas and biodiversity [Doc 6, Doc 14].\n", + "\n", + "### 5. **Cascading Effects**\n", + "- The impacts of climate change are interconnected. For example, changes in one environmental process, like increased wildfires or water scarcity, can lead to compounded risks affecting multiple systems and sectors [Doc 13].\n", + "\n", + "In summary, climate change poses a serious threat to the environment, leading to altered ecosystems, loss of biodiversity, and disruption of vital ecosystem services. These changes not only affect nature but also have significant implications for human well-being and food security.\n" + ] + } + ], + "source": [ + "\n", + "async for event in event_list:\n", + " pass" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "climateqa", + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/style.css b/style.css index 77620d713e42a8bd26acc4dc7b6b1e398be31876..357e9f16116cc08586ee67b9d34a24aaa052333b 100644 --- a/style.css +++ b/style.css @@ -3,6 +3,61 @@ --user-image: url('https://ih1.redbubble.net/image.4776899543.6215/st,small,507x507-pad,600x600,f8f8f8.jpg'); } */ +#tab-recommended_content{ + padding-top: 0px; + padding-left : 0px; + padding-right: 0px; +} +#group-subtabs { + /* display: block; */ + width: 100%; /* Ensures the parent uses the full width */ + position : sticky; +} + +#group-subtabs .tab-container { + display: flex; + text-align: center; + width: 100%; /* Ensures the tabs span the full width */ +} + +#group-subtabs .tab-container button { + flex: 1; /* Makes each button take equal width */ +} + + +#papers-summary-popup button span{ + /* make label of accordio in bold, center, and bigger */ + font-size: 16px; + font-weight: bold; + text-align: center; + +} + +#papers-relevant-popup span{ + /* make label of accordio in bold, center, and bigger */ + font-size: 16px; + font-weight: bold; + text-align: center; +} + + + +#tab-citations .button{ + padding: 12px 16px; + font-size: 16px; + font-weight: bold; + cursor: pointer; + border: none; + outline: none; + text-align: left; + transition: background-color 0.3s ease; +} + + +.gradio-container { + width: 100%!important; + max-width: 100% !important; +} /* fix for huggingface infinite growth*/ main.flex.flex-1.flex-col { @@ -85,7 +140,12 @@ body.dark .tip-box * { font-size:14px !important; } - +.card-content img { + display: block; + margin: auto; + max-width: 100%; /* Ensures the image is responsive */ + height: auto; +} a { text-decoration: none; @@ -161,60 +221,111 @@ a { border:none; } -/* .gallery-item > div:hover{ - background-color:#7494b0 !important; - color:white!important; -} -.gallery-item:hover{ - border:#7494b0 !important; +label.selected{ + background: #93c5fd !important; } -.gallery-item > div{ - background-color:white !important; - color:#577b9b!important; +#submit-button{ + padding:0px !important; } -.label{ - color:#577b9b!important; -} */ +#modal-config .block.modal-block.padded { + padding-top: 25px; + height: 100vh; + +} +#modal-config .modal-container{ + margin: 0px; + padding: 0px; +} +/* Modal styles */ +#modal-config { + position: fixed; + top: 0; + left: 0; + height: 100vh; + width: 500px; + background-color: white; + box-shadow: 2px 0 10px rgba(0, 0, 0, 0.1); + z-index: 1000; + padding: 15px; + transform: none; +} +#modal-config .close{ + display: none; +} -/* .paginate{ - color:#577b9b!important; +/* Push main content to the right when modal is open */ +/* .modal ~ * { + margin-left: 300px; + transition: margin-left 0.3s ease; } */ +#modal-config .modal .wrap ul{ + position:static; + top: 100%; + left: 0; + /* min-height: 100px; */ + height: 100%; + /* margin-top: 0; */ + z-index: 9999; + pointer-events: auto; + height: 200px; +} +#config-button{ + background: none; + border: none; + padding: 8px; + cursor: pointer; + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + transition: background-color 0.2s; +} +#config-button::before { + content: '⚙️'; + font-size: 20px; +} -/* span[data-testid="block-info"]{ - background:none !important; - color:#577b9b; - } */ +#config-button:hover { + background-color: rgba(0, 0, 0, 0.1); +} -/* Pseudo-element for the circularly cropped picture */ -/* .message.bot::before { - content: ''; +#checkbox-config{ + display: block; position: absolute; - top: -10px; - left: -10px; - width: 30px; - height: 30px; - background-image: var(--user-image); - background-size: cover; - background-position: center; + background: none; + border: none; + padding: 8px; + cursor: pointer; + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; border-radius: 50%; - z-index: 10; - } - */ - -label.selected{ - background:none !important; + transition: background-color 0.2s; + font-size: 20px; + text-align: center; } - -#submit-button{ - padding:0px !important; +#checkbox-config:checked{ + display: block; } + + @media screen and (min-width: 1024px) { + /* Additional style for scrollable tab content */ + /* div#tab-recommended_content { + overflow-y: auto; + max-height: 80vh; + } */ + .gradio-container { max-height: calc(100vh - 190px) !important; overflow: hidden; @@ -225,6 +336,8 @@ label.selected{ } */ + + div#tab-examples{ height:calc(100vh - 190px) !important; overflow-y: scroll !important; @@ -236,6 +349,10 @@ label.selected{ overflow-y: scroll !important; /* overflow-y: auto !important; */ } + div#graphs-container{ + height:calc(100vh - 210px) !important; + overflow-y: scroll !important; + } div#sources-figures{ height:calc(100vh - 300px) !important; @@ -243,6 +360,18 @@ label.selected{ overflow-y: scroll !important; } + div#graphs-container{ + height:calc(100vh - 300px) !important; + max-height: 90vh !important; + overflow-y: scroll !important; + } + + div#tab-citations{ + height:calc(100vh - 300px) !important; + max-height: 90vh !important; + overflow-y: scroll !important; + } + div#tab-config{ height:calc(100vh - 190px) !important; overflow-y: scroll !important; @@ -409,8 +538,7 @@ span.chatbot > p > img{ } #dropdown-samples{ - /*! border:none !important; */ - /*! border-width:0px !important; */ + background:none !important; } @@ -468,6 +596,10 @@ span.chatbot > p > img{ input[type="checkbox"]:checked + .dropdown-content { display: block; } + + #checkbox-chat input[type="checkbox"] { + display: flex !important; + } .dropdown-content { display: none; @@ -489,7 +621,7 @@ span.chatbot > p > img{ border-bottom: 5px solid black; } - .loader { +.loader { border: 1px solid #d0d0d0 !important; /* Light grey background */ border-top: 1px solid #db3434 !important; /* Blue color */ border-right: 1px solid #3498db !important; /* Blue color */ @@ -499,41 +631,64 @@ span.chatbot > p > img{ animation: spin 2s linear infinite; display:inline-block; margin-right:10px !important; - } +} - .checkmark{ +.checkmark{ color:green !important; font-size:18px; margin-right:10px !important; - } +} - @keyframes spin { +@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } - } +} - .relevancy-score{ +.relevancy-score{ margin-top:10px !important; font-size:10px !important; font-style:italic; - } +} - .score-green{ +.score-green{ color:green !important; - } +} - .score-orange{ +.score-orange{ color:orange !important; - } +} - .score-red{ +.score-red{ color:red !important; - } +} + +/* Mobile specific adjustments */ +@media screen and (max-width: 767px) { + div#tab-recommended_content { + max-height: 50vh; /* Reduce height for smaller screens */ + overflow-y: auto; + } +} + +/* Additional style for scrollable tab content */ +div#tab-saved-graphs { + overflow-y: auto; /* Enable vertical scrolling */ + max-height: 80vh; /* Adjust height as needed */ +} + +/* Mobile specific adjustments */ +@media screen and (max-width: 767px) { + div#tab-saved-graphs { + max-height: 50vh; /* Reduce height for smaller screens */ + overflow-y: auto; + } +} .message-buttons-left.panel.message-buttons.with-avatar { display: none; } + /* Specific fixes for Hugging Face Space iframe */ .h-full { height: auto !important;