├── data └── input.py ├── app ├── utils │ └── llm.py └── mentalhealthagent │ └── mentalhealthagent.py ├── requirements.txt ├── Readme.md └── test_poc └── Sample_Poc_structure_using_LangGraph.ipynb /data/input.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/utils/llm.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/mentalhealthagent/mentalhealthagent.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | #mental Health chatbot project 2 | 3 | ## Setting Up the Environment 4 | 5 | To set up the environment for the LangChain-based agentic project, follow these steps: 6 | 7 | ### Prerequisites 8 | - Python 3.8 or higher 9 | - `pip` (Python package installer) 10 | 11 | ### Steps 12 | 13 | 1. **Clone the Repository**: 14 | ```bash 15 | git clone https://github.com/your-repo/gentic-based-Mental-Health-chatbot-using-Langchain-workflows.git 16 | cd gentic-based-Mental-Health-chatbot-using-Langchain-workflows 17 | ``` 18 | 19 | 2. **Create a Virtual Environment**: 20 | ```bash 21 | python -m venv env 22 | source env/bin/activate # On Windows, use `env\Scripts\activate` 23 | ``` 24 | 25 | 3. **Install Dependencies**: 26 | ```bash 27 | pip install -r requirements.txt 28 | ``` 29 | 30 | 4. **Run the Application**: 31 | ```bash 32 | python main.py 33 | ``` 34 | 35 | 5. **Deactivate the Environment**: 36 | When you're done, deactivate the virtual environment: 37 | ```bash 38 | deactivate 39 | ``` 40 | 41 | ### Notes 42 | - Ensure all dependencies in `requirements.txt` are installed properly. 43 | - Update the `requirements.txt` file if additional packages are needed. 44 | -------------------------------------------------------------------------------- /test_poc/Sample_Poc_structure_using_LangGraph.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "colab": { 8 | "base_uri": "https://localhost:8080/" 9 | }, 10 | "id": "92uCzetE3HpQ", 11 | "outputId": "79a18722-cf07-4f17-d468-fe3a2572f1e9" 12 | }, 13 | "outputs": [ 14 | { 15 | "output_type": "stream", 16 | "name": "stdout", 17 | "text": [ 18 | "Requirement already satisfied: langchain in /usr/local/lib/python3.11/dist-packages (0.3.23)\n", 19 | "Collecting langgraph\n", 20 | " Downloading langgraph-0.3.28-py3-none-any.whl.metadata (7.7 kB)\n", 21 | "Collecting langchain_community\n", 22 | " Downloading langchain_community-0.3.21-py3-none-any.whl.metadata (2.4 kB)\n", 23 | "Collecting langchain_huggingface\n", 24 | " Downloading langchain_huggingface-0.1.2-py3-none-any.whl.metadata (1.3 kB)\n", 25 | "Collecting chromadb\n", 26 | " Downloading chromadb-1.0.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.9 kB)\n", 27 | "Requirement already satisfied: transformers in /usr/local/lib/python3.11/dist-packages (4.50.3)\n", 28 | "Requirement already satisfied: langchain-core<1.0.0,>=0.3.51 in /usr/local/lib/python3.11/dist-packages (from langchain) (0.3.51)\n", 29 | "Requirement already satisfied: langchain-text-splitters<1.0.0,>=0.3.8 in /usr/local/lib/python3.11/dist-packages (from langchain) (0.3.8)\n", 30 | "Requirement already satisfied: langsmith<0.4,>=0.1.17 in /usr/local/lib/python3.11/dist-packages (from langchain) (0.3.24)\n", 31 | "Requirement already satisfied: pydantic<3.0.0,>=2.7.4 in /usr/local/lib/python3.11/dist-packages (from langchain) (2.11.2)\n", 32 | "Requirement already satisfied: SQLAlchemy<3,>=1.4 in /usr/local/lib/python3.11/dist-packages (from langchain) (2.0.40)\n", 33 | "Requirement already satisfied: requests<3,>=2 in /usr/local/lib/python3.11/dist-packages (from langchain) (2.32.3)\n", 34 | "Requirement already satisfied: PyYAML>=5.3 in /usr/local/lib/python3.11/dist-packages (from langchain) (6.0.2)\n", 35 | "Collecting langgraph-checkpoint<3.0.0,>=2.0.10 (from langgraph)\n", 36 | " Downloading langgraph_checkpoint-2.0.24-py3-none-any.whl.metadata (4.6 kB)\n", 37 | "Collecting langgraph-prebuilt<0.2,>=0.1.1 (from langgraph)\n", 38 | " Downloading langgraph_prebuilt-0.1.8-py3-none-any.whl.metadata (5.0 kB)\n", 39 | "Collecting langgraph-sdk<0.2.0,>=0.1.42 (from langgraph)\n", 40 | " Downloading langgraph_sdk-0.1.61-py3-none-any.whl.metadata (1.8 kB)\n", 41 | "Collecting xxhash<4.0.0,>=3.5.0 (from langgraph)\n", 42 | " Downloading xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (12 kB)\n", 43 | "Requirement already satisfied: aiohttp<4.0.0,>=3.8.3 in /usr/local/lib/python3.11/dist-packages (from langchain_community) (3.11.15)\n", 44 | "Requirement already satisfied: tenacity!=8.4.0,<10,>=8.1.0 in /usr/local/lib/python3.11/dist-packages (from langchain_community) (9.1.2)\n", 45 | "Collecting dataclasses-json<0.7,>=0.5.7 (from langchain_community)\n", 46 | " Downloading dataclasses_json-0.6.7-py3-none-any.whl.metadata (25 kB)\n", 47 | "Collecting pydantic-settings<3.0.0,>=2.4.0 (from langchain_community)\n", 48 | " Downloading pydantic_settings-2.8.1-py3-none-any.whl.metadata (3.5 kB)\n", 49 | "Collecting httpx-sse<1.0.0,>=0.4.0 (from langchain_community)\n", 50 | " Downloading httpx_sse-0.4.0-py3-none-any.whl.metadata (9.0 kB)\n", 51 | "Requirement already satisfied: numpy<3,>=1.26.2 in /usr/local/lib/python3.11/dist-packages (from langchain_community) (2.0.2)\n", 52 | "Requirement already satisfied: huggingface-hub>=0.23.0 in /usr/local/lib/python3.11/dist-packages (from langchain_huggingface) (0.30.1)\n", 53 | "Requirement already satisfied: sentence-transformers>=2.6.0 in /usr/local/lib/python3.11/dist-packages (from langchain_huggingface) (3.4.1)\n", 54 | "Requirement already satisfied: tokenizers>=0.19.1 in /usr/local/lib/python3.11/dist-packages (from langchain_huggingface) (0.21.1)\n", 55 | "Collecting build>=1.0.3 (from chromadb)\n", 56 | " Downloading build-1.2.2.post1-py3-none-any.whl.metadata (6.5 kB)\n", 57 | "Collecting chroma-hnswlib==0.7.6 (from chromadb)\n", 58 | " Downloading chroma_hnswlib-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (252 bytes)\n", 59 | "Collecting fastapi==0.115.9 (from chromadb)\n", 60 | " Downloading fastapi-0.115.9-py3-none-any.whl.metadata (27 kB)\n", 61 | "Collecting uvicorn>=0.18.3 (from uvicorn[standard]>=0.18.3->chromadb)\n", 62 | " Downloading uvicorn-0.34.0-py3-none-any.whl.metadata (6.5 kB)\n", 63 | "Collecting posthog>=2.4.0 (from chromadb)\n", 64 | " Downloading posthog-3.24.0-py2.py3-none-any.whl.metadata (3.0 kB)\n", 65 | "Requirement already satisfied: typing-extensions>=4.5.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (4.13.1)\n", 66 | "Collecting onnxruntime>=1.14.1 (from chromadb)\n", 67 | " Downloading onnxruntime-1.21.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.metadata (4.5 kB)\n", 68 | "Requirement already satisfied: opentelemetry-api>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (1.31.1)\n", 69 | "Collecting opentelemetry-exporter-otlp-proto-grpc>=1.2.0 (from chromadb)\n", 70 | " Downloading opentelemetry_exporter_otlp_proto_grpc-1.32.0-py3-none-any.whl.metadata (2.5 kB)\n", 71 | "Collecting opentelemetry-instrumentation-fastapi>=0.41b0 (from chromadb)\n", 72 | " Downloading opentelemetry_instrumentation_fastapi-0.53b0-py3-none-any.whl.metadata (2.2 kB)\n", 73 | "Requirement already satisfied: opentelemetry-sdk>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (1.31.1)\n", 74 | "Collecting pypika>=0.48.9 (from chromadb)\n", 75 | " Downloading PyPika-0.48.9.tar.gz (67 kB)\n", 76 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m67.3/67.3 kB\u001b[0m \u001b[31m5.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 77 | "\u001b[?25h Installing build dependencies ... \u001b[?25l\u001b[?25hdone\n", 78 | " Getting requirements to build wheel ... \u001b[?25l\u001b[?25hdone\n", 79 | " Preparing metadata (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", 80 | "Requirement already satisfied: tqdm>=4.65.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (4.67.1)\n", 81 | "Collecting overrides>=7.3.1 (from chromadb)\n", 82 | " Downloading overrides-7.7.0-py3-none-any.whl.metadata (5.8 kB)\n", 83 | "Requirement already satisfied: importlib-resources in /usr/local/lib/python3.11/dist-packages (from chromadb) (6.5.2)\n", 84 | "Requirement already satisfied: grpcio>=1.58.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (1.71.0)\n", 85 | "Collecting bcrypt>=4.0.1 (from chromadb)\n", 86 | " Downloading bcrypt-4.3.0-cp39-abi3-manylinux_2_34_x86_64.whl.metadata (10 kB)\n", 87 | "Requirement already satisfied: typer>=0.9.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (0.15.2)\n", 88 | "Collecting kubernetes>=28.1.0 (from chromadb)\n", 89 | " Downloading kubernetes-32.0.1-py2.py3-none-any.whl.metadata (1.7 kB)\n", 90 | "Collecting mmh3>=4.0.1 (from chromadb)\n", 91 | " Downloading mmh3-5.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (16 kB)\n", 92 | "Requirement already satisfied: orjson>=3.9.12 in /usr/local/lib/python3.11/dist-packages (from chromadb) (3.10.16)\n", 93 | "Requirement already satisfied: httpx>=0.27.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (0.28.1)\n", 94 | "Requirement already satisfied: rich>=10.11.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (13.9.4)\n", 95 | "Requirement already satisfied: jsonschema>=4.19.0 in /usr/local/lib/python3.11/dist-packages (from chromadb) (4.23.0)\n", 96 | "Collecting starlette<0.46.0,>=0.40.0 (from fastapi==0.115.9->chromadb)\n", 97 | " Downloading starlette-0.45.3-py3-none-any.whl.metadata (6.3 kB)\n", 98 | "Requirement already satisfied: filelock in /usr/local/lib/python3.11/dist-packages (from transformers) (3.18.0)\n", 99 | "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.11/dist-packages (from transformers) (24.2)\n", 100 | "Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.11/dist-packages (from transformers) (2024.11.6)\n", 101 | "Requirement already satisfied: safetensors>=0.4.3 in /usr/local/lib/python3.11/dist-packages (from transformers) (0.5.3)\n", 102 | "Requirement already satisfied: aiohappyeyeballs>=2.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain_community) (2.6.1)\n", 103 | "Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain_community) (1.3.2)\n", 104 | "Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain_community) (25.3.0)\n", 105 | "Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain_community) (1.5.0)\n", 106 | "Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain_community) (6.3.2)\n", 107 | "Requirement already satisfied: propcache>=0.2.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain_community) (0.3.1)\n", 108 | "Requirement already satisfied: yarl<2.0,>=1.17.0 in /usr/local/lib/python3.11/dist-packages (from aiohttp<4.0.0,>=3.8.3->langchain_community) (1.18.3)\n", 109 | "Collecting pyproject_hooks (from build>=1.0.3->chromadb)\n", 110 | " Downloading pyproject_hooks-1.2.0-py3-none-any.whl.metadata (1.3 kB)\n", 111 | "Collecting marshmallow<4.0.0,>=3.18.0 (from dataclasses-json<0.7,>=0.5.7->langchain_community)\n", 112 | " Downloading marshmallow-3.26.1-py3-none-any.whl.metadata (7.3 kB)\n", 113 | "Collecting typing-inspect<1,>=0.4.0 (from dataclasses-json<0.7,>=0.5.7->langchain_community)\n", 114 | " Downloading typing_inspect-0.9.0-py3-none-any.whl.metadata (1.5 kB)\n", 115 | "Requirement already satisfied: anyio in /usr/local/lib/python3.11/dist-packages (from httpx>=0.27.0->chromadb) (4.9.0)\n", 116 | "Requirement already satisfied: certifi in /usr/local/lib/python3.11/dist-packages (from httpx>=0.27.0->chromadb) (2025.1.31)\n", 117 | "Requirement already satisfied: httpcore==1.* in /usr/local/lib/python3.11/dist-packages (from httpx>=0.27.0->chromadb) (1.0.7)\n", 118 | "Requirement already satisfied: idna in /usr/local/lib/python3.11/dist-packages (from httpx>=0.27.0->chromadb) (3.10)\n", 119 | "Requirement already satisfied: h11<0.15,>=0.13 in /usr/local/lib/python3.11/dist-packages (from httpcore==1.*->httpx>=0.27.0->chromadb) (0.14.0)\n", 120 | "Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.11/dist-packages (from huggingface-hub>=0.23.0->langchain_huggingface) (2025.3.2)\n", 121 | "Requirement already satisfied: jsonschema-specifications>=2023.03.6 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=4.19.0->chromadb) (2024.10.1)\n", 122 | "Requirement already satisfied: referencing>=0.28.4 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=4.19.0->chromadb) (0.36.2)\n", 123 | "Requirement already satisfied: rpds-py>=0.7.1 in /usr/local/lib/python3.11/dist-packages (from jsonschema>=4.19.0->chromadb) (0.24.0)\n", 124 | "Requirement already satisfied: six>=1.9.0 in /usr/local/lib/python3.11/dist-packages (from kubernetes>=28.1.0->chromadb) (1.17.0)\n", 125 | "Requirement already satisfied: python-dateutil>=2.5.3 in /usr/local/lib/python3.11/dist-packages (from kubernetes>=28.1.0->chromadb) (2.8.2)\n", 126 | "Requirement already satisfied: google-auth>=1.0.1 in /usr/local/lib/python3.11/dist-packages (from kubernetes>=28.1.0->chromadb) (2.38.0)\n", 127 | "Requirement already satisfied: websocket-client!=0.40.0,!=0.41.*,!=0.42.*,>=0.32.0 in /usr/local/lib/python3.11/dist-packages (from kubernetes>=28.1.0->chromadb) (1.8.0)\n", 128 | "Requirement already satisfied: requests-oauthlib in /usr/local/lib/python3.11/dist-packages (from kubernetes>=28.1.0->chromadb) (2.0.0)\n", 129 | "Requirement already satisfied: oauthlib>=3.2.2 in /usr/local/lib/python3.11/dist-packages (from kubernetes>=28.1.0->chromadb) (3.2.2)\n", 130 | "Requirement already satisfied: urllib3>=1.24.2 in /usr/local/lib/python3.11/dist-packages (from kubernetes>=28.1.0->chromadb) (2.3.0)\n", 131 | "Collecting durationpy>=0.7 (from kubernetes>=28.1.0->chromadb)\n", 132 | " Downloading durationpy-0.9-py3-none-any.whl.metadata (338 bytes)\n", 133 | "Requirement already satisfied: jsonpatch<2.0,>=1.33 in /usr/local/lib/python3.11/dist-packages (from langchain-core<1.0.0,>=0.3.51->langchain) (1.33)\n", 134 | "Collecting ormsgpack<2.0.0,>=1.8.0 (from langgraph-checkpoint<3.0.0,>=2.0.10->langgraph)\n", 135 | " Downloading ormsgpack-1.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (43 kB)\n", 136 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.5/43.5 kB\u001b[0m \u001b[31m3.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 137 | "\u001b[?25hRequirement already satisfied: requests-toolbelt<2.0.0,>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from langsmith<0.4,>=0.1.17->langchain) (1.0.0)\n", 138 | "Requirement already satisfied: zstandard<0.24.0,>=0.23.0 in /usr/local/lib/python3.11/dist-packages (from langsmith<0.4,>=0.1.17->langchain) (0.23.0)\n", 139 | "Collecting coloredlogs (from onnxruntime>=1.14.1->chromadb)\n", 140 | " Downloading coloredlogs-15.0.1-py2.py3-none-any.whl.metadata (12 kB)\n", 141 | "Requirement already satisfied: flatbuffers in /usr/local/lib/python3.11/dist-packages (from onnxruntime>=1.14.1->chromadb) (25.2.10)\n", 142 | "Requirement already satisfied: protobuf in /usr/local/lib/python3.11/dist-packages (from onnxruntime>=1.14.1->chromadb) (5.29.4)\n", 143 | "Requirement already satisfied: sympy in /usr/local/lib/python3.11/dist-packages (from onnxruntime>=1.14.1->chromadb) (1.13.1)\n", 144 | "Requirement already satisfied: deprecated>=1.2.6 in /usr/local/lib/python3.11/dist-packages (from opentelemetry-api>=1.2.0->chromadb) (1.2.18)\n", 145 | "Requirement already satisfied: importlib-metadata<8.7.0,>=6.0 in /usr/local/lib/python3.11/dist-packages (from opentelemetry-api>=1.2.0->chromadb) (8.6.1)\n", 146 | "Requirement already satisfied: googleapis-common-protos~=1.52 in /usr/local/lib/python3.11/dist-packages (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb) (1.69.2)\n", 147 | "Collecting opentelemetry-exporter-otlp-proto-common==1.32.0 (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb)\n", 148 | " Downloading opentelemetry_exporter_otlp_proto_common-1.32.0-py3-none-any.whl.metadata (1.9 kB)\n", 149 | "Collecting opentelemetry-proto==1.32.0 (from opentelemetry-exporter-otlp-proto-grpc>=1.2.0->chromadb)\n", 150 | " Downloading opentelemetry_proto-1.32.0-py3-none-any.whl.metadata (2.4 kB)\n", 151 | "Collecting opentelemetry-sdk>=1.2.0 (from chromadb)\n", 152 | " Downloading opentelemetry_sdk-1.32.0-py3-none-any.whl.metadata (1.6 kB)\n", 153 | "Collecting opentelemetry-instrumentation-asgi==0.53b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", 154 | " Downloading opentelemetry_instrumentation_asgi-0.53b0-py3-none-any.whl.metadata (2.1 kB)\n", 155 | "Collecting opentelemetry-instrumentation==0.53b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", 156 | " Downloading opentelemetry_instrumentation-0.53b0-py3-none-any.whl.metadata (6.8 kB)\n", 157 | "Collecting opentelemetry-semantic-conventions==0.53b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", 158 | " Downloading opentelemetry_semantic_conventions-0.53b0-py3-none-any.whl.metadata (2.5 kB)\n", 159 | "Collecting opentelemetry-util-http==0.53b0 (from opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", 160 | " Downloading opentelemetry_util_http-0.53b0-py3-none-any.whl.metadata (2.6 kB)\n", 161 | "Requirement already satisfied: wrapt<2.0.0,>=1.0.0 in /usr/local/lib/python3.11/dist-packages (from opentelemetry-instrumentation==0.53b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb) (1.17.2)\n", 162 | "Collecting asgiref~=3.0 (from opentelemetry-instrumentation-asgi==0.53b0->opentelemetry-instrumentation-fastapi>=0.41b0->chromadb)\n", 163 | " Downloading asgiref-3.8.1-py3-none-any.whl.metadata (9.3 kB)\n", 164 | "Collecting opentelemetry-api>=1.2.0 (from chromadb)\n", 165 | " Downloading opentelemetry_api-1.32.0-py3-none-any.whl.metadata (1.6 kB)\n", 166 | "Collecting monotonic>=1.5 (from posthog>=2.4.0->chromadb)\n", 167 | " Downloading monotonic-1.6-py2.py3-none-any.whl.metadata (1.5 kB)\n", 168 | "Collecting backoff>=1.10.0 (from posthog>=2.4.0->chromadb)\n", 169 | " Downloading backoff-2.2.1-py3-none-any.whl.metadata (14 kB)\n", 170 | "Requirement already satisfied: distro>=1.5.0 in /usr/local/lib/python3.11/dist-packages (from posthog>=2.4.0->chromadb) (1.9.0)\n", 171 | "Requirement already satisfied: annotated-types>=0.6.0 in /usr/local/lib/python3.11/dist-packages (from pydantic<3.0.0,>=2.7.4->langchain) (0.7.0)\n", 172 | "Requirement already satisfied: pydantic-core==2.33.1 in /usr/local/lib/python3.11/dist-packages (from pydantic<3.0.0,>=2.7.4->langchain) (2.33.1)\n", 173 | "Requirement already satisfied: typing-inspection>=0.4.0 in /usr/local/lib/python3.11/dist-packages (from pydantic<3.0.0,>=2.7.4->langchain) (0.4.0)\n", 174 | "Collecting python-dotenv>=0.21.0 (from pydantic-settings<3.0.0,>=2.4.0->langchain_community)\n", 175 | " Downloading python_dotenv-1.1.0-py3-none-any.whl.metadata (24 kB)\n", 176 | "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.11/dist-packages (from requests<3,>=2->langchain) (3.4.1)\n", 177 | "Requirement already satisfied: markdown-it-py>=2.2.0 in /usr/local/lib/python3.11/dist-packages (from rich>=10.11.0->chromadb) (3.0.0)\n", 178 | "Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /usr/local/lib/python3.11/dist-packages (from rich>=10.11.0->chromadb) (2.18.0)\n", 179 | "Requirement already satisfied: torch>=1.11.0 in /usr/local/lib/python3.11/dist-packages (from sentence-transformers>=2.6.0->langchain_huggingface) (2.6.0+cu124)\n", 180 | "Requirement already satisfied: scikit-learn in /usr/local/lib/python3.11/dist-packages (from sentence-transformers>=2.6.0->langchain_huggingface) (1.6.1)\n", 181 | "Requirement already satisfied: scipy in /usr/local/lib/python3.11/dist-packages (from sentence-transformers>=2.6.0->langchain_huggingface) (1.14.1)\n", 182 | "Requirement already satisfied: Pillow in /usr/local/lib/python3.11/dist-packages (from sentence-transformers>=2.6.0->langchain_huggingface) (11.1.0)\n", 183 | "Requirement already satisfied: greenlet>=1 in /usr/local/lib/python3.11/dist-packages (from SQLAlchemy<3,>=1.4->langchain) (3.1.1)\n", 184 | "Requirement already satisfied: click>=8.0.0 in /usr/local/lib/python3.11/dist-packages (from typer>=0.9.0->chromadb) (8.1.8)\n", 185 | "Requirement already satisfied: shellingham>=1.3.0 in /usr/local/lib/python3.11/dist-packages (from typer>=0.9.0->chromadb) (1.5.4)\n", 186 | "Collecting httptools>=0.6.3 (from uvicorn[standard]>=0.18.3->chromadb)\n", 187 | " Downloading httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (3.6 kB)\n", 188 | "Collecting uvloop!=0.15.0,!=0.15.1,>=0.14.0 (from uvicorn[standard]>=0.18.3->chromadb)\n", 189 | " Downloading uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)\n", 190 | "Collecting watchfiles>=0.13 (from uvicorn[standard]>=0.18.3->chromadb)\n", 191 | " Downloading watchfiles-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.9 kB)\n", 192 | "Requirement already satisfied: websockets>=10.4 in /usr/local/lib/python3.11/dist-packages (from uvicorn[standard]>=0.18.3->chromadb) (15.0.1)\n", 193 | "Requirement already satisfied: cachetools<6.0,>=2.0.0 in /usr/local/lib/python3.11/dist-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (5.5.2)\n", 194 | "Requirement already satisfied: pyasn1-modules>=0.2.1 in /usr/local/lib/python3.11/dist-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (0.4.2)\n", 195 | "Requirement already satisfied: rsa<5,>=3.1.4 in /usr/local/lib/python3.11/dist-packages (from google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (4.9)\n", 196 | "Requirement already satisfied: zipp>=3.20 in /usr/local/lib/python3.11/dist-packages (from importlib-metadata<8.7.0,>=6.0->opentelemetry-api>=1.2.0->chromadb) (3.21.0)\n", 197 | "Requirement already satisfied: jsonpointer>=1.9 in /usr/local/lib/python3.11/dist-packages (from jsonpatch<2.0,>=1.33->langchain-core<1.0.0,>=0.3.51->langchain) (3.0.0)\n", 198 | "Requirement already satisfied: mdurl~=0.1 in /usr/local/lib/python3.11/dist-packages (from markdown-it-py>=2.2.0->rich>=10.11.0->chromadb) (0.1.2)\n", 199 | "Requirement already satisfied: sniffio>=1.1 in /usr/local/lib/python3.11/dist-packages (from anyio->httpx>=0.27.0->chromadb) (1.3.1)\n", 200 | "Requirement already satisfied: networkx in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface) (3.4.2)\n", 201 | "Requirement already satisfied: jinja2 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface) (3.1.6)\n", 202 | "Collecting nvidia-cuda-nvrtc-cu12==12.4.127 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 203 | " Downloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", 204 | "Collecting nvidia-cuda-runtime-cu12==12.4.127 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 205 | " Downloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", 206 | "Collecting nvidia-cuda-cupti-cu12==12.4.127 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 207 | " Downloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", 208 | "Collecting nvidia-cudnn-cu12==9.1.0.70 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 209 | " Downloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", 210 | "Collecting nvidia-cublas-cu12==12.4.5.8 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 211 | " Downloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", 212 | "Collecting nvidia-cufft-cu12==11.2.1.3 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 213 | " Downloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", 214 | "Collecting nvidia-curand-cu12==10.3.5.147 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 215 | " Downloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", 216 | "Collecting nvidia-cusolver-cu12==11.6.1.9 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 217 | " Downloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", 218 | "Collecting nvidia-cusparse-cu12==12.3.1.170 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 219 | " Downloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl.metadata (1.6 kB)\n", 220 | "Requirement already satisfied: nvidia-cusparselt-cu12==0.6.2 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface) (0.6.2)\n", 221 | "Requirement already satisfied: nvidia-nccl-cu12==2.21.5 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface) (2.21.5)\n", 222 | "Requirement already satisfied: nvidia-nvtx-cu12==12.4.127 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface) (12.4.127)\n", 223 | "Collecting nvidia-nvjitlink-cu12==12.4.127 (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface)\n", 224 | " Downloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl.metadata (1.5 kB)\n", 225 | "Requirement already satisfied: triton==3.2.0 in /usr/local/lib/python3.11/dist-packages (from torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface) (3.2.0)\n", 226 | "Requirement already satisfied: mpmath<1.4,>=1.1.0 in /usr/local/lib/python3.11/dist-packages (from sympy->onnxruntime>=1.14.1->chromadb) (1.3.0)\n", 227 | "Collecting mypy-extensions>=0.3.0 (from typing-inspect<1,>=0.4.0->dataclasses-json<0.7,>=0.5.7->langchain_community)\n", 228 | " Downloading mypy_extensions-1.0.0-py3-none-any.whl.metadata (1.1 kB)\n", 229 | "Collecting humanfriendly>=9.1 (from coloredlogs->onnxruntime>=1.14.1->chromadb)\n", 230 | " Downloading humanfriendly-10.0-py2.py3-none-any.whl.metadata (9.2 kB)\n", 231 | "Requirement already satisfied: joblib>=1.2.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn->sentence-transformers>=2.6.0->langchain_huggingface) (1.4.2)\n", 232 | "Requirement already satisfied: threadpoolctl>=3.1.0 in /usr/local/lib/python3.11/dist-packages (from scikit-learn->sentence-transformers>=2.6.0->langchain_huggingface) (3.6.0)\n", 233 | "Requirement already satisfied: pyasn1<0.7.0,>=0.6.1 in /usr/local/lib/python3.11/dist-packages (from pyasn1-modules>=0.2.1->google-auth>=1.0.1->kubernetes>=28.1.0->chromadb) (0.6.1)\n", 234 | "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.11/dist-packages (from jinja2->torch>=1.11.0->sentence-transformers>=2.6.0->langchain_huggingface) (3.0.2)\n", 235 | "Downloading langgraph-0.3.28-py3-none-any.whl (144 kB)\n", 236 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m144.1/144.1 kB\u001b[0m \u001b[31m13.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 237 | "\u001b[?25hDownloading langchain_community-0.3.21-py3-none-any.whl (2.5 MB)\n", 238 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.5/2.5 MB\u001b[0m \u001b[31m64.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 239 | "\u001b[?25hDownloading langchain_huggingface-0.1.2-py3-none-any.whl (21 kB)\n", 240 | "Downloading chromadb-1.0.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.3 MB)\n", 241 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m18.3/18.3 MB\u001b[0m \u001b[31m96.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 242 | "\u001b[?25hDownloading chroma_hnswlib-0.7.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB)\n", 243 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.4/2.4 MB\u001b[0m \u001b[31m88.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 244 | "\u001b[?25hDownloading fastapi-0.115.9-py3-none-any.whl (94 kB)\n", 245 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m94.9/94.9 kB\u001b[0m \u001b[31m8.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 246 | "\u001b[?25hDownloading bcrypt-4.3.0-cp39-abi3-manylinux_2_34_x86_64.whl (284 kB)\n", 247 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m284.2/284.2 kB\u001b[0m \u001b[31m22.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 248 | "\u001b[?25hDownloading build-1.2.2.post1-py3-none-any.whl (22 kB)\n", 249 | "Downloading dataclasses_json-0.6.7-py3-none-any.whl (28 kB)\n", 250 | "Downloading httpx_sse-0.4.0-py3-none-any.whl (7.8 kB)\n", 251 | "Downloading kubernetes-32.0.1-py2.py3-none-any.whl (2.0 MB)\n", 252 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m80.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 253 | "\u001b[?25hDownloading langgraph_checkpoint-2.0.24-py3-none-any.whl (42 kB)\n", 254 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m42.0/42.0 kB\u001b[0m \u001b[31m3.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 255 | "\u001b[?25hDownloading langgraph_prebuilt-0.1.8-py3-none-any.whl (25 kB)\n", 256 | "Downloading langgraph_sdk-0.1.61-py3-none-any.whl (47 kB)\n", 257 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m47.2/47.2 kB\u001b[0m \u001b[31m4.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 258 | "\u001b[?25hDownloading mmh3-5.1.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (101 kB)\n", 259 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m101.6/101.6 kB\u001b[0m \u001b[31m11.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 260 | "\u001b[?25hDownloading onnxruntime-1.21.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl (16.0 MB)\n", 261 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m16.0/16.0 MB\u001b[0m \u001b[31m104.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 262 | "\u001b[?25hDownloading opentelemetry_exporter_otlp_proto_grpc-1.32.0-py3-none-any.whl (18 kB)\n", 263 | "Downloading opentelemetry_exporter_otlp_proto_common-1.32.0-py3-none-any.whl (18 kB)\n", 264 | "Downloading opentelemetry_proto-1.32.0-py3-none-any.whl (55 kB)\n", 265 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m55.9/55.9 kB\u001b[0m \u001b[31m5.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 266 | "\u001b[?25hDownloading opentelemetry_instrumentation_fastapi-0.53b0-py3-none-any.whl (12 kB)\n", 267 | "Downloading opentelemetry_instrumentation-0.53b0-py3-none-any.whl (30 kB)\n", 268 | "Downloading opentelemetry_instrumentation_asgi-0.53b0-py3-none-any.whl (16 kB)\n", 269 | "Downloading opentelemetry_semantic_conventions-0.53b0-py3-none-any.whl (188 kB)\n", 270 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m188.4/188.4 kB\u001b[0m \u001b[31m17.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 271 | "\u001b[?25hDownloading opentelemetry_api-1.32.0-py3-none-any.whl (65 kB)\n", 272 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m65.3/65.3 kB\u001b[0m \u001b[31m6.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 273 | "\u001b[?25hDownloading opentelemetry_util_http-0.53b0-py3-none-any.whl (7.3 kB)\n", 274 | "Downloading opentelemetry_sdk-1.32.0-py3-none-any.whl (118 kB)\n", 275 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m119.0/119.0 kB\u001b[0m \u001b[31m10.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 276 | "\u001b[?25hDownloading overrides-7.7.0-py3-none-any.whl (17 kB)\n", 277 | "Downloading posthog-3.24.0-py2.py3-none-any.whl (85 kB)\n", 278 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m85.2/85.2 kB\u001b[0m \u001b[31m8.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 279 | "\u001b[?25hDownloading pydantic_settings-2.8.1-py3-none-any.whl (30 kB)\n", 280 | "Downloading uvicorn-0.34.0-py3-none-any.whl (62 kB)\n", 281 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m62.3/62.3 kB\u001b[0m \u001b[31m5.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 282 | "\u001b[?25hDownloading xxhash-3.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194 kB)\n", 283 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m194.8/194.8 kB\u001b[0m \u001b[31m19.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 284 | "\u001b[?25hDownloading backoff-2.2.1-py3-none-any.whl (15 kB)\n", 285 | "Downloading durationpy-0.9-py3-none-any.whl (3.5 kB)\n", 286 | "Downloading httptools-0.6.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (459 kB)\n", 287 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m459.8/459.8 kB\u001b[0m \u001b[31m37.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 288 | "\u001b[?25hDownloading marshmallow-3.26.1-py3-none-any.whl (50 kB)\n", 289 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m50.9/50.9 kB\u001b[0m \u001b[31m4.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 290 | "\u001b[?25hDownloading monotonic-1.6-py2.py3-none-any.whl (8.2 kB)\n", 291 | "Downloading ormsgpack-1.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (223 kB)\n", 292 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m223.6/223.6 kB\u001b[0m \u001b[31m21.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 293 | "\u001b[?25hDownloading python_dotenv-1.1.0-py3-none-any.whl (20 kB)\n", 294 | "Downloading starlette-0.45.3-py3-none-any.whl (71 kB)\n", 295 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m71.5/71.5 kB\u001b[0m \u001b[31m7.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 296 | "\u001b[?25hDownloading nvidia_cublas_cu12-12.4.5.8-py3-none-manylinux2014_x86_64.whl (363.4 MB)\n", 297 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m363.4/363.4 MB\u001b[0m \u001b[31m4.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 298 | "\u001b[?25hDownloading nvidia_cuda_cupti_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (13.8 MB)\n", 299 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m13.8/13.8 MB\u001b[0m \u001b[31m110.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 300 | "\u001b[?25hDownloading nvidia_cuda_nvrtc_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (24.6 MB)\n", 301 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m24.6/24.6 MB\u001b[0m \u001b[31m82.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 302 | "\u001b[?25hDownloading nvidia_cuda_runtime_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (883 kB)\n", 303 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m883.7/883.7 kB\u001b[0m \u001b[31m56.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 304 | "\u001b[?25hDownloading nvidia_cudnn_cu12-9.1.0.70-py3-none-manylinux2014_x86_64.whl (664.8 MB)\n", 305 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m664.8/664.8 MB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 306 | "\u001b[?25hDownloading nvidia_cufft_cu12-11.2.1.3-py3-none-manylinux2014_x86_64.whl (211.5 MB)\n", 307 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m211.5/211.5 MB\u001b[0m \u001b[31m6.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 308 | "\u001b[?25hDownloading nvidia_curand_cu12-10.3.5.147-py3-none-manylinux2014_x86_64.whl (56.3 MB)\n", 309 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.3/56.3 MB\u001b[0m \u001b[31m12.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 310 | "\u001b[?25hDownloading nvidia_cusolver_cu12-11.6.1.9-py3-none-manylinux2014_x86_64.whl (127.9 MB)\n", 311 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m127.9/127.9 MB\u001b[0m \u001b[31m7.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 312 | "\u001b[?25hDownloading nvidia_cusparse_cu12-12.3.1.170-py3-none-manylinux2014_x86_64.whl (207.5 MB)\n", 313 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m207.5/207.5 MB\u001b[0m \u001b[31m5.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 314 | "\u001b[?25hDownloading nvidia_nvjitlink_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n", 315 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m93.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 316 | "\u001b[?25hDownloading typing_inspect-0.9.0-py3-none-any.whl (8.8 kB)\n", 317 | "Downloading uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.0 MB)\n", 318 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.0/4.0 MB\u001b[0m \u001b[31m92.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 319 | "\u001b[?25hDownloading watchfiles-1.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (454 kB)\n", 320 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m454.8/454.8 kB\u001b[0m \u001b[31m36.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 321 | "\u001b[?25hDownloading coloredlogs-15.0.1-py2.py3-none-any.whl (46 kB)\n", 322 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m46.0/46.0 kB\u001b[0m \u001b[31m4.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 323 | "\u001b[?25hDownloading pyproject_hooks-1.2.0-py3-none-any.whl (10 kB)\n", 324 | "Downloading asgiref-3.8.1-py3-none-any.whl (23 kB)\n", 325 | "Downloading humanfriendly-10.0-py2.py3-none-any.whl (86 kB)\n", 326 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m86.8/86.8 kB\u001b[0m \u001b[31m8.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 327 | "\u001b[?25hDownloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)\n", 328 | "Building wheels for collected packages: pypika\n", 329 | " Building wheel for pypika (pyproject.toml) ... \u001b[?25l\u001b[?25hdone\n", 330 | " Created wheel for pypika: filename=pypika-0.48.9-py2.py3-none-any.whl size=53800 sha256=2bb93af82051de0d36ed43c3ae5c9c8ce682ef2a69bf646276e27e3dec5a9dc4\n", 331 | " Stored in directory: /root/.cache/pip/wheels/a3/01/bd/4c40ceb9d5354160cb186dcc153360f4ab7eb23e2b24daf96d\n", 332 | "Successfully built pypika\n", 333 | "Installing collected packages: pypika, monotonic, durationpy, xxhash, uvloop, uvicorn, python-dotenv, pyproject_hooks, overrides, ormsgpack, opentelemetry-util-http, opentelemetry-proto, nvidia-nvjitlink-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, mypy-extensions, mmh3, marshmallow, humanfriendly, httpx-sse, httptools, chroma-hnswlib, bcrypt, backoff, asgiref, watchfiles, typing-inspect, starlette, posthog, opentelemetry-exporter-otlp-proto-common, opentelemetry-api, nvidia-cusparse-cu12, nvidia-cudnn-cu12, coloredlogs, build, pydantic-settings, opentelemetry-semantic-conventions, onnxruntime, nvidia-cusolver-cu12, langgraph-sdk, kubernetes, fastapi, dataclasses-json, opentelemetry-sdk, opentelemetry-instrumentation, opentelemetry-instrumentation-asgi, opentelemetry-exporter-otlp-proto-grpc, langgraph-checkpoint, opentelemetry-instrumentation-fastapi, langgraph-prebuilt, langchain_huggingface, langgraph, langchain_community, chromadb\n", 334 | " Attempting uninstall: nvidia-nvjitlink-cu12\n", 335 | " Found existing installation: nvidia-nvjitlink-cu12 12.5.82\n", 336 | " Uninstalling nvidia-nvjitlink-cu12-12.5.82:\n", 337 | " Successfully uninstalled nvidia-nvjitlink-cu12-12.5.82\n", 338 | " Attempting uninstall: nvidia-curand-cu12\n", 339 | " Found existing installation: nvidia-curand-cu12 10.3.6.82\n", 340 | " Uninstalling nvidia-curand-cu12-10.3.6.82:\n", 341 | " Successfully uninstalled nvidia-curand-cu12-10.3.6.82\n", 342 | " Attempting uninstall: nvidia-cufft-cu12\n", 343 | " Found existing installation: nvidia-cufft-cu12 11.2.3.61\n", 344 | " Uninstalling nvidia-cufft-cu12-11.2.3.61:\n", 345 | " Successfully uninstalled nvidia-cufft-cu12-11.2.3.61\n", 346 | " Attempting uninstall: nvidia-cuda-runtime-cu12\n", 347 | " Found existing installation: nvidia-cuda-runtime-cu12 12.5.82\n", 348 | " Uninstalling nvidia-cuda-runtime-cu12-12.5.82:\n", 349 | " Successfully uninstalled nvidia-cuda-runtime-cu12-12.5.82\n", 350 | " Attempting uninstall: nvidia-cuda-nvrtc-cu12\n", 351 | " Found existing installation: nvidia-cuda-nvrtc-cu12 12.5.82\n", 352 | " Uninstalling nvidia-cuda-nvrtc-cu12-12.5.82:\n", 353 | " Successfully uninstalled nvidia-cuda-nvrtc-cu12-12.5.82\n", 354 | " Attempting uninstall: nvidia-cuda-cupti-cu12\n", 355 | " Found existing installation: nvidia-cuda-cupti-cu12 12.5.82\n", 356 | " Uninstalling nvidia-cuda-cupti-cu12-12.5.82:\n", 357 | " Successfully uninstalled nvidia-cuda-cupti-cu12-12.5.82\n", 358 | " Attempting uninstall: nvidia-cublas-cu12\n", 359 | " Found existing installation: nvidia-cublas-cu12 12.5.3.2\n", 360 | " Uninstalling nvidia-cublas-cu12-12.5.3.2:\n", 361 | " Successfully uninstalled nvidia-cublas-cu12-12.5.3.2\n", 362 | " Attempting uninstall: opentelemetry-api\n", 363 | " Found existing installation: opentelemetry-api 1.31.1\n", 364 | " Uninstalling opentelemetry-api-1.31.1:\n", 365 | " Successfully uninstalled opentelemetry-api-1.31.1\n", 366 | " Attempting uninstall: nvidia-cusparse-cu12\n", 367 | " Found existing installation: nvidia-cusparse-cu12 12.5.1.3\n", 368 | " Uninstalling nvidia-cusparse-cu12-12.5.1.3:\n", 369 | " Successfully uninstalled nvidia-cusparse-cu12-12.5.1.3\n", 370 | " Attempting uninstall: nvidia-cudnn-cu12\n", 371 | " Found existing installation: nvidia-cudnn-cu12 9.3.0.75\n", 372 | " Uninstalling nvidia-cudnn-cu12-9.3.0.75:\n", 373 | " Successfully uninstalled nvidia-cudnn-cu12-9.3.0.75\n", 374 | " Attempting uninstall: opentelemetry-semantic-conventions\n", 375 | " Found existing installation: opentelemetry-semantic-conventions 0.52b1\n", 376 | " Uninstalling opentelemetry-semantic-conventions-0.52b1:\n", 377 | " Successfully uninstalled opentelemetry-semantic-conventions-0.52b1\n", 378 | " Attempting uninstall: nvidia-cusolver-cu12\n", 379 | " Found existing installation: nvidia-cusolver-cu12 11.6.3.83\n", 380 | " Uninstalling nvidia-cusolver-cu12-11.6.3.83:\n", 381 | " Successfully uninstalled nvidia-cusolver-cu12-11.6.3.83\n", 382 | " Attempting uninstall: opentelemetry-sdk\n", 383 | " Found existing installation: opentelemetry-sdk 1.31.1\n", 384 | " Uninstalling opentelemetry-sdk-1.31.1:\n", 385 | " Successfully uninstalled opentelemetry-sdk-1.31.1\n", 386 | "Successfully installed asgiref-3.8.1 backoff-2.2.1 bcrypt-4.3.0 build-1.2.2.post1 chroma-hnswlib-0.7.6 chromadb-1.0.4 coloredlogs-15.0.1 dataclasses-json-0.6.7 durationpy-0.9 fastapi-0.115.9 httptools-0.6.4 httpx-sse-0.4.0 humanfriendly-10.0 kubernetes-32.0.1 langchain_community-0.3.21 langchain_huggingface-0.1.2 langgraph-0.3.28 langgraph-checkpoint-2.0.24 langgraph-prebuilt-0.1.8 langgraph-sdk-0.1.61 marshmallow-3.26.1 mmh3-5.1.0 monotonic-1.6 mypy-extensions-1.0.0 nvidia-cublas-cu12-12.4.5.8 nvidia-cuda-cupti-cu12-12.4.127 nvidia-cuda-nvrtc-cu12-12.4.127 nvidia-cuda-runtime-cu12-12.4.127 nvidia-cudnn-cu12-9.1.0.70 nvidia-cufft-cu12-11.2.1.3 nvidia-curand-cu12-10.3.5.147 nvidia-cusolver-cu12-11.6.1.9 nvidia-cusparse-cu12-12.3.1.170 nvidia-nvjitlink-cu12-12.4.127 onnxruntime-1.21.0 opentelemetry-api-1.32.0 opentelemetry-exporter-otlp-proto-common-1.32.0 opentelemetry-exporter-otlp-proto-grpc-1.32.0 opentelemetry-instrumentation-0.53b0 opentelemetry-instrumentation-asgi-0.53b0 opentelemetry-instrumentation-fastapi-0.53b0 opentelemetry-proto-1.32.0 opentelemetry-sdk-1.32.0 opentelemetry-semantic-conventions-0.53b0 opentelemetry-util-http-0.53b0 ormsgpack-1.9.1 overrides-7.7.0 posthog-3.24.0 pydantic-settings-2.8.1 pypika-0.48.9 pyproject_hooks-1.2.0 python-dotenv-1.1.0 starlette-0.45.3 typing-inspect-0.9.0 uvicorn-0.34.0 uvloop-0.21.0 watchfiles-1.0.5 xxhash-3.5.0\n" 387 | ] 388 | } 389 | ], 390 | "source": [ 391 | "%pip install langchain langgraph langchain_community langchain_huggingface chromadb transformers\n" 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": 9, 397 | "metadata": { 398 | "id": "nr7zIDJb3KAq" 399 | }, 400 | "outputs": [], 401 | "source": [ 402 | "from pydantic import BaseModel\n", 403 | "from typing import List, Optional\n", 404 | "\n", 405 | "class UserProfile(BaseModel):\n", 406 | " name: str\n", 407 | " age: int\n", 408 | " gender: str\n", 409 | " financial_status: str\n", 410 | " education: str\n", 411 | " mental_issues_reported: List[str]\n", 412 | " generation: str\n", 413 | " initial_mental_health_state: str\n", 414 | "\n", 415 | "class TherapyEvaluation(BaseModel):\n", 416 | " generation_summary: str\n", 417 | " session_engagement: str\n", 418 | " emotional_tone: str\n", 419 | " strengths: List[str]\n", 420 | " areas_to_work_on: List[str]\n", 421 | " overall_feedback: str\n", 422 | "\n", 423 | "class MentalHealthState(BaseModel):\n", 424 | " user_profile: UserProfile\n", 425 | " current_question: int = 0\n", 426 | " responses: List[str] = []\n", 427 | " evaluation_report: Optional[TherapyEvaluation] = None\n", 428 | " session_active: bool = True\n", 429 | " session_completed: bool = False\n", 430 | " session_feedback: Optional[str] = None\n", 431 | " session_summary: Optional[str] = None\n", 432 | " # session_engagement: Optional[str] = None\n", 433 | " # emotional_tone: Optional[str] = None\n", 434 | " # strengths: Optional[List[str]] = None\n", 435 | " # areas_to_work_on: Optional[List[str]] = None\n", 436 | " # overall_feedback: Optional[str] = None\n", 437 | " # generation_summary: Optional[str] = None\n", 438 | " # session_engagement: Optional[str] = None" 439 | ] 440 | }, 441 | { 442 | "cell_type": "code", 443 | "execution_count": 10, 444 | "metadata": { 445 | "id": "Dkdopq6J31mq" 446 | }, 447 | "outputs": [], 448 | "source": [ 449 | "from langgraph.graph import StateGraph, END\n", 450 | "# from schemas import MentalHealthState, UserProfile, TherapyEvaluation\n", 451 | "from langchain_core.messages import HumanMessage\n", 452 | "from typing import Dict, Any\n", 453 | "# from langchain.chat_models import ChatOpenAI\n", 454 | "from langchain_huggingface import HuggingFaceEndpoint\n", 455 | "from langchain_core.prompts import PromptTemplate\n", 456 | "from langchain_core.prompts import ChatPromptTemplate\n", 457 | "\n", 458 | "# llm = ChatOpenAI(model=\"gpt-4\", temperature=0.7)\n", 459 | "\n", 460 | "llm= HuggingFaceEndpoint(\n", 461 | " repo_id=\"meta-llama/Llama-3.2-3B-Instruct\",\n", 462 | " task=\"text_generation\",\n", 463 | " max_new_tokens=512,\n", 464 | " temperature=0.3,\n", 465 | " streaming=True,\n", 466 | " )\n", 467 | "\n", 468 | "#Defining nodes for the workflow\n", 469 | "\n", 470 | "# Node 1: Classify user\n", 471 | "def classify_user_node(state: MentalHealthState) -> MentalHealthState:\n", 472 | " print(f\"[CLASSIFY] User: {state.user_profile.name}\")\n", 473 | " return state\n", 474 | "\n", 475 | "# Node 2: Ask questions (simulated answers for now)\n", 476 | "\n", 477 | "def therapy_session_node(state: MentalHealthState) -> MentalHealthState:\n", 478 | " # Generate 10 personalized therapy questions based on profile\n", 479 | " prompt = f\"\"\"\n", 480 | "You are a mental health therapist.\n", 481 | "Your task is to generate 10 personalized therapy questions for a client, based on their profile below.\n", 482 | "\n", 483 | "Client Profile:\n", 484 | "{state.user_profile.json(indent=2)}\n", 485 | "\n", 486 | "Please keep the questions empathetic, open-ended, and focused on exploring emotions, habits, and thought patterns.\n", 487 | "\n", 488 | "Respond with a numbered list of 10 therapy questions only.\n", 489 | "\"\"\"\n", 490 | "\n", 491 | " result = llm([HumanMessage(content=prompt)])\n", 492 | " questions = result.content.strip().split(\"\\n\")\n", 493 | "\n", 494 | " # Simulate answers to each question (later you can replace this with speech-to-text)\n", 495 | " simulated_answers = [f\"My answer to: {q}\" for q in questions if q.strip()]\n", 496 | "\n", 497 | " state.responses = simulated_answers\n", 498 | " state.current_question = len(simulated_answers)\n", 499 | " return state\n", 500 | "\n", 501 | "\n", 502 | "# Node 3: evaluate_session_node (simulated answers for now)\n", 503 | "\n", 504 | "def evaluate_session_node(state: MentalHealthState) -> MentalHealthState:\n", 505 | " prompt = f\"\"\"\n", 506 | "User Profile:\n", 507 | "{state.user_profile.json(indent=2)}\n", 508 | "\n", 509 | "Therapy Responses:\n", 510 | "{state.responses}\n", 511 | "\n", 512 | "Based on the profile and answers, generate a detailed session report with:\n", 513 | "- generation_summary\n", 514 | "- session_engagement\n", 515 | "- emotional_tone\n", 516 | "- strengths\n", 517 | "- areas_to_work_on\n", 518 | "- overall_feedback\n", 519 | "Format the result as a JSON object.\n", 520 | "\"\"\"\n", 521 | " result = llm([HumanMessage(content=prompt)])\n", 522 | " import json\n", 523 | " data = json.loads(result.content)\n", 524 | " state.evaluation_report = TherapyEvaluation(**data)\n", 525 | " return state\n", 526 | "\n", 527 | "\n" 528 | ] 529 | }, 530 | { 531 | "cell_type": "code", 532 | "execution_count": 14, 533 | "metadata": { 534 | "id": "U3ZDSrCQ4CLc", 535 | "colab": { 536 | "base_uri": "https://localhost:8080/", 537 | "height": 449 538 | }, 539 | "outputId": "53689a12-c2ce-412e-a810-936b337e919a" 540 | }, 541 | "outputs": [ 542 | { 543 | "output_type": "execute_result", 544 | "data": { 545 | "text/plain": [ 546 | "" 547 | ], 548 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAKoAAAGwCAIAAAC2LmmcAAAAAXNSR0IArs4c6QAAIABJREFUeJztnXdYFMffwOd6v+M4ytGLgIAgKFgxggqiiB0LiElEf7EmIRGNvWuMLcaCoCSxS9SYqMEYjDWoYMWKVCv9jnK97d37x+a9EEPR5M49mP08PDx3c7uz373Pzezu7MwswWAwABxYIWIdAA6W4PqhBtcPNbh+qMH1Qw2uH2rIWAfQBrXlKoUEUUgQjVqvVuqxDqdtSCQCiUJgckgsLtnKjsLiWvQ3TLDM6/7nBfKyh/KnD+TOPgyVXM/kkvi2VERniaG+BokMFFJEIUUUEkSn0wMD8AhgeQWzrWypWIfWDBan/8UTxbXTIhtnmtCV7hHIsvDS0yZVz1VPH8obajRUBrHvcBsGi4R1RH/DsvRnH6pSSpG+w21snWhYx2JiHudKrp0WhUTyuw3gYx3LX1iK/roqzZENL8Z87OTgwcA6FjNy73JDeakyJskB60D+xCL0yxp0J9PK4+e7EokErGMxO6X3Zbey6yekuGAdCLAI/VXPVBd+qE74wg3bMN4lL4sUl4/XJi7Cfpcxvu7XavQ/p5ZD5R4A4OLD7B0j+HVvJdaBYF36s76tfG+0DdeagmEMWJF/qYFAMASFY3kmiGXpv5/TwOaR4XQPAAiOsLp+pk6rxrItC0v9106L+w4XYBgA5vQdLrh2WoxhAJjpz79c3yvGmkKD+qZD135WskattF6LVQCYfftPbkqdOzGx2rrlwOFTyh7Isdo6Nvql9VqVXG/r/E6b9kpLS2NjY//FikePHl2xYoUZIgIAAM9AFnT6nz9R+PXkvOONFhQUvOMV3wRnb6ZOq1crEPNtohWw0V9XqaGb7eZHVVXVggULoqKi+vbtGxcXd+LECQBAenr6ihUrqqqqQkNDDx8+DAB4/PjxrFmzBg0a1K9fv/fffz8vLw9d/ejRo1FRUZcvX46Kitq6detHH310+vTpX375JTQ0tLCw0BwB63WgsQ6bwz8299MUUsTBg26mzFeuXKnRaLZu3crj8XJzc9evX+/o6PjBBx9IpdKLFy8eOnSIwWCo1eqPP/44MDAwNTWVQqGcOHFi7ty5J06csLOzo1AoSqUyMzNzxYoV7u7uPB5vxowZrq6u8+fP53DMUmMxuSSFBJvSj5F+iY5ptju5JSUlEyZM6NKlCwAgLi7O19fXwcGBTqfTaDQCgWBlZQUA0Ol06enpNjY26NuZM2dmZmbeu3cvKiqKQCCoVKqEhISwsDA0QzKZTKVS0SXNAYtHljfqzJR562Cjn0QmkMy25f79++/du1cqlYaFhXXr1i0gIOCfy5DJZK1Wu2HDhqKiIqlUijZ9NjY2GhcIDAw0V3z/gEIjYNX0io1+Co0obzRXdbdw4UIvL68zZ84cOnSIxWLFxcXNnDmTTP7bnr548WLGjBk9evRYvXq1ra2tXq+PiYlpugCbzTZTeP9EItY5dcLmNjc2+pkckkJqLv1kMjk+Pj4+Pl4sFmdlZaWmpvL5/MTExKbLZGdnIwiydu1aGo2Gni2aKZg3wayHwtbB5syfL6TqNGZp65bJZL/++qtOpwMACASC999/PzAwsKSk5LXFNBoNejaAvj1z5kzr2Zr1xhiDQ2JbwaTf2YtRcENqjpwJBMJXX321Zs2awsLC8vLys2fPFhQUhISEAAA4HI5IJLp7925lZWVAQEBDQ8OpU6dEItGxY8cePXrE5/OLiopkMtk/8+RwOIWFhYWFhQ0NDSYPuOaFSi5B2DyMTsLM157VCkwO+e6lend/Fp1p4qt/KpUaGhp64cKFvXv3ZmZmFhcXJyYmjhs3DgAgFApzcnKOHDnCYDDGjh2rVCoPHDiQmZlJpVKXLl2KIMixY8caGxttbGyuXLkybdo0IvHPssHj8bKysk6cONGtWzcXFxP30nlwtVEgpGJ17Mfsfv/N7Doml9SlNw+TrVsOZ/dVhUbxbRyx6dqK2S2foHCrnJ9EWG3dQii5JzPoDVi5x3KUD5VGDAq3upld12OwdbMLnDp1asuWLc1+pNFoqNTmR02sXLkyPDzcpJH+RXJycn5+/tuGdODAgZYOGddOi0bOcDJpjG8Hxp29Tux4NXqWE6G5Dr5arValUjW7lkqlotObbzNmMBivXeKbEIVCgSDNX6+2EhKLxTKeRjSl6LZEXKXpM8zG1GG+BRjrF1Wozx2sjp/vimEMmFD7Sn0+s3piCsY7jnFnGxtHWveB/F8yKrAN4x2j1xuObnmJuXvsSz9KeZky/2LDsKmWMvbFrNTXaH785tWUlR4kMvZjWixCPwCg+K4072xd3KdOdGb7HtPZOk8fy6/+LIqf72oJ7i1IPwCgvlpz8ViNnTO973ABkWQR344JqXquunZaJHCghY+1xTqWv7Ag/Sh3L9VfOy3uFW3t6MVw9Gz3wz21av3TR/LqZ6qq56q+w22cvCxrjyxOP8q9PxpK7srqqjVd+nANesBCR4O0hxqBRCQoZDq5RCdvRFRy5OkjuUcXlk8Ix6MLC+vQmsFC9aOo5MjLIoW0Xidv1CEIMHmXmNLSUoFAYNpuPFQ6kUAALC6ZxSNZ21OdfSy6M7tF6zc3KSkpsbGxERERWAeCGVAPssHB9UMN1PptbW3Nd4OgXQC1/traWrRbGLRArZ9OpxMI7eFq0mxArV+lUsF84QO7fi6XSyJZ1jyL7xio9Uskkpa6b0AC1PqFQiGFAunMQihQ66+qqtJqMZtYxRKAWj8O1PqZTGaznTDhAeqdVygUen07eESE+YBaf0tdsOEB6p2Xy+V46ceBF6j1CwQC/I4fvIjFYvyOHw68QK3fzs4Or/zhpaamBq/8ceAFav329vb4HT94qa6uxu/44cAL1Prxjt5Q68c7ekOtHwdq/Xg/f6j14/38odaP3/GDWj9+xw9q/ThQ6+dwOHhfP3iRSqV4Xz94wW/5QK0fv+UDtX689EOtHy/9UOvn8XiQT+8A47SOgwcPptPpBoOhoaGBwWCgr9EHOWMd2rsGxiZPKyursrIy9LVSqUSf0jhp0iSs48IAGCv/cePGGZ/fieLk5JSQkIBdRJgBo/7Ro0c7Of3t+Vn9+/cXCoXYRYQZMOonk8lxcXHGCsDJyQnOmh9S/WgFgD5bz2Aw9OvXz8EBiscI/RNI9VMolFGjRlGpVCcnp9ee7Q4Vpj/zlzXo6qo0Op2lX0+G+MX4ud0PCAhQirllYjnW4bQBg02yEVIodBO3Upjyur+uSpNzSiQqV7v5sU3+5A3I0Wn1onKVVzBn4AQ7E2ZrMv0NIu3p9IrIyY5sHtSt6Gal8FZjebF85AxHU2VoGv0atf67ZU8nLepkipBwWqP0vqSiWB6TZJpzVdOc+uWdres7wpSVEk5LdOrKJRAJ5aUKk+RmGv0VJUqONV7nvyMoNJK4QmOSrEx04WcAHOvmn16PY3L4dlSZic6sTaNf2qAFeku/0uswIDoDYqJeCpA2++Cg4PqhBtcPNbh+qMH1Qw2uH2pw/VCD64caXD/U4PqhBtcPNZal/8RPPwyK6mnybEeOHrT/QAb6+vCRvaPGRI4YOcDkW2mPQDHKZ9aMzzw8vQAAWq32u+93DYkePnrUBKyDsgig0B8dHYu+UCjkCIKEhvbu1Mkb66AsAsz0FxQ83JW+taiogMvlDRwQnTRlJpX6tx4DCILsP7Dn/PmztaIaLpcX1jd8+kefMhgMAMD9+3czvtv59GkJgiCdOvlMS5odFNS9lfSRoweNHRPv7x84b/5sAMDKVQvWUSi+vl1oVNrGDTuNW1y6LEVcJ0rdsbeVsIcO6/fhB9MnjJ+Mvt24aXVJSWF62kEAQNaZn4//eLiyspxGowd17T5ndoqdnT0AoKGhPjXt63v3bjc2Nnh6ev9v2pxuwaEAgKdPS5OmTVi7esvujO1Dh4ww5vkuwebYX1lVkTJ/lqOD85ZNaR/PmXf2t9O70r5+bZnjPx4+fGRvUtKsb/dkzp+3/Oq1yxnf7UQHZS5akuzu5rlj2/epO/Z18vResOgTiVTSUroxw+CgkP17fwQAzJ+37NgPvw4bOur2nRsiUS36qVKpvHnr+pDo4f9uj+7fv7tp85qxY+K/zfjhy3XfNEoaVq5eAADQ6/VfLPj40aP7X8xfkb7roG9n/wULPykrK0HHGgAA9u3fPWH85EEDh/yHr/Pfg03pz8r6iUqlzUtZig6vVyoU9x/cfW2ZyEFDe4T28fT0AgA4O7sOiBicd+MqAKCmpkoul0dFxri5eQAA5sxOiQiPolKo1dWVzaYbMySTyVwuDwDAYDB5PKvw8MgdqZvOXziLFrvruX8YDIaBA6L/3R49fVZKo9GGRA8nk8lOjs7Ll66vqq4EANy6nVdU/GTL5jS0xM+ZnXLrdt6JnzJT5i4BBAIAIDg4dOiQEf/t6/z3YKO/qKjAx9vXOLXC4MHDBg8e9toyPJ5V9rmsTVvWiEQ1Op1OqVQwGEz0p+Di4rb2yyUjhseFhvb29uocHBzSSnpL0On0gQOis89lofqvXDn/Xr8BbDb73+1Rt+BQAoHwSfK0mKEjQ0J6OQgdra0F6DGOQqEEB/0ZCZFI7BrYraSk0Liiv3/gv9uiScCm8pdKJXQ6o/Vltu/YeOBgxuiR47d+vWdP+uFhMaPRdBKJtG1rRnj/yKysn6bPSIyfNDw7O6uV9FaIiRlVVlZSUlKkUqnyblyN/rc1PwDA1dV9x7bvHR2dd+/ZnjBpxKw5Hz4ueIiebGq12uihfQcP6YP+/Xr2lLhOZFyRxfqXPziTgE3p51nxFYrWxlUhCHLm15OTE6dFRcWgKXK5zPiplRV/5ozkmTOSnz0rO3rs4JdfLXdz9+zs49dSektb6ezj5+3V+dLlc97evlwuL6R7200Or80ArtGoja87dfJesmgNgiAPHuR/+33qosXJRzPPsFhsKpW6J/1w07UsZy5JbOLw9upc8OShWv3nd5ednfVJ8rSmMyzq9XoEQdBDNfqs5WvXr6AjUioqy3NyLqHp7u6en3+2iEgkPnta2lJ665EMHTry4qVzly6dGxw17E2sMJksmUxqfFtaVoy+KCh4+OjRfbQSCg4OSZoys7Gxoa5O7OvbRaPRIAji6uqO/lGpNBsbSxkTgY3+2GFjdDrd2nVLHj68l5NzKX3PNjdXj6bfPoVC8fbq/Fv2L+UVr0pLixctSe7VK0wqlbx48ayyonz5yvlHjx188eLZy5fPDxzMIBKJ/v6BNdVVzaa3Hklk5FCxuDbn6qU3rPl9fPxyrl5qbGzQarWHDn8vkTSi6Xk3ri1e+vnlK+fLK14VlxSeOJEptHewtxeGdO/p7dV53ZdL8/NvV1ZV/H7+7EfTE06eOvbfvj+TgU3lb28v/OrL7Wm7v5k7byaXy4uIiPrf1DmvLTMvZdnGTauSpo4XCh2Tpsz08w149PDezNnvZ+zJ/GLe8qPHD36/N41EIrm5ea5eucnFxc3Fxa3Z9NYj4bA5wcGhCoXc2cnlTSKfNfPzDRtXTkyI5XC4MUNHRQ+OvXnzOgAgcVKSTqdNS9sqEteyWOyAgKD1X24jEAgkEumr9dt3pW9dvnK+SqUUCh0nT542Ls5SZpMwzRi/jCVlo2a70Zjtb5K0hob6hMQR8+ctjwiPxDqWN6Ugt0Gt0L032ua/ZwVFo2+zNEoaK8pf7kjd7Obm2f+9gViHgw3w6v/tt9N7MnYEde0+L2WZ8bTjwYP8RUuSW1rl4IGTvP8/G+0YwF75v4Zara6rF7f0qb2d0BKu2fDK31zQaDQHockmT7B8sP8t42AIrh9qcP1Qg+uHGlw/1OD6oQbXDzW4fqjB9UONafTbOdH1+Mxe7woSmcBgm6Z93USlnwjEleo3WA7HBFQ+VfJsTNNabxr9noEsUYXKJFnhtIlSpnPpzDRJVqbRH9CXJ6nVPM5tMEluOK1w/lBFcLgV3UQ3V005n//p3RVWdjQrO5qNE+21HrE4/xGVXCeuVD+82hA+1tbd3zRF3/SPcXx8Q/LskVyPAFF5OzgV0Gq1JCKR2B4e5MnhUwQOlOAIKytbU86dDONTPI2kpKTExsZGRERgHQhm4Nf9UIPrhxqo9QuFQnSUNbRArb+qqkqrNdHM+O0TqPXb2NiQyVB3doVav0gk0umgft4g1Prt7Ozw0g8vNTU1eOmHF4FAgJd+eBGLxXjpx4EXqPXb2trilT+81NbW4pU/DrxArZ9CoUDeLQVq/VqtFubuDrDrp9PpeOmHF5VKhZd+HHiBWj+PxyO1h36e5gNq/Y2NjQiCYB0FlkCtHwdq/fgdP6j143f8oNaPA7V+vKM31Prxjt5Q68eBWj/ezx9q/Xg/f6j1MxgM/I4fvCiVSvyOHw68QK0f7+kLtX68py/U+vEhnlDrx4d4Qq0fL/1Q68dLP9T67e3tIS/9ME7rOG7cODKZTCQSKysruVwug8EgEolEIvHAgQNYh/augfG3r9fri4uL0dcSiQQAYDAYoqKisI4LA2Cs/CMjX39Wu7W1dVJSEkbhYAmM+idMmODm5mZ8azAYunfv7uPjg2lQ2ACjfmtr68jISOO9PqFQOGXKFKyDwgYY9QMAxo8f7+Lighb9bt26+fr6Yh0RNkCqXyAQDBo0CC36iYmJWIeDGW995i9r0BoMHaGLxPCh4y/9nhcYGOhk7yWt7wiNPzQmkUp7u/L8Ftf9l47XFN+RCT0Y4op28KQOCDEYAJkCgsKtuvazesNV3ki/Vq3fvbBsUIKDjTOdxoB6SKyFI63TPrpWz2AT+420eZPl30j/7oVlY5PdqHRcfPvgzu8iQDCEj7Ftc8m2DxW5Z8Q9h9rg7tsR3SNtlDJ99fO2n6zYtv6XhUqONdQjodojJBKh9lXbp2ht6ydTCVa2NBNFhfOOsHWhyyVtX860rb+2XA3dPcH2j1ZtUCn0bS4GabMPDgquH2pw/VCD64caXD/U4PqhBtcPNbh+qMH1Qw2uH2pw/VBjdv3jJgz99rtUc2+lvVBWVjJgUOiDB/lYB/InZtE/akxkZVWFOXJu79jY2iV/usDR0RnrQP7E9IO8qqurGhsbTJ5tx4DL4Y4cEYd1FH9hYv01NdUTE2IBAAmTRoSFha9ZtRkAQCQS9+3fc/LUMZlM2q1bjwXzV/D51gAAnU538NC3Fy5mV1dX2traj4ubhH41T5+WJk2bsHb1lt0Z2xl0xq7U/QiC7D+w5/z5s7WiGi6XF9Y3fPpHnzIYDABA7IjwhPgpL148y83LUamUoaG9581dyuNZfZI8jUalbdyw0xjb0mUp4jpR6o69rcSfdebn4z8erqwsp9HoQV27z5mdYmdnDwBoaKhPTfv63r3bjY0Nnp7e/5s2p1twaOurNJteVlYy9X8Tt23NCAwMRpc5euxgRcUrBoPZq2ffmTM+s7YWAABWrloAAOjZs+/hI3vF4loXZ7dPP/nC3z/QtLJMX/nb2NguW/olACA97eDCL1ahiRcvnWtsrP9y3TdLFq99/Pj+3n3paHpa+jc/HD0wKX7Ktxk/jIubtGPnpqwzP6OP1wMA7Nu/e8L4yfNSlgEAjv94+PCRvUlJs77dkzl/3vKr1y5nfPenVxKJnPnD/m7BoSeOZ+9OO1Rc/GT7zk0AgGFDR92+c0MkqkUXUyqVN29dHxI9vJXg79+/u2nzmrFj4r/N+OHLdd80ShpWrl6ADgn9YsHHjx7d/2L+ivRdB307+y9Y+ElZWUkrq7SU3pTs7KxNm9cMjhr2XcYPq1ZsLCp+snDRp2jXSxKZ/OBhfkHBw91ph04cP8fjWX21caVpTaGYuPQTiUQmkwUA4HC4LBYLTWSx2J98PB8A0NnH74+ciwUFDwEAMpns5KljkxKmREfHAgCcnVyKi58cPrJ3WMwoQCAAAIKDQ4cOGYHmEDloaI/QPp6eXgAAZ2fXARGD825cNW7U26szmomrq/vw2LEHDmYolcrw8MgdqZvOXzg7YfxkAMD13D8MBsPAAdGtBP/0WSmNRhsSPZxMJjs5Oi9fur6quhIAcOt2XlHxky2b09ASP2d2yq3beSd+ykyZu6SlVVpKb8qx44fCwsInJUwBALi4uH08Z968+bMfPryHVgwqlXLWzM/pdDq6+19+tVylUqFvTenLtNk1Sxf/rsbXfCtruUIOACgtLdLpdKEhvY0fBQWFVFS8UigU6NumdR2PZ5V34+qsOR+OnxgzJm7w6V9+lEolxk+9vf8aouXu5qnRaESiGjqdPnBAdPa5LDT9ypXz7/UbwGazW4mzW3AogUD4JHnaL1k/VVZVWFsL/P0CAAAFBQ8pFEpwUAi6GJFI7BrYraSksJVVWko3otPpSsuK/f3+2sfOnf0BACWlRehbJ0cXo2wOhwsAaLrLpuJdjO9HD9IohP8fWalQyAEAn82dbhxqidZ7dfVi9C2L9Zeq7Ts2nvv9zGefLuwSEESj0o5k7rtw8bcm+TONr+kMBgBAKpMCAGJiRp06/WNJSZGzs2vejaurVm5qPU5XV/cd274/8sO+3Xu2S7es9fMLmDM7xd8vQKGQa7Xa6KF9jUsiCIIepFtapaV0Yw5KldJgMKA1JQqTwQQAKJV//vqptNf7V5pjIg7MpndA7S5etMbTw6tpup2tfU1tddMUBEHO/HpycuK0qKgYNEUulzVdAP0lNX3N5XDRY423V+dLl895e/tyubyQ7j3bjKpTJ+8li9YgCPLgQf6336cuWpx8NPMMi8WmUql70g83XZJIJLayCpVKbTbduDqDziASiU0jRyvFpj/6d4C5Kv82f6qent4UCqW+vs7V1R3943J5PJ4VlUp9bUm9Xo8gCJfLQ9/K5fJr1680zf/+/TvG14WFj+l0uq2tPfp26NCRFy+du3Tp3OCoYUZhLVFQ8PDRo/sAABKJFBwckjRlZmNjQ12d2Ne3i0ajQRDEGCqVSrOxsWtllZbSjdsik8lenXwePPyr/efxo/vGQ8A7w/T60ZKXm5vz7FlZK4ux2ezY2DF796VfuJhdUVl+N/9WyvxZ6zes+OeSFArF26vzb9m/lFe8Ki0tXrQkuVevMKlU8uLFM3ReLpG4du++9PKKV7m5OadOHx84IJr2/zVnZORQsbg25+ql6FbP+VHyblxbvPTzy1fOl1e8Ki4pPHEiU2jvYG8vDOne09ur87ovl+bn366sqvj9/NmPpiecPHWslVVaSm+6uXHjEnNzc44eO1hVVXk3/9b2nZuCgrr7vlv9pq/8fXz8evbsuyvt68CA4C2b01pZctaMzzhszu4928RikbW1oG+f/lOTZje75LyUZRs3rUqaOl4odEyaMtPPN+DRw3szZ7+fsScTADAsZpRUJp01+wONRt2n93sfz5lnXJHD5gQHhyoUcmcnlzYjT5yUpNNp09K2isS1LBY7ICBo/ZfbCAQCiUT6av32Xelbl6+cr1IphULHyZOnjYub1MoqLaU33VzkoCFqterosYN7MnawWOx+YRHTp3/6Nt+0CWh7jN/uRWVjPnWn0S305tDI0YPGjol/f/K0Zj9taKhPSBwxf97yiPDX5/Pp2Dy50aiQaMLHtjHMr8PO7NUoaawof7kjdbObm2f/9wZiHY6F0mH1//bb6T0ZO4K6dp+Xssx40vfgQf6iJcktrXLwwEne/59gQkK7r/zfCrVabWxX+Cf2dsI2rw7aC7BX/s1Co9EchI5YR2FBdJAfO86/A9cPNbh+qMH1Qw2uH2pw/VCD64caXD/U4Pqhpm39di70jjCDM2RQKEQ6s225bS+BaPX11fgczu2M6pdKNr/tFv229bv6MhvFGhNFhfOO0CN6e9e2e4W3rb/HYOv7l+vrqvAKoN2Q+0sN345i49j2XKxvNKM3ghi+X/605xBbgSONK3i9KyaOhaDXG8SV6sfX6x086CED+W+yyls8zuF6lqgkX87hk2tedpCaQG/QEwgEAuggp7YkMoFnQwnqz/PuxnnDVd76KZ4alb7DPPdz6dKl0dHR/fr1wzoQ00CjE9/2l/zW3T2oHaLbD4oeqEkUPY3RcfbobYF3z3Fg1y8QCCB/gjfU+sViMTpOCFqg1i8UCtGpJKAFav1VVVVarRbrKLAEav329vZ46YeX6upqvPTDC51Of23ULWxArV+lUpljxpR2BNT6caDWj1/4Qa0fv/CDWj8O1Pr5fD6JBPWTyaHWX19fjyAI1lFgCdT6caDWjzf7QK0fb/aBWj/kRR92/ZAXfdj140Ctn8FgQF7/Q61fqVRCXv9DrR8Hav14R2+o9eMdvaHWjwO1fry7B9T68e4eUOvHgVo/jUbDm33gRa1W480+8IKf+kGtHz/1g1o/j8fDu3rCS2NjI97VE164XC5e+uFFIpHgpR9e7O3t8Tt+8FJdXQ35Hb+3ntWzAzBy5Mjy8nK9Xk8kEtH/Op2uT58+u3btwjq0dw2Mpb9Xr16odQAA+t/e3n7q1KlYx4UBMOqPj493dXU1vjUYDP7+/qGhoZgGhQ0w6vfw8Ojdu7fxqGdra5uQkIB1UNgAo34AwPjx452dndHXvr6+PXr0wDoibIBUv6enJ1oBCASCSZMmYR0OZkCqHwAwYcIEBwcHmIt+2xd+teXquxcaql+olLIO2DqmQ3REIpFI6GhlwMaJptMaXDszescIWl+yNf3PHsuvnRZ3Dbe2sqUy2FC3jrUvCARQX6OW1mlv/CqassKdQmvx992i/ic3JY9vSKMSncwZJ4550aiQzK+ezt7i1dICzf8uVArkcR7uvt1DpZMGJjhcOl7T0gLN668sU5HIUPeB7DDYOtOL7sha+rR5/RKx1t6Nac6ocN4RNAbJwZMpETffp635Ezq1Sq/Dn9vaUaivUrd0ft/Rrnlw3gpcP9Tg+qEG1w81uH6owfVDDa4fanD9UIPrhxpcP9Tg+qEG1w81lqi/rKxkwKDQBw/ysQ7EvCxfMX9uykxsY7BE/f+dp09LJybEYh1FG8TGjokbi/H4go7Zg6+oqADrENqmR2hvrEMwnX6dTnfw0LdUbHdHAAARRElEQVQXLmZXV1fa2tqPi5s0ckQcAGDOJ0lMBnPDVzuMS36x8BOZTLpz+/f19XW70rfeuXNDKpXY2tqPGTVhzJiJr2W7cHEyAODLtVvRt+fOnVm3flnW6StMJhNBkP0H9pw/f7ZWVMPl8sL6hk//6FMGg7F3X/q+/XsAAAMGhc6e9Xnc2ISi4icZGTsKiwp0Om33bj1nz5orFDq0uTt7MnZcunyuvr7Oyoof3j/yo/99jM4D1VJu1dVVaelb8+/dVijkQqFj3NiE4bFjWklfvmK+TCbdvGkXAKCmpnpX2te3b+cpVUoXF7f4CR9ERcUAAJ4/f/ph0rgtm9N+PHHkwYN8IpE4ICJq9qy5ppqVwmT609K/yTrzU/InC7oEBN2+nbdj5yYymTwsZtSAiMFp6VtlMhmbzQYAyGSyO3duzJieDADYsGnVyxfPli5eZ20tePAwf/OWtXb2wn5hEW+4xeM/Hj58ZO/CBat8vH0rqyo2bFxJIpM/np0yccIHUpk0J+fi7rRDdDqjurrq87nTu3QJ+npzukar2ZX29dx5M7//9iiVSm0l88NH9mafy1q0cLWjo/PLF882bVlDpVL/N21OK7lt2LhSo9WsW7uVy+XdupW79Zv1QqFjj9DeLaUbt6XVaud9MZtCoaxetVkgsPn9/K/r1i9jMllhYeEkMhkAsDN182efLlyzavPtOzdS5s0KDOw2ICLqPxsDJtMvk8lOnjo2KWFKdHQsAMDZyaW4+MnhI3uHxYyKCI/cmbo5Ny8nctAQAMDVq5f0ej0a/exZc4lEoqODEwDAxcXt5Mljt27lvrn+yEFDe4T28fT0AgA4O7sOiBicd+Mq+ng2GpVGIBB4PCsAwKnTxwkEwpLFazlsDgBg0YLV8ZOGX75yPipyaCuZP31a4unhhUpycnTesikNnQCyldzKnpaMHjXBz7cLAMBpRJyPt6+9vQMAoKV0I3l5V1+8eLY7/ZC3V2cAwIcfTL9958ZPP/8QFhaOLhDeP7JLl64AgJDuPR0dnAoLH1uW/tLSIp1OFxry1y86KCgk68zPCoVCILAJ6to9J+ciqv9KzoWQ7j2trQUAAAadcThzb37+rcbGBr1eL5VKnJxc3nyjPJ5V9rmsTVvWiEQ1Op1OqVQwGM30TywoeOjbuQtqCwBgby90cHAqKSlsXX/fPv3XrV+2avXC/v0Hde/e09XVvc3c+vbpfyRzr0wm7dUrrGtgNz+/AGNWzaYbKS55QqPRvDr5GFN8fPzOnz9rfNvJ09v4ms3myGTSN/+WWsc0+hUKOQDgs7nTjXOkosMH6urFTCYzIiIqLX2rWq3W6XS3buV+nrwIPbjOXzAHQZA5s1NcXdxJJNKSZXPfaqPbd2w89/uZzz5d2CUgiEalHcncd+Hib/9cTC6XFZcUDh7Sx5ii1WrFdaLWM4+KimEyWSdPHfty/TIEQcL6hid/uoDPt24lt8+SF3p6eJ37/cyx44dYLNaI4XFJU2aSyeSW0o05yOQyOv1vTxViMVnoV4pCpdGaxmbCGTlMo5/FYgMAFi9a4+nxtxEFdrb2AIDw/oO2bd9w61auSq0CAISFRaDFqKys5Juv93Tt2g1duLGh3kHo2PqG1Bo1+gJBkDO/npycOA09RUI1txRbYGDw3M8WN01stp54jbCw8LCwcKVSmZuXszN188bNq9et+bqV3Mhk8tix8WPHxtfVibPPZX37XaqVFX/8uMSW0o2rs1lspVJhMBiMvwC5Qo5+pebGNNf9np7eFAqlvr7O1dUd/eNyeTyeFXp6ZWXF796tR25eztWrl3r36oeeA6IiuVwemsOjR/crqyr++btms9hN67rS0iL0hV6vRxDEuLpcLr92/UqzxcLPL6C8/KWjo7MxNgKBIBDYtL5HOTmXKqsq0Kd9DYiIGhYz6mlZSSu5yWSyc7//is4UZG0tmDjhfX//wLKykpbSm26rs4+/RqMpKn5iTHn86L6vb5e3lPBvMI1+NpsdGztm7770CxezKyrL7+bfSpk/a/2GFcYFIiKibt66fvPm9UGDhqApXp18qFTqiZ8yxWLRzVu527Zv6BHa++Wr5/X1dU1z9vb2ffLkUWlpscFgyLtx7ebN62g6hULx9ur8W/Yv5RWvSkuLFy1J7tUrTCqVvHjxTKfTsdkcsVh0//7dqqrK4bFjlUrFVxtWFJcUvnr1Yv+BjClTxz958qj1PfrxxJFVqxfeu3cH3Z1Ll38PCg4BALSUG4FA2Lb9q02b1xSXFFZUlv9+/mxRUUFwcEhL6U231bNnXzc3j82b1xQ8eVRe8WpPxo4nhY/Hxb2LYefNj/G78VudRgWCIqzfPCOdTnfgYMZv2b+IxSJra0HfPv2nJs1GCzoAQCKVjI0bTKfTfzyWbbziOn/ht4yMHfUNdT4+fsmfLKgV1axes9DW1n7p4nVT/zdx29aMwMBglUq1acuavNwcIonUs0efsLCIlasWnD55ic1ml5QUbdy06tnzMqHQMWnKTD/fgM8+/6ihsT5jTyaRQJy/YE5FxauE+A+nfDijsKhg9+5tjwsekEgkd/dOiZOm9u4V1vru1NfXpe7acvNWrlwuEwhsevfqN23qHHR3WsrtccHDjIwdxSVPNBqNUOg4LGYUWsO3lP7adX/qri237+SpVCpPD6/JidP69YsAALwqfzn5/dEbN+wMDemFBjZ9RqKXV+d5KUvfXM1P25+PnOHIs2lm8mqT6cexWFrR3zHb/HHekI7Z5v8mLFyc/PBh8zcVh8WMnjH903ceEQbAq3/p4nWIvvkpSyhkWJ7xAK9+JhMfwowf++EG1w81uH6owfVDDa4fanD9UIPrhxpcP9Q03+xDphD18D3kpaPCFVBa6iDUfOln8Uh1lWozR4XzLjAYDK+KFFa2zXdrbl6/QEg16PHS3xFoqNV4dmW19Gnz+m2caGwr8r0rdc1+itOO+OPH6tAofkuftjah+4WjtUQSISjcmkzBzxDbHwqp7sLhyv5jbZw6MVpapo3HOdzMrnt4rZFMITI4HfDeoF6vJxAITXtYdwy4fMrzJzKhOz00ku/g0aL7N3qMo15vaBRpFZIO+DSPXbt29enTJzg4GOtATAyBAPj2VAa77XGAbZdpIpHAt6Py7UwUmiWhIlSwbNROXq2Vj44NflCHGqj10+n0jnfgfyug1q9SqSB8gnVToNZva2vbdKglhECtv7a2Fh19By1Q67e2tjbVLCntFKj119XVIUgHbM94c6DWjwO1fvzCD2r9+IUf1PptbGzwCz94EYlE+IUfDrxArd/e3h6dpxVaoNZfXV2t1Tb/bGNIgFo/DtT68TN/qPXjZ/5Q68eBWj+Xy8Xv+MGLRCLB7/jhwAvU+mk0Gn7HD17UajV+xw9e8Pv9UOvH7/dDrR8Hav14P3+o9eP9/KHWjwO1foFAgFf+8CIWi/HKH17w0g+1frz0Q60f8iY/2PVD3uQHu34cXD/UQK2fz+fjnb3gpb6+HvLOXm3P6tnxiI6OFolEryV6e3tnZmZiFBFmwFj6u3fvTvg7LBbrww8/xDouDIBR/8SJEx0cHJqmeHh4DBkyBLuIMANG/UFBQX5+fsajHpPJTExMxDoobIBRPwAgISHBxsYGfe3m5hYVFYV1RNgAqf7g4GB/f3+DwQBz0YdXPwDggw8+sLa2dnNzi46OxjoWzGgHF35KGfLiiUJUqZE36hRSRKs2WcCvyl9xuVwuh2uS3FhWZESrZ3HJHD7J3pXu6ss0SbZmxaL1519peJwrldZp+c4cQCCSqSQKjUQkW2qNRQA6NaJTIzqNTi3TyERKF192YD+Ou1+LD9LCHAvVn3+l8fppkV0nKwaPzrSiYx3Ov0GvN0hr5IoGJdGgCx9rI3SzxL2wOP1yCXJmb7UOIdl5WZMstqC/DfI6ZW1ZvbM3PXKiLdaxvI5l6X9ZrMjKqPLs7USld7Q+WA3lElWjfOJcZ6wD+RsWpF9Uqf4lo9o91AnrQMyFvF7V+Koufp6z5fQyspTatfKp8pc9Hdk9AIDFp/PdBftWv8A6kL+wCP1atf7n1Ar3Hh3ZPQqDQ7N245/eU4l1IH9iEfp/3Vft0dMR6yjeEVw7FgKoD3IasA4EWIT+ottShQzQ2c0/YbxDwnPkXfnp9Q4HmIC9/j9OigQe1lhH8U4hEAlCL6urp8VYB4K1/oKbjRxbFsVSL/PuPTyfsrSXXG76ilrgzi99oNDrMb7swlh/8V0FjWOJzWHvACKJ+PyxAuMYsN38y0I517Yd3BoxB0xrZsl9GbYxYFnrvipWOHTiEIjmagN5VfHkzLnUVxVPEJ3Wu1OPEUM/s+Y7AAD2Zy4iEEBn7z4Xr+xvlNba2biNjk1xcwkEACCI7uSZr+/cP2vQ6/079/PyDDVTbAAAji1TWq40X/5vApalX1qn02jMdfCrb6hK+24WkUCcmZQ6I2mnQiFJ3ztHq9MAAEgk8tPn9168fJQ8a/+KL84ymbwfTqxB17pwZV/erZ9HDE3+bNZ+D/fg3y9/Z6bwAAAUGrmiRIFtqyuW+uUSHZFsrlEW12+eAATCpHGrHey9XJz84+NW1NWXP3h0Af1Uo1GOGJpMozKoVHr3rkNqRM80GhUA4Pa9XwP8w3t2H24jcOnbc6xPp15mCg+FxiQpJFgONMBSv1KhJ9PMdfR58fKhq5M/g8FB3/KthNZ8p/LKIvStjcCFSv3zlJPJ4AIAFEqJTqcViV+6OPkbM3F17mKm8P7cNI8qa8TycSJYHvsJBqDXmavqU6rkFVWFX6zoZ0xBEK1E+mdjC5lM+8caBo1GCQCgNPmIRjPvaalGoSNTsCyBWOpnWZF0z83126fTWR6uwXEjFzRNpFJb00mh0gEASvVfZ+NKpdRM4aFoVAiLi6UCTPVzyXqtykyZu7kE3LqbJbB2JpH+3Mea2udcjk0rq1DIVL6VQ2VVsTGlqPSGmcJDuwMhWj2dheUYUyxrHr49BRjMdeLTO3S0Wq3IPLGqvKKwVvTi3MVvN+2If1n+qPW1ugUOfvj4cu6tnyurSi5fPVTx/+cK5kAj19q7M8yX/5uAZem3daIrpTqNUkdlmD4Ma77DjKTUrOwdOzM+IhJJQrtOUyZtQi/uWyFq4DS5ouGXs9v0Br2fT9iwwXP2/7BQb9CbPDwAgKRW7toJ4xZPjHv7XPihpr6BInA1TVfr9sWzm+UxU+zsXLD8BWDc6Ns5lK1TqbGNARM0Si2bT8bWPcaVPwDAqROTTKyXihQcm+bPyWtqn23bPbXZjwiAYADNV129Q0bFDvnYhHEuWTuo2XS9HgEGA5HUzNfYxbd//NjlLWVYW1rfYyDHhBH+O7Dv6imuUJ/cXeXZq/kusAiia5TUNPuRQillMpr/Bmk0FovJM2GQdfUVzaZrtWoDAFTKP1sRAJXKYLP4za6llKjFZaLEha4mjPDfgb1+tMdHfT2Fa8/GOpB3RE1RzXsjeA4e2N/qxL63DwDgvZE28lqJosFcbQAWRXWRyDeEaQnuLUU/ACB+nkvFoxqNsoM/T7uqUCx0JnXtZ8oD03/BIip/FIPesGfxU8cudmwBxo0hZqK6WOzqRekT0/wJASZYkH6Uo1+XUzhMvlOHagnQqnQ1JWLf7oyQQRbk3hL1AwCun6m7/0eDXSdrvhP2l0b/ET2irympk4kVQxLtnTtbxPG+KZaoHwCgkOou/yhuqEMAkcy1Y7H47aw7KKLTS2sV0lo5otYG9+cFR1hhHVHzWKh+lIZaTck9eXG+HEGARqkn00gkKplIspTxka9BopA0Cg2iQRAtolbonH1YfqHsTkEsyxnQ+U8sWr8RlUInrUPkEp1SiqhVZrkB89+h0IgUCoHJJbG4JL59Mw1BFkj70I9jJizluh8HE3D9UIPrhxpcP9Tg+qEG1w81/weoPoz25TnSQgAAAABJRU5ErkJggg==\n" 549 | }, 550 | "metadata": {}, 551 | "execution_count": 14 552 | } 553 | ], 554 | "source": [ 555 | "# Build the LangGraph\n", 556 | "\n", 557 | "graph = StateGraph(MentalHealthState)\n", 558 | "graph.add_node(\"classify_user\", classify_user_node)\n", 559 | "graph.add_node(\"therapy_session\", therapy_session_node)\n", 560 | "graph.add_node(\"evaluate_session\", evaluate_session_node)\n", 561 | "graph.set_entry_point(\"classify_user\")\n", 562 | "graph.add_edge(\"classify_user\", \"therapy_session\")\n", 563 | "graph.add_edge(\"therapy_session\", \"evaluate_session\")\n", 564 | "graph.set_finish_point(\"evaluate_session\")\n", 565 | "graph.compile()\n", 566 | "\n", 567 | "# # Wrapper agent\n", 568 | "# class MentalHealthAgent:\n", 569 | "# def __init__(self):\n", 570 | "# self.graph = build_mental_health_graph()\n", 571 | "\n", 572 | "# def run(self, query_id: str, user_id: str, state: MentalHealthState) -> Dict[str, Any]:\n", 573 | "# final_state = self.graph.invoke(state)\n", 574 | "# return {\n", 575 | "# \"user_profile\": final_state.user_profile,\n", 576 | "# \"generation\": final_state.user_profile.generation,\n", 577 | "# \"initial_mental_health_state\": final_state.user_profile.initial_mental_health_state,\n", 578 | "# \"evaluation_report\": final_state.evaluation_report.dict()\n", 579 | "# }" 580 | ] 581 | } 582 | ], 583 | "metadata": { 584 | "accelerator": "GPU", 585 | "colab": { 586 | "gpuType": "T4", 587 | "provenance": [] 588 | }, 589 | "kernelspec": { 590 | "display_name": "Python 3", 591 | "name": "python3" 592 | }, 593 | "language_info": { 594 | "name": "python" 595 | } 596 | }, 597 | "nbformat": 4, 598 | "nbformat_minor": 0 599 | } --------------------------------------------------------------------------------