From 43b01d3a59c992b3f7fcef3ba87e2cbc42fea4a7 Mon Sep 17 00:00:00 2001 From: Munish Dabra <100611213+awsdabra@users.noreply.github.com> Date: Tue, 15 Aug 2023 03:59:50 +0000 Subject: [PATCH 1/9] Added code generation module and examples --- .../00_code_generatation_w_bedrock.ipynb | 995 +++++++++++++++ .../01_sql_query_generate_w_bedrock.ipynb | 1025 +++++++++++++++ .../02_code_interpret_w_langchain.ipynb | 967 ++++++++++++++ .../03_code_translate_w_langchain.ipynb | 1132 +++++++++++++++++ 06_CodeGeneration/README.md | 37 + .../images/bedrock-code-gen-langchain.png | Bin 0 -> 71989 bytes 06_CodeGeneration/images/bedrock-code-gen.png | Bin 0 -> 56538 bytes 06_CodeGeneration/sales.csv | 26 + README.md | 11 + 9 files changed, 4193 insertions(+) create mode 100644 06_CodeGeneration/00_code_generatation_w_bedrock.ipynb create mode 100644 06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb create mode 100644 06_CodeGeneration/02_code_interpret_w_langchain.ipynb create mode 100644 06_CodeGeneration/03_code_translate_w_langchain.ipynb create mode 100644 06_CodeGeneration/README.md create mode 100644 06_CodeGeneration/images/bedrock-code-gen-langchain.png create mode 100644 06_CodeGeneration/images/bedrock-code-gen.png create mode 100644 06_CodeGeneration/sales.csv diff --git a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb new file mode 100644 index 00000000..7f8cd2b5 --- /dev/null +++ b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb @@ -0,0 +1,995 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "dc40c48b-0c95-4757-a067-563cfccd51a5", + "metadata": { + "tags": [] + }, + "source": [ + "# Invoke Bedrock model for code generation\n", + "\n", + "> *This notebook should work well with the **`Data Science 3.0`** kernel in SageMaker Studio*" + ] + }, + { + "cell_type": "markdown", + "id": "c9a413e2-3c34-4073-9000-d8556537bb6a", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "In this notebook we show you how to use a LLM to generate code based on the text prompt.\n", + "\n", + "We will use Bedrock's Claude v2 using the Boto3 API. \n", + "\n", + "The prompt used in this example is called a zero-shot prompt because we are not providing any examples of text other than the prompt.\n", + "\n", + "**Note:** *This notebook can be run within or outside of AWS environment.*\n", + "\n", + "#### Context\n", + "To demonstrate the code generation capability of Amazon Bedrock, we will explore the use of Boto3 client to communicate with Amazon Bedrock API. We will demonstrate different configurations available as well as how simple input can lead to desired outputs.\n", + "\n", + "#### Pattern\n", + "We will simply provide the Amazon Bedrock API with an input consisting of a task, an instruction and an input for the model under the hood to generate an output without providing any additional example. The purpose here is to demonstrate how the powerful LLMs easily understand the task at hand and generate compelling outputs.\n", + "\n", + "![](./images/bedrock-code-gen.png)\n", + "\n", + "#### Use case\n", + "To demonstrate the generation capability of models in Amazon Bedrock, let's take the use case of code generation.\n", + "\n", + "#### Persona\n", + "\n", + "You are Moe, a Data Analyst, at AnyCompany. The company wants to understand its sales performance for different products for different products over the past year. You have been provided a dataset named sales.csv. The dataset contains the following columns:\n", + "\n", + "- Date (YYYY-MM-DD) format\n", + "- Product_ID (unique identifer for each product)\n", + "- Price (price at which each product was sold)\n", + "\n", + "#### Implementation\n", + "To fulfill this use case, in this notebook we will show how to generate code for a given prompt.We will use the Anthropic Claude v2 using the Amazon Bedrock API with Boto3 client. " + ] + }, + { + "cell_type": "markdown", + "id": "64baae27-2660-4a1e-b2e5-3de49d069362", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "Before running the rest of this notebook, you'll need to run the cells below to (ensure necessary libraries are installed and) connect to Bedrock.\n", + "\n", + "For more details on how the setup works and ⚠️ **whether you might need to make any changes**, refer to the [Bedrock boto3 setup notebook](../00_Intro/bedrock_boto3_setup.ipynb) notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "38b791ad-e6c5-4da5-96af-5c356a36e19d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Make sure you ran `download-dependencies.sh` from the root of the repository first!\n", + "%pip install --no-build-isolation --force-reinstall \\\n", + " ../dependencies/awscli-*-py3-none-any.whl \\\n", + " ../dependencies/boto3-*-py3-none-any.whl \\\n", + " ../dependencies/botocore-*-py3-none-any.whl\n", + "\n", + "%pip install --quiet langchain==0.0.249" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7ea26558", + "metadata": {}, + "outputs": [], + "source": [ + "# Optional - To execute the generated code in this notebook\n", + "%pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "776fd083", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "import sys\n", + "\n", + "import boto3\n", + "\n", + "module_path = \"..\"\n", + "sys.path.append(os.path.abspath(module_path))\n", + "from utils import bedrock, print_ww\n", + "\n", + "\n", + "# ---- ⚠️ Un-comment and edit the below lines as needed for your AWS setup ⚠️ ----\n", + "\n", + "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-east-1\" # E.g. \"us-east-1\"\n", + "os.environ[\"AWS_PROFILE\"] = \"fine-tuning-bedrock\"\n", + "# os.environ[\"BEDROCK_ASSUME_ROLE\"] = \"\" # E.g. \"arn:aws:...\"\n", + "# os.environ[\"BEDROCK_ENDPOINT_URL\"] = \"\" # E.g. \"https://...\"\n", + "\n", + "\n", + "boto3_bedrock = bedrock.get_bedrock_client(\n", + " assumed_role=os.environ.get(\"BEDROCK_ASSUME_ROLE\", None),\n", + " endpoint_url=os.environ.get(\"BEDROCK_ENDPOINT_URL\", None),\n", + " region=os.environ.get(\"AWS_DEFAULT_REGION\", None),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "4f634211-3de1-4390-8c3f-367af5554c39", + "metadata": {}, + "source": [ + "## Code Generation\n", + "\n", + "Following on the use case explained above, let's prepare an input for the Amazon Bedrock service to generate python program for our use-case." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "45ee2bae-6415-4dba-af98-a19028305c98", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Create the prompt\n", + "# Analyzing sales with a Python Program\n", + "\n", + "prompt_data = \"\"\"\n", + "Command: Human: You have a CSV, sales.csv, with columns:\n", + "- date (YYYY-MM-DD)\n", + "- product_id\n", + "- price\n", + "- units_sold\n", + "\n", + "Wrte a python program to load the data and determine \n", + "\n", + "- Total revenue for the year\n", + "- The product with the highest revenue\n", + "- The date with the highest revenue\n", + "- Visualize monthly sales using a bar chart\n", + "\n", + "Assistant:\n", + "\"\"\"" + ] + }, + { + "cell_type": "markdown", + "id": "cc9784e5-5e9d-472d-8ef1-34108ee4968b", + "metadata": {}, + "source": [ + "Let's start by using the Anthropic Claude V2 model." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "8af670eb-ad02-40df-a19c-3ed835fac8d9", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Claude - Body Syntex\n", + "body = json.dumps({\n", + " \"prompt\": prompt_data,\n", + " \"max_tokens_to_sample\":4096,\n", + " \"temperature\":0.5,\n", + " \"top_k\":250,\n", + " \"top_p\":0.5,\n", + " \"stop_sequences\": [\"\\n\\nHuman:\"]\n", + " }) " + ] + }, + { + "cell_type": "markdown", + "id": "c4ca6751", + "metadata": {}, + "source": [ + "The Amazon Bedrock API provides you with an API `invoke_model` which accepts the following:\n", + "- `modelId`: This is the model ARN for the various foundation models available under Amazon Bedrock\n", + "- `accept`: The type of input request\n", + "- `contentType`: The content type of the output\n", + "- `body`: A json string consisting of the prompt and the configurations\n", + "\n", + "Available text generation models under Amazon Bedrock have the following IDs:\n", + "- `amazon.titan-tg1-large`\n", + "- `amazon.titan-e1t-medium`\n", + "- `ai21.j2-grande-instruct`\n", + "- `ai21.j2-jumbo-instruct`\n", + "- `ai21.j2-mid`\n", + "- `ai21.j2-ultra`\n", + "- `anthropic.claude-instant-v1`\n", + "- `anthropic.claude-v1`\n", + "- `anthropic.claude-v2`" + ] + }, + { + "cell_type": "markdown", + "id": "088cf6bf-dd73-4710-a0cc-6c11d220c431", + "metadata": {}, + "source": [ + "#### Invoke the Anthropic Claude v2 model" + ] + }, + { + "cell_type": "markdown", + "id": "379498f2", + "metadata": {}, + "source": [ + "First, we explore how the model generates an output based on the prompt created earlier.\n", + "\n", + "##### Complete Output Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "016a118a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Here is a Python program to analyze the sales CSV file as described:\n", + "\n", + "```python\n", + "import csv\n", + "from collections import defaultdict\n", + "import matplotlib.pyplot as plt\n", + "\n", + "revenue_by_month = defaultdict(int)\n", + "\n", + "with open('sales.csv', 'r') as f:\n", + " reader = csv.DictReader(f)\n", + " total_revenue = 0\n", + " max_revenue_product = None\n", + " max_revenue = 0\n", + " max_revenue_date = None\n", + "\n", + " for row in reader:\n", + " revenue = float(row['price']) * int(row['units_sold'])\n", + " total_revenue += revenue\n", + "\n", + " date = row['date']\n", + " month = date.split('-')[1]\n", + " revenue_by_month[month] += revenue\n", + "\n", + " if revenue > max_revenue:\n", + " max_revenue = revenue\n", + " max_revenue_product = row['product_id']\n", + " max_revenue_date = date\n", + "\n", + "print('Total revenue:', total_revenue)\n", + "print('Product with max revenue:', max_revenue_product)\n", + "print('Date with max revenue:', max_revenue_date)\n", + "\n", + "plt.bar(revenue_by_month.keys(), revenue_by_month.values())\n", + "plt.xlabel('Month')\n", + "plt.ylabel('Revenue')\n", + "plt.title('Revenue by Month')\n", + "plt.show()\n", + "```\n", + "\n", + "This loads the CSV data, calculates the total revenue, finds the product and date with max revenue,\n", + "and visualizes the revenue per month in a bar chart. The defaultdict is used to easily accumulate\n", + "values by month.\n" + ] + } + ], + "source": [ + "modelId = 'anthropic.claude-v2' # change this to use a different version from the model provider\n", + "accept = 'application/json'\n", + "contentType = 'application/json'\n", + "\n", + "response = boto3_bedrock.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)\n", + "response_body = json.loads(response.get('body').read())\n", + "\n", + "print_ww(response_body.get('completion'))" + ] + }, + { + "cell_type": "markdown", + "id": "ddddd1ec", + "metadata": {}, + "source": [ + "#### (Optional) Execute the Bedrock generated code for validation. Go to text editor to copy the generated code as printed output can be trucncated. Replce the code in below cell." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "395fad3b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total revenue: 35490.0\n", + "Product with max revenue: P003\n", + "Date with max revenue: 2023-04-23\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/30lEQVR4nO3df3zN9f//8fuZ2Y+wzbDNNCwKiyjeWAm97WvYu1opv0Zkkd5bPyg/9q786gdWy4+Spd6ZincovEV+LKq9Mb+GRCi9J8K2vGc7ITPb6/uHz16XTvPjZY1zNrfr5XIuF+f1fJznebyeabt7vV7ndWyGYRgCAADAJbk5uwEAAICKgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAWde7cWc2bN3d2Gy5h0KBBql69urPbAK4pQhNwHUpJSZHNZjMf7u7uqlevngYNGqQjR444u73rXsl/l8cee+yC488//7xZc/z48avWx+nTpzV+/Hh99dVXV+09gIrE3dkNAHCeiRMnKjQ0VGfOnNGmTZuUkpKi9evXa/fu3fLy8nJ2e9c1Ly8vffrpp3r77bfl4eHhMPavf/1LXl5eOnPmzFXt4fTp05owYYKk80fZgOsdR5qA61j37t3Vv39/PfbYY3rvvff03HPP6ccff9SyZcuc3dp1r1u3brLb7Vq5cqXD9o0bNyozM1NRUVFO6gy4fhGaAJjuvvtuSdKPP/7osH3fvn166KGH5O/vLy8vL7Vp08YhWG3btk02m01z584tNefq1atls9m0fPlyc9uRI0c0ePBgBQYGytPTU7feeqvef/99h9d99dVXstlsWrhwoV555RXdeOON8vLyUpcuXXTgwAGH2oYNG2rQoEGl3rtz586ljpAUFBRo3Lhxaty4sTw9PRUSEqJRo0apoKDA0hpJUkZGhu688055e3srNDRUycnJ5tjJkydVrVo1Pf3006Ve9/PPP6tKlSqaNGnSZd+jXr166tixo+bPn++wfd68eWrRosVFr61atGiRWrduLW9vb9WuXVv9+/cvdcq15HqkI0eOKDo6WtWrV1edOnX03HPPqaioSJJ08OBB1alTR5I0YcIE83Tg+PHjHea61BxAZUNoAmA6ePCgJKlmzZrmtj179qh9+/bau3evxowZo6SkJFWrVk3R0dFasmSJJKlNmza66aabtHDhwlJzLliwQDVr1lRkZKQkKTs7W+3bt9cXX3yh+Ph4TZ8+XY0bN1ZsbKymTZtW6vWTJ0/WkiVL9NxzzykhIUGbNm1STExMmfavuLhY9913n15//XXde++9evPNNxUdHa2pU6eqd+/eluY4ceKEevToodatWysxMVE33nijnnjiCTP0Va9eXQ888IAWLFhQKjz861//kmEYlvvv16+fPvvsM508eVKSdO7cOS1atEj9+vW7YH1KSop69eplBrMhQ4Zo8eLF6tChg/Ly8hxqi4qKFBkZqVq1aun1119Xp06dlJSUpNmzZ0uS6tSpo1mzZkmSHnjgAX344Yf68MMP9eCDD1qeA6h0DADXnTlz5hiSjC+++ML45ZdfjMOHDxuffPKJUadOHcPT09M4fPiwWdulSxejRYsWxpkzZ8xtxcXFxp133mncfPPN5raEhASjatWqRm5urrmtoKDA8PPzMwYPHmxui42NNerWrWscP37coac+ffoYvr6+xunTpw3DMIwvv/zSkGQ0a9bMKCgoMOumT59uSDK+/fZbc1uDBg2MgQMHltrPTp06GZ06dTKff/jhh4abm5vxn//8x6EuOTnZkGRs2LDhkuvWqVMnQ5KRlJTksI+tWrUyAgICjLNnzxqGYRirV682JBkrV650eP1tt93m0M/FSDLi4uKM3Nxcw8PDw/jwww8NwzCMFStWGDabzTh48KAxbtw4Q5Lxyy+/GIZhGGfPnjUCAgKM5s2bG7/99ps51/Llyw1JxtixY81tAwcONCQZEydOdHjf22+/3WjdurX5/JdffjEkGePGjSvVo9U5gMqEI03AdSwiIkJ16tRRSEiIHnroIVWrVk3Lli3TjTfeKEnKzc3VunXr1KtXL/366686fvy4jh8/rv/973+KjIzUDz/8YJ766d27twoLC7V48WJz/jVr1igvL888imMYhj799FPde++9MgzDnO/48eOKjIxUfn6+tm/f7tDjo48+6nAhdMkpxP/+979XvL+LFi1Ss2bN1LRpU4f3/utf/ypJ+vLLLy87h7u7ux5//HHzuYeHhx5//HHl5OQoIyPDXNfg4GDNmzfPrNu9e7d27dql/v37W+63Zs2a6tatm/71r39JkubPn68777xTDRo0KFW7bds25eTk6O9//7vDRfxRUVFq2rSpVqxYUeo1w4YNc3h+9913X/G6lsccQEXBp+eA69jMmTN1yy23KD8/X++//77S0tLk6elpjh84cECGYejFF1/Uiy++eME5cnJyVK9ePbVs2VJNmzbVggULFBsbK+n8qbnatWuboeSXX35RXl6eZs+efdFTODk5OQ7P69ev7/C85NThiRMnrnh/f/jhB+3du9e8Vudy730hwcHBqlatmsO2W265RdL505vt27eXm5ubYmJiNGvWLJ0+fVo33HCD5s2bJy8vLz388MNX1HO/fv00YMAAHTp0SEuXLlViYuIF63766SdJUpMmTUqNNW3aVOvXr3fY5uXlVWodataseUXrWh5zABUJoQm4jrVt21Zt2rSRJEVHR6tDhw7q16+f9u/fr+rVq6u4uFiS9Nxzz5nXJP1R48aNzT/37t1br7zyio4fP64aNWpo2bJl6tu3r9zdz/+oKZmvf//+Gjhw4AXnu+222xyeV6lS5YJ1hmGYf7bZbBesKSoqcnh9cXGxWrRooTfeeOOC9SEhIRfcXhaPPPKIXnvtNS1dulR9+/bV/Pnz9be//U2+vr5XNM99990nT09PDRw4UAUFBerVq1e59Hexdb3WcwAVCaEJgCSZFw/fc889euuttzRmzBjddNNNkqSqVasqIiLisnP07t1bEyZM0KeffqrAwEDZ7Xb16dPHHK9Tp45q1KihoqIiS/NZVbNmzVIXOkvnj76U7IMkNWrUSN988426dOly0aB1OUePHtWpU6ccjjZ9//33ks5/iq9E8+bNdfvtt2vevHm68cYbdejQIb355ptX/H7e3t6Kjo7WRx99pO7du6t27doXrCs5Zbd//37zyF6J/fv3X/CU3uWUdY2AyoprmgCYOnfurLZt22ratGk6c+aMAgIC1LlzZ73zzjs6duxYqfpffvnF4XmzZs3UokULLViwQAsWLFDdunXVsWNHc7xKlSrq2bOnPv30U+3evfuy81nVqFEjbdq0SWfPnjW3LV++XIcPH3ao69Wrl44cOaJ333231By//fabTp06ddn3OnfunN555x3z+dmzZ/XOO++oTp06at26tUPtgAEDtGbNGk2bNk21atVS9+7dr3TXJJ0/0jdu3LiLniKVzn+CMSAgQMnJyQ63T1i5cqX27t1bpvs63XDDDZJ0wUAKXI840gTAwciRI/Xwww8rJSVFw4YN08yZM9WhQwe1aNFC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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Sample Generated Python Code ( Generated with Amazon Bedrock in previous step)\n", + "\n", + "import csv\n", + "from collections import defaultdict\n", + "import matplotlib.pyplot as plt\n", + " \n", + "revenue_by_month = defaultdict(int)\n", + "\n", + "with open('sales.csv', 'r') as f:\n", + " reader = csv.DictReader(f)\n", + " total_revenue = 0\n", + " max_revenue_product = None\n", + " max_revenue = 0\n", + " max_revenue_date = None\n", + "\n", + " for row in reader:\n", + " revenue = float(row['price']) * int(row['units_sold'])\n", + " total_revenue += revenue\n", + "\n", + " date = row['date']\n", + " month = date.split('-')[1]\n", + " revenue_by_month[month] += revenue\n", + "\n", + " if revenue > max_revenue:\n", + " max_revenue = revenue\n", + " max_revenue_product = row['product_id']\n", + " max_revenue_date = date\n", + "\n", + "print('Total revenue:', total_revenue)\n", + "print('Product with max revenue:', max_revenue_product)\n", + "print('Date with max revenue:', max_revenue_date)\n", + "'\n", + "# Plot 'Revenue by Month'\n", + "plt.bar(revenue_by_month.keys(), revenue_by_month.values())\n", + "plt.xlabel('Month')\n", + "plt.ylabel('Revenue')\n", + "plt.title('Revenue by Month')\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "64b08b3b", + "metadata": {}, + "source": [ + "## Conclusion\n", + "You have now experimented with using `boto3` SDK which provides a vanilla exposure to Amazon Bedrock API. Using this API you generate a python program to analyze and visualize given sales data'\n", + "\n", + "### Take aways\n", + "- Adapt this notebook to experiment with different models available through Amazon Bedrock such as Amazon Titan and AI21 Labs Jurassic models.\n", + "- Change the prompts to your specific usecase and evaluate the output of different models.\n", + "- Play with the token length to understand the latency and responsiveness of the service.\n", + "- Apply different prompt engineering principles to get better outputs.\n", + "\n", + "## Thank You" + ] + } + ], + "metadata": { + "availableInstances": [ + { + "_defaultOrder": 0, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.t3.medium", + "vcpuNum": 2 + }, + { + "_defaultOrder": 1, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.t3.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 2, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.t3.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 3, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.t3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 4, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 5, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 6, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 7, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 8, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 9, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 10, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 11, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 12, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5d.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 13, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5d.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 14, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5d.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 15, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5d.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 16, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5d.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 17, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5d.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 18, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5d.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 19, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 20, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": true, + "memoryGiB": 0, + "name": "ml.geospatial.interactive", + "supportedImageNames": [ + "sagemaker-geospatial-v1-0" + ], + "vcpuNum": 0 + }, + { + "_defaultOrder": 21, + "_isFastLaunch": true, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.c5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 22, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.c5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 23, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.c5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 24, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.c5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 25, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 72, + "name": "ml.c5.9xlarge", + "vcpuNum": 36 + }, + { + "_defaultOrder": 26, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 96, + "name": "ml.c5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 27, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 144, + "name": "ml.c5.18xlarge", + "vcpuNum": 72 + }, + { + "_defaultOrder": 28, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.c5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 29, + "_isFastLaunch": true, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g4dn.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 30, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g4dn.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 31, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g4dn.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 32, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g4dn.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 33, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g4dn.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 34, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g4dn.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 35, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 61, + "name": "ml.p3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 36, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 244, + "name": "ml.p3.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 37, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 488, + "name": "ml.p3.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 38, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.p3dn.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 39, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.r5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 40, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.r5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 41, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.r5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 42, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.r5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 43, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.r5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 44, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.r5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 45, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 512, + "name": "ml.r5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 46, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.r5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 47, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 48, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 49, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 50, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 51, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 52, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 53, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.g5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 54, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.g5.48xlarge", + "vcpuNum": 192 + }, + { + "_defaultOrder": 55, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 56, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4de.24xlarge", + "vcpuNum": 96 + } + ], + "instance_type": "ml.t3.medium", + "kernelspec": { + "display_name": "Python 3", + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb b/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb new file mode 100644 index 00000000..e3961740 --- /dev/null +++ b/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb @@ -0,0 +1,1025 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "dc40c48b-0c95-4757-a067-563cfccd51a5", + "metadata": { + "tags": [] + }, + "source": [ + "# Invoke Bedrock model for SQL Query Generation\n", + "\n", + "> *This notebook should work well with the **`Data Science 3.0`** kernel in SageMaker Studio*" + ] + }, + { + "cell_type": "markdown", + "id": "c9a413e2-3c34-4073-9000-d8556537bb6a", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "In this notebook we show you how to use a LLM to generate SQL Query to analyze Sales data.\n", + "\n", + "We will use Bedrock's Claude V2 model using the Boto3 API. \n", + "\n", + "The prompt used in this example is called a zero-shot prompt because we are not providing any examples of text other than the prompt.\n", + "\n", + "**Note:** *This notebook can be run within or outside of AWS environment.*\n", + "\n", + "#### Context\n", + "To demonstrate the SQL code generation capability of Amazon Bedrock, we will explore the use of Boto3 client to communicate with Amazon Bedrock API. We will demonstrate different configurations available as well as how simple input can lead to desired outputs.\n", + "\n", + "#### Pattern\n", + "We will simply provide the Amazon Bedrock API with an input consisting of a task, an instruction and an input for the model under the hood to generate an output without providing any additional example. The purpose here is to demonstrate how the powerful LLMs easily understand the task at hand and generate compelling outputs.\n", + "\n", + "![](./images/bedrock-code-gen.png)\n", + "\n", + "#### Use case\n", + "Let's take the use case to generate SQL queries to analyze sales data, focusing on trends, top products and average sales.\n", + "\n", + "#### Persona\n", + "Maya is a business analyst, at AnyCompany primarily focusing on sales and inventory data. She is transitioning from Speadsheet analysis to data-driven analysis and want to use SQL to fetch specific data points effectively. She wants to use LLMs to generate SQL queries for her analysis. \n", + "\n", + "#### Implementation\n", + "To fulfill this use case, in this notebook we will show how to generate SQL queries. We will use the Anthropic Claude v2 model using the Amazon Bedrock API with Boto3 client. " + ] + }, + { + "cell_type": "markdown", + "id": "64baae27-2660-4a1e-b2e5-3de49d069362", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "Before running the rest of this notebook, you'll need to run the cells below to (ensure necessary libraries are installed and) connect to Bedrock.\n", + "\n", + "For more details on how the setup works and ⚠️ **whether you might need to make any changes**, refer to the [Bedrock boto3 setup notebook](../00_Intro/bedrock_boto3_setup.ipynb) notebook." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "38b791ad-e6c5-4da5-96af-5c356a36e19d", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Make sure you ran `download-dependencies.sh` from the root of the repository first!\n", + "%pip install --no-build-isolation --force-reinstall \\\n", + " ../dependencies/awscli-*-py3-none-any.whl \\\n", + " ../dependencies/boto3-*-py3-none-any.whl \\\n", + " ../dependencies/botocore-*-py3-none-any.whl\n", + "\n", + "%pip install --quiet langchain==0.0.249" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "776fd083", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "import sys\n", + "\n", + "import boto3\n", + "\n", + "module_path = \"..\"\n", + "sys.path.append(os.path.abspath(module_path))\n", + "from utils import bedrock, print_ww\n", + "\n", + "\n", + "# ---- ⚠️ Un-comment and edit the below lines as needed for your AWS setup ⚠️ ----\n", + "\n", + "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-east-1\" # E.g. \"us-east-1\"\n", + "os.environ[\"AWS_PROFILE\"] = \"fine-tuning-bedrock\"\n", + "# os.environ[\"BEDROCK_ASSUME_ROLE\"] = \"\" # E.g. \"arn:aws:...\"\n", + "# os.environ[\"BEDROCK_ENDPOINT_URL\"] = \"\" # E.g. \"https://...\"\n", + "\n", + "\n", + "boto3_bedrock = bedrock.get_bedrock_client(\n", + " assumed_role=os.environ.get(\"BEDROCK_ASSUME_ROLE\", None),\n", + " endpoint_url=os.environ.get(\"BEDROCK_ENDPOINT_URL\", None),\n", + " region=os.environ.get(\"AWS_DEFAULT_REGION\", None),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "4f634211-3de1-4390-8c3f-367af5554c39", + "metadata": {}, + "source": [ + "## Generate SQL Query\n", + "\n", + "Following on the use case explained above, let's prepare an input for the Amazon Bedrock service to generate SQL query." + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "id": "45ee2bae-6415-4dba-af98-a19028305c98", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# create the prompt to generate SQL query\n", + "prompt_data = \"\"\"\n", + "Command: Human: AnyCompany has a database with a table named sales_data containing sales records. The table has following columns:\n", + "- date (YYYY-MM-DD)\n", + "- product_id\n", + "- price\n", + "- units_sold\n", + "\n", + "Can you generate SQL queries for below: \n", + "- Identify the top 5 best selling products by total sales for the year 2023\n", + "- Calculate the monthly average sales for the year 2023\n", + "\n", + "Assistant:\n", + "\"\"\"\n" + ] + }, + { + "cell_type": "markdown", + "id": "cc9784e5-5e9d-472d-8ef1-34108ee4968b", + "metadata": {}, + "source": [ + "Let's start by using the Anthorpic Claude v2 model. " + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "8af670eb-ad02-40df-a19c-3ed835fac8d9", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Claude - Body Syntex\n", + "body = json.dumps({\n", + " \"prompt\": prompt_data,\n", + " \"max_tokens_to_sample\":4096,\n", + " \"temperature\":0.5,\n", + " \"top_k\":250,\n", + " \"top_p\":0.5,\n", + " \"stop_sequences\": [\"\\n\\nHuman:\"]\n", + " }) " + ] + }, + { + "cell_type": "markdown", + "id": "c4ca6751", + "metadata": {}, + "source": [ + "The Amazon Bedrock API provides you with an API `invoke_model` which accepts the following:\n", + "- `modelId`: This is the model ARN for the various foundation models available under Amazon Bedrock\n", + "- `accept`: The type of input request\n", + "- `contentType`: The content type of the output\n", + "- `body`: A json string consisting of the prompt and the configurations\n", + "\n", + "Available text generation models under Amazon Bedrock have the following IDs:\n", + "- `amazon.titan-tg1-large`\n", + "- `amazon.titan-e1t-medium`\n", + "- `ai21.j2-grande-instruct`\n", + "- `ai21.j2-jumbo-instruct`\n", + "- `ai21.j2-mid`\n", + "- `ai21.j2-ultra`\n", + "- `anthropic.claude-instant-v1`\n", + "- `anthropic.claude-v1`\n", + "- `anthropic.claude-v2`" + ] + }, + { + "cell_type": "markdown", + "id": "088cf6bf-dd73-4710-a0cc-6c11d220c431", + "metadata": {}, + "source": [ + "#### Invoke the Bedrock's Claude Large Large language model" + ] + }, + { + "cell_type": "markdown", + "id": "379498f2", + "metadata": {}, + "source": [ + "First, we explore how the model generates an output based on the prompt created earlier.\n", + "\n", + "##### Complete Output Generation" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "ecaceef1-0f7f-4ae5-8007-ff7c25335251", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Here are the SQL queries to answer the questions:\n", + "\n", + "1. Identify the top 5 best selling products by total sales for the year 2023:\n", + "\n", + "```sql\n", + "SELECT product_id, SUM(price * units_sold) AS total_sales\n", + "FROM sales_data\n", + "WHERE date BETWEEN '2023-01-01' AND '2023-12-31'\n", + "GROUP BY product_id\n", + "ORDER BY total_sales DESC\n", + "LIMIT 5;\n", + "```\n", + "\n", + "2. Calculate the monthly average sales for the year 2023:\n", + "\n", + "```sql\n", + "SELECT\n", + " DATE_FORMAT(date, '%Y-%m') AS month,\n", + " AVG(price * units_sold) AS avg_monthly_sales\n", + "FROM sales_data\n", + "WHERE date BETWEEN '2023-01-01' AND '2023-12-31'\n", + "GROUP BY month\n", + "ORDER BY month;\n", + "```\n", + "\n", + "The first query groups the sales data by product_id, sums the total sales for each product, filters\n", + "for 2023 data only, orders by the total sales in descending order and limits to the top 5 results.\n", + "\n", + "The second query extracts the month from the date, calculates the average monthly sales by\n", + "aggregating on the month and ordering the results chronologically.\n" + ] + } + ], + "source": [ + "modelId = 'anthropic.claude-v2' # change this to use a different version from the model provider\n", + "accept = 'application/json'\n", + "contentType = 'application/json'\n", + "\n", + "response = boto3_bedrock.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)\n", + "response_body = json.loads(response.get('body').read())\n", + "\n", + "print_ww(response_body.get('completion'))" + ] + }, + { + "cell_type": "markdown", + "id": "078b9db4", + "metadata": {}, + "source": [ + "### Advanced Example\n", + "#### Understanding Hospital's Patient Management System through SQL" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "d439b90c", + "metadata": {}, + "outputs": [], + "source": [ + "# create the prompt\n", + "prompt_sql_data = \"\"\"Command: You're provided with a database schema representing any hospital's patient management system.\n", + "The system holds records about patients, their prescriptions, doctors, and the medications prescribed.\n", + "\n", + "Here's the schema:\n", + "\n", + "```sql\n", + "CREATE TABLE Patients (\n", + " PatientID int,\n", + " FirstName varchar(50),\n", + " LastName varchar(50),\n", + " DateOfBirth datetime,\n", + " Gender varchar(10),\n", + " PRIMARY KEY (PatientID)\n", + ");\n", + "\n", + "CREATE TABLE Doctors (\n", + " DoctorID int,\n", + " FirstName varchar(50),\n", + " LastName varchar(50),\n", + " Specialization varchar(50),\n", + " PRIMARY KEY (DoctorID)\n", + ");\n", + "\n", + "CREATE TABLE Prescriptions (\n", + " PrescriptionID int,\n", + " PatientID int,\n", + " DoctorID int,\n", + " DateIssued datetime,\n", + " PRIMARY KEY (PrescriptionID)\n", + ");\n", + "\n", + "CREATE TABLE Medications (\n", + " MedicationID int,\n", + " MedicationName varchar(50),\n", + " Dosage varchar(50),\n", + " PRIMARY KEY (MedicationID)\n", + ");\n", + "\n", + "CREATE TABLE PrescriptionDetails (\n", + " PrescriptionDetailID int,\n", + " PrescriptionID int,\n", + " MedicationID int,\n", + " Quantity int,\n", + " PRIMARY KEY (PrescriptionDetailID)\n", + ");\n", + "```\n", + "\n", + "Write a SQL query that fetches all the patients who were prescribed more than 5 different medications on 2023-04-01.\n", + "\n", + "Assistant:\n", + "\"\"\"\n" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "9afa3431", + "metadata": {}, + "outputs": [], + "source": [ + "# Claude - Body Syntex\n", + "body = json.dumps({\n", + " \"prompt\": prompt_sql_data,\n", + " \"max_tokens_to_sample\":4096,\n", + " \"temperature\":0.5,\n", + " \"top_k\":250,\n", + " \"top_p\":0.5,\n", + " \"stop_sequences\": [\"\\n\\nHuman:\"]\n", + " }) " + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "5c45f4fc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " Here is a SQL query to fetch patients who were prescribed more than 5 medications on 2023-04-01:\n", + "\n", + "```sql\n", + "SELECT p.FirstName, p.LastName\n", + "FROM Patients p\n", + "JOIN Prescriptions pre ON p.PatientID = pre.PatientID\n", + "JOIN PrescriptionDetails pd ON pre.PrescriptionID = pd.PrescriptionID\n", + "WHERE pre.DateIssued = '2023-04-01'\n", + "GROUP BY p.PatientID\n", + "HAVING COUNT(DISTINCT pd.MedicationID) > 5;\n", + "```\n", + "\n", + "The key steps are:\n", + "\n", + "1. Join the Patients, Prescriptions and PrescriptionDetails tables to connect patients with their\n", + "prescriptions and medication details.\n", + "\n", + "2. Filter to only prescriptions issued on 2023-04-01.\n", + "\n", + "3. Group by PatientID and count the distinct MedicationIDs per patient.\n", + "\n", + "4. Use HAVING to only keep patients with more than 5 distinct medications.\n", + "\n", + "This will return all patients who had prescriptions for more than 5 different medications on the\n", + "given date.\n" + ] + } + ], + "source": [ + "modelId = 'anthropic.claude-v2' # change this to use a different version from the model provider\n", + "accept = 'application/json'\n", + "contentType = 'application/json'\n", + "\n", + "response = boto3_bedrock.invoke_model(body=body, modelId=modelId, accept=accept, contentType=contentType)\n", + "response_body = json.loads(response.get('body').read())\n", + "\n", + "print_ww(response_body.get('completion'))" + ] + }, + { + "cell_type": "markdown", + "id": "64b08b3b", + "metadata": {}, + "source": [ + "## Conclusion\n", + "You have now experimented with using `boto3` SDK which provides a vanilla exposure to Amazon Bedrock API. Using this API you have seen the use cases of generate SQL queries to analyze sales data.\n", + "\n", + "### Take aways\n", + "- Adapt this notebook to experiment with different models available through Amazon Bedrock such as Anthropic Claude and AI21 Labs Jurassic models.\n", + "- Change the prompts to your specific usecase and evaluate the output of different models.\n", + "- Play with the token length to understand the latency and responsiveness of the service.\n", + "- Apply different prompt engineering principles to get better outputs.\n", + "\n", + "## Thank You" + ] + } + ], + "metadata": { + "availableInstances": [ + { + "_defaultOrder": 0, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.t3.medium", + "vcpuNum": 2 + }, + { + "_defaultOrder": 1, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.t3.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 2, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.t3.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 3, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.t3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 4, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 5, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 6, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 7, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 8, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 9, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 10, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 11, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 12, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5d.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 13, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5d.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 14, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5d.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 15, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5d.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 16, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5d.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 17, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5d.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 18, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5d.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 19, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 20, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": true, + "memoryGiB": 0, + "name": "ml.geospatial.interactive", + "supportedImageNames": [ + "sagemaker-geospatial-v1-0" + ], + "vcpuNum": 0 + }, + { + "_defaultOrder": 21, + "_isFastLaunch": true, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.c5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 22, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.c5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 23, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.c5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 24, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.c5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 25, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 72, + "name": "ml.c5.9xlarge", + "vcpuNum": 36 + }, + { + "_defaultOrder": 26, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 96, + "name": "ml.c5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 27, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 144, + "name": "ml.c5.18xlarge", + "vcpuNum": 72 + }, + { + "_defaultOrder": 28, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.c5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 29, + "_isFastLaunch": true, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g4dn.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 30, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g4dn.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 31, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g4dn.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 32, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g4dn.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 33, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g4dn.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 34, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g4dn.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 35, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 61, + "name": "ml.p3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 36, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 244, + "name": "ml.p3.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 37, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 488, + "name": "ml.p3.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 38, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.p3dn.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 39, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.r5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 40, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.r5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 41, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.r5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 42, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.r5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 43, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.r5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 44, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.r5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 45, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 512, + "name": "ml.r5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 46, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.r5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 47, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 48, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 49, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 50, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 51, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 52, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 53, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.g5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 54, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.g5.48xlarge", + "vcpuNum": 192 + }, + { + "_defaultOrder": 55, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 56, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4de.24xlarge", + "vcpuNum": 96 + } + ], + "instance_type": "ml.t3.medium", + "kernelspec": { + "display_name": "Python 3", + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/06_CodeGeneration/02_code_interpret_w_langchain.ipynb b/06_CodeGeneration/02_code_interpret_w_langchain.ipynb new file mode 100644 index 00000000..1e2d55e9 --- /dev/null +++ b/06_CodeGeneration/02_code_interpret_w_langchain.ipynb @@ -0,0 +1,967 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "af3f88dd-0f5e-427e-84ee-8934982300d1", + "metadata": { + "tags": [] + }, + "source": [ + "# Bedrock with LangChain using a Prompt that includes Context\n", + "\n", + "> *This notebook should work well with the **`Data Science 3.0`** kernel in SageMaker Studio*" + ] + }, + { + "cell_type": "markdown", + "id": "b920ca4a-a71d-4630-a6e4-577d95192ad1", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "In this notebook we show you how to explain or interpret a given code snippet or program.\n", + "\n", + "[LangChain](https://python.langchain.com/docs/get_started/introduction.html) is a framework for developing applications powered by language models. The key aspects of this framework allow us to augment the Large Language Models by chaining together various components to create advanced use cases.\n", + "\n", + "In this notebook we will use the Bedrock API provided by LangChain. The prompt used in this example creates a custom LangChain prompt template for adding context to the code explain request. \n", + "\n", + "**Note:** *This notebook can be run within or outside of AWS environment.*\n", + "\n", + "#### Context\n", + "In the previous example `01_sql_query_generation_w_bedrock.ipynb`, we explored how to use Bedrock API. LangChain framework to communicate with Amazon Bedrock API. In this notebook we will try to add a bit more complexity with the help of `PromptTemplates` to leverage the LangChain framework for the similar use case. `PrompTemplates` allow you to create generic shells which can be populated with information later and get model outputs based on different scenarios.\n", + "\n", + "As part of this notebook we will explore the use of Amazon Bedrock integration within LangChain framework and how it could be used to generate text with the help of `PromptTemplate`.\n", + "\n", + "#### Pattern\n", + "We will simply provide the LangChain implementation of Amazon Bedrock API with an input consisting of a task, an instruction and an input for the model under the hood to generate an output without providing any additional example. The purpose here is to demonstrate how the powerful LLMs easily understand the task at hand and generate compelling outputs.\n", + "\n", + "![](./images/bedrock-code-gen-langchain.png)\n", + "\n", + "#### Use case\n", + "To demonstrate the generation capability of models in Amazon Bedrock, let's take the use case of code explain.\n", + "\n", + "#### Persona\n", + "You are Joe, a Java software developer, has been tasked to support a legacy C++ application for Vehicle Fleet Management. You need help to explain or interpret certain complex C++ code snippets as you are performing analyis to identify the business logic and potential problems with the code.\n", + "\n", + "#### Implementation\n", + "To fulfill this use case, we will show you how you can Amazon Bedrock API with LangChain to explain C++ code snippets.\n" + ] + }, + { + "cell_type": "markdown", + "id": "aa11828a-243d-4808-9c92-e8caf4cebd37", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "Before running the rest of this notebook, you'll need to run the cells below to (ensure necessary libraries are installed and) connect to Bedrock.\n", + "\n", + "For more details on how the setup works and ⚠️ **whether you might need to make any changes**, refer to the [Bedrock boto3 setup notebook](../00_Intro/bedrock_boto3_setup.ipynb) notebook.\n", + "\n", + "In this notebook, we'll also install the [Hugging Face Transformers](https://huggingface.co/docs/transformers/index) library which we'll use for counting the number of tokens in an input prompt." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "49e2c0a9-4838-4f2b-bb36-61c0cbcd62af", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "# Make sure you ran `download-dependencies.sh` from the root of the repository first!\n", + "%pip install --no-build-isolation --force-reinstall \\\n", + " ../dependencies/awscli-*-py3-none-any.whl \\\n", + " ../dependencies/boto3-*-py3-none-any.whl \\\n", + " ../dependencies/botocore-*-py3-none-any.whl\n", + "\n", + "%pip install --quiet langchain==0.0.249 \"transformers>=4.24,<5\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "558a9372-0789-414a-a1d7-2976056f2015", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "import json\n", + "import os\n", + "import sys\n", + "\n", + "import boto3\n", + "\n", + "module_path = \"..\"\n", + "sys.path.append(os.path.abspath(module_path))\n", + "from utils import bedrock, print_ww\n", + "\n", + "\n", + "# ---- ⚠️ Un-comment and edit the below lines as needed for your AWS setup ⚠️ ----\n", + "\n", + "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-east-1\" # E.g. \"us-east-1\"\n", + "os.environ[\"AWS_PROFILE\"] = \"fine-tuning-bedrock\"\n", + "# os.environ[\"BEDROCK_ASSUME_ROLE\"] = \"\" # E.g. \"arn:aws:...\"\n", + "# os.environ[\"BEDROCK_ENDPOINT_URL\"] = \"\" # E.g. \"https://...\"\n", + "\n", + "\n", + "boto3_bedrock = bedrock.get_bedrock_client(\n", + " assumed_role=os.environ.get(\"BEDROCK_ASSUME_ROLE\", None),\n", + " endpoint_url=os.environ.get(\"BEDROCK_ENDPOINT_URL\", None),\n", + " region=os.environ.get(\"AWS_DEFAULT_REGION\", None),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "b7daa1a8-d21a-410c-adbf-b253c2dabf80", + "metadata": { + "tags": [] + }, + "source": [ + "## Invoke the Bedrock LLM Model\n", + "\n", + "We'll begin with creating an instance of Bedrock class from llms. This expects a `model_id` which is the ARN of the model available in Amazon Bedrock. \n", + "\n", + "Optionally you can pass on a previously created boto3 client as well as some `model_kwargs` which can hold parameters such as `temperature`, `topP`, `maxTokenCount` or `stopSequences` (more on parameters can be explored in Amazon Bedrock console).\n", + "\n", + "Available text generation models under Amazon Bedrock have the following IDs:\n", + "\n", + "- amazon.titan-tg1-large\n", + "- ai21.j2-grande-instruct\n", + "- ai21.j2-jumbo-instruct\n", + "- anthropic.claude-instant-v1\n", + "- anthropic.claude-v1\n", + "\n", + "Note that different models support different `model_kwargs`." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8ffa1250-56cd-4b6d-b3d8-c62baac143ce", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain.llms.bedrock import Bedrock\n", + "\n", + "inference_modifier = {'max_tokens_to_sample':4096, \n", + " \"temperature\":0.5,\n", + " \"top_k\":250,\n", + " \"top_p\":1,\n", + " \"stop_sequences\": [\"\\n\\nHuman\"]\n", + " }\n", + "\n", + "textgen_llm = Bedrock(model_id = \"anthropic.claude-v2\",\n", + " client = boto3_bedrock, \n", + " model_kwargs = inference_modifier \n", + " )\n" + ] + }, + { + "cell_type": "markdown", + "id": "de2678ed-f0d6-444f-9a57-5170dd1952f7", + "metadata": {}, + "source": [ + "## Create a LangChain custom prompt template\n", + "\n", + "By creating a template for the prompt we can pass it different input variables to it on every run. This is useful when you have to generate content with different input variables that you may be fetching from a database." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "96bc21b9", + "metadata": {}, + "outputs": [], + "source": [ + "# Vehicle Fleet Management Code written in C++\n", + "sample_code = \"\"\"\n", + "#include \n", + "#include \n", + "#include \n", + "\n", + "class Vehicle {\n", + "protected:\n", + " std::string registrationNumber;\n", + " int milesTraveled;\n", + " int lastMaintenanceMile;\n", + "\n", + "public:\n", + " Vehicle(std::string regNum) : registrationNumber(regNum), milesTraveled(0), lastMaintenanceMile(0) {}\n", + "\n", + " virtual void addMiles(int miles) {\n", + " milesTraveled += miles;\n", + " }\n", + "\n", + " virtual void performMaintenance() {\n", + " lastMaintenanceMile = milesTraveled;\n", + " std::cout << \"Maintenance performed for vehicle: \" << registrationNumber << std::endl;\n", + " }\n", + "\n", + " virtual void checkMaintenanceDue() {\n", + " if ((milesTraveled - lastMaintenanceMile) > 10000) {\n", + " std::cout << \"Vehicle: \" << registrationNumber << \" needs maintenance!\" << std::endl;\n", + " } else {\n", + " std::cout << \"No maintenance required for vehicle: \" << registrationNumber << std::endl;\n", + " }\n", + " }\n", + "\n", + " virtual void displayDetails() = 0;\n", + "\n", + " ~Vehicle() {\n", + " std::cout << \"Destructor for Vehicle\" << std::endl;\n", + " }\n", + "};\n", + "\n", + "class Truck : public Vehicle {\n", + " int capacityInTons;\n", + "\n", + "public:\n", + " Truck(std::string regNum, int capacity) : Vehicle(regNum), capacityInTons(capacity) {}\n", + "\n", + " void displayDetails() override {\n", + " std::cout << \"Truck with Registration Number: \" << registrationNumber << \", Capacity: \" << capacityInTons << \" tons.\" << std::endl;\n", + " }\n", + "};\n", + "\n", + "class Car : public Vehicle {\n", + " std::string model;\n", + "\n", + "public:\n", + " Car(std::string regNum, std::string carModel) : Vehicle(regNum), model(carModel) {}\n", + "\n", + " void displayDetails() override {\n", + " std::cout << \"Car with Registration Number: \" << registrationNumber << \", Model: \" << model << \".\" << std::endl;\n", + " }\n", + "};\n", + "\n", + "int main() {\n", + " std::vector fleet;\n", + "\n", + " fleet.push_back(new Truck(\"XYZ1234\", 20));\n", + " fleet.push_back(new Car(\"ABC9876\", \"Sedan\"));\n", + "\n", + " for (auto vehicle : fleet) {\n", + " vehicle->displayDetails();\n", + " vehicle->addMiles(10500);\n", + " vehicle->checkMaintenanceDue();\n", + " vehicle->performMaintenance();\n", + " vehicle->checkMaintenanceDue();\n", + " }\n", + "\n", + " for (auto vehicle : fleet) {\n", + " delete vehicle; \n", + " }\n", + "\n", + " return 0;\n", + "}\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "dbec103a-97ae-4e9e-9d80-dc20f354a228", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain import PromptTemplate\n", + "\n", + "# Create a prompt template that has multiple input variables\n", + "multi_var_prompt = PromptTemplate(\n", + " input_variables=[\"code\", \"programmingLanguage\"], \n", + " template=\"\"\"Human: You will be acting as an expert software developer in {programmingLanguage}. \n", + " You will explain below code and highlight if any red flags or not following best practices.\n", + " {code}\n", + " Assistant: \n", + " \"\"\"\n", + ")\n", + "\n", + "# Pass in values to the input variables\n", + "prompt = multi_var_prompt.format(code=sample_code, programmingLanguage=\"C++\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "a5b76387", + "metadata": {}, + "source": [ + "### Explain C++ Code for Vehicle Fleet management using Amazon Bedrock and LangChain" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "c1064c57-27a4-48c5-911b-e4f1dfeff122", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Overall, the code follows good OOP design principles and uses inheritance appropriately. The Vehicle\n", + "base class contains common data members and methods, while Truck and Car derive from it and add\n", + "specific details.\n", + "\n", + "Some positives:\n", + "\n", + "- Uses protected inheritance correctly to allow derived classes access to base class members.\n", + "\n", + "- Uses virtual methods like displayDetails() to enable polymorphic behavior.\n", + "\n", + "- Uses smart pointers (unique_ptr) instead of raw pointers to manage memory and avoid leaks.\n", + "\n", + "- Uses override specifier to explicitly indicate overridden methods.\n", + "\n", + "- Uses a vector to store heterogeneous objects through a common base pointer.\n", + "\n", + "- Checks for maintenance due based on miles traveled.\n", + "\n", + "- No major red flags or bad practices noted.\n", + "\n", + "Some things that could be improved:\n", + "\n", + "- The base Vehicle class could use pure virtual methods instead of a mix of virtual and pure virtual\n", + "methods.\n", + "\n", + "- The Vehicle constructor initializes data members - should consider using member initializer list\n", + "instead.\n", + "\n", + "- Unique pointers could be used instead of raw pointers for automatic memory management.\n", + "\n", + "- The displayDetails() method could be renamed to something more specific like printDetails().\n", + "\n", + "- Comments could be added to explain parts of logic/flow.\n", + "\n", + "Overall the code is well written, follows OOP principles and does not have any major issues. Just a\n", + "few minor improvements/enhancements possible.\n" + ] + } + ], + "source": [ + "response = textgen_llm(prompt)\n", + "\n", + "code_explanation = response[response.index('\\n')+1:]\n", + "\n", + "print_ww(code_explanation)" + ] + }, + { + "cell_type": "markdown", + "id": "9e9abc40", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "To conclude we learnt that invoking the LLM without any context might not yield the desired results. By adding context and further using the the prompt template to constrain the output from the LLM we are able to successfully get our desired output" + ] + } + ], + "metadata": { + "availableInstances": [ + { + "_defaultOrder": 0, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.t3.medium", + "vcpuNum": 2 + }, + { + "_defaultOrder": 1, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.t3.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 2, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.t3.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 3, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.t3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 4, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 5, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 6, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 7, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 8, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 9, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 10, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 11, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 12, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5d.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 13, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5d.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 14, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5d.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 15, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5d.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 16, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5d.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 17, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5d.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 18, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5d.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 19, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 20, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": true, + "memoryGiB": 0, + "name": "ml.geospatial.interactive", + "supportedImageNames": [ + "sagemaker-geospatial-v1-0" + ], + "vcpuNum": 0 + }, + { + "_defaultOrder": 21, + "_isFastLaunch": true, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.c5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 22, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.c5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 23, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.c5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 24, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.c5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 25, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 72, + "name": "ml.c5.9xlarge", + "vcpuNum": 36 + }, + { + "_defaultOrder": 26, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 96, + "name": "ml.c5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 27, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 144, + "name": "ml.c5.18xlarge", + "vcpuNum": 72 + }, + { + "_defaultOrder": 28, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.c5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 29, + "_isFastLaunch": true, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g4dn.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 30, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g4dn.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 31, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g4dn.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 32, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g4dn.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 33, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g4dn.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 34, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g4dn.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 35, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 61, + "name": "ml.p3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 36, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 244, + "name": "ml.p3.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 37, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 488, + "name": "ml.p3.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 38, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.p3dn.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 39, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.r5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 40, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.r5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 41, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.r5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 42, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.r5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 43, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.r5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 44, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.r5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 45, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 512, + "name": "ml.r5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 46, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.r5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 47, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 48, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 49, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 50, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 51, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 52, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 53, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.g5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 54, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.g5.48xlarge", + "vcpuNum": 192 + }, + { + "_defaultOrder": 55, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 56, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4de.24xlarge", + "vcpuNum": 96 + } + ], + "instance_type": "ml.t3.medium", + "kernelspec": { + "display_name": "Python 3", + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/06_CodeGeneration/03_code_translate_w_langchain.ipynb b/06_CodeGeneration/03_code_translate_w_langchain.ipynb new file mode 100644 index 00000000..8162b9e6 --- /dev/null +++ b/06_CodeGeneration/03_code_translate_w_langchain.ipynb @@ -0,0 +1,1132 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "af3f88dd-0f5e-427e-84ee-8934982300d1", + "metadata": { + "tags": [] + }, + "source": [ + "# Bedrock with LangChain - Code Translation from one programming language to another\n", + "\n", + "> *This notebook should work well with the **`Data Science 3.0`** kernel in SageMaker Studio*" + ] + }, + { + "cell_type": "markdown", + "id": "b920ca4a-a71d-4630-a6e4-577d95192ad1", + "metadata": {}, + "source": [ + "## Introduction\n", + "\n", + "In this notebook we show you how to generate an email response to a customer who was not happy with the quality of customer service that they received from the customer support engineer. We will provide additional context to the model by providing the contents of the actual email that was received from the unhappy customer.\n", + "\n", + "Because of additional context in the prompt, the text produced by the Amazon Titan Large language model in this notebook is of much better quality and relevance than the content produced earlier through zero-shot prompts.\n", + "\n", + "[LangChain](https://python.langchain.com/docs/get_started/introduction.html) is a framework for developing applications powered by language models. The key aspects of this framework allow us to augment the Large Language Models by chaining together various components to create advanced use cases.\n", + "\n", + "In this notebook we will use the Bedrock API provided by LangChain. The prompt used in this example creates a custom LangChain prompt template for adding context to the text generation request. \n", + "\n", + "**Note:** *This notebook can be run within or outside of AWS environment.*\n", + "\n", + "#### Context\n", + "In the previous example `02_code_interpret_w_langchain.ipynb`, we explored how to use LangChain framework to communicate with Amazon Bedrock API. In this notebook we will try to add a bit more complexity with the help of `PromptTemplates` to leverage the LangChain framework for the similar use case. `PrompTemplates` allow you to create generic shells which can be populated with information later and get model outputs based on different scenarios.\n", + "\n", + "As part of this notebook we will explore the use of Amazon Bedrock integration within LangChain framework and how it could be used to generate text with the help of `PromptTemplate`.\n", + "\n", + "#### Pattern\n", + "We will simply provide the LangChain implementation of Amazon Bedrock API with an input consisting of a task, an instruction and an input for the model under the hood to generate an output without providing any additional example. The purpose here is to demonstrate how the powerful LLMs easily understand the task at hand and generate compelling outputs.\n", + "\n", + "![](./images/bedrock-code-gen-langchain.png)\n", + "\n", + "#### Use case\n", + "To demonstrate the generation capability of models in Amazon Bedrock, let's take the use case of email generation.\n", + "\n", + "#### Persona\n", + "You are Bob a Customer Service Manager at AnyCompany and some of your customers are not happy with the customer service and are providing negative feedbacks on the service provided by customer support engineers. Now, you would like to respond to those customers humbly aplogizing for the poor service and regain trust. You need the help of an LLM to generate a bulk of emails for you which are human friendly and personalized to the customer's sentiment from previous email correspondence.\n", + "\n", + "#### Implementation\n", + "To fulfill this use case, we will show you how to generate an email with a thank you note based on the customer's previous email. We will use the Amazon Titan Text Large model using the Amazon Bedrock LangChain integration. \n" + ] + }, + { + "cell_type": "markdown", + "id": "aa11828a-243d-4808-9c92-e8caf4cebd37", + "metadata": {}, + "source": [ + "## Setup\n", + "\n", + "Before running the rest of this notebook, you'll need to run the cells below to (ensure necessary libraries are installed and) connect to Bedrock.\n", + "\n", + "For more details on how the setup works and ⚠️ **whether you might need to make any changes**, refer to the [Bedrock boto3 setup notebook](../00_Intro/bedrock_boto3_setup.ipynb) notebook.\n", + "\n", + "In this notebook, we'll also install the [Hugging Face Transformers](https://huggingface.co/docs/transformers/index) library which we'll use for counting the number of tokens in an input prompt." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "49e2c0a9-4838-4f2b-bb36-61c0cbcd62af", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing /Users/mundabra/dev/bedrock/amazon-bedrock-workshop/dependencies/awscli-1.29.21-py3-none-any.whl\n", + "Processing /Users/mundabra/dev/bedrock/amazon-bedrock-workshop/dependencies/boto3-1.28.21-py3-none-any.whl\n", + "Processing /Users/mundabra/dev/bedrock/amazon-bedrock-workshop/dependencies/botocore-1.31.21-py3-none-any.whl\n", + "Collecting docutils<0.17,>=0.10\n", + " Using cached docutils-0.16-py2.py3-none-any.whl (548 kB)\n", + "Collecting s3transfer<0.7.0,>=0.6.0\n", + " Using cached s3transfer-0.6.1-py3-none-any.whl (79 kB)\n", + "Collecting PyYAML<6.1,>=3.10\n", + " Using cached PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl (189 kB)\n", + "Collecting rsa<4.8,>=3.1.2\n", + " Using cached rsa-4.7.2-py3-none-any.whl (34 kB)\n", + "Collecting colorama<0.4.5,>=0.2.5\n", + " Using cached colorama-0.4.4-py2.py3-none-any.whl (16 kB)\n", + "Collecting urllib3<1.27,>=1.25.4\n", + " Using cached urllib3-1.26.16-py2.py3-none-any.whl (143 kB)\n", + "Collecting jmespath<2.0.0,>=0.7.1\n", + " Using cached jmespath-1.0.1-py3-none-any.whl (20 kB)\n", + "Collecting python-dateutil<3.0.0,>=2.1\n", + " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", + "Collecting six>=1.5\n", + " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", + "Collecting pyasn1>=0.1.3\n", + " Using cached pyasn1-0.5.0-py2.py3-none-any.whl (83 kB)\n", + "Installing collected packages: urllib3, six, PyYAML, pyasn1, jmespath, docutils, colorama, rsa, python-dateutil, botocore, s3transfer, boto3, awscli\n", + " Attempting uninstall: urllib3\n", + " Found existing installation: urllib3 1.26.16\n", + " Uninstalling urllib3-1.26.16:\n", + " Successfully uninstalled urllib3-1.26.16\n", + " Attempting uninstall: six\n", + " Found existing installation: six 1.16.0\n", + " Uninstalling six-1.16.0:\n", + " Successfully uninstalled six-1.16.0\n", + " Attempting uninstall: PyYAML\n", + " Found existing installation: PyYAML 6.0.1\n", + " Uninstalling PyYAML-6.0.1:\n", + " Successfully uninstalled PyYAML-6.0.1\n", + " Attempting uninstall: pyasn1\n", + " Found existing installation: pyasn1 0.5.0\n", + " Uninstalling pyasn1-0.5.0:\n", + " Successfully uninstalled pyasn1-0.5.0\n", + " Attempting uninstall: jmespath\n", + " Found existing installation: jmespath 1.0.1\n", + " Uninstalling jmespath-1.0.1:\n", + " Successfully uninstalled jmespath-1.0.1\n", + " Attempting uninstall: docutils\n", + " Found existing installation: docutils 0.16\n", + " Uninstalling docutils-0.16:\n", + " Successfully uninstalled docutils-0.16\n", + " Attempting uninstall: colorama\n", + " Found existing installation: colorama 0.4.4\n", + " Uninstalling colorama-0.4.4:\n", + " Successfully uninstalled colorama-0.4.4\n", + " Attempting uninstall: rsa\n", + " Found existing installation: rsa 4.7.2\n", + " Uninstalling rsa-4.7.2:\n", + " Successfully uninstalled rsa-4.7.2\n", + " Attempting uninstall: python-dateutil\n", + " Found existing installation: python-dateutil 2.8.2\n", + " Uninstalling python-dateutil-2.8.2:\n", + " Successfully uninstalled python-dateutil-2.8.2\n", + " Attempting uninstall: botocore\n", + " Found existing installation: botocore 1.31.21\n", + " Uninstalling botocore-1.31.21:\n", + " Successfully uninstalled botocore-1.31.21\n", + " Attempting uninstall: s3transfer\n", + " Found existing installation: s3transfer 0.6.1\n", + " Uninstalling s3transfer-0.6.1:\n", + " Successfully uninstalled s3transfer-0.6.1\n", + " Attempting uninstall: boto3\n", + " Found existing installation: boto3 1.28.21\n", + " Uninstalling boto3-1.28.21:\n", + " Successfully uninstalled boto3-1.28.21\n", + " Attempting uninstall: awscli\n", + " Found existing installation: awscli 1.29.21\n", + " Uninstalling awscli-1.29.21:\n", + " Successfully uninstalled awscli-1.29.21\n", + "Successfully installed PyYAML-6.0.1 awscli-1.29.21 boto3-1.28.21 botocore-1.31.21 colorama-0.4.4 docutils-0.16 jmespath-1.0.1 pyasn1-0.5.0 python-dateutil-2.8.2 rsa-4.7.2 s3transfer-0.6.1 six-1.16.0 urllib3-1.26.16\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.2.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3.10 -m pip install --upgrade pip\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.2.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", + "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3.10 -m pip install --upgrade pip\u001b[0m\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "# Make sure you ran `download-dependencies.sh` from the root of the repository first!\n", + "%pip install --no-build-isolation --force-reinstall \\\n", + " ../dependencies/awscli-*-py3-none-any.whl \\\n", + " ../dependencies/boto3-*-py3-none-any.whl \\\n", + " ../dependencies/botocore-*-py3-none-any.whl\n", + "\n", + "%pip install --quiet langchain==0.0.249 \"transformers>=4.24,<5\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "558a9372-0789-414a-a1d7-2976056f2015", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Create new client\n", + " Using region: us-east-1\n", + " Using profile: fine-tuning-bedrock\n", + "boto3 Bedrock client successfully created!\n", + "bedrock(https://bedrock.us-east-1.amazonaws.com)\n" + ] + } + ], + "source": [ + "import json\n", + "import os\n", + "import sys\n", + "\n", + "import boto3\n", + "\n", + "module_path = \"..\"\n", + "sys.path.append(os.path.abspath(module_path))\n", + "from utils import bedrock, print_ww\n", + "\n", + "\n", + "# ---- ⚠️ Un-comment and edit the below lines as needed for your AWS setup ⚠️ ----\n", + "\n", + "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-east-1\" # E.g. \"us-east-1\"\n", + "os.environ[\"AWS_PROFILE\"] = \"fine-tuning-bedrock\"\n", + "# os.environ[\"BEDROCK_ASSUME_ROLE\"] = \"\" # E.g. \"arn:aws:...\"\n", + "# os.environ[\"BEDROCK_ENDPOINT_URL\"] = \"\" # E.g. \"https://...\"\n", + "\n", + "\n", + "boto3_bedrock = bedrock.get_bedrock_client(\n", + " assumed_role=os.environ.get(\"BEDROCK_ASSUME_ROLE\", None),\n", + " endpoint_url=os.environ.get(\"BEDROCK_ENDPOINT_URL\", None),\n", + " region=os.environ.get(\"AWS_DEFAULT_REGION\", None),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "b7daa1a8-d21a-410c-adbf-b253c2dabf80", + "metadata": { + "tags": [] + }, + "source": [ + "## Invoke the Bedrock LLM Model\n", + "\n", + "We'll begin with creating an instance of Bedrock class from llms. This expects a `model_id` which is the ARN of the model available in Amazon Bedrock. \n", + "\n", + "Optionally you can pass on a previously created boto3 client as well as some `model_kwargs` which can hold parameters such as `temperature`, `topP`, `maxTokenCount` or `stopSequences` (more on parameters can be explored in Amazon Bedrock console).\n", + "\n", + "Available text generation models under Amazon Bedrock have the following IDs:\n", + "\n", + "- amazon.titan-tg1-large\n", + "- ai21.j2-grande-instruct\n", + "- ai21.j2-jumbo-instruct\n", + "- anthropic.claude-instant-v1\n", + "- anthropic.claude-v1\n", + "\n", + "Note that different models support different `model_kwargs`." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "8ffa1250-56cd-4b6d-b3d8-c62baac143ce", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain.llms.bedrock import Bedrock\n", + "\n", + "inference_modifier = {'max_tokens_to_sample':4096, \n", + " \"temperature\":0.5,\n", + " \"top_k\":250,\n", + " \"top_p\":1,\n", + " \"stop_sequences\": [\"\\n\\nHuman\"]\n", + " }\n", + "\n", + "textgen_llm = Bedrock(model_id = \"anthropic.claude-v2\",\n", + " client = boto3_bedrock, \n", + " model_kwargs = inference_modifier \n", + " )\n" + ] + }, + { + "cell_type": "markdown", + "id": "de2678ed-f0d6-444f-9a57-5170dd1952f7", + "metadata": {}, + "source": [ + "## Create a LangChain custom prompt template\n", + "\n", + "By creating a template for the prompt we can pass it different input variables to it on every run. This is useful when you have to generate content with different input variables that you may be fetching from a database.\n", + "\n", + "Previously we hardcoded the prompt, it might be the case that you have multiple customers sending similar negative feedback and you now want to use each of those customer's emails and respond to them with an apology but you also want to keep the response a bit personalized. In the following cell we are exploring how you can create a `PromptTemplate` to achieve this pattern." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "96bc21b9", + "metadata": {}, + "outputs": [], + "source": [ + "# Vehicle Fleet Management Code written in C++\n", + "sample_code = \"\"\"\n", + "#include \n", + "#include \n", + "#include \n", + "\n", + "class Vehicle {\n", + "protected:\n", + " std::string registrationNumber;\n", + " int milesTraveled;\n", + " int lastMaintenanceMile;\n", + "\n", + "public:\n", + " Vehicle(std::string regNum) : registrationNumber(regNum), milesTraveled(0), lastMaintenanceMile(0) {}\n", + "\n", + " virtual void addMiles(int miles) {\n", + " milesTraveled += miles;\n", + " }\n", + "\n", + " virtual void performMaintenance() {\n", + " lastMaintenanceMile = milesTraveled;\n", + " std::cout << \"Maintenance performed for vehicle: \" << registrationNumber << std::endl;\n", + " }\n", + "\n", + " virtual void checkMaintenanceDue() {\n", + " if ((milesTraveled - lastMaintenanceMile) > 10000) {\n", + " std::cout << \"Vehicle: \" << registrationNumber << \" needs maintenance!\" << std::endl;\n", + " } else {\n", + " std::cout << \"No maintenance required for vehicle: \" << registrationNumber << std::endl;\n", + " }\n", + " }\n", + "\n", + " virtual void displayDetails() = 0;\n", + "\n", + " ~Vehicle() {\n", + " std::cout << \"Destructor for Vehicle\" << std::endl;\n", + " }\n", + "};\n", + "\n", + "class Truck : public Vehicle {\n", + " int capacityInTons;\n", + "\n", + "public:\n", + " Truck(std::string regNum, int capacity) : Vehicle(regNum), capacityInTons(capacity) {}\n", + "\n", + " void displayDetails() override {\n", + " std::cout << \"Truck with Registration Number: \" << registrationNumber << \", Capacity: \" << capacityInTons << \" tons.\" << std::endl;\n", + " }\n", + "};\n", + "\n", + "class Car : public Vehicle {\n", + " std::string model;\n", + "\n", + "public:\n", + " Car(std::string regNum, std::string carModel) : Vehicle(regNum), model(carModel) {}\n", + "\n", + " void displayDetails() override {\n", + " std::cout << \"Car with Registration Number: \" << registrationNumber << \", Model: \" << model << \".\" << std::endl;\n", + " }\n", + "};\n", + "\n", + "int main() {\n", + " std::vector fleet;\n", + "\n", + " fleet.push_back(new Truck(\"XYZ1234\", 20));\n", + " fleet.push_back(new Car(\"ABC9876\", \"Sedan\"));\n", + "\n", + " for (auto vehicle : fleet) {\n", + " vehicle->displayDetails();\n", + " vehicle->addMiles(10500);\n", + " vehicle->checkMaintenanceDue();\n", + " vehicle->performMaintenance();\n", + " vehicle->checkMaintenanceDue();\n", + " }\n", + "\n", + " for (auto vehicle : fleet) {\n", + " delete vehicle; \n", + " }\n", + "\n", + " return 0;\n", + "}\n", + "\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "dbec103a-97ae-4e9e-9d80-dc20f354a228", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "from langchain import PromptTemplate\n", + "\n", + "# Create a prompt template that has multiple input variables\n", + "multi_var_prompt = PromptTemplate(\n", + " input_variables=[\"code\", \"srcProgrammingLanguage\", \"targetProgrammingLanguage\"], \n", + " template=\"\"\"Human: You will be acting as an expert software developer in {srcProgrammingLanguage} and {targetProgrammingLanguage}. \n", + " You will tranlslate below code from {srcProgrammingLanguage} to {targetProgrammingLanguage} while following coding best practices.\n", + " {code}\n", + " Assistant: \n", + " \"\"\"\n", + ")\n", + "\n", + "# Pass in values to the input variables\n", + "prompt = multi_var_prompt.format(code=sample_code, srcProgrammingLanguage=\"C++\", targetProgrammingLanguage=\"Java\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "a5b76387", + "metadata": {}, + "source": [ + "### Code translation from C++ to Java" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "c1064c57-27a4-48c5-911b-e4f1dfeff122", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "```java\n", + "import java.util.ArrayList;\n", + "\n", + "class Vehicle {\n", + " protected String registrationNumber;\n", + " protected int milesTraveled;\n", + " protected int lastMaintenanceMile;\n", + "\n", + " public Vehicle(String regNum) {\n", + " this.registrationNumber = regNum;\n", + " this.milesTraveled = 0;\n", + " this.lastMaintenanceMile = 0;\n", + " }\n", + "\n", + " public void addMiles(int miles) {\n", + " this.milesTraveled += miles;\n", + " }\n", + "\n", + " public void performMaintenance() {\n", + " this.lastMaintenanceMile = this.milesTraveled;\n", + " System.out.println(\"Maintenance performed for vehicle: \" + this.registrationNumber);\n", + " }\n", + "\n", + " public void checkMaintenanceDue() {\n", + " if ((this.milesTraveled - this.lastMaintenanceMile) > 10000) {\n", + " System.out.println(\"Vehicle: \" + this.registrationNumber + \" needs maintenance!\");\n", + " } else {\n", + " System.out.println(\"No maintenance required for vehicle: \" + this.registrationNumber);\n", + " }\n", + " }\n", + "\n", + " public void displayDetails() {\n", + " // Implemented in subclasses\n", + " }\n", + "}\n", + "\n", + "class Truck extends Vehicle {\n", + " private int capacityInTons;\n", + "\n", + " public Truck(String regNum, int capacity) {\n", + " super(regNum);\n", + " this.capacityInTons = capacity;\n", + " }\n", + "\n", + " @Override\n", + " public void displayDetails() {\n", + " System.out.println(\"Truck with Registration Number: \" + this.registrationNumber + \",\n", + "Capacity: \" + this.capacityInTons + \" tons.\");\n", + " }\n", + "}\n", + "\n", + "class Car extends Vehicle {\n", + " private String model;\n", + "\n", + " public Car(String regNum, String carModel) {\n", + " super(regNum);\n", + " this.model = carModel;\n", + " }\n", + "\n", + " @Override\n", + " public void displayDetails() {\n", + " System.out.println(\"Car with Registration Number: \" + this.registrationNumber + \", Model: \"\n", + "+ this.model + \".\");\n", + " }\n", + "}\n", + "\n", + "public class Main {\n", + " public static void main(String[] args) {\n", + " ArrayList fleet = new ArrayList<>();\n", + "\n", + " fleet.add(new Truck(\"XYZ1234\", 20));\n", + " fleet.add(new Car(\"ABC9876\", \"Sedan\"));\n", + "\n", + " for (Vehicle vehicle : fleet) {\n", + " vehicle.displayDetails();\n", + " vehicle.addMiles(10500);\n", + " vehicle.checkMaintenanceDue();\n", + " vehicle.performMaintenance();\n", + " vehicle.checkMaintenanceDue();\n", + " }\n", + " }\n", + "}\n", + "```\n", + "\n", + "Key points:\n", + "\n", + "- Used ArrayList instead of raw vectors\n", + "- Overrode methods using @Override annotation\n", + "- Used access modifiers properly (private, public)\n", + "- Followed naming conventions and formatting standards\n", + "- Implemented polymorphic behavior using abstract class and subclasses\n", + "\n", + "Let me know if you have any other questions!\n" + ] + } + ], + "source": [ + "response = textgen_llm(prompt)\n", + "\n", + "target_code = response[response.index('\\n')+1:]\n", + "\n", + "print_ww(target_code)" + ] + }, + { + "cell_type": "markdown", + "id": "9e9abc40", + "metadata": {}, + "source": [ + "## Summary\n", + "\n", + "To conclude we learnt that invoking the LLM without any context might not yield the desired results. By adding context and further using the the prompt template to constrain the output from the LLM we are able to successfully get our desired output" + ] + } + ], + "metadata": { + "availableInstances": [ + { + "_defaultOrder": 0, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.t3.medium", + "vcpuNum": 2 + }, + { + "_defaultOrder": 1, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.t3.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 2, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.t3.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 3, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.t3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 4, + "_isFastLaunch": true, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 5, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 6, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 7, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 8, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 9, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 10, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 11, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 12, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.m5d.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 13, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.m5d.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 14, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.m5d.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 15, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.m5d.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 16, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.m5d.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 17, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.m5d.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 18, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.m5d.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 19, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.m5d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 20, + "_isFastLaunch": false, + "category": "General purpose", + "gpuNum": 0, + "hideHardwareSpecs": true, + "memoryGiB": 0, + "name": "ml.geospatial.interactive", + "supportedImageNames": [ + "sagemaker-geospatial-v1-0" + ], + "vcpuNum": 0 + }, + { + "_defaultOrder": 21, + "_isFastLaunch": true, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 4, + "name": "ml.c5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 22, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 8, + "name": "ml.c5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 23, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.c5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 24, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.c5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 25, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 72, + "name": "ml.c5.9xlarge", + "vcpuNum": 36 + }, + { + "_defaultOrder": 26, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 96, + "name": "ml.c5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 27, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 144, + "name": "ml.c5.18xlarge", + "vcpuNum": 72 + }, + { + "_defaultOrder": 28, + "_isFastLaunch": false, + "category": "Compute optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.c5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 29, + "_isFastLaunch": true, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g4dn.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 30, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g4dn.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 31, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g4dn.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 32, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g4dn.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 33, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g4dn.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 34, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g4dn.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 35, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 61, + "name": "ml.p3.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 36, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 244, + "name": "ml.p3.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 37, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 488, + "name": "ml.p3.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 38, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.p3dn.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 39, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.r5.large", + "vcpuNum": 2 + }, + { + "_defaultOrder": 40, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.r5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 41, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.r5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 42, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.r5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 43, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.r5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 44, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.r5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 45, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 512, + "name": "ml.r5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 46, + "_isFastLaunch": false, + "category": "Memory Optimized", + "gpuNum": 0, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.r5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 47, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 16, + "name": "ml.g5.xlarge", + "vcpuNum": 4 + }, + { + "_defaultOrder": 48, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 32, + "name": "ml.g5.2xlarge", + "vcpuNum": 8 + }, + { + "_defaultOrder": 49, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 64, + "name": "ml.g5.4xlarge", + "vcpuNum": 16 + }, + { + "_defaultOrder": 50, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 128, + "name": "ml.g5.8xlarge", + "vcpuNum": 32 + }, + { + "_defaultOrder": 51, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 1, + "hideHardwareSpecs": false, + "memoryGiB": 256, + "name": "ml.g5.16xlarge", + "vcpuNum": 64 + }, + { + "_defaultOrder": 52, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 192, + "name": "ml.g5.12xlarge", + "vcpuNum": 48 + }, + { + "_defaultOrder": 53, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 4, + "hideHardwareSpecs": false, + "memoryGiB": 384, + "name": "ml.g5.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 54, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 768, + "name": "ml.g5.48xlarge", + "vcpuNum": 192 + }, + { + "_defaultOrder": 55, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4d.24xlarge", + "vcpuNum": 96 + }, + { + "_defaultOrder": 56, + "_isFastLaunch": false, + "category": "Accelerated computing", + "gpuNum": 8, + "hideHardwareSpecs": false, + "memoryGiB": 1152, + "name": "ml.p4de.24xlarge", + "vcpuNum": 96 + } + ], + "instance_type": "ml.t3.medium", + "kernelspec": { + "display_name": "Python 3", + "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.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/06_CodeGeneration/README.md b/06_CodeGeneration/README.md new file mode 100644 index 00000000..0dde55a1 --- /dev/null +++ b/06_CodeGeneration/README.md @@ -0,0 +1,37 @@ +# Lab 6 - Code Generation + +## Overview + +In this lab, you will learn to use LLMs on Amazon Bedrock for code generation, SQL query creation, code explanation, and code translation across languages. We will demo Bedrock's API (boto3) as well as its integration with LangChain. + +First, we will generate Python code and SQL queries by providing context about a dataset. Next, we will explain code and translate between languages. We will explore these use cases with both the Bedrock API directly and via LangChain integration. + +## Audience + +Architects and developers who want to learn how to use Amazon Bedrock LLMs to generate, explain and translate code. + +Some of the business use cases for code generation include: + +- Code Translation +- Code Explain and Reviews +- Database or SQL query generation +- Rapid Prototyping +- Issue Identification +- Bug Fixing +- Code Optimization + +## Workshop Notebooks + +1. [Code Generation](./00_code_generatation_w_bedrock.ipynb)- Demonstrates how to generate Python code using Natural language. It shows examples of prompting to generate simple functions, classes, and full programs in Python for Data Analyst to perform sales analysis on a given Sales CSV dataset. + +2. [Database or SQL Query Generation](./01_sql_query_generate_w_bedrock.ipynb) - Focuses on generating SQL queries with Amazon Bedrock APIs. It includes examples of generating both simple and complex SQL statements for a given data set and database schema. + +3. [Code Explanation](./02_code_interpret_w_langchain.ipynb) - Uses Bedrock's foundation models to generate explanations for complex C++ code snippets. It shows how to carefully craft prompts to get the model to generate comments and documentation that explain the functionality and logic of complicated C++ code examples. Prompts can be easily updated for another programming languages. + +4. [Code Translation ](./03_code_translate_w_langchain.ipynb) - Guides you through translating C++ code to Java using Amazon Bedrock and LangChain APIs. It shows techniques for prompting the model to port C++ code over to Java, handling differences in syntax, language constructs, and conventions between the languages. + + +## Architecture + +![Bedrock](./images/bedrock-code-gen.png) +![Bedrock](./images/bedrock-code-gen-langchain.png) \ No newline at end of file diff --git a/06_CodeGeneration/images/bedrock-code-gen-langchain.png b/06_CodeGeneration/images/bedrock-code-gen-langchain.png new file mode 100644 index 0000000000000000000000000000000000000000..d829e6fd6efd3afc4c20d4e66db539f947e6be80 GIT binary patch literal 71989 zcmeGEcT|&E_XZ5BND&2e5Ky`@f`Ihiu^>wCy@>QKgqlzU6%<93-it^LgifRcR0O03 z2oMMzgwR5O5CVk28=jeYW*(hyeSf}dz3azXfxDfOea_zd+SlGUuk>`(>1bJLPn|kN z_wd0zgHxv{HBX&71ErxNUuhoYTsU>=w1w;4yLu1r-sRTw^>%Xga6EPD=6la~RhoD7 zue8TG-n?cvc$uy*1_M6h0EXWfUgYWV@f?tuXbH zJyO&v_3Q7CjZ~b*;K#w?N?c#%&(?FlzfJ3UrI{(0=bc)-VyvQH&@3-VtYfPrJDh;r z3GjOQO8sjvA_I0tXZI7ZVI}qrAn7-~5*lqcm2!*H(fM@v#G~l5jni5DIylK2+`Ip0bMl$ebr(OsC-Nd9fq{X- zffB;rzRn_Ia&mGaqT(Xr;zHyngaE-_es)1ZUI3myI{B-gdyW8mU)LvouHIhUC;i$z z_V)Kvx_4$X`(8{b=NjbbVSdlm zlPn(c7|POeQi}h1{+By{kNA(4W`DO7laTtKrvJG0b5mo0qwigBPx6?4%6~7-pX2`X z=AR7}MNYo@KSc3|od0u`ENEp~MUnq5nli2CqRhalQ>v#P-n(rSbb5V?Iy14I)VYPl z+sLgBf~Zg5zIT?1lBu25@;7^#SG@Nb8IK>nfw5^0yFC6)Q}VvOw|-S5)5llbFwQ4g zYyQ|H3C)0Ur2xXg)W%j?^Jr+dBCfYN2d#r^;)-cyV|@OX-vO2f0|+B53aIifeBnG(HCEWXB0{OMcK_~ojm&?cik zkMZ;MA>OPQ`i~7i)X>pzORO#|yx(IIk`HgSD%E8U&tn3&c_aw@Ra( zBj3K?8%=-pceX^@#Pug=j6!uL%wr~uKoMF4^vqq)yql|iR-Cvq^lfWeNki%U#!N*; zN9@&t8@3gjioMc53-~`%p-Dz@ue?xEv}8%uH9Ye%yG43T8Z+>)AI{ImQIQ{~(uR|q zxGnGq?X0x6L)p0V0SgYS$nGn3ba42XCgS^4xOFeOAKqU!bpY?FSo@-WG+O5S{f#Q% zEY%Jc>9Tv8MEvcRr_rkmKTDxDNA)|kCPS8@et6g{eL)e?cC47Rce6p_tOvGPeWUd* z42XA0m>~46mm_r3bSrDMC7Zmig%fdHOk7-nsuVflTT-w?)C4uVchF}Y%0V*$al?D> zeqD0h**o%Pz$I6{m1LDei~7KuE3+46Nr{a9Yjj9{`E+M8AlsUCDafKA6q`$gm^f`Y z+wLn)Z_X|WO(dq+=DzV-q0^Nk2nvF0{q_ZN(6TRo*`^#k7pKLbuEeHHpVg45;2tbZ zV!e{*K(b5D{uI<&H&@anM-N#(_NeBRp?gA>Ai)$l^>I5Uh9agK4QbsMW=d~IKloWX z+ylX9u8r6DecQa&xI#b%WU~ftJc)SE6Sdu|V3ozzcs8p3cI9v~erp~sg?^6hqB^3c zTd#QelE!nY{%%Dp9wO~Iz1qkz^J~8k&s<}TNgPvFq!$a{P1Q7MCY|K z(SS|H%ZDnjK2euyR#(PJud3UL)acdN0^a)x#*bKQqub##J)(z>EKNDcKaVc6i z!8#3Q36(4;C=lq_c{=HCQd3WuYT?n$39Y(k8-lOv?qSHxuN-6xa;S{>%82e8924Ui zsZkHSkv9FVJ}@1_@6Hmt|F{cTNGJ>B9$46B_O`%^})ui{Hq;eoCnR@>OQqrg%}XWe|THSU1z0VjEmO9eQlviniwSc(?w%p>vtV)CTp@ zrg`@W-ny5*@d>TVn`=BTP^jJFDY{wGd3?F@)&yv;)V+cswMa;}z6h>RLDFoCqF2ss z)KwvJk>-+{m^e8h!Aqf^)<1Abu5g4bU(pOt(j2oVb1#^DZ+@Np^vRwr+pN5GGJ%OgO?|f^9u};&^s_ZrqGR5kB$s zE#~SzOhRXrsdZ09=xALKjtGPDylE&D4uzvD0)W9Fz|IUg zcqI>%L##MpZ90^QXI1k31XpaK?^ii8b3R(omD3$9tr|AR)ZjW%4z0&Q=-BRc1h}eH z{@Jo2ueOV1PV0r5I7KUoLax%9uqSCIWe1~z6BQK=Uwa)Dhu6$R*ZqEA^ZLVBo_)!X z|6hpK5xrKuzQkNiIRMBr!}mD2In7)c)gV?l|5 zI9Y!?y^u;HlzHImv--Cp%EX|WGX>eu?&V|%HMXJQAxvMX;(V>r{=2ORowX8Yn*p+K zJdLXz>FVF9I{yx~HH7G+O>9JYMz0<3#d9?Vkir6;h-5okn4qiJfAy57M((imR~^tG z${`v%<3E9~e*KaXw7NWV_efEG-g+m{`z_D^pd=dZf$1~X7;nYKy_Uc^y}hu!Re`oW z7t~U~=iRh*oQbVTi5)9v;uvSMkamh~NXvSpNrZuOJ$w{%)a1RZ zkmH;Sgzjc$5pXd*A}*d{n6OawV@}%P+}$u1im431&nCXMNOgAkA!xcG&5?l3ag9{E zbh-l7A|W`tpPZ?<_;F#vA*g9>dT>x5xH)a<$WpPDRH&OVAEpkKWf|w zoUol$OH`##O?7}XIKw>Td;jaTbOOSZgb`C<51-i0Qr4w5B!-xXe!i{1vexZAy4-W4 zCle5dYA@T~rX_=&M@u3B-;dsm?fYRO9Rs9*wq2;8!Z?=jjW8A%3y z+Pa9;nZqL!*j{(W#;u%NM_(Jn4{f;`Oe2;inl}#t^kht`mc&bKR$2I=+CXK0+}nXd z4pM867IuF6ebnyDVQ?cB!e(8Re&|V&9WWAX+eO6#Kbl*t7W4=4vb{Xmmuf}wowwbU zbNtNBc+tyK;~{zdL>6Y{|wJ^~^Yn~lO|A=Ln1e?n;7@`%i| z57lWU!G_H?H6VVUPg44GEoCSWztj8;#&HV+F#YZ^M({*#urqGpkjW!cST?oKY^Fw7oqZB6mQ!!WL+_D%;$)* zhi3-|se;&^Ze2)h6rae&=!PA!Ilm(t;yJ?DAddsc8CYl@JBeL!K3-tDiEkeDVqt>b zGE;P{K4xm?3O($iI8y*2GN&Xi<7H<2F~CrU(#Xh|NkuOOBlGvw~3brrqTZOYBJ5g3ic#L($qK z7s*VeX(_Pr04cM4s2NtcUqt%sK5_t^4xSlrL)l^>jtLYnuUa@RO#w}g^(4QJCT z@}UZ3WN3&&+F&0WZfJAhHlVMjvHhZg@`g7`R#&PTmOvs1) zaE3ZHfW?7ueLIYw;%CP?O7px|G(@3SS#Q-os=MB?8VrcLBK^(#eFoG6k&YcDDtYTR zAB}?2LF@WqxHp_~R>z@%;iA>HPbq^&y~jQZSwe|IU@5+J_R^!FNx2&T-u1L29rvB$ zxiC0>b-WGBo)#vuEvs)bIwnC-Dx1uIDLsC{Bqu7?eckz^T^KT~xE5|aQy3B*9WBT! zZxOIc3pX+!Igq=j)Z>oD^zSJRGkdzNG>tJ63NQRDVGEuUz3qrfow$baDdcsC`ZOFm()9?R7fPh;h~+2<2E2{WB0!7GCk2&+`sC=IV?s0Q+@a*W^+dNh@KYCq2qrG2so+GEf5m+8&)PH!-kSqhGhg`@?fhT4}@ zDP|KY1p_)e+xLaUWuRNceVFX$SDaH4m$|UVEvJP&cM`J@wNfQjluhCkXEjYL_H|Bz z5ehGFieYqC=)vhu5(kYFSGd1d|CXM2P8J*CByN-_B--Tm3QtN-?p%cC=xJrQ@`Q}E zR?Ud*rgv;h1~AwX7O(uQtJcOR(+t4lI}DuIs5CuAMpR4q+qBqv7J}n8rkW@lvjha1 zqZz4tC*LHjtd#V9pK31K-+$59lzZE&2^gGvnT>71>h~UGQ`Nx))tOve<6;>(6PPHLJ<)VIyRaH%yHdXo+ zzgu{)gz`^XUam9=2c-6?fVN~))5azGW_I?CS*Lmb1Ur@H8uI= z4l92?ajzd!qO^X-0Dg86?^et$Y;7w}Ao*ZT+$K@BUl#v6iPRNd*QIv|1HC3qcV@ek z@fG(ayuU;a$Izm<4xk-sZV2<<;}nWY3N!h#WeCQg=mxAa*^_75G|N7hTrWNDe1zXN zP6s3&Qx-z@_ZLs7qQxh&79fQjBy~+3oK^<+sJI^MhMQz$WIU`NZDH7*>LS}?DkF>} z%ap`W(s)rEK-jRAg=+j2dG41T`ikU#nfoWz?`Jj3dkq*5X)fQY6I8ba;dTAHbi>Ep zzQ+$4j0_Lo6cFfkHYXAB_~1$0tg1xL<6I-XPb#@)UT5M1d<4SpKE}i>27D=LY;06j zt6!cREmx2Xn{>%R3hx77v{*Dwq8r}Ie)=}4pjSCe4^|=e8t(K0MCvX5Bgcz`SUKD< zJ?jX~PR`JeGle3y4Hjf03+<=OVs!!%V#D2+XCvqss4-zD7|eo3;Fm2xeeT3Gt!*t$ zVAD9CM?8DcnQHTrj!@8J=KE1;t@sKTObIJ4%wnL_2>HMf~@`9Z>%DkOmlCQ%d_+< zm%EJ}3)9!_#%P;W#%-_h;oV_Dp z=7tsugdRCSs5xl!e?xXRIw8ttKMMc2sbkd>Sh^g_mv!UJ2K9OakV zqEmyH{PT!Byocc$TKZ>O6aXERL zvWEX4gG`LtT4P04{p`DQ_9I~DKxCdt_%WUfE{V#QRTkE1-Cs;vN>jnC4=Ru;RVl|y zkU}HjvC#CPDAnLQ<)L;?^0eXn{9=RH54yYP>KoX5I$mL)r~CMN74GM&(-TY!Ot`S* zSfv~yO8HZq#eMPXnQKzcCH^)}OF|@c>rp;72XH@sos9G?M8j?J_Z20+-BWK0^o)Zf z&4dWD1>sV{b`xGZP*miEHw<5(qn9|Z;<&tLA7{|Gg1K^2>FApTb!I)_8Orzvg*9lt zS&mgDpccS6sGR{7kdu4JqkduJy#)PvS;_sU8Nuv(>#uJd%;vXm%W#!tvFzCD9+}&+ z#l7GX9@{%(4&9CcSbLeRRDk z)zIE`ukuWJFpTZv5T${QW^Pk4q=P#*+yt5DsSP&Ucd z{axZDj)+nb9<%9GY5AcZMo|)WUXss4WHZaWNy_C>c+R*-?h&3PXQ*__hD54-fL1xq~-)p zj^iW;V#&diN7SS)ePa7sCf(<-y{#gf&h@t(8z3YZ@4n3l2Yr@LLW2voP9Gh<3MI>IvT=MhMIO^C|+)m+>blg7MC;u2|Zw~7(N_|vKs;w__ zuOtRZHBu_%4Y!c#xC>)nad2Wby$k?@y0*Wy<uYfWE3W*U1+^hHJY?l*PPTgWv%6Y8zsCh<{pJaVKt|)j1Ine(F58Woj2ycRIv)@X z;dRD7{hVnh7_<63bWcO1d8cvRZJHy?Lv-0&S8-wx>bXrSL&7WeVICsi`yYJSKv*Q` zx!LM?+2pGb$<$3i|5Xo))N;B+iwSbT)>QYcys_m(k4vkq-uyfjn)A;cDu;p2X-NyZ z3dB3;%FW%~Rx*g+>HivM5t>n5?MvEWL3RlnEsBii&Wb=tcRwp0K|C>A(VWC+G96K0 z*Iqk;Z@+Ov{y0A8gcfjtg3b!aj)k5Xf$^j7l!Uf6Ztyzmt{2vVg|^4kI$Er%%YITKVh3Yi#iu`#7mcz*0tb1^<^rlz2zx%rOs@un{c zy(nX0@toM$VRA9h*<&e6h!ACo9VCb}-_dNb8SDjzI*SMiA=tcIi*UkwCF|@(M+P_d z_P`*+x6uZ~^}}3($_}znvL~yvf6KiH;Np5P6&u){JZN4*mae~vLW9W9P$`T5Vmu%j z7&)GuD*cHt1ooCQZO-vFDbA5!yjV~m9STuZC?g=?DK3LWwr+#Ywm@d=bp7k*NqlEC zzPbT!Y-&}yu+(dC@7{A_b8GArs5eR23{? zd#|QLKzYhy$(XeDCm}>RkJaD%ROV#KIhpYa{Wjp(i;@6Le}K*L#@9G}34bTmhxB-P zL}&k(t2Y-}*8Qn)Z4_n9T+2X^aOwoIa)Tiwdmx}YCL`=va9r*CVL@rBoAbNjqbi>3 z*C+RJ4lLK)Q@7dn_bVfYPRK76MZyKr-Vj$wM(1^}-K>~5lgDerI_{Or2od@{9vz#o zu(pXt0swbL#WtggEaV132@lp!_TaD1pTEGZnYHKC86+R7Xx5y8jH!QdD2@v zr=h9o57EdF1vxxxp|CzY8YpF_~4~XL}ORFY}gwKm&aIp z)0c5?V+_LPY%r5)1?{}2CgQ8vOggAq@5f##JR*r_ae=Vq69M0a{b~l!KJj=8hQ-5> ziFbKZDeF1}czC8<(^6AsJ=}G?T70#0O;^Q*~?fyswE){=Pk`Jf4oaRV ztF}lVSI&8Rpfo%r@5}M?HqHBe;Ks9pyq#0UfJTk8VuCK2jcYJdCU-rK$l7;5r(F(}> z(DE)7gP-!N6q``Z*5-}-=zxlBB|iin*_bmRaSYVw5;>Y|2tUc`_FIObl>-m?(QZ=* z+8d!wKHugH@xu$@zFcgIz;w_=o!v8!o>sGE6x|-FZ?(>16UN2y&Ur2a?!K9Ox_?1t z5*U{aT%rujCg*v9XgoSGIelJH+J9-QyGP_nj`zm>T#!^_%rlKn_5b9p!PR5S@K&zsPdA zF|J9P3}u+%J@t!VHE(`7{;uHHX8>^58lA*)_1xh^0>U5WoMq{b6-e;@86#X&oqcqf z=D=oGCbvUNKf%!21o9AS0JB&+ zezew=wP`MufN(v$1mZl|wF7e8`|rnIg}}&drc%Z@bL~6d_+dfWAnY^U$v1nXD!(GP6&&>S|Ti{RgC>ZMP)|i*(WVLD>Lj+PPRtTqxmsT_;z_5AQy=v{2^Oh9wPa ze+*u`#cSxB&k4!6amW=?Ylb{rq8gw60&xI6zpu6*?#Y+-xzYJ58PnwnRveZ4`r@qA z{Kf(wKaPBx9s2DwL180xJmz(*v6|!JX*6nHRdan}z9li@CumGQecq@#z|aO&Is=QE z&#=jV|NcEW3JGV>C0@LKU5nd)@}_gHB$*Q-St)|T8yTv7o~oLerRpgAgjeolz2IuV zW%_;f*}yD$WO_uFCGcU^m?jg~c!RWR^vul*j)`p;n+OBTs4VJ{-OKnCUSOgf=<@MF zAk>eXDI4|9K6i+sEcH0aKGU8j$U_$v79`QjY5kbp19bpq0?e8C`d=m-|MXZGczYO2ac8 z6Ew5t?dJq-7sr^^tX-#~V*9y^-1B&mK1jmrislkLTQdu$8m$<;i5*KTAY-Oa!mhi4 z?l~#WoBLBQxZKHgAoAp*l`MQE+9rGr=7cP%I&a}NW7d%QZ#qMDqBCw>ksL8tjez$> zuNDY!-2*~VHXtiL3pxzARIIDG#OCk3`i+ilujaG?vWOAv`?;JYXh(n)G|1A=z0im! zK6~G?G_9EX?wI4#+$d-Y5Q*YmBj~7%+nQ7?kk#K0>x^D!ljdS$T(Bzc627vyzjYy| zQAC^#2HbsuMSZq&H*n8Ru{P@#zQ3qJX8Fy|t62R&johl)G<4Ib2DO$;lc#S&C}RKB zW^pG{-nnk(#uDs%qe&K?nZL_m7q-;E(l@ZqigtCb9Jco43#|l555RE+*FiihJPmV3*$B*9$ zEv>O%VQL$OQ@y2I(&H~uyZgRs?b?H`$|P@}r=2qQ_*^YjA_aFp+5%)6-u<+p0{ro$ zAn3|i$?rO;O*4~86?HR0b>5iJ2F_oh-ZJf(+bS1ku1_$HVBW3GwMEJH#VO82^f9 zu2eH&>QO;$pce;6kqONdpd%C_GjC7&9ch*)9A}ycUvMXv)^R~^kFFhK-EshkMv46~ zGiX>ou^1x;B5EHO)z%sjs@{%O-bS5U=#T`0@AByyVQq*-oGv?&yiP8!LK$E4vi%An z1_~(ed~hxaJ(H7~x5ttZEU1LoP6B5&^(0rsvu5I$tnkhCU~k*-sS$an`arCnLNBS* zmNX4s@u{kk-(5D}u#Y>!KRn5!Zjer#^4lCxEg*c_M}6fW0~-K&fbGBdXyH}(k)?B% zPxbm4eeH*2C}I`hc82X@> za050grPPEhTR$?hW5cEJro}EDu%p%9+1bD_(QseJYkKvld3UsF0}x<#sIShsG41Wq zMkVXrNQ#Sf#K|8MGd2u#Hd@-V*3T)ZV@mkADkO9jN*=;QG3-Ui8NVV$v`QVmzK!5H zfTYs*tT1l+ZUVZ|Gz1eICp>8@6!LK7pjTb!)OU^<4!nmP2sU?7>aF>Bz6J z2p#CS92>jmx=l73bJ0J8SLX^E@=U5WLMg)vjk#_u?h`e7(Dn%-x_vsv$TCBP3Ko2IGT+kG5uqx9?k7qpfGiS4 z1MHLUQ`l#BW*Gl4ANty8oHJW`yukwrnaG84zJ55q09j+JZ_BRf@(-JtjyU$qf(lMD zun)kq=AOkdD?qK$7;+`dI^l}6-@D&_n`gK=W9)5uI~zG+pG|C8^?(y=yn|p<-mCN0 z(jxy-zrI|0QtDC1FdL~^F*G}f$jq@@CR0AX6V201DbCas8MEm{YX zJT2^&JhCK7W)&n{*bXDQz&Wc*RYYxf9-2PWaT*v=+yZ zk%uQ%Kv~8}4@R1>fx~52H?}eR3@S&%p`=fD<9v57`%lgI!_Y05)ADZ1s(nf;9@?4G z>I{m9pGM1Uc!*Zc{pPcNpuOyjOgzCKRt~o(%oJK~eA10(msW>P2DjFGO@AAB zX~o+91-8IXOI+b)DJgy73*Hc45Q-RlAbAT*hJ1c0&c}MQ!AIMI75+#h%GlHtlodD< zK6D&8+fTK{@GpAC&GerNHPUU=uJFh@+iwC=!x!w1H#4x3p$jq^dk1&ryn>&HDyHu! zEAH(hEf!yH7^pBxQvK>GTp(mdU@3;u^=Qsc>OkA0#4Sp9xL!(dC!XgvvLmr7PCa2d zdcu83Yv$2!zZ$$JPtISwg}DQtq0-WQc?(G)#ozy#g%~7>4qd*ZLMuu6FXO!@kH=i) zbLrR4P9jM^sfc$LvnAj;#4oA$KR`JR=jq6TFSuL9=l*|m@PXXF&NuYv&qVbfaqC4z z^6L}N(B^uKzY6ulBrM+}cc1kVUViC+-WT}mVeX)_nt=9;X|>aIh&%OTUu`qfFmQL;AxM*MTZGCX3o4Hi4FxH0}VqSm$LhJ zT)(9?V(f^@$SHz>&KskP^|R!rMPIPxH41wTSN5&{L(2zD$eKT)5%2q_K9gUB@OUT5 zqt7}ma>qWplRsZQ@$yy3dZt_Xj8%zLhI?YGsdyDaIOVau{Rm9g7Qe1C9KvAY7N@1w z@l8+X?@-;Wsjd72!7Tk`6$v+Tz1#-- zu5C~Xn1%`{3Rr{a8@?Sbeq|^bcIbj%9@I8=RO_C~0)Ne9H%?5-;LLwt`kGvJZI-#q zoZ?1^x`F!ixT-o3vqPI&KTeUy{f}wUi<6Bh^*BXQ!ygNGwni2B@h*#h#b9ls3ucwM z@P?Ry2EnB-D=9CGB7upCtt6(KRp>xKJv?40J>4$bx(Ki*`Gm?cvbed|k zJ}0U~P~+CLr~Wp!cT~BrmxGq*uIcHP{`F1;b%bi!RiB)AcJMUMhn=Ag52XVjq{YG_ zH)5(y>hXgZx8BTx_m}KqH0ccee9HsYOO5pHmLaC(EJAJ`BRw*0rd5w6N6Pf-T>Ak! zhjXxvFkL~e&AtcHB$W1R-JX5<^4*7gV;k!d>jpVgZSb?|(Obr58@zPv^7mlTZ}jz# zyqH*+IL>;X)4un&>B}XNJx+a&(2YO$nrZ^&DifoST6!s( z#_CXydMP3IcePa2lKes)M=2?R_jeuZM!HcOqA=mRB9GGJ6N~2(oY%-{i9z#Do#E-M z4F5I%RwRh4rK0k=OF>41CU}*{$jkzBXk>!q|JrMto|x!iA)MBCP{C8x5v2o)aH9pHZiAe)LCG`p1!TSiQ|<#FSoCG*X+#>_@w`7#{^Fu1lZ z*Qy|i{zaM!DfzOzk^bZBkZbSe7amK^y=3$|qC~Hxo+It-e%&sBTIK; zcKqKv`J!rW1KIXu2;L9-Q|c~;r<;BY3GsuiShMDd)=Y!+eHsJ=R}%|;lhRJP+65Gp zYPw%`0&0$SM!A~?)k$N7jP1;0uljl|iN?|z27NkL?3AJUSo;Y>XWScFm%=c!3iYWYg$H8%v4j6n>NElX{o>nGn4!G zTpN^YWO;jgf#<=Sn-~5o=u;8T)Sf;*f@zIh!j9A}P`4c!%^d|ew65n&r=o3*+FW73#YD7&^&oQfa+yj63 zU?oN-dGGvfYEMNZpSyU=GmXvk+DRxv#?x%HV^2%i=^{gTmrbi=OtxI5N=qc$uzinp z=p{s4{rnP#h8U9)9hjes-`(M9yMEaVm^v!I+Dp5Q*LV;k1=He59Bk6EZMH10j+ZWT zIsdx5cfBAiRJ_({#q?kg#?X7mxGLtQrorwKhtMsb8ON$BpH&33LO|nuQc4QgKt1;Q z>N5aqq={7G>wknJ%iLtI%5k>O^Dm^af5zX5Cd^U)quY>HWXn`@W zzhgI8)h*(5B@FlbGnv4dmQZpcYZdZH#|uI(-JBwN{2i~nCr7c?BzjMFtwSuww@b~rZx2jNZKQdz^F21*t)KFA-Ghh8< zHt3^P0jTd4y~ftoIabNXWl?cCAHpc8TnUZ3b#CJZi=NYNk+8ZL-99}B4KBQPj}f8w z4C8~TlF6wiBS#r_f9b#e7XWjun_G;o)@bp=XxFcw#4M`!*_fDF_(N4y92YOk)X{8H zHhf-8$*cgt72B zwU*@IeZsce;vMm@{`c-Sdg6*pNl2D)fk5vj?^>lgCGBx_982^{xp@EeM6{Ubj_uoodKHA&7 zmL9O|pq(apTS@zon39n3t8-fd{6dCaUJ<@HTy4lA^k5!bfU2}hIJYB1WX=lsvQpHK zw1yt`A4WW$fsaTWhncswZoSn3Gsyhcj-l?5gFnlg22_8>jW66><-!Dynwq)*VBlt-+?G*R$XBsd7F$R=w)G>FC9Jq_q8>cz2P&6PQqRxNH#SbM z;Fu9Y?)W^DBz()S4cU7FYY}Z9R?wP|Dc3hoJJvwe<2e+q5(?o%?-!_7n?#gHV@AM9 zqu?Un-bj7_J`T9ID1Dl&&M^Tj2s5Ke2Kq>XoJZeBuchZ$7gpt~A2g3D3e&NPe-HNh z@(PeOLr~sJ8EpncdSP6Ecf7iqk?{2T9Flv!bF>Xj*1 zpk;Q*yiXsbfi5}Ppt}pV(a!FA^!U=H{xkM@I~Pj+s&`>0Qw%$*jBo$6C#o0E4QFts z)k)2jmItI>TlMGNyHc_m+L6+_K{TXk`+4v@;hpxN?MqB9VaJ4 zXU*P5J>Hj$g%1<#jVgQcbeYq;bSG}!$jDn`e4ARtm1?)H{-%GJ1$$_E972APhv~Aw zH8GolMX8wBm-;>{HfXC-W8UQnB_VS;$50~!8;H!zz8(y?GtfnTYkjA;GS#RuDRN)}F(2SRlsr)zhs0 z*_`n32MG*Uxi)>H&*dUh8{F-+A4w%5suyRLzcqAz%Glfmag}~Md;IXfmgXjzg`-<6 zQlI+6O~~Fnt5sP$B)o0p88w7Vf9jeDxKy-meWSFZ#8AWS~Pur z7=~(bj=WyFUFVJtNJH$wk&;1yif>Hx$Q5%npL@PWi0XRjwo0`;_KPpaM#! zIR7tK)df5B^HipTQl_Pq%ofClj2W51&4*S|GtjR=?tmGc3diC<$OXEbIJ4ti&?Oi+KQu!Hez1$&;68=;=1Z_&! zx2du6j8c7CKFecQ>0x`x=G>)?`=<@ro^pu$e(0AYXmLn4H?8O&RNEZD!Mu8`Mcu0! zp5tj)`a}z?8$z(Y`^_QND{6veiN%HZmV*@uZKa~)T+amg_l%aKszajz!id|Uza>uB zuEl4$s_qcdlDeCDmGfKHgj&dT-nKwaas75$8qB(~Z($w}3MbneIZ zp?@Rd!96@E=+8FSo%^)C|&Ec3=r!?cLh{MWAO z^m&GZRB{UI>&mn34Y4e@_JO=_5VN(Rh$}l9tj=NTXgA$10nb}zE-kI+lHCmc%p}mu zpYSqMJVjsrV?nHqADMNqb4(u#5RT_;nlW+KOUF-;8LBS+<{z)ygM0OWC1tW-&obsG z4NvvnPB$)m36%KWBHw*htFLoMluiPW(vf=HEw zs#!&red$iu_MQ{$xBATNG?L$;tFznawNNlICOeSVA7R&ed47s`<#(@k=#5BlWiMQ?l~ z6095CV!dF*(?TTR3pncNFh;X4GgVyyF1Nbsw|!Mb^7NtwN8q}Lb;waef8Lsp)9tdT zl{B>Ns1o_Dw+|mae;LE|E8k7A3d-KvSTMc^TZuU&C%zi@-x6y*i8>^lH-j8J1F4R* z4$nvyvRzDSwVlz*3LGu5=`<;~0Ux&@lp}`B)j1(tw!SSLaaUcVwq+_vp8FyFvYsu% zuvy|pKr3PJ@l+^QS&(qMW^fulh_j)CPLxH1+9D@{W~69yO^1TCm;E7cuMB9iZL&hl+-;9di1$#CgGK?)_~9X{(-A}?0Fn((#tuz%HYTtUqptK z#f)daIH1(zpm|vC2hcM4V0Q!ZLpjvgD7C19CG_K90a!k$J|VbMuM%}duIyj=Tu;a*GW4=xKLI}MOnK; z7p3DJ`^Fzdt;0kvVYeWQsir{0z_n+Sop5=aQC7hA)=3pHF|{HV*AiHIQZOt5hkZxy zoDFC{$T;3~&+_Sh)gml|HA(GA=iY720rpmyhG5GU{dr|-U>uBO;p7*r^|kSdk_GNjD=68ONWLHXuugSx9j(`MposdI#Uzi+)) zS1)lvkjiEr%nqpXu^&O@mp+tKjIM?OJdC0@ z6YSJzhQijJmZ20SN(>Qd&WfMp7E3TUr{GMnLHrLIf10yL;&F22m-g z8M+3fbEu&QzGpDsbDi_+`}_X!!h!3VXRoza-Rs_Kb6>OZafHIX?#vb*=E)I#TU$8Z z+h1G1K!`p+*lI?)_onhM`^+~JxB}A;l50A!4&cj9`D2CHEhc&JnR3HBiFMFtVPh4K zyf^Lom*?Fs#3yYKlvk(ehWf{6SA{5wBatuTHZ29yN8QXWMh*5upQoQ!=89bw`r1T5 z=W96S!RBRW49K50E__pjHk?7#$aBB^j_^$8nd==TTun#$nr2Jv_$~w`p<22%7*dkb z%q|`um>sN#Mls|X7^QNXyCt_2IUwXj#8r60*&UJ(1O)Y&me{)bcv(6V*9lj(N}N70 z4Ct+$Xn=XAww4K8ZW%Kd zvqXnw;uId`4*TC*j7IA56Teet3z1m62N{}l3$MDuudK`kQn`zlIu7N|UBi&?>F#lY zUkw#l*HzWY19+NBgnf4e*Y_g{RvxYu7+$^Reoet9d4jtNjHKG}Oqe(rsm#nf#71~J zZ$U)vqmHZax{M`X`%3fe2{K;Q820)-XFCsJaQd%@65iO|qaH(!KtX2aib-0W_KPu*N+-{Zj%N`e~bDs@w zSewa*hdi93QKH^}X!bE_ z-;RN4rZ8__0&v(`Xr~tse~*2-aSy%tZu~X#G)I_3ehK$Sk!Wy!#v|p$`vgR{i&ST} z>`4|iS?=>b2A$l`6MZNRiQG1&Qj8=Hu=_o-R`_2ql2m}VhETdNBd7fP0(*4y4};%y0g(>wp2&$2v2_`E;#*>#H`*-bSzmHR5J7Cy}~PCjM)DLjh_R~dMIG|~VLZUrVM6f-g_!f9X6noS(%J@~I8OC(V zYvk)16f`uR7G-5ULTsiMKH`pDC6Kc4$4S^4)3XkEJ8BV&lN6vi%+hriN>M4DEmb97 zSj>+nF>EQX_5pGabQng^NNroi24r|HeXH*)RGHk~KILHeql!t+@ zdmlYm+sZ15xtAHSZbi3mqtnEfD4eK7IAm2Z-Fp+f79mLFSfu{;&fs+W{(jO8b>do= zygR^X-6u{2hb4}Z1w;E9ys=e}#_RYPRm9XPLIfvR7j9)A8hS`5kb!d7wx2DMC43Fh zRdxQzGW?B9T1Lil*2l}N6M5S-;aHxI?vO3ZG>61uT|?(iZJ-^jd8Q4*N~F)mW`lg8 zBSgMWzX{FJ*5fadTjU+_GV*s^*xPaPHtNuY5Ev~w4!`6xwjx6ay=WaalMkmhsEV(| zyXzx}Mtc??>s;-GE(GM2`foZPQO`PdfNo6)+He#PKdKlTcv{g2az-xAiF$>u$GF6CK zjqf;r1vUzXC|CRdDFq)UC9&1Xm>Uq0kmPZz=%p!e2&*7Z4t8|u^MILZLKV)5$A-Na z6;w$lhY0Gm77rKY#3AFJYN|e;(gMzg_nMqJ#vswQSER3;DlXW^!deFER-oQmMmJs! zXNvw@`@2d2=MD4n)VQRl&Klo%-K$h{*KV$DV9KnjYz9M`?)%fD+66(WsDQk}EG?YUueywOiu3^MxOCF|(#x&3QL0emQBh;=@-=O}@#3-EnW>ANr~@+Fw7nw?iq92V2cr#si z%?AJMbfj%!+zx;_$3(sRnT0oCk9`&15YDDILN~kJxO#{D&Yj|SCeX-AkHWQlA`J_0 zd*Q>jr<1GPpRb>Wybs|Mk(pN-9k?y({mKzLz>`2%TG9s;KcOf zNM;sC*+Vs{FK!p+5t}&i)}#(6wwt;RDiyREC6fLf;Cxux9Qe@cQ%U!+FewpL9)R3i zoyRY)?PoH^)o(%CftFrL42P;!s#iA~t4pybeD4RX*llz79?|p8rfV1yHg*t$h6+c5l?Xilp>#hP?{D=Gk#Lf86EqMg{%09YFRiq*0PpTvy8c$mu31eSF3PU zO4k}alOZrZb?CdDE|D#IE`q^F_hqwE|KPUZ=If}{UgALeYu~Ial(Qk_%sfpmN-{!a z2V*~ePXb4u+HP@*DD2_kRc$pOfO6eDf!8`l`qS;gw@Jxs{An$Gc2i>(b_2CXkBAA|YAyIEP?E_jog92&vv|pd)7^dYpE@-|RlIt+Ksn?>#x% zQz3~BHzWOst8QzUzDJFgNcn|v`MW5jz!~mc`>bXf;R8V2DkJg7xb_ZvRlVQ$#s@9u zmx>H)Dn-~-;`lpI@ka|d>+&N)twh1we*DvC$V&a-FOS7yi^w}=h6aRxtUZM(rZ}^1__nTPYFB+ z9@sTks~jA5$AZkAV>3r|b0XO{m@^sm)Q^fz*U}%uW|}n1H;WDz(v8k?_E%jMo4Jtc zTnFl@;oJd6#+W&oSt>AfNtv)EJ)vorYU-pN9t0#d;G^_q0Sm(za7c2{z#Rm1Aq28`CL*)|6%22$TLzRTvq)$!VDB=yB64!!?~nNm~3lAMvX z4W!vWIZL}nm}w(|&VR%{-9XSK$~L({2fnB<+9v=R#N~IO5K@>an^9{iDHuvEW%%J@ zRX##G%&S;5m;PKPlNV1YCogp4H23k0ZiS4fdx5+&=ouTn6F!%{r}nD$gne(9yEVr8 zpsw5TqIb9V*{)dj{EmG*GFzn+!Cf4qqTHk<`W%_KA8*Mu2UTDEVVN4+-+vb1iA;pW zz|YpB?X^PPb#^u!b|bHO-LnI28#+AIg{cxy3X*Ek*)?A`dNTV~MJZ@3j9R3=XNW2F z!;ua%Y$&``xeDjeWpl22#cyzItkWD z^T;9oVL87l>Qz;$J626wrkJmlMl1#-hDQ=ogAozHX(0dHH` zs=_Lz&{5v5uKK0H46NKalj5p(mSW>A1>Yv<^X1m8LKP$=BCDt^`Rf+&3>LpG=Vxyq zDLou5htsWAhbtP+c0&8RSxSn-`;9=^`unSRi%@<~t&rqb5k!n@*?yYK=+?bMp6h(q zx@TfFy*>5MPhwlT678BTl{Vq5prC8AUwy3v>=)AV-WE{9n@&$3jxJxd=0B35@lcy_ zcWKbSMSMNv4zGUm?jlEbs&+H&wIYO}ida#L=K(ZwakA#DVE@4ewZpM;%F((^Om~&G zA^TUU9IPO!N3%R`2VEC2_4SeVXGc5l!2PL}#mKU%g;u(cUgQt7QGeP&^sdvz{f@qfo@BaWDQvDLQl_iU=#;m5=w_iM~53bo?0)Id9^D)X*|T znDM#qss}=~E=%4h+#50AsMyax(`Q-zH0vDov9Ycn&_N%@b&Bl12}JWj7D>zq-!mPH zCXyKEFliRP-c@7&B*vm_nM10WlX`MXi|%k+gWYVsQBMJVkYc{dvt?~xF1ojbZD1$(G|3n+IN$_}fhcu*uUJ_*b39jgXOTR z-@8mU#lx%a6SasM7NKxE0eWH~)hwZIB01=&EpVg~SyRL-=pqjSCGW3J>nS@w2rCx} zTyX8}XpoW0R}6ri?#32})M1qr>(~Wma};@LEHyc?bsxV4n zxRUCqV=@ogHxFQkWk7cYezizx-=KYleA%qM^)nlf!daPcDAXkXUSJ)io2gLLsDAOm z@w(@jMRs0Cp?KwSXU(@bT^Z$KNwly*+=z z9uN3tScCVr$m(Q{_Lp*Q1X%loQC-xqxdbcgggetZ$Ln3T;g;;$B?df;i}qPf+wp4j z?|kA5=39yHOTnojlt6scrBnP$?qn76?1`F#?d%}#H}b++4MJo;C5!3sVByk0tGY~J zO75odwJZ_$SlP#3DM`5k3>_g_deFL4*;sai>~Hdx1%;}`j09SB%=DXM5Bu%qMJuOW zj9Zk{EP^YOf$_LqGNvT<>q&`4)z(j`+#4-z${k^T7kAhBUq$hcUPuV)Q9O^AC=qi$ zi!+_k&si&_S_;)sUvSv7M^6n*HPY5L4=Sf2q!cDboKcN99_bjR(wP&8N=S!N-o2^} z=a?=E2kRA`*o>c4BaUJgo~54xUKgKfZ#F%@b$$CZakS^+OxtY-ei2rpe<2mWJKp6? zn`q5Ob8|CS)LlcXr5+e$VQM1_QXlkUJk4QvWwIYmH+&btPknk2$j)1KA--q5SGQ`n zcanyHMb5s2H(x#I=}X=#y11IbcSM)+hYTEow{Resy&o77EARW;^G1oknZsUk=*VpsaMncP}({h@%agW6hQc7}Ir6d+Oyh z+R}5Rq8JrOiqt)KIW{t#@=+Uaa%o|8UwC*t9jT(Anxj9is$~f)DfLMIBv|z5b;~Fq zKX>F86|X1f%_k%cjXJ3f54P(@><*Sou#bh$&Q6;V!(n?lpQuNcj@^-W%n4#rk-N{w zx4)6r9ekFHfE6X4Z5^uUW%}Z6oP44dlHbKkkbng=dC2QiD;9KHqbw!sG-+u0GLdD%+(&e{C@mLJ5ltieQ|pue1c z;1%zEutdB^ZtJ@V39bV3kcDT7FOj*`PnE567ZDxQ_%%~^BTtFtH_OG|YtWF^?V-gZ z7j=$IwolcR}_s z&)7HOYne%eX*Rz;mppz@Qn7zzT+?{Ib*kk-=wI1VTK2fO*)&A|pf_<-bTcfL(ak)S z|HO*Wa8dnv9IyqO^GPR%h>{SLZJwM0DOUtbF!k7Xpe*L%?lU^BYV)t_0MqW&U?N|tX6nR|D172Q}Uhf z2nDSFTxalR_9m5*lG5%9{G3+3_$Z?hd2qU!+_(J8Pyynf4sB~EgmpzS;U@_YRkq(q z6t}TSo&v#D7CHz;=_C6u-T~oVQ9ejH8UlH-syb%S-Oao>O-0jruu0PijP73mt%v`e z%GoN0{x17`)mk^`5(7Z}vt1@`FfDgH2{S6c@crjJjn7SE^5*c_|KL>rApl``vWY)i zTi?pr`TMs2{$z}Stq_b6`tL`7*Dz}hIDaD-vEV<)1O7f2^%I@=Gb?)6f0*b05F^oy z@NNKE#;K+7@9p&Wxu~CR1COR_qx;`~d8F%8Iy5@1GXHDC{QF$M6aZRi3^@+<|MAOF zKyuAnUgZDF`Cn9jKpJ?o?DlW|{{L8bGbt@A!s!s|`qSY4bGaBdIDtn?zm@slf4NqUn~9(tNO1M|F)E0j`P2c`d@+k*HQn9I=`LBe`E2#0{Q=p#bL|qBmd+N zzFC+jv7|k`(46r_;fhyv8|($L_1_(dIW0fmj(_A;SO~IdD%7dDOI5Q#{Wo7=C!=L` za=WJb`%s*CYcKk!A+ORB%v(Dx=;UN|Ii}~cR0~eyay29Q7JHma4M|kUajg}GG&V?!rAJ6k07aJd^!Yr2kK7A)SD2B?!Vdj-Y2Bn(|)ym z7GkyOP2p$pfOq5>GnJp)GdWSR{5*JH$+5LE(| zGvxVJ4+=9)expEun>?dyi}&7BZjNw>>B43?$$t0K=YF|*Z49Z z?&}_=i_uz5{bg(8y`o0zMHJcy4z}=`8Lv?%1>AQ$L1fKjv&#YS7W6BZtA0ceedx*Dgq2YPb1M-(8H3Z2+B{JQ@t|36>w--eNqp0|UZ4>) z=4Hy!oG+e<8y84bYr}1{X!F;ju}1YupiYY1HxJgD1a7?71e8@K|AzW!`fY>fc>9sb z6ZOfQZKhudd6u5B$qwRxjbBqZWlPUN3}eGb^(th$H_>q+d&|D0VYe zwmee{9c3EwKC5Xx=X$$lKX$?!{m9Ch!Rxk(r*t|M#ikR@P@6Pij9WKnm!Hpl9 z;?`)=!2I($s-Lczi@g;){gaEY9gDH^$I-#4wm@a|)Q5YdgM+aAMCmjwJO-@mHh9%H#rFg+7F?q*3vi7$17)N#C?3P=X&kx%Ka`o|<_DVt&vez1k zem1z?WxMB??Ia1_GNchr&}e@$jm2+;!TCXVu05 zu4L7Hu~m*M#0gqYJ~Zi;BEw4fI&^jgQ$_zCP&mgrVhmrxV%v>CdcNEchIOehlT1Kg zW-m+XE0hFZ?2fkR8mkEKQ&3nc^}bicr{vvm{K1)?Cn{JKV_7+vMZUe(`IM2Ms3atJ zxU{CUw4o^=FUET0dDB5Y%LaZL&$C5wT6OfZsm>_j!^@r7$p-+Iuhvy3ey)-PSXUy+ z^va2}#lX>esZv-aMEO(arx918I0m8ap-=CU?FTXM)^ItEo<0Iu#4Gl?=tl1*-2!%- zdPLOaBW7KIO032Es>LO(&4&f^D04J=I)XPE;v^RbwSa7gmnw%a*c41F_Sz`~_H*5D?GIM$axg-v)b|z93g_$2ci>mn#6LN5 z;;rlG8&(?#YDaSPE(W;b{ARet+B$C8!pN!JFshBJbG)T# zy6pQ>cUyt|o(i(*GkUD<>+sbJDk?>&4@k^uEh+zP3EPA z1&sXsOgWA?uIZU%(QU9oip6wI6S8<^qGZmxi~#V>b-*6VI+=ISS2N8ImqKl#jJ~X& zUC%ot7RSBZnZvV7e`Ag^_R7jP##r_k#u!!tok?{G=@QC%-w1a6wDjD7kfnhe_TLm; z0vf>~C%K4G)dt-QV;2K!O_^h>3yZkkza#c$MS=Zvh`{0fb4>Eqt%2YGL-*%8ozil; zVaj!fPdabUSm0B^%B8Im=HpG{jr4|x?#IX!wbZXipb3(|DC@(cZ8fqJb>I9A0<{W2 z5HLVK{(Xe;if=8ZqXC3!a-@2KQcmUt0lDB{v~}dSX<0&}v`iE8?~UUGMM~U`QF*q{ zs!qNx7p)#czfb;Cew#e=DdlOWYTf(|Blt>UCXC)Un6i?%TTz^|Mch9}fCgS_$fU`| z{Ebo!q=*}OFm4O{{=bh;1BRo48nB7!i2MkX*NUu7*JPy$TyW#^js+7mPM^xetvv@X zmFUzMV%JTNyA0u8wi$qEbGNlq&3m7_=ofh6%X)JlOlkB!KB2sm0i=t}Nbc!cxR;q# zvy5Pn)i21v2M%C0pwUI1+rJ*t_#jPv%L$|~tt4{93H&6<6j*~Xk(f||EJF7ERY(}1 z5Xioc1LN-;nAR4pf_)VT<<|h)yh|Pd#6?n%8YleeM~y7T;3b&XGAKiVDNZ71#kz$9 zNG(<%c$9y)NgkPTFJy?q;o6_a-9vCgQ;@2k^I4c&H+QgMl1rCQ|;U~))$9y%yp)$=+ zU%^xde>|uW0F;Tftk}zc@2?v308~XOm?irUtb&8LGPFM1UZ~K`zS_n-j?|Y>-?THZ zdVC6_G_yL7RFG()TXOgZI*K3y9?%zB@Ou}a$zXow-yd{h1$L0sv)Cb3vwq@gvuP|L zo?-ao?T2s9Zu5ELV$J>80<&R&@0SQ8{u$JOjO!6w8Xc~aJYQf7=G&a5YYO`uY&c$B z4!@;!1??K3Mk?_v?7yF2sIjG`TW$-2^O|WE|DZ=+0NRUqSpqft=MVn@q%7`>Kbr`8 z$N$eqzj`#60WTB?e_k6-6aRB8{I8s_2xC{bsh#4lTCr)v!o=S^CcHCj?L$mLEU)UN zl2<4~Z$~+GpQ6C|z6LefFNz89fGlmmbed+S@PBQ@8=dmLfS1FVs4|-lXmw~2zB9b; zsPky+QDLl7Tyvg)!da|C#-KY+y3GLhR)Pk8n@?$}@!XZPGKJxfs~Kk$f0h6O z$$$JSSqN=foB8&8HG^0lHEdn|(y!F2?j5B)o4Tt``~;$@Ovjchbhdvi?h8v85gaq= zKk&zU4*d=HT1)d^DSS!OP#Iu4Wa;7W@zc}B=xZr7F)^;RoK;Hs^9I-^`hbAv4a713 zzCt5ITBd{(m70j-8uIF7OwA+)zM|899<{s8o5%gmC36^mSG6WFqFbj{7L;o#%4W8YJRtKxpW7C(LR;r!$B$~Yp*Re4$e?~6PFLh(GtyyNdr zS_{ze$dKO(G+hjuKGyGJ59MVn0W-`zR2-3N1i%023fdtm+}7CT-ub&z6aZU-8fgjN zD#dG1Pg}Hy{B^z|iZ-L36!Iw^42wI5IdSO5yHLd%(cM2xXv}W<1zd^V4*& zczUvO5Zl`mM-5zzP)HJUS((fbKX||#7NH>DsN-g}Dd0Pk>E4~VS0krn8oa!w?9a^t zyn&AQRtlEymbp`G_~G?fb}0kMYku1~EZ^cBmq>L6M6~ZHewdQj#Jyp-W<$E}(B!1Jk}TqtON1t2kB-iq{Zyzl1*;rg#piZV)LjW~%gm1$-$Zz{ z3@>Kf(bdTiAIS0}=KbZ>WH4@#tcd0oe7ZP(_7)pUA~O5aL$u1F8F=is z6|ta88ESDs2o$f{y%QNsbDXPPzX~sAp1id;glv@(MzuqPSzpg=N{Hxt-mg;@oR+LpURY|Al^{!Ce%dX~T3KDgn%VZ3@}wqu zrqiqgj=4^T|HR30weWFd(el;8o8W@Yn3WZEkVwAy3Se3V`@S|kA|tx_C>jbq<5P8= zM13@U)WMc4IUiysrGY61B)TAe!({8$YRf|x$7CNb!V~2UmebJ<7lY~CORkVl4JP$e zz5dp1zFq>ws{3DD|2=|rIi7&^bQl>f!r|VMd(2NhH!VuW& z>kVTq_#52Sq23fKJ$g9%RHK2VmC?9%mqtm?G9XOlT_^H(Kje9Ajn34!{0?0lh2OIP z47ipN9h1U=gs3lQ!M1o>k1X5tvSi;>thnN9nb20T;ruRJXC$2`M=EW0sE>`qb;$#* znXvf+_X-NO%u*D;3Jpr=9U;#W+8ofxSz1@sA5fopRI1KwP1u#c%QhmwmiQ#Qkc;@Q zFAs~l^4wC*Q-8zEH|b2DUpuruTgL}3kksq zg^yP^6TB}BGGKT9aT3cIyGblT|ID|0d&PM zMW=eoed>n2GJ}z1{^3^nuA&yxIvn}EoP_I*r-Ey-Z=RP7Df>xqK{JI8>?Y5RUxBS0 zSQw9WLrlQ0*yl5edCxyscNuw&K;Fj2fL3_;#;{VlWu?3IG;ig+Y;r5KpREROG;D~H zJZ0^@3BKB}w~LPd@%z6WBj5k&6KQpPEuOywsve8mX6Q1>UL|zOy|SMb1Hpr9Mbvm? zBDZo~%0=~I)jnP_j#*{w-kjzKO1_bPR}qs-GZe0=jDI6|8D6QG<%U+$pF3&j@2AZz zuaTvaQIXshT{LX}2IQ4@ZarFyI=#bf7rt&beb3s+I^N6fi8_^1TnMicFTG8{j9-BA z^*k3fSsVSrO{de7A{!0ZV5sAMZonFuV!UnW1780`c)&sI0mZdH-dWre$TfD{-u$_& z{YH%sjvVjCN8*TTGQNZX4ZpJ40S%UnOdNHRg!;Sm!+DEs9dF$Z$1-jFV0(KG_)1R1 zmRaHk5^nfPIC01`{PfLVtGZDlZd;-*?|mCCl@#hjh9M6oR)~#2=g^221V2s#XGk*} zn&8*)Jaxbe#0aVnEmfFsaQrB7Urmt#gD1-!0JH4p@r@!rZ%seRPotA-zgiqdbg%J| z8fb`GDi`g?z+H2N?Yev!$PnCX^E$^3$XNZlGW35d~!l`qv7K~*@m(udk zdf~RHkL;BtgD1J`RoVu3?Q~MhM9sOg1y>HA6a^3nFm8j?Ig*RvUk>jrDbIiTguU%R zN4GJ>L*P3@=b->sZ9>=9uo0x!Ow30waeM2dj_x^{6tQn70QAA_U{L#C!A~|^yqr#M zvLFWQrJzU)z^zbW5BBb^r;v`2wrVIIyfdRkm0pmk=yV4?gcPkR;o+WH9kTCKccwCB z72BloiLC3N97GaD73ln&_2nt zQbL_r+WAih)hBV4nr=h{@Q=RpX|t}e!nPQ(!54$|mjF+mGjuS6eQ^hSo!bvM|625W zX7Oj_(E)_Ny^3!&KrvFozwbv#6k+u~zL@S2B_6eE?je7A-uV4#AOJ9~Wo!1Y-^SmZ`%MZsdjKGc9fmo*zrU+e97t#J*QSU8JpphrAQePitOR76 zFTr4zw~{Zg*i`W1yrIxw7S3n4b5!PYth^#v(+0ys#`UHi{hlQXKq1%)$f?sxs$c%{ z7U@79Y-!9u%NDqzLRBWoY;tbs0rbaPYI~h7?7BDG$GfORUZVsm1?%}H(d&pD1-#HL zi(j*)A{mpJMDK`T&4#yPeL>5>y$iiT&I5l+E?OM`dt_kg zMEo|7E9k{UoPc3{F#&Ku6?RbVaD9@X`~KmwHCayL&(0w5O;yWveV_VZBaJ>O!5U zL!tdgFvRt!7F4HP=KZrIqI_U$dTi#=3(>jC_%S}BB$S1PFAyWo7ti%CYh)HB0r%?l z+(&=EK^WaEYW1^JCXd0OjJsSl7pn(3&AL@G7IfFVx82VQRPGwBQvN4fFP8y= ztj9@2%&+x}lVU3-a5CWO&Yd%?Jb>C63JE<`P4=ScVLuf7%=1X2snAt2?fO5}lB*Gr zew>12@qT#_pxWV~2idQp3dtW@LRB8wZW93l6)j8AYuzg|Y?)8^wKhN1&5-a0qA!y= zt=@F)`)9H*9H6bZw-8$XzU{?TU;L^xz8qtS9ku3KcI(49Lw=P6?o$RGq_5&e=o(7}GhPgNn^IGU|Pjl6&2`m9= zztR3u%?L{ChFJ%3GUgXBeL=GhV~QB%<-HiTE3}Kcx=zqJAGo#OAvfZ?%Sg5W$46=Q)P$hA7W)j}mPpz8& zJdc`zXP6cN^r|K)SnBc&CI+$6l!zo0=T4b^Z~9;-rMo0~W#?NWyS7zPMXZs1NWmVR3&CeW9Lzxc zjVB8ZRw`c~PcEN#p$WnQ&&eP{GS!Z2noV zGf7qDKxBB%1b&<0)1?71q4_?w=qdW*f7laewo89b5-MVTmUVYG13Gp{dcJhh(q zY6xKwqY{OKffH+?N|Erlkl9^caV;7rH4aoJ+^T{;2%ZwFc;&Cyd?YVq@g0khD4{RT ztwIE%;b-g+7Y?om=Y{Y&wU?Dy#To>ACF3n#lb9@ln%<`aeDD{(0DB3KyuY`4iBAG) zoXsiF0(ywEQhDkGo2HdR#+U*6ZzgM@_LtZi=L`>ud|wd}C0uyzb-< z;tCuwn!MScuDq6Qi}DWQ)p!=NR?c;Vwgt*{EymrB9uuJL)A8NLrUA!uq{}$PV^c1k zqFe#iP+KD^S^$c$!32{>%skxKZ9OKmHMpyb^-u0`09cNhiV-B@I_|4_mx`e+71pDI zvs3DEg#KP`jAX)gUxv#@6N(R*3Lofq=Y(^PCWp}r0I~yiSoKtPdz&F^uVwL5U|0)EWlISU2rq5Ih7T^ zu`2!(MFEi`(OJn?&P6i<*vZB!+(RiRBBpX94r4dMekcTGzZ?yDQ+2R%ZMgij-}H?E zkyp8)_sRY_#K!n=J9NSmv^yp@=+5Ynn|OjqoZ^UoQA-NM&DY63Aq*gtr$RuO4(oj* zX#g!s>p?YS60B+)f#?rurf-WNOpu99=uL5yKS!0%-r*kdevoT5?k=G5&Y~Z`NT?|H zM`CQk1iOk6L435m`bEY+L2q3!W6}GA_wsyl{}w6Ev`jbgozqOGCIjUS?J;vJ5S^3IH7MznzpVQ1hI|8t z)v$d1MH{8{@!`k3t+Uqal{vzGbAXqh&`!ZtBhRvXM*E-}xM-H|6DM58h~g=ZQv)sgd0E-$D0v z#wd4+J#|h<-tJ)Fae~UKCu_BoS>^B|y-+~qMCeyck;UMvLfPd9VTH`FC$b5zLmln{ zH~ipjd&t*fUsnAtz$U5(fP8-$%#cPKOwO*5jkDTK-59L2GOQS0538)Lr^$5ox*;*6 z*|`deiqDw8W8>A2G&#C=id)UuQ|?`GA=kvO zx*u-Q!QzlMIwvc1yAu<oNLOiK}Ygc@kkw452dtAQ_ z&8t3~ZI2*_pT}0Sp3qinFp#)_6*0;m(=r}du0Q1E=RerBr)+l7U;L`tA2&hOv40WQ zJx>qA(|6ptUv%Bx-ri&>n138j6j%LY4*wePil>UNl!pw5OPZ__Rs_@LWMHCArfrQL zg{6*71$@c4gi3V7B8_Z@UPvIV{PK#Gq=?F_or%gRpF&}EMH_ID+r?K}a$IZRxd2>$ zBmtBFXM_EfTvF(mNL)&mx|fF`5wWQh4sOX*jWshoDZ7;^x<)w!j8w__M2oI^X&%p? zf5D1tbv*kbcT;Rx2>{hxR~LCvpft4kqlX@XH&MwyFqosIp8d6srChi^H_{%J6=WX@y+zbh>KVEATML3j0g+k4rGN~ANvb%GHZH`NLW`$ z_v!^@k4^(l61-3o@dF>Dk**caG_%TL1rU_aiH%M2#7>j7gy_SpgG)Dr(nIO8lil0$ z-o!erVIqGtGe9suL`BMi=%)3MLjcQ}5%YZe%e?(YZWWqd6wrPLUJ?DvWC{sqrrh#( zTSNQLJSKA)GA7@?>!GhluH`BjXd@1U;M_T5zIl2w@mS39QYuR+E>dZ{f(bloPxBd9 zqE4e16F0-bOK*GRrFGHPR+sJroaWhwXkIEiKijz5$pFFyuTR1fV&h!txf;o?CgV)1 z6e4ycj9i1#mss0h{ep03W1Nv#pF~u$?--7(c`}~ql5|rvlZ`dxsGZNJr{0P?IZvGB zxI(3rpGd1j3FAsOl!-J1SSKPGJQ3ee(2tn6*?3TEhhVoxj}9k%tJOpJjh48dvO%B* zVY2&0YxUyhjQCY`?)ye1Z0sxJTf9ktiEk0l9um78;8mfpvR^!3Ukps#Yh>N4(0M|N z-c7-07i_|ZLK0aL=!pzY%p3IPpiM<}jVGb*O)*69bOaSwN50Fg3ziJqwGLmvw7Z?* z44g`stfuwK;xdtI37K=5a!y0JAq>N+SvFMR((!A@pSWxk*y{R$robJN{GTlW*sVuS z8vQX`=ytonZ41IE^`@*cGXv@sC6>Lnw4F|>BuyLCIt~-oa}V93T7*`^M3)nnW#Otj zMcU;0KP;gqJ(d>`v7@56R8&@w5jdi^p4ypixb_WrDa<1Y`sn(oO)NC-1PvL#OB#o2 z<__g2u3#CKI){(DdeZ({Ba%j3^k?iqzX@xGeA--mRzL+Xk3^JtprQ+q9U@Vr4p>Je zCq57;s7$_J&CFVe_z?#OQ&0rQc^Il?s`d5;crNP;?0tK@WO^D(^+ohDe;Q1mAh1y> z3>3_Zt$#xsW`%ZsL#~Q*(fkSR_+ZxH+V=-g3$DIqqoHh>wAP>m3E$;SkwJt)?{n}@ z;waE;1R~s#$k#-qG;qfUZ3E^D75?%`-;ujvmEy{VAxSQ$oOezmAF8=JALcGPb*|HX zRS#NFZ$Z8z234EVKOMq*ab`S#@H2swFv`N-j0C6;a>=fPke-lsBFTQ2wE<@fk4l4y zW{bf3+)%+hvTNw8w`K{$9pxNS9kEw*GwQ(>M-~vk3ClNT%4H76s)7eilH9~x1(Bv- z>0Yq&xT-T&cv*fYbGV0&U905-Q`ev5Ma|UnWDc9^;}n(39LKJ_KVbgKZk5|PV@QKC z61h&$UA8+9(U^STHocd18b4iBT5bnP zma>0Vn`xpdSg^<&$Q3a~AytZuO1D`6x<@#QCbuoB@`4PTT8X^h@nqH*fz0%H(Q?-u z(9k+cLkI&&%$wq^GQchoU3-;~VCehyN3s1xv;ouu8VU#dTC8Sg->Gvk92I7&FYP>! z4aa@0jxliqkT&1zqt0P;pl2`9Ju4xh2+%=>1F_0blnuVH6Wufd!F)}>N%NSZ(kD<4 zbp!uG7VrKK1FQQ$_s@uW`rJNob4WE?T_NyVU)@3F4%cy%L*cqsPxo#wD%xH_pCJKk z9DYE>D|5wnbuMP0o1g>0LJ9uK@{yO7^8_g% zh-%Q$5EZ%#JHUgOXaZbDl^i!OGPz1I`P6pB;%UWJZa_)}mQwXqReTYI5s)p{6`H&| zGhV3#-~yn}ySv{vDn-+qK588&Z($|rD%m=Tvfj<}%mct3gV4Zp9zSdABgwSV(!eCQ z5uJ!s*f=AbGKhQhd@pr(oGDhiDg4g!e8$oMOAQ85Szn)!k?S+9d4-J-Uh8)Ws$lY| zwINS+m5P|vPx1U8Q`!fcTmAH6_2?vWFs1ziLTT|i9$$sH*`0S0=m2$oWif?uC@b%B z{D6kUv*Z-J&(HP*Lb0>d05eG%T|6XSR$@Y7WbdT_41)B2A4(@&tlN2AWZh(D`ixY2 zf@ZZ0=M7Cbiirv2iwLLnvuolXx$mVVGRF5NL8|yH8}WmyV^$*-Xkt*{y4{;*;TAW+ z^IffUbNcJ}qRT*Ud6urJIzw6}XDcf2e*0#4-jW1S{jCJ@o7C!TfFklpLkvY*awKc! zP#6TQDuA>~F4m$h7?6!@%|iw)D2#%n>>Y%%Rzs#3^ntyy+ZIB&(0UG%eqO zXtGV&|IRh7-_<142iVQYBcMSLB6O7AIy;~)6J)iWC-dg9irajvGOC>qU@*_xEPB9C z+t^QYN!Xz0ekIES=v}x#+Fbs&%cvjD)J36&4%Fl~SOI{xunk3F zX!S>L4q?_*Ntrm`yTn)tr&*GBA#^1457(uf#3=( z<(Rze-t>YI`P9%Y?p6XL9Hq#0#$sF4;)|5Hb_iN>Or9ir+ykmcTmYP{J^=29LQz6q z8>W?Y9dli3=k-%@3Fx(Iwpfm)v(&rRF>CH%@`OGSIIaiu!L)b~aB8Yt5m0D(p@by? zI<|>CpiA}LDbzLM?^TW0W7r@A;<99P+TF@RI^Jr0wvKSel_=h%w}7XJL?=&JBhMLp z0`;G7eiaB#c|{rR91SFmwV6VIKcPa3vjJK`@f0dDX)FOAkV#qVj7aqEDI+xz@_rm0 zH+pbz@a|XyOn$h{FFx;z3#x;Dix?pIVdd1%MGAbEh2}8yGw|>}5N4nUR*X|7;C{0u z=TW!Zb0FFCDK%pNDrJ$U-=EZ`sRBO}1^cxBmVD zF9)zGK!9V55VhVyVONqw#^hc+cV;fx5}kr*=U2Mw*?TSgoMSaRQC>>9Efs(a8`uFd zqjP6Y+X6t{zA3_}9vBefVCKzsBO<{a;5^#z4QYnz8sXayhtVO>Po_CxdJZ*JB{nyZ zVrX2)O}tJ34j~3uXAq4?G9R6f4+W~~{$`l245;=BdI;Y3wfFN`#1=RfxmoGCAzvJz z57hBLzXbxTx#bNoV(6rPbs%hr_2v!gD0cn*_lfxlBu)=!<{szi_Q$#5J+{=^=L+7= zK-EiSqq*F`PA|AZr%+L4Zb=5H(nnm}M@$@@SXeH+6)0#o05`0*=IAK`^kCL3nj9$y zr6a9wELDeTjJn_-;2z)<+qveFc~bY!6B+YZdKxALiv#3bk^2UascR^!R01rNkFoF4 z(6@81c>B0k&I>=Yx#W6r_rwG$GLCMe$YajW;=7r)4RJnC;K~84u+Mz^#)l2{-Gfi| z0gO>a?Ks(y7dKj>^*$=bM1-V~qh1u?V_Dw7Qn`fY%N2mPE-w&kf+RSGat+h6LUdDY zuYbOWSwB%y7#&}4=R)t$sJ^V!h5ZGU@9tQEPlhI3ogYBBl4Tm*pV+I+$HuPiQ%Uj0&YxAHpv zAfkb^`P2Vn?=8ckT;H{EMH(p)P}%}S1OYkL>jUxm9E|uW$CF?bK=R2cp&Fcw20H0RZ zNEUFi7^$37Q9L0??h3Kj2p=K#v2z=Y?dQ?ANkI;-~NqW}mbqQUc?ZLT6PoX@!2!B6feuf+y>lfWTc^Ux8% z@9S=|u-e!w73C4uFhqlid!t0Jk}KSM+#Tq*-uv)&kQVMhb7?)K!KrKzk>W@2r2r_7JFK-90&A7J$}u~&Hqs>WFKZty^A;zHKVD+_ z!cIOvM}U_K9Fd!<5c;oxE@dSFNW^*NHe9%446I?bp(G%2UcczBn(^XYw2gt$Mz4Ek z*^d6Gm(FR_#?MZSMmApl<{A#4RqCj#7Ry>~FQp#e?7E+|4}~MiQ$+^q+wb9#01syW z*&+SsvA`7pr!u$* zHaSo{d$xhZiu%+=jm!)K_bnAA&NUk+sp|qs4oAo&2Rw#JY{dHmK~lL68S>mN`ca4X0NL(tilp=wGK5 zGPTkV%^p(`~pm~SZL!-L8fc7WQCVY3 zP4(JnoXDM-Z$uE)|AQ-Nq#>r183rj-SgQVNj;Hwwg89HZBU)0_G{?Q0M-Dq-L}{(A z_~thN@WH1~G4-6K9%vR3=i$Vml=b3W-R8 zASL*Wej$$h z8xB6sHuqLIKPWF857DgIHbCQp-mPYu>iW`TcLcPnX9P^fh7iA*#%m?4vC0xN+(^HG z1OO(tfvPHbiT&j5wa;O=+R9nq+k|?phpUW@*o1)^hpJrU2adcZ8L{ z*UM`|?-z?5%WM8lLq`I^uBE{(-YPF1)<3}KIrpp6ZqTuh;)g4WpTe0CYB(vv2A277 z<6~_D5^Cy$mn92WeluA{%_;TQ=**CSfyInB~3Ax1GmN z*Zq%opeY(Y={zUhzL$u@SAmfgTj7m>uLsHyaD$HmN$e~j-mW#u6a{!S*D{s=$zxvt zxq?Zagg@$+$|)*P-?d`wW2%OWjrydnPu7($1K+aZpa4r<6yV=mfWnZhLcA|oAg&zD^7)y{ zkhf44(FYe~1@!N~b&_4`dwjmfW;tV&sUlB`^Qpo++S|MJ0XHkDJw}!G?iQA9GLUIJ3DCeXaUDoFsfCYxLAWF5y?ja!ZA_n+L9u1D;y=#M81%~2Z_UyEe z=>U&BYt_vcn`@iGS1UkD=XiO6vXmu-tUh~qi_Ke4)P^v6DFL$j4YLe{S}s@eWf-V+ zgjA`sw@M}pSXjf06yQKeVx1p7!Jaen zIhCg&2xVQo&v!Q zd=Y0Fy8oGVCf!<$v>l#`!0$7;q8TW2L@TY_3(MYllLAO)_^HoIz{*y~Y#LqiwfSTwWKNmw3N*M4}>XDv6!bw_{N_a19Yo2%u zu=A46D90Oa!Ot1|_NS5v+bIB2-X@CRgP+F@zraaT zk)UYBB9NdgIxatqXiGgpJDHMdQ@_4jsYF*1PXpPQ8M|Z($gGP)vB$D(4nZ-pMa>7J zE7UpDL>>{R-aI%72{;!3#(N}SFHZP5{Nu>WmreQbkU}c7=O|GgJJXggIOr$8 zw^mB;NhU+&s21!H;R=XkHh&=ga0IW$1FCo6ve6}m_mnz;e|6;dpP766(n0zR(s34|w>^?C|BrJdo7?>~ICXpK?I?4@@;QV(PJnrf( zL3xdX8XT^&Y%Yq$Z>D!&-eVK` zfv9X;0*XWdt)9D7!aaM*>!{stP^n8Z;CpWOYOOe7Oc-5DjmCMf8h6Zc2IGtJsrk)^ zzI2S7KDd#d0~eCx_AZ zOuOqYr)y7Q9hg54Wr@PmGDd1%L%h8<09&UzPaM7jP1JFWqhMnqr$>VD5&@1h+?Q4D z8vb)$HJ@}9lhYaR#GU=88fv}7n*AP}I$JzaARvX1R|S@$AmT-IC<$Y6sY7t3<2 zyO-owNmBf~1bNoGfIX$={sK+E8hcXo!#!!~QVz+P%ynmnS`6WPe8_Pq(%oA}J(4Oy z*Qpt3EH(D1y;$rMYckvPTw0M-X}Ac& zTL3eJN58g;i@W?dpJw*t9aaT+@{?#B`6rS8)HbnLWpvgw3?b^7<$TErWlC1E@Iww? zN(A6d<>~-Gf1z~$QVPai!g6G>=~@6^5iThvK7ZXV>k7+=<=!mBYbfZ_+Pgsh!_vF z4B9&>+Q>d+yQg$-XNL|jx2d$v0FXCr+_?--0-xC1Sm=iwhHp03NvMZA-VzPl07H}% z3P8?X22WgsIRHylmTAM|MVs5D4T=-+z?KjLkx#JEL)xqO;&j4|r_~K>!@{=1xo0NF z)t8#_=biLBOJ5SJerF0nxM2Dv8mtflSoo6>HPF}B+2ITbpN+23xtGDu8mf30o9Dks z3fKaa#8IU>kB&r*KQ|8;1qL{RlSA|Tz#F}q`z_mP(Exf7F!gdVOS4}kJXRjZeF;nh zkaLFR4h^6rH@mJb74j!&F|1LWKrSV@d|PhdhM3!@K&`3%wG$uc^TLJ^!x3P{m(MTL z541TNpQ@`Mze-QSGz~E_DbHCNV>Tz(q=%4c0|o*m$?B>)xio|U7S0Kh-2vEvi$kB< zl&(<%+$@1LpcgWULW<;h^%v`nX!9*LKIy+5t}A%XfY;Iy)DFZiBfmBOpp57~nG}+n zj;dWET>t}PH+SM9xJh4uxLh{EJEt~vHAa!1qdpa?a&2q_^0_H-uVjQ_Y7Ofqe}%#d zUm#LvV+UmR!@VQ^-*tIKknkZbk7?{qpyUfY#Ir&`2b1%mtlne;_yCfxEq`1@^Ag(H zx=j-w2LB!J8~{!lg*&&oTbjepVN6r9P5^Rhb#Icd5X56pkQ8GqVQS?$)81)+l zLri3eB206q%Asn8-n)J|e!D|tzYOf-vTd7H0MJ+A;^LCspDh3`-~+%1efT>m9tKrnZDt*Xk2}vX@)PLRfo2W z?blZZ8VC`M3BC8t8=bJSi=%CA{o7;(hRDQIYU}5e5Rz@4#gm;WIuyE6gi{$zbOQrg zW3&k6V1V;zYn=}SAn6chsHC+MFKZ`V9TS^?4mk~^sPs#XEh1xvJ4XYNTBon!wQ*+8 zj$Hq(f=K*U1+cPQ52tSbeXOYDJ_Qn{;<9jK{Nyu|asW4`Y3JojEt%*K1^3TICu*|{ z?%Fo9qk6txDh}X>q$qI8hrjoV{pZ*VkR_m%Kmv%tu&5V9%&eQSxEhe&JR$seqWMC? z>4Moe0&q?^gcdvor_bNl(lE4x0hE1s4peq0F=ZgFwsVXj0<7goJ5F z*zMaI?j;u)p0of}p5&z^Itg+O4L~S7a8uyR*3+@Q56Z*3cSJ zbz|0aUG>fu#Y2#5?q(M4+pMp{(BhehF?+Ot|8vU{;MrwWjy9L{IZ1E8mKolF|J}y? zqkN!*_Z#ztEPMhtWw>?n^EL0>#NR0mMG*0OpkeaYSv-zZjp}iu5CDF`XMU^u69%Y@ z(NF%Lx)^drk}BZP-2X88u3W7mS!Kv(_z1utyt^vgneFrEX93Ddm0$?zbc>j_{XnD} z;HE8S)5ldB=xXN{Qvx*YVyhzo_vzQ?pB{uR13G0`NB2$oMl|lUYpa3RlRuS?kA(df z#>^7_E&Zf#th#^40d8ECAx)cc>!Vy-d+?RpzQBhT(|p0e&w_lKvSI7dSLQKc zf_HT`3KdDF1TnIsE_jUZlIK=k$s_4|>p0$$Tx*c3I1%-BC4HIB4Ac&&xc0O2&-wWY zr)gMH_bUhZh_GXYShXqY{NK;y&I*|pQbc+0CekLc)$LGX4VFML`o|73t_P60>7`W2gf@pa{0>5Ie7L> zj?qW~CO&3>Ni>}UvwW-S@g=~hn3{*CU%_T5WQio(m)=>wN%fYy~ z#Irq^Q}T?unahFe#jtgzDZ~cP_-^1eU|)7z+w8?&_+4IvdVpiGj!4a%xqMH3AScqG zKi!aO^X)^VC`iIrz`9U#Ka-%?yFta+!~5QS4&YG`6}N)|E79c7-X^%pF552{Z~-_V zaRhiQ|EYW-$)*P!s9=z1stpi`dRsA|d9BknN63+Z)&%3GWE!DkS`<1eG9;tst(+gn zN-Q)7!h=!)RY3lZ7)mz(H=6RCH?ZIkKlZ%;o7NCN#3x zTKCjuHJ*uD8D}2XL_v%df-hf>4=9+DbjQ=-(nAiEGz5xbOvX{9Sr|x;?T?VBx4s;f zLk~r2{6_dI}W%KE`?+nBNt37e48*zHy9I!0Ira$xlf%nTL zM*-XnqTiet`Ek6cMuV+D1-eX+UFVKfzZ^{q^{+GiyM|+j` zeOAXvC`1r~{D%qx2yqae2=rmx-yLZFHFW;@*|23=2?>%uvA`G$8_J4NnKTrL8BsOWBf_#^)_rDHJwG#*IS=CAC#2+F2 zpBMi7{UtvGmrxU5@yGu@wYkT@#c)K^SN=<){;%T)-2_%Ohd9psf1g^jAuzR>bzboQ zV^tpltEx=R-TuE%EwBohS_8s#!sO(y&6B)d1dCM~NU!)}0pZTP!N{=GNW|g-@q;q`Ef7>B zinJO<_eJa8O-dZ8vG|-tpo+LbFWG?TpTPCM;%8{Oy1S!7#r^z8K97wey2B~m6};M6 zZ0zj5c(bqy-*Ym!xFLesbhOk>=b4ZV%f_yy;rVS5>83jMb;%lpfuO z%&dea`}g_r?6GH#0M=XV^zc{6Gl}T+^~~E)Gbv=>UfVNA@~P8+i!=JMkn9uwvkx1^ zl^aI79?_)&13m!PJjjjMZS%K!-z}%4Zz8MLMO=3z*M{rjwU|Zk`y8%cq;5x#jXFjX zZd`QD?|f*6j9wgD`sdW|^+SMrvnmKa{&D5?LsNo&GPlhHj;3?OJNHTFGtaQIlcoTx zi-K}It?(|q2kp{B--Ek?g0)>1UfD0jOn74W>HWEOI_Kx_A^5z9+U>t>HADyq;HvYg zq!z|EjIu5Oga!b0I9yV#glgD;NxmFwgh^TU)<4)u;z*?ah(=!6ZV2^UBlEw*DC7uN zlCHUIUMrc5cYK`k7GNWHE0-6?)Yq?4OKT(Uc%cGxdm;k%SncCFL*RJb=f)xT@cik_ z;2IK`#{P+!Y{ej7%%o|&RjThRQONpI`Do{;5jMb8x2d}K1XKU~EcEz?@lttt<1T{H zE=~7hTb0kfmpH95b>;4yYLIPC08iFDO-C3GMR8|)x3vKeC=DNN6>wo#vy?$LZ76@K z8jiFi1JX=(H!r&2LVnrsbS*D$^!o8dl?TU;Mpyt-X8`PeSyk>=y0Y!M8zk?W3N1MP zy3h5V)PijM-YZT;SSQ9XCsK&;;xDq6p4z(q%-WoM*w_f$w`xs6%S=5FKOYD!=ew5xg(0By4 zjQsRi(D4So>;?h=jDx$hvGzSJvg57Np>1ADm%_eKG{^uXR2k(lYmOMz=ji>(8gOnC zGjrT**?-*EczQ0Y`RLt5rR{j%Gdo*Dm{}izSjH-t0B}*w|i)B0^n1X&QW|sq(zfp?XnAoJaq?TKi_n%>nf z=3+-5B&F$((#SruD_lJLVrFwUURz{)u(R_6ui{rqa+R!>&&5mw99=r-^^HU@fvV^H zvUZ|!_$6y{CrxrY71@EWVCv%UQk zH=cKBEm~lVJxB>(S|w2wllJySFfestCK3Mf?$@!|GLM;L zCf6^k=UA^iwd!d>L;YWLhSdz21(Q~30XD3)SXJkXh2flJJG*Cgy1xsJDDR$bmCII7 z>@EKaW#TtVSb3H4eEpmIq*q9@^L|d)=62IL%yBA^Nj2PWbfwlcEa%l^{1OwwQMLSW z5`Nv;VuVDnE$wtu4ygJ)IQrpZ!$Y52o@2904YiP|S>*<^#PgW`?SM0C|BHoRiGq&j z?{=Qi5VNT@5@-dV?SvD(=WsrrW85rjq)%88vQwLNW0gDbVZat~h0gj|ScidhC{db| z_QO30m)Q|;ZNNq~%F_STKGE;6T~}~-c`Wogd)8Hcw-R}d2F!WvU5uE$Zjw)0lhD^C z4~dle90RM7OjUz^log?}P-QAAr2AcVU9HccPVuOQtB~CM2~Vl$WSEh}@N@yf{DC&> zjLVi&SJ3Eym~P=3Skh*vL{%I+HO()flvKGo`_bbeYWyXyKWIR2-%`2AW>KaEE8EYU zuY3wCc&|Oh7FQc#znp657T`Eh{dxd%*qP=FW>v-tY)!!OwHuJAXCcZK=z9J)D}`Ce zZX9-vEitf%GsJ_lzO(Us^qKp5BK>_sv4j$F#o3FU%&d)7lj_OhX9i@t;<&*jM%V6uBOMyj;|S5=YN$n!l1*XC*#FG*4R-V9`u+g_5SG%Tm0p|fQ#cXa+Bx% z;t719>ezerdDrx1wTh;(BLruNi zTTz;;w4NFA_a1ZU<)^PsSDCVMGYGxTXh6+aoA?fTHzd*r5D?GXzP(R3pw&Ko5XHL&mf6rwTZ=6OBc6(XHrzPpps5`NY8pw!i7f;`g6tO zDaxLzhVPpmzq%6S!cz)#T|+o4U&J2lEk$*v!Q6=|VAJm7cM?37UWeSj9w!q}(6fLs zX(Ve?w4wXDeCPXFP30+{3u{K-Y4|+X zcs0giua4C+{U*(?={%J9nzX*J#@yb7RJ=hl_VBamO&%{X zpbK<)%NVyzEy}HrWgn5RdPG%DlzEl<&z|en@VHM9J*Hala56_`ZgOIJ1BPxR>Ajw6 zPb{*ywkD3EM|fZX8x3u3;=2dsQl$qy=MBpDdN^u3tu3a9wb?~cS>^ALH{rjsjN-dR zR`u3pUiaqt+&EmEDH%J?iFdn?-&4@Mz6@GiVhoBV{YkWR{-xkyJ{BT;bfxZm{VLE= ze$`oPD`9gDNnh(!Tity}^aQSY~pEQUQAbDPy;cj}{fA_oWBN_1F{U6purw z)ML2|u@h*re}#^7+DpmJEgUCd|I>-F!)W9;Oy z>$jfO?tj}E$xClnID4v1?7!Jk7fq;8d494%PtNmm8(G#U_69H8n|c8K&1AP=7gwG@ zPEoR{NW1~lBAY{JkjSomzhOkI5&wPKe#7PcGN@ zwq+6t{+?Q3Qnr_;dY8sHv72bd%ieH_)3btv?Lppr=6p*FunBAxnPxn^p7yTYSastD zO}Z9M-8@G8rht(3pznUVOg=b|6CwhO5j*=moHOz1Q#AM?@KN({B@6S;GG>d??oGZn zgEIJVx4A8X2o&$uCIa0bd>y1B#7QoCV^(Y0u>>38IrlpG02Kn;D`|R{bKj45orREN z*%>KDi9bzbG;JnvTqZt=l|yq&NDyTK`Hat6xp}9PR<~ zhOkW9HDsrtSloRzJwTsy!*sV<1G=KWy*YzDI4&-xJuwxz|2xaH1SQ3$Ys%uYkT_>w zoTFQ8WYb^0A_6qs1IlJ1jA9Pmi8kp|zkn|uiXm$))Tvy;K%>N@7WRhQZ-8dh8r3El zpX@GX3bg+^SxFbA;&lO)W`a@0^d4u)gRPu1bv7~Le)lCBpvMSoH^u%Bp29HLy|L36MAmy9&XdX zh}WDQbQ#gBnlSVB&raCYpJxOT<6R*vWIbX9C5<1LS5Vgmb>2SPu1?wDvU^b~FBnn4 zoUf1VEorKhFrqhAjqni{?nsWAflN1_-FCb81Tk$&cUHmKRaZ;9v29{@d}^}chjC$s z(8p>k0IC!&asaW&U^XrwNE_Mo|9LIqx4EvnP8HCDz5ul%M;xmQbXQzP_e5=H;pHnY z+S(N_<9$x9NnZLP%S?B+&j_t)Eh&zStnjZ$+E$DpqM(T+&wi_*syuLA-X}#6eWVGWFA;@gEHZa%zF6N~NkNmL8@hoVRljOlAaWfG+l%F8&-~3Gvz8S;q!v zr?bMHy5hEra4}H5m2D81O}g&EExv=p^mL?<#<1ITOus1hr&-*|LyWxCo;7(6jmk42 z;@FdA7nc1c{=+`o{uBL&5;0;voB^Z>CvH87V&*54{$uFJ1^(bVCS5f{1-OA@(?;V? zDkN!Ae4TtkeuQdC<2ei>R;Bw}I>=ucrGwLSoXcLtD)Ytx`fgq}pHG9)}yKk0<@Fq6lg zKr)!)3OYhaJqELc!Usc0#H{ZtOaut1t&gc+m6b9{gZ-}ml-7HkyO{xs_a*d|Yz;7- zCVU8k+JisGr{ZMAyKu!uog6GEmJn5TVm%NaF!IX3{O=;GeOFyS<(u%Z5Zw05#!h3rdY3eL)k|tKN}%bRn#1hmZ7ZJ{emXDZJ@r>V zf&wH5n;r5r0kv3FE~O0uD_?`MteyAPXJxAxt$vn4Bypw7K+}<1$Rj1$x*!``lJ$Io z&#K;poHprNer2g1hc^E7QnsW7A7UDuD0JWA;Z*1ywQ21a>O#8WkHfWgcJ@VCJ%C

C!4^U-(G|N_ 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 literal 0 HcmV?d00001 diff --git a/06_CodeGeneration/images/bedrock-code-gen.png b/06_CodeGeneration/images/bedrock-code-gen.png new file mode 100644 index 0000000000000000000000000000000000000000..3457eac256c423d18eead46d67fff7a39ce8e04d GIT binary patch literal 56538 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 z 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 O{`4*w=@gu|d+ @@ -117,3 +118,13 @@ This repository contains notebook examples for the Bedrock Architecture Patterns ### Text to Image - [Image Generation with Stable Diffusion](./05_Image/Bedrock%20Stable%20Diffusion%20XL.ipynb): This notebook demonstrates image generation with using the Stable Diffusion model + +### Code Generation, SQL Generation, Code Translation and Explanation + +1. [Code Generation](./06_CodeGeneration/00_code_generatation_w_bedrock.ipynb)- Demonstrates how to generate Python code using Natural language. It shows examples of prompting to generate simple functions, classes, and full programs in Python for Data Analyst to perform sales analysis on a given Sales CSV dataset. + +2. [Database or SQL Query Generation](./06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb) - Focuses on generating SQL queries with Amazon Bedrock APIs. It includes examples of generating both simple and complex SQL statements for a given data set and database schema. + +3. [Code Explanation](./06_CodeGeneration/02_code_interpret_w_langchain.ipynb) - Uses Bedrock's foundation models to generate explanations for complex C++ code snippets. It shows how to carefully craft prompts to get the model to generate comments and documentation that explain the functionality and logic of complicated C++ code examples. Prompts can be easily updated for another programming languages. + +4. [Code Translation ](./06_CodeGeneration/03_code_translate_w_langchain.ipynb) - Guides you through translating C++ code to Java using Amazon Bedrock and LangChain APIs. It shows techniques for prompting the model to port C++ code over to Java, handling differences in syntax, language constructs, and conventions between the languages. From e32f453a16a35dbcaacafd203912aecb6bfff309 Mon Sep 17 00:00:00 2001 From: Munish Dabra <100611213+awsdabra@users.noreply.github.com> Date: Tue, 15 Aug 2023 04:07:10 +0000 Subject: [PATCH 2/9] Added Code Generation use-case module --- .../00_code_generatation_w_bedrock.ipynb | 4 +- .../01_sql_query_generate_w_bedrock.ipynb | 4 +- .../02_code_interpret_w_langchain.ipynb | 5 +- .../03_code_translate_w_langchain.ipynb | 126 ++---------------- 4 files changed, 16 insertions(+), 123 deletions(-) diff --git a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb index 7f8cd2b5..d6e45eed 100644 --- a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb +++ b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb @@ -113,8 +113,8 @@ "\n", "# ---- ⚠️ Un-comment and edit the below lines as needed for your AWS setup ⚠️ ----\n", "\n", - "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-east-1\" # E.g. \"us-east-1\"\n", - "os.environ[\"AWS_PROFILE\"] = \"fine-tuning-bedrock\"\n", + "# os.environ[\"AWS_DEFAULT_REGION\"] = \"\" # E.g. \"us-east-1\"\n", + "# os.environ[\"AWS_PROFILE\"] = \"\"\n", "# os.environ[\"BEDROCK_ASSUME_ROLE\"] = \"\" # E.g. \"arn:aws:...\"\n", "# os.environ[\"BEDROCK_ENDPOINT_URL\"] = \"\" # E.g. \"https://...\"\n", "\n", diff --git a/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb b/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb index e3961740..31135b55 100644 --- a/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb +++ b/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb @@ -97,8 +97,8 @@ "\n", "# ---- ⚠️ Un-comment and edit the below lines as needed for your AWS setup ⚠️ ----\n", "\n", - "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-east-1\" # E.g. \"us-east-1\"\n", - "os.environ[\"AWS_PROFILE\"] = \"fine-tuning-bedrock\"\n", + "# os.environ[\"AWS_DEFAULT_REGION\"] = \"\" # E.g. \"us-east-1\"\n", + "# os.environ[\"AWS_PROFILE\"] = \"\"\n", "# os.environ[\"BEDROCK_ASSUME_ROLE\"] = \"\" # E.g. \"arn:aws:...\"\n", "# os.environ[\"BEDROCK_ENDPOINT_URL\"] = \"\" # E.g. \"https://...\"\n", "\n", diff --git a/06_CodeGeneration/02_code_interpret_w_langchain.ipynb b/06_CodeGeneration/02_code_interpret_w_langchain.ipynb index 1e2d55e9..5421c908 100644 --- a/06_CodeGeneration/02_code_interpret_w_langchain.ipynb +++ b/06_CodeGeneration/02_code_interpret_w_langchain.ipynb @@ -101,12 +101,11 @@ "\n", "# ---- ⚠️ Un-comment and edit the below lines as needed for your AWS setup ⚠️ ----\n", "\n", - "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-east-1\" # E.g. \"us-east-1\"\n", - "os.environ[\"AWS_PROFILE\"] = \"fine-tuning-bedrock\"\n", + "# os.environ[\"AWS_DEFAULT_REGION\"] = \"\" # E.g. \"us-east-1\"\n", + "# os.environ[\"AWS_PROFILE\"] = \"\"\n", "# os.environ[\"BEDROCK_ASSUME_ROLE\"] = \"\" # E.g. \"arn:aws:...\"\n", "# os.environ[\"BEDROCK_ENDPOINT_URL\"] = \"\" # E.g. \"https://...\"\n", "\n", - "\n", "boto3_bedrock = bedrock.get_bedrock_client(\n", " assumed_role=os.environ.get(\"BEDROCK_ASSUME_ROLE\", None),\n", " endpoint_url=os.environ.get(\"BEDROCK_ENDPOINT_URL\", None),\n", diff --git a/06_CodeGeneration/03_code_translate_w_langchain.ipynb b/06_CodeGeneration/03_code_translate_w_langchain.ipynb index 8162b9e6..a6ab6437 100644 --- a/06_CodeGeneration/03_code_translate_w_langchain.ipynb +++ b/06_CodeGeneration/03_code_translate_w_langchain.ipynb @@ -40,13 +40,13 @@ "![](./images/bedrock-code-gen-langchain.png)\n", "\n", "#### Use case\n", - "To demonstrate the generation capability of models in Amazon Bedrock, let's take the use case of email generation.\n", + "To demonstrate how you can use Amazon Bedrock LLMs to port code from one programming language to another.\n", "\n", "#### Persona\n", - "You are Bob a Customer Service Manager at AnyCompany and some of your customers are not happy with the customer service and are providing negative feedbacks on the service provided by customer support engineers. Now, you would like to respond to those customers humbly aplogizing for the poor service and regain trust. You need the help of an LLM to generate a bulk of emails for you which are human friendly and personalized to the customer's sentiment from previous email correspondence.\n", + "Guides you through translating C++ code to Java using Amazon Bedrock and LangChain APIs. It shows techniques for prompting the model to port C++ code over to Java, handling differences in syntax, language constructs, and conventions between the languages.\n", "\n", "#### Implementation\n", - "To fulfill this use case, we will show you how to generate an email with a thank you note based on the customer's previous email. We will use the Amazon Titan Text Large model using the Amazon Bedrock LangChain integration. \n" + "To fulfill this use case, we will show you how to translate a given legacy C++ code to port to Java. We will use the Amazon Bedrock and LangChain integration. \n" ] }, { @@ -65,104 +65,12 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "id": "49e2c0a9-4838-4f2b-bb36-61c0cbcd62af", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Processing /Users/mundabra/dev/bedrock/amazon-bedrock-workshop/dependencies/awscli-1.29.21-py3-none-any.whl\n", - "Processing /Users/mundabra/dev/bedrock/amazon-bedrock-workshop/dependencies/boto3-1.28.21-py3-none-any.whl\n", - "Processing /Users/mundabra/dev/bedrock/amazon-bedrock-workshop/dependencies/botocore-1.31.21-py3-none-any.whl\n", - "Collecting docutils<0.17,>=0.10\n", - " Using cached docutils-0.16-py2.py3-none-any.whl (548 kB)\n", - "Collecting s3transfer<0.7.0,>=0.6.0\n", - " Using cached s3transfer-0.6.1-py3-none-any.whl (79 kB)\n", - "Collecting PyYAML<6.1,>=3.10\n", - " Using cached PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl (189 kB)\n", - "Collecting rsa<4.8,>=3.1.2\n", - " Using cached rsa-4.7.2-py3-none-any.whl (34 kB)\n", - "Collecting colorama<0.4.5,>=0.2.5\n", - " Using cached colorama-0.4.4-py2.py3-none-any.whl (16 kB)\n", - "Collecting urllib3<1.27,>=1.25.4\n", - " Using cached urllib3-1.26.16-py2.py3-none-any.whl (143 kB)\n", - "Collecting jmespath<2.0.0,>=0.7.1\n", - " Using cached jmespath-1.0.1-py3-none-any.whl (20 kB)\n", - "Collecting python-dateutil<3.0.0,>=2.1\n", - " Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n", - "Collecting six>=1.5\n", - " Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)\n", - "Collecting pyasn1>=0.1.3\n", - " Using cached pyasn1-0.5.0-py2.py3-none-any.whl (83 kB)\n", - "Installing collected packages: urllib3, six, PyYAML, pyasn1, jmespath, docutils, colorama, rsa, python-dateutil, botocore, s3transfer, boto3, awscli\n", - " Attempting uninstall: urllib3\n", - " Found existing installation: urllib3 1.26.16\n", - " Uninstalling urllib3-1.26.16:\n", - " Successfully uninstalled urllib3-1.26.16\n", - " Attempting uninstall: six\n", - " Found existing installation: six 1.16.0\n", - " Uninstalling six-1.16.0:\n", - " Successfully uninstalled six-1.16.0\n", - " Attempting uninstall: PyYAML\n", - " Found existing installation: PyYAML 6.0.1\n", - " Uninstalling PyYAML-6.0.1:\n", - " Successfully uninstalled PyYAML-6.0.1\n", - " Attempting uninstall: pyasn1\n", - " Found existing installation: pyasn1 0.5.0\n", - " Uninstalling pyasn1-0.5.0:\n", - " Successfully uninstalled pyasn1-0.5.0\n", - " Attempting uninstall: jmespath\n", - " Found existing installation: jmespath 1.0.1\n", - " Uninstalling jmespath-1.0.1:\n", - " Successfully uninstalled jmespath-1.0.1\n", - " Attempting uninstall: docutils\n", - " Found existing installation: docutils 0.16\n", - " Uninstalling docutils-0.16:\n", - " Successfully uninstalled docutils-0.16\n", - " Attempting uninstall: colorama\n", - " Found existing installation: colorama 0.4.4\n", - " Uninstalling colorama-0.4.4:\n", - " Successfully uninstalled colorama-0.4.4\n", - " Attempting uninstall: rsa\n", - " Found existing installation: rsa 4.7.2\n", - " Uninstalling rsa-4.7.2:\n", - " Successfully uninstalled rsa-4.7.2\n", - " Attempting uninstall: python-dateutil\n", - " Found existing installation: python-dateutil 2.8.2\n", - " Uninstalling python-dateutil-2.8.2:\n", - " Successfully uninstalled python-dateutil-2.8.2\n", - " Attempting uninstall: botocore\n", - " Found existing installation: botocore 1.31.21\n", - " Uninstalling botocore-1.31.21:\n", - " Successfully uninstalled botocore-1.31.21\n", - " Attempting uninstall: s3transfer\n", - " Found existing installation: s3transfer 0.6.1\n", - " Uninstalling s3transfer-0.6.1:\n", - " Successfully uninstalled s3transfer-0.6.1\n", - " Attempting uninstall: boto3\n", - " Found existing installation: boto3 1.28.21\n", - " Uninstalling boto3-1.28.21:\n", - " Successfully uninstalled boto3-1.28.21\n", - " Attempting uninstall: awscli\n", - " Found existing installation: awscli 1.29.21\n", - " Uninstalling awscli-1.29.21:\n", - " Successfully uninstalled awscli-1.29.21\n", - "Successfully installed PyYAML-6.0.1 awscli-1.29.21 boto3-1.28.21 botocore-1.31.21 colorama-0.4.4 docutils-0.16 jmespath-1.0.1 pyasn1-0.5.0 python-dateutil-2.8.2 rsa-4.7.2 s3transfer-0.6.1 six-1.16.0 urllib3-1.26.16\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.2.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3.10 -m pip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n", - "\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m A new release of pip available: \u001b[0m\u001b[31;49m22.2.2\u001b[0m\u001b[39;49m -> \u001b[0m\u001b[32;49m23.2.1\u001b[0m\n", - "\u001b[1m[\u001b[0m\u001b[34;49mnotice\u001b[0m\u001b[1;39;49m]\u001b[0m\u001b[39;49m To update, run: \u001b[0m\u001b[32;49mpython3.10 -m pip install --upgrade pip\u001b[0m\n", - "Note: you may need to restart the kernel to use updated packages.\n" - ] - } - ], + "outputs": [], "source": [ "# Make sure you ran `download-dependencies.sh` from the root of the repository first!\n", "%pip install --no-build-isolation --force-reinstall \\\n", @@ -175,24 +83,12 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "id": "558a9372-0789-414a-a1d7-2976056f2015", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Create new client\n", - " Using region: us-east-1\n", - " Using profile: fine-tuning-bedrock\n", - "boto3 Bedrock client successfully created!\n", - "bedrock(https://bedrock.us-east-1.amazonaws.com)\n" - ] - } - ], + "outputs": [], "source": [ "import json\n", "import os\n", @@ -207,8 +103,8 @@ "\n", "# ---- ⚠️ Un-comment and edit the below lines as needed for your AWS setup ⚠️ ----\n", "\n", - "os.environ[\"AWS_DEFAULT_REGION\"] = \"us-east-1\" # E.g. \"us-east-1\"\n", - "os.environ[\"AWS_PROFILE\"] = \"fine-tuning-bedrock\"\n", + "# os.environ[\"AWS_DEFAULT_REGION\"] = \"\" # E.g. \"us-east-1\"\n", + "# os.environ[\"AWS_PROFILE\"] = \"\"\n", "# os.environ[\"BEDROCK_ASSUME_ROLE\"] = \"\" # E.g. \"arn:aws:...\"\n", "# os.environ[\"BEDROCK_ENDPOINT_URL\"] = \"\" # E.g. \"https://...\"\n", "\n", @@ -275,9 +171,7 @@ "source": [ "## Create a LangChain custom prompt template\n", "\n", - "By creating a template for the prompt we can pass it different input variables to it on every run. This is useful when you have to generate content with different input variables that you may be fetching from a database.\n", - "\n", - "Previously we hardcoded the prompt, it might be the case that you have multiple customers sending similar negative feedback and you now want to use each of those customer's emails and respond to them with an apology but you also want to keep the response a bit personalized. In the following cell we are exploring how you can create a `PromptTemplate` to achieve this pattern." + "By creating a template for the prompt we can pass it different input variables to it on every run. This is useful when you have to generate content with different input variables that you may be fetching from a database." ] }, { From e99e9cb87b2d50fa4359de007ca186d819d4c023 Mon Sep 17 00:00:00 2001 From: Munish Dabra <100611213+awsdabra@users.noreply.github.com> Date: Tue, 15 Aug 2023 04:16:42 +0000 Subject: [PATCH 3/9] MInor changes to README file for code generation --- README.md | 2 +- imgs/11-overview.png | Bin 0 -> 57997 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 imgs/11-overview.png diff --git a/README.md b/README.md index 469970a6..8dc66207 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Labs include:

diff --git a/imgs/11-overview.png b/imgs/11-overview.png new file mode 100644 index 0000000000000000000000000000000000000000..d7bc9bad9d98e5cd78f50c2c9c3ed2d4dd43e5ae GIT binary patch literal 57997 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

1As>@j_yYHx}}?rpFxFCd7vps+w}04FK%x$7Um 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 Date: Mon, 14 Aug 2023 23:17:54 -0500 Subject: [PATCH 4/9] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 8dc66207..3fef10eb 100644 --- a/README.md +++ b/README.md @@ -121,10 +121,10 @@ This repository contains notebook examples for the Bedrock Architecture Patterns ### Code Generation, SQL Generation, Code Translation and Explanation -1. [Code Generation](./06_CodeGeneration/00_code_generatation_w_bedrock.ipynb)- Demonstrates how to generate Python code using Natural language. It shows examples of prompting to generate simple functions, classes, and full programs in Python for Data Analyst to perform sales analysis on a given Sales CSV dataset. +1. [Code Generation](./06_CodeGeneration/00_code_generatation_w_bedrock.ipynb): Demonstrates how to generate Python code using Natural language. It shows examples of prompting to generate simple functions, classes, and full programs in Python for Data Analyst to perform sales analysis on a given Sales CSV dataset. -2. [Database or SQL Query Generation](./06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb) - Focuses on generating SQL queries with Amazon Bedrock APIs. It includes examples of generating both simple and complex SQL statements for a given data set and database schema. +2. [Database or SQL Query Generation](./06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb) : Focuses on generating SQL queries with Amazon Bedrock APIs. It includes examples of generating both simple and complex SQL statements for a given data set and database schema. -3. [Code Explanation](./06_CodeGeneration/02_code_interpret_w_langchain.ipynb) - Uses Bedrock's foundation models to generate explanations for complex C++ code snippets. It shows how to carefully craft prompts to get the model to generate comments and documentation that explain the functionality and logic of complicated C++ code examples. Prompts can be easily updated for another programming languages. +3. [Code Explanation](./06_CodeGeneration/02_code_interpret_w_langchain.ipynb) : Uses Bedrock's foundation models to generate explanations for complex C++ code snippets. It shows how to carefully craft prompts to get the model to generate comments and documentation that explain the functionality and logic of complicated C++ code examples. Prompts can be easily updated for another programming languages. -4. [Code Translation ](./06_CodeGeneration/03_code_translate_w_langchain.ipynb) - Guides you through translating C++ code to Java using Amazon Bedrock and LangChain APIs. It shows techniques for prompting the model to port C++ code over to Java, handling differences in syntax, language constructs, and conventions between the languages. +4. [Code Translation ](./06_CodeGeneration/03_code_translate_w_langchain.ipynb) : Guides you through translating C++ code to Java using Amazon Bedrock and LangChain APIs. It shows techniques for prompting the model to port C++ code over to Java, handling differences in syntax, language constructs, and conventions between the languages. From ecf5965b11152fedb5872aa978c00df81a8eedcc Mon Sep 17 00:00:00 2001 From: Munish Dabra <100611213+awsdabra@users.noreply.github.com> Date: Wed, 16 Aug 2023 19:38:17 +0000 Subject: [PATCH 5/9] updated langchain image --- .../images/bedrock-code-gen-langchain.png | Bin 71989 -> 68776 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/06_CodeGeneration/images/bedrock-code-gen-langchain.png b/06_CodeGeneration/images/bedrock-code-gen-langchain.png index d829e6fd6efd3afc4c20d4e66db539f947e6be80..9aa17787fdef02883cb850158d1dc1de00876bf1 100644 GIT binary patch literal 68776 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

C!4^U-(G|N_ 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 From d06a95934ec246f8d12280f7e94bada6f8b0d0db Mon Sep 17 00:00:00 2001 From: Munish Dabra <100611213+awsdabra@users.noreply.github.com> Date: Thu, 17 Aug 2023 22:57:35 +0000 Subject: [PATCH 6/9] Minor cleanup --- 06_CodeGeneration/00_code_generatation_w_bedrock.ipynb | 1 - 1 file changed, 1 deletion(-) diff --git a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb index d6e45eed..96ccdbd3 100644 --- a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb +++ b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb @@ -368,7 +368,6 @@ "print('Total revenue:', total_revenue)\n", "print('Product with max revenue:', max_revenue_product)\n", "print('Date with max revenue:', max_revenue_date)\n", - "'\n", "# Plot 'Revenue by Month'\n", "plt.bar(revenue_by_month.keys(), revenue_by_month.values())\n", "plt.xlabel('Month')\n", From 5d8217369c2f813063be28ed980be4e230b0f33a Mon Sep 17 00:00:00 2001 From: Munish Dabra <100611213+awsdabra@users.noreply.github.com> Date: Thu, 31 Aug 2023 20:04:27 +0000 Subject: [PATCH 7/9] Updated --- .../00_code_generatation_w_bedrock.ipynb | 256 +++++++++++------- 06_CodeGeneration/sales.csv | 26 -- 2 files changed, 158 insertions(+), 124 deletions(-) delete mode 100644 06_CodeGeneration/sales.csv diff --git a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb index 96ccdbd3..38c3e545 100644 --- a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb +++ b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb @@ -93,12 +93,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "776fd083", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Create new client\n", + " Using region: us-east-1\n", + " Using profile: fine-tuning-bedrock\n", + "boto3 Bedrock client successfully created!\n", + "bedrock(https://bedrock.us-east-1.amazonaws.com)\n" + ] + } + ], "source": [ "import json\n", "import os\n", @@ -136,9 +148,81 @@ "Following on the use case explained above, let's prepare an input for the Amazon Bedrock service to generate python program for our use-case." ] }, + { + "cell_type": "markdown", + "id": "e7656be8", + "metadata": {}, + "source": [ + "#### Lab setup - create sample sales.csv data for this lab.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "89a0ad24", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sales.csv has been created!\n" + ] + } + ], + "source": [ + "# create sales.csv file\n", + "import csv\n", + "\n", + "data = [\n", + " [\"date\", \"product_id\", \"price\", \"units_sold\"],\n", + " [\"2023-01-01\", \"P001\", 50, 20],\n", + " [\"2023-01-02\", \"P002\", 60, 15],\n", + " [\"2023-01-03\", \"P001\", 50, 18],\n", + " [\"2023-01-04\", \"P003\", 70, 30],\n", + " [\"2023-01-05\", \"P001\", 50, 25],\n", + " [\"2023-01-06\", \"P002\", 60, 22],\n", + " [\"2023-01-07\", \"P003\", 70, 24],\n", + " [\"2023-01-08\", \"P001\", 50, 28],\n", + " [\"2023-01-09\", \"P002\", 60, 17],\n", + " [\"2023-01-10\", \"P003\", 70, 29],\n", + " [\"2023-02-11\", \"P001\", 50, 23],\n", + " [\"2023-02-12\", \"P002\", 60, 19],\n", + " [\"2023-02-13\", \"P001\", 50, 21],\n", + " [\"2023-02-14\", \"P003\", 70, 31],\n", + " [\"2023-03-15\", \"P001\", 50, 26],\n", + " [\"2023-03-16\", \"P002\", 60, 20],\n", + " [\"2023-03-17\", \"P003\", 70, 33],\n", + " [\"2023-04-18\", \"P001\", 50, 27],\n", + " [\"2023-04-19\", \"P002\", 60, 18],\n", + " [\"2023-04-20\", \"P003\", 70, 32],\n", + " [\"2023-04-21\", \"P001\", 50, 22],\n", + " [\"2023-04-22\", \"P002\", 60, 16],\n", + " [\"2023-04-23\", \"P003\", 70, 34],\n", + " [\"2023-05-24\", \"P001\", 50, 24],\n", + " [\"2023-05-25\", \"P002\", 60, 21]\n", + "]\n", + "\n", + "# Write data to sales.csv\n", + "with open('sales.csv', 'w', newline='') as csvfile:\n", + " writer = csv.writer(csvfile)\n", + " writer.writerows(data)\n", + "\n", + "print(\"sales.csv has been created!\")" + ] + }, + { + "cell_type": "markdown", + "id": "d68e8af6", + "metadata": {}, + "source": [ + "#### Analyzing sales with Amazon Bedrock generated Python program" + ] + }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 42, "id": "45ee2bae-6415-4dba-af98-a19028305c98", "metadata": { "tags": [] @@ -146,22 +230,23 @@ "outputs": [], "source": [ "# Create the prompt\n", - "# Analyzing sales with a Python Program\n", + "# Analyzing sales\n", "\n", "prompt_data = \"\"\"\n", - "Command: Human: You have a CSV, sales.csv, with columns:\n", + "Human: You have a CSV, sales.csv, with columns:\n", "- date (YYYY-MM-DD)\n", "- product_id\n", "- price\n", "- units_sold\n", "\n", - "Wrte a python program to load the data and determine \n", + "Create a python program to analyze the sales data from a CSV file. The program should be able to read the data, and determine below:\n", "\n", "- Total revenue for the year\n", "- The product with the highest revenue\n", "- The date with the highest revenue\n", "- Visualize monthly sales using a bar chart\n", "\n", + "Ensure the code is syntactically correct, bug-free, optimized, not span multiple lines unnessarily, and prefer to use standard libraries. Return only python code without any surrounding text, explanation or context.\n", "Assistant:\n", "\"\"\"" ] @@ -176,7 +261,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 43, "id": "8af670eb-ad02-40df-a19c-3ed835fac8d9", "metadata": { "tags": [] @@ -194,29 +279,6 @@ " }) " ] }, - { - "cell_type": "markdown", - "id": "c4ca6751", - "metadata": {}, - "source": [ - "The Amazon Bedrock API provides you with an API `invoke_model` which accepts the following:\n", - "- `modelId`: This is the model ARN for the various foundation models available under Amazon Bedrock\n", - "- `accept`: The type of input request\n", - "- `contentType`: The content type of the output\n", - "- `body`: A json string consisting of the prompt and the configurations\n", - "\n", - "Available text generation models under Amazon Bedrock have the following IDs:\n", - "- `amazon.titan-tg1-large`\n", - "- `amazon.titan-e1t-medium`\n", - "- `ai21.j2-grande-instruct`\n", - "- `ai21.j2-jumbo-instruct`\n", - "- `ai21.j2-mid`\n", - "- `ai21.j2-ultra`\n", - "- `anthropic.claude-instant-v1`\n", - "- `anthropic.claude-v1`\n", - "- `anthropic.claude-v2`" - ] - }, { "cell_type": "markdown", "id": "088cf6bf-dd73-4710-a0cc-6c11d220c431", @@ -225,19 +287,9 @@ "#### Invoke the Anthropic Claude v2 model" ] }, - { - "cell_type": "markdown", - "id": "379498f2", - "metadata": {}, - "source": [ - "First, we explore how the model generates an output based on the prompt created earlier.\n", - "\n", - "##### Complete Output Generation" - ] - }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 40, "id": "016a118a", "metadata": {}, "outputs": [ @@ -245,49 +297,51 @@ "name": "stdout", "output_type": "stream", "text": [ - " Here is a Python program to analyze the sales CSV file as described:\n", + " Here is the Python code to analyze sales data from a CSV file:\n", "\n", "```python\n", "import csv\n", "from collections import defaultdict\n", "import matplotlib.pyplot as plt\n", "\n", - "revenue_by_month = defaultdict(int)\n", - "\n", - "with open('sales.csv', 'r') as f:\n", - " reader = csv.DictReader(f)\n", - " total_revenue = 0\n", - " max_revenue_product = None\n", - " max_revenue = 0\n", - " max_revenue_date = None\n", + "revenue = 0\n", + "monthly_revenue = defaultdict(int)\n", + "product_revenue = defaultdict(int)\n", + "max_revenue = 0\n", + "max_revenue_date = ''\n", + "max_revenue_product = ''\n", "\n", + "with open('sales.csv') as f:\n", + " reader = csv.reader(f)\n", + " next(reader)\n", " for row in reader:\n", - " revenue = float(row['price']) * int(row['units_sold'])\n", - " total_revenue += revenue\n", + " date = row[0]\n", + " product = row[1]\n", + " price = float(row[2])\n", + " units = int(row[3])\n", "\n", - " date = row['date']\n", - " month = date.split('-')[1]\n", - " revenue_by_month[month] += revenue\n", + " revenue += price * units\n", + " product_revenue[product] += price * units\n", + " monthly_revenue[date[:7]] += price * units\n", "\n", " if revenue > max_revenue:\n", " max_revenue = revenue\n", - " max_revenue_product = row['product_id']\n", " max_revenue_date = date\n", + " max_revenue_product = product\n", "\n", - "print('Total revenue:', total_revenue)\n", - "print('Product with max revenue:', max_revenue_product)\n", - "print('Date with max revenue:', max_revenue_date)\n", + "months = list(monthly_revenue.keys())\n", + "values = list(monthly_revenue.values())\n", "\n", - "plt.bar(revenue_by_month.keys(), revenue_by_month.values())\n", + "plt.bar(months, values)\n", "plt.xlabel('Month')\n", "plt.ylabel('Revenue')\n", - "plt.title('Revenue by Month')\n", + "plt.title('Monthly Revenue')\n", "plt.show()\n", - "```\n", "\n", - "This loads the CSV data, calculates the total revenue, finds the product and date with max revenue,\n", - "and visualizes the revenue per month in a bar chart. The defaultdict is used to easily accumulate\n", - "values by month.\n" + "print('Total Revenue:', revenue)\n", + "print('Product with max revenue:', max_revenue_product)\n", + "print('Date with max revenue:', max_revenue_date)\n", + "```\n" ] } ], @@ -312,28 +366,28 @@ }, { "cell_type": "code", - "execution_count": 24, - "id": "395fad3b", + "execution_count": 41, + "id": "77d9b428", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total revenue: 35490.0\n", - "Product with max revenue: P003\n", - "Date with max revenue: 2023-04-23\n" - ] - }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA/30lEQVR4nO3df3zN9f//8fuZ2Y+wzbDNNCwKiyjeWAm97WvYu1opv0Zkkd5bPyg/9q786gdWy4+Spd6ZincovEV+LKq9Mb+GRCi9J8K2vGc7ITPb6/uHz16XTvPjZY1zNrfr5XIuF+f1fJznebyeabt7vV7ndWyGYRgCAADAJbk5uwEAAICKgNAEAABgAaEJAADAAkITAACABYQmAAAACwhNAAAAFhCaAAAALCA0AQAAWEBoAgAAsIDQBAAWde7cWc2bN3d2Gy5h0KBBql69urPbAK4pQhNwHUpJSZHNZjMf7u7uqlevngYNGqQjR444u73rXsl/l8cee+yC488//7xZc/z48avWx+nTpzV+/Hh99dVXV+09gIrE3dkNAHCeiRMnKjQ0VGfOnNGmTZuUkpKi9evXa/fu3fLy8nJ2e9c1Ly8vffrpp3r77bfl4eHhMPavf/1LXl5eOnPmzFXt4fTp05owYYKk80fZgOsdR5qA61j37t3Vv39/PfbYY3rvvff03HPP6ccff9SyZcuc3dp1r1u3brLb7Vq5cqXD9o0bNyozM1NRUVFO6gy4fhGaAJjuvvtuSdKPP/7osH3fvn166KGH5O/vLy8vL7Vp08YhWG3btk02m01z584tNefq1atls9m0fPlyc9uRI0c0ePBgBQYGytPTU7feeqvef/99h9d99dVXstlsWrhwoV555RXdeOON8vLyUpcuXXTgwAGH2oYNG2rQoEGl3rtz586ljpAUFBRo3Lhxaty4sTw9PRUSEqJRo0apoKDA0hpJUkZGhu688055e3srNDRUycnJ5tjJkydVrVo1Pf3006Ve9/PPP6tKlSqaNGnSZd+jXr166tixo+bPn++wfd68eWrRosVFr61atGiRWrduLW9vb9WuXVv9+/cvdcq15HqkI0eOKDo6WtWrV1edOnX03HPPqaioSJJ08OBB1alTR5I0YcIE83Tg+PHjHea61BxAZUNoAmA6ePCgJKlmzZrmtj179qh9+/bau3evxowZo6SkJFWrVk3R0dFasmSJJKlNmza66aabtHDhwlJzLliwQDVr1lRkZKQkKTs7W+3bt9cXX3yh+Ph4TZ8+XY0bN1ZsbKymTZtW6vWTJ0/WkiVL9NxzzykhIUGbNm1STExMmfavuLhY9913n15//XXde++9evPNNxUdHa2pU6eqd+/eluY4ceKEevToodatWysxMVE33nijnnjiCTP0Va9eXQ888IAWLFhQKjz861//kmEYlvvv16+fPvvsM508eVKSdO7cOS1atEj9+vW7YH1KSop69eplBrMhQ4Zo8eLF6tChg/Ly8hxqi4qKFBkZqVq1aun1119Xp06dlJSUpNmzZ0uS6tSpo1mzZkmSHnjgAX344Yf68MMP9eCDD1qeA6h0DADXnTlz5hiSjC+++ML45ZdfjMOHDxuffPKJUadOHcPT09M4fPiwWdulSxejRYsWxpkzZ8xtxcXFxp133mncfPPN5raEhASjatWqRm5urrmtoKDA8PPzMwYPHmxui42NNerWrWscP37coac+ffoYvr6+xunTpw3DMIwvv/zSkGQ0a9bMKCgoMOumT59uSDK+/fZbc1uDBg2MgQMHltrPTp06GZ06dTKff/jhh4abm5vxn//8x6EuOTnZkGRs2LDhkuvWqVMnQ5KRlJTksI+tWrUyAgICjLNnzxqGYRirV682JBkrV650eP1tt93m0M/FSDLi4uKM3Nxcw8PDw/jwww8NwzCMFStWGDabzTh48KAxbtw4Q5Lxyy+/GIZhGGfPnjUCAgKM5s2bG7/99ps51/Llyw1JxtixY81tAwcONCQZEydOdHjf22+/3WjdurX5/JdffjEkGePGjSvVo9U5gMqEI03AdSwiIkJ16tRRSEiIHnroIVWrVk3Lli3TjTfeKEnKzc3VunXr1KtXL/366686fvy4jh8/rv/973+KjIzUDz/8YJ766d27twoLC7V48WJz/jVr1igvL888imMYhj799FPde++9MgzDnO/48eOKjIxUfn6+tm/f7tDjo48+6nAhdMkpxP/+979XvL+LFi1Ss2bN1LRpU4f3/utf/ypJ+vLLLy87h7u7ux5//HHzuYeHhx5//HHl5OQoIyPDXNfg4GDNmzfPrNu9e7d27dql/v37W+63Zs2a6tatm/71r39JkubPn68777xTDRo0KFW7bds25eTk6O9//7vDRfxRUVFq2rSpVqxYUeo1w4YNc3h+9913X/G6lsccQEXBp+eA69jMmTN1yy23KD8/X++//77S0tLk6elpjh84cECGYejFF1/Uiy++eME5cnJyVK9ePbVs2VJNmzbVggULFBsbK+n8qbnatWuboeSXX35RXl6eZs+efdFTODk5OQ7P69ev7/C85NThiRMnrnh/f/jhB+3du9e8Vudy730hwcHBqlatmsO2W265RdL505vt27eXm5ubYmJiNGvWLJ0+fVo33HCD5s2bJy8vLz388MNX1HO/fv00YMAAHTp0SEuXLlViYuIF63766SdJUpMmTUqNNW3aVOvXr3fY5uXlVWodataseUXrWh5zABUJoQm4jrVt21Zt2rSRJEVHR6tDhw7q16+f9u/fr+rVq6u4uFiS9Nxzz5nXJP1R48aNzT/37t1br7zyio4fP64aNWpo2bJl6tu3r9zdz/+oKZmvf//+Gjhw4AXnu+222xyeV6lS5YJ1hmGYf7bZbBesKSoqcnh9cXGxWrRooTfeeOOC9SEhIRfcXhaPPPKIXnvtNS1dulR9+/bV/Pnz9be//U2+vr5XNM99990nT09PDRw4UAUFBerVq1e59Hexdb3WcwAVCaEJgCSZFw/fc889euuttzRmzBjddNNNkqSqVasqIiLisnP07t1bEyZM0KeffqrAwEDZ7Xb16dPHHK9Tp45q1KihoqIiS/NZVbNmzVIXOkvnj76U7IMkNWrUSN988426dOly0aB1OUePHtWpU6ccjjZ9//33ks5/iq9E8+bNdfvtt2vevHm68cYbdejQIb355ptX/H7e3t6Kjo7WRx99pO7du6t27doXrCs5Zbd//37zyF6J/fv3X/CU3uWUdY2AyoprmgCYOnfurLZt22ratGk6c+aMAgIC1LlzZ73zzjs6duxYqfpffvnF4XmzZs3UokULLViwQAsWLFDdunXVsWNHc7xKlSrq2bOnPv30U+3evfuy81nVqFEjbdq0SWfPnjW3LV++XIcPH3ao69Wrl44cOaJ333231By//fabTp06ddn3OnfunN555x3z+dmzZ/XOO++oTp06at26tUPtgAEDtGbNGk2bNk21atVS9+7dr3TXJJ0/0jdu3LiLniKVzn+CMSAgQMnJyQ63T1i5cqX27t1bpvs63XDDDZJ0wUAKXI840gTAwciRI/Xwww8rJSVFw4YN08yZM9WhQwe1aNFC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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABBq0lEQVR4nO3deVhV5f7//9cGZHBgoyYghco3O04Nlp6UHMoTHzE5lR0rB5xJsyBT+pjS4NCk4ZSa6alOWqZllllHyyKtOCZOKJlmZoVzQCcEHBJR7t8ffVg/t6AtCdt70/NxXeu63Pd673u9131O8nLttRcOY4wRAAAAzsvH3Q0AAAB4A0ITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwCv43A4lJSU9Jt1CxYskMPh0J49ey5+UwCqPUITAEtZyHA4HFq7dm25/cYYRUZGyuFw6O9///tF7WXdunWaMGGCCgoKLupxLsSgQYOs9XE4HAoICNBf/vIXjRs3TidOnHB3ewAuMkITgHICAwO1ePHicuOff/65Dhw4oICAgIvew7p16zRx4kSPCk2SFBAQoIULF2rhwoWaPn26mjRpoieffFIJCQnubg3ARUZoAlBO9+7dtXTpUp06dcplfPHixWrTpo3Cw8Pd1Jn7+fn5qV+/furXr58SExP10UcfqX379nrjjTeUm5vr7vYAXESEJgDl9OnTRz///LPS0tKssZMnT+rtt99W3759K3zPsWPH9NBDDykyMlIBAQFq1qyZpk6dKmOMS13Z/UjLly/XlVdeqYCAALVq1UqrVq2yaiZMmKDRo0dLkqKioqyPw86+N+l8c1Rk4MCBuuSSS1RSUlJuX9euXdWsWbPzvr8iDodDHTt2lDFGP/zwg8u+Dz/8UJ06dVKtWrVUp04dxcXFaceOHdb+qVOnyuFwaO/eveXmTUlJkb+/vw4fPmyNbdiwQd26dZPT6VTNmjV144036osvvnB534QJE+RwOPTdd99p0KBBCgkJkdPp1ODBg3X8+HGrbs+ePXI4HFqwYEGF5zRhwgSXsYMHD2rIkCEKCwuz1vuVV165kKUCvB6hCUA5TZo0UXR0tN544w1r7MMPP1RhYaF69+5drt4Yo9tuu00zZsxQt27dNH36dDVr1kyjR49WcnJyufq1a9fq/vvvV+/evZWamqoTJ06oZ8+e+vnnnyVJ//jHP9SnTx9J0owZM6yPwxo0aGB7jor0799fP//8sz766COX8ZycHK1Zs0b9+vW7sIX6P2Vhrm7dutbYwoULFRcXp9q1a+vZZ5/V448/rq+//lodO3a06u+++245HA699dZb5eZ866231LVrV2vONWvWqHPnzioqKtL48eP1zDPPqKCgQH/729+0cePGcu+/++67deTIEU2aNEl33323FixYoIkTJ1bq/HJzc9W+fXt98sknSkpK0syZM9W0aVMlJCToueeeq9ScgFcyAPB/5s+fbySZTZs2meeff97UqVPHHD9+3BhjzF133WW6dOlijDGmcePGJi4uznrf8uXLjSTz1FNPucx35513GofDYb777jtrTJLx9/d3Gfvyyy+NJDN79mxrbMqUKUaSyc7OLten3TnKzqdsjtOnT5vLLrvM9OrVy2W+6dOnG4fDYX744Yfzrs/AgQNNrVq1zE8//WR++ukn891335mpU6cah8NhrrzySlNaWmqMMebIkSMmJCTEDB061OX9OTk5xul0uoxHR0ebNm3auNRt3LjRSDKvvfaaMcaY0tJSc8UVV5jY2FjrGMYYc/z4cRMVFWX+53/+xxobP368kWSGDBniMucdd9xh6tevb73Ozs42ksz8+fPLnackM378eOt1QkKCadiwofnvf//rUte7d2/jdDqt/48A1R1XmgBU6O6779Yvv/yiFStW6MiRI1qxYsU5P5r74IMP5OvrqxEjRriMP/TQQzLG6MMPP3QZj4mJ0eWXX269vvrqqxUcHFzu463zqcwcPj4+io+P1/vvv68jR45Y44sWLdINN9ygqKio3zzusWPH1KBBAzVo0EBNmzbV//7v/6pDhw5677335HA4JElpaWkqKChQnz599N///tfafH191a5dO3366afWfL169VJmZqa+//57a2zJkiUKCAjQ7bffLknKysrS7t271bdvX/3888/WfMeOHdPNN9+s9PR0lZaWuvQ5fPhwl9edOnXSzz//rKKiot88xzMZY/TOO+/o1ltvlTHG5XxiY2NVWFioLVu2XNCcgLfyc3cDADxTgwYNFBMTo8WLF+v48eM6ffq07rzzzgpr9+7dq4iICNWpU8dlvEWLFtb+MzVq1KjcHHXr1nW5f+e3VHaOAQMG6Nlnn9W7776rAQMGaNeuXcrMzNS8efNsHTcwMFD//ve/JUkHDhxQamqq8vLyFBQUZNXs3r1bkvS3v/2twjmCg4OtP991111KTk7WkiVL9Mgjj8gYo6VLl+qWW26x6srmGzhw4Dn7KiwsdPl48Oz1Kdt3+PBhl+P/lp9++kkFBQV68cUX9eKLL1ZYk5eXZ3s+wJsRmgCcU9++fTV06FDl5OTolltuUUhISJXM6+vrW+G4Oeum8YsxR8uWLdWmTRu9/vrrGjBggF5//XX5+/vr7rvvtn3cmJgY63VsbKyaN2+ue++9V++//74kWVd9Fi5cWOE3Df38/v+/eiMiItSpUye99dZbeuSRR7R+/Xrt27dPzz77rFVTNt+UKVPUunXrCvuqXbt2uT4rUrY+ZVfFznb69GmX12XH7tev3zlD29VXX13hOFDdEJoAnNMdd9yhe++9V+vXr9eSJUvOWde4cWN98sknOnLkiMvVpm+++cbaf6HO9UO9KgwYMEDJycn68ccftXjxYsXFxblcpbkQDRs21KhRozRx4kStX79e7du3tz42DA0NdQlY59KrVy/df//92rVrl5YsWaKaNWvq1ltvtfaXzRccHGxrPjvKzvfs52CdfVWwQYMGqlOnjk6fPl1lxwa8Ffc0ATin2rVra+7cuZowYYLLD/Gzde/eXadPn9bzzz/vMj5jxgw5HA7dcsstF3zsWrVqSSr/Q70q9OnTRw6HQw8++KB++OGHSn9rrswDDzygmjVravLkyZJ+vfoUHBysZ555psLHG/z0008ur3v27ClfX1+98cYbWrp0qf7+979b5y9Jbdq00eWXX66pU6fq6NGjvzmfHcHBwbrkkkuUnp7uMv7CCy+4vPb19VXPnj31zjvvaPv27VVybMBbcaUJwHmd7z6aMrfeequ6dOmiRx99VHv27NE111yjjz/+WO+9955GjhzpcsO2XW3atJEkPfroo+rdu7dq1KihW2+91SVMVFaDBg3UrVs3LV26VCEhIYqLi/td89WvX1+DBw/WCy+8oJ07d6pFixaaO3eu+vfvr+uuu069e/dWgwYNtG/fPq1cuVIdOnRwCZihoaHq0qWLpk+friNHjqhXr14u8/v4+Ojll1/WLbfcolatWmnw4MG69NJLdfDgQX366acKDg627rO6EPfcc48mT56se+65R23btlV6erq+/fbbcnWTJ0/Wp59+qnbt2mno0KFq2bKl8vPztWXLFn3yySfKz8+/8EUDvBBXmgD8bj4+Pnr//fc1cuRIrVixQiNHjtTXX3+tKVOmaPr06ZWa869//auefPJJffnllxo0aJD69OlTpVc1BgwYIOnXbwlWxa+FSU5Olo+Pj3UvUt++fbV69WpdeumlmjJlih588EG9+eabat26tQYPHlzu/b169bI+3uzevXu5/TfddJMyMjLUtm1bPf/883rggQe0YMEChYeHa9SoUZXqedy4cUpISNDbb7+thx9+WKdPny73TUdJCgsL08aNGzV48GAtW7bMelZTfn6+y71XQHXnMBdy5yUAVBPvvfeeevToofT0dHXq1Mnd7QDwAoQmAH9Kf//737Vz50599913F/WmcwDVB/c0AfhTefPNN7Vt2zatXLlSM2fOJDABsI0rTQD+VBwOh2rXrq1evXpp3rx5Ls9MAoDz4W8LAH8q/DsRQGXx7TkAAAAbCE0AAAA28PFcFSktLdWhQ4dUp04dbiwFAMBLGGN05MgRRUREyMfn/NeSCE1V5NChQ4qMjHR3GwAAoBL279+vyy677Lw1hKYqUvZLSvfv36/g4GA3dwMAAOwoKipSZGSkyy8bPxdCUxUp+0guODiY0AQAgJexc2uNW28ET09P16233qqIiAg5HA4tX778nLXDhw+Xw+HQc8895zKen5+v+Ph4BQcHKyQkRAkJCeV+C/i2bdvUqVMnBQYGKjIyUqmpqeXmX7p0qZo3b67AwEBdddVV+uCDD6riFAEAQDXh1tB07NgxXXPNNZozZ8556959912tX79eERER5fbFx8drx44dSktL04oVK5Senq5hw4ZZ+4uKitS1a1c1btxYmZmZmjJliiZMmKAXX3zRqlm3bp369OmjhIQEbd26VT169FCPHj20ffv2qjtZAADg3YyHkGTefffdcuMHDhwwl156qdm+fbtp3LixmTFjhrXv66+/NpLMpk2brLEPP/zQOBwOc/DgQWOMMS+88IKpW7euKS4utmrGjBljmjVrZr2+++67TVxcnMtx27VrZ+69917b/RcWFhpJprCw0PZ7AACAe13Iz2+Pfk5TaWmp+vfvr9GjR6tVq1bl9mdkZCgkJERt27a1xmJiYuTj46MNGzZYNZ07d5a/v79VExsbq127dunw4cNWTUxMjMvcsbGxysjIOGdvxcXFKioqctkAAED1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s2ZN3XDDDdq1a5ckacGCBZo4caK+/PJLORwOORwOLViwwHr/f//7X91xxx2qWbOmrrjiCr3//vsX/+QBVDlCE4BqbciQIZo/f771+pVXXtHgwYNdah5++GG98847evXVV7VlyxY1bdpUsbGxys/Pd6l79NFHNW3aNG3evFl+fn4aMmSIJKlXr1566KGH1KpVK/3444/68ccf1atXL+t9EydO1N13361t27ape/fuio+PLzc3AM9HaAJQrfXr109r167V3r17tXfvXn3xxRfq16+ftf/YsWOaO3eupkyZoltuuUUtW7bUSy+9pKCgIP3rX/9ymevpp5/WjTfeqJYtW2rs2LFat26dTpw4oaCgINWuXVt+fn4KDw9XeHi4goKCrPcNGjRIffr0UdOmTfXMM8/o6NGj2rhx4x+2BgCqhp+7GwCAi6lBgwaKi4vTggULZIxRXFycLrnkEmv/999/r5KSEnXo0MEaq1Gjhq6//nrt3LnTZa6rr77a+nPDhg0lSXl5eb95f9SZ76tVq5aCg4OVl5f3u84LwB+P0ASg2hsyZIiSkpIkSXPmzKn0PDVq1LD+7HA4JEmlpaUX9L6y99p5HwDPwsdzAKq9bt266eTJkyopKVFsbKzLvssvv1z+/v764osvrLGSkhJt2rRJLVu2tH0Mf39/nT59usp6BuB5uNIEoNrz9fW1Pmrz9fV12VerVi3dd999Gj16tOrVq6dGjRopNTVVx48fV0JCgu1jNGnSRNnZ2crKytJll12mOnXqKCAgoErPA4B7EZoA/CkEBwefc9/kyZNVWlqq/v3768iRI2rbtq0++ugj1a1b1/b8PXv21LJly9SlSxcVFBRo/vz5VfrwTADu5zDGGHc3AQAA4Om4pwkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANvx/TQjX0+OsI4YAAAAASUVORK5CYII=", "text/plain": [ "

" ] }, "metadata": {}, "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total Revenue: 35490.0\n", + "Product with max revenue: P002\n", + "Date with max revenue: 2023-05-25\n" + ] } ], "source": [ @@ -342,38 +396,44 @@ "import csv\n", "from collections import defaultdict\n", "import matplotlib.pyplot as plt\n", - " \n", - "revenue_by_month = defaultdict(int)\n", "\n", - "with open('sales.csv', 'r') as f:\n", - " reader = csv.DictReader(f)\n", - " total_revenue = 0\n", - " max_revenue_product = None\n", - " max_revenue = 0\n", - " max_revenue_date = None\n", + "revenue = 0\n", + "monthly_revenue = defaultdict(int)\n", + "product_revenue = defaultdict(int)\n", + "max_revenue = 0\n", + "max_revenue_date = ''\n", + "max_revenue_product = ''\n", "\n", + "with open('sales.csv') as f:\n", + " reader = csv.reader(f)\n", + " next(reader)\n", " for row in reader:\n", - " revenue = float(row['price']) * int(row['units_sold'])\n", - " total_revenue += revenue\n", + " date = row[0]\n", + " product = row[1]\n", + " price = float(row[2])\n", + " units = int(row[3])\n", "\n", - " date = row['date']\n", - " month = date.split('-')[1]\n", - " revenue_by_month[month] += revenue\n", + " revenue += price * units\n", + " product_revenue[product] += price * units\n", + " monthly_revenue[date[:7]] += price * units\n", "\n", " if revenue > max_revenue:\n", " max_revenue = revenue\n", - " max_revenue_product = row['product_id']\n", " max_revenue_date = date\n", + " max_revenue_product = product\n", "\n", - "print('Total revenue:', total_revenue)\n", - "print('Product with max revenue:', max_revenue_product)\n", - "print('Date with max revenue:', max_revenue_date)\n", - "# Plot 'Revenue by Month'\n", - "plt.bar(revenue_by_month.keys(), revenue_by_month.values())\n", + "months = list(monthly_revenue.keys())\n", + "values = list(monthly_revenue.values())\n", + "\n", + "plt.bar(months, values)\n", "plt.xlabel('Month')\n", "plt.ylabel('Revenue')\n", - "plt.title('Revenue by Month')\n", - "plt.show()" + "plt.title('Monthly Revenue')\n", + "plt.show()\n", + "\n", + "print('Total Revenue:', revenue)\n", + "print('Product with max revenue:', max_revenue_product)\n", + "print('Date with max revenue:', max_revenue_date)" ] }, { diff --git a/06_CodeGeneration/sales.csv b/06_CodeGeneration/sales.csv deleted file mode 100644 index 6f89b0af..00000000 --- a/06_CodeGeneration/sales.csv +++ /dev/null @@ -1,26 +0,0 @@ -date,product_id,price,units_sold -2023-01-01,P001,50,20 -2023-01-02,P002,60,15 -2023-01-03,P001,50,18 -2023-01-04,P003,70,30 -2023-01-05,P001,50,25 -2023-01-06,P002,60,22 -2023-01-07,P003,70,24 -2023-01-08,P001,50,28 -2023-01-09,P002,60,17 -2023-01-10,P003,70,29 -2023-02-11,P001,50,23 -2023-02-12,P002,60,19 -2023-02-13,P001,50,21 -2023-02-14,P003,70,31 -2023-03-15,P001,50,26 -2023-03-16,P002,60,20 -2023-03-17,P003,70,33 -2023-04-18,P001,50,27 -2023-04-19,P002,60,18 -2023-04-20,P003,70,32 -2023-04-21,P001,50,22 -2023-04-22,P002,60,16 -2023-04-23,P003,70,34 -2023-05-24,P001,50,24 -2023-05-25,P002,60,21 \ No newline at end of file From c779bfc05980a5985e7936ade92eec7c32ccfbd9 Mon Sep 17 00:00:00 2001 From: awsdabra Date: Fri, 1 Sep 2023 16:10:43 -0500 Subject: [PATCH 8/9] minor updates and cleanup --- .../00_code_generatation_w_bedrock.ipynb | 10 +++---- .../01_sql_query_generate_w_bedrock.ipynb | 27 +----------------- .../02_code_interpret_w_langchain.ipynb | 11 ++++--- .../03_code_translate_w_langchain.ipynb | 17 ++++------- .../images/code-interpret-langchain.png | Bin 0 -> 147157 bytes .../images/code-translation-langchain.png | Bin 0 -> 147643 bytes .../images/sql-query-generation.png | Bin 0 -> 121581 bytes 7 files changed, 16 insertions(+), 49 deletions(-) create mode 100644 06_CodeGeneration/images/code-interpret-langchain.png create mode 100644 06_CodeGeneration/images/code-translation-langchain.png create mode 100644 06_CodeGeneration/images/sql-query-generation.png diff --git a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb index 38c3e545..f3de3465 100644 --- a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb +++ b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb @@ -47,7 +47,7 @@ "- Price (price at which each product was sold)\n", "\n", "#### Implementation\n", - "To fulfill this use case, in this notebook we will show how to generate code for a given prompt.We will use the Anthropic Claude v2 using the Amazon Bedrock API with Boto3 client. " + "To fulfill this use case, in this notebook we will show how to generate code for a given prompt. We will use the Anthropic Claude v2 using the Amazon Bedrock API with Boto3 client. " ] }, { @@ -87,7 +87,7 @@ "metadata": {}, "outputs": [], "source": [ - "# Optional - To execute the generated code in this notebook\n", + "# To execute the generated code in this notebook\n", "%pip install matplotlib" ] }, @@ -442,13 +442,11 @@ "metadata": {}, "source": [ "## Conclusion\n", - "You have now experimented with using `boto3` SDK which provides a vanilla exposure to Amazon Bedrock API. Using this API you generate a python program to analyze and visualize given sales data'\n", + "You have now experimented with using `boto3` SDK which provides a vanilla exposure to Amazon Bedrock API. Using this API you generate a python program to analyze and visualize given sales data.\n", "\n", "### Take aways\n", "- Adapt this notebook to experiment with different models available through Amazon Bedrock such as Amazon Titan and AI21 Labs Jurassic models.\n", - "- Change the prompts to your specific usecase and evaluate the output of different models.\n", - "- Play with the token length to understand the latency and responsiveness of the service.\n", - "- Apply different prompt engineering principles to get better outputs.\n", + "\n", "\n", "## Thank You" ] diff --git a/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb b/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb index 31135b55..ae1bebff 100644 --- a/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb +++ b/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb @@ -33,7 +33,7 @@ "#### Pattern\n", "We will simply provide the Amazon Bedrock API with an input consisting of a task, an instruction and an input for the model under the hood to generate an output without providing any additional example. The purpose here is to demonstrate how the powerful LLMs easily understand the task at hand and generate compelling outputs.\n", "\n", - "![](./images/bedrock-code-gen.png)\n", + "![](./images/sql-query-generation.png)\n", "\n", "#### Use case\n", "Let's take the use case to generate SQL queries to analyze sales data, focusing on trends, top products and average sales.\n", @@ -173,29 +173,6 @@ " }) " ] }, - { - "cell_type": "markdown", - "id": "c4ca6751", - "metadata": {}, - "source": [ - "The Amazon Bedrock API provides you with an API `invoke_model` which accepts the following:\n", - "- `modelId`: This is the model ARN for the various foundation models available under Amazon Bedrock\n", - "- `accept`: The type of input request\n", - "- `contentType`: The content type of the output\n", - "- `body`: A json string consisting of the prompt and the configurations\n", - "\n", - "Available text generation models under Amazon Bedrock have the following IDs:\n", - "- `amazon.titan-tg1-large`\n", - "- `amazon.titan-e1t-medium`\n", - "- `ai21.j2-grande-instruct`\n", - "- `ai21.j2-jumbo-instruct`\n", - "- `ai21.j2-mid`\n", - "- `ai21.j2-ultra`\n", - "- `anthropic.claude-instant-v1`\n", - "- `anthropic.claude-v1`\n", - "- `anthropic.claude-v2`" - ] - }, { "cell_type": "markdown", "id": "088cf6bf-dd73-4710-a0cc-6c11d220c431", @@ -417,8 +394,6 @@ "\n", "### Take aways\n", "- Adapt this notebook to experiment with different models available through Amazon Bedrock such as Anthropic Claude and AI21 Labs Jurassic models.\n", - "- Change the prompts to your specific usecase and evaluate the output of different models.\n", - "- Play with the token length to understand the latency and responsiveness of the service.\n", "- Apply different prompt engineering principles to get better outputs.\n", "\n", "## Thank You" diff --git a/06_CodeGeneration/02_code_interpret_w_langchain.ipynb b/06_CodeGeneration/02_code_interpret_w_langchain.ipynb index 5421c908..b4780973 100644 --- a/06_CodeGeneration/02_code_interpret_w_langchain.ipynb +++ b/06_CodeGeneration/02_code_interpret_w_langchain.ipynb @@ -7,8 +7,7 @@ "tags": [] }, "source": [ - "# Bedrock with LangChain using a Prompt that includes Context\n", - "\n", + "# Bedrock with LangChain - Explain/Interpret a code snippet or program \n", "> *This notebook should work well with the **`Data Science 3.0`** kernel in SageMaker Studio*" ] }, @@ -28,17 +27,17 @@ "**Note:** *This notebook can be run within or outside of AWS environment.*\n", "\n", "#### Context\n", - "In the previous example `01_sql_query_generation_w_bedrock.ipynb`, we explored how to use Bedrock API. LangChain framework to communicate with Amazon Bedrock API. In this notebook we will try to add a bit more complexity with the help of `PromptTemplates` to leverage the LangChain framework for the similar use case. `PrompTemplates` allow you to create generic shells which can be populated with information later and get model outputs based on different scenarios.\n", + "In the previous example `01_sql_query_generation_w_bedrock.ipynb`, we explored how to use Bedrock API. In this notebook we will try to add a bit more complexity with the help of `PromptTemplates` to leverage the LangChain framework. `PrompTemplates` allow you to create generic shells which can be populated with information later and get model outputs based on different scenarios.\n", "\n", - "As part of this notebook we will explore the use of Amazon Bedrock integration within LangChain framework and how it could be used to generate text with the help of `PromptTemplate`.\n", + "As part of this notebook we will explore the use of Amazon Bedrock integration within LangChain framework and how it could be used to generate or explain code with the help of `PromptTemplate`.\n", "\n", "#### Pattern\n", "We will simply provide the LangChain implementation of Amazon Bedrock API with an input consisting of a task, an instruction and an input for the model under the hood to generate an output without providing any additional example. The purpose here is to demonstrate how the powerful LLMs easily understand the task at hand and generate compelling outputs.\n", "\n", - "![](./images/bedrock-code-gen-langchain.png)\n", + "![](./images/code-interpret-langchain.png)\n", "\n", "#### Use case\n", - "To demonstrate the generation capability of models in Amazon Bedrock, let's take the use case of code explain.\n", + "To demonstrate the code generation capability of models in Amazon Bedrock, let's take the use case of code explain.\n", "\n", "#### Persona\n", "You are Joe, a Java software developer, has been tasked to support a legacy C++ application for Vehicle Fleet Management. You need help to explain or interpret certain complex C++ code snippets as you are performing analyis to identify the business logic and potential problems with the code.\n", diff --git a/06_CodeGeneration/03_code_translate_w_langchain.ipynb b/06_CodeGeneration/03_code_translate_w_langchain.ipynb index a6ab6437..4bc25c03 100644 --- a/06_CodeGeneration/03_code_translate_w_langchain.ipynb +++ b/06_CodeGeneration/03_code_translate_w_langchain.ipynb @@ -19,28 +19,23 @@ "source": [ "## Introduction\n", "\n", - "In this notebook we show you how to generate an email response to a customer who was not happy with the quality of customer service that they received from the customer support engineer. We will provide additional context to the model by providing the contents of the actual email that was received from the unhappy customer.\n", + "In this notebook, you will learn how to translate code from one programming language to another using LLMs on Amazon Bedrock. We will demonstrate the use of LLMs as well as how to utilize LangChain framework to integrate with Bedrock.\n", "\n", - "Because of additional context in the prompt, the text produced by the Amazon Titan Large language model in this notebook is of much better quality and relevance than the content produced earlier through zero-shot prompts.\n", - "\n", - "[LangChain](https://python.langchain.com/docs/get_started/introduction.html) is a framework for developing applications powered by language models. The key aspects of this framework allow us to augment the Large Language Models by chaining together various components to create advanced use cases.\n", - "\n", - "In this notebook we will use the Bedrock API provided by LangChain. The prompt used in this example creates a custom LangChain prompt template for adding context to the text generation request. \n", + "We will use Claude v2 model of Amazon Bedrock in this lab.\n", "\n", "**Note:** *This notebook can be run within or outside of AWS environment.*\n", "\n", "#### Context\n", - "In the previous example `02_code_interpret_w_langchain.ipynb`, we explored how to use LangChain framework to communicate with Amazon Bedrock API. In this notebook we will try to add a bit more complexity with the help of `PromptTemplates` to leverage the LangChain framework for the similar use case. `PrompTemplates` allow you to create generic shells which can be populated with information later and get model outputs based on different scenarios.\n", + "In the previous example `02_code_interpret_w_langchain.ipynb`, we explored how to use LangChain framework to communicate with Amazon Bedrock API. Similar to previous example of code interpret/explain, we will use LangChain and Amazon Bedrock APIs to translate code from one legacy programming language to another.\n", "\n", - "As part of this notebook we will explore the use of Amazon Bedrock integration within LangChain framework and how it could be used to generate text with the help of `PromptTemplate`.\n", "\n", "#### Pattern\n", "We will simply provide the LangChain implementation of Amazon Bedrock API with an input consisting of a task, an instruction and an input for the model under the hood to generate an output without providing any additional example. The purpose here is to demonstrate how the powerful LLMs easily understand the task at hand and generate compelling outputs.\n", "\n", - "![](./images/bedrock-code-gen-langchain.png)\n", + "![](./images/code-translation-langchain.png)\n", "\n", "#### Use case\n", - "To demonstrate how you can use Amazon Bedrock LLMs to port code from one programming language to another.\n", + "To demonstrate how you can use Amazon Bedrock LLMs to translate code from one programming language to another.\n", "\n", "#### Persona\n", "Guides you through translating C++ code to Java using Amazon Bedrock and LangChain APIs. It shows techniques for prompting the model to port C++ code over to Java, handling differences in syntax, language constructs, and conventions between the languages.\n", @@ -422,7 +417,7 @@ "source": [ "## Summary\n", "\n", - "To conclude we learnt that invoking the LLM without any context might not yield the desired results. By adding context and further using the the prompt template to constrain the output from the LLM we are able to successfully get our desired output" + "In this example, you have learned how to translate a legacy C++ program to Java with a simple text prompt using Amazon Bedrock and langchain." ] } ], diff --git a/06_CodeGeneration/images/code-interpret-langchain.png b/06_CodeGeneration/images/code-interpret-langchain.png new file mode 100644 index 0000000000000000000000000000000000000000..85b3c263cbf49a3ce3622e4361702355d3dcb845 GIT binary patch literal 147157 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

eorfS`Aw-G&7oz;3}*HyjgJ!uDO6@KnC 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

_||a6Ou8b)MSdz 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 Nf|-r!Lt~FC{{lU%*Z2Sc literal 0 HcmV?d00001 diff --git a/06_CodeGeneration/images/code-translation-langchain.png b/06_CodeGeneration/images/code-translation-langchain.png new file mode 100644 index 0000000000000000000000000000000000000000..6fd9358155ce9fe37bd78d4b17a310052627434f GIT binary patch literal 147643 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

" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total Revenue: 35490.0\n", - "Product with max revenue: P002\n", - "Date with max revenue: 2023-05-25\n" - ] - } - ], + "outputs": [], "source": [ "# Sample Generated Python Code ( Generated with Amazon Bedrock in previous step)\n", "\n", diff --git a/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb b/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb index ae1bebff..7edf9a99 100644 --- a/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb +++ b/06_CodeGeneration/01_sql_query_generate_w_bedrock.ipynb @@ -193,49 +193,12 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": null, "id": "ecaceef1-0f7f-4ae5-8007-ff7c25335251", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Here are the SQL queries to answer the questions:\n", - "\n", - "1. Identify the top 5 best selling products by total sales for the year 2023:\n", - "\n", - "```sql\n", - "SELECT product_id, SUM(price * units_sold) AS total_sales\n", - "FROM sales_data\n", - "WHERE date BETWEEN '2023-01-01' AND '2023-12-31'\n", - "GROUP BY product_id\n", - "ORDER BY total_sales DESC\n", - "LIMIT 5;\n", - "```\n", - "\n", - "2. Calculate the monthly average sales for the year 2023:\n", - "\n", - "```sql\n", - "SELECT\n", - " DATE_FORMAT(date, '%Y-%m') AS month,\n", - " AVG(price * units_sold) AS avg_monthly_sales\n", - "FROM sales_data\n", - "WHERE date BETWEEN '2023-01-01' AND '2023-12-31'\n", - "GROUP BY month\n", - "ORDER BY month;\n", - "```\n", - "\n", - "The first query groups the sales data by product_id, sums the total sales for each product, filters\n", - "for 2023 data only, orders by the total sales in descending order and limits to the top 5 results.\n", - "\n", - "The second query extracts the month from the date, calculates the average monthly sales by\n", - "aggregating on the month and ordering the results chronologically.\n" - ] - } - ], + "outputs": [], "source": [ "modelId = 'anthropic.claude-v2' # change this to use a different version from the model provider\n", "accept = 'application/json'\n", @@ -337,42 +300,10 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": null, "id": "5c45f4fc", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Here is a SQL query to fetch patients who were prescribed more than 5 medications on 2023-04-01:\n", - "\n", - "```sql\n", - "SELECT p.FirstName, p.LastName\n", - "FROM Patients p\n", - "JOIN Prescriptions pre ON p.PatientID = pre.PatientID\n", - "JOIN PrescriptionDetails pd ON pre.PrescriptionID = pd.PrescriptionID\n", - "WHERE pre.DateIssued = '2023-04-01'\n", - "GROUP BY p.PatientID\n", - "HAVING COUNT(DISTINCT pd.MedicationID) > 5;\n", - "```\n", - "\n", - "The key steps are:\n", - "\n", - "1. Join the Patients, Prescriptions and PrescriptionDetails tables to connect patients with their\n", - "prescriptions and medication details.\n", - "\n", - "2. Filter to only prescriptions issued on 2023-04-01.\n", - "\n", - "3. Group by PatientID and count the distinct MedicationIDs per patient.\n", - "\n", - "4. Use HAVING to only keep patients with more than 5 distinct medications.\n", - "\n", - "This will return all patients who had prescriptions for more than 5 different medications on the\n", - "given date.\n" - ] - } - ], + "outputs": [], "source": [ "modelId = 'anthropic.claude-v2' # change this to use a different version from the model provider\n", "accept = 'application/json'\n", diff --git a/06_CodeGeneration/02_code_interpret_w_langchain.ipynb b/06_CodeGeneration/02_code_interpret_w_langchain.ipynb index b4780973..202353e1 100644 --- a/06_CodeGeneration/02_code_interpret_w_langchain.ipynb +++ b/06_CodeGeneration/02_code_interpret_w_langchain.ipynb @@ -296,56 +296,12 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "id": "c1064c57-27a4-48c5-911b-e4f1dfeff122", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "Overall, the code follows good OOP design principles and uses inheritance appropriately. The Vehicle\n", - "base class contains common data members and methods, while Truck and Car derive from it and add\n", - "specific details.\n", - "\n", - "Some positives:\n", - "\n", - "- Uses protected inheritance correctly to allow derived classes access to base class members.\n", - "\n", - "- Uses virtual methods like displayDetails() to enable polymorphic behavior.\n", - "\n", - "- Uses smart pointers (unique_ptr) instead of raw pointers to manage memory and avoid leaks.\n", - "\n", - "- Uses override specifier to explicitly indicate overridden methods.\n", - "\n", - "- Uses a vector to store heterogeneous objects through a common base pointer.\n", - "\n", - "- Checks for maintenance due based on miles traveled.\n", - "\n", - "- No major red flags or bad practices noted.\n", - "\n", - "Some things that could be improved:\n", - "\n", - "- The base Vehicle class could use pure virtual methods instead of a mix of virtual and pure virtual\n", - "methods.\n", - "\n", - "- The Vehicle constructor initializes data members - should consider using member initializer list\n", - "instead.\n", - "\n", - "- Unique pointers could be used instead of raw pointers for automatic memory management.\n", - "\n", - "- The displayDetails() method could be renamed to something more specific like printDetails().\n", - "\n", - "- Comments could be added to explain parts of logic/flow.\n", - "\n", - "Overall the code is well written, follows OOP principles and does not have any major issues. Just a\n", - "few minor improvements/enhancements possible.\n" - ] - } - ], + "outputs": [], "source": [ "response = textgen_llm(prompt)\n", "\n", diff --git a/06_CodeGeneration/03_code_translate_w_langchain.ipynb b/06_CodeGeneration/03_code_translate_w_langchain.ipynb index 4bc25c03..c8300e08 100644 --- a/06_CodeGeneration/03_code_translate_w_langchain.ipynb +++ b/06_CodeGeneration/03_code_translate_w_langchain.ipynb @@ -295,113 +295,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "id": "c1064c57-27a4-48c5-911b-e4f1dfeff122", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "```java\n", - "import java.util.ArrayList;\n", - "\n", - "class Vehicle {\n", - " protected String registrationNumber;\n", - " protected int milesTraveled;\n", - " protected int lastMaintenanceMile;\n", - "\n", - " public Vehicle(String regNum) {\n", - " this.registrationNumber = regNum;\n", - " this.milesTraveled = 0;\n", - " this.lastMaintenanceMile = 0;\n", - " }\n", - "\n", - " public void addMiles(int miles) {\n", - " this.milesTraveled += miles;\n", - " }\n", - "\n", - " public void performMaintenance() {\n", - " this.lastMaintenanceMile = this.milesTraveled;\n", - " System.out.println(\"Maintenance performed for vehicle: \" + this.registrationNumber);\n", - " }\n", - "\n", - " public void checkMaintenanceDue() {\n", - " if ((this.milesTraveled - this.lastMaintenanceMile) > 10000) {\n", - " System.out.println(\"Vehicle: \" + this.registrationNumber + \" needs maintenance!\");\n", - " } else {\n", - " System.out.println(\"No maintenance required for vehicle: \" + this.registrationNumber);\n", - " }\n", - " }\n", - "\n", - " public void displayDetails() {\n", - " // Implemented in subclasses\n", - " }\n", - "}\n", - "\n", - "class Truck extends Vehicle {\n", - " private int capacityInTons;\n", - "\n", - " public Truck(String regNum, int capacity) {\n", - " super(regNum);\n", - " this.capacityInTons = capacity;\n", - " }\n", - "\n", - " @Override\n", - " public void displayDetails() {\n", - " System.out.println(\"Truck with Registration Number: \" + this.registrationNumber + \",\n", - "Capacity: \" + this.capacityInTons + \" tons.\");\n", - " }\n", - "}\n", - "\n", - "class Car extends Vehicle {\n", - " private String model;\n", - "\n", - " public Car(String regNum, String carModel) {\n", - " super(regNum);\n", - " this.model = carModel;\n", - " }\n", - "\n", - " @Override\n", - " public void displayDetails() {\n", - " System.out.println(\"Car with Registration Number: \" + this.registrationNumber + \", Model: \"\n", - "+ this.model + \".\");\n", - " }\n", - "}\n", - "\n", - "public class Main {\n", - " public static void main(String[] args) {\n", - " ArrayList fleet = new ArrayList<>();\n", - "\n", - " fleet.add(new Truck(\"XYZ1234\", 20));\n", - " fleet.add(new Car(\"ABC9876\", \"Sedan\"));\n", - "\n", - " for (Vehicle vehicle : fleet) {\n", - " vehicle.displayDetails();\n", - " vehicle.addMiles(10500);\n", - " vehicle.checkMaintenanceDue();\n", - " vehicle.performMaintenance();\n", - " vehicle.checkMaintenanceDue();\n", - " }\n", - " }\n", - "}\n", - "```\n", - "\n", - "Key points:\n", - "\n", - "- Used ArrayList instead of raw vectors\n", - "- Overrode methods using @Override annotation\n", - "- Used access modifiers properly (private, public)\n", - "- Followed naming conventions and formatting standards\n", - "- Implemented polymorphic behavior using abstract class and subclasses\n", - "\n", - "Let me know if you have any other questions!\n" - ] - } - ], + "outputs": [], "source": [ "response = textgen_llm(prompt)\n", "\n",

NKW-|(Cs$RIR9CWDVx)+_mX`iZ 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 VsrdrRb!_lwvTOIwYy;PG{{*x0{ZIe^ literal 0 HcmV?d00001 diff --git a/06_CodeGeneration/images/sql-query-generation.png b/06_CodeGeneration/images/sql-query-generation.png new file mode 100644 index 0000000000000000000000000000000000000000..207abb0b875ce62a696b5a673c33796e1cda74cf GIT binary patch literal 121581 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 Date: Fri, 1 Sep 2023 16:42:47 -0500 Subject: [PATCH 9/9] removed output from the notebooks --- .../00_code_generatation_w_bedrock.ipynb | 108 ++---------------- .../01_sql_query_generate_w_bedrock.ipynb | 77 +------------ .../02_code_interpret_w_langchain.ipynb | 48 +------- .../03_code_translate_w_langchain.ipynb | 105 +---------------- 4 files changed, 16 insertions(+), 322 deletions(-) diff --git a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb index f3de3465..2a0cf1e6 100644 --- a/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb +++ b/06_CodeGeneration/00_code_generatation_w_bedrock.ipynb @@ -93,24 +93,12 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "id": "776fd083", "metadata": { "tags": [] }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Create new client\n", - " Using region: us-east-1\n", - " Using profile: fine-tuning-bedrock\n", - "boto3 Bedrock client successfully created!\n", - "bedrock(https://bedrock.us-east-1.amazonaws.com)\n" - ] - } - ], + "outputs": [], "source": [ "import json\n", "import os\n", @@ -159,18 +147,10 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "id": "89a0ad24", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sales.csv has been created!\n" - ] - } - ], + "outputs": [], "source": [ "# create sales.csv file\n", "import csv\n", @@ -289,62 +269,10 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": null, "id": "016a118a", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - " Here is the Python code to analyze sales data from a CSV file:\n", - "\n", - "```python\n", - "import csv\n", - "from collections import defaultdict\n", - "import matplotlib.pyplot as plt\n", - "\n", - "revenue = 0\n", - "monthly_revenue = defaultdict(int)\n", - "product_revenue = defaultdict(int)\n", - "max_revenue = 0\n", - "max_revenue_date = ''\n", - "max_revenue_product = ''\n", - "\n", - "with open('sales.csv') as f:\n", - " reader = csv.reader(f)\n", - " next(reader)\n", - " for row in reader:\n", - " date = row[0]\n", - " product = row[1]\n", - " price = float(row[2])\n", - " units = int(row[3])\n", - "\n", - " revenue += price * units\n", - " product_revenue[product] += price * units\n", - " monthly_revenue[date[:7]] += price * units\n", - "\n", - " if revenue > max_revenue:\n", - " max_revenue = revenue\n", - " max_revenue_date = date\n", - " max_revenue_product = product\n", - "\n", - "months = list(monthly_revenue.keys())\n", - "values = list(monthly_revenue.values())\n", - "\n", - "plt.bar(months, values)\n", - "plt.xlabel('Month')\n", - "plt.ylabel('Revenue')\n", - "plt.title('Monthly Revenue')\n", - "plt.show()\n", - "\n", - "print('Total Revenue:', revenue)\n", - "print('Product with max revenue:', max_revenue_product)\n", - "print('Date with max revenue:', max_revenue_date)\n", - "```\n" - ] - } - ], + "outputs": [], "source": [ "modelId = 'anthropic.claude-v2' # change this to use a different version from the model provider\n", "accept = 'application/json'\n", @@ -366,30 +294,10 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": null, "id": "77d9b428", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABBq0lEQVR4nO3deVhV5f7//9cGZHBgoyYghco3O04Nlp6UHMoTHzE5lR0rB5xJsyBT+pjS4NCk4ZSa6alOWqZllllHyyKtOCZOKJlmZoVzQCcEHBJR7t8ffVg/t6AtCdt70/NxXeu63Pd673u9131O8nLttRcOY4wRAAAAzsvH3Q0AAAB4A0ITAACADYQmAAAAGwhNAAAANhCaAAAAbCA0AQAA2EBoAgAAsIHQBAAAYAOhCQAAwAZCEwCv43A4lJSU9Jt1CxYskMPh0J49ey5+UwCqPUITAEtZyHA4HFq7dm25/cYYRUZGyuFw6O9///tF7WXdunWaMGGCCgoKLupxLsSgQYOs9XE4HAoICNBf/vIXjRs3TidOnHB3ewAuMkITgHICAwO1ePHicuOff/65Dhw4oICAgIvew7p16zRx4kSPCk2SFBAQoIULF2rhwoWaPn26mjRpoieffFIJCQnubg3ARUZoAlBO9+7dtXTpUp06dcplfPHixWrTpo3Cw8Pd1Jn7+fn5qV+/furXr58SExP10UcfqX379nrjjTeUm5vr7vYAXESEJgDl9OnTRz///LPS0tKssZMnT+rtt99W3759K3zPsWPH9NBDDykyMlIBAQFq1qyZpk6dKmOMS13Z/UjLly/XlVdeqYCAALVq1UqrVq2yaiZMmKDRo0dLkqKioqyPw86+N+l8c1Rk4MCBuuSSS1RSUlJuX9euXdWsWbPzvr8iDodDHTt2lDFGP/zwg8u+Dz/8UJ06dVKtWrVUp04dxcXFaceOHdb+qVOnyuFwaO/eveXmTUlJkb+/vw4fPmyNbdiwQd26dZPT6VTNmjV144036osvvnB534QJE+RwOPTdd99p0KBBCgkJkdPp1ODBg3X8+HGrbs+ePXI4HFqwYEGF5zRhwgSXsYMHD2rIkCEKCwuz1vuVV165kKUCvB6hCUA5TZo0UXR0tN544w1r7MMPP1RhYaF69+5drt4Yo9tuu00zZsxQt27dNH36dDVr1kyjR49WcnJyufq1a9fq/vvvV+/evZWamqoTJ06oZ8+e+vnnnyVJ//jHP9SnTx9J0owZM6yPwxo0aGB7jor0799fP//8sz766COX8ZycHK1Zs0b9+vW7sIX6P2Vhrm7dutbYwoULFRcXp9q1a+vZZ5/V448/rq+//lodO3a06u+++245HA699dZb5eZ866231LVrV2vONWvWqHPnzioqKtL48eP1zDPPqKCgQH/729+0cePGcu+/++67deTIEU2aNEl33323FixYoIkTJ1bq/HJzc9W+fXt98sknSkpK0syZM9W0aVMlJCToueeeq9ScgFcyAPB/5s+fbySZTZs2meeff97UqVPHHD9+3BhjzF133WW6dOlijDGmcePGJi4uznrf8uXLjSTz1FNPucx35513GofDYb777jtrTJLx9/d3Gfvyyy+NJDN79mxrbMqUKUaSyc7OLten3TnKzqdsjtOnT5vLLrvM9OrVy2W+6dOnG4fDYX744Yfzrs/AgQNNrVq1zE8//WR++ukn891335mpU6cah8NhrrzySlNaWmqMMebIkSMmJCTEDB061OX9OTk5xul0uoxHR0ebNm3auNRt3LjRSDKvvfaaMcaY0tJSc8UVV5jY2FjrGMYYc/z4cRMVFWX+53/+xxobP368kWSGDBniMucdd9xh6tevb73Ozs42ksz8+fPLnackM378eOt1QkKCadiwofnvf//rUte7d2/jdDqt/48A1R1XmgBU6O6779Yvv/yiFStW6MiRI1qxYsU5P5r74IMP5OvrqxEjRriMP/TQQzLG6MMPP3QZj4mJ0eWXX269vvrqqxUcHFzu463zqcwcPj4+io+P1/vvv68jR45Y44sWLdINN9ygqKio3zzusWPH1KBBAzVo0EBNmzbV//7v/6pDhw5677335HA4JElpaWkqKChQnz599N///tfafH191a5dO3366afWfL169VJmZqa+//57a2zJkiUKCAjQ7bffLknKysrS7t271bdvX/3888/WfMeOHdPNN9+s9PR0lZaWuvQ5fPhwl9edOnXSzz//rKKiot88xzMZY/TOO+/o1ltvlTHG5XxiY2NVWFioLVu2XNCcgLfyc3cDADxTgwYNFBMTo8WLF+v48eM6ffq07rzzzgpr9+7dq4iICNWpU8dlvEWLFtb+MzVq1KjcHHXr1nW5f+e3VHaOAQMG6Nlnn9W7776rAQMGaNeuXcrMzNS8efNsHTcwMFD//ve/JUkHDhxQamqq8vLyFBQUZNXs3r1bkvS3v/2twjmCg4OtP991111KTk7WkiVL9Mgjj8gYo6VLl+qWW26x6srmGzhw4Dn7KiwsdPl48Oz1Kdt3+PBhl+P/lp9++kkFBQV68cUX9eKLL1ZYk5eXZ3s+wJsRmgCcU9++fTV06FDl5OTolltuUUhISJXM6+vrW+G4Oeum8YsxR8uWLdWmTRu9/vrrGjBggF5//XX5+/vr7rvvtn3cmJgY63VsbKyaN2+ue++9V++//74kWVd9Fi5cWOE3Df38/v+/eiMiItSpUye99dZbeuSRR7R+/Xrt27dPzz77rFVTNt+UKVPUunXrCvuqXbt2uT4rUrY+ZVfFznb69GmX12XH7tev3zlD29VXX13hOFDdEJoAnNMdd9yhe++9V+vXr9eSJUvOWde4cWN98sknOnLkiMvVpm+++cbaf6HO9UO9KgwYMEDJycn68ccftXjxYsXFxblcpbkQDRs21KhRozRx4kStX79e7du3tz42DA0NdQlY59KrVy/df//92rVrl5YsWaKaNWvq1ltvtfaXzRccHGxrPjvKzvfs52CdfVWwQYMGqlOnjk6fPl1lxwa8Ffc0ATin2rVra+7cuZowYYLLD/Gzde/eXadPn9bzzz/vMj5jxgw5HA7dcsstF3zsWrVqSSr/Q70q9OnTRw6HQw8++KB++OGHSn9rrswDDzygmjVravLkyZJ+vfoUHBysZ555psLHG/z0008ur3v27ClfX1+98cYbWrp0qf7+979b5y9Jbdq00eWXX66pU6fq6NGjvzmfHcHBwbrkkkuUnp7uMv7CCy+4vPb19VXPnj31zjvvaPv27VVybMBbcaUJwHmd7z6aMrfeequ6dOmiRx99VHv27NE111yjjz/+WO+9955GjhzpcsO2XW3atJEkPfroo+rdu7dq1KihW2+91SVMVFaDBg3UrVs3LV26VCEhIYqLi/td89WvX1+DBw/WCy+8oJ07d6pFixaaO3eu+vfvr+uuu069e/dWgwYNtG/fPq1cuVIdOnRwCZihoaHq0qWLpk+friNHjqhXr14u8/v4+Ojll1/WLbfcolatWmnw4MG69NJLdfDgQX366acKDg627rO6EPfcc48mT56se+65R23btlV6erq+/fbbcnWTJ0/Wp59+qnbt2mno0KFq2bKl8vPztWXLFn3yySfKz8+/8EUDvBBXmgD8bj4+Pnr//fc1cuRIrVixQiNHjtTXX3+tKVOmaPr06ZWa869//auefPJJffnllxo0aJD69OlTpVc1BgwYIOnXbwlWxa+FSU5Olo+Pj3UvUt++fbV69WpdeumlmjJlih588EG9+eabat26tQYPHlzu/b169bI+3uzevXu5/TfddJMyMjLUtm1bPf/883rggQe0YMEChYeHa9SoUZXqedy4cUpISNDbb7+thx9+WKdPny73TUdJCgsL08aNGzV48GAtW7bMelZTfn6+y71XQHXnMBdy5yUAVBPvvfeeevToofT0dHXq1Mnd7QDwAoQmAH9Kf//737Vz50599913F/WmcwDVB/c0AfhTefPNN7Vt2zatXLlSM2fOJDABsI0rTQD+VBwOh2rXrq1evXpp3rx5Ls9MAoDz4W8LAH8q/DsRQGXx7TkAAAAbCE0AAAA28PFcFSktLdWhQ4dUp04dbiwFAMBLGGN05MgRRUREyMfn/NeSCE1V5NChQ4qMjHR3GwAAoBL279+vyy677Lw1hKYqUvZLSvfv36/g4GA3dwMAAOwoKipSZGSkyy8bPxdCUxUp+0guODiY0AQAgJexc2uNW28ET09P16233qqIiAg5HA4tX778nLXDhw+Xw+HQc8895zKen5+v+Ph4BQcHKyQkRAkJCeV+C/i2bdvUqVMnBQYGKjIyUqmpqeXmX7p0qZo3b67AwEBdddVV+uCDD6riFAEAQDXh1tB07NgxXXPNNZozZ8556959912tX79eERER5fbFx8drx44dSktL04oVK5Senq5hw4ZZ+4uKitS1a1c1btxYmZmZmjJliiZMmKAXX3zRqlm3bp369OmjhIQEbd26VT169FCPHj20ffv2qjtZAADg3YyHkGTefffdcuMHDhwwl156qdm+fbtp3LixmTFjhrXv66+/NpLMpk2brLEPP/zQOBwOc/DgQWOMMS+88IKpW7euKS4utmrGjBljmjVrZr2+++67TVxcnMtx27VrZ+69917b/RcWFhpJprCw0PZ7AACAe13Iz2+Pfk5TaWmp+vfvr9GjR6tVq1bl9mdkZCgkJERt27a1xmJiYuTj46MNGzZYNZ07d5a/v79VExsbq127dunw4cNWTUxMjMvcsbGxysjIOGdvxcXFKioqctkAAED1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s2ZN3XDDDdq1a5ckacGCBZo4caK+/PJLORwOORwOLViwwHr/f//7X91xxx2qWbOmrrjiCr3//vsX/+QBVDlCE4BqbciQIZo/f771+pVXXtHgwYNdah5++GG98847evXVV7VlyxY1bdpUsbGxys/Pd6l79NFHNW3aNG3evFl+fn4aMmSIJKlXr1566KGH1KpVK/3444/68ccf1atXL+t9EydO1N13361t27ape/fuio+PLzc3AM9HaAJQrfXr109r167V3r17tXfvXn3xxRfq16+ftf/YsWOaO3eupkyZoltuuUUtW7bUSy+9pKCgIP3rX/9ymevpp5/WjTfeqJYtW2rs2LFat26dTpw4oaCgINWuXVt+fn4KDw9XeHi4goKCrPcNGjRIffr0UdOmTfXMM8/o6NGj2rhx4x+2BgCqhp+7GwCAi6lBgwaKi4vTggULZIxRXFycLrnkEmv/999/r5KSEnXo0MEaq1Gjhq6//nrt3LnTZa6rr77a+nPDhg0lSXl5eb95f9SZ76tVq5aCg4OVl5f3u84LwB+P0ASg2hsyZIiSkpIkSXPmzKn0PDVq1LD+7HA4JEmlpaUX9L6y99p5HwDPwsdzAKq9bt266eTJkyopKVFsbKzLvssvv1z+/v764osvrLGSkhJt2rRJLVu2tH0Mf39/nT59usp6BuB5uNIEoNrz9fW1Pmrz9fV12VerVi3dd999Gj16tOrVq6dGjRopNTVVx48fV0JCgu1jNGnSRNnZ2crKytJll12mOnXqKCAgoErPA4B7EZoA/CkEBwefc9/kyZNVWlqq/v3768iRI2rbtq0++ugj1a1b1/b8PXv21LJly9SlSxcVFBRo/vz5VfrwTADu5zDGGHc3AQAA4Om4pwkAAMAGQhMAAIANhCYAAAAbCE0AAAA2EJoAAABsIDQBAADYQGgCAACwgdAEAABgA6EJAADABkITAACADYQmAAAAGwhNAAAANvx/TQjX0+OsI4YAAAAASUVORK5CYII=", - "text/plain": [ - "