From c2b539c9daa1048c999d9ea5d86a12e678ada58c Mon Sep 17 00:00:00 2001 From: Nazar Volosetskyy Date: Tue, 19 Sep 2023 11:28:47 -0400 Subject: [PATCH 01/10] customizations --- builds/README.md | 21 +++++ builds/clean/jupyter_ai_clean.ipynb | 66 ++++++++++++++ .../jupyter_ai_magics-2.2.12-py3-none-any.whl | Bin 0 -> 22352 bytes builds/enhanced/jupyter_ai.ipynb | 85 ++++++++++++++++++ .../jupyter_ai_magics-2.2.10-py3-none-any.whl | Bin 0 -> 21636 bytes .../jupyter_ai_magics/providers.py | 29 +++++- packages/jupyter-ai-magics/package.json | 2 +- 7 files changed, 201 insertions(+), 2 deletions(-) create mode 100644 builds/README.md create mode 100644 builds/clean/jupyter_ai_clean.ipynb create mode 100644 builds/clean/jupyter_ai_magics-2.2.12-py3-none-any.whl create mode 100644 builds/enhanced/jupyter_ai.ipynb create mode 100644 builds/enhanced/jupyter_ai_magics-2.2.10-py3-none-any.whl diff --git a/builds/README.md b/builds/README.md new file mode 100644 index 000000000..25ac84fea --- /dev/null +++ b/builds/README.md @@ -0,0 +1,21 @@ +# Builds + +## How to use +There are two different packages, clean and enhanced. + +1. *clean* - let user input a question to the model +2. *enhanced* - let user twick context and ask question + +### Manual deployment + +1. Open jupyter.syapse.com +2. drug folder *clean* or *enhanced* to the jupyter env. +3. In the jupyter open your folder +4. Open notebook file and run each cell. + + +### Create new deployemnt + +1. Make changes in the `packages/jupyter-ai-magics/jupyter-ai-magics` +2. make you r code changes to the providesr.py or any other files there +3. Run `python -m build` to create a build diff --git a/builds/clean/jupyter_ai_clean.ipynb b/builds/clean/jupyter_ai_clean.ipynb new file mode 100644 index 000000000..89f08e016 --- /dev/null +++ b/builds/clean/jupyter_ai_clean.ipynb @@ -0,0 +1,66 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "5122a2de-489e-4a7c-854a-70a2f3227d3b", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install jupyter_ai[all]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "f0d07642-97ea-4c86-895b-437bf9f65389", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install ./jupyter_ai_magics-2.2.12-py3-none-any.whl --no-cache-dir" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "dd77a9de-45e7-44a5-8920-675b53bddf62", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext jupyter_ai" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d93f13c1-25d9-4f47-b20e-a6fa8accd501", + "metadata": {}, + "outputs": [], + "source": [ + "%%ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-19-14-08-22-466 --region-name=us-west-2 --request-schema={\"inputs\":\"\"} --response-path=[0].generation -f code\n", + "find me patients who are female" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/builds/clean/jupyter_ai_magics-2.2.12-py3-none-any.whl b/builds/clean/jupyter_ai_magics-2.2.12-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..e6673a045f75e74720125bcb740d1082ecb258c2 GIT binary patch literal 22352 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 literal 0 HcmV?d00001 diff --git a/builds/enhanced/jupyter_ai.ipynb b/builds/enhanced/jupyter_ai.ipynb new file mode 100644 index 000000000..38388400a --- /dev/null +++ b/builds/enhanced/jupyter_ai.ipynb @@ -0,0 +1,85 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "eac509e2-9523-4866-99dd-13f3fea9f066", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install jupyter_ai[all]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bb8dd810-7200-473a-b7ba-e608016f451e", + "metadata": {}, + "outputs": [], + "source": [ + "!pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "dd6581da-b908-4b6e-8d8b-deb8a8b6a54b", + "metadata": {}, + "outputs": [], + "source": [ + "%load_ext jupyter_ai" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "795c855c-54f6-466b-9bbb-04eed92711ae", + "metadata": {}, + "outputs": [], + "source": [ + "%%ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-19-14-08-22-466 --region-name=us-west-2 --request-schema={\"inputs\":\"\"} --response-path=[0].generation -f code\n", + "Below is an instruction that describes a task, paired with an input that provides further context.\n", + "Write a response that appropriately completes the request.\n", + "### Instruction:\n", + " find me patients who are female\n", + "### Input:\n", + " This is data about patients with breast cancer.\n", + " breast_ads is a pandas dataframe with a list of columns ['birth_date', 'deceased_date', 'sex', 'race', 'ethnicity', 'vital_status','diagnosis_date', 'er_status_diagnosis', 'pr_status_diagnosis','her2_status_diagnosis', 'brca_reported_status']\n", + " \n", + " Below is the description of each column\n", + " birth_date column Patient's year of birth.\n", + " deceased_date column is the date of death of a patient if the patient is dead. It is empty if the patient is alive\n", + " sex column is Patient's sex as recorded in EMR at diagnosis. \n", + " race column is Primary race as recorded in patient EMR at diagnosis. \n", + " ethnicity column is Ethnicity as recorded in patient EMR at diagnosis. \n", + " vital_status column is Patient's vital status based on the composite mortality score. If no evidence of death, patient will be classified as Alive. \n", + " diagnosis_date column is Date (year, month, day) of initial breast cancer diagnosis.\n", + " er_status_diagnosis column is the Results from test closest to the date of initial diagnosis and up to 14 days after. Categorized as Negative, Low positive, Positive, Equivocal, Unknown. \n", + " pr_status_diagnosis column is the Results from test closest to the date of initial diagnosis and up to 14 days after. \n", + " her2_status_diagnosis column Results from test at the time of initial diagnosis and up to 45 days after. \n", + " brca_reported_status column is Germline or somatic BRCA1/2 mutation (ever). Categories are positive, negative and unknown" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/builds/enhanced/jupyter_ai_magics-2.2.10-py3-none-any.whl b/builds/enhanced/jupyter_ai_magics-2.2.10-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..aba655f2a74e4841c5e4b41c28d5c6eeba76e4e6 GIT binary patch literal 21636 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 literal 0 HcmV?d00001 diff --git a/packages/jupyter-ai-magics/jupyter_ai_magics/providers.py b/packages/jupyter-ai-magics/jupyter_ai_magics/providers.py index 149cf9fd8..3077ff5bb 100644 --- a/packages/jupyter-ai-magics/jupyter_ai_magics/providers.py +++ b/packages/jupyter-ai-magics/jupyter_ai_magics/providers.py @@ -505,6 +505,28 @@ class AzureChatOpenAIProvider(BaseProvider, AzureChatOpenAI): class JsonContentHandler(LLMContentHandler): content_type = "application/json" accepts = "application/json" + context = """This is data about patients with breast cancer. +breast_ads is a pandas dataframe with a list of columns ['birth_date', 'deceased_date', 'sex', 'race', 'ethnicity', 'vital_status','diagnosis_date', 'er_status_diagnosis', 'pr_status_diagnosis','her2_status_diagnosis', 'brca_reported_status'] + +Below is the description of each column +birth_date column Patient's year of birth. +deceased_date column is the date of death of a patient if the patient is dead. It is empty if the patient is alive +sex column is Patient's sex as recorded in EMR at diagnosis. +race column is Primary race as recorded in patient EMR at diagnosis. +ethnicity column is Ethnicity as recorded in patient EMR at diagnosis. +vital_status column is Patient's vital status based on the composite mortality score. If no evidence of death, patient will be classified as Alive. +diagnosis_date column is Date (year, month, day) of initial breast cancer diagnosis. +er_status_diagnosis column is the Results from test closest to the date of initial diagnosis and up to 14 days after. Categorized as Negative, Low positive, Positive, Equivocal, Unknown. +pr_status_diagnosis column is the Results from test closest to the date of initial diagnosis and up to 14 days after. +her2_status_diagnosis column Results from test at the time of initial diagnosis and up to 45 days after. +brca_reported_status column is Germline or somatic BRCA1/2 mutation (ever). Categories are positive, negative and unknown""" + template = { + "prompt": "Below is an instruction that describes a task, paired with an input that provides further context. " + "Write a response that appropriately completes the request.\n\n" + "### Instruction:\n{instruction}\n\n### Input:\n{context}\n\n", + "completion": " {response}", + } + input_output_demarkation_key = "\n\n### Response:\n" def __init__(self, request_schema, response_path): self.request_schema = json.loads(request_schema) @@ -523,7 +545,11 @@ def replace_values(self, old_val, new_val, d: Dict[str, Any]): def transform_input(self, prompt: str, model_kwargs: Dict) -> bytes: request_obj = copy.deepcopy(self.request_schema) - self.replace_values("", prompt, request_obj) + input_prompt = self.template["prompt"].format( + instruction=prompt, context=self.context + ) + self.input_output_demarkation_key + self.replace_values("", input_prompt, request_obj) + request_obj['parameters'] = {"max_new_tokens": 100} request = json.dumps(request_obj).encode("utf-8") return request @@ -566,6 +592,7 @@ def __init__(self, *args, **kwargs): content_handler = JsonContentHandler( request_schema=request_schema, response_path=response_path ) + kwargs["endpoint_kwargs"] = {"CustomAttributes": "accept_eula=true"} super().__init__(*args, **kwargs, content_handler=content_handler) async def _acall(self, *args, **kwargs) -> Coroutine[Any, Any, str]: diff --git a/packages/jupyter-ai-magics/package.json b/packages/jupyter-ai-magics/package.json index fea5f845a..1339c4265 100644 --- a/packages/jupyter-ai-magics/package.json +++ b/packages/jupyter-ai-magics/package.json @@ -1,6 +1,6 @@ { "name": "@jupyter-ai/magics", - "version": "2.2.0", + "version": "2.2.12", "description": "Jupyter AI magics Python package. Not published on NPM.", "private": true, "homepage": "https://github.com/jupyterlab/jupyter-ai", From a3aaeb06021b59d0b9b47c4796bc11c2208efd8c Mon Sep 17 00:00:00 2001 From: Nazar Volosetskyy Date: Tue, 19 Sep 2023 13:33:09 -0400 Subject: [PATCH 02/10] update notebooks with breast ads preloading --- builds/clean/jupyter_ai_clean.ipynb | 20 +++++++++++++++++--- builds/enhanced/jupyter_ai.ipynb | 24 +++++++++++++++++++----- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/builds/clean/jupyter_ai_clean.ipynb b/builds/clean/jupyter_ai_clean.ipynb index 89f08e016..bceb83d18 100644 --- a/builds/clean/jupyter_ai_clean.ipynb +++ b/builds/clean/jupyter_ai_clean.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "5122a2de-489e-4a7c-854a-70a2f3227d3b", + "id": "0e50deb3-e694-4f4a-b863-f249e6a420c8", "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ { "cell_type": "code", "execution_count": null, - "id": "f0d07642-97ea-4c86-895b-437bf9f65389", + "id": "dd9c343d-8f2b-482f-a788-524d6376b14a", "metadata": {}, "outputs": [], "source": [ @@ -27,13 +27,27 @@ "metadata": {}, "outputs": [], "source": [ + "import pandas as pd\n", + "import boto3\n", + "region=\"us-west-2\"\n", "%load_ext jupyter_ai" ] }, + { + "cell_type": "code", + "execution_count": 4, + "id": "e3743ddb-19c7-4a17-8c13-888262b6e4cb", + "metadata": {}, + "outputs": [], + "source": [ + "# load Breast ADS\n", + "breast_ads = pd.read_parquet(\"s3://syapse-jupyterhub-sandbox/spotlight/breast/version=1694112485597/analytical_dataset/part-00000-0b0e8030-f7d3-453a-8c3e-9bdbbe460c19-c000.snappy.parquet\")" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "d93f13c1-25d9-4f47-b20e-a6fa8accd501", + "id": "620d974e-eba1-47e8-a505-1a1f0656cc62", "metadata": {}, "outputs": [], "source": [ diff --git a/builds/enhanced/jupyter_ai.ipynb b/builds/enhanced/jupyter_ai.ipynb index 38388400a..985b36ef8 100644 --- a/builds/enhanced/jupyter_ai.ipynb +++ b/builds/enhanced/jupyter_ai.ipynb @@ -3,7 +3,7 @@ { "cell_type": "code", "execution_count": null, - "id": "eac509e2-9523-4866-99dd-13f3fea9f066", + "id": "30b81351-62e9-49b2-a0c7-ff829b724613", "metadata": {}, "outputs": [], "source": [ @@ -13,7 +13,7 @@ { "cell_type": "code", "execution_count": null, - "id": "bb8dd810-7200-473a-b7ba-e608016f451e", + "id": "8fd5be27-6d1a-4138-bf3e-c0df902a4462", "metadata": {}, "outputs": [], "source": [ @@ -22,18 +22,32 @@ }, { "cell_type": "code", - "execution_count": 3, - "id": "dd6581da-b908-4b6e-8d8b-deb8a8b6a54b", + "execution_count": null, + "id": "3343f17d-c6a9-4a92-8685-dba9019854ed", "metadata": {}, "outputs": [], "source": [ + "import pandas as pd\n", + "import boto3\n", + "region=\"us-west-2\"\n", "%load_ext jupyter_ai" ] }, + { + "cell_type": "code", + "execution_count": 5, + "id": "8fdde016-0a63-4aad-9c09-d6cc7e92e91f", + "metadata": {}, + "outputs": [], + "source": [ + "# load Breast ADS\n", + "breast_ads = pd.read_parquet(\"s3://syapse-jupyterhub-sandbox/spotlight/breast/version=1694112485597/analytical_dataset/part-00000-0b0e8030-f7d3-453a-8c3e-9bdbbe460c19-c000.snappy.parquet\")" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "795c855c-54f6-466b-9bbb-04eed92711ae", + "id": "ec07f295-25bd-4903-894e-30d9f6ccd806", "metadata": {}, "outputs": [], "source": [ From 9a00bf3da44728765af724ec36a68f04a12d8a0e Mon Sep 17 00:00:00 2001 From: Nazar Volosetskyy Date: Tue, 19 Sep 2023 14:16:55 -0400 Subject: [PATCH 03/10] upd notebooks --- builds/clean/jupyter_ai_clean.ipynb | 4 ++-- builds/enhanced/jupyter_ai.ipynb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/builds/clean/jupyter_ai_clean.ipynb b/builds/clean/jupyter_ai_clean.ipynb index bceb83d18..9e228a706 100644 --- a/builds/clean/jupyter_ai_clean.ipynb +++ b/builds/clean/jupyter_ai_clean.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install jupyter_ai[all]" + "!pip install s3fs" ] }, { @@ -17,7 +17,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install ./jupyter_ai_magics-2.2.12-py3-none-any.whl --no-cache-dir" + "!pip install jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" ] }, { diff --git a/builds/enhanced/jupyter_ai.ipynb b/builds/enhanced/jupyter_ai.ipynb index 985b36ef8..6fec98996 100644 --- a/builds/enhanced/jupyter_ai.ipynb +++ b/builds/enhanced/jupyter_ai.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install jupyter_ai[all]" + "!pip install s3fs" ] }, { @@ -17,7 +17,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" + "!pip install jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" ] }, { From 15fe7e8b9c33e088c80bc874917c34c5c6218905 Mon Sep 17 00:00:00 2001 From: Nazar Volosetskyy Date: Wed, 20 Sep 2023 10:40:12 -0400 Subject: [PATCH 04/10] adding aydar-ai alias to the notebooks --- builds/clean/jupyter_ai_clean.ipynb | 30 +++++++---------------------- builds/enhanced/jupyter_ai.ipynb | 30 +++++++---------------------- 2 files changed, 14 insertions(+), 46 deletions(-) diff --git a/builds/clean/jupyter_ai_clean.ipynb b/builds/clean/jupyter_ai_clean.ipynb index 9e228a706..822db03ec 100644 --- a/builds/clean/jupyter_ai_clean.ipynb +++ b/builds/clean/jupyter_ai_clean.ipynb @@ -1,15 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "0e50deb3-e694-4f4a-b863-f249e6a420c8", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install s3fs" - ] - }, { "cell_type": "code", "execution_count": null, @@ -17,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" + "!pip install s3fs && jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" ] }, { @@ -30,18 +20,12 @@ "import pandas as pd\n", "import boto3\n", "region=\"us-west-2\"\n", - "%load_ext jupyter_ai" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "e3743ddb-19c7-4a17-8c13-888262b6e4cb", - "metadata": {}, - "outputs": [], - "source": [ + "# load jupyter_ai\n", + "%load_ext jupyter_ai\n", + "# Register alias\n", + "%ai register raydar-ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-19-20-22-39-442\n", "# load Breast ADS\n", - "breast_ads = pd.read_parquet(\"s3://syapse-jupyterhub-sandbox/spotlight/breast/version=1694112485597/analytical_dataset/part-00000-0b0e8030-f7d3-453a-8c3e-9bdbbe460c19-c000.snappy.parquet\")" + "breast_ads = pd.read_parquet(\"s3://syapse-deidentify-emr-data/deidentify/ads/breast.parquet\")" ] }, { @@ -51,7 +35,7 @@ "metadata": {}, "outputs": [], "source": [ - "%%ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-19-14-08-22-466 --region-name=us-west-2 --request-schema={\"inputs\":\"\"} --response-path=[0].generation -f code\n", + "%%ai raydar-ai --region-name=us-west-2 --request-schema={\"inputs\":\"\"} --response-path=[0].generation -f code\n", "find me patients who are female" ] } diff --git a/builds/enhanced/jupyter_ai.ipynb b/builds/enhanced/jupyter_ai.ipynb index 6fec98996..5b0c1290e 100644 --- a/builds/enhanced/jupyter_ai.ipynb +++ b/builds/enhanced/jupyter_ai.ipynb @@ -1,15 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "30b81351-62e9-49b2-a0c7-ff829b724613", - "metadata": {}, - "outputs": [], - "source": [ - "!pip install s3fs" - ] - }, { "cell_type": "code", "execution_count": null, @@ -17,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" + "!pip install s3fs && jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" ] }, { @@ -30,18 +20,12 @@ "import pandas as pd\n", "import boto3\n", "region=\"us-west-2\"\n", - "%load_ext jupyter_ai" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "8fdde016-0a63-4aad-9c09-d6cc7e92e91f", - "metadata": {}, - "outputs": [], - "source": [ + "# load jupyter_ai\n", + "%load_ext jupyter_ai\n", + "# Register alias\n", + "%ai register raydar-ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-19-20-22-39-442\n", "# load Breast ADS\n", - "breast_ads = pd.read_parquet(\"s3://syapse-jupyterhub-sandbox/spotlight/breast/version=1694112485597/analytical_dataset/part-00000-0b0e8030-f7d3-453a-8c3e-9bdbbe460c19-c000.snappy.parquet\")" + "breast_ads = pd.read_parquet(\"s3://syapse-deidentify-emr-data/deidentify/ads/breast.parquet\")" ] }, { @@ -51,7 +35,7 @@ "metadata": {}, "outputs": [], "source": [ - "%%ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-19-14-08-22-466 --region-name=us-west-2 --request-schema={\"inputs\":\"\"} --response-path=[0].generation -f code\n", + "%%ai raydar-ai --region-name=us-west-2 --request-schema={\"inputs\":\"\"} --response-path=[0].generation -f code\n", "Below is an instruction that describes a task, paired with an input that provides further context.\n", "Write a response that appropriately completes the request.\n", "### Instruction:\n", From d5de860c64cd5e59cb416f4d7c98c869bba91dc0 Mon Sep 17 00:00:00 2001 From: Nazar Volosetskyy Date: Wed, 20 Sep 2023 14:33:53 -0400 Subject: [PATCH 05/10] adding ads fields flattening --- .../jupyter_ai_magics-2.2.13-py3-none-any.whl | Bin 0 -> 22474 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 builds/clean/jupyter_ai_magics-2.2.13-py3-none-any.whl diff --git a/builds/clean/jupyter_ai_magics-2.2.13-py3-none-any.whl b/builds/clean/jupyter_ai_magics-2.2.13-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..91109fcb3b7d5df9b208197fc5aab565826928b0 GIT binary patch literal 22474 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 Date: Wed, 20 Sep 2023 14:34:49 -0400 Subject: [PATCH 06/10] adding ads fields flattening --- builds/clean/jupyter_ai_clean.ipynb | 8 ++++++-- .../jupyter_ai_magics-2.2.12-py3-none-any.whl | Bin 22352 -> 0 bytes .../jupyter_ai_magics/utils.py | 13 +++++++++++++ packages/jupyter-ai-magics/package.json | 2 +- 4 files changed, 20 insertions(+), 3 deletions(-) delete mode 100644 builds/clean/jupyter_ai_magics-2.2.12-py3-none-any.whl diff --git a/builds/clean/jupyter_ai_clean.ipynb b/builds/clean/jupyter_ai_clean.ipynb index 822db03ec..05c5ba017 100644 --- a/builds/clean/jupyter_ai_clean.ipynb +++ b/builds/clean/jupyter_ai_clean.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install s3fs && jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.10-py3-none-any.whl --no-cache-dir" + "!pip install s3fs && jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.13-py3-none-any.whl --no-cache-dir" ] }, { @@ -19,13 +19,17 @@ "source": [ "import pandas as pd\n", "import boto3\n", + "from jupyter_ai_magics.utils import explode_columns\n", "region=\"us-west-2\"\n", "# load jupyter_ai\n", "%load_ext jupyter_ai\n", "# Register alias\n", "%ai register raydar-ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-19-20-22-39-442\n", "# load Breast ADS\n", - "breast_ads = pd.read_parquet(\"s3://syapse-deidentify-emr-data/deidentify/ads/breast.parquet\")" + "breast_ads_orig = pd.read_parquet(\n", + " \"s3://syapse-deidentify-emr-data/deidentify/ads/breast.parquet\",\n", + " columns=['birth_date_year', 'has_family_history_cancer', 'marital_status', 'brca_reported_status', 'deceased_date', 'diagnosis_date', 'diagnosis_date_year', 'er_status_diagnosis', 'ethnicity', 'grade', 'her2_status_diagnosis', 'histology_group', 'icdo3_topography', 'insurance_status_dx', 'menopausal_status_diagnosis', 'packsperday', 'patientid', 'pr_status_diagnosis', 'prioritized_stage_group_dx', 'race', 'region', 'sex', 'smoking_pack_years', 'smoking_years', 'vital_status', 'systemic_therapy', 'her2_biomarker_data', 'hrd_biomarker_data'])\n", + "breast_ads = explode_columns(breast_ads_orig, ['systemic_therapy', 'her2_biomarker_data', 'hrd_biomarker_data'])" ] }, { diff --git a/builds/clean/jupyter_ai_magics-2.2.12-py3-none-any.whl b/builds/clean/jupyter_ai_magics-2.2.12-py3-none-any.whl deleted file mode 100644 index e6673a045f75e74720125bcb740d1082ecb258c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22352 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 diff --git a/packages/jupyter-ai-magics/jupyter_ai_magics/utils.py b/packages/jupyter-ai-magics/jupyter_ai_magics/utils.py index 6a02c61c8..cd017dfdc 100644 --- a/packages/jupyter-ai-magics/jupyter_ai_magics/utils.py +++ b/packages/jupyter-ai-magics/jupyter_ai_magics/utils.py @@ -1,5 +1,6 @@ import logging from typing import Dict, Optional, Tuple, Type, Union +from pandas import json_normalize from importlib_metadata import entry_points from jupyter_ai_magics.aliases import MODEL_ID_ALIASES @@ -13,6 +14,18 @@ ProviderDict = Dict[str, AnyProvider] +def explode_column(df, col_name): + df2 = df.explode(col_name) + df3 = json_normalize(df2[col_name].tolist()) + return df2.join(df3) + +def explode_columns(df, columns): + new_df = df + for col_name in columns: + new_df = explode_column(new_df, col_name) + return new_df + + def get_lm_providers(log: Optional[Logger] = None) -> LmProvidersDict: if not log: log = logging.getLogger() diff --git a/packages/jupyter-ai-magics/package.json b/packages/jupyter-ai-magics/package.json index 1339c4265..2ff49fdc9 100644 --- a/packages/jupyter-ai-magics/package.json +++ b/packages/jupyter-ai-magics/package.json @@ -1,6 +1,6 @@ { "name": "@jupyter-ai/magics", - "version": "2.2.12", + "version": "2.2.13", "description": "Jupyter AI magics Python package. Not published on NPM.", "private": true, "homepage": "https://github.com/jupyterlab/jupyter-ai", From eaf1ec90bdb865f384081f2236bea2734a811c5c Mon Sep 17 00:00:00 2001 From: Nazar Volosetskyy Date: Wed, 20 Sep 2023 15:11:58 -0400 Subject: [PATCH 07/10] upd pip install line and --force-reinstall --- builds/clean/jupyter_ai_clean.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/builds/clean/jupyter_ai_clean.ipynb b/builds/clean/jupyter_ai_clean.ipynb index 05c5ba017..cae89d118 100644 --- a/builds/clean/jupyter_ai_clean.ipynb +++ b/builds/clean/jupyter_ai_clean.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install s3fs && jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.13-py3-none-any.whl --no-cache-dir" + "!pip install s3fs && pip install jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.13-py3-none-any.whl --no-cache-dir --force-reinstall" ] }, { From 53f1b567a9751430134e336e756fc0f64b2a45ed Mon Sep 17 00:00:00 2001 From: Nazar Volosetskyy Date: Wed, 20 Sep 2023 17:06:23 -0400 Subject: [PATCH 08/10] jupyter_ai_magics-2.2.17 and patientId==patientid --- builds/clean/jupyter_ai_clean.ipynb | 10 ++- .../jupyter_ai_magics/utils.py | 78 +++++++++++++++++++ packages/jupyter-ai-magics/package.json | 2 +- 3 files changed, 85 insertions(+), 5 deletions(-) diff --git a/builds/clean/jupyter_ai_clean.ipynb b/builds/clean/jupyter_ai_clean.ipynb index cae89d118..7c5732917 100644 --- a/builds/clean/jupyter_ai_clean.ipynb +++ b/builds/clean/jupyter_ai_clean.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "!pip install s3fs && pip install jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.13-py3-none-any.whl --no-cache-dir --force-reinstall" + "!pip install s3fs && pip install jupyter_ai[all] && pip install ./jupyter_ai_magics-2.2.17-py3-none-any.whl --no-cache-dir --force-reinstall" ] }, { @@ -19,16 +19,18 @@ "source": [ "import pandas as pd\n", "import boto3\n", - "from jupyter_ai_magics.utils import explode_columns\n", + "from jupyter_ai_magics.utils import explode_columns, load_make_plots\n", "region=\"us-west-2\"\n", "# load jupyter_ai\n", "%load_ext jupyter_ai\n", "# Register alias\n", - "%ai register raydar-ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-19-20-22-39-442\n", + "%ai register raydar-ai sagemaker-endpoint:meta-textgeneration-llama-2-7b-2023-09-20-19-24-48-464\n", "# load Breast ADS\n", "breast_ads_orig = pd.read_parquet(\n", " \"s3://syapse-deidentify-emr-data/deidentify/ads/breast.parquet\",\n", " columns=['birth_date_year', 'has_family_history_cancer', 'marital_status', 'brca_reported_status', 'deceased_date', 'diagnosis_date', 'diagnosis_date_year', 'er_status_diagnosis', 'ethnicity', 'grade', 'her2_status_diagnosis', 'histology_group', 'icdo3_topography', 'insurance_status_dx', 'menopausal_status_diagnosis', 'packsperday', 'patientid', 'pr_status_diagnosis', 'prioritized_stage_group_dx', 'race', 'region', 'sex', 'smoking_pack_years', 'smoking_years', 'vital_status', 'systemic_therapy', 'her2_biomarker_data', 'hrd_biomarker_data'])\n", + "breast_ads_orig['patientId'] = breast_ads_orig['patientid']\n", + "make_plots = load_make_plots(breast_ads_orig)\n", "breast_ads = explode_columns(breast_ads_orig, ['systemic_therapy', 'her2_biomarker_data', 'hrd_biomarker_data'])" ] }, @@ -40,7 +42,7 @@ "outputs": [], "source": [ "%%ai raydar-ai --region-name=us-west-2 --request-schema={\"inputs\":\"\"} --response-path=[0].generation -f code\n", - "find me patients who are female" + "Find breast cacer patients that are HER2 negative and create plots" ] } ], diff --git a/packages/jupyter-ai-magics/jupyter_ai_magics/utils.py b/packages/jupyter-ai-magics/jupyter_ai_magics/utils.py index cd017dfdc..0fec3a998 100644 --- a/packages/jupyter-ai-magics/jupyter_ai_magics/utils.py +++ b/packages/jupyter-ai-magics/jupyter_ai_magics/utils.py @@ -7,6 +7,11 @@ from jupyter_ai_magics.embedding_providers import BaseEmbeddingsProvider from jupyter_ai_magics.providers import BaseProvider +import plotly.express as px +import plotly.graph_objects as go +import pandas as pd + + Logger = Union[logging.Logger, logging.LoggerAdapter] LmProvidersDict = Dict[str, BaseProvider] EmProvidersDict = Dict[str, BaseEmbeddingsProvider] @@ -14,6 +19,79 @@ ProviderDict = Dict[str, AnyProvider] +def genSankey(df,cat_cols=[],value_cols='',title='Sankey Diagram'): + # maximum of 6 value cols -> 6 colors + colorPalette = ['#4B8BBE','#306998','#FFE873','#FFD43B','#646464'] + labelList = [] + colorNumList = [] + for catCol in cat_cols: + labelListTemp = list(set(df[catCol].values)) + colorNumList.append(len(labelListTemp)) + labelList = labelList + labelListTemp + + # remove duplicates from labelList + labelList = list(dict.fromkeys(labelList)) + + # define colors based on number of levels + colorList = [] + for idx, colorNum in enumerate(colorNumList): + colorList = colorList + [colorPalette[idx]]*colorNum + + # transform df into a source-target pair + for i in range(len(cat_cols)-1): + if i==0: + sourceTargetDf = df[[cat_cols[i],cat_cols[i+1],value_cols]] + sourceTargetDf.columns = ['source','target','count'] + else: + tempDf = df[[cat_cols[i],cat_cols[i+1],value_cols]] + tempDf.columns = ['source','target','count'] + sourceTargetDf = pd.concat([sourceTargetDf,tempDf]) + sourceTargetDf = sourceTargetDf.groupby(['source','target']).agg({'count':'sum'}).reset_index() + + # add index for source-target pair + sourceTargetDf['sourceID'] = sourceTargetDf['source'].apply(lambda x: labelList.index(x)) + sourceTargetDf['targetID'] = sourceTargetDf['target'].apply(lambda x: labelList.index(x)) + + # creating the sankey diagram + data = dict( + type='sankey', + node = dict( + pad = 15, + thickness = 20, + line = dict( + color = "black", + width = 0.5 + ), + label = labelList, + color = colorList + ), + link = dict( + source = sourceTargetDf['sourceID'], + target = sourceTargetDf['targetID'], + value = sourceTargetDf['count'] + ) + ) + + layout = dict( + title = title, + font = dict( + size = 10 + ) + ) + + fig = dict(data=[data], layout=layout) + return go.Figure(fig) + +def load_make_plots(breast_ads_orig): + def make_plots(patients): + breast_ads_plot = breast_ads_orig[breast_ads_orig['patientId'].isin( patients)] + fig = px.histogram(breast_ads_plot, x="diagnosis_date") + fig.show() + breast_ads_plot['count']=1 + fig = genSankey(breast_ads_plot, cat_cols=['region','race','icdo3_topography' ],value_cols='count', title="Population Characteristics") + fig.show() + return make_plots + def explode_column(df, col_name): df2 = df.explode(col_name) df3 = json_normalize(df2[col_name].tolist()) diff --git a/packages/jupyter-ai-magics/package.json b/packages/jupyter-ai-magics/package.json index 2ff49fdc9..dda1cd091 100644 --- a/packages/jupyter-ai-magics/package.json +++ b/packages/jupyter-ai-magics/package.json @@ -1,6 +1,6 @@ { "name": "@jupyter-ai/magics", - "version": "2.2.13", + "version": "2.2.17", "description": "Jupyter AI magics Python package. Not published on NPM.", "private": true, "homepage": "https://github.com/jupyterlab/jupyter-ai", From 2dded4b6bc0143bf9a909a2a3f00f8a6cb89c91c Mon Sep 17 00:00:00 2001 From: Nazar Volosetskyy Date: Wed, 20 Sep 2023 17:07:03 -0400 Subject: [PATCH 09/10] jupyter_ai_magics-2.2.17 and patientId==patientid --- .../jupyter_ai_magics-2.2.13-py3-none-any.whl | Bin 22474 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 builds/clean/jupyter_ai_magics-2.2.13-py3-none-any.whl diff --git a/builds/clean/jupyter_ai_magics-2.2.13-py3-none-any.whl b/builds/clean/jupyter_ai_magics-2.2.13-py3-none-any.whl deleted file mode 100644 index 91109fcb3b7d5df9b208197fc5aab565826928b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22474 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 Date: Wed, 20 Sep 2023 17:08:52 -0400 Subject: [PATCH 10/10] jupyter_ai_magics-2.2.17 --- .../jupyter_ai_magics-2.2.17-py3-none-any.whl | Bin 0 -> 23399 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 builds/clean/jupyter_ai_magics-2.2.17-py3-none-any.whl diff --git a/builds/clean/jupyter_ai_magics-2.2.17-py3-none-any.whl b/builds/clean/jupyter_ai_magics-2.2.17-py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..8f4f6b5807385642ff7f2d2a2d988cb656ac03ff GIT binary patch literal 23399 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