diff --git a/Solar-Fullstack-LLM-101/09_2_langgraph_Self_RAG.ipynb b/Solar-Fullstack-LLM-101/09_2_langgraph_Self_RAG.ipynb index 0017abc..e1d3026 100644 --- a/Solar-Fullstack-LLM-101/09_2_langgraph_Self_RAG.ipynb +++ b/Solar-Fullstack-LLM-101/09_2_langgraph_Self_RAG.ipynb @@ -1,433 +1,797 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "6156e0ed", - "metadata": {}, - "source": [ - "\n", - "\"Open\n", - "" - ] - }, - { - "attachments": { - "image.png": { - "image/png": "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" + "cells": [ + { + "cell_type": "markdown", + "id": "6156e0ed", + "metadata": { + "id": "6156e0ed" + }, + "source": [ + "\n", + "\"Open\n", + "" + ] + }, + { + "cell_type": "markdown", + "id": "919fe33c-0149-4f7d-b200-544a18986c9a", + "metadata": { + "id": "919fe33c-0149-4f7d-b200-544a18986c9a" + }, + "source": [ + "# Upstage Self-RAG\n", + "\n", + "Self-RAG is a strategy for RAG that incorperates [self-reflection / self-grading on retrieved documents and generations](https://blog.langchain.dev/agentic-rag-with-langgraph/). It leverages LLM to make decisions in the answer generation steps, hence improves quality of the final answer.\n", + "\n", + "See [Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection](https://arxiv.org/abs/2310.11511) paper for more detailed information.\n", + "\n", + "In this example, we will implement some of these ideas. With [Upstage integrations](https://python.langchain.com/docs/integrations/providers/upstage/) and [LangGraph](https://python.langchain.com/docs/langgraph), you can achieve this with just a few additional lines of code. Particularly, it uses Upstage Solar Mini chat model, Embeddings model, Layout Analysis for document understanding and retrieval, and Groundedness Check for verifying the generative model's response.\n", + "\n", + "![download1.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "markdown", + "id": "72f3ee57-68ab-4040-bd36-4014e2a23d96", + "metadata": { + "id": "72f3ee57-68ab-4040-bd36-4014e2a23d96" + }, + "source": [ + "## Environment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a384cc48-0425-4e8f-aafc-cfb8e56025c9", + "metadata": { + "id": "a384cc48-0425-4e8f-aafc-cfb8e56025c9" + }, + "outputs": [], + "source": [ + "!pip install -qU langchain-core langchain-upstage langchain-chroma langchain langgraph\n", + "!pip install -qU python-dotenv" + ] + }, + { + "cell_type": "markdown", + "id": "15569b93-3c68-4aac-838c-37112d33987a", + "metadata": { + "id": "15569b93-3c68-4aac-838c-37112d33987a" + }, + "source": [ + "### Environment variables\n", + "\n", + "Set up environment variables\n", + "* UPSTAGE_API_KEY\n", + "\n", + "Optionally, set these environment variables to use [LangSmith](https://docs.smith.langchain.com/) for tracing (shown at the bottom)\n", + "\n", + "```\n", + "LANGCHAIN_TRACING_V2=true\n", + "LANGCHAIN_ENDPOINT=https://api.smith.langchain.com\n", + "LANGCHAIN_API_KEY=YOUR_KEY\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "f18b63c7-d0d3-41c1-ae6b-5a0f1b8ccf0f", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "f18b63c7-d0d3-41c1-ae6b-5a0f1b8ccf0f", + "outputId": "3c89d91b-1b7a-4c73-cbab-8f4cc1391866" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Enter your API Key··········\n", + "Enter your API Key··········\n" + ] + } + ], + "source": [ + "# @title set API key\n", + "from pprint import pprint\n", + "import os\n", + "import getpass\n", + "\n", + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "UPSTAGE_API_KEY = getpass.getpass(\"Enter your API Key\")\n", + "_ = os.environ.setdefault(\"UPSTAGE_API_KEY\", UPSTAGE_API_KEY)\n", + "\n", + "LANGCHAIN_API_KEY = getpass.getpass(\"Enter your API Key\")\n", + "_ = os.environ.setdefault(\"LANGCHAIN_API_KEY\", LANGCHAIN_API_KEY)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8c119b2c-1d07-41a0-95fe-6839754d663f", + "metadata": { + "id": "8c119b2c-1d07-41a0-95fe-6839754d663f" + }, + "outputs": [], + "source": [ + "# @title set API key\n", + "from pprint import pprint\n", + "import os\n", + "\n", + "import warnings\n", + "\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "from IPython import get_ipython\n", + "\n", + "upstage_api_key_env_name = \"UPSTAGE_API_KEY\"\n", + "langchain_api_key_env_name = \"LANGCHAIN_API_KEY\"\n", + "\n", + "\n", + "def load_env():\n", + " if \"google.colab\" in str(get_ipython()):\n", + " # Running in Google Colab\n", + " from google.colab import userdata\n", + "\n", + " upstage_api_key = userdata.get(upstage_api_key_env_name)\n", + " langchain_api_key = userdata.get(langchain_api_key_env_name)\n", + " return os.environ.setdefault(\n", + " \"UPSTAGE_API_KEY\", upstage_api_key\n", + " ), os.environ.setdefault(\"LANGCHAIN_API_KEY\", langchain_api_key)\n", + " else:\n", + " # Running in local Jupyter Notebook\n", + " from dotenv import load_dotenv\n", + "\n", + " load_dotenv()\n", + " return os.environ.get(upstage_api_key_env_name), os.environ.get(\n", + " langchain_api_key_env_name\n", + " )\n", + "\n", + "\n", + "UPSTAGE_API_KEY, LANGCHAIN_API_KEY = load_env()" + ] + }, + { + "cell_type": "markdown", + "id": "2f3b176b", + "metadata": { + "id": "2f3b176b" + }, + "source": [ + "## Retriever\n", + "\n", + "### Prepare a file\n", + "\n", + "This example will be using `docs/Upstage_Solar_DUS.pdf`. You can optionally add more files to the `docs` directory." + ] + }, + { + "cell_type": "markdown", + "id": "a91517f9", + "metadata": { + "id": "a91517f9" + }, + "source": [ + "### Layout analysis\n", + "\n", + "Prepare a function to use the Upstage [UpstageDocumentParseLoader](https://python.langchain.com/docs/integrations/document_loaders/upstage/) for document processing." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "083493e5", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "083493e5", + "outputId": "40d87918-1d34-4675-b102-260e8582e587" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "number of documents: 188\n", + "page_content='

SOLAR 10.7B: Scaling Large Language Models with Simple yet Effective
Depth Up-Scaling

' metadata={'id': 0, 'page': 1, 'category': 'heading1', 'coordinates': [{'x': 0.1194, 'y': 0.0808}, {'x': 0.8793, 'y': 0.0808}, {'x': 0.8793, 'y': 0.1197}, {'x': 0.1194, 'y': 0.1197}]}\n" + ] + } + ], + "source": [ + "from typing import List\n", + "from langchain_core.documents import Document\n", + "from langchain_upstage import UpstageDocumentParseLoader\n", + "\n", + "\n", + "def document_parser(filenames: str) -> List[Document]:\n", + " document_parser_loader = UpstageDocumentParseLoader(filenames, split=\"element\")\n", + " return document_parser_loader.load()\n", + "\n", + "\n", + "# Add more files if you'd like to.\n", + "filenames = [\n", + " \"pdfs/Upstage_Solar_DUS.pdf\",\n", + "]\n", + "\n", + "docs = document_parser(filenames)\n", + "print(f\"number of documents: {len(docs)}\")\n", + "print(docs[0])" + ] + }, + { + "cell_type": "code", + "source": [ + "print(type(docs[0]))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "WDxp7j9t7fst", + "outputId": "084b522c-1a64-4ee8-c46e-103de412894b" + }, + "id": "WDxp7j9t7fst", + "execution_count": 20, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "docs[170]" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "iEHds5HH71Mx", + "outputId": "06bfe001-75c4-4475-ff35-e37c9e9abd63" + }, + "id": "iEHds5HH71Mx", + "execution_count": 44, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Document(metadata={'page': 11, 'id': 10, 'bounding_box': '[{\"x\": 634, \"y\": 462}, {\"x\": 882, \"y\": 462}, {\"x\": 882, \"y\": 490}, {\"x\": 634, \"y\": 490}]', 'category': 'paragraph'}, page_content=\"

B.2 Mixture of Experts

\")" + ] + }, + "metadata": {}, + "execution_count": 44 + } + ] + }, + { + "cell_type": "markdown", + "id": "c27bebdc-be71-4130-ab9d-42f09f87658b", + "metadata": { + "id": "c27bebdc-be71-4130-ab9d-42f09f87658b" + }, + "source": [ + "### Indexing\n", + "\n", + "Let's index the file." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "565a6d44-2c9f-4fff-b1ec-eea05df9350d", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "565a6d44-2c9f-4fff-b1ec-eea05df9350d", + "outputId": "e4902b10-f432-4e34-feec-da6fe4b9050a" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['b0b69a07-b679-42fc-9b80-dc5ae2474c37',\n", + " '1e16829b-9890-4041-b20e-38cbdebbdd01',\n", + " '1b37e95e-cfc7-4f12-bd8e-3762e7593c0d',\n", + " 'a5966b7c-c1a9-404a-b311-6e78b5a5adc8',\n", + " '6d58fe64-30f5-4c7c-bd0b-321d6daceae1',\n", + " 'c68a10f6-76cd-4045-a7c6-5ac02a772ab6',\n", + " '7039ef7f-ab52-4882-b556-f626f9b33521',\n", + " '6bbb762a-5ee7-463e-bda1-b1fecfa48e4c',\n", + " '0a3bb34a-7df4-4964-9577-7032c40f4eb6',\n", + " 'e98ffe2e-0e6f-468e-8cd8-adcb80ad24d8',\n", + " 'bca8e6f3-d37e-4189-a116-ab8c222037ff',\n", + " '62857ac3-2d25-41c8-b152-891810a43d32',\n", + " '3bcdfb66-ea08-4f26-83c0-5a5abf828174',\n", + " '86200454-09c3-46cd-81fa-883a13498304',\n", + " 'a9380c3b-e38d-4811-bd6b-2f38cd008b5e',\n", + " '2ac750a7-98c3-4725-a91c-a2b315d25369',\n", + " 'd987bce0-80c5-409a-8c13-6ca6c187101d',\n", + " '082047bb-aa85-40f6-8c69-4fa187f1ac3c',\n", + " '33449e67-4357-40a8-b2e2-98bf3dac43e8',\n", + " '3c030f5a-f56e-4301-ad23-9aaa9c8242db',\n", + " 'b1915d55-438e-4183-ae7d-b6915c3a6ada',\n", + " '65687031-672e-40ea-b5fa-fac72b51f345',\n", + " '1a23061a-cb4a-4f01-b201-1f15633baf48',\n", + " 'f46114eb-0a96-4ae9-b891-a96ca89a729f',\n", + " '0eb49e55-3360-4a3f-8992-11d8ed1685f5',\n", + " 'edf65d03-0c2e-455d-991c-5bfb06e9a426',\n", + " 'fe6fa6a7-f335-4c45-bdb1-6490a141159f',\n", + " '6c45679d-74fc-4fa8-ac08-f69fd8e2f5f7',\n", + " 'adaf5559-30c3-481b-9b76-32d70438947c',\n", + " '2580d76d-258a-407d-b023-8d39fc3792bc',\n", + " '1065602f-f373-4700-80e7-9fa2d0799447',\n", + " '495d2207-3d9d-47cb-a36f-a83e0d3f1f00',\n", + " 'c1678f84-567d-4936-8e0d-df5b9fa0f4af',\n", + " '8698c6d5-0b9c-41f4-b1bc-bca756097fd6',\n", + " '9fc70ec5-5dc7-445a-acee-dcbe22ae9b58',\n", + " '5ceefeea-1085-4ab1-957e-d048bed04469',\n", + " 'f527dafe-675d-46dc-82fb-92ff6faa1510',\n", + " '0e1cf51e-235d-4004-824b-ac5e8d271295',\n", + " 'f9a6eb1a-4fa0-491f-8320-afd87556f567',\n", + " 'fa2b3e52-fa85-408b-8115-deb3d92b9385',\n", + " 'df5724b8-6c27-4452-bb15-b4b614ebb3c3',\n", + " '532f2042-1586-4fcb-833d-01d262b9694c',\n", + " 'e90e87da-2e02-47f3-862b-a4113cbe2c0a',\n", + " '89c16613-08c4-4c71-a2cd-de0f19f06d21',\n", + " '68ad2959-4c81-48bc-8de3-34b3bb2ef042',\n", + " 'ad4e6ebc-09cd-4494-86d5-7c902f4cc0d1',\n", + " '19907a85-e99c-4fc3-bf3e-0b056d6284ff',\n", + " '62812013-405b-4e61-b34c-209f5a94a8a3',\n", + " '79998fee-3241-4332-b05e-e5c82e4615b0',\n", + " '7e79e94a-d8a7-42a0-ad17-8e3a3191bdaf',\n", + " 'b9aa27bc-53e1-4b8b-8d29-e5ba7f9bd4d7',\n", + " 'f23f2fb5-baaf-4d6b-b77d-f9881d021669',\n", + " '7fb79851-3b0b-4c41-a5d9-b9df24d16a20',\n", + " '62dd3c40-d64c-4688-ad7f-e5071de87f36',\n", + " '1fb6bd03-590f-474a-9d82-d15f21c17034',\n", + " '7e4e36a3-1077-4262-b0a1-34721056f4d4',\n", + " '450ed9a7-7beb-4836-a161-67bde70f52ac',\n", + " 'e476ea7e-ecf2-4fdc-bb10-05737e29cf04',\n", + " 'f5ff0057-3d73-4929-98ed-750a4ef2889c',\n", + " 'e5c179de-4d84-42c1-ae20-c51b9b32559b',\n", + " '098aa268-0591-404a-86d3-e5f3b4955cfe',\n", + " '063f337e-185f-40c1-bbb9-166c890a4e99',\n", + " 'ace3b737-65e1-4818-9c1b-fdd5418011d6',\n", + " '6234b8b7-5f44-489f-9e91-3883280f171d',\n", + " '5d2ee12d-8c04-4fa8-adf3-49cae07b3905',\n", + " 'e35b148a-3ecc-47e0-b4e8-78c03d35cec7',\n", + " 'c7cadbe0-1946-4a7e-a960-83976717dd0f',\n", + " 'eb8b44f0-6bb2-475a-b0a0-7f4a7c6f0070',\n", + " 'b748b20b-6b9e-4b69-b71e-2adc02a7491f',\n", + " '50c1f858-b892-4ffa-8d25-76a03d3211e6',\n", + " '042b1336-3f9e-4de4-bb39-81a4d6fa62f5',\n", + " '8cfaea45-17d8-4ae8-82e2-b01d7d3639be',\n", + " 'b955f4e1-d7ef-4d55-98b5-00dd5184dc42',\n", + " 'b48b03f4-12e0-49f3-ade6-11ff411e4de3',\n", + " 'd9fab8c9-4d30-4d4e-8047-3c65f8ca988c',\n", + " '495f132c-04f2-4bf4-bfe8-f63cd9038308',\n", + " '0e14faf8-7670-4cc6-a7ac-0d1243909e13',\n", + " 'f100f00c-39a0-42f2-8367-8c5c69c77ebd',\n", + " '8856d41a-af96-45ad-8734-5f1cdb66a564',\n", + " '7a6d1d22-0ca6-4eed-b8f6-e8b659f5bea1',\n", + " '2113282a-d856-4e73-89e7-62030ae68f91',\n", + " '6d682586-8611-4f49-82be-e06593404a33',\n", + " 'e3ee4be5-2b74-44b2-92a5-f3292b743982',\n", + " '05ff4931-976f-4c31-bccc-beb477020c51',\n", + " 'aec4953c-2138-4a87-8b3a-60f76904afe4',\n", + " '3c8e4294-a93d-4f4d-9ac3-ec31e7631262',\n", + " '6cef9aac-798d-48f9-a0d9-7e65a1600202',\n", + " 'd4185443-2b01-4442-8c47-79c44a108c61',\n", + " 'b456b694-e8df-4450-8e82-ee4fb3bd2083',\n", + " 'df2ebef6-0976-4704-ab31-fbf836527912',\n", + " 'be9afa4c-d12f-4410-922b-83f53c6e1f32',\n", + " '2079bc74-9e94-41b1-825d-7cd5c0acc9c3',\n", + " '290ffa2e-f86e-4cae-b3e0-6b7a78c04f78',\n", + " '25a4d26e-821f-4e34-bf95-a8e4f897fd30',\n", + " '6eb2d845-358a-41db-a798-9dce5b58cd06',\n", + " '48b30f5d-837a-4bec-a1c8-67d8820acb10',\n", + " 'f6c3153c-1b41-4e2f-b644-96b6099bbd7f',\n", + " 'b239ac5b-db22-4be9-88b4-01bf00ba452e',\n", + " 'a5213500-a4bf-4372-b59f-368c7e7a36a9',\n", + " 'acfb3929-40b3-48ed-853e-3c0273949c9a',\n", + " '8f6d6b8f-dfdd-4c48-9fa1-6f5748685023',\n", + " '872af1ec-f8ff-4c69-8d0e-9bb07f765e78',\n", + " 'cb5c158c-84ab-4fea-8516-f9a0e0e89bf4',\n", + " '39725127-8ca0-4a17-bd93-38c07713cedb',\n", + " 'b9b923c4-8709-4a6e-9f8e-272e0ce8c188',\n", + " 'ad9ae737-4e97-461f-8091-bb6715380f8d',\n", + " 'ad3b4a89-9f5e-4b71-8ab4-2f6e58ad2626',\n", + " '29ab4ef5-c8fd-4c4b-ac6d-033f650b4b9e',\n", + " '82232b1f-20ca-4956-89c4-cd8afcc8d79e',\n", + " 'c89f3088-1f51-47ac-a5b1-d119bf52af2a',\n", + " '41fa8aec-7eeb-4956-9212-7d6b702e79e1',\n", + " 'e24f15da-3e04-4f41-8685-e32c859d7134',\n", + " '5326ea12-f56d-4ef5-8d47-5fd12e64d434',\n", + " 'f4012606-36ad-4428-841a-936c44ecb782',\n", + " 'b80160cf-90e6-4da9-bd3f-06d956d67602',\n", + " 'fc315e67-1a3d-4a65-8909-cc08b6fd1b2d',\n", + " '595a1003-67f6-4e20-ad96-3eb3ca76ae95',\n", + " 'f6c30bdd-6d05-4f8b-9e7e-cc9d1a969835',\n", + " 'c9b341f8-624c-4193-ace2-4b6fd3ab10c9',\n", + " '2e4b8fac-cc5e-482b-b5bb-994453880fcb',\n", + " 'fcecee0f-3fc4-4ac3-811f-21325643ac29',\n", + " 'd5111989-2c8a-4897-9f1e-2d604d1d8b29',\n", + " 'ed8865d8-273c-44ae-a903-ec090740a952',\n", + " 'a57a38e4-383c-4f38-a847-751afd3cba97',\n", + " 'afd6c745-87c0-4fb7-a5f8-afc8406fc2e5',\n", + " '41747ec1-77de-4cac-ab48-61189574cfd1',\n", + " '96532beb-f722-477a-b41d-b8330d4ce062',\n", + " 'ef19044e-dc83-41c1-88ea-2936f54242f8',\n", + " 'd77381c8-f713-4627-874a-b4ccdba3141b',\n", + " '765d1b5f-879e-444c-84af-e51c139537fb',\n", + " '70b72d99-20c5-4bf8-a3e5-697e7351e943',\n", + " 'c38b9344-b40d-4a14-868b-1dc9fe274376',\n", + " '82cee1e0-d04c-40ba-bf06-76d157493ce2',\n", + " '8d42b48b-c545-4c58-8e02-590688d37aa5',\n", + " '974d0c5c-23c8-4d2b-8ea2-b127a88396f6',\n", + " '56a254f9-f47c-4108-9d32-1a814e4f48e4',\n", + " 'f693722e-bb2f-469e-a4a4-0f6d861c999a',\n", + " '414c8915-d680-4d91-b1a0-aa2181dcf40d',\n", + " '677e71f6-8bbb-4be4-9e33-601f7ac217f9',\n", + " '3deffa13-f781-4754-abb0-293be07fc217',\n", + " '17b1ad9d-7d20-43eb-8516-e5ee27cdc08c',\n", + " '8bf6a0ba-b71d-4b6e-a341-c81b561cbbd9',\n", + " '3c70257e-2804-4b65-b828-d37a0d62fe2e',\n", + " '784eaad9-f288-4a31-9d7e-381ec5386a59',\n", + " '422f377f-8f00-4f03-a65f-4db7384deddc',\n", + " 'fa53cfc0-a3e8-47e7-8eb8-b4abfff89831',\n", + " 'bb2c43cc-0127-4287-ba34-7a91b123616f',\n", + " 'eade1de1-94e1-4c12-9033-67fe67806501',\n", + " '9dde2c71-c329-4ad6-a011-6911c3e81e52',\n", + " '83fcd212-625b-4b5c-8821-ec9e5fdbf184',\n", + " 'b1551b3d-1564-422f-b9c2-eb8ae866bd46',\n", + " 'ef3ff7cf-03ab-4575-ad06-d0c854aa01c7',\n", + " '364897de-bb45-4826-88e2-06edf232d639',\n", + " 'adb27974-0aaa-4395-b63e-cdfa5ce4a826',\n", + " 'baac96d0-021f-4227-85c9-c00405cb402c',\n", + " '2cf9c218-4397-48be-8872-e5d2d78701ba',\n", + " '0b8333a3-511e-48cb-98a6-34869e70016d',\n", + " '66450e1c-257c-46ae-b053-84a007475357',\n", + " 'a35cb1ef-3ed1-4f0d-86d8-ff089028e296',\n", + " 'f9fd71cc-b4bd-4f6c-b436-953bbd382afc',\n", + " '37747596-2dd6-4b99-a9ac-6426ca040424',\n", + " '6bd52899-027e-416a-a3c9-1f732f79bc30',\n", + " '486ae60f-5046-4732-8da6-a98985788339',\n", + " 'b66db9f5-eed1-48a2-a0f9-099250811339',\n", + " '3f020fa8-8e6e-401a-8eb7-b403dc4b9f7b',\n", + " '79415279-81e3-4b4e-b7c3-12cd44d250c5',\n", + " '18632ceb-6351-459c-b2e0-966c67d982b8',\n", + " '50ef59c2-025c-434f-b445-d59ac14caf9c',\n", + " 'b1287b18-0bfc-4193-bbe4-93417f0a0d82',\n", + " 'd6693806-f001-487b-8ef1-896d2bbac2d5',\n", + " '0e5f434b-5b30-4fda-9469-d30af17a892c',\n", + " '680624fa-a0c6-45bf-9cbb-797fcd207dd8',\n", + " '6ec12fc1-0687-4f8a-8606-61cdea4a378e',\n", + " 'ec475c0d-03df-493b-a14f-727e382e92da',\n", + " '79ddf21f-6b77-4ef0-99ef-cbb719951adc',\n", + " '7f80c004-e880-4f1a-a99c-d308d4c160ec',\n", + " 'c2e69736-c7e6-449e-8694-2f986eb53236',\n", + " '96026b5e-7196-4f3a-85ca-46992e3feeb4',\n", + " '757198c5-9c14-465d-a337-fac8841d35eb',\n", + " 'b883b009-85fc-4a20-80c7-3f868f19888b',\n", + " '297a92f9-5f69-4836-a69c-e4b2b764cb0d',\n", + " 'd1ea0bcf-f61e-43fc-bd28-6fbd3cae8666',\n", + " '6522dd57-de14-41d5-b567-06771fca6778',\n", + " '6bf03423-c6ff-45e5-8875-eeca1df1833e',\n", + " '88a8fda5-e30e-4d0f-817f-3226ead0f51f',\n", + " 'ead411c5-66d1-47a4-9e19-24e8d99d9c08',\n", + " '636f27d0-2db7-454d-bdf1-03104033f936',\n", + " '24ef54a9-7cb3-4d8b-b7b9-4f8a7189d0ac',\n", + " 'ada3b09f-4fb2-4c94-b6b1-2b9ddc4f34f2',\n", + " '88c7037a-365f-4929-b0e3-f24a56a8c9ab',\n", + " '9af63788-0dd0-4639-a854-0b97797c8ae5',\n", + " 'a9e2578f-c95d-42a1-9bae-94516a126177',\n", + " 'a3ffbae7-847b-435e-abe2-ff33b036443f',\n", + " '5a3627bf-3ae3-477d-8bb8-ddc84200e054',\n", + " '425f0456-b9f4-4ee8-8b8d-27a63bec9535',\n", + " 'd2c76c15-1a13-48ab-9562-9b2ad834dbd6']" + ] + }, + "metadata": {}, + "execution_count": 45 + } + ], + "source": [ + "from langchain_chroma import Chroma\n", + "from langchain_upstage import ChatUpstage, UpstageEmbeddings\n", + "from langchain_core.vectorstores import VectorStore\n", + "\n", + "#Converts complex metadata values into JSON strings\n", + "def convert_complex_metadata(metadata):\n", + " for key, value in metadata.items():\n", + " if isinstance(value, list):\n", + " metadata[key] = str(value)\n", + " return metadata\n", + "\n", + "# Process complex metadata in the list of documents\n", + "for doc in docs:\n", + " doc.metadata = convert_complex_metadata(doc.metadata)\n", + "\n", + "\n", + "db: VectorStore = Chroma(\n", + " embedding_function=UpstageEmbeddings(model=\"solar-embedding-1-large\")\n", + ")\n", + "\n", + "\n", + "retriever = db.as_retriever()\n", + "\n", + "db.add_documents(docs)" + ] + }, + { + "cell_type": "markdown", + "id": "4515a2fa", + "metadata": { + "id": "4515a2fa" + }, + "source": [ + "## Graph State\n", + "Let's first define the LangGraph state." + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "0cd0f18d", + "metadata": { + "id": "0cd0f18d" + }, + "outputs": [], + "source": [ + "from typing import TypedDict\n", + "\n", + "\n", + "class RagState(TypedDict):\n", + " \"\"\"\n", + " Represents the state of our graph.\n", + "\n", + " Attributes:\n", + " context: retrieved context\n", + " question: question asked by the user\n", + " answer: generated answer to the question\n", + " groundedness: groundedness of the assistant's response\n", + " \"\"\"\n", + "\n", + " context: str\n", + " question: str\n", + " answer: str\n", + " groundedness: str" + ] + }, + { + "cell_type": "markdown", + "id": "29c12f74-53e2-43cc-896f-875d1c5d9d93", + "metadata": { + "id": "29c12f74-53e2-43cc-896f-875d1c5d9d93" + }, + "source": [ + "## RAG\n", + "\n", + "Let's prepare RAG pipeline. It uses the Upstage [Solar chat model](https://python.langchain.com/docs/integrations/chat/upstage/)." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "1fafad21-60cc-483e-92a3-6a7edb1838e3", + "metadata": { + "id": "1fafad21-60cc-483e-92a3-6a7edb1838e3" + }, + "outputs": [], + "source": [ + "from langchain_core.output_parsers import StrOutputParser\n", + "from langchain.prompts import ChatPromptTemplate\n", + "\n", + "\n", + "template = \"\"\"Answer the question based only on the given context.\n", + "{context}\n", + "\n", + "Question: {question}\n", + "\"\"\"\n", + "\n", + "prompt = ChatPromptTemplate.from_template(template)\n", + "model = ChatUpstage(model=\"solar-pro\")\n", + "\n", + "# Solar model answer generation, given the context and question\n", + "model_chain = prompt | model | StrOutputParser()\n", + "\n", + "\n", + "def format_documents(docs: List[Document]) -> str:\n", + " return \"\\n\".join([doc.page_content for doc in docs])\n", + "\n", + "\n", + "def retrieve(state: RagState) -> RagState:\n", + " docs = retriever.invoke(state[\"question\"])\n", + " context = format_documents(docs)\n", + " return RagState(context=context)\n", + "\n", + "\n", + "def model_answer(state: RagState) -> RagState:\n", + " response = model_chain.invoke(state)\n", + " return RagState(answer=response)" + ] + }, + { + "cell_type": "markdown", + "id": "5a15cc11", + "metadata": { + "id": "5a15cc11" + }, + "source": [ + "Now, let's prepare a logic for using Upstage [Groundedness Check](https://python.langchain.com/docs/integrations/tools/upstage_groundedness_check/)." + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "41bd25eb", + "metadata": { + "id": "41bd25eb" + }, + "outputs": [], + "source": [ + "from langchain_upstage import GroundednessCheck\n", + "\n", + "gc = GroundednessCheck()\n", + "\n", + "\n", + "def groundedness_check(state: RagState) -> RagState:\n", + " response = gc.run({\"context\": state[\"context\"], \"answer\": state[\"answer\"]})\n", + " return RagState(groundedness=response)\n", + "\n", + "\n", + "def groundedness_condition(state: RagState) -> RagState:\n", + " return state[\"groundedness\"]" + ] + }, + { + "cell_type": "markdown", + "id": "61cd5797-1782-4d78-a277-8196d13f3e1b", + "metadata": { + "id": "61cd5797-1782-4d78-a277-8196d13f3e1b" + }, + "source": [ + "## Build Graph\n", + "\n", + "Finally, let's put everything together and build the graph! The graph looks like the following.\n", + "\n", + "![download2.png](data:image/png;base64,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)" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "0e09ca9f-e36d-4ef4-a0d5-79fdbada9fe0", + "metadata": { + "id": "0e09ca9f-e36d-4ef4-a0d5-79fdbada9fe0" + }, + "outputs": [], + "source": [ + "from langgraph.graph import END, StateGraph\n", + "\n", + "workflow = StateGraph(RagState)\n", + "workflow.add_node(\"retrieve\", retrieve)\n", + "workflow.add_node(\"model\", model_answer)\n", + "workflow.add_node(\"groundedness_check\", groundedness_check)\n", + "\n", + "workflow.add_edge(\"retrieve\", \"model\")\n", + "workflow.add_edge(\"model\", \"groundedness_check\")\n", + "workflow.add_conditional_edges(\n", + " \"groundedness_check\",\n", + " groundedness_condition,\n", + " {\n", + " \"grounded\": END,\n", + " \"notGrounded\": \"model\",\n", + " \"notSure\": \"model\",\n", + " },\n", + ")\n", + "workflow.set_entry_point(\"retrieve\")\n", + "\n", + "app = workflow.compile()" + ] + }, + { + "cell_type": "markdown", + "id": "86b7c942", + "metadata": { + "id": "86b7c942" + }, + "source": [ + "## Running the graph\n", + "\n", + "Let's now test the graph." + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "fb69dbb9-91ee-4868-8c3c-93af3cd885be", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fb69dbb9-91ee-4868-8c3c-93af3cd885be", + "outputId": "7c0ec050-6097-49fc-e389-ff29444b7928" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Node 'retrieve':{'context': \"

Additionally, we ensure that SOLAR complies
with general ethical considerations in all aspects
of its operation. This includes adherence to pri-
vacy norms, respect for intellectual property, and
ensuring the absence of bias in our algorithms. Our
commitment to these ethical principles is unwaver-
ing, and we believe it significantly contributes to
the credibility and societal acceptance of SOLAR.

\\n

Additionally, we ensure that SOLAR complies
with general ethical considerations in all aspects
of its operation. This includes adherence to pri-
vacy norms, respect for intellectual property, and
ensuring the absence of bias in our algorithms. Our
commitment to these ethical principles is unwaver-
ing, and we believe it significantly contributes to
the credibility and societal acceptance of SOLAR.

\\n

Additionally, we ensure that SOLAR complies
with general ethical considerations in all aspects
of its operation. This includes adherence to pri-
vacy norms, respect for intellectual property, and
ensuring the absence of bias in our algorithms. Our
commitment to these ethical principles is unwaver-
ing, and we believe it significantly contributes to
the credibility and societal acceptance of SOLAR.

\\n

In conclusion, the ethical framework within
which SOLAR operates is robust and comprehen-
sive, ensuring that our advancements in this field
are not only scientifically sound but also ethically
responsible.

\"}\n", + "\n", + "---\n", + "\n", + "Node 'model':{'answer': \"Based on the given context, Solar is a system or entity that operates in a field that requires algorithms and complies with general ethical considerations in all aspects of its operation. Its ethical framework includes adherence to privacy norms, respect for intellectual property, and ensuring the absence of bias in its algorithms. The context does not provide further details about Solar's specific nature or the field it operates in.\"}\n", + "\n", + "---\n", + "\n", + "Node 'groundedness_check':{'groundedness': 'grounded'}\n", + "\n", + "---\n", + "\n" + ] + } + ], + "source": [ + "inputs = {\"question\": \"What is Solar?\"}\n", + "for output in app.stream(inputs):\n", + " for key, value in output.items():\n", + " print(f\"Node '{key}':{value}\")\n", + " print(\"\\n---\\n\")" + ] + }, + { + "cell_type": "markdown", + "id": "548f1c5b-4108-4aae-8abb-ec171b511b92", + "metadata": { + "id": "548f1c5b-4108-4aae-8abb-ec171b511b92" + }, + "source": [ + "LangSmith Traces -\n", + "\n", + "* https://smith.langchain.com/public/5ce3f275-b93b-48d1-a718-88139ae2e00b/r" + ] } - }, - "cell_type": "markdown", - "id": "919fe33c-0149-4f7d-b200-544a18986c9a", - "metadata": {}, - "source": [ - "# Upstage Self-RAG\n", - "\n", - "Self-RAG is a strategy for RAG that incorperates [self-reflection / self-grading on retrieved documents and generations](https://blog.langchain.dev/agentic-rag-with-langgraph/). It leverages LLM to make decisions in the answer generation steps, hence improves quality of the final answer. \n", - "\n", - "See [Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection](https://arxiv.org/abs/2310.11511) paper for more detailed information.\n", - "\n", - "In this example, we will implement some of these ideas. With [Upstage integrations](https://python.langchain.com/docs/integrations/providers/upstage/) and [LangGraph](https://python.langchain.com/docs/langgraph), you can achieve this with just a few additional lines of code. Particularly, it uses Upstage Solar Mini chat model, Embeddings model, Layout Analysis for document understanding and retrieval, and Groundedness Check for verifying the generative model's response. \n", - "\n", - "![image.png](attachment:image.png)" - ] - }, - { - "cell_type": "markdown", - "id": "72f3ee57-68ab-4040-bd36-4014e2a23d96", - "metadata": {}, - "source": [ - "## Environment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a384cc48-0425-4e8f-aafc-cfb8e56025c9", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install -qU langchain-core langchain-upstage langchain-chroma langchain langgraph\n", - "!pip install -qU python-dotenv" - ] - }, - { - "cell_type": "markdown", - "id": "15569b93-3c68-4aac-838c-37112d33987a", - "metadata": {}, - "source": [ - "### Environment variables\n", - "\n", - "Set up environment variables \n", - "* UPSTAGE_API_KEY\n", - "\n", - "Optionally, set these environment variables to use [LangSmith](https://docs.smith.langchain.com/) for tracing (shown at the bottom)\n", - "\n", - "```\n", - "LANGCHAIN_TRACING_V2=true\n", - "LANGCHAIN_ENDPOINT=https://api.smith.langchain.com\n", - "LANGCHAIN_API_KEY=YOUR_KEY\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "f18b63c7-d0d3-41c1-ae6b-5a0f1b8ccf0f", - "metadata": {}, - "outputs": [], - "source": [ - "# @title set API key\n", - "from pprint import pprint\n", - "import os\n", - "import getpass\n", - "\n", - "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")\n", - "\n", - "UPSTAGE_API_KEY = getpass.getpass(\"Enter your API Key\")\n", - "_ = os.environ.setdefault(\"UPSTAGE_API_KEY\", UPSTAGE_API_KEY)\n", - "\n", - "LANGCHAIN_API_KEY = getpass.getpass(\"Enter your API Key\")\n", - "_ = os.environ.setdefault(\"LANGCHAIN_API_KEY\", LANGCHAIN_API_KEY)" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "8c119b2c-1d07-41a0-95fe-6839754d663f", - "metadata": {}, - "outputs": [], - "source": [ - "# @title set API key\n", - "from pprint import pprint\n", - "import os\n", - "\n", - "import warnings\n", - "\n", - "warnings.filterwarnings(\"ignore\")\n", - "\n", - "from IPython import get_ipython\n", - "\n", - "upstage_api_key_env_name = \"UPSTAGE_API_KEY\"\n", - "langchain_api_key_env_name = \"LANGCHAIN_API_KEY\"\n", - "\n", - "\n", - "def load_env():\n", - " if \"google.colab\" in str(get_ipython()):\n", - " # Running in Google Colab\n", - " from google.colab import userdata\n", - "\n", - " upstage_api_key = userdata.get(upstage_api_key_env_name)\n", - " langchain_api_key = userdata.get(langchain_api_key_env_name)\n", - " return os.environ.setdefault(\n", - " \"UPSTAGE_API_KEY\", upstage_api_key\n", - " ), os.environ.setdefault(\"LANGCHAIN_API_KEY\", langchain_api_key)\n", - " else:\n", - " # Running in local Jupyter Notebook\n", - " from dotenv import load_dotenv\n", - "\n", - " load_dotenv()\n", - " return os.environ.get(upstage_api_key_env_name), os.environ.get(\n", - " langchain_api_key_env_name\n", - " )\n", - "\n", - "\n", - "UPSTAGE_API_KEY, LANGCHAIN_API_KEY = load_env()" - ] - }, - { - "cell_type": "markdown", - "id": "2f3b176b", - "metadata": {}, - "source": [ - "## Retriever\n", - "\n", - "### Prepare a file\n", - "\n", - "This example will be using `docs/Upstage_Solar_DUS.pdf`. You can optionally add more files to the `docs` directory." - ] - }, - { - "cell_type": "markdown", - "id": "a91517f9", - "metadata": {}, - "source": [ - "### Layout analysis\n", - "\n", - "Prepare a function to use the Upstage [Layout Analysis](https://python.langchain.com/docs/integrations/document_loaders/upstage/) for document processing." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "083493e5", - "metadata": {}, - "outputs": [], - "source": [ - "from typing import List\n", - "from langchain_core.documents import Document\n", - "from langchain_upstage import UpstageLayoutAnalysisLoader\n", - "\n", - "\n", - "def layout_analysis(filenames: str) -> List[Document]:\n", - " layout_analysis_loader = UpstageLayoutAnalysisLoader(filenames, split=\"element\")\n", - " return layout_analysis_loader.load()\n", - "\n", - "\n", - "# Add more files if you'd like to.\n", - "filenames = [\n", - " \"pdfs/Upstage_Solar_DUS.pdf\",\n", - "]\n", - "\n", - "docs = layout_analysis(filenames)\n", - "print(f\"number of documents: {len(docs)}\")\n", - "print(docs[0])" - ] - }, - { - "cell_type": "markdown", - "id": "c27bebdc-be71-4130-ab9d-42f09f87658b", - "metadata": {}, - "source": [ - "### Indexing\n", - "\n", - "Let's index the file." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "565a6d44-2c9f-4fff-b1ec-eea05df9350d", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain_chroma import Chroma\n", - "from langchain_upstage import ChatUpstage, UpstageEmbeddings\n", - "from langchain_core.vectorstores import VectorStore\n", - "\n", - "db: VectorStore = Chroma(\n", - " embedding_function=UpstageEmbeddings(model=\"solar-embedding-1-large\")\n", - ")\n", - "retriever = db.as_retriever()\n", - "db.add_documents(docs)" - ] - }, - { - "cell_type": "markdown", - "id": "4515a2fa", - "metadata": {}, - "source": [ - "## Graph State\n", - "Let's first define the LangGraph state." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0cd0f18d", - "metadata": {}, - "outputs": [], - "source": [ - "from typing import TypedDict\n", - "\n", - "\n", - "class RagState(TypedDict):\n", - " \"\"\"\n", - " Represents the state of our graph.\n", - "\n", - " Attributes:\n", - " context: retrieved context\n", - " question: question asked by the user\n", - " answer: generated answer to the question\n", - " groundedness: groundedness of the assistant's response\n", - " \"\"\"\n", - "\n", - " context: str\n", - " question: str\n", - " answer: str\n", - " groundedness: str" - ] - }, - { - "cell_type": "markdown", - "id": "29c12f74-53e2-43cc-896f-875d1c5d9d93", - "metadata": {}, - "source": [ - "## RAG\n", - "\n", - "Let's prepare RAG pipeline. It uses the Upstage [Solar chat model](https://python.langchain.com/docs/integrations/chat/upstage/)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "1fafad21-60cc-483e-92a3-6a7edb1838e3", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain_core.output_parsers import StrOutputParser\n", - "from langchain.prompts import ChatPromptTemplate\n", - "\n", - "\n", - "template = \"\"\"Answer the question based only on the given context.\n", - "{context}\n", - "\n", - "Question: {question}\n", - "\"\"\"\n", - "\n", - "prompt = ChatPromptTemplate.from_template(template)\n", - "model = ChatUpstage()\n", - "\n", - "# Solar model answer generation, given the context and question\n", - "model_chain = prompt | model | StrOutputParser()\n", - "\n", - "\n", - "def format_documents(docs: List[Document]) -> str:\n", - " return \"\\n\".join([doc.page_content for doc in docs])\n", - "\n", - "\n", - "def retrieve(state: RagState) -> RagState:\n", - " docs = retriever.invoke(state[\"question\"])\n", - " context = format_documents(docs)\n", - " return RagState(context=context)\n", - "\n", - "\n", - "def model_answer(state: RagState) -> RagState:\n", - " response = model_chain.invoke(state)\n", - " return RagState(answer=response)" - ] - }, - { - "cell_type": "markdown", - "id": "5a15cc11", - "metadata": {}, - "source": [ - "Now, let's prepare a logic for using Upstage [Groundedness Check](https://python.langchain.com/docs/integrations/tools/upstage_groundedness_check/)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "41bd25eb", - "metadata": {}, - "outputs": [], - "source": [ - "from langchain_upstage import GroundednessCheck\n", - "\n", - "gc = GroundednessCheck()\n", - "\n", - "\n", - "def groundedness_check(state: RagState) -> RagState:\n", - " response = gc.run({\"context\": state[\"context\"], \"answer\": state[\"answer\"]})\n", - " return RagState(groundedness=response)\n", - "\n", - "\n", - "def groundedness_condition(state: RagState) -> RagState:\n", - " return state[\"groundedness\"]" - ] - }, - { - "attachments": { - "image.png": { - "image/png": "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" + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + }, + "colab": { + "provenance": [] } - }, - "cell_type": "markdown", - "id": "61cd5797-1782-4d78-a277-8196d13f3e1b", - "metadata": {}, - "source": [ - "## Build Graph\n", - "\n", - "Finally, let's put everything together and build the graph! The graph looks like the following.\n", - "\n", - "![image.png](attachment:image.png)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0e09ca9f-e36d-4ef4-a0d5-79fdbada9fe0", - "metadata": {}, - "outputs": [], - "source": [ - "from langgraph.graph import END, StateGraph\n", - "\n", - "workflow = StateGraph(RagState)\n", - "workflow.add_node(\"retrieve\", retrieve)\n", - "workflow.add_node(\"model\", model_answer)\n", - "workflow.add_node(\"groundedness_check\", groundedness_check)\n", - "\n", - "workflow.add_edge(\"retrieve\", \"model\")\n", - "workflow.add_edge(\"model\", \"groundedness_check\")\n", - "workflow.add_conditional_edges(\n", - " \"groundedness_check\",\n", - " groundedness_condition,\n", - " {\n", - " \"grounded\": END,\n", - " \"notGrounded\": \"model\",\n", - " \"notSure\": \"model\",\n", - " },\n", - ")\n", - "workflow.set_entry_point(\"retrieve\")\n", - "\n", - "app = workflow.compile()" - ] - }, - { - "cell_type": "markdown", - "id": "86b7c942", - "metadata": {}, - "source": [ - "## Running the graph\n", - "\n", - "Let's now test the graph." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "fb69dbb9-91ee-4868-8c3c-93af3cd885be", - "metadata": {}, - "outputs": [], - "source": [ - "inputs = {\"question\": \"What is Solar?\"}\n", - "for output in app.stream(inputs):\n", - " for key, value in output.items():\n", - " print(f\"Node '{key}':{value}\")\n", - " print(\"\\n---\\n\")" - ] - }, - { - "cell_type": "markdown", - "id": "548f1c5b-4108-4aae-8abb-ec171b511b92", - "metadata": {}, - "source": [ - "LangSmith Traces - \n", - "\n", - "* https://smith.langchain.com/public/5ce3f275-b93b-48d1-a718-88139ae2e00b/r" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.13" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} + "nbformat": 4, + "nbformat_minor": 5 +} \ No newline at end of file